[Bf-blender-cvs] [8d91ee35b15] temp-mesh-cpp: Cleanup: Move three mesh files to C++

Hans Goudey noreply at git.blender.org
Wed Apr 13 18:02:44 CEST 2022


Commit: 8d91ee35b15085bad056cd4e6c2b9b69fb9e918e
Author: Hans Goudey
Date:   Wed Apr 13 11:02:33 2022 -0500
Branches: temp-mesh-cpp
https://developer.blender.org/rB8d91ee35b15085bad056cd4e6c2b9b69fb9e918e

Cleanup: Move three mesh files to C++

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

M	source/blender/blenkernel/CMakeLists.txt
R091	source/blender/blenkernel/intern/editmesh_cache.c	source/blender/blenkernel/intern/editmesh_cache.cc
R089	source/blender/blenkernel/intern/mesh_runtime.c	source/blender/blenkernel/intern/mesh_runtime.cc
R080	source/blender/blenkernel/intern/mesh_wrapper.c	source/blender/blenkernel/intern/mesh_wrapper.cc

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

diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index aca8cdf916e..eb0e89a421d 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -126,7 +126,7 @@ set(SRC
   intern/editlattice.c
   intern/editmesh.c
   intern/editmesh_bvh.c
-  intern/editmesh_cache.c
+  intern/editmesh_cache.cc
   intern/editmesh_tangent.c
   intern/effect.c
   intern/fcurve.c
@@ -203,12 +203,12 @@ set(SRC
   intern/mesh_normals.cc
   intern/mesh_remap.c
   intern/mesh_remesh_voxel.cc
-  intern/mesh_runtime.c
+  intern/mesh_runtime.cc
   intern/mesh_sample.cc
   intern/mesh_tangent.c
   intern/mesh_tessellate.c
   intern/mesh_validate.cc
-  intern/mesh_wrapper.c
+  intern/mesh_wrapper.cc
   intern/modifier.c
   intern/movieclip.c
   intern/multires.c
diff --git a/source/blender/blenkernel/intern/editmesh_cache.c b/source/blender/blenkernel/intern/editmesh_cache.cc
similarity index 91%
rename from source/blender/blenkernel/intern/editmesh_cache.c
rename to source/blender/blenkernel/intern/editmesh_cache.cc
index f80f300d149..1ea2f38ce27 100644
--- a/source/blender/blenkernel/intern/editmesh_cache.c
+++ b/source/blender/blenkernel/intern/editmesh_cache.cc
@@ -35,7 +35,7 @@ void BKE_editmesh_cache_ensure_poly_normals(BMEditMesh *em, EditMeshData *emd)
 
   BM_mesh_elem_index_ensure(bm, BM_VERT);
 
-  polyNos = MEM_mallocN(sizeof(*polyNos) * bm->totface, __func__);
+  polyNos = static_cast<float(*)[3]>(MEM_mallocN(sizeof(*polyNos) * bm->totface, __func__));
 
   vertexCos = emd->vertexCos;
 
@@ -65,7 +65,7 @@ void BKE_editmesh_cache_ensure_vert_normals(BMEditMesh *em, EditMeshData *emd)
 
   polyNos = emd->polyNos;
   vertexCos = emd->vertexCos;
-  vertexNos = MEM_callocN(sizeof(*vertexNos) * bm->totvert, __func__);
+  vertexNos = static_cast<float(*)[3]>(MEM_callocN(sizeof(*vertexNos) * bm->totvert, __func__));
 
   BM_verts_calc_normal_vcos(bm, polyNos, vertexCos, vertexNos);
 
@@ -84,7 +84,7 @@ void BKE_editmesh_cache_ensure_poly_centers(BMEditMesh *em, EditMeshData *emd)
   BMIter fiter;
   int i;
 
-  polyCos = MEM_mallocN(sizeof(*polyCos) * bm->totface, __func__);
+  polyCos = static_cast<float(*)[3]>(MEM_mallocN(sizeof(*polyCos) * bm->totface, __func__));
 
   if (emd->vertexCos) {
     const float(*vertexCos)[3];
diff --git a/source/blender/blenkernel/intern/mesh_runtime.c b/source/blender/blenkernel/intern/mesh_runtime.cc
similarity index 89%
rename from source/blender/blenkernel/intern/mesh_runtime.c
rename to source/blender/blenkernel/intern/mesh_runtime.cc
index 7bd52abeb0d..5c6a6863031 100644
--- a/source/blender/blenkernel/intern/mesh_runtime.c
+++ b/source/blender/blenkernel/intern/mesh_runtime.cc
@@ -14,8 +14,7 @@
 #include "DNA_object_types.h"
 
 #include "BLI_math_geom.h"
-#include "BLI_task.h"
-#include "BLI_threads.h"
+#include "BLI_task.hh"
 
 #include "BKE_bvhutils.h"
 #include "BKE_lib_id.h"
@@ -35,12 +34,12 @@
  */
 static void mesh_runtime_init_mutexes(Mesh *mesh)
 {
-  mesh->runtime.eval_mutex = MEM_mallocN(sizeof(ThreadMutex), "mesh runtime eval_mutex");
-  BLI_mutex_init(mesh->runtime.eval_mutex);
-  mesh->runtime.normals_mutex = MEM_mallocN(sizeof(ThreadMutex), "mesh runtime normals_mutex");
-  BLI_mutex_init(mesh->runtime.normals_mutex);
-  mesh->runtime.render_mutex = MEM_mallocN(sizeof(ThreadMutex), "mesh runtime render_mutex");
-  BLI_mutex_init(mesh->runtime.render_mutex);
+  mesh->runtime.eval_mutex = MEM_new<ThreadMutex>("mesh runtime eval_mutex");
+  BLI_mutex_init(static_cast<ThreadMutex *>(mesh->runtime.eval_mutex));
+  mesh->runtime.normals_mutex = MEM_new<ThreadMutex>("mesh runtime normals_mutex");
+  BLI_mutex_init(static_cast<ThreadMutex *>(mesh->runtime.normals_mutex));
+  mesh->runtime.render_mutex = MEM_new<ThreadMutex>("mesh runtime render_mutex");
+  BLI_mutex_init(static_cast<ThreadMutex *>(mesh->runtime.render_mutex));
 }
 
 /**
@@ -49,17 +48,17 @@ static void mesh_runtime_init_mutexes(Mesh *mesh)
 static void mesh_runtime_free_mutexes(Mesh *mesh)
 {
   if (mesh->runtime.eval_mutex != NULL) {
-    BLI_mutex_end(mesh->runtime.eval_mutex);
+    BLI_mutex_end(static_cast<ThreadMutex *>(mesh->runtime.eval_mutex));
     MEM_freeN(mesh->runtime.eval_mutex);
     mesh->runtime.eval_mutex = NULL;
   }
   if (mesh->runtime.normals_mutex != NULL) {
-    BLI_mutex_end(mesh->runtime.normals_mutex);
+    BLI_mutex_end(static_cast<ThreadMutex *>(mesh->runtime.normals_mutex));
     MEM_freeN(mesh->runtime.normals_mutex);
     mesh->runtime.normals_mutex = NULL;
   }
   if (mesh->runtime.render_mutex != NULL) {
-    BLI_mutex_end(mesh->runtime.render_mutex);
+    BLI_mutex_end(static_cast<ThreadMutex *>(mesh->runtime.render_mutex));
     MEM_freeN(mesh->runtime.render_mutex);
     mesh->runtime.render_mutex = NULL;
   }
@@ -134,8 +133,8 @@ static void mesh_ensure_looptri_data(Mesh *mesh)
 
   if (totpoly) {
     if (mesh->runtime.looptris.array_wip == NULL) {
-      mesh->runtime.looptris.array_wip = MEM_malloc_arrayN(
-          looptris_len, sizeof(*mesh->runtime.looptris.array_wip), __func__);
+      mesh->runtime.looptris.array_wip = static_cast<MLoopTri *>(
+          MEM_malloc_arrayN(looptris_len, sizeof(*mesh->runtime.looptris.array_wip), __func__));
       mesh->runtime.looptris.len_alloc = looptris_len;
     }
 
@@ -170,12 +169,6 @@ int BKE_mesh_runtime_looptri_len(const Mesh *mesh)
   return looptri_len;
 }
 
-static void mesh_runtime_looptri_recalc_isolated(void *userdata)
-{
-  Mesh *mesh = userdata;
-  BKE_mesh_runtime_looptri_recalc(mesh);
-}
-
 const MLoopTri *BKE_mesh_runtime_looptri_ensure(const Mesh *mesh)
 {
   ThreadMutex *mesh_eval_mutex = (ThreadMutex *)mesh->runtime.eval_mutex;
@@ -188,7 +181,8 @@ const MLoopTri *BKE_mesh_runtime_looptri_ensure(const Mesh *mesh)
   }
   else {
     /* Must isolate multithreaded tasks while holding a mutex lock. */
-    BLI_task_isolate(mesh_runtime_looptri_recalc_isolated, (void *)mesh);
+    blender::threading::isolate_task(
+        [&]() { BKE_mesh_runtime_looptri_recalc(const_cast<Mesh *>(mesh)); });
     looptri = mesh->runtime.looptris.array;
   }
 
@@ -215,7 +209,7 @@ bool BKE_mesh_runtime_ensure_edit_data(struct Mesh *mesh)
     return false;
   }
 
-  mesh->runtime.edit_data = MEM_callocN(sizeof(EditMeshData), "EditMeshData");
+  mesh->runtime.edit_data = MEM_cnew<EditMeshData>(__func__);
   return true;
 }
 
