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;ds=sidebyside 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); }