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 9 namespace gpu { 10 namespace gles2 { 11 12 ImageManager::ImageManager() : release_after_use_(false) { 13 } 14 15 ImageManager::~ImageManager() { 16 } 17 18 void 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; 26 } 27 28 if (LookupImage(id)) { 29 DVLOG(0) << "GPU memory buffer ID already in use."; 30 return; 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; 39 40 if (release_after_use_) 41 gl_image->SetReleaseAfterUse(); 42 43 AddImage(gl_image.get(), id); 44 } 45 46 void ImageManager::UnregisterGpuMemoryBuffer(int32 id) { 47 RemoveImage(id); 48 } 49 50 void ImageManager::AddImage(gfx::GLImage* image, int32 service_id) { 51 gl_images_[service_id] = image; 52 } 53 54 void ImageManager::RemoveImage(int32 service_id) { 55 gl_images_.erase(service_id); 56 } 57 58 gfx::GLImage* ImageManager::LookupImage(int32 service_id) { 59 GLImageMap::const_iterator iter = gl_images_.find(service_id); 60 if (iter != gl_images_.end()) 61 return iter->second.get(); 62 63 return NULL; 64 } 65 66 void ImageManager::SetReleaseAfterUse() { 67 release_after_use_ = true; 68 } 69 70 } // namespace gles2 71 } // namespace gpu 72