X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Feffect.cpp;h=0ead01c32fb22ea3d91c43d0cfa1b677c37faf05;hb=7ab8bc0724f40b46d7f5da1bcb05ab6d0cecbb43;hp=05ef5a10f1c2acee31f801053ffe94fc50259d5a;hpb=083a8227715fa32c841fc2b8126e4ab8d2840ba0;p=libs%2Fgl.git diff --git a/source/effects/effect.cpp b/source/effects/effect.cpp index 05ef5a10..0ead01c3 100644 --- a/source/effects/effect.cpp +++ b/source/effects/effect.cpp @@ -1,22 +1,42 @@ +#include #include "effect.h" +using namespace std; + namespace Msp { namespace GL { -Effect::Effect(Renderable &r): - renderable(r) +Effect::Effect(Renderable &c): + content(c) { - enabled_methods.insert(Tag()); + enable_for_method(Tag()); } void Effect::enable_for_method(Tag tag) { - enabled_methods.insert(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) { - enabled_methods.erase(tag); + auto i = lower_bound(enabled_methods, tag); + if(i!=enabled_methods.end() && *i==tag) + enabled_methods.erase(i); +} + +bool Effect::is_enabled_for_method(Tag tag) const +{ + auto i = lower_bound(enabled_methods, tag); + return (i!=enabled_methods.end() && *i==tag); +} + + +void Effect::Template::create_base(Effect &effect) const +{ + for(Tag m: enabled_methods) + effect.enable_for_method(m); } @@ -27,6 +47,12 @@ Effect::Template::Loader::Loader(Template &t, Collection &c): void Effect::Template::Loader::init_actions() { add("content", &Template::content_name); + add("enable_for_method", &Loader::enable_for_method); +} + +void Effect::Template::Loader::enable_for_method(const string &m) +{ + obj.enabled_methods.push_back(m); } } // namespace GL