[Bf-blender-cvs] [66a66a86988] refactor-mesh-remove-pointers: Fix geometry nodes tests
Hans Goudey
noreply at git.blender.org
Sun Jul 31 22:32:53 CEST 2022
Commit: 66a66a86988dc9930276ef4d5d01434e3c9cf12d
Author: Hans Goudey
Date: Sun Jul 31 15:32:45 2022 -0500
Branches: refactor-mesh-remove-pointers
https://developer.blender.org/rB66a66a86988dc9930276ef4d5d01434e3c9cf12d
Fix geometry nodes tests
===================================================================
M source/blender/blenkernel/intern/mesh.cc
M source/blender/blenkernel/intern/mesh_boolean_convert.cc
M source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index edf16adeb2f..082786269ce 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -279,8 +279,14 @@ static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
Mesh *mesh = (Mesh *)id;
BLO_read_pointer_array(reader, (void **)&mesh->mat);
+ /* Deprecated pointers to custom data layers are read here for backward compatibility
+ * with files where these were owning pointers rather than a view into custom data. */
+ BLO_read_data_address(reader, &mesh->mvert);
+ BLO_read_data_address(reader, &mesh->medge);
+ BLO_read_data_address(reader, &mesh->mface);
+ BLO_read_data_address(reader, &mesh->mtface);
+ BLO_read_data_address(reader, &mesh->dvert);
BLO_read_data_address(reader, &mesh->tface);
- /* Read mcol for compatibility with old files. */
BLO_read_data_address(reader, &mesh->mcol);
BLO_read_data_address(reader, &mesh->mselect);
@@ -291,8 +297,7 @@ static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
/* Normally BKE_defvert_blend_read should be called in CustomData_blend_read,
* but for backwards compatibility in do_versions to work we do it here. */
- // TODO: Reenable.
- // BKE_defvert_blend_read(reader, mesh->totvert, mesh->dvert);
+ BKE_defvert_blend_read(reader, mesh->totvert, mesh->dvert);
BLO_read_list(reader, &mesh->vertex_group_names);
CustomData_blend_read(reader, &mesh->vdata, mesh->totvert);
diff --git a/source/blender/blenkernel/intern/mesh_boolean_convert.cc b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
index 31e2c66e53a..7878d6d3835 100644
--- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
@@ -187,16 +187,17 @@ const MVert *MeshesToIMeshInfo::input_mvert_for_orig_index(int orig_index,
int orig_mesh_index = input_mesh_for_imesh_vert(orig_index);
BLI_assert(0 <= orig_mesh_index && orig_mesh_index < meshes.size());
const Mesh *me = meshes[orig_mesh_index];
+ const Span<MVert> vertices = bke::mesh_vertices(*me);
int index_in_mesh = orig_index - mesh_vert_offset[orig_mesh_index];
BLI_assert(0 <= index_in_mesh && index_in_mesh < me->totvert);
- const Span<MVert> vertices = bke::mesh_vertices(*me);
+ const MVert *mv = &vertices[index_in_mesh];
if (r_orig_mesh) {
*r_orig_mesh = me;
}
if (r_index_in_orig_mesh) {
*r_index_in_orig_mesh = index_in_mesh;
}
- return &vertices[index_in_mesh];
+ return mv;
}
/* Similarly for edges. */
@@ -486,7 +487,7 @@ static int fill_orig_loops(const Face *f,
if (f->size() != orig_mplen) {
return 0;
}
- BLI_assert(r_orig_loops.size() == orig_loops.size());
+ BLI_assert(r_orig_loops.size() == orig_mplen);
/* We'll look for the case where the first vertex in f has an original vertex
* that is the same as one in orig_me (after correcting for offset in mim meshes).
* Then see that loop and any subsequent ones have the same start and end vertex.
@@ -506,7 +507,7 @@ static int fill_orig_loops(const Face *f,
BLI_assert(0 <= first_orig_v_in_orig_me && first_orig_v_in_orig_me < orig_me->totvert);
/* Assume all vertices in an mpoly are unique. */
int offset = -1;
- for (const int i : orig_loops.index_range()) {
+ for (int i = 0; i < orig_mplen; ++i) {
int loop_i = i + orig_mp->loopstart;
if (orig_loops[loop_i].v == first_orig_v_in_orig_me) {
offset = i;
@@ -558,13 +559,14 @@ static void get_poly2d_cos(const Mesh *me,
{
const Span<MVert> vertices = bke::mesh_vertices(*me);
const Span<MLoop> loops = bke::mesh_loops(*me);
+ const Span<MLoop> poly_loops = loops.slice(mp->loopstart, mp->totloop);
/* Project coordinates to 2d in cos_2d, using normal as projection axis. */
float axis_dominant[3];
BKE_mesh_calc_poly_normal(mp, &loops[mp->loopstart], vertices.data(), axis_dominant);
axis_dominant_v3_to_m3(r_axis_mat, axis_dominant);
- for (const int i : loops.index_range()) {
- float3 co = vertices[loops[i].v].co;
+ for (const int i : poly_loops.index_range()) {
+ float3 co = vertices[poly_loops[i].v].co;
co = trans_mat * co;
mul_v2_m3v3(cos_2d[i], r_axis_mat, co);
}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
index b616d53c36b..6a9ca0a4b11 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
@@ -441,9 +441,9 @@ static void extrude_mesh_edges(MeshComponent &component,
new_poly_range.size(),
new_loop_range.size());
- MutableSpan<MVert> new_verts = bke::mesh_vertices_for_write(mesh).slice(new_vert_range);
- MutableSpan<MEdge> connect_edges = bke::mesh_edges_for_write(mesh).slice(connect_edge_range);
- MutableSpan<MEdge> duplicate_edges = bke::mesh_edges_for_write(mesh).slice(duplicate_edge_range);
+ MutableSpan<MEdge> edges = bke::mesh_edges_for_write(mesh);
+ MutableSpan<MEdge> connect_edges = edges.slice(connect_edge_range);
+ MutableSpan<MEdge> duplicate_edges = edges.slice(duplicate_edge_range);
MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(mesh);
MutableSpan<MPoly> new_polys = polys.slice(new_poly_range);
MutableSpan<MLoop> loops = bke::mesh_loops_for_write(mesh);
@@ -454,7 +454,7 @@ static void extrude_mesh_edges(MeshComponent &component,
}
for (const int i : duplicate_edges.index_range()) {
- const MEdge &orig_edge = orig_edges[edge_selection[i]];
+ const MEdge &orig_edge = edges[edge_selection[i]];
const int i_new_vert_1 = new_vert_indices.index_of(orig_edge.v1);
const int i_new_vert_2 = new_vert_indices.index_of(orig_edge.v2);
duplicate_edges[i] = new_edge(new_vert_range[i_new_vert_1], new_vert_range[i_new_vert_2]);
@@ -609,6 +609,7 @@ static void extrude_mesh_edges(MeshComponent &component,
return true;
});
+ MutableSpan<MVert> new_verts = bke::mesh_vertices_for_write(mesh).slice(new_vert_range);
if (edge_offsets.is_single()) {
const float3 offset = edge_offsets.get_internal_single();
threading::parallel_for(new_verts.index_range(), 1024, [&](const IndexRange range) {
More information about the Bf-blender-cvs
mailing list