我正在为游戏编写自己的渲染器。我有一个类几何,它以VBO(顶点缓冲对象)的形式封装几何数据。 Geometry还引用了InputLayout类型的对象,该对象存储有关几何数据的信息。 InputLayout实例在Geometry实例之间共享。我正在使用InputLayout在“绘制调用”之前正确配置管道(例如glVertexAttribPointer())(例如glDrawArrays())。配置例程效率有点低,因为我必须扫描活动顶点着色器的活动属性,然后在活动的InputLayout实例中查找这些属性。我想通过使用VAO自动化整个过程。
这就是问题所在。我应该为每个着色器/ InputLayout对或每个着色器/几何对创建一个VAO吗?通过为每个着色器/ InputLayout对创建VAO,我将不得不在每次绘制调用之前更改VAO中的缓冲区绑定。是否值得重新设计我的渲染器并为每个着色器/几何对创建VAO?
答案 0 :(得分:6)
使用VAO的目的是让您不必经常更改它们。绑定VAO并进行渲染。由于关联的缓冲区对象是VAO状态的 part ,因此唯一的方法是让VAO存储实际的缓冲区,而不仅仅是“布局”。