[Bf-blender-cvs] [8ecdbe5] soc-2014-viewport_fx: (Revision 1) New Matrix and Vector Operations for Viewport FX

Jason Wilkins noreply at git.blender.org
Fri Jun 27 05:45:23 CEST 2014


Commit: 8ecdbe5f9861b992e1d467833a435c3fb6080348
Author: Jason Wilkins
Date:   Thu Jun 26 22:45:03 2014 -0500
https://developer.blender.org/rB8ecdbe5f9861b992e1d467833a435c3fb6080348

(Revision 1) New Matrix and Vector Operations for Viewport FX

Addressed concerns:
"Using const with multi-dimensional arrays gives warnings in GCC/Clang"
"This so short that I dont think its even copyrightable, (cross product and some assignments)"
"all other functions have mul_ prefix. why difference?"

I also cleaned up some whitespace.

Have not addressed concerns about the name of scale_m4 or the generality/compatibility of translate_m4.

===================================================================

M	source/blender/blenlib/BLI_math_matrix.h
M	source/blender/blenlib/intern/math_matrix.c

===================================================================

diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index a980e98..e99518a 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -30,8 +30,6 @@
  *  \ingroup bli
  */
 
-#include "BLI_utildefines.h" // for restrict
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -57,10 +55,10 @@ void zero_m4(float R[4][4]);
 void unit_m3(float R[3][3]);
 void unit_m4(float R[4][4]);
 
-void copy_m3_m3(float R[3][3], const float A[3][3]);
-void copy_m4_m4(float R[4][4], const float A[4][4]);
-void copy_m3_m4(float R[3][3], const float A[4][4]);
-void copy_m4_m3(float R[4][4], const float A[3][3]);
+void copy_m3_m3(float R[3][3], float A[3][3]);
+void copy_m4_m4(float R[4][4], float A[4][4]);
+void copy_m3_m4(float R[3][3], float A[4][4]);
+void copy_m4_m3(float R[4][4], float A[3][3]);
 
 /* double->float */
 void copy_m3_m3d(float R[3][3], double A[3][3]);
@@ -76,14 +74,14 @@ void add_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
 void sub_m3_m3m3(float R[3][3], float A[3][3], float B[3][3]);
 void sub_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
 
-void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3]);
-void mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4]);
-void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3]);
-void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4]);
-void mul_m3_m3m4(float R[3][3], const float A[4][4], const float B[3][3]);
+void mul_m3_m3m3(float R[3][3], float A[3][3], float B[3][3]);
+void mul_m4_m3m4(float R[4][4], float A[3][3], float B[4][4]);
+void mul_m4_m4m3(float R[4][4], float A[4][4], float B[3][3]);
+void mul_m4_m4m4(float R[4][4], float A[4][4], float B[4][4]);
+void mul_m3_m3m4(float R[3][3], float A[4][4], float B[3][3]);
 
-void mult_m4_m4m4_q(float m1[4][4], const float m3[4][4], const float m2[4][4]);
-void mult_m4_m3m4_q(float m1[4][4], const float m3[4][4], const float m2[3][3]);
+void mul_m4_m4m4_q(float m1[4][4], float m3[4][4], float m2[4][4]);
+void mul_m4_m3m4_q(float m1[4][4], float m3[4][4], float m2[3][3]);
 
 void mul_serie_m3(float R[3][3],
                   float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
@@ -97,11 +95,11 @@ void mul_v3_m4v3(float r[3], float M[4][4], const float v[3]);
 void mul_v2_m4v3(float r[2], float M[4][4], const float v[3]);
 void mul_v2_m2v2(float r[2], float M[2][2], const float v[2]);
 void mul_m2v2(float M[2][2], float v[2]);
-void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3]);
+void mul_v4_m4v3(float r[4], float M[4][4], const float v[3]);
 void mul_v3_m4v3_q(float r[3], float M[4][4], const float v[3]);
 void mul_mat3_m4_v3(float M[4][4], float r[3]);
-void mul_m4_v4(const float M[4][4], float r[4]);
-void mul_v4_m4v4(float r[4], const float M[4][4], const float v[4]);
+void mul_m4_v4(float M[4][4], float r[4]);
+void mul_v4_m4v4(float r[4], float M[4][4], const float v[4]);
 void mul_project_m4_v3(float M[4][4], float vec[3]);
 void mul_v2_project_m4_v3(float r[2], float M[4][4], const float vec[3]);
 
