[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