[Bf-blender-cvs] [62f9be7] master: Fix T37958: part of blender internal approximate AO / indirect light preprocess could not be cancelled.

Brecht Van Lommel noreply at git.blender.org
Thu Jan 16 22:38:19 CET 2014


Commit: 62f9be76157c12ffdfa60ab628b7e6cca0478871
Author: Brecht Van Lommel
Date:   Thu Jan 16 22:24:29 2014 +0100
https://developer.blender.org/rB62f9be76157c12ffdfa60ab628b7e6cca0478871

Fix T37958: part of blender internal approximate AO / indirect light preprocess
could not be cancelled.

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

M	source/blender/render/intern/source/occlusion.c

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

diff --git a/source/blender/render/intern/source/occlusion.c b/source/blender/render/intern/source/occlusion.c
index a16c4b2..91c9143 100644
--- a/source/blender/render/intern/source/occlusion.c
+++ b/source/blender/render/intern/source/occlusion.c
@@ -228,6 +228,9 @@ static void occ_build_shade(Render *re, OcclusionTree *tree)
 		vlr = RE_findOrAddVlak(obi->obr, tree->face[a].facenr);
 
 		occ_shade(&ssamp, obi, vlr, tree->rad[a]);
+
+		if (re->test_break(re->tbh))
+			break;
 	}
 }
 
@@ -714,14 +717,18 @@ static OcclusionTree *occ_tree_build(Render *re)
 	occ_build_recursive(tree, tree->root, 0, totface, 1);
 
 	if (tree->doindirect) {
-		occ_build_shade(re, tree);
-		occ_sum_occlusion(tree, tree->root);
+		if (!(re->test_break(re->tbh)))
+			occ_build_shade(re, tree);
+
+		if (!(re->test_break(re->tbh)))
+			occ_sum_occlusion(tree, tree->root);
 	}
 	
 	MEM_freeN(tree->co);
 	tree->co = NULL;
 
-	occ_build_sh_normalize(tree->root);
+	if (!(re->test_break(re->tbh)))
+		occ_build_sh_normalize(tree->root);
 
 	for (a = 0; a < BLENDER_MAX_THREADS; a++)
 		tree->stack[a] = MEM_callocN(sizeof(OccNode) * TOTCHILD * (tree->maxdepth + 1), "OccStack");
@@ -1264,7 +1271,7 @@ void make_occ_tree(Render *re)
 	
 	re->occlusiontree = tree = occ_tree_build(re);
 	
-	if (tree) {
+	if (tree && !re->test_break(re->tbh)) {
 		if (re->wrld.ao_approx_passes > 0)
 			occ_compute_passes(re, tree, re->wrld.ao_approx_passes);
 		if (tree->doindirect && (re->wrld.mode & WO_INDIRECT_LIGHT))




More information about the Bf-blender-cvs mailing list