Android:跨屏幕旋转保留 EGLContext

标签 android opengl-es glsurfaceview egl

我正在编写一个 Android OpenGL ES 应用程序,它可能会加载许多资源、纹理、着色器等。通常,EGLContext 在 View 被销毁时被丢弃,例如当屏幕方向改变时。鉴于将所有必要资源加载到 OpenGL、编译着色器、生成 mipmap 等可能需要大量时间,我正在寻找一种方法来在屏幕方向更改时保留 EGL 上下文,这样就不会每次旋转设备时都需要完成。

更多信息:我正在使用 GLSurfaceView。我尝试实现一个自定义 EGLContextFactory,它创建一个 EGLContext,然后每次都将相同的上下文返回到新的 GLSurfaceView。但是,当设备旋转时,会抛出 EGL_BAD_CONTEXT 错误,这可能是因为旧 View 不再存在或者因为新 View 与创建 EGLContext 以绘制的 View 不匹配。

必须有某种方式来保存上下文。不幸的是,EGLContext API 非常小,一旦创建就不允许您修改上下文。例如,有没有办法在多个 View 之间共享上下文正在绘制的表面?

最佳答案

我正在使用 NDK,但设备旋转不会导致我重新加载任何上下文。从我读到的代码来看,eglMakeCurrent重新绑定(bind) context to the new surfaces .

我正在使用一些 nVidia written code为我管理这个,但它看起来像一个简单的状态机,它将旧上下文重新绑定(bind)到新表面。

我知道这是 C/C++ 代码而不是 Java,但步骤和顺序应该是相同的。

关于Android:跨屏幕旋转保留 EGLContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44268149/

相关文章:

android - 如何在 android opengl 1.0 应用程序的最大纹理宽度上过滤手机

android - 确保释放 OpenGL 纹理内存

android - GLSURFACEVIEW 保存为 PNG - 错误 glReadPixels

android - GLSurfaceView.RENDERMODE_CONTINUOUSLY 导致闪烁

java - 删除文件安卓

opengl - 为什么我们需要 3d 甚至 4d 纹理?

android - GPS连接延迟

android - GLSurfaceView 如何使用我的 EGLDisplay、EGLContext 和 eglSurface?

安卓 : I am trying to search for contacts on basis of their display name

android - 检测设备移动距离