Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21ac0a56 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Fix blur texture sampling

Textures were being sampled with nearest neighbor instead of linear
interpolation. This was causing instabilities when animating the blur
amount.

Test: visual
Fixes: 171413210
Change-Id: I1e948dd77de7ac2ba163375b42388690876e49c2
parent 4fc0c43c
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -72,8 +72,10 @@ void BlurFilter::draw(SkCanvas* canvas, sk_sp<SkSurface> input, const uint32_t b
    const float stepY = radiusByPasses;

    // start by drawing and downscaling and doing the first blur pass
    SkFilterOptions linear = {SkSamplingMode::kLinear, SkMipmapMode::kNone};
    SkRuntimeShaderBuilder blurBuilder(mBlurEffect);
    blurBuilder.child("input") = input->makeImageSnapshot()->makeShader();
    blurBuilder.child("input") =
            input->makeImageSnapshot()->makeShader(SkTileMode::kClamp, SkTileMode::kClamp, linear);
    blurBuilder.uniform("in_inverseScale") = kInverseInputScale;
    blurBuilder.uniform("in_blurOffset") =
            SkV2{stepX * kInverseInputScale, stepY * kInverseInputScale};
@@ -97,7 +99,9 @@ void BlurFilter::draw(SkCanvas* canvas, sk_sp<SkSurface> input, const uint32_t b
        for (auto i = 1; i < numberOfPasses; i++) {
            const float stepScale = (float)i * kInputScale;

            blurBuilder.child("input") = readSurface->makeImageSnapshot()->makeShader();
            blurBuilder.child("input") =
                    readSurface->makeImageSnapshot()->makeShader(SkTileMode::kClamp,
                                                                 SkTileMode::kClamp, linear);
            blurBuilder.uniform("in_inverseScale") = 1.0f;
            blurBuilder.uniform("in_blurOffset") = SkV2{stepX * stepScale, stepY * stepScale};