From 0778636782c7c42564bfea87d56fc76c583a888e Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Wed, 12 Dec 2012 17:39:26 +0200 Subject: [PATCH] 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. --- source/program.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) 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); } -- 2.45.2