将OpenGL VAO用于不同的VBO

run*_*ead 1 opengl

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

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

Nic*_*las 6

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