@@ -56,10 +56,38 @@ std::shared_ptr<FilterContents> FilterContents::MakeGaussianBlur(
56
56
Sigma sigma_y,
57
57
BlurStyle blur_style,
58
58
Entity::TileMode tile_mode) {
59
- auto blur = std::make_shared<GaussianBlurFilterContents>(
60
- sigma_x.sigma , sigma_y.sigma , tile_mode);
61
- blur->SetInputs ({input});
62
- return blur;
59
+ constexpr bool use_new_filter =
60
+ #ifdef IMPELLER_ENABLE_NEW_GAUSSIAN_FILTER
61
+ true ;
62
+ #else
63
+ false ;
64
+ #endif
65
+
66
+ // TODO(https://github.com/flutter/flutter/issues/131580): Remove once the new
67
+ // blur handles all cases.
68
+ if (use_new_filter) {
69
+ auto blur = std::make_shared<GaussianBlurFilterContents>(
70
+ sigma_x.sigma , sigma_y.sigma , tile_mode);
71
+ blur->SetInputs ({input});
72
+ return blur;
73
+ }
74
+ std::shared_ptr<FilterContents> x_blur = MakeDirectionalGaussianBlur (
75
+ /* input=*/ input,
76
+ /* sigma=*/ sigma_x,
77
+ /* direction=*/ Point (1 , 0 ),
78
+ /* blur_style=*/ BlurStyle::kNormal ,
79
+ /* tile_mode=*/ tile_mode,
80
+ /* is_second_pass=*/ false ,
81
+ /* secondary_sigma=*/ {});
82
+ std::shared_ptr<FilterContents> y_blur = MakeDirectionalGaussianBlur (
83
+ /* input=*/ FilterInput::Make (x_blur),
84
+ /* sigma=*/ sigma_y,
85
+ /* direction=*/ Point (0 , 1 ),
86
+ /* blur_style=*/ blur_style,
87
+ /* tile_mode=*/ tile_mode,
88
+ /* is_second_pass=*/ true ,
89
+ /* secondary_sigma=*/ sigma_x);
90
+ return y_blur;
63
91
}
64
92
65
93
std::shared_ptr<FilterContents> FilterContents::MakeBorderMaskBlur (
0 commit comments