diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-07-07 17:13:50 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-07-07 17:13:50 +0300 |
commit | 4d4ebc830015d3246d0ff6aec44c75f8fcc99bfe (patch) | |
tree | 5e9fb582998d4802010ae4a59f30796da4228a09 /source/blender/render | |
parent | 00d476976e88052e8410916fca1d86d5f12529ca (diff) |
Fix T51991: Disabled for viewport particle system becomes visible after BI render
Move check for psys render data before it is actually requested for creation.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 4876d2d193e..9633d95855e 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -4657,14 +4657,22 @@ static void add_render_object(Render *re, Object *ob, Object *par, DupliObject * index= (dob)? dob->persistent_id[0]: 0; + /* It seems that we may generate psys->renderdata recursively in some nasty intricated cases of + * several levels of bupliobject (see T51524). + * For now, basic rule is, do not restore psys if it was already in 'render state'. + * Another, more robust solution could be to add some reference counting to that renderdata... */ + bool psys_has_renderdata = false; + /* the emitter has to be processed first (render levels of modifiers) */ /* so here we only check if the emitter should be rendered */ if (ob->particlesystem.first) { show_emitter= 0; for (psys=ob->particlesystem.first; psys; psys=psys->next) { show_emitter += psys->part->draw & PART_DRAW_EMITTER; - if (!(re->r.scemode & R_VIEWPORT_PREVIEW)) + if (!(re->r.scemode & R_VIEWPORT_PREVIEW)) { + psys_has_renderdata |= (psys->renderdata != NULL); psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy, timeoffset); + } } /* if no psys has "show emitter" selected don't render emitter */ @@ -4700,12 +4708,6 @@ static void add_render_object(Render *re, Object *ob, Object *par, DupliObject * if (ob->particlesystem.first) { psysindex= 1; for (psys=ob->particlesystem.first; psys; psys=psys->next, psysindex++) { - /* It seems that we may generate psys->renderdata recursively in some nasty intricated cases of - * several levels of bupliobject (see T51524). - * For now, basic rule is, do not restore psys if it was already in 'render state'. - * Another, more robust solution could be to add some reference counting to that renderdata... */ - const bool psys_has_renderdata = (psys->renderdata != NULL); - if (!psys_check_enabled(ob, psys, G.is_rendering)) continue; |