Технические вопросы и ответы QA1766

Как фиксировать OpenGL сбои приложения ES при перемещении в фон

Q: Мой OpenGL сбои приложения ES при перемещении в фон. Как я фиксирую его?

A: Если Ваш OpenGL сбои приложения ES при перемещении в фон, и Вы получаете отчет катастрофического отказа, содержащий отслеживание стека, заканчивающееся libGPUSupportMercury.dylib: gpus_ReturnNotPermittedKillClient + 0 как показано в Перечислении 1, это указывает, что приложение попыталось сделать рендеринг с OpenGL ES в фоновом режиме.

  Отслеживание стека перечисления 1

Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libGPUSupportMercury.dylib    	0x30570094 gpus_ReturnNotPermittedKillClient + 0
1   libGPUSupportMercury.dylib    	0x305700ae gpus_KillClient ( )
2   libGPUSupportMercury.dylib    	0x305705ba gpusSubmitDMABuffers ( )
3   IMGSGX535GLDriver             	0x34bd29b8 SubmitPacketsIfAny ( )
4   IMGSGX535GLDriver             	0x34bd2ad0 glrFlushContextToken ( )
5   GLEngine                      	0x37719c4a gliPresentViewES ( )
6   OpenGLES                      	0x323df6b4 -[EAGLContext presentRenderbuffer:] ( )
...
...

Приложение ES OpenGL будет завершено, если оно попытается выполнить команды OpenGL ES в фоновом режиме. Ваше приложение должно гарантировать, что все ранее представленные команды были закончены и затем прекращают представлять до перемещения в фоне. Посмотрите подробные данные о том, как достигнуть этого в Реализации Многозадачно-осведомленного OpenGL глава Приложения ES OpenGL Руководство по программированию ES для iOS.

Посмотрите Отладку Развернутые приложения для iOS для получения информации о том, как получить отчет катастрофического отказа.



История версии документа


ДатаПримечания
09.04.2012

Новый документ, описывающий, как фиксировать OpenGL сбои приложения ES при перемещении в фон.