From 04ead39daee88433e7dfbe5f86986026e6e9ed1e Mon Sep 17 00:00:00 2001 From: Germano Cavalcante Date: Wed, 29 Dec 2021 16:34:19 -0300 Subject: Modifiers: decrease maximum allocation size for Weld vertices At the time of allocating the buffer with vertices in context, we don't know exactly how many vertices are affected, but we do know that it is less than or equal to twice the number of vertices killed. --- source/blender/modifiers/intern/MOD_weld.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'source/blender/modifiers/intern/MOD_weld.cc') diff --git a/source/blender/modifiers/intern/MOD_weld.cc b/source/blender/modifiers/intern/MOD_weld.cc index 1f7783f8b28..92207e1fbe6 100644 --- a/source/blender/modifiers/intern/MOD_weld.cc +++ b/source/blender/modifiers/intern/MOD_weld.cc @@ -31,6 +31,8 @@ //#define USE_WELD_NORMALS //#define USE_BVHTREEKDOP +#include + #include "MEM_guardedalloc.h" #include "BLI_utildefines.h" @@ -376,10 +378,11 @@ static void weld_assert_poly_len(const WeldPoly *wp, const Span wloop) /** \name Weld Vert API * \{ */ -static Vector weld_vert_ctx_alloc_and_setup(Span vert_dest_map) +static Vector weld_vert_ctx_alloc_and_setup(Span vert_dest_map, + const int vert_kill_len) { Vector wvert; - wvert.reserve(vert_dest_map.size()); + wvert.reserve(std::min(2 * vert_kill_len, vert_dest_map.size())); for (const int i : vert_dest_map.index_range()) { if (vert_dest_map[i] != OUT_OF_CONTEXT) { @@ -1260,7 +1263,7 @@ static void weld_mesh_context_create(const Mesh *mesh, Span mloop{mesh->mloop, mesh->totloop}; const int mvert_len = mesh->totvert; - Vector wvert = weld_vert_ctx_alloc_and_setup(vert_dest_map); + Vector wvert = weld_vert_ctx_alloc_and_setup(vert_dest_map, vert_kill_len); r_weld_mesh->vert_kill_len = vert_kill_len; Array edge_dest_map(medge.size()); -- cgit v1.2.3