[Bf-blender-cvs] [8ec723da8cc] greasepencil-refactor: GPencil: Use existing eval copy for single users

Antonio Vazquez noreply at git.blender.org
Sat Jan 18 11:56:21 CET 2020


Commit: 8ec723da8ccb5eb4b168692b7324e417f2a20693
Author: Antonio Vazquez
Date:   Fri Jan 17 16:32:26 2020 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB8ec723da8ccb5eb4b168692b7324e417f2a20693

GPencil: Use existing eval copy for single users

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

M	source/blender/blenkernel/intern/gpencil_modifier.c

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

diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index a1c855b00c2..454b826e2a5 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -825,8 +825,10 @@ static void gpencil_copy_activeframe_to_eval(
   gpd_eval->runtime = runtime;
   gpd_eval->mat = MEM_dupallocN(gpd_orig->mat);
 
-  /* Assign. */
-  ob->data = ob->runtime.gpd_eval;
+  /* Assign (can be NULL if reuse eval copy done by depsgraph). */
+  if (ob->runtime.gpd_eval != NULL) {
+    ob->data = ob->runtime.gpd_eval;
+  }
 
   int layer_index = -1;
   LISTBASE_FOREACH (bGPDlayer *, gpl_orig, &gpd_orig->layers) {
@@ -880,6 +882,7 @@ void BKE_gpencil_prepare_eval_data(Depsgraph *depsgraph, Scene *scene, Object *o
 {
   bGPdata *gpd_eval = (bGPdata *)ob->data;
   Object *ob_orig = (Object *)DEG_get_original_id(&ob->id);
+  bGPdata *gpd_orig = (bGPdata *)ob_orig->data;
 
   const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd_eval);
   const bool do_modifiers = (bool)((!is_multiedit) && (ob->greasepencil_modifiers.first != NULL) &&
@@ -890,15 +893,15 @@ void BKE_gpencil_prepare_eval_data(Depsgraph *depsgraph, Scene *scene, Object *o
   DEG_debug_print_eval(depsgraph, __func__, gpd_eval->id.name, gpd_eval);
 
   /* If only one user, don't need a new copy, just update data. */
-  if (DEG_is_active(depsgraph) && (gpd_eval->id.us == 1)) {
+  if (gpd_orig->id.us == 1) {
+    ob->runtime.gpd_eval = NULL;
     gpencil_copy_activeframe_to_eval(depsgraph, scene, ob, ob_orig->data, gpd_eval);
     return;
   }
 
-  /* More than one user: If first time, do a full copy. */
+  /* If first time, do a full copy. */
   if (ob->runtime.gpd_orig == NULL) {
-    ob->runtime.gpd_orig = (bGPdata *)DEG_get_original_id(&gpd_eval->id);
-
+    ob->runtime.gpd_orig = gpd_orig;
     /* Copy Datablock to evaluated version. */
     if (ob->runtime.gpd_eval != NULL) {
       BKE_gpencil_eval_delete(ob->runtime.gpd_eval);



More information about the Bf-blender-cvs mailing list