diff options
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_hide.c | 3 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt.c | 19 |
2 files changed, 20 insertions, 2 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_hide.c b/source/blender/editors/sculpt_paint/paint_hide.c index ce5a80585b0..69ca86efa9d 100644 --- a/source/blender/editors/sculpt_paint/paint_hide.c +++ b/source/blender/editors/sculpt_paint/paint_hide.c @@ -403,6 +403,9 @@ static int hide_show_exec(bContext *C, wmOperator *op) BKE_mesh_flush_hidden_from_verts(me); } + SCULPT_visibility_sync_all_vertex_to_face_sets(ob->sculpt); + + DEG_id_tag_update(&ob->id, ID_RECALC_SHADING); ED_region_tag_redraw(region); return OPERATOR_FINISHED; diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 1777d63e330..c3ea3671195 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -435,8 +435,23 @@ static void sculpt_visibility_sync_vertex_to_face_sets(SculptSession *ss, int in void SCULPT_visibility_sync_all_vertex_to_face_sets(SculptSession *ss) { - for (int i = 0; i < ss->totvert; i++) { - sculpt_visibility_sync_vertex_to_face_sets(ss, i); + if (BKE_pbvh_type(ss->pbvh) == PBVH_FACES) { + for (int i = 0; i < ss->totpoly; i++) { + MPoly *poly = &ss->mpoly[i]; + bool poly_visible = true; + for (int l = 0; l < poly->totloop; l++) { + MLoop *loop = &ss->mloop[poly->loopstart + l]; + if (!SCULPT_vertex_visible_get(ss, (int)loop->v)) { + poly_visible = false; + } + } + if (poly_visible) { + ss->face_sets[i] = abs(ss->face_sets[i]); + } + else { + ss->face_sets[i] = -abs(ss->face_sets[i]); + } + } } } |