8

我有一个带有 VBO 的 VAO,用于各种顶点属性:顶点位置、顶点法线和元素数组 VBO(所有 STATIC_DRAW),这样渲染一个实例只需要:

glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, <count>, <type>, 0);

但是,我想为每个实例绘制具有不同顶点纹理(s,t)坐标的对象的多个实例(我仅限于 OS X GL 3.2 核心配置文件 BTW)。texcoord VBO 使用 STREAM_DRAW 提示(尽管我可能会使用 DYNAMIC_DRAW)。

绑定VAO,绑定当前的texcoord VBO,通过设置属性指针glVertexAttribPointer,用不同的纹理坐标完成VAOglBindVertexArray(0)并绘制新实例是否更有效?或者更新 VAO 的成本是否使这成为一种糟糕的方法?glBufferSubData在绑定的 VAO 中更新 texcoord VBO 怎么样?

在对单独的方法进行基准测试之前,我真的很感激一些反馈,因为错误的选择会导致重大的重构。

4

1 回答 1

3

只需创建多个 VAO。顶点数组对象是轻量级的,它们用于一次设置顶点数组...

一个VBO可以绑定多个VAO,让你的生活更轻松快捷。

如果您在某个时候想要另一个属性配置,请丢弃旧的 VAO 并创建一个新的。

于 2012-08-30T14:47:33.803 回答