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.
5 #ifndef CC_LAYERS_TEXTURE_LAYER_IMPL_H_
6 #define CC_LAYERS_TEXTURE_LAYER_IMPL_H_
10 #include "base/callback.h"
11 #include "cc/base/cc_export.h"
12 #include "cc/layers/layer_impl.h"
15 class SingleReleaseCallback
;
18 class CC_EXPORT TextureLayerImpl
: public LayerImpl
{
20 static scoped_ptr
<TextureLayerImpl
> Create(LayerTreeImpl
* tree_impl
,
23 return make_scoped_ptr(new TextureLayerImpl(tree_impl
, id
, uses_mailbox
));
25 virtual ~TextureLayerImpl();
27 virtual scoped_ptr
<LayerImpl
> CreateLayerImpl(LayerTreeImpl
* layer_tree_impl
)
29 virtual void PushPropertiesTo(LayerImpl
* layer
) OVERRIDE
;
31 virtual bool WillDraw(DrawMode draw_mode
,
32 ResourceProvider
* resource_provider
) OVERRIDE
;
33 virtual void AppendQuads(QuadSink
* quad_sink
,
34 AppendQuadsData
* append_quads_data
) OVERRIDE
;
35 virtual void DidDraw(ResourceProvider
* resource_provider
) OVERRIDE
;
36 virtual Region
VisibleContentOpaqueRegion() const OVERRIDE
;
37 virtual void ReleaseResources() OVERRIDE
;
39 unsigned texture_id() const { return texture_id_
; }
41 // These setter methods don't cause any implicit damage, so the texture client
42 // must explicitly invalidate if they intend to cause a visible change in the
44 void SetTextureId(unsigned id
);
45 void SetPremultipliedAlpha(bool premultiplied_alpha
);
46 void SetBlendBackgroundColor(bool blend
);
47 void SetFlipped(bool flipped
);
48 void SetUVTopLeft(const gfx::PointF top_left
);
49 void SetUVBottomRight(const gfx::PointF bottom_right
);
54 void SetVertexOpacity(const float vertex_opacity
[4]);
56 void SetTextureMailbox(const TextureMailbox
& mailbox
,
57 scoped_ptr
<SingleReleaseCallback
> release_callback
);
60 TextureLayerImpl(LayerTreeImpl
* tree_impl
, int id
, bool uses_mailbox
);
62 virtual const char* LayerTypeAsString() const OVERRIDE
;
63 void FreeTextureMailbox();
66 ResourceProvider::ResourceId external_texture_resource_
;
67 bool premultiplied_alpha_
;
68 bool blend_background_color_
;
70 gfx::PointF uv_top_left_
;
71 gfx::PointF uv_bottom_right_
;
72 float vertex_opacity_
[4];
73 // This is a resource that's a GL copy of a software texture mailbox.
74 scoped_ptr
<ScopedResource
> texture_copy_
;
76 TextureMailbox texture_mailbox_
;
77 scoped_ptr
<SingleReleaseCallback
> release_callback_
;
80 bool valid_texture_copy_
;
82 DISALLOW_COPY_AND_ASSIGN(TextureLayerImpl
);
87 #endif // CC_LAYERS_TEXTURE_LAYER_IMPL_H_