我有一个带有VBO的VAO,用于各种顶点属性:顶点位置、顶点法线和元素数组VBO(均为STATIC_DRAW),因此呈现一个实例只需:
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, <count>, <type>, 0);但是,我希望绘制一个对象的多个实例(我仅限于OSXGL3.2核心配置文件BTW),每个实例具有不同的顶点纹理(s,t)坐标。texcoord使用STREAM_DRAW提示(尽管我可能不使用DYNAMIC_DRAW)。
绑定VAO、绑定当前的texcoord、通过glVertexAttribPointer设置属性指针、用glBindVertexArray(0)完成VAO并绘制具有不同纹理坐标的新实例是否更有效?还是更新VAO的成本使得这是一种糟糕的方法?如何用绑定VAO中的glBufferSubData更新texcoord呢?
我非常希望在对单独的方法进行基准测试之前提供一些反馈,因为错误的选择会导致重大的重构。
发布于 2012-08-30 14:47:33
只需创建多个VAO。顶点数组对象是轻量级的,它们用于一次性设置顶点数组.
一个VBO可以绑定到多个VAO,使您的生活更容易和更快。
如果您想要在某个时候进行另一种属性配置,那么丢弃旧的VAO并创建一个新的属性配置。
https://stackoverflow.com/questions/12199042
复制相似问题