aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrFragmentProcessor.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-07-25 15:52:51 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-27 16:32:33 +0000
commit216f2e08f227b23b6c93f776833db83fc6167cec (patch)
treeae36561201d94c43dc1f789c96dec4901760a1b6 /src/gpu/GrFragmentProcessor.cpp
parentb133ffe76973865955a93644092307cf3d98662c (diff)
Implement GrFragmentProcessor::clone for 6 additional subclasses.
PremulInputFragmentProcessor UnpremulInputFragmentProcessor PremulFragmentProcessor ReplaceInputFragmentProcessor SeriesFragmentProcessor Change-Id: Ided1a6c6b66e12bfd8ee005950443333cc23b830 Reviewed-on: https://skia-review.googlesource.com/26680 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/GrFragmentProcessor.cpp')
-rw-r--r--src/gpu/GrFragmentProcessor.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/gpu/GrFragmentProcessor.cpp b/src/gpu/GrFragmentProcessor.cpp
index f9f42f91b6..8e795d5796 100644
--- a/src/gpu/GrFragmentProcessor.cpp
+++ b/src/gpu/GrFragmentProcessor.cpp
@@ -127,6 +127,8 @@ public:
const char* name() const override { return "PremultiplyInput"; }
+ sk_sp<GrFragmentProcessor> clone() const override { return Make(); }
+
private:
PremulInputFragmentProcessor()
: INHERITED(kPreservesOpaqueInput_OptimizationFlag |
@@ -167,6 +169,8 @@ public:
const char* name() const override { return "UnpremultiplyInput"; }
+ sk_sp<GrFragmentProcessor> clone() const override { return Make(); }
+
private:
UnpremulInputFragmentProcessor()
: INHERITED(kPreservesOpaqueInput_OptimizationFlag |
@@ -237,6 +241,8 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::SwizzleOutput(sk_sp<GrFragmentPr
const char* name() const override { return "Swizzle"; }
const GrSwizzle& swizzle() const { return fSwizzle; }
+ sk_sp<GrFragmentProcessor> clone() const override { return Make(fSwizzle); }
+
private:
SwizzleFragmentProcessor(const GrSwizzle& swizzle)
: INHERITED(kAll_OptimizationFlags)
@@ -298,6 +304,11 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::MakeInputPremulAndMulByOutput(
const char* name() const override { return "Premultiply"; }
+ sk_sp<GrFragmentProcessor> clone() const override {
+ auto child = this->childProcessor(0).clone();
+ return child ? Make(std::move(child)) : nullptr;
+ }
+
private:
PremulFragmentProcessor(sk_sp<GrFragmentProcessor> processor)
: INHERITED(OptFlags(processor.get())) {
@@ -364,6 +375,12 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::OverrideInput(sk_sp<GrFragmentPr
const char* name() const override { return "Replace Color"; }
+ sk_sp<GrFragmentProcessor> clone() const override {
+ auto child = this->childProcessor(0).clone();
+ return child ? Make(std::move(child), fColor) : nullptr;
+ }
+
+ private:
GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
class GLFP : public GrGLSLFragmentProcessor {
public:
@@ -396,7 +413,6 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::OverrideInput(sk_sp<GrFragmentPr
return new GLFP;
}
- private:
ReplaceInputFragmentProcessor(sk_sp<GrFragmentProcessor> child, GrColor4f color)
: INHERITED(OptFlags(child.get(), color)), fColor(color) {
this->initClassID<ReplaceInputFragmentProcessor>();
@@ -447,6 +463,17 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::RunInSeries(sk_sp<GrFragmentProc
const char* name() const override { return "Series"; }
+ sk_sp<GrFragmentProcessor> clone() const override {
+ SkSTArray<4, sk_sp<GrFragmentProcessor>> children(this->numChildProcessors());
+ for (int i = 0; i < this->numChildProcessors(); ++i) {
+ if (!children.push_back(this->childProcessor(i).clone())) {
+ return nullptr;
+ }
+ }
+ return Make(children.begin(), this->numChildProcessors());
+ }
+
+ private:
GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
class GLFP : public GrGLSLFragmentProcessor {
public:
@@ -466,7 +493,7 @@ sk_sp<GrFragmentProcessor> GrFragmentProcessor::RunInSeries(sk_sp<GrFragmentProc
};
return new GLFP;
}
- private:
+
SeriesFragmentProcessor(sk_sp<GrFragmentProcessor>* children, int cnt)
: INHERITED(OptFlags(children, cnt)) {
SkASSERT(cnt > 1);