[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