diff options
author | Joseph Eagar <joeedh@gmail.com> | 2009-09-05 10:10:30 +0400 |
---|---|---|
committer | Joseph Eagar <joeedh@gmail.com> | 2009-09-05 10:10:30 +0400 |
commit | 971155b3733f56ebf3aedddc65a6110a5b1229ae (patch) | |
tree | 635396624de576ba2bd715b1b94bb729316ffbcb /source/blender/blenkernel | |
parent | bc0a071c29868f4e0cffdec663bb5bc2bbd2c40f (diff) |
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.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/cdderivedmesh.c | 11 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/modifiers_bmesh.c | 18 |
2 files changed, 15 insertions, 14 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index cbb9103ff61..14f03522017 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -951,8 +951,8 @@ DerivedMesh *CDDM_from_mesh(Mesh *mesh, Object *ob) mesh->totvert); CustomData_merge(&mesh->edata, &dm->edgeData, mask, alloctype, mesh->totedge); - //CustomData_merge(&mesh->fdata, &dm->faceData, mask, alloctype, - // mesh->totface); + CustomData_merge(&mesh->fdata, &dm->faceData, mask|CD_MASK_ORIGINDEX, alloctype, + mesh->totface); CustomData_merge(&mesh->ldata, &dm->loopData, mask, alloctype, mesh->totloop); CustomData_merge(&mesh->pdata, &dm->polyData, mask, alloctype, @@ -962,7 +962,7 @@ DerivedMesh *CDDM_from_mesh(Mesh *mesh, Object *ob) cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE); cddm->mloop = CustomData_get_layer(&dm->loopData, CD_MLOOP); cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY); - //cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE); + cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE); index = CustomData_get_layer(&dm->vertData, CD_ORIGINDEX); for(i = 0; i < mesh->totvert; ++i, ++index) @@ -976,9 +976,8 @@ DerivedMesh *CDDM_from_mesh(Mesh *mesh, Object *ob) for(i = 0; i < mesh->totpoly; ++i, ++index) *index = i; - /*recalculates mfaces and sets the mface origindex layer - to index mypolys.*/ - cdDM_recalcTesselation((DerivedMesh*)cddm); + if (!CustomData_has_layer(&cddm->dm.faceData, CD_ORIGINDEX)) + CustomData_add_layer(&dm->faceData, CD_ORIGINDEX, CD_CALLOC, NULL, mesh->totface); return dm; } 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; |