[Bf-blender-cvs] [4251a87bf60] blender-v2.90-release: Fix usercount not decrementing in `gpencil_stroke_separate_exec`

Philipp Oeser noreply at git.blender.org
Thu Jul 30 13:02:01 CEST 2020


Commit: 4251a87bf60eece32ae9ff7a7c481f029a1d2d84
Author: Philipp Oeser
Date:   Wed Jul 29 12:53:49 2020 +0200
Branches: blender-v2.90-release
https://developer.blender.org/rB4251a87bf60eece32ae9ff7a7c481f029a1d2d84

Fix usercount not decrementing in `gpencil_stroke_separate_exec`

This is part of T79273 where separating a stroke would result in
multiuser gpencil data for the original object.
Real underlying issue seems to be that gpencil multiuser objects (also
the ones created by Alt+D duplicating) have a problem evaluating
modifiers correctly [this will need further investigation].
Not sure if this is a limitation of D5470?

This patch only corrects the usercount on separating [which already fixes
the scenario reported because singleuser gpencil modifiers work
correctly].

Note: we could have also called `ED_object_add_duplicate` with the
`USER_DUP_GPENCIL` dupflag -- that would have taken care of the usercount
--, but then the whole following logic in `gpencil_stroke_separate_exec`
would need to change from **adding** layers/frames/strokes to
**removing** these.

Part of T79273

Maniphest Tasks: T79273

Differential Revision: https://developer.blender.org/D8419

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

M	source/blender/editors/gpencil/gpencil_edit.c

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

diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index f8010edfcdd..286efeeff01 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -4283,8 +4283,11 @@ static int gpencil_stroke_separate_exec(bContext *C, wmOperator *op)
   base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_prev, dupflag);
   ob_dst = base_new->object;
   ob_dst->mode = OB_MODE_OBJECT;
-  /* create new grease pencil datablock */
+  /* Duplication will increment bGPdata usercount, but since we create a new greasepencil datablock
+   * for ob_dst (which gets its own user automatically), we have to decrement the usercount again.
+   */
   gpd_dst = BKE_gpencil_data_addnew(bmain, gpd_src->id.name + 2);
+  id_us_min(ob_dst->data);
   ob_dst->data = (bGPdata *)gpd_dst;
 
   /* loop old datablock and separate parts */



More information about the Bf-blender-cvs mailing list