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:
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py5
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c15
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);