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-02 18:54:54 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2007-12-02 18:54:54 +0300
commit6a9c6674ca43d9f05d597d7a94280911e3e97b9d (patch)
treee8d61f1b269393416ca23b63ebd0b04055742869
parent303819276fda483a9c75b76aea8a7201915c21af (diff)
Particles
========= Bugfix for crash with disabling the particles system and saving/loading files, the way it detected if the mesh had changed could not work correct.
-rw-r--r--source/blender/blenkernel/intern/modifier.c29
-rw-r--r--source/blender/blenloader/intern/readfile.c1
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h3
3 files changed, 16 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index fadc41b3042..df2baefac81 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -5088,7 +5088,7 @@ static void particleSystemModifier_deformVerts(
DerivedMesh *dm = derivedData;
ParticleSystemModifierData *psmd= (ParticleSystemModifierData*) md;
ParticleSystem * psys=0;
- int totvert=0,totedge=0,totface=0,needsFree=0;
+ int needsFree=0;
if(ob->particlesystem.first)
psys=psmd->psys;
@@ -5137,9 +5137,6 @@ static void particleSystemModifier_deformVerts(
/* clear old dm */
if(psmd->dm){
- totvert=psmd->dm->getNumVerts(psmd->dm);
- totedge=psmd->dm->getNumEdges(psmd->dm);
- totface=psmd->dm->getNumFaces(psmd->dm);
psmd->dm->needsFree = 1;
psmd->dm->release(psmd->dm);
}
@@ -5157,17 +5154,18 @@ static void particleSystemModifier_deformVerts(
psmd->dm->needsFree = 0;
/* report change in mesh structure */
- if(psmd->dm->getNumVerts(psmd->dm)!=totvert ||
- psmd->dm->getNumEdges(psmd->dm)!=totedge ||
- psmd->dm->getNumFaces(psmd->dm)!=totface){
+ if(psmd->dm->getNumVerts(psmd->dm)!=psmd->totdmvert ||
+ psmd->dm->getNumEdges(psmd->dm)!=psmd->totdmedge ||
+ psmd->dm->getNumFaces(psmd->dm)!=psmd->totdmface){
/* in file read dm hasn't really changed but just wasn't saved in file */
- if(psmd->flag & eParticleSystemFlag_Loaded)
- psmd->flag &= ~eParticleSystemFlag_Loaded;
- else{
- psys->recalc |= PSYS_RECALC_HAIR;
- psys->recalc |= PSYS_DISTR;
- psmd->flag |= eParticleSystemFlag_DM_changed;
- }
+
+ psys->recalc |= PSYS_RECALC_HAIR;
+ psys->recalc |= PSYS_DISTR;
+ psmd->flag |= eParticleSystemFlag_DM_changed;
+
+ psmd->totdmvert= psmd->dm->getNumVerts(psmd->dm);
+ psmd->totdmedge= psmd->dm->getNumEdges(psmd->dm);
+ psmd->totdmface= psmd->dm->getNumFaces(psmd->dm);
}
if(psys){
@@ -7206,4 +7204,5 @@ int modifiers_usesPointCache(Object *ob)
}
}
return 0;
-} \ No newline at end of file
+}
+
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 6236af87479..678e2da276f 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2979,7 +2979,6 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
psmd->dm=0;
psmd->psys=newdataadr(fd, psmd->psys);
- psmd->flag |= eParticleSystemFlag_Loaded;
psmd->flag &= ~eParticleSystemFlag_psys_updated;
} else if (md->type==eModifierType_Explode) {
ExplodeModifierData *psmd = (ExplodeModifierData*) md;
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 982df45e77a..51f0e961709 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -401,7 +401,8 @@ typedef struct ParticleSystemModifierData {
ModifierData modifier;
struct ParticleSystem *psys;
struct DerivedMesh *dm;
- short flag, rt[3];
+ int totdmvert, totdmedge, totdmface;
+ short flag, rt;
} ParticleSystemModifierData;
typedef enum {