Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2010-06-28 15:07:02 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2010-06-28 15:07:02 +0400
commit8517a7a3cd93532ef1ff53ccbf07e8fc14a5109e (patch)
treed7280bdbe9ed6b57b05155f35d6b0e39a466d2d7 /source/blender/blenkernel/intern/displist.c
parentaae952be1fc0d3ff6955e8d542d5330e93e96ef7 (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.c16
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);