[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