15 #include "flutter/fml/logging.h"
40 Sigma secondary_sigma) {
41 auto blur = std::make_shared<DirectionalGaussianBlurFilterContents>();
42 blur->SetInputs({std::move(input)});
43 blur->SetSigma(sigma);
44 blur->SetDirection(direction);
45 blur->SetBlurStyle(blur_style);
46 blur->SetTileMode(tile_mode);
47 blur->SetIsSecondPass(is_second_pass);
48 blur->SetSecondarySigma(secondary_sigma);
61 Point(0, 1), blur_style, tile_mode,
71 auto filter = std::make_shared<BorderMaskBlurFilterContents>();
72 filter->SetInputs({std::move(input)});
73 filter->SetSigma(sigma_x, sigma_y);
74 filter->SetBlurStyle(blur_style);
83 auto filter = std::make_shared<DirectionalMorphologyFilterContents>();
84 filter->SetInputs({std::move(input)});
85 filter->SetRadius(radius);
86 filter->SetDirection(direction);
87 filter->SetMorphType(morph_type);
97 Point(1, 0), morph_type);
107 auto filter = std::make_shared<MatrixFilterContents>();
108 filter->SetInputs({std::move(input)});
109 filter->SetMatrix(matrix);
110 filter->SetSamplerDescriptor(desc);
117 auto filter = std::make_shared<LocalMatrixFilterContents>();
118 filter->SetInputs({std::move(input)});
119 filter->SetMatrix(matrix);
124 std::shared_ptr<Texture> y_texture,
125 std::shared_ptr<Texture> uv_texture,
127 auto filter = std::make_shared<impeller::YUVToRGBFilterContents>();
130 filter->SetYUVColorSpace(yuv_color_space);
139 inputs_ = std::move(inputs);
143 effect_transform_ = effect_transform;
145 for (
auto& input : inputs_) {
146 input->SetEffectTransform(effect_transform);
154 if (!filter_coverage.has_value()) {
161 if (!maybe_entity.has_value()) {
164 return maybe_entity->Render(renderer, pass);
167 std::optional<Rect> FilterContents::GetLocalCoverage(
168 const Entity& local_entity)
const {
169 auto coverage = GetFilterCoverage(inputs_, local_entity, effect_transform_);
171 if (coverage_hint.has_value() && coverage.has_value()) {
172 coverage = coverage->Intersection(coverage_hint.value());
179 Entity entity_with_local_transform = entity;
183 return GetLocalCoverage(entity_with_local_transform);
187 const std::shared_ptr<LazyGlyphAtlas>& lazy_glyph_atlas,
189 for (
auto& input : inputs_) {
190 input->PopulateGlyphAtlas(lazy_glyph_atlas, scale);
194 std::optional<Rect> FilterContents::GetFilterCoverage(
197 const Matrix& effect_transform)
const {
202 if (inputs_.empty()) {
206 std::optional<Rect> result;
207 for (
const auto& input : inputs) {
208 auto coverage = input->GetCoverage(entity);
209 if (!coverage.has_value()) {
212 if (!result.has_value()) {
216 result = result->Union(coverage.value());
224 const std::optional<Rect>& coverage_hint)
const {
225 Entity entity_with_local_transform = entity;
229 auto coverage = GetLocalCoverage(entity_with_local_transform);
230 if (!coverage.has_value() || coverage->IsEmpty()) {
234 return RenderFilter(inputs_, renderer, entity_with_local_transform,
235 effect_transform_, coverage.value(), coverage_hint);
241 std::optional<Rect> coverage_limit,
242 const std::optional<SamplerDescriptor>& sampler_descriptor,
244 const std::string& label)
const {
247 if (std::optional<Entity> result =
248 GetEntity(renderer, entity, coverage_limit);
249 result.has_value()) {
250 return result->GetContents()->RenderToSnapshot(
274 for (
auto& input : inputs_) {
275 if (!input->IsTranslationOnly()) {
283 for (
auto& input : inputs_) {
284 if (!input->IsLeaf()) {
296 for (
auto& input : inputs_) {
297 input->SetLeafInputs(inputs);
302 for (
auto& input : inputs_) {
303 input->SetRenderingMode(rendering_mode);