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