diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-07-12 12:43:49 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-07-12 12:43:49 +0400 |
commit | c013974a7c2e0365f8884390002ba9b515a5edb2 (patch) | |
tree | 0d9732bba0bf4b7d2f9d4ac6d3c1baf3c19a53a2 /source/blender/blenkernel/intern/mball.c | |
parent | 75a0301c7df147a35789db191346f8a266aef591 (diff) |
set metaball limit for not drawing small scale motherballs to a 1/10th of what it was. durian blood splats were reaching this threshold.
also fix for memory leaks when the motherball is too small.
Diffstat (limited to 'source/blender/blenkernel/intern/mball.c')
-rw-r--r-- | source/blender/blenkernel/intern/mball.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index a97bec670d6..c41dcfa9588 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -2125,13 +2125,22 @@ void metaball_polygonize(Scene *scene, Object *ob, ListBase *dispbase) if((totelem > 512) && (totelem <= 1024)) init_metaball_octal_tree(4); if(totelem > 1024) init_metaball_octal_tree(5); - /* don't polygonize metaballs with too high resolution (base mball to small) */ + /* don't polygonize metaballs with too high resolution (base mball to small) + * note: Eps was 0.0001f but this was giving problems for blood animation for durian, using 0.00001f */ if(metaball_tree) { - if(ob->size[0]<=0.0001f*(metaball_tree->first->x_max - metaball_tree->first->x_min) || - ob->size[1]<=0.0001f*(metaball_tree->first->y_max - metaball_tree->first->y_min) || - ob->size[2]<=0.0001f*(metaball_tree->first->z_max - metaball_tree->first->z_min)) + if( ob->size[0] <= 0.00001f * (metaball_tree->first->x_max - metaball_tree->first->x_min) || + ob->size[1] <= 0.00001f * (metaball_tree->first->y_max - metaball_tree->first->y_min) || + ob->size[2] <= 0.00001f * (metaball_tree->first->z_max - metaball_tree->first->z_min)) { + new_pgn_element(-1); /* free values created by init_meta */ + MEM_freeN(mainb); + + /* free tree */ + free_metaball_octal_node(metaball_tree->first); + MEM_freeN(metaball_tree); + metaball_tree= NULL; + return; } } |