diff options
-rw-r--r-- | src/effects/SkHighContrastFilter.cpp | 2 | ||||
-rw-r--r-- | src/effects/SkLumaColorFilter.cpp | 4 | ||||
-rw-r--r-- | src/effects/SkOverdrawColorFilter.cpp | 5 | ||||
-rw-r--r-- | src/effects/SkRRectsGaussianEdgeMaskFilter.cpp | 33 |
4 files changed, 33 insertions, 11 deletions
diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp index 01efd9e17d..563cdefd73 100644 --- a/src/effects/SkHighContrastFilter.cpp +++ b/src/effects/SkHighContrastFilter.cpp @@ -174,6 +174,8 @@ public: const SkHighContrastConfig& config() const { return fConfig; } + sk_sp<GrFragmentProcessor> clone() const override { return Make(fConfig); } + private: HighContrastFilterEffect(const SkHighContrastConfig& config) : INHERITED(kNone_OptimizationFlags) diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp index f090858fe5..fd958c3a8b 100644 --- a/src/effects/SkLumaColorFilter.cpp +++ b/src/effects/SkLumaColorFilter.cpp @@ -51,6 +51,9 @@ public: const char* name() const override { return "Luminance-to-Alpha"; } + sk_sp<GrFragmentProcessor> clone() const override { return Make(); } + +private: class GLSLProcessor : public GrGLSLFragmentProcessor { public: static void GenKey(const GrProcessor&, const GrShaderCaps&, GrProcessorKeyBuilder*) {} @@ -75,7 +78,6 @@ public: typedef GrGLSLFragmentProcessor INHERITED; }; -private: LumaColorFilterEffect() : INHERITED(kConstantOutputForConstantInput_OptimizationFlag) { this->initClassID<LumaColorFilterEffect>(); } diff --git a/src/effects/SkOverdrawColorFilter.cpp b/src/effects/SkOverdrawColorFilter.cpp index 516b752088..b81fe6ca94 100644 --- a/src/effects/SkOverdrawColorFilter.cpp +++ b/src/effects/SkOverdrawColorFilter.cpp @@ -76,6 +76,11 @@ public: static sk_sp<GrFragmentProcessor> Make(const SkPMColor* colors); const char* name() const override { return "Overdraw"; } + + sk_sp<GrFragmentProcessor> clone() const override { + return sk_sp<GrFragmentProcessor>(new OverdrawFragmentProcessor(fColors)); + } + private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} diff --git a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp index f5555d6240..98422902d6 100644 --- a/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp +++ b/src/effects/SkRRectsGaussianEdgeMaskFilter.cpp @@ -209,9 +209,22 @@ public: return sk_sp<GrFragmentProcessor>(new RRectsGaussianEdgeFP(first, second, radius)); } + const char* name() const override { return "RRectsGaussianEdgeFP"; } + + sk_sp<GrFragmentProcessor> clone() const override { + return sk_sp<GrFragmentProcessor>(new RRectsGaussianEdgeFP(*this)); + } + + const SkRRect& first() const { return fFirst; } + Mode firstMode() const { return fFirstMode; } + const SkRRect& second() const { return fSecond; } + Mode secondMode() const { return fSecondMode; } + SkScalar radius() const { return fRadius; } + +private: class GLSLRRectsGaussianEdgeFP : public GrGLSLFragmentProcessor { public: - GLSLRRectsGaussianEdgeFP() { } + GLSLRRectsGaussianEdgeFP() {} // This method emits code so that, for each shape, the distance from the edge is returned // in 'outputName' clamped to 0..1 with positive distance being towards the center of the @@ -447,15 +460,6 @@ public: GLSLRRectsGaussianEdgeFP::GenKey(*this, caps, b); } - const char* name() const override { return "RRectsGaussianEdgeFP"; } - - const SkRRect& first() const { return fFirst; } - Mode firstMode() const { return fFirstMode; } - const SkRRect& second() const { return fSecond; } - Mode secondMode() const { return fSecondMode; } - SkScalar radius() const { return fRadius; } - -private: RRectsGaussianEdgeFP(const SkRRect& first, const SkRRect& second, SkScalar radius) : INHERITED(kCompatibleWithCoverageAsAlpha_OptimizationFlag) , fFirst(first) @@ -466,6 +470,15 @@ private: fFirstMode = ComputeMode(fFirst); fSecondMode = ComputeMode(fSecond); } + RRectsGaussianEdgeFP(const RRectsGaussianEdgeFP& that) + : INHERITED(kCompatibleWithCoverageAsAlpha_OptimizationFlag) + , fFirst(that.fFirst) + , fFirstMode(that.fFirstMode) + , fSecond(that.fSecond) + , fSecondMode(that.fSecondMode) + , fRadius(that.fRadius) { + this->initClassID<RRectsGaussianEdgeFP>(); + } static Mode ComputeMode(const SkRRect& rr) { if (rr.isCircle()) { |