Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi OpenGL ohne ein Fenster realisieren ? (https://www.delphipraxis.net/119657-opengl-ohne-ein-fenster-realisieren.html)

turboPASCAL 29. Aug 2008 10:10


OpenGL ohne ein Fenster realisieren ?
 
Hi,

Gibt es eine Möglichkeit OpenGl-Darstellungen zu erzeugen ohne ein OpenGL-Window zu erzeugen ?
Kennt jmd eine ggf. andere Möglichkeit ?

Falls sich jmd fragt wozu man so etwas benötigt, für eine Vorschaufunktion.

littleDave 29. Aug 2008 14:15

Re: OpenGL ohne ein Fenster realisieren ?
 
Einen OpenGL-Renderkontext muss nicht unbedingt an ein Fenster gebunden sein. Du kannst als "Renderfeld" auch einfach ein TPanel setzten. Dafür musst du einfach beim erstellen des Render-Context das TPanel.Handle statt dem TForm.Handle übergeben. Natürlich solltest du dann noch beim Viewport und co die Größe des Panels und nicht der Form übergeben :zwinker:. Aber an sonsten ist OpenGL nicht an ein Fenster gebunden.

Aber Achtung: soweit ich weiß funktioniert OGL nicht mit jedem TWinControl. Ich glaub TImage und TPaintBox sind solche Kandidaten. Jedoch ein einfaches TPanel oder selbet etwas mit TCustomControl erstellen funktionieren. Worauf du aber noch achten solltest: Wenn du mehrere Render-Contexte in einer Anwendung haben willst, musst du beim Zeichnen mit wglMakeCurrent immer den aktuell zu zeichnenden Render-Context auswählen. Wenn alle Rendercontexte Zugriff auf die gleichen Texturen, DisplayListen usw. haben sollen, musst du die Inhalte der RCs nocht wglShareLists [oder so ähnlich] miteinander verbinden.

turboPASCAL 29. Aug 2008 14:45

Re: OpenGL ohne ein Fenster realisieren ?
 
Die Sache ist die, ich habe kein Fenster, Form oder ein Panel zur verfügung.

Ich möchte per OpenGL nur auf ein Bitmap rendern um es für eine Vorschau zur
Verfügung zu stellen.

Ich habe zur Zeit eine Version die auf ein nicht sichtbares Fenter rendert.
Diese Lösung scheint mir aber unsauber. :gruebel:

littleDave 29. Aug 2008 14:50

Re: OpenGL ohne ein Fenster realisieren ?
 
Ich glaub nicht, dass das geht. Der Render-Context braucht ein HWND-Handle um zu funktionieren. Ich glaub mit der unsichtbaren Form fährst du ganz gut.

turboPASCAL 30. Aug 2008 03:18

Re: OpenGL ohne ein Fenster realisieren ?
 
Juhuuuu ! Es klapt.

Man muss "nur" beim Pixelformatdescriptor PFD_DRAW_TO_BITMAP angeben.

Delphi-Quellcode:
// ...
  ZeroMemory(@pfd, sizeof(PIXELFORMATDESCRIPTOR));

  pfd.nSize     := sizeof(PIXELFORMATDESCRIPTOR);
  // ...
  pfd.dwFlags   := PFD_DRAW_TO_BITMAP or PFD_SUPPORT_OPENGL or PFD_SUPPORT_GDI;
// ...

sniper_w 30. Aug 2008 06:35

Re: OpenGL ohne ein Fenster realisieren ?
 
Zitat:

Zitat von littleDave
Einen OpenGL-Renderkontext muss nicht unbedingt an ein Fenster gebunden sein. Du kannst als "Renderfeld" auch einfach ein TPanel setzten. Dafür musst du einfach beim erstellen des Render-Context das TPanel.Handle statt dem TForm.Handle übergeben.

Aus Sicht des OS Windows ist das eine und die selbe Sache, nämlich ein Fenster.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.

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