android - 如何恢复 Android OpenGL native 应用程序

标签 android c++ opengl-es android-ndk

我有一个渲染 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/

相关文章:

javascript - 运行代码来单击 Android 应用程序中的 javascript 按钮?尝试抓取 craigslist.org 页面上的回复按钮联系信息

android - 进度条在 API 23 上不起作用或不可见

c++ - 使用 Mat OpenCV 访问像素

c++ - NetBeans 7.0.1 良好的 C++ 程序执行 "RUN FAILED"

opengl - 在渲染期间设置glTexParameteri()是否不好?

Android - 根据 GridLayout 的 subview 自动调整列

android - 在 Sqlite 数据库中保存 webview geturl 和 getitle。语法错误撇号 ' 的问题

c++ - 当超出范围时,std::bind 会延长对象的生命周期,如 char 数组,如果是这样,它是如何工作的?

c++ - 关于 OpenGLES 中的纹理切换

ios - 使用 GLKit 按需 OpenGL ES 渲染