1 /* 2 * Copyright 2015 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 GrGLUniformHandler_DEFINED 9 #define GrGLUniformHandler_DEFINED 10 11 #include "glsl/GrGLSLUniformHandler.h" 12 13 #include "gl/GrGLProgramDataManager.h" 14 #include "gl/GrGLSampler.h" 15 16 class GrGLCaps; 17 18 class GrGLUniformHandler : public GrGLSLUniformHandler { 19 public: 20 static const int kUniformsPerBlock = 8; 21 getUniformVariable(UniformHandle u)22 const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const override { 23 return fUniforms[u.toIndex()].fVariable; 24 } 25 getUniformCStr(UniformHandle u)26 const char* getUniformCStr(UniformHandle u) const override { 27 return this->getUniformVariable(u).c_str(); 28 } 29 private: GrGLUniformHandler(GrGLSLProgramBuilder * program)30 explicit GrGLUniformHandler(GrGLSLProgramBuilder* program) 31 : INHERITED(program) 32 , fUniforms(kUniformsPerBlock) {} 33 34 UniformHandle internalAddUniformArray(uint32_t visibility, 35 GrSLType type, 36 GrSLPrecision precision, 37 const char* name, 38 bool mangleName, 39 int arrayCount, 40 const char** outName) override; 41 42 SamplerHandle internalAddSampler(uint32_t visibility, 43 GrPixelConfig config, 44 GrSLType type, 45 GrSLPrecision precision, 46 const char* name) override; 47 numSamplers()48 int numSamplers() const override { return fSamplers.count(); } getSampler(SamplerHandle handle)49 const GrGLSLSampler& getSampler(SamplerHandle handle) const override { 50 return fSamplers[handle.toIndex()]; 51 } 52 53 void appendUniformDecls(GrShaderFlags visibility, SkString*) const override; 54 55 // Manually set uniform locations for all our uniforms. 56 void bindUniformLocations(GrGLuint programID, const GrGLCaps& caps); 57 58 // Updates the loction of the Uniforms if we cannot bind uniform locations manually 59 void getUniformLocations(GrGLuint programID, const GrGLCaps& caps); 60 61 const GrGLGpu* glGpu() const; 62 63 typedef GrGLProgramDataManager::UniformInfo UniformInfo; 64 typedef GrGLProgramDataManager::UniformInfoArray UniformInfoArray; 65 66 UniformInfoArray fUniforms; 67 68 SkTArray<GrGLSampler> fSamplers; 69 70 friend class GrGLProgramBuilder; 71 72 typedef GrGLSLUniformHandler INHERITED; 73 }; 74 75 #endif 76