Example #1
0
 void BVHN<N>::clearBarrier(NodeRef& node)
 {
   if (node.isBarrier())
     node.clearBarrier();
   else if (!node.isLeaf()) {
     Node* n = node.node();
     for (size_t c=0; c<N; c++)
       clearBarrier(n->child(c));
   }
 }
Example #2
0
 void BVHN<N>::clearBarrier(NodeRef& node)
 {
   if (node.isBarrier())
     node.clearBarrier();
   else if (!node.isLeaf()) {
     BaseNode* n = node.baseNode(BVH_FLAG_ALIGNED_NODE); // FIXME: flags should be stored in BVH
     for (size_t c=0; c<N; c++)
       clearBarrier(n->child(c));
   }
 }
Example #3
0
 typename BVHN<N>::NodeRef BVHN<N>::layoutLargeNodesRecursion(NodeRef& node, FastAllocator::ThreadLocal& allocator)
 {
   if (node.isBarrier()) {
     node.clearBarrier();
     return node;
   }
   else if (node.isNode()) 
   {
     Node* oldnode = node.node();
     Node* newnode = (BVHN::Node*) allocator.malloc(sizeof(BVHN::Node),byteNodeAlignment);
     *newnode = *oldnode;
     for (size_t c=0; c<N; c++)
       newnode->child(c) = layoutLargeNodesRecursion(oldnode->child(c),allocator);
     return encodeNode(newnode);
   }
   else return node;
 }
Example #4
0
 BVH4::NodeRef BVH4::layoutLargeNodesRecursion(NodeRef& node)
 {
   if (node.isBarrier()) {
     node.clearBarrier();
     return node;
   }
   else if (node.isNode()) 
   {
     Node* oldnode = node.node();
     Node* newnode = (BVH4::Node*) alloc.threadLocal2()->alloc0.malloc(sizeof(BVH4::Node)); // FIXME: optimize access to threadLocal2 
     *newnode = *oldnode;
     for (size_t c=0; c<BVH4::N; c++)
       newnode->child(c) = layoutLargeNodesRecursion(oldnode->child(c));
     return encodeNode(newnode);
   }
   else return node;
 }