57
friend class BVHMixedSplit;
58
friend class BVHObjectSplit;
59
friend class BVHSpatialSplit;
60
friend class BVHBuildTask;
73
62
/* adding references */
74
void add_reference_mesh(NodeSpec& root, Mesh *mesh, int i);
75
void add_reference_object(NodeSpec& root, Object *ob, int i);
76
void add_references(NodeSpec& root);
63
void add_reference_mesh(BoundBox& root, BoundBox& center, Mesh *mesh, int i);
64
void add_reference_object(BoundBox& root, BoundBox& center, Object *ob, int i);
65
void add_references(BVHRange& root);
79
BVHNode *build_node(const NodeSpec& spec, int level, float progress_start, float progress_end);
80
BVHNode *create_leaf_node(const NodeSpec& spec);
81
BVHNode *create_object_leaf_nodes(const Reference *ref, int num);
83
void progress_update(float progress_start, float progress_end);
92
BoundBox right_bounds;
95
: sah(FLT_MAX), dim(0), num_left(0)
100
ObjectSplit find_object_split(const NodeSpec& spec, float nodeSAH);
101
void do_object_split(NodeSpec& left, NodeSpec& right, const NodeSpec& spec, const ObjectSplit& split);
111
: sah(FLT_MAX), dim(0), pos(0.0f)
123
SpatialSplit find_spatial_split(const NodeSpec& spec, float nodeSAH);
124
void do_spatial_split(NodeSpec& left, NodeSpec& right, const NodeSpec& spec, const SpatialSplit& split);
125
void split_reference(Reference& left, Reference& right, const Reference& ref, int dim, float pos);
68
BVHNode *build_node(const BVHRange& range, int level);
69
BVHNode *build_node(const BVHObjectBinning& range, int level);
70
BVHNode *create_leaf_node(const BVHRange& range);
71
BVHNode *create_object_leaf_nodes(const BVHReference *ref, int start, int num);
74
enum { THREAD_TASK_SIZE = 4096 };
75
void thread_build_node(InnerNode *node, int child, BVHObjectBinning *range, int level);
76
thread_mutex build_mutex;
79
void progress_update();
82
void rotate(BVHNode *node, int max_depth);
83
void rotate(BVHNode *node, int max_depth, int iterations);
127
85
/* objects and primitive references */
128
86
vector<Object*> objects;
129
vector<Reference> references;
87
vector<BVHReference> references;
88
int num_original_references;
131
90
/* output primitive indexes and objects */
91
vector<int>& prim_segment;
132
92
vector<int>& prim_index;
133
93
vector<int>& prim_object;