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-12 19:20:20 +0300
commit77d23b0bd76f65b89f6ee73738e5993b274ba27a (patch)
tree582dcd2a229273910295207e90fecb2738f9450d
parent5a2a888fa0eaf14d344cfcb38ef329ccf325fec1 (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
-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);
+ }
}