在不同的GLSurfaceViews之间共享GLES20上下文和纹理?

| 是否可以在一个活动中的不同GLSurfaceView之间共享GLES20上下文?或者,如何在不同的GLSurfaceViews之间共享一组纹理? 在iOS上,如果要节省内存并在不同的CAEAGLLayer支持的UIView中重用(大)纹理,可以在它们之间传递EAGLContext对象,也可以使用共享公用EAGLSharegroup对象的不同EAGLContext。 我想知道如何在Android上完成此操作。有什么等效的技术吗? 编辑1 最初的建议是实现自己的EGLContextFactory,该方法将返回相同的EGLContext,因为每个GLSurfaceViews都将渲染分派到其自己的私有gl渲染线程,并且不可能在不同线程之间共享相同的EGLContext,所以该建议不起作用。 重述我最初的问题: 一个屏幕上有多个GLSurfaceViews(一个Activity),并且需要在每个表面的单独EGLContext中访问一组通用但较大的纹理,但是多次加载纹理会超出设备的内存。那么,您如何在GLSurfaceViews之间共享纹理?     
已邀请:
以下代码可在某些设备上运行,但不能在所有设备上运行:
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;
  }
}
    
GLSurfaceView setEGLContextFactory GLSurfaceView.java 似乎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) {
    }
}
    

要回复问题请先登录注册