[Bf-blender-cvs] [84c653fb766] temp-lineart-contained: LineArt: Guard modifiers from depsgraph when baking.
YimingWu
noreply at git.blender.org
Fri Mar 12 02:47:08 CET 2021
Commit: 84c653fb76633bf8aea9177bbeea90c7dd7891fb
Author: YimingWu
Date: Fri Mar 12 09:46:55 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB84c653fb76633bf8aea9177bbeea90c7dd7891fb
LineArt: Guard modifiers from depsgraph when baking.
===================================================================
M source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
M source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
M source/blender/makesdna/DNA_gpencil_modifier_types.h
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
index 7d42e2526b8..30c14631614 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
@@ -129,6 +129,11 @@ static bool isModifierDisabled(GpencilModifierData *md)
return true;
}
+ /* Preventing calculation in depsgraph when baking frames. */
+ if (lmd->flags & LRT_GPENCIL_IS_BAKING) {
+ return false;
+ }
+
return false;
}
static void generateStrokes(GpencilModifierData *md, Depsgraph *depsgraph, Object *ob)
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
index 25780387b34..12318743284 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_ops.c
@@ -119,8 +119,6 @@ static bool bake_strokes(Object *ob, Depsgraph *dg, GpencilModifierData *md, int
ED_lineart_destroy_render_data(lmd);
- md->mode &= ~(eGpencilModifierMode_Realtime | eGpencilModifierMode_Render);
-
return true;
}
@@ -175,6 +173,29 @@ static bool lineart_gpencil_bake_single_target(LineartBakeJob *bj, Object *ob)
return touched;
}
+static void lineart_gpencil_guard_modifiers(LineartBakeJob *bj, bool guard_set, bool hide_modifier)
+{
+ CTX_DATA_BEGIN (bj->C, Object *, ob, visible_objects) {
+ if (ob->type == OB_GPENCIL) {
+ LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) {
+ if (md->type == eGpencilModifierType_Lineart) {
+ LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md;
+ if (guard_set) {
+ lmd->flags |= LRT_GPENCIL_IS_BAKING;
+ }
+ else {
+ lmd->flags &= (~LRT_GPENCIL_IS_BAKING);
+ }
+ if (hide_modifier) {
+ md->mode &= ~(eGpencilModifierMode_Realtime | eGpencilModifierMode_Render);
+ }
+ }
+ }
+ }
+ }
+ CTX_DATA_END;
+}
+
static void lineart_gpencil_bake_startjob(void *customdata,
short *stop,
short *do_update,
@@ -185,6 +206,8 @@ static void lineart_gpencil_bake_startjob(void *customdata,
bj->do_update = do_update;
bj->progress = progress;
+ lineart_gpencil_guard_modifiers(bj, true, false);
+
if (bj->ob) {
/* Which means only bake one line art gpencil object, specified by bj->ob. */
if (lineart_gpencil_bake_single_target(bj, bj->ob)) {
@@ -205,6 +228,8 @@ static void lineart_gpencil_bake_startjob(void *customdata,
/* Restore original frame. */
BKE_scene_frame_set(bj->scene, bj->frame_orig);
BKE_scene_graph_update_for_newframe(bj->dg);
+
+ lineart_gpencil_guard_modifiers(bj, false, true);
}
static void lineart_gpencil_bake_endjob(void *customdata)
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index d068374b28f..3d0526aafec 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -820,6 +820,7 @@ typedef enum eLineArtGPencilModifierFlags {
LRT_GPENCIL_INVERT_SOURCE_VGROUP = (1 << 0),
LRT_GPENCIL_MATCH_OUTPUT_VGROUP = (1 << 1),
LRT_GPENCIL_SOFT_SELECTION = (1 << 2),
+ LRT_GPENCIL_IS_BAKING = (1 << 3),
} eLineArtGPencilModifierFlags;
typedef enum eLineartGpencilTransparencyFlags {
More information about the Bf-blender-cvs
mailing list