2013-08-26 41 views
0

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

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

回答

1

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

更好的方法是使用本地代码,它仍然需要调用glReadPixels(),但可以将图像存储在正常的内存缓冲区中,而不进行格式转换。

+0

问题是你不能调用onPause之后调用GL命令,因为gl命令来自可能已经停止的GLThread。 –

+0

如果您正在使用GLSurfaceView或TextureView,如示例所示,它们为与命令和主UI线程分开的gl命令提供了一个线程。活动暂停时它们不会停止。 – ClayMontgomery

相关问题