[Bf-blender-cvs] [bce071b861c] refactor-mesh-hide-generic: Cleanups and fixes

Hans Goudey noreply at git.blender.org
Tue May 31 18:22:28 CEST 2022


Commit: bce071b861cb4a02e331010b1e70cf94994fc492
Author: Hans Goudey
Date:   Tue May 31 18:22:25 2022 +0200
Branches: refactor-mesh-hide-generic
https://developer.blender.org/rBbce071b861cb4a02e331010b1e70cf94994fc492

Cleanups and fixes

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

M	source/blender/blenkernel/intern/bvhutils.cc
M	source/blender/blenkernel/intern/mesh_evaluate.cc
M	source/blender/blenkernel/intern/pbvh.c

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

diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc
index 33d6e10571c..619fdeb8d03 100644
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@ -22,11 +22,14 @@
 #include "BKE_bvhutils.h"
 #include "BKE_customdata.h"
 #include "BKE_editmesh.h"
+#include "BKE_geometry_set.hh"
 #include "BKE_mesh.h"
 #include "BKE_mesh_runtime.h"
 
 #include "MEM_guardedalloc.h"
 
+using blender::VArray;
+
 /* -------------------------------------------------------------------- */
 /** \name BVHCache
  * \{ */
@@ -1181,11 +1184,11 @@ static BLI_bitmap *loose_edges_map_get(const MEdge *medge,
 }
 
 static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
-                                             const bool *face_hide,
+                                             const VArray<bool> &face_hide,
                                              const int looptri_len,
                                              int *r_looptri_active_len)
 {
-  if (face_hide == nullptr) {
+  if (face_hide.is_single() && !face_hide.get_internal_single()) {
     return nullptr;
   }
   BLI_bitmap *looptri_mask = BLI_BITMAP_NEW(looptri_len, __func__);
@@ -1279,13 +1282,17 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
           0.0f, tree_type, 6, mesh->mvert, mesh->mface, mesh->totface, nullptr, -1);
       break;
 
-    case BVHTREE_FROM_LOOPTRI_NO_HIDDEN:
+    case BVHTREE_FROM_LOOPTRI_NO_HIDDEN: {
+      MeshComponent component;
+      component.replace(const_cast<Mesh *>(mesh), GeometryOwnershipType::ReadOnly);
+
       mask = looptri_no_hidden_map_get(
           mesh->mpoly,
-          (const bool *)CustomData_get_layer_named(&mesh->pdata, CD_PROP_BOOL, ".face_hide"),
+          component.attribute_get_for_read<bool>(".face_hide", ATTR_DOMAIN_FACE, false),
           looptri_len,
           &mask_bits_act_len);
       ATTR_FALLTHROUGH;
+    }
     case BVHTREE_FROM_LOOPTRI:
       data->tree = bvhtree_from_mesh_looptri_create_tree(0.0f,
                                                          tree_type,
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.cc b/source/blender/blenkernel/intern/mesh_evaluate.cc
index fb4ba992c21..842bcc72450 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.cc
+++ b/source/blender/blenkernel/intern/mesh_evaluate.cc
@@ -1040,7 +1040,7 @@ void BKE_mesh_flush_hidden_from_polys(Mesh *me)
 
   const VArray<bool> face_hide = component.attribute_get_for_read<bool>(
       ".face_hide", ATTR_DOMAIN_FACE, false);
-  if (face_hide.is_single() && face_hide.get_internal_single()) {
+  if (face_hide.is_single() && !face_hide.get_internal_single()) {
     component.attribute_try_delete(".vert_hide");
     component.attribute_try_delete(".edge_hide");
     return;
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index dea6a9a0404..8345f493f46 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -3155,6 +3155,10 @@ bool *BKE_pbvh_get_vert_hide_for_write(PBVH *pbvh)
   if (pbvh->vert_hide) {
     return pbvh->vert_hide;
   }
+  pbvh->vert_hide = CustomData_get_layer_named(&pbvh->mesh->vdata, CD_PROP_BOOL, ".vert_hide");
+  if (pbvh->vert_hide) {
+    return pbvh->vert_hide;
+  }
   pbvh->vert_hide = (bool *)CustomData_add_layer_named(
       &pbvh->mesh->vdata, CD_PROP_BOOL, CD_CALLOC, NULL, pbvh->mesh->totvert, ".vert_hide");
   return pbvh->vert_hide;



More information about the Bf-blender-cvs mailing list