在iPhone上限制FPS费率?

时间:2011-12-27 11:15:06

标签: iphone opengl-es frame frame-rate cap

如何限制我的OpenGL应用程序的FPS速率(我正在使用CADisplayLink),以便我可以将CPU留给其他人使用?

3 个答案:

答案 0 :(得分:6)

虽然已经回答了这个问题但我想稍微扩展一下。

推荐的方法确实是使用CADisplayLink和frameInterval来限制基本帧速率,硬件中的显示本身具有固定的刷新率,CADisplayLink方法将硬件刷新与调用绘图方法同步,因此绘图方法具有大部分时间工作。

由于CADisplayLink是硬件生成的,你可以用它来做的唯一事情就是划分时间,这就是frameInterval要做的事情。

frameInterval = 1可以获得60 fps

frameInterval = 2可以获得30 fps

frameInterval = 3可以获得20 fps

我使用了很多frameInterval = 5作为菜单,例如,它仍然给我12fps(约合理简单动画的最小值),电池消耗大幅减少。

我还使用了动态帧速率变化,通过测量平均帧速率并选择了帧间间隔,这有助于保持游戏流畅。

FPS在这些值之外并不是非常稳定并且通常会导致抖动动画,我们必须处理的时间片是1/60秒,所以只有它的倍数会产生流畅的动画。即使您不使用CADisplayLink并制作完美的时序路由来提供其他内容,硬件仍将使用该时间片进行绘制。

答案 1 :(得分:4)

我没有从功能中获得“限制我的FPS率”这个词。但为了使你的openGL应用程序运行顺畅,它应该有一个高达60的FPS(在iOS 5中),你应该保持(我认为在你的情况下限制)FPS以获得更好的性能。

Xcode提供了许多工具来帮助您分析和调整OpenGL ES应用程序,如OpenGL ES Programming Guide for iOS中所述:

  

OpenGL ES Performance Detective - 首次在Xcode 4中引入,OpenGL ES Performance Detective可以快速帮助您确定是否   OpenGL ES是您应用程序的主要瓶颈;它应该是   您运行的第一个工具来测试您的OpenGL ES代码。一个关键优势   OpenGL ES Performance Detective是它可以自动指向的   您立即到应用程序中的关键位置   最大限度地降低OpenGL ES的性能。使用OpenGL ES性能   侦探,启动该工具并使用它来选择您的应用程序   基于iOS的设备连接到您的开发机器。当你的   应用程序到达您感兴趣的应用程序中的位置   给你,点击收集证据按钮。 OpenGL ES性能   Detective记录您的应用程序生成的OpenGL ES命令   系列帧,分析命令以发现密钥   瓶颈并提供具体的性能建议。该   OpenGL ES Performance Detective可以在里面找到   / Developer / Applications / Graphics Tools / directory。

     

仪器(OpenGL ES分析) - 在Xcode 4中也引入了OpenGL ES分析工具,它提供了许多功能来帮助您   研究您的应用程序对OpenGL ES的使用。 OpenGL ES分析   工具记录您的应用程序生成的OpenGL ES命令   当您的应用程序不遵循最佳实践时会发出警告   本节目指南中描述的;它建议具体的变化   你可以遵循最佳实践。 OpenGL ES分析工具   允许您查看用于生成每个帧的所有命令   动画。最后,OpenGL ES Analysis工具允许您   选择性地禁用部分图形管道以确定是否   管道的那一部分是你的重要瓶颈   应用。 OpenGL ES分析工具为您提供了一套很棒的工具   用于手动分析应用程序并了解其内部的工具   运作。但是,它不会自动指向您   您的应用程序当前瓶颈的位置。对于   例如,即使它提出了如何改善你的建议   OpenGL ES编码实践,这个建议并不意味着   更改代码会自动改善性能   你的申请。

     

仪器(OpenGL ES驱动程序) - Xcode 3及更高版本提供了OpenGL ES驱动程序工具。它不直接分析OpenGL   您的应用程序提交的ES命令。相反,它允许你   监控有关如何使用图形硬件的关键统计信息   你的申请。例如,您可以使用它来跟踪数量   用于保存纹理数据的字节以及这些数字的变化方式   帧到帧。

答案 2 :(得分:4)

一般情况下,如果您使用Apple推荐的CADisplayLink方法绘制应用,则无法控制刷新率。但是,您可以将frameInterval属性设置为大于1的值以跳过绘图框,从而降低帧速率。例如,frameInterval = 2应该给你大约30 fps而不是60 fps。

将一些应用程序工作放在另一个线程上或优化绘图任务可能比裁剪帧速率更有用。