• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
Create(LayerTreeImpl * tree_impl,int id)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