【问题标题】:Android: preserve EGLContext across screen rotationAndroid:跨屏幕旋转保留 EGLContext
【发布时间】:2017-05-30 17:11:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: android opengl-es glsurfaceview egl


    【解决方案1】:

    我正在使用 NDK,但设备轮换不会导致我重新加载任何上下文。根据我对代码的阅读,eglMakeCurrent 重新绑定了context to the new surfaces

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多