X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fpipelinetemplate.cpp;h=8c6dbe501203e0ee9bbcfb7a22fc27e3d869b7d8;hp=f9344d3e3f8e9912b8c9358f653bc9d9bab33b00;hb=e16855bccb78c721e2fe3f2ea8fc0310e041cb43;hpb=59489e302517943f637bffea953671abc4e43cb6 diff --git a/source/pipelinetemplate.cpp b/source/pipelinetemplate.cpp index f9344d3e..8c6dbe50 100644 --- a/source/pipelinetemplate.cpp +++ b/source/pipelinetemplate.cpp @@ -26,6 +26,21 @@ PipelineTemplate::~PipelineTemplate() } +PipelineTemplate::PostProcessorRegistry &PipelineTemplate::get_postprocessor_registry() +{ + static PostProcessorRegistry registry; + static bool initialized = false; + if(!initialized) + { + registry.register_type("ambient_occlusion"); + registry.register_type("bloom"); + registry.register_type("colorcurve"); + initialized = true; + } + return registry; +} + + PipelineTemplate::Pass::~Pass() { } @@ -44,13 +59,12 @@ PipelineTemplate::Loader::Loader(PipelineTemplate &t, Collection &c): void PipelineTemplate::Loader::init() { - add("ambient_occlusion", &Loader::postprocessor); - add("bloom", &Loader::postprocessor); - add("colorcurve", &Loader::postprocessor); add("hdr", &PipelineTemplate::hdr); add("multisample", &Loader::multisample); add("multisample", &Loader::multisample_range); add("pass", &Loader::pass); + + get_postprocessor_registry().add_all(*this); } void PipelineTemplate::Loader::multisample(unsigned samples) @@ -78,14 +92,6 @@ void PipelineTemplate::Loader::pass(const string &tag, const string &rend) obj.passes.push_back(pss); } -template -void PipelineTemplate::Loader::postprocessor() -{ - RefPtr postproc = new typename T::Template; - load_sub(*postproc); - obj.postprocessors.push_back(postproc.release()); -} - PipelineTemplate::Pass::Loader::Loader(Pass &p): DataFile::CollectionObjectLoader(p, 0) @@ -111,17 +117,17 @@ void PipelineTemplate::Pass::Loader::init() void PipelineTemplate::Pass::Loader::blend_predefined(const string &name) { - const Blend *blend = 0; + const Blend *bln = 0; if(name=="alpha") - blend = &Blend::alpha(); + bln = &Blend::alpha(); else if(name=="additive") - blend = &Blend::additive(); + bln = &Blend::additive(); else if(name=="additive_alpha") - blend = &Blend::additive_alpha(); + bln = &Blend::additive_alpha(); else throw key_error(name); - obj.blend = blend; + obj.blend = bln; obj.blend.keep(); }