Является ли пример hello-gl2 из Android NDK пауза / возобновление правильным? - PullRequest
3 голосов
/ 07 ноября 2011

Вопрос:

Учитывая пример hello-gl2 из Android NDK r6b, является ли этот пример правильным, когда пользователь неоднократно вызывает действия паузы / возобновления GLSurfaceView?Я спрашиваю, потому что каждый раз, когда вызывается GL2JNIView.Renderer.onSurfaceChanged (), он создает все ресурсы OpenGL (шейдеры, текстуры), но никогда не уничтожает их.

Фон:

I 'Я пытаюсь отладить некоторые игры OpenGL ES 2.0, реализованные с использованием C ++ и JNI, которые ведут себя некорректно во время паузы / возобновления.Я пытался найти некоторый справочный пример для этого, но я не нашел ни одного, кроме упомянутого примера hello2-gl из NDK, который может ИМХО создавать утечки памяти, и этой более сложной версии , котораяВ настоящее время я использую, но там, где кажется, что контекст OpenGL уничтожается до того, как GLSurfaceView завершает свой метод onPause (), где я уничтожаю все шейдеры и текстуры OpengGL, связанные с контекстом.Не могли бы вы указать на какой-нибудь действительно правильный пример OpenGL ES 2.0 на Android с использованием NDK относительно правильного способа приостановки / возобновления обработки ресурсов OpenGL?

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 01 января 2012

Это не совсем правильный жизненный цикл, но он близок.Каждый раз, когда поверхность GL становится полностью скрытой, ее контекст EGL будет уничтожен, и когда это произойдет, любые ресурсы, выделенные вами через вызовы OpenGL, будут освобождены.Таким образом, нет необходимости вручную освобождать эти ресурсы, если ваше приложение не требует активного управления во время выполнения (например, слишком много текстур для кэширования в памяти и т. Д.).

Обратите внимание, что это относится только к ресурсам и памяти, выделеннымOpenGL через вызовы OpenGL.Любые буферы, которые вы выделяете вне OpenGL, должны быть освобождены, как обычно.

...