From d993821d1a3dc6c1a257ea6671411937e691bee4 Mon Sep 17 00:00:00 2001 From: Aaron Clarke Date: Tue, 28 May 2024 10:34:42 -0700 Subject: [PATCH] [Impeller] shrunk the buffer for the rrect_blur --- impeller/aiks/aiks_blur_unittests.cc | 34 ++++++++++++------- .../contents/solid_rrect_blur_contents.cc | 10 ++++-- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/impeller/aiks/aiks_blur_unittests.cc b/impeller/aiks/aiks_blur_unittests.cc index 09e6e188a8801..e3253b39488b9 100644 --- a/impeller/aiks/aiks_blur_unittests.cc +++ b/impeller/aiks/aiks_blur_unittests.cc @@ -199,19 +199,29 @@ TEST_P(AiksTest, ClearBlendWithBlur) { } TEST_P(AiksTest, BlurHasNoEdge) { - Canvas canvas; - canvas.Scale(GetContentScale()); - canvas.DrawPaint({}); - Paint blur = { - .color = Color::Green(), - .mask_blur_descriptor = - Paint::MaskBlurDescriptor{ - .style = FilterContents::BlurStyle::kNormal, - .sigma = Sigma(47.6), - }, + Scalar sigma = 47.6; + auto callback = [&](AiksContext& renderer) -> std::optional { + if (AiksTest::ImGuiBegin("Controls", nullptr, + ImGuiWindowFlags_AlwaysAutoResize)) { + ImGui::SliderFloat("Sigma", &sigma, 0, 50); + ImGui::End(); + } + Canvas canvas; + canvas.Scale(GetContentScale()); + canvas.DrawPaint({}); + Paint blur = { + .color = Color::Green(), + .mask_blur_descriptor = + Paint::MaskBlurDescriptor{ + .style = FilterContents::BlurStyle::kNormal, + .sigma = Sigma(sigma), + }, + }; + canvas.DrawRect(Rect::MakeXYWH(300, 300, 200, 200), blur); + return canvas.EndRecordingAsPicture(); }; - canvas.DrawRect(Rect::MakeXYWH(300, 300, 200, 200), blur); - ASSERT_TRUE(OpenPlaygroundHere(canvas.EndRecordingAsPicture())); + + ASSERT_TRUE(OpenPlaygroundHere(callback)); } TEST_P(AiksTest, BlurredRectangleWithShader) { diff --git a/impeller/entity/contents/solid_rrect_blur_contents.cc b/impeller/entity/contents/solid_rrect_blur_contents.cc index 4d0c8cb0e33f6..b6bdffd2b7d81 100644 --- a/impeller/entity/contents/solid_rrect_blur_contents.cc +++ b/impeller/entity/contents/solid_rrect_blur_contents.cc @@ -15,10 +15,14 @@ namespace impeller { namespace { -// Generous padding to make sure blurs with large sigmas are fully visible. -// Used to expand the geometry around the rrect. +// Generous padding to make sure blurs with large sigmas are fully visible. Used +// to expand the geometry around the rrect. Larger sigmas have more subtle +// gradients so they need larger padding to avoid hard cutoffs. Sigma is +// maximized to 3.5 since that should cover 99.95% of all samples. 3.0 should +// cover 99.7% but that was seen to be not enough for large sigmas. Scalar PadForSigma(Scalar sigma) { - return sigma * 4.0; + Scalar scalar = std::min((1.0f / 47.6f) * sigma + 2.5f, 3.5f); + return sigma * scalar; } } // namespace