我有一个渲染 OpenGL 场景的 Android 应用程序。所有 OpenGL 代码都是用 C++ 完成的。
我遇到的问题是,当我按下主页按钮,然后返回应用程序时,OpenGL 调用开始返回错误。
具体来说,ES 1.1 版本在 glDrawArrays
上失败出现 logcat 错误 <gl_draw_error_checks::550>: GL_INVALID_OPERATION
ES 2.0 版本在 glUseProgram
上失败定位错误为 <core_glUseProgram:1496>: GL_INVALID_VALUE
.
离开/返回 OpenGL ES 应用程序的正确流程是什么?
最佳答案
所以最终我通过遵循此 book 中的一些示例代码解决了这个问题。 .在第 4 章中,他们有一个用 C++ 执行所有 egl 调用的示例。因此,使用该方法我能够创建自己的上下文并管理其生命周期,而不是让 GLSurfaceView 管理生命周期。
基本上,我创建了一个永远不会被破坏的上下文。然后,当表面消失时,我只需调用 eglMakeCurrent( display, NULL, NULL, NULL )
并停止我的渲染循环,当表面恢复时,我使上下文与新表面保持同步。这工作正常,我没有更多的崩溃,也不必在每次应用程序后台运行或屏幕旋转时重新加载我的着色器或几何体。
关于android - 如何恢复 Android OpenGL native 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18906158/