所以我理解如何使用顶点缓冲区对象,并且它提供了比立即模式绘制大的性能提升。我将绘制很多2D四边形(精灵),我想知道我是否应该为每个创建一个VBO,或者创建一个VBO来保存所有数据?
答案 0 :(得分:18)
您不应该为每个精灵/四元组使用新的VBO。因此,将它们全部放在一个VBO中将是更好的解决方案。
但总的来说,我不认为这可以用一句话来回答。
为每个Quad创建一个新的VBO不会给你带来真正的性能提升。如果你这样做,那么用glBindBuffer
调用切换VBO会浪费很多时间。但是,如果您创建包含太多数据的VBO,则可能会遇到其他问题。
小维管组织:
大型维也纳国际中心:
drawArrays()
调用来渲染大量对象,以获得最佳效果。以下链接可以为您提供帮助:
答案 1 :(得分:1)
使用一个(或少量)VBO来保存所有/大部分几何体。
通常,渲染场景所需的API调用越少越好。
答案 2 :(得分:1)
这还取决于你想用这些精灵做什么?
他们有活力吗?你想只改变四边形的中心还是修改所有四个点?
这一点非常重要,因为如果您的数据是动态的,那么最简单的方法就是每帧必须从cpu转移到gpu。也许你可以在GPU上执行所有计算 - 例如使用几何着色器?
对于非常简单的四边形/精灵,也可以使用GL_POINT_SPRITE。有了这个,只需要为整个四边形发送一个顶点。但缺点是它很难旋转......