我通过构造或修改我给出的缓冲区来渲染我的场景glBufferData.我对Vertex Array Objects的理解是,它允许我跳过我正在使用的所有VBO的手动绑定.当我一直更新缓冲区时,情况仍然如此吗?
我可以绑定我的VAO,调用glBufferData更新顶点和索引(目前我只有两个VBO),然后渲染吗?
我可以使用VBO的内存映射吗?然后我可以绑定VAO,修改缓冲区,然后渲染?
VAO究竟做了什么?它的功能是一个快捷方式,它存储和自动化顶点属性绑定到我的VBO?是否拥有数据或绑定的所有权?
您可能需要对此进行测试,但根据我的理解,VBO 在生成时会被赋予 ID,而 VAO 仅引用每个顶点属性及其正在使用的 VBO ID。您应该可以致电glBufferData或glBufferSubData。我不确定绘制调用之前的内存映射是否有效,但您当然可以在绑定 VAO 和绘制之间执行操作。VAO 不会锁定 VBO 或限制对它们的访问。
一般来说,VAO只存储属性及其所有设置(绑定的VBO、步幅、偏移量等),并在绑定时自动绑定属性。在您调用 之前glBindVertexArray(0);,所有顶点属性都与绑定的 VAO 相关联。