blob: 3656d3a10810db2215d56036a5534e196cd58ae8 [file] [log] [blame]
egdaniel7ea439b2015-12-03 09:20:44 -08001/*
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"
egdaniel09aa1fc2016-04-20 07:09:46 -070014#include "gl/GrGLSampler.h"
egdaniel7ea439b2015-12-03 09:20:44 -080015
16class GrGLCaps;
17
egdaniel7ea439b2015-12-03 09:20:44 -080018class GrGLUniformHandler : public GrGLSLUniformHandler {
19public:
jvanverth633b3562016-03-23 11:01:22 -070020 static const int kUniformsPerBlock = 8;
21
egdaniel7ea439b2015-12-03 09:20:44 -080022 const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const override {
23 return fUniforms[u.toIndex()].fVariable;
24 }
25
26 const char* getUniformCStr(UniformHandle u) const override {
27 return this->getUniformVariable(u).c_str();
28 }
29private:
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
egdaniel09aa1fc2016-04-20 07:09:46 -070042 SamplerHandle internalAddSampler(uint32_t visibility,
43 GrPixelConfig config,
44 GrSLType type,
45 GrSLPrecision precision,
46 const char* name) override;
47
48 int numSamplers() const override { return fSamplers.count(); }
49 const GrGLSLSampler& getSampler(SamplerHandle handle) const override {
50 return fSamplers[handle.toIndex()];
51 }
52
cdalton5e58cee2016-02-11 12:49:47 -080053 void appendUniformDecls(GrShaderFlags visibility, SkString*) const override;
egdaniel7ea439b2015-12-03 09:20:44 -080054
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
egdaniel09aa1fc2016-04-20 07:09:46 -070068 SkTArray<GrGLSampler> fSamplers;
69
egdaniel7ea439b2015-12-03 09:20:44 -080070 friend class GrGLProgramBuilder;
71
halcanary9d524f22016-03-29 09:03:52 -070072 typedef GrGLSLUniformHandler INHERITED;
egdaniel7ea439b2015-12-03 09:20:44 -080073};
74
75#endif