[Bf-blender-cvs] [71e96d7714f] refactor-mesh-remove-pointers: Progress

Hans Goudey noreply at git.blender.org
Wed Jul 20 21:30:10 CEST 2022


Commit: 71e96d7714f4ef6da37b0c203f6a168cb610e9b0
Author: Hans Goudey
Date:   Wed Jul 20 13:33:20 2022 -0500
Branches: refactor-mesh-remove-pointers
https://developer.blender.org/rB71e96d7714f4ef6da37b0c203f6a168cb610e9b0

Progress

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

M	source/blender/blenkernel/intern/fluid.c
M	source/blender/blenkernel/intern/mesh_convert.cc

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

diff --git a/source/blender/blenkernel/intern/fluid.c b/source/blender/blenkernel/intern/fluid.c
index 478bc93ecdf..9a20bb46b2b 100644
--- a/source/blender/blenkernel/intern/fluid.c
+++ b/source/blender/blenkernel/intern/fluid.c
@@ -1033,7 +1033,6 @@ static void obstacles_from_mesh(Object *coll_ob,
 
     /* Transform mesh vertices to domain grid space for fast lookups.
      * This is valid because the mesh is copied above. */
-    float(*vert_normals)[3] = MEM_dupallocN(BKE_mesh_vertex_normals_ensure(me));
     for (i = 0; i < numverts; i++) {
       float co[3];
 
@@ -1041,11 +1040,6 @@ static void obstacles_from_mesh(Object *coll_ob,
       mul_m4_v3(coll_ob->obmat, vertices[i].co);
       manta_pos_to_cell(fds, vertices[i].co);
 
-      /* Vertex normal. */
-      mul_mat3_m4_v3(coll_ob->obmat, vert_normals[i]);
-      mul_mat3_m4_v3(fds->imat, vert_normals[i]);
-      normalize_v3(vert_normals[i]);
-
       /* Vertex velocity. */
       add_v3fl_v3fl_v3i(co, vertices[i].co, fds->shift);
       if (has_velocity) {
@@ -1101,7 +1095,6 @@ static void obstacles_from_mesh(Object *coll_ob,
       MEM_freeN(vert_vel);
     }
     MEM_freeN(vertices);
-    MEM_freeN(vert_normals);
     BKE_id_free(NULL, me);
   }
 }
@@ -2081,12 +2074,8 @@ static void emit_from_mesh(
     Mesh *me = BKE_mesh_copy_for_eval(ffs->mesh, true);
 
     /* Duplicate vertices to modify. */
-    if (me->mvert) {
-      me->mvert = MEM_dupallocN(me->mvert);
-      CustomData_set_layer(&me->vdata, CD_MVERT, me->mvert);
-    }
+    MVert *vertices = MEM_dupallocN(BKE_mesh_vertices(me));
 
-    MVert *mvert = me->mvert;
     const MLoop *mloop = BKE_mesh_loops(me);
     const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(me);
     const int numverts = me->totvert;
@@ -2110,12 +2099,11 @@ static void emit_from_mesh(
 
     /* Transform mesh vertices to domain grid space for fast lookups.
      * This is valid because the mesh is copied above. */
-    BKE_mesh_vertex_normals_ensure(me);
-    float(*vert_normals)[3] = BKE_mesh_vertex_normals_for_write(me);
+    float(*vert_normals)[3] = MEM_dupallocN(BKE_mesh_vertex_normals_ensure(me));
     for (i = 0; i < numverts; i++) {
       /* Vertex position. */
-      mul_m4_v3(flow_ob->obmat, mvert[i].co);
-      manta_pos_to_cell(fds, mvert[i].co);
+      mul_m4_v3(flow_ob->obmat, vertices[i].co);
+      manta_pos_to_cell(fds, vertices[i].co);
 
       /* Vertex normal. */
       mul_mat3_m4_v3(flow_ob->obmat, vert_normals[i]);
@@ -2125,7 +2113,7 @@ static void emit_from_mesh(
       /* Vertex velocity. */
       if (ffs->flags & FLUID_FLOW_INITVELOCITY) {
         float co[3];
-        add_v3fl_v3fl_v3i(co, mvert[i].co, fds->shift);
+        add_v3fl_v3fl_v3i(co, vertices[i].co, fds->shift);
         if (has_velocity) {
           sub_v3_v3v3(&vert_vel[i * 3], co, &ffs->verts_old[i * 3]);
           mul_v3_fl(&vert_vel[i * 3], 1.0 / dt);
@@ -2134,7 +2122,7 @@ static void emit_from_mesh(
       }
 
       /* Calculate emission map bounds. */
-      bb_boundInsert(bb, mvert[i].co);
+      bb_boundInsert(bb, vertices[i].co);
     }
     mul_m4_v3(flow_ob->obmat, flow_center);
     manta_pos_to_cell(fds, flow_center);
@@ -2159,7 +2147,7 @@ static void emit_from_mesh(
       EmitFromDMData data = {
           .fds = fds,
           .ffs = ffs,
-          .mvert = mvert,
+          .mvert = vertices,
           .vert_normals = vert_normals,
           .mloop = mloop,
           .mlooptri = mlooptri,
@@ -2187,9 +2175,8 @@ static void emit_from_mesh(
     if (vert_vel) {
       MEM_freeN(vert_vel);
     }
-    if (me->mvert) {
-      MEM_freeN(me->mvert);
-    }
+    MEM_freeN(vertices);
+    MEM_freeN(vert_normals);
     BKE_id_free(NULL, me);
   }
 }
diff --git a/source/blender/blenkernel/intern/mesh_convert.cc b/source/blender/blenkernel/intern/mesh_convert.cc
index 1a094f9728a..7501a53b73d 100644
--- a/source/blender/blenkernel/intern/mesh_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_convert.cc
@@ -1426,6 +1426,7 @@ void BKE_mesh_nomain_to_mesh(Mesh *mesh_src,
                              const CustomData_MeshMasks *mask,
                              bool take_ownership)
 {
+  using namespace blender::bke;
   BLI_assert(mesh_src->id.tag & LIB_TAG_NO_MAIN);
 
   /* mesh_src might depend on mesh_dst, so we need to do everything with a local copy */
@@ -1505,30 +1506,30 @@ void BKE_mesh_nomain_to_mesh(Mesh *mesh_src,
     CustomData_add_layer(&tmp.vdata,
                          CD_MVERT,
                          CD_ASSIGN,
-                         (alloctype == CD_ASSIGN) ? mesh_src->mvert :
-                                                    MEM_dupallocN(mesh_src->mvert),
+                         (alloctype == CD_ASSIGN) ? mesh_vertices_for_write(*mesh_src).data() :
+                                                    MEM_dupallocN(mesh_vertices(*mesh_src).data()),
                          totvert);
   }
   if (!CustomData_has_layer(&tmp.edata, CD_MEDGE)) {
     CustomData_add_layer(&tmp.edata,
                          CD_MEDGE,
                          CD_ASSIGN,
-                         (alloctype == CD_ASSIGN) ? mesh_src->medge :
-                                                    MEM_dupallocN(mesh_src->medge),
+                         (alloctype == CD_ASSIGN) ? mesh_edges_for_write(*mesh_src).data() :
+                                                    MEM_dupallocN(mesh_edges(*mesh_src).data()),
                          totedge);
   }
   if (!CustomData_has_layer(&tmp.pdata, CD_MPOLY)) {
     CustomData_add_layer(&tmp.ldata,
                          CD_MLOOP,
                          CD_ASSIGN,
-                         (alloctype == CD_ASSIGN) ? mesh_src->mloop :
-                                                    MEM_dupallocN(mesh_src->mloop),
+                         (alloctype == CD_ASSIGN) ? mesh_loops_for_write(*mesh_src).data() :
+                                                    MEM_dupallocN(mesh_loops(*mesh_src).data()),
                          tmp.totloop);
     CustomData_add_layer(&tmp.pdata,
                          CD_MPOLY,
                          CD_ASSIGN,
-                         (alloctype == CD_ASSIGN) ? mesh_src->mpoly :
-                                                    MEM_dupallocN(mesh_src->mpoly),
+                         (alloctype == CD_ASSIGN) ? mesh_polygons_for_write(*mesh_src).data() :
+                                                    MEM_dupallocN(mesh_polygons(*mesh_src).data()),
                          tmp.totpoly);
   }



More information about the Bf-blender-cvs mailing list