]> git.tdb.fi Git - libs/gl.git/blobdiff - source/program.cpp
Move uniform array name adjustment to an earlier phase
[libs/gl.git] / source / program.cpp
index 636988d75c75dd11f3728906cf3c761b31553b34..95102fe9b8367205ec70976f3f77b9b1811d3ea5 100644 (file)
@@ -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<unsigned>(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 && offset<i->second.size)
                                        return i->second.location+offset;
                        }