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