我们的游戏需要从小图像动态构建几个大纹理,我们不保留纹理的数据副本,我们只是使用 OpenGL 和 glTexSubImage2d
来更新实际纹理。
当按下返回键或游戏失去焦点时,我们希望将这些纹理保存到内存中,这样如果用户随后返回游戏,我们可以在 onSurfaceCreated
中重新创建/重新加载它们。我们已经从“磁盘”重新加载所有静态纹理。
然而,事实证明很难找到我们可以从何处获得消息以了解我们即将失去 EGL 上下文。如果我们在主 Activity 的 onBackPressed
中设置一个标志,然后在主渲染循环中检查该标志,我们可以将纹理保存在那里,但我们无法从主 Activity 访问纹理,因此将在主 Activity 的 onStop
回调中调用为时已晚。没有后续的渲染循环来保存纹理,因为到那时它已经停止了。我们需要这样做,因为除了按下“后退”按钮之外,还有其他方法可以调用 onStop
。
据推测,我不能延迟 onStop
以在其中任何一个中再进行一次“渲染”。还有其他想法吗?
最佳答案
由于您已经在应用程序冷启动期间动态生成了此纹理,因此最好将此纹理dirty
分开并重新生成它们,就好像您的应用程序正在冷启动一样。
如果您想保存这些纹理,则不要等待 onStop()
被调用。生成它们的内容后,只需保存它们。
关于android - 在 Android 上丢失上下文时如何保存 OpenGL 纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22192328/