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>2007-12-17 14:47:24 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2007-12-17 14:47:24 +0300
commitf33f7ed62a99f44df5a3c21830841504617cc9f1 (patch)
treea3f5be2cef874c048b00d4cff59f21478baa6ad7 /source/blender/blenkernel
parenta4dc7c66763a4fc4ffac5351e159c19bd6e6da68 (diff)
Bugfix: memory leak with multi-modifier, if the modifier
using the previous coordinates was disabled.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_modifier.h1
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c7
-rw-r--r--source/blender/blenkernel/intern/modifier.c11
3 files changed, 18 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index 931f0e12fd4..4b679c1587f 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -292,6 +292,7 @@ struct Object *modifiers_isDeformedByArmature(struct Object *ob);
struct Object *modifiers_isDeformedByLattice(struct Object *ob);
int modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
int modifiers_isDeformed(struct Object *ob);
+void modifier_freeTemporaryData(struct ModifierData *md);
int modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 4cc134476e4..61ad1bd0ebf 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1877,7 +1877,7 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
int needMapping, CustomDataMask dataMask)
{
Mesh *me = ob->data;
- ModifierData *md = modifiers_getVirtualModifierList(ob);
+ ModifierData *firstmd, *md;
LinkNode *datamasks, *curr;
CustomDataMask mask;
float (*deformedVerts)[3] = NULL;
@@ -1886,6 +1886,8 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
int fluidsimMeshUsed = 0;
int required_mode;
+ md = firstmd = modifiers_getVirtualModifierList(ob);
+
modifiers_clearErrors(ob);
/* we always want to keep original indices */
@@ -2097,6 +2099,9 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
}
}
+ for(md=first; md; md=md->next)
+ modifier_freeTemporaryData(md);
+
/* Yay, we are done. If we have a DerivedMesh and deformed vertices
* need to apply these back onto the DerivedMesh. If we have no
* DerivedMesh then we need to build one.
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 4672b5d6da8..ad0092e1711 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -7219,3 +7219,14 @@ int modifiers_usesPointCache(Object *ob)
return 0;
}
+void modifier_freeTemporaryData(ModifierData *md)
+{
+ if(md->type == eModifierType_Armature) {
+ ArmatureModifierData *amd= (ArmatureModifierData*)md;
+
+ if(amd->prevCos)
+ MEM_freeN(amd->prevCos);
+ }
+}
+
+