1

我正在为游戏编写自己的渲染器。我有一个几何类,它以 VBO(顶点缓冲区对象)的形式封装几何数据。Geometry 还引用了 InputLayout 类型的对象,该对象存储有关几何数据的信息。InputLayout 实例在 Geometry 实例之间共享。我正在使用 InputLayout 在“绘图调用”(例如 glDrawArrays())之前正确配置管道(例如 glVertexAttribPointer())。配置例程有点低效,因为我必须扫描活动顶点着色器的活动属性,然后在活动的 InputLayout 实例中查找这些属性。我想通过使用 VAO 来自动化整个过程。

这就是问题所在。我应该为每个着色器/输入布局对还是每个着色器/几何对创建一个 VAO?通过为每个着色器/InputLayout 对创建 VAO,我将不得不在每次绘制调用之前更改 VAO 中的缓冲区绑定。是否值得重新设计我的渲染器并为每个着色器/几何对创建 VAO?

4

1 回答 1

6

使用 VAO 的目的是让您不必经常更改它们。你绑定一个 VAO 并渲染。由于关联的缓冲区对象是VAO 状态的一部分,因此唯一的方法是让 VAO 存储实际的缓冲区,而不仅仅是“布局”。

于 2012-05-18T09:51:53.127 回答