[Bf-blender-cvs] [24c16f54571] master: Fix wireframe overlay not blending over paint overlay correctly

Pablo Dobarro noreply at git.blender.org
Tue Aug 17 23:56:13 CEST 2021


Commit: 24c16f54571fe948aa5c02f807ca23188b436764
Author: Pablo Dobarro
Date:   Tue Aug 17 00:37:46 2021 +0200
Branches: master
https://developer.blender.org/rB24c16f54571fe948aa5c02f807ca23188b436764

Fix wireframe overlay not blending over paint overlay correctly

When using wireframe opacity, the paint overlay needs to be drawn
before the wireframes in order to alpha blend correctly.
Sculpt overlays were also affected by this, so this commit refactors
this part of the code in case other overlays needs to be added in
the future.

Reviewed By: Mets

Differential Revision: https://developer.blender.org/D12235

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

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

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

diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 235104245cc..b07e86000fd 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -576,9 +576,20 @@ static void OVERLAY_draw_scene(void *vedata)
   OVERLAY_extra_blend_draw(vedata);
   OVERLAY_volume_draw(vedata);
 
-  if (pd->ctx_mode == CTX_MODE_SCULPT) {
-    /* Sculpt overlays are drawn here to avoid artifacts with wireframe opacity. */
-    OVERLAY_sculpt_draw(vedata);
+  /* These overlays are drawn here to avoid artifacts with wireframe opacity. */
+  switch (pd->ctx_mode) {
+    case CTX_MODE_SCULPT:
+      OVERLAY_sculpt_draw(vedata);
+      break;
+    case CTX_MODE_EDIT_MESH:
+    case CTX_MODE_POSE:
+    case CTX_MODE_PAINT_WEIGHT:
+    case CTX_MODE_PAINT_VERTEX:
+    case CTX_MODE_PAINT_TEXTURE:
+      OVERLAY_paint_draw(vedata);
+      break;
+    default:
+      break;
   }
 
   if (DRW_state_is_fbo()) {
@@ -601,11 +612,6 @@ static void OVERLAY_draw_scene(void *vedata)
 
   OVERLAY_xray_depth_infront_copy(vedata);
 
-  if (pd->ctx_mode == CTX_MODE_PAINT_WEIGHT) {
-    /* Fix weird case where weightpaint mode needs to draw before xray bones. */
-    OVERLAY_paint_draw(vedata);
-  }
-
   if (DRW_state_is_fbo()) {
     GPU_framebuffer_bind(fbl->overlay_in_front_fb);
   }
@@ -640,7 +646,6 @@ static void OVERLAY_draw_scene(void *vedata)
 
   switch (pd->ctx_mode) {
     case CTX_MODE_EDIT_MESH:
-      OVERLAY_paint_draw(vedata);
       OVERLAY_edit_mesh_draw(vedata);
       break;
     case CTX_MODE_EDIT_SURFACE:
@@ -654,13 +659,8 @@ static void OVERLAY_draw_scene(void *vedata)
       OVERLAY_edit_lattice_draw(vedata);
       break;
     case CTX_MODE_POSE:
-      OVERLAY_paint_draw(vedata);
       OVERLAY_pose_draw(vedata);
       break;
-    case CTX_MODE_PAINT_VERTEX:
-    case CTX_MODE_PAINT_TEXTURE:
-      OVERLAY_paint_draw(vedata);
-      break;
     case CTX_MODE_PARTICLE:
       OVERLAY_edit_particle_draw(vedata);
       break;



More information about the Bf-blender-cvs mailing list