diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index bd8b90de7e0..5a25a8ef1bd 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -72,6 +72,11 @@ void BKE_mesh_tag_topology_changed(struct Mesh *mesh); */ void BKE_mesh_tag_edges_split(struct Mesh *mesh); +/** + * Call when face vertex order has changed but positions and faces haven't changed + */ +void BKE_mesh_tag_face_winding_changed(struct Mesh *mesh); + /* *** mesh.c *** */ struct BMesh *BKE_mesh_to_bmesh_ex(const struct Mesh *me, diff --git a/source/blender/blenkernel/intern/mesh_runtime.cc b/source/blender/blenkernel/intern/mesh_runtime.cc index 8f9bd91b413..49b5c015c6d 100644 --- a/source/blender/blenkernel/intern/mesh_runtime.cc +++ b/source/blender/blenkernel/intern/mesh_runtime.cc @@ -243,6 +243,12 @@ void BKE_mesh_tag_edges_split(struct Mesh *mesh) } } +void BKE_mesh_tag_face_winding_changed(Mesh *mesh) +{ + mesh->runtime->vert_normals_dirty = true; + mesh->runtime->poly_normals_dirty = true; +} + void BKE_mesh_tag_positions_changed(Mesh *mesh) { mesh->runtime->vert_normals_dirty = true; diff --git a/source/blender/geometry/intern/mesh_flip_faces.cc b/source/blender/geometry/intern/mesh_flip_faces.cc index 61305534307..6fd809ad4ca 100644 --- a/source/blender/geometry/intern/mesh_flip_faces.cc +++ b/source/blender/geometry/intern/mesh_flip_faces.cc @@ -61,7 +61,7 @@ void flip_faces(Mesh &mesh, const IndexMask &selection) return true; }); - BKE_mesh_tag_topology_changed(&mesh); + BKE_mesh_tag_face_winding_changed(&mesh); } } // namespace blender::geometry