[Bf-blender-cvs] [f77767b4a85] temp-lineart-contained: LineArt: Cache related wording changes.

YimingWu noreply at git.blender.org
Wed Jun 16 16:33:35 CEST 2021


Commit: f77767b4a85ec2f5d7216e934ea97300fef8e511
Author: YimingWu
Date:   Wed Jun 16 13:50:57 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rBf77767b4a85ec2f5d7216e934ea97300fef8e511

LineArt: Cache related wording changes.

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

M	source/blender/blenkernel/BKE_gpencil_modifier.h
M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.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 c8ee21a6770..8fbc2112c77 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -294,19 +294,21 @@ bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
 bool BKE_gpencil_has_time_modifiers(struct Object *ob);
 bool BKE_gpencil_has_transform_modifiers(struct Object *ob);
 
+/* Stores the maximum calculation range in the whole modifier stack for line art so the cache can
+ * cover everything that will be visible. */
 typedef struct GpencilLineartLimitInfo {
   char min_level;
   char max_level;
   short edge_types;
 } GpencilLineartLimitInfo;
 
-void BKE_gpencil_get_lineart_modifier_limits(struct Object *ob,
-                                             struct GpencilLineartLimitInfo *info);
+GpencilLineartLimitInfo BKE_gpencil_get_lineart_modifier_limits(const struct Object *ob);
 
 void BKE_gpencil_set_lineart_modifier_limits(struct GpencilModifierData *md,
-                                             struct GpencilLineartLimitInfo *info,
-                                             bool is_first_lineart);
-bool BKE_gpencil_is_first_lineart_in_stack(struct Object *ob, struct GpencilModifierData *md);
+                                             const struct GpencilLineartLimitInfo *info,
+                                             const bool is_first_lineart);
+bool BKE_gpencil_is_first_lineart_in_stack(const struct Object *ob,
+                                           const 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 900fcbb0781..5ac85ad3aaf 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -203,22 +203,27 @@ bool BKE_gpencil_has_transform_modifiers(Object *ob)
   return false;
 }
 
-void BKE_gpencil_get_lineart_modifier_limits(Object *ob, struct GpencilLineartLimitInfo *info)
+GpencilLineartLimitInfo BKE_gpencil_get_lineart_modifier_limits(const Object *ob)
 {
+  GpencilLineartLimitInfo info = {0};
+  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;
+      }
     }
   }
+  return info;
 }
 
 void BKE_gpencil_set_lineart_modifier_limits(GpencilModifierData *md,
-                                             struct GpencilLineartLimitInfo *info,
-                                             bool is_first_lineart)
+                                             const GpencilLineartLimitInfo *info,
+                                             const bool is_first_lineart)
 {
   BLI_assert(md->type == eGpencilModifierType_Lineart);
   LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md;
@@ -234,7 +239,7 @@ void BKE_gpencil_set_lineart_modifier_limits(GpencilModifierData *md,
   }
 }
 
-bool BKE_gpencil_is_first_lineart_in_stack(Object *ob, GpencilModifierData *md)
+bool BKE_gpencil_is_first_lineart_in_stack(const Object *ob, const GpencilModifierData *md)
 {
   if (md->type != eGpencilModifierType_Lineart) {
     return false;
@@ -249,7 +254,9 @@ bool BKE_gpencil_is_first_lineart_in_stack(Object *ob, GpencilModifierData *md)
       }
     }
   }
-  return false; /* Unlikely. */
+  /* If we reach here it means md is not in ob's modifier stack. */
+  BLI_assert(false);
+  return false;
 }
 
 /* apply time modifiers */
@@ -822,8 +829,7 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *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);
+  GpencilLineartLimitInfo info = BKE_gpencil_get_lineart_modifier_limits(ob);
 
   LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) {
 
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
index db75f9a7bda..2cfd33e0a01 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
@@ -294,14 +294,14 @@ 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");
+  const bool use_cache = RNA_boolean_get(ptr, "use_cache");
   const bool is_first = BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data);
 
   uiLayoutSetPropSep(layout, true);
   uiLayoutSetEnabled(layout, !is_baked);
 
   if (!BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data)) {
-    uiItemR(layout, ptr, "use_cached_result", 0, NULL, ICON_NONE);
+    uiItemR(layout, ptr, "use_cache", 0, NULL, ICON_NONE);
   }
 
   uiItemR(layout, ptr, "source_type", 0, NULL, ICON_NONE);
@@ -346,7 +346,7 @@ static void line_types_panel_draw(const bContext *UNUSED(C), Panel *panel)
   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");
+  const bool use_cache = RNA_boolean_get(ptr, "use_cache");
   const bool is_first = BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data);
 
   uiLayoutSetEnabled(layout, !is_baked);
