diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-01-17 05:02:07 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-01-17 05:05:45 +0300 |
commit | 76fdd33df212cc609d3c4d8f01333be2928bdc70 (patch) | |
tree | 26b379c2bd54e3c42e8b33783435c3de77c763e7 /source/blender/draw/intern | |
parent | 2f372654b6f30a643a5c448895d2ffae536c86c5 (diff) |
Fix T60578: Crash selecting after hiding vertices
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r-- | source/blender/draw/intern/draw_cache_impl_mesh.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index 9a3cde9181b..27dcb11b644 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -2672,10 +2672,29 @@ static void mesh_create_edit_select_id( } /* Loose edges */ BM_ITER_MESH (eed, &iter_edge, bm, BM_EDGES_OF_MESH) { - if (eed->l != NULL) { - continue; + if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && + (eed->l == NULL || !bm_edge_has_visible_face(eed))) + { + BM_ITER_ELEM (eve, &iter_vert, eed, BM_VERTS_OF_EDGE) { + if (vbo_pos) { + copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), eve->co); + } + if (vbo_verts) { + int vidx = BM_elem_index_get(eve); + mesh_edit_add_select_index(&raw_verts, vert_comp, vidx); + } + if (vbo_edges) { + int eidx = BM_elem_index_get(eed); + mesh_edit_add_select_index(&raw_edges, edge_comp, eidx); + } + } } - BM_ITER_ELEM (eve, &iter_vert, eed, BM_VERTS_OF_EDGE) { + } + /* Loose verts */ + BM_ITER_MESH (eve, &iter_vert, bm, BM_VERTS_OF_MESH) { + if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && + (eve->e == NULL || !bm_vert_has_visible_edge(eve))) + { if (vbo_pos) { copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), eve->co); } @@ -2683,23 +2702,6 @@ static void mesh_create_edit_select_id( int vidx = BM_elem_index_get(eve); mesh_edit_add_select_index(&raw_verts, vert_comp, vidx); } - if (vbo_edges) { - int eidx = BM_elem_index_get(eed); - mesh_edit_add_select_index(&raw_edges, edge_comp, eidx); - } - } - } - /* Loose verts */ - BM_ITER_MESH (eve, &iter_vert, bm, BM_VERTS_OF_MESH) { - if (eve->e != NULL) { - continue; - } - if (vbo_pos) { - copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), eve->co); - } - if (vbo_verts) { - int vidx = BM_elem_index_get(eve); - mesh_edit_add_select_index(&raw_verts, vert_comp, vidx); } } } |