]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/effect.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / effects / effect.cpp
index ad789af06019785deb0d1a68f16236b3c37157af..0ead01c32fb22ea3d91c43d0cfa1b677c37faf05 100644 (file)
@@ -1,38 +1,58 @@
+#include <msp/core/algorithm.h>
 #include "effect.h"
-#include "sampler.h"
+
+using namespace std;
 
 namespace Msp {
 namespace GL {
 
-WeakPtr<Sampler> Effect::linear_sampler;
+Effect::Effect(Renderable &c):
+       content(c)
+{
+       enable_for_method(Tag());
+}
+
+void Effect::enable_for_method(Tag tag)
+{
+       auto i = lower_bound(enabled_methods, tag);
+       if(i==enabled_methods.end() || *i!=tag)
+               enabled_methods.insert(i, tag);
+}
+
+void Effect::disable_for_method(Tag tag)
+{
+       auto i = lower_bound(enabled_methods, tag);
+       if(i!=enabled_methods.end() && *i==tag)
+               enabled_methods.erase(i);
+}
 
-Effect::Effect(Renderable &r):
-       renderable(r)
+bool Effect::is_enabled_for_method(Tag tag) const
 {
-       enabled_passes.insert(Tag());
+       auto i = lower_bound(enabled_methods, tag);
+       return (i!=enabled_methods.end() && *i==tag);
 }
 
-void Effect::enable_for_pass(const Tag &tag)
+
+void Effect::Template::create_base(Effect &effect) const
 {
-       enabled_passes.insert(tag);
+       for(Tag m: enabled_methods)
+               effect.enable_for_method(m);
 }
 
-void Effect::disable_for_pass(const Tag &tag)
+
+Effect::Template::Loader::Loader(Template &t, Collection &c):
+       CollectionObjectLoader<Template>(t, &c)
+{ }
+
+void Effect::Template::Loader::init_actions()
 {
-       enabled_passes.erase(tag);
+       add("content", &Template::content_name);
+       add("enable_for_method", &Loader::enable_for_method);
 }
 
-RefPtr<Sampler> Effect::get_linear_sampler()
+void Effect::Template::Loader::enable_for_method(const string &m)
 {
-       RefPtr<Sampler> sampler = linear_sampler;
-       if(!sampler)
-       {
-               sampler = new Sampler;
-               sampler->set_filter(LINEAR);
-               sampler->set_wrap(CLAMP_TO_EDGE);
-               linear_sampler = sampler;
-       }
-       return sampler;
+       obj.enabled_methods.push_back(m);
 }
 
 } // namespace GL