SharedSurface_EGLImage* SharedSurface_EGLImage::Create(GLContext* prodGL, const GLFormats& formats, const gfx::IntSize& size, bool hasAlpha, EGLContext context) { GLLibraryEGL* egl = &sEGLLibrary; MOZ_ASSERT(egl); MOZ_ASSERT(context); if (!HasExtensions(egl, prodGL)) { return nullptr; } MOZ_ALWAYS_TRUE(prodGL->MakeCurrent()); GLuint prodTex = CreateTextureForOffscreen(prodGL, formats, size); if (!prodTex) { return nullptr; } EGLClientBuffer buffer = reinterpret_cast<EGLClientBuffer>(prodTex); EGLImage image = egl->fCreateImage(egl->Display(), context, LOCAL_EGL_GL_TEXTURE_2D, buffer, nullptr); if (!image) { prodGL->fDeleteTextures(1, &prodTex); return nullptr; } return new SharedSurface_EGLImage(prodGL, egl, size, hasAlpha, formats, prodTex, image); }
SharedSurface_EGLImage* SharedSurface_EGLImage::Create(GLContext* prodGL, const GLFormats& formats, const gfxIntSize& size, bool hasAlpha, EGLContext context) { GLLibraryEGL* egl = prodGL->GetLibraryEGL(); MOZ_ASSERT(egl); if (!HasExtensions(egl, prodGL)) return nullptr; MOZ_ALWAYS_TRUE(prodGL->MakeCurrent()); GLuint prodTex = prodGL->CreateTextureForOffscreen(formats, size); if (!prodTex) return nullptr; return new SharedSurface_EGLImage(prodGL, egl, size, hasAlpha, formats, prodTex); }