// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/gl/gl_image_egl.h" #include "ui/gl/egl_util.h" #include "ui/gl/gl_surface_egl.h" namespace gl { GLImageEGL::GLImageEGL(const gfx::Size& size) : egl_image_(EGL_NO_IMAGE_KHR), size_(size) {} GLImageEGL::~GLImageEGL() { DCHECK(thread_checker_.CalledOnValidThread()); if (egl_image_ != EGL_NO_IMAGE_KHR) { EGLBoolean result = eglDestroyImageKHR(GLSurfaceEGL::GetHardwareDisplay(), egl_image_); if (result == EGL_FALSE) { DLOG(ERROR) << "Error destroying EGLImage: " << ui::GetLastEGLErrorString(); } } } bool GLImageEGL::Initialize(EGLContext context, EGLenum target, EGLClientBuffer buffer, const EGLint* attrs) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK_EQ(EGL_NO_IMAGE_KHR, egl_image_); egl_image_ = eglCreateImageKHR(GLSurfaceEGL::GetHardwareDisplay(), context, target, buffer, attrs); if (egl_image_ == EGL_NO_IMAGE_KHR) { LOG(ERROR) << "Error creating EGLImage: " << ui::GetLastEGLErrorString(); return false; } return true; } gfx::Size GLImageEGL::GetSize() { return size_; } bool GLImageEGL::BindTexImage(unsigned target) { DCHECK(thread_checker_.CalledOnValidThread()); if (egl_image_ == EGL_NO_IMAGE_KHR) return false; glEGLImageTargetTexture2DOES(target, egl_image_); DCHECK_EQ(static_cast(GL_NO_ERROR), glGetError()); return true; } } // namespace gl