Android:跨屏幕旋转保留EGLContext

时间:2017-05-30 17:11:21

标签: android opengl-es glsurfaceview egl

我正在编写一个Android OpenGL ES应用程序,可能会有很多资源,纹理,着色器等加载。通常,当视图被破坏时,例如当屏幕方向改变时,EGLContext被破坏。看来可能需要花费大量时间将所有必要的资源加载到OpenGL中,编译着色器,生成mipmaps等,我正在寻找一种方法来保持屏幕方向更改的EGL上下文,这样就不会每次旋转设备时都需要完成。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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