diff options
Diffstat (limited to 'intern/cycles/bvh/bvh2.h')
-rw-r--r-- | intern/cycles/bvh/bvh2.h | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/intern/cycles/bvh/bvh2.h b/intern/cycles/bvh/bvh2.h index fa3e45b72d2..1030a0f76c7 100644 --- a/intern/cycles/bvh/bvh2.h +++ b/intern/cycles/bvh/bvh2.h @@ -26,23 +26,30 @@ CCL_NAMESPACE_BEGIN -class BVHNode; -struct BVHStackEntry; -class BVHParams; -class BoundBox; -class LeafNode; -class Object; -class Progress; - #define BVH_NODE_SIZE 4 #define BVH_NODE_LEAF_SIZE 1 #define BVH_UNALIGNED_NODE_SIZE 7 +/* Pack Utility */ +struct BVHStackEntry { + const BVHNode *node; + int idx; + + BVHStackEntry(const BVHNode *n = 0, int i = 0); + int encodeIdx() const; +}; + /* BVH2 * * Typical BVH with each node having two children. */ class BVH2 : public BVH { + public: + void build(Progress &progress, Stats *stats); + void refit(Progress &progress); + + PackedBVH pack; + protected: /* constructor */ friend class BVH; @@ -51,10 +58,10 @@ class BVH2 : public BVH { const vector<Object *> &objects); /* Building process. */ - virtual BVHNode *widen_children_nodes(const BVHNode *root) override; + virtual BVHNode *widen_children_nodes(const BVHNode *root); /* pack */ - void pack_nodes(const BVHNode *root) override; + void pack_nodes(const BVHNode *root); void pack_leaf(const BVHStackEntry &e, const LeafNode *leaf); void pack_inner(const BVHStackEntry &e, const BVHStackEntry &e0, const BVHStackEntry &e1); @@ -84,8 +91,18 @@ class BVH2 : public BVH { uint visibility1); /* refit */ - void refit_nodes() override; + void refit_nodes(); void refit_node(int idx, bool leaf, BoundBox &bbox, uint &visibility); + + /* Refit range of primitives. */ + void refit_primitives(int start, int end, BoundBox &bbox, uint &visibility); + + /* triangles and strands */ + void pack_primitives(); + void pack_triangle(int idx, float4 storage[3]); + + /* merge instance BVH's */ + void pack_instances(size_t nodes_size, size_t leaf_nodes_size); }; CCL_NAMESPACE_END |