[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