]> git.tdb.fi Git - libs/gl.git/blob - source/placeable.h
Add the specializations for non-square matrix uniforms
[libs/gl.git] / source / placeable.h
1 #ifndef MSP_GL_PLACEABLE_H_
2 #define MSP_GL_PLACEABLE_H_
3
4 #include "matrix.h"
5 #include "renderable.h"
6
7 namespace Msp {
8 namespace GL {
9
10 /**
11 A base class for things that can be positioned and oriented in 3D space.
12 */
13 class Placeable
14 {
15 protected:
16         Matrix matrix;
17
18         Placeable() { }
19 public:
20         virtual ~Placeable() { }
21
22         virtual void set_matrix(const Matrix &);
23
24         /** Returns the Placeable's matrix.  This function returns a pointer for
25         compatibility with Renderable.  The returned pointer is never null. */
26         virtual const Matrix *get_matrix() const { return &matrix; }
27 };
28
29
30 class PlacedRenderable: public Renderable, public Placeable
31 {
32 protected:
33         PlacedRenderable() { }
34
35 public:
36         /* Reimplement to clear ambiguity between Renderable and Placeable.  This
37         overrides both base classes' implementations. */
38         virtual const Matrix *get_matrix() const { return &matrix; }
39 };
40
41 } // namespace GL
42 } // namespace Msp
43
44 #endif