[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24013] trunk/blender/source/blender/ render/intern/raytrace/reorganize.h: Bugfix: raytracer building could crash (abort due to an assert), when

Brecht Van Lommel brecht at blender.org
Tue Oct 20 20:27:46 CEST 2009


Revision: 24013
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24013
Author:   blendix
Date:     2009-10-20 20:27:46 +0200 (Tue, 20 Oct 2009)

Log Message:
-----------
Bugfix: raytracer building could crash (abort due to an assert), when
using for example a text object scaled down to size zero. This was due
to nan's generated through division by zero.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/raytrace/reorganize.h

Modified: trunk/blender/source/blender/render/intern/raytrace/reorganize.h
===================================================================
--- trunk/blender/source/blender/render/intern/raytrace/reorganize.h	2009-10-20 17:10:01 UTC (rev 24012)
+++ trunk/blender/source/blender/render/intern/raytrace/reorganize.h	2009-10-20 18:27:46 UTC (rev 24013)
@@ -159,7 +159,7 @@
 	{
 		float c_area = bb_area(child->bb, child->bb+3) ;
 		int nchilds = count_childs(child);
-		float original_cost = (c_area / p_area)*nchilds + 1;
+		float original_cost = ((p_area != 0.0f)? (c_area / p_area)*nchilds: 1.0f) + 1;
 		float flatten_cost = nchilds;
 		if(flatten_cost < original_cost && nchilds >= 2)
 		{
@@ -397,7 +397,7 @@
 				for(Node *child = node->child; child && RE_rayobject_isAligned(child); child = child->sibling)
 				{
 					this->child[nchilds] = child;
-					this->child_hit_prob[nchilds] = bb_area(child->bb, child->bb+3) / parent_area;
+					this->child_hit_prob[nchilds] = (parent_area != 0.0f)? bb_area(child->bb, child->bb+3) / parent_area: 1.0f;
 					nchilds++;
 				}
 
@@ -467,7 +467,7 @@
 				float parent_area = bb_area(node->bb, node->bb+3);
 				for(Node *child = node->child; child && RE_rayobject_isAligned(child); child = child->sibling)
 				{
-					cost += ( bb_area(child->bb, child->bb+3) / parent_area ) * child->get_cost(1);
+					cost += ((parent_area != 0.0f)? ( bb_area(child->bb, child->bb+3) / parent_area ): 1.0f) * child->get_cost(1);
 				}
 				
 				cost += testcost(nchilds);





More information about the Bf-blender-cvs mailing list