@@ -391,32 +391,32 @@ static void options_panel_draw(const bContext *UNUSED(C), Panel *panel)
   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");
+  const bool use_cache = RNA_boolean_get(ptr, "use_cache");
   const bool is_first = BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data);
 
   uiLayoutSetPropSep(layout, true);
   uiLayoutSetEnabled(layout, !is_baked);
 
-  if (!use_cache || is_first) {
-    uiLayout *row = uiLayoutRowWithHeading(layout, false, IFACE_("Custom Camera"));
-    uiItemR(row, ptr, "use_custom_camera", 0, "", 0);
-    uiLayout *subrow = uiLayoutRow(row, true);
-    uiLayoutSetActive(subrow, RNA_boolean_get(ptr, "use_custom_camera"));
-    uiLayoutSetPropSep(subrow, true);
-    uiItemR(subrow, ptr, "source_camera", 0, "", ICON_OBJECT_DATA);
-
-    uiItemR(layout, ptr, "overscan", 0, NULL, ICON_NONE);
-
-    uiItemR(layout, ptr, "use_remove_doubles", 0, NULL, ICON_NONE);
-    uiItemR(layout, ptr, "use_edge_overlap", 0, IFACE_("Overlapping Edges As Contour"), ICON_NONE);
-    uiItemR(layout, ptr, "use_object_instances", 0, NULL, ICON_NONE);
-    uiItemR(layout, ptr, "use_clip_plane_boundaries", 0, NULL, ICON_NONE);
-    uiItemR(layout, ptr, "floating_as_contour", 0, NULL, ICON_NONE);
-    uiItemR(layout, ptr, "use_multiple_edge_types", 0, NULL, ICON_NONE);
-  }
-  else {
-    uiItemL(layout, "Cached with the first line art modifier.", ICON_INFO);
+  if (use_cache && !is_first) {
+    uiItemL(layout, "Cached from the first line art modifier.", ICON_INFO);
+    return;
   }
+
+  uiLayout *row = uiLayoutRowWithHeading(layout, false, IFACE_("Custom Camera"));
+  uiItemR(row, ptr, "use_custom_camera", 0, "", 0);
+  uiLayout *subrow = uiLayoutRow(row, true);
+  uiLayoutSetActive(subrow, RNA_boolean_get(ptr, "use_custom_camera"));
+  uiLayoutSetPropSep(subrow, true);
+  uiItemR(subrow, ptr, "source_camera", 0, "", ICON_OBJECT_DATA);
+
+  uiItemR(layout, ptr, "overscan", 0, NULL, ICON_NONE);
+
+  uiItemR(layout, ptr, "use_remove_doubles", 0, NULL, ICON_NONE);
+  uiItemR(layout, ptr, "use_edge_overlap", 0, IFACE_("Overlapping Edges As Contour"), ICON_NONE);
+  uiItemR(layout, ptr, "use_object_instances", 0, NULL, ICON_NONE);
+  uiItemR(layout, ptr, "use_clip_plane_boundaries", 0, NULL, ICON_NONE);
+  uiItemR(layout, ptr, "floating_as_contour", 0, NULL, ICON_NONE);
+  uiItemR(layout, ptr, "use_multiple_edge_types", 0, NULL, ICON_NONE);
 }
 
 static void style_panel_draw(const bContext *UNUSED(C), Panel *panel)
@@ -559,7 +559,7 @@ static void face_mark_panel_draw_header(const bContext *UNUSED(C), Panel *panel)
   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");
+  const bool use_cache = RNA_boolean_get(ptr, "use_cache");
 
   uiLayoutSetEnabled(
       layout,
@@ -576,7 +576,7 @@ static void face_mark_panel_draw(const bContext *UNUSED(C), Panel *panel)
 
   const bool is_baked = RNA_boolean_get(ptr, "is_baked");
   const bool use_mark = RNA_boolean_get(ptr, "use_face_mark");
-  const bool use_cache = RNA_boolean_get(ptr, "use_cached_result");
+  const bool use_cache = RNA_boolean_get(ptr, "use_cache");
   const bool is_first = BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data);
 
   uiLayoutSetEnabled(layout, !is_baked);
@@ -602,27 +602,26 @@ static void chaining_panel_draw(const bContext *UNUSED(C), Panel *panel)
   uiLayout *layout = panel->layout;
 
   const bool is_baked = RNA_boolean_get(ptr, "is_baked");
-  const bool use_cache = RNA_boolean_get(ptr, "use_cached_result");
+  const bool use_cache = RNA_boolean_get(ptr, "use_cache");
   const bool is_first 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list