diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-10-25 15:55:58 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-10-25 20:19:18 +0000 |
commit | 8aa4dc9052a64d84cfd0a4330910057bd37b6bf7 (patch) | |
tree | 5b8c084ed43b6f10e6014a2fc2959e84c4be3c5b /src/gpu/effects/GrOverdrawFragmentProcessor.cpp | |
parent | 4cbb6e6d551e8bea2c040b1aa9dce253cffb9af0 (diff) |
converted OverdrawColorFilter to SkSL
Bug: skia:
Change-Id: Idcc0502758df1e60ed131a168b5c9a65a4d834a1
Reviewed-on: https://skia-review.googlesource.com/63840
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/effects/GrOverdrawFragmentProcessor.cpp')
-rw-r--r-- | src/gpu/effects/GrOverdrawFragmentProcessor.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/gpu/effects/GrOverdrawFragmentProcessor.cpp b/src/gpu/effects/GrOverdrawFragmentProcessor.cpp new file mode 100644 index 0000000000..31ab53d397 --- /dev/null +++ b/src/gpu/effects/GrOverdrawFragmentProcessor.cpp @@ -0,0 +1,93 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* + * This file was autogenerated from GrOverdrawFragmentProcessor.fp; do not modify. + */ +#include "GrOverdrawFragmentProcessor.h" +#if SK_SUPPORT_GPU +#include "glsl/GrGLSLFragmentProcessor.h" +#include "glsl/GrGLSLFragmentShaderBuilder.h" +#include "glsl/GrGLSLProgramBuilder.h" +#include "SkSLCPP.h" +#include "SkSLUtil.h" +class GrGLSLOverdrawFragmentProcessor : public GrGLSLFragmentProcessor { +public: + GrGLSLOverdrawFragmentProcessor() {} + void emitCode(EmitArgs& args) override { + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; + const GrOverdrawFragmentProcessor& _outer = args.fFp.cast<GrOverdrawFragmentProcessor>(); + (void)_outer; + auto color0 = _outer.color0(); + (void)color0; + auto color1 = _outer.color1(); + (void)color1; + auto color2 = _outer.color2(); + (void)color2; + auto color3 = _outer.color3(); + (void)color3; + auto color4 = _outer.color4(); + (void)color4; + auto color5 = _outer.color5(); + (void)color5; + fragBuilder->codeAppendf( + "half alpha = half(255.0 * float(%s.w));\nif (float(alpha) < 0.5) {\n %s = " + "half4(%f, %f, %f, %f);\n} else if (float(alpha) < 1.5) {\n %s = half4(%f, %f, " + "%f, %f);\n} else if (float(alpha) < 2.5) {\n %s = half4(%f, %f, %f, %f);\n} " + "else if (float(alpha) < 3.5) {\n %s = half4(%f, %f, %f, %f);\n} else if " + "(float(alpha) < 4.5) {\n %s = half4(%f, %f, %f, %f);\n} else {\n %s = " + "half4(%f, %f, %f, %f);\n}\n", + args.fInputColor ? args.fInputColor : "half4(1)", args.fOutputColor, + SkGetPackedR32(_outer.color0()) / 255.0, SkGetPackedG32(_outer.color0()) / 255.0, + SkGetPackedB32(_outer.color0()) / 255.0, SkGetPackedA32(_outer.color0()) / 255.0, + args.fOutputColor, SkGetPackedR32(_outer.color1()) / 255.0, + SkGetPackedG32(_outer.color1()) / 255.0, SkGetPackedB32(_outer.color1()) / 255.0, + SkGetPackedA32(_outer.color1()) / 255.0, args.fOutputColor, + SkGetPackedR32(_outer.color2()) / 255.0, SkGetPackedG32(_outer.color2()) / 255.0, + SkGetPackedB32(_outer.color2()) / 255.0, SkGetPackedA32(_outer.color2()) / 255.0, + args.fOutputColor, SkGetPackedR32(_outer.color3()) / 255.0, + SkGetPackedG32(_outer.color3()) / 255.0, SkGetPackedB32(_outer.color3()) / 255.0, + SkGetPackedA32(_outer.color3()) / 255.0, args.fOutputColor, + SkGetPackedR32(_outer.color4()) / 255.0, SkGetPackedG32(_outer.color4()) / 255.0, + SkGetPackedB32(_outer.color4()) / 255.0, SkGetPackedA32(_outer.color4()) / 255.0, + args.fOutputColor, SkGetPackedR32(_outer.color5()) / 255.0, + SkGetPackedG32(_outer.color5()) / 255.0, SkGetPackedB32(_outer.color5()) / 255.0, + SkGetPackedA32(_outer.color5()) / 255.0); + } + +private: + void onSetData(const GrGLSLProgramDataManager& pdman, + const GrFragmentProcessor& _proc) override {} +}; +GrGLSLFragmentProcessor* GrOverdrawFragmentProcessor::onCreateGLSLInstance() const { + return new GrGLSLOverdrawFragmentProcessor(); +} +void GrOverdrawFragmentProcessor::onGetGLSLProcessorKey(const GrShaderCaps& caps, + GrProcessorKeyBuilder* b) const {} +bool GrOverdrawFragmentProcessor::onIsEqual(const GrFragmentProcessor& other) const { + const GrOverdrawFragmentProcessor& that = other.cast<GrOverdrawFragmentProcessor>(); + (void)that; + if (fColor0 != that.fColor0) return false; + if (fColor1 != that.fColor1) return false; + if (fColor2 != that.fColor2) return false; + if (fColor3 != that.fColor3) return false; + if (fColor4 != that.fColor4) return false; + if (fColor5 != that.fColor5) return false; + return true; +} +GrOverdrawFragmentProcessor::GrOverdrawFragmentProcessor(const GrOverdrawFragmentProcessor& src) + : INHERITED(kGrOverdrawFragmentProcessor_ClassID, src.optimizationFlags()) + , fColor0(src.fColor0) + , fColor1(src.fColor1) + , fColor2(src.fColor2) + , fColor3(src.fColor3) + , fColor4(src.fColor4) + , fColor5(src.fColor5) {} +std::unique_ptr<GrFragmentProcessor> GrOverdrawFragmentProcessor::clone() const { + return std::unique_ptr<GrFragmentProcessor>(new GrOverdrawFragmentProcessor(*this)); +} +#endif |