[Bf-blender-cvs] [a0991a1a9f1] refactor-mesh-corners-generic: All compile errors fixed, basic viewport works

Hans Goudey noreply at git.blender.org
Wed Dec 7 01:15:28 CET 2022


Commit: a0991a1a9f17a13409b61f53e48eead9ee35ff30
Author: Hans Goudey
Date:   Tue Dec 6 18:15:16 2022 -0600
Branches: refactor-mesh-corners-generic
https://developer.blender.org/rBa0991a1a9f17a13409b61f53e48eead9ee35ff30

All compile errors fixed, basic viewport works

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

M	intern/cycles/blender/mesh.cpp
M	source/blender/blenkernel/BKE_mesh.h
M	source/blender/blenkernel/BKE_mesh_legacy_convert.h
M	source/blender/blenkernel/intern/data_transfer.cc
M	source/blender/blenkernel/intern/key.cc
M	source/blender/blenkernel/intern/mball_tessellate.cc
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_iterators.cc
M	source/blender/blenkernel/intern/mesh_legacy_convert.cc
M	source/blender/blenkernel/intern/mesh_mapping.cc
M	source/blender/blenkernel/intern/mesh_merge.c
M	source/blender/blenkernel/intern/mesh_mirror.cc
M	source/blender/blenkernel/intern/mesh_normals.cc
M	source/blender/blenkernel/intern/mesh_remesh_voxel.cc
M	source/blender/blenkernel/intern/mesh_tessellate.cc
M	source/blender/blenkernel/intern/mesh_validate.cc
M	source/blender/blenkernel/intern/multires_reshape_subdivide.c
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/subdiv_foreach.c
M	source/blender/blenloader/intern/versioning_290.c
M	source/blender/draw/DRW_pbvh.h
M	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
M	source/blender/editors/sculpt_paint/paint_vertex.cc
M	source/blender/editors/sculpt_paint/sculpt_expand.c
M	source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
M	source/blender/io/usd/intern/usd_writer_mesh.cc
M	source/blender/makesrna/intern/rna_mesh.c
M	source/blender/modifiers/intern/MOD_screw.c
M	source/blender/modifiers/intern/MOD_solidify_extrude.c
M	source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
M	source/blender/modifiers/intern/MOD_surfacedeform.c
M	source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
M	source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
M	source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
M	source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc
M	source/blender/python/mathutils/mathutils_bvhtree.c

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

diff --git a/intern/cycles/blender/mesh.cpp b/intern/cycles/blender/mesh.cpp
index 682c213a307..83304fe2c1c 100644
--- a/intern/cycles/blender/mesh.cpp
+++ b/intern/cycles/blender/mesh.cpp
@@ -820,6 +820,23 @@ static void attr_create_pointiness(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, b
   }
 }
 
+static std::optional<BL::IntAttribute> find_corner_vert_attribute(BL::Mesh b_mesh)
+{
+  for (BL::Attribute &b_attribute : b_mesh.attributes) {
+    if (b_attribute.domain() != BL::Attribute::domain_CORNER) {
+      continue;
+    }
+    if (b_attribute.data_type() != BL::Attribute::data_type_INT) {
+      continue;
+    }
+    if (b_attribute.name() != ".corner_vert") {
+      continue;
+    }
+    return BL::IntAttribute{b_attribute};
+  }
+  return std::nullopt;
+}
+
 /* The Random Per Island attribute is a random float associated with each
  * connected component (island) of the mesh. The attribute is computed by
  * first classifying the vertices into different sets using a Disjoint Set
@@ -866,11 +883,11 @@ static void attr_create_random_per_island(Scene *scene,
   else {
     if (polys_num != 0) {
       const MPoly *polys = static_cast<const MPoly *>(b_mesh.polygons[0].ptr.data);
-      const int *corner_verts = b_mesh.corner_verts[0].ptr.data;
+      std::optional<BL::IntAttribute> corner_verts = find_corner_vert_attribute(b_mesh);
       for (int i = 0; i < polys_num; i++) {
         const MPoly &b_poly = polys[i];
-        const int vert = corner_verts[b_poly.loopstart];
-        data[i] = hash_uint_to_float(vertices_sets.find(b_loop.v));
+        const int vert = corner_verts->data[b_poly.loopstart].value();
+        data[i] = hash_uint_to_float(vertices_sets.find(vert));
       }
     }
   }
@@ -1014,7 +1031,7 @@ static void create_mesh(Scene *scene,
   else {
     vector<int> vi;
 
-    const int *corner_verts = b_mesh.corner_verts[0].ptr.data;
+    std::optional<BL::IntAttribute> corner_verts = find_corner_vert_attribute(b_mesh);
 
     for (int i = 0; i < numfaces; i++) {
       const MPoly &b_poly = polys[i];
@@ -1025,7 +1042,7 @@ static void create_mesh(Scene *scene,
       vi.resize(n);
       for (int i = 0; i < n; i++) {
         /* NOTE: Autosmooth is already taken care about. */
