java - onPause() 之后调用 openGL 函数

标签 java android opengl-es textures openglcontext

我有一个使用 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/

相关文章:

iphone - GLKit 中的纹理映射不仅仅适用于设备

android - asyncTask 更新 OpenGL ES 使用的静态值

ios - 视频作为 openGLES 的纹理

java - "Could not find or load main class"是什么意思?

android - 使用将从 "URL"检索的图标标记而不是 Google map 上保存的图标

java - 更改 JTabbedPane 标题的大小

java - 如何使用 SQLITE 中的 String[] 替换 String[] 常量

android - 如何修复 TabLayout 的上边距

java - JMX 轮询或 TCP 推送 : What is better?

java - 如何更改实例变量的值