iPhone和顶点缓冲对象

时间:2010-05-03 21:23:09

标签: iphone performance opengl-es

过去几周我刚开始玩iphone上的opengl es,我正在考虑重构一些代码来使用Vertex Buffer Objects(VBO)。在我这样做之前,我想确保它值得。问题是afaik创建VBO的唯一原因是将一大块数据转移到图形卡上,这样就不需要在使用它时从系统RAM中检索它。然而,iPhone没有任何我知道的专用ram,所以我很难理解为什么我会从使用VBO中受益。我已经看到互联网上的谈话存在矛盾的意见,苹果当然希望开发人员使用它,所以可能仍然有理由使用它们,但只是想看看SO上是否有人有意见要添加。

3 个答案:

答案 0 :(得分:1)

我发现iPhone 3G没有性能提升。我把一堆东西转移到维也纳国际组织,但最终支持它,因为它使我更难以追求其他性能提升。这并不是我希望的快速25%的性能提升。

我已经读到某个地方,它可以在较新的硬件(3GS)上有所作为,但我没有提到支持它。

答案 1 :(得分:0)

这取决于。 (抱歉)。

Rob没有看到他的设置有所改善,但here is an interesting post确实看到了很大的进步。

答案 2 :(得分:0)

存在VBO的主要原因是3D模型上存在静态数据。您遇到的第一个瓶颈是将数据复制到视频内存的速度很慢(通过使用不可用的glBegin / glEnd块或glVertexPointer,glBufferData和朋友)。

让我们想象一下旧的“飞行烤面包机”屏幕保护程序。所有的toast都是静态的(只改变位置) - 为什么浪费资源将每一帧从CPU的内存复制到GPU?使用缓冲区复制一次并使用单个命令绘制它。而且,根据您的动画制作方式,即使是动画的烤面包机也可以静态描述。

我的第一个2D游戏是在没有VBO的情况下开始的。当我改为VBO时,没有区别(比如Rob)。但是,当我重构使用更多静态缓冲区时,FPS从20变为40.由于我的目标是达到30,我很满意。我有一些想法可以进行更多的重构,让一切都保持静止,但我现在没有时间(游戏正在审核中,下一个将来)。