Flutter Impeller
impeller::FilterInput Class Referenceabstract

#include <filter_input.h>

Inheritance diagram for impeller::FilterInput:
impeller::ContentsFilterInput impeller::FilterContentsFilterInput impeller::PlaceholderFilterInput impeller::TextureFilterInput

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< SnapshotGetSnapshot (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< RectGetLocalCoverage (const Entity &entity) const
 
virtual std::optional< RectGetCoverage (const Entity &entity) const =0
 
virtual std::optional< RectGetSourceCoverage (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

Definition at line 33 of file filter_input.h.

Constructor & Destructor Documentation

◆ ~FilterInput()

impeller::FilterInput::~FilterInput ( )
virtualdefault

Member Function Documentation

◆ GetCoverage()

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

◆ 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 }
virtual std::optional< Rect > GetCoverage(const Entity &entity) const =0
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]labelA debug label for the rendering operation and the resulting snapshot texture.
[in]rendererThe content context providing rendering resources.
[in]entityThe entity associated with this filter input, providing transform and other contextual information.
[in]coverage_limitAn optional rectangle to limit the area of the input that needs to be rendered. This can be used as an optimization.
[in]mip_countThe 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 }
static FilterInput::Ref Make(Variant input, bool msaa_enabled=true)
Definition: filter_input.cc:19
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: