Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/bvh/bvh2.h')
-rw-r--r--intern/cycles/bvh/bvh2.h39
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