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:
authorClément Foucault <foucault.clem@gmail.com>2020-02-11 20:37:21 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-02-11 20:38:10 +0300
commitf1f2d9fe745e37d7e7c286002ec3fa6243b499e3 (patch)
treeef58f592afe85e02744266368db59ef788a008cd /source/blender/draw/engines/overlay/overlay_wireframe.c
parent38589de10c098cfe32ac7716f4d7844abf959753 (diff)
Fix T73442 Overlay: Wireframe infront buggy in material shading mode
This was caused by the refactor. The wireframe was drawn with the incorrect depth buffer. Should be included in 2.82
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_wireframe.c')
-rw-r--r--source/blender/draw/engines/overlay/overlay_wireframe.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_wireframe.c b/source/blender/draw/engines/overlay/overlay_wireframe.c
index e39f51aa606..1d0c674f812 100644
--- a/source/blender/draw/engines/overlay/overlay_wireframe.c
+++ b/source/blender/draw/engines/overlay/overlay_wireframe.c
@@ -65,7 +65,7 @@ void OVERLAY_wireframe_cache_init(OVERLAY_Data *vedata)
GPUShader *wires_sh = use_select ? OVERLAY_shader_wireframe_select() :
OVERLAY_shader_wireframe();
- for (int xray = 0; xray < 2; xray++) {
+ for (int xray = 0; xray < (is_material_shmode ? 1 : 2); xray++) {
/* Only do stencil test if stencil buffer is written by the render engine. */
DRWState stencil_state = is_material_shmode ? 0 : DRW_STATE_STENCIL_EQUAL;
DRWState state = DRW_STATE_FIRST_VERTEX_CONVENTION | DRW_STATE_WRITE_COLOR |
@@ -104,6 +104,16 @@ void OVERLAY_wireframe_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_bool_copy(grp, "useColoring", false);
DRW_shgroup_stencil_mask(grp, stencil_mask);
}
+
+ if (is_material_shmode) {
+ /* Make all drawcalls go into the non-xray shading groups. */
+ for (int use_coloring = 0; use_coloring < 2; use_coloring++) {
+ pd->wires_grp[1][use_coloring] = pd->wires_grp[0][use_coloring];
+ pd->wires_all_grp[1][use_coloring] = pd->wires_all_grp[0][use_coloring];
+ }
+ pd->wires_sculpt_grp[1] = pd->wires_sculpt_grp[0];
+ psl->wireframe_xray_ps = NULL;
+ }
}
void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata,
@@ -237,8 +247,10 @@ void OVERLAY_wireframe_in_front_draw(OVERLAY_Data *data)
OVERLAY_PassList *psl = data->psl;
OVERLAY_PrivateData *pd = data->stl->pd;
- DRW_view_set_active(pd->view_wires);
- DRW_draw_pass(psl->wireframe_xray_ps);
+ if (psl->wireframe_xray_ps) {
+ DRW_view_set_active(pd->view_wires);
+ DRW_draw_pass(psl->wireframe_xray_ps);
- DRW_view_set_active(NULL);
+ DRW_view_set_active(NULL);
+ }
}