19 rendering_mode_ = rendering_mode;
28 sampler_descriptor_ = std::move(desc);
32 Matrix CalculateSubpassTransform(
const Matrix& snapshot_transform,
33 const Matrix& effect_transform,
38 return snapshot_transform *
43 FML_DCHECK(rendering_mode ==
45 return effect_transform *
47 effect_transform.
Invert() *
53 std::optional<Entity> MatrixFilterContents::RenderFilter(
55 const ContentContext& renderer,
57 const Matrix& effect_transform,
59 const std::optional<Rect>& coverage_hint)
const {
60 auto snapshot = inputs[0]->GetSnapshot(
"Matrix", renderer, entity);
61 if (!snapshot.has_value()) {
65 if (rendering_mode_ ==
96 snapshot->transform = CalculateSubpassTransform(
97 snapshot->transform, effect_transform, matrix_, rendering_mode_);
99 snapshot->transform = entity.GetTransform() *
101 entity.GetTransform().
Invert() *
104 snapshot->sampler_descriptor = sampler_descriptor_;
105 if (!snapshot.has_value()) {
111 std::optional<Rect> MatrixFilterContents::GetFilterSourceCoverage(
112 const Matrix& effect_transform,
113 const Rect& output_limit)
const {
116 effect_transform.
Invert();
121 return output_limit.TransformBounds(inverse);
127 const Matrix& effect_transform)
const {
128 if (inputs.empty()) {
132 std::optional<Rect> coverage = inputs[0]->GetCoverage(entity);
133 if (!coverage.has_value()) {
137 Matrix input_transform = inputs[0]->GetTransform(entity);
138 if (rendering_mode_ ==
144 input_transform, effect_transform, matrix_, rendering_mode_);
150 return coverage->TransformBounds(
transform);