diff options
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d.py | 5 | ||||
-rw-r--r-- | source/blender/draw/modes/edit_mesh_mode.c | 15 |
2 files changed, 13 insertions, 7 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 4476f144ae5..62dceabd061 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -65,8 +65,9 @@ class VIEW3D_HT_header(Header): row.prop(tool_settings.particle_edit, "select_mode", text="", expand=True) # Occlude geometry - if ((shading.type not in {'BOUNDBOX', 'WIREFRAME'} and (mode == 'PARTICLE_EDIT' or (mode == 'EDIT' and obj.type == 'MESH'))) or - (mode in {'WEIGHT_PAINT', 'VERTEX_PAINT'})): + if ((((shading.type not in {'SOLID', 'TEXTURED'}) or not shading.show_xray) and + (mode == 'PARTICLE_EDIT' or (mode == 'EDIT' and obj.type == 'MESH'))) or + (mode in {'WEIGHT_PAINT', 'VERTEX_PAINT'})): row = layout.row() row.prop(view, "use_occlude_geometry", text="") diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c index 26648ecab07..700132e0ee4 100644 --- a/source/blender/draw/modes/edit_mesh_mode.c +++ b/source/blender/draw/modes/edit_mesh_mode.c @@ -134,6 +134,7 @@ typedef struct EDIT_MESH_PrivateData { DRWShadingGroup *facedot_occluded_shgrp; DRWShadingGroup *facefill_occluded_shgrp; + bool do_zbufclip; } EDIT_MESH_PrivateData; /* Transient data */ /* *********** FUNCTIONS *********** */ @@ -352,8 +353,6 @@ static void EDIT_MESH_cache_init(void *vedata) const DRWContextState *draw_ctx = DRW_context_state_get(); View3D *v3d = draw_ctx->v3d; - bool do_zbufclip = ((v3d->flag & V3D_ZBUF_SELECT) == 0); - static float zero = 0.0f; if (!stl->g_data) { @@ -361,6 +360,11 @@ static void EDIT_MESH_cache_init(void *vedata) stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__); } + + const bool xray_enabled = ((draw_ctx->v3d->shading.flag & V3D_SHADING_XRAY) != 0) && + (draw_ctx->v3d->drawtype < OB_MATERIAL); + stl->g_data->do_zbufclip = ((v3d->flag & V3D_ZBUF_SELECT) == 0) || xray_enabled; + { psl->vcolor_faces = DRW_pass_create( "Vert Color Pass", @@ -403,7 +407,7 @@ static void EDIT_MESH_cache_init(void *vedata) DRW_shgroup_uniform_vec4(stl->g_data->lnormals_shgrp, "color", ts.colorLNormal, 1); } - if (!do_zbufclip) { + if (!stl->g_data->do_zbufclip) { psl->edit_face_overlay = edit_mesh_create_overlay_pass( &face_mod, DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_WRITE_DEPTH | DRW_STATE_BLEND, &stl->g_data->face_overlay_shgrp, &stl->g_data->ledges_overlay_shgrp, @@ -519,7 +523,7 @@ static void EDIT_MESH_cache_populate(void *vedata, Object *ob) } } - if ((v3d->flag & V3D_ZBUF_SELECT) == 0) { + if (stl->g_data->do_zbufclip) { edit_mesh_add_ob_to_pass( scene, ob, stl->g_data->face_occluded_shgrp, stl->g_data->ledges_occluded_shgrp, stl->g_data->lverts_occluded_shgrp, stl->g_data->facedot_occluded_shgrp, @@ -550,6 +554,7 @@ static void EDIT_MESH_cache_populate(void *vedata, Object *ob) static void EDIT_MESH_draw_scene(void *vedata) { EDIT_MESH_PassList *psl = ((EDIT_MESH_Data *)vedata)->psl; + EDIT_MESH_StorageList *stl = ((EDIT_MESH_Data *)vedata)->stl; EDIT_MESH_FramebufferList *fbl = ((EDIT_MESH_Data *)vedata)->fbl; DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); @@ -557,7 +562,7 @@ static void EDIT_MESH_draw_scene(void *vedata) DRW_draw_pass(psl->depth_hidden_wire); - if (psl->edit_face_occluded) { + if (stl->g_data->do_zbufclip) { float clearcol[4] = {0.0f, 0.0f, 0.0f, 0.0f}; /* render facefill */ DRW_draw_pass(psl->facefill_occlude); |