]> git.tdb.fi Git - libs/gl.git/blobdiff - source/technique.cpp
Drop Id tags and copyright notices from files
[libs/gl.git] / source / technique.cpp
index 78060e01f9b89e80e28f7171fc40cea23188d327..d963bea46c60f0d386439eac8ba6fb9ef8a967d3 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #include <msp/core/refptr.h>
 #include <msp/datafile/collection.h>
 #include <msp/strings/formatter.h>
@@ -20,6 +13,14 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
+RenderPass &Technique::add_pass(const GL::Tag &tag)
+{
+       if(passes.count(tag))
+               throw KeyError("Duplicate pass");
+
+       return passes[tag];
+}
+
 bool Technique::has_pass(const GL::Tag &tag) const
 {
        return passes.count(tag);
@@ -27,15 +28,26 @@ bool Technique::has_pass(const GL::Tag &tag) const
 
 const RenderPass &Technique::get_pass(const GL::Tag &tag) const
 {
-       PassMap::const_iterator i=passes.find(tag);
+       PassMap::const_iterator i = passes.find(tag);
        if(i==passes.end())
                throw KeyError("Unknown pass");
        return i->second;
 }
 
 
+Technique::Loader::Loader(Technique &t):
+       DataFile::CollectionObjectLoader<Technique>(t, 0)
+{
+       init();
+}
+
 Technique::Loader::Loader(Technique &t, Collection &c):
        DataFile::CollectionObjectLoader<Technique>(t, &c)
+{
+       init();
+}
+
+void Technique::Loader::init()
 {
        add("inherit", &Loader::inherit);
        add("pass", &Loader::pass);
@@ -43,7 +55,7 @@ Technique::Loader::Loader(Technique &t, Collection &c):
 
 void Technique::Loader::inherit(const string &n)
 {
-       obj.passes=get_collection().get<Technique>(n)->get_passes();
+       obj.passes = get_collection().get<Technique>(n)->get_passes();
        InheritLoader ldr(obj, get_collection());
        load_sub_with(ldr);
 }
@@ -55,7 +67,10 @@ void Technique::Loader::pass(const string &n)
                throw KeyError("Duplicate pass name", n);
 
        RenderPass p;
-       load_sub(p, *coll);
+       if(coll)
+               load_sub(p, get_collection());
+       else
+               load_sub(p);
        obj.passes.insert(PassMap::value_type(tag, p));
 }
 
@@ -66,17 +81,15 @@ Technique::InheritLoader::InheritLoader(Technique &t, Collection &c):
        add("texture", &InheritLoader::texture);
 }
 
-void Technique::InheritLoader::texture(const string &slot, const string &name)
+void Technique::InheritLoader::texture(const std::string &slot, const string &name)
 {
-       Texture *tex=get_collection().get<Texture>(name);
+       Texture *tex = get_collection().get<Texture>(name);
        for(PassMap::iterator i=obj.passes.begin(); i!=obj.passes.end(); ++i)
        {
-               try
-               {
-                       i->second.set_texture(slot, tex);
-               }
-               catch(const KeyError &)
-               { }
+               int index = i->second.get_texture_index(slot);
+               if(index<0)
+                       continue;
+               i->second.set_texture(index, tex);
        }
 }