@@ -127,7 +125,7 @@ bool invert_m3_m3_ex(float m1[3][3], float m2[3][3], const float epsilon);
 bool invert_m3(float R[3][3]);
 bool invert_m3_m3(float R[3][3], float A[3][3]);
 bool invert_m4(float R[4][4]);
-bool invert_m4_m4(float R[4][4], const float A[4][4]);
+bool invert_m4_m4(float R[4][4], float A[4][4]);
 
 /* double ariphmetics */
 void mul_m4_v4d(float M[4][4], double r[4]);
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index b8576a4..eb73aba 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -62,18 +62,18 @@ void unit_m4(float m[4][4])
 	m[3][0] = m[3][1] = m[3][2] = 0.0;
 }
 
-void copy_m3_m3(float m1[3][3], const float m2[3][3])
+void copy_m3_m3(float m1[3][3], float m2[3][3])
 {
 	/* destination comes first: */
 	memcpy(&m1[0], &m2[0], 9 * sizeof(float));
 }
 
-void copy_m4_m4(float m1[4][4], const float m2[4][4])
+void copy_m4_m4(float m1[4][4], float m2[4][4])
 {
 	memcpy(m1, m2, 4 * 4 * sizeof(float));
 }
 
-void copy_m3_m4(float m1[3][3], const float m2[4][4])
+void copy_m3_m4(float m1[3][3], float m2[4][4])
 {
 	m1[0][0] = m2[0][0];
 	m1[0][1] = m2[0][1];
@@ -88,7 +88,7 @@ void copy_m3_m4(float m1[3][3], const float m2[4][4])
 	m1[2][2] = m2[2][2];
 }
 
-void copy_m4_m3(float m1[4][4], const float m2[3][3]) /* no clear */
+void copy_m4_m3(float m1[4][4], float m2[3][3]) /* no clear */
 {
 	m1[0][0] = m2[0][0];
 	m1[0][1] = m2[0][1];
@@ -160,7 +160,7 @@ void swap_m4m4(float m1[4][4], float m2[4][4])
 
 /******************************** Arithmetic *********************************/
 
-void mul_m4_m4m4(float m1[4][4], const float m3_[4][4], const float m2_[4][4])
+void mul_m4_m4m4(float m1[4][4], float m3_[4][4], float m2_[4][4])
 {
 	float m2[4][4], m3[4][4];
 
@@ -169,10 +169,10 @@ void mul_m4_m4m4(float m1[4][4], const float m3_[4][4], const float m2_[4][4])
 	copy_m4_m4(m3, m3_);
 
 	/* matrix product: m1[j][k] = m2[j][i].m3[i][k] */
-	mult_m4_m4m4_q(m1, m3, m2);
+	mul_m4_m4m4_q(m1, m3, m2);
 }
 
-void mul_m3_m3m3(float m1[3][3], const float m3_[3][3], const float m2_[3][3])
+void mul_m3_m3m3(float m1[3][3], float m3_[3][3], float m2_[3][3])
 {
 	float m2[3][3], m3[3][3];
 
@@ -194,7 +194,7 @@ void mul_m3_m3m3(float m1[3][3], const float m3_[3][3], const float m2_[3][3])
 	m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
 }
 
-void mul_m4_m4m3(float m1[4][4], const float m3_[4][4], const float m2_[3][3])
+void mul_m4_m4m3(float m1[4][4], float m3_[4][4], float m2_[3][3])
 {
 	float m2[3][3], m3[4][4];
 
@@ -214,7 +214,7 @@ void mul_m4_m4m3(float m1[4][4], const float m3_[4][4], const float m2_[3][3])
 }
 
 /* m1 = m2 * m3, ignore the elements on the 4th row/column of m3 */
-void mul_m3_m3m4(float m1[3][3], const float m3_[4][4], const float m2_[3][3])
+void mul_m3_m3m4(float m1[3][3], float m3_[4][4], float m2_[3][3])
 {
 	float m2[3][3], m3[4][4];
 
@@ -236,7 +236,7 @@ void mul_m3_m3m4(float m1[3][3], const float m3_[4][4], const float m2_[3][3])
 	m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
 }
 
-void mul_m4_m3m4(float m1[4][4], const float m3_[3][3], const float m2_[4][4])
+void mul_m4_m3m4(float m1[4][4], float m3_[3][3], float m2_[4][4])
 {
 	float m2[4][4], m3[3][3];
 
@@ -255,7 +255,7 @@ void mul_m4_m3m4(float m1[4][4], const float m3_[3][3], const float m2_[4][4])
 	m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
 }
 
-void mult_m4_m4m4_q(float m1[4][4], const float m3[4][4], const float m2[4][4])
+void mul_m4_m4m4_q(float m1[4][4], float m3[4][4], float m2[4][4])
 {
 	/* matrix product: m1[j][k] = m2[j][i].m3[i][k] */
 	m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0] + m2[0][3] * m3[3][0];
@@ -279,7 +279,7 @@ void mult_m4_m4m4_q(float m1[4][4], const float m3[4][4], const float m2[4][4])
 	m1[3][3] = m2[3][0] * m3[0][3] + m2[3][1] * m3[1][3] + m2[3][2] * m3[2][3] + m2[3][3] * m3[3][3];
 }
 
