[Bf-blender-cvs] [1e6fa59] master: Fix T39852: Crash (Blender internal) large objects

Campbell Barton noreply at git.blender.org
Wed Apr 23 19:08:58 CEST 2014


Commit: 1e6fa59e4f4447bfeecd5abb868361ae1b7ab9ab
Author: Campbell Barton
Date:   Thu Apr 24 03:06:02 2014 +1000
https://developer.blender.org/rB1e6fa59e4f4447bfeecd5abb868361ae1b7ab9ab

Fix T39852: Crash (Blender internal) large objects

Add check when bounds reached inf

===================================================================

M	source/blender/render/intern/raytrace/reorganize.h

===================================================================

diff --git a/source/blender/render/intern/raytrace/reorganize.h b/source/blender/render/intern/raytrace/reorganize.h
index 33b5258..e25538c 100644
--- a/source/blender/render/intern/raytrace/reorganize.h
+++ b/source/blender/render/intern/raytrace/reorganize.h
@@ -288,6 +288,7 @@ static float bvh_refit(Node *node)
 #define MAX_OPTIMIZE_CHILDS  MAX_CUT_SIZE
 
 #define CUT_SIZE_IS_VALID(cut_size) ((cut_size) < MAX_CUT_SIZE && (cut_size) >= 0)
+#define CUT_SIZE_INVALID -1
 
 
 struct OVBVHNode {
@@ -348,9 +349,9 @@ struct OVBVHNode {
 	{
 		if (RE_rayobject_isAligned(this->child)) {
 			//Calc new childs
-			{
+			if (this->best_cutsize != CUT_SIZE_INVALID) {
 				OVBVHNode **cut = &(this->child);
-				set_cut(best_cutsize, &cut);
+				set_cut(this->best_cutsize, &cut);
 				*cut = NULL;
 			}
 
@@ -473,12 +474,17 @@ struct VBVH_optimalPackSIMD {
 					}
 				}
 			}
-			assert(node->cut_cost[0] != INFINITY);
+
+			if (node->cut_cost[0] == INFINITY) {
+				node->best_cutsize = CUT_SIZE_INVALID;
+			}
 		}
 		else {
 			node->cut_cost[0] = 1.0f;
 			for (int i = 1; i < MAX_CUT_SIZE; i++)
 				node->cut_cost[i] = INFINITY;
+
+			/* node->best_cutsize can remain unset here */
 		}
 	}




More information about the Bf-blender-cvs mailing list