Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2012-03-19 09:13:41 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2012-03-19 09:13:41 +0400
commite508c2d9e1151a75926937cfdfb2799d2959bca1 (patch)
tree6394e4900fe8a77506716477797bf27dca8eda86 /source/blender/blenkernel/intern/multires.c
parent753056d4e82094fe8993c0efade081600b14359b (diff)
Add a multires function to delete MDisps.
The code was duplicated in various places, replaced with calls to a new function, multires_customdata_delete().
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r--source/blender/blenkernel/intern/multires.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 102f1cc335d..19f8cee989d 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -77,6 +77,27 @@ typedef enum {
static void multires_mvert_to_ss(DerivedMesh *dm, MVert *mvert);
static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, DispOp op, DMGridData **oldGridData, int totlvl);
+/** Customdata **/
+
+void multires_customdata_delete(Mesh *me)
+{
+ if(me->edit_btmesh) {
+ BMEditMesh *em= me->edit_btmesh;
+ /* CustomData_external_remove is used here only to mark layer
+ * as non-external for further free-ing, so zero element count
+ * looks safer than em->totface */
+ CustomData_external_remove(&em->bm->ldata, &me->id,
+ CD_MDISPS, 0);
+ BM_data_layer_free(em->bm, &em->bm->ldata, CD_MDISPS);
+ }
+ else {
+ CustomData_external_remove(&me->ldata, &me->id,
+ CD_MDISPS, me->totloop);
+ CustomData_free_layer_active(&me->ldata, CD_MDISPS,
+ me->totloop);
+ }
+}
+
/** Grid hiding **/
static BLI_bitmap multires_mdisps_upsample_hidden(BLI_bitmap lo_hidden,
int lo_level,
@@ -619,8 +640,7 @@ static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl)
}
}
else {
- CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop);
- CustomData_free_layer_active(&me->ldata, CD_MDISPS, me->totloop);
+ multires_customdata_delete(me);
}
}
@@ -2005,10 +2025,7 @@ static void multires_sync_levels(Scene *scene, Object *ob, Object *to_ob)
* upsampled correct without modifier data.
* just remove mdisps if no multires present (nazgul) */
- Mesh *me= (Mesh*)ob->data;
-
- CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop);
- CustomData_free_layer_active(&me->ldata, CD_MDISPS, me->totloop);
+ multires_customdata_delete(ob->data);
}
if (!mmd || !to_mmd) return;