diff options
Diffstat (limited to 'src/3rdparty/angle/src/common/matrix_utils.h')
-rw-r--r-- | src/3rdparty/angle/src/common/matrix_utils.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/3rdparty/angle/src/common/matrix_utils.h b/src/3rdparty/angle/src/common/matrix_utils.h index 6f3187c3e8..aa3f89536e 100644 --- a/src/3rdparty/angle/src/common/matrix_utils.h +++ b/src/3rdparty/angle/src/common/matrix_utils.h @@ -16,6 +16,7 @@ #include <vector> #include "common/debug.h" +#include "common/mathutil.h" namespace angle { @@ -337,6 +338,42 @@ class Matrix return result; } + void setToIdentity() + { + ASSERT(rows() == columns()); + + const auto one = T(1); + const auto zero = T(0); + + for (auto &e : mElements) + e = zero; + + for (unsigned int i = 0; i < rows(); ++i) + { + const auto pos = i * columns() + (i % columns()); + mElements[pos] = one; + } + } + + template <unsigned int Size> + static void setToIdentity(T(&matrix)[Size]) + { + static_assert(gl::iSquareRoot<Size>() != 0, "Matrix is not square."); + + const auto cols = gl::iSquareRoot<Size>(); + const auto one = T(1); + const auto zero = T(0); + + for (auto &e : matrix) + e = zero; + + for (unsigned int i = 0; i < cols; ++i) + { + const auto pos = i * cols + (i % cols); + matrix[pos] = one; + } + } + private: std::vector<T> mElements; unsigned int mRows; |