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 window1
atual. Em seguida, habilita a unidade de textura 2D e vincula texture1
a ela.
Em seguida, torna o contexto window2
atual. Se você verificar o estado ativado, GL_TEXTURE_2D
isso será falso (a menos que você o tenha ativado anteriormente no window2
contexto). 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 texture1
foi 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.