OpenGL ist eine Zustandsmaschine. Ein OpenGL-Kontext enthält diesen Status. Der Status enthält Informationen, z. B. welche Texturen an welche Textureinheiten gebunden sind, welche Anhänge der aktuelle FBO hat und ähnliches.
Wenn Sie den aktuellen Kontext festlegen, wechseln Sie den gesamten Status vom alten in den neuen Kontext. Hier ist ein Beispiel:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
Dies macht den Kontext window1
aktuell. Anschließend wird die 2D-Textureinheit aktiviert und daran gebunden texture1
.
Als nächstes macht es den Kontext der window2
aktuellen. Wenn Sie den aktivierten Status überprüfen GL_TEXTURE_2D
würden, wäre dies falsch (es sei denn, Sie haben ihn zuvor im window2
Kontext aktiviert ). Wenn Sie überprüfen, welche Textur an die 2D-Textureinheit gebunden ist, werden Sie wahrscheinlich feststellen, dass keine Textur oder eine andere als texture1
die gebundene Textur gebunden wurde.
Grundsätzlich erfolgt das Zeichnen im aktuellen Kontext. Wenn Sie einen anderen Kontext aktuell machen, werden jetzt alle Zeichnungen in diesem Kontext ausgeführt.
In einer OpenGL-Anwendung mit mehreren Threads ist es üblich, einen einzelnen Kontext pro Thread zu haben. Auf diese Weise zeichnet jeder Thread in seinen eigenen Kontext und bringt den Status der Kontexte in anderen Threads nicht durcheinander.