Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Linux, Lazarus und OpenGL (https://www.delphipraxis.net/91102-linux-lazarus-und-opengl.html)

igel457 29. Apr 2007 16:13


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:
FDC := GetDC(AWnd); //AWnd ist ein Handle auf ein Fenster
FRC := CreateRenderingContext(FDC,etc.);
ActivateRenderingContext(FRC);
Leider sind diese Funktionen in der Unit "Windows".
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

3_of_8 29. Apr 2007 16:19

Re: Linux, Lazarus und OpenGL
 
Unter Linux gibts keine Handles. Am besten, du steigst auf SDL um.

igel457 29. Apr 2007 16:34

Re: Linux, Lazarus und OpenGL
 
Es muss doch möglich sein, ein OpenGL Rendering-Context beschränkt auf ein einziges Control zu erstellen...

3_of_8 29. Apr 2007 16:35

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.

igel457 29. Apr 2007 16:38

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;

mimi 4. Mai 2007 06:40

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:
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);
Es gibt glaube ich ein Beispiel zu OpenGL im Lazarus Ordner. Unter Demos oder so ähnlich

igel457 4. Mai 2007 13:49

Re: Linux, Lazarus und OpenGL
 
Zitat:

Zitat von Igel457
Leider sind diese Funktionen in der Unit "Windows".


mimi 4. Mai 2007 14:03

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
http://www.monta-n.net/lazarusforum/

oder suche mal mit grep nach diese Procedure

igel457 4. Mai 2007 14:36

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.

mimi 4. Mai 2007 15:25

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 02:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz