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; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs