OpenGL - это конечный автомат. Контекст OpenGL содержит это состояние. Состояние содержит информацию о том, какие текстуры связаны с какими текстурными блоками, какие вложения имеет текущий FBO и тому подобное.
Когда вы устанавливаете текущий контекст, вы переключаете все состояние из старого контекста в новый контекст. Вот пример:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
То, что это делает, делает контекст window1
текущего. Затем он включает 2D текстурный блок и привязывается texture1
к нему.
Далее это делает контекст window2
текущего. Если бы вы проверяли включенное состояние, GL_TEXTURE_2D
оно было бы ложным (если вы ранее не включали его в window2
контексте). Аналогичным образом, если вы проверите, какая текстура связана с модулем 2D-текстуры, вы, скорее всего, обнаружите, что ни одна текстура не была связана, или какая-либо другая текстура texture1
была связана.
В основном все рисование происходит в текущем контексте. Если вы сделаете другой контекст текущим, тогда все рисование теперь будет происходить в этом контексте.
Обычно в многопоточном приложении OpenGL для каждого потока используется один контекст. Таким образом, каждый поток рисует в своем собственном контексте и не портит состояние контекстов в других потоках.