小编Pau*_*ulQ的帖子

更新它使用的顶点缓冲区对象时,如何更新顶点数组对象?

通过glBufferData()更新VBO(特别是它的大小)可能会改变它的物理内存地址,但不是glGenBuffers()设置的缓冲区对象名.VBO通过调用glVertexAttribPointer()链接到VAO,其中有关VBO(缓冲区对象名称?存储器地址?)的信息存储在VAO中.当通过glBindVertexArray()绑定时,VAO可用于更新和绘图.GL当时是否重新计算VBO地址?当链接到的VBO通过glBufferData()更新时,VAO可能会也可能不会被绑定.

根据缓冲区对象名称何时转换为物理内存地址,我可以想象只需在更改VBO后再次绑定VAO,就可以为更改后的VBO更新VAO; 或者,可能需要通过另一次调用glVertexAttribPointer()来更彻底地更新VAO.

因此,这个问题的一部分是:关于VBO的哪些信息存储在VAO中?如果它只是缓冲区对象名称,则在更改VBO内容后不必再次调用glVertexAttribPointer().

也许这些细节不是API规范的一部分,因此唯一安全的做法是在每次更新链接的VBO后通过glVertexAttribPointer()更新VAO.

opengl

6
推荐指数
1
解决办法
2520
查看次数

标签 统计

opengl ×1