X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fpipeline.h;h=e8ffaf5ee46f3bcc3500143769e9c4ab2744ab42;hp=2c61a53791ae02ce36e3aa8c97cc68fda3b94b95;hb=HEAD;hpb=cdfdcecd046c494470bfb4cc1de66f6cfca5efec diff --git a/source/pipeline.h b/source/pipeline.h deleted file mode 100644 index 2c61a537..00000000 --- a/source/pipeline.h +++ /dev/null @@ -1,139 +0,0 @@ -#ifndef MSP_GL_PIPELINE_H_ -#define MSP_GL_PIPELINE_H_ - -#include -#include -#include "framebuffer.h" -#include "renderable.h" -#include "renderbuffer.h" -#include "texture2d.h" - -namespace Msp { -namespace GL { - -class Blend; -class Camera; -class Clipping; -class DepthTest; -class Lighting; -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. - -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'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. -*/ -class Pipeline: public Renderable -{ -public: - class Pass - { - private: - Tag tag; - const Lighting *lighting; - const DepthTest *depth_test; - const Blend *blend; - const Clipping *clipping; - - public: - Pass(const Tag &); - - const Tag &get_tag() const { return tag; } - - void set_lighting(const Lighting *); - void set_depth_test(const DepthTest *); - void set_blend(const Blend *); - void set_clipping(const Clipping *); - const Lighting *get_lighting() const { return lighting; } - const DepthTest *get_depth_test() const { return depth_test; } - const Blend *get_blend() const { return blend; } - const Clipping *get_clipping() const { return clipping; } - }; - -private: - struct Slot - { - const Renderable *renderable; - std::set 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); - }; - - typedef std::list PassList; - - PassList passes; - const Camera *camera; - std::vector renderables; - std::vector postproc; - unsigned width; - unsigned height; - bool hdr; - unsigned samples; - RenderTarget *target[2]; - MultisampleTarget *target_ms; - mutable bool in_frame; - -public: - Pipeline(unsigned, unsigned, bool = false); - ~Pipeline(); - - void set_hdr(bool); - void set_multisample(unsigned); - void set_camera(const Camera *); - - 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_postprocessor(PostProcessor &); - - virtual void setup_frame() const; - virtual void finish_frame() const; - - virtual void render(const Tag &tag = Tag()) const; - virtual void render(Renderer &, const Tag &tag = Tag()) const; - -private: - void create_targets(unsigned); -}; - -} // namespace GL -} // namespace Msp - -#endif