[Bf-blender-cvs] [8703dafb514] greasepencil-object: Fix crash on tweaking greasepencil modifier

Dalai Felinto noreply at git.blender.org
Wed Jun 20 18:34:56 CEST 2018


Commit: 8703dafb51460ca888f4ec24b4ce9337cb069992
Author: Dalai Felinto
Date:   Wed Jun 20 18:28:24 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB8703dafb51460ca888f4ec24b4ce9337cb069992

Fix crash on tweaking greasepencil modifier

We were missing a proper copy of modifiers.

Note: there was a warning for the function not being declared in any header
it should be enough to find the error by following the warning.

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

M	source/blender/blenkernel/BKE_gpencil_modifier.h
M	source/blender/blenkernel/intern/object.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 35464035a4b..540bb57c004 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -236,6 +236,7 @@ struct GpencilModifierData *BKE_gpencil_modifiers_findByType(struct Object *ob,
 struct GpencilModifierData *BKE_gpencil_modifiers_findByName(struct Object *ob, const char *name);
 void BKE_gpencil_modifier_copyData_generic(const struct GpencilModifierData *md_src, struct GpencilModifierData *md_dst);
 void BKE_gpencil_modifier_copyData(struct GpencilModifierData *md, struct GpencilModifierData *target);
+void BKE_gpencil_modifier_copyData_ex(struct GpencilModifierData *md, struct GpencilModifierData *target, const int flag);
 
 bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
 
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index ede23c6466e..06f4d9f4ded 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -196,12 +196,10 @@ void BKE_object_free_modifiers(Object *ob, const int flag)
 	while ((md = BLI_pophead(&ob->modifiers))) {
 		modifier_free_ex(md, flag);
 	}
-#if 0	/* FIXME */
-	/* grease pencil */
+
 	while ((gp_md = BLI_pophead(&ob->greasepencil_modifiers))) {
 		BKE_gpencil_modifier_free_ex(gp_md, flag);
 	}
-#endif
 	/* particle modifiers were freed, so free the particlesystems as well */
 	BKE_object_free_particlesystems(ob);
 
@@ -1220,6 +1218,7 @@ void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src)
 void BKE_object_copy_data(Main *UNUSED(bmain), Object *ob_dst, const Object *ob_src, const int flag)
 {
 	ModifierData *md;
+	GpencilModifierData *gmd;
 
 	/* We never handle usercount here for own data. */
 	const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT;
@@ -1243,6 +1242,15 @@ void BKE_object_copy_data(Main *UNUSED(bmain), Object *ob_dst, const Object *ob_
 		BLI_addtail(&ob_dst->modifiers, nmd);
 	}
 
+	BLI_listbase_clear(&ob_dst->greasepencil_modifiers);
+
+	for (gmd = ob_src->greasepencil_modifiers.first; gmd; gmd = gmd->next) {
+		GpencilModifierData *nmd = BKE_gpencil_modifier_new(gmd->type);
+		BLI_strncpy(nmd->name, gmd->name, sizeof(nmd->name));
+		BKE_gpencil_modifier_copyData_ex(gmd, nmd, flag_subdata);
+		BLI_addtail(&ob_dst->greasepencil_modifiers, nmd);
+	}
+
 	if (ob_src->pose) {
 		copy_object_pose(ob_dst, ob_src, flag_subdata);
 		/* backwards compat... non-armatures can get poses in older files? */



More information about the Bf-blender-cvs mailing list