OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/image_manager.h" | 5 #include "gpu/command_buffer/service/image_manager.h" |
6 | 6 |
7 #include "ui/gl/gl_image.h" | 7 #include "ui/gl/gl_image.h" |
8 | 8 |
9 namespace gpu { | 9 namespace gpu { |
10 namespace gles2 { | 10 namespace gles2 { |
11 | 11 |
12 ImageManager::ImageManager() : release_after_use_(false) { | 12 ImageManager::ImageManager() { |
13 } | 13 } |
14 | 14 |
15 ImageManager::~ImageManager() { | 15 ImageManager::~ImageManager() { |
16 } | 16 } |
17 | 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) { | 18 void ImageManager::AddImage(gfx::GLImage* image, int32 service_id) { |
51 gl_images_[service_id] = image; | 19 images_[service_id] = image; |
52 } | 20 } |
53 | 21 |
54 void ImageManager::RemoveImage(int32 service_id) { | 22 void ImageManager::RemoveImage(int32 service_id) { |
55 gl_images_.erase(service_id); | 23 images_.erase(service_id); |
56 } | 24 } |
57 | 25 |
58 gfx::GLImage* ImageManager::LookupImage(int32 service_id) { | 26 gfx::GLImage* ImageManager::LookupImage(int32 service_id) { |
59 GLImageMap::const_iterator iter = gl_images_.find(service_id); | 27 GLImageMap::const_iterator iter = images_.find(service_id); |
60 if (iter != gl_images_.end()) | 28 if (iter != images_.end()) |
61 return iter->second.get(); | 29 return iter->second.get(); |
62 | 30 |
63 return NULL; | 31 return NULL; |
64 } | 32 } |
65 | 33 |
66 void ImageManager::SetReleaseAfterUse() { | |
67 release_after_use_ = true; | |
68 } | |
69 | |
70 } // namespace gles2 | 34 } // namespace gles2 |
71 } // namespace gpu | 35 } // namespace gpu |
OLD | NEW |