]> git.tdb.fi Git - libs/gl.git/blobdiff - source/pipeline.cpp
Refresh lighting and culling uniforms if the camera changes in pop_state
[libs/gl.git] / source / pipeline.cpp
index 4c4007233d2b9fd82cc82f9bf7cccdf0cc56f3e4..29c42324add861d9e7813ba252f4fde9217f20b5 100644 (file)
@@ -81,7 +81,7 @@ Pipeline::Pass &Pipeline::add_pass(const Tag &tag)
        return passes.back();
 }
 
-void Pipeline::add_renderable(const Renderable &r)
+void Pipeline::add_renderable(Renderable &r)
 {
        for(vector<Slot>::iterator i=renderables.begin(); i!=renderables.end(); ++i)
                if(i->renderable==&r)
@@ -93,7 +93,7 @@ void Pipeline::add_renderable(const Renderable &r)
        renderables.push_back(&r);
 }
 
-void Pipeline::add_renderable_for_pass(const Renderable &r, const Tag &tag)
+void Pipeline::add_renderable_for_pass(Renderable &r, const Tag &tag)
 {
        for(vector<Slot>::iterator i=renderables.begin(); i!=renderables.end(); ++i)
                if(i->renderable==&r)
@@ -106,7 +106,7 @@ void Pipeline::add_renderable_for_pass(const Renderable &r, const Tag &tag)
        renderables.back().passes.insert(tag);
 }
 
-void Pipeline::remove_renderable(const Renderable &r)
+void Pipeline::remove_renderable(Renderable &r)
 {
        for(vector<Slot>::iterator i=renderables.begin(); i!=renderables.end(); ++i)
                if(i->renderable==&r)
@@ -116,7 +116,7 @@ void Pipeline::remove_renderable(const Renderable &r)
                }
 }
 
-Pipeline::Pass &Pipeline::add_pass(const Tag &tag, const Renderable &r)
+Pipeline::Pass &Pipeline::add_pass(const Tag &tag, Renderable &r)
 {
        passes.push_back(Pass(tag, &r));
        return passes.back();
@@ -136,32 +136,29 @@ void Pipeline::add_postprocessor(PostProcessor &pp)
        }
 }
 
-void Pipeline::setup_frame() const
+void Pipeline::setup_frame(Renderer &renderer)
 {
        for(PassList::const_iterator i=passes.begin(); i!=passes.end(); ++i)
-               if(const Renderable *renderable = i->get_renderable())
-                       renderable->setup_frame();
+               if(Renderable *renderable = i->get_renderable())
+                       renderable->setup_frame(renderer);
        for(vector<Slot>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
-               i->renderable->setup_frame();
+               i->renderable->setup_frame(renderer);
 }
 
-void Pipeline::finish_frame() const
+void Pipeline::finish_frame()
 {
        for(PassList::const_iterator i=passes.begin(); i!=passes.end(); ++i)
-               if(const Renderable *renderable = i->get_renderable())
+               if(Renderable *renderable = i->get_renderable())
                        renderable->finish_frame();
        for(vector<Slot>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
                i->renderable->finish_frame();
 }
 
-void Pipeline::render(const Tag &tag) const
+void Pipeline::render()
 {
-       if(tag.id)
-               return;
-
        Renderer renderer(camera);
-       setup_frame();
-       render(renderer, tag);
+       setup_frame(renderer);
+       render(renderer);
        finish_frame();
 }
 
@@ -259,7 +256,7 @@ void Pipeline::create_targets(unsigned recreate)
 }
 
 
-Pipeline::Pass::Pass(const Tag &t, const Renderable *r):
+Pipeline::Pass::Pass(const Tag &t, Renderable *r):
        tag(t),
        lighting(0),
        depth_test(0),
@@ -289,7 +286,7 @@ void Pipeline::Pass::set_clipping(const Clipping *c)
 }
 
 
-Pipeline::Slot::Slot(const Renderable *r):
+Pipeline::Slot::Slot(Renderable *r):
        renderable(r)
 { }