diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-01-17 15:02:15 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-01-17 15:02:15 +0300 |
commit | 16a37bcd31894ce17ed7d5aba9af2ac1b4f6c653 (patch) | |
tree | c0588b103118d1eb181d9f8f28976c5f5690f272 /source | |
parent | 243f4530ef54cb5b37b2002d884eda47f9985f0c (diff) |
Bugfix for "ghost feathers" trailing one frame behind the character.
The derivedmesh and particle system needed to be evaluated at render
level before creating dupliparticles.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 9 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 7 |
2 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index de2875c91f4..bfe2b56b289 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -2199,6 +2199,7 @@ void object_handle_update(Object *ob) if(ob->particlesystem.first) { ParticleSystem *tpsys, *psys; + DerivedMesh *dm; psys= ob->particlesystem.first; while(psys) { @@ -2215,6 +2216,14 @@ void object_handle_update(Object *ob) else psys= psys->next; } + + if(G.rendering && ob->transflag & OB_DUPLIPARTS) { + /* this is to make sure we get render level duplis in groups: + * the derivedmesh must be created before init_render_mesh, + * since object_duplilist does dupliparticles before that */ + dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); + dm->release(dm); + } } } diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 44db5280165..25b5dac2a55 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -4136,18 +4136,11 @@ static void dupli_render_particle_set(Render *re, Object *ob, int level, int ena return; if(ob->transflag & OB_DUPLIPARTS) { - DerivedMesh *dm; - for(psys=ob->particlesystem.first; psys; psys=psys->next) if(enable) psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy); else psys_render_restore(ob, psys); - - if(enable) { - dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); - dm->release(dm); - } } if(ob->dup_group==NULL) return; |