onPause()后调用openGL函数

时间:2013-08-26 22:39:32

标签: java android opengl-es textures openglcontext

我有一个使用OpenGL ES 1.1的Android java应用程序,我遇到了以下问题: 当应用程序最小化时,将在活动上调用onPause()。此时我想保留一个GL纹理(我将其渲染到其中)并将其保存在内存中,同时破坏openGL上下文。然后当应用程序恢复时,我可以恢复我的纹理。 但是,检索openGL纹理需要GL命令,这些命令只能由渲染线程完成,渲染线程在停止之前可能会或可能不会有更多的渲染迭代。

有没有一种已知的方法来处理这个问题?

1 个答案:

答案 0 :(得分:1)

在Java中执行此操作的最简单方法是使用glReadPixels()将纹理图像复制到Android位图。您首先必须将纹理渲染到帧缓冲区,或渲染到连接到FBO的RenderBuffer。这种方法会很慢,因为glReadPixels()非常慢。此外,Bitmap类不能正确处理alpha纹理图像,除非它们完全不透明。位图将它们转换为预乘格式。

更好的方法是使用仍需要调用glReadPixels()的本机代码,但可以将图像存储在普通的内存缓冲区中,而无需格式转换。