+ if(bindings)
+ {
+ for(unsigned i=0; i<uniform_blocks.size(); ++i)
+ {
+ map<string, unsigned>::const_iterator j = bindings->blocks.find(uniform_blocks[i].name);
+ if(j!=bindings->blocks.end())
+ {
+ glUniformBlockBinding(id, i, j->second);
+ uniform_blocks[i].bind_point = j->second;
+ }
+ }
+
+ Conditional<BindRestore> _bind(!ARB_separate_shader_objects, this);
+ for(map<string, unsigned>::const_iterator i=bindings->textures.begin(); i!=bindings->textures.end(); ++i)
+ {
+ int location = get_uniform_location(i->first);
+ if(location>=0)
+ {
+ if(ARB_separate_shader_objects)
+ glProgramUniform1i(id, location, i->second);
+ else
+ glUniform1i(location, i->second);
+ }
+ }
+
+ delete bindings;
+ bindings = 0;
+ }