OpenGL est une machine à états. Un contexte OpenGL détient cet état. L'état contient des informations telles que les textures liées à quelles unités de texture, les pièces jointes du FBO actuel, etc.
Lorsque vous définissez le contexte actuel, vous passez tout l'état de l'ancien contexte au nouveau contexte. Voici un exemple:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
Ce que cela fait, c'est le contexte window1
actuel. Il active ensuite l'unité de texture 2D et s'y lie texture1
.
Ensuite, il fait le contexte du window2
courant. Si vous deviez vérifier son état activé, GL_TEXTURE_2D
ce serait faux (sauf si vous l'aviez préalablement activé dans le window2
contexte). De même, si vous vérifiez quelle texture est liée à l'unité de texture 2D, vous constaterez probablement qu'aucune texture n'était liée ou qu'une autre texture que celle texture1
liée.
Fondamentalement, tous les dessins se produisent dans le contexte actuel. Si vous activez un contexte différent, tous les dessins se feront désormais dans ce contexte.
Il est courant d'avoir un seul contexte par thread dans une application OpenGL multithread. De cette façon, chaque thread dessine dans son propre contexte et ne perturbe pas l'état des contextes sur d'autres threads.