[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42971] branches/bmesh/blender/source/ blender: minor speedup to CDDM_merge_verts (called by mirror)

Campbell Barton ideasman42 at gmail.com
Thu Dec 29 10:41:40 CET 2011


Revision: 42971
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42971
Author:   campbellbarton
Date:     2011-12-29 09:41:31 +0000 (Thu, 29 Dec 2011)
Log Message:
-----------
minor speedup to CDDM_merge_verts (called by mirror)
* was doing 2 edge hash lookups, where only 1 was needed.
* was checking MLoop verts and edges if they were -1, when they are never set to -1

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-12-29 09:15:06 UTC (rev 42970)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-12-29 09:41:31 UTC (rev 42971)
@@ -2285,7 +2285,7 @@
 	CDDerivedMesh *cddm2 = NULL;
 	MVert *mv, *mvert = NULL;
 	BLI_array_declare(mvert);
-	MEdge *me, *medge = NULL;
+	MEdge *med, *medge = NULL;
 	BLI_array_declare(medge);
 	MPoly *mp, *mpoly = NULL;
 	BLI_array_declare(mpoly);
@@ -2326,43 +2326,35 @@
 	ml = cddm->mloop;
 	c = 0;
 	for (i=0; i<totloop; i++, ml++) {
-		if (ml->v == ME_LOOP_INVALID_INDEX)
-			continue;
-		
-		if (vtargetmap[ml->v] != -1)
+		if (vtargetmap[ml->v] != -1) {
 			ml->v = vtargetmap[ml->v];
+		}
 	}
-	
+
 	/*now go through and fix edges and faces*/
-	me = cddm->medge;
+	med = cddm->medge;
 	c = 0;
-	for (i=0; i<dm->numEdgeData; i++, me++) {
-		int v1, v2;
+	for (i=0; i<dm->numEdgeData; i++, med++) {
 		
-		if (me->v1 == me->v2) {
+		if (med->v1 != med->v2) {
+			const unsigned int v1 = (vtargetmap[med->v1] != -1) ? vtargetmap[med->v1] : med->v1;
+			const unsigned int v2 = (vtargetmap[med->v2] != -1) ? vtargetmap[med->v2] : med->v2;
+			void **eh_p= BLI_edgehash_lookup_p(ehash, v1, v2);
+
+			if (eh_p) {
+				newe[i] = GET_INT_FROM_POINTER(*eh_p);
+			}
+			else {
+				BLI_array_append(olde, i);
+				newe[i] = c;
+				BLI_array_append(medge, *med);
+				BLI_edgehash_insert(ehash, v1, v2, SET_INT_IN_POINTER(c));
+				c++;
+			}
+		}
+		else {
 			newe[i] = -1;
-			continue;
 		}
-		
-		if (vtargetmap[me->v1] != -1)
-			v1 = vtargetmap[me->v1];
-		else
-			v1 = me->v1;
-		
-		if (vtargetmap[me->v2] != -1)
-			v2 = vtargetmap[me->v2];
-		else
-			v2 = me->v2;
-		
-		if (BLI_edgehash_haskey(ehash, v1, v2)) {
-			newe[i] = GET_INT_FROM_POINTER(BLI_edgehash_lookup(ehash, v1, v2));
-		} else {
-			BLI_array_append(olde, i);
-			newe[i] = c;
-			BLI_array_append(medge, *me);
-			BLI_edgehash_insert(ehash, v1, v2, SET_INT_IN_POINTER(c));
-			c++;
-		}
 	}
 	
 	mp = cddm->mpoly;
@@ -2370,14 +2362,11 @@
 		MPoly *mp2;
 		
 		ml = cddm->mloop + mp->loopstart;
-		
+
 		c = 0;
 		for (j=0; j<mp->totloop; j++, ml++) {
-			if (ml->v == ME_LOOP_INVALID_INDEX)
-				continue;
-			
-			me = cddm->medge + ml->e;
-			if (me->v1 != me->v2) {
+			med = cddm->medge + ml->e;
+			if (med->v1 != med->v2) {
 				BLI_array_append(oldl, j+mp->loopstart);
 				BLI_array_append(mloop, *ml);
 				newl[j+mp->loopstart] = BLI_array_count(mloop)-1;
@@ -2399,12 +2388,12 @@
 	cddm2 = (CDDerivedMesh*) CDDM_from_template((DerivedMesh*)cddm, BLI_array_count(mvert), BLI_array_count(medge), 0, BLI_array_count(mloop), BLI_array_count(mpoly));
 	
 	/*update edge indices and copy customdata*/
-	me = medge;
-	for (i=0; i<cddm2->dm.numEdgeData; i++, me++) {
-		if (newv[me->v1] != -1)
-			me->v1 = newv[me->v1];
-		if (newv[me->v2] != -1)
-			me->v2 = newv[me->v2];
+	med = medge;
+	for (i=0; i<cddm2->dm.numEdgeData; i++, med++) {
+		if (newv[med->v1] != -1)
+			med->v1 = newv[med->v1];
+		if (newv[med->v2] != -1)
+			med->v2 = newv[med->v2];
 		
 		CustomData_copy_data(&dm->edgeData, &cddm2->dm.edgeData, olde[i], i, 1);
 	}

Modified: branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h
===================================================================
--- branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h	2011-12-29 09:15:06 UTC (rev 42970)
+++ branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h	2011-12-29 09:41:31 UTC (rev 42971)
@@ -246,9 +246,6 @@
 #define ME_ESEL 1
 #define ME_FSEL 2
 
-/* mloop->v */
-#define ME_LOOP_INVALID_INDEX ((unsigned int) -1)
-
 /* mtface->flag */
 #define TF_SELECT	1 /* use MFace hide flag (after 2.43), should be able to reuse after 2.44 */
 #define TF_ACTIVE	2 /* deprecated! */




More information about the Bf-blender-cvs mailing list