diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-11-19 22:42:55 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-11-19 22:43:59 +0300 |
commit | 784614655f55f81eec04c2b898e8ab8dbb99a3ec (patch) | |
tree | 3b68502a91bb4c4c842122b43654969bf7f0f083 /source/blender/blenkernel/intern/mesh_remap.c | |
parent | 0a69e3b307f05aeab8bd84f69560b4118c9bfaf2 (diff) |
Fix T53343: Custom Normal Data Transfer Crashes when some vertexes have no faces.
Odd nobody noticed this earlier, was obvious bug in code logic here... :/
To be backported to 2.79a.
Diffstat (limited to 'source/blender/blenkernel/intern/mesh_remap.c')
-rw-r--r-- | source/blender/blenkernel/intern/mesh_remap.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c index b0580f75044..f321c94bf00 100644 --- a/source/blender/blenkernel/intern/mesh_remap.c +++ b/source/blender/blenkernel/intern/mesh_remap.c @@ -1482,6 +1482,7 @@ void BKE_mesh_remap_calc_loops_from_dm( for (i = vert_to_refelem_map_src[nearest.index].count; i--;) { const int index_src = vert_to_refelem_map_src[nearest.index].indices[i]; + BLI_assert(index_src != -1); const float dot = dot_v3v3(nors_src[index_src], *nor_dst); pidx_src = (mode == MREMAP_MODE_LOOP_NEAREST_LOOPNOR) ? @@ -1522,7 +1523,12 @@ void BKE_mesh_remap_calc_loops_from_dm( } } } - if (mode == MREMAP_MODE_LOOP_NEAREST_POLYNOR) { + if (best_index_src == -1) { + /* We found no item to map back from closest vertex... */ + best_nor_dot = -1.0f; + hit_dist = FLT_MAX; + } + else if (mode == MREMAP_MODE_LOOP_NEAREST_POLYNOR) { /* Our best_index_src is a poly one for now! * Have to find its loop matching our closest vertex. */ mp_src = &polys_src[best_index_src]; |