1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "gpu/command_buffer/service/image_manager.h" 6 7#include "ui/gl/gl_image.h" 8 9namespace gpu { 10namespace gles2 { 11 12ImageManager::ImageManager() : release_after_use_(false) { 13} 14 15ImageManager::~ImageManager() { 16} 17 18bool ImageManager::RegisterGpuMemoryBuffer(int32 id, 19 gfx::GpuMemoryBufferHandle buffer, 20 size_t width, 21 size_t height, 22 unsigned internalformat) { 23 if (id <= 0) { 24 DVLOG(0) << "Cannot register GPU memory buffer with non-positive ID."; 25 return false; 26 } 27 28 if (LookupImage(id)) { 29 DVLOG(0) << "GPU memory buffer ID already in use."; 30 return false; 31 } 32 33 scoped_refptr<gfx::GLImage> gl_image = 34 gfx::GLImage::CreateGLImageForGpuMemoryBuffer(buffer, 35 gfx::Size(width, height), 36 internalformat); 37 if (!gl_image) 38 return false; 39 40 if (release_after_use_) 41 gl_image->SetReleaseAfterUse(); 42 43 AddImage(gl_image.get(), id); 44 return true; 45} 46 47void ImageManager::DestroyGpuMemoryBuffer(int32 id) { 48 RemoveImage(id); 49} 50 51void ImageManager::AddImage(gfx::GLImage* image, int32 service_id) { 52 gl_images_[service_id] = image; 53} 54 55void ImageManager::RemoveImage(int32 service_id) { 56 gl_images_.erase(service_id); 57} 58 59gfx::GLImage* ImageManager::LookupImage(int32 service_id) { 60 GLImageMap::const_iterator iter = gl_images_.find(service_id); 61 if (iter != gl_images_.end()) 62 return iter->second.get(); 63 64 return NULL; 65} 66 67void ImageManager::SetReleaseAfterUse() { 68 release_after_use_ = true; 69} 70 71} // namespace gles2 72} // namespace gpu 73