Home | History | Annotate | Download | only in layers
      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