如果我需要更改VBO,是否需要重建我的VAO?

时间:2012-01-11 00:18:12

标签: opengl

我通过构建或修改我提供给glBufferData的缓冲区来渲染我的场景。我对Vertex Array Objects的理解是,它允许我跳过我正在使用的所有VBO的手动绑定。当我一直更新缓冲区时,情况仍然如此吗?

我可以绑定我的VAO,调用glBufferData来更新顶点和索引(我目前只有两个VBO),然后渲染吗?

我可以使用VBO的内存映射吗?然后我可以绑定VAO,修改缓冲区,然后渲染?

VAO究竟做了什么?它的功能是否只是一个快捷方式,它存储和自动化顶点属性与我的VBO的绑定?是否拥有数据或绑定的所有权?

1 个答案:

答案 0 :(得分:3)

您可能需要对此进行测试,但根据我的理解,VBO在生成时会被赋予ID,并且VAO仅引用每个顶点属性以及它正在使用的VBO ID。您应该可以致电glBufferDataglBufferSubData。我不确定绘制调用之前的内存映射是否有效,但你可以在绑定VAO和绘图之间做一些事情。 VAO不会锁定VBO或限制对它们的访问。

通常,VAO只存储属性及其所有设置(绑定VBO,步幅,偏移等)并在绑定时自动绑定属性。在调用glBindVertexArray(0);之前,所有顶点属性都绑定到绑定的VAO。