我正在编写一个 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/