6

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

4

2 回答 2

1

定义“正确”。

如果两个程序对象使用兼容的属性位置,那么它们使用相同的属性位置。VAO 依赖于属性位置,因此与其中一个一起工作的 VAO 将与另一个一起工作。所以这会起作用。

通常,您是否真正利用这一点是性能问题。避免更改顶点数组状态通常是一个好主意,但目前尚不清楚这相对于其他状态更改有多重要。无论如何,您都在更改程序,因此在更改程序时不更改 VAO 在最坏的情况下不会变慢,并且可以显着提高性能。

但是,尚不清楚您应该做多少工作来最小化顶点数组状态更改。如果您可以将模型打包到具有相同格式的相同缓冲区对象中,则可以使用类似glDrawArrays或的函数来渲染所有模型而无需更改 VAO glDrawElementsBaseVertex

于 2012-11-08T19:09:28.987 回答
0

我尝试过使用具有不同着色器的相同 VAO,并且可以看到视觉伪影。(属性的 ID 确实匹配)解决方案是为每个单独的程序使用一个新的 VAO。

于 2015-02-13T19:06:53.783 回答