[Bf-blender-cvs] [f1f2d9fe745] master: Fix T73442 Overlay: Wireframe infront buggy in material shading mode

Clément Foucault noreply at git.blender.org
Tue Feb 11 18:38:20 CET 2020


Commit: f1f2d9fe745e37d7e7c286002ec3fa6243b499e3
Author: Clément Foucault
Date:   Tue Feb 11 18:37:21 2020 +0100
Branches: master
https://developer.blender.org/rBf1f2d9fe745e37d7e7c286002ec3fa6243b499e3

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

===================================================================

M	source/blender/draw/engines/overlay/overlay_wireframe.c

===================================================================

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);
+  }
 }



More information about the Bf-blender-cvs mailing list