| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef GrGLSLUniformHandler_DEFINED | 8 #ifndef GrGLSLUniformHandler_DEFINED |
| 9 #define GrGLSLUniformHandler_DEFINED | 9 #define GrGLSLUniformHandler_DEFINED |
| 10 | 10 |
| 11 #include "GrGLSLProgramDataManager.h" | 11 #include "GrGLSLProgramDataManager.h" |
| 12 #include "GrGLSLShaderVar.h" | 12 #include "GrGLSLShaderVar.h" |
| 13 | 13 |
| 14 class GrGLSLProgramBuilder; | 14 class GrGLSLProgramBuilder; |
| 15 class GrGLSLSampler; |
| 15 | 16 |
| 16 class GrGLSLUniformHandler { | 17 class GrGLSLUniformHandler { |
| 17 public: | 18 public: |
| 18 virtual ~GrGLSLUniformHandler() {} | 19 virtual ~GrGLSLUniformHandler() {} |
| 19 | 20 |
| 20 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; | 21 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
| 22 typedef GrGLSLProgramDataManager::UniformHandle SamplerHandle; |
| 21 | 23 |
| 22 /** Add a uniform variable to the current program, that has visibility in on
e or more shaders. | 24 /** Add a uniform variable to the current program, that has visibility in on
e or more shaders. |
| 23 visibility is a bitfield of GrShaderFlag values indicating from which sh
aders the uniform | 25 visibility is a bitfield of GrShaderFlag values indicating from which sh
aders the uniform |
| 24 should be accessible. At least one bit must be set. Geometry shader unif
orms are not | 26 should be accessible. At least one bit must be set. Geometry shader unif
orms are not |
| 25 supported at this time. The actual uniform name will be mangled. If outN
ame is not nullptr | 27 supported at this time. The actual uniform name will be mangled. If outN
ame is not nullptr |
| 26 then it will refer to the final uniform name after return. Use the addUn
iformArray variant | 28 then it will refer to the final uniform name after return. Use the addUn
iformArray variant |
| 27 to add an array of uniforms. */ | 29 to add an array of uniforms. */ |
| 28 UniformHandle addUniform(uint32_t visibility, | 30 UniformHandle addUniform(uint32_t visibility, |
| 29 GrSLType type, | 31 GrSLType type, |
| 30 GrSLPrecision precision, | 32 GrSLPrecision precision, |
| 31 const char* name, | 33 const char* name, |
| 32 const char** outName = nullptr) { | 34 const char** outName = nullptr) { |
| 35 SkASSERT(!GrSLTypeIsSamplerType(type)); |
| 33 return this->addUniformArray(visibility, type, precision, name, 0, outNa
me); | 36 return this->addUniformArray(visibility, type, precision, name, 0, outNa
me); |
| 34 } | 37 } |
| 35 | 38 |
| 36 UniformHandle addUniformArray(uint32_t visibility, | 39 UniformHandle addUniformArray(uint32_t visibility, |
| 37 GrSLType type, | 40 GrSLType type, |
| 38 GrSLPrecision precision, | 41 GrSLPrecision precision, |
| 39 const char* name, | 42 const char* name, |
| 40 int arrayCount, | 43 int arrayCount, |
| 41 const char** outName = nullptr) { | 44 const char** outName = nullptr) { |
| 45 SkASSERT(!GrSLTypeIsSamplerType(type)); |
| 42 return this->internalAddUniformArray(visibility, type, precision, name,
true, arrayCount, | 46 return this->internalAddUniformArray(visibility, type, precision, name,
true, arrayCount, |
| 43 outName); | 47 outName); |
| 44 } | 48 } |
| 45 | 49 |
| 46 virtual const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const = 0
; | 50 virtual const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const = 0
; |
| 47 | 51 |
| 48 /** | 52 /** |
| 49 * Shortcut for getUniformVariable(u).c_str() | 53 * Shortcut for getUniformVariable(u).c_str() |
| 50 */ | 54 */ |
| 51 virtual const char* getUniformCStr(UniformHandle u) const = 0; | 55 virtual const char* getUniformCStr(UniformHandle u) const = 0; |
| 56 |
| 52 protected: | 57 protected: |
| 53 explicit GrGLSLUniformHandler(GrGLSLProgramBuilder* program) : fProgramBuild
er(program) {} | 58 explicit GrGLSLUniformHandler(GrGLSLProgramBuilder* program) : fProgramBuild
er(program) {} |
| 54 | 59 |
| 55 // This is not owned by the class | 60 // This is not owned by the class |
| 56 GrGLSLProgramBuilder* fProgramBuilder; | 61 GrGLSLProgramBuilder* fProgramBuilder; |
| 57 | 62 |
| 58 private: | 63 private: |
| 64 virtual int numSamplers() const = 0; |
| 65 virtual const GrGLSLSampler& getSampler(SamplerHandle handle) const = 0; |
| 66 |
| 67 SamplerHandle addSampler(uint32_t visibility, |
| 68 GrPixelConfig config, |
| 69 GrSLType type, |
| 70 GrSLPrecision precision, |
| 71 const char* name) { |
| 72 return this->internalAddSampler(visibility, config, type, precision, nam
e); |
| 73 } |
| 74 |
| 75 virtual SamplerHandle internalAddSampler(uint32_t visibility, |
| 76 GrPixelConfig config, |
| 77 GrSLType type, |
| 78 GrSLPrecision precision, |
| 79 const char* name) = 0; |
| 80 |
| 59 virtual UniformHandle internalAddUniformArray(uint32_t visibility, | 81 virtual UniformHandle internalAddUniformArray(uint32_t visibility, |
| 60 GrSLType type, | 82 GrSLType type, |
| 61 GrSLPrecision precision, | 83 GrSLPrecision precision, |
| 62 const char* name, | 84 const char* name, |
| 63 bool mangleName, | 85 bool mangleName, |
| 64 int arrayCount, | 86 int arrayCount, |
| 65 const char** outName) = 0; | 87 const char** outName) = 0; |
| 66 | 88 |
| 67 virtual void appendUniformDecls(GrShaderFlags visibility, SkString*) const =
0; | 89 virtual void appendUniformDecls(GrShaderFlags visibility, SkString*) const =
0; |
| 68 | 90 |
| 69 friend class GrGLSLProgramBuilder; | 91 friend class GrGLSLProgramBuilder; |
| 70 }; | 92 }; |
| 71 | 93 |
| 72 #endif | 94 #endif |
| OLD | NEW |