Create a shader, for example:
#version 330 core
...
struct Something {
...
float a;
float b;
float c;
...
};
uniform wonderful {
layout(...) mat4 has;
layout(...) mat4 happend;
Somethig dontPanik;
};
...
If you try to retrieve the offsets with:
glGetActiveUniformsiv(programId, UBO_SIZE, uboIndices, GL_UNIFORM_OFFSET, uboOffsets); |
All floats are assigned to the same offset.
if you change the struct(alternate floats with other types of length >1):
struct SomethingElse {
...
float a;
vec3 we;
float b;
vec3 dontSink;
float c;
vec3 atlantisWest;
...
};
the floats are accessible.
Also glBufferSubData is slow in this context (compared to a competing product).
With std140 as layout qualifier it is also possible to get unique indices. But now the query (get*ACTIVE*Uniforms) is redundant since unused uniforms are no longer distinguishable