diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2008-08-14 03:36:23 +0400 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2008-08-14 03:36:23 +0400 |
commit | 85292aacc954c552a2f4dc20f9df33dba92eeeea (patch) | |
tree | decbdc752a782020316630d819678e0484b4e41b /source/blender | |
parent | 5ad9495bfb0f0cf782595a21a9e4fd420f7fc3bc (diff) |
Better performance for loading old multires files by blocking multires updates during subdivision.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_multires.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 14 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 2 | ||||
-rw-r--r-- | source/blender/src/buttons_editing.c | 2 |
4 files changed, 8 insertions, 12 deletions
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index 3273c484a33..d00014a03f2 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -135,7 +135,7 @@ struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData* int multiresModifier_switch_level(struct Object *ob, const int); void multiresModifier_join(struct Object *ob); -void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob); +void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int updateblock); void multiresModifier_setLevel(void *mmd_v, void *ob_v); int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object *dst, struct Object *src); diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 0b0ea3e7870..b9f47114f6a 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -1181,7 +1181,7 @@ void multiresModifier_join(Object *ob) /* TODO: subdivision should be doable in one step rather than iteratively. */ for(i = mmd->totlvl; i < highest_lvl; ++i) - multiresModifier_subdivide(mmd, base->object); + multiresModifier_subdivide(mmd, base->object, 0); } } base = base->next; @@ -1466,13 +1466,13 @@ static void multires_subdisp(DerivedMesh *orig, Mesh *me, DerivedMesh *final, in mrdm->release(mrdm); } -void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob) +void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock) { DerivedMesh *final = NULL; int totsubvert, totsubface, totsubedge; Mesh *me = get_mesh(ob); MDisps *mdisps; - int i, slo, shi; + int i; if(mmd->totlvl == multires_max_levels) { // TODO @@ -1484,15 +1484,11 @@ void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob) ++mmd->lvl; ++mmd->totlvl; - slo = multires_side_tot[mmd->totlvl - 2]; - shi = multires_side_tot[mmd->totlvl - 1]; - mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS); if(!mdisps) mdisps = CustomData_add_layer(&me->fdata, CD_MDISPS, CD_DEFAULT, NULL, me->totface); - - if(mdisps->disps) { + if(mdisps->disps && !updateblock) { DerivedMesh *orig, *mrdm; MultiresModifierData mmd_sub; @@ -1523,7 +1519,7 @@ void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob) } - if(final) { + if(final && !updateblock) { DerivedMesh *orig; orig = CDDM_from_mesh(me, NULL); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index c7893bcfaf0..6eabf18fe74 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -7793,7 +7793,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) BLI_insertlinkbefore(&ob->modifiers, md, mmd); for(i = 1; i < me->mr->level_count; ++i) - multiresModifier_subdivide(mmd, ob); + multiresModifier_subdivide(mmd, ob, 1); mmd->lvl = mmd->totlvl; orig = CDDM_from_mesh(me, NULL); diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c index 52ed65a8936..92af7d63e17 100644 --- a/source/blender/src/buttons_editing.c +++ b/source/blender/src/buttons_editing.c @@ -1666,7 +1666,7 @@ static void multiresModifier_subdivide_button(void *mmd_v, void *ob_v) MultiresModifierData *mmd = mmd_v; if(mmd && ob_v) { - multiresModifier_subdivide(mmd, ob_v); + multiresModifier_subdivide(mmd, ob_v, 0); BIF_undo_push("Multires subdivide"); } } |