From: Mikko Rasa Date: Fri, 4 Dec 2015 12:07:29 +0000 (+0200) Subject: Move some common matrix operations to the header so they can be inlined X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=856ed578b7b7b79f2156b3e2b94bdea31d8fe2db;p=libs%2Fgl.git Move some common matrix operations to the header so they can be inlined --- diff --git a/source/matrix.cpp b/source/matrix.cpp index ddc0cdf5..a4c36a02 100644 --- a/source/matrix.cpp +++ b/source/matrix.cpp @@ -22,12 +22,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 +37,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) diff --git a/source/matrix.h b/source/matrix.h index 95932bc6..2e1096f5 100644 --- a/source/matrix.h +++ b/source/matrix.h @@ -23,7 +23,7 @@ public: const float *data() const { return &Base::operator()(0, 0); } - Matrix &multiply(const Matrix &); + Matrix &multiply(const Matrix &m) { return operator*=(m); } Matrix &translate(float x, float y, float z) { return translate(Vector3(x, y, z)); } Matrix &translate(const Vector3 &); Matrix &rotate(const Angle &a, float x, float y, float z) { return rotate(a, Vector3(x, y, z)); } @@ -36,10 +36,10 @@ public: Matrix &scale(float x, float y, float z) { return scale(Vector3(x, y, z)); } Matrix &scale(const Vector3 &); - Matrix operator*(const Matrix &) const; - Matrix &operator*=(const Matrix &); - Vector4 operator*(const Vector4 &) const; - Vector3 operator*(const Vector3 &) const; + Matrix operator*(const Matrix &m) const { return static_cast(*this)*static_cast(m); } + Matrix &operator*=(const Matrix &m) { Base::operator*=(m); return *this; } + Vector4 operator*(const Vector4 &v) const { return static_cast(*this)*v; } + Vector3 operator*(const Vector3 &v) const { return ((*this)*compose(v, 1.0f)).slice<3>(0); } float operator[](unsigned) const; static Matrix translation(float x, float y, float z) { return translation(Vector3(x, y, z)); }