2012-07-30 11 views
9

के बीच साझा किया जा सकता है क्या इसे मुख्य() से egl संदर्भ बनाने की अनुमति है और यह तथ्य दिया गया है कि संदर्भ हैंडल मुख्य() से थ्रेड के फ़ंक्शन तक पारित हो जाते हैं?egl - संदर्भ को धागे

उत्तर

16

हाँ, निश्चित है।

सबसे पहले आप एक सूत्र में में एक संदर्भ बनाने की जरूरत:

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); 

आप निश्चित रूप से होगा करने के लिए है:

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; 
} 

फिर अन्य सूत्र में आप इस तरह एक साझा प्रसंग बना कुछ mutex/semaphores किसी भी अद्यतन को सिंक करने के लिए जो आप जीएलएस के साथ करना चाहते हैं। उदाहरण के लिए आप अन्य धागे से पहले धागे के भीतर एक

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()); 
} 

कॉल कर सकते हैं तो फिर आप या तो धागा

+0

हाय से बनावट, लोड shaders, आदि बना सकते हैं, मैं मैं 2 opengl धागे की सिंक से पीड़ित हूँ। MakeCurrent के अलावा, मुझे दूसरों को किस पर ख्याल रखना चाहिए? क्या इस आलेख को पेश करने वाले कुछ लेख हैं? – dragonfly

+0

एक पूर्ण नमूने के लिए आप इस स्रोत कोड को देख सकते हैं: https://github.com/klhurley/EffectsManager/blob/master/src/Android/Renderer.cpp –

संबंधित मुद्दे