Commit: 44b1680fbf2f8bd34d45fb69527e59118197800f
Author: Bastien Montagne
Date:   Mon Jun 19 12:16:46 2017 +0200
Branches: id_copy_refactor
https://developer.blender.org/rB44b1680fbf2f8bd34d45fb69527e59118197800f

WIP

===================================================================

M       source/blender/blenkernel/intern/modifier.c
M       source/blender/modifiers/intern/MOD_armature.c
M       source/blender/modifiers/intern/MOD_bevel.c
M       source/blender/modifiers/intern/MOD_displace.c

===================================================================

diff --git a/source/blender/blenkernel/intern/modifier.c 
b/source/blender/blenkernel/intern/modifier.c
index 2276d56b9c6..1dc11e870d4 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -59,6 +59,8 @@
 
 #include "BKE_appdir.h"
 #include "BKE_key.h"
+#include "BKE_library.h"
+#include "BKE_library_query.h"
 #include "BKE_multires.h"
 #include "BKE_DerivedMesh.h"
 
@@ -269,14 +271,37 @@ void modifier_copyData_generic(const ModifierData 
*md_src, ModifierData *md_dst)
        memcpy(md_dst_data, md_src_data, (size_t)mti->structSize - data_size);
 }
 
-void modifier_copyData(ModifierData *md, ModifierData *target)
+static void modifier_copy_data_id_us_cb(void *UNUSED(userData), Object 
*UNUSED(ob), ID **idpoin, int cb_flag)
+{
+       ID *id = *idpoin;
+       if (id != NULL && (cb_flag & IDWALK_CB_USER) != 0) {
+               id_us_plus(id);
+       }
+}
+
+void modifier_copyData_ex(ModifierData *md, ModifierData *target, const int 
flag)
 {
        const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 
        target->mode = md->mode;
 
-       if (mti->copyData)
+       if (mti->copyData) {
                mti->copyData(md, target);
+       }
+
+       if ((flag & LIB_ID_COPY_NO_USER_REFCOUNT) == 0) {
+               if (mti->foreachIDLink) {
+                       mti->foreachIDLink(target, NULL, 
modifier_copy_data_id_us_cb, NULL);
+               }
+               else if (mti->foreachObjectLink) {
+                       mti->foreachObjectLink(target, NULL, (ObjectWalkFunc 
*)modifier_copy_data_id_us_cb, NULL);
+               }
+       }
+}
+
+void modifier_copyData(ModifierData *md, ModifierData *target)
+{
+       modifier_copyData_ex(md, target, 0);
 }
 
 
diff --git a/source/blender/modifiers/intern/MOD_armature.c 
b/source/blender/modifiers/intern/MOD_armature.c
index 2400dbcb898..f2f76f13883 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -64,13 +64,13 @@ static void initData(ModifierData *md)
 
 static void copyData(ModifierData *md, ModifierData *target)
 {
+#if 0
        ArmatureModifierData *amd = (ArmatureModifierData *) md;
+#endif
        ArmatureModifierData *tamd = (ArmatureModifierData *) target;
 
-       tamd->object = amd->object;
-       tamd->deformflag = amd->deformflag;
-       tamd->multi = amd->multi;
-       BLI_strncpy(tamd->defgrp_name, amd->defgrp_name, 
sizeof(tamd->defgrp_name));
+       modifier_copyData_generic(md, target);
+       tamd->prevCos = NULL;
 }
 
 static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData 
*UNUSED(md))
diff --git a/source/blender/modifiers/intern/MOD_bevel.c 
b/source/blender/modifiers/intern/MOD_bevel.c
index 5874029ae08..93dc0203f83 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -65,19 +65,11 @@ static void initData(ModifierData *md)
 
 static void copyData(ModifierData *md, ModifierData *target)
 {
+#if 0
        BevelModifierData *bmd = (BevelModifierData *) md;
        BevelModifierData *tbmd = (BevelModifierData *) target;
-
-       tbmd->value = bmd->value;
-       tbmd->res = bmd->res;
-       tbmd->flags = bmd->flags;
-       tbmd->val_flags = bmd->val_flags;
-       tbmd->lim_flags = bmd->lim_flags;
-       tbmd->e_flags = bmd->e_flags;
-       tbmd->mat = bmd->mat;
-       tbmd->profile = bmd->profile;
-       tbmd->bevel_angle = bmd->bevel_angle;
-       BLI_strncpy(tbmd->defgrp_name, bmd->defgrp_name, 
sizeof(tbmd->defgrp_name));
+#endif
+       modifier_copyData_generic(md, target);
 }
 
 static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
diff --git a/source/blender/modifiers/intern/MOD_displace.c 
b/source/blender/modifiers/intern/MOD_displace.c
index 3325f05025f..fb8c0dd05a5 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -75,14 +75,10 @@ static void copyData(ModifierData *md, ModifierData *target)
 {
 #if 0
        DisplaceModifierData *dmd = (DisplaceModifierData *) md;
-#endif
        DisplaceModifierData *tdmd = (DisplaceModifierData *) target;
+#endif
 
        modifier_copyData_generic(md, target);
-
-       if (tdmd->texture) {
-               id_us_plus(&tdmd->texture->id);
-       }
 }
 
 static void freeData(ModifierData *md)

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to