]> git.tdb.fi Git - libs/gl.git/blobdiff - source/pipelinetemplate.cpp
Support named postprocessor slots in pipeline templates
[libs/gl.git] / source / pipelinetemplate.cpp
index 8c6dbe501203e0ee9bbcfb7a22fc27e3d869b7d8..14f6e2c024eed34fc123112161b15465e3f60cb5 100644 (file)
@@ -22,7 +22,7 @@ PipelineTemplate::PipelineTemplate():
 PipelineTemplate::~PipelineTemplate()
 {
        for(PostProcessorArray::iterator i=postprocessors.begin(); i!=postprocessors.end(); ++i)
-               delete *i;
+               delete i->postprocessor_template;
 }
 
 
@@ -45,6 +45,17 @@ PipelineTemplate::Pass::~Pass()
 { }
 
 
+PipelineTemplate::PostProcessor::PostProcessor(GL::PostProcessor::Template *ppt):
+       postprocessor_template(ppt)
+{ }
+
+
+PipelineTemplate::PostProcLoader::PostProcLoader()
+{
+       get_postprocessor_registry().add_all(*this);
+}
+
+
 PipelineTemplate::Loader::Loader(PipelineTemplate &t):
        DataFile::CollectionObjectLoader<PipelineTemplate>(t, 0)
 {
@@ -63,8 +74,12 @@ void PipelineTemplate::Loader::init()
        add("multisample", &Loader::multisample);
        add("multisample", &Loader::multisample_range);
        add("pass", &Loader::pass);
+       add("postprocessor", &Loader::postprocessor);
+}
 
-       get_postprocessor_registry().add_all(*this);
+void PipelineTemplate::Loader::postprocessor_loaded()
+{
+       obj.postprocessors.push_back(get_postprocessor_template());
 }
 
 void PipelineTemplate::Loader::multisample(unsigned samples)
@@ -92,6 +107,16 @@ void PipelineTemplate::Loader::pass(const string &tag, const string &rend)
        obj.passes.push_back(pss);
 }
 
+void PipelineTemplate::Loader::postprocessor(const std::string &slot)
+{
+       PostProcLoader ldr;
+       load_sub_with(ldr);
+       PostProcessor pp;
+       pp.postprocessor_template = ldr.get_postprocessor_template();
+       pp.slot_name = slot;
+       obj.postprocessors.push_back(pp);
+}
+
 
 PipelineTemplate::Pass::Loader::Loader(Pass &p):
        DataFile::CollectionObjectLoader<Pass>(p, 0)