![]() |
Linux, Lazarus und OpenGL
Hallo,
ich habe mittlerweile mein OpenGL-Plugin für Andorra 2D einigermaßen zum Rennen gebracht (Licht und Indexbuffer gehen noch nicht). Jetzt möchte ich das Ganze auch unter Linux zum Laufen bringen. Momentan initialisiere ich OpenGL so:
Delphi-Quellcode:
Leider sind diese Funktionen in der Unit "Windows".
FDC := GetDC(AWnd); //AWnd ist ein Handle auf ein Fenster
FRC := CreateRenderingContext(FDC,etc.); ActivateRenderingContext(FRC); Wie kann ich dies unter Linux erreichen? Ich finde irgendwie nur Beispiele, die mit GLUT ein eigenes Fenster erzeugen. Ich hoffe ihr habt eine Lösung, igel457 |
Re: Linux, Lazarus und OpenGL
Unter Linux gibts keine Handles. Am besten, du steigst auf SDL um.
|
Re: Linux, Lazarus und OpenGL
Es muss doch möglich sein, ein OpenGL Rendering-Context beschränkt auf ein einziges Control zu erstellen...
|
Re: Linux, Lazarus und OpenGL
Unter Windows ja, unter Linux weiß ich es nicht. Ich könnte mir vorstellen, dass OpenGL-Render-Kontexte dort sehr viel anders gehandhabt werden als unter Windows, wo sie ja ein Handle haben. Zur Not musst du mit {$IFDEF Windows} arbeiten und ne Linux-Lösung extra finden.
|
Re: Linux, Lazarus und OpenGL
Ich schau mal im GLScene Sourcecode. Die machens ja auch irgendwie...
Edit: So funktionierts bei GLScene. Ich denke doch mal, dass outputDevice das Handle ist...
Delphi-Quellcode:
procedure TGLLinuxContext.DoCreateContext(outputDevice : Cardinal);
var winattr: XWindowAttributes; vitemp: xlib.XVisualInfo; nret: Integer; glwin: Cardinal; vi: xlib.PXvisualInfo; begin // Just in case it didn't happen already. if not InitOpenGL then RaiseLastOSError; { Create OpenGL context } FOutputDevice := QWidgetH(outputDevice); glwin := QWidget_winId(FOutputDevice); xlib.XGetWindowAttributes(Application.Display, glwin, @winattr); vitemp.visual := winattr.visual; vitemp.visualid := XVisualIDFromVisual(vitemp.visual); vi := XGetVisualInfo(Application.Display, VisualIDMask, @vitemp, @nret); FRenderingContext := glXCreateContext(Application.Display, vi, nil, True); if RenderingContext = nil then raise Exception.Create('Failed to create rendering context'); if RenderingContext = GLX_BAD_CONTEXT then raise Exception.Create('bad context'); end; |
Re: Linux, Lazarus und OpenGL
Als ich arbeite jetzt einiger Zeit mit Lazarus Unter Linux:
es gibt Handle und auch die nötigen Funktionen dazu. Sie stehen nur nicht in der Windows unit drin sondern wo anders. Wenn es nur um die Handle geht igel457 dann könntest du evlt. das auch so machen:
Delphi-Quellcode:
Es gibt glaube ich ein Beispiel zu OpenGL im Lazarus Ordner. Unter Demos oder so ähnlich
FDC :=Form1.Canvas.Handle //AWnd ist ein Handle auf ein Fenster
// Was das hier ist weiß ich nicht genau evlt. kannst du hier das gleiche wie in FDC rein schreiben. FRC := CreateRenderingContext(FDC,etc.); ActivateRenderingContext(FRC); |
Re: Linux, Lazarus und OpenGL
Zitat:
|
Re: Linux, Lazarus und OpenGL
schau dir mal das demo hier an:
/usr/lib/lazarus_neu/examples/openglcontrol dort wird OpenGL genutzt. Kann sein das die Prozeduren hier anders heißen und auch wo anders drin sind. also in einer anderen Unit. schade ich finde die eine Hilfe von monta mit der such Funktion nicht wieder. aber gehe mal auf ![]() oder suche mal mit grep nach diese Procedure |
Re: Linux, Lazarus und OpenGL
Das Openglcontrol habe ich schon gesehen, ich bekomme es unter Linux aber nicht installiert. Ich habe das Ganze mittlerweile so weit zum Laufen gebracht, dass es Kompiliert. Allerdings stürzt das Programm sofort ab. Debuggen konnte ich das Ganze allerdings auch nicht, da unter der Verwendung von GDB nicht mehr nur mein Programm, sondern ganz Lazarus abstürzt. Neuere Version von Lazarus/GDB konnte ich allerdings auch nicht installieren, da mein WLAN-Karten-Treiber unter Linux kein WEP unterstützt und ich somit nicht ins Internet konnte.
|
Re: Linux, Lazarus und OpenGL
Ist ja seltsam.
Hast du alle Packte installiert ? welches Linux hast du ? stelle die Frage mal im Lazarus Forum. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz