Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
| Show All 35 Lines | |||||
| #include "UI_interface.h" | #include "UI_interface.h" | ||||
| #include "UI_resources.h" | #include "UI_resources.h" | ||||
| #include "BKE_modifier.h" | #include "BKE_modifier.h" | ||||
| #include "RNA_access.h" | #include "RNA_access.h" | ||||
| #include "DEG_depsgraph.h" | #include "DEG_depsgraph.h" | ||||
| #include "DEG_depsgraph_lineart.h" | |||||
| #include "DEG_depsgraph_query.h" | #include "DEG_depsgraph_query.h" | ||||
| #include "MOD_gpencil_modifiertypes.h" | #include "MOD_gpencil_modifiertypes.h" | ||||
| #include "MOD_gpencil_ui_common.h" | #include "MOD_gpencil_ui_common.h" | ||||
| #include "WM_api.h" | #include "WM_api.h" | ||||
| #include "WM_types.h" | #include "WM_types.h" | ||||
| ▲ Show 20 Lines • Show All 154 Lines • ▼ Show 20 Lines | static void bakeModifier(Main *UNUSED(bmain), | ||||
| MOD_lineart_clear_cache(&gpd->runtime.lineart_cache); | MOD_lineart_clear_cache(&gpd->runtime.lineart_cache); | ||||
| } | } | ||||
| static bool isDisabled(GpencilModifierData *md, int UNUSED(userRenderParams)) | static bool isDisabled(GpencilModifierData *md, int UNUSED(userRenderParams)) | ||||
| { | { | ||||
| return isModifierDisabled(md); | return isModifierDisabled(md); | ||||
| } | } | ||||
| static void add_this_collection(Collection *c, | |||||
| const ModifierUpdateDepsgraphContext *ctx, | |||||
| const int mode) | |||||
| { | |||||
| if (!c) { | |||||
| return; | |||||
| } | |||||
| bool default_add = true; | |||||
| /* Do not do nested collection usage check, this is consistent with lineart calculation, because | |||||
| * collection usage doesn't have a INHERIT mode. This might initially be derived from the fact | |||||
| * that an object can be inside multiple collections, but might be irrelevant now with the way | |||||
| * objects are iterated. Keep this logic for now. */ | |||||
| if (c->lineart_usage & COLLECTION_LRT_EXCLUDE) { | |||||
| default_add = false; | |||||
| } | |||||
| FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_BEGIN (c, ob, mode) { | |||||
| if (ELEM(ob->type, OB_MESH, OB_MBALL, OB_CURVES_LEGACY, OB_SURF, OB_FONT)) { | |||||
| if ((ob->lineart.usage == OBJECT_LRT_INHERIT && default_add) || | |||||
| ob->lineart.usage != OBJECT_LRT_EXCLUDE) { | |||||
| DEG_add_object_relation(ctx->node, ob, DEG_OB_COMP_GEOMETRY, "Line Art Modifier"); | |||||
| DEG_add_object_relation(ctx->node, ob, DEG_OB_COMP_TRANSFORM, "Line Art Modifier"); | |||||
| } | |||||
| } | |||||
| if (ob->type == OB_EMPTY && (ob->transflag & OB_DUPLICOLLECTION)) { | |||||
| add_this_collection(ob->instance_collection, ctx, mode); | |||||
| } | |||||
| } | |||||
| FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_END; | |||||
| } | |||||
| static void updateDepsgraph(GpencilModifierData *md, | static void updateDepsgraph(GpencilModifierData *md, | ||||
| const ModifierUpdateDepsgraphContext *ctx, | const ModifierUpdateDepsgraphContext *ctx, | ||||
| const int mode) | const int UNUSED(mode)) | ||||
| { | { | ||||
| DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Line Art Modifier"); | DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Line Art Modifier"); | ||||
| LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md; | LineartGpencilModifierData *lmd = (LineartGpencilModifierData *)md; | ||||
| /* Always add whole master collection because line art will need the whole scene for | /* Always add whole master collection because line art will need the whole scene for | ||||
| * visibility computation. Line art exclusion is handled inside #add_this_collection. */ | * visibility computation. Line art exclusion is handled inside #add_this_collection. */ | ||||
| add_this_collection(ctx->scene->master_collection, ctx, mode); | DEG_add_lineart_relations(ctx->node, | ||||
| ctx->scene->master_collection, | |||||
| lmd->calculation_flags & LRT_ALLOW_DUPLI_OBJECTS, | |||||
| "Line Art Modifier"); | |||||
| if (lmd->calculation_flags & LRT_USE_CUSTOM_CAMERA && lmd->source_camera) { | if (lmd->calculation_flags & LRT_USE_CUSTOM_CAMERA && lmd->source_camera) { | ||||
| DEG_add_object_relation( | DEG_add_object_relation( | ||||
| ctx->node, lmd->source_camera, DEG_OB_COMP_TRANSFORM, "Line Art Modifier"); | ctx->node, lmd->source_camera, DEG_OB_COMP_TRANSFORM, "Line Art Modifier"); | ||||
| DEG_add_object_relation( | DEG_add_object_relation( | ||||
| ctx->node, lmd->source_camera, DEG_OB_COMP_PARAMETERS, "Line Art Modifier"); | ctx->node, lmd->source_camera, DEG_OB_COMP_PARAMETERS, "Line Art Modifier"); | ||||
| } | } | ||||
| else if (ctx->scene->camera) { | else if (ctx->scene->camera) { | ||||
| ▲ Show 20 Lines • Show All 192 Lines • Show Last 20 Lines | |||||