blob: 8e949003eca031c39ea49753b08213fc2e73d335 [file] [log] [blame]
bsalomonc9c3e622015-04-02 11:12:09 -07001/*
Ethan Nicholas130fb3f2018-02-01 12:14:34 -05002 * Copyright 2018 Google Inc.
bsalomonc9c3e622015-04-02 11:12:09 -07003 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
Ethan Nicholas130fb3f2018-02-01 12:14:34 -05008/**************************************************************************************************
9 *** This file was autogenerated from GrConstColorProcessor.fp; do not modify.
10 **************************************************************************************************/
Ethan Nicholase9d172a2017-11-20 12:12:24 -050011#ifndef GrConstColorProcessor_DEFINED
12#define GrConstColorProcessor_DEFINED
13#include "SkTypes.h"
Ethan Nicholase9d172a2017-11-20 12:12:24 -050014#include "GrFragmentProcessor.h"
15#include "GrCoordTransform.h"
bsalomonc9c3e622015-04-02 11:12:09 -070016class GrConstColorProcessor : public GrFragmentProcessor {
17public:
Ethan Nicholas2c33e3e2018-01-08 15:36:28 -050018 enum class InputMode { kIgnore = 0, kLast = 2, kModulateA = 2, kModulateRGBA = 1 };
bsalomonc9c3e622015-04-02 11:12:09 -070019
Ethan Nicholase9d172a2017-11-20 12:12:24 -050020 static const int kInputModeCnt = (int)InputMode::kLast + 1;
bsalomonc9c3e622015-04-02 11:12:09 -070021
Brian Salomon587e08f2017-01-27 10:59:27 -050022 static OptimizationFlags OptFlags(GrColor4f color, InputMode mode) {
23 OptimizationFlags flags = kConstantOutputForConstantInput_OptimizationFlag;
Ethan Nicholase9d172a2017-11-20 12:12:24 -050024 if (mode != InputMode::kIgnore) {
Brian Salomonf3b995b2017-02-15 10:22:23 -050025 flags |= kCompatibleWithCoverageAsAlpha_OptimizationFlag;
Brian Salomon587e08f2017-01-27 10:59:27 -050026 }
27 if (color.isOpaque()) {
28 flags |= kPreservesOpaqueInput_OptimizationFlag;
29 }
30 return flags;
31 }
32
Ethan Nicholase9d172a2017-11-20 12:12:24 -050033 GrColor4f constantOutputForConstantInput(GrColor4f input) const override {
34 switch (fMode) {
35 case InputMode::kIgnore:
36 return fColor;
37 case InputMode::kModulateA:
38 return fColor.mulByScalar(input.fRGBA[3]);
39 case InputMode::kModulateRGBA:
40 return fColor.modulate(input);
41 }
42 SK_ABORT("Unexpected mode");
43 return GrColor4f::TransparentBlack();
bsalomonc9c3e622015-04-02 11:12:09 -070044 }
Michael Ludwiga4275592018-08-31 10:52:47 -040045 const GrColor4f& color() const { return fColor; }
46 const InputMode& mode() const { return fMode; }
Ethan Nicholase9d172a2017-11-20 12:12:24 -050047 static std::unique_ptr<GrFragmentProcessor> Make(GrColor4f color, InputMode mode) {
48 return std::unique_ptr<GrFragmentProcessor>(new GrConstColorProcessor(color, mode));
49 }
50 GrConstColorProcessor(const GrConstColorProcessor& src);
51 std::unique_ptr<GrFragmentProcessor> clone() const override;
52 const char* name() const override { return "ConstColorProcessor"; }
bsalomonc9c3e622015-04-02 11:12:09 -070053
Ethan Nicholase9d172a2017-11-20 12:12:24 -050054private:
55 GrConstColorProcessor(GrColor4f color, InputMode mode)
56 : INHERITED(kGrConstColorProcessor_ClassID, (OptimizationFlags)OptFlags(color, mode))
57 , fColor(color)
58 , fMode(mode) {}
egdaniel57d3b032015-11-13 11:57:27 -080059 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
Brian Salomon94efbf52016-11-29 13:43:05 -050060 void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
bsalomonc9c3e622015-04-02 11:12:09 -070061 bool onIsEqual(const GrFragmentProcessor&) const override;
Brian Salomon0c26a9d2017-07-06 10:09:38 -040062 GR_DECLARE_FRAGMENT_PROCESSOR_TEST
Ethan Nicholase9d172a2017-11-20 12:12:24 -050063 GrColor4f fColor;
64 InputMode fMode;
bsalomonc9c3e622015-04-02 11:12:09 -070065 typedef GrFragmentProcessor INHERITED;
66};
Ethan Nicholase9d172a2017-11-20 12:12:24 -050067#endif