diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2007-12-02 18:54:54 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2007-12-02 18:54:54 +0300 |
commit | 6a9c6674ca43d9f05d597d7a94280911e3e97b9d (patch) | |
tree | e8d61f1b269393416ca23b63ebd0b04055742869 | |
parent | 303819276fda483a9c75b76aea8a7201915c21af (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.c | 29 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 1 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_modifier_types.h | 3 |
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 { |