diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-12-21 11:28:14 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-12-21 11:28:14 +0400 |
commit | 99433a34667ea3c9fd10be6214e905288304e95f (patch) | |
tree | c23b9a700466021cadd3c2f2943560f855c7fb24 /source/blender/blenkernel/intern/cdderivedmesh.c | |
parent | f576c281ba7746175dd9bae0a644cda4513bd51c (diff) |
minor bmesh improvements
- use 2 omp sections for vert -> (edge, face) selection flushing.
- dont use face-loop iterator for cddm_from_bmesh_ex conversion to give some speedup (some modifiers use this).
- use float(*)[3] for functions that return coords.
Diffstat (limited to 'source/blender/blenkernel/intern/cdderivedmesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/cdderivedmesh.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 34adeb4fefb..61d0936d41d 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1875,7 +1875,7 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps, bm->totface); CDDerivedMesh *cddm = (CDDerivedMesh *)dm; - BMIter iter, liter; + BMIter iter; BMVert *eve; BMEdge *eed; BMFace *efa; @@ -1913,7 +1913,7 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps, CD_CALLOC, dm->numLoopData); CustomData_merge(&bm->pdata, &dm->polyData, mask, CD_CALLOC, dm->numPolyData); - + /* add tessellation mface layers */ if (use_tessface) { CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em_tottri); @@ -2002,7 +2002,8 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps, j = 0; efa = BM_iter_new(&iter, bm, BM_FACES_OF_MESH, NULL); for (i = 0; efa; i++, efa = BM_iter_step(&iter), index++) { - BMLoop *l; + BMLoop *l_iter; + BMLoop *l_first; MPoly *mp = &mpoly[i]; BM_elem_index_set(efa, i); /* set_inline */ @@ -2011,15 +2012,16 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps, mp->flag = BM_face_flag_to_mflag(efa); mp->loopstart = j; mp->mat_nr = efa->mat_nr; - - BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) { - mloop->v = BM_elem_index_get(l->v); - mloop->e = BM_elem_index_get(l->e); - CustomData_from_bmesh_block(&bm->ldata, &dm->loopData, l->head.data, j); + + l_iter = l_first = BM_FACE_FIRST_LOOP(efa); + do { + mloop->v = BM_elem_index_get(l_iter->v); + mloop->e = BM_elem_index_get(l_iter->e); + CustomData_from_bmesh_block(&bm->ldata, &dm->loopData, l_iter->head.data, j); j++; mloop++; - } + } while ((l_iter = l_iter->next) != l_first); CustomData_from_bmesh_block(&bm->pdata, &dm->polyData, efa->head.data, i); |