From e597ad489f1a070a298e03ab32c0c3658c05d7bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 30 Dec 2010 22:11:52 +0100 Subject: [PATCH] Added Matrix3 specialization (will be needed for normals, lighting etc.). --- src/AbstractShaderProgram.h | 5 +++++ src/Magnum.h | 9 ++++++++ src/Math/Matrix3.h | 41 +++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 src/Math/Matrix3.h diff --git a/src/AbstractShaderProgram.h b/src/AbstractShaderProgram.h index 24bce68a8..3202298a3 100644 --- a/src/AbstractShaderProgram.h +++ b/src/AbstractShaderProgram.h @@ -164,6 +164,11 @@ class AbstractShaderProgram { glUniform4fv(location, 1, value.data()); } + /** @copydoc setUniform(GLint, GLint) */ + void setUniform(GLint location, const Matrix3& value) { + glUniformMatrix3fv(location, 1, GL_FALSE, value.data()); + } + /** @copydoc setUniform(GLint, GLint) */ void setUniform(GLint location, const Matrix4& value) { glUniformMatrix4fv(location, 1, GL_FALSE, value.data()); diff --git a/src/Magnum.h b/src/Magnum.h index a80fe83ed..aa96d4a37 100644 --- a/src/Magnum.h +++ b/src/Magnum.h @@ -21,13 +21,22 @@ #include +#include "Math/Matrix3.h" #include "Math/Matrix4.h" #include "Math/Vector4.h" namespace Magnum { +/** @brief Three-component floating-point vector */ typedef Math::Vector3 Vector3; + +/** @brief Four-component floating-point vector */ typedef Math::Vector4 Vector4; + +/** @brief 3x3 floating-point matrix */ +typedef Math::Matrix3 Matrix3; + +/** @brief 4x4 floating-point matrix */ typedef Math::Matrix4 Matrix4; /** diff --git a/src/Math/Matrix3.h b/src/Math/Matrix3.h new file mode 100644 index 000000000..183f98a5a --- /dev/null +++ b/src/Math/Matrix3.h @@ -0,0 +1,41 @@ +#ifndef Magnum_Math_Matrix3_h +#define Magnum_Math_Matrix3_h +/* + Copyright © 2010 Vladimír Vondruš + + This file is part of Magnum. + + Magnum is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 3 + only, as published by the Free Software Foundation. + + Magnum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License version 3 for more details. +*/ + +/** @file + * @brief Class Magnum::Math::Matrix3 + */ + +#include "Matrix.h" + +namespace Magnum { namespace Math { + +/** @brief Matrix 3x3 */ +template class Matrix3: public Matrix { + public: + /** @copydoc Matrix::Matrix(bool) */ + inline Matrix3(bool identity = true): Matrix(identity) {} + + /** @copydoc Matrix::Matrix(const T*) */ + inline Matrix3(const T* data): Matrix(data) {} + + /** @copydoc Matrix::Matrix(const Matrix&) */ + inline Matrix3(const Matrix& other): Matrix(other) {} +}; + +}} + +#endif