| Index: src/gpu/gl/GrGLUniformHandler.cpp
|
| diff --git a/src/gpu/gl/GrGLUniformHandler.cpp b/src/gpu/gl/GrGLUniformHandler.cpp
|
| index 94da1f177686b535e3a2a1a27262a46ef6a48089..98b4fb7bd5c2c2b5223915b80de62fbba5a4c68d 100644
|
| --- a/src/gpu/gl/GrGLUniformHandler.cpp
|
| +++ b/src/gpu/gl/GrGLUniformHandler.cpp
|
| @@ -52,6 +52,22 @@ GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray(
|
| return GrGLSLUniformHandler::UniformHandle(fUniforms.count() - 1);
|
| }
|
|
|
| +GrGLSLUniformHandler::SamplerHandle GrGLUniformHandler::internalAddSampler(uint32_t visibility,
|
| + GrPixelConfig config,
|
| + GrSLType type,
|
| + GrSLPrecision precision,
|
| + const char* name) {
|
| + SkASSERT(name && strlen(name));
|
| + SkDEBUGCODE(static const uint32_t kVisMask = kVertex_GrShaderFlag | kFragment_GrShaderFlag);
|
| + SkASSERT(0 == (~kVisMask & visibility));
|
| + SkASSERT(0 != visibility);
|
| + SkString mangleName;
|
| + char prefix = 'u';
|
| + fProgramBuilder->nameVariable(&mangleName, prefix, name, true);
|
| + fSamplers.emplace_back(visibility, config, type, precision, mangleName.c_str());
|
| + return GrGLSLUniformHandler::SamplerHandle(fSamplers.count() - 1);
|
| +}
|
| +
|
| void GrGLUniformHandler::appendUniformDecls(GrShaderFlags visibility, SkString* out) const {
|
| for (int i = 0; i < fUniforms.count(); ++i) {
|
| if (fUniforms[i].fVisibility & visibility) {
|
| @@ -59,6 +75,12 @@ void GrGLUniformHandler::appendUniformDecls(GrShaderFlags visibility, SkString*
|
| out->append(";\n");
|
| }
|
| }
|
| + for (int i = 0; i < fSamplers.count(); ++i) {
|
| + if (fSamplers[i].visibility() & visibility) {
|
| + fSamplers[i].fShaderVar.appendDecl(fProgramBuilder->glslCaps(), out);
|
| + out->append(";\n");
|
| + }
|
| + }
|
| }
|
|
|
| void GrGLUniformHandler::bindUniformLocations(GrGLuint programID, const GrGLCaps& caps) {
|
| @@ -68,6 +90,10 @@ void GrGLUniformHandler::bindUniformLocations(GrGLuint programID, const GrGLCaps
|
| GL_CALL(BindUniformLocation(programID, i, fUniforms[i].fVariable.c_str()));
|
| fUniforms[i].fLocation = i;
|
| }
|
| + for (int i = 0; i < fSamplers.count(); ++i) {
|
| + GL_CALL(BindUniformLocation(programID, i, fSamplers[i].fVariable.c_str()));
|
| + fSamplers[i].fLocation = i;
|
| + }
|
| }
|
| }
|
|
|
| @@ -79,6 +105,11 @@ void GrGLUniformHandler::getUniformLocations(GrGLuint programID, const GrGLCaps&
|
| GL_CALL_RET(location, GetUniformLocation(programID, fUniforms[i].fVariable.c_str()));
|
| fUniforms[i].fLocation = location;
|
| }
|
| + for (int i = 0; i < fSamplers.count(); ++i) {
|
| + GrGLint location;
|
| + GL_CALL_RET(location, GetUniformLocation(programID, fSamplers[i].fVariable.c_str()));
|
| + fSamplers[i].fLocation = location;
|
| + }
|
| }
|
| }
|
|
|
|
|