[Bf-blender-cvs] [794819a45d7] refactor-mesh-hide-generic: Fixes, cleanup, renaming

Hans Goudey noreply at git.blender.org
Fri Jul 8 22:31:28 CEST 2022


Commit: 794819a45d74dcc071ee12a72e8339799e8f7619
Author: Hans Goudey
Date:   Fri Jul 8 15:31:18 2022 -0500
Branches: refactor-mesh-hide-generic
https://developer.blender.org/rB794819a45d74dcc071ee12a72e8339799e8f7619

Fixes, cleanup, renaming

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

M	source/blender/blenkernel/BKE_mesh_legacy_convert.h
M	source/blender/blenkernel/BKE_mesh_mapping.h
M	source/blender/blenkernel/BKE_paint.h
M	source/blender/blenkernel/BKE_pbvh.h
M	source/blender/blenkernel/intern/bvhutils.cc
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_evaluate.cc
M	source/blender/blenkernel/intern/mesh_legacy_convert.cc
M	source/blender/blenkernel/intern/mesh_mapping.c
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/pbvh_intern.h
M	source/blender/bmesh/intern/bmesh_mesh_convert.cc
M	source/blender/draw/intern/draw_cache_extract_mesh_render_data.cc
M	source/blender/draw/intern/draw_cache_impl_subdivision.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh.hh
M	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_edituv.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_fdots.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_adjacency.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_lines_paint_mask.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_points.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_ibo_tris.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_lnor.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_pos_nor.cc
M	source/blender/editors/include/ED_mesh.h
M	source/blender/editors/mesh/editface.cc
M	source/blender/editors/mesh/editmesh_undo.c
M	source/blender/editors/mesh/meshtools.cc
M	source/blender/editors/object/object_vgroup.c
M	source/blender/editors/sculpt_paint/paint_hide.c
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_dyntopo.c
M	source/blender/editors/sculpt_paint/sculpt_undo.c
M	source/blender/editors/space_view3d/view3d_iterators.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/gpu/GPU_buffers.h
M	source/blender/gpu/intern/gpu_buffers.c
M	source/blender/gpu/intern/gpu_shader_builder_stubs.cc
M	source/blender/makesrna/intern/rna_mesh.c
M	source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc

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

diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
index 909fd0e0dea..6b625e8a6b5 100644
--- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h
+++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
@@ -17,6 +17,8 @@ struct CustomData;
 struct Mesh;
 struct MFace;
 
