| Flutter Impeller |

entity.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter 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 FLUTTER_IMPELLER_ENTITY_ENTITY_H_
6 #define FLUTTER_IMPELLER_ENTITY_ENTITY_H_
7
8 #include <cstdint>
9
10 #include "impeller/entity/contents/contents.h"
11 #include "impeller/geometry/color.h"
12 #include "impeller/geometry/matrix.h"
13 #include "impeller/geometry/rect.h"
14
15 namespace impeller {
16
17 class Renderer;
18 class RenderPass;
19
20 class Entity {
21 public:
22 static constexpr BlendMode kLastPipelineBlendMode = BlendMode::kModulate;
23 static constexpr BlendMode kLastAdvancedBlendMode = BlendMode::kLuminosity;
24
25 static constexpr Scalar kDepthEpsilon = 1.0f / 262144.0;
26
27 enum class RenderingMode {
28 /// In direct mode, the Entity's transform is used as the current
29 /// local-to-screen transform matrix.
30 kDirect,
31 /// In subpass mode, the Entity passed through the filter is in screen space
32 /// rather than local space, and so some filters (namely,
33 /// MatrixFilterContents) need to interpret the given EffectTransform as the
34 /// current transform matrix.
35 kSubpassAppendSnapshotTransform,
36 kSubpassPrependSnapshotTransform,
37 };
38
39 /// An enum to define how to repeat, fold, or omit colors outside of the
40 /// typically defined range of the source of the colors (such as the
41 /// bounds of an image or the defining geometry of a gradient).
42 enum class TileMode {
43 /// Replicate the edge color if the shader draws outside of its original
44 /// bounds.
45 kClamp,
46
47 /// Repeat the shader's image horizontally and vertically (or both along and
48 /// perpendicular to a gradient's geometry).
49 kRepeat,
50
51 /// Repeat the shader's image horizontally and vertically, seamlessly
52 /// alternating mirrored images.
53 kMirror,
54
55 /// Render the shader's image pixels only within its original bounds. If the
56 /// shader draws outside of its original bounds, transparent black is drawn
57 /// instead.
58 kDecal,
59 };
60
61 enum class ClipOperation {
62 kDifference,
63 kIntersect,
64 };
65
66 /// @brief Create an entity that can be used to render a given snapshot.
67 static Entity FromSnapshot(const Snapshot& snapshot,
68 BlendMode blend_mode = BlendMode::kSrcOver);
69
70 Entity();
71
72 ~Entity();
73
74 Entity(Entity&&);
75
76 Entity& operator=(Entity&&);
77
78 /// @brief Get the global transform matrix for this Entity.
79 const Matrix& GetTransform() const;
80
81 /// @brief Get the vertex shader transform used for drawing this Entity.
82 Matrix GetShaderTransform(const RenderPass& pass) const;
83
84 /// @brief Static utility that computes the vertex shader transform used for
85 /// drawing an Entity with a given the clip depth and RenderPass size.
86 static Matrix GetShaderTransform(Scalar clip_depth,
87 const RenderPass& pass,
88 const Matrix& transform);
89
90 /// @brief Set the global transform matrix for this Entity.
91 void SetTransform(const Matrix& transform);
92
93 std::optional<Rect> GetCoverage() const;
94
95 void SetContents(std::shared_ptr<Contents> contents);
96
97 const std::shared_ptr<Contents>& GetContents() const;
98
99 void SetClipDepth(uint32_t clip_depth);
100
101 uint32_t GetClipDepth() const;
102
103 float GetShaderClipDepth() const;
104
105 static float GetShaderClipDepth(uint32_t clip_depth);
106
107 void SetBlendMode(BlendMode blend_mode);
108
109 BlendMode GetBlendMode() const;
110
111 bool Render(const ContentContext& renderer, RenderPass& parent_pass) const;
112
113 static bool IsBlendModeDestructive(BlendMode blend_mode);
114
115 bool SetInheritedOpacity(Scalar alpha);
116
117 std::optional<Color> AsBackgroundColor(ISize target_size) const;
118
119 Entity Clone() const;
120
121 private:
122 Entity(const Entity&);
123
124 Matrix transform_;
125 std::shared_ptr<Contents> contents_;
126 BlendMode blend_mode_ = BlendMode::kSrcOver;
127 uint32_t clip_depth_ = 1u;
128 };
129
130 } // namespace impeller
131
132 #endif // FLUTTER_IMPELLER_ENTITY_ENTITY_H_
impeller::ContentContext
Definition: content_context.h:138
impeller::Entity
Definition: entity.h:20
impeller::Entity::SetTransform
void SetTransform(const Matrix &transform)
Set the global transform matrix for this Entity.
Definition: entity.cc:60
impeller::Entity::Entity
Entity()
impeller::Entity::Entity
Entity(Entity &&)
impeller::Entity::TileMode
TileMode
Definition: entity.h:42
impeller::Entity::TileMode::kDecal
@ kDecal
impeller::Entity::TileMode::kRepeat
@ kRepeat
impeller::Entity::TileMode::kClamp
@ kClamp
impeller::Entity::TileMode::kMirror
@ kMirror
impeller::Entity::GetCoverage
std::optional< Rect > GetCoverage() const
Definition: entity.cc:64
impeller::Entity::SetInheritedOpacity
bool SetInheritedOpacity(Scalar alpha)
Definition: entity.cc:105
impeller::Entity::RenderingMode
RenderingMode
Definition: entity.h:27
impeller::Entity::RenderingMode::kDirect
@ kDirect
impeller::Entity::RenderingMode::kSubpassPrependSnapshotTransform
@ kSubpassPrependSnapshotTransform
impeller::Entity::RenderingMode::kSubpassAppendSnapshotTransform
@ kSubpassAppendSnapshotTransform
impeller::Entity::GetContents
const std::shared_ptr< Contents > & GetContents() const
Definition: entity.cc:76
impeller::Entity::GetShaderTransform
Matrix GetShaderTransform(const RenderPass &pass) const
Get the vertex shader transform used for drawing this Entity.
Definition: entity.cc:48
impeller::Entity::~Entity
~Entity()
impeller::Entity::SetClipDepth
void SetClipDepth(uint32_t clip_depth)
Definition: entity.cc:80
impeller::Entity::GetBlendMode
BlendMode GetBlendMode() const
Definition: entity.cc:101
impeller::Entity::SetContents
void SetContents(std::shared_ptr< Contents > contents)
Definition: entity.cc:72
impeller::Entity::SetBlendMode
void SetBlendMode(BlendMode blend_mode)
Definition: entity.cc:97
impeller::Entity::kLastAdvancedBlendMode
static constexpr BlendMode kLastAdvancedBlendMode
Definition: entity.h:23
impeller::Entity::kDepthEpsilon
static constexpr Scalar kDepthEpsilon
Definition: entity.h:25
impeller::Entity::Render
bool Render(const ContentContext &renderer, RenderPass &parent_pass) const
Definition: entity.cc:144
impeller::Entity::Clone
Entity Clone() const
Definition: entity.cc:158
impeller::Entity::AsBackgroundColor
std::optional< Color > AsBackgroundColor(ISize target_size) const
Definition: entity.cc:116
impeller::Entity::GetTransform
const Matrix & GetTransform() const
Get the global transform matrix for this Entity.
Definition: entity.cc:44
impeller::Entity::kLastPipelineBlendMode
static constexpr BlendMode kLastPipelineBlendMode
Definition: entity.h:22
impeller::Entity::GetClipDepth
uint32_t GetClipDepth() const
Definition: entity.cc:84
impeller::Entity::IsBlendModeDestructive
static bool IsBlendModeDestructive(BlendMode blend_mode)
Returns true if the blend mode is "destructive", meaning that even fully transparent source colors wo...
Definition: entity.cc:127
impeller::Entity::FromSnapshot
static Entity FromSnapshot(const Snapshot &snapshot, BlendMode blend_mode=BlendMode::kSrcOver)
Create an entity that can be used to render a given snapshot.
Definition: entity.cc:18
impeller::Entity::operator=
Entity & operator=(Entity &&)
impeller::Entity::GetShaderClipDepth
float GetShaderClipDepth() const
Definition: entity.cc:88
impeller::Entity::ClipOperation
ClipOperation
Definition: entity.h:61
impeller::Entity::ClipOperation::kIntersect
@ kIntersect
impeller::Entity::ClipOperation::kDifference
@ kDifference
impeller::RenderPass
Render passes encode render commands directed as one specific render target into an underlying comman...
Definition: render_pass.h:30
color.h
contents.h
transform
Matrix transform
Definition: gaussian_blur_filter_contents.cc:214
matrix.h
impeller
Definition: allocation.cc:12
impeller::Scalar
float Scalar
Definition: scalar.h:18
impeller::BlendMode
BlendMode
Definition: color.h:58
impeller::BlendMode::kModulate
@ kModulate
impeller::BlendMode::kSrcOver
@ kSrcOver
impeller::BlendMode::kLuminosity
@ kLuminosity
rect.h
impeller::Matrix
A 4x4 matrix using column-major storage.
Definition: matrix.h:37
impeller::Snapshot
Represents a texture and its intended draw transform/sampler configuration.
Definition: snapshot.h:24
impeller::TSize
Definition: size.h:25