X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpipeline.h;fp=source%2Fpipeline.h;h=d07e643176666f861e55dcb75a65f0de28b73021;hb=aa7955f9adfab4395b00fba84fa2d7c286a83c70;hp=2c61a53791ae02ce36e3aa8c97cc68fda3b94b95;hpb=46a18e3112a0a44963dad256e20ffb146a5043b5;p=libs%2Fgl.git diff --git a/source/pipeline.h b/source/pipeline.h index 2c61a537..d07e6431 100644 --- a/source/pipeline.h +++ b/source/pipeline.h @@ -20,25 +20,25 @@ class PostProcessor; /** Encapsulates all of the information used to produce a complete image in the -framebuffer. This is the highest level rendering class, combining Renderables -with a camera, lights and some other influential objects. +framebuffer. This is the highest level rendering class. -A Pipeline is also a Renderable itself. Externally, it only exposes the -default pass. Internally, it can hold any number of passes, which are invoked -in sequence when rendering the default pass is requested. Each pass can have a -Lighting, a DepthTest and a Blend to control how it is rendered. +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. -Renderables are rendered in the order they were added to the Pipeline. While -it's possible to remove renderables as well, using a Scene is recommended if -frequent add/remove operations are needed. - -Pipelines may have post-processors to apply full-screen effects. Framebuffer -objects are automatically used to pass render results to the post-processors. -High dynamic range and multisample rendering can also be used. +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 +the PostProcessors. High dynamic range and multisample rendering can be +requested for increased quality. */ class Pipeline: public Renderable { @@ -51,9 +51,10 @@ public: const DepthTest *depth_test; const Blend *blend; const Clipping *clipping; + const Renderable *renderable; public: - Pass(const Tag &); + Pass(const Tag &, const Renderable *); const Tag &get_tag() const { return tag; } @@ -65,6 +66,7 @@ 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 Renderable *get_renderable() const { return renderable; } }; private: @@ -116,11 +118,17 @@ public: void set_multisample(unsigned); void set_camera(const Camera *); + // Deprecated 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 &); + + /** Adds a pass to the pipeline. It's permissible to add the same + Renderable multiple times. */ + Pass &add_pass(const Tag &, const Renderable &); + + /** Adds a postprocessor to the pipeline. */ void add_postprocessor(PostProcessor &); virtual void setup_frame() const;