[Bf-blender-cvs] [7c7b730] master: Math Lib: use variable length args for mul_serie_m3, m4 (instead of trailing NULL's)

Campbell Barton noreply at git.blender.org
Sun Jul 20 06:04:12 CEST 2014


Commit: 7c7b7302d33b9a43f5436589a726bc733be91a33
Author: Campbell Barton
Date:   Sun Jul 20 14:01:42 2014 +1000
https://developer.blender.org/rB7c7b7302d33b9a43f5436589a726bc733be91a33

Math Lib: use variable length args for mul_serie_m3,m4 (instead of trailing NULL's)

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

M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/constraint.c
M	source/blender/blenkernel/intern/mask.c
M	source/blender/blenkernel/intern/texture.c
M	source/blender/blenkernel/intern/tracking_stabilize.c
M	source/blender/blenlib/BLI_math_matrix.h
M	source/blender/blenlib/intern/math_matrix.c
M	source/blender/blenlib/intern/math_rotation.c
M	source/blender/bmesh/operators/bmo_utils.c
M	source/blender/collada/AnimationImporter.cpp
M	source/blender/collada/TransformWriter.cpp
M	source/blender/editors/object/object_hook.c
M	source/blender/editors/space_clip/clip_draw.c
M	source/blender/editors/space_clip/tracking_ops.c
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/uvedit/uvedit_unwrap_ops.c
M	source/blender/ikplugin/intern/iksolver_plugin.c
M	source/blender/ikplugin/intern/itasc_plugin.cpp
M	source/blender/modifiers/intern/MOD_array.c
M	source/blender/modifiers/intern/MOD_hook.c
M	source/blender/render/intern/source/convertblender.c

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

diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 7a16cff..98b25e4 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -574,7 +574,7 @@ void b_bone_spline_setup(bPoseChannel *pchan, int rest, Mat4 result_array[MAX_BB
 
 		if (do_scale) {
 			/* correct for scaling when this matrix is used in scaled space */
-			mul_serie_m4(result_array[a].mat, iscalemat, result_array[a].mat, scalemat, NULL, NULL, NULL, NULL, NULL);
+			mul_serie_m4(result_array[a].mat, iscalemat, result_array[a].mat, scalemat);
 		}
 	}
 }
@@ -622,8 +622,7 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, bPoseChanDeform *pdef_info
 
 		invert_m4_m4(tmat, b_bone_rest[a].mat);
 
-		mul_serie_m4(b_bone_mats[a + 1].mat, pchan->chan_mat, bone->arm_mat, b_bone[a].mat, tmat, b_bone_mats[0].mat,
-		             NULL, NULL, NULL);
+		mul_serie_m4(b_bone_mats[a + 1].mat, pchan->chan_mat, bone->arm_mat, b_bone[a].mat, tmat, b_bone_mats[0].mat);
 
 		if (use_quaternion)
 			mat4_to_dquat(&b_bone_dual_quats[a], bone->arm_mat, b_bone_mats[a + 1].mat);
@@ -1042,7 +1041,7 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, float
 				if (!use_quaternion) /* quaternion already is scale corrected */
 					mul_m3_fl(smat, armature_weight / contrib);
 
-				mul_serie_m3(defMats[i], tmpmat, pre, smat, post, NULL, NULL, NULL, NULL);
+				mul_serie_m3(defMats[i], tmpmat, pre, smat, post);
 			}
 		}
 
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index b27655c..4af8b1c 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -3909,7 +3909,7 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
 				BKE_tracking_camera_get_reconstructed_interpolate(tracking, tracking_object, framenr, imat);
 				invert_m4(imat);
 
