假设我们将顶点属性位置绑定到两个程序上的相同值。使用相同的顶点数组对象来绘制这两个程序是否正确?
答案 0 :(得分:1)
定义“正确。”
如果两个程序对象使用兼容的属性位置,则它们使用相同的属性位置。 VAO使用属性位置,因此使用VAO的VAO将与另一个一起工作。所以这会奏效。
一般而言,无论您是否真正利用这一点,都是绩效问题。避免更改顶点数组状态通常是一个好主意,但目前尚不清楚这与其他状态变化有多重要。无论如何,你正在改变程序,所以在你改变程序时不改变VAO最不会慢,并且会导致显着的性能提升。
但是,目前尚不清楚应该做多少工作来最小化顶点阵列状态的变化。如果您可以将模型打包到具有相同格式的相同缓冲区对象中,则可以使用glDrawArrays
或glDrawElementsBaseVertex
等函数在不更改VAO的情况下渲染所有模型。
答案 1 :(得分:0)
我尝试使用不同着色器的相同VAO,我可以看到视觉瑕疵。 (属性的ID确实匹配) 解决方案是为每个程序使用新的VAO。