diff --git a/source/blender/blenkernel/intern/mesh_wrapper.c b/source/blender/blenkernel/intern/mesh_wrapper.cc
similarity index 80%
rename from source/blender/blenkernel/intern/mesh_wrapper.c
rename to source/blender/blenkernel/intern/mesh_wrapper.cc
index f9fcaa0dceb..189a94809cb 100644
--- a/source/blender/blenkernel/intern/mesh_wrapper.c
+++ b/source/blender/blenkernel/intern/mesh_wrapper.cc
@@ -27,7 +27,7 @@
 
 #include "BLI_ghash.h"
 #include "BLI_math.h"
-#include "BLI_task.h"
+#include "BLI_task.hh"
 #include "BLI_threads.h"
 #include "BLI_utildefines.h"
 
@@ -51,7 +51,7 @@ Mesh *BKE_mesh_wrapper_from_editmesh_with_coords(BMEditMesh *em,
                                                  const float (*vert_coords)[3],
                                                  const Mesh *me_settings)
 {
-  Mesh *me = BKE_id_new_nomain(ID_ME, NULL);
+  Mesh *me = static_cast<Mesh *>(BKE_id_new_nomain(ID_ME, NULL));
   BKE_mesh_copy_parameters_for_eval(me, me_settings);
   BKE_mesh_runtime_ensure_edit_data(me);
 
@@ -63,7 +63,7 @@ Mesh *BKE_mesh_wrapper_from_editmesh_with_coords(BMEditMesh *em,
   /* Use edit-mesh directly where possible. */
   me->runtime.is_original = true;
 
-  me->edit_mesh = MEM_dupallocN(em);
+  me->edit_mesh = static_cast<BMEditMesh *>(MEM_dupallocN(em));
   me->edit_mesh->is_shallow_copy = true;
 
 /* Make sure, we crash if these are ever used. */
@@ -91,54 +91,6 @@ Mesh *BKE_mesh_wrapper_from_editmesh(BMEditMesh *em,
   return BKE_mesh_wrapper_from_editmesh_with_coords(em, cd_mask_extra, NULL, me_settings);
 }
 
-static void mesh_wrapper_ensure_mdata_isolated(void *userdata)
-{
-  Mesh *me = userdata;
-
-  const eMeshWrapperType geom_type_orig = me->runtime.wrapper_type;
-  me->runtime.wrapper_type = ME_WRAPPER_TYPE_MDATA;
-
-  switch (geom_type_orig) {
-    case ME_WRAPPER_TYPE_MDATA:
-    case ME_WRAPPER_TYPE_SUBD: {
-      break; /* Quiet warning. */
-    }
-    case ME_WRAPPER_TYPE_BMESH: {
-      me->totvert = 0;
-      me->totedge = 0;
-      me->totpoly = 0;
-      me->totloop = 0;
-
-      BLI_assert(me->edit_mesh != NULL);
-      BLI_assert(me->runtime.edit_data != NULL);
-
-      BMEditMesh *em = me->edit_mesh;
-      BM_mesh_bm_to_me_for_eval(em->bm, me, &me->runtime.cd_mask_extra);
-
-      /* Adding original index layers assumes that all BMesh mesh wrappers are created from
-       * original edit mode meshes (the only case where adding original indices makes sense).
-       * If that assumption is broken, the layers might be incorrect in that they might not
-       * actually be "original".
-       *
-       * There is also a performance aspect, where this also assumes that original indices are
-       * always needed when converting an edit mesh to a mesh. That might be wrong, but it's not
-       * harmful. */
-      BKE_mesh_ensure_default_orig_index_customdata(me);
-
-      EditMeshData *edit_data = me->runtime.edit_data;
-      if (edit_data->vertexCos) {
-        BKE_mesh_vert_coords_apply(me, edit_data->vertexCos);
-        me->runtime.is_original = false;
-      }
-      break;
-    }
-  }
-
-  if (me->runtime.wrapper_type_finalize) {
-    BKE_mesh_wrapper_deferred_finalize(me, &me->runtime.cd_mask_extra);
-  }
-}
-
 void BKE_mesh_wrapper_ensure_mdata(Mesh *me)
 {
   ThreadMutex *mesh_eval_mutex = (ThreadMutex *)me->runtime.eval_mutex;
@@ -150,7 +102,51 @@ void BKE_mesh_wrapper_ensure_mdata(Mesh *me)
   }
 
   /* Must isolate multithreaded tasks while holding a mutex lock. */
-  BLI_task_isolate(mesh_wrapper_ensure_mdata_isolated, me);
+  blender::threading::isolate_task([&]() {
+    const eMeshWrapperType geom_type_orig = static_cast<eMeshWrapperType>(
+        me->runtime.wrapper_type);
+    me->runtime.wrapper_type = ME_WRAPPER_TYPE_MDATA;
+
+    switch (geom_type_orig) {
+      case ME_WRAPPER_TYPE_MDATA:
+      case ME_WRAPPER_T

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list