]> git.tdb.fi Git - libs/gl.git/commitdiff
Add a new Placeable base class
authorMikko Rasa <tdb@tdb.fi>
Wed, 8 Nov 2017 06:42:24 +0000 (08:42 +0200)
committerMikko Rasa <tdb@tdb.fi>
Wed, 8 Nov 2017 06:42:24 +0000 (08:42 +0200)
source/animatedobject.cpp
source/animatedobject.h
source/objectinstance.h
source/placeable.cpp [new file with mode: 0644]
source/placeable.h [new file with mode: 0644]

index 269665f6d12ff834a6f2827fba10c444bfb2fad5..d2157fd1bc128ebc6dd676ef0cc10c54b9204e5c 100644 (file)
@@ -26,11 +26,6 @@ AnimatedObject::~AnimatedObject()
        delete shdata;
 }
 
-void AnimatedObject::set_matrix(const Matrix &m)
-{
-       matrix = m;
-}
-
 void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m)
 {
        if(shdata)
index b7f480054275d44148ca714c659af2ad548ce0d2..23333ee53dfb4e5e347c97ed97d7c05b033e737a 100644 (file)
@@ -11,8 +11,7 @@ namespace Msp {
 namespace GL {
 
 /**
-An object instance that can be animated.  Despite the name, this can also be
-useful for displaying objects at a static position.
+An object instance that can be animated by an AnimationPlayer.
 */
 class AnimatedObject: public ObjectInstance
 {
@@ -30,7 +29,6 @@ public:
        };
 
 private:
-       Matrix matrix;
        std::vector<float> pose_data;
        ProgramData *shdata;
 
@@ -38,7 +36,6 @@ public:
        AnimatedObject(const Object &);
        ~AnimatedObject();
 
-       void set_matrix(const Matrix &);
        void set_pose_matrix(unsigned, const Matrix &);
        void set_uniform(const std::string &, const KeyFrame::AnimatedUniform &);
 
index 6a8749766f39ca08223c07d8971435c3abe1eebb..273d348579b4b8a34e71d2ebcb33a73f9394c60b 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <string>
 #include "object.h"
-#include "renderable.h"
+#include "placeable.h"
 
 namespace Msp {
 namespace GL {
@@ -11,14 +11,14 @@ namespace GL {
 class ProgramData;
 
 /**
-Represents a single instance of an Object.  A derived class can overload the
-hook functions to specify a model matrix and other instance-specific parameters
-for the rendered objects.
+Represents a single instance of an Object.  Thanks to being derived from
+Placeable in can be positioned without additional effort.  Other instance
+parameters can be set by overriding the hook functions.
 
 ObjectInstances can benefit from being put in an InstanceScene, which will
 render all instances of the same object consecutively.
 */
-class ObjectInstance: public Renderable
+class ObjectInstance: public PlacedRenderable
 {
 protected:
        const Object &object;
diff --git a/source/placeable.cpp b/source/placeable.cpp
new file mode 100644 (file)
index 0000000..c7ea792
--- /dev/null
@@ -0,0 +1,12 @@
+#include "placeable.h"
+
+namespace Msp {
+namespace GL {
+
+void Placeable::set_matrix(const Matrix &m)
+{
+       matrix = m;
+}
+
+} // namespace GL
+} // namespace Msp
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