该函数使调用线程上指定
窗口的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