¿Qué hace exactamente "makeContextCurrent"?

12

Estoy bastante confundido acerca de esa función. La referencia de contexto GLFW dice lo siguiente:

Esta función hace que el contexto OpenGL o OpenGL ES de la ventana especificada sea actual en el hilo de llamada. Un contexto solo puede actualizarse en un solo hilo a la vez y cada hilo puede tener solo un contexto actual a la vez.

Pero no me ayuda mucho.
¿Puede funcionar como glBind-métodos? (glBindBuffer, glBindVertexArray, etc.)

Adrian
fuente

Respuestas:

20

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.

usuario1118321
fuente
1
No tengo más de 15 puntos de puntuación, así que no puedo votar tu increíble respuesta. ¡¡¡Gracias!!!
Adrian
1
Sin preocupaciones. Me alegro de poder ayudar.
user1118321
Leí este comentario, así que me uní a infografía y voté por esta respuesta.
J MADISON