[Bf-blender-cvs] [2c4d682eddc] temp-lineart-contained: LineArt: First run cache bug.

YimingWu noreply at git.blender.org
Tue Jun 15 07:43:29 CEST 2021


Commit: 2c4d682eddc57f7bad1c7b3eb729926e1da60e70
Author: YimingWu
Date:   Tue Jun 15 13:15:03 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB2c4d682eddc57f7bad1c7b3eb729926e1da60e70

LineArt: First run cache bug.

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

M	source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
M	source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c

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

diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
index 8ed527c0bcb..425a1d801f1 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
@@ -178,7 +178,9 @@ static void generateStrokes(GpencilModifierData *md, Depsgraph *depsgraph, Objec
 
   if (!(lmd->flags & LRT_GPENCIL_USE_CACHE)) {
     /* Clear local cache. */
-    MOD_lineart_clear_cache(&local_lc);
+    if (local_lc != gpd->runtime.lineart_cache) {
+      MOD_lineart_clear_cache(&local_lc);
+    }
     /* Restore the original cache pointer so the modifiers below still have access to the "global"
      * cache. */
     lmd->cache = gpd->runtime.lineart_cache;
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
index 0dda993fce2..778aec98e48 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
@@ -88,8 +88,12 @@ static void clear_strokes(Object *ob, GpencilModifierData *md, int frame)
   BKE_gpencil_layer_frame_delete(gpl, gpf);
 }
 
-static bool bake_strokes(
-    Object *ob, Depsgraph *dg, LineartCache **lc, GpencilModifierData *md, int frame)
+static bool bake_strokes(Object *ob,
+                         Depsgraph *dg,
+                         LineartCache **lc,
+                         GpencilModifierData *md,
+                         int frame,
+                         bool is_first)
 {
   /* Modifier data sanity check. */
   if (lineart_mod_is_disabled(md)) {
@@ -118,7 +122,7 @@ static bool bake_strokes(
     MOD_lineart_destroy_render_data(lmd);
   }
   else {
-    if (!(lmd->flags & LRT_GPENCIL_USE_CACHE)) {
+    if (is_first || (!(lmd->flags & LRT_GPENCIL_USE_CACHE))) {
       MOD_lineart_compute_feature_lines(dg, lmd, &local_lc, (!(ob->dtx & OB_DRAW_IN_FRONT)));
       MOD_lineart_destroy_render_data(lmd);
     }
@@ -150,7 +154,9 @@ static bool bake_strokes(
 
   if (!(lmd->flags & LRT_GPENCIL_USE_CACHE)) {
     /* Clear local cache. */
-    MOD_lineart_clear_cache(&local_lc);
+    if (!is_first) {
+      MOD_lineart_clear_cache(&local_lc);
+    }
     /* Restore the original cache pointer so the modifiers below still have access to the "global"
      * cache. */
     lmd->cache = gpd->runtime.lineart_cache;
@@ -196,14 +202,16 @@ static bool lineart_gpencil_bake_single_target(LineartBakeJob *bj, Object *ob, i
   GpencilLineartLimitInfo info = {0};
   BKE_gpencil_get_lineart_modifier_limits(ob, &info);
 
-  LineartCache *lc;
+  LineartCache *lc = NULL;
+  bool is_first = true;
   LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) {
     if (md->type != eGpencilModifierType_Lineart) {
       continue;
     }
     BKE_gpencil_set_lineart_global_limits(md, &info);
-    if (bake_strokes(ob, bj->dg, &lc, md, frame)) {
+    if (bake_strokes(ob, bj->dg, &lc, md, frame, is_first)) {
       touched = true;
+      is_first = false;
     }
   }
   MOD_lineart_clear_cache(&lc);



More information about the Bf-blender-cvs mailing list