+ if(transient)
+ {
+ for(unsigned i=0; i<uniform_blocks.size(); ++i)
+ {
+ auto j = transient->blocks.find(uniform_blocks[i].name);
+ if(j!=transient->blocks.end())
+ {
+ glUniformBlockBinding(id, i, j->second);
+ uniform_blocks[i].bind_point = j->second;
+ }
+ }
+
+ if(!ARB_separate_shader_objects)
+ glUseProgram(id);
+ for(const auto &kvp: transient->textures)
+ {
+ int location = get_uniform_location(kvp.first);
+ if(location>=0)
+ {
+ if(ARB_separate_shader_objects)
+ glProgramUniform1i(id, location, kvp.second);
+ else
+ glUniform1i(location, kvp.second);
+ }
+ }
+ }