Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-01-17 05:02:07 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-17 05:05:45 +0300
commit76fdd33df212cc609d3c4d8f01333be2928bdc70 (patch)
tree26b379c2bd54e3c42e8b33783435c3de77c763e7 /source/blender/draw/intern/draw_cache_impl_mesh.c
parent2f372654b6f30a643a5c448895d2ffae536c86c5 (diff)
Fix T60578: Crash selecting after hiding vertices
Diffstat (limited to 'source/blender/draw/intern/draw_cache_impl_mesh.c')
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c42
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);
}
}
}