-#include <msp/core/algorithm.h>
-#include <msp/core/maputils.h>
-#include "error.h"
-#include "pipeline.h"
-#include "pipelinebuilder.h"
-#include "pipelinetemplate.h"
-#include "renderbuffer.h"
-
-using namespace std;
-
-namespace Msp {
-namespace GL {
-
-PipelineBuilder::PipelineBuilder(const PipelineTemplate &t):
- tmpl(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;
-}
-
-void PipelineBuilder::set_renderable(const string &name, Renderable &rend)
-{
- get_item(renderables, name) = &rend;
-}
-
-void PipelineBuilder::build(Pipeline &pipeline) const
-{
- pipeline.set_hdr(tmpl.get_hdr());
- unsigned samples = min(tmpl.get_maximum_multisample(), Renderbuffer::get_max_samples());
- if(samples<tmpl.get_required_multisample())
- throw invalid_operation("PipelineBuilder::build");
-
- pipeline.set_multisample(samples);
-
- const PipelineTemplate::PassArray &passes = tmpl.get_passes();
- for(PipelineTemplate::PassArray::const_iterator i=passes.begin(); i!=passes.end(); ++i)
- {
- Renderable *renderable = get_item(renderables, i->renderable_name);
- if(!renderable)
- continue;
-
- Pipeline::Pass &pass = pipeline.add_pass(i->tag, *renderable);
- pass.set_blend(i->blend.get());
- pass.set_depth_test(i->depth_test.get());
- pass.set_lighting(i->lighting.get());
- }
-
- 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);
- }
-}
-
-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);
- build(*pipeline);
- 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