任何人都可以告诉我,在iPad上可以进行OpenGL ES调用的最大数量是否有限制(即OpenGL绘制调用和状态更改)?在iPad上可以进行的OpenGL ES调用的最大数量是多少?
我正在研究一款游戏并看到低FPS,所以我不知道它是否对我的大量OpenGL调用有任何影响。
任何人都可以告诉我,在iPad上可以进行OpenGL ES调用的最大数量是否有限制(即OpenGL绘制调用和状态更改)?在iPad上可以进行的OpenGL ES调用的最大数量是多少?
我正在研究一款游戏并看到低FPS,所以我不知道它是否对我的大量OpenGL调用有任何影响。
OpenGL ES命令没有真正的最大值,但每个命令都有一些与之相关的开销。应该消除冗余状态更改,并且应该通过将几何分组按照使用一种状态的所有内容进行绘制的方式来减少昂贵的状态更改,然后再进行下一步。 Apple在其OpenGL ES Programming Guide for iOS中对此有一些建议。
但是,我很少发现OpenGL ES命令是我的应用程序中显着性能下降的原因。更大的问题往往是由于几何体的大小或者任何着色器的复杂性或其他适用于场景的效果。我分享了一些我曾经申请过的用于减小几何尺寸here的技巧,以及一个用于剖析着色器here的工具,但我自己仍然是learning the ins-and-outs of shader tuning。
如果您确实在意微调您所做的OpenGL调用,那么使用的最佳性能分析工具是Xcode 4附带的新OpenGL ES分析工具。我将展示该工具的几个示例屏幕在我的回答here中,我用它来识别一些冗余设置。它会为你找到这些电话,并指出它们在你的代码中的位置。您还可以使用Time Profiler来查看在渲染帧时是否对CPU施加了更多的负载,并追踪违规代码行。
据我所知,glCalls的最大数量没有这样的限制。但是,肯定地说,电话的数量越多,所花的时间就越多。批处理渲染是OpenGL必须进行的主要优化之一。
我正在通过批处理,但仅绘制边界卷中的那些对象如果处于边界卷中,我将单独加载每个对象 – kd3D 2011-05-26 11:52:59
您可以将对象加载到不同的线程中。你可以参考这篇文章中提出的帖子:: http://stackoverflow.com/questions/1253145/how-to-use-opengl-es-on-a-separate-thread-on-iphone – 2011-05-26 12:07:50
我做了试图使用分析工具,但当我这样做的工具崩溃 – kd3D 2011-05-30 12:33:38
时间剖析器帮助现在我有24左右的FPS,但我不想增加更多 – kd3D 2011-05-31 10:12:41
@ kd3D - 我从来没有在这之前我的仪器崩溃。您是否正在使用最新稳定版本的Xcode 4,同时在目标设备上运行iOS 4.0+?这台仪器需要运行iOS 4.0。 – 2011-05-31 14:08:46