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 
13 #include "impeller/geometry/rect.h"
14 
15 namespace impeller {
16 
17 class Renderer;
18 class RenderPass;
19 
20 class Entity {
21  public:
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.
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 {
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 
73 
75 
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_
void SetTransform(const Matrix &transform)
Set the global transform matrix for this Entity.
Definition: entity.cc:60
Entity(Entity &&)
std::optional< Rect > GetCoverage() const
Definition: entity.cc:64
bool SetInheritedOpacity(Scalar alpha)
Definition: entity.cc:105
const std::shared_ptr< Contents > & GetContents() const
Definition: entity.cc:76
Matrix GetShaderTransform(const RenderPass &pass) const
Get the vertex shader transform used for drawing this Entity.
Definition: entity.cc:48
void SetClipDepth(uint32_t clip_depth)
Definition: entity.cc:80
BlendMode GetBlendMode() const
Definition: entity.cc:101
void SetContents(std::shared_ptr< Contents > contents)
Definition: entity.cc:72
void SetBlendMode(BlendMode blend_mode)
Definition: entity.cc:97
static constexpr BlendMode kLastAdvancedBlendMode
Definition: entity.h:23
static constexpr Scalar kDepthEpsilon
Definition: entity.h:25
bool Render(const ContentContext &renderer, RenderPass &parent_pass) const
Definition: entity.cc:144
Entity Clone() const
Definition: entity.cc:158
std::optional< Color > AsBackgroundColor(ISize target_size) const
Definition: entity.cc:116
const Matrix & GetTransform() const
Get the global transform matrix for this Entity.
Definition: entity.cc:44
static constexpr BlendMode kLastPipelineBlendMode
Definition: entity.h:22
uint32_t GetClipDepth() const
Definition: entity.cc:84
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
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
Entity & operator=(Entity &&)
float GetShaderClipDepth() const
Definition: entity.cc:88
Render passes encode render commands directed as one specific render target into an underlying comman...
Definition: render_pass.h:30
float Scalar
Definition: scalar.h:18
BlendMode
Definition: color.h:58
A 4x4 matrix using column-major storage.
Definition: matrix.h:37
Represents a texture and its intended draw transform/sampler configuration.
Definition: snapshot.h:24