【问题标题】:iPhone and Vertex Buffer ObjectsiPhone 和顶点缓冲区对象
【发布时间】:2011-03-10 23:28:15
【问题描述】:
在过去的几周里,我刚刚开始在 iphone 上使用 opengl es,我正在考虑重构我的一些代码以使用顶点缓冲区对象 (VBO)。在我这样做之前,我想确保它是值得的。问题是afaik创建VBO的唯一原因是将一大块数据转移到图形卡上,这样在使用时就不需要从系统内存中检索它。然而,iPhone 没有我知道的任何专用内存,所以我很难理解为什么我会从使用 VBO 中受益。我在互联网上看到了意见相左的讨论,苹果当然希望开发人员使用它,所以可能仍然有理由使用它们,但只是想看看 SO 上是否有人有意见要补充。
【问题讨论】:
标签:
iphone
performance
opengl-es
【解决方案1】:
我没有看到 iPhone 3G 的性能提升。我将一堆东西转移到 VBO,但最终放弃了,因为这让我更难以追求其他性能提升。这不是我希望的 25% 的快速性能提升。
我在某处读到它可以对较新的硬件 (3GS) 产生影响,但我没有参考资料来支持它。
【解决方案3】:
存在 VBO 的主要原因是 3D 模型上存在静态数据。您遇到的第一个瓶颈是将数据复制到视频内存的速度很慢(通过使用不可用的 glBegin/glEnd 块或 glVertexPointer、glBufferData 和朋友)。
让我们想象一下旧的“飞行烤面包机”屏幕保护程序。所有 toast 都是静态的(仅更改位置) - 为什么要浪费资源将它们从 CPU 的内存中的每一帧复制到 GPU 的?使用缓冲区复制一次并使用单个命令绘制它。而且,根据您制作动画的方式,即使是动画烤面包机也可以以静态方式描述。
我在没有 VBO 的情况下开始的第一个 2D 游戏。当我更改为 VBO 时,没有区别(如 Rob)。但是,当我重构以使用更多静态缓冲区时,FPS 从 20 变为 40。由于我的目标是达到 30,因此我很满意。我有一些想法可以进一步重构,让一切都保持不变,但我现在没有时间(游戏正在审查中,下一个即将到来)。