X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fmatrix.h;h=2e1096f5f4586d7f6c05ea0620f59a5425b4b450;hp=e32df7e3872ea6ea270ecfe0d13e8fe25db82d9c;hb=HEAD;hpb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8 diff --git a/source/matrix.h b/source/matrix.h deleted file mode 100644 index e32df7e3..00000000 --- a/source/matrix.h +++ /dev/null @@ -1,145 +0,0 @@ -#ifndef MSP_GL_MATRIX_H_ -#define MSP_GL_MATRIX_H_ - -#include -#include "gl.h" -#include "vector.h" - -namespace Msp { -namespace GL { - -class Matrix -{ -private: - enum Flags - { - IDENTITY = 0, - TRANSLATE = 1, - ROTATE = 2, - SCALE = 4, - ARBITARY = 8 - }; - - double matrix[16]; - unsigned flags; - -public: - Matrix(); - Matrix(const float *); - Matrix(const double *); -private: - void check_flags(); - -public: - const double *data() const { return matrix; } - - 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); - - static Matrix ortho(double, double, double, double, double, double); - static Matrix ortho_centered(double, double); - static Matrix ortho_bottomleft(double, double); - static Matrix ortho_topleft(double, double); - static Matrix frustum(double, double, double, double, double, double); - static Matrix frustum_centered(double, double, double, double); - static Matrix perspective(double, double, double, double); -}; - -class MatrixStack -{ -public: - class Push - { - private: - MatrixStack &stack; - - public: - Push(MatrixStack &s): stack(s) { stack.push(); } - ~Push() { stack.pop(); } - }; - -private: - GLenum mode; - std::list matrices; - - static GLenum current_mode; - - MatrixStack(const MatrixStack &); - MatrixStack &operator=(const MatrixStack &); - MatrixStack(GLenum); -public: - MatrixStack(); - - const Matrix &top() const; - void load(const Matrix &); - void multiply(const Matrix &); - void push(); - void pop(); -private: - virtual void update(); - -public: - MatrixStack &operator=(const Matrix &); - MatrixStack &operator*=(const Matrix &); - - static MatrixStack &modelview(); - 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 - -#endif