summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/common/matrix_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/common/matrix_utils.h')
-rw-r--r--src/3rdparty/angle/src/common/matrix_utils.h37
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;