【问题标题】:Call openGL functions after onPause()在 onPause() 之后调用 openGL 函数
【发布时间】:2015-06-16 22:28:20
【问题描述】:

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

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

【问题讨论】:

    标签: java android opengl-es textures openglcontext


    【解决方案1】:

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

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

    【讨论】:

    • 问题是在调用onPause之后你不能调用GL命令,因为GL命令来自GLThread,它可能已经停止了。
    • 如果您使用 GLSurfaceView 或 TextureView,如示例所示,它们为 gl 命令提供了一个线程,该线程与 Activity 和主 UI 线程分开。 Activity 暂停时它们不会停止。
    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    相关资源
    最近更新 更多