| Flutter Impeller |

Public Types | Public Member Functions | Static Public Member Functions | List of all members
impeller::ColorFilterContents Class Reference

`#include <color_filter_contents.h>`

Inheritance diagram for impeller::ColorFilterContents:

## Public Types
enum class | AbsorbOpacity { kYes , kNo }
Public Types inherited from impeller::FilterContents
enum class | BlurStyle { kNormal , kSolid , kOuter , kInner }
enum class | MorphType { kDilate , kErode }
Public Types inherited from impeller::Contents
using | ColorFilterProc = std::function< Color(Color)>
using | RenderProc = std::function< bool(const ContentContext &renderer, const Entity &entity, RenderPass &pass)>
using | CoverageProc = std::function< std::optional< Rect >(const Entity &entity)>

## Public Member Functions
| ColorFilterContents ()
| ~ColorFilterContents () override
void | SetAbsorbOpacity (AbsorbOpacity absorb_opacity)
AbsorbOpacity | GetAbsorbOpacity () const
void | SetAlpha (Scalar alpha)
| Sets an alpha that is applied to the final blended result. More...
std::optional< Scalar > | GetAlpha () const
void | SetInheritedOpacity (Scalar opacity) override
| Inherit the provided opacity. More...
std::optional< Rect > | GetFilterSourceCoverage (const Matrix &effect_transform, const Rect &output_limit) const override
| Internal utility method for |GetSourceCoverage| that computes the inverse effect of this transform on the specified output coverage, ignoring the inputs which will be accommodated by the caller. More...
Public Member Functions inherited from impeller::FilterContents
| FilterContents ()
| ~FilterContents () override
void | SetInputs (FilterInput::Vector inputs)
| The input texture sources for this filter. Each input's emitted texture is expected to have premultiplied alpha colors. More...
void | SetEffectTransform (const Matrix &effect_transform)
| Sets the transform which gets appended to the effect of this filter. Note that this is in addition to the entity's transform. More...
std::optional< Entity > | GetEntity (const ContentContext &renderer, const Entity &entity, const std::optional< Rect > &coverage_hint) const
| Create an Entity that renders this filter's output. More...
bool | Render (const ContentContext &renderer, const Entity &entity, RenderPass &pass) const override
std::optional< Rect > | GetCoverage (const Entity &entity) const override
| Get the area of the render pass that will be affected when this contents is rendered. More...
std::optional< Snapshot > | RenderToSnapshot (const ContentContext &renderer, const Entity &entity, std::optional< Rect > coverage_limit=std::nullopt, const std::optional< SamplerDescriptor > &sampler_descriptor=std::nullopt, bool msaa_enabled=true, int32_t mip_count=1, std::string_view label="Filter Snapshot") const override
| Render this contents to a snapshot, respecting the entity's transform, path, clip depth, and blend mode. The result texture size is always the size of `GetCoverage(entity)`. More...
std::optional< Rect > | GetSourceCoverage (const Matrix &effect_transform, const Rect &output_limit) const
| Determines the coverage of source pixels that will be needed to produce results for the specified |output_limit| under the specified |effect_transform|. This is essentially a reverse of the |GetCoverage| method computing a source coverage from an intended |output_limit| coverage. More...
virtual Matrix | GetLocalTransform (const Matrix &parent_transform) const
Matrix | GetTransform (const Matrix &parent_transform) const
virtual void | SetRenderingMode (Entity::RenderingMode rendering_mode)
| Marks this filter chain as applying in a subpass scenario. More...
Public Member Functions inherited from impeller::Contents
| Contents ()
virtual | ~Contents ()
void | SetCoverageHint (std::optional< Rect > coverage_hint)
| Hint that specifies the coverage area of this Contents that will actually be used during rendering. This is for optimization purposes only and can not be relied on as a clip. May optionally affect the result of `GetCoverage()`. More...
const std::optional< Rect > & | GetCoverageHint () const
virtual bool | IsOpaque (const Matrix &transform) const
| Whether this Contents only emits opaque source colors from the fragment stage. This value does not account for any entity properties (e.g. the blend mode), clips/visibility culling, or inherited opacity. More...
std::optional< Size > | GetColorSourceSize () const
| Return the color source's intrinsic size, if available. More...
void | SetColorSourceSize (Size size)
virtual std::optional< Color > | AsBackgroundColor (const Entity &entity, ISize target_size) const
| Returns a color if this Contents will flood the given `target_size` with a color. This output color is the "Source" color that will be used for the Entity's blend operation. More...
virtual bool | ApplyColorFilter (const ColorFilterProc &color_filter_proc)
| If possible, applies a color filter to this contents inputs on the CPU. More...

