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());