[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