Iphone 即使使用CADisplayLink,也会以40 fps的速度被卡住?

Iphone 即使使用CADisplayLink,也会以40 fps的速度被卡住?,iphone,frame-rate,cadisplaylink,opengl-es,Iphone,Frame Rate,Cadisplaylink,Opengl Es,起初,我使用NSTimer,遇到了帧速率停留在每秒40帧的问题。我已经阅读了有关使用CADisplayLink修复此问题的内容。它似乎工作了一段时间,但最近,应用程序开始在60,然后在一段时间后(约5-20秒),应用程序开始以40-41 fps的速度运行,并卡在那里。我正在剔除,这样当对象不在视野中时,绘制的图形就更少了,但它仍然停留在那里。有一种不同寻常的方法似乎可以暂时(大约10秒)解决这个问题,那就是断开iphone底部的电线,然后再次连接。显然,这并不理想,但只是想知道为什么会发生这种情

起初,我使用NSTimer,遇到了帧速率停留在每秒40帧的问题。我已经阅读了有关使用CADisplayLink修复此问题的内容。它似乎工作了一段时间,但最近,应用程序开始在60,然后在一段时间后(约5-20秒),应用程序开始以40-41 fps的速度运行,并卡在那里。我正在剔除,这样当对象不在视野中时,绘制的图形就更少了,但它仍然停留在那里。有一种不同寻常的方法似乎可以暂时(大约10秒)解决这个问题,那就是断开iphone底部的电线,然后再次连接。显然,这并不理想,但只是想知道为什么会发生这种情况,为什么它会在某种程度上修复它,好像它重置了某些值或其他东西。任何帮助都将不胜感激,谢谢。

您是否检查过您是否真的在丢弃帧?您使用的CPU/GPU是否达到了一秒钟只能绘制40帧的程度,或者问题出在软件的某个地方

请记住,如果
CADisplayLink
无法触发屏幕刷新(因为主线程正忙于绘制前一帧等操作),则可能会跳过它,因为它没有足够的时间完成。因此,如果您的某些帧的长度超过0.01666。。。几秒钟后,您将错过绘制帧的时间间隔,并且速度可能会比现在更慢


还要记住,移动设备并不总是能够快速绘制所有内容。iPhone4中的A4处理器非常好,但每秒填充960x640屏幕像素60次仍然是一个很高的要求。绝大多数用户都不会注意到你的帧速率是40fps而不是60fps——在你的帧速率达到20fps或更低之前,人眼通常不会注意到抖动或屏幕延迟。我有一个非常基本的openGL视图(旋转立方体),它以60fps开始,一旦我运行一个繁重的任务使它慢一点,它就再也不会以60fps的速度出现,并且它的速度保持在稳定的40fps。我使用的是CADisplayLink,它只是在一个测试应用程序上运行,基本上不做任何实验来解决这个问题:/


如果有人能找到解决方案,我会非常感激。

我在3G上也遇到了同样的问题。我已经简化了我的应用程序只是FPS计数器绘制在空白(粉色)后台缓冲区,它仍然是40个fps。 通过谷歌搜索,我发现一个非常类似的问题正在cocos2d-iphone.org论坛上讨论

解决方案是关闭视图控制器的自动旋转。所以我让我的shouldAutorotateToInterfaceOrientation始终返回NO,这就成功了(!!!)。我有稳定的60 FPS。然后我返回我的简单游戏图形,它是稳定的60 FPS。但我的游戏预计运行在横向模式,目前运行在默认的纵向模式


我不想写我自己的自动旋转代码,所以看起来我正在切换回40 fps。有人知道如何避免这种自动旋转帧率下降吗?

在每次CADisplayLink渲染调用时、之后或之间,您在做什么?OpenGL或drawRect渲染?读取像素?收到用户界面回调吗?音频其中一些可能会使硬件图形管道暂停一个刷新周期,或者导致丢失或丢弃帧。我知道当有大量绘图和其他操作进行时,速度会减慢,但奇怪的是,当绘图和其他操作较少时,帧速率永远赶不上。(有点像人们遇到的NSTimer帧速率问题)。顺便说一句,我正在使用Opengl。我将尝试一些解决方法,如果我发现任何东西,我会发布我记得在Apple文档中读到的,如果你在Opengl ES应用程序上进行自动旋转,你应该使用gl变换来“你自己”旋转屏幕,而不是依赖UIViewController的功能,以获得更好的性能。。。