3

我有一个渲染 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 应用程序的正确过程是什么?

4

2 回答 2

3

所以最终我通过遵循本书中的一些示例代码解决了这个问题。在第 4 章中,他们有一个示例,可以在 c++ 中执行所有 egl 调用。因此,使用该方法我能够创建自己的上下文并管理其生命周期,而不是让 GLSurfaceView 管理生命周期。

基本上,我创建了一个永远不会被破坏的单一上下文。然后当表面消失时,我只需调用eglMakeCurrent( display, NULL, NULL, NULL )并停止我的渲染循环,当表面恢复时,我使用新表面使上下文成为当前的。这工作正常,我没有更多的崩溃,也不必在每次应用程序背景化或屏幕旋转时重新加载我的着色器或几何体。

于 2013-10-03T19:06:29.903 回答
0

当 App 暂停时 eglContext 很可能会被破坏。但是 GLSurfaceView 提供了一个名为setPreserveEGLContextOnPause的方法。

也可以参考讨论

于 2013-09-23T02:36:58.680 回答