是否可以在不同的 GLSurfaceView 之间(在一个 Activity 内)共享 GLES20 上下文?或者,如何在不同的 GLSurfaceView 之间共享一组纹理?
在 iOS 上,如果您想节省内存并在不同的 CAEAGLLayer 支持的 UIView 中重用(大)纹理,您可以在它们之间传递 EAGLContext 对象,或者使用共享公共 EAGLSharegroup 对象的不同 EAGLContext。
我想知道如何在 Android 上实现这一点。有没有等效的技术?
Edit1
最初的建议是实现您自己的 EGLContextFactory(它将返回相同的 EGLContext),这是行不通的,因为每个 GLSurfaceViews 将渲染分派到它自己的私有 gl 渲染线程,并且不可能在不同线程之间共享相同的 EGLContext。
重新表述我最初的问题:
您在一个屏幕(一个 Activity)中有多个 GLSurfaceView,并且需要在每个表面的单独 EGLContext 中访问一组常见但较大的纹理,但多次加载纹理会超出设备的内存。那么你将如何在 GLSurfaceView 之间共享纹理呢?
以下代码适用于某些设备,但不适用于所有设备:
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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)