Code cleanup: de-duplicate cotangent weight function & add arg sizes
authorCampbell Barton <ideasman42@gmail.com>
Sun, 30 Mar 2014 00:08:33 +0000 (11:08 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 30 Mar 2014 00:08:33 +0000 (11:08 +1100)
19 files changed:
intern/ghost/test/multitest/MultiTest.c
source/blender/blenkernel/BKE_fcurve.h
source/blender/blenkernel/BKE_object.h
source/blender/blenkernel/intern/curve.c
source/blender/blenkernel/intern/object.c
source/blender/blenlib/BLI_math_geom.h
source/blender/blenlib/BLI_noise.h
source/blender/blenlib/intern/math_geom.c
source/blender/blenlib/intern/noise.c
source/blender/bmesh/operators/bmo_smooth_laplacian.c
source/blender/editors/armature/meshlaplacian.c
source/blender/editors/armature/reeb.c
source/blender/editors/sculpt_paint/paint_image_proj.c
source/blender/editors/space_clip/clip_graph_ops.c
source/blender/editors/space_node/node_draw.c
source/blender/editors/transform/transform.h
source/blender/modifiers/intern/MOD_laplaciandeform.c
source/blender/modifiers/intern/MOD_laplaciansmooth.c
source/blender/modifiers/intern/MOD_meshdeform.c

index 8fb46ffc385244064248659f8c30309cf5b8caaa..9a192c17180aa589c8a900c1859e6c5e87ffed64 100644 (file)
@@ -74,7 +74,7 @@ void multitestapp_exit(MultiTestApp *app);
 
 /**/
 
-void rect_bevel_side(int rect[2][2], int side, float *lt, float *dk, float *col, int width)
+void rect_bevel_side(int rect[2][2], int side, float *lt, float *dk, const float col[3], int width)
 {
        int ltidx = (side / 2) % 4;
        int dkidx = (ltidx + 1 + (side & 1)) % 4;
index 13eca506d9e9e39ef35e40133db631e69c2cb30f..046bb8e0e8d839ab89a68edc5b9c49c00ed33e43 100644 (file)
@@ -250,7 +250,7 @@ void testhandles_fcurve(struct FCurve *fcu, const bool use_handle);
 void sort_time_fcurve(struct FCurve *fcu);
 short test_time_fcurve(struct FCurve *fcu);
 
-void correct_bezpart(float *v1, float *v2, float *v3, float *v4);
+void correct_bezpart(float v1[2], float v2[2], float v3[2], float v4[2]);
 
 /* -------- Evaluation --------  */
 
index 2ad6c54fb6782ab4451aea545e97603f099aefba..c1a76b67ee388e75952f5aa3e9e300737083aa9f 100644 (file)
@@ -129,7 +129,7 @@ bool BKE_boundbox_ray_hit_check(struct BoundBox *bb, const float ray_start[3], c
 
 struct BoundBox *BKE_object_boundbox_get(struct Object *ob);
 void BKE_object_dimensions_get(struct Object *ob, float vec[3]);
-void BKE_object_dimensions_set(struct Object *ob, const float *value);
+void BKE_object_dimensions_set(struct Object *ob, const float value[3]);
 void BKE_object_empty_draw_type_set(struct Object *ob, const int value);
 void BKE_object_boundbox_flag(struct Object *ob, int flag, int set);
 void BKE_object_minmax(struct Object *ob, float r_min[3], float r_max[3], const bool use_hidden);
index 0ce2953a2e3d23a8b99cb7f9b7d5e6feee69aa95..d56402525f00f805422946379cb999094cfd2295 100644 (file)
@@ -1929,7 +1929,8 @@ static int vergxcobev(const void *a1, const void *a2)
 
 /* this function cannot be replaced with atan2, but why? */
 
-static void calc_bevel_sin_cos(float x1, float y1, float x2, float y2, float *sina, float *cosa)
+static void calc_bevel_sin_cos(float x1, float y1, float x2, float y2,
+                               float *r_sina, float *r_cosa)
 {
        float t01, t02, x3, y3;
 
@@ -1967,8 +1968,8 @@ static void calc_bevel_sin_cos(float x1, float y1, float x2, float y2, float *si
                y3 /= t01;
        }
 
-       *sina = -y3 / t02;
-       *cosa = x3 / t02;
+       *r_sina = -y3 / t02;
+       *r_cosa =  x3 / t02;
 
 }
 
index 88bd7d747435fdd31177c108bc0556df94c8447a..be91cb5dc9d1bb2cbae88f137ead2643181c6c8a 100644 (file)
@@ -2519,7 +2519,7 @@ void BKE_object_dimensions_get(Object *ob, float vec[3])
        }
 }
 
-void BKE_object_dimensions_set(Object *ob, const float *value)
+void BKE_object_dimensions_set(Object *ob, const float value[3])
 {
        BoundBox *bb = NULL;
        
index 29ebf9f4688eb002a87bf8ec8351b2134fb3b7a6..7dcee5182872b20e38ea2fe155693c03028c7ebf 100644 (file)
@@ -57,6 +57,7 @@ float area_tri_signed_v3(const float v1[3], const float v2[3], const float v3[3]
 float area_quad_v3(const float a[3], const float b[3], const float c[3], const float d[3]);
 float area_poly_v3(const float verts[][3], unsigned int nr, const float normal[3]);
 float area_poly_v2(const float verts[][2], unsigned int nr);
+float cotangent_tri_weight_v3(const float v1[3], const float v2[3], const float v3[3]);
 
 MINLINE float cross_tri_v2(const float v1[2], const float v2[2], const float v3[2]);
 float cross_poly_v2(const float verts[][2], unsigned int nr);
index d9457fbaae78a6177a31fa22377518e03f8614b9..f3292d26b1e6f9ef5ceeed1e5b73106da9788594 100644 (file)
@@ -57,7 +57,7 @@ float mg_RidgedMultiFractal(float x, float y, float z, float H, float lacunarity
 void voronoi(float x, float y, float z, float *da, float *pa, float me, int dtype);
 /* newnoise: cellNoise & cellNoiseV (for vector/point/color) */
 float cellNoise(float x, float y, float z);
-void cellNoiseV(float x, float y, float z, float *ca);
+void cellNoiseV(float x, float y, float z, float r_ca[3]);
 
 #ifdef __cplusplus
 }
index 7665b8eedd06fd6fba66acf505f776fae92e89d9..71a6e195631d86156db6c7013913344818092db2 100644 (file)
@@ -179,6 +179,24 @@ float area_poly_v2(const float verts[][2], unsigned int nr)
        return fabsf(0.5f * cross_poly_v2(verts, nr));
 }
 
+float cotangent_tri_weight_v3(const float v1[3], const float v2[3], const float v3[3])
+{
+       float a[3], b[3], c[3], c_len;
+
+       sub_v3_v3v3(a, v2, v1);
+       sub_v3_v3v3(b, v3, v1);
+       cross_v3_v3v3(c, a, b);
+
+       c_len = len_v3(c);
+
+       if (c_len > FLT_EPSILON) {
+               return dot_v3v3(a, b) / c_len;
+       }
+       else {
+               return 0.0f;
+       }
+}
+
 /********************************* Planes **********************************/
 
 /**
index 982a74b1ffd78a3ef3c5f827a9242495eef73817..f002ea54b32b4b4d128497c50152b10609ef111f 100644 (file)
@@ -1407,7 +1407,7 @@ float cellNoise(float x, float y, float z)
 }
 
 /* returns a vector/point/color in ca, using point hasharray directly */
-void cellNoiseV(float x, float y, float z, float *ca)
+void cellNoiseV(float x, float y, float z, float ca[3])
 {
        int xi = (int)(floor(x));
        int yi = (int)(floor(y));
index e6321341950ce5509590e0305c54201a9586d752..af5f35f2a753d6aee30005d82883ca2357980b21 100644 (file)
@@ -66,7 +66,6 @@ struct BLaplacianSystem {
 };
 typedef struct BLaplacianSystem LaplacianSystem;
 
-static float cotan_weight(float *v1, float *v2, float *v3);
 static bool vert_is_boundary(BMVert *v);
 static LaplacianSystem *init_laplacian_system(int a_numEdges, int a_numFaces, int a_numVerts);
 static void init_laplacian_matrix(LaplacianSystem *sys);
@@ -261,9 +260,9 @@ static void init_laplacian_matrix(LaplacianSystem *sys)
                                        v3 = vf[(j + 2) % 4]->co;
                                        v4 = vf[(j + 3) % 4]->co;
 
-                                       w2 = cotan_weight(v4, v1, v2) + cotan_weight(v3, v1, v2);
-                                       w3 = cotan_weight(v2, v3, v1) + cotan_weight(v4, v1, v3);
-                                       w4 = cotan_weight(v2, v4, v1) + cotan_weight(v3, v4, v1);
+                                       w2 = cotangent_tri_weight_v3(v4, v1, v2) + cotangent_tri_weight_v3(v3, v1, v2);
+                                       w3 = cotangent_tri_weight_v3(v2, v3, v1) + cotangent_tri_weight_v3(v4, v1, v3);
+                                       w4 = cotangent_tri_weight_v3(v2, v4, v1) + cotangent_tri_weight_v3(v3, v4, v1);
 
                                        sys->vweights[idv1] += (w2 + w3 + w4) / 4.0f;
                                }
@@ -271,9 +270,9 @@ static void init_laplacian_matrix(LaplacianSystem *sys)
                        else {
                                i = BM_elem_index_get(f);
 
-                               w1 = cotan_weight(v1, v2, v3);
-                               w2 = cotan_weight(v2, v3, v1);
-                               w3 = cotan_weight(v3, v1, v2);
+                               w1 = cotangent_tri_weight_v3(v1, v2, v3);
+                               w2 = cotangent_tri_weight_v3(v2, v3, v1);
+                               w3 = cotangent_tri_weight_v3(v3, v1, v2);
 
                                sys->fweights[i][0] += w1;
                                sys->fweights[i][1] += w2;
@@ -325,9 +324,9 @@ static void fill_laplacian_matrix(LaplacianSystem *sys)
                                        v3 = vf[(j + 2) % 4]->co;
                                        v4 = vf[(j + 3) % 4]->co;
 
-                                       w2 = cotan_weight(v4, v1, v2) + cotan_weight(v3, v1, v2);
-                                       w3 = cotan_weight(v2, v3, v1) + cotan_weight(v4, v1, v3);
-                                       w4 = cotan_weight(v2, v4, v1) + cotan_weight(v3, v4, v1);
+                                       w2 = cotangent_tri_weight_v3(v4, v1, v2) + cotangent_tri_weight_v3(v3, v1, v2);
+                                       w3 = cotangent_tri_weight_v3(v2, v3, v1) + cotangent_tri_weight_v3(v4, v1, v3);
+                                       w4 = cotangent_tri_weight_v3(v2, v4, v1) + cotangent_tri_weight_v3(v3, v4, v1);
 
                                        w2 = w2 / 4.0f;
                                        w3 = w3 / 4.0f;
@@ -376,22 +375,6 @@ static void fill_laplacian_matrix(LaplacianSystem *sys)
        }
 }
 
-static float cotan_weight(float *v1, float *v2, float *v3)
-{
-       float a[3], b[3], c[3], clen;
-
-       sub_v3_v3v3(a, v2, v1);
-       sub_v3_v3v3(b, v3, v1);
-       cross_v3_v3v3(c, a, b);
-
-       clen = len_v3(c);
-
-       if (clen == 0.0f)
-               return 0.0f;
-
-       return dot_v3v3(a, b) / clen;
-}
-
 static bool vert_is_boundary(BMVert *v)
 {
        BMEdge *ed;
index 017d2783c1d37e97bfbeb600f302023af02aa7ca..bc47a673365db9eedba6cb447c9840e15dbf4cd5 100644 (file)
@@ -140,22 +140,6 @@ static int laplacian_edge_count(EdgeHash *edgehash, int v1, int v2)
        return (int)(intptr_t)BLI_edgehash_lookup(edgehash, v1, v2);
 }
 
-static float cotan_weight(float *v1, float *v2, float *v3)
-{
-       float a[3], b[3], c[3], clen;
-
-       sub_v3_v3v3(a, v2, v1);
-       sub_v3_v3v3(b, v3, v1);
-       cross_v3_v3v3(c, a, b);
-
-       clen = len_v3(c);
-
-       if (clen == 0.0f)
-               return 0.0f;
-       
-       return dot_v3v3(a, b) / clen;
-}
-
 static void laplacian_triangle_area(LaplacianSystem *sys, int i1, int i2, int i3)
 {
        float t1, t2, t3, len1, len2, len3, area;
@@ -166,9 +150,9 @@ static void laplacian_triangle_area(LaplacianSystem *sys, int i1, int i2, int i3
        v2 = sys->verts[i2];
        v3 = sys->verts[i3];
 
-       t1 = cotan_weight(v1, v2, v3);
-       t2 = cotan_weight(v2, v3, v1);
-       t3 = cotan_weight(v3, v1, v2);
+       t1 = cotangent_tri_weight_v3(v1, v2, v3);
+       t2 = cotangent_tri_weight_v3(v2, v3, v1);
+       t3 = cotangent_tri_weight_v3(v3, v1, v2);
 
        if      (angle_v3v3v3(v2, v1, v3) > DEG2RADF(90.0f)) obtuse = 1;
        else if (angle_v3v3v3(v1, v2, v3) > DEG2RADF(90.0f)) obtuse = 2;
@@ -207,9 +191,9 @@ static void laplacian_triangle_weights(LaplacianSystem *sys, int f, int i1, int
 
        /* instead of *0.5 we divided by the number of faces of the edge, it still
         * needs to be verified that this is indeed the correct thing to do! */
-       t1 = cotan_weight(v1, v2, v3) / laplacian_edge_count(sys->edgehash, i2, i3);
-       t2 = cotan_weight(v2, v3, v1) / laplacian_edge_count(sys->edgehash, i3, i1);
-       t3 = cotan_weight(v3, v1, v2) / laplacian_edge_count(sys->edgehash, i1, i2);
+       t1 = cotangent_tri_weight_v3(v1, v2, v3) / laplacian_edge_count(sys->edgehash, i2, i3);
+       t2 = cotangent_tri_weight_v3(v2, v3, v1) / laplacian_edge_count(sys->edgehash, i3, i1);
+       t3 = cotangent_tri_weight_v3(v3, v1, v2) / laplacian_edge_count(sys->edgehash, i1, i2);
 
        nlMatrixAdd(i1, i1, (t2 + t3) * varea[i1]);
        nlMatrixAdd(i2, i2, (t1 + t3) * varea[i2]);
index d521de545768fbc2d5ed08b9cabb7ab53efe40a4..e36b5c808dc6a3d36ec838e3d9f8498ef7888794 100644 (file)
@@ -2497,32 +2497,16 @@ int weightFromLoc(EditMesh *em, int axis)
        return 1;
 }
 
-static float cotan_weight(float *v1, float *v2, float *v3)
-{
-       float a[3], b[3], c[3], clen;
-
-       sub_v3_v3v3(a, v2, v1);
-       sub_v3_v3v3(b, v3, v1);
-       cross_v3_v3v3(c, a, b);
-
-       clen = len_v3(c);
-
-       if (clen == 0.0f)
-               return 0.0f;
-       
-       return dot_v3v3(a, b) / clen;
-}
-
 static void addTriangle(EditVert *v1, EditVert *v2, EditVert *v3, int e1, int e2, int e3)
 {
        /* Angle opposite e1 */
-       float t1 = cotan_weight(v1->co, v2->co, v3->co) / e2;
+       float t1 = cotangent_tri_weight_v3(v1->co, v2->co, v3->co) / e2;
        
        /* Angle opposite e2 */
-       float t2 = cotan_weight(v2->co, v3->co, v1->co) / e3;
+       float t2 = cotangent_tri_weight_v3(v2->co, v3->co, v1->co) / e3;
 
        /* Angle opposite e3 */
-       float t3 = cotan_weight(v3->co, v1->co, v2->co) / e1;
+       float t3 = cotangent_tri_weight_v3(v3->co, v1->co, v2->co) / e1;
        
        int i1 = indexData(v1);
        int i2 = indexData(v2);
index d2714639a56bf189be814f3bdc90aa86ba475461..fc7165ea1f55c93420ebcc4b5d5d01a0d4c0a6d5 100644 (file)
@@ -1671,7 +1671,7 @@ static void scale_tri(float insetCos[4][3], float *origCos[4], const float inset
 }
 #endif //PROJ_DEBUG_NOSEAMBLEED
 
-static float len_squared_v2v2_alt(const float *v1, const float v2_1, const float v2_2)
+static float len_squared_v2v2_alt(const float v1[2], const float v2_1, const float v2_2)
 {
        float x, y;
 
index 45b835810ed2cd9ef98e305254724c59d43ec5e9..b0de9dda6cdbaa6ecff3d90a5845de794e337533 100644 (file)
@@ -166,7 +166,7 @@ static void find_nearest_tracking_knot_cb(void *userdata, MovieTrackingTrack *tr
 
 }
 
-static void mouse_select_init_data(MouseSelectUserData *userdata, float *co)
+static void mouse_select_init_data(MouseSelectUserData *userdata, const float co[2])
 {
        memset(userdata, 0, sizeof(MouseSelectUserData));
        userdata->min_dist = FLT_MAX;
index 08375faf68010c98f99e42c0c83cf2890d898319..632bf1d3b1433801c6c9d5dca5f27ae37d974886 100644 (file)
@@ -584,7 +584,7 @@ static void node_draw_mute_line(View2D *v2d, SpaceNode *snode, bNode *node)
 }
 
 /* this might have some more generic use */
-static void node_circle_draw(float x, float y, float size, float *col, int highlight)
+static void node_circle_draw(float x, float y, float size, const float col[4], int highlight)
 {
        /* 16 values of sin function */
        static float si[16] = {
index 3f8166216ba7dc66fa1c9297976f149a91f353be..e574d1ad4694363fa1b2d9d1332cb59b5379aa9c 100644 (file)
@@ -498,8 +498,8 @@ void projectIntView(TransInfo *t, const float vec[3], int adr[2]);
 void projectFloatViewEx(TransInfo *t, const float vec[3], float adr[2], const eV3DProjTest flag);
 void projectFloatView(TransInfo *t, const float vec[3], float adr[2]);
 
-void applyAspectRatio(TransInfo *t, float *vec);
-void removeAspectRatio(TransInfo *t, float *vec);
+void applyAspectRatio(TransInfo *t, float vec[2]);
+void removeAspectRatio(TransInfo *t, float vec[2]);
 
 void drawPropCircle(const struct bContext *C, TransInfo *t);
 
index 8e2a58b2236c4a7c60f32b31da787abfab7335eb..31bae2a192e3e5b52a57225a0a7a19c44fe17b84 100644 (file)
@@ -138,24 +138,6 @@ static void deleteLaplacianSystem(LaplacianSystem *sys)
        MEM_SAFE_FREE(sys);
 }
 
-static float cotan_weight(const float v1[3], const float v2[3], const float v3[3])
-{
-       float a[3], b[3], c[3], clen;
-
-       sub_v3_v3v3(a, v2, v1);
-       sub_v3_v3v3(b, v3, v1);
-       cross_v3_v3v3(c, a, b);
-
-       clen = len_v3(c);
-
-       if (clen > FLT_EPSILON) {
-               return dot_v3v3(a, b) / clen;
-       }
-       else {
-               return 0.0f;
-       }
-}
-
 static void createFaceRingMap(
         const int mvert_tot, const MFace *mface, const int mface_tot,
         MeshElemMap **r_map, int **r_indices)
@@ -306,9 +288,9 @@ static void initLaplacianMatrix(LaplacianSystem *sys)
 
                        if (has_4_vert) {
 
-                               w2 = (cotan_weight(v4, v1, v2) + cotan_weight(v3, v1, v2)) / 2.0f;
-                               w3 = (cotan_weight(v2, v3, v1) + cotan_weight(v4, v1, v3)) / 2.0f;
-                               w4 = (cotan_weight(v2, v4, v1) + cotan_weight(v3, v4, v1)) / 2.0f;
+                               w2 = (cotangent_tri_weight_v3(v4, v1, v2) + cotangent_tri_weight_v3(v3, v1, v2)) / 2.0f;
+                               w3 = (cotangent_tri_weight_v3(v2, v3, v1) + cotangent_tri_weight_v3(v4, v1, v3)) / 2.0f;
+                               w4 = (cotangent_tri_weight_v3(v2, v4, v1) + cotangent_tri_weight_v3(v3, v4, v1)) / 2.0f;
 
                                sys->delta[idv1][0] -= v4[0] * w4;
                                sys->delta[idv1][1] -= v4[1] * w4;
@@ -321,8 +303,8 @@ static void initLaplacianMatrix(LaplacianSystem *sys)
                                nlMatrixAdd(idv1, idv4, -w4);
                        }
                        else {
-                               w2 = cotan_weight(v3, v1, v2);
-                               w3 = cotan_weight(v2, v3, v1);
+                               w2 = cotangent_tri_weight_v3(v3, v1, v2);
+                               w3 = cotangent_tri_weight_v3(v2, v3, v1);
                                w4 = 0.0f;
                        }
 
index 130013af75bf8d9c0270bd0d227f843fc2fb063e..e494fbf23fda70ae2e89775d4a67ad442ec96a91 100644 (file)
@@ -88,7 +88,6 @@ static CustomDataMask required_data_mask(Object *ob, ModifierData *md);
 static bool is_disabled(ModifierData *md, int useRenderParams);
 static float average_area_quad_v3(float *v1, float *v2, float *v3, float *v4);
 static float compute_volume(float (*vertexCos)[3], MFace *mfaces, int numFaces);
-static float cotan_weight(float *v1, float *v2, float *v3);
 static LaplacianSystem *init_laplacian_system(int a_numEdges, int a_numFaces, int a_numVerts);
 static void copy_data(ModifierData *md, ModifierData *target);
 static void delete_laplacian_system(LaplacianSystem *sys);
@@ -204,22 +203,6 @@ static float average_area_quad_v3(float *v1, float *v2, float *v3, float *v4)
        return areaq / 2.0f;
 }
 
-static float cotan_weight(float *v1, float *v2, float *v3)
-{
-       float a[3], b[3], c[3], clen;
-
-       sub_v3_v3v3(a, v2, v1);
-       sub_v3_v3v3(b, v3, v1);
-       cross_v3_v3v3(c, a, b);
-
-       clen = len_v3(c);
-
-       if (clen == 0.0f)
-               return 0.0f;
-
-       return dot_v3v3(a, b) / clen;
-}
-
 static float compute_volume(float (*vertexCos)[3], MFace *mfaces, int numFaces)
 {
        float vol = 0.0f;
@@ -367,17 +350,17 @@ static void init_laplacian_matrix(LaplacianSystem *sys)
                                v3 = sys->vertexCos[idv3];
                                v4 = sys->vertexCos[idv4];
 
-                               w2 = cotan_weight(v4, v1, v2) + cotan_weight(v3, v1, v2);
-                               w3 = cotan_weight(v2, v3, v1) + cotan_weight(v4, v1, v3);
-                               w4 = cotan_weight(v2, v4, v1) + cotan_weight(v3, v4, v1);
+                               w2 = cotangent_tri_weight_v3(v4, v1, v2) + cotangent_tri_weight_v3(v3, v1, v2);
+                               w3 = cotangent_tri_weight_v3(v2, v3, v1) + cotangent_tri_weight_v3(v4, v1, v3);
+                               w4 = cotangent_tri_weight_v3(v2, v4, v1) + cotangent_tri_weight_v3(v3, v4, v1);
 
                                sys->vweights[idv1] += (w2 + w3 + w4) / 4.0f;
                        }
                }
                else {
-                       w1 = cotan_weight(v1, v2, v3) / 2.0f;
-                       w2 = cotan_weight(v2, v3, v1) / 2.0f;
-                       w3 = cotan_weight(v3, v1, v2) / 2.0f;
+                       w1 = cotangent_tri_weight_v3(v1, v2, v3) / 2.0f;
+                       w2 = cotangent_tri_weight_v3(v2, v3, v1) / 2.0f;
+                       w3 = cotangent_tri_weight_v3(v3, v1, v2) / 2.0f;
 
                        sys->fweights[i][0] = sys->fweights[i][0] + w1;
                        sys->fweights[i][1] = sys->fweights[i][1] + w2;
@@ -430,9 +413,9 @@ static void fill_laplacian_matrix(LaplacianSystem *sys)
                                v3 = sys->vertexCos[idv3];
                                v4 = sys->vertexCos[idv4];
 
-                               w2 = cotan_weight(v4, v1, v2) + cotan_weight(v3, v1, v2);
-                               w3 = cotan_weight(v2, v3, v1) + cotan_weight(v4, v1, v3);
-                               w4 = cotan_weight(v2, v4, v1) + cotan_weight(v3, v4, v1);
+                               w2 = cotangent_tri_weight_v3(v4, v1, v2) + cotangent_tri_weight_v3(v3, v1, v2);
+                               w3 = cotangent_tri_weight_v3(v2, v3, v1) + cotangent_tri_weight_v3(v4, v1, v3);
+                               w4 = cotangent_tri_weight_v3(v2, v4, v1) + cotangent_tri_weight_v3(v3, v4, v1);
 
                                w2 = w2 / 4.0f;
                                w3 = w3 / 4.0f;
index 61dcc1fbb9d00f9d86b704277715eecc6ab50018..e8eb9c5675d3cc68d76964576e6ff0e77112c1ec 100644 (file)
@@ -130,7 +130,7 @@ static void updateDepgraph(ModifierData *md, DagForest *forest,
        }
 }
 
-static float meshdeform_dynamic_bind(MeshDeformModifierData *mmd, float (*dco)[3], float *vec)
+static float meshdeform_dynamic_bind(MeshDeformModifierData *mmd, float (*dco)[3], float vec[3])
 {
        MDefCell *cell;
        MDefInfluence *inf;