diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-06-14 15:56:03 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-06-14 16:01:19 +0300 |
commit | 8a1860bd9aecddf611b64e3e842bdc8c76f15cc6 (patch) | |
tree | 52afad79ca08551fa22bb35d082719299f0476ef /source/blender/blenkernel/BKE_editmesh.h | |
parent | 6bef2559047461794eb3ff27de15f4caf5ddcf1e (diff) |
BMesh: support face-normal calculation in normal & looptri functions
Support calculating face normals when tessellating. When this is done
before updating vertex normals it gives ~20% performance improvement.
Now vertex normal calculation only needs to perform a single pass on the
mesh vertices when called after tessellation.
Extended versions of normal & looptri update functions have been added:
- BM_mesh_calc_tessellation_ex
- BM_mesh_normals_update_ex
Most callers don't need to be aware of this detail by using:
- BKE_editmesh_looptri_and_normals_calc
- BKE_editmesh_looptri_and_normals_calc_with_partial
- EDBM_update also takes advantage of this,
where calling EDBM_update with calc_looptri & calc_normals
enabled uses the faster normal updating logic.
Diffstat (limited to 'source/blender/blenkernel/BKE_editmesh.h')
-rw-r--r-- | source/blender/blenkernel/BKE_editmesh.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_editmesh.h b/source/blender/blenkernel/BKE_editmesh.h index 3a1eedfd807..075a9bc0eac 100644 --- a/source/blender/blenkernel/BKE_editmesh.h +++ b/source/blender/blenkernel/BKE_editmesh.h @@ -34,6 +34,7 @@ extern "C" { struct BMLoop; struct BMesh; struct BMPartialUpdate; +struct BMeshCalcTessellation_Params; struct BoundBox; struct Depsgraph; struct Mesh; @@ -85,8 +86,17 @@ typedef struct BMEditMesh { } BMEditMesh; /* editmesh.c */ +void BKE_editmesh_looptri_calc_ex(BMEditMesh *em, + const struct BMeshCalcTessellation_Params *params); void BKE_editmesh_looptri_calc(BMEditMesh *em); +void BKE_editmesh_looptri_calc_with_partial_ex(BMEditMesh *em, + struct BMPartialUpdate *bmpinfo, + const struct BMeshCalcTessellation_Params *params); void BKE_editmesh_looptri_calc_with_partial(BMEditMesh *em, struct BMPartialUpdate *bmpinfo); +void BKE_editmesh_looptri_and_normals_calc_with_partial(BMEditMesh *em, + struct BMPartialUpdate *bmpinfo); + +void BKE_editmesh_looptri_and_normals_calc(BMEditMesh *em); BMEditMesh *BKE_editmesh_create(BMesh *bm, const bool do_tessellate); BMEditMesh *BKE_editmesh_copy(BMEditMesh *em); |