【发布时间】:2012-08-30 14:21:05
【问题描述】:
我有一个带有 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设置属性指针,用glBindVertexArray(0)完成VAO,用不同的纹理坐标绘制新实例是否更高效?或者更新 VAO 的成本是否使这成为一种糟糕的方法?在绑定的 VAO 中使用 glBufferSubData 更新 texcoord VBO 怎么样?
在对单独的方法进行基准测试之前,我非常感谢一些反馈,因为错误的选择将导致重大的重构。
【问题讨论】:
-
一直在寻找有关此的更多信息。我自己正在将我的引擎升级到 GL3.2,所以会尝试发布我的发现。
-
@Grimmy - 你有什么有趣的发现吗?
-
我最终采用了“创建大量 VAO”的方法。如果需要,我仍然可以处理 VAO 绑定,但还没有任何性能问题。公平地说,我只有少数实例是同一个网格对特定属性使用不同的数据。
标签: performance opengl vbo opengl-3