X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Fsequence.h;h=e1ad77bde8baf8f6b23aff926da02f2c8e1dffd4;hp=fb60e37159f7a4220753b093548afc2d9e6b1023;hb=d4e380914f02800b7d915a8748ac9ccd7029bc3b;hpb=e72f81ac7f8708daab71965cfc9949ea64fd8a94 diff --git a/source/render/sequence.h b/source/render/sequence.h index fb60e371..e1ad77bd 100644 --- a/source/render/sequence.h +++ b/source/render/sequence.h @@ -3,10 +3,12 @@ #include #include +#include "blend.h" +#include "depthtest.h" #include "framebuffer.h" #include "renderable.h" -#include "renderbuffer.h" #include "rendertarget.h" +#include "stenciltest.h" #include "texture2d.h" namespace Msp { @@ -15,10 +17,8 @@ namespace GL { class Blend; class Camera; class Clipping; -class DepthTest; class Lighting; class PostProcessor; -class View; /** Top-level content class. Typically a Sequence is used as the content @@ -42,8 +42,9 @@ public: private: Tag tag; const Lighting *lighting; - const DepthTest *depth_test; - const Blend *blend; + DepthTest depth_test; + StencilTest stencil_test; + Blend blend; const Clipping *clipping; Renderable *renderable; @@ -53,60 +54,48 @@ public: Tag get_tag() const { return tag; } void set_lighting(const Lighting *); - void set_depth_test(const DepthTest *); - void set_blend(const Blend *); + void set_depth_test(const DepthTest &); + void set_stencil_test(const StencilTest &); + 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 DepthTest &get_depth_test() const { return depth_test; } + const StencilTest &get_stencil_test() const { return stencil_test; } + const Blend &get_blend() const { return blend; } const Clipping *get_clipping() const { return clipping; } Renderable *get_renderable() const { return renderable; } }; - DEPRECATED typedef Step Pass; - private: + struct PostProcStep + { + PostProcessor *postproc; + bool owned; + + PostProcStep(PostProcessor *pp, bool o): postproc(pp), owned(o) { } + }; + std::vector steps; - const Camera *camera; - std::vector > postproc; + std::vector postproc; unsigned width; unsigned height; - bool hdr; - bool alpha; - unsigned samples; + FrameFormat target_format; RenderTarget *target[2]; RenderTarget *target_ms; public: - Sequence(unsigned, unsigned, bool = false); - Sequence(const View &); - Sequence(const Framebuffer &); -private: - void init(unsigned, unsigned); -public: + Sequence(); + Sequence(unsigned, unsigned, const FrameFormat &); ~Sequence(); - /* 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; } + const FrameFormat &get_target_format() { return target_format; } /** Adds a step to the sequence. It's permissible to add the same Renderable multiple times. */ Step &add_step(Tag, Renderable &); - DEPRECATED Step &add_pass(Tag t, Renderable &r) { return add_step(t, r); } - /** Adds a postprocessor to the sequence. */ void add_postprocessor(PostProcessor &); @@ -124,8 +113,7 @@ public: virtual void render(Renderer &, Tag tag = Tag()) const; -private: - void create_targets(unsigned); + void set_debug_name(const std::string &); }; } // namespace GL