-void mult_m4_m3m4_q(float m1[4][4], const float m3[4][4], const float m2[3][3])
+void mul_m4_m3m4_q(float m1[4][4], float m3[4][4], float m2[3][3])
 {
 	/* matrix product: m1[j][k] = m2[j][i].m3[i][k] */
 	m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
@@ -434,7 +434,7 @@ void mul_m2v2(float mat[2][2], float vec[2])
 	mul_v2_m2v2(vec, mat, vec);
 }
 
-void mul_v4_m4v3(float out[4], const float mat[][4], const float vec[3])
+void mul_v4_m4v3(float out[4], float mat[][4], const float vec[3])
 {
 	out[0] = vec[0] * mat[0][0] + vec[1] * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
 	out[1] = vec[0] * mat[0][1] + vec[1] * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
@@ -481,7 +481,7 @@ void mul_v2_project_m4_v3(float r[2], float mat[4][4], const float vec[3])
 	r[1] /= w;
 }
 
-void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
+void mul_v4_m4v4(float r[4], float mat[4][4], const float v[4])
 {
 	float x, y, z;
 
@@ -495,7 +495,7 @@ void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
 	r[3] = x * mat[0][3] + y * mat[1][3] + z * mat[2][3] + mat[3][3] * v[3];
 }
 
-void mul_m4_v4(const float mat[4][4], float r[4])
+void mul_m4_v4(float mat[4][4], float r[4])
 {
 	mul_v4_m4v4(r, mat, r);
 }
@@ -760,7 +760,7 @@ bool invert_m4(float m[4][4])
  *					Mark Segal - 1992
  */
 
-bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
+bool invert_m4_m4(float inverse[4][4], float mat[4][4])
 {
 	int i, j, k;
 	double temp;
@@ -2227,63 +2227,25 @@ void pseudoinverse_m4_m4(float Ainv[4][4], float A[4][4], float epsilon)
 	mul_serie_m4(Ainv, U, Wm, V, NULL, NULL, NULL, NULL, NULL);
 }
 
-
 void mat4_ortho_set(float m[][4], float left, float right, float bottom, float top, float nearVal, float farVal)
 {
-    m[0][0] = 2.0f/(right-left); m[1][0] = 0.0f;              m[2][0] =  0.0f;                  m[3][0] = -(right+left)/(right-left);
-    m[0][1] = 0.0f;              m[1][1] = 2.0f/(top-bottom); m[2][1] =  0.0f;                  m[3][1] = -(top+bottom)/(top-bottom);
-    m[0][2] = 0.0f;              m[1][2] = 0.0f;              m[2][2] = -2.0f/(farVal-nearVal); m[3][2] = -(farVal+nearVal)/(farVal-nearVal);
-    m[0][3] = 0.0f;              m[1][3] = 0.0f;              m[2][3] =  0.0f;                  m[3][3] =  1.0f;
+    m[0][0] = 2/(right-left); m[1][0] = 0;              m[2][0] =  0;                  m[3][0] = -(right+left)/(right-left);
+    m[0][1] = 0;              m[1][1] = 2/(top-bottom); m[2][1] =  0;                  m[3][1] = -(top+bottom)/(top-bottom);
+    m[0][2] = 0;              m[1][2] = 0;              m[2][2] = -2/(farVal-nearVal); m[3][2] = -(farVal+nearVal)/(farVal-nearVal);
+    m[0][3] = 0;              m[1][3] = 0;              m[2][3] =  0;                  m[3][3] =  1;
 }
 
-
 void mat4_frustum_set(float m[][4], float left, float right, float bottom, float top, float nearVal, float farVal)
 {
-	m[0][0] = 2.0f*nearVal/(right-left);  m[1][0] = 0.0f;                      m[2][0] =  (right+left)/(right-left);         m[3][0] =  0.0f;
-	m[0][1]

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list