Renderingkontextfunktionen
Fünf WGL-Funktionen verwalten Renderingkontexte, wie in der folgenden Tabelle beschrieben.
| WGL-Funktion | BESCHREIBUNG |
|---|---|
| wglCreateContext | Erstellt einen neuen Renderingkontext. |
| WglMakeCurrent | Legt den aktuellen Renderingkontext eines Threads fest. |
| WglGetCurrentContext | Erhält ein Handle für den aktuellen Renderingkontext eines Threads. |
| WglGetCurrentDC | Erhält ein Handle für den Gerätekontext, der dem aktuellen Renderingkontext eines Threads zugeordnet ist. |
| WglDeleteContext | Löscht einen Renderingkontext. |
Die wglCreateContext-Funktion verwendet ein Gerätekontexthandl als Parameter und gibt ein Renderingkontexthandl zurück. Der erstellte Renderingkontext eignet sich zum Zeichnen auf dem Gerät, auf das vom Gerätekontexthand handle verwiesen wird. Insbesondere ist das Pixelformat mit dem Pixelformat des Gerätekontexts identisch. Nachdem Sie einen Renderingkontext erstellt haben, können Sie den Gerätekontext freigegeben oder löschen. Weitere Informationen zum Erstellen, Abrufen, Freigeben und Freigeben eines Gerätekontexts finden Sie unter Gerätekontexte.
Hinweis
Der an wglCreateContext gesendete Gerätekontext muss ein Anzeigegerätekontext, ein Speichergerätekontext oder ein Farbdruckergerätekontext sein, der vier oder mehr Bits pro Pixel verwendet. Der Gerätekontext darf kein monotoner Druckergerätekontext sein.
Die wglMakeCurrent-Funktion verwendet ein Renderingkontexthandle und ein Gerätekontexthandle als Parameter. Alle nachfolgenden OpenGL-Aufrufe, die vom Thread ausgeführt werden, werden über diesen Renderingkontext ausgeführt und auf dem Gerät gezeichnet, auf das dieser Gerätekontext verweist. Der Gerätekontext muss nicht derselbe sein, der beim Erstellen des Renderingkontexts an wglCreateContext übergeben wurde. Er muss sich jedoch auf demselben Gerät und im gleichen Pixelformat befingen. Durch den Aufruf von wglMakeCurrent wird eine Zuordnung zwischen dem angegebenen Renderingkontext und dem Gerätekontext erstellt. Sie können den gerätekontext, der einem aktuellen Renderingkontext zugeordnet ist, erst dann wieder freigegeben oder löschen, nachdem Sie den Renderingkontext als nicht aktuell bezeichnet haben.
Sobald ein Thread über einen aktuellen Renderingkontext verfügt, kann er OpenGL-Grafikaufrufe tätigen. Alle Aufrufe müssen einen Renderingkontext passieren. Nichts geschieht, wenn Sie OpenGL-Grafikaufrufe von einem Thread ohne aktuellen Renderingkontext tätigen.
Die wglGetCurrentContext-Funktion nimmt keine Parameter an und gibt ein Handle an den aktuellen Renderingkontext des aufrufenden Threads zurück. Wenn der Thread über keinen aktuellen Renderingkontext verfügt, ist der Rückgabewert NULL.
Wenn Sie durch Aufrufen von wglGetCurrentDCein Handle für den Gerätekontext abrufen, der dem aktuellen Renderingkontext eines Threads zugeordnet ist, wird die Zuordnung erstellt, wenn ein Renderingkontext aktuell gemacht wird.
Sie können die Zuordnung zwischen einem aktuellen Renderingkontext und einem Thread durch Aufrufen von wglMakeCurrent mit einem von zwei Handles aufbrechen:
- Ein NULL-Renderingkontexthand handle
- Ein anderes Handle als das ursprünglich aufgerufene
Nach dem Aufruf von wglMakeCurrent mit dem Parameter für das Renderingkontexthandle, der auf NULL festgelegt ist, verfügt der aufrufende Thread über keinen aktuellen Renderingkontext. Der Renderingkontext wird von seiner Verbindung mit dem Thread freigegeben, und die Zuordnung des Renderingkontexts zu einem Gerätekontext endet. OpenGL leert alle Zeichnungsbefehle und gibt möglicherweise einige Ressourcen frei. Bis zum nächsten Aufruf von wglMakeCurrent wird keine OpenGL-Zeichnung durchgeführt, da der Thread keine OpenGL-Grafikaufrufe tätigen kann, bis er einen aktuellen Renderingkontext wiedererlangt.
Die zweite Möglichkeit, die Zuordnung zwischen einem Renderingkontext und einem Thread zu unterbricht, besteht im Aufrufen von wglMakeCurrent mit einem anderen Renderingkontext. Nach einem solchen Aufruf verfügt der aufrufende Thread über einen neuen aktuellen Renderingkontext, der frühere aktuelle Renderingkontext wird von seiner Verbindung mit dem Thread freigegeben, und die Zuordnung des früheren aktuellen Renderingkontexts zu einem Gerätekontext endet.
Die wglDeleteContext-Funktion akzeptiert einen einzelnen Parameter, das Handle für den zu löschenden Renderingkontext. Machen Sie vor dem Aufrufen von wglDeleteContext den Renderingkontext nicht aktuell, indem Sie wglMakeCurrentaufrufen, und löschen oder geben Sie den zugeordneten Gerätekontext frei, indem Sie deleteDC oder ReleaseDC entsprechend aufrufen.
Es ist ein Fehler für einen Thread, einen Renderingkontext zu löschen, der der aktuelle Renderingkontext eines anderen Threads ist. Wenn ein Renderingkontext jedoch der aktuelle Renderingkontext des aufrufenden Threads ist, leert wglDeleteContext alle OpenGL-Zeichnungsbefehle und macht den Renderingkontext vor dem Löschen nicht aktuell. In diesem Fall erfordert das Verlassen von wglDeleteContext, um einen Renderingkontext nicht aktuell zu machen, dass der Programmierer den zugeordneten Gerätekontext löscht oder frei gibt.