X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fpipelinebuilder.cpp;h=51e9cc855f8b73d1cb7b4cd49f616a4cc3faea58;hp=cbf181fe6e81ee3588ed341f48f7537ac7d55ebd;hb=39488946c441f4007396e438f522609a8b2943ce;hpb=18240e2bb031551e9c72a55c7d974904d209760a diff --git a/source/pipelinebuilder.cpp b/source/pipelinebuilder.cpp index cbf181fe..51e9cc85 100644 --- a/source/pipelinebuilder.cpp +++ b/source/pipelinebuilder.cpp @@ -17,6 +17,10 @@ PipelineBuilder::PipelineBuilder(const PipelineTemplate &t): const vector &passes = tmpl.get_passes(); for(vector::const_iterator i=passes.begin(); i!=passes.end(); ++i) renderables[i->renderable_name] = 0; + const vector &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,9 +28,15 @@ 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(samplescreate(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 = new Pipeline(w, h); + build(*pipeline); + return pipeline.release(); +} + Pipeline *PipelineBuilder::build(const View &view) const { RefPtr pipeline = new Pipeline(view); @@ -61,5 +87,12 @@ Pipeline *PipelineBuilder::build(const View &view) const return pipeline.release(); } +Pipeline *PipelineBuilder::build(const Framebuffer &fbo) const +{ + RefPtr pipeline = new Pipeline(fbo); + build(*pipeline); + return pipeline.release(); +} + } // namespace GL } // namespace Msp