Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Susano Pinto <andresusanopinto@gmail.com>2009-10-04 20:56:00 +0400
committerAndre Susano Pinto <andresusanopinto@gmail.com>2009-10-04 20:56:00 +0400
commit55541d8a8143b97ce0d452caf4ececa8903c31a0 (patch)
treea381d591f2c9b7bd95bc5766ed4c498380e0b5c0 /source/blender/render/intern/raytrace/vbvh.h
parent8da55763b541075dae4b1f7713c43af2b609e332 (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.h26
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);
}