OpenGL ES сбой при перемещении фона, iOS 5.1

У меня есть небольшая проблема с моим приложением iOS. Когда я использую iOS simulator 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];
}

Я думаю, что проблема здесь Есть ли у кого-то идеи моей проблемы? Благодаря

EDIT:

Проблема решена тем, что:

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

возможно, это может помочь кому-то x)

Ответ 1

В iOS 5.1 предусмотрено, что вы не можете позвонить в OpenGL после того, как вас попросили отменить действие.

- (void)applicationWillResignActive:(UIApplication *)application

Это место, где нужно остановить все, будь то CADisplayLink или [[CCDirector sharedDirector] stopAnimation]

Ответ 2

Технически последний способ, с помощью которого можно вызвать вызовы OpenGL, следующий:

- (void)applicationDidEnterBackground:(UIApplication *)application

Хотя часто бывает полезно приостановить рисование после applicationWillResignActive, это всего лишь рекомендация, и некоторые приложения имеют требования, выходящие за рамки этого. Фактически применяется то, что вы не можете делать какие-либо вызовы OpenGL, когда ваше приложение перемещается в фоновый режим.

Из docs:

Как только ваше приложение покинет свой метод applicationDidEnterBackground: он не должен создавать никаких новых вызовов OpenGL ES. Если ваша заявка OpenGL ES-вызов, он завершается iOS.

Кроме того, не забудьте включить glFinish() в качестве вашего последнего вызова GL.

Ответ 3

Проверьте, есть ли у вас FPS node на экране, это может быть рендеринг.

* edit - и проверьте воспроизведение звука