| Flutter Impeller |

Public Types | Public Member Functions | Static Public Member Functions | List of all members
impeller::FilterInput Class Referenceabstract

`#include <filter_input.h>`

Inheritance diagram for impeller::FilterInput:

## Public Types
using | Ref = std::shared_ptr< FilterInput >
using | Vector = std::vector< FilterInput::Ref >
using | Variant = std::variant< std::shared_ptr< FilterContents >, std::shared_ptr< Contents >, std::shared_ptr< Texture >, Rect >

## Public Member Functions
virtual | ~FilterInput ()
virtual std::optional< Snapshot > | GetSnapshot (std::string_view label, const ContentContext &renderer, const Entity &entity, std::optional< Rect > coverage_limit=std::nullopt, int32_t mip_count=1) const =0
std::optional< Rect > | GetLocalCoverage (const Entity &entity) const
virtual std::optional< Rect > | GetCoverage (const Entity &entity) const =0
virtual std::optional< Rect > | GetSourceCoverage (const Matrix &effect_transform, const Rect &output_limit) const
virtual Matrix | GetLocalTransform (const Entity &entity) const
| Get the local transform of this filter input. This transform is relative to the `Entity` transform space. More...
virtual Matrix | GetTransform (const Entity &entity) const
| Get the transform of this `FilterInput`. This is equivalent to calling `entity.GetTransform() * GetLocalTransform()`. More...
virtual void | SetEffectTransform (const Matrix &matrix)
| Sets the effect transform of filter inputs. More...
virtual void | SetRenderingMode (Entity::RenderingMode rendering_mode)
| Turns on subpass mode for filter inputs. More...

## Static Public Member Functions
static FilterInput::Ref | Make (Variant input, bool msaa_enabled=true)
static FilterInput::Ref | Make (std::shared_ptr< Texture > input, Matrix local_transform)
static FilterInput::Vector | Make (std::initializer_list< Variant > inputs)

## Detailed Description

`FilterInput` is a lazy/single eval `Snapshot` which may be shared across filter parameters and used to evaluate input coverage.

A `FilterInput` can be re-used for any filter inputs across an entity's filter graph without repeating subpasses unnecessarily.

Filters may decide to not evaluate inputs in situations where they won't contribute to the filter's output texture.

Definition at line 30 of file filter_input.h.

## Member Typedef Documentation

## ◆ Ref

using impeller::FilterInput::Ref = std::shared_ptr<FilterInput>

Definition at line 32 of file filter_input.h.

## ◆ Variant

using impeller::FilterInput::Variant = std::variant<std::shared_ptr<FilterContents>, std::shared_ptr<Contents>, std::shared_ptr<Texture>, Rect>

Definition at line 34 of file filter_input.h.

## ◆ Vector

using impeller::FilterInput::Vector = std::vector<FilterInput::Ref>

Definition at line 33 of file filter_input.h.

## Constructor & Destructor Documentation

## ◆ ~FilterInput()

impeller::FilterInput::~FilterInput | ( |  | ) |
| virtual default

## Member Function Documentation

## ◆ GetCoverage()

virtual std::optional<Rect> impeller::FilterInput::GetCoverage | ( | const Entity & | entity | ) | const
| pure virtual

Implemented in impeller::TextureFilterInput, impeller::PlaceholderFilterInput, impeller::FilterContentsFilterInput, and impeller::ContentsFilterInput.

Referenced by GetLocalCoverage().

## ◆ GetLocalCoverage()

std::optional< Rect > impeller::FilterInput::GetLocalCoverage | ( | const Entity & | entity | ) | const

Definition at line 63 of file filter_input.cc.

63 {
64 Entity local_entity = entity.Clone();
65 local_entity.SetTransform(GetLocalTransform(entity));
66 return GetCoverage(local_entity);
67 }
impeller::FilterInput::GetCoverage
virtual std::optional< Rect > GetCoverage(const Entity &entity) const =0
impeller::FilterInput::GetLocalTransform
virtual Matrix GetLocalTransform(const Entity &entity) const
Get the local transform of this filter input. This transform is relative to the Entity transform spac...
Definition: filter_input.cc:59

References impeller::Entity::Clone(), GetCoverage(), GetLocalTransform(), and impeller::Entity::SetTransform().

## ◆ GetLocalTransform()

Matrix impeller::FilterInput::GetLocalTransform | ( | const Entity & | entity | ) | const
| virtual

Get the local transform of this filter input. This transform is relative to the `Entity` transform space.

Reimplemented in impeller::TextureFilterInput, and impeller::FilterContentsFilterInput.

Definition at line 59 of file filter_input.cc.

59 {
60 return Matrix();
61 }

Referenced by GetLocalCoverage(), and GetTransform().

## ◆ GetSnapshot()

virtual std::optional<Snapshot> impeller::FilterInput::GetSnapshot | ( | std::string_view | label,
|  | const ContentContext & | renderer,
|  | const Entity & | entity,
|  | std::optional< Rect > | coverage_limit = `std::nullopt`,
|  | int32_t | mip_count = `1`
| ) |  | const
| pure virtual

Evaluates the filter input and returns a snapshot of the result.

This method renders the input (which could be another filter, contents, or a texture) into a `Snapshot` object, which contains the resulting texture and its transform relative to the current render target.

