[Bf-blender-cvs] [5f8cbb11c3b] refactor-mesh-hide-generic: Fixes

Hans Goudey noreply at git.blender.org
Fri Jul 8 18:50:15 CEST 2022


Commit: 5f8cbb11c3bec8fee6f6ff39aa73972e57ad2e90
Author: Hans Goudey
Date:   Fri Jul 8 11:50:05 2022 -0500
Branches: refactor-mesh-hide-generic
https://developer.blender.org/rB5f8cbb11c3bec8fee6f6ff39aa73972e57ad2e90

Fixes

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

M	source/blender/blenkernel/BKE_customdata.h
M	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_undo.c
M	source/blender/gpu/intern/gpu_buffers.c

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

diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index f1a9b93174a..16f0dc6fe72 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -245,7 +245,6 @@ void *CustomData_add_layer_anonymous(struct CustomData *data,
 bool CustomData_free_layer(struct CustomData *data, int type, int totelem, int index);
 bool CustomData_free_layer_named(struct CustomData *data, const char *name, const int totelem);
 
-bool CustomData_free_layer_named(struct CustomData *data, const char *name, const int totelem);
 
 /**
  * Frees the layer index with the give type.
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
index 6a94d40260a..256cc4c5d4e 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
@@ -183,9 +183,14 @@ static void extract_lines_loose_geom_subdiv(const DRWSubdivCache *subdiv_cache,
 
   switch (mr->extract_type) {
     case MR_EXTRACT_MESH: {
-      const MEdge *medge = mr->medge;
-      for (DRWSubdivLooseEdge edge : loose_edges) {
-        *flags_data++ = (medge[edge.coarse_edge_index].flag & ME_HIDE) != 0;
+      const bool *vert_hide = mr->vert_hide;
+      if (vert_hide) {
+        for (DRWSubdivLooseEdge edge : loose_edges) {
+          *flags_data++ = vert_hide[edge.coarse_edge_index];
+        }
+      }
+      else {
+        MutableSpan<uint>(flags_data, loose_edges.size()).fill(0);
       }
       break;
     }
@@ -197,18 +202,23 @@ static void extract_lines_loose_geom_subdiv(const DRWSubdivCache *subdiv_cache,
         }
       }
       else {
-        for (DRWSubdivLooseEdge edge : loose_edges) {
-          int e = edge.coarse_edge_index;
-
-          if (mr->e_origindex && mr->e_origindex[e] != ORIGINDEX_NONE) {
-            *flags_data++ = (mr->medge[mr->e_origindex[e]].flag & ME_HIDE) != 0;
-          }
-          else {
-            *flags_data++ = false;
+        const bool *vert_hide = mr->vert_hide;
+        if (vert_hide) {
+          for (DRWSubdivLooseEdge edge : loose_edges) {
+            int e = edge.coarse_edge_index;
+
+            if (mr->e_origindex && mr->e_origindex[e] != ORIGINDEX_NONE) {
+              *flags_data++ = vert_hide[edge.coarse_edge_index];
+            }
+            else {
+              *flags_data++ = false;
+            }
           }
         }
+        else {
+          MutableSpan<uint>(flags_data, loose_edges.size()).fill(0);
+        }
       }
-
       break;
     }
     case MR_EXTRACT_BMESH: {
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 15ed1e21c67..60d2a5b07f7 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -341,11 +341,12 @@ int SCULPT_active_face_set_get(SculptSession *ss)
 void SCULPT_vertex_visible_set(SculptSession *ss, int index, bool visible)
 {
   switch (BKE_pbvh_type(ss->pbvh)) {
-    case PBVH_FACES:
+    case PBVH_FACES: {
       bool *vert_hide = BKE_pbvh_get_vert_hide_for_write(ss->pbvh);
       vert_hide[index] = visible;
       BKE_pbvh_vert_mark_update(ss->pbvh, index);
       break;
+    }
     case PBVH_BMESH:
       BM_elem_flag_set(BM_vert_at_index(ss->bm, index), BM_ELEM_HIDDEN, !visible);
       break;
@@ -357,9 +358,10 @@ void SCULPT_vertex_visible_set(SculptSession *ss, int index, bool visible)
 bool SCULPT_vertex_visible_get(SculptSession *ss, int index)
 {
   switch (BKE_pbvh_type(ss->pbvh)) {
-    case PBVH_FACES:
+    case PBVH_FACES: {
       const bool *vert_hide = BKE_pbvh_get_vert_hide(ss->pbvh);
-      return !vert_hide[index];
+      return vert_hide == NULL || !vert_hide[index];
+    }
     case PBVH_BMESH:
       return !BM_elem_flag_test(BM_vert_at_index(ss->bm, index), BM_ELEM_HIDDEN);
     case PBVH_GRIDS: {
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c
index 2602d764eb5..a70e8b9aa32 100644
--- a/source/blender/editors/sculpt_paint/sculpt_undo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_undo.c
@@ -1191,7 +1191,7 @@ static void sculpt_undo_store_hidden(Object *ob, SculptUndoNode *unode)
   PBVHNode *node = unode->node;
 
   const bool *vert_hide = BKE_pbvh_get_vert_hide(pbvh);
-  if (!vert_hide) {
+  if (vert_hide == NULL) {
     return;
   }
 
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index bb1dc538c83..1fa4fb6e8a7 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -315,7 +315,7 @@ void GPU_pbvh_mesh_buffers_update(PBVHGPUFormat *vbo_id,
           for (uint i = 0; i < buffers->face_indices_len; i++) {
             const MLoopTri *lt = &buffers->looptri[buffers->face_indices[i]];
 
-            if (!gpu_pbvh_is_looptri_visible(lt, mvert, buffers->mloop, sculpt_face_sets)) {
+            if (!gpu_pbvh_is_looptri_visible(lt, vert_hide, buffers->mloop, sculpt_face_sets)) {
               continue;
             }
 
@@ -355,7 +355,7 @@ void GPU_pbvh_mesh_buffers_update(PBVHGPUFormat *vbo_id,
               buffers->mloop[lt->tri[2]].v,
           };
 
-          if (!gpu_pbvh_is_looptri_visible(lt, mvert, buffers->mloop, sculpt_face_sets)) {
+          if (!gpu_pbvh_is_looptri_visible(lt, vert_hide, buffers->mloop, sculpt_face_sets)) {
             continue;
           }



More information about the Bf-blender-cvs mailing list