gen*_*sys 6 iphone performance opengl-es
我现在正在尝试很长一段时间来优化我的游戏帧速率而不会取得进展.我正在运行最新的iPhone SDK并拥有iPhone 3G 3.1.2设备.
我调用了大约150个drawcalls,总共渲染了大约1900个三角形(所有对象都使用两个纹理层和多纹理进行纹理化.大多数纹理来自存储在pvrtc 2bpp压缩纹理中的相同textureAtlasTexture).这在我的手机上以30 fps的速度呈现,在我看来,这对于仅1900个三角形来说太低了.
我尝试了许多方法来优化性能,包括将对象批处理,在CPU上转换顶点以及在单个drawcall中渲染它们.这个yelds 8 drawcalls(选择150个drawcalls),但性能大致相同(fps降至26fps左右)
我使用存储在交错数组中的32字节顶点(12字节位,12字节法线,8字节uv).我正在渲染triangleLists,顶点按TriStrip顺序排序.
我做了一些分析,但我真的不知道如何解释它.
仪器 - 使用仪器采样和采样这个结果:http://neo.cycovery.com/instruments_sampling.gif 告诉我在"mach_msg_trap"中花了很多时间.我用谷歌搜索它,似乎调用这个函数是为了等待其他一些事情.但等待什么?
仪器 - 带有openGL模块的openGL仪器大喊这个结果:http://neo.cycovery.com/intstruments_openglES_debug.gif 但是我真的不知道这些数字告诉我的是什么
鲨鱼剖析:使用鲨鱼进行剖析并没有告诉我太多:http: //neo.cycovery.com/shark_profile_release.gif 最大数字是10%,由DrawTriangles使用 - 其余部分用于非常小的百分比函数
任何人都可以告诉我,我还能做些什么来找出瓶颈并帮助我解释这些分析信息?
非常感谢!
不幸的是,我不太熟悉 OpenGL,但从三个结果中可以看出以下几点:
1) 在采样仪器中,您可能有某种后台网络连接吗?
2)渲染的利用率对我来说似乎很低(尽管我不知道如何提高它们)。
3) 尽管 10% 看起来很低,但这似乎是一个很好的攻击点 - 然而几乎同样怀疑在 memcpy 上花费了太多时间。此外,ValidateState 的数量较大,可能会阻碍您。
就工具而言,我认为您正在使用正确的工具来检查性能,您只需要更多地考虑这些工具对您的应用程序意味着什么。