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
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2018-01-25 18:11:06 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-01-26 10:41:19 +0300
commit848f0c5b5b3ca4d747e00a66182c3d0edd8cc99b (patch)
treef91aae611773332639f8ff290597312c17382b38 /intern
parent22afe88882e88b15df06a2b5ce3c596d31dd6365 (diff)
Code cleanup: simpler and faster detection of BVH refit.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/blender_mesh.cpp40
-rw-r--r--intern/cycles/util/util_vector.h5
2 files changed, 20 insertions, 25 deletions
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index cfbc868938e..3b07464cd96 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -1138,12 +1138,19 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
mesh_synced.insert(mesh);
/* create derived mesh */
- array<int> oldtriangle = mesh->triangles;
+ array<int> oldtriangles;
+ array<Mesh::SubdFace> oldsubd_faces;
+ array<int> oldsubd_face_corners;
+ oldtriangles.steal_data(mesh->triangles);
+ oldsubd_faces.steal_data(mesh->subd_faces);
+ oldsubd_face_corners.steal_data(mesh->subd_face_corners);
/* compares curve_keys rather than strands in order to handle quick hair
* adjustments in dynamic BVH - other methods could probably do this better*/
- array<float3> oldcurve_keys = mesh->curve_keys;
- array<float> oldcurve_radius = mesh->curve_radius;
+ array<float3> oldcurve_keys;
+ array<float> oldcurve_radius;
+ oldcurve_keys.steal_data(mesh->curve_keys);
+ oldcurve_radius.steal_data(mesh->curve_radius);
mesh->clear();
mesh->used_shaders = used_shaders;
@@ -1206,28 +1213,11 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
sync_mesh_fluid_motion(b_ob, scene, mesh);
/* tag update */
- bool rebuild = false;
-
- if(oldtriangle.size() != mesh->triangles.size())
- rebuild = true;
- else if(oldtriangle.size()) {
- if(memcmp(&oldtriangle[0], &mesh->triangles[0], sizeof(int)*oldtriangle.size()) != 0)
- rebuild = true;
- }
-
- if(oldcurve_keys.size() != mesh->curve_keys.size())
- rebuild = true;
- else if(oldcurve_keys.size()) {
- if(memcmp(&oldcurve_keys[0], &mesh->curve_keys[0], sizeof(float3)*oldcurve_keys.size()) != 0)
- rebuild = true;
- }
-
- if(oldcurve_radius.size() != mesh->curve_radius.size())
- rebuild = true;
- else if(oldcurve_radius.size()) {
- if(memcmp(&oldcurve_radius[0], &mesh->curve_radius[0], sizeof(float)*oldcurve_radius.size()) != 0)
- rebuild = true;
- }
+ bool rebuild = (oldtriangles != mesh->triangles) ||
+ (oldsubd_faces != mesh->subd_faces) ||
+ (oldsubd_face_corners != mesh->subd_face_corners) ||
+ (oldcurve_keys != mesh->curve_keys) ||
+ (oldcurve_radius != mesh->curve_radius);
mesh->tag_update(scene, rebuild);
diff --git a/intern/cycles/util/util_vector.h b/intern/cycles/util/util_vector.h
index 67bf82b47a5..625c19c7c46 100644
--- a/intern/cycles/util/util_vector.h
+++ b/intern/cycles/util/util_vector.h
@@ -162,6 +162,11 @@ public:
return memcmp(data_, other.data_, datasize_*sizeof(T)) == 0;
}
+ bool operator!=(const array<T>& other) const
+ {
+ return !(*this == other);
+ }
+
void steal_data(array& from)
{
if(this != &from) {