Freigeben über


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 Ruft ein Handle für den aktuellen Renderingkontext eines Threads ab.
wglGetCurrentDC Ruft ein Handle für den Gerätekontext ab, der dem aktuellen Renderingkontext eines Threads zugeordnet ist.
wglDeleteContext Löscht einen Renderingkontext.

 

Die Funktion wglCreateContext verwendet ein Gerätekontexthandle als Parameter und gibt ein Renderingkontexthandle zurück. Der erstellte Renderingkontext ist für Zeichnungen auf dem Gerät geeignet, das vom Gerätekontexthandle referenziert wird. Insbesondere ist das Pixelformat mit dem Pixelformat des Gerätekontexts identisch. Nach der Erstellung eines Renderingkontexts können Sie den Gerätekontext freigeben oder verwerfen. Weitere Informationen zum Erstellen, Abrufen, Freigeben und Verwerfen von Gerätekontexten 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 mindestens vier Pixel verwendet. Der Gerätekontext darf kein monochromer Druckergerätekontext sein.

 

Die Funktion wglMakeCurrent 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, das von diesem Gerätekontext referenziert wird. Der Gerätekontext muss nicht derselbe Gerätekontext sein, der beim Erstellen des Renderingkontexts an wglCreateContext übergeben wurde. Er muss sich jedoch auf demselben Gerät befinden und dasselbe Pixelformat verwenden. Der Aufruf von wglMakeCurrent erstellt eine Zuordnung zwischen dem bereitgestellten Renderingkontext und dem Gerätekontext. Sie können den Gerätekontext, der einem aktuellen Renderingkontext zugeordnet ist, erst freigeben oder verwerfen, wenn Sie den Renderingkontext als nicht aktuell festlegen.

Sobald ein Thread einen aktuellen Renderingkontext besitzt, kann er OpenGL-Grafikaufrufe ausführen. Alle Aufrufe müssen einen Renderingkontext durchlaufen. Wenn Sie OpenGL-Grafikaufrufe über einen Thread ausführen, der keinen aktuellen Renderingkontext hat, wird keine Aktion ausgeführt.

Die Funktion wglGetCurrentContext akzeptiert keine Parameter und gibt ein Handle an den aktuellen Renderingkontext des aufrufenden Threads zurück. Wenn der Thread keinen aktuellen Renderingkontext besitzt, ist der Rückgabewert NULL.

Wenn Sie ein Handle für den Gerätekontext abrufen, der dem aktuellen Renderingkontext eines Threads zugeordnet ist, indem Sie wglGetCurrentDC aufrufen, wird die Zuordnung erstellt, wenn ein Renderingkontext als aktuell festgelegt wird.

Sie können die Zuordnung zwischen einem aktuellen Renderingkontext und einem Thread aufheben, indem Sie wglMakeCurrent mit einem von zwei Handles aufrufen:

  • Renderingkontexthandle null
  • Ein anderes Handle als das ursprünglich aufgerufene Handle

Nach dem Aufruf von wglMakeCurrent bei Festlegung des Parameters für das Renderingkontexthandle auf NULL hat der aufrufende Thread keinen aktuellen Renderingkontext. Die Verbindung des Renderingkontexts mit dem Thread wird aufgehoben und die Zuordnung des Renderingkontexts zu einem Gerätekontext wird beendet. OpenGL löscht alle Zeichnungsbefehle und gibt möglicherweise einige Ressourcen frei. Bis zum nächsten Aufruf von wglMakeCurrent erfolgt keine OpenGL-Zeichnung, da der Thread keine OpenGL-Grafikaufrufe ausführen kann, bis er wieder einen aktuellen Renderingkontext erhält.

Die zweite Möglichkeit, die Zuordnung zwischen einem Renderingkontext und einem Thread aufzuheben, besteht im Aufruf von wglMakeCurrent mit einem anderen Renderingkontext. Nach einem solchen Aufruf besitzt der aufrufende Thread einen neuen aktuellen Renderingkontext, die Verbindung des früheren aktuellen Renderingkontexts mit dem Thread wird aufgehoben, und die Zuordnung des früheren aktuellen Renderingkontexts zu einem Gerätekontext wird beendet.

Die Funktion wglDeleteContext akzeptiert einen einzelnen Parameter, das Handle für den zu löschenden Renderingkontext. Legen Sie vor dem Aufruf von wglDeleteContext den Renderingkontext als nicht aktuell fest, indem Sie wglMakeCurrent aufrufen. Löschen oder verwerfen Sie den zugeordneten Gerätekontext, indem Sie DeleteDC oder ReleaseDC aufrufen, wie zutreffend.

Es führt zu einem Fehler, wenn ein Thread einen Renderingkontext löscht, der den aktuellen Renderingkontext eines anderen Threads darstellt. Wenn ein Renderingkontext jedoch der aktuelle Renderingkontext des aufrufenden Threads ist, löscht wglDeleteContext alle OpenGL-Zeichnungsbefehle und legt den Renderingkontext vor dem Löschen als nicht aktuell fest. In diesem Fall erfordert die Verwendung von wglDeleteContext für die Festlegung eines Renderingkontexts als nicht aktuell, dass der Programmierer den zugehörigen Gerätekontext löscht oder freigibt.