[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