OpenGL中的VAO和VBO

对我来说,这是两个非常容易忘的概念,细节也不太好记忆。所以我简单粗暴地总结一下二者。可能未必精确,但get到了大致思想即可。

VBO:Vertex Buffer Object,顶点缓冲对象。
可以存储大量顶点,因而我们可以利用VBO一次性发送一大批数据到显卡上。

VAO:Vertex Array Object,顶点数组对象。
一个VAO,配置并告诉了我们该如何使用VBO(包括如何解读VBO中的数据),以及使用哪个VBO。

为了了解VAO究竟存了什么,我执行了一个小测试。
我把绑定VAO的那句代码:glBindVertexArray(cubeVAO)分别放在了三个位置。
Position 1: 绑定并配置VBO之前。
Position 2: 绑定并配置VBO之后,配置顶点属性之前。
Position 3: 配置顶点属性之后。
如下图所示:

a test about VAO

运行结果如下:Position1与Position2都正常,且没有任何区别;Position3不正常(显而易见:))

据我分析,Position1与Position2之所以运行结果相同,源于OpenGL的状态机模式。Position1自然不必多说,走的是正常流程。Position2的话,由于我们已经先行绑定了VBO,在状态机模式下,当我们开始绑定VAO的时候,此时的VBO尚未被解绑,所以相当于VAO在绑定和配置过程中,隐含地包含了一个绑定中的VBO。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容