Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(506)

Side by Side Diff: gpu/command_buffer/service/stream_texture_manager_in_process_android.cc

Issue 23234003: Support stream textures with the synchronous compositor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: this time for real Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698