移动背景,iOS 5.1上的OpenGL ES崩溃

时间:2012-05-16 14:06:34

标签: objective-c ios opengl-es

关于我的iOS应用程序,我有一点问题。 当我使用iOS模拟器5.1 ipad / iphone应用程序正常工作,但当我使用真正的iOS设备(iPad和iPhone 5.1)时

单击主页按钮后,应用程序在后台移动时崩溃... 有这个错误:

libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient:
0x33240094:  trap   
0x33240096:  nop 

我发现OpenGL ES仍在计算并使应用程序崩溃并找到了这个函数:glFinish();

但是这仍然不适用于我的代码示例:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[CCDirector sharedDirector] resume];
}

- (void)applicationWillResignActive:(UIApplication *)application {
    glFinish();
    [[CCDirector sharedDirector] pause];
}

我认为问题就在这里 有人知道我的问题吗? 感谢

编辑:

问题解决了:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[CCDirector sharedDirector] stopAnimation];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[CCDirector sharedDirector] startAnimation];
}

也许这可以帮助某人x)

3 个答案:

答案 0 :(得分:12)

在iOS 5.1中,强制要求在您被要求辞职后无法调用OpenGL。

- (void)applicationWillResignActive:(UIApplication *)application

是停止一切的地方,无论是CADisplayLink还是[[CCDirector sharedDirector] stopAnimation]

答案 1 :(得分:1)

从技术上讲,你可以调用OpenGL的最后一个方法是:

- (void)applicationDidEnterBackground:(UIApplication *)application

虽然在applicationWillResignActive之后暂停绘图通常是个好主意,但这只是一个推荐,一些应用程序有超出此要求的要求。实际上强制执行的是指您的应用移动到后台后无法进行任何OpenGL调用。

来自docs

  

一旦您的应用程序退出其applicationDidEnterBackground:方法,   它不能进行任何新的OpenGL ES调用。如果你的申请成了   OpenGL ES调用,它由iOS终止。

另外,请记住将glFinish()作为最终的GL调用。

答案 2 :(得分:0)

检查屏幕上是否有FPS节点,它可能正在渲染..

*编辑 - 并检查音频播放