为不同的 VBO 使用 OpenGL VAO

Posted

技术标签:

【中文标题】为不同的 VBO 使用 OpenGL VAO【英文标题】:Using OpenGL VAO for different VBOs 【发布时间】:2012-05-18 08:52:30 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

这就是我想知道的。 THX

以上是关于为不同的 VBO 使用 OpenGL VAO的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL - 尝试使用 VBO 会导致错误

OpenGL Instancing VBO - 每个顶点,每个实例的属性

将两个不同的网格放在同一个顶点 VBO 中的 OpenGL 最佳实践

两个不同的对象 OpenGL。 VAO VBO IBO 网格变形问题

OpenGL - 从 DisplayList 转换为使用 VBO

将 OpenGL 绘制列表转换为顶点数组或 VBO