Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-06-22 12:22:50 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-06-22 13:08:18 +0300
commit9921e10583d7a6ef735ecc069b2b78f97ca9c226 (patch)
treeb81905dd450267b0ef94ea95fe5c79b7aad3fa95 /intern/eigen
parentf3501a00e249bc4a7212be1f443704066dd43482 (diff)
Math: Set matrix to zero when inversion fails
Avoids usage of uninitialized memory when inversion fails. That uninitialized memory can cause object to become visible when it is supposed not to or other artifacts like that. Longer term solution would be to check every instance of invert_m# function and to explicit fallback when needed (possibly, using extra utility functions).
Diffstat (limited to 'intern/eigen')
-rw-r--r--intern/eigen/intern/matrix.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/intern/eigen/intern/matrix.cc b/intern/eigen/intern/matrix.cc
index 5e00540f27c..bcd5273fd74 100644
--- a/intern/eigen/intern/matrix.cc
+++ b/intern/eigen/intern/matrix.cc
@@ -48,6 +48,9 @@ bool EIG_invert_m4_m4(float inverse[4][4], const float matrix[4][4])
Matrix4f R;
bool invertible = true;
M.computeInverseWithCheck(R, invertible, 0.0f);
+ if (!invertible) {
+ R = R.Zero();
+ }
memcpy(inverse, R.data(), sizeof(float)*4*4);
return invertible;
}