我有一个分配~300个VBO的应用程序。但是,每帧中只有40个用于绘制命令。我已经使用OpenGL分析器验证了这一点。
我注意到如果减少VBO的数量,性能会大大提高。但是,鉴于大部分维生素生态系统大多数时间都没有使用,我很惊讶这是一个问题。我假设大部分维管组都没有分配内存,因为我甚至没有在未使用过的VBO上调用glBufferData。
有谁知道为什么有额外的未使用的VBO会导致性能下降?我猜测它可能依赖于驱动程序(我有一个Nvidia 460GTX)。
此外,我对如何将一堆粒子系统(大多数在任何给定帧中未使用)组合到单个VBO中的方法感兴趣,这样我就不会遇到这个问题。< / p>
编辑:事实证明,性能问题与VBO无关。但是,我在调查时学到了很多关于将数据流式传输到VBO的知识。这篇文章非常有趣:http://onrendering.blogspot.com/2011/10/buffer-object-streaming-in-opengl.html。
答案 0 :(得分:1)
事实证明,在我的情况下,VBO的数量并不是导致性能瓶颈的原因。实际上,似乎大多数OpenGL实现都能很好地处理大量的VBO。我在2009款MacBook Air和Nvidia GTX 460上进行了测试。
切线相关:如果你使用的是很多维多利亚时代,通常有一种方法可以避免这种情况并获得一定的效率。在我的例子中,我使用单个流VBO来渲染来自多个不同粒子系统的粒子,而不是将VBO专用于每个粒子系统。这减少了批次/绘制调用的次数,并释放了一些CPU周期。
以下是有关VBO流媒体的更多信息: http://onrendering.blogspot.com/2011/10/buffer-object-streaming-in-opengl.html