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/bmesh/intern/bmesh_mesh_tessellate.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/bmesh/intern/bmesh_mesh_tessellate.h')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_mesh_tessellate.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_mesh_tessellate.h b/source/blender/bmesh/intern/bmesh_mesh_tessellate.h index f68a91cb988..9a6a20d7568 100644 --- a/source/blender/bmesh/intern/bmesh_mesh_tessellate.h +++ b/source/blender/bmesh/intern/bmesh_mesh_tessellate.h @@ -22,9 +22,25 @@ struct BMPartialUpdate; +struct BMeshCalcTessellation_Params { + /** + * When calculating normals as well as tessellation, calculate normals after tessellation + * for improved performance. See #BMeshCalcTessellation_Params + */ + bool face_normals; +}; + +void BM_mesh_calc_tessellation_ex(BMesh *bm, + BMLoop *(*looptris)[3], + const struct BMeshCalcTessellation_Params *params); void BM_mesh_calc_tessellation(BMesh *bm, BMLoop *(*looptris)[3]); + void BM_mesh_calc_tessellation_beauty(BMesh *bm, BMLoop *(*looptris)[3]); +void BM_mesh_calc_tessellation_with_partial_ex(BMesh *bm, + BMLoop *(*looptris)[3], + const struct BMPartialUpdate *bmpinfo, + const struct BMeshCalcTessellation_Params *params); void BM_mesh_calc_tessellation_with_partial(BMesh *bm, BMLoop *(*looptris)[3], const struct BMPartialUpdate *bmpinfo); |