diff options
author | Brian Salomon <bsalomon@google.com> | 2017-07-25 15:52:51 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-27 16:32:33 +0000 |
commit | 216f2e08f227b23b6c93f776833db83fc6167cec (patch) | |
tree | ae36561201d94c43dc1f789c96dec4901760a1b6 /src/gpu/GrFragmentProcessor.cpp | |
parent | b133ffe76973865955a93644092307cf3d98662c (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.cpp | 31 |
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); |