[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53687] trunk/blender/source/blender/ blenkernel/intern/editderivedmesh.c: speedup for editmesh getVert and getEdge, were doing 2x customdata layer lookups for crease and bevel weight, also make use of the existing meshdata array for lookups.

Campbell Barton ideasman42 at gmail.com
Wed Jan 9 19:20:12 CET 2013


Revision: 53687
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53687
Author:   campbellbarton
Date:     2013-01-09 18:20:11 +0000 (Wed, 09 Jan 2013)
Log Message:
-----------
speedup for editmesh getVert and getEdge, were doing 2x customdata layer lookups for crease and bevel weight, also make use of the existing meshdata array for lookups.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2013-01-09 16:15:06 UTC (rev 53686)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2013-01-09 18:20:11 UTC (rev 53687)
@@ -1309,14 +1309,16 @@
 
 static int bmvert_to_mvert(BMesh *bm, BMVert *ev, MVert *vert_r)
 {
+	float *f;
+
 	copy_v3_v3(vert_r->co, ev->co);
 
 	normal_float_to_short_v3(vert_r->no, ev->no);
 
 	vert_r->flag = BM_vert_flag_to_mflag(ev);
 
-	if (CustomData_has_layer(&bm->vdata, CD_BWEIGHT)) {
-		vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, ev, CD_BWEIGHT) * 255.0f);
+	if ((f = CustomData_bmesh_get(&bm->vdata, ev->head.data, CD_BWEIGHT))) {
+		vert_r->bweight = (unsigned char)((*f) * 255.0f);
 	}
 
 	return 1;
@@ -1332,8 +1334,8 @@
 		return;
 	}
 
-	// ev = EDBM_vert_at_index(bmdm->tc, index);
-	ev = BM_vert_at_index(bmdm->tc->bm, index); /* warning, does list loop, _not_ ideal */
+	ev = bmdm->tc->vert_index[index];  /* should be EDBM_vert_at_index() */
+	// ev = BM_vert_at_index(bmdm->tc->bm, index); /* warning, does list loop, _not_ ideal */
 
 	bmvert_to_mvert(bmdm->tc->bm, ev, vert_r);
 	if (bmdm->vertexCos)
@@ -1345,27 +1347,27 @@
 	EditDerivedBMesh *bmdm = (EditDerivedBMesh *)dm;
 	BMesh *bm = bmdm->tc->bm;
 	BMEdge *e;
+	float *f;
 
 	if (index < 0 || index >= bmdm->te) {
 		printf("error in emDM_getEdge.\n");
 		return;
 	}
 
-	// e = EDBM_edge_at_index(bmdm->tc, index);
-	e = BM_edge_at_index(bmdm->tc->bm, index); /* warning, does list loop, _not_ ideal */
+	e = bmdm->tc->edge_index[index];  /* should be EDBM_edge_at_index() */
+	// e = BM_edge_at_index(bmdm->tc->bm, index); /* warning, does list loop, _not_ ideal */
 
-	if (CustomData_has_layer(&bm->edata, CD_BWEIGHT)) {
-		edge_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->edata, e, CD_BWEIGHT) * 255.0f);
-	}
-
-	if (CustomData_has_layer(&bm->edata, CD_CREASE)) {
-		edge_r->crease = (unsigned char) (BM_elem_float_data_get(&bm->edata, e, CD_CREASE) * 255.0f);
-	}
-
 	edge_r->flag = BM_edge_flag_to_mflag(e);
 
 	edge_r->v1 = BM_elem_index_get(e->v1);
 	edge_r->v2 = BM_elem_index_get(e->v2);
+
+	if ((f = CustomData_bmesh_get(&bm->edata, e->head.data, CD_BWEIGHT))) {
+		edge_r->bweight = (unsigned char)((*f) * 255.0f);
+	}
+	if ((f = CustomData_bmesh_get(&bm->edata, e->head.data, CD_CREASE))) {
+		edge_r->crease = (unsigned char)((*f) * 255.0f);
+	}
 }
 
 static void emDM_getTessFace(DerivedMesh *dm, int index, MFace *face_r)




More information about the Bf-blender-cvs mailing list