[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60177] trunk/blender/intern/cycles/bvh/ bvh_build.cpp: Fix #36738: object ray visibility flags not working in cycles viewport if there
Brecht Van Lommel
brechtvanlommel at pandora.be
Mon Sep 16 23:05:43 CEST 2013
Revision: 60177
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60177
Author: blendix
Date: 2013-09-16 21:05:43 +0000 (Mon, 16 Sep 2013)
Log Message:
-----------
Fix #36738: object ray visibility flags not working in cycles viewport if there
is only a single object in the scene.
Modified Paths:
--------------
trunk/blender/intern/cycles/bvh/bvh_build.cpp
Modified: trunk/blender/intern/cycles/bvh/bvh_build.cpp
===================================================================
--- trunk/blender/intern/cycles/bvh/bvh_build.cpp 2013-09-16 21:05:42 UTC (rev 60176)
+++ trunk/blender/intern/cycles/bvh/bvh_build.cpp 2013-09-16 21:05:43 UTC (rev 60177)
@@ -284,9 +284,13 @@
float leafSAH = params.sah_triangle_cost * range.leafSAH;
float splitSAH = params.sah_node_cost * range.bounds().half_area() + params.sah_triangle_cost * range.splitSAH;
- /* make leaf node when threshold reached or SAH tells us */
- if(params.small_enough_for_leaf(size, level) || (size <= params.max_leaf_size && leafSAH < splitSAH))
- return create_leaf_node(range);
+ /* have at least one inner node on top level, for performance and correct
+ * visibility tests, since object instances do not check visibility flag */
+ if(!(params.top_level && level == 0)) {
+ /* make leaf node when threshold reached or SAH tells us */
+ if(params.small_enough_for_leaf(size, level) || (size <= params.max_leaf_size && leafSAH < splitSAH))
+ return create_leaf_node(range);
+ }
/* perform split */
BVHObjectBinning left, right;
@@ -322,17 +326,21 @@
return NULL;
/* small enough or too deep => create leaf. */
- if(params.small_enough_for_leaf(range.size(), level)) {
- progress_count += range.size();
- return create_leaf_node(range);
+ if(!(params.top_level && level == 0)) {
+ if(params.small_enough_for_leaf(range.size(), level)) {
+ progress_count += range.size();
+ return create_leaf_node(range);
+ }
}
/* splitting test */
BVHMixedSplit split(this, range, level);
- if(split.no_split) {
- progress_count += range.size();
- return create_leaf_node(range);
+ if(!(params.top_level && level == 0)) {
+ if(split.no_split) {
+ progress_count += range.size();
+ return create_leaf_node(range);
+ }
}
/* do split */
More information about the Bf-blender-cvs
mailing list