From: Mikko Rasa Date: Wed, 12 Dec 2012 15:39:26 +0000 (+0200) Subject: Move uniform array name adjustment to an earlier phase X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=0778636782c7c42564bfea87d56fc76c583a888e Move uniform array name adjustment to an earlier phase Uniforms are looked up by the map key, so it won't do any good if the name stored in the UniformInfo is adjusted by the map key isn't. --- diff --git a/source/program.cpp b/source/program.cpp index 1735d5fa..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; @@ -192,19 +197,12 @@ void Program::link() vector blockless_uniforms; for(UniformMap::iterator i=uniforms.begin(); i!=uniforms.end(); ++i) - { if(!i->second.block) { i->second.location = glGetUniformLocation(id, i->second.name.c_str()); blockless_uniforms.push_back(&i->second); } - /* Some implementations report the first element of a uniform array, - others report just the name of an array. */ - if(i->second.name.size()>3 && !i->second.name.compare(i->second.name.size()-3, 3, "[0]")) - i->second.name.erase(i->second.name.size()-3, 3); - } - uniform_layout_hash = compute_layout_hash(blockless_uniforms); }