X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpipeline.h;h=c14245fa9d83b81c637c4fc530223db9477ea3a0;hb=5eb4e7ebd0dc36bc0d9817dedcc152f3bd581f70;hp=bc793887695b2db51676d979522faf7f680842fc;hpb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8;p=libs%2Fgl.git diff --git a/source/pipeline.h b/source/pipeline.h index bc793887..c14245fa 100644 --- a/source/pipeline.h +++ b/source/pipeline.h @@ -3,21 +3,44 @@ #include #include -#include "pipelinepass.h" #include "renderable.h" namespace Msp { namespace GL { +class Blend; class Camera; -class Effect; +class DepthTest; class Framebuffer; +class Lighting; class PostProcessor; class Renderbuffer; class Texture2D; class Pipeline: public Renderable { +public: + class Pass + { + private: + Tag tag; + const Lighting *lighting; + const DepthTest *depth_test; + const Blend *blend; + + 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 *); + const Lighting *get_lighting() const { return lighting; } + const DepthTest *get_depth_test() const { return depth_test; } + const Blend *get_blend() const { return blend; } + }; + private: struct Slot { @@ -27,13 +50,11 @@ private: Slot(const Renderable *); }; - typedef std::map PassMap; + typedef std::list PassList; - PassMap passes; - std::vector pass_order; + PassList passes; const Camera *camera; std::vector renderables; - std::vector effects; std::vector postproc; unsigned width; unsigned height; @@ -54,18 +75,15 @@ public: void set_multisample(unsigned); void set_camera(const Camera *); - PipelinePass &add_pass(const Tag &tag); - PipelinePass &get_pass(const Tag &tag); - const PipelinePass &get_pass(const Tag &tag) const; + 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_effect(Effect &); void add_postprocessor(PostProcessor &); + virtual void render(const Tag &tag = Tag()) const; virtual void render(Renderer &, const Tag &tag = Tag()) const; - void render_all() const; private: void create_fbos();