]> git.tdb.fi Git - libs/gl.git/blobdiff - source/matrix.h
Add support for playing multiple stacked animations on an object
[libs/gl.git] / source / matrix.h
index a2194916e52d80a8e7cd322b1af93e0b3871d223..6aae6df0a0e5f2a494e570932f044cb64c89d8de 100644 (file)
@@ -1,15 +1,9 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_GL_MATRIX_H_
 #define MSP_GL_MATRIX_H_
 
-#include <list>
+#include <vector>
 #include "gl.h"
+#include "vector.h"
 
 namespace Msp {
 namespace GL {
@@ -41,18 +35,25 @@ public:
 
        void multiply(const Matrix &);
        void translate(double, double, double);
+       void translate(const Vector3 &t) { translate(t.x, t.y, t.z); }
        void rotate(double, double, double, double);
+       void rotate(double a, const Vector3 &x) { rotate(a, x.x, x.y, x.z); }
        void rotate_deg(double, double, double, double);
+       void rotate_deg(double a, const Vector3 & x) { rotate_deg(a, x.x, x.y, x.z); }
        void scale(double);
        void scale(double, double, double);
 
        Matrix operator*(const Matrix &) const;
        Matrix &operator*=(const Matrix &);
+       Vector4 operator*(const Vector4 &) const;
        double operator[](unsigned) const;
 
        static Matrix translation(double, double, double);
+       static Matrix translation(const Vector3 &t) { return translation(t.x, t.y, t.z); }
        static Matrix rotation(double, double, double, double);
+       static Matrix rotation(double a, const Vector3 &x) { return rotation(a, x.x, x.y, x.z); }
        static Matrix rotation_deg(double, double, double, double);
+       static Matrix rotation_deg(double a, const Vector3 &x) { return rotation_deg(a, x.x, x.y, x.z); }
        static Matrix scaling(double);
        static Matrix scaling(double, double, double);
 
@@ -80,7 +81,7 @@ public:
 
 private:
        GLenum mode;
-       std::list<Matrix> matrices;
+       std::vector<Matrix> matrices;
 
        static GLenum current_mode;
 
@@ -90,13 +91,13 @@ private:
 public:
        MatrixStack();
 
-       const Matrix &top();
+       const Matrix &top() const;
        void load(const Matrix &);
        void multiply(const Matrix &);
        void push();
        void pop();
 private:
-       void update();
+       virtual void update();
 
 public:
        MatrixStack &operator=(const Matrix &);
@@ -106,38 +107,6 @@ public:
        static MatrixStack &projection();
 };
 
-
-/* The stuff below is deprecated and preserved (for now) only for compatibility
-with existing applications */
-
-enum MatrixMode
-{
-       MODELVIEW = GL_MODELVIEW,
-       PROJECTION = GL_PROJECTION,
-       TEXTURE = GL_TEXTURE
-};
-
-void matrix_mode(MatrixMode);
-void load_identity();
-void load_matrix(const float *);
-void load_matrix(const double *);
-void mult_matrix(const float *);
-void mult_matrix(const double *);
-void push_matrix();
-void pop_matrix();
-
-/// RAII object - pushes matrix when constructed and pops when destroyed
-struct PushMatrix
-{
-       PushMatrix() { push_matrix(); }
-       ~PushMatrix() { pop_matrix(); }
-};
-
-void translate(float, float, float);
-void rotate(float, float, float, float);
-void scale(float, float, float);
-void scale_uniform(float);
-
 } // namespace GL
 } // namespace Msp