[Bf-blender-cvs] [520db97acf8] blenloader-api: move meshdeform modifier writing/reading

Jacques Lucke noreply at git.blender.org
Sat Mar 7 19:09:27 CET 2020


Commit: 520db97acf83d8b6bf9751f2c6d8feb4f308b50e
Author: Jacques Lucke
Date:   Sat Mar 7 17:41:13 2020 +0100
Branches: blenloader-api
https://developer.blender.org/rB520db97acf83d8b6bf9751f2c6d8feb4f308b50e

move meshdeform modifier writing/reading

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

M	source/blender/blenloader/BLO_callback_api.h
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/modifiers/intern/MOD_meshdeform.c

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

diff --git a/source/blender/blenloader/BLO_callback_api.h b/source/blender/blenloader/BLO_callback_api.h
index 3d4d063e056..84d106da5a1 100644
--- a/source/blender/blenloader/BLO_callback_api.h
+++ b/source/blender/blenloader/BLO_callback_api.h
@@ -55,6 +55,10 @@ void BLO_read_list(BloReader *reader, struct ListBase *list, BloLinkListFn callb
 
 #define BLO_read_array_int32(reader, ptr, array_size) \
   BLO_read_array_endian_corrected(reader, int32, ptr, array_size)
+#define BLO_read_array_float(reader, ptr, array_size) \
+  BLO_read_array_endian_corrected(reader, float, ptr, array_size)
+#define BLO_read_array_float3(reader, ptr, array_size) \
+  BLO_read_array_float(reader, ptr, 3 * (array_size))
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index a5a21023517..fe0ac010171 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5451,37 +5451,6 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb, Object *ob)
 
       psmd->facepa = NULL;
     }
-    else if (md->type == eModifierType_MeshDeform) {
-      MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
-
-      mmd->bindinfluences = newdataadr(fd, mmd->bindinfluences);
-      mmd->bindoffsets = newdataadr(fd, mmd->bindoffsets);
-      mmd->bindcagecos = newdataadr(fd, mmd->bindcagecos);
-      mmd->dyngrid = newdataadr(fd, mmd->dyngrid);
-      mmd->dyninfluences = newdataadr(fd, mmd->dyninfluences);
-      mmd->dynverts = newdataadr(fd, mmd->dynverts);
-
-      mmd->bindweights = newdataadr(fd, mmd->bindweights);
-      mmd->bindcos = newdataadr(fd, mmd->bindcos);
-
-      if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
-        if (mmd->bindoffsets) {
-          BLI_endian_switch_int32_array(mmd->bindoffsets, mmd->totvert + 1);
-        }
-        if (mmd->bindcagecos) {
-          BLI_endian_switch_float_array(mmd->bindcagecos, mmd->totcagevert * 3);
-        }
-        if (mmd->dynverts) {
-          BLI_endian_switch_int32_array(mmd->dynverts, mmd->totvert);
-        }
-        if (mmd->bindweights) {
-          BLI_endian_switch_float_array(mmd->bindweights, mmd->totvert);
-        }
-        if (mmd->bindcos) {
-          BLI_endian_switch_float_array(mmd->bindcos, mmd->totcagevert * 3);
-        }
-      }
-    }
     else if (md->type == eModifierType_Ocean) {
       OceanModifierData *omd = (OceanModifierData *)md;
       omd->oceancache = NULL;
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 50bd0dcd821..51fe6c9b0fc 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1652,17 +1652,6 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
       writestruct(wd, DATA, MFace, collmd->numfaces, collmd->mfaces);
 #endif
     }
-    else if (md->type == eModifierType_MeshDeform) {
-      MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
-      int size = mmd->dyngridsize;
-
-      writestruct(wd, DATA, MDefInfluence, mmd->totinfluence, mmd->bindinfluences);
-      writedata(wd, DATA, sizeof(int) * (mmd->totvert + 1), mmd->bindoffsets);
-      writedata(wd, DATA, sizeof(float) * 3 * mmd->totcagevert, mmd->bindcagecos);
-      writestruct(wd, DATA, MDefCell, size * size * size, mmd->dyngrid);
-      writestruct(wd, DATA, MDefInfluence, mmd->totinfluence, mmd->dyninfluences);
-      writedata(wd, DATA, sizeof(int) * mmd->totvert, mmd->dynverts);
-    }
     else if (md->type == eModifierType_Warp) {
       WarpModifierData *tmd = (WarpModifierData *)md;
       if (tmd->curfalloff) {
diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c
index 6573829db89..b48a3bcc491 100644
--- a/source/blender/modifiers/intern/MOD_meshdeform.c
+++ b/source/blender/modifiers/intern/MOD_meshdeform.c
@@ -45,6 +45,8 @@
 #include "DEG_depsgraph.h"
 #include "DEG_depsgraph_query.h"
 
+#include "BLO_callback_api.h"
+
 #include "MOD_util.h"
 
 #ifdef __SSE2__
@@ -163,6 +165,36 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
   }
 }
 
+static void bloWrite(BloWriter *writer, const ModifierData *md)
+{
+  MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
+  int size = mmd->dyngridsize;
+
+  BLO_write_struct_array(writer, MDefInfluence, mmd->totinfluence, mmd->bindinfluences);
+  BLO_write_raw_array(writer, sizeof(int), mmd->totvert + 1, mmd->bindoffsets);
+  BLO_write_raw_array(writer, sizeof(float) * 3, mmd->totcagevert, mmd->bindcagecos);
+
+  BLO_write_struct_array(writer, MDefCell, size * size * size, mmd->dyngrid);
+  BLO_write_struct_array(writer, MDefInfluence, mmd->totinfluence, mmd->dyninfluences);
+  BLO_write_raw_array(writer, sizeof(int), mmd->totvert, mmd->dynverts);
+}
+
+static void bloRead(BloReader *reader, ModifierData *md)
+{
+  MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
+
+  BLO_read_update_address(reader, mmd->bindinfluences);
+  BLO_read_array_int32(reader, mmd->bindoffsets, mmd->totvert + 1);
+  BLO_read_array_float3(reader, mmd->bindcagecos, mmd->totcagevert);
+
+  BLO_read_update_address(reader, mmd->dyngrid);
+  BLO_read_update_address(reader, mmd->dyninfluences);
+  BLO_read_array_int32(reader, mmd->dynverts, mmd->totvert);
+
+  BLO_read_array_float(reader, mmd->bindweights, mmd->totvert);
+  BLO_read_array_float3(reader, mmd->bindcos, mmd->totcagevert);
+}
+
 static float meshdeform_dynamic_bind(MeshDeformModifierData *mmd, float (*dco)[3], float vec[3])
 {
   MDefCell *cell;
@@ -578,6 +610,6 @@ ModifierTypeInfo modifierType_MeshDeform = {
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
     /* freeRuntimeData */ NULL,
-    /* bloWrite */ NULL,
-    /* bloRead */ NULL,
+    /* bloWrite */ bloWrite,
+    /* bloRead */ bloRead,
 };



More information about the Bf-blender-cvs mailing list