diff --git a/impeller/entity/contents/filters/directional_gaussian_blur_filter_contents.h b/impeller/entity/contents/filters/directional_gaussian_blur_filter_contents.h index 548d1d409cf28..2ea5df044f2cb 100644 --- a/impeller/entity/contents/filters/directional_gaussian_blur_filter_contents.h +++ b/impeller/entity/contents/filters/directional_gaussian_blur_filter_contents.h @@ -43,9 +43,6 @@ namespace impeller { /// - `FilterContents::MakeGaussianBlur` /// - //flutter/impeller/entity/shaders/gaussian_blur/gaussian_blur.glsl /// -///\deprecated Previously 2 of these were chained to do 2D blurs, use -/// \ref GaussianBlurFilterContents instead since it has better -/// performance. class DirectionalGaussianBlurFilterContents final : public FilterContents { public: DirectionalGaussianBlurFilterContents(); diff --git a/impeller/entity/contents/filters/filter_contents.cc b/impeller/entity/contents/filters/filter_contents.cc index 1122d8632d9eb..5f2c310f78d9e 100644 --- a/impeller/entity/contents/filters/filter_contents.cc +++ b/impeller/entity/contents/filters/filter_contents.cc @@ -56,10 +56,38 @@ std::shared_ptr FilterContents::MakeGaussianBlur( Sigma sigma_y, BlurStyle blur_style, Entity::TileMode tile_mode) { - auto blur = std::make_shared( - sigma_x.sigma, sigma_y.sigma, tile_mode); - blur->SetInputs({input}); - return blur; + constexpr bool use_new_filter = +#ifdef IMPELLER_ENABLE_NEW_GAUSSIAN_FILTER + true; +#else + false; +#endif + + // TODO(https://github.com/flutter/flutter/issues/131580): Remove once the new + // blur handles all cases. + if (use_new_filter) { + auto blur = std::make_shared( + sigma_x.sigma, sigma_y.sigma, tile_mode); + blur->SetInputs({input}); + return blur; + } + std::shared_ptr x_blur = MakeDirectionalGaussianBlur( + /*input=*/input, + /*sigma=*/sigma_x, + /*direction=*/Point(1, 0), + /*blur_style=*/BlurStyle::kNormal, + /*tile_mode=*/tile_mode, + /*is_second_pass=*/false, + /*secondary_sigma=*/{}); + std::shared_ptr y_blur = MakeDirectionalGaussianBlur( + /*input=*/FilterInput::Make(x_blur), + /*sigma=*/sigma_y, + /*direction=*/Point(0, 1), + /*blur_style=*/blur_style, + /*tile_mode=*/tile_mode, + /*is_second_pass=*/true, + /*secondary_sigma=*/sigma_x); + return y_blur; } std::shared_ptr FilterContents::MakeBorderMaskBlur(