在从main()创建egl上下文并从另一个线程进行渲染的情况下,是否允许传递上下文句柄从main()到线程函数中?
在从main()创建egl上下文并从另一个线程进行渲染的情况下,是否允许传递上下文句柄从main()到线程函数中?
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);
当然,您需要一些互斥锁/信号量来同步您想要使用GLES进行的任何更新。例如,您需要执行
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());
}
然后您可以从任何一个线程创建纹理,加载着色器等等。