]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/sequence.cpp
Refactor owned postprocessors in Sequence into a more generic mechanism
[libs/gl.git] / source / render / sequence.cpp
index 4ccf540809d4a3138f4e30e3d23a0ca3e0e35370..5d003753bc2738d89fc49d5e34d26956b466ca78 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;
@@ -71,24 +70,10 @@ Sequence::Step &Sequence::add_step(Tag tag, Renderable &r)
 }
 
 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)
@@ -171,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);
                }
        }
 }