我对该功能非常困惑。 GLFW上下文引用如下:


该函数使调用线程上指定
窗口的OpenGL或OpenGL ES上下文成为当前调用线程。一次只能在单个线程上使一个上下文成为当前上下文,并且每个线程一次只能具有一个
当前上下文。


但是对我没有太大帮助。
它可以像glBind-方法一样工作吗? (glBindBuffer,glBindVertexArray等)

#1 楼

OpenGL是一种状态机。 OpenGL上下文保持该状态。状态包含诸如将哪些纹理绑定到哪些纹理单元,当前FBO拥有的附件以及类似信息之类的信息。

设置当前上下文时,您将从状态切换所有状态。旧上下文到新上下文。这是一个示例:

glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);

glfwMakeContextCurrent(window2);


这是使window1的上下文成为当前上下文。然后,它启用2D纹理单元并将texture1绑定到它。

接下来,它使window2的上下文成为当前上下文。如果要检查GL_TEXTURE_2D的启用状态,它将是错误的(除非您先前已在window2上下文中启用了它)。同样,如果检查将哪个纹理绑定到2D纹理单元,则可能会发现没有纹理绑定,或者绑定了texture1以外的其他纹理。

基本上所有绘制都发生在当前上下文中。如果当前使用不同的上下文,则所有绘制现在都将在该上下文中进行。

在多线程OpenGL应用程序中,每个线程通常只有一个上下文。这样,每个线程都将吸引到自己的上下文中,并且不会弄乱其他线程上的上下文状态。

评论


$ \ begingroup $
我的得分不超过15分,所以我不能投票赞成你的出色答案。谢谢!!!
$ \ endgroup $
–阿德里安
17年1月17日,0:26



$ \ begingroup $
不用担心。很高兴我能帮助你。
$ \ endgroup $
–user1118321
17年1月17日,0:27

$ \ begingroup $
我读了此评论,所以我加入了计算机图形学,并对此答案表示赞同。
$ \ endgroup $
– twitchdotcom用斜线KANJICODER
18-2-27在22:48