| Index: ui/gl/gl_image_shm.cc
|
| diff --git a/ui/gl/gl_image_shm.cc b/ui/gl/gl_image_shm.cc
|
| index 156d0f20ad32ab934c89abb35b99e26da78fa48e..75ef453eade794fe846ed1548dbe90d7e56f6f3f 100644
|
| --- a/ui/gl/gl_image_shm.cc
|
| +++ b/ui/gl/gl_image_shm.cc
|
| @@ -139,40 +139,51 @@ bool GLImageShm::BindTexImage(unsigned target) {
|
| #if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \
|
| defined(USE_OZONE)
|
| if (target == GL_TEXTURE_EXTERNAL_OES) {
|
| - if (egl_image_ != EGL_NO_IMAGE_KHR)
|
| - eglDestroyImageKHR(GLSurfaceEGL::GetHardwareDisplay(), egl_image_);
|
| -
|
| - if (!egl_texture_id_)
|
| + if (egl_image_ == EGL_NO_IMAGE_KHR) {
|
| + DCHECK_EQ(0u, egl_texture_id_);
|
| glGenTextures(1, &egl_texture_id_);
|
|
|
| - {
|
| + {
|
| + ScopedTextureBinder texture_binder(GL_TEXTURE_2D, egl_texture_id_);
|
| +
|
| + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
| + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
| + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
| + glTexImage2D(GL_TEXTURE_2D,
|
| + 0, // mip level
|
| + TextureFormat(internalformat_),
|
| + size_.width(),
|
| + size_.height(),
|
| + 0, // border
|
| + DataFormat(internalformat_),
|
| + DataType(internalformat_),
|
| + shared_memory_->memory());
|
| + }
|
| +
|
| + EGLint attrs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
|
| + // Need to pass current EGL rendering context to eglCreateImageKHR for
|
| + // target type EGL_GL_TEXTURE_2D_KHR.
|
| + egl_image_ =
|
| + eglCreateImageKHR(GLSurfaceEGL::GetHardwareDisplay(),
|
| + eglGetCurrentContext(),
|
| + EGL_GL_TEXTURE_2D_KHR,
|
| + reinterpret_cast<EGLClientBuffer>(egl_texture_id_),
|
| + attrs);
|
| + DCHECK_NE(EGL_NO_IMAGE_KHR, egl_image_)
|
| + << "Error creating EGLImage: " << eglGetError();
|
| + } else {
|
| ScopedTextureBinder texture_binder(GL_TEXTURE_2D, egl_texture_id_);
|
| - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
| - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
| - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
| -
|
| - glTexImage2D(GL_TEXTURE_2D,
|
| - 0, // mip level
|
| - TextureFormat(internalformat_),
|
| - size_.width(),
|
| - size_.height(),
|
| - 0, // border
|
| - DataFormat(internalformat_),
|
| - DataType(internalformat_),
|
| - shared_memory_->memory());
|
| - }
|
|
|
| - EGLint attrs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
|
| - // Need to pass current EGL rendering context to eglCreateImageKHR for
|
| - // target type EGL_GL_TEXTURE_2D_KHR.
|
| - egl_image_ =
|
| - eglCreateImageKHR(GLSurfaceEGL::GetHardwareDisplay(),
|
| - eglGetCurrentContext(),
|
| - EGL_GL_TEXTURE_2D_KHR,
|
| - reinterpret_cast<EGLClientBuffer>(egl_texture_id_),
|
| - attrs);
|
| - DCHECK_NE(EGL_NO_IMAGE_KHR, egl_image_)
|
| - << "Error creating EGLImage: " << eglGetError();
|
| + glTexSubImage2D(GL_TEXTURE_2D,
|
| + 0, // mip level
|
| + 0, // x-offset
|
| + 0, // y-offset
|
| + size_.width(),
|
| + size_.height(),
|
| + DataFormat(internalformat_),
|
| + DataType(internalformat_),
|
| + shared_memory_->memory());
|
| + }
|
|
|
| glEGLImageTargetTexture2DOES(target, egl_image_);
|
| DCHECK_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
|
|
|