X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Feffect.h;h=c55aebf95a5c0363e459a4c010fa79c89ad018e0;hp=f5c740ff5eb0d328a0125b8cb251cab4d4fe43af;hb=6b0a93110454cc8d84d0d9b9b29fe9d0ecbaa4d5;hpb=4acc43935d3b19bae688e89ed42119e326a26f2d diff --git a/source/effect.h b/source/effect.h index f5c740ff..c55aebf9 100644 --- a/source/effect.h +++ b/source/effect.h @@ -1,16 +1,35 @@ #ifndef MSP_GL_EFFECT_H_ #define MSP_GL_EFFECT_H_ +#include +#include "renderable.h" + namespace Msp { namespace GL { -class Effect +/** +Effects are used to wrap other renderables and give them additional visual +properties. An Effect's render method should set up the necessary state, call +the wrapped Renderable's render method, and clean up after itself. +*/ +class Effect: public Renderable { +protected: + Renderable &renderable; + std::set enabled_passes; + + Effect(Renderable &); public: virtual ~Effect() { } - virtual void prepare() = 0; - virtual void cleanup() = 0; + void enable_for_pass(const Tag &); + void disable_for_pass(const Tag &); + + virtual const Matrix *get_matrix() const { return renderable.get_matrix(); } + virtual const Geometry::BoundingSphere *get_bounding_sphere() const { return renderable.get_bounding_sphere(); } + + virtual void setup_frame(Renderer &r) { renderable.setup_frame(r); } + virtual void finish_frame() { renderable.finish_frame(); } }; } // namespace GL