[Bf-blender-cvs] [85779228d02] temp-gpencil-eval: Cleanup: Split assign pointers

Antonio Vazquez noreply at git.blender.org
Tue Jan 14 11:02:11 CET 2020


Commit: 85779228d02d84ddb262a78fa00fcb1a63121f87
Author: Antonio Vazquez
Date:   Tue Jan 14 11:02:04 2020 +0100
Branches: temp-gpencil-eval
https://developer.blender.org/rB85779228d02d84ddb262a78fa00fcb1a63121f87

Cleanup: Split assign pointers

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

M	source/blender/blenkernel/BKE_gpencil_modifier.h
M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/blenkernel/intern/object_update.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 7c9b0f59488..b7dbd388357 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -319,5 +319,8 @@ void BKE_gpencil_modifiers_calc(struct Depsgraph *depsgraph,
                                 struct Object *ob);
 
 void BKE_gpencil_prepare_eval_data(struct Depsgraph *depsgraph, struct Object *ob);
+void BKE_gpencil_update_refences(struct Depsgraph *depsgraph,
+                                 struct Scene *scene,
+                                 struct Object *ob);
 
 #endif /* __BKE_GPENCIL_MODIFIER_H__ */
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index 2a1d880c3b0..3b9434d581a 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -924,7 +924,66 @@ void BKE_gpencil_prepare_eval_data(Depsgraph *depsgraph, Object *ob)
   }
 }
 
