| 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 |