2 * Copyright 2015 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #ifndef GrGLUniformHandler_DEFINED
9 #define GrGLUniformHandler_DEFINED
11 #include "glsl/GrGLSLUniformHandler.h"
13 #include "gl/GrGLProgramDataManager.h"
17 static const int kUniformsPerBlock = 8;
19 class GrGLUniformHandler : public GrGLSLUniformHandler {
21 const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const override {
22 return fUniforms[u.toIndex()].fVariable;
25 const char* getUniformCStr(UniformHandle u) const override {
26 return this->getUniformVariable(u).c_str();
29 explicit GrGLUniformHandler(GrGLSLProgramBuilder* program)
31 , fUniforms(kUniformsPerBlock) {}
33 UniformHandle internalAddUniformArray(uint32_t visibility,
35 GrSLPrecision precision,
39 const char** outName) override;
41 void appendUniformDecls(ShaderVisibility, SkString*) const override;
43 // Manually set uniform locations for all our uniforms.
44 void bindUniformLocations(GrGLuint programID, const GrGLCaps& caps);
46 // Updates the loction of the Uniforms if we cannot bind uniform locations manually
47 void getUniformLocations(GrGLuint programID, const GrGLCaps& caps);
49 const GrGLGpu* glGpu() const;
51 typedef GrGLProgramDataManager::UniformInfo UniformInfo;
52 typedef GrGLProgramDataManager::UniformInfoArray UniformInfoArray;
54 UniformInfoArray fUniforms;
56 friend class GrGLProgramBuilder;
58 typedef GrGLSLUniformHandler INHERITED;