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.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user