X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fplaceable.h;fp=source%2Fplaceable.h;h=2879f97550d69f6bb0f66bfb918a9fdb5291757a;hp=0000000000000000000000000000000000000000;hb=00d926c3fe134820139a925cfac28cd64729db93;hpb=fa658c8500fb0c368a8299bd1210688640b50352 diff --git a/source/placeable.h b/source/placeable.h new file mode 100644 index 00000000..2879f975 --- /dev/null +++ b/source/placeable.h @@ -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