OpenGL es una máquina de estados. Un contexto OpenGL mantiene ese estado. El estado contiene información como qué texturas están vinculadas a qué unidades de textura, qué archivos adjuntos tiene el FBO actual y cosas así.
Cuando establece el contexto actual, está cambiando todo el estado del contexto anterior al nuevo contexto. Aquí hay un ejemplo:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
Lo que esto hace es que el contexto sea window1
actual. Luego habilita la unidad de textura 2D y se une texture1
a ella.
A continuación, hace que el contexto de la window2
corriente. Si GL_TEXTURE_2D
tuviera que verificar el estado habilitado , sería falso (a menos que lo haya habilitado previamente en el window2
contexto). Del mismo modo, si verifica qué textura está unida a la unidad de textura 2D, es probable que no encuentre ninguna textura unida, o alguna otra textura que no esté texture1
unida.
Básicamente todo el dibujo ocurre en el contexto actual. Si actualiza un contexto diferente, todos los dibujos ahora sucederán en ese contexto.
Es común tener un contexto único por subproceso en una aplicación OpenGL multiproceso. De esa manera, cada hilo se dibuja en su propio contexto y no estropea el estado de los contextos en otros hilos.