## Static Public Member Functions
static std::shared_ptr< ColorFilterContents > | MakeBlend (BlendMode blend_mode, FilterInput::Vector inputs, std::optional< Color > foreground_color=std::nullopt)
| the [inputs] are expected to be in the order of dst, src. More...
static std::shared_ptr< ColorFilterContents > | MakeColorMatrix (FilterInput::Ref input, const ColorMatrix &color_matrix)
static std::shared_ptr< ColorFilterContents > | MakeLinearToSrgbFilter (FilterInput::Ref input)
static std::shared_ptr< ColorFilterContents > | MakeSrgbToLinearFilter (FilterInput::Ref input)
Static Public Member Functions inherited from impeller::FilterContents
static std::shared_ptr< FilterContents > | MakeGaussianBlur (const FilterInput::Ref &input, Sigma sigma_x, Sigma sigma_y, Entity::TileMode tile_mode=Entity::TileMode::kDecal, BlurStyle mask_blur_style=BlurStyle::kNormal, const Geometry *mask_geometry=nullptr)
static std::shared_ptr< FilterContents > | MakeBorderMaskBlur (FilterInput::Ref input, Sigma sigma_x, Sigma sigma_y, BlurStyle blur_style=BlurStyle::kNormal)
static std::shared_ptr< FilterContents > | MakeDirectionalMorphology (FilterInput::Ref input, Radius radius, Vector2 direction, MorphType morph_type)
static std::shared_ptr< FilterContents > | MakeMorphology (FilterInput::Ref input, Radius radius_x, Radius radius_y, MorphType morph_type)
static std::shared_ptr< FilterContents > | MakeMatrixFilter (FilterInput::Ref input, const Matrix &matrix, const SamplerDescriptor &desc)
static std::shared_ptr< FilterContents > | MakeLocalMatrixFilter (FilterInput::Ref input, const Matrix &matrix)
static std::shared_ptr< FilterContents > | MakeYUVToRGBFilter (std::shared_ptr< Texture > y_texture, std::shared_ptr< Texture > uv_texture, YUVColorSpace yuv_color_space)
static std::shared_ptr< FilterContents > | MakeRuntimeEffect (FilterInput::Ref input, std::shared_ptr< RuntimeStage > runtime_stage, std::shared_ptr< std::vector< uint8_t >> uniforms, std::vector< RuntimeEffectContents::TextureInput > texture_inputs)
Static Public Member Functions inherited from impeller::Contents
static std::shared_ptr< Contents > | MakeAnonymous (RenderProc render_proc, CoverageProc coverage_proc)

## Additional Inherited Members
Static Public Attributes inherited from impeller::FilterContents
static const int32_t | kBlurFilterRequiredMipCount

## Detailed Description

Definition at line 12 of file color_filter_contents.h.

## Member Enumeration Documentation

## ◆ AbsorbOpacity

enum impeller::ColorFilterContents::AbsorbOpacity
| strong

Enumerator
kYes |
kNo |

Definition at line 14 of file color_filter_contents.h.

14 {
15 kYes,
16 kNo,
17 };

## Constructor & Destructor Documentation

## ◆ ColorFilterContents()

impeller::ColorFilterContents::ColorFilterContents | ( |  | ) |
| default

## ◆ ~ColorFilterContents()

impeller::ColorFilterContents::~ColorFilterContents | ( |  | ) |
| override default

## Member Function Documentation

## ◆ GetAbsorbOpacity()

ColorFilterContents::AbsorbOpacity impeller::ColorFilterContents::GetAbsorbOpacity | ( |  | ) | const

Definition at line 89 of file color_filter_contents.cc.

90 {
91 return absorb_opacity_;
92 }

## ◆ GetAlpha()

std::optional< Scalar > impeller::ColorFilterContents::GetAlpha | ( |  | ) | const

Definition at line 98 of file color_filter_contents.cc.

98 {
99 return alpha_.value_or(1.0) * inherited_opacity_;
100 }

## ◆ GetFilterSourceCoverage()

std::optional< Rect > impeller::ColorFilterContents::GetFilterSourceCoverage | ( | const Matrix & | effect_transform,
|  | const Rect & | output_limit
| ) |  | const
| override virtual

Internal utility method for |GetSourceCoverage| that computes the inverse effect of this transform on the specified output coverage, ignoring the inputs which will be accommodated by the caller.

Implements impeller::FilterContents.

Definition at line 106 of file color_filter_contents.cc.

108 {
109 return output_limit;
110 }

## ◆ MakeBlend()

std::shared_ptr< ColorFilterContents > impeller::ColorFilterContents::MakeBlend | ( | BlendMode | blend_mode,
|  | FilterInput::Vector | inputs,
|  | std::optional< Color > | foreground_color = `std::nullopt`
| ) |  |
| static

the [inputs] are expected to be in the order of dst, src.

Definition at line 17 of file color_filter_contents.cc.

