From 66b1cd45fb50a13caea40ea25ae41f0edf16d35e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 8 May 2018 10:06:37 +0200 Subject: [PATCH] Added BKE_mesh_ensure_normals() This calls BKE_mesh_calc_normals() only if the mesh vertex normals are marked as dirty. --- source/blender/blenkernel/BKE_mesh.h | 1 + source/blender/blenkernel/intern/mesh_evaluate.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 41b2b875d9a..b26aae6d585 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -202,6 +202,7 @@ void BKE_mesh_calc_normals_poly( int numLoops, int numPolys, float (*r_polyNors)[3], const bool only_face_normals); void BKE_mesh_calc_normals(struct Mesh *me); +void BKE_mesh_ensure_normals(struct Mesh *me); void BKE_mesh_calc_normals_tessface( struct MVert *mverts, int numVerts, const struct MFace *mfaces, int numFaces, diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c b/source/blender/blenkernel/intern/mesh_evaluate.c index 7c71eeaf069..068be0ef304 100644 --- a/source/blender/blenkernel/intern/mesh_evaluate.c +++ b/source/blender/blenkernel/intern/mesh_evaluate.c @@ -332,6 +332,15 @@ void BKE_mesh_calc_normals_poly( MEM_freeN(lnors_weighted); } +void BKE_mesh_ensure_normals(Mesh *mesh) +{ + if (mesh->runtime.cd_dirty_vert & CD_MASK_NORMAL) { + BKE_mesh_calc_normals(mesh); + } + BLI_assert((mesh->runtime.cd_dirty_vert & CD_MASK_NORMAL) == 0); +} + +/* Note that this does not update the CD_NORMAL layer, but does update the normals in the CD_MVERT layer. */ void BKE_mesh_calc_normals(Mesh *mesh) { #ifdef DEBUG_TIME