X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffect.h;h=e99bc2576d9eb97220faed58f214b790779ab085;hb=dafd3a42a2f06bfd8e88f9240fc2f4bd3d401541;hp=9f49c81855d4ac749b2509dd12ac4b6e49871810;hpb=e17243fb2421977cb781361828b77718e2cf8d48;p=libs%2Fgl.git diff --git a/source/effect.h b/source/effect.h index 9f49c818..e99bc257 100644 --- a/source/effect.h +++ b/source/effect.h @@ -1,21 +1,34 @@ -/* $Id$ - -This file is part of libmspgl -Copyright © 2009 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #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: + const Renderable &renderable; + std::set enabled_passes; + + Effect(const Renderable &); public: - virtual void prepare() =0; - virtual void cleanup() =0; + virtual ~Effect() { } + + void enable_for_pass(const Tag &); + void disable_for_pass(const Tag &); + + virtual const Matrix *get_matrix() const { return renderable.get_matrix(); } + + virtual void setup_frame() const { renderable.setup_frame(); } + virtual void finish_frame() const { renderable.finish_frame(); } }; } // namespace GL