2017-05-30 94 views
1

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

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

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

回答

1

我正在使用NDK,但设备旋转不会导致我重新加载任何上下文。从我读过的代码中,eglMakeCurrent重新绑定了context to the new surfaces

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

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