Merging r42648 through r42722 from trunk into soc-2011-tomato
[blender.git] / source / blender / blenlib / intern / math_matrix.c
index ee9cbaf1f81242593de187c27fe9bfdd37df5146..cd54c944ba9c84b89d084b761fa007ee0c82220a 100644 (file)
@@ -195,8 +195,14 @@ void mul_m3_m3m3(float m1[][3], float m3_[][3], float m2_[][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], float (*m3)[4], float (*m2)[3])
+void mul_m4_m4m3(float (*m1)[4], float (*m3_)[4], float (*m2_)[3])
 {
+       float m2[3][3], m3[4][4];
+
+       /* copy so it works when m1 is the same pointer as m2 or m3 */
+       copy_m3_m3(m2, m2_);
+       copy_m4_m4(m3, m3_);
+
        m1[0][0]= m2[0][0]*m3[0][0] + m2[0][1]*m3[1][0] + m2[0][2]*m3[2][0];
        m1[0][1]= m2[0][0]*m3[0][1] + m2[0][1]*m3[1][1] + m2[0][2]*m3[2][1];
        m1[0][2]= m2[0][0]*m3[0][2] + m2[0][1]*m3[1][2] + m2[0][2]*m3[2][2];