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.