【发布时间】:2015-05-16 22:46:08
【问题描述】:
当用户最小化我的 Android (OpenGL ES 2.0) 游戏时,需要暂停它,而不破坏已经在屏幕上绘制的内容。最初它使用的是 NativeActivity 和纯 C++,但看起来在那里是不可能的。我已经重写了它,它现在是 Java 生成自定义 GLSurfaceView 和游戏逻辑+渲染是在 C++ 中。我在创建表面时添加了 setPreserveEGLContextOnPause(true)。
所以用户点击主页按钮后的缺陷是:
- onPause 正在通过 JNI 将 nativeOnPause 发送到 C++ 代码
- C++ 代码设置了阻止更新和渲染的暂停变量
这工作正常。回到应用后:
- onResume 调用 nativeOnResume
- nativeOnResume 调用 EGL 方法来获取当前上下文、显示和表面并将其传递给游戏管理器。
- 更新和渲染现已激活
- 我们收到几条 EGL_BAD_SURFACE 消息,最后在 eglMakeCurrent 上崩溃
问题是:我们应该以任何方式使用当前上下文重新创建 EGLSurface 和 EGLDisplay,还是获取当前表面和显示都可以?
我还注意到,当我们回到应用程序时,onResume 被调用,但 onSurfaceChanged 或 onSurfaceCreated 没有被调用。
有什么建议可以在 >4.0 设备上解决这个问题吗?
【问题讨论】:
标签: android opengl-es android-ndk glsurfaceview onpause