OpenGL—多线程渲染共享上下文(share context)

来源:互联网 发布:手机拍照定位软件 编辑:程序博客网 时间:2024/06/08 08:53

简介:

在对OpenGL开发的过程中,由于正常只使用一个线程来进行绘图操作,这样有时会满足不了需求,所以需要加入多线程来进行操作。但是如果创建两个独立的渲染线程,这样却无法将绘图的信息同时显示在同一屏幕上,这时就需要使用到OpenGL的共享上下文方案,可以在两个线程中共享同一资源。

实现:

在Android系统中,实现共享上下文很简单,只需要在调用eglCreateContext的时候将上一个已经创建好的eglContext传入即可:
private class ShareGLContextFactory implements EGLContextFactory {private int EGL_CONTEXT_CLIENT_VERSION = 0x3098;private EGLContext mShareContext = null;ShareGLContextFactory(EGLContext shareContext) {mShareContext = shareContext;}public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig config) {        int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };                return egl.eglCreateContext(display, config, mShareContext, attrib_list);    }    public void destroyContext(EGL10 egl, EGLDisplay display,            EGLContext context) {        if (!egl.eglDestroyContext(display, context)) {            Log.e("DefaultContextFactory", "display:" + display + " context: " + context);        }    }}

注意事项:

1. 使用多线程来调用OpenGL API可以实现纹理ID或者其他的资源ID的共享,但是如果对同一资源同时进行写操作的时候,需要加锁进行分隔,否则会导致许多Crash问题
2. 使用多线程最好的使用方式是一个线程用于纹理加载,另外一个线程用于绘图,不建议两个线程同时进行绘图操作。
0 0
原创粉丝点击