OpenGL中的上下文 理解整理

OpenGL的上下文是一个记录渲染信息和状态的结构体,是OpenGL状态机的载体。上下文是线程私有的,多个线程不能同时指定同一个。可以通过Glut、Glfw或特定平台API创建。OpenGL 3.2引入Core和Compatibility Profile,多线程绘制时可以共享上下文实现资源访问。
摘要由CSDN通过智能技术生成

OpenGL中的上下文(Context)

OpenGL状态机与上下文

OpenGL是一个状态机,它拥有非常多的状态变量,并且每个状态变量都有默认值。

OpenGL在渲染的时候需要一个Context来记录了OpenGL渲染需要的所有信息和状态,可以把它理解成一个大的结构体,它里面记录了当前绘制使用的颜色、是否有光照计算以及开启的光源等非常多我们使用OpenGL函数调用设置的状态和状态属性。

在程序中,我们设置的各种状态和默认状态会一直生效,直到我们再次修改它们。状态机并不是一个好的设计,多个绘制算法同时跑,容易被前面的状态所影响,OpenGL为了向前兼容,状态机的形式就被一直延续下来了。

GPU的CS模式和上下文

如上所述,OpenGL的一组状态机对应着一个上下文。OpenGL采用了Client-Server模式,GPU相当于一台服务器,可对应多个客户端即上下文,一个客户端维护着一组状态机。大部分的OpenGL命令都是异步的,不代表真正地执行,只是客户端向服务器发送了一些命令(同时有一些API可实现同步功能)。如果两个窗口分别对应两个不同的绘制上下文,则两个窗口彼此状态独立,绘制状态不会互相影响,宏观上看绘制也是并行的。

线程私有

OpenGL的绘制命令都是作用在当前的Context上,这个Current Context是一个线程私有(thread-local)的变量,也就是说如果我们在线程中绘制,那么需要为该线程制定一个Current Context的,当多个线程参

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值