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:
-rw-r--r--intern/cycles/blender/blender_mesh.cpp2
-rw-r--r--intern/cycles/render/mesh.cpp25
-rw-r--r--intern/cycles/render/mesh.h1
3 files changed, 19 insertions, 9 deletions
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index e85b4ee1fc6..3420025f472 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -1064,6 +1064,8 @@ void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BL::Object b_ob, Mesh *me
/* update original sockets */
+ mesh->clear_non_sockets();
+
for (const SocketType &socket : new_mesh.type->inputs) {
/* Those sockets are updated in sync_object, so do not modify them. */
if (socket.name == "use_motion_blur" || socket.name == "motion_steps" ||
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 11c8e240afd..43e664a686f 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -277,6 +277,20 @@ void Mesh::reserve_subd_creases(size_t num_creases)
subd_creases_weight.reserve(num_creases);
}
+void Mesh::clear_non_sockets()
+{
+ Geometry::clear(true);
+
+ num_subd_verts = 0;
+ num_subd_faces = 0;
+
+ vert_to_stitching_key_map.clear();
+ vert_stitching_map.clear();
+
+ delete patch_table;
+ patch_table = NULL;
+}
+
void Mesh::clear(bool preserve_shaders, bool preserve_voxel_data)
{
Geometry::clear(preserve_shaders);
@@ -297,22 +311,15 @@ void Mesh::clear(bool preserve_shaders, bool preserve_voxel_data)
subd_ptex_offset.clear();
subd_face_corners.clear();
- num_subd_verts = 0;
- num_subd_faces = 0;
-
subd_creases_edge.clear();
subd_creases_weight.clear();
subd_attributes.clear();
attributes.clear(preserve_voxel_data);
- vert_to_stitching_key_map.clear();
- vert_stitching_map.clear();
-
subdivision_type = SubdivisionType::SUBDIVISION_NONE;
- delete patch_table;
- patch_table = NULL;
+ clear_non_sockets();
}
void Mesh::clear(bool preserve_shaders)
@@ -662,7 +669,7 @@ void Mesh::add_undisplaced()
float3 *data = attr->data_float3();
/* copy verts */
- size_t size = attr->buffer_size(this, attrs.prim);
+ size_t size = attr->buffer_size(this, ATTR_PRIM_GEOMETRY);
/* Center points for ngons aren't stored in Mesh::verts but are included in size since they will
* be calculated later, we subtract them from size here so we don't have an overflow while
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h
index 6630dcd8a35..e2746e560da 100644
--- a/intern/cycles/render/mesh.h
+++ b/intern/cycles/render/mesh.h
@@ -205,6 +205,7 @@ class Mesh : public Geometry {
void resize_subd_faces(int numfaces, int num_ngons, int numcorners);
void reserve_subd_faces(int numfaces, int num_ngons, int numcorners);
void reserve_subd_creases(size_t num_creases);
+ void clear_non_sockets();
void clear(bool preserve_shaders = false) override;
void add_vertex(float3 P);
void add_vertex_slow(float3 P);