关于 OpenGL 的上下文、线程和共享上下文之间的关系
OpenGL 上下文(OpenGL Context)是一个包含了 OpenGL 所有状态信息的环境,是你与 GPU 进行任何 OpenGL 调用之前必须建立的基础。
简单来说,它是“OpenGL 的运行容器”,你在程序中执行的所有 OpenGL 命令,都是在“当前上下文”中生效的。
OpenGL 是一个状态机,它没有“全局变量”或“全局执行环境”,你不能“在任何地方”调用 glDrawArrays() 就能绘制图形。
你必须在一个已经激活的上下文中调用,OpenGL 才知道你希望它在哪里渲染、使用什么资源。
OpenGL 上下文包含的状态和资源具体指什么?
状态信息: 当前清除颜色(glClearColor)、混合模式(glBlendFunc)、视口(glViewport)等。
资源: 已创建的纹理(Texture)、缓冲对象(VBO/FBO)、着色器程序(Program)、VAO 等。
在 OpenGL 中,一个线程可以拥有多个上下文(OpenGL Context),分别代表不同的 OpenGL 状态集,但是一个线程在同一时间只能绑定(make current)一个上下文。<