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 SingleReleaseCallbackImpl
;
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 ~TextureLayerImpl() override
;
25 scoped_ptr
<LayerImpl
> CreateLayerImpl(
26 LayerTreeImpl
* layer_tree_impl
) override
;
27 void PushPropertiesTo(LayerImpl
* layer
) override
;
29 bool WillDraw(DrawMode draw_mode
,
30 ResourceProvider
* resource_provider
) override
;
31 void AppendQuads(RenderPass
* render_pass
,
32 AppendQuadsData
* append_quads_data
) override
;
33 SimpleEnclosedRegion
VisibleContentOpaqueRegion() const override
;
34 void ReleaseResources() override
;
36 // These setter methods don't cause any implicit damage, so the texture client
37 // must explicitly invalidate if they intend to cause a visible change in the
39 void SetTextureId(unsigned id
);
40 void SetPremultipliedAlpha(bool premultiplied_alpha
);
41 void SetBlendBackgroundColor(bool blend
);
42 void SetFlipped(bool flipped
);
43 void SetNearestNeighbor(bool nearest_neighbor
);
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(
53 const TextureMailbox
& mailbox
,
54 scoped_ptr
<SingleReleaseCallbackImpl
> release_callback
);
57 TextureLayerImpl(LayerTreeImpl
* tree_impl
, int id
);
59 const char* LayerTypeAsString() const override
;
60 void FreeTextureMailbox();
62 ResourceProvider::ResourceId external_texture_resource_
;
63 bool premultiplied_alpha_
;
64 bool blend_background_color_
;
66 bool nearest_neighbor_
;
67 gfx::PointF uv_top_left_
;
68 gfx::PointF uv_bottom_right_
;
69 float vertex_opacity_
[4];
70 // This is a resource that's a GL copy of a software texture mailbox.
71 scoped_ptr
<ScopedResource
> texture_copy_
;
73 TextureMailbox texture_mailbox_
;
74 scoped_ptr
<SingleReleaseCallbackImpl
> release_callback_
;
76 bool valid_texture_copy_
;
78 DISALLOW_COPY_AND_ASSIGN(TextureLayerImpl
);
83 #endif // CC_LAYERS_TEXTURE_LAYER_IMPL_H_