Answers:
OpenGL是一种状态机。OpenGL上下文保持该状态。状态包含诸如哪些纹理绑定到哪些纹理单元,当前FBO具有的附件以及类似信息之类的信息。
设置当前上下文时,您会将所有状态从旧上下文切换到新上下文。这是一个例子:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
这是在window1
当前环境下进行的。然后,它启用2D纹理单元并与其绑定texture1
。
接下来,它成为window2
当前的上下文。如果要检查其启用状态,GL_TEXTURE_2D
则将为false(除非您之前已在window2
上下文中启用它)。同样,如果检查将哪个纹理绑定到2D纹理单元,则可能会发现没有纹理绑定,或者绑定了其他纹理texture1
。
基本上所有绘制都发生在当前上下文中。如果当前使用其他上下文,则所有绘制现在都将在该上下文中进行。
在多线程OpenGL应用程序中,每个线程通常只有一个上下文。这样,每个线程都将吸引到自己的上下文中,并且不会弄乱其他线程上的上下文状态。