From 238d3471bdc957a468fee0de7d0d7c4e7cfe5ace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 22 Oct 2018 17:52:25 +0200 Subject: [PATCH] Xray Mode: Fix wireframe object display type not being correctly occluded --- .../engines/workbench/workbench_forward.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c index cb11864df54..bd9dbd5ae17 100644 --- a/source/blender/draw/engines/workbench/workbench_forward.c +++ b/source/blender/draw/engines/workbench/workbench_forward.c @@ -469,6 +469,7 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) WORKBENCH_PrivateData *wpd = stl->g_data; const DRWContextState *draw_ctx = DRW_context_state_get(); Scene *scene = draw_ctx->scene; + const bool is_wire = (ob->dt == OB_WIRE); if (!DRW_object_is_renderable(ob)) return; @@ -487,7 +488,7 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) return; /* Do not draw solid in this case. */ } - if (!DRW_object_is_visible_in_active_context(ob) || (ob->dt < OB_SOLID)) { + if (!DRW_object_is_visible_in_active_context(ob) || (ob->dt < OB_WIRE)) { return; } @@ -540,11 +541,15 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) material = get_or_create_material_data(vedata, ob, NULL, NULL, wpd->shading.color_type); if (is_sculpt_mode) { DRW_shgroup_call_sculpt_add(material->shgrp_object_outline, ob, ob->obmat); - DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat); + if (!is_wire) { + DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat); + } } else { DRW_shgroup_call_object_add(material->shgrp_object_outline, geom, ob); - DRW_shgroup_call_object_add(material->shgrp, geom, ob); + if (!is_wire) { + DRW_shgroup_call_object_add(material->shgrp, geom, ob); + } } } } @@ -567,11 +572,15 @@ void workbench_forward_cache_populate(WORKBENCH_Data *vedata, Object *ob) material = get_or_create_material_data(vedata, ob, mat, NULL, V3D_SHADING_MATERIAL_COLOR); if (is_sculpt_mode) { DRW_shgroup_call_sculpt_add(material->shgrp_object_outline, ob, ob->obmat); - DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat); + if (!is_wire) { + DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat); + } } else { DRW_shgroup_call_object_add(material->shgrp_object_outline, mat_geom[i], ob); - DRW_shgroup_call_object_add(material->shgrp, mat_geom[i], ob); + if (!is_wire) { + DRW_shgroup_call_object_add(material->shgrp, mat_geom[i], ob); + } } } }