[Bf-blender-cvs] [b5794d79567] refactor-mesh-remove-pointers: Start of removing access to mesh pointers
Hans Goudey
noreply at git.blender.org
Sun Jul 17 18:07:45 CEST 2022
Commit: b5794d795679bb4d734cb26c8e3be57922ce7855
Author: Hans Goudey
Date: Wed Jul 13 14:29:43 2022 -0500
Branches: refactor-mesh-remove-pointers
https://developer.blender.org/rBb5794d795679bb4d734cb26c8e3be57922ce7855
Start of removing access to mesh pointers
===================================================================
M source/blender/blenkernel/BKE_mesh.h
M source/blender/blenkernel/BKE_mesh_sample.hh
M source/blender/blenkernel/intern/DerivedMesh.cc
M source/blender/blenkernel/intern/bvhutils.cc
M source/blender/blenkernel/intern/cloth.c
M source/blender/blenkernel/intern/constraint.c
M source/blender/blenkernel/intern/crazyspace.c
M source/blender/blenkernel/intern/data_transfer.c
M source/blender/blenkernel/intern/dynamicpaint.c
M source/blender/blenkernel/intern/effect.c
M source/blender/blenkernel/intern/fluid.c
M source/blender/blenkernel/intern/gpencil_geom.cc
M source/blender/blenkernel/intern/key.c
M source/blender/blenkernel/intern/mesh.cc
M source/blender/blenkernel/intern/mesh_boolean_convert.cc
M source/blender/blenkernel/intern/mesh_convert.cc
M source/blender/blenkernel/intern/mesh_evaluate.cc
M source/blender/blenkernel/intern/mesh_fair.cc
M source/blender/blenkernel/intern/mesh_iterators.c
M source/blender/blenkernel/intern/mesh_merge.c
M source/blender/blenkernel/intern/mesh_normals.cc
M source/blender/blenkernel/intern/mesh_remap.c
M source/blender/blenkernel/intern/mesh_sample.cc
M source/blender/blenkernel/intern/mesh_tangent.c
M source/blender/blenkernel/intern/mesh_validate.cc
M source/blender/editors/object/object_modifier.cc
M source/blender/editors/object/object_remesh.cc
M source/blender/editors/object/object_shapekey.c
M source/blender/editors/object/object_vgroup.c
M source/blender/editors/sculpt_paint/curves_sculpt_add.cc
M source/blender/editors/sculpt_paint/curves_sculpt_slide.cc
M source/blender/editors/sculpt_paint/sculpt_dyntopo.c
M source/blender/geometry/intern/add_curves_on_mesh.cc
M source/blender/makesdna/DNA_mesh_types.h
M source/blender/modifiers/intern/MOD_remesh.c
M source/blender/modifiers/intern/MOD_surfacedeform.c
M source/blender/modifiers/intern/MOD_wave.c
M source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
M source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
M source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
M source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc
M source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
M source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_angle.cc
M source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_vertices.cc
M source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_area.cc
M source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_is_planar.cc
M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
M source/blender/nodes/geometry/nodes/node_geo_set_position.cc
M source/blender/nodes/geometry/nodes/node_geo_uv_pack_islands.cc
M source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc
M source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc
M source/blender/python/mathutils/mathutils_bvhtree.c
M source/blender/render/intern/bake.c
M source/blender/render/intern/multires_bake.c
M source/blender/render/intern/texture_margin.cc
M source/blender/render/intern/texture_pointdensity.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 731c9872aae..2e01c6db9a6 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -6,10 +6,16 @@
* \ingroup bke
*/
-#include "BKE_mesh_types.h"
#include "BLI_compiler_attrs.h"
+#include "BLI_compiler_compat.h"
#include "BLI_utildefines.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BKE_customdata.h"
+#include "BKE_mesh_types.h"
+
struct BLI_Stack;
struct BMesh;
struct BMeshCreateParams;
@@ -1024,6 +1030,92 @@ char *BKE_mesh_debug_info(const struct Mesh *me)
void BKE_mesh_debug_print(const struct Mesh *me) ATTR_NONNULL(1);
#endif
+BLI_INLINE const MVert *BKE_mesh_vertices(const Mesh *mesh)
+{
+ return (const MVert *)CustomData_get_layer(&mesh->vdata, CD_MVERT);
+}
+BLI_INLINE MVert *BKE_mesh_vertices_for_write(Mesh *mesh)
+{
+ CustomData_duplicate_referenced_layer(&mesh->vdata, CD_MVERT, mesh->totvert);
+ return (MVert *)CustomData_get_layer(&mesh->vdata, CD_MVERT);
+}
+
+BLI_INLINE const MEdge *BKE_mesh_edges(const Mesh *mesh)
+{
+ return (const MEdge *)CustomData_get_layer(&mesh->edata, CD_MEDGE);
+}
+BLI_INLINE MEdge *BKE_mesh_edges_for_write(Mesh *mesh)
+{
+ CustomData_duplicate_referenced_layer(&mesh->edata, CD_MEDGE, mesh->totedge);
+ return (MEdge *)CustomData_get_layer(&mesh->edata, CD_MEDGE);
+}
+
+BLI_INLINE const MPoly *BKE_mesh_polygons(const Mesh *mesh)
+{
+ return (const MPoly *)CustomData_get_layer(&mesh->vdata, CD_MPOLY);
+}
+BLI_INLINE MPoly *BKE_mesh_polygons_for_write(Mesh *mesh)
+{
+ CustomData_duplicate_referenced_layer(&mesh->pdata, CD_MPOLY, mesh->totpoly);
+ return (MPoly *)CustomData_get_layer(&mesh->pdata, CD_MPOLY);
+}
+
+BLI_INLINE const MLoop *BKE_mesh_loops(const Mesh *mesh)
+{
+ return (const MLoop *)CustomData_get_layer(&mesh->vdata, CD_MLOOP);
+}
+BLI_INLINE MLoop *BKE_mesh_loops_for_write(Mesh *mesh)
+{
+ CustomData_duplicate_referenced_layer(&mesh->ldata, CD_MLOOP, mesh->totloop);
+ return (MLoop *)CustomData_get_layer(&mesh->ldata, CD_MLOOP);
+}
+
#ifdef __cplusplus
}
#endif
+
+#ifdef __cplusplus
+
+# include "BLI_span.hh"
+
+namespace blender::bke {
+
+inline Span<MVert> mesh_vertices(const Mesh &mesh)
+{
+ return {BKE_mesh_vertices(&mesh), mesh.totvert};
+}
+inline MutableSpan<MVert> mesh_vertices_for_write(Mesh &mesh)
+{
+ return {BKE_mesh_vertices_for_write(&mesh), mesh.totvert};
+}
+
+inline Span<MEdge> mesh_edges(const Mesh &mesh)
+{
+ return {BKE_mesh_edges(&mesh), mesh.totedge};
+}
+inline MutableSpan<MEdge> mesh_edges_for_write(Mesh &mesh)
+{
+ return {BKE_mesh_edges_for_write(&mesh), mesh.totedge};
+}
+
+inline Span<MPoly> mesh_polygons(const Mesh &mesh)
+{
+ return {BKE_mesh_polygons(&mesh), mesh.totpoly};
+}
+inline MutableSpan<MPoly> mesh_polygons_for_write(Mesh &mesh)
+{
+ return {BKE_mesh_polygons_for_write(&mesh), mesh.totpoly};
+}
+
+inline Span<MLoop> mesh_loops(const Mesh &mesh)
+{
+ return {BKE_mesh_loops(&mesh), mesh.totloop};
+}
+inline MutableSpan<MLoop> mesh_loops_for_write(Mesh &mesh)
+{
+ return {BKE_mesh_loops_for_write(&mesh), mesh.totloop};
+}
+
+} // namespace blender::bke
+
+#endif
diff --git a/source/blender/blenkernel/BKE_mesh_sample.hh b/source/blender/blenkernel/BKE_mesh_sample.hh
index 356709d8942..50d24917d50 100644
--- a/source/blender/blenkernel/BKE_mesh_sample.hh
+++ b/source/blender/blenkernel/BKE_mesh_sample.hh
@@ -133,7 +133,8 @@ int sample_surface_points_projected(
Vector<int> &r_looptri_indices,
Vector<float3> &r_positions);
-float3 compute_bary_coord_in_triangle(const Mesh &mesh,
+float3 compute_bary_coord_in_triangle(Span<MVert> vertices,
+ Span<MLoop> loops,
const MLoopTri &looptri,
const float3 &position);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc
index c2ea01bcadf..c37dcb697c9 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.cc
+++ b/source/blender/blenkernel/intern/DerivedMesh.cc
@@ -68,6 +68,8 @@
using blender::float3;
using blender::IndexRange;
+using blender::Span;
+using blender::VArray;
/* very slow! enable for testing only! */
//#define USE_MODIFIER_VALIDATE
@@ -822,18 +824,14 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
mesh_final = BKE_mesh_copy_for_eval(mesh_input, true);
ASSERT_IS_VALID_MESH(mesh_final);
}
- float3 *rest_positions = static_cast<float3 *>(CustomData_add_layer_named(&mesh_final->vdata,
- CD_PROP_FLOAT3,
- CD_DEFAULT,
- nullptr,
- mesh_final->totvert,
- "rest_position"));
- blender::threading::parallel_for(
- IndexRange(mesh_final->totvert), 1024, [&](const IndexRange range) {
- for (const int i : range) {
- rest_positions[i] = mesh_final->mvert[i].co;
- }
- });
+ blender::bke::MutableAttributeAccessor attributes = blender::bke::mesh_attributes_for_write(
+ *mesh_final);
+ blender::bke::SpanAttributeWriter rest_positions =
+ attributes.lookup_or_add_for_write_only_span<float3>("rest_position", ATTR_DOMAIN_POINT);
+ VArray<float3> positions = attributes.lookup_or_default<float3>(
+ "position", ATTR_DOMAIN_POINT, float3(0));
+ positions.materialize(rest_positions.span);
+ rest_positions.finish();
}
/* Apply all leading deform modifiers. */
@@ -1994,9 +1992,9 @@ void mesh_get_mapped_verts_coords(Mesh *me_eval, float (*r_cos)[3], const int to
MEM_freeN(userData.vertex_visit);
}
else {
- MVert *mv = me_eval->mvert;
- for (int i = 0; i < totcos; i++, mv++) {
- copy_v3_v3(r_cos[i], mv->co);
+ const Span<MVert> vertices = blender::bke::mesh_vertices(*me_eval);
+ for (int i = 0; i < totcos; i++) {
+ copy_v3_v3(r_cos[i], vertices[i].co);
}
}
}
@@ -2009,9 +2007,11 @@ static void mesh_init_origspace(Mesh *mesh)
CD_ORIGSPACE_MLOOP);
const int numpoly = mesh->totpoly;
// const int numloop = mesh->totloop;
- MVert *mv = mesh->mvert;
- MLoop *ml = mesh->mloop;
- MPoly *mp = mesh->mpoly;
+ const Span<MVert> vertices = blender::bke::mesh_vertices(*mesh);
+ const Span<MPoly> polygons = blender::bke::mesh_polygons(*mesh);
+ const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+
+ const MPoly *mp = polygons.data();
int i, j, k;
blender::Vector<blender::float2, 64> vcos_2d;
@@ -2025,19 +2025,19 @@ static void mesh_init_origspace(Mesh *mesh)
}
}
else {
- MLoop *l = &ml[mp->loopstart];
+ const MLoop *l = &loops[mp->loopstart];
float p_nor[3], co[3];
float mat[3][3];
float min[2] = {FLT_MAX, FLT_MAX}, max[2] = {-FLT_MAX, -FLT_MAX};
float translate[2], scale[2];
- BKE_mesh_calc_poly_normal(mp, l, mv, p_nor);
+ BKE_mesh_calc_poly_normal(mp, l, vertices.data(), p_nor);
axis_dominant_v3_to_m3(mat, p_nor);
vcos_2d.resize(mp->totloop);
for (j = 0; j < mp->totloop; j++, l++) {
- mul_v3_m3v3(co, mat, mv[l->v].co);
+ mul_v3_m3v3(co, mat, vertices[l->v].co);
copy_v2_v2(vcos_2d[j], co);
for (k = 0; k < 2; k++) {
diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc
index 35c2039634a..da52a967e94 100644
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@ -15,6 +15,7 @@
#include "BLI_linklist.h"
#include "BLI_math.h"
+#include "BLI_span.hh"
#include "BLI_task.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
@@ -26,6 +27,8 @@
#include "MEM_guardedalloc.h"
+using blender::Span;
+
/* -------------------------------------------------------------------- */
/** \name BVHCache
* \{ */
@@ -1223,11 +1226,12 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
looptri = BKE_mesh_runtime_looptri_ensure(mesh);
looptri_len = BKE_mesh_runtime_looptri_len(mesh);
}
+ Span<MVert> vertices = blender::bke::mesh_vertices(*mesh);
/* Setup BVHTreeFromMesh */
bvhtree_from_mesh_setup_data(nullptr,
bvh_cache_type,
- mesh->mvert,
+ vertices.data(),
mesh->medge,
mesh->mface,
mesh->mloop,
@@ -1254,25 +1258,31 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
switch (bvh_cache_type) {
case BVHTREE_FROM_LOOSEVERTS:
mask = loose_verts_map_get(
- mesh->medge, mesh->totedge, mesh->mvert, mesh->totvert, &mask_bits_act_len);
+ mesh->medge, mesh->totedge, vertices.data(), mesh->totvert, &mask_bits_act_len);
ATTR_FALLTHROUGH;
case BVHTREE_FROM_VERTS:
data->tree = bvhtree_from_mesh_verts_create_tree(
- 0.0f, tree_type, 6, mesh->mvert, mesh->totvert, mask, mask_bits_act_len);
+ 0.0f, tree_type, 6, vertices.data(), mesh->totvert, mask, mask_bits_act_len);
break;
case BVHTREE_FROM_LOOSEEDGES:
mask = loose_edges_map_get(mesh->medge, mesh->totedge, &mask_bits_act_len);
ATTR_FALLTHROUGH;
case BVHTREE_FROM_EDGES:
- data->tree = bvhtree_from_mesh_edges_create_tree(
- mesh->mvert, mesh->medge, mesh->totedge, mask, mask_bits_act_len, 0.0f, tree_type, 6);
+ data->tree = bvhtree_from_mesh_edges_create_tree(vertices.data(),
+ mesh->medge,
+ mesh->totedge,
+ mask,
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list