[Bf-blender-cvs] [fa8a3c8f26f] master: Revert "Fix T72688: Vertex Group Weights in Edit Mode Occludes In Front Armatures"

Dalai Felinto noreply at git.blender.org
Thu Apr 2 15:08:26 CEST 2020


Commit: fa8a3c8f26f4eeb09d5d8b2792d32887be4fe111
Author: Dalai Felinto
Date:   Thu Apr 2 15:05:41 2020 +0200
Branches: master
https://developer.blender.org/rBfa8a3c8f26f4eeb09d5d8b2792d32887be4fe111

Revert "Fix T72688: Vertex Group Weights in Edit Mode Occludes In Front Armatures"

This reverts commit 782e6ea4edd9cb09f2583c8f28a24d6330dc6ce8.

Said fix introduced a crash the moment one goes to edit mode.

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

M	source/blender/draw/engines/overlay/overlay_edit_mesh.c
M	source/blender/draw/engines/overlay/overlay_engine.c
M	source/blender/draw/engines/overlay/overlay_paint.c
M	source/blender/draw/engines/overlay/overlay_private.h
M	source/blender/draw/intern/draw_manager.c

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

diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.c b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
index be4e4a9e00e..400947ea819 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_mesh.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
@@ -118,6 +118,18 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
     show_face_dots = true;
   }
 
