X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogram.cpp;h=95102fe9b8367205ec70976f3f77b9b1811d3ea5;hb=cdf6744cb3a73030bc767a23b7ed5215919e53c5;hp=636988d75c75dd11f3728906cf3c761b31553b34;hpb=9034e81679eeeaa3d1d5d643d3f924d9edb45a68;p=libs%2Fgl.git diff --git a/source/program.cpp b/source/program.cpp index 636988d7..95102fe9 100644 --- a/source/program.cpp +++ b/source/program.cpp @@ -113,6 +113,11 @@ void Program::link() glGetActiveUniform(id, i, 128, &len, &size, &type, name); if(len && strncmp(name, "gl_", 3)) { + /* Some implementations report the first element of a uniform array, + others report just the name of an array. */ + if(len>3 && !strcmp(name+len-3, "[0]")) + name[len-3] = 0; + UniformInfo &info = uniforms[name]; info.block = 0; info.name = name; @@ -249,7 +254,7 @@ int Program::get_uniform_location(const string &n) const gives us the first element of the array, so try to look that up and add an offset. */ unsigned offset = lexical_cast(n.substr(open_bracket+1, n.size()-2-open_bracket)); - i = uniforms.find(n.substr(0, open_bracket)+"[0]"); + i = uniforms.find(n.substr(0, open_bracket)); if(i!=uniforms.end() && !i->second.block && offsetsecond.size) return i->second.location+offset; }