[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23937] trunk/blender/source/blender/ render/intern/source: Fix #19657: crash when cancelling volume material render, raytree
Brecht Van Lommel
brecht at blender.org
Mon Oct 19 11:54:26 CEST 2009
Revision: 23937
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23937
Author: blendix
Date: 2009-10-19 11:54:25 +0200 (Mon, 19 Oct 2009)
Log Message:
-----------
Fix #19657: crash when cancelling volume material render, raytree
is invalid if it cancels during build, so don't use it then.
Also fixes some use of unitialized variables in raytracing code.
Modified Paths:
--------------
trunk/blender/source/blender/render/intern/source/rayshade.c
trunk/blender/source/blender/render/intern/source/volumetric.c
Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rayshade.c 2009-10-19 09:50:02 UTC (rev 23936)
+++ trunk/blender/source/blender/render/intern/source/rayshade.c 2009-10-19 09:54:25 UTC (rev 23937)
@@ -242,7 +242,7 @@
assert( faces > 0 );
//Create Ray cast accelaration structure
- raytree = obr->raytree = RE_rayobject_create( re, re->r.raytrace_structure, faces );
+ raytree = RE_rayobject_create( re, re->r.raytrace_structure, faces );
if( (re->r.raytrace_options & R_RAYTRACE_USE_LOCAL_COORDS) )
vlakprimitive = obr->rayprimitives = (VlakPrimitive*)MEM_callocN(faces*sizeof(VlakPrimitive), "ObjectRen primitives");
else
@@ -269,13 +269,20 @@
}
}
RE_rayobject_done( raytree );
+
+ /* in case of cancel during build, raytree is not usable */
+ if(test_break(re))
+ RE_rayobject_free(raytree);
+ else
+ obr->raytree= raytree;
}
-
- if((obi->flag & R_TRANSFORMED) && obi->raytree == NULL)
- {
- obi->transform_primitives = 0;
- obi->raytree = RE_rayobject_instance_create( obr->raytree, obi->mat, obi, obi->obr->rayobi );
+ if(obr->raytree) {
+ if((obi->flag & R_TRANSFORMED) && obi->raytree == NULL)
+ {
+ obi->transform_primitives = 0;
+ obi->raytree = RE_rayobject_instance_create( obr->raytree, obi->mat, obi, obi->obr->rayobi );
+ }
}
if(obi->raytree) return obi->raytree;
@@ -439,6 +446,7 @@
{
//Calculate raytree max_size
//This is ONLY needed to kept a bogus behaviour of SUN and HEMI lights
+ INIT_MINMAX(min, max);
RE_rayobject_merge_bb( re->raytree, min, max );
for(i=0; i<3; i++)
{
Modified: trunk/blender/source/blender/render/intern/source/volumetric.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/volumetric.c 2009-10-19 09:50:02 UTC (rev 23936)
+++ trunk/blender/source/blender/render/intern/source/volumetric.c 2009-10-19 09:54:25 UTC (rev 23937)
@@ -78,7 +78,6 @@
float visibility = 1.f;
if(lar->shb) {
- float dot=1.f;
float dxco[3]={0.f, 0.f, 0.f}, dyco[3]={0.f, 0.f, 0.f};
visibility = testshadowbuf(&R, lar->shb, co, dxco, dyco, 1.0, 0.0);
@@ -139,7 +138,8 @@
isect->skip = RE_SKIP_VLR_NEIGHBOUR;
isect->orig.face = (void*)shi->vlr;
isect->orig.ob = (void*)shi->obi;
- } else if (intersect_type == VOL_BOUNDS_SS) {
+ } else { // if (intersect_type == VOL_BOUNDS_SS) {
+ isect->skip= 0;
isect->orig.face= NULL;
isect->orig.ob = NULL;
}
More information about the Bf-blender-cvs
mailing list