1 /* 2 * Copyright 2016 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 GrSRGBEffect_DEFINED 9 #define GrSRGBEffect_DEFINED 10 11 #include "GrFragmentProcessor.h" 12 13 class GrSRGBEffect : public GrFragmentProcessor { 14 public: 15 enum class Mode { 16 kLinearToSRGB, 17 kSRGBToLinear, 18 }; 19 20 enum class Alpha { 21 kPremul, 22 kOpaque, 23 }; 24 25 /** 26 * Creates an effect that applies the sRGB transfer function (or its inverse) 27 */ Make(Mode mode,Alpha alpha)28 static std::unique_ptr<GrFragmentProcessor> Make(Mode mode, Alpha alpha) { 29 return std::unique_ptr<GrFragmentProcessor>(new GrSRGBEffect(mode, alpha)); 30 } 31 name()32 const char* name() const override { return "sRGB"; } 33 mode()34 Mode mode() const { return fMode; } alpha()35 Alpha alpha() const { return fAlpha; } 36 37 std::unique_ptr<GrFragmentProcessor> clone() const override; 38 39 private: 40 GrSRGBEffect(Mode mode, Alpha); 41 42 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; 43 void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; 44 bool onIsEqual(const GrFragmentProcessor&) const override; 45 46 SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override; 47 48 Mode fMode; 49 Alpha fAlpha; 50 51 GR_DECLARE_FRAGMENT_PROCESSOR_TEST 52 53 typedef GrFragmentProcessor INHERITED; 54 }; 55 56 #endif 57