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
, int id
) {
21 return make_scoped_ptr(new TextureLayerImpl(tree_impl
, id
));
23 virtual ~TextureLayerImpl();
25 virtual scoped_ptr
<LayerImpl
> CreateLayerImpl(LayerTreeImpl
* layer_tree_impl
)
27 virtual void PushPropertiesTo(LayerImpl
* layer
) OVERRIDE
;
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 Region
VisibleContentOpaqueRegion() const OVERRIDE
;
35 virtual void ReleaseResources() OVERRIDE
;
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
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
);
50 void SetVertexOpacity(const float vertex_opacity
[4]);
52 void SetTextureMailbox(const TextureMailbox
& mailbox
,
53 scoped_ptr
<SingleReleaseCallback
> release_callback
);
56 TextureLayerImpl(LayerTreeImpl
* tree_impl
, int id
);
58 virtual const char* LayerTypeAsString() const OVERRIDE
;
59 void FreeTextureMailbox();
61 ResourceProvider::ResourceId external_texture_resource_
;
62 bool premultiplied_alpha_
;
63 bool blend_background_color_
;
65 gfx::PointF uv_top_left_
;
66 gfx::PointF uv_bottom_right_
;
67 float vertex_opacity_
[4];
68 // This is a resource that's a GL copy of a software texture mailbox.
69 scoped_ptr
<ScopedResource
> texture_copy_
;
71 TextureMailbox texture_mailbox_
;
72 scoped_ptr
<SingleReleaseCallback
> release_callback_
;
74 bool valid_texture_copy_
;
76 DISALLOW_COPY_AND_ASSIGN(TextureLayerImpl
);
81 #endif // CC_LAYERS_TEXTURE_LAYER_IMPL_H_