Thank you thomas. Going to try to build the cross compiler this or next weekend.
Thank you thomas. Going to try to build the cross compiler this or next weekend.
http://3das.noeska.com - create adventure games without programming
You got an error if you cross compile it. There is a missing file, but this happens after building the cross compiler. In /tmp/fpc-pack is the cross compiler and all compiled units for arm-linux. Copy them to fpc lib directory, mostly in /usr/lib/ or /usr/local/lib/, where the i386 files for fpc386 are.
I had changed in svn tree "packages/sdl/src/sdl_mixer.pas" before cross compiling, the unit smpeg not working under gp2x. Replace around line 450 this
with thisCode:{$IFNDEF DARWIN} 5 : ( mp3 : PSMPEG ); {$ENDIF}
Copy a local version of fpc.cfg to your develop directory and add following lines to it:Code:{$IFNDEF DARWIN} {$IFNDEF no_smpeg} 5 : ( mp3 : PSMPEG ); {$ENDIF} {$ENDIF}
For gp2xwiz i have started to write an opengl es unit, which loads all functions dynamically, but i got an access exception on gp2xwiz, on windows it works now.Code:#ifdef GP2X #define gp2x #endif #ifdef gp2x #define GP2X #endif #ifdef gp2x #define no_smpeg -Fl/usr/local/devkits/gp2xdev/lib ##// <-- where you have installed you binutils for arm -XPgp2x- -Xd -Xr/usr/local/devkits/gp2xdev ##<-- where you have installed you binutils for arm #endif
Thomas
If you are also working on opengles libs then have a look on this thread: http://www.pascalgamedevelopment.com...p?topic=4909.0
http://3das.noeska.com - create adventure games without programming
Thanks, i found your post last week.
I take your egl.pas and egltypes.pas, rewrite egl.pas using dynamically loading of functions, for better testing, which functions are found or not in installed library.
I have now three units, which load all opengl es function on gp2xwiz, and most, except 6, egl functions. On Windows i got your sample working, on gp2xwiz it breaks at moment. Maybe I get it running tomorrow.
Thomas
Ok, i have no idea why it doesn't work on gp2x wiz.
- I can compile and execute my opengl es program on wiz
- I get a device context
- I can call eglChooseConfig and get a valid configuration
But calling eglCreateWindowSurface failed with out an error message. The functions seems to be not returning, it terminate the application with out a message.
I have no access to the device, network or serial, so i couldn't debug it.
Thomas
Is it possible to write a log file to the sd card?
On the gamepark forums there are a few howto's on opengles:
http://www.gp32x.com/board/index.php...te-on-the-wiz/
PS does my example use float or integers. My current version uses integers as only that is supported by the mbx-lite.
http://3das.noeska.com - create adventure games without programming
I have read this thread and i init opengl es like them.
Code:procedure DoOpenGLES(); type TEGLAttribut = array[0..128] of EGLint; procedure AddAttribute(var iPos : Integer; var Attr : TEGLAttribut; aType, aValue : EGLInt); begin Attr[iPos] := aType; Inc(iPos); Attr[iPos] := aValue; Inc(iPos); end; var iMajorVersion : EGLint; iMinorVersion : EGLint; iLoop : Integer; iConfigs : integer; eglAttribs : TEGLAttribut; myeglDisplay : EGLDisplay; myeglConfig : EGLConfig; myeglSurface : EGLSurface; myeglContext : EGLContext; eglWindow : NativeWindowType; Info : TSDL_SysWMinfo; dc : LongWord; begin SDL_VERSION(Info.Version); if ( SDL_GetWMInfo(@Info) < 0 ) then begin raise Exception.Create('SDL_GetWMInfo failed!'); end; iMajorVersion := 0; iMinorVersion := 0; myeglDisplay := 0; myeglConfig := 0; myeglSurface := nil; myeglContext := nil; {$IFDEF WIN32} eglWindow := Info.window; dc := GetDC(eglWindow); if (dc = 0) then begin raise Exception.Create('GetDC failed!'); end; {$ELSE} nanoGL_Init(); eglWindow := OS_CreateWindow(); dc := 0; {$ENDIF} Log.Add(''); Log.Add('window handle is: %d', eglWindow); try myeglDisplay := eglGetDisplay(dc); if (myeglDisplay = EGL_BAD_DISPLAY) then begin raise Exception.Create('eglGetDisplay failed!'); end; if (eglInitialize(myeglDisplay, @iMajorVersion, @iMinorVersion) = 0) then begin raise Exception.Create('eglInitialize failed!'); end; iLoop := 0; AddAttribute(iLoop, eglAttribs, EGL_RED_SIZE, 5); AddAttribute(iLoop, eglAttribs, EGL_GREEN_SIZE, 6); AddAttribute(iLoop, eglAttribs, EGL_BLUE_SIZE, 5); AddAttribute(iLoop, eglAttribs, EGL_ALPHA_SIZE, 0); AddAttribute(iLoop, eglAttribs, EGL_SURFACE_TYPE, EGL_WINDOW_BIT); AddAttribute(iLoop, eglAttribs, EGL_NONE, 0); if (eglChooseConfig(myeglDisplay, @eglAttribs, @myeglConfig, 1, @iConfigs) = 0) then begin raise Exception.Create('eglChooseConfig failed!'); end; if (iConfigs = 0) then begin raise Exception.Create('No compatible open gl es mode found!'); end; myeglSurface := eglCreateWindowSurface(myeglDisplay, myeglConfig, eglWindow, nil); if (myeglSurface = nil) then begin if (eglWindow <> 0) then begin myeglSurface := eglCreateWindowSurface(myeglDisplay, myeglConfig, 0, @eglAttribs); end; if (myeglSurface = nil) then begin raise Exception.Create('eglCreateWindowSurface failed!'); end; end; myeglContext := eglCreateContext(myeglDisplay, myeglConfig, nil, nil); if (myeglContext = nil) then begin raise Exception.Create('myeglContext failed!'); end; Log.Add('EGL Init Completed'); eglMakeCurrent(myeglDisplay, myeglSurface, myeglSurface, myeglContext); for iLoop := 0 to Pred(100) do begin if ((iLoop mod 2) = 1) then begin glClearColor(0.6, 0.8, 1.0, 1.0); // clear blue end else begin glClearColor(1.0, 1.0, 0.66, 1.0); // clear yellow end; glClear(GL_COLOR_BUFFER_BIT); eglSwapBuffers(myeglDisplay, myeglSurface); SDL_Delay(10); end; finally if (myeglDisplay <> EGL_BAD_DISPLAY) then begin eglMakeCurrent(myeglDisplay, nil, nil, nil); // eglDestroySurface(myeglDisplay, myeglSurface); // eglDestroyContext(myeglDisplay, myeglContext); // eglTerminate(myeglDisplay); end; {$IFDEF WIN32} ReleaseDC(eglWindow, dc); {$ELSE} // {$ENDIF} end; end;I write a log file and after calling eglCreateWindowSurface it stops, no entry is written, that eglCreateWindowSurface was called. On Windows it works.Code:function eglCreateWindowSurface(dpy : EGLDisplay; config : EGLConfig; win: NativeWindowType; const attrib_list: PEGLint) : EGLSurface; begin if Assigned(peglCreateWindowSurface) then begin Result := peglCreateWindowSurface(dpy, config, win, attrib_list); Log.Add('eglCreateWindowSurface called'); Exit; end; raise Exception.CreateFmt(cmsgUnknowProc, ['eglCreateWindowSurface']); end;
So, it seems to be, that called function, in peglCreateWindowSurface, was not returning.
Thomas
It is past christmas and still no gamepark wiz delivered by the postman :-( . Luckily i did not pay in advance and opted to pay the postman when it is deliverd :-) .
For me i give up on the gamepark wiz and go with the beagleboard. Development for that goes a bit slow but hello world from freepascal works and so does dynamic calling libraries.
@KidPaddle are you sure the ogles .so files can be found from your application. I made mistakes with that ending up with the .so files not found and getting thing like you experience... If you have a hello world working you can use that to output text on screen whilst preparing opengles and detect what is happening ...
http://3das.noeska.com - create adventure games without programming
I'm sure. I load dynamically around 160 opengl es functions and i can call some of them. I will make a new try, someone has make a Ethernet over USB and now debugging is much easier.
Thomas
Bookmarks