]> git.tdb.fi Git - libs/gl.git/blobdiff - source/pipeline.h
Simplify Pipeline pass management
[libs/gl.git] / source / pipeline.h
index 011a96bba5e37d6ca1bd056bfe1cede1c047cb03..c14245fa9d83b81c637c4fc530223db9477ea3a0 100644 (file)
@@ -23,12 +23,15 @@ public:
        class Pass
        {
        private:
+               Tag tag;
                const Lighting *lighting;
                const DepthTest *depth_test;
                const Blend *blend;
 
        public:
-               Pass();
+               Pass(const Tag &);
+
+               const Tag &get_tag() const { return tag; }
 
                void set_lighting(const Lighting *);
                void set_depth_test(const DepthTest *);
@@ -47,10 +50,9 @@ private:
                Slot(const Renderable *);
        };
 
-       typedef std::map<Tag, Pass> PassMap;
+       typedef std::list<Pass> PassList;
 
-       PassMap passes;
-       std::vector<Tag> pass_order;
+       PassList passes;
        const Camera *camera;
        std::vector<Slot> renderables;
        std::vector<PostProcessor *> postproc;
@@ -74,16 +76,14 @@ public:
        void set_camera(const Camera *);
 
        Pass &add_pass(const Tag &tag);
-       Pass &get_pass(const Tag &tag);
-       const Pass &get_pass(const Tag &tag) const;
 
        void add_renderable(const Renderable &);
        void add_renderable_for_pass(const Renderable &, const Tag &);
        void remove_renderable(const Renderable &);
        void add_postprocessor(PostProcessor &);
 
+       virtual void render(const Tag &tag = Tag()) const;
        virtual void render(Renderer &, const Tag &tag = Tag()) const;
-       void render_all() const;
 
 private:
        void create_fbos();