+  {
+    /* TODO(fclem) Shouldn't this be going into the paint overlay? */
+    state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL;
+    DRW_PASS_CREATE(psl->edit_mesh_weight_ps, state | pd->clipping_state);
+
+    sh = OVERLAY_shader_paint_weight();
+    pd->edit_mesh_weight_grp = grp = DRW_shgroup_create(sh, psl->edit_mesh_weight_ps);
+    DRW_shgroup_uniform_float_copy(grp, "opacity", 1.0);
+    DRW_shgroup_uniform_bool_copy(grp, "drawContours", false);
+    DRW_shgroup_uniform_texture(grp, "colorramp", G_draw.weight_ramp);
+    DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+  }
   /* Run Twice for in-front passes. */
   for (int i = 0; i < 2; i++) {
     /* Complementary Depth Pass */
@@ -271,12 +283,17 @@ void OVERLAY_edit_mesh_cache_populate(OVERLAY_Data *vedata, Object *ob)
 
   bool do_in_front = (ob->dtx & OB_DRAWXRAY) != 0;
   bool do_occlude_wire = (pd->edit_mesh.flag & V3D_OVERLAY_EDIT_OCCLUDE_WIRE) != 0;
+  bool do_show_weight = (pd->edit_mesh.flag & V3D_OVERLAY_EDIT_WEIGHT) != 0;
   bool do_show_mesh_analysis = (pd->edit_mesh.flag & V3D_OVERLAY_EDIT_STATVIS) != 0;
   bool fnormals_do = (pd->edit_mesh.flag & V3D_OVERLAY_EDIT_FACE_NORMALS) != 0;
   bool vnormals_do = (pd->edit_mesh.flag & V3D_OVERLAY_EDIT_VERT_NORMALS) != 0;
   bool lnormals_do = (pd->edit_mesh.flag & V3D_OVERLAY_EDIT_LOOP_NORMALS) != 0;
 
-  if (do_show_mesh_analysis && !pd->xray_enabled) {
+  if (do_show_weight) {
+    geom = DRW_cache_mesh_surface_weights_get(ob);
+    DRW_shgroup_call_no_cull(pd->edit_mesh_weight_grp, geom, ob);
+  }
+  else if (do_show_mesh_analysis && !pd->xray_enabled) {
     geom = DRW_cache_mesh_surface_mesh_analysis_get(ob);
     if (geom) {
       DRW_shgroup_call_no_cull(pd->edit_mesh_analysis_grp, geom, ob);
@@ -347,6 +364,7 @@ void OVERLAY_edit_mesh_draw(OVERLAY_Data *vedata)
     GPU_framebuffer_bind(fbl->overlay_default_fb);
   }
 
+  DRW_draw_pass(psl->edit_mesh_weight_ps);
   DRW_draw_pass(psl->edit_mesh_analysis_ps);
 
   DRW_draw_pass(psl->edit_mesh_depth_ps[NOT_IN_FRONT]);
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 19b0fa5e12b..e0b599f43a9 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -106,14 +106,10 @@ static void OVERLAY_cache_init(void *vedata)
   OVERLAY_Data *data = vedata;
   OVERLAY_StorageList *stl = data->stl;
   OVERLAY_PrivateData *pd = stl->pd;
-  const bool draw_edit_weights = (pd->edit_mesh.flag & V3D_OVERLAY_EDIT_WEIGHT);
 
   switch (pd->ctx_mode) {
     case CTX_MODE_EDIT_MESH:
       OVERLAY_edit_mesh_cache_init(vedata);
-      if (draw_edit_weights) {
-        OVERLAY_paint_cache_init(vedata);
-      }
       break;
     case CTX_MODE_EDIT_SURFACE:
     case CTX_MODE_EDIT_CURVE:
@@ -255,7 +251,6 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
                              (ob->base_flag & BASE_SELECTED);
   const bool draw_bone_selection = (ob->type == OB_MESH) && pd->armature.do_pose_fade_geom &&
                                    !is_select;
-  const bool draw_edit_weights = in_edit_mode && (pd->edit_mesh.flag & V3D_OVERLAY_EDIT_WEIGHT);
   const bool draw_extras =
       (!pd->hide_overlays) &&
       (((pd->overlay.flag & V3D_OVERLAY_HIDE_OBJECT_XTRAS) == 0) ||
@@ -284,9 +279,6 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
     switch (ob->type) {
       case OB_MESH:
         OVERLAY_edit_mesh_cache_populate(vedata, ob);
-        if (draw_edit_weights) {
-          OVERLAY_paint_weight_cache_populate(vedata, ob);
-        }
         break;
       case OB_ARMATURE:
         if (draw_bones) {
@@ -503,7 +495,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:
diff --git a/source/blender/draw/engines/overlay/overlay_paint.c b/source/blender/draw/engines/overlay/overlay_paint.c
index 33008963d8b..4a1aa270de0 100644
--- a/source/blender/draw/engines/overlay/overlay_paint.c
+++ b/source/blender/draw/engines/overlay/overlay_paint.c
@@ -76,18 +76,15 @@ void OVERLAY_paint_cache_init(OVERLAY_Data *vedata)
   DRWShadingGroup *grp;
   DRWState state;
 
-  const bool is_edit_mode = (pd->ctx_mode == CTX_MODE_EDIT_MESH);
-  const bool draw_contours = !is_edit_mode &&
-                             (pd->overlay.wpaint_flag & V3D_OVERLAY_WPAINT_CONTOURS) != 0;
+  const bool draw_contours = (pd->overlay.wpaint_flag & V3D_OVERLAY_WPAINT_CONTOURS) != 0;
   float opacity = 0.0f;
   pd->paint_depth_grp = NULL;
   psl->paint_depth_ps = NULL;
 
   switch (pd->ctx_mode) {
     case CTX_MODE_POSE:
-    case CTX_MODE_EDIT_MESH:
     case CTX_MODE_PAINT_WEIGHT: {
-      opacity = is_edit_mode ? 1.0 : pd->overlay.weight_paint_mode_opacity;
+      opacity = pd->overlay.weight_paint_mode_opacity;
       if (opacity > 0.0f) {
         state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
         state |= pd->painting.alpha_blending ? DRW_STATE_BLEND_ALPHA : DRW_STATE_BLEND_MUL;
@@ -210,12 +207,11 @@ void OVERLAY_paint_vertex_cache_populate(OVERLAY_Data *vedata, Object *ob)
   struct GPUBatch *geom = NULL;
 
   const Mesh *me_orig = DEG_get_original_object(ob)->data;
-  const bool is_edit_mode = (pd->ctx_mode == CTX_MODE_EDIT_MESH);
-  const bool use_wire = !is_edit_mode && (pd->overlay.paint_flag & V3D_OVERLAY_PAINT_WIRE);
-  const bool use_face_sel = !is_edit_mode && (me_orig->editflag & ME_EDIT_PAINT_FACE_SEL);
-  const bool use_vert_sel = !is_edit_mode && (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL);
+  const bool use_wire = (pd->overlay.paint_flag & V3D_OVERLAY_PAINT_WIRE) != 0;
+  const bool use_face_sel = (me_orig->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
+  const bool use_vert_sel = (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL) != 0;
 
-  if (ELEM(ob->mode, OB_MODE_WEIGHT_PAINT, OB_MODE_EDIT)) {
+  if (ob->mode == OB_MODE_WEIGHT_PAINT) {
     if (pd->paint_surf_grp) {
       geom = DRW_cache_mesh_surface_weights_get(ob);
       DRW_shgroup_call(pd->paint_surf_grp, geom, ob);
diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h
index fa3d6fe3d8a..bd9583c6a5f 100644
--- a/source/blender/draw/engines/overlay/overlay_private.h
+++ b/source/blender/draw/engines/overlay/overlay_private.h
@@ -70,6 +70,7 @@ typedef struct OVERLAY_PassList {
   DRWPass *edit_mesh_faces_cage_ps[2];
   DRWPass *edit_mesh_analysis_ps;
   DRWPass *edit_mesh_normals_ps;
+  DRWPass *edit_mesh_weight_ps;
   DRWPass *edit_particle_ps;
   DRWPass *edit_text_overlay_ps;
   DRWPass *edit_text_wire_ps[2];
@@ -234,6 +235,7 @@ typedef struct OVERLAY_PrivateData {
   DRWShadingGroup *edit_mesh_skin_roots_grp[2];
   DRWShadingGroup *edit_mesh_normals_grp;
   DRWShadingGroup *edit_mesh_analysis_grp;
+  DRWShadingGroup *edit_mesh_weight_grp;
   DRWShadingGroup *edit_particle_strand_grp;
   DRWShadingGroup *edit_particle_point_grp;
   DRWShadingGroup *edit_text_overlay_grp;
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 1b169dbee1d..b265035f449 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -145,8 +145,11 @@ bool DRW_object_is_renderable(const Object *ob)
 
   if (ob->type == OB_MESH) {
     if ((ob == DST.draw_ctx.object_edit) || DRW_object_is_in_edit_mode(ob)) {
+
       View3D *v3d = DST.draw_ctx.v3d;
-      if (v3d && v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_OCCLUDE_WIRE) {
+      const int mask = (V3D_OVERLAY_EDIT_OCCLUDE_WIRE | V3D_OVERLAY_EDIT_WEIGHT);
+
+      if (v3d && v3d->overlay.edit_flag & mask) {
         return false;
       }
     }



More information about the Bf-blender-cvs mailing list