[Bf-blender-cvs] [0203b352722] lineart-fn-cached: LineArt: Only get limits for cached modifiers.

YimingWu noreply at git.blender.org
Tue Jun 15 14:09:24 CEST 2021


Commit: 0203b352722f44db342b1dbf8727d4f987b04fce
Author: YimingWu
Date:   Tue Jun 15 00:42:57 2021 +0800
Branches: lineart-fn-cached
https://developer.blender.org/rB0203b352722f44db342b1dbf8727d4f987b04fce

LineArt: Only get limits for cached modifiers.

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

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

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

diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index a70fd935046..04d8c98448e 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -205,13 +205,16 @@ bool BKE_gpencil_has_transform_modifiers(Object *ob)
 
 void BKE_gpencil_get_lineart_modifier_limits(Object *ob, struct GpencilLineartLimitInfo *info)
 {
+  bool is_first = true;
   LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) {
     if (md->type == eGpencilModifierType_Lineart) {
       LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md;
-      info->min_level = MIN2(info->min_level, lmd->level_start);
-      info->max_level = MAX2(info->max_level,
-                             (lmd->use_multiple_levels ? lmd->level_end : lmd->level_start));
-      info->edge_types |= lmd->edge_types;
+      if (is_first || (lmd->flags & LRT_GPENCIL_USE_CACHE)) {
+        info->min_level = MIN2(info->min_level, lmd->level_start);
+        info->max_level = MAX2(info->max_level,
+                               (lmd->use_multiple_levels ? lmd->level_end : lmd->level_start));
+        info->edge_types |= lmd->edge_types;
+      }
     }
   }
 }
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index f45dea0b90b..72cb78c4bf7 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -2858,11 +2858,14 @@ 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;
 
-  rb->use_contour = (lmd->edge_types_override & LRT_EDGE_FLAG_CONTOUR) != 0;
-  rb->use_crease = (lmd->edge_types_override & LRT_EDGE_FLAG_CREASE) != 0;
-  rb->use_material = (lmd->edge_types_override & LRT_EDGE_FLAG_MATERIAL) != 0;
-  rb->use_edge_marks = (lmd->edge_types_override & LRT_EDGE_FLAG_EDGE_MARK) != 0;
-  rb->use_intersections = (lmd->edge_types_override & LRT_EDGE_FLAG_INTERSECTION) != 0;
+  int16_t edge_types = (lmd->flags & LRT_GPENCIL_USE_CACHE) ? lmd->edge_types_override :
+                                                              lmd->edge_types;
+
+  rb->use_contour = (edge_types & LRT_EDGE_FLAG_CONTOUR) != 0;
+  rb->use_crease = (edge_types & LRT_EDGE_FLAG_CREASE) != 0;
+  rb->use_material = (edge_types & LRT_EDGE_FLAG_MATERIAL) != 0;
+  rb->use_edge_marks = (edge_types & LRT_EDGE_FLAG_EDGE_MARK) != 0;
+  rb->use_intersections = (edge_types & LRT_EDGE_FLAG_INTERSECTION) != 0;
 
   rb->chain_data_pool = &lc->chain_data_pool;
 
@@ -3874,7 +3877,9 @@ bool MOD_lineart_compute_feature_lines(Depsgraph *depsgraph,
 
   /* This is used to limit calculation to a certain level to save time, lines who have higher
    * occlusion levels will get ignored. */
-  rb->max_occlusion_level = lmd->level_end_override;
+  rb->max_occlusion_level = (lmd->flags & LRT_GPENCIL_USE_CACHE) ?
+                                lmd->level_end_override :
+                                (lmd->use_multiple_levels ? lmd->level_end : lmd->level_start);
 
   /* FIXME(Yiming): See definition of int #LineartRenderBuffer::_source_type for detailed. */
   rb->_source_type = lmd->source_type;



More information about the Bf-blender-cvs mailing list