Как работать с многозадачностью в приложениях на базе OpenGL ES на iOS 4? - PullRequest
2 голосов
/ 24 июля 2010

Я смотрю видео WWDC (сеанс 105), в котором говорится о многозадачности с iOS 4. Только что было упомянуто кое-что интересное:

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

Как справиться с этим «требованием», если все приложение основано на OpenGL?

Примечание: я задал этот вопрос , потому что мое приложение на базе OpenGL, кажется, отлично выполняет многозадачность в симуляторе, но не на устройстве (iPhone 4) ... приложение автоматически завершается при запуске на устройство. Это может быть связано с «неэффективным» распределением памяти (я не высвобождаю ресурсы, когда приложение переходит в фоновый режим) ... или это может быть связано с ограничением «отсутствие использования графического процессора», о котором я только что узнал.

Ответы [ 2 ]

3 голосов
/ 27 июля 2010

Вам необходимо отделить логику обработки от рисования и обновления (вызовы OpenGL).Затем вы можете установить глобальное состояние для вашего приложения при входе и выходе из фоновых состояний (applicationDidEnterBackground / applicationWillEnterForeground) и использовать этот флаг, чтобы пропустить ваши вызовы рисования OpenGL (и любой другой код, который не должен выполняться из фонового состояния).

0 голосов
/ 26 мая 2013

См. Документацию на Руководство по программированию OpenGL ES для iOS

В частности, следует отметить, что вызов glFinish () должен быть выполнен в результате applicationDidEnterBackground: и / или applicationWillResignActive:.

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

...