summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/common/matrix_utils.h
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2018-10-26 10:28:24 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2018-10-26 10:28:24 +0000
commit00b2e45a97205975ee91aa43f00e3dbef1a8907b (patch)
treeed44e50bc893e87434d72470c2c809b1fb34de72 /src/3rdparty/angle/src/common/matrix_utils.h
parent9cd527bc1f384926985d63c741641316a66f17a4 (diff)
parente28e91ae99b8c3859899e04cc9370534c7c7b86d (diff)
Merge "Merge remote-tracking branch 'origin/5.12' into dev" into refs/staging/dev
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;