[Bf-blender-cvs] [4e84a49218f] lineart-fn-cached: Lineart: Clean up cache patch.

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


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. @@



More information about the Bf-blender-cvs mailing list