Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Eagar <joeedh@gmail.com>2011-06-14 07:16:08 +0400
committerJoseph Eagar <joeedh@gmail.com>2011-06-14 07:16:08 +0400
commit73a545b0d52e61ca8a648f3f81e05dbeb2ba8c9b (patch)
tree894354af7ac7eb54d8d2adb5d7bb2c66b0b63fb1 /source/blender/blenkernel/intern/modifiers_bmesh.c
parentf122a74b1e778bc902fa57f0689ac89c1dacbcef (diff)
=bmesh=
Removed the DerivedMesh face iterators (they sucked). This should make subsurf faster. Also sped up multires a bit (not sure if it's strictly correct, need to look at it later).
Diffstat (limited to 'source/blender/blenkernel/intern/modifiers_bmesh.c')
-rw-r--r--source/blender/blenkernel/intern/modifiers_bmesh.c40
1 files changed, 18 insertions, 22 deletions
diff --git a/source/blender/blenkernel/intern/modifiers_bmesh.c b/source/blender/blenkernel/intern/modifiers_bmesh.c
index 7b6e843e74e..6454019be57 100644
--- a/source/blender/blenkernel/intern/modifiers_bmesh.c
+++ b/source/blender/blenkernel/intern/modifiers_bmesh.c
@@ -112,8 +112,8 @@ BMEditMesh *CDDM_To_BMesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing)
BMEditMesh *em = existing;
MVert *mv, *mvert;
MEdge *me, *medge;
- DMFaceIter *dfiter;
- DMLoopIter *dliter;
+ MPoly *mpoly, *mp;
+ MLoop *mloop, *ml;
BMVert *v, **vtable, **verts=NULL;
BMEdge *e, **etable, **edges=NULL;
BMFace *f;
@@ -171,45 +171,41 @@ BMEditMesh *CDDM_To_BMesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing)
MEM_freeN(medge);
/*do faces*/
- k = 0;
- dfiter = dm->newFaceIter(dm);
- for (; !dfiter->done; dfiter->step(dfiter)) {
+ mpoly = mp = dm->getPolyArray(dm);
+ mloop = dm->getLoopArray(dm);
+ for (i=0; i<dm->numFaceData; i++, mp++) {
BMLoop *l;
BLI_array_empty(verts);
BLI_array_empty(edges);
- dliter = dfiter->getLoopsIter(dfiter);
- for (j=0; !dliter->done; dliter->step(dliter), j++) {
+ ml = mloop + mp->loopstart;
+ for (j=0; j<mp->totloop; j++, ml++) {
BLI_array_growone(verts);
BLI_array_growone(edges);
- verts[j] = vtable[dliter->vindex];
- edges[j] = etable[dliter->eindex];
+ verts[j] = vtable[ml->v];
+ edges[j] = etable[ml->e];
}
- if (j < 2)
- break;
-
- f = BM_Make_Ngon(bm, verts[0], verts[1], edges, dfiter->len, 0);
+ f = BM_Make_Ngon(bm, verts[0], verts[1], edges, mp->totloop, 0);
- if (!f)
+ if (!f)
continue;
- f->head.flag = MEFlags_To_BMFlags(dfiter->flags, BM_FACE);
- f->mat_nr = dfiter->mat_nr;
+ f->head.flag = MEFlags_To_BMFlags(mp->flag, BM_FACE);
+ f->mat_nr = mp->mat_nr;
- dliter = dfiter->getLoopsIter(dfiter);
l = BMIter_New(&liter, bm, BM_LOOPS_OF_FACE, f);
- for (j=0; l; l=BMIter_Step(&liter)) {
+ k = mp->loopstart;
+
+ for (j=0; l; l=BMIter_Step(&liter), k++) {
CustomData_to_bmesh_block(&dm->loopData, &bm->ldata, k, &l->head.data);
- k += 1;
}
- CustomData_to_bmesh_block(&dm->polyData, &bm->pdata,
- dfiter->index, &f->head.data);
+ CustomData_to_bmesh_block(&dm->polyData, &bm->pdata,
+ i, &f->head.data);
}
- dfiter->free(dfiter);
MEM_freeN(vtable);
MEM_freeN(etable);