diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-12-17 19:49:35 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-12-25 00:50:49 +0300 |
commit | fe4905288dc4b8ddf193abdf3b287c47feedb597 (patch) | |
tree | fb739c0babe96a01c310316dbacad5f165eb0912 /intern/cycles/bvh/bvh_node.cpp | |
parent | 345ed4dd105aca5dbe6fbc3936ef2af83c16544b (diff) |
Cycles: Use proper node counter to allocate QBVH nodes
Before all the nodes were counted and allocated, leading to situations when
bunch of allocated memory is not used because reasonable amount of nodes are
simply ignored.
Diffstat (limited to 'intern/cycles/bvh/bvh_node.cpp')
-rw-r--r-- | intern/cycles/bvh/bvh_node.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/intern/cycles/bvh/bvh_node.cpp b/intern/cycles/bvh/bvh_node.cpp index 7cc9bd333b0..8294690da7d 100644 --- a/intern/cycles/bvh/bvh_node.cpp +++ b/intern/cycles/bvh/bvh_node.cpp @@ -47,6 +47,20 @@ int BVHNode::getSubtreeSize(BVH_STAT stat) const case BVH_STAT_CHILDNODE_COUNT: cnt = num_children(); break; + case BVH_STAT_QNODE_COUNT: + cnt = 1; + for(int i = 0; i < num_children(); i++) { + BVHNode *node = get_child(i); + if(node->is_leaf()) { + cnt += 1; + } + else { + for(int j = 0; j < node->num_children(); j++) { + cnt += node->get_child(j)->getSubtreeSize(stat); + } + } + } + return cnt; default: assert(0); /* unknown mode */ } |