OpenGL jest maszyną stanową. Kontekst OpenGL utrzymuje ten stan. Stan zawiera informacje, takie jak jakie tekstury są powiązane z którymi jednostkami tekstur, jakie załączniki ma bieżące FBO i tym podobne.
Po ustawieniu bieżącego kontekstu przełączasz cały stan ze starego kontekstu na nowy. Oto przykład:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
To sprawia, że kontekst jest window1
aktualny. Następnie włącza jednostkę tekstury 2D i wiąże się texture1
z nią.
Następnie tworzy kontekst window2
bieżący. Jeśli miałbyś sprawdzić, włączony stan GL_TEXTURE_2D
byłby fałszywy (chyba że wcześniej włączyłeś to w window2
kontekście). Podobnie, jeśli sprawdzisz, która tekstura jest powiązana z jednostką tekstury 2D, prawdopodobnie nie zobaczysz żadnej tekstury, ani żadnej innej tekstury niż texture1
związana.
Zasadniczo cały rysunek odbywa się w bieżącym kontekście. Jeśli zmienisz bieżący kontekst na inny, wówczas wszystkie rysunki będą się teraz odbywać w tym kontekście.
Często stosuje się jeden kontekst na wątek w wielowątkowej aplikacji OpenGL. W ten sposób każdy wątek rysuje się we własnym kontekście i nie psuje stanu kontekstów w innych wątkach.