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 window1actual. Luego habilita la unidad de textura 2D y se une texture1a ella.
A continuación, hace que el contexto de la window2corriente. Si GL_TEXTURE_2Dtuviera que verificar el estado habilitado , sería falso (a menos que lo haya habilitado previamente en el window2contexto). 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é texture1unida.
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.