[Bf-blender-cvs] [fad1d746c87] lineart-fn-cached: LineArt: Respect cache override limits.

YimingWu noreply at git.blender.org
Tue Jun 15 15:36:56 CEST 2021


Commit: fad1d746c8776a16c3592ce39b38c6bae98107ed
Author: YimingWu
Date:   Tue Jun 15 21:36:23 2021 +0800
Branches: lineart-fn-cached
https://developer.blender.org/rBfad1d746c8776a16c3592ce39b38c6bae98107ed

LineArt: Respect cache override limits.

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

M	source/blender/blenkernel/BKE_gpencil_modifier.h
M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M	source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 074453cbd50..c8ee21a6770 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -304,7 +304,8 @@ void BKE_gpencil_get_lineart_modifier_limits(struct Object *ob,
                                              struct GpencilLineartLimitInfo *info);
 
 void BKE_gpencil_set_lineart_modifier_limits(struct GpencilModifierData *md,
-                                             struct GpencilLineartLimitInfo *info);
+                                             struct GpencilLineartLimitInfo *info,
+                                             bool is_first_lineart);
 bool BKE_gpencil_is_first_lineart_in_stack(struct Object *ob, struct GpencilModifierData *md);
 
 void BKE_gpencil_lattice_init(struct Object *ob);
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index 04d8c98448e..1344e3b55f9 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -220,13 +220,21 @@ void BKE_gpencil_get_lineart_modifier_limits(Object *ob, struct GpencilLineartLi
 }
 
 void BKE_gpencil_set_lineart_modifier_limits(GpencilModifierData *md,
-                                             struct GpencilLineartLimitInfo *info)
+                                             struct GpencilLineartLimitInfo *info,
+                                             bool is_first_lineart)
 {
   BLI_assert(md->type == eGpencilModifierType_Lineart);
   LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md;
-  lmd->level_start_override = info->min_level;
-  lmd->level_end_override = info->max_level;
-  lmd->edge_types_override = info->edge_types;
+  if (is_first_lineart || lmd->flags & LRT_GPENCIL_USE_CACHE) {
+    lmd->level_start_override = info->min_level;
+    lmd->level_end_override = info->max_level;
+    lmd->edge_types_override = info->edge_types;
+  }
+  else {
+    lmd->level_start_override = lmd->level_start;
+    lmd->level_end_override = lmd->level_end;
+    lmd->edge_types_override = lmd->edge_types;
+  }
 }
 
 bool BKE_gpencil_is_first_lineart_in_stack(Object *ob, GpencilModifierData *md)
@@ -816,6 +824,7 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
   BKE_gpencil_lattice_init(ob);
 
   const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
+  bool is_first_lineart = true;
   GpencilLineartLimitInfo info = {0};
   BKE_gpencil_get_lineart_modifier_limits(ob, &info);
 
@@ -829,7 +838,8 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
       }
 
       if (md->type == eGpencilModifierType_Lineart) {
-        BKE_gpencil_set_lineart_modifier_limits(md, &info);
+        BKE_gpencil_set_lineart_modifier_limits(md, &info, is_first_lineart);
+        is_first_lineart = false;
       }
 
       /* Apply geometry modifiers (add new geometry). */
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 72cb78c4bf7..24d94079464 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -2813,7 +2813,7 @@ static LineartRenderBuffer *lineart_create_render_buffer(Scene *scene,
 
   lmd->cache = lc;
   lmd->render_buffer_ptr = rb;
-  lc->rb_edge_types = LRT_EDGE_FLAG_ALL_TYPE;
+  lc->rb_edge_types = lmd->edge_types_override;
 
   if (!scene || !scene->camera || !lc) {
     return NULL;
@@ -2858,8 +2858,7 @@ static LineartRenderBuffer *lineart_create_render_buffer(Scene *scene,
   /* See lineart_edge_from_triangle() for how this option may impact performance. */
   rb->allow_overlapping_edges = (lmd->calculation_flags & LRT_ALLOW_OVERLAPPING_EDGES) != 0;
 
-  int16_t edge_types = (lmd->flags & LRT_GPENCIL_USE_CACHE) ? lmd->edge_types_override :
-                                                              lmd->edge_types;
+  int16_t edge_types = lmd->edge_types_override;
 
   rb->use_contour = (edge_types & LRT_EDGE_FLAG_CONTOUR) != 0;
   rb->use_crease = (edge_types & LRT_EDGE_FLAG_CREASE) != 0;
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
index 18ca7fe66be..0c3aee280df 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
@@ -207,7 +207,7 @@ static bool lineart_gpencil_bake_single_target(LineartBakeJob *bj, Object *ob, i
     if (md->type != eGpencilModifierType_Lineart) {
       continue;
     }
-    BKE_gpencil_set_lineart_modifier_limits(md, &info);
+    BKE_gpencil_set_lineart_modifier_limits(md, &info, is_first);
     if (bake_strokes(ob, bj->dg, &lc, md, frame, is_first)) {
       touched = true;
       is_first = false;



More information about the Bf-blender-cvs mailing list