| Index: src/gpu/glsl/GrGLSLUniformHandler.h
|
| diff --git a/src/gpu/glsl/GrGLSLUniformHandler.h b/src/gpu/glsl/GrGLSLUniformHandler.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e72716d04e437c682145c33abf76f3338a782972
|
| --- /dev/null
|
| +++ b/src/gpu/glsl/GrGLSLUniformHandler.h
|
| @@ -0,0 +1,79 @@
|
| +/*
|
| + * Copyright 2015 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef GrGLSLUniformHandler_DEFINED
|
| +#define GrGLSLUniformHandler_DEFINED
|
| +
|
| +#include "GrGLSLProgramDataManager.h"
|
| +#include "GrGLSLShaderVar.h"
|
| +
|
| +class GrGLSLProgramBuilder;
|
| +
|
| +class GrGLSLUniformHandler {
|
| +public:
|
| + enum ShaderVisibility {
|
| + kVertex_Visibility = 1 << kVertex_GrShaderType,
|
| + kGeometry_Visibility = 1 << kGeometry_GrShaderType,
|
| + kFragment_Visibility = 1 << kFragment_GrShaderType,
|
| + };
|
| +
|
| + virtual ~GrGLSLUniformHandler() {}
|
| +
|
| + typedef GrGLSLProgramDataManager::UniformHandle UniformHandle;
|
| +
|
| + /** Add a uniform variable to the current program, that has visibility in one or more shaders.
|
| + visibility is a bitfield of ShaderVisibility values indicating from which shaders the
|
| + uniform should be accessible. At least one bit must be set. Geometry shader uniforms are not
|
| + supported at this time. The actual uniform name will be mangled. If outName is not nullptr
|
| + then it will refer to the final uniform name after return. Use the addUniformArray variant
|
| + to add an array of uniforms. */
|
| + UniformHandle addUniform(uint32_t visibility,
|
| + GrSLType type,
|
| + GrSLPrecision precision,
|
| + const char* name,
|
| + const char** outName = nullptr) {
|
| + return this->addUniformArray(visibility, type, precision, name, 0, outName);
|
| + }
|
| +
|
| + UniformHandle addUniformArray(uint32_t visibility,
|
| + GrSLType type,
|
| + GrSLPrecision precision,
|
| + const char* name,
|
| + int arrayCount,
|
| + const char** outName = nullptr) {
|
| + return this->internalAddUniformArray(visibility, type, precision, name, true, arrayCount,
|
| + outName);
|
| + }
|
| +
|
| + virtual const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const = 0;
|
| +
|
| + /**
|
| + * Shortcut for getUniformVariable(u).c_str()
|
| + */
|
| + virtual const char* getUniformCStr(UniformHandle u) const = 0;
|
| +protected:
|
| + explicit GrGLSLUniformHandler(GrGLSLProgramBuilder* program) : fProgramBuilder(program) {}
|
| +
|
| + // This is not owned by the class
|
| + GrGLSLProgramBuilder* fProgramBuilder;
|
| +
|
| +private:
|
| + virtual UniformHandle internalAddUniformArray(uint32_t visibility,
|
| + GrSLType type,
|
| + GrSLPrecision precision,
|
| + const char* name,
|
| + bool mangleName,
|
| + int arrayCount,
|
| + const char** outName) = 0;
|
| +
|
| + virtual void appendUniformDecls(ShaderVisibility, SkString*) const = 0;
|
| +
|
| + friend class GrGLSLProgramBuilder;
|
| +};
|
| +
|
| +#endif
|
| +
|
|
|