【发布时间】:2011-12-27 11:15:06
【问题描述】:
如何限制我的 OpenGL 应用程序(我正在使用 CADisplayLink)上的 FPS 速率,以便我可以将 CPU 留给其他事情?
【问题讨论】:
标签: iphone opengl-es frame frame-rate cap
如何限制我的 OpenGL 应用程序(我正在使用 CADisplayLink)上的 FPS 速率,以便我可以将 CPU 留给其他事情?
【问题讨论】:
标签: iphone opengl-es frame frame-rate cap
虽然已经回答了这个问题,但我想扩展一下。
推荐的方法确实是使用 CADisplayLink 和 frameInterval 来限制你的基本帧率,硬件中的显示本身具有固定的刷新率,并且 CADisplayLink 方法将硬件刷新与调用我们的绘图方法同步,因此绘图方法具有大部分时间都在工作。
由于 CADisplayLink 是硬件生成的,您唯一可以用它做的事情就是划分时间,这就是 frameInterval 要做的事情。
frameInterval = 1 获得 60 fps
frameInterval = 2 获得 30 fps
frameInterval = 3 获得 20 fps
例如,我在菜单中使用了很多 frameInterval = 5,它仍然给我 12fps(大约是合理的简单动画的最小值),并且电池消耗大大减少。
我还使用了动态帧率变化,通过测量平均帧率并选择下面的 frameInterval,有助于保持游戏流畅。
这些值之外的 FPS 不是很稳定,通常会导致动画抖动,我们必须处理的时间片是 1/60 秒,所以只有它的倍数才能产生流畅的动画。即使您不使用 CADisplayLink 并制作完美的时序路由来交付其他内容,硬件仍会使用该时间片进行绘制。
【讨论】:
一般来说,如果您使用 Apple 推荐的 CADisplayLink 方法来绘制您的应用程序,您并不能真正控制刷新率。但是,您可以将 frameInterval 属性设置为大于 1 的值以跳过绘图帧,从而降低帧速率。例如,frameInterval = 2 应该给你大约 30 fps 而不是 60 fps。
将一些应用程序工作放在另一个线程上或优化绘图任务可能比降低帧速率更有用。
【讨论】:
我没有从函数中得到“限制我的 FPS 速率”一词。但是为了让您的 openGL 应用程序运行顺畅,它的 FPS 应该高达 60(在 iOS 5 中),并且您应该保持(我认为在您的情况下限制)该 FPS 以获得更好的性能。
Xcode 提供了许多工具来帮助您分析和调整 OpenGL ES 应用程序,如 OpenGL ES Programming Guide for iOS 中所述:
OpenGL ES Performance Detective — OpenGL ES Performance Detective 首次在 Xcode 4 中引入,它可以快速帮助您确定是否 OpenGL ES 是您应用程序的主要瓶颈;它应该是 您运行的第一个工具来测试您的 OpenGL ES 代码。的一个关键优势 OpenGL ES Performance Detective 是它可以自动引导 您立即到应用程序中的关键位置 最会降低 OpenGL ES 的性能。使用 OpenGL ES 性能 侦探,启动该工具并使用它来选择您的应用程序 连接到您的开发机器的基于 iOS 的设备。当你的 应用程序到达您的应用程序中感兴趣的位置 对您来说,请单击收集证据按钮。 OpenGL ES 性能 侦探记录您的应用程序生成的 OpenGL ES 命令 一系列帧,分析命令以发现关键 瓶颈并提供具体的性能建议。这 OpenGL ES Performance Detective 可以在里面找到 /Developer/Applications/Graphics Tools/ 目录。
仪器(OpenGL ES 分析) — 同样在 Xcode 4 中引入,OpenGL ES 分析工具提供了许多功能来帮助您 研究您的应用程序对 OpenGL ES 的使用。 OpenGL ES 分析 工具记录您的应用程序生成的 OpenGL ES 命令和 当您的应用程序未遵循最佳实践时会向您发出警告 本编程指南中描述;它建议进行具体更改 您可以遵循最佳实践。 OpenGL ES 分析工具 允许您查看用于生成每个帧的所有命令 动画。最后,OpenGL ES 分析工具允许您 有选择地禁用图形管道的部分以确定是否 管道的那一部分是您的重大瓶颈 应用。 OpenGL ES 分析工具为您提供了一套很棒的 手动分析您的应用程序并了解其内部的工具 工作。但是,它不会自动将您指向 您的应用程序当前遇到瓶颈的位置。为了 例如,即使它提供了有关如何改进您的 OpenGL ES 编码实践,该建议并不意味着 更改代码会自动提高性能 您的应用程序。
仪器(OpenGL ES 驱动程序) — Xcode 3 及更高版本提供了 OpenGL ES 驱动程序工具。它不直接分析OpenGL 您的应用程序提交的 ES 命令。相反,它允许您 监控有关图形硬件如何使用的关键统计数据 你的申请。例如,您可以使用它来跟踪 用于保存纹理数据的字节以及这些数字如何变化 帧到帧。
【讨论】: