]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/sequence.cpp
Use emplace_back when a new object is being constructed
[libs/gl.git] / source / render / sequence.cpp
index 44a7381b160044f60c8e15c6d88617513715f786..74b8bc3b0b4fe9a6835d9f5fab5326dddcc62fe3 100644 (file)
@@ -33,9 +33,8 @@ Sequence::Sequence(unsigned w, unsigned h, const FrameFormat &f):
 
 Sequence::~Sequence()
 {
-       for(PostProcStep &p: postproc)
-               if(p.owned)
-                       delete p.postproc;
+       for(OwnedObject &o: owned_data)
+               o.delete_func(o.pointer);
        delete target[0];
        delete target[1];
        delete target_ms;
@@ -66,29 +65,15 @@ void Sequence::set_clear_stencil(int s)
 
 Sequence::Step &Sequence::add_step(Tag tag, Renderable &r)
 {
-       steps.push_back(Step(tag, &r));
+       steps.emplace_back(tag, &r);
        return steps.back();
 }
 
 void Sequence::add_postprocessor(PostProcessor &pp)
-{
-       add_postprocessor(&pp, false);
-}
-
-void Sequence::add_postprocessor_owned(PostProcessor *pp)
-{
-       add_postprocessor(pp, true);
-}
-
-void Sequence::add_postprocessor(PostProcessor *pp, bool owned)
 {
        if(target_format.empty())
-       {
-               if(owned)
-                       delete pp;
                throw invalid_operation("Sequence::add_postprocessor");
-       }
-       postproc.push_back(PostProcStep(pp, owned));
+       postproc.push_back(&pp);
 }
 
 void Sequence::setup_frame(Renderer &renderer)
@@ -124,7 +109,7 @@ void Sequence::render(Renderer &renderer, Tag tag) const
                        throw invalid_operation("Sequence::render");
 
                const FrameFormat &format = target_fbo->get_format();
-               ClearValue clear_values[7];
+               ClearValue clear_values[FrameFormat::MAX_ATTACHMENTS];
                unsigned i = 0;
                Color default_color = (clear_colors.empty() ? Color(0.0f, 0.0f, 0.0f, 0.0f) : clear_colors.front());
                ClearValue *cv = clear_values;
@@ -148,13 +133,12 @@ void Sequence::render(Renderer &renderer, Tag tag) const
 
                renderer.set_depth_test(&s.get_depth_test());
                renderer.set_stencil_test(&s.get_stencil_test());
-               renderer.set_blend(&s.get_blend());
 
                if(const Lighting *lighting = s.get_lighting())
                        renderer.add_shader_data(lighting->get_shader_data());
 
                if(const Renderable *renderable = s.get_renderable())
-                       renderer.render(*renderable, s.get_tag());
+                       renderable->render(renderer, s.get_tag());
        }
 
        if(target[0])
@@ -172,7 +156,7 @@ void Sequence::render(Renderer &renderer, Tag tag) const
                        renderer.set_framebuffer(i+1<postproc.size() ? &target[1-j]->get_framebuffer() : out_fbo);
                        const Texture2D &color = target[j]->get_target_texture(COLOR_ATTACHMENT);
                        const Texture2D &depth = target[j]->get_target_texture(DEPTH_ATTACHMENT);
-                       postproc[i].postproc->render(renderer, color, depth);
+                       postproc[i]->render(renderer, color, depth);
                }
        }
 }
@@ -212,10 +196,5 @@ void Sequence::Step::set_stencil_test(const StencilTest &st)
        stencil_test = st;
 }
 
-void Sequence::Step::set_blend(const Blend &b)
-{
-       blend = b;
-}
-
 } // namespace GL
 } // namespace Msp