]> git.tdb.fi Git - libs/gl.git/blob - source/effects/effect.h
c43cda3a39303822361f23405b74bedf2dfbc635
[libs/gl.git] / source / effects / effect.h
1 #ifndef MSP_GL_EFFECT_H_
2 #define MSP_GL_EFFECT_H_
3
4 #include <set>
5 #include <msp/core/refptr.h>
6 #include "renderable.h"
7
8 namespace Msp {
9 namespace GL {
10
11 class Sampler;
12
13 /**
14 Effects are used to wrap other renderables and give them additional visual
15 properties.  An Effect's render method should set up the necessary state, call
16 the wrapped Renderable's render method, and clean up after itself.
17 */
18 class Effect: public Renderable
19 {
20 protected:
21         Renderable &renderable;
22         std::set<Tag> enabled_passes;
23
24 protected:
25         Effect(Renderable &);
26 public:
27         virtual ~Effect() { }
28
29         void enable_for_pass(Tag);
30         void disable_for_pass(Tag);
31
32         virtual const Matrix *get_matrix() const { return renderable.get_matrix(); }
33         virtual const Geometry::BoundingSphere<float, 3> *get_bounding_sphere() const { return renderable.get_bounding_sphere(); }
34
35         virtual void setup_frame(Renderer &r) { renderable.setup_frame(r); }
36         virtual void finish_frame() { renderable.finish_frame(); }
37 };
38
39 } // namespace GL
40 } // namespace Msp
41
42 #endif