diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-06-28 15:07:02 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-06-28 15:07:02 +0400 |
commit | 8517a7a3cd93532ef1ff53ccbf07e8fc14a5109e (patch) | |
tree | d7280bdbe9ed6b57b05155f35d6b0e39a466d2d7 /source/blender/blenkernel/intern/displist.c | |
parent | aae952be1fc0d3ff6955e8d542d5330e93e96ef7 (diff) |
Fix #20965: metaballs partticles and volume material crash rendering
Fix #21187: 2.5svn26947 - particles + meta sphere = crash in rendering
Use separated displists for mballs in view3d and render stuff.
Do not recalculate displist for view3d while rendering - mball.c
uses several global variables which shouldn't be accepted from
parallel threads.
Diffstat (limited to 'source/blender/blenkernel/intern/displist.c')
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index a958d8c353b..716d3110bc3 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -1172,20 +1172,30 @@ void makeDispListMBall(Scene *scene, Object *ob) { if(!ob || ob->type!=OB_MBALL) return; + // XXX: mball stuff uses plenty of global variables + // while this is unchanged updating during render is unsafe + if(G.rendering) return; + freedisplist(&(ob->disp)); - + if(ob->type==OB_MBALL) { if(ob==find_basis_mball(scene, ob)) { - metaball_polygonize(scene, ob); + metaball_polygonize(scene, ob, &ob->disp); tex_space_mball(ob); - object_deform_mball(ob); + object_deform_mball(ob, &ob->disp); } } boundbox_displist(ob); } +void makeDispListMBall_forRender(Scene *scene, Object *ob, ListBase *dispbase) +{ + metaball_polygonize(scene, ob, dispbase); + object_deform_mball(ob, dispbase); +} + static ModifierData *curve_get_tesselate_point(Scene *scene, Object *ob, int forRender, int editmode) { ModifierData *md = modifiers_getVirtualModifierList(ob); |