Вызов функций openGL после onPause ()

У меня есть Java-приложение для Android, использующее OpenGL ES 1.1, и я столкнулся со следующей проблемой: когда приложение свернуто, onPause() вызывается для действия. На этом этапе я хотел бы сохранить одну из текстур GL (в которую я визуализировал материал) и сохранить ее в памяти, пока контекст openGL уничтожен. Затем, когда приложение возобновится, я смогу вернуть свою текстуру. Однако для получения текстуры openGL требуются команды GL, которые могут выполняться только потоком рендеринга, который может иметь или не иметь больше итераций рендеринга непосредственно перед его остановкой.

Есть известный способ справиться с этим?


person Vladimir Gazbarov    schedule 26.08.2013    source источник


Ответы (1)


Самый простой способ сделать это в Java - скопировать изображение текстуры в растровое изображение Android с помощью glReadPixels (). Сначала вам нужно отрендерить текстуру во фреймбуфер или в RenderBuffer, прикрепленный к FBO. Этот подход будет медленным, потому что glReadPixels () очень медленный. Кроме того, класс Bitmap неправильно обрабатывает изображения альфа-текстуры, если они не являются полностью непрозрачными. Bitmap преобразует их в формат с предварительным умножением.

Лучшим подходом было бы использование собственного кода, который все равно должен был бы вызывать glReadPixels (), но мог бы сохранить изображение в обычном буфере памяти без преобразования формата.

person ClayMontgomery    schedule 27.08.2013
comment
Проблема в том, что вы не можете вызывать команды GL после вызова onPause, потому что команды gl поступают из GLThread, который, возможно, уже остановился. - person Vladimir Gazbarov; 27.08.2013
comment
Если вы используете GLSurfaceView или TextureView, как показывают примеры, они предоставляют поток для команд gl, отдельный от Activity и основных потоков пользовательского интерфейса. Они не остановятся, когда действие приостановлено. - person ClayMontgomery; 27.08.2013