【发布时间】:2011-05-26 10:03:34
【问题描述】:
谁能告诉我在 iPad 上可以进行的 OpenGL ES 调用的最大数量是否有限制(即 OpenGL 绘制调用和状态更改)?
我正在开发一款游戏,发现 FPS 很低,所以我想知道这是否与我的大量 OpenGL 调用有关。
【问题讨论】:
谁能告诉我在 iPad 上可以进行的 OpenGL ES 调用的最大数量是否有限制(即 OpenGL 绘制调用和状态更改)?
我正在开发一款游戏,发现 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 Analyzer 工具。我在我的答案here,我用它来识别一些冗余设置。它会为您找到这些调用,并指出它们在您的代码中的位置。您还可以使用 Time Profiler 来查看在渲染帧时是否给 CPU 施加了比应有的负载更多的负载,并跟踪有问题的代码行。
【讨论】:
m using Xcode 4 and profiling it on ipad with ios-4.2.1 but whenever i run it then instrument run for 3 secs and then it crashes heresa 我得到的崩溃日志的一部分 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSCFArray objectForIntKey:]:无法识别的选择器发送到实例 0x118d3fd90” *** 首次抛出时调用堆栈:
据我所知,glCall 的最大数量没有限制。但可以肯定的是,gl 调用的次数越多,所花费的时间就会越多。批量渲染是 OpenGL 必须进行的主要优化之一。
【讨论】:
不要怀疑瓶颈,而是使用 Instruments 来定位它。
跟踪模板OpenGL ES 分析 是首选武器。上次我使用它时,您必须手动将其附加到设备上正在运行的进程(所有其他启动选项均失败)。
【讨论】: