1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrColorProcessor_DEFINED
9 #define GrColorProcessor_DEFINED
10 
11 #include "GrFragmentProcessor.h"
12 
13 class GrInvariantOutput;
14 
15 /**
16  * This is a simple GrFragmentProcessor that outputs a constant color. It may do one of the
17  * following with its input color: ignore it, or multiply it by the constant color, multiply its
18  * alpha by the constant color and ignore the input color's r, g, and b.
19  */
20 class GrConstColorProcessor : public GrFragmentProcessor {
21 public:
22     enum InputMode {
23         kIgnore_InputMode,
24         kModulateRGBA_InputMode,
25         kModulateA_InputMode,
26 
27         kLastInputMode = kModulateA_InputMode
28     };
29     static const int kInputModeCnt = kLastInputMode + 1;
30 
Create(GrColor color,InputMode mode)31     static GrFragmentProcessor* Create(GrColor color, InputMode mode) {
32         return SkNEW_ARGS(GrConstColorProcessor, (color, mode));
33     }
34 
~GrConstColorProcessor()35     ~GrConstColorProcessor() override {}
36 
name()37     const char* name() const override { return "Color"; }
38 
39     void getGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const override;
40 
41     GrGLFragmentProcessor* createGLInstance() const override;
42 
color()43     GrColor color() const { return fColor; }
44 
inputMode()45     InputMode inputMode() const { return fMode; }
46 
47 private:
GrConstColorProcessor(GrColor color,InputMode mode)48     GrConstColorProcessor(GrColor color, InputMode mode) : fColor(color), fMode(mode) {
49         this->initClassID<GrConstColorProcessor>();
50     }
51 
52     bool onIsEqual(const GrFragmentProcessor&) const override;
53 
54     void onComputeInvariantOutput(GrInvariantOutput* inout) const override;
55 
56     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
57 
58     GrColor     fColor;
59     InputMode   fMode;
60 
61     typedef GrFragmentProcessor INHERITED;
62 };
63 
64 #endif
65