【发布时间】:2015-12-26 20:07:11
【问题描述】:
我正在尝试在 OpenGL 中渲染一个类似 Minecraft 的世界。世界被分割成块(每个块包含 N^3 个块),这些块在每一帧都被渲染。
目前我每块使用一个 VAO。我一直觉得这有点奇怪,因为每个块都使用相同的顶点格式 - 为什么我不能使用单个 VAO,然后通过更改索引和顶点缓冲区绑定来绘制每个块?
最近我遇到了核心 4.3 中的 GL_ARB_vertex_attrib_binding 扩展,它似乎解决了这个问题 - VAO 和 VBO 绑定现在可以分开了。但是没有提到索引缓冲区绑定,它仍然是 VAO 状态的一部分,使得扩展对索引渲染毫无用处。我唯一能想到的就是在渲染时为每个块和顶点缓冲区绑定更改更新绑定索引缓冲区的内容,但这没有什么意义。
我的问题是,我是否理解扩展程序的正确功能?如果我这样做了,是否可以使用另一种方法来避免每块 VAO,而无需将每块索引缓冲区合并到一个大 IBO(因为它会使块流管理不必要地复杂化)?
【问题讨论】: