OpenGL状态机设计思路剖析

本文探讨了OpenGL的状态机模型,重点关注buffer object和target的概念,如何提升渲染效率。此外,文章还介绍了子状态对象,如vertex array object和framebuffer object,以及如何通过对象绑定来优化性能。最后,讨论了绑定点机制,允许在同一绘制过程中使用多个对象。
摘要由CSDN通过智能技术生成

概述

学会一门图形api并不容易,除了图形学算法以外,还得花时间去理解图形api本身的架构。对于OpenGL而言,这个架构就是它的状态机模型,由于OpenGL版本的不断迭代,整个架构发生了一定的迭代,不同版本的api风格不一致,导致初学者更难入门。不过,如果能抓住一定的脉络,整个api的架构也会变得相当清晰。下文中,将会按照迭代的顺序,对OpenGL状态机架构的常见设计做一个阐述。

buffer object和target

在最早期的立即模式的OpenGL中,是不存在buffer object这个概念的。如果要绘制一个图元,必须调用相关api告诉OpenGL指向顶点数据的指针,随后OpenGL立即将存储在CPU中的顶点数据复制到GPU中并绘制相应的结果(这也是为什么叫立即模式)。这种方式的问题在于,每次绘制前都必须把数据从CPU复制到GPU一次,降低了渲染效率。我们完全可以在每次绘制前就把CPU中存储的顶点数据传递到GPU,绘制的时候直接在GPU中读取顶点数据即可。为了做到这一点,OpenGL设计出了buffer object和target。在绘制前把CPU中的数据绑定到buffer object并传递到GPU,每次绘制时只要把buffer object绑定到target上即可。(不过,为了方便数据的更新,一些buffer object中的数据仍旧会在CPU中存储一些备份,并通过某些机制保持一致性(coherent)(在红宝书中把coherent翻译成了连续性,这个翻译是不准确的,coherent应该代表缓存一致性,参见缓存一致性协议。))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值