// Copyright 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_io_surface.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_context.h" #include "ui/gl/io_surface_support_mac.h" namespace gfx { GLImageIOSurface::GLImageIOSurface(gfx::Size size) : io_surface_support_(IOSurfaceSupport::Initialize()), size_(size) { CHECK(io_surface_support_); } GLImageIOSurface::~GLImageIOSurface() { Destroy(); } bool GLImageIOSurface::Initialize(gfx::GpuMemoryBufferHandle buffer) { io_surface_.reset(io_surface_support_->IOSurfaceLookup(buffer.io_surface_id)); if (!io_surface_) { LOG(ERROR) << "IOSurface lookup failed"; return false; } return true; } void GLImageIOSurface::Destroy() { } gfx::Size GLImageIOSurface::GetSize() { return size_; } bool GLImageIOSurface::BindTexImage(unsigned target) { if (target != GL_TEXTURE_RECTANGLE_ARB) { // This might be supported in the future. For now, perform strict // validation so we know what's going on. LOG(ERROR) << "IOSurface requires TEXTURE_RECTANGLE_ARB target"; return false; } CGLContextObj cgl_context = static_cast<CGLContextObj>( GLContext::GetCurrent()->GetHandle()); DCHECK(io_surface_); CGLError cgl_error = io_surface_support_->CGLTexImageIOSurface2D( cgl_context, target, GL_RGBA, size_.width(), size_.height(), GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, io_surface_.get(), 0); if (cgl_error != kCGLNoError) { LOG(ERROR) << "Error in CGLTexImageIOSurface2D"; return false; } return true; } void GLImageIOSurface::ReleaseTexImage(unsigned target) { } void GLImageIOSurface::WillUseTexImage() { } void GLImageIOSurface::DidUseTexImage() { } } // namespace gfx