#include <cstring>
#include <msp/core/hash.h>
#include <msp/core/maputils.h>
+#include <msp/gl/extensions/arb_shader_objects.h>
+#include <msp/gl/extensions/arb_uniform_buffer_object.h>
+#include <msp/gl/extensions/arb_vertex_shader.h>
#include <msp/strings/format.h>
-#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"
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;
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;
}