-				mul_serie_m4(cob->matrix, obmat, mat, imat, NULL, NULL, NULL, NULL, NULL);
+				mul_serie_m4(cob->matrix, obmat, mat, imat);
 				translate_m4(cob->matrix, track->bundle_pos[0], track->bundle_pos[1], track->bundle_pos[2]);
 			}
 			else {
@@ -4187,7 +4187,7 @@ static void objectsolver_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
 
 			invert_m4_m4(imat, mat);
 
-			mul_serie_m4(cob->matrix, cammat, imat, camimat, parmat, obmat, NULL, NULL, NULL);
+			mul_serie_m4(cob->matrix, cammat, imat, camimat, parmat, obmat);
 		}
 	}
 }
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index 4147750..e737edb 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -1212,7 +1212,7 @@ void BKE_mask_point_parent_matrix_get(MaskSplinePoint *point, float ctime, float
 						}
 
 						invert_m3_m3(mask_to_clip_matrix, mask_from_clip_matrix);
-						mul_serie_m3(parent_matrix, mask_to_clip_matrix, H, mask_from_clip_matrix, NULL, NULL, NULL, NULL, NULL);
+						mul_serie_m3(parent_matrix, mask_to_clip_matrix, H, mask_from_clip_matrix);
 					}
 				}
 			}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index bb956cb..84da03c 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -145,12 +145,12 @@ void init_tex_mapping(TexMapping *texmap)
 		if (texmap->type == TEXMAP_TYPE_TEXTURE) {
 			/* to transform a texture, the inverse transform needs
 			 * to be applied to the texture coordinate */
-			mul_serie_m4(texmap->mat, tmat, rmat, smat, 0, 0, 0, 0, 0);
+			mul_serie_m4(texmap->mat, tmat, rmat, smat);
 			invert_m4(texmap->mat);
 		}
 		else if (texmap->type == TEXMAP_TYPE_POINT) {
 			/* forward transform */
-			mul_serie_m4(texmap->mat, tmat, rmat, smat, 0, 0, 0, 0, 0);
+			mul_serie_m4(texmap->mat, tmat, rmat, smat);
 		}
 		else if (texmap->type == TEXMAP_TYPE_VECTOR) {
 			/* no translation for vectors */
diff --git a/source/blender/blenkernel/intern/tracking_stabilize.c b/source/blender/blenkernel/intern/tracking_stabilize.c
index 9ede39f..ec8a5ca 100644
--- a/source/blender/blenkernel/intern/tracking_stabilize.c
+++ b/source/blender/blenkernel/intern/tracking_stabilize.c
@@ -440,5 +440,5 @@ void BKE_tracking_stabilization_data_to_mat4(int width, int height, float aspect
 
 	/* compose transformation matrix */
 	mul_serie_m4(mat, translation_mat, center_mat, aspect_mat, rotation_mat, inv_aspect_mat,
-	             scale_mat, inv_center_mat, NULL);
+	             scale_mat, inv_center_mat);
 }
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index 4918393..1c1e4e7 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -34,6 +34,8 @@
 extern "C" {
 #endif
 
+#include "BLI_compiler_attrs.h"
+
 /********************************* Init **************************************/
 
 void zero_m3(float R[3][3]);
@@ -67,12 +69,33 @@ 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 mul_serie_m3(float R[3][3],
-                  float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
-                  float M5[3][3], float M6[3][3], float M7[3][3], float M8[3][3]);
-void mul_serie_m4(float R[4][4],
-                  float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
-                  float M5[4][4], float M6[4][4], float M7[4][4], float M8[4][4]);
+/* mul_serie_m3 */
+void _va_mul_serie_m3_3(float R[3][3], float M1[3][3], float M2[3][3]) ATTR_NONNULL();
+void _va_mul_serie_m3_4(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3]) ATTR_NONNULL();
+void _va_mul_serie_m3_5(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3]) ATTR_NONNULL();
+void _va_mul_serie_m3_6(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
+                        float M5[3][3]) ATTR_NONNULL();
+void _va_mul_serie_m3_7(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
+                        float M5[3][3], float M6[3][3]) ATTR_NONNULL();
+void _va_mul_serie_m3_8(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
+                        float M5[3][3], float M6[3][3], float M7[3][3]) ATTR_NONNULL();
+void _va_mul_serie_m3_9(float R[3][3], float M1[3][3], float M2[3][3], float M3[3][3], float M4[3][3],
+                        float M5[3][3], float M6[3][3], float M7[3][3], float M8[3][3]) ATTR_NONNULL();
+/* mul_serie_m4 */
+void _va_mul_serie_m4_3(float R[4][4], float M1[4][4], float M2[4][4]) ATTR_NONNULL();
+void _va_mul_serie_m4_4(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4]) ATTR_NONNULL();
+void _va_mul_serie_m4_5(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4]) ATTR_NONNULL();
+void _va_mul_serie_m4_6(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
+                        float M5[4][4]) ATTR_NONNULL();
+void _va_mul_serie_m4_7(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
+                        float M5[4][4], float M6[4][4]) ATTR_NONNULL();
+void _va_mul_serie_m4_8(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
+                        float M5[4][4], float M6[4][4], float M7[4][4]) ATTR_NONNULL();
+void _va_mul_serie_m4_9(float R[4][4], float M1[4][4], float M2[4][4], float M3[4][4], float M4[4][4],
+                        float M5[4][4], float M6[4][4], float M7[4][4], float M8[4][4]) ATTR_NONNULL();
+
+#define mul_serie_m3(...) VA_NARGS_CALL_OVERLOAD(_va_mul_serie_m3_, __VA_ARGS__)
+#define mul_serie_m4(...) VA_NARGS_CALL_OVERLOAD(_va_mul_serie_m4_, __VA_ARGS__)
 
 void mul_m4_v3(float M[4][4], float r[3]);
 void mul_v3_m4v3(float r[3], float M[4][4], const float v[3]);
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index 7fc30e3..74b0df1 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -274,71 +274,148 @@ void mul_m4_m3m4(float m1[4][4], float m3_[3][3], 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 mul_serie_m3(float answ[3][3],
-                  float m1[3][3], float m2[3][3], float m3[3][3],
-                  float m4[3][3], float m5[3][3], float m6[3][3],
-                  float m7[3][3], float m8[3][3])
-{
-	float temp[3][3];
-
-	if (m1 == NULL || m2 == NULL) return;
-
-	mul_m3_m3m3(answ, m2, m1);
-	if (m3) {
-		mul_m3_m3m3(temp, m3, answ);
-		if (m4) {
-			mul_m3_m3m3(answ, m4, temp);
-			if (m5) {
-				mul_m3_m3m3(temp, m5, answ);
-				if (m6) {
-					mul_m3_m3m3(answ, m6, temp);
-					if (m7) {
-						mul_m3_m3m3(temp, m7, answ);
-						if (m8) {
-							mul_m3_m3m3(answ, m8, temp);
-						}
-						else copy_m3_m3(answ, temp);
-					}
-				}
-				else copy_m3_m3(answ, temp);
-			}
-		}
-		else copy_m3_m3(answ, temp);
-	}
-}
 
-void mul_serie_m4(float answ[4][4], float m1[4][4],
-                  float m2[4][4], float m3[4][4], float m4[4][4],
-                  float m5[4][4], float m6[4][4], float m7[4][4],
-                  float m8[4][4])
-{
-	float temp[4][4];
-
-	if (m1 == NULL || m2 == NULL) return;
-
-	mul_m4_m4m4(answ, m1, m2);
-	if (m3) {
-		mul_m4_m4m4(temp, answ, m3);
-		if (m4) {
-			mul_m4_m4m4(answ, temp, m4);
-			if (m5) {
-				mul_m4_m4m4(temp, answ, m5);
-				if (m6) {
-					mul_m4_m4m4(answ, temp, m6);
-					if (m7) {
-						mul_m4_m4m4(temp, answ, m7);
-						if (m8) {
-							mul_m4_m4m4(answ, temp, m8);
-						}
-						else copy_m4_m4(answ, temp);
-					}
-				}
-				else copy_m4_m4(answ, temp);
-			}
-		}
-		else copy_m4_m4(answ, temp);
-	}
-}
+/** \name Macro helpers for: mul_serie_m3
+ * \{ */
+void _va_mul_serie_m3_3(
+        float r[3][3],
+        float m1[3][3], float m2[3][3])
+{
+	mul_m3_m3m3(r, m2, m1);
+}
+void _va_mul_serie_m3_4(
+        float r[3][3],
+        float m1[3][3], 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list