[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41911] branches/bmesh/blender/source/ blender/bmesh/intern: fix for error in last commit, also make BM_ElemIndex_Validate() check dirty flag and complain if its set when it didnt need to be ( this function isnt called yet)

Campbell Barton ideasman42 at gmail.com
Wed Nov 16 13:56:34 CET 2011


Revision: 41911
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41911
Author:   campbellbarton
Date:     2011-11-16 12:56:33 +0000 (Wed, 16 Nov 2011)
Log Message:
-----------
fix for error in last commit, also make BM_ElemIndex_Validate() check dirty flag and complain if its set when it didnt need to be (this function isnt called yet)

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2011-11-16 12:47:37 UTC (rev 41910)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2011-11-16 12:56:33 UTC (rev 41911)
@@ -522,7 +522,7 @@
 
 /* array checking/setting macros */
 /* currently vert/edge/loop/face index data is being abused, but we should
- * eventually be able to rely on it being valid. To this end are macro's
+ * eventually be able to rely on it being valid. To this end, there are macros
  * that validate them (so blender doesnt crash), but also print errors so we can
  * fix the offending parts of the code, this way after some months we can
  * confine this code for debug mode.
@@ -536,12 +536,14 @@
 	BMHeader *ele;
 	int types[3] = {BM_VERTS_OF_MESH, BM_EDGES_OF_MESH, BM_FACES_OF_MESH};
 	const char *type_names[3]= {"vert", "edge", "face"};
+	const char type_flags[3]= {BM_VERT, BM_EDGE, BM_FACE};
 	int i;
 	int is_any_error= 0;
 
 	for (i=0; i<3; i++) {
+		const int is_dirty= (type_flags[i] & bm->elem_index_dirty);
 		int index= 0;
-		int is_error= 0;
+		int is_error= FALSE;
 		int err_val= 0;
 		int err_idx= 0;
 
@@ -549,19 +551,25 @@
 			if (BM_GetIndex(ele) != index) {
 				err_val= BM_GetIndex(ele);
 				err_idx= index;
-				is_error= 1;
+				is_error= TRUE;
 			}
 
 			BM_SetIndex(ele, index); /* set_ok */
 			index++;
 		}
 
-		if (is_error) {
-			is_any_error= 1;
+		if ((is_error == TRUE) && (is_dirty == FALSE)) {
+			is_any_error= TRUE;
 			fprintf(stderr,
 			        "Invalid Index: at %s, %s, %s[%d] invalid index %d, '%s', '%s'\n",
 			        location, func, type_names[i], err_idx, err_val, msg_a, msg_b);
 		}
+		else if ((is_error == FALSE) && (is_dirty == TRUE)) {
+			/* dirty may have been incorrectly set */
+			fprintf(stderr,
+			        "Invalid Dirty: at %s, %s (%s), dirty flag was set but all index values are correct, '%s', '%s'\n",
+			        location, func, type_names[i], msg_a, msg_b);
+		}
 	}
 
 #ifdef DEBUG

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c	2011-11-16 12:47:37 UTC (rev 41910)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c	2011-11-16 12:56:33 UTC (rev 41911)
@@ -1599,7 +1599,7 @@
 
 		maxindex++;
 	}
-	em->bm->elem_index_dirty |= BM_EDGE;
+	bm->elem_index_dirty |= BM_EDGE;
 
 	/* Make enough verts to split v for each group */
 	verts = MEM_callocN(sizeof(BMVert *) * maxindex, "bmesh_cutvert");




More information about the Bf-blender-cvs mailing list