X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Feffect.h;fp=source%2Feffects%2Feffect.h;h=bc9e19ec818f2a392889866bdf36428c7c00024b;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/effects/effect.h b/source/effects/effect.h new file mode 100644 index 00000000..bc9e19ec --- /dev/null +++ b/source/effects/effect.h @@ -0,0 +1,48 @@ +#ifndef MSP_GL_EFFECT_H_ +#define MSP_GL_EFFECT_H_ + +#include +#include +#include "renderable.h" + +namespace Msp { +namespace GL { + +class Sampler; + +/** +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; + +private: + static WeakPtr linear_sampler; + +protected: + Effect(Renderable &); +public: + 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 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(); } + +protected: + static RefPtr get_linear_sampler(); +}; + +} // namespace GL +} // namespace Msp + +#endif