[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57400] trunk/blender/source/blender/ modifiers/intern/MOD_solidify.c: solidify: reduce sign conversions.

Campbell Barton ideasman42 at gmail.com
Wed Jun 12 08:51:03 CEST 2013


Revision: 57400
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57400
Author:   campbellbarton
Date:     2013-06-12 06:51:02 +0000 (Wed, 12 Jun 2013)
Log Message:
-----------
solidify: reduce sign conversions.

Modified Paths:
--------------
    trunk/blender/source/blender/modifiers/intern/MOD_solidify.c

Modified: trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_solidify.c	2013-06-12 06:20:24 UTC (rev 57399)
+++ trunk/blender/source/blender/modifiers/intern/MOD_solidify.c	2013-06-12 06:51:02 UTC (rev 57400)
@@ -47,6 +47,10 @@
 #include "MOD_modifiertypes.h"
 #include "MOD_util.h"
 
+#ifdef __GNUC__
+#  pragma GCC diagnostic error "-Wsign-conversion"
+#endif
+
 /* *** derived mesh high quality normal calculation function  *** */
 /* could be exposed for other functions to use */
 
@@ -95,7 +99,7 @@
 		EdgeHashIterator *edge_iter;
 		int edge_ref_count = 0;
 		unsigned int ed_v1, ed_v2; /* use when getting the key */
-		EdgeFaceRef *edge_ref_array = MEM_callocN(numEdges * sizeof(EdgeFaceRef), "Edge Connectivity");
+		EdgeFaceRef *edge_ref_array = MEM_callocN(sizeof(EdgeFaceRef) * (size_t)numEdges, "Edge Connectivity");
 		EdgeFaceRef *edge_ref;
 		float edge_normal[3];
 
@@ -221,7 +225,7 @@
         DerivedMesh *dm,
         ModifierApplyFlag UNUSED(flag))
 {
-	int i;
+	unsigned int i;
 	DerivedMesh *result;
 	const SolidifyModifierData *smd = (SolidifyModifierData *) md;
 
@@ -229,10 +233,10 @@
 	MEdge *ed, *medge, *orig_medge;
 	MLoop *ml, *mloop, *orig_mloop;
 	MPoly *mp, *mpoly, *orig_mpoly;
-	const int numVerts = dm->getNumVerts(dm);
-	const int numEdges = dm->getNumEdges(dm);
-	const int numFaces = dm->getNumPolys(dm);
-	int numLoops = 0, newLoops = 0, newFaces = 0, newEdges = 0;
+	const unsigned int numVerts = (unsigned int)dm->getNumVerts(dm);
+	const unsigned int numEdges = (unsigned int)dm->getNumEdges(dm);
+	const unsigned int numFaces = (unsigned int)dm->getNumPolys(dm);
+	unsigned int numLoops = 0, newLoops = 0, newFaces = 0, newEdges = 0;
 
 	/* only use material offsets if we have 2 or more materials  */
 	const short mat_nr_max = ob->totcol > 1 ? ob->totcol - 1 : 0;
@@ -241,15 +245,15 @@
 
 	/* use for edges */
 	/* over-alloc new_vert_arr, old_vert_arr */
-	int *new_vert_arr = NULL;
+	unsigned int *new_vert_arr = NULL;
 	STACK_DECLARE(new_vert_arr);
 
-	int *new_edge_arr = NULL;
+	unsigned int *new_edge_arr = NULL;
 	STACK_DECLARE(new_edge_arr);
 
-	int *old_vert_arr = MEM_callocN(sizeof(int) * numVerts, "old_vert_arr in solidify");
+	unsigned int *old_vert_arr = MEM_callocN(sizeof(old_vert_arr) * (size_t)numVerts, "old_vert_arr in solidify");
 
-	int *edge_users = NULL;
+	unsigned int *edge_users = NULL;
 	char *edge_order = NULL;
 
 	float (*vert_nors)[3] = NULL;
@@ -270,7 +274,7 @@
 
 	modifier_get_vgroup(ob, dm, smd->defgrp_name, &dvert, &defgrp_index);
 
-	numLoops = dm->numLoopData;
+	numLoops = (unsigned int)dm->numLoopData;
 	newLoops = 0;
 
 	orig_mvert = dm->getVertArray(dm);
@@ -285,16 +289,16 @@
 		EdgeHash *edgehash = BLI_edgehash_new();
 		EdgeHashIterator *ehi;
 		unsigned int v1, v2;
-		int eidx;
+		unsigned int eidx;
 
-#define INVALID_UNUSED -1
-#define INVALID_PAIR -2
+#define INVALID_UNUSED ((unsigned int)-1)
+#define INVALID_PAIR ((unsigned int)-2)
 
-		new_vert_arr = MEM_mallocN(sizeof(*new_vert_arr) * (numVerts * 2), __func__);
-		new_edge_arr = MEM_mallocN(sizeof(*new_edge_arr) * ((numEdges * 2) + numVerts), __func__);
+		new_vert_arr = MEM_mallocN(sizeof(*new_vert_arr) * (size_t)(numVerts * 2), __func__);
+		new_edge_arr = MEM_mallocN(sizeof(*new_edge_arr) * (size_t)((numEdges * 2) + numVerts), __func__);
 
-		edge_users = MEM_mallocN(sizeof(*edge_users) * numEdges, "solid_mod edges");
-		edge_order = MEM_mallocN(sizeof(*edge_order) * numEdges, "solid_mod eorder");
+		edge_users = MEM_mallocN(sizeof(*edge_users) * (size_t)numEdges, "solid_mod edges");
+		edge_order = MEM_mallocN(sizeof(*edge_order) * (size_t)numEdges, "solid_mod eorder");
 
 		for (i = 0, mv = orig_mvert; i < numVerts; i++, mv++) {
 			mv->flag &= ~ME_VERT_TMP_TAG;
@@ -306,7 +310,7 @@
 #endif
 
 		for (i = 0, ed = orig_medge; i < numEdges; i++, ed++) {
-			BLI_edgehash_insert(edgehash, ed->v1, ed->v2, SET_INT_IN_POINTER(i));
+			BLI_edgehash_insert(edgehash, ed->v1, ed->v2, SET_UINT_IN_POINTER(i));
 			edge_users[i] = INVALID_UNUSED;
 		}
 
@@ -323,7 +327,7 @@
 			{
 				ml_v1 = ml->v;
 				/* add edge user */
-				eidx = GET_INT_FROM_POINTER(BLI_edgehash_lookup(edgehash, ml_v1, ml_v2));
+				eidx = GET_UINT_FROM_POINTER(BLI_edgehash_lookup(edgehash, ml_v1, ml_v2));
 				if (edge_users[eidx] == INVALID_UNUSED) {
 					ed = orig_medge + eidx;
 					edge_users[eidx] = (ml_v1 < ml_v2) == (ed->v1 < ed->v2) ? i : (i + numFaces);
@@ -335,13 +339,10 @@
 			}
 		}
 
-#undef INVALID_UNUSED
-#undef INVALID_PAIR
-
 		ehi = BLI_edgehashIterator_new(edgehash);
 		for (; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
-			eidx = GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi));
-			if (edge_users[eidx] >= 0) {
+			eidx = GET_UINT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi));
+			if (!ELEM(edge_users[eidx], INVALID_UNUSED, INVALID_PAIR)) {
 				BLI_edgehashIterator_getKey(ehi, &v1, &v2);
 				orig_mvert[v1].flag |= ME_VERT_TMP_TAG;
 				orig_mvert[v2].flag |= ME_VERT_TMP_TAG;
@@ -352,6 +353,9 @@
 		}
 		BLI_edgehashIterator_free(ehi);
 
