[Bf-blender-cvs] [25c357124de] master: Cover some DNA files with C++ utility macros

Sergey Sharybin noreply at git.blender.org
Wed Apr 13 11:49:00 CEST 2022


Commit: 25c357124de8905360c44a5a842284089ddec341
Author: Sergey Sharybin
Date:   Tue Apr 12 10:56:51 2022 +0200
Branches: master
https://developer.blender.org/rB25c357124de8905360c44a5a842284089ddec341

Cover some DNA files with C++ utility macros

Solves compilation warning with Clang, and moves manipulation with
DNA structures to the designed way for C++.

The tests and few other places are update to the new code by Jacques.

Ref T96847

Maniphest Tasks: T96847

Differential Revision: https://developer.blender.org/D14625

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

M	source/blender/blenkernel/intern/curve.cc
M	source/blender/blenkernel/intern/lattice_deform_test.cc
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_convert.cc
M	source/blender/blenkernel/intern/node.cc
M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M	source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
M	source/blender/editors/render/render_shading.cc
M	source/blender/makesdna/DNA_curve_types.h
M	source/blender/makesdna/DNA_lattice_types.h
M	source/blender/makesdna/DNA_light_types.h
M	source/blender/makesdna/DNA_linestyle_types.h
M	source/blender/makesdna/DNA_material_types.h
M	source/blender/makesdna/DNA_mesh_types.h
M	source/blender/makesdna/DNA_simulation_types.h
M	source/blender/makesdna/DNA_texture_types.h
M	source/blender/makesdna/DNA_world_types.h
M	source/blender/nodes/geometry/nodes/node_geo_string_to_curves.cc
M	source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.cc

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

diff --git a/source/blender/blenkernel/intern/curve.cc b/source/blender/blenkernel/intern/curve.cc
index 2d72ad28d18..6815b4d7486 100644
--- a/source/blender/blenkernel/intern/curve.cc
+++ b/source/blender/blenkernel/intern/curve.cc
@@ -665,7 +665,7 @@ Nurb *BKE_nurb_duplicate(const Nurb *nu)
   if (newnu == nullptr) {
     return nullptr;
   }
