]> git.tdb.fi Git - libs/gl.git/blobdiff - source/builders/sequencebuilder.cpp
Explicitly specify the target format of Sequence
[libs/gl.git] / source / builders / sequencebuilder.cpp
index 337df4769b33aa15d2c7831a46f46356cffc0ce1..5a68d4142a90bd777f058a9a3c3e4160c9367cf0 100644 (file)
@@ -50,14 +50,6 @@ void SequenceBuilder::build(Sequence &sequence) const
                sequence.set_debug_name(debug_name);
 #endif
 
-       sequence.set_hdr(tmpl.get_hdr());
-       sequence.set_alpha(tmpl.get_alpha());
-       unsigned samples = min(tmpl.get_maximum_multisample(), Limits::get_global().max_samples);
-       if(samples<tmpl.get_required_multisample())
-               throw invalid_operation("SequenceBuilder::build");
-
-       sequence.set_multisample(samples);
-
        const vector<SequenceTemplate::Step> &steps = tmpl.get_steps();
        for(vector<SequenceTemplate::Step>::const_iterator i=steps.begin(); i!=steps.end(); ++i)
        {
@@ -97,24 +89,37 @@ void SequenceBuilder::build(Sequence &sequence) const
 
 Sequence *SequenceBuilder::build(unsigned w, unsigned h) const
 {
-       RefPtr<Sequence> sequence = new Sequence(w, h);
+       RefPtr<Sequence> sequence = new Sequence(w, h, create_frame_format());
        build(*sequence);
        return sequence.release();
 }
 
 Sequence *SequenceBuilder::build(const View &view) const
 {
-       RefPtr<Sequence> sequence = new Sequence(view);
+       RefPtr<Sequence> sequence = new Sequence(view, create_frame_format());
        build(*sequence);
        return sequence.release();
 }
 
 Sequence *SequenceBuilder::build(const Framebuffer &fbo) const
 {
-       RefPtr<Sequence> sequence = new Sequence(fbo);
+       RefPtr<Sequence> sequence = new Sequence(fbo, create_frame_format());
        build(*sequence);
        return sequence.release();
 }
 
+FrameFormat SequenceBuilder::create_frame_format() const
+{
+       unsigned samples = min(tmpl.get_maximum_multisample(), Limits::get_global().max_samples);
+       if(samples<tmpl.get_required_multisample())
+               throw invalid_operation("SequenceBuilder::create_frame_format");
+
+       PixelComponents color_comp = (tmpl.get_alpha() ? RGBA : RGB);
+       DataType color_type = (tmpl.get_hdr() ? HALF_FLOAT : UNSIGNED_BYTE);
+       PixelFormat color_pf = make_pixelformat(color_comp, color_type);
+
+       return (COLOR_ATTACHMENT,color_pf, DEPTH_ATTACHMENT).set_samples(samples);
+}
+
 } // namespace GL
 } // namespace Msp