diff options
author | Andre Susano Pinto <andresusanopinto@gmail.com> | 2009-10-04 20:56:00 +0400 |
---|---|---|
committer | Andre Susano Pinto <andresusanopinto@gmail.com> | 2009-10-04 20:56:00 +0400 |
commit | 55541d8a8143b97ce0d452caf4ececa8903c31a0 (patch) | |
tree | a381d591f2c9b7bd95bc5766ed4c498380e0b5c0 /source/blender/render/intern/raytrace/vbvh.h | |
parent | 8da55763b541075dae4b1f7713c43af2b609e332 (diff) |
Added some test_break during the build process.
(Maybe later this should be done with some thread_cancel function instead of doing variable/callbacks tests)
Diffstat (limited to 'source/blender/render/intern/raytrace/vbvh.h')
-rw-r--r-- | source/blender/render/intern/raytrace/vbvh.h | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/source/blender/render/intern/raytrace/vbvh.h b/source/blender/render/intern/raytrace/vbvh.h index db1df43f665..1ff51786e52 100644 --- a/source/blender/render/intern/raytrace/vbvh.h +++ b/source/blender/render/intern/raytrace/vbvh.h @@ -107,10 +107,18 @@ template<class Node> struct BuildBinaryVBVH { MemArena *arena; + RayObjectControl *control; - BuildBinaryVBVH(MemArena *a) + void test_break() + { + if(RE_rayobjectcontrol_test_break(control)) + throw "Stop"; + } + + BuildBinaryVBVH(MemArena *a, RayObjectControl *c) { arena = a; + control = c; } Node *create_node() @@ -131,6 +139,18 @@ struct BuildBinaryVBVH Node *transform(RTBuilder *builder) { + try + { + return _transform(builder); + + } catch(...) + { + } + return NULL; + } + + Node *_transform(RTBuilder *builder) + { int size = rtbuild_size(builder); if(size == 1) @@ -143,6 +163,8 @@ struct BuildBinaryVBVH } else { + test_break(); + Node *node = create_node(); INIT_MINMAX(node->bb, node->bb+3); @@ -157,7 +179,7 @@ struct BuildBinaryVBVH RTBuilder tmp; rtbuild_get_child(builder, i, &tmp); - *child = transform(&tmp); + *child = _transform(&tmp); child = &((*child)->sibling); } |