android - 如何在电话结束后恢复我的 Android 游戏的原生 Activity (GLES 层)?

标签 android android-ndk powervr-sgx

我在我的 Android 应用程序中使用 native Activity 运行 GLES2。通话结束后,我返回我的应用程序,但屏幕仍然空白。我检查了任务管理器,发现该应用程序仍在运行。有人可以指点我吗 1) 我必须编写代码来保存和恢复我的游戏以及我必须在 java 中覆盖哪些调用才能执行此操作 2) 有一种更自动化的方式来恢复我的应用程序而无需保存/恢复

谢谢, 马丹

最佳答案

这可能是因为 Android 在将应用程序发送到后台后销毁了 OpenGL 上下文,并且默认情况下不会自动恢复它。

有两个选项可以解决此问题 - 如果您的目标是 Honeycomb 设备或更高版本,最简单的方法是在 GLSurfaceView 上使用 setPreserveEGLContextOnPause(参见 here) .如果您的目标是较低的操作系统版本,则另一种方法是手动恢复所有内容。当上下文被销毁时,附加到它的所有东西也会被销毁——着色器、纹理、顶点和索引缓冲区。您需要在正确的时间重新创建这些 - 在 onSurfaceCreated 期间。引用安卓documentation了解更多详情。

更新 - 我的引擎为 pre-HoneyComb 设备实现的示例是 here .查看包含在 PIXELBOOST_GRAPHICS_HANDLE_CONTEXT_LOST 中的代码。调用上下文重新创建的绑定(bind)位于 example project 中。 .

关于android - 如何在电话结束后恢复我的 Android 游戏的原生 Activity (GLES 层)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12193743/

相关文章:

c# - 我们的应用程序仅在从 Google Play 下载时才会崩溃。为什么?

java - Android 中的 HttpConnect 失败

Android,关于用户界面设计

ios - 使用 PVRTexTool 在 PC 上构建纹理数据以在 iOS OpenGL ES 上使用

opengl-es - OpenGL ES 渲染到用户空间内存

android - gdc 的 gnu 生成文件

android - UnsatisfiedLinkError - Android 版 Tesseract

android - 如何在你的android项目中加载另一个.so文件?

android - Ashmem 保留政策

android - PowerVR-SGX500 系列异常行为