android - 在 Android 上丢失上下文时如何保存 OpenGL 纹理

标签 android opengl-es messages egl openglcontext

我们的游戏需要从小图像动态构建几个大纹理,我们不保留纹理的数据副本,我们只是使用 OpenGL 和 glTexSubImage2d 来更新实际纹理。

当按下返回键或游戏失去焦点时,我们希望将这些纹理保存到内存中,这样如果用户随后返回游戏,我们可以在 onSurfaceCreated 中重新创建/重新加载它们。我们已经从“磁盘”重新加载所有静态纹理。

然而,事实证明很难找到我们可以从何处获得消息以了解我们即将失去 EGL 上下文。如果我们在主 Activity 的 onBackPressed 中设置一个标志,然后在主渲染循环中检查该标志,我们可以将纹理保存在那里,但我们无法从主 Activity 访问纹理,因此将在主 Activity 的 onStop 回调中调用为时已晚。没有后续的渲染循环来保存纹理,因为到那时它已经停止了。我们需要这样做,因为除了按下“后退”按钮之外,还有其他方法可以调用 onStop

据推测,我不能延迟 onStop 以在其中任何一个中再进行一次“渲染”。还有其他想法吗?

最佳答案

由于您已经在应用程序冷启动期间动态生成了此纹理,因此最好将此纹理dirty 分开并重新生成它们,就好像您的应用程序正在冷启动一样。

如果您想保存这些纹理,则不要等待 onStop() 被调用。生成它们的内容后,只需保存它们。

关于android - 在 Android 上丢失上下文时如何保存 OpenGL 纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22192328/

相关文章:

Android WebView - 拦截点击

ios - 无法在 opengl es 2.0 中加载多个纹理

iphone - iOS GLKit : Fading textures dynamically (OpenGL)

html - 如何将html args放在grails消息中?

java - 在 Runtime exec 上执行多次执行

android - 自动启动应用程序无法解释的崩溃

android - 如何将文件从 Assets 文件夹复制到android中的.../数据库文件夹

ios - 在 OpenGLES 中组合多个着色器

未显示 primefaces 消息

spring - Spring验证默认消息