Home | History | Annotate | Download | only in glsl
      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 GrGLSLColorSpaceXformHelper_DEFINED
      9 #define GrGLSLColorSpaceXformHelper_DEFINED
     10 
     11 #include "GrColorSpaceXform.h"
     12 #include "GrGLSLUniformHandler.h"
     13 
     14 /**
     15  * Helper class to assist with using GrColorSpaceXform within an FP. This manages all of the
     16  * uniforms needed, and can be passed to shader builder functions to automatically generate the
     17  * correct color space transformation code.
     18  */
     19 class GrGLSLColorSpaceXformHelper : public SkNoncopyable {
     20 public:
     21     GrGLSLColorSpaceXformHelper() : fValid(false) {}
     22 
     23     void emitCode(GrGLSLUniformHandler* uniformHandler, GrColorSpaceXform* colorSpaceXform,
     24                   uint32_t visibility = kFragment_GrShaderFlag) {
     25         SkASSERT(uniformHandler);
     26         if (colorSpaceXform) {
     27             fGamutXformVar = uniformHandler->addUniform(visibility, kMat44f_GrSLType,
     28                                                         kDefault_GrSLPrecision, "ColorXform");
     29             fValid = true;
     30         }
     31     }
     32 
     33     void setData(const GrGLSLProgramDataManager& pdman, GrColorSpaceXform* colorSpaceXform) {
     34         pdman.setSkMatrix44(fGamutXformVar, colorSpaceXform->srcToDst());
     35     }
     36 
     37     bool isValid() const { return fValid; }
     38     GrGLSLProgramDataManager::UniformHandle const gamutXformUniform() { return fGamutXformVar; }
     39 
     40 private:
     41     GrGLSLProgramDataManager::UniformHandle fGamutXformVar;
     42     bool fValid;
     43 };
     44 
     45 #endif
     46