Mehrere Fenster in OpenGL?

8

Ist es möglich OpenGL in 2 Fenstern zu haben? wie in 2 verschiedenen Fenstern (sagen wir die erste ist 640x480 und die andere ist 1024x768) Rendern verschiedener Dinge (sagen wir, ein Fenster ist ein Editor und das andere ist die Haupt / normale Fensteranzeige)

    
cletus 17.01.2009, 04:41
quelle

5 Antworten

10

Wenn Sie GLUT verwenden, können Sie mit den glutSetWindow () / glutGetWindow () -Aufrufen das richtige Fenster auswählen (nachdem Sie sie mit glutCreateSubWindow () erstellt haben). Manchmal ist GLUT jedoch nicht das richtige Werkzeug für den Job.

Wenn Sie unter Windows arbeiten, sollten Sie in die wglMakeCurrent () und wglCreateContext () schauen. Auf OS X gibt es aglSetCurrentContext () und so weiter, und X11 erfordert glXMakeCurrent ().

Diese Funktionen aktivieren den aktuellen OpenGL-Kontext, in den Sie rendern können. Jede plattformspezifische Bibliothek hat ihre eigenen Möglichkeiten, ein Fenster zu erstellen und einen OpenGL-Kontext daran zu binden.

Unter Windows, nachdem Sie HWND und HDC für ein Fenster erworben haben (nach einem CreateWindow- und GetDC-Aufruf). Im Allgemeinen machen Sie so etwas, um OpenGL einzurichten:

%Vor%

Sie verwenden diesen Code, um mehrere Fenster zu erstellen und OpenGL an sie zu binden. Jedes Mal, wenn Sie in ein bestimmtes Fenster zeichnen wollen, müssen Sie wglMakeCurrent aufrufen, bevor Sie etwas tun und die Parameter übergeben entsprechend diesem Fenster.

Als Nebenbemerkung erlaubt OpenGL Ihnen, bestimmte Daten zwischen verschiedenen Kontexten freizugeben, aber laut Spezifikation sind die Daten, die Sie freigeben können, ziemlich begrenzt. In den meisten Betriebssystemen können Sie jedoch mehr Daten freigeben als in der Spezifikation angegeben.

    
Jasper Bekkers 17.01.2009, 05:01
quelle
9

Ja, das ist möglich. Für jedes Fenster müssen Sie einen eindeutigen Gerätekontext und einen Renderkontext erstellen.

%Vor%

Bevor Sie GL-Aufrufe an das Fenster senden, müssen Sie wglMakeCurrent wie folgt aufrufen:

%Vor%     
postfuturist 17.01.2009 05:03
quelle
4

Unter Windows können Sie OpenGL-Objekte wie Texturen und Shader mit wglShareLists () teilen. . Es teilt normalerweise alles, was Sie interessieren, trotz was MSDN sagt.

    
Richard Viney 17.01.2009 12:07
quelle
1

Ich habe schon mehrere OpenGL-Fenster in einer MFC-Anwendung gemacht. Hier ist eine Klasse, die Sie vielleicht nützlich finden: Da es im UI-Thread immer nur einen aktuellen Renderkontext geben kann, habe ich einen Klassenwrapper geschrieben, um die Verwaltung zu vereinfachen.

SpeichernRestoreRC.h

// this class helps to manage multiple RCs using an RAII design pattern

%Vor%

SaveRestoreRC.cpp:

%Vor%

Leiten Sie nun eine Klasse von CWnd ab und fügen Sie diese Membervariablen hinzu:

%Vor%

Verwenden Sie in jeder Memberfunktion, in der Sie ANY OpenGL-Befehle aufrufen, CSaveRestoreRC, damit Ihr aktueller Renderkontext nicht durcheinander gerät.

%Vor%

    
user244795 16.06.2011 21:06
quelle
-1

Wenn Sie nur die Bibliothek mit dem Überschwang verwenden möchten, schauen Sie sich bitte einen Code an Eric Stringer .

%Vor%

Ich habe den Beispielcode unter Windows 7 ausgeführt, aber ich musste eine Zeile von glutIntit zu

ersetzen %Vor%     
Cloud Cho 10.03.2017 20:27
quelle

Tags und Links