From 9d782c8a1afb6e42d38d9d32c776dec52451887c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 Jan 2012 15:09:27 +0000 Subject: argument for CDDM_from_BMEditMesh() so creating tessface data is optional, no functional changes since all callers use this so far. --- source/blender/blenkernel/BKE_cdderivedmesh.h | 2 +- source/blender/blenkernel/intern/DerivedMesh.c | 4 +- source/blender/blenkernel/intern/armature.c | 1 - source/blender/blenkernel/intern/cdderivedmesh.c | 52 +++++++++++++--------- source/blender/blenkernel/intern/constraint.c | 2 +- source/blender/bmesh/intern/bmesh_mesh.c | 2 +- source/blender/bmesh/intern/bmesh_opdefines.c | 2 +- source/blender/modifiers/intern/MOD_armature.c | 4 +- source/blender/modifiers/intern/MOD_array.c | 2 +- source/blender/modifiers/intern/MOD_bevel.c | 2 +- source/blender/modifiers/intern/MOD_curve.c | 2 +- source/blender/modifiers/intern/MOD_edgesplit.c | 2 +- source/blender/modifiers/intern/MOD_lattice.c | 2 +- source/blender/modifiers/intern/MOD_util.c | 2 +- source/blender/modifiers/intern/MOD_warp.c | 2 +- .../modifiers/intern/MOD_weightvgproximity.c | 2 +- 16 files changed, 47 insertions(+), 38 deletions(-) diff --git a/source/blender/blenkernel/BKE_cdderivedmesh.h b/source/blender/blenkernel/BKE_cdderivedmesh.h index 15d1dce4e8d..569524aa2d4 100644 --- a/source/blender/blenkernel/BKE_cdderivedmesh.h +++ b/source/blender/blenkernel/BKE_cdderivedmesh.h @@ -57,7 +57,7 @@ int CDDM_Check(struct DerivedMesh *dm); struct DerivedMesh *CDDM_from_mesh(struct Mesh *mesh, struct Object *ob); /* creates a CDDerivedMesh from the given BMEditMesh */ -DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me, int use_mdisps); +DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me, int use_mdisps, int use_tessface); /* merge verts */ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 98d73a2a93b..059297f392a 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -807,7 +807,7 @@ static DerivedMesh *create_orco_dm(Object *ob, Mesh *me, BMEditMesh *em, int lay float (*orco)[3]; int free; - if(em) dm= CDDM_from_BMEditMesh(em, me, 0); + if(em) dm= CDDM_from_BMEditMesh(em, me, FALSE, TRUE); else dm= CDDM_from_mesh(me, ob); orco= get_orco_coords_dm(ob, em, layer, &free); @@ -1680,7 +1680,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D } } else { - dm = CDDM_from_BMEditMesh(em, ob->data, 0); + dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, TRUE); if(deformedVerts) { CDDM_apply_vert_coords(dm, deformedVerts); diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 4f83bcf7e7f..184943490f2 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -945,7 +945,6 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, else dvert = NULL; } else dvert = NULL; - if(armature_def_nr >= 0 && dvert) { armature_weight= defvert_find_weight(dvert, armature_def_nr); diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 40a552278a6..3746e089538 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1963,7 +1963,7 @@ static void loops_to_customdata_corners(BMesh *bm, CustomData *facedata, } } -DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdisps) +DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdisps, int use_tessface) { DerivedMesh *dm = CDDM_new(em->bm->totvert, em->bm->totedge, em->tottri, em->bm->totloop, em->bm->totface); @@ -1980,7 +1980,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis MPoly *mpoly = cddm->mpoly; int numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL); int numTex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY); - int *index, *polyindex, add_orig; + int *index, add_orig; int has_crease, has_edge_bweight, has_vert_bweight; CustomDataMask mask; unsigned int i, j; @@ -2009,7 +2009,9 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis CD_CALLOC, dm->numPolyData); /*add tesselation mface layers*/ - CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em->tottri); + if (use_tessface) { + CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em->tottri); + } index = dm->getVertDataArray(dm, CD_ORIGINDEX); @@ -2056,27 +2058,32 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis } bm->elem_index_dirty &= ~BM_EDGE; - BM_ElemIndex_Ensure(bm, BM_FACE); + /* avoid this where possiblem, takes extra memory */ + if (use_tessface) { + int *polyindex; - polyindex = dm->getTessFaceDataArray(dm, CD_POLYINDEX); - index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX); - for(i = 0; i < dm->numTessFaceData; i++, index++, polyindex++) { - MFace *mf = &mface[i]; - BMLoop **l = em->looptris[i]; - efa = l[0]->f; + BM_ElemIndex_Ensure(bm, BM_FACE); - mf->v1 = BM_GetIndex(l[0]->v); - mf->v2 = BM_GetIndex(l[1]->v); - mf->v3 = BM_GetIndex(l[2]->v); - mf->v4 = 0; - mf->mat_nr = efa->mat_nr; - mf->flag = BM_Face_Flag_To_MEFlag(efa); - - *index = add_orig ? BM_GetIndex(efa) : *(int*)CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_ORIGINDEX); - *polyindex = BM_GetIndex(efa); + polyindex = dm->getTessFaceDataArray(dm, CD_POLYINDEX); + index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX); + for(i = 0; i < dm->numTessFaceData; i++, index++, polyindex++) { + MFace *mf = &mface[i]; + BMLoop **l = em->looptris[i]; + efa = l[0]->f; - loops_to_customdata_corners(bm, &dm->faceData, i, l, numCol, numTex); - test_index_face(mf, &dm->faceData, i, 3); + mf->v1 = BM_GetIndex(l[0]->v); + mf->v2 = BM_GetIndex(l[1]->v); + mf->v3 = BM_GetIndex(l[2]->v); + mf->v4 = 0; + mf->mat_nr = efa->mat_nr; + mf->flag = BM_Face_Flag_To_MEFlag(efa); + + *index = add_orig ? BM_GetIndex(efa) : *(int*)CustomData_bmesh_get(&bm->pdata, efa->head.data, CD_ORIGINDEX); + *polyindex = BM_GetIndex(efa); + + loops_to_customdata_corners(bm, &dm->faceData, i, l, numCol, numTex); + test_index_face(mf, &dm->faceData, i, 3); + } } index = CustomData_get_layer(&dm->polyData, CD_ORIGINDEX); @@ -2086,6 +2093,8 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis BMLoop *l; MPoly *mp = &mpoly[i]; + BM_SetIndex(efa, i); /* set_inline */ + mp->totloop = efa->len; mp->flag = BM_Face_Flag_To_MEFlag(efa); mp->loopstart = j; @@ -2104,6 +2113,7 @@ DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdis if (add_orig) *index = i; } + bm->elem_index_dirty &= ~BM_FACE; return dm; } diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 029911d26d7..5babb626177 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -454,7 +454,7 @@ static void contarget_get_mesh_mat (Object *ob, const char *substring, float mat /* get DerivedMesh */ if (em) { /* target is in editmode, so get a special derived mesh */ - dm = CDDM_from_BMEditMesh(em, ob->data, 0); + dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, TRUE); freeDM= 1; } else { diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index 876866cfa0a..2565dd0f649 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -375,7 +375,7 @@ static void bmesh_set_mdisps_space(BMesh *bm, int from, int to) if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) { Object *ob = bm->ob; BMEditMesh *em = BMEdit_Create(bm); - DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, 1); + DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, TRUE, TRUE); MDisps *mdisps; BMFace *f; BMIter iter; diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index fe4f3680aaf..d0d85f7fb0d 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -159,7 +159,7 @@ static BMOpDefine def_edgerotate = { "edgerotate", {{BMOP_OPSLOT_ELEMENT_BUF, "edges"}, //input edges {BMOP_OPSLOT_ELEMENT_BUF, "edgeout"}, //newly spun edges - {BMOP_OPSLOT_INT, "ccw"}, //rotate edge counter-clockwise if true, othewise clockwise + {BMOP_OPSLOT_INT, "ccw"}, //rotate edge counter-clockwise if true, othewise clockwise {0} /*null-terminating sentinel*/, }, bmesh_edgerotate_exec, diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c index 55a2cab4a76..fe5893d0911 100644 --- a/source/blender/modifiers/intern/MOD_armature.c +++ b/source/blender/modifiers/intern/MOD_armature.c @@ -142,7 +142,7 @@ static void deformVertsEM( ArmatureModifierData *amd = (ArmatureModifierData*) md; DerivedMesh *dm = derivedData; - if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, 0); + if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE); modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */ @@ -166,7 +166,7 @@ static void deformMatricesEM( ArmatureModifierData *amd = (ArmatureModifierData*) md; DerivedMesh *dm = derivedData; - if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, 0); + if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE); armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts, amd->deformflag, NULL, amd->defgrp_name); diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index 3c599d6eafd..73c4903b277 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -389,7 +389,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd, BMO_pop(em->bm); BMEdit_RecalcTesselation(em); - cddm = CDDM_from_BMEditMesh(em, NULL, 0); + cddm = CDDM_from_BMEditMesh(em, NULL, FALSE, TRUE); BMEdit_Free(em); MEM_freeN(em); diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c index 1a3f8cdb7f3..7e573697762 100644 --- a/source/blender/modifiers/intern/MOD_bevel.c +++ b/source/blender/modifiers/intern/MOD_bevel.c @@ -159,7 +159,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *ob, cddm->release(cddm); } - cddm = CDDM_from_BMEditMesh(em, NULL, 1); + cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, TRUE); BMEdit_Free(em); MEM_freeN(em); diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c index 945c5c5a583..ab9b509ee9c 100644 --- a/source/blender/modifiers/intern/MOD_curve.c +++ b/source/blender/modifiers/intern/MOD_curve.c @@ -129,7 +129,7 @@ static void deformVertsEM( { DerivedMesh *dm = derivedData; - if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, 0); + if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE); deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0); diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c index 2984a387fd8..da5e9ccc45f 100644 --- a/source/blender/modifiers/intern/MOD_edgesplit.c +++ b/source/blender/modifiers/intern/MOD_edgesplit.c @@ -108,7 +108,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj cddm->release(cddm); } - cddm = CDDM_from_BMEditMesh(em, NULL, 1); + cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, TRUE); BMEdit_Free(em); MEM_freeN(em); diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c index 605c057c855..2e8b5e3e6f3 100644 --- a/source/blender/modifiers/intern/MOD_lattice.c +++ b/source/blender/modifiers/intern/MOD_lattice.c @@ -124,7 +124,7 @@ static void deformVertsEM( { DerivedMesh *dm = derivedData; - if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, 0); + if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE); deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0); diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c index 7fdbea19cfb..e9b60f33fa2 100644 --- a/source/blender/modifiers/intern/MOD_util.c +++ b/source/blender/modifiers/intern/MOD_util.c @@ -185,7 +185,7 @@ DerivedMesh *get_dm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm, float (* return dm; if(ob->type==OB_MESH) { - if(em) dm= CDDM_from_BMEditMesh(em, ob->data, 0); + if(em) dm= CDDM_from_BMEditMesh(em, ob->data, FALSE, TRUE); else dm = CDDM_from_mesh((struct Mesh *)(ob->data), ob); if(vertexCos) { diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c index 5961fae1aba..d20a914a531 100644 --- a/source/blender/modifiers/intern/MOD_warp.c +++ b/source/blender/modifiers/intern/MOD_warp.c @@ -338,7 +338,7 @@ static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *editD if(use_dm) { if(!derivedData) - dm = CDDM_from_BMEditMesh(editData, ob->data, 0); + dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE); } deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0); diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c index 732a46cb8b6..022aa150d49 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.c +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c @@ -451,7 +451,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der else if (obr->type == OB_MESH) { Mesh *me = (Mesh*)obr->data; if (me->edit_btmesh) - target_dm = CDDM_from_BMEditMesh(me->edit_btmesh, me, 0); + target_dm = CDDM_from_BMEditMesh(me->edit_btmesh, me, FALSE, TRUE); else target_dm = CDDM_from_mesh(me, obr); } -- cgit v1.2.3