]> git.tdb.fi Git - libs/gl.git/blobdiff - source/pipeline.h
Remove useless declarations of main() from shaders
[libs/gl.git] / source / pipeline.h
index d07e643176666f861e55dcb75a65f0de28b73021..1e5b6aa4c9894529e44cb0094c5b9a08837b01e6 100644 (file)
@@ -6,6 +6,7 @@
 #include "framebuffer.h"
 #include "renderable.h"
 #include "renderbuffer.h"
 #include "framebuffer.h"
 #include "renderable.h"
 #include "renderbuffer.h"
+#include "rendertarget.h"
 #include "texture2d.h"
 
 namespace Msp {
 #include "texture2d.h"
 
 namespace Msp {
@@ -19,21 +20,12 @@ class Lighting;
 class PostProcessor;
 
 /**
 class PostProcessor;
 
 /**
-Encapsulates all of the information used to produce a complete image in the
-framebuffer.  This is the highest level rendering class.
+Top-level content class.  Typically a Pipeline is used as the content
+Renderable for a View or effects such as ShadowMap or EnvironmentMap.
 
 A Pipeline contains a sequence of passes.  Each pass has a Renderable along
 with Lighting, Clipping, DepthTest and Blend states.  Scenes can be used to
 
 A Pipeline contains a sequence of passes.  Each pass has a Renderable along
 with Lighting, Clipping, DepthTest and Blend states.  Scenes can be used to
-organize Renderables within a pass.  A Camera can be specified for the entire
-Pipeline.
-
-A Pipeline is also a Renderable itself.  It will only respond to the default
-pass.  The Renderables within the Pipeline will be invoked with whatever tags
-were specified when adding them.
-
-A Pipeline's render method should normally be called without a Renderer; it
-will create one itself, using the camera specified for the Pipeline.  If a
-Renderer is passed, its camera will be used instead.
+organize Renderables within a pass.
 
 PostProcessors can be applied after all of the passes in the Pipeline have been
 rendered.  Framebuffer objects are automatically used to pass render results to
 
 PostProcessors can be applied after all of the passes in the Pipeline have been
 rendered.  Framebuffer objects are automatically used to pass render results to
@@ -51,10 +43,10 @@ public:
                const DepthTest *depth_test;
                const Blend *blend;
                const Clipping *clipping;
                const DepthTest *depth_test;
                const Blend *blend;
                const Clipping *clipping;
-               const Renderable *renderable;
+               Renderable *renderable;
 
        public:
 
        public:
-               Pass(const Tag &, const Renderable *);
+               Pass(const Tag &, Renderable *);
 
                const Tag &get_tag() const { return tag; }
 
 
                const Tag &get_tag() const { return tag; }
 
@@ -66,34 +58,16 @@ public:
                const DepthTest *get_depth_test() const { return depth_test; }
                const Blend *get_blend() const { return blend; }
                const Clipping *get_clipping() const { return clipping; }
                const DepthTest *get_depth_test() const { return depth_test; }
                const Blend *get_blend() const { return blend; }
                const Clipping *get_clipping() const { return clipping; }
-               const Renderable *get_renderable() const { return renderable; }
+               Renderable *get_renderable() const { return renderable; }
        };
 
 private:
        struct Slot
        {
        };
 
 private:
        struct Slot
        {
-               const Renderable *renderable;
+               Renderable *renderable;
                std::set<Tag> passes;
 
                std::set<Tag> passes;
 
-               Slot(const Renderable *);
-       };
-
-       struct RenderTarget
-       {
-               Framebuffer fbo;
-               Texture2D color;
-               Texture2D depth;
-
-               RenderTarget(unsigned, unsigned, PixelFormat);
-       };
-
-       struct MultisampleTarget
-       {
-               Framebuffer fbo;
-               Renderbuffer color;
-               Renderbuffer depth;
-
-               MultisampleTarget(unsigned, unsigned, unsigned, PixelFormat);
+               Slot(Renderable *);
        };
 
        typedef std::list<Pass> PassList;
        };
 
        typedef std::list<Pass> PassList;
@@ -107,8 +81,7 @@ private:
        bool hdr;
        unsigned samples;
        RenderTarget *target[2];
        bool hdr;
        unsigned samples;
        RenderTarget *target[2];
-       MultisampleTarget *target_ms;
-       mutable bool in_frame;
+       RenderTarget *target_ms;
 
 public:
        Pipeline(unsigned, unsigned, bool = false);
 
 public:
        Pipeline(unsigned, unsigned, bool = false);
@@ -116,25 +89,25 @@ public:
 
        void set_hdr(bool);
        void set_multisample(unsigned);
 
        void set_hdr(bool);
        void set_multisample(unsigned);
-       void set_camera(const Camera *);
 
        // Deprecated
 
        // Deprecated
+       void set_camera(const Camera *);
        Pass &add_pass(const Tag &tag);
        Pass &add_pass(const Tag &tag);
-       void add_renderable(const Renderable &);
-       void add_renderable_for_pass(const Renderable &, const Tag &);
-       void remove_renderable(const Renderable &);
+       void add_renderable(Renderable &);
+       void add_renderable_for_pass(Renderable &, const Tag &);
+       void remove_renderable(Renderable &);
 
        /** Adds a pass to the pipeline.  It's permissible to add the same
        Renderable multiple times. */
 
        /** Adds a pass to the pipeline.  It's permissible to add the same
        Renderable multiple times. */
-       Pass &add_pass(const Tag &, const Renderable &);
+       Pass &add_pass(const Tag &, Renderable &);
 
        /** Adds a postprocessor to the pipeline. */
        void add_postprocessor(PostProcessor &);
 
 
        /** Adds a postprocessor to the pipeline. */
        void add_postprocessor(PostProcessor &);
 
-       virtual void setup_frame() const;
-       virtual void finish_frame() const;
+       virtual void setup_frame(Renderer &);
+       virtual void finish_frame();
 
 
-       virtual void render(const Tag &tag = Tag()) const;
+       void render();
        virtual void render(Renderer &, const Tag &tag = Tag()) const;
 
 private:
        virtual void render(Renderer &, const Tag &tag = Tag()) const;
 
 private: