http://www.opengl.org/wiki/Interface_Block_(GLSL)
http://stackoverflow.com/questions/9916103/opengl-3-1-4-2-dynamic-uniform-arrays
glGetProgramResourceIndex
glGetProgramResourceiv: GL_BUFFER_BINDING
glShaderStorageBlockBinding
GL4.4 Spec says:
Each of a program’s active shader storage blocks has acorresponding shader storage buffer object binding point. When a program object is linked, the shader storage buffer object binding point assigned to each of its active shader storage blocks is reset to the value specified by the corresponding binding layout qualifier, if present, or zero otherwise. After a program is linked, the command
void ShaderStorageBlockBinding( uint program, uint storageBlockIndex,uint storageBlockBinding );
changes the active shader storage block with an assigned indexof storageBlockIndex in program object program.
NOTE: Page 64, OpenGL Programming Guide, 8th edition says, "to explicitly control a uniform block’s binding, call glUniformBlockBinding() before calling glLinkProgram()". That's bull shit.
glBindBufferBase