OpenGL bir durum makinesidir. Bir OpenGL bağlamı bu durumu tutar. Durum, hangi dokuların hangi doku birimlerine bağlı olduğu, mevcut FBO'nun sahip olduğu ekler ve bunun gibi bilgiler içerir.
Geçerli içeriği ayarladığınızda, tüm durumu eski içerikten yeni içeriğe geçirirsiniz. İşte bir örnek:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
Bunun yaptığı window1
akımın bağlamıdır . Daha sonra 2D doku ünitesini etkinleştirir ve texture1
ona bağlanır .
Sonra window2
akımın bağlamını yapar . Etkin durumunu kontrol ederseniz GL_TEXTURE_2D
yanlış olur (daha önce window2
bağlamda etkinleştirmediyseniz ). Benzer şekilde, 2B doku birimine hangi dokunun bağlı olduğunu kontrol ederseniz, büyük olasılıkla herhangi bir doku bağlı olmadığını veya başka bir doku bağlı olmadığını görürsünüz texture1
.
Temel olarak tüm çizim mevcut bağlamda gerçekleşir. Farklı bir bağlamı güncel yaparsanız, tüm çizim artık bu bağlamda gerçekleşir.
Çok iş parçacıklı bir OpenGL uygulamasında iş parçacığı başına tek bir bağlam olması yaygındır. Bu şekilde, her iş parçacığı kendi bağlamına girer ve diğer iş parçacıklarındaki bağlamların durumunu bozmaz.