-static void gpencil_update_reference_pointers(bGPDframe *gpf_orig, bGPDframe *gpf_eval)
+/* Calculate gpencil modifiers */
+void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
+{
+  bGPdata *gpd = (bGPdata *)ob->data;
+
+  const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
+  const bool is_render = (bool)(DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
+  const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
+  int cfra_eval = (int)DEG_get_ctime(depsgraph);
+
+  /* Init general modifiers data. */
+  if (ob->greasepencil_modifiers.first) {
+    BKE_gpencil_lattice_init(ob);
+  }
+
+  /* *****************************************************************
+   * Loop all layers in eval datablock and apply modifiers.
+   * ******************************************************************/
+  for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+    /* Remap frame (Time modifier) */
+    int remap_cfra = cfra_eval;
+    if (time_remap) {
+      remap_cfra = BKE_gpencil_time_modifier(depsgraph, scene, ob, gpl, cfra_eval, is_render);
+    }
+    bGPDframe *gpf = BKE_gpencil_layer_frame_get(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
+
+    if (gpf == NULL) {
+      continue;
+    }
+
+    /* Apply geometry modifiers (create new geometry). */
+    if (BKE_gpencil_has_geometry_modifiers(ob)) {
+      BKE_gpencil_geometry_modifiers(depsgraph, ob, gpl, gpf, is_render);
+    }
+
+    /* Apply deform modifiers (only change geometry). */
+    for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+      /* Apply modifiers that only deform geometry */
+      BKE_gpencil_stroke_modifiers(depsgraph, ob, gpl, gpf, gps, is_render);
+    }
+
+    /* Generate triangulation for filling in eval copy and verify if any updated is required.
+     * Usually, this is only required the first time because if the stroke is copied by depsgraph,
+     * the original stroke is already ready and don't need more work except if some modifiers
+     * tagged the stroke to be recalc. */
+    for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+      MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
+      if (gp_style) {
+        BKE_gpencil_recalc_geometry_caches(ob, gpl, gp_style, gps);
+      }
+    }
+  }
+
+  /* Clear any lattice data. */
+  if (ob->greasepencil_modifiers.first) {
+    BKE_gpencil_lattice_clear(ob);
+  }
+}
+
+static void gpencil_update_frame_reference_pointers(bGPDframe *gpf_orig, bGPDframe *gpf_eval)
 {
   int stroke_idx = -1;
   for (bGPDstroke *gps = gpf_orig->strokes.first; gps; gps = gps->next) {
@@ -947,16 +1006,14 @@ static void gpencil_update_reference_pointers(bGPDframe *gpf_orig, bGPDframe *gp
   }
 }
 
-/* Calculate gpencil modifiers */
-void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
+void BKE_gpencil_update_refences(Depsgraph *depsgraph, Scene *scene, Object *ob)
 {
-  bGPdata *gpd = (bGPdata *)ob->data;
+  bGPdata *gpd_eval = (bGPdata *)ob->data;
 
   /* use original data to set reference pointers to original data */
   Object *ob_orig = DEG_get_original_object(ob);
   bGPdata *gpd_orig = (bGPdata *)ob_orig->data;
 
-  const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
   const bool is_render = (bool)(DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
   const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
   int cfra_eval = (int)DEG_get_ctime(depsgraph);
@@ -980,7 +1037,7 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
     }
 
     /* Retry evaluated layer. */
-    bGPDlayer *gpl_eval = BLI_findlink(&gpd->layers, layer_idx);
+    bGPDlayer *gpl_eval = BLI_findlink(&gpd_eval->layers, layer_idx);
     if (gpl_eval == NULL) {
       continue;
     }
@@ -990,55 +1047,7 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
     if (gpf_eval == NULL) {
       continue;
     }
-    /* Update reference pointers. */
-    gpencil_update_reference_pointers(gpf_orig, gpf_eval);
-  }
-
-  /* Init general modifiers data. */
-  if (ob->greasepencil_modifiers.first) {
-    BKE_gpencil_lattice_init(ob);
-  }
-
-  /* *****************************************************************
-   * Loop all layers in eval datablock and apply modifiers.
-   * ******************************************************************/
-  for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
-    /* Remap frame (Time modifier) */
-    int remap_cfra = cfra_eval;
-    if (time_remap) {
-      remap_cfra = BKE_gpencil_time_modifier(depsgraph, scene, ob, gpl, cfra_eval, is_render);
-    }
-    bGPDframe *gpf = BKE_gpencil_layer_frame_get(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
-
-    if (gpf == NULL) {
-      continue;
-    }
-
-    /* Apply geometry modifiers (create new geometry). */
-    if (BKE_gpencil_has_geometry_modifiers(ob)) {
-      BKE_gpencil_geometry_modifiers(depsgraph, ob, gpl, gpf, is_render);
-    }
-
-    /* Apply deform modifiers (only change geometry). */
-    for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
-      /* Apply modifiers that only deform geometry */
-      BKE_gpencil_stroke_modifiers(depsgraph, ob, gpl, gpf, gps, is_render);
-    }
-
-    /* Generate triangulation for filling in eval copy and verify if any updated is required.
-     * Usually, this is only required the first time because if the stroke is copied by depsgraph,
-     * the original stroke is already ready and don't need more work except if some modifiers
-     * tagged the stroke to be recalc. */
-    for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
-      MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
-      if (gp_style) {
-        BKE_gpencil_recalc_geometry_caches(ob, gpl, gp_style, gps);
-      }
-    }
-  }
-
-  /* Clear any lattice data. */
-  if (ob->greasepencil_modifiers.first) {
-    BKE_gpencil_lattice_clear(ob);
+    /* Update frame reference pointers. */
+    gpencil_update_frame_reference_pointers(gpf_orig, gpf_eval);
   }
 }
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index 071402815d5..0e010ae469a 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -216,6 +216,7 @@ void BKE_object_handle_data_update(Depsgraph *depsgraph, Scene *scene, Object *o
       break;
     case OB_GPENCIL: {
       BKE_gpencil_prepare_eval_data(depsgraph, ob);
+      BKE_gpencil_update_refences(depsgraph, scene, ob);
       BKE_gpencil_modifiers_calc(depsgraph, scene, ob);
       break;
     }



More information about the Bf-blender-cvs mailing list