diff options
author | Brian Osman <brianosman@google.com> | 2018-02-14 10:16:32 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-14 15:40:47 +0000 |
commit | 5b6fa82ee12bcebbb5bced07347a6d113a0d87fd (patch) | |
tree | 7161479cc28b7c0cc96b23c34ce5241e8741864a /src/shaders | |
parent | 13ec4d211f07b7d1a4cfae14d897d422d7926290 (diff) |
Respect FPArgs local matrix when picking a filtering mode in image shader
Includes a GM that previously drew bilerp, now draws bicubic.
Change-Id: I5e39e8adb49057b57729d9eb9748911ee8584401
Reviewed-on: https://skia-review.googlesource.com/107280
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/shaders')
-rw-r--r-- | src/shaders/SkImageShader.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp index 87fa7ce050..debd13b2ef 100644 --- a/src/shaders/SkImageShader.cpp +++ b/src/shaders/SkImageShader.cpp @@ -220,8 +220,9 @@ static GrSamplerState::WrapMode tile_mode_to_wrap_mode(const SkShader::TileMode std::unique_ptr<GrFragmentProcessor> SkImageShader::asFragmentProcessor( const GrFPArgs& args) const { + SkMatrix lm = this->getLocalMatrix(); SkMatrix lmInverse; - if (!this->getLocalMatrix().invert(&lmInverse)) { + if (!lm.invert(&lmInverse)) { return nullptr; } if (args.fLocalMatrix) { @@ -230,6 +231,7 @@ std::unique_ptr<GrFragmentProcessor> SkImageShader::asFragmentProcessor( return nullptr; } lmInverse.postConcat(inv); + lm.preConcat(*args.fLocalMatrix); } GrSamplerState::WrapMode wrapModes[] = {tile_mode_to_wrap_mode(fTileModeX), @@ -241,7 +243,7 @@ std::unique_ptr<GrFragmentProcessor> SkImageShader::asFragmentProcessor( // are provided by the caller. bool doBicubic; GrSamplerState::Filter textureFilterMode = GrSkFilterQualityToGrFilterMode( - args.fFilterQuality, *args.fViewMatrix, this->getLocalMatrix(), &doBicubic); + args.fFilterQuality, *args.fViewMatrix, lm, &doBicubic); GrSamplerState samplerState(wrapModes, textureFilterMode); sk_sp<SkColorSpace> texColorSpace; SkScalar scaleAdjust[2] = { 1.0f, 1.0f }; |