diff options
Diffstat (limited to 'src/effects')
-rw-r--r-- | src/effects/GrAlphaThresholdFragmentProcessor.cpp | 12 | ||||
-rw-r--r-- | src/effects/SkArithmeticImageFilter.cpp | 12 | ||||
-rw-r--r-- | src/effects/SkBlurMaskFilter.cpp | 5 | ||||
-rw-r--r-- | src/effects/SkDisplacementMapEffect.cpp | 5 | ||||
-rw-r--r-- | src/effects/SkLightingImageFilter.cpp | 2 | ||||
-rw-r--r-- | src/effects/SkMagnifierImageFilter.cpp | 3 | ||||
-rw-r--r-- | src/effects/SkPerlinNoiseShader.cpp | 3 | ||||
-rw-r--r-- | src/effects/SkXfermodeImageFilter.cpp | 12 | ||||
-rw-r--r-- | src/effects/gradients/SkGradientShader.cpp | 7 |
9 files changed, 38 insertions, 23 deletions
diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.cpp b/src/effects/GrAlphaThresholdFragmentProcessor.cpp index a259607444..afafe08279 100644 --- a/src/effects/GrAlphaThresholdFragmentProcessor.cpp +++ b/src/effects/GrAlphaThresholdFragmentProcessor.cpp @@ -32,6 +32,12 @@ sk_sp<GrFragmentProcessor> GrAlphaThresholdFragmentProcessor::Make( bounds)); } +static SkMatrix make_div_and_translate_matrix(GrTexture* texture, int x, int y) { + SkMatrix matrix = GrCoordTransform::MakeDivByTextureWHMatrix(texture); + matrix.preTranslate(SkIntToScalar(x), SkIntToScalar(y)); + return matrix; +} + GrAlphaThresholdFragmentProcessor::GrAlphaThresholdFragmentProcessor( GrTexture* texture, sk_sp<GrColorSpaceXform> colorSpaceXform, @@ -41,11 +47,11 @@ GrAlphaThresholdFragmentProcessor::GrAlphaThresholdFragmentProcessor( const SkIRect& bounds) : fInnerThreshold(innerThreshold) , fOuterThreshold(outerThreshold) - , fImageCoordTransform(SkMatrix::I(), texture, GrSamplerParams::kNone_FilterMode) + , fImageCoordTransform(GrCoordTransform::MakeDivByTextureWHMatrix(texture), texture, + GrSamplerParams::kNone_FilterMode) , fImageTextureSampler(texture) , fColorSpaceXform(std::move(colorSpaceXform)) - , fMaskCoordTransform(SkMatrix::MakeTrans(SkIntToScalar(-bounds.x()), - SkIntToScalar(-bounds.y())), + , fMaskCoordTransform(make_div_and_translate_matrix(maskTexture, -bounds.x(), -bounds.y()), maskTexture, GrSamplerParams::kNone_FilterMode) , fMaskTextureSampler(maskTexture) { diff --git a/src/effects/SkArithmeticImageFilter.cpp b/src/effects/SkArithmeticImageFilter.cpp index d33a9dc562..3e4d48fe65 100644 --- a/src/effects/SkArithmeticImageFilter.cpp +++ b/src/effects/SkArithmeticImageFilter.cpp @@ -348,8 +348,10 @@ sk_sp<SkSpecialImage> ArithmeticImageFilterImpl::filterImageGPU( sk_sp<GrFragmentProcessor> bgFP; if (backgroundTex) { - SkMatrix backgroundMatrix = SkMatrix::MakeTrans(-SkIntToScalar(backgroundOffset.fX), - -SkIntToScalar(backgroundOffset.fY)); + SkMatrix backgroundMatrix; + backgroundMatrix.setIDiv(backgroundTex->width(), backgroundTex->height()); + backgroundMatrix.preTranslate(-SkIntToScalar(backgroundOffset.fX), + -SkIntToScalar(backgroundOffset.fY)); sk_sp<GrColorSpaceXform> bgXform = GrColorSpaceXform::Make(background->getColorSpace(), outputProperties.colorSpace()); bgFP = GrTextureDomainEffect::Make( @@ -362,8 +364,10 @@ sk_sp<SkSpecialImage> ArithmeticImageFilterImpl::filterImageGPU( } if (foregroundTex) { - SkMatrix foregroundMatrix = SkMatrix::MakeTrans(-SkIntToScalar(foregroundOffset.fX), - -SkIntToScalar(foregroundOffset.fY)); + SkMatrix foregroundMatrix; + foregroundMatrix.setIDiv(foregroundTex->width(), foregroundTex->height()); + foregroundMatrix.preTranslate(-SkIntToScalar(foregroundOffset.fX), + -SkIntToScalar(foregroundOffset.fY)); sk_sp<GrColorSpaceXform> fgXform = GrColorSpaceXform::Make(foreground->getColorSpace(), outputProperties.colorSpace()); sk_sp<GrFragmentProcessor> foregroundFP; diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp index 70afd910da..fa4cb33c3b 100644 --- a/src/effects/SkBlurMaskFilter.cpp +++ b/src/effects/SkBlurMaskFilter.cpp @@ -1520,9 +1520,10 @@ sk_sp<GrTextureProxy> SkBlurMaskFilterImpl::filterMaskGPU(GrContext* context, if (!isNormalBlur) { GrPaint paint; + SkMatrix matrix; + matrix.setIDiv(src->width(), src->height()); // Blend pathTexture over blurTexture. - paint.addCoverageFragmentProcessor( - GrSimpleTextureEffect::Make(src, nullptr, SkMatrix::I())); + paint.addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(src, nullptr, matrix)); if (kInner_SkBlurStyle == fBlurStyle) { // inner: dst = dst * src paint.setCoverageSetOpXPFactory(SkRegion::kIntersect_Op); diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp index 0d3940317f..28483bd57a 100644 --- a/src/effects/SkDisplacementMapEffect.cpp +++ b/src/effects/SkDisplacementMapEffect.cpp @@ -336,8 +336,9 @@ sk_sp<SkSpecialImage> SkDisplacementMapEffect::onFilterImage(SkSpecialImage* sou return nullptr; } - SkMatrix offsetMatrix = SkMatrix::MakeTrans(SkIntToScalar(colorOffset.fX - displOffset.fX), - SkIntToScalar(colorOffset.fY - displOffset.fY)); + SkMatrix offsetMatrix = GrCoordTransform::MakeDivByTextureWHMatrix(displTexture.get()); + offsetMatrix.preTranslate(SkIntToScalar(colorOffset.fX - displOffset.fX), + SkIntToScalar(colorOffset.fY - displOffset.fY)); SkColorSpace* colorSpace = ctx.outputProperties().colorSpace(); sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(color->getColorSpace(), colorSpace); diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp index 67ded34659..1d710bf1f2 100644 --- a/src/effects/SkLightingImageFilter.cpp +++ b/src/effects/SkLightingImageFilter.cpp @@ -1707,7 +1707,7 @@ GrLightingEffect::GrLightingEffect(GrTexture* texture, const SkMatrix& matrix, BoundaryMode boundaryMode, const SkIRect* srcBounds) - : INHERITED(texture, nullptr, SkMatrix::I()) + : INHERITED(texture, nullptr, GrCoordTransform::MakeDivByTextureWHMatrix(texture)) , fLight(light) , fSurfaceScale(surfaceScale) , fFilterMatrix(matrix) diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp index c8b32aee70..2b045322eb 100644 --- a/src/effects/SkMagnifierImageFilter.cpp +++ b/src/effects/SkMagnifierImageFilter.cpp @@ -71,7 +71,8 @@ private: float yInvZoom, float xInvInset, float yInvInset) - : INHERITED(texture, std::move(colorSpaceXform), SkMatrix::I()) + : INHERITED(texture, std::move(colorSpaceXform), + GrCoordTransform::MakeDivByTextureWHMatrix(texture)) , fBounds(bounds) , fXOffset(xOffset) , fYOffset(yOffset) diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp index f5a8b87b9a..dc3d9a690d 100644 --- a/src/effects/SkPerlinNoiseShader.cpp +++ b/src/effects/SkPerlinNoiseShader.cpp @@ -515,6 +515,7 @@ public: bool stitchTiles() const { return fStitchTiles; } const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency; } int numOctaves() const { return fNumOctaves; } + const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); } private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { @@ -545,7 +546,6 @@ private: GrTexture* permutationsTexture, GrTexture* noiseTexture, const SkMatrix& matrix) : fType(type) - , fCoordTransform(matrix) , fNumOctaves(numOctaves) , fStitchTiles(stitchTiles) , fPermutationsSampler(permutationsTexture) @@ -554,6 +554,7 @@ private: this->initClassID<GrPerlinNoiseEffect>(); this->addTextureSampler(&fPermutationsSampler); this->addTextureSampler(&fNoiseSampler); + fCoordTransform.reset(matrix); this->addCoordTransform(&fCoordTransform); } diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp index c52eebadc6..7f91df3ab5 100644 --- a/src/effects/SkXfermodeImageFilter.cpp +++ b/src/effects/SkXfermodeImageFilter.cpp @@ -249,8 +249,10 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter_Base::filterImageGPU( sk_sp<GrFragmentProcessor> bgFP; if (backgroundTex) { - SkMatrix backgroundMatrix = SkMatrix::MakeTrans(-SkIntToScalar(backgroundOffset.fX), - -SkIntToScalar(backgroundOffset.fY)); + SkMatrix backgroundMatrix; + backgroundMatrix.setIDiv(backgroundTex->width(), backgroundTex->height()); + backgroundMatrix.preTranslate(-SkIntToScalar(backgroundOffset.fX), + -SkIntToScalar(backgroundOffset.fY)); sk_sp<GrColorSpaceXform> bgXform = GrColorSpaceXform::Make(background->getColorSpace(), outputProperties.colorSpace()); bgFP = GrTextureDomainEffect::Make( @@ -264,8 +266,10 @@ sk_sp<SkSpecialImage> SkXfermodeImageFilter_Base::filterImageGPU( } if (foregroundTex) { - SkMatrix foregroundMatrix = SkMatrix::MakeTrans(-SkIntToScalar(foregroundOffset.fX), - -SkIntToScalar(foregroundOffset.fY)); + SkMatrix foregroundMatrix; + foregroundMatrix.setIDiv(foregroundTex->width(), foregroundTex->height()); + foregroundMatrix.preTranslate(-SkIntToScalar(foregroundOffset.fX), + -SkIntToScalar(foregroundOffset.fY)); sk_sp<GrColorSpaceXform> fgXform = GrColorSpaceXform::Make(foreground->getColorSpace(), outputProperties.colorSpace()); sk_sp<GrFragmentProcessor> foregroundFP; diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index 1d2c01e185..ca64cb77e1 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -1659,17 +1659,14 @@ GrGradientEffect::GrGradientEffect(const CreateArgs& args) { fRow = fAtlas->lockRow(bitmap); if (-1 != fRow) { fYCoord = fAtlas->getYOffset(fRow)+SK_ScalarHalf*fAtlas->getNormalizedTexelHeight(); - // This is 1/2 places where auto-normalization is disabled - fCoordTransform.reset(*args.fMatrix, fAtlas->getTexture(), - params.filterMode(), false); + fCoordTransform.reset(*args.fMatrix, fAtlas->getTexture(), params.filterMode()); fTextureSampler.reset(fAtlas->getTexture(), params); } else { sk_sp<GrTexture> texture(GrRefCachedBitmapTexture(args.fContext, bitmap, params)); if (!texture) { return; } - // This is 2/2 places where auto-normalization is disabled - fCoordTransform.reset(*args.fMatrix, texture.get(), params.filterMode(), false); + fCoordTransform.reset(*args.fMatrix, texture.get(), params.filterMode()); fTextureSampler.reset(texture.get(), params); fYCoord = SK_ScalarHalf; } |