-        vi[i] = corner_verts[b_poly.loopstart + i];
+        vi[i] = corner_verts->data[b_poly.loopstart + i].value();
       }
 
       /* create subd faces */
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index cf8c27d4c3f..68dfadec64f 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -1047,23 +1047,21 @@ BLI_INLINE MPoly *BKE_mesh_polys_for_write(Mesh *mesh)
 
 BLI_INLINE const int *BKE_mesh_corner_verts(const Mesh *mesh)
 {
-  return (const float(*)[3])CustomData_get_layer_named(
-      &mesh->ldata, CD_PROP_INT32, ".corner_vert");
+  return (const int *)CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32, ".corner_vert");
 }
 BLI_INLINE int *BKE_mesh_corner_verts_for_write(Mesh *mesh)
 {
-  return (float(*)[3])CustomData_duplicate_referenced_layer_named(
+  return (int *)CustomData_duplicate_referenced_layer_named(
       &mesh->ldata, CD_PROP_INT32, ".corner_vert", mesh->totloop);
 }
 
 BLI_INLINE const int *BKE_mesh_corner_edges(const Mesh *mesh)
 {
-  return (const float(*)[3])CustomData_get_layer_named(
-      &mesh->ldata, CD_PROP_INT32, ".corner_edge");
+  return (const int *)CustomData_get_layer_named(&mesh->ldata, CD_PROP_INT32, ".corner_edge");
 }
 BLI_INLINE int *BKE_mesh_corner_edges_for_write(Mesh *mesh)
 {
-  return (float(*)[3])CustomData_duplicate_referenced_layer_named(
+  return (int *)CustomData_duplicate_referenced_layer_named(
       &mesh->ldata, CD_PROP_INT32, ".corner_edge", mesh->totloop);
 }
 
@@ -1120,20 +1118,20 @@ inline blender::MutableSpan<MPoly> Mesh::polys_for_write()
 
 inline blender::Span<int> Mesh::corner_verts() const
 {
-  return {BKE_mesh_corner_verts(this), mesh->totloop};
+  return {BKE_mesh_corner_verts(this), this->totloop};
 }
 inline blender::MutableSpan<int> Mesh::corner_verts_for_write()
 {
-  return {BKE_mesh_corner_verts_for_write(this), mesh->totloop};
+  return {BKE_mesh_corner_verts_for_write(this), this->totloop};
 }
 
 inline blender::Span<int> Mesh::corner_edges() const
 {
-  return {BKE_mesh_corner_edges(this), mesh->totloop};
+  return {BKE_mesh_corner_edges(this), this->totloop};
 }
 inline blender::MutableSpan<int> Mesh::corner_edges_for_write()
 {
-  return {BKE_mesh_corner_edges_for_write(this), mesh->totloop};
+  return {BKE_mesh_corner_edges_for_write(this), this->totloop};
 }
 
 inline blender::Span<MDeformVert> Mesh::deform_verts() const
diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
index d33eba07767..b4b4778e397 100644
--- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h
+++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
@@ -101,10 +101,10 @@ struct MLoop *BKE_mesh_legacy_convert_corners_to_loops(
     blender::ResourceScope &temp_arrays_for_convert,
     blender::Vector<CustomDataLayer, 16> &loop_layers_to_write);
 
-void BKE_mesh_legacy_convert_loops_to_corners(Mesh *mesh);
-
 #endif
 
+void BKE_mesh_legacy_convert_loops_to_corners(struct Mesh *mesh);
+
 /**
  * Recreate #MFace Tessellation.
  *
diff --git a/source/blender/blenkernel/intern/data_transfer.cc b/source/blender/blenkernel/intern/data_transfer.cc
index edbb11c30c9..da645e82fad 100644
--- a/source/blender/blenkernel/intern/data_transfer.cc
+++ b/source/blender/blenkernel/intern/data_transfer.cc
@@ -1616,7 +1616,6 @@ bool BKE_object_data_transfer_ex(struct Depsgraph *depsgraph,
       const MPoly *polys_dst = BKE_mesh_polys(me_dst);
       const int num_polys_dst = me_dst->totpoly;
       const int *corner_verts_dst = BKE_mesh_corner_verts(me_dst);
-      const int *corner_edges_dst = BKE_mesh_corner_edges(me_dst);
       const int num_loops_dst = me_dst->totloop;
 
       if (!geom_map_init[PDATA]) {
diff --git a/source/blender/blenkernel/intern/key.cc b/source/blender/blenkernel/intern/key.cc
index 1dc52e370e5..ce20d03419d 100644
--- a/source/blender/blenkernel/intern/key.cc
+++ b/source/blender/blenkernel/intern/key.cc
@@ -2237,6 +2237,7 @@ void BKE_keyblock_mesh_calc_normals(const KeyBlock *kb,
   const MEdge *edges = BKE_mesh_edges(mesh);
   const MPoly *polys = BKE_mesh_polys(mesh);
   const int *corner_verts = BKE_mesh_corner_verts(mesh);
+  const int *corner_edges = BKE_mesh_corner_edges(mesh);
 
   const bool loop_normals_needed = r_loopnors != nullptr;
   const bool vert_normals_needed = r_vertnors != nullptr || loop_normals_needed;
@@ -2281,6 +2282,7 @@ void BKE_keyblock_mesh_calc_normals(const KeyBlock *kb,
                                 edges,
                                 mesh->totedge,
                                 corner_verts,
+                                corner_edges,
                                 r_loopnors,
                                 mesh->totloop,
                                 polys,
diff --git a/source/blender/blenkernel/intern/mball_tessellate.cc b/source/blender/blenkernel/intern/mball_tessellate.cc
index b8c9cc1eb7b..7b2517b65ec 100644
--- a/source/blender/blenkernel/intern/mball_tessellate.cc
+++ b/source/blender/blenkernel/intern/mball_tessellate.cc
@@ -1482,11 +1482,11 @@ Mesh *BKE_mball_polygonize(Depsgraph *depsgraph, Scene *scene, Object *ob)
     mpoly[i].totloop = count;
     mpoly[i].flag = ME_SMOOTH;
 
-    corner_verts[loop_offset] = uint32_t(indices[0]);
-    corner_verts[loop_offset + 1] = uint32_t(indices[1]);
-    corner_verts[loop_offset + 2] = uint32_t(indices[2]);
+    corner_verts[loop_offset] = indices[0];
+    corner_verts[loop_offset + 1] = indices[1];
+    corner_verts[loop_offset + 2] = indices[2];
     if (count == 4) {
-      corner_verts[loop_offset + 3] = uint32_t(indices[3]);
+      corner_verts[loop_offset + 3] = indices[3];
     }
 
     loop_offset += count;
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index ffed9d4b4c8..34b05a87b59 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -471,7 +471,7 @@ static const char *cmpcode_to_str(int code)
 
 /** Thresh is threshold for comparing vertices, UV's, vertex colors, weights, etc. */
 static int customdata_compare(
-    CustomData *c1, CustomData *c2, const int total_length, Mesh *m1, Mesh *m2, const float thresh)
+    CustomData *c1, CustomData *c2, const int total_length, Mesh *m1, const float thresh)
 {
   const float thresh_sq = thresh * thresh;
   CustomDataLayer *l1, *l2;
@@ -715,19 +715,19 @@ const char *BKE_mesh_cmp(Mesh *me1, Mesh *me2, float thresh)
     return "Number of loops don't match";
   }
 
-  if ((c = customdata_compare(&me1->vdata, &me2->vdata, me1->totvert, me1, me2, thresh))) {
+  if ((c = customdata_compare(&me1->vdata, &me2->vdata, me1->totvert, me1, thresh))) {
     return cmpcode_to_str(c);
   }
 
-  if ((c = customdata_compare(&me1->edata, &me2->edata, me1->totedge, me1, me2, thresh))) {
+  if ((c = customdata_compare(&me1->edata, &me2->edata, me1->totedge, me1, thresh))) {
     return cmpcode_to_str(c);
   }
 
-  if ((c = customdata_compare(&me1->ldata, &me2->ldata, me1->totloop, me1, me2, thresh))) {
+  if ((c = customdata_compare(&me1->ldata, &me2->ldata, me1->totloop, me1, thresh))) {
     return cmpcode_to_str(c);
   }
 
-  if ((c = customdata_compare(&me1->pdata, &me2->pdata, me1->totpoly, me1, me2, thresh))) {
+  if ((c = customdata_compare(&me1->pdata, &me2->pdata, me1->totpoly, me1, thresh))) {
     return cmpcode_to_str(c);
   }
 
@@ -1481,14 +1481,13 @@ void BKE_mesh_looptri_get_real_edges(const MEdge *edges,
     const int corner_1 = tri->tri[i];
     const int corner_2 = tri->tri[i_next];
     const int vert_1 = corner_verts[corner_1];
-    const int vert_2 = corner_verts[corner_1];
-    const int edge_1 = corner_edges[corner_1];
-    const int edge_2 = corner_edges[corner_1];
-    const MEdge *e = &edges[edge_1];
+    const int vert_2 = corner_verts[corner_2];
+    const int edge = corner_edges[corner_1];
+    const MEdge *e = &edges[edge];
 
     bool is_real = (vert_1 == e->

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list