O que "makeContextCurrent" faz exatamente?

12

Estou bastante confuso sobre essa função. A referência de contexto do GLFW diz o seguinte:

Esta função atualiza o contexto OpenGL ou OpenGL ES da janela especificada no encadeamento de chamada. Um contexto só pode ser atualizado em um único thread por vez e cada thread pode ter apenas um contexto atual por vez.

Mas isso não me ajuda muito.
Pode funcionar como glBind-métodos? (glBindBuffer, glBindVertexArray e assim por diante)

Adrian
fonte

Respostas:

19

OpenGL é uma máquina de estado. Um contexto OpenGL mantém esse estado. O estado contém informações como quais texturas estão vinculadas a quais unidades de textura, quais anexos o FBO atual possui e coisas assim.

Quando você define o contexto atual, está alternando todo o estado do contexto antigo para o novo contexto. Aqui está um exemplo:

glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);

glfwMakeContextCurrent(window2);

O que isso faz é tornar o contexto window1atual. Em seguida, habilita a unidade de textura 2D e vincula texture1a ela.

Em seguida, torna o contexto window2atual. Se você verificar o estado ativado, GL_TEXTURE_2Disso será falso (a menos que você o tenha ativado anteriormente no window2contexto). Da mesma forma, se você verificar qual textura está vinculada à unidade de textura 2D, provavelmente descobrirá que nenhuma textura foi vinculada ou alguma textura que não texture1foi vinculada.

Basicamente, todo desenho acontece no contexto atual. Se você atualizar um contexto diferente, todo o desenho agora ocorrerá nesse contexto.

É comum ter um único contexto por encadeamento em um aplicativo OpenGL com vários encadeamentos. Dessa forma, cada thread é inserido em seu próprio contexto e não atrapalha o estado dos contextos em outros threads.

user1118321
fonte
1
Eu não tenho mais do que 15 pontos, então não posso votar na sua resposta incrível. Obrigado!!!
Adrian
1
Não se preocupe. Ainda bem que pude ajudar.
precisa saber é o seguinte
Eu li esse comentário, então entrei na computergraphics e atualizei esta resposta.
J MADISON