diff options
author | Jacques Lucke <jacques@blender.org> | 2020-03-07 19:41:13 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-03-07 19:41:13 +0300 |
commit | 520db97acf83d8b6bf9751f2c6d8feb4f308b50e (patch) | |
tree | f8a390d73030df60e7d335eb2f20011c8ddb9536 | |
parent | 6f77056dca02b44eba99b990c7dfc461708d526e (diff) |
move meshdeform modifier writing/reading
-rw-r--r-- | source/blender/blenloader/BLO_callback_api.h | 4 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 31 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 11 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_meshdeform.c | 36 |
4 files changed, 38 insertions, 44 deletions
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, }; |