1 // Copyright 2012 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 #ifndef CC_LAYERS_TEXTURE_LAYER_IMPL_H_ 6 #define CC_LAYERS_TEXTURE_LAYER_IMPL_H_ 7 8 #include <string> 9 10 #include "base/callback.h" 11 #include "cc/base/cc_export.h" 12 #include "cc/layers/layer_impl.h" 13 14 namespace cc { 15 class SingleReleaseCallbackImpl; 16 class ScopedResource; 17 18 class CC_EXPORT TextureLayerImpl : public LayerImpl { 19 public: 20 static scoped_ptr<TextureLayerImpl> Create(LayerTreeImpl* tree_impl, int id) { 21 return make_scoped_ptr(new TextureLayerImpl(tree_impl, id)); 22 } 23 virtual ~TextureLayerImpl(); 24 25 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* layer_tree_impl) 26 OVERRIDE; 27 virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE; 28 29 virtual bool WillDraw(DrawMode draw_mode, 30 ResourceProvider* resource_provider) OVERRIDE; 31 virtual void AppendQuads(RenderPass* render_pass, 32 const OcclusionTracker<LayerImpl>& occlusion_tracker, 33 AppendQuadsData* append_quads_data) OVERRIDE; 34 virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE; 35 virtual void ReleaseResources() OVERRIDE; 36 37 // These setter methods don't cause any implicit damage, so the texture client 38 // must explicitly invalidate if they intend to cause a visible change in the 39 // layer's output. 40 void SetTextureId(unsigned id); 41 void SetPremultipliedAlpha(bool premultiplied_alpha); 42 void SetBlendBackgroundColor(bool blend); 43 void SetFlipped(bool flipped); 44 void SetUVTopLeft(const gfx::PointF top_left); 45 void SetUVBottomRight(const gfx::PointF bottom_right); 46 47 // 1--2 48 // | | 49 // 0--3 50 void SetVertexOpacity(const float vertex_opacity[4]); 51 52 void SetTextureMailbox( 53 const TextureMailbox& mailbox, 54 scoped_ptr<SingleReleaseCallbackImpl> release_callback); 55 56 private: 57 TextureLayerImpl(LayerTreeImpl* tree_impl, int id); 58 59 virtual const char* LayerTypeAsString() const OVERRIDE; 60 void FreeTextureMailbox(); 61 62 ResourceProvider::ResourceId external_texture_resource_; 63 bool premultiplied_alpha_; 64 bool blend_background_color_; 65 bool flipped_; 66 gfx::PointF uv_top_left_; 67 gfx::PointF uv_bottom_right_; 68 float vertex_opacity_[4]; 69 // This is a resource that's a GL copy of a software texture mailbox. 70 scoped_ptr<ScopedResource> texture_copy_; 71 72 TextureMailbox texture_mailbox_; 73 scoped_ptr<SingleReleaseCallbackImpl> release_callback_; 74 bool own_mailbox_; 75 bool valid_texture_copy_; 76 77 DISALLOW_COPY_AND_ASSIGN(TextureLayerImpl); 78 }; 79 80 } // namespace cc 81 82 #endif // CC_LAYERS_TEXTURE_LAYER_IMPL_H_ 83