+const RenderPass &Technique::get_pass(const Tag &tag) const
+{
+ return get_item(passes, tag);
+}
+
+bool Technique::replace_texture(const string &slot, const Texture &tex)
+{
+ bool replaced = false;
+ for(PassMap::iterator i=passes.begin(); i!=passes.end(); ++i)
+ {
+ int index = i->second.get_texture_index(slot);
+ if(index>=0)
+ {
+ i->second.set_texture(index, &tex);
+ replaced = true;
+ }
+ }
+
+ return replaced;
+}
+
+bool Technique::replace_material(const string &slot, const Material &mat)
+{
+ bool replaced = false;
+ for(PassMap::iterator i=passes.begin(); i!=passes.end(); ++i)
+ {
+ const string &pass_slot = i->second.get_material_slot_name();
+ if(!pass_slot.empty() && pass_slot==slot)
+ {
+ i->second.set_material(&mat);
+ replaced = true;
+ }
+ }
+
+ return replaced;
+}
+
+bool Technique::replace_uniforms(const ProgramData &shdata)