[Bf-blender-cvs] [0f224ceedba] master: Cleanup: Move multires.c to C++

Hans Goudey noreply at git.blender.org
Thu Oct 6 18:00:52 CEST 2022


Commit: 0f224ceedba8575a7373938987c7ed18f3e565de
Author: Hans Goudey
Date:   Wed Oct 5 20:51:05 2022 -0500
Branches: master
https://developer.blender.org/rB0f224ceedba8575a7373938987c7ed18f3e565de

Cleanup: Move multires.c to C++

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

M	source/blender/blenkernel/BKE_modifier.h
M	source/blender/blenkernel/BKE_multires.h
M	source/blender/blenkernel/BKE_subsurf.h
M	source/blender/blenkernel/CMakeLists.txt
R085	source/blender/blenkernel/intern/multires.c	source/blender/blenkernel/intern/multires.cc

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

diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index f46672a5033..ce2f9e878f8 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -127,6 +127,7 @@ typedef enum ModifierApplyFlag {
    * See `OBJECT_OT_modifier_apply` operator. */
   MOD_APPLY_TO_BASE_MESH = 1 << 4,
 } ModifierApplyFlag;
+ENUM_OPERATORS(ModifierApplyFlag, MOD_APPLY_TO_BASE_MESH);
 
 typedef struct ModifierUpdateDepsgraphContext {
   struct Scene *scene;
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index dfa330ff508..53dfaf953ea 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -8,7 +8,7 @@
  */
 
 #include "BKE_subsurf.h"
-#include "BLI_compiler_compat.h"
+#include "BLI_utildefines.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -53,12 +53,13 @@ void multires_modifier_update_hidden(struct DerivedMesh *dm);
  */
 void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, struct Object *ob);
 
