是否可以在不同的GLSurfaceViews之间共享GLES20上下文(在一个Activity中)?或者,如何在不同的GLSurfaceViews之间共享一组纹理?
在iOS上,如果要在不同的CAEAGLLayer支持的UIViews中保存内存和重用(大)纹理,可以在它们之间传递EAGLContext对象,或使用共享EAGLSharegroup对象的不同EAGLContexts。
我想知道如何在Android上实现这一目标。有没有等效的技术?
EDIT1
初始建议,实现自己的EGLContextFactory,它将返回相同的EGLContext,因为每个GLSurfaceViews都会将渲染调度到它自己的私有gl渲染线程并且在不同线程之间共享相同的EGLContext是不可能的。< / p>
重新提出我的初步问题: 您在一个屏幕中有几个GLSurfaceView(一个Activity),您需要在每个表面的单个EGLContext中访问一组常见但大的纹理,但多次加载纹理会超出设备的内存。那么你将如何在GLSurfaceViews之间共享纹理?
答案 0 :(得分:1)
以下代码适用于某些设备,但不适用于所有设备:
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
EGLContext shared = .....;
int[] attrib_list = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
EGLContext context = egl.eglCreateContext(display, eglConfig, shared == null ? EGL10.EGL_NO_CONTEXT : shared,
attrib_list);
return context;
}
}
答案 1 :(得分:0)
似乎setEGLContextFactory可以在不同的GLSurfaceViews之间使用相同的GLES20上下文。
伪代码:
private class MyEGLContextFactory implements EGLContextFactory {
private static EGLContext mEGLContext;
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig config) {
/* create EGLContext for GLES20 in first time */
return mEGLContext;
}
public void destroyContext(EGL10 egl, EGLDisplay display,
EGLContext context) {
}
}