Revision: 16305 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16305 Author: unclezeiv Date: 2008-08-30 01:57:04 +0200 (Sat, 30 Aug 2008)
Log Message: ----------- Fixed several memory-related bugs introduced by previous commit. Modified Paths: -------------- branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c Modified: branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c =================================================================== --- branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c 2008-08-29 20:09:25 UTC (rev 16304) +++ branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c 2008-08-29 23:57:04 UTC (rev 16305) @@ -985,10 +985,8 @@ add_virtual_point_light(re, lcd, lar, col, lev); } - if (lcd->do_indir > 0 && (lcd->options & LC_OPT_ONLY_INDIR)) { - lamp_delete(lar); + if (lcd->do_indir > 0 && (lcd->options & LC_OPT_ONLY_INDIR)) continue; - } lcd->pointlights[lcd->light_counter++]= lar; lcd->trees[TREE_SUN].counter++; @@ -1532,10 +1530,8 @@ add_virtual_point_light(re, lcd, lar, col, lev); } - if (lcd->do_indir > 0 && (lcd->options & LC_OPT_ONLY_INDIR)) { - lamp_delete(lar); + if (lcd->do_indir > 0 && (lcd->options & LC_OPT_ONLY_INDIR)) continue; - } lcd->pointlights[lcd->light_counter++]= lar; lcd->trees[TREE_SPOT].counter++; @@ -1601,8 +1597,9 @@ { int n_orig= 0; + int n_area= 0; int n_vpl= 0; - int n_generated= re->r.lightcuts_area_lights + re->r.lightcuts_env_map; + int n_generated= 0; for(go=lights->first; go; go= go->next) { lar= go->lampren; @@ -1610,8 +1607,17 @@ if (ELEM3(lar->type, LA_LOCAL, LA_SUN, LA_SPOT)) n_orig++; + + if (lar->type == LA_AREA) + n_area++; } + if (n_area) + n_generated+= re->r.lightcuts_area_lights; + + if (lcd->options & LC_OPT_ENV_LIGHT) + n_generated+= re->r.lightcuts_env_map; + if (lcd->do_indir > 0) { n_vpl= (n_orig + n_generated) * lcd->do_indir; @@ -1625,9 +1631,11 @@ n_generated+= n_vpl; } - /* here we create our (conservative) arrays for holding LampRens and pointers to them */ - lcd->pointlights= MEM_callocN(sizeof(LampRen*) * n_generated, "lc_pointlights"); - lcd->lampren_pool= MEM_callocN(sizeof(LampRen) * n_generated, "lc_lampren_pool"); + if (n_generated > 0) { + /* here we create our (conservative) arrays for holding LampRens and pointers to them */ + lcd->lampren_pool= MEM_callocN(sizeof(LampRen) * n_generated, "lc_lampren_pool"); + } + lcd->pointlights= MEM_callocN(sizeof(LampRen*) * (n_orig + n_generated), "lc_pointlights"); } /* TODO: we could do some form of importance sampling here */ @@ -2432,7 +2440,8 @@ MEM_freeN(lcd->trees[i].array); for (i= 0; i < lcd->pool_counter; i++) lamp_delete(&lcd->lampren_pool[i]); - MEM_freeN(lcd->lampren_pool); + if (lcd->lampren_pool) + MEM_freeN(lcd->lampren_pool); MEM_freeN(lcd->pointlights); MEM_freeN(lcd->cut_nodes); if (lcd->dbg_vis_vpl) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs