OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2013 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/stream_texture_manager_in_process_android.h
" |
| 6 |
| 7 #include "base/bind.h" |
| 8 #include "ui/gfx/size.h" |
| 9 #include "ui/gl/android/surface_texture_bridge.h" |
| 10 #include "ui/gl/gl_bindings.h" |
| 11 |
| 12 namespace gpu { |
| 13 |
| 14 StreamTextureManagerInProcess::StreamTextureImpl::StreamTextureImpl( |
| 15 uint32 service_id, |
| 16 uint32 stream_id) |
| 17 : surface_texture_bridge_(new gfx::SurfaceTextureBridge(service_id)), |
| 18 stream_id_(stream_id) {} |
| 19 |
| 20 StreamTextureManagerInProcess::StreamTextureImpl::~StreamTextureImpl() {} |
| 21 |
| 22 void StreamTextureManagerInProcess::StreamTextureImpl::Update() { |
| 23 GLint texture_id = 0; |
| 24 glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, &texture_id); |
| 25 surface_texture_bridge_->UpdateTexImage(); |
| 26 glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_id); |
| 27 } |
| 28 |
| 29 gfx::Size StreamTextureManagerInProcess::StreamTextureImpl::GetSize() { |
| 30 return size_; |
| 31 } |
| 32 |
| 33 void StreamTextureManagerInProcess::StreamTextureImpl::SetSize(gfx::Size size) { |
| 34 size_ = size; |
| 35 } |
| 36 |
| 37 scoped_refptr<gfx::SurfaceTextureBridge> |
| 38 StreamTextureManagerInProcess::StreamTextureImpl::GetSurfaceTexture() { |
| 39 return surface_texture_bridge_; |
| 40 } |
| 41 |
| 42 StreamTextureManagerInProcess::StreamTextureManagerInProcess() : next_id_(1) {} |
| 43 |
| 44 StreamTextureManagerInProcess::~StreamTextureManagerInProcess() { |
| 45 if (!textures_.empty()) { |
| 46 LOG(WARNING) << "Undestroyed surface textures while tearing down " |
| 47 "StreamTextureManager."; |
| 48 } |
| 49 } |
| 50 |
| 51 GLuint StreamTextureManagerInProcess::CreateStreamTexture(uint32 service_id, |
| 52 uint32 client_id) { |
| 53 base::AutoLock lock(map_lock_); |
| 54 uint32 stream_id = next_id_++; |
| 55 linked_ptr<StreamTextureImpl> texture( |
| 56 new StreamTextureImpl(service_id, stream_id)); |
| 57 textures_[service_id] = texture; |
| 58 |
| 59 if (next_id_ == 0) |
| 60 next_id_++; |
| 61 |
| 62 return stream_id; |
| 63 } |
| 64 |
| 65 void StreamTextureManagerInProcess::DestroyStreamTexture(uint32 service_id) { |
| 66 base::AutoLock lock(map_lock_); |
| 67 textures_.erase(service_id); |
| 68 } |
| 69 |
| 70 gpu::StreamTexture* StreamTextureManagerInProcess::LookupStreamTexture( |
| 71 uint32 service_id) { |
| 72 base::AutoLock lock(map_lock_); |
| 73 TextureMap::const_iterator it = textures_.find(service_id); |
| 74 if (it != textures_.end()) |
| 75 return it->second.get(); |
| 76 |
| 77 return NULL; |
| 78 } |
| 79 |
| 80 scoped_refptr<gfx::SurfaceTextureBridge> |
| 81 StreamTextureManagerInProcess::GetSurfaceTexture(uint32 stream_id) { |
| 82 base::AutoLock lock(map_lock_); |
| 83 for (TextureMap::iterator it = textures_.begin(); it != textures_.end(); |
| 84 it++) { |
| 85 if (it->second->stream_id() == stream_id) |
| 86 return it->second->GetSurfaceTexture(); |
| 87 } |
| 88 |
| 89 return NULL; |
| 90 } |
| 91 |
| 92 } // namespace gpu |
OLD | NEW |