美文网首页
OpenGL中的VAO和VBO

OpenGL中的VAO和VBO

作者: Closears | 来源:发表于2017-09-17 19:52 被阅读395次

    对我来说,这是两个非常容易忘的概念,细节也不太好记忆。所以我简单粗暴地总结一下二者。可能未必精确,但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。

    相关文章

      网友评论

          本文标题:OpenGL中的VAO和VBO

          本文链接:https://www.haomeiwen.com/subject/ahdmsxtx.html