Implementations are typically lazy and may cache the result, ensuring that the input is only rendered once even if `GetSnapshot` is called multiple times.

Parameters

  [in] | label | A debug label for the rendering operation and the resulting snapshot texture.
  [in] | renderer | The content context providing rendering resources.
  [in] | entity | The entity associated with this filter input, providing transform and other contextual information.
  [in] | coverage_limit | An optional rectangle to limit the area of the input that needs to be rendered. This can be used as an optimization.
  [in] | mip_count | The number of mip levels to generate for the snapshot texture. Defaults to 1 (no mips).

Returns
  A `Snapshot` containing the rendered texture and its transform, or `std::nullopt` if the input cannot be rendered or results in an empty output.

Implemented in impeller::PlaceholderFilterInput, impeller::TextureFilterInput, impeller::FilterContentsFilterInput, and impeller::ContentsFilterInput.

## ◆ GetSourceCoverage()

std::optional< Rect > impeller::FilterInput::GetSourceCoverage | ( | const Matrix & | effect_transform,
|  | const Rect & | output_limit
| ) |  | const
| virtual

Reimplemented in impeller::FilterContentsFilterInput.

Definition at line 69 of file filter_input.cc.

71 {
72 return output_limit;
73 }

## ◆ GetTransform()

Matrix impeller::FilterInput::GetTransform | ( | const Entity & | entity | ) | const
| virtual

Get the transform of this `FilterInput`. This is equivalent to calling `entity.GetTransform() * GetLocalTransform()`.

Reimplemented in impeller::FilterContentsFilterInput.

Definition at line 75 of file filter_input.cc.

75 {
76 return entity.GetTransform() * GetLocalTransform(entity);
77 }

References GetLocalTransform(), and impeller::Entity::GetTransform().

## ◆ Make() [1/3]

FilterInput::Vector impeller::FilterInput::Make | ( | std::initializer_list< Variant > | inputs | ) |
| static

Definition at line 50 of file filter_input.cc.

50 {
51 FilterInput::Vector result;
52 result.reserve(inputs.size());
53 for (const auto& input : inputs) {
54 result.push_back(Make(input));
55 }
56 return result;
57 }
impeller::FilterInput::Make
static FilterInput::Ref Make(Variant input, bool msaa_enabled=true)
Definition: filter_input.cc:19
impeller::FilterInput::Vector
std::vector< FilterInput::Ref > Vector
Definition: filter_input.h:33

References Make().

## ◆ Make() [2/3]

FilterInput::Ref impeller::FilterInput::Make | ( | std::shared_ptr< Texture > | input,
|  | Matrix | local_transform
| ) |  |
| static

Definition at line 44 of file filter_input.cc.

45 {
46 return std::shared_ptr<TextureFilterInput>(
47 new TextureFilterInput(std::move(texture), local_transform));
48 }

## ◆ Make() [3/3]

FilterInput::Ref impeller::FilterInput::Make | ( | Variant | input,
|  | bool | msaa_enabled = `true`
| ) |  |
| static

Definition at line 19 of file filter_input.cc.

19 {
20 if (auto filter = std::get_if<std::shared_ptr<FilterContents>>(&input)) {
21 return std::static_pointer_cast<FilterInput>(
22 std::shared_ptr<FilterContentsFilterInput>(
23 new FilterContentsFilterInput(*filter)));
24 }
25
26 if (auto contents = std::get_if<std::shared_ptr<Contents>>(&input)) {
27 return std::static_pointer_cast<FilterInput>(
28 std::shared_ptr<ContentsFilterInput>(
29 new ContentsFilterInput(*contents, msaa_enabled)));
30 }
31
32 if (auto texture = std::get_if<std::shared_ptr<Texture>>(&input)) {
33 return Make(*texture, Matrix());
34 }
35
36 if (auto rect = std::get_if<Rect>(&input)) {
37 return std::shared_ptr<PlaceholderFilterInput>(
38 new PlaceholderFilterInput(*rect));
39 }
40
41 FML_UNREACHABLE();
42 }

Referenced by impeller::Paint::CreateContents(), Make(), impeller::ColorFilterContents::MakeBlend(), impeller::FilterContents::MakeMorphology(), impeller::FilterContents::MakeYUVToRGBFilter(), impeller::Canvas::Restore(), impeller::Canvas::SaveLayer(), impeller::testing::TEST(), impeller::testing::TEST_P(), impeller::Paint::WithImageFilter(), impeller::Paint::WithMaskBlur(), and impeller::WrapInput().

## ◆ SetEffectTransform()

void impeller::FilterInput::SetEffectTransform | ( | const Matrix & | matrix | ) |
| virtual

Sets the effect transform of filter inputs.

Reimplemented in impeller::FilterContentsFilterInput.

Definition at line 81 of file filter_input.cc.

81 {}

## ◆ SetRenderingMode()

void impeller::FilterInput::SetRenderingMode | ( | Entity::RenderingMode | rendering_mode | ) |
| virtual

Turns on subpass mode for filter inputs.

Reimplemented in impeller::FilterContentsFilterInput.

Definition at line 83 of file filter_input.cc.

83 {}

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

- impeller/entity/contents/filters/inputs/filter_input.h
- impeller/entity/contents/filters/inputs/filter_input.cc