Marco van de Voort wrote 7 lines
> Q: how am I supposed to initialize OpenGL when using units provided by FPC?
The unit does has as disadvantage that the filename
can't be changed (or at least that first try can't be avoided).
After that, you iirc need to do load<something with glversion> from unit
glext to load the extensions for later versions.
Thanks Marco.
I didn't quite understand what is load<something with glversion>.
My experiments advance slowly. The original DeleD code validate OpenGL by checking if
@glActiveTextureARB, @glClientActiveTextureARB and @glMultiTexCoord2fARB are assigned.
With dglopengl it stops working when I replace
H_RC := wglCreateContext(H_DC);
with the cross-platform OpenGLContext:
fOpenGLControl1:=TOpenGLControl.Create(Self);
and replace
wglMakeCurrent(H_DC, H_RC);
with
OpenGLControl1.MakeCurrent;
When using GLExt (provided by FPC), the test still fails but then I can remove it and the code does not crash later.
So, maybe it is better to use GL and GLExt.
If I put the same test in the OpenGlControl demo in Lazarus, it does not fail! I don't see what makes the difference.
Cross-platform OpenGL still does not work though. Deled 3-D uses form inheritance and all forms needing OpenGL drawing window inherit from TOGLForm. I copy below the Create method where I had to comment out most code to make it compile.
I create fOpenGLControl1 the same way than in the Lazarus example, but I don't know what to put into the OnPaint and OnResize event handlers. Now the code does not crash but obviously does not draw anything either.
I guess I must study the topic more. I will commit my code to the DeleD SVN branch although it is broken. Maybe someone could have a ,
Juha
----------------------------
constructor TOGLForm.Create(AOwner: TComponent);
//var PixelFormat: Integer;
// our windows pixel format
// PFD: PixelFormatDescriptor;
// describes the pixel format
begin
inherited;
Initialize;
Set8087CW($133f); // disable fpu exceptions when doing OpenGL rendering
//ZeroMemory(@PFD, SizeOf(PFD));
// describe our Pixel Format Descriptor
//with PFD do begin
// nSize := SizeOf(PFD);
// nVersion := 1;
// dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER or 0;
// iPixelType := PFD_TYPE_RGBA;
// cColorBits := 16;
// cDepthBits := 16;
//end;
// now set pixel format + initialize rendering context
//H_DC := Canvas.Handle;
//PixelFormat := ChoosePixelFormat(H_DC, @PFD);
// choose a pixel format based on our description
//if PixelFormat = 0 then begin
// KillWindow;
// MessageBox(0, 'Unable to choose pixel format', 'Error',
MB_OK or MB_ICONERROR);
// Exit;
//end;
//if not SetPixelFormat(H_DC, PixelFormat, @PFD) then begin
// attach the pixel format to the window
// KillWindow;
// MessageBox(0, 'Unable to set pixel format', 'Error', MB_OK
or MB_ICONERROR);
// Exit;
//end;
//H_RC := wglCreateContext(H_DC);
// get the rendering context handle
//if H_RC = 0 then begin
// KillWindow;
// MessageBox(0, 'Unable to create rendering context', 'Error',
MB_OK or MB_ICONERROR);
// Exit;
//end;
//ActivateRenderingContext(H_DC,H_RC);
fOpenGLControl1:=TOpenGLControl.Create(Self);
with fOpenGLControl1 do begin
Name:='OpenGLControl1';
Parent:=Self;
SetBounds(10,90,380,200);
;
;
end;
if not fOpenGLControl1.MakeCurrent then begin
// initialize the endering context
KillWindow;
MessageBox(0, 'Unable to activate rendering context', 'Error',
MB_OK or MB_ICONERROR);
Exit;
end;
end;