Ja, klar geht das. Mache das z.Zt. auch. Eigentlich ist das garkeine besondere Sache. Du must einfach statt des Handles des Forms, das
Handle des Panels sowie dessen Grösseninformationen verwenden. Ich hab mir dazu eine Klasse geschrieben (welche aber noch nicht fertig ist), die die
OpenGL-Aktivitäten übernimmt. Alle zu rendernden statischen Elemente werden innerhalb dieser Klasse erledigt. Alle dynamischen in einem CallBackEvent im Form. Bei mir reicht es, dass die Inhalte bei OnIdle gerendert werden (2D / CAD-Zeichnung) in Spielen würde ich einen Timer (DX-Timer), QueryPerformanceCounter oder Thread verwenden.
Hier im Groben, wie es bei mir klappt.
Form.Create...
Code:
FOpenGL:= TOpenGL.Create(pView.Handle, OpenGLRenderCallBack);
Application.OnIdle:= ApplicationEventIdle;
Im OnIdle wird hier gerendert...
Der Konstructor meiner Klasse...
Code:
constructor TOpenGL.Create(WndHND: THandle; RenderCallBack: TNotifyEvent);
begin
inherited Create;
FRenderCallBack:= RenderCallBack;
FWnd:= WndHND;
FDC := GetDC(FWnd);
SetupPixelFormat;
FRC := wglCreateContext(FDC);
wglMakeCurrent(FDC, FRC);
glEnable(GL_DEPTH_TEST);
glLoadIdentity;
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
end;
Aber auch hier bei mir gibt's noch viele "todo's".
Grüsse!