Flutter Impeller
linear_gradient_contents.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_CONTENTS_LINEAR_GRADIENT_CONTENTS_H_
6 #define FLUTTER_IMPELLER_ENTITY_CONTENTS_LINEAR_GRADIENT_CONTENTS_H_
7 
8 #include <vector>
9 
11 #include "impeller/entity/entity.h"
14 
15 namespace impeller {
16 
18  public:
20 
22 
23  // |Contents|
24  bool IsOpaque(const Matrix& transform) const override;
25 
26  // |Contents|
27  bool Render(const ContentContext& renderer,
28  const Entity& entity,
29  RenderPass& pass) const override;
30 
31  // |Contents|
32  [[nodiscard]] bool ApplyColorFilter(
33  const ColorFilterProc& color_filter_proc) override;
34 
35  void SetEndPoints(Point start_point, Point end_point);
36 
37  void SetColors(std::vector<Color> colors);
38 
39  void SetStops(std::vector<Scalar> stops);
40 
41  const std::vector<Color>& GetColors() const;
42 
43  const std::vector<Scalar>& GetStops() const;
44 
45  void SetTileMode(Entity::TileMode tile_mode);
46 
47  private:
48  bool RenderTexture(const ContentContext& renderer,
49  const Entity& entity,
50  RenderPass& pass) const;
51 
52  bool RenderSSBO(const ContentContext& renderer,
53  const Entity& entity,
54  RenderPass& pass) const;
55 
56  bool RenderUniform(const ContentContext& renderer,
57  const Entity& entity,
58  RenderPass& pass) const;
59 
60  bool FastLinearGradient(const ContentContext& renderer,
61  const Entity& entity,
62  RenderPass& pass) const;
63 
64  bool CanApplyFastGradient() const;
65 
66  Point start_point_;
67  Point end_point_;
68  std::vector<Color> colors_;
69  std::vector<Scalar> stops_;
70  Entity::TileMode tile_mode_;
71  Color decal_border_color_ = Color::BlackTransparent();
72 
74 
75  LinearGradientContents& operator=(const LinearGradientContents&) = delete;
76 };
77 
78 } // namespace impeller
79 
80 #endif // FLUTTER_IMPELLER_ENTITY_CONTENTS_LINEAR_GRADIENT_CONTENTS_H_
std::function< Color(Color)> ColorFilterProc
Definition: contents.h:35
const std::vector< Color > & GetColors() const
void SetTileMode(Entity::TileMode tile_mode)
const std::vector< Scalar > & GetStops() const
void SetColors(std::vector< Color > colors)
bool ApplyColorFilter(const ColorFilterProc &color_filter_proc) override
If possible, applies a color filter to this contents inputs on the CPU.
bool Render(const ContentContext &renderer, const Entity &entity, RenderPass &pass) const override
void SetEndPoints(Point start_point, Point end_point)
void SetStops(std::vector< Scalar > stops)
bool IsOpaque(const Matrix &transform) const override
Whether this Contents only emits opaque source colors from the fragment stage. This value does not ac...
Render passes encode render commands directed as one specific render target into an underlying comman...
Definition: render_pass.h:30
static constexpr Color BlackTransparent()
Definition: color.h:270
A 4x4 matrix using column-major storage.
Definition: matrix.h:37