+#undef INVALID_UNUSED
+#undef INVALID_PAIR
+
 		for (i = 0, mv = orig_mvert; i < numVerts; i++, mv++) {
 			if (mv->flag & ME_VERT_TMP_TAG) {
 				old_vert_arr[i] = STACK_SIZE(new_vert_arr);
@@ -366,29 +370,32 @@
 	}
 
 	if (smd->flag & MOD_SOLIDIFY_NORMAL_CALC) {
-		vert_nors = MEM_callocN(sizeof(float) * numVerts * 3, "mod_solid_vno_hq");
+		vert_nors = MEM_callocN(sizeof(float) * (size_t)numVerts * 3, "mod_solid_vno_hq");
 		dm_calc_normal(dm, vert_nors);
 	}
 
-	result = CDDM_from_template(dm, numVerts * 2, (numEdges * 2) + newEdges, 0,
-	                            (numLoops * 2) + newLoops, (numFaces * 2) + newFaces);
+	result = CDDM_from_template(dm,
+	                            (int)(numVerts * 2),
+	                            (int)((numEdges * 2) + newEdges), 0,
+	                            (int)((numLoops * 2) + newLoops),
+	                            (int)((numFaces * 2) + newFaces));
 
 	mpoly = CDDM_get_polys(result);
 	mloop = CDDM_get_loops(result);
 	medge = CDDM_get_edges(result);
 	mvert = CDDM_get_verts(result);
 
-	DM_copy_edge_data(dm, result, 0, 0, numEdges);
-	DM_copy_edge_data(dm, result, 0, numEdges, numEdges);
+	DM_copy_edge_data(dm, result, 0, 0, (int)numEdges);
+	DM_copy_edge_data(dm, result, 0, (int)numEdges, (int)numEdges);
 
-	DM_copy_vert_data(dm, result, 0, 0, numVerts);
-	DM_copy_vert_data(dm, result, 0, numVerts, numVerts);
+	DM_copy_vert_data(dm, result, 0, 0, (int)numVerts);
+	DM_copy_vert_data(dm, result, 0, (int)numVerts, (int)numVerts);
 
-	DM_copy_loop_data(dm, result, 0, 0, numLoops);
-	DM_copy_loop_data(dm, result, 0, numLoops, numLoops);
+	DM_copy_loop_data(dm, result, 0, 0, (int)numLoops);
+	DM_copy_loop_data(dm, result, 0, (int)numLoops, (int)numLoops);
 
-	DM_copy_poly_data(dm, result, 0, 0, numFaces);
-	DM_copy_poly_data(dm, result, 0, numFaces, numFaces);
+	DM_copy_poly_data(dm, result, 0, 0, (int)numFaces);
+	DM_copy_poly_data(dm, result, 0, (int)numFaces, (int)numFaces);
 
 	/* if the original has it, get the result so we can update it */
 	face_nors_result = CustomData_get_layer(&result->polyData, CD_NORMAL);
@@ -397,7 +404,7 @@
 	mp = mpoly + numFaces;
 	for (i = 0; i < dm->numPolyData; i++, mp++) {
 		MLoop *ml2;
-		int e;
+		unsigned int e;
 		int j;
 
 		ml2 = mloop + mp->loopstart + dm->numLoopData;
@@ -447,7 +454,7 @@
 
 		if (do_clamp) {
 			vert_lens = MEM_callocN(sizeof(float) * numVerts, "vert_lens");
-			fill_vn_fl(vert_lens, numVerts, FLT_MAX);
+			fill_vn_fl(vert_lens, (int)numVerts, FLT_MAX);
 			for (i = 0; i < numEdges; i++) {
 				const float ed_len = len_squared_v3v3(mvert[medge[i].v1].co, mvert[medge[i].v2].co);
 				vert_lens[medge[i].v1] = min_ff(vert_lens[medge[i].v1], ed_len);
@@ -517,7 +524,7 @@
 		/* same as EM_solidify() in editmesh_lib.c */
 		float *vert_angles = MEM_callocN(sizeof(float) * numVerts * 2, "mod_solid_pair"); /* 2 in 1 */
 		float *vert_accum = vert_angles + numVerts;
-		int vidx;
+		unsigned int vidx;
 
 		face_nors = CustomData_get_layer(&dm->polyData, CD_NORMAL);
 		if (!face_nors) {
@@ -599,7 +606,7 @@
 			float *vert_lens = MEM_callocN(sizeof(float) * numVerts, "vert_lens");
 			const float offset    = fabsf(smd->offset) * smd->offset_clamp;
 			const float offset_sq = offset * offset;
-			fill_vn_fl(vert_lens, numVerts, FLT_MAX);
+			fill_vn_fl(vert_lens, (int)numVerts, FLT_MAX);
 			for (i = 0; i < numEdges; i++) {
 				const float ed_len = len_squared_v3v3(mvert[medge[i].v1].co, mvert[medge[i].v2].co);
 				vert_lens[medge[i].v1] = min_ff(vert_lens[medge[i].v1], ed_len);
@@ -678,7 +685,7 @@
 
 		int *origindex_edge;
 		int *orig_ed;
-		int j;
+		unsigned int j;
 
 		if (crease_rim || crease_outer || crease_inner) {
 			result->cd_flag |= ME_CDFLAG_EDGE_CREASE;
@@ -705,37 +712,38 @@
 		ml = mloop + (numLoops * 2);
 		j = 0;
 		for (i = 0; i < newFaces; i++, mp++) {
-			int eidx = new_edge_arr[i];
-			int fidx = edge_users[eidx];
-			int flip, k1, k2;
+			unsigned int eidx = new_edge_arr[i];
+			unsigned int fidx = edge_users[eidx];
+			int k1, k2;
+			bool flip;
 
 			if (fidx >= numFaces) {
 				fidx -= numFaces;
-				flip = TRUE;
+				flip = true;
 			}
 			else {
-				flip = FALSE;
+				flip = false;
 			}
 
 			ed = medge + eidx;
 
 			/* copy most of the face settings */
-			DM_copy_poly_data(dm, result, fidx, (numFaces * 2) + i, 1);
-			mp->loopstart = j + numLoops * 2;
+			DM_copy_poly_data(dm, result, (int)fidx, (int)((numFaces * 2) + i), 1);
+			mp->loopstart = (int)(j + numLoops * 2);
 			mp->flag = mpoly[fidx].flag;
 
 			/* notice we use 'mp->totloop' which is later overwritten,
 			 * we could lookup the original face but theres no point since this is a copy
 			 * and will have the same value, just take care when changing order of assignment */
 			k1 = mpoly[fidx].loopstart + (((edge_order[eidx] - 1) + mp->totloop) % mp->totloop);  /* prev loop */
-			k2 = mpoly[fidx].loopstart +  (edge_order[eidx]);
+			k2 = mpoly[fidx].loopstart +   (edge_order[eidx]);
 
 			mp->totloop = 4;
 
-			CustomData_copy_data(&dm->loopData, &result->loopData, k2, numLoops * 2 + j + 0, 1);
-			CustomData_copy_data(&dm->loopData, &result->loopData, k1, numLoops * 2 + j + 1, 1);
-			CustomData_copy_data(&dm->loopData, &result->loopData, k1, numLoops * 2 + j + 2, 1);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list