Iphone GLKViewController:不正确的fps

Iphone GLKViewController:不正确的fps,iphone,frame-rate,glkit,Iphone,Frame Rate,Glkit,希望有一些GLKViewController专家在那里,因为我有一些问题:) 只是对我的应用程序的快速描述。我有一个UINavigationController,可以在其中推送不同的屏幕 在某个时刻,我进入我的游戏屏幕,它是UINavigationController的一个子类。在此屏幕中,在viewdiload中,我手动创建一个EAGLContext、GLKView并实例化一个新的GLKViewController(以处理更新和绘制调用) 我将首选fps设置为30 问题是,前3-4次更新调用使

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

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

在某个时刻,我进入我的游戏屏幕,它是UINavigationController的一个子类。在此屏幕中,在
viewdiload
中,我手动创建一个EAGLContext、GLKView并实例化一个新的GLKViewController(以处理更新和绘制调用)

我将首选fps设置为30

问题是,前3-4次更新调用使用了正确的DT,但是我有2-3帧,它们之间有1秒。我使用
控制器测量DT。TimesInclastUpdate
。 所以我觉得:

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时对帧速率有问题吗


谢谢,

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

你可能只花了0.1秒处理下一帧,但如果有内存警告,那么你的应用程序的其他部分也需要时间来处理。我猜gl控制器将尽最大努力保持首选帧速率,但如果在后台进行大量操作,则它对此无能为力

只要确保您的代码以尽可能快的速度渲染,并且不会以与帧速率相同的方式出现峰值,那么它就不是您的渲染路径。从你的问题来看,听起来你已经测试过了

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

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


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

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

你可能只花了0.1秒处理下一帧,但如果有内存警告,那么你的应用程序的其他部分也需要时间来处理。我猜gl控制器将尽最大努力保持首选帧速率,但如果在后台进行大量操作,则它对此无能为力

只要确保您的代码以尽可能快的速度渲染,并且不会以与帧速率相同的方式出现峰值,那么它就不是您的渲染路径。从你的问题来看,听起来你已经测试过了

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

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


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

好的,所以我终于找到了答案。结果发现它甚至与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时,我总是得到它。

好的,所以我终于找到了它。结果是,它甚至与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时,我总是得到它。

谢谢你的回答。我所看到的唯一模式就是我所说的。我第一次注意到两次(2-3次)之后的这种大延迟我第一次进入游戏屏幕时会出现画面。如果我回到主菜单并再次尝试进入游戏,我只会在1秒左右得到画面。我会继续调查,如果我发现了什么,我会将其发布在这里。谢谢你的回答。我所看到的唯一画面正如我所说的。我第一次注意到两次(2-3次)后出现了如此大的滞后第一次进入游戏屏幕时会出现画面。如果我返回主菜单并再次尝试进入游戏,我只会在1秒左右得到画面。我会继续调查,如果我发现了什么,我会将其发布在这里。