+void BKE_mesh_legacy_convert_hide_layers_to_flags(struct Mesh *mesh);
+
 /**
  * Recreate #MFace Tessellation.
  *
diff --git a/source/blender/blenkernel/BKE_mesh_mapping.h b/source/blender/blenkernel/BKE_mesh_mapping.h
index e8e6ce19556..b78afa40203 100644
--- a/source/blender/blenkernel/BKE_mesh_mapping.h
+++ b/source/blender/blenkernel/BKE_mesh_mapping.h
@@ -79,7 +79,7 @@ typedef struct MeshElemMap {
 
 /* mapping */
 UvVertMap *BKE_mesh_uv_vert_map_create(const struct MPoly *mpoly,
-                                       const bool *face_hide,
+                                       const bool *hide_face,
                                        const struct MLoop *mloop,
                                        const struct MLoopUV *mloopuv,
                                        unsigned int totpoly,
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 34691bcc5f7..c706a86c6c8 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -207,7 +207,7 @@ bool BKE_paint_select_elem_test(struct Object *ob);
  * Returns non-zero if any of the face's vertices are hidden, zero otherwise.
  */
 bool paint_is_face_hidden(const struct MLoopTri *lt,
-                          const bool *vert_hide,
+                          const bool *hide_vert,
                           const struct MLoop *mloop);
 /**
  * Returns non-zero if any of the corners of the grid
diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index e625ec25381..70c64744db0 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -413,7 +413,7 @@ typedef struct PBVHVertexIter {
   /* mesh */
   struct MVert *mverts;
   float (*vert_normals)[3];
-  const bool *vert_hide;
+  const bool *hide_vert;
   int totvert;
   const int *vert_indices;
   float *vmask;
@@ -473,7 +473,7 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m
         else if (vi.mverts) { \
           vi.mvert = &vi.mverts[vi.vert_indices[vi.gx]]; \
           if (vi.respect_hide) { \
-            vi.visible = !(vi.vert_hide && vi.vert_hide[vi.vert_indices[vi.gx]]); \
+            vi.visible = !(vi.hide_vert && vi.hide_vert[vi.vert_indices[vi.gx]]); \
             if (mode == PBVH_ITER_UNIQUE && !vi.visible) { \
               continue; \
             } \
diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc
index 32db942784b..e032274816b 100644
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@ -19,10 +19,9 @@
 #include "BLI_threads.h"
 #include "BLI_utildefines.h"
 
+#include "BKE_attribute.hh"
 #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"
 
@@ -1184,11 +1183,11 @@ static BLI_bitmap *loose_edges_map_get(const MEdge *medge,
 }
 
 static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
-                                             const VArray<bool> &face_hide,
+                                             const VArray<bool> &hide_face,
                                              const int looptri_len,
                                              int *r_looptri_active_len)
 {
-  if (face_hide.is_single() && !face_hide.get_internal_single()) {
+  if (hide_face.is_single() && !hide_face.get_internal_single()) {
     return nullptr;
   }
   BLI_bitmap *looptri_mask = BLI_BITMAP_NEW(looptri_len, __func__);
@@ -1198,7 +1197,7 @@ static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
   int i_poly = 0;
   while (looptri_iter != looptri_len) {
     int mp_totlooptri = mpoly[i_poly].totloop - 2;
-    if (face_hide[i_poly]) {
+    if (hide_face[i_poly]) {
       looptri_iter += mp_totlooptri;
     }
     else {
@@ -1283,12 +1282,10 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
       break;
 
     case BVHTREE_FROM_LOOPTRI_NO_HIDDEN: {
-      MeshComponent component;
-      component.replace(const_cast<Mesh *>(mesh), GeometryOwnershipType::ReadOnly);
-
+      blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*mesh);
       mask = looptri_no_hidden_map_get(
           mesh->mpoly,
-          component.attribute_get_for_read<bool>(".hide_face", ATTR_DOMAIN_FACE, false),
+          attributes.lookup_or_default(".hide_face", ATTR_DOMAIN_FACE, false),
           looptri_len,
           &mask_bits_act_len);
       ATTR_FALLTHROUGH;
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 706aa349dfe..debf9988d89 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -37,10 +37,10 @@
 #include "BLT_translation.h"
 
 #include "BKE_anim_data.h"
+#include "BKE_attribute.hh"
 #include "BKE_bpath.h"
 #include "BKE_deform.h"
 #include "BKE_editmesh.h"
-#include "BKE_geometry_set.hh"
 #include "BKE_global.h"
 #include "BKE_idtype.h"
 #include "BKE_key.h"
@@ -210,33 +210,6 @@ static void mesh_foreach_path(ID *id, BPathForeachPathData *bpath_data)
   }
 }
 
-static void prepare_legacy_hide_data_for_writing(Mesh &mesh)
-{
-  MeshComponent component;
-  component.replace(&mesh, GeometryOwnershipType::ReadOnly);
-
-  MutableSpan<MVert> verts(mesh.mvert, mesh.totvert);
-  const VArray<bool> vert_hide = component.attribute_get_for_read<bool>(
-      ".hide_vert", ATTR_DOMAIN_POINT, false);
-  for (const int i : verts.index_range()) {
-    SET_FLAG_FROM_TEST(verts[i].flag, vert_hide[i], ME_HIDE);
-  }
-
-  MutableSpan<MEdge> edges(mesh.medge, mesh.totedge);
-  const VArray<bool> edge_hide = component.attribute_get_for_read<bool>(
-      ".hide_edge", ATTR_DOMAIN_EDGE, false);
-  for (const int i : edges.index_range()) {
-    SET_FLAG_FROM_TEST(edges[i].flag, edge_hide[i], ME_HIDE);
-  }
-
-  MutableSpan<MPoly> polys(mesh.mpoly, mesh.totpoly);
-  const VArray<bool> poly_hide = component.attribute_get_for_read<bool>(
-      ".hide_face", ATTR_DOMAIN_FACE, false);
-  for (const int i : polys.index_range()) {
-    SET_FLAG_FROM_TEST(polys[i].flag, poly_hide[i], ME_HIDE);
-  }
-}
-
 static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address)
 {
   Mesh *mesh = (Mesh *)id;
@@ -279,7 +252,7 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address
   }
 
   if (BLO_write_use_legacy_mesh_format(writer)) {
-    prepare_legacy_hide_data_for_writing(*mesh);
+    BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
   }
 
   BLO_write_id_struct(writer, Mesh, id_address, &mesh->id);
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.cc b/source/blender/blenkernel/intern/mesh_evaluate.cc
index 7c7c4282ecc..5f55213e259 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.cc
+++ b/source/blender/blenkernel/intern/mesh_evaluate.cc
@@ -22,18 +22,17 @@
 #include "BLI_math.h"
 #include "BLI_span.hh"
 #include "BLI_utildefines.h"
+#include "BLI_virtual_array.hh"
 
 #include "BKE_customdata.h"
 
-#include "BKE_geometry_set.hh"
+#include "BKE_attribute.hh"
 #include "BKE_mesh.h"
 #include "BKE_multires.h"
 
-using blender::IndexRange;
 using blender::MutableSpan;
 using blender::Span;
 using blender::VArray;
-using blender::bke::OutputAttribute_Typed;
 
 /* -------------------------------------------------------------------- */
 /** \name Polygon Calculations
@@ -737,54 +736,87 @@ void BKE_mesh_polygons_flip(MPoly *mpoly, MLoop *mloop, CustomData *ldata, int t
 
 void BKE_mesh_flush_hidden_from_verts(Mesh *me)
 {
-  MeshComponent component;
-  component.replace(me, GeometryOwnershipType::Editable);
+  using namespace blender;
+  using namespace blender::bke;
+  MutableAttributeAccessor attributes = mesh_attributes_for_write(*me);
 
-  const VArray<bool> vert_hide = component.attribute_get_for_read<bool>(
+  const VArray<bool> hide_vert = attributes.lookup_or_default<bool>(
       ".hide_vert", ATTR_DOMAIN_POINT, false);
-  if (vert_hide.is_single() && !vert_hide.get_internal_single()) {
-    component.attribute_try_delete(".hide_edge");
-    component.attribute_try_delete(".hide_face");
+  if (hide_vert.is_single() && !hide_vert.get_internal_single()) {
+    attributes.remove(".hide_edge");
+    attributes.remove(".hide_face");
     return;
   }
+  const VArraySpan<bool> hide_vert_span{hide_vert};
+  const Span<MEdge> edges(me->medge, me->totedge);
+  const Span<MPoly> polys(me->mpoly, me->totpoly);
+  const Span<MLoop> loops(me->mloop, me->totloop);
 
-  OutputAttribute_Typed<bool> edge_hide = component.attribute_try_get_for_output_only<bool>(
+  /* Hide edges when both of their vertices are hidden. */
+  SpanAttributeWriter<bool> hide_edge = attributes.lookup_or_add_for_write_only_span<bool>(
       ".hide_edge", ATTR_DOMAIN_EDGE);
-  component.attribute_try_adapt_domain(vert_hide, ATTR_DOMAIN_POINT, ATTR_DOMAIN_EDGE)
-      .materialize(edge_hide.as_span());
-  edge_hide.save();
+  for (const int i : edges.index_range()) {
+    const MEdge &edge = edges[i];
+    hide_edge.span[i] = hide_vert_span[edge.v1] && hide_vert_span[edge.v2];
+  }
+  hide_edge.finish();
 
-  OutputAttribute_Typed<bool> face_hide = component.attribute_try_get_for_output_only<bool>(
+  /* Hide faces when any of their vertices are hidden. */
+  SpanAttributeWriter<bool> hide_face = attributes.lookup_or_add_for_write_only_span<bool>(
       ".hide_face", ATTR_DOMAIN_FACE);
-  component.attribute_try_adapt_domain(vert_hide, ATTR_DOMAIN_POINT, ATTR_DOMAIN_FACE)
-      .materialize(face_hide.as_span());
-  face_hide.save();
+  for (const int i : polys.index_range()) {
+    const MPoly &poly = polys[i];
+    const Span<MLoop> loops = loops.slice(poly.loopstart, poly.totloop);
+    hide_face.span[i] = std::any_of(
+        loops.begin(

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list