[Bf-blender-cvs] [23a071ee6c8] blenloader-api: update dynamic paint
Jacques Lucke
noreply at git.blender.org
Sat Mar 7 19:09:29 CET 2020
Commit: 23a071ee6c8ba9b80e25a23fdbc1a176d9659c37
Author: Jacques Lucke
Date: Sat Mar 7 18:56:28 2020 +0100
Branches: blenloader-api
https://developer.blender.org/rB23a071ee6c8ba9b80e25a23fdbc1a176d9659c37
update dynamic paint
===================================================================
M source/blender/blenloader/intern/readfile.c
M source/blender/blenloader/intern/writefile.c
M source/blender/modifiers/intern/MOD_dynamicpaint.c
===================================================================
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 63fadc9d54b..f7af2fea719 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5371,37 +5371,6 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb, Object *ob)
}
}
}
- else if (md->type == eModifierType_DynamicPaint) {
- DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md;
-
- if (pmd->canvas) {
- pmd->canvas = newdataadr(fd, pmd->canvas);
- pmd->canvas->pmd = pmd;
- pmd->canvas->flags &= ~MOD_DPAINT_BAKING; /* just in case */
-
- if (pmd->canvas->surfaces.first) {
- DynamicPaintSurface *surface;
- link_list(fd, &pmd->canvas->surfaces);
-
- for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
- surface->canvas = pmd->canvas;
- surface->data = NULL;
- BKE_ptcache_blo_read(wrap_reader(fd), &(surface->ptcaches), &(surface->pointcache), 1);
-
- if (!(surface->effector_weights = newdataadr(fd, surface->effector_weights))) {
- surface->effector_weights = BKE_effector_add_weights(NULL);
- }
- }
- }
- }
- if (pmd->brush) {
- pmd->brush = newdataadr(fd, pmd->brush);
- pmd->brush->pmd = pmd;
- pmd->brush->psys = newdataadr(fd, pmd->brush->psys);
- pmd->brush->paint_ramp = newdataadr(fd, pmd->brush->paint_ramp);
- pmd->brush->vel_ramp = newdataadr(fd, pmd->brush->vel_ramp);
- }
- }
else if (md->type == eModifierType_Collision) {
CollisionModifierData *collmd = (CollisionModifierData *)md;
#if 0
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index fbe59c84ecd..6b9bec6a326 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1617,30 +1617,6 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
writestruct(wd, DATA, FluidsimSettings, 1, fluidmd->fss);
}
- else if (md->type == eModifierType_DynamicPaint) {
- DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md;
-
- if (pmd->canvas) {
- DynamicPaintSurface *surface;
- writestruct(wd, DATA, DynamicPaintCanvasSettings, 1, pmd->canvas);
-
- /* write surfaces */
- for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
- writestruct(wd, DATA, DynamicPaintSurface, 1, surface);
- }
- /* write caches and effector weights */
- for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
- BKE_ptcache_blo_write_list(wrap_writer(wd), &(surface->ptcaches));
-
- writestruct(wd, DATA, EffectorWeights, 1, surface->effector_weights);
- }
- }
- if (pmd->brush) {
- writestruct(wd, DATA, DynamicPaintBrushSettings, 1, pmd->brush);
- writestruct(wd, DATA, ColorBand, 1, pmd->brush->paint_ramp);
- writestruct(wd, DATA, ColorBand, 1, pmd->brush->vel_ramp);
- }
- }
else if (md->type == eModifierType_Collision) {
#if 0
diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c
index 9e4ded21d06..076266048b2 100644
--- a/source/blender/modifiers/intern/MOD_dynamicpaint.c
+++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c
@@ -29,16 +29,20 @@
#include "DNA_mesh_types.h"
#include "BKE_dynamicpaint.h"
+#include "BKE_effect.h"
#include "BKE_layer.h"
#include "BKE_lib_query.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
+#include "BKE_pointcache.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
#include "DEG_depsgraph_physics.h"
#include "DEG_depsgraph_query.h"
+#include "BLO_callback_api.h"
+
#include "MOD_modifiertypes.h"
static void initData(ModifierData *md)
@@ -100,6 +104,66 @@ static void requiredDataMask(Object *UNUSED(ob),
}
}
+static void bloWrite(BloWriter *writer, const ModifierData *md)
+{
+ DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md;
+
+ if (pmd->canvas) {
+ DynamicPaintSurface *surface;
+ BLO_write_struct(writer, DynamicPaintCanvasSettings, pmd->canvas);
+
+ /* write surfaces */
+ for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
+ BLO_write_struct(writer, DynamicPaintSurface, surface);
+ }
+ /* write caches and effector weights */
+ for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
+ BKE_ptcache_blo_write_list(writer, &(surface->ptcaches));
+ BLO_write_struct(writer, EffectorWeights, surface->effector_weights);
+ }
+ }
+ if (pmd->brush) {
+ BLO_write_struct(writer, DynamicPaintBrushSettings, pmd->brush);
+ BLO_write_struct(writer, ColorBand, pmd->brush->paint_ramp);
+ BLO_write_struct(writer, ColorBand, pmd->brush->vel_ramp);
+ }
+}
+
+static void bloRead(BloReader *reader, ModifierData *md)
+{
+ DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md;
+
+ if (pmd->canvas) {
+ BLO_read_update_address(reader, pmd->canvas);
+ pmd->canvas->pmd = pmd;
+ pmd->canvas->flags &= ~MOD_DPAINT_BAKING; /* just in case */
+
+ if (pmd->canvas->surfaces.first) {
+ DynamicPaintSurface *surface;
+ BLO_read_list(reader, &pmd->canvas->surfaces, NULL);
+
+ for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
+ surface->canvas = pmd->canvas;
+ surface->data = NULL;
+ BKE_ptcache_blo_read(reader, &(surface->ptcaches), &(surface->pointcache), 1);
+
+ BLO_read_update_address(reader, surface->effector_weights);
+ if (surface->effector_weights == NULL) {
+ surface->effector_weights = BKE_effector_add_weights(NULL);
+ }
+ }
+ }
+ }
+ if (pmd->brush) {
+ BLO_read_update_address(reader, pmd->brush);
+ pmd->brush->pmd = pmd;
+
+ BLO_read_update_address(reader, pmd->brush->psys);
+ BLO_read_update_address(reader, pmd->brush->paint_ramp);
+ BLO_read_update_address(reader, pmd->brush->vel_ramp);
+ }
+}
+
static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
{
DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md;
@@ -200,6 +264,6 @@ ModifierTypeInfo modifierType_DynamicPaint = {
/* foreachIDLink */ foreachIDLink,
/* foreachTexLink */ foreachTexLink,
/* freeRuntimeData */ freeRuntimeData,
- /* bloWrite */ NULL,
- /* bloRead */ NULL,
+ /* bloWrite */ bloWrite,
+ /* bloRead */ bloRead,
};
More information about the Bf-blender-cvs
mailing list