• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
15 class GrGLCaps;
16 
17 class GrGLUniformHandler : public GrGLSLUniformHandler {
18 public:
19     static const int kUniformsPerBlock = 8;
20 
getUniformVariable(UniformHandle u)21     const GrShaderVar& getUniformVariable(UniformHandle u) const override {
22         return fUniforms[u.toIndex()].fVariable;
23     }
24 
getUniformCStr(UniformHandle u)25     const char* getUniformCStr(UniformHandle u) const override {
26         return this->getUniformVariable(u).c_str();
27     }
28 private:
GrGLUniformHandler(GrGLSLProgramBuilder * program)29     explicit GrGLUniformHandler(GrGLSLProgramBuilder* program)
30         : INHERITED(program)
31         , fUniforms(kUniformsPerBlock)
32         , fSamplers(kUniformsPerBlock)
33         , fTexelBuffers(kUniformsPerBlock) {}
34 
35     UniformHandle internalAddUniformArray(uint32_t visibility,
36                                           GrSLType type,
37                                           GrSLPrecision precision,
38                                           const char* name,
39                                           bool mangleName,
40                                           int arrayCount,
41                                           const char** outName) override;
42 
43     SamplerHandle addSampler(uint32_t visibility, GrSwizzle, GrSLType, GrSLPrecision,
44                              const char* name) override;
45 
samplerVariable(SamplerHandle handle)46     const GrShaderVar& samplerVariable(SamplerHandle handle) const override {
47         return fSamplers[handle.toIndex()].fVariable;
48     }
49 
samplerSwizzle(SamplerHandle handle)50     GrSwizzle samplerSwizzle(SamplerHandle handle) const override {
51         return fSamplerSwizzles[handle.toIndex()];
52     }
53 
54     TexelBufferHandle addTexelBuffer(uint32_t visibility, GrSLPrecision,
55                                      const char* name) override;
56 
texelBufferVariable(TexelBufferHandle handle)57     const GrShaderVar& texelBufferVariable(TexelBufferHandle handle) const override {
58         return fTexelBuffers[handle.toIndex()].fVariable;
59     }
60 
61     void appendUniformDecls(GrShaderFlags visibility, SkString*) const override;
62 
63     // Manually set uniform locations for all our uniforms.
64     void bindUniformLocations(GrGLuint programID, const GrGLCaps& caps);
65 
66     // Updates the loction of the Uniforms if we cannot bind uniform locations manually
67     void getUniformLocations(GrGLuint programID, const GrGLCaps& caps);
68 
69     const GrGLGpu* glGpu() const;
70 
71     typedef GrGLProgramDataManager::UniformInfo UniformInfo;
72     typedef GrGLProgramDataManager::UniformInfoArray UniformInfoArray;
73 
74     UniformInfoArray    fUniforms;
75     UniformInfoArray    fSamplers;
76     SkTArray<GrSwizzle> fSamplerSwizzles;
77     UniformInfoArray    fTexelBuffers;
78 
79     friend class GrGLProgramBuilder;
80 
81     typedef GrGLSLUniformHandler INHERITED;
82 };
83 
84 #endif
85