OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/layers/texture_layer_impl.h" | 5 #include "cc/layers/texture_layer_impl.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "cc/output/renderer.h" | 10 #include "cc/output/renderer.h" |
11 #include "cc/quads/texture_draw_quad.h" | 11 #include "cc/quads/texture_draw_quad.h" |
12 #include "cc/resources/platform_color.h" | 12 #include "cc/resources/platform_color.h" |
13 #include "cc/resources/scoped_resource.h" | 13 #include "cc/resources/scoped_resource.h" |
14 #include "cc/resources/single_release_callback.h" | 14 #include "cc/resources/single_release_callback_impl.h" |
15 #include "cc/trees/layer_tree_impl.h" | 15 #include "cc/trees/layer_tree_impl.h" |
16 #include "cc/trees/occlusion_tracker.h" | 16 #include "cc/trees/occlusion_tracker.h" |
17 | 17 |
18 namespace cc { | 18 namespace cc { |
19 | 19 |
20 TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* tree_impl, int id) | 20 TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* tree_impl, int id) |
21 : LayerImpl(tree_impl, id), | 21 : LayerImpl(tree_impl, id), |
22 external_texture_resource_(0), | 22 external_texture_resource_(0), |
23 premultiplied_alpha_(true), | 23 premultiplied_alpha_(true), |
24 blend_background_color_(false), | 24 blend_background_color_(false), |
25 flipped_(true), | 25 flipped_(true), |
26 uv_top_left_(0.f, 0.f), | 26 uv_top_left_(0.f, 0.f), |
27 uv_bottom_right_(1.f, 1.f), | 27 uv_bottom_right_(1.f, 1.f), |
28 own_mailbox_(false), | 28 own_mailbox_(false), |
29 valid_texture_copy_(false) { | 29 valid_texture_copy_(false) { |
30 vertex_opacity_[0] = 1.0f; | 30 vertex_opacity_[0] = 1.0f; |
31 vertex_opacity_[1] = 1.0f; | 31 vertex_opacity_[1] = 1.0f; |
32 vertex_opacity_[2] = 1.0f; | 32 vertex_opacity_[2] = 1.0f; |
33 vertex_opacity_[3] = 1.0f; | 33 vertex_opacity_[3] = 1.0f; |
34 } | 34 } |
35 | 35 |
36 TextureLayerImpl::~TextureLayerImpl() { FreeTextureMailbox(); } | 36 TextureLayerImpl::~TextureLayerImpl() { FreeTextureMailbox(); } |
37 | 37 |
38 void TextureLayerImpl::SetTextureMailbox( | 38 void TextureLayerImpl::SetTextureMailbox( |
39 const TextureMailbox& mailbox, | 39 const TextureMailbox& mailbox, |
40 scoped_ptr<SingleReleaseCallback> release_callback) { | 40 scoped_ptr<SingleReleaseCallbackImpl> release_callback) { |
41 DCHECK_EQ(mailbox.IsValid(), !!release_callback); | 41 DCHECK_EQ(mailbox.IsValid(), !!release_callback); |
42 FreeTextureMailbox(); | 42 FreeTextureMailbox(); |
43 texture_mailbox_ = mailbox; | 43 texture_mailbox_ = mailbox; |
44 release_callback_ = release_callback.Pass(); | 44 release_callback_ = release_callback.Pass(); |
45 own_mailbox_ = true; | 45 own_mailbox_ = true; |
46 valid_texture_copy_ = false; | 46 valid_texture_copy_ = false; |
47 SetNeedsPushProperties(); | 47 SetNeedsPushProperties(); |
48 } | 48 } |
49 | 49 |
50 scoped_ptr<LayerImpl> TextureLayerImpl::CreateLayerImpl( | 50 scoped_ptr<LayerImpl> TextureLayerImpl::CreateLayerImpl( |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 SetNeedsPushProperties(); | 233 SetNeedsPushProperties(); |
234 } | 234 } |
235 | 235 |
236 const char* TextureLayerImpl::LayerTypeAsString() const { | 236 const char* TextureLayerImpl::LayerTypeAsString() const { |
237 return "cc::TextureLayerImpl"; | 237 return "cc::TextureLayerImpl"; |
238 } | 238 } |
239 | 239 |
240 void TextureLayerImpl::FreeTextureMailbox() { | 240 void TextureLayerImpl::FreeTextureMailbox() { |
241 if (own_mailbox_) { | 241 if (own_mailbox_) { |
242 DCHECK(!external_texture_resource_); | 242 DCHECK(!external_texture_resource_); |
243 if (release_callback_) | 243 if (release_callback_) { |
244 release_callback_->Run(texture_mailbox_.sync_point(), false); | 244 release_callback_->Run(texture_mailbox_.sync_point(), |
| 245 false, |
| 246 layer_tree_impl()->BlockingMainThreadTaskRunner()); |
| 247 } |
245 texture_mailbox_ = TextureMailbox(); | 248 texture_mailbox_ = TextureMailbox(); |
246 release_callback_.reset(); | 249 release_callback_.reset(); |
247 } else if (external_texture_resource_) { | 250 } else if (external_texture_resource_) { |
248 DCHECK(!own_mailbox_); | 251 DCHECK(!own_mailbox_); |
249 ResourceProvider* resource_provider = | 252 ResourceProvider* resource_provider = |
250 layer_tree_impl()->resource_provider(); | 253 layer_tree_impl()->resource_provider(); |
251 resource_provider->DeleteResource(external_texture_resource_); | 254 resource_provider->DeleteResource(external_texture_resource_); |
252 external_texture_resource_ = 0; | 255 external_texture_resource_ = 0; |
253 } | 256 } |
254 } | 257 } |
255 | 258 |
256 } // namespace cc | 259 } // namespace cc |
OLD | NEW |