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 /** 14 * This is a simple GrFragmentProcessor that outputs a constant color. It may do one of the 15 * following with its input color: ignore it, or multiply it by the constant color, multiply its 16 * alpha by the constant color and ignore the input color's r, g, and b. 17 */ 18 class GrConstColorProcessor : public GrFragmentProcessor { 19 public: 20 enum InputMode { 21 kIgnore_InputMode, 22 kModulateRGBA_InputMode, 23 kModulateA_InputMode, 24 25 kLastInputMode = kModulateA_InputMode 26 }; 27 static const int kInputModeCnt = kLastInputMode + 1; 28 Create(GrColor color,InputMode mode)29 static GrFragmentProcessor* Create(GrColor color, InputMode mode) { 30 return new GrConstColorProcessor(color, mode); 31 } 32 name()33 const char* name() const override { return "Color"; } 34 dumpInfo()35 SkString dumpInfo() const override { 36 SkString str; 37 str.appendf("Color: 0x%08x", fColor); 38 return str; 39 } 40 color()41 GrColor color() const { return fColor; } 42 inputMode()43 InputMode inputMode() const { return fMode; } 44 45 private: GrConstColorProcessor(GrColor color,InputMode mode)46 GrConstColorProcessor(GrColor color, InputMode mode) : fColor(color), fMode(mode) { 47 this->initClassID<GrConstColorProcessor>(); 48 } 49 50 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; 51 52 void onGetGLSLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const override; 53 54 bool onIsEqual(const GrFragmentProcessor&) const override; 55 56 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 57 58 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 59 60 GrColor fColor; 61 InputMode fMode; 62 63 typedef GrFragmentProcessor INHERITED; 64 }; 65 66 #endif 67