From 2e5ef864ab17fbfdb50531a77ee8e1637b8efef6 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 16 Jun 2020 17:17:43 +0200 Subject: Refactor: move .blend read/write of mesh deform modifier to MOD_meshdeform.c --- source/blender/blenloader/intern/readfile.c | 13 --------- source/blender/blenloader/intern/writefile.c | 11 -------- source/blender/modifiers/intern/MOD_meshdeform.c | 35 ++++++++++++++++++++++-- 3 files changed, 33 insertions(+), 26 deletions(-) (limited to 'source') diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index e72cad47c0a..5b5cf8e6232 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5776,19 +5776,6 @@ static void direct_link_modifiers(BlendDataReader *reader, ListBase *lb, Object psmd->facepa = NULL; } - else if (md->type == eModifierType_MeshDeform) { - MeshDeformModifierData *mmd = (MeshDeformModifierData *)md; - - BLO_read_data_address(reader, &mmd->bindinfluences); - BLO_read_int32_array(reader, mmd->totvert + 1, &mmd->bindoffsets); - BLO_read_float3_array(reader, mmd->totcagevert, &mmd->bindcagecos); - BLO_read_data_address(reader, &mmd->dyngrid); - BLO_read_data_address(reader, &mmd->dyninfluences); - BLO_read_int32_array(reader, mmd->totvert, &mmd->dynverts); - - BLO_read_float_array(reader, mmd->totvert, &mmd->bindweights); - BLO_read_float3_array(reader, mmd->totcagevert, &mmd->bindcos); - } 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 fbd11ef5323..a40cc4c3ad2 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1757,17 +1757,6 @@ static void write_modifiers(BlendWriter *writer, 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; - - BLO_write_struct_array(writer, MDefInfluence, mmd->totinfluence, mmd->bindinfluences); - BLO_write_int32_array(writer, mmd->totvert + 1, mmd->bindoffsets); - BLO_write_float3_array(writer, 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_int32_array(writer, 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 f324a6f92b9..e53de598218 100644 --- a/source/blender/modifiers/intern/MOD_meshdeform.c +++ b/source/blender/modifiers/intern/MOD_meshdeform.c @@ -49,6 +49,8 @@ #include "UI_interface.h" #include "UI_resources.h" +#include "BLO_read_write.h" + #include "RNA_access.h" #include "MEM_guardedalloc.h" @@ -607,6 +609,35 @@ static void panelRegister(ARegionType *region_type) modifier_panel_register(region_type, eModifierType_MeshDeform, panel_draw); } +static void blendWrite(BlendWriter *writer, const ModifierData *md) +{ + MeshDeformModifierData *mmd = (MeshDeformModifierData *)md; + int size = mmd->dyngridsize; + + BLO_write_struct_array(writer, MDefInfluence, mmd->totinfluence, mmd->bindinfluences); + BLO_write_int32_array(writer, mmd->totvert + 1, mmd->bindoffsets); + BLO_write_float3_array(writer, 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_int32_array(writer, mmd->totvert, mmd->dynverts); +} + +static void blendRead(BlendDataReader *reader, ModifierData *md) +{ + MeshDeformModifierData *mmd = (MeshDeformModifierData *)md; + + BLO_read_data_address(reader, &mmd->bindinfluences); + BLO_read_int32_array(reader, mmd->totvert + 1, &mmd->bindoffsets); + BLO_read_float3_array(reader, mmd->totcagevert, &mmd->bindcagecos); + BLO_read_data_address(reader, &mmd->dyngrid); + BLO_read_data_address(reader, &mmd->dyninfluences); + BLO_read_int32_array(reader, mmd->totvert, &mmd->dynverts); + + /* Deprecated storage. */ + BLO_read_float_array(reader, mmd->totvert, &mmd->bindweights); + BLO_read_float3_array(reader, mmd->totcagevert, &mmd->bindcos); +} + ModifierTypeInfo modifierType_MeshDeform = { /* name */ "MeshDeform", /* structName */ "MeshDeformModifierData", @@ -638,6 +669,6 @@ ModifierTypeInfo modifierType_MeshDeform = { /* foreachTexLink */ NULL, /* freeRuntimeData */ NULL, /* panelRegister */ panelRegister, - /* blendWrite */ NULL, - /* blendRead */ NULL, + /* blendWrite */ blendWrite, + /* blendRead */ blendRead, }; -- cgit v1.2.3