是否应将同一个VAO用于多个程序?

时间:2012-11-08 17:54:17

标签: opengl

假设我们将顶点属性位置绑定到两个程序上的相同值。使用相同的顶点数组对象来绘制这两个程序是否正确?

2 个答案:

答案 0 :(得分:1)

定义“正确。”

如果两个程序对象使用兼容的属性位置,则它们使用相同的属性位置。 VAO使用属性位置,因此使用VAO的VAO将与另一个一起工作。所以这会奏效。

一般而言,无论您是否真正利用这一点,都是绩效问题。避免更改顶点数组状态通常是一个好主意,但目前尚不清楚这与其他状态变化有多重要。无论如何,你正在改变程序,所以在你改变程序时不改变VAO最不会慢,并且会导致显着的性能提升。

但是,目前尚不清楚应该做多少工作来最小化顶点阵列状态的变化。如果您可以将模型打包到具有相同格式的相同缓冲区对象中,则可以使用glDrawArraysglDrawElementsBaseVertex等函数在不更改VAO的情况下渲染所有模型。

答案 1 :(得分:0)

我尝试使用不同着色器的相同VAO,我可以看到视觉瑕疵。 (属性的ID确实匹配) 解决方案是为每个程序使用新的VAO。