Fix (unreported) Dynamic Paint modifier not increasing ID usercount in copy function.
authorBastien Montagne <montagne29@wanadoo.fr>
Mon, 19 Jun 2017 10:25:41 +0000 (12:25 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Mon, 19 Jun 2017 10:25:41 +0000 (12:25 +0200)
*Sigh* One more example of why we should keep ID management handling in
as few places as possible! It's impossible to keep more than a few
places in sync regarding which ID pointer is refcounted etc.

source/blender/modifiers/intern/MOD_dynamicpaint.c

index bb75d65580243a3e02454a8e72ee9e24cf18be09..d54e052e438b8ead4cd0323fd9164a56c756271b 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "BKE_cdderivedmesh.h"
 #include "BKE_dynamicpaint.h"
+#include "BKE_library.h"
 #include "BKE_library_query.h"
 #include "BKE_modifier.h"
 
@@ -58,6 +59,15 @@ static void copyData(ModifierData *md, ModifierData *target)
        DynamicPaintModifierData *tpmd = (DynamicPaintModifierData *)target;
        
        dynamicPaint_Modifier_copy(pmd, tpmd);
+
+       if (tpmd->canvas) {
+               for (DynamicPaintSurface *surface = tpmd->canvas->surfaces.first; surface; surface = surface->next) {
+                       id_us_plus(surface->init_texture);
+               }
+       }
+       if (tpmd->brush) {
+               id_us_plus(tpmd->brush->mat);
+       }
 }
 
 static void freeData(ModifierData *md)