X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fpipeline.h;h=e8ffaf5ee46f3bcc3500143769e9c4ab2744ab42;hp=d2ce6ab88adc0cd8993e9ad1e68402fb1a001723;hb=HEAD;hpb=a1c39449fccf03ec08787bf51d62bf3b4cb60f69 diff --git a/source/pipeline.h b/source/pipeline.h deleted file mode 100644 index d2ce6ab8..00000000 --- a/source/pipeline.h +++ /dev/null @@ -1,147 +0,0 @@ -#ifndef MSP_GL_PIPELINE_H_ -#define MSP_GL_PIPELINE_H_ - -#include -#include -#include "framebuffer.h" -#include "renderable.h" -#include "renderbuffer.h" -#include "rendertarget.h" -#include "texture2d.h" - -namespace Msp { -namespace GL { - -class Blend; -class Camera; -class Clipping; -class DepthTest; -class Lighting; -class PostProcessor; -class View; - -/** -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 -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 -the PostProcessors. High dynamic range and multisample rendering can be -requested for increased quality. -*/ -class Pipeline: public Renderable -{ -public: - class Pass - { - private: - Tag tag; - const Lighting *lighting; - const DepthTest *depth_test; - const Blend *blend; - const Clipping *clipping; - Renderable *renderable; - - public: - Pass(const Tag &, Renderable *); - - 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; } - Renderable *get_renderable() const { return renderable; } - }; - -private: - struct Slot - { - Renderable *renderable; - std::set passes; - - Slot(Renderable *); - }; - - typedef std::list PassList; - - PassList passes; - const Camera *camera; - std::vector renderables; - std::vector > postproc; - unsigned width; - unsigned height; - bool hdr; - bool alpha; - unsigned samples; - RenderTarget *target[2]; - RenderTarget *target_ms; - -public: - Pipeline(unsigned, unsigned, bool = false); - Pipeline(const View &); - Pipeline(const Framebuffer &); -private: - void init(unsigned, unsigned); -public: - ~Pipeline(); - - /* Sets high dynamic range mode. Requires floating-point texture support. - A ColorCurve postprocessor is recommended for full benefit. */ - void set_hdr(bool); - - /* Enable or disable alpha channel. When enabled, all render targets are - created with an RGBA pixel format instead of RGB. */ - void set_alpha(bool); - - void set_multisample(unsigned); - - unsigned get_width() const { return width; } - unsigned get_height() const { return height; } - bool get_hdr() const { return hdr; } - unsigned get_multisample() const { return samples; } - - // Deprecated - void set_camera(const Camera *); - Pass &add_pass(const Tag &tag); - 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. */ - Pass &add_pass(const Tag &, Renderable &); - - /** Adds a postprocessor to the pipeline. */ - void add_postprocessor(PostProcessor &); - - /** Adds a postprocessor to the pipeline, transferring ownership. The - postprocessor will be deleted together with with pipeline. It is also - deleted if this call throws an exception. */ - void add_postprocessor_owned(PostProcessor *); - -private: - void add_postprocessor(PostProcessor *, bool); - -public: - virtual void setup_frame(Renderer &); - virtual void finish_frame(); - - virtual void render(Renderer &, const Tag &tag = Tag()) const; - -private: - void create_targets(unsigned); -}; - -} // namespace GL -} // namespace Msp - -#endif