]> git.tdb.fi Git - libs/gl.git/blobdiff - source/pipelinebuilder.cpp
Support named postprocessor slots in pipeline templates
[libs/gl.git] / source / pipelinebuilder.cpp
index 705932994479c4f06b5cdc24b83bc5ae4b0cddd0..286d6cb62f747a4d97abb366389ca01695e60ea1 100644 (file)
@@ -17,6 +17,10 @@ PipelineBuilder::PipelineBuilder(const PipelineTemplate &t):
        const vector<PipelineTemplate::Pass> &passes = tmpl.get_passes();
        for(vector<PipelineTemplate::Pass>::const_iterator i=passes.begin(); i!=passes.end(); ++i)
                renderables[i->renderable_name] = 0;
+       const vector<PipelineTemplate::PostProcessor> &postprocs = tmpl.get_postprocessors();
+       for(PipelineTemplate::PostProcessorArray::const_iterator i=postprocs.begin(); i!=postprocs.end(); ++i)
+               if(!i->slot_name.empty())
+                       postprocessors[i->slot_name] = 0;
 }
 
 void PipelineBuilder::set_renderable(const string &name, Renderable &rend)
@@ -24,6 +28,11 @@ void PipelineBuilder::set_renderable(const string &name, Renderable &rend)
        get_item(renderables, name) = &rend;
 }
 
+void PipelineBuilder::set_postprocessor(const string &name, PostProcessor &pproc)
+{
+       get_item(postprocessors, name) = &pproc;
+}
+
 void PipelineBuilder::build(Pipeline &pipeline) const
 {
        pipeline.set_hdr(tmpl.get_hdr());
@@ -49,8 +58,13 @@ void PipelineBuilder::build(Pipeline &pipeline) const
        const PipelineTemplate::PostProcessorArray &postprocs = tmpl.get_postprocessors();
        for(PipelineTemplate::PostProcessorArray::const_iterator i=postprocs.begin(); i!=postprocs.end(); ++i)
        {
-               PostProcessor *proc = (*i)->create(pipeline.get_width(), pipeline.get_height());
-               pipeline.add_postprocessor_owned(proc);
+               PostProcessor *proc = 0;
+               if(!i->slot_name.empty())
+                       proc = get_item(postprocessors, i->slot_name);
+               if(!proc && i->postprocessor_template)
+                       proc = i->postprocessor_template->create(pipeline.get_width(), pipeline.get_height());
+               if(proc)
+                       pipeline.add_postprocessor_owned(proc);
        }
 }