android - 从待机/ sleep 状态返回时无法创建 EGL 表面

标签 android opengl-es android-ndk

我试图让我的 android 2.3 NativeActivity 在从 sleep 模式返回时成功恢复。 这是使用 OpenGL 的纯粹 native Activity 。

我在 list 中使用了 android:configChanges="orientation"以避免进入休眠时被破坏。

当我收到 APP_CMD_TERM_WINDOW 时,我会卸载 GL 资源并终止 GL。

当我从 sleep 模式返回时尝试初始化 GL 时,会出现问题。 当我获得 APP_CMD_INIT_WINDOW 并尝试像往常一样初始化 GL 时,我无法创建新表面。

eglCreateWindowSurface 返回 EGL_BAD_MATCH 并且游戏结束...

有什么想法吗?

最佳答案

我发现大多数使用 NativeActivity(NVIDIA、索尼爱立信)的 EGL 示例源代码,无论是否使用 native-app-glue 库,都存在此问题。

问题是,在某些设备中,从 sleep 模式返回后接收 APP_CMD_INIT_WINDOW 时获得的窗口与初始化时获得的窗口不同。我在示例代码中看到的大多数 EGL 初始化都使用硬编码的属性数组(通常适合该制造商的旗舰设备)调用 eglChooseConfig

您应该使用ANativeWindow_getFormat检查窗口的格式,并且仅当NativeWindow具有WINDOW_FORMAT_RGB_565时才选择565 EGL配置,在其他情况下使用888配置。

您可以使用两个属性数组,或者更好的是,您可以从 eglChooseConfig 获取所有配置,使用 eglGetConfigAttrib 获取值(深度、模板等)并寻找一个恰好具有您想要的值。它可能不完全具有您指定的深度大小或模板大小,但您应该可以使用更大的模板或深度缓冲区的配置。

关于android - 从待机/ sleep 状态返回时无法创建 EGL 表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5746194/

相关文章:

javascript - 如何开始使用 HTML5、CSS、JavaScript 和 jquery 开发 Android 应用程序?

opengl-es - 阴影映射 - 与光正交的薄壁上的伪影

java - 启动示例Android NDK 'Hello JNI'应用程序时出现Gradle兼容性错误

android - APP_ABI 忽略

java - 如何回滚android sqlite数据库中已删除的行?

java - Android:如果 EditText 在 x 秒内未更改,则调用函数

android - 新行写入文件

ios - 如何解决 iOS 中的 GLKView 视口(viewport)问题

java - 在 Android 上使用 OpenGL 绘制视频帧

android - 将变量分配给 C++ 对象