关于 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)一个上下文。

多个上下文可以同时存在,但只能分别绑定在不同线程上,也就是一个线程在同一时间只能绑定一个上下文。

上下文的资源(纹理、VBO、Shader、Program)能不能共享仅仅取决于上下文是否通过共享的方式创建的。

共享上下文时可以共享的资源:

  • 纹理;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节流动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值