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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-07-05 16:20:49 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-07-05 16:20:49 +0400
commitefeb8148c8dc03a08121767492e34fa31c70d72b (patch)
treebd0fdcd50540693012ebb47b26b6a61fc4d7b32e /source/blender/blenkernel
parent5bacd2df29855e0628d8a48c1f0321b8d1c429ac (diff)
Fix #22213: applying deform modifier in front of multires modifier crashes,
should not do multires reshape in this case, but just regular apply.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_multires.h3
-rw-r--r--source/blender/blenkernel/intern/multires.c7
2 files changed, 7 insertions, 3 deletions
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index e8bbb58a895..39fc795e6ff 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -47,7 +47,8 @@ void multires_force_external_reload(struct Object *ob);
struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*,
int local_mmd, struct DerivedMesh*, struct Object *, int, int);
-struct MultiresModifierData *find_multires_modifier(struct Scene *scene, struct Object *ob);
+struct MultiresModifierData *find_multires_modifier_before(struct Scene *scene,
+ struct ModifierData *lastmd);
struct DerivedMesh *get_multires_dm(struct Scene *scene, struct MultiresModifierData *mmd,
struct Object *ob);
void multiresModifier_join(struct Object *);
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 76d82889cda..56d517f1e13 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -75,11 +75,11 @@ DerivedMesh *get_multires_dm(Scene *scene, MultiresModifierData *mmd, Object *ob
return dm;
}
-MultiresModifierData *find_multires_modifier(Scene *scene, Object *ob)
+MultiresModifierData *find_multires_modifier_before(Scene *scene, ModifierData *lastmd)
{
ModifierData *md;
- for(md = ob->modifiers.first; md; md = md->next) {
+ for(md = lastmd; md; md = md->prev) {
if(md->type == eModifierType_Multires) {
if (modifier_isEnabled(scene, md, eModifierMode_Realtime))
return (MultiresModifierData*)md;
@@ -249,6 +249,9 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm
int numVerts, result;
float (*deformedVerts)[3];
+ if(multires_get_level(ob, mmd, 0) == 0)
+ return 0;
+
/* Create DerivedMesh for deformation modifier */
dm = get_multires_dm(scene, mmd, ob);
numVerts= dm->getNumVerts(dm);