【问题标题】:Save / recreate OpenGL Framebuffer / Renderbuffer texture during activity pause在活动暂停期间保存/重新创建 OpenGL 帧缓冲区/渲染缓冲区纹理
【发布时间】:2013-09-11 11:19:39
【问题描述】:

我有一个 Android 活动,它使用带有动态内容的纹理(通过 Framebuffer / Renderbuffer 绘制)。

当活动暂停/恢复时,纹理(与所有纹理一样)会丢失,必须重新创建。

有没有办法在暂停时将动态纹理的内容保存到某个持久对象中,并在恢复时从该对象重新创建纹理?

我已经发现一些线程描述了类似 hack 的方法来防止纹理在暂停时失效,但如果可能的话,我想“按照书本”来做,并在暂停时释放纹理内存/在恢复时重新创建纹理.

【问题讨论】:

    标签: android opengl-es framebuffer onpause


    【解决方案1】:

    您可以使用glReadPixels 将 FBO 的内容传输到您应用的持久缓冲区中。然后,在恢复时,您可以将该数据加载回纹理中。恢复渲染缓冲区需要加载到中间纹理,然后使用完整的视口四边形将其绘制到带有渲染缓冲区的 FBO。因此,我建议您不要使用 Renderbuffers,如果可以避免的话。使用纹理可以节省中间步骤。

    【讨论】:

    • 我能够使用 glReadPixels 保存像素数据并根据保存的数据重新创建纹理。问题是保存的像素数据是屏幕的当前内容,而不是附加到帧缓冲区对象的纹理的像素数据。如何指定附加的纹理而不是屏幕作为 glReadPixels 的源?
    • @TomMKV:阅读文档和参考资料会有所帮助。 glReadPixels 的参考手册直接链接到 glReadBuffer,顾名思义,就是这样做的。 glReadBuffer(GL_COLOR_ATTACHMENT…) 选择(惊喜 ;))要读取的当前绑定 FBO 的哪个颜色附件。
    • @datenwolf glReadBuffer 在 android GLES20 中不再可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2014-07-08
    • 2012-04-24
    • 1970-01-01
    • 2013-09-03
    • 2023-03-06
    相关资源
    最近更新 更多