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)
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());
+ pipeline.set_alpha(tmpl.get_alpha());
unsigned samples = min(tmpl.get_maximum_multisample(), Renderbuffer::get_max_samples());
if(samples<tmpl.get_required_multisample())
throw invalid_operation("PipelineBuilder::build");
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)
+ pipeline.add_postprocessor(*proc);
+ else if(i->postprocessor_template)
+ {
+ proc = i->postprocessor_template->create(pipeline.get_width(), pipeline.get_height());
+ if(proc)
+ pipeline.add_postprocessor_owned(proc);
+ }
}
}
+Pipeline *PipelineBuilder::build(unsigned w, unsigned h) const
+{
+ RefPtr<Pipeline> pipeline = new Pipeline(w, h);
+ build(*pipeline);
+ return pipeline.release();
+}
+
Pipeline *PipelineBuilder::build(const View &view) const
{
RefPtr<Pipeline> pipeline = new Pipeline(view);
return pipeline.release();
}
+Pipeline *PipelineBuilder::build(const Framebuffer &fbo) const
+{
+ RefPtr<Pipeline> pipeline = new Pipeline(fbo);
+ build(*pipeline);
+ return pipeline.release();
+}
+
} // namespace GL
} // namespace Msp