diff --git a/source/blender/blenkernel/intern/grease_pencil.cc b/source/blender/blenkernel/intern/grease_pencil.cc index 5df43c16a62..96924279eb5 100644 --- a/source/blender/blenkernel/intern/grease_pencil.cc +++ b/source/blender/blenkernel/intern/grease_pencil.cc @@ -1368,11 +1368,32 @@ static void grease_pencil_evaluate_modifiers(Depsgraph *depsgraph, VirtualModifierData virtualModifierData; ModifierData *md = BKE_modifiers_get_virtual_modifierlist(object, &virtualModifierData); - /* Evaluate modifiers. */ + /* Evaluate time modifiers. + * The time offset modifier can change what drawings are shown on the current frame. But it + * doesn't affect the drawings data. Modifiers that modify the drawings data are only evaluated + * for the current frame, so we run the time offset modifiers before all the other ones. */ + ModifierData *tmd = md; + for (; tmd; tmd = tmd->next) { + const ModifierTypeInfo *mti = BKE_modifier_get_info(ModifierType(tmd->type)); + + if (!BKE_modifier_is_enabled(scene, tmd, required_mode) || + ModifierType(tmd->type) != eModifierType_GreasePencilTime) + { + continue; + } + + if (mti->modify_geometry_set != nullptr) { + mti->modify_geometry_set(tmd, &mectx, &geometry_set); + } + } + + /* Evaluate drawing modifiers. */ for (; md; md = md->next) { const ModifierTypeInfo *mti = BKE_modifier_get_info(ModifierType(md->type)); - if (!BKE_modifier_is_enabled(scene, md, required_mode)) { + if (!BKE_modifier_is_enabled(scene, md, required_mode) || + ModifierType(md->type) == eModifierType_GreasePencilTime) + { continue; }