-  memcpy(newnu, nu, sizeof(Nurb));
+  *newnu = blender::dna::shallow_copy(*nu);
 
   if (nu->bezt) {
     newnu->bezt = (BezTriple *)MEM_malloc_arrayN(nu->pntsu, sizeof(BezTriple), "duplicateNurb2");
@@ -699,7 +699,7 @@ Nurb *BKE_nurb_duplicate(const Nurb *nu)
 Nurb *BKE_nurb_copy(Nurb *src, int pntsu, int pntsv)
 {
   Nurb *newnu = (Nurb *)MEM_mallocN(sizeof(Nurb), "copyNurb");
-  memcpy(newnu, src, sizeof(Nurb));
+  *newnu = blender::dna::shallow_copy(*src);
 
   if (pntsu == 1) {
     SWAP(int, pntsu, pntsv);
diff --git a/source/blender/blenkernel/intern/lattice_deform_test.cc b/source/blender/blenkernel/intern/lattice_deform_test.cc
index 1b1bca5fc53..58aadf652b7 100644
--- a/source/blender/blenkernel/intern/lattice_deform_test.cc
+++ b/source/blender/blenkernel/intern/lattice_deform_test.cc
@@ -69,7 +69,7 @@ static void test_lattice_deform_free(LatticeDeformTestContext *ctx)
 TEST(lattice_deform_performance, performance_no_dvert_1)
 {
   const int32_t num_items = 1;
-  LatticeDeformTestContext ctx = {{{nullptr}}};
+  LatticeDeformTestContext ctx = {dna::shallow_zero_initialize()};
   RandomNumberGenerator rng;
   test_lattice_deform_init(&ctx, &rng, num_items);
   test_lattice_deform(&ctx, num_items);
@@ -78,7 +78,7 @@ TEST(lattice_deform_performance, performance_no_dvert_1)
 TEST(lattice_deform_performance, performance_no_dvert_1000)
 {
   const int32_t num_items = 1000;
-  LatticeDeformTestContext ctx = {{{nullptr}}};
+  LatticeDeformTestContext ctx = {dna::shallow_zero_initialize()};
   RandomNumberGenerator rng;
   test_lattice_deform_init(&ctx, &rng, num_items);
   test_lattice_deform(&ctx, num_items);
@@ -87,7 +87,7 @@ TEST(lattice_deform_performance, performance_no_dvert_1000)
 TEST(lattice_deform_performance, performance_no_dvert_10000)
 {
   const int32_t num_items = 10000;
-  LatticeDeformTestContext ctx = {{{nullptr}}};
+  LatticeDeformTestContext ctx = {dna::shallow_zero_initialize()};
   RandomNumberGenerator rng;
   test_lattice_deform_init(&ctx, &rng, num_items);
   test_lattice_deform(&ctx, num_items);
@@ -96,7 +96,7 @@ TEST(lattice_deform_performance, performance_no_dvert_10000)
 TEST(lattice_deform_performance, performance_no_dvert_100000)
 {
   const int32_t num_items = 100000;
-  LatticeDeformTestContext ctx = {{{nullptr}}};
+  LatticeDeformTestContext ctx = {dna::shallow_zero_initialize()};
   RandomNumberGenerator rng;
   test_lattice_deform_init(&ctx, &rng, num_items);
   test_lattice_deform(&ctx, num_items);
@@ -105,7 +105,7 @@ TEST(lattice_deform_performance, performance_no_dvert_100000)
 TEST(lattice_deform_performance, performance_no_dvert_1000000)
 {
   const int32_t num_items = 1000000;
-  LatticeDeformTestContext ctx = {{{nullptr}}};
+  LatticeDeformTestContext ctx = {dna::shallow_zero_initialize()};
   RandomNumberGenerator rng;
   test_lattice_deform_init(&ctx, &rng, num_items);
   test_lattice_deform(&ctx, num_items);
@@ -114,7 +114,7 @@ TEST(lattice_deform_performance, performance_no_dvert_1000000)
 TEST(lattice_deform_performance, performance_no_dvert_10000000)
 {
   const int32_t num_items = 10000000;
-  LatticeDeformTestContext ctx = {{{nullptr}}};
+  LatticeDeformTestContext ctx = {dna::shallow_zero_initialize()};
   RandomNumberGenerator rng;
   test_lattice_deform_init(&ctx, &rng, num_items);
   test_lattice_deform(&ctx, num_items);
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 5afc3c0be3b..25d97d0bd3c 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -218,7 +218,7 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address
   mesh->mface = nullptr;
   mesh->totface = 0;
   memset(&mesh->fdata, 0, sizeof(mesh->fdata));
-  memset(&mesh->runtime, 0, sizeof(mesh->runtime));
+  mesh->runtime = blender::dna::shallow_zero_initialize();
   flayers = flayers_buff;
 
   /* Do not store actual geometry data in case this is a library override ID. */
@@ -329,7 +329,7 @@ static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
   mesh->texflag &= ~ME_AUTOSPACE_EVALUATED;
   mesh->edit_mesh = nullptr;
 
-  memset(&mesh->runtime, 0, sizeof(mesh->runtime));
+  mesh->runtime = blender::dna::shallow_zero_initialize();
   BKE_mesh_runtime_init_data(mesh);
 
   /* happens with old files */
diff --git a/source/blender/blenkernel/intern/mesh_convert.cc b/source/blender/blenkernel/intern/mesh_convert.cc
index 6abaa471877..bce7021bbb9 100644
--- a/source/blender/blenkernel/intern/mesh_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_convert.cc
@@ -1446,8 +1446,7 @@ void BKE_mesh_nomain_to_mesh(Mesh *mesh_src,
   /* mesh_src might depend on mesh_dst, so we need to do everything with a local copy */
   /* TODO(Sybren): the above claim came from 2.7x derived-mesh code (DM_to_mesh);
    * check whether it is still true with Mesh */
-  Mesh tmp;
-  memcpy(&tmp, mesh_dst, sizeof(tmp));
+  Mesh tmp = blender::dna::shallow_copy(*mesh_dst);
   int totvert, totedge /*, totface */ /* UNUSED */, totloop, totpoly;
   bool did_shapekeys = false;
   eCDAllocType alloctype = CD_DUPLICATE;
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 7efdd855a04..4acccca322a 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -719,7 +719,7 @@ void ntreeBlendReadData(BlendDataReader *reader, bNodeTree *ntree)
         }
         case SH_NODE_TEX_POINTDENSITY: {
           NodeShaderTexPointDensity *npd = (NodeShaderTexPointDensity *)node->storage;
-          memset(&npd->pd, 0, sizeof(npd->pd));
+          npd->pd = blender::dna::shallow_zero_initialize();
           break;
         }
         case SH_NODE_TEX_IMAGE: {
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index 5597d496890..058f57e5a61 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -163,7 +163,7 @@ const ID *nested_id_hack_get_discarded_pointers(NestedIDHackTempStorage *storage
   switch (GS(id->name)) {
 #  define SPECIAL_CASE(id_type, dna_type, field, variable) \
     case id_type: { \
-      storage->variable = *(dna_type *)id; \
+      storage->variable = dna::shallow_copy(*(dna_type *)id); \
       storage->variable.field = nullptr; \
       return &storage->variable.id; \
     }
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
index 97e5386b14d..d52226a4c90 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_vcol.cc
@@ -143,7 +143,7 @@ static void extract_vcol_init(const MeshRenderData *mr,
   CustomData *cd_vdata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->vdata : &mr->me->vdata;
   CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->ldata : &mr->me->ldata;
 
-  Mesh me_query = {0};
+  Mesh me_query = blender::dna::shallow_zero_initialize();
 
   BKE_id_attribute_copy_domains_temp(
       ID_ME, cd_vdata, nullptr, cd_ldata, nullptr, nullptr, &me_query.id);
@@ -256,7 +256,7 @@ static void extract_vcol_init_subdiv(const DRWSubdivCache *subdiv_cache,
   const CustomData *cd_ldata = extract_bmesh ? &coarse_mesh->edit_mesh->bm->ldata :
                                                &coarse_mesh->ldata;
 
-  Mesh me_query = *coarse_mesh;
+  Mesh me_query = blender::dna::shallow_copy(*coarse_mesh);
   BKE_id_attribute_copy_domains_temp(
       ID_ME, cd_vdata, nullptr, cd_ldata, nullptr, nullptr, &me_query.id);
 
diff --git a/source/blender/editors/render/render_shading.cc b/source/blender/editors/render/render_shading.cc
index f5bd60df2b4..46f62354fce 100644
--- a/source/blender/editors/render/render_shading.cc
+++ b/source/blender/editors/render/render_shading.cc
@@ -2613,7 +2613,7 @@ static void copy_mtex_copybuf(ID *id)
   }
 
   if (mtex && *mtex) {
-    memcpy(&mtexcopybuf, *mtex, sizeof(MTex));
+    mtexcopybuf = blender::dna::shallow_copy(**mtex);
     mtexcopied = 1;
   }
   else {
@@ -2649,7 +2649,7 @@ static void paste_mtex_copybuf(ID *id)
       id_us_min(&(*mtex)->tex->id);
     }
 
-    memcpy(*mtex, &mtexcopybuf, sizeof(MTex));
+    **mtex = blender::dna::shallow_copy(mtexcopybuf);
 
     id_us_plus((ID *)mtexcopybuf.tex);
   }
diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h
index 556e467c4b6..305b913b19e 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -127,6 +127,8 @@ typedef struct BPoint {
  * also, it should be NURBS (Nurb isn't the singular of Nurbs).
  */
 typedef struct Nurb {
+  DNA_DEFINE_CXX_METHODS(Nurb)
+
   /** Multiple nurbs per curve object are allowed. */
   struct Nurb *next, *prev;
   short type;
@@ -169,6 +171,8 @@ typedef struct TextBox {
 #
 #
 typedef struct EditNurb {
+  DNA_DEFINE_CXX_METHODS(EditNurb)
+
   /* base of nurbs' list (old Curve->editnurb) */
   ListBase nurbs;
 
@@ -187,6 +191,8 @@ typedef struct EditNurb {
 } EditNurb;
 
 typedef struct Curve {
+  DNA_DEFINE_CXX_METHODS(Curve)
+
   ID id;
   /** Animation data (must be immediately after id for utilities to use it). */
   struct AnimData *adt;
diff --git a/source/blender/makesdna/DNA_lattice_types.h b/source/blender/makesdna/DNA_lattice_types.h
index b2775aa771a..907f1150ce5 100644
--- a/source/blender/makesdna/DNA_lattice_types.h
+++ b/source/blender/makesdna/DNA_lattice_types.h
@@ -23,6 +23,8 @@ struct MDeformVert;
 #
 #
 typedef struct EditLatt {
+  DNA_DEFINE_CXX_METHODS(EditLatt)
+
   struct Lattice *latt;
 
   int shapenr;
@@ -35,6 +37,8 @@ typedef struct EditLatt {
 } EditL

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list