Commit: 4e84a49218f341754b8d930660b391dd7e3dc207 Author: YimingWu Date: Mon Jun 14 20:53:16 2021 +0800 Branches: lineart-fn-cached https://developer.blender.org/rB4e84a49218f341754b8d930660b391dd7e3dc207
Lineart: Clean up cache patch. =================================================================== M source/blender/blenkernel/BKE_gpencil_modifier.h M source/blender/blenkernel/intern/gpencil_modifier.c M source/blender/blenloader/intern/versioning_300.c M source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c M source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c M source/blender/makesrna/intern/rna_gpencil_modifier.c =================================================================== diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h index b49a6fa244c..80d632ca9e2 100644 --- a/source/blender/blenkernel/BKE_gpencil_modifier.h +++ b/source/blender/blenkernel/BKE_gpencil_modifier.h @@ -300,12 +300,12 @@ typedef struct GpencilLineartLimitInfo { short edge_types; } GpencilLineartLimitInfo; -void BKE_gpencil_get_lineart_global_limits(struct Object *ob, - struct GpencilLineartLimitInfo *info); +void BKE_gpencil_get_lineart_modifier_limits(struct Object *ob, + struct GpencilLineartLimitInfo *info); -void BKE_gpencil_assign_lineart_global_limits(struct GpencilModifierData *md, - struct GpencilLineartLimitInfo *info); -bool BKE_gpencil_lineart_is_first_run(struct Object *ob, struct GpencilModifierData *md); +void BKE_gpencil_set_lineart_global_limits(struct GpencilModifierData *md, + struct GpencilLineartLimitInfo *info); +bool BKE_gpencil_is_first_lineart_in_stack(struct Object *ob, struct GpencilModifierData *md); void BKE_gpencil_lattice_init(struct Object *ob); void BKE_gpencil_lattice_clear(struct Object *ob); diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c index 83c7938a2ad..f9a91268e09 100644 --- a/source/blender/blenkernel/intern/gpencil_modifier.c +++ b/source/blender/blenkernel/intern/gpencil_modifier.c @@ -203,7 +203,7 @@ bool BKE_gpencil_has_transform_modifiers(Object *ob) return false; } -void BKE_gpencil_get_lineart_global_limits(Object *ob, struct GpencilLineartLimitInfo *info) +void BKE_gpencil_get_lineart_modifier_limits(Object *ob, struct GpencilLineartLimitInfo *info) { LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) { if (md->type == eGpencilModifierType_Lineart) { @@ -216,16 +216,17 @@ void BKE_gpencil_get_lineart_global_limits(Object *ob, struct GpencilLineartLimi } } -void BKE_gpencil_assign_lineart_global_limits(GpencilModifierData *md, - struct GpencilLineartLimitInfo *info) +void BKE_gpencil_set_lineart_global_limits(GpencilModifierData *md, + struct GpencilLineartLimitInfo *info) { + 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; } -bool BKE_gpencil_lineart_is_first_run(Object *ob, GpencilModifierData *md) +bool BKE_gpencil_is_first_lineart_in_stack(Object *ob, GpencilModifierData *md) { if (md->type != eGpencilModifierType_Lineart) { return false; @@ -813,7 +814,7 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob) const bool time_remap = BKE_gpencil_has_time_modifiers(ob); GpencilLineartLimitInfo info = {0}; - BKE_gpencil_get_lineart_global_limits(ob, &info); + BKE_gpencil_get_lineart_modifier_limits(ob, &info); LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) { @@ -825,7 +826,7 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob) } if (md->type == eGpencilModifierType_Lineart) { - BKE_gpencil_assign_lineart_global_limits(md, &info); + BKE_gpencil_set_lineart_global_limits(md, &info); } /* Apply geometry modifiers (add new geometry). */ diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c index 8e44b3254c0..268598ccc51 100644 --- a/source/blender/blenloader/intern/versioning_300.c +++ b/source/blender/blenloader/intern/versioning_300.c @@ -27,7 +27,6 @@ #include "DNA_brush_types.h" #include "DNA_genfile.h" -#include "DNA_gpencil_modifier_types.h" #include "DNA_listBase.h" #include "DNA_modifier_types.h" #include "DNA_text_types.h" @@ -260,18 +259,5 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain) } } } - if (!DNA_struct_elem_find( - fd->filesdna, "LineartGpencilModifierData", "bool", "use_cached_result")) { - LISTBASE_FOREACH (Object *, ob, &bmain->objects) { - if (ob->type == OB_GPENCIL) { - LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) { - if (md->type == eGpencilModifierType_Lineart) { - LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md; - lmd->flags |= LRT_GPENCIL_USE_CACHE; - } - } - } - } - } } } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c index 60422d6fcfb..e273a8b7d0d 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c @@ -264,11 +264,12 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) const int source_type = RNA_enum_get(ptr, "source_type"); const bool is_baked = RNA_boolean_get(ptr, "is_baked"); + const bool use_cache = RNA_boolean_get(ptr, "use_cached_result"); uiLayoutSetPropSep(layout, true); uiLayoutSetEnabled(layout, !is_baked); - if (!BKE_gpencil_lineart_is_first_run(ob_ptr.data, ptr->data)) { + if (!BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data)) { uiItemR(layout, ptr, "use_cached_result", 0, NULL, ICON_NONE); } @@ -292,9 +293,10 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(col, ptr, "use_intersection", 0, IFACE_("Intersections"), ICON_NONE); uiItemR(col, ptr, "use_crease", 0, IFACE_("Crease"), ICON_NONE); - uiLayout *sub = uiLayoutRow(col, true); - uiLayoutSetActive( - sub, RNA_boolean_get(ptr, "use_crease") && (!RNA_boolean_get(ptr, "use_cached_result"))); + uiLayout *sub = uiLayoutRow(col, false); + uiLayoutSetActive(sub, + (RNA_boolean_get(ptr, "use_crease") && !use_cache) || + BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data)); uiLayoutSetPropSep(sub, true); uiItemR(sub, ptr, "crease_threshold", UI_ITEM_R_SLIDER, " ", ICON_NONE); @@ -325,13 +327,16 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) static void options_panel_draw(const bContext *UNUSED(C), Panel *panel) { uiLayout *layout = panel->layout; - PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, NULL); + PointerRNA ob_ptr; + PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, &ob_ptr); const bool is_baked = RNA_boolean_get(ptr, "is_baked"); const bool use_cache = RNA_boolean_get(ptr, "use_cached_result"); uiLayoutSetPropSep(layout, true); - uiLayoutSetEnabled(layout, !is_baked && !use_cache); + uiLayoutSetEnabled( + layout, + !is_baked && (!use_cache || BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data))); uiItemR(layout, ptr, "use_remove_doubles", 0, NULL, ICON_NONE); uiItemR(layout, ptr, "use_edge_overlap", 0, IFACE_("Overlapping Edges As Contour"), ICON_NONE); @@ -418,7 +423,8 @@ static void transparency_panel_draw(const bContext *UNUSED(C), Panel *panel) static void chaining_panel_draw(const bContext *UNUSED(C), Panel *panel) { - PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, NULL); + PointerRNA ob_ptr; + PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, &ob_ptr); uiLayout *layout = panel->layout; @@ -426,7 +432,9 @@ static void chaining_panel_draw(const bContext *UNUSED(C), Panel *panel) const bool use_cache = RNA_boolean_get(ptr, "use_cached_result"); uiLayoutSetPropSep(layout, true); - uiLayoutSetEnabled(layout, !is_baked && !use_cache); + uiLayoutSetEnabled( + layout, + !is_baked && (!use_cache || BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data))); uiLayout *col = uiLayoutColumnWithHeading(layout, true, IFACE_("Chain")); uiItemR(col, ptr, "use_fuzzy_intersections", 0, NULL, ICON_NONE); @@ -448,7 +456,9 @@ static void vgroup_panel_draw(const bContext *UNUSED(C), Panel *panel) const bool use_cache = RNA_boolean_get(ptr, "use_cached_result"); uiLayoutSetPropSep(layout, true); - uiLayoutSetEnabled(layout, !is_baked && !use_cache); + uiLayoutSetEnabled( + layout, + !is_baked && (!use_cache || BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data))); uiLayout *col = uiLayoutColumn(layout, true); diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c index 75c939d50aa..495c7d048f2 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c @@ -193,14 +193,14 @@ static bool lineart_gpencil_bake_single_target(LineartBakeJob *bj, Object *ob, i } GpencilLineartLimitInfo info = {0}; - BKE_gpencil_get_lineart_global_limits(ob, &info); + BKE_gpencil_get_lineart_modifier_limits(ob, &info); LineartCache *lc; LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) { if (md->type != eGpencilModifierType_Lineart) { continue; } - BKE_gpencil_assign_lineart_global_limits(md, &info); + BKE_gpencil_set_lineart_global_limits(md, &info); if (bake_strokes(ob, bj->dg, &lc, md, frame)) { touched = true; } diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c index 675cd01ebb0..3bce28e7e3d 100644 --- a/source/blender/makesrna/intern/rna_gpencil_modifier.c +++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c @@ -2933,8 +2933,9 @@ static void rna_def_modifier_gpencillineart(BlenderRNA *brna) prop = RNA_def_property(srna, "use_cached_result", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", LRT_GPENCIL_USE_CACHE); RNA_def_propert @@ Diff output truncated at 10240 characters. @@ _______________________________________________ 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