Mehrere Fenster in OpenGL?
Ist es möglich, die openGL in 2 Fenstern? wie in 2 verschiedene windows (sagen wir das erste ist 640x480 und das andere ist 1024 x 768) - rendering von verschiedenen Dingen (sagen wir in einem der Fenster ist ein editor und der andere ist der Haupt - /normal-Fenster-Anzeige)
- Obwohl diese Frage ist sehr alt, es sollte angemerkt werden, dass die release-Verhalten von mehreren gemeinsamen Kontexten sollte berücksichtigt werden, da die sich ändernden Kontexten verursachen können teilweise oder sogar vollständig geleert. ("Flush" bedeutet, dass für alle opengl-Befehle ausgeführt werden, bevor die Rückkehr, das ist ein absoluter showstopper.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit GLUT können Sie die glutSetWindow() /glutGetWindow() aufrufen wählen Sie das richtige Fenster (nach dem erstellen Sie mit glutCreateSubWindow()). Aber manchmal GLUT ist vielleicht nicht das richtige tool für den job.
Wenn Sie arbeiten, auf Windows finden Sie in der wglMakeCurrent() und wglCreateContext(). Auf OS X gibt es aglSetCurrentContext() et cetera -, und X11 benötigt glXMakeCurrent().
Diejenigen Funktionen aktivieren, die aktuellen OpenGL-Kontext, zu dem Sie gerendert werden können. Jeweils Plattform-spezifische Bibliothek hat seine eigenen Wege, das erstellen eines Fensters und die Bindung eines OpenGL-Kontext zu.
Unter Windows, nachdem Sie erworben haben, Ihre HWND und HDC für ein Fenster (nach einem CreateWindow und GetDC nennen). Sie in der Regel tun, so etwas einzurichten OpenGL:
Verwenden Sie, dass der code zum erstellen mehrerer Fenster und binden Sie OpenGL, um es dann jeder Zeit, die Sie zeichnen möchten, die zu einem bestimmten Fenster zu nennen wglMakeCurrent vor Sie etwas tun und Sie übergeben die entsprechenden Parameter, die an das Fenster.
Als Randbemerkung, OpenGL ermöglicht die Freigabe von bestimmten Daten zwischen verschiedenen Kontexten, die jedoch, wie pro-spec Sie die Daten, die Sie teilen können, ist sehr begrenzt. Jedoch, die meisten Betriebssysteme ermöglichen die gemeinsame Nutzung von mehr Daten als angegeben in der Spezifikation.
Ja, das ist möglich. Für jedes Fenster müssen Sie einen einzigartige Gerätekontext-und render-Kontext.
Bevor Sie GL Anrufe, um das Fenster müssen Sie wglMakeCurrent wie diese:
Unter Windows können Sie teilen OpenGL-Objekte wie Texturen und Shader mit wglShareLists(). In der Regel teilen alles, was Sie interessieren würde, trotz allem, was MSDN dazu sagt.
Habe ich getan mehrere OpenGL-Fenster in einer MFC-Anwendung vor. Hier ist eine Klasse, die Sie nützlich finden könnten: da kann es nur einen aktuellen render-Kontext, in dem UI-thread auf ein mal habe ich eine wrapper-Klasse, um die Verwaltung einfacher.
SaveRestoreRC.h
//this class helps to manage multiple RCs using an RAII design pattern
SaveRestoreRC.cpp:
Nun leiten Sie eine Klasse von CWnd abgeleitet und fügen Sie diese member-Variablen:
Dann in jedem member-Funktion, wo Sie anrufen, ALLE OpenGL-Befehle verwenden CSaveRestoreRC, so dass Sie Ihre aktuelle render-Kontext nicht geschraubt.
Wenn Sie möchten mit nur glut-Bibliothek, schauen Sie bitte ein code von Eric Stringer.
Lief ich den Beispielcode unter Windows 7, aber ich musste Sie ersetzen eine Zeile glutIntit zu