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:
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user