GLKViewController:错误的fps

时间:2011-10-28 16:00:21

标签: iphone frame-rate glkit

希望有一些GLKViewController专家,因为我有一些问题:)

只是我的应用程序的快速描述。我有一个UINavigationController,我在其中推送不同的屏幕。

在某些时候,我进入了我的游戏界面,这是UINavigationController的一个子类。在这个屏幕中,在viewDidLoad我手动创建一个EAGLContext,GLKView并实例化一个新的GLKViewController(以处理我的更新和绘制调用)。

我设置了30的首选fps。

问题是前3-4个更新调用带有正确的DT,但是我有2-3帧,它们之间有1秒。我使用controller.timeSinceLastUpdate测量DT。 所以我想:

dt=0.33
dt=0.33
dt=0.33
dt=1.07
dt=1.05
dt=0.33
dt=0.33

在此之后,我只有DT次有效。我不知道为什么这些帧有这种延迟。我测量了更新后的时间和绘制方法,它不到1秒钟。

另外,我没有加载任何纹理/创建任何几何体。一切都是在加载时完成的,因为它是一个相当小的游戏。

另外,如果我弹出游戏画面控制器,然后再推回游戏画面的另一个实例,这个新的GLKViewController将每隔1秒大约调用一次我的更新方法。

使用GLKViewController时,有没有人遇到帧速率问题?

谢谢,

2 个答案:

答案 0 :(得分:1)

问题是你不知道设备在刷新之间还做了什么:)

您可能只花费0.1秒来处理下一帧,但如果有内存警告,那么您应用的其他位也需要时间来处理。我猜gl控制器最好保持首选的帧速率,但如果后台正在进行批量处理,那么它就无法做到这一点。

只要你确保你的代码尽可能快地渲染并且没有像帧速率一样尖峰,那么它就不是你的渲染路径。从你的问题来看,听起来你已经测试过了。

您可能想要做的另一件事是留意可能传递到您应用中的其他通知(即内存警告)。

最后,缓慢的帧是否存在模式 - 它们是否与正在加载的新图像或文件访问一致?你事先做过尽可能多的事吗?编辑 - 重读你的问题让我觉得你已经这样做了,对不起!

抱歉,我再也不能使用了:(

答案 1 :(得分:0)

好的,所以我终于明白了。事实证明它甚至与GLKViewController无关(惊喜!)。

这与我正在显示游戏屏幕视图控制器的方式有关,如下所示:

    GameAreaViewController* gameController = [[GameAreaViewController alloc] init];

    [UIView beginAnimations:@"animation" context:nil];
    [self.navigationController pushViewController: gameController animated:NO]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO]; 
    [UIView setAnimationDuration:0.7f];
    [UIView commitAnimations];        

    SAFE_DEL(gameController);

如果我使用的动画持续时间为0.3f,那么我就不会有任何延迟。在0.5f有时我得到它,在0.7我总是得到它。