我正在为游戏编写自己的渲染器。我有一个几何类,它以 VBO(顶点缓冲区对象)的形式封装几何数据。Geometry 还引用了 InputLayout 类型的对象,该对象存储有关几何数据的信息。InputLayout 实例在 Geometry 实例之间共享。我正在使用 InputLayout 在“绘图调用”(例如 glDrawArrays())之前正确配置管道(例如 glVertexAttribPointer())。配置例程有点低效,因为我必须扫描活动顶点着色器的活动属性,然后在活动的 InputLayout 实例中查找这些属性。我想通过使用 VAO 来自动化整个过程。
这就是问题所在。我应该为每个着色器/输入布局对还是每个着色器/几何对创建一个 VAO?通过为每个着色器/InputLayout 对创建 VAO,我将不得不在每次绘制调用之前更改 VAO 中的缓冲区绑定。是否值得重新设计我的渲染器并为每个着色器/几何对创建 VAO?