我了解如何使用顶点缓冲对象(Vertex Buffer Object),并且知道它比即时绘制提供了更好的性能。我将要绘制很多2D四边形(精灵),想知道应该为每个精灵创建一个VBO,还是创建一个包含所有数据的VBO?
glBindBuffer
调用切换VBO。然而,如果你创建的VBO包含的数据太多,也可能遇到其他问题。drawArrays()
调用渲染大量对象以获得最佳性能。使用一个(或少量)VBO 来存储大部分或全部几何图形。
通常情况下,渲染场景所需的 API 调用次数越少,效果越好。
这也取决于你想用这些精灵做什么?
它们是动态的吗?你只想改变四边形的中心还是可能修改所有四个点?
这很重要,因为如果你的数据是动态的,那么最简单的方法就是每帧从CPU传输到GPU。也许你可以在GPU上执行所有计算-例如使用几何着色器?
此外,对于非常简单的四边形/精灵,可以使用GL_POINT_SPRITE。这样只需要发送一个顶点即可绘制整个四边形。但缺点是很难旋转它...