是否可以在不同的glsurfaceviews(在一个活动中)之间共享gles20上下文?或者,如何在不同的glsurfaceviews之间共享一组纹理?
在ios上,如果你想在不同caeagllayer支持的ui视图中保留内存和重用(大)纹理,你可以在它们之间传递一个eaglcontext对象,或者使用共享一个eaglsharegroup对象的不同eaglcontext。
我想知道如何在android上实现这一点。有没有类似的技术?
编辑1
最初的建议是实现您自己的eglcontextfactory,它将返回相同的eglcontext,但是这个建议不起作用,因为每个glsurfaceviews都将呈现分派给自己的私有gl呈现线程,并且不可能在不同线程之间共享相同的eglcontext。
重新表述我最初的问题:
在一个屏幕(一个活动)中有多个glsurfaceviews,您需要访问每个表面的单独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;
}
}