diff options
-rw-r--r-- | intern/cycles/blender/blender_mesh.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/render/mesh.cpp | 25 | ||||
-rw-r--r-- | intern/cycles/render/mesh.h | 1 |
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); |