diff options
author | Ton Roosendaal <ton@blender.org> | 2006-09-17 17:12:57 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-09-17 17:12:57 +0400 |
commit | 0d4f5335bf7ea1b8548ba8a30c4a5fa909729b18 (patch) | |
tree | 940a44bc6fa2da3a3b2558d41724b7ef74e5d294 /source | |
parent | 3eb8262cb5346bed03e6fcc245bb1ea6b101caea (diff) |
Bugfix #4925
When using a particle system in a dupli-group, and the group is in the
current scene but not visible, the particles are calculated on wrong
position. This is the recurring trouble with particle calculating... which
doesn't do despgraph stuff.
This commit fixes the error, but it will still display particles *once*
(one draw) on the wrong location. That's a lag in the system I cannot
solve quickly...
Note that this system does work OK when you put the group in another Scene,
or linked from another file. That's what it was coded for...
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/effect.c | 6 |
2 files changed, 4 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 339958e2041..e1140b7c442 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -3307,7 +3307,6 @@ void makeDispListMesh(Object *ob) mesh_build_data(ob); if(paf) { - printf("ob %s %d\n", ob->id.name, ob->recalc); if((paf->flag & PAF_STATIC) || (ob->recalc & OB_RECALC_TIME)==0) build_particle_system(ob); } diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 4289bf627bd..223255808a7 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -1559,8 +1559,10 @@ static pMatrixCache *cache_object_matrices(Object *ob, int start, int end) /* all objects get tagged recalc that influence this object (does group too) */ /* another hack; while transform you cannot call this, it sets own recalc flags */ - if(G.moving==0) - DAG_object_update_flags(G.scene, ob, G.scene->lay); + if(G.moving==0) { + ob->recalc |= OB_RECALC_OB; /* make sure a recalc gets flushed */ + DAG_object_update_flags(G.scene, ob, -1); + } for(G.scene->r.cfra= start; G.scene->r.cfra<=end; G.scene->r.cfra++, mc++) { |