diff options
author | bsalomon <bsalomon@google.com> | 2015-04-01 14:54:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-01 14:54:57 -0700 |
commit | dfbbec436cbcacc3270d4b28357c8393e67d6494 (patch) | |
tree | 5ff2de5f710c72c13195aa1a7bc8c2d50c488762 /include/gpu/effects/GrConstColorProcessor.h | |
parent | 081a8a4f843508484c8915860effc4aa9c3b8fcc (diff) |
Add constant color GrFP.
Review URL: https://codereview.chromium.org/978713002
Diffstat (limited to 'include/gpu/effects/GrConstColorProcessor.h')
-rw-r--r-- | include/gpu/effects/GrConstColorProcessor.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/include/gpu/effects/GrConstColorProcessor.h b/include/gpu/effects/GrConstColorProcessor.h new file mode 100644 index 0000000000..27ee0dfd08 --- /dev/null +++ b/include/gpu/effects/GrConstColorProcessor.h @@ -0,0 +1,64 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrColorProcessor_DEFINED +#define GrColorProcessor_DEFINED + +#include "GrFragmentProcessor.h" + +class GrInvariantOutput; + +/** + * This is a simple GrFragmentProcessor that outputs a constant color. It may do one of the + * following with its input color: ignore it, or multiply it by the constant color, multiply its + * alpha by the constant color and ignore the input color's r, g, and b. + */ +class GrConstColorProcessor : public GrFragmentProcessor { +public: + enum InputMode { + kIgnore_InputMode, + kModulateRGBA_InputMode, + kModulateA_InputMode, + + kLastInputMode = kModulateA_InputMode + }; + static const int kInputModeCnt = kLastInputMode + 1; + + static GrFragmentProcessor* Create(GrColor color, InputMode mode) { + return SkNEW_ARGS(GrConstColorProcessor, (color, mode)); + } + + ~GrConstColorProcessor() override {} + + const char* name() const override { return "Color"; } + + void getGLProcessorKey(const GrGLCaps&, GrProcessorKeyBuilder*) const override; + + GrGLFragmentProcessor* createGLInstance() const override; + + GrColor color() const { return fColor; } + + InputMode inputMode() const { return fMode; } + +private: + GrConstColorProcessor(GrColor color, InputMode mode) : fColor(color), fMode(mode) { + this->initClassID<GrConstColorProcessor>(); + } + + bool onIsEqual(const GrFragmentProcessor&) const override; + + void onComputeInvariantOutput(GrInvariantOutput* inout) const override; + + GR_DECLARE_FRAGMENT_PROCESSOR_TEST; + + GrColor fColor; + InputMode fMode; + + typedef GrFragmentProcessor INHERITED; +}; + +#endif |