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 - и проверьте воспроизведение звука