20 {
21 if (blend_mode > Entity::kLastAdvancedBlendMode) {
22 VALIDATION_LOG << "Invalid blend mode " << static_cast<int>(blend_mode)
23 << " passed to ColorFilterContents::MakeBlend.";
24 return nullptr;
25 }
26
27 size_t total_inputs = inputs.size() + (foreground_color.has_value() ? 1 : 0);
28 if (total_inputs < 2 || blend_mode <= Entity::kLastPipelineBlendMode) {
29 auto blend = std::make_shared<BlendFilterContents>();
30 blend->SetInputs(inputs);
31 blend->SetBlendMode(blend_mode);
32 blend->SetForegroundColor(foreground_color);
33 return blend;
34 }
35
36 auto blend_input = inputs[0];
37 std::shared_ptr<BlendFilterContents> new_blend;
38 for (auto in_i = inputs.begin() + 1; in_i < inputs.end(); in_i++) {
39 new_blend = std::make_shared<BlendFilterContents>();
40 new_blend->SetInputs({blend_input, *in_i});
41 new_blend->SetBlendMode(blend_mode);
42 if (in_i < inputs.end() - 1 || foreground_color.has_value()) {
43 blend_input = FilterInput::Make(
44 std::static_pointer_cast<FilterContents>(new_blend));
45 }
46 }
47
48 if (foreground_color.has_value()) {
49 new_blend = std::make_shared<BlendFilterContents>();
50 new_blend->SetInputs({blend_input});
51 new_blend->SetBlendMode(blend_mode);
52 new_blend->SetForegroundColor(foreground_color);
53 }
54
55 return new_blend;
56 }
impeller::Entity::kLastAdvancedBlendMode
static constexpr BlendMode kLastAdvancedBlendMode
Definition: entity.h:29
impeller::Entity::kLastPipelineBlendMode
static constexpr BlendMode kLastPipelineBlendMode
Definition: entity.h:28
impeller::FilterInput::Make
static FilterInput::Ref Make(Variant input, bool msaa_enabled=true)
Definition: filter_input.cc:19
VALIDATION_LOG
#define VALIDATION_LOG
Definition: validation.h:91

References impeller::Entity::kLastAdvancedBlendMode, impeller::Entity::kLastPipelineBlendMode, impeller::FilterInput::Make(), and VALIDATION_LOG.

Referenced by impeller::Canvas::Restore(), impeller::testing::TEST_P(), and impeller::WrapWithGPUColorFilter().

## ◆ MakeColorMatrix()

std::shared_ptr< ColorFilterContents > impeller::ColorFilterContents::MakeColorMatrix | ( | FilterInput::Ref | input,
|  | const ColorMatrix & | color_matrix
| ) |  |
| static

Definition at line 58 of file color_filter_contents.cc.

60 {
61 auto filter = std::make_shared<ColorMatrixFilterContents>();
62 filter->SetInputs({std::move(input)});
63 filter->SetMatrix(color_matrix);
64 return filter;
65 }

Referenced by impeller::testing::TEST_P(), impeller::WrapWithGPUColorFilter(), and impeller::WrapWithInvertColors().

## ◆ MakeLinearToSrgbFilter()

std::shared_ptr< ColorFilterContents > impeller::ColorFilterContents::MakeLinearToSrgbFilter | ( | FilterInput::Ref | input | ) |
| static

Definition at line 68 of file color_filter_contents.cc.

68 {
69 auto filter = std::make_shared<LinearToSrgbFilterContents>();
70 filter->SetInputs({std::move(input)});
71 return filter;
72 }

Referenced by impeller::testing::TEST_P(), and impeller::WrapWithGPUColorFilter().

## ◆ MakeSrgbToLinearFilter()

std::shared_ptr< ColorFilterContents > impeller::ColorFilterContents::MakeSrgbToLinearFilter | ( | FilterInput::Ref | input | ) |
| static

Definition at line 75 of file color_filter_contents.cc.

75 {
76 auto filter = std::make_shared<SrgbToLinearFilterContents>();
77 filter->SetInputs({std::move(input)});
78 return filter;
79 }

Referenced by impeller::testing::TEST_P(), and impeller::WrapWithGPUColorFilter().

## ◆ SetAbsorbOpacity()

void impeller::ColorFilterContents::SetAbsorbOpacity | ( | AbsorbOpacity | absorb_opacity | ) |

Definition at line 85 of file color_filter_contents.cc.

85 {
86 absorb_opacity_ = absorb_opacity;
87 }

## ◆ SetAlpha()

void impeller::ColorFilterContents::SetAlpha | ( | Scalar | alpha | ) |

Sets an alpha that is applied to the final blended result.

Definition at line 94 of file color_filter_contents.cc.

94 {
95 alpha_ = alpha;
96 }

## ◆ SetInheritedOpacity()

void impeller::ColorFilterContents::SetInheritedOpacity | ( | Scalar | opacity | ) |
| override virtual

Inherit the provided opacity.

       Use of this method is invalid if CanAcceptOpacity returns false.

Reimplemented from impeller::Contents.

Definition at line 102 of file color_filter_contents.cc.

102 {
103 inherited_opacity_ = opacity;
104 }

The documentation for this class was generated from the following files:

- impeller/entity/contents/filters/color_filter_contents.h
- impeller/entity/contents/filters/color_filter_contents.cc