我有一个使用 OpenGL ES 1.1 的 Android java 应用程序,并且遇到了以下问题:
当应用程序最小化时,将在 Activity 上调用 onPause()
。此时,我想保留其中一个 GL 纹理(我将其渲染到其中)并将其保存在内存中,同时 openGL 上下文被破坏。然后当应用程序恢复时我可以恢复我的纹理。
然而,检索 openGL 纹理需要只能由渲染线程完成的 GL 命令,渲染线程在停止之前可能会或可能不会有更多的渲染迭代。
有已知的方法来处理这个问题吗?
最佳答案
在 Java 中执行此操作的最简单方法是使用 glReadPixels() 将纹理图像复制到 Android 位图。您首先必须将纹理渲染到帧缓冲区或附加到 FBO 的渲染缓冲区中。这种方法会很慢,因为 glReadPixels() 非常慢。此外,Bitmap 类不能正确处理 alpha 纹理图像,除非它们完全不透明。位图将它们转换为预乘格式。
更好的方法是使用 native 代码,它仍然需要调用 glReadPixels(),但可以将图像存储在普通内存缓冲区中,而无需进行格式转换。
关于java - onPause() 之后调用 openGL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454195/