X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmaterials%2Ftechnique.cpp;h=12111e5e675305aa98859bf1ba58f2c332bb544e;hb=6f39983060a27634c012f66c82fea0d09fea9774;hp=09799acee8841ac3eefe9d3fe1cfb5fa08801283;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266;p=libs%2Fgl.git diff --git a/source/materials/technique.cpp b/source/materials/technique.cpp index 09799ace..12111e5e 100644 --- a/source/materials/technique.cpp +++ b/source/materials/technique.cpp @@ -13,22 +13,22 @@ using namespace std; namespace Msp { namespace GL { -RenderPass &Technique::add_pass(const Tag &tag) +RenderPass &Technique::add_pass(Tag tag) { return insert_unique(passes, tag, RenderPass())->second; } -bool Technique::has_pass(const Tag &tag) const +bool Technique::has_pass(Tag tag) const { return passes.count(tag); } -const RenderPass &Technique::get_pass(const Tag &tag) const +const RenderPass &Technique::get_pass(Tag tag) const { return get_item(passes, tag); } -const RenderPass *Technique::find_pass(const Tag &tag) const +const RenderPass *Technique::find_pass(Tag tag) const { PassMap::const_iterator i = passes.find(tag); return (i!=passes.end() ? &i->second : 0); @@ -39,10 +39,10 @@ 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) + Tag tag = i->second.get_texture_tag(slot); + if(tag.id) { - i->second.set_texture(index, &tex); + i->second.set_texture(tag, &tex); replaced = true; } } @@ -69,20 +69,20 @@ bool Technique::replace_material(const string &slot, const Material &mat) bool Technique::replace_uniforms(const ProgramData &shdata) { bool replaced = false; - const vector &uniform_names = shdata.get_uniform_names(); + const vector &uniform_tags = shdata.get_uniform_tags(); for(PassMap::iterator i=passes.begin(); i!=passes.end(); ++i) { RefPtr new_shdata; - for(vector::const_iterator j=uniform_names.begin(); j!=uniform_names.end(); ++j) + for(vector::const_iterator j=uniform_tags.begin(); j!=uniform_tags.end(); ++j) { - const string &name = i->second.get_slotted_uniform_name(*j); - if(name.empty()) + Tag tag = i->second.get_slotted_uniform_tag(*j); + if(!tag.id) continue; if(!new_shdata) new_shdata = new ProgramData(*i->second.get_shader_data()); - new_shdata->uniform(name, shdata.get_uniform(*j)); + new_shdata->uniform(tag, shdata.get_uniform(*j)); replaced = true; }