X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fmatrix.cpp;h=311958ab99542574edfe3cda35059d0eade1b24b;hp=ddc0cdf58c8ac64c72e1d830e6226f0edc2dcfa7;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hpb=d8234c16eea3631c1b6e2c10f391ec86d9b97bfa diff --git a/source/matrix.cpp b/source/matrix.cpp index ddc0cdf5..311958ab 100644 --- a/source/matrix.cpp +++ b/source/matrix.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include "error.h" #include "matrix.h" @@ -22,12 +21,6 @@ Matrix::Matrix(const LinAl::Matrix &other): Base(other) { } -Matrix &Matrix::multiply(const Matrix &other) -{ - *this = *this*other; - return *this; -} - Matrix &Matrix::translate(const Vector3 &t) { return multiply(translation(t)); @@ -43,26 +36,6 @@ Matrix &Matrix::scale(const Vector3 &s) return multiply(scaling(s)); } -Matrix Matrix::operator*(const Matrix &other) const -{ - return static_cast(*this)*static_cast(other); -} - -Matrix &Matrix::operator*=(const Matrix &other) -{ - return multiply(other); -} - -Vector4 Matrix::operator*(const Vector4 &vec) const -{ - return static_cast(*this)*LinAl::Vector(vec); -} - -Vector3 Matrix::operator*(const Vector3 &vec) const -{ - return ((*this)*compose(vec, 1.0f)).slice<3>(0); -} - float Matrix::operator[](unsigned i) const { if(i>=16) @@ -143,93 +116,5 @@ Matrix Matrix::perspective(const Angle &h, float a, float n, float f) return frustum(-hh*a, hh*a, -hh, hh, n, f); } - -GLenum MatrixStack::current_mode = GL_MODELVIEW; - -MatrixStack::MatrixStack(GLenum m): - mode(m) -{ - matrices.reserve(mode==GL_MODELVIEW ? 32 : 4); - matrices.push_back(Matrix()); -} - -MatrixStack::MatrixStack(): - mode(0) -{ - matrices.reserve(32); - matrices.push_back(Matrix()); -} - -const Matrix &MatrixStack::top() const -{ - return matrices.back(); -} - -void MatrixStack::load(const Matrix &m) -{ - matrices.back() = m; - update(); -} - -void MatrixStack::multiply(const Matrix &m) -{ - matrices.back() *= m; - update(); -} - -void MatrixStack::push() -{ - matrices.push_back(top()); -} - -void MatrixStack::pop() -{ - if(matrices.size()==1) - throw stack_underflow("MatrixStack::pop()"); - - matrices.pop_back(); - update(); -} - -void MatrixStack::update() -{ - if(!mode) - return; - - static Require _req(MSP_legacy_features); - - if(mode!=current_mode) - { - glMatrixMode(mode); - current_mode = mode; - } - - glLoadMatrixf(matrices.back().data()); -} - -MatrixStack &MatrixStack::operator=(const Matrix &m) -{ - load(m); - return *this; -} - -MatrixStack &MatrixStack::operator*=(const Matrix &m) -{ - multiply(m); - return *this; -} - -MatrixStack &MatrixStack::modelview() -{ - static MatrixStack ms(GL_MODELVIEW); - return ms; -} - -MatrixStack &MatrixStack::projection() -{ - static MatrixStack ms(GL_PROJECTION); - return ms; -} - } // namespace GL } // namespace Msp