Fix #107956: Simulation reset on fps change #108004
|
@ -17,6 +17,8 @@ void BKE_simulation_data_update(struct Depsgraph *depsgraph,
|
|||
struct Scene *scene,
|
||||
struct Simulation *simulation);
|
||||
|
||||
void BKE_simulation_reset_scene(Scene *scene);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -162,6 +162,8 @@ class ModifierSimulationCache {
|
|||
CacheState cache_state_ = CacheState::Valid;
|
||||
bool failed_finding_bake_ = false;
|
||||
|
||||
float last_fps_ = 0.0f;
|
||||
|
||||
void try_discover_bake(StringRefNull absolute_bake_dir);
|
||||
|
||||
bool has_state_at_frame(const SubFrame &frame) const;
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include "DNA_ID.h"
|
||||
#include "DNA_defaults.h"
|
||||
#include "DNA_modifier_types.h"
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_simulation_types.h"
|
||||
|
||||
|
@ -24,15 +25,18 @@
|
|||
|
||||
#include "BKE_anim_data.h"
|
||||
#include "BKE_animsys.h"
|
||||
#include "BKE_collection.h"
|
||||
#include "BKE_customdata.h"
|
||||
#include "BKE_idtype.h"
|
||||
#include "BKE_lib_id.h"
|
||||
#include "BKE_lib_query.h"
|
||||
#include "BKE_lib_remap.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_modifier.h"
|
||||
#include "BKE_node.hh"
|
||||
#include "BKE_pointcache.h"
|
||||
#include "BKE_simulation.h"
|
||||
#include "BKE_simulation_state.hh"
|
||||
|
||||
#include "NOD_geometry.h"
|
||||
|
||||
|
@ -181,3 +185,17 @@ void BKE_simulation_data_update(Depsgraph * /*depsgraph*/,
|
|||
Simulation * /*simulation*/)
|
||||
{
|
||||
}
|
||||
|
||||
void BKE_simulation_reset_scene(Scene *scene)
|
||||
{
|
||||
FOREACH_SCENE_OBJECT_BEGIN (scene, ob) {
|
||||
LISTBASE_FOREACH (ModifierData *, md, &ob->modifiers) {
|
||||
if (md->type != eModifierType_Nodes) {
|
||||
continue;
|
||||
}
|
||||
NodesModifierData *nmd = (NodesModifierData *)md;
|
||||
nmd->simulation_cache->reset();
|
||||
}
|
||||
}
|
||||
FOREACH_SCENE_OBJECT_END;
|
||||
}
|
||||
|
|
|
@ -712,6 +712,7 @@ static const EnumPropertyItem snap_to_items[] = {
|
|||
# include "BKE_pointcache.h"
|
||||
# include "BKE_scene.h"
|
||||
# include "BKE_screen.h"
|
||||
# include "BKE_simulation.h"
|
||||
# include "BKE_unit.h"
|
||||
|
||||
# include "NOD_composite.h"
|
||||
|
@ -930,6 +931,8 @@ static void rna_Scene_fps_update(Main *bmain, Scene *UNUSED(active_scene), Point
|
|||
* however, changes in FPS actually modifies an original skip length,
|
||||
* so this we take care about here. */
|
||||
SEQ_sound_update_length(bmain, scene);
|
||||
/* Reset simulation states because new frame interval doesn't apply anymore. */
|
||||
BKE_simulation_reset_scene(scene);
|
||||
}
|
||||
|
||||
static void rna_Scene_listener_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
|
|
Loading…
Reference in New Issue