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>2008-08-14 03:36:23 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2008-08-14 03:36:23 +0400
commit85292aacc954c552a2f4dc20f9df33dba92eeeea (patch)
treedecbdc752a782020316630d819678e0484b4e41b /source/blender
parent5ad9495bfb0f0cf782595a21a9e4fd420f7fc3bc (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.h2
-rw-r--r--source/blender/blenkernel/intern/multires.c14
-rw-r--r--source/blender/blenloader/intern/readfile.c2
-rw-r--r--source/blender/src/buttons_editing.c2
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");
}
}