From 971155b3733f56ebf3aedddc65a6110a5b1229ae Mon Sep 17 00:00:00 2001 From: Joseph Eagar Date: Sat, 5 Sep 2009 06:10:30 +0000 Subject: part one of profiling/optimizing. made cddm not update tesselations itself in cddm_from_mesh. also made BMO_Test/Set/ClearFlag into macros, and tweaked the way normals are calculated. --- source/blender/blenkernel/intern/modifiers_bmesh.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'source/blender/blenkernel/intern/modifiers_bmesh.c') diff --git a/source/blender/blenkernel/intern/modifiers_bmesh.c b/source/blender/blenkernel/intern/modifiers_bmesh.c index e7defaad567..7b4edc3c622 100644 --- a/source/blender/blenkernel/intern/modifiers_bmesh.c +++ b/source/blender/blenkernel/intern/modifiers_bmesh.c @@ -177,6 +177,7 @@ BMEditMesh *CDDM_To_BMesh(DerivedMesh *dm, BMEditMesh *existing) } MEM_freeN(medge); + /*do faces*/ k = 0; dfiter = dm->newFaceIter(dm); for (; !dfiter->done; dfiter->step(dfiter)) { @@ -215,7 +216,6 @@ BMEditMesh *CDDM_To_BMesh(DerivedMesh *dm, BMEditMesh *existing) CustomData_to_bmesh_block(&dm->polyData, &bm->pdata, dfiter->index, &f->head.data); } - dfiter->free(dfiter); MEM_freeN(vtable); @@ -275,7 +275,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, Scene *scene, Object *ob, DerivedMesh *dm, int initFlags) { - DerivedMesh *cddm = CDDM_copy(dm); + DerivedMesh *cddm = dm; //CDDM_copy(dm); copying shouldn't be necassary here, as all modifiers return CDDM's BMEditMesh *em = CDDM_To_BMesh(cddm, NULL); BMOperator op, oldop, weldop; int i, j, indexLen; @@ -388,8 +388,8 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, MTC_Mat4CpyMat4(final_offset, tmp_mat); } - cddm->needsFree = 1; - cddm->release(cddm); + //cddm->needsFree = 1; + //cddm->release(cddm); BMO_Init_Op(&weldop, "weldverts"); BMO_InitOpf(em->bm, &op, "dupe geom=%avef"); @@ -475,7 +475,9 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, if (j > 0) BMO_Finish_Op(em->bm, &op); - BMO_Exec_Op(em->bm, &weldop); + if (amd->flags & MOD_ARR_MERGE) + BMO_Exec_Op(em->bm, &weldop); + BMO_Finish_Op(em->bm, &weldop); //BMO_CallOpf(em->bm, "removedoubles verts=%av dist=%f", amd->merge_dist); @@ -533,11 +535,11 @@ DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd, float mtx[4][4], imtx[4][4]; int i, j; - cddm = CDDM_copy(dm); + cddm = dm; //CDDM_copy(dm); copying shouldn't be necassary here, as all modifiers return CDDM's em = CDDM_To_BMesh(dm, NULL); - cddm->needsFree = 1; - cddm->release(cddm); + //cddm->needsFree = 1; + //cddm->release(cddm); /*convienence variable*/ bm = em->bm; -- cgit v1.2.3