-typedef enum {
+typedef enum MultiresFlags {
   MULTIRES_USE_LOCAL_MMD = 1,
   MULTIRES_USE_RENDER_PARAMS = 2,
   MULTIRES_ALLOC_PAINT_MASK = 4,
   MULTIRES_IGNORE_SIMPLIFY = 8,
 } MultiresFlags;
+ENUM_OPERATORS(MultiresFlags, MULTIRES_IGNORE_SIMPLIFY);
 
 struct DerivedMesh *multires_make_derived_from_derived(struct DerivedMesh *dm,
                                                        struct MultiresModifierData *mmd,
diff --git a/source/blender/blenkernel/BKE_subsurf.h b/source/blender/blenkernel/BKE_subsurf.h
index f32a78c3015..557a71fd06b 100644
--- a/source/blender/blenkernel/BKE_subsurf.h
+++ b/source/blender/blenkernel/BKE_subsurf.h
@@ -11,6 +11,7 @@
 
 /* Thread sync primitives used directly. */
 #include "BLI_threads.h"
+#include "BLI_utildefines.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -32,7 +33,7 @@ struct SubsurfModifierData;
 
 /**************************** External *****************************/
 
-typedef enum {
+typedef enum SubsurfFlags {
   SUBSURF_USE_RENDER_PARAMS = 1,
   SUBSURF_IS_FINAL_CALC = 2,
   SUBSURF_FOR_EDIT_MODE = 4,
@@ -41,6 +42,7 @@ typedef enum {
   SUBSURF_USE_GPU_BACKEND = 32,
   SUBSURF_IGNORE_SIMPLIFY = 64,
 } SubsurfFlags;
+ENUM_OPERATORS(SubsurfFlags, SUBSURF_IGNORE_SIMPLIFY);
 
 struct DerivedMesh *subsurf_make_derived_from_derived(struct DerivedMesh *dm,
                                                       struct SubsurfModifierData *smd,
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index d0e2d945c2f..192acbf8338 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -216,7 +216,7 @@ set(SRC
   intern/mesh_wrapper.cc
   intern/modifier.cc
   intern/movieclip.c
-  intern/multires.c
+  intern/multires.cc
   intern/multires_reshape.c
   intern/multires_reshape_apply_base.c
   intern/multires_reshape_ccg.c
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.cc
similarity index 85%
rename from source/blender/blenkernel/intern/multires.c
rename to source/blender/blenkernel/intern/multires.cc
index ce61ca483e9..83189adfcdb 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.cc
@@ -43,8 +43,8 @@
 
 #include "multires_reshape.h"
 
-#include <math.h>
-#include <string.h>
+#include <cmath>
+#include <cstring>
 
 /* MULTIRES MODIFIER */
 static const int multires_grid_tot[] = {
@@ -53,11 +53,11 @@ static const int multires_side_tot[] = {
     0, 2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097};
 
 /* See multiresModifier_disp_run for description of each operation */
-typedef enum {
+enum DispOp {
   APPLY_DISPLACEMENTS,
   CALC_DISPLACEMENTS,
   ADD_DISPLACEMENTS,
-} DispOp;
+};
 
 static void multiresModifier_disp_run(
     DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, DispOp op, CCGElem **oldGridData, int totlvl);
@@ -107,7 +107,7 @@ static BLI_bitmap *multires_mdisps_upsample_hidden(BLI_bitmap *lo_hidden,
 
   /* fast case */
   if (lo_level == hi_level) {
-    return MEM_dupallocN(lo_hidden);
+    return static_cast<BLI_bitmap *>(MEM_dupallocN(lo_hidden));
   }
 
   subd = BLI_BITMAP_NEW(square_i(hi_gridsize), "MDisps.hidden upsample");
@@ -184,7 +184,7 @@ static BLI_bitmap *multires_mdisps_downsample_hidden(const BLI_bitmap *old_hidde
 static void multires_output_hidden_to_ccgdm(CCGDerivedMesh *ccgdm, Mesh *me, int level)
 {
   const MPoly *polys = BKE_mesh_polys(me);
-  const MDisps *mdisps = CustomData_get_layer(&me->ldata, CD_MDISPS);
+  const MDisps *mdisps = static_cast<const MDisps *>(CustomData_get_layer(&me->ldata, CD_MDISPS));
   BLI_bitmap **grid_hidden = ccgdm->gridHidden;
   int *gridOffset;
   int i, j;
@@ -217,7 +217,7 @@ static void multires_mdisps_subdivide_hidden(MDisps *md, int new_level)
     return;
   }
 
-  subd = multires_mdisps_upsample_hidden(md->hidden, md->level, new_level, NULL);
+  subd = multires_mdisps_upsample_hidden(md->hidden, md->level, new_level, nullptr);
 
   /* swap in the subdivided data */
   MEM_freeN(md->hidden);
@@ -232,13 +232,12 @@ Mesh *BKE_multires_create_mesh(struct Depsgraph *depsgraph,
   Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
   Mesh *deformed_mesh = mesh_get_eval_deform(
       depsgraph, scene_eval, object_eval, &CD_MASK_BAREMESH);
-  ModifierEvalContext modifier_ctx = {
-      .depsgraph = depsgraph,
-      .object = object_eval,
-      .flag = MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY,
-  };
+  ModifierEvalContext modifier_ctx{};
+  modifier_ctx.depsgraph = depsgraph;
+  modifier_ctx.object = object_eval;
+  modifier_ctx.flag = MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY;
 
-  const ModifierTypeInfo *mti = BKE_modifier_get_info(mmd->modifier.type);
+  const ModifierTypeInfo *mti = BKE_modifier_get_info(ModifierType(mmd->modifier.type));
   Mesh *result = mti->modifyMesh(&mmd->modifier, &modifier_ctx, deformed_mesh);
 
   if (result == deformed_mesh) {
@@ -255,12 +254,12 @@ float (*BKE_multires_create_deformed_base_mesh_vert_coords(struct Depsgraph *dep
   Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
   Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
 
-  Object object_for_eval = *object_eval;
+  Object object_for_eval = blender::dna::shallow_copy(*object_eval);
   object_for_eval.data = object->data;
-  object_for_eval.sculpt = NULL;
+  object_for_eval.sculpt = nullptr;
 
   const bool use_render = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
-  ModifierEvalContext mesh_eval_context = {depsgraph, &object_for_eval, 0};
+  ModifierEvalContext mesh_eval_context = {depsgraph, &object_for_eval, ModifierApplyFlag(0)};
   if (use_render) {
     mesh_eval_context.flag |= MOD_APPLY_RENDER;
   }
@@ -270,13 +269,13 @@ float (*BKE_multires_create_deformed_base_mesh_vert_coords(struct Depsgraph *dep
   ModifierData *first_md = BKE_modifiers_get_virtual_modifierlist(&object_for_eval,
                                                                   &virtual_modifier_data);
 
-  Mesh *base_mesh = object->data;
+  Mesh *base_mesh = static_cast<Mesh *>(object->data);
 
   int num_deformed_verts;
   float(*deformed_verts)[3] = BKE_mesh_vert_coords_alloc(base_mesh, &num_deformed_verts);
 
-  for (ModifierData *md = first_md; md != NULL; md = md->next) {
-    const ModifierTypeInfo *mti = BKE_modifier_get_info(md->type);
+  for (ModifierData *md = first_md; md != nullptr; md = md->next) {
+    const ModifierTypeInfo *mti = BKE_modifier_get_info(ModifierType(md->type));
 
     if (md == &mmd->modifier) {
       break;
@@ -294,7 +293,7 @@ float (*BKE_multires_create_deformed_base_mesh_vert_coords(struct Depsgraph *dep
         md, &mesh_eval_context, base_mesh, deformed_verts, num_deformed_verts);
   }
 
-  if (r_num_deformed_verts != NULL) {
+  if (r_num_deformed_verts != nullptr) {
     *r_num_deformed_verts = num_deformed_verts;
   }
   return deformed_verts;
@@ -312,16 +311,15 @@ MultiresModifierData *find_multires_modifier_before(Scene *scene, ModifierData *
     }
   }
 
-  return NULL;
+  return nullptr;
 }
 
 MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob, bool use_first)
 {
-  ModifierData *md;
-  MultiresModifierData *mmd = NULL, *firstmmd = NULL;
+  MultiresModifierData *mmd = nullptr, *firstmmd = nullptr;
 
   /* find first active multires modifier */
-  for (md = ob->modifiers.first; md; md = md->next) {
+  LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
     if (md->type == eModifierType_Multires) {
       if (!firstmmd) {
         firstmmd = (MultiresModifierData *)md;
@@ -350,8 +348,8 @@ int multires_get_level(const Scene *scene,
                        bool ignore_simplify)
 {
   if (render) {
-    return (scene != NULL) ? get_render_subsurf_level(&scene->r, mmd->renderlvl, true) :
-                             mmd->renderlvl;
+    return (scene != nullptr) ? get_render_subsurf_level(&scene->r, mmd->renderlvl, true) :
+                                mmd->renderlvl;
   }
   if (ob->mode == OB_MODE_SCULPT) {
     return mmd->sculptlvl;
@@ -360,7 +358,7 @@ int multires_get_level(const Scene *scene,
     return mmd->lvl;
   }
 
-  return (scene != NULL) ? get_render_subsurf_level(&scene->r, mmd->lvl, false) : mmd->lvl;
+  return (scene != nullptr) ? get_render_subsurf_level(&scene->r, mmd->lvl, false) : mmd->lvl;
 }
 
 void multires_set_tot_level(Object *ob, MultiresModifierData *mmd, int lvl)
@@ -387,7 +385,7 @@ static void multires_ccg_mark_as_modified(SubdivCCG *subdiv_ccg, MultiresModifie
 
 void multires_mark_as_modified(Depsgraph *depsgraph, Object *object, MultiresModifiedFlags flags)
 {
-  if (object == NULL) {
+  if (object == nullptr) {
     return;
   }
   /* NOTE: CCG live inside of evaluated object.
@@ -398,9 +396,9 @@ void multires_mark_as_modified(Depsgraph *depsgraph, Object *object, MultiresMod
    *
    * In a longer term maybe special dependency graph tag can help sanitizing this a bit. */
   Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
-  Mesh *mesh = object_eval->data;
+  Mesh *mesh = static_cast<Mesh *>(object_eval->data);
   SubdivCCG *subdiv_ccg = me

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list