HandleType FrameBuffer::createRenderContext(int p_config, HandleType p_share, bool p_isGL2) { emugl::Mutex::AutoLock mutex(m_lock); HandleType ret = 0; const FbConfig* config = getConfigs()->get(p_config); if (!config) { return ret; } RenderContextPtr share(NULL); if (p_share != 0) { RenderContextMap::iterator s(m_contexts.find(p_share)); if (s == m_contexts.end()) { return ret; } share = (*s).second; } EGLContext sharedContext = share.Ptr() ? share->getEGLContext() : EGL_NO_CONTEXT; RenderContextPtr rctx(RenderContext::create( m_eglDisplay, config->getEglConfig(), sharedContext, p_isGL2)); if (rctx.Ptr() != NULL) { ret = genHandle(); m_contexts[ret] = rctx; RenderThreadInfo *tinfo = RenderThreadInfo::get(); tinfo->m_contextSet.insert(ret); } return ret; }
HandleType FrameBuffer::createWindowSurface(int p_config, int p_width, int p_height) { android::Mutex::Autolock mutex(m_lock); HandleType ret = 0; WindowSurfacePtr win( WindowSurface::create(p_config, p_width, p_height) ); if (win.Ptr() != NULL) { ret = genHandle(); m_windows[ret] = win; } return ret; }
HandleType FrameBuffer::createColorBuffer(int p_width, int p_height, GLenum p_internalFormat) { android::Mutex::Autolock mutex(m_lock); HandleType ret = 0; ColorBufferPtr cb( ColorBuffer::create(p_width, p_height, p_internalFormat) ); if (cb.Ptr() != NULL) { ret = genHandle(); m_colorbuffers[ret].cb = cb; m_colorbuffers[ret].refcount = 1; } return ret; }
HandleType FrameBuffer::createColorBuffer(int p_width, int p_height, GLenum p_internalFormat) { emugl::Mutex::AutoLock mutex(m_lock); HandleType ret = 0; ColorBufferPtr cb(ColorBuffer::create( getDisplay(), p_width, p_height, p_internalFormat, getCaps().has_eglimage_texture_2d, m_colorBufferHelper)); if (cb.Ptr() != NULL) { ret = genHandle(); m_colorbuffers[ret].cb = cb; m_colorbuffers[ret].refcount = 1; } return ret; }
HandleType FrameBuffer::createRenderContext(int p_config, HandleType p_share, bool p_isGL2) { android::Mutex::Autolock mutex(m_lock); HandleType ret = 0; RenderContextPtr share(NULL); if (p_share != 0) { RenderContextMap::iterator s( m_contexts.find(p_share) ); if (s == m_contexts.end()) { return 0; } share = (*s).second; } RenderContextPtr rctx( RenderContext::create(p_config, share, p_isGL2) ); if (rctx.Ptr() != NULL) { ret = genHandle(); m_contexts[ret] = rctx; } return ret; }
HandleType FrameBuffer::createWindowSurface(int p_config, int p_width, int p_height) { emugl::Mutex::AutoLock mutex(m_lock); HandleType ret = 0; const FbConfig* config = getConfigs()->get(p_config); if (!config) { return ret; } WindowSurfacePtr win(WindowSurface::create( getDisplay(), config->getEglConfig(), p_width, p_height)); if (win.Ptr() != NULL) { ret = genHandle(); m_windows[ret] = std::pair<WindowSurfacePtr, HandleType>(win,0); RenderThreadInfo *tinfo = RenderThreadInfo::get(); tinfo->m_windowSet.insert(ret); } return ret; }