+
+ string layout_descriptor;
+ for(map<string, UniformInfo>::const_iterator i = uniforms.begin(); i!=uniforms.end(); ++i)
+ if(i->second.location>=0)
+ {
+ if(!layout_descriptor.empty())
+ layout_descriptor += '\n';
+ layout_descriptor += format("%d:%s:%x", i->second.location, i->second.name, i->second.type);
+ }
+ uniform_layout_hash = hash32(layout_descriptor);