Que fait exactement «makeContextCurrent»?

12

Je suis assez confus à propos de cette fonction. La référence de contexte GLFW dit comme suit:

Cette fonction active le contexte OpenGL ou OpenGL ES de la fenêtre spécifiée sur le thread appelant. Un contexte ne peut être actualisé que sur un seul thread à la fois et chaque thread ne peut avoir qu'un seul contexte actuel à la fois.

Mais cela ne m'aide pas beaucoup.
Peut-il fonctionner comme des glBind-méthodes? (glBindBuffer, glBindVertexArray et ainsi de suite)

Adrian
la source

Réponses:

21

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 window1actuel. Il active ensuite l'unité de texture 2D et s'y lie texture1.

Ensuite, il fait le contexte du window2courant. Si vous deviez vérifier son état activé, GL_TEXTURE_2Dce serait faux (sauf si vous l'aviez préalablement activé dans le window2contexte). 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 texture1lié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.

user1118321
la source
1
Je n'ai pas plus de 15 points, je ne peux donc pas voter pour votre réponse impressionnante. Merci!!!
Adrian
1
Pas de soucis. Heureux d'avoir pu aider.
user1118321
J'ai lu ce commentaire alors j'ai rejoint computergraphics et j'ai voté pour cette réponse.
J MADISON