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:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-08-21 20:40:14 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-08-24 10:46:40 +0300
commitc88c5db3601b82f347f2f54f49fae8ae173ff03b (patch)
treed0d0fc9f0a3df1bd02d415f23f0b78d2e2b0768f
parent99c1870ad5462d1fd81324c8607aad44d0b2deb1 (diff)
Cycles: Make primitive split code easier for re-use by reference splitting function
-rw-r--r--intern/cycles/bvh/bvh_split.cpp44
-rw-r--r--intern/cycles/bvh/bvh_split.h14
2 files changed, 52 insertions, 6 deletions
diff --git a/intern/cycles/bvh/bvh_split.cpp b/intern/cycles/bvh/bvh_split.cpp
index 2e14eee36f0..7d29f84445f 100644
--- a/intern/cycles/bvh/bvh_split.cpp
+++ b/intern/cycles/bvh/bvh_split.cpp
@@ -243,14 +243,14 @@ void BVHSpatialSplit::split(BVHBuild *builder, BVHRange& left, BVHRange& right,
right = BVHRange(right_bounds, right_start, right_end - right_start);
}
-void BVHSpatialSplit::split_triangle_reference(const BVHReference& ref,
- const Mesh *mesh,
+void BVHSpatialSplit::split_triangle_primitive(const Mesh *mesh,
+ int prim_index,
int dim,
float pos,
BoundBox& left_bounds,
BoundBox& right_bounds)
{
- const int *inds = mesh->triangles[ref.prim_index()].v;
+ const int *inds = mesh->triangles[prim_index].v;
const float3 *verts = &mesh->verts[0];
const float3 *v1 = &verts[inds[2]];
@@ -277,15 +277,16 @@ void BVHSpatialSplit::split_triangle_reference(const BVHReference& ref,
}
}
-void BVHSpatialSplit::split_curve_reference(const BVHReference& ref,
- const Mesh *mesh,
+void BVHSpatialSplit::split_curve_primitive(const Mesh *mesh,
+ int prim_index,
+ int segment_index,
int dim,
float pos,
BoundBox& left_bounds,
BoundBox& right_bounds)
{
/* curve split: NOTE - Currently ignores curve width and needs to be fixed.*/
- const int k0 = mesh->curves[ref.prim_index()].first_key + PRIMITIVE_UNPACK_SEGMENT(ref.prim_type());
+ const int k0 = mesh->curves[prim_index].first_key + segment_index;
const int k1 = k0 + 1;
const float4 key0 = mesh->curve_keys[k0];
const float4 key1 = mesh->curve_keys[k1];
@@ -316,6 +317,37 @@ void BVHSpatialSplit::split_curve_reference(const BVHReference& ref,
}
}
+void BVHSpatialSplit::split_triangle_reference(const BVHReference& ref,
+ const Mesh *mesh,
+ int dim,
+ float pos,
+ BoundBox& left_bounds,
+ BoundBox& right_bounds)
+{
+ split_triangle_primitive(mesh,
+ ref.prim_index(),
+ dim,
+ pos,
+ left_bounds,
+ right_bounds);
+}
+
+void BVHSpatialSplit::split_curve_reference(const BVHReference& ref,
+ const Mesh *mesh,
+ int dim,
+ float pos,
+ BoundBox& left_bounds,
+ BoundBox& right_bounds)
+{
+ split_curve_primitive(mesh,
+ ref.prim_index(),
+ PRIMITIVE_UNPACK_SEGMENT(ref.prim_type()),
+ dim,
+ pos,
+ left_bounds,
+ right_bounds);
+}
+
void BVHSpatialSplit::split_reference(BVHBuild *builder,
BVHReference& left,
BVHReference& right,
diff --git a/intern/cycles/bvh/bvh_split.h b/intern/cycles/bvh/bvh_split.h
index 1b550d11b15..f9bed5f69e9 100644
--- a/intern/cycles/bvh/bvh_split.h
+++ b/intern/cycles/bvh/bvh_split.h
@@ -63,6 +63,20 @@ public:
float pos);
protected:
+ void split_triangle_primitive(const Mesh *mesh,
+ int prim_index,
+ int dim,
+ float pos,
+ BoundBox& left_bounds,
+ BoundBox& right_bounds);
+ void split_curve_primitive(const Mesh *mesh,
+ int prim_index,
+ int segment_index,
+ int dim,
+ float pos,
+ BoundBox& left_bounds,
+ BoundBox& right_bounds);
+
void split_triangle_reference(const BVHReference& ref,
const Mesh *mesh,
int dim,