call CDDM_from_BMEditMesh without creating tessface data for modifiers.

- in the case of deform modifiers this is very safe (assuming the mods themselves dont need tessface data), since the DM is freed right after, so this is an easy speedup.

- in the case of bevel and split edge modifiers this should still work out fine since mods that need tessface data will generate it.
This commit is contained in:
2012-01-18 15:29:25 +00:00
parent 9d782c8a1a
commit ad3e9900d6
11 changed files with 12 additions and 12 deletions

View File

@@ -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, FALSE, TRUE);
if(em) dm= CDDM_from_BMEditMesh(em, me, FALSE, FALSE);
else dm= CDDM_from_mesh(me, ob);
orco= get_orco_coords_dm(ob, em, layer, &free);

View File

@@ -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, FALSE, TRUE);
dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, FALSE);
freeDM= 1;
}
else {

View File

@@ -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, TRUE, TRUE);
DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
MDisps *mdisps;
BMFace *f;
BMIter iter;

View File

@@ -142,7 +142,7 @@ static void deformVertsEM(
ArmatureModifierData *amd = (ArmatureModifierData*) md;
DerivedMesh *dm = derivedData;
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE);
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
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, FALSE, TRUE);
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts,
amd->deformflag, NULL, amd->defgrp_name);

View File

@@ -389,7 +389,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
BMO_pop(em->bm);
BMEdit_RecalcTesselation(em);
cddm = CDDM_from_BMEditMesh(em, NULL, FALSE, TRUE);
cddm = CDDM_from_BMEditMesh(em, NULL, FALSE, FALSE);
BMEdit_Free(em);
MEM_freeN(em);

View File

@@ -159,7 +159,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *ob,
cddm->release(cddm);
}
cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, TRUE);
cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
BMEdit_Free(em);
MEM_freeN(em);

View File

@@ -129,7 +129,7 @@ static void deformVertsEM(
{
DerivedMesh *dm = derivedData;
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE);
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);

View File

@@ -108,7 +108,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj
cddm->release(cddm);
}
cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, TRUE);
cddm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
BMEdit_Free(em);
MEM_freeN(em);

View File

@@ -124,7 +124,7 @@ static void deformVertsEM(
{
DerivedMesh *dm = derivedData;
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, TRUE);
if(!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);

View File

@@ -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, FALSE, TRUE);
dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
}
deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);

View File

@@ -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, FALSE, TRUE);
target_dm = CDDM_from_BMEditMesh(me->edit_btmesh, me, FALSE, FALSE);
else
target_dm = CDDM_from_mesh(me, obr);
}