From 6cd51b51d6603a3100b147c45f38697f2f199fc6 Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Wed, 26 Jul 2017 19:07:15 -0400 Subject: Remove GrSingleTextureEffect Change-Id: I510cc0657f9433b206dc2ab643fa557667263294 Reviewed-on: https://skia-review.googlesource.com/27180 Commit-Queue: Brian Salomon Reviewed-by: Ethan Nicholas --- src/effects/SkLightingImageFilter.cpp | 20 +++++++++++++------- src/effects/SkMagnifierImageFilter.cpp | 30 ++++++++++++++++++++++-------- src/effects/SkMorphologyImageFilter.cpp | 6 ++++-- 3 files changed, 39 insertions(+), 17 deletions(-) (limited to 'src/effects') diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp index 58064ceea9..212240669d 100644 --- a/src/effects/SkLightingImageFilter.cpp +++ b/src/effects/SkLightingImageFilter.cpp @@ -25,7 +25,6 @@ #include "GrTextureProxy.h" #include "SkGr.h" -#include "effects/GrSingleTextureEffect.h" #include "effects/GrTextureDomain.h" #include "glsl/GrGLSLFragmentProcessor.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" @@ -593,7 +592,7 @@ private: #if SK_SUPPORT_GPU -class GrLightingEffect : public GrSingleTextureEffect { +class GrLightingEffect : public GrFragmentProcessor { public: ~GrLightingEffect() override; @@ -611,13 +610,15 @@ protected: bool onIsEqual(const GrFragmentProcessor&) const override; private: + GrCoordTransform fCoordTransform; + GrTextureDomain fDomain; + TextureSampler fTextureSampler; const SkImageFilterLight* fLight; SkScalar fSurfaceScale; SkMatrix fFilterMatrix; BoundaryMode fBoundaryMode; - GrTextureDomain fDomain; - typedef GrSingleTextureEffect INHERITED; + typedef GrFragmentProcessor INHERITED; }; class GrDiffuseLightingEffect : public GrLightingEffect { @@ -1685,12 +1686,17 @@ GrLightingEffect::GrLightingEffect(sk_sp proxy, BoundaryMode boundaryMode, const SkIRect* srcBounds) // Perhaps this could advertise the opaque or coverage-as-alpha optimizations? - : INHERITED(kNone_OptimizationFlags, proxy, nullptr, SkMatrix::I()) + : INHERITED(kNone_OptimizationFlags) + , fCoordTransform(proxy.get()) + , fDomain(create_domain(proxy.get(), srcBounds, GrTextureDomain::kDecal_Mode)) + , fTextureSampler(std::move(proxy)) , fLight(light) , fSurfaceScale(surfaceScale) , fFilterMatrix(matrix) - , fBoundaryMode(boundaryMode) - , fDomain(create_domain(proxy.get(), srcBounds, GrTextureDomain::kDecal_Mode)) { + , fBoundaryMode(boundaryMode) { + this->initClassID(); + this->addCoordTransform(&fCoordTransform); + this->addTextureSampler(&fTextureSampler); fLight->ref(); } diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp index b2c6714828..558e49071c 100644 --- a/src/effects/SkMagnifierImageFilter.cpp +++ b/src/effects/SkMagnifierImageFilter.cpp @@ -17,16 +17,16 @@ //////////////////////////////////////////////////////////////////////////////// #if SK_SUPPORT_GPU +#include "../private/GrGLSL.h" #include "GrContext.h" +#include "GrCoordTransform.h" #include "GrTexture.h" #include "effects/GrProxyMove.h" -#include "effects/GrSingleTextureEffect.h" #include "glsl/GrGLSLColorSpaceXformHelper.h" #include "glsl/GrGLSLFragmentProcessor.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" #include "glsl/GrGLSLProgramDataManager.h" #include "glsl/GrGLSLUniformHandler.h" -#include "../private/GrGLSL.h" #endif sk_sp SkMagnifierImageFilter::Make(const SkRect& srcRect, SkScalar inset, @@ -48,7 +48,7 @@ sk_sp SkMagnifierImageFilter::Make(const SkRect& srcRect, SkScala } #if SK_SUPPORT_GPU -class GrMagnifierEffect : public GrSingleTextureEffect { +class GrMagnifierEffect : public GrFragmentProcessor { public: static sk_sp Make(sk_sp proxy, sk_sp colorSpaceXform, @@ -69,6 +69,14 @@ public: const char* name() const override { return "Magnifier"; } + SkString dumpInfo() const override { + SkString str; + str.appendf("Texture: %d", fTextureSampler.proxy()->uniqueID().asUInt()); + return str; + } + + const GrColorSpaceXform* colorSpaceXform() const { return fColorSpaceXform.get(); } + const SkIRect& bounds() const { return fBounds; } // Bounds of source image. const SkRect& srcRect() const { return fSrcRect; } @@ -89,10 +97,11 @@ private: float yInvZoom, float xInvInset, float yInvInset) - : INHERITED{ModulationFlags(proxy->config()), - GR_PROXY_MOVE(proxy), - std::move(colorSpaceXform), - SkMatrix::I()} // TODO: no GrSamplerParams::kBilerp_FilterMode? + : INHERITED{ModulateByConfigOptimizationFlags(proxy->config())} + // TODO: no GrSamplerParams::kBilerp_FilterMode? + , fCoordTransform(proxy.get()) + , fTextureSampler(std::move(proxy)) + , fColorSpaceXform(std::move(colorSpaceXform)) , fBounds(bounds) , fSrcRect(srcRect) , fXInvZoom(xInvZoom) @@ -100,6 +109,8 @@ private: , fXInvInset(xInvInset) , fYInvInset(yInvInset) { this->initClassID(); + this->addCoordTransform(&fCoordTransform); + this->addTextureSampler(&fTextureSampler); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; @@ -110,6 +121,9 @@ private: GR_DECLARE_FRAGMENT_PROCESSOR_TEST + GrCoordTransform fCoordTransform; + TextureSampler fTextureSampler; + sk_sp fColorSpaceXform; SkIRect fBounds; SkRect fSrcRect; float fXInvZoom; @@ -117,7 +131,7 @@ private: float fXInvInset; float fYInvInset; - typedef GrSingleTextureEffect INHERITED; + typedef GrFragmentProcessor INHERITED; }; // For brevity diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index 2cc224da99..e2e8dbacbc 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -326,7 +326,8 @@ GrMorphologyEffect::GrMorphologyEffect(sk_sp proxy, Direction direction, int radius, MorphologyType type) - : INHERITED{ModulationFlags(proxy->config()), GR_PROXY_MOVE(proxy), direction, radius} + : INHERITED{ModulateByConfigOptimizationFlags(proxy->config()), GR_PROXY_MOVE(proxy), + direction, radius} , fType(type) , fUseRange(false) { this->initClassID(); @@ -337,7 +338,8 @@ GrMorphologyEffect::GrMorphologyEffect(sk_sp proxy, int radius, MorphologyType type, const float range[2]) - : INHERITED{ModulationFlags(proxy->config()), GR_PROXY_MOVE(proxy), direction, radius} + : INHERITED{ModulateByConfigOptimizationFlags(proxy->config()), GR_PROXY_MOVE(proxy), + direction, radius} , fType(type) , fUseRange(true) { this->initClassID(); -- cgit v1.2.3