【问题标题】:Is there a maximum number of OpenGL ES calls you can make on iPad?您可以在 iPad 上进行的 OpenGL ES 调用的最大数量是多少?
【发布时间】:2011-05-26 10:03:34
【问题描述】:

谁能告诉我在 iPad 上可以进行的 OpenGL ES 调用的最大数量是否有限制(即 OpenGL 绘制调用和状态更改)?

我正在开发一款游戏,发现 FPS 很低,所以我想知道这是否与我的大量 OpenGL 调用有关。

【问题讨论】:

    标签: iphone ios ipad opengl-es


    【解决方案1】:

    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 施加了比应有的负载更多的负载,并跟踪有问题的代码行。

    【讨论】:

    • 我确实尝试过使用分析器工具,但每当我这样做时,工具就会崩溃
    • 时间分析器帮助我现在有 24 左右的 fps,但我不想再增加它
    • @kd3D - 我以前从来没有遇到过这个仪器崩溃过。您是否在目标设备上运行 iOS 4.0+ 时使用最新的稳定版 Xcode 4?此仪器需要 iOS 4.0 才能运行。
    • Im 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” *** 首次抛出时调用堆栈:
    【解决方案2】:

    据我所知,glCall 的最大数量没有限制。但可以肯定的是,gl 调用的次数越多,所花费的时间就会越多。批量渲染是 OpenGL 必须进行的主要优化之一。

    【讨论】:

    • 我正在传递批次,但只绘制边界体积中的那些对象,如果在边界体积中,我将分别加载每个对象
    • 您可以在不同的线程中加载对象。你可以参考这个帖子里的帖子::stackoverflow.com/questions/1253145/…
    【解决方案3】:

    不要怀疑瓶颈,而是使用 Instruments 来定位它。

    跟踪模板OpenGL ES 分析 是首选武器。上次我使用它时,您必须手动将其附加到设备上正在运行的进程(所有其他启动选项均失败)。

    【讨论】:

    • 您能否说明使用哪种仪器以及如何定位瓶颈
    • 这表明该仪器不允许附加到任何进程,每次我直接用仪器启动它时都会导致仪器崩溃
    猜你喜欢
    • 2018-11-12
    • 2011-09-04
    • 2015-02-15
    • 2013-04-09
    • 2021-10-12
    • 2011-01-31
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多