Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading egl-可以在线程之间共享上下文吗_Multithreading_Egl - Fatal编程技术网

Multithreading egl-可以在线程之间共享上下文吗

Multithreading egl-可以在线程之间共享上下文吗,multithreading,egl,Multithreading,Egl,如果上下文句柄从main()传递给线程的函数,那么允许从main()创建egl上下文并从另一个线程渲染吗?是的,当然可以 首先,您需要在一个线程中创建上下文: EGLint contextAttrs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; LOG_INFO("creating context"); if (!(m_Context = eglCreateContext(m_Display, m_Config, 0

如果上下文句柄从main()传递给线程的函数,那么允许从main()创建egl上下文并从另一个线程渲染吗?

是的,当然可以

首先,您需要在一个线程中创建上下文:

   EGLint contextAttrs[] = {
     EGL_CONTEXT_CLIENT_VERSION, 2,
     EGL_NONE
};

LOG_INFO("creating context");
if (!(m_Context = eglCreateContext(m_Display, m_Config, 0, contextAttrs)))
{
    LOG_ERROR("eglCreateContext() returned error %d", eglGetError());
    return false;
}
然后在另一个线程中创建如下共享上下文:

    EGLint contextAttrs[] =
    {
        EGL_CONTEXT_CLIENT_VERSION, 2,
        EGL_NONE
    };

    if (m_Context == 0)
    {
        LOG_ERROR("m_Context wasn't initialized for some reason");
    }

    // create a shared context for this thread
    m_LocalThreadContext = eglCreateContext(m_Display, m_Config, m_Context, contextAttrs);
当然,您必须有一些互斥/信号量来同步您想要对GLE进行的任何更新。例如,你需要做一个

eglMakeCurrent(m_Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
在另一个线程可以调用

if (!eglMakeCurrent(m_Display, m_Surface, m_Surface, m_Context))
{
    LOG_ERROR("eglMakeCurrent() returned error %d", eglGetError());
}

然后,您可以从任一线程创建纹理、加载着色器等。嗨,我遇到了2个opengl线程的同步问题。除了makeCurrent之外,我还应该注意什么?是否有一些文章介绍这一点?有关完整示例,您可以查看以下源代码: