aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2018-02-14 10:16:32 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-14 15:40:47 +0000
commit5b6fa82ee12bcebbb5bced07347a6d113a0d87fd (patch)
tree7161479cc28b7c0cc96b23c34ce5241e8741864a /src/shaders
parent13ec4d211f07b7d1a4cfae14d897d422d7926290 (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.cpp6
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 };