]> git.tdb.fi Git - libs/gl.git/blobdiff - source/placeable.h
Add a new Placeable base class
[libs/gl.git] / source / placeable.h
diff --git a/source/placeable.h b/source/placeable.h
new file mode 100644 (file)
index 0000000..2879f97
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef MSP_GL_PLACEABLE_H_
+#define MSP_GL_PLACEABLE_H_
+
+#include "matrix.h"
+#include "renderable.h"
+
+namespace Msp {
+namespace GL {
+
+/**
+A base class for things that can be positioned and oriented in 3D space.
+*/
+class Placeable
+{
+protected:
+       Matrix matrix;
+
+       Placeable() { }
+
+public:
+       virtual void set_matrix(const Matrix &);
+
+       /** Returns the Placeable's matrix.  This function returns a pointer for
+       compatibility with Renderable.  The returned pointer is never null. */
+       virtual const Matrix *get_matrix() const { return &matrix; }
+};
+
+
+class PlacedRenderable: public Renderable, public Placeable
+{
+protected:
+       PlacedRenderable() { }
+
+public:
+       /* Reimplement to clear ambiguity between Renderable and Placeable.  This
+       overrides both base classes' implementations. */
+       virtual const Matrix *get_matrix() const { return &matrix; }
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif