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: GrGLSLColorSpaceXformHelper()21 GrGLSLColorSpaceXformHelper() : fValid(false) {} 22 emitCode(GrGLSLUniformHandler * uniformHandler,GrColorSpaceXform * colorSpaceXform)23 void emitCode(GrGLSLUniformHandler* uniformHandler, GrColorSpaceXform* colorSpaceXform) { 24 SkASSERT(uniformHandler); 25 if (colorSpaceXform) { 26 fGamutXformVar = uniformHandler->addUniform(kFragment_GrShaderFlag, kMat44f_GrSLType, 27 kDefault_GrSLPrecision, "ColorXform"); 28 fValid = true; 29 } 30 } 31 setData(const GrGLSLProgramDataManager & pdman,GrColorSpaceXform * colorSpaceXform)32 void setData(const GrGLSLProgramDataManager& pdman, GrColorSpaceXform* colorSpaceXform) { 33 pdman.setSkMatrix44(fGamutXformVar, colorSpaceXform->srcToDst()); 34 } 35 isValid()36 bool isValid() const { return fValid; } gamutXformUniform()37 GrGLSLProgramDataManager::UniformHandle const gamutXformUniform() { return fGamutXformVar; } 38 39 private: 40 GrGLSLProgramDataManager::UniformHandle fGamutXformVar; 41 bool fValid; 42 }; 43 44 #endif 45