Сохранение/воссоздание текстуры OpenGL Framebuffer/Renderbuffer во время паузы активности

У меня есть активность Android, использующая текстуру с динамическим содержимым (нарисованную через Framebuffer/Renderbuffer).

Когда активность приостанавливается/возобновляется, текстура (как и все текстуры) теряется и ее необходимо создавать заново.

Есть ли способ сохранить содержимое динамической текстуры в какой-либо постоянный объект при паузе и воссоздать текстуру из этого объекта при возобновлении?

Я уже нашел несколько потоков, описывающих хакерские способы предотвращения аннулирования текстур при паузе, но, если возможно, я хотел бы сделать это «по правилам» и освободить память текстуры при паузе / воссоздать текстуры при возобновлении.


person TomMKV    schedule 11.09.2013    source источник


Ответы (1)


Вы можете использовать glReadPixels для передачи содержимого FBO в постоянный буфер вашего приложения. Затем, после возобновления, вы можете загрузить эти данные обратно в текстуры. Для восстановления буфера рендеринга потребуется загрузить промежуточную текстуру, а затем отрисовать ее с использованием полного четырехугольника области просмотра в FBO с прикрепленным буфером рендеринга. Поэтому я предлагаю вам не использовать Renderbuffers, если вы можете их избежать. Используя текстуру, вы можете сохранить промежуточный шаг.

person datenwolf    schedule 11.09.2013
comment
Мне удалось сохранить пиксельные данные с помощью glReadPixels и воссоздать текстуру из сохраненных данных. Проблема в том, что сохраненные пиксельные данные являются текущим содержимым экрана, а НЕ пиксельными данными текстуры, прикрепленной к объекту фреймбуфера. Как я могу указать прикрепленную текстуру вместо экрана в качестве источника для glReadPixels? - person TomMKV; 11.09.2013
comment
@TomMKV: полезно читать документацию, а также также ссылки. Справочное руководство для glReadPixels напрямую ссылается на glReadBuffer, которое, как следует из названия, именно это и делает. glReadBuffer(GL_COLOR_ATTACHMENT…) выбирает (сюрприз ;) ), какой цвет привязанного в данный момент FBO считывать. - person datenwolf; 11.09.2013
comment
@datenwolf glReadBuffer больше не доступен в Android GLES20 - person Predrag Manojlovic; 04.07.2016