aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/gpu/effects/GrConfigConversionEffect.cpp4
-rw-r--r--src/gpu/effects/GrConfigConversionEffect.h2
-rw-r--r--src/gpu/effects/GrConstColorProcessor.cpp2
-rw-r--r--src/gpu/effects/GrConstColorProcessor.h2
-rw-r--r--src/gpu/effects/GrConvexPolyEffect.cpp16
-rw-r--r--src/gpu/effects/GrConvexPolyEffect.h3
6 files changed, 28 insertions, 1 deletions
diff --git a/src/gpu/effects/GrConfigConversionEffect.cpp b/src/gpu/effects/GrConfigConversionEffect.cpp
index e8d04771f5..d83e82d8d9 100644
--- a/src/gpu/effects/GrConfigConversionEffect.cpp
+++ b/src/gpu/effects/GrConfigConversionEffect.cpp
@@ -70,6 +70,10 @@ GrConfigConversionEffect::GrConfigConversionEffect(PMConversion pmConversion)
this->initClassID<GrConfigConversionEffect>();
}
+sk_sp<GrFragmentProcessor> GrConfigConversionEffect::clone() const {
+ return sk_sp<GrFragmentProcessor>(new GrConfigConversionEffect(fPMConversion));
+}
+
bool GrConfigConversionEffect::onIsEqual(const GrFragmentProcessor& s) const {
const GrConfigConversionEffect& other = s.cast<GrConfigConversionEffect>();
return other.fPMConversion == fPMConversion;
diff --git a/src/gpu/effects/GrConfigConversionEffect.h b/src/gpu/effects/GrConfigConversionEffect.h
index f6bb7b1034..fe8f50bdf5 100644
--- a/src/gpu/effects/GrConfigConversionEffect.h
+++ b/src/gpu/effects/GrConfigConversionEffect.h
@@ -33,6 +33,8 @@ public:
const char* name() const override { return "Config Conversion"; }
+ sk_sp<GrFragmentProcessor> clone() const override;
+
PMConversion pmConversion() const { return fPMConversion; }
// This function determines whether it is possible to choose PM->UPM and UPM->PM conversions
diff --git a/src/gpu/effects/GrConstColorProcessor.cpp b/src/gpu/effects/GrConstColorProcessor.cpp
index 9f46712f29..d5f4e3527f 100644
--- a/src/gpu/effects/GrConstColorProcessor.cpp
+++ b/src/gpu/effects/GrConstColorProcessor.cpp
@@ -62,6 +62,8 @@ private:
///////////////////////////////////////////////////////////////////////////////
+sk_sp<GrFragmentProcessor> GrConstColorProcessor::clone() const { return Make(fColor, fMode); }
+
GrColor4f GrConstColorProcessor::constantOutputForConstantInput(GrColor4f input) const {
switch (fMode) {
case kIgnore_InputMode:
diff --git a/src/gpu/effects/GrConstColorProcessor.h b/src/gpu/effects/GrConstColorProcessor.h
index 1669f2b71e..baf405a8fe 100644
--- a/src/gpu/effects/GrConstColorProcessor.h
+++ b/src/gpu/effects/GrConstColorProcessor.h
@@ -38,6 +38,8 @@ public:
return str;
}
+ sk_sp<GrFragmentProcessor> clone() const override;
+
GrColor4f color() const { return fColor; }
InputMode inputMode() const { return fMode; }
diff --git a/src/gpu/effects/GrConvexPolyEffect.cpp b/src/gpu/effects/GrConvexPolyEffect.cpp
index fd01798d70..7dba3de04d 100644
--- a/src/gpu/effects/GrConvexPolyEffect.cpp
+++ b/src/gpu/effects/GrConvexPolyEffect.cpp
@@ -27,9 +27,11 @@ public:
const char* name() const override { return "AARect"; }
- void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
+ sk_sp<GrFragmentProcessor> clone() const override { return Make(fEdgeType, fRect); }
private:
+ void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
+
AARectEffect(GrPrimitiveEdgeType edgeType, const SkRect& rect)
: INHERITED(kCompatibleWithCoverageAsAlpha_OptimizationFlag)
, fRect(rect)
@@ -338,6 +340,18 @@ GrConvexPolyEffect::GrConvexPolyEffect(GrPrimitiveEdgeType edgeType, int n, cons
}
}
+GrConvexPolyEffect::GrConvexPolyEffect(const GrConvexPolyEffect& that)
+ : INHERITED(kCompatibleWithCoverageAsAlpha_OptimizationFlag)
+ , fEdgeType(that.fEdgeType)
+ , fEdgeCount(that.fEdgeCount) {
+ this->initClassID<GrConvexPolyEffect>();
+ memcpy(fEdges, that.fEdges, 3 * that.fEdgeCount * sizeof(SkScalar));
+}
+
+sk_sp<GrFragmentProcessor> GrConvexPolyEffect::clone() const {
+ return sk_sp<GrFragmentProcessor>(new GrConvexPolyEffect(*this));
+}
+
bool GrConvexPolyEffect::onIsEqual(const GrFragmentProcessor& other) const {
const GrConvexPolyEffect& cpe = other.cast<GrConvexPolyEffect>();
// ignore the fact that 0 == -0 and just use memcmp.
diff --git a/src/gpu/effects/GrConvexPolyEffect.h b/src/gpu/effects/GrConvexPolyEffect.h
index fa26fb4b72..f1f6ab0029 100644
--- a/src/gpu/effects/GrConvexPolyEffect.h
+++ b/src/gpu/effects/GrConvexPolyEffect.h
@@ -61,6 +61,8 @@ public:
const char* name() const override { return "ConvexPoly"; }
+ sk_sp<GrFragmentProcessor> clone() const override;
+
GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
int getEdgeCount() const { return fEdgeCount; }
@@ -69,6 +71,7 @@ public:
private:
GrConvexPolyEffect(GrPrimitiveEdgeType edgeType, int n, const SkScalar edges[]);
+ GrConvexPolyEffect(const GrConvexPolyEffect&);
GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;