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; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs