该应用程序使用 OpenGL ES2 和 GLKit 框架,以及 GLKitViewController 提供的渲染/更新循环。它曾经在装有 iOS7.1 的 iPad2 上以稳定的 60 fps 运行,但是一旦我将 iPad2 更新到 iOS8.1,完全相同的代码现在在 56-59 FPS 之间波动。(但是,CPU 利用率仍然保持在 40-60% 和以前一样)。
分析显示 OpenGL 绘图命令使用的 CPU 时间比以前大得多。最大的变化似乎是对“GLKBaseEffect prepareToDraw”的调用比以前花费了更长的时间。
(该应用程序使用单个 GLKBaseEffect,它在渲染循环期间的各个点重新配置,每次都需要调用 prepareToDraw。我意识到可以通过拥有多个 GLKBaseEffect 实例来优化,这是我稍后考虑的,但是,在 iOS7.1 上,性能确实很稳定)
我现在正在检查 Instruments 中的 OpenGL ES Analyzer 跟踪,以确定由“GLKBaseEffect prepareToDraw”生成的 OpenGL 调用,看看是否有任何异常,一旦我设法弄清楚任何事情,就会相应地更新帖子。
对于如何在这一点上取得进展的任何指导,我将非常感激 - 为什么在 iOS8.1 上调用 GLKBaseEffect prepareToDraw 可能需要更长的时间?