[Bf-blender-cvs] [35a6d9ec553] blender2.8: ID copy: Add flag which allows custom data to reference original datablock

Sergey Sharybin noreply at git.blender.org
Wed May 30 15:08:04 CEST 2018


Commit: 35a6d9ec553826353cbb849d2ac483ec192fe171
Author: Sergey Sharybin
Date:   Wed May 30 14:59:52 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB35a6d9ec553826353cbb849d2ac483ec192fe171

ID copy: Add flag which allows custom data to reference original datablock

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

M	source/blender/blenkernel/BKE_library.h
M	source/blender/blenkernel/intern/mesh.c

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

diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index 57b509da3a4..8d9da7a5bf2 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -84,6 +84,7 @@ enum {
 	LIB_ID_COPY_KEEP_LIB           = 1 << 20,  /* Keep the library pointer when copying datablock outside of bmain. */
 	LIB_ID_COPY_NO_ANIMDATA        = 1 << 21,  /* Don't copy id->adt, used by ID datablock localization routines. */
 	LIB_ID_COPY_SHAPEKEY           = 1 << 22,  /* EXCEPTION! Deep-copy shapekeys used by copied obdata ID. */
+	LIB_ID_COPY_CD_REFERENCE       = 1 << 23,
 };
 
 void BKE_libblock_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, const int flag);
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 6e8a4d55c69..d27809586c2 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -543,12 +543,13 @@ void BKE_mesh_copy_data(Main *bmain, Mesh *me_dst, const Mesh *me_src, const int
 
 	me_dst->mat = MEM_dupallocN(me_src->mat);
 
-	CustomData_copy(&me_src->vdata, &me_dst->vdata, mask, CD_DUPLICATE, me_dst->totvert);
-	CustomData_copy(&me_src->edata, &me_dst->edata, mask, CD_DUPLICATE, me_dst->totedge);
-	CustomData_copy(&me_src->ldata, &me_dst->ldata, mask, CD_DUPLICATE, me_dst->totloop);
-	CustomData_copy(&me_src->pdata, &me_dst->pdata, mask, CD_DUPLICATE, me_dst->totpoly);
+	const eCDAllocType alloc_type = (flag & LIB_ID_COPY_CD_REFERENCE) ? CD_REFERENCE : CD_DUPLICATE;
+	CustomData_copy(&me_src->vdata, &me_dst->vdata, mask, alloc_type, me_dst->totvert);
+	CustomData_copy(&me_src->edata, &me_dst->edata, mask, alloc_type, me_dst->totedge);
+	CustomData_copy(&me_src->ldata, &me_dst->ldata, mask, alloc_type, me_dst->totloop);
+	CustomData_copy(&me_src->pdata, &me_dst->pdata, mask, alloc_type, me_dst->totpoly);
 	if (do_tessface) {
-		CustomData_copy(&me_src->fdata, &me_dst->fdata, mask, CD_DUPLICATE, me_dst->totface);
+		CustomData_copy(&me_src->fdata, &me_dst->fdata, mask, alloc_type, me_dst->totface);
 	}
 	else {
 		mesh_tessface_clear_intern(me_dst, false);



More information about the Bf-blender-cvs mailing list