Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-03-07 19:41:13 +0300
committerJacques Lucke <jacques@blender.org>2020-03-07 19:41:13 +0300
commit520db97acf83d8b6bf9751f2c6d8feb4f308b50e (patch)
treef8a390d73030df60e7d335eb2f20011c8ddb9536
parent6f77056dca02b44eba99b990c7dfc461708d526e (diff)
move meshdeform modifier writing/reading
-rw-r--r--source/blender/blenloader/BLO_callback_api.h4
-rw-r--r--source/blender/blenloader/intern/readfile.c31
-rw-r--r--source/blender/blenloader/intern/writefile.c11
-rw-r--r--source/blender/modifiers/intern/MOD_meshdeform.c36
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,
};