X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogram.cpp;h=61610493df811411cc2a82ef980633754b97f36b;hb=ee31badbd85f64eaca16c3a2e9db217465992a69;hp=636988d75c75dd11f3728906cf3c761b31553b34;hpb=9034e81679eeeaa3d1d5d643d3f924d9edb45a68;p=libs%2Fgl.git diff --git a/source/program.cpp b/source/program.cpp index 636988d7..61610493 100644 --- a/source/program.cpp +++ b/source/program.cpp @@ -2,10 +2,10 @@ #include #include #include +#include +#include +#include #include -#include "arb_shader_objects.h" -#include "arb_uniform_buffer_object.h" -#include "arb_vertex_shader.h" #include "buffer.h" #include "error.h" #include "program.h" @@ -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; }