Fix #106425: Mantaflow guiding with domains is broken #117067
|
@ -60,6 +60,7 @@ MANTA::MANTA(int *res, FluidModifierData *fmd)
|
|||
mUsingDiffusion = (fds->flags & FLUID_DOMAIN_USE_DIFFUSION) && mUsingLiquid;
|
||||
mUsingViscosity = (fds->flags & FLUID_DOMAIN_USE_VISCOSITY) && mUsingLiquid;
|
||||
mUsingMVel = (fds->flags & FLUID_DOMAIN_USE_SPEED_VECTORS) && mUsingLiquid;
|
||||
mUsingGuiding = (fds->flags & FLUID_DOMAIN_USE_GUIDE);
|
||||
mUsingDrops = (fds->particle_type & FLUID_DOMAIN_PARTICLE_SPRAY) && mUsingLiquid;
|
||||
mUsingBubbles = (fds->particle_type & FLUID_DOMAIN_PARTICLE_BUBBLE) && mUsingLiquid;
|
||||
mUsingFloats = (fds->particle_type & FLUID_DOMAIN_PARTICLE_FOAM) && mUsingLiquid;
|
||||
|
@ -69,7 +70,6 @@ MANTA::MANTA(int *res, FluidModifierData *fmd)
|
|||
mUsingFire = (fds->active_fields & FLUID_DOMAIN_ACTIVE_FIRE) && mUsingSmoke;
|
||||
mUsingColors = (fds->active_fields & FLUID_DOMAIN_ACTIVE_COLORS) && mUsingSmoke;
|
||||
mUsingObstacle = (fds->active_fields & FLUID_DOMAIN_ACTIVE_OBSTACLE);
|
||||
mUsingGuiding = (fds->active_fields & FLUID_DOMAIN_ACTIVE_GUIDE);
|
||||
mUsingInvel = (fds->active_fields & FLUID_DOMAIN_ACTIVE_INVEL);
|
||||
mUsingOutflow = (fds->active_fields & FLUID_DOMAIN_ACTIVE_OUTFLOW);
|
||||
|
||||
|
|
|
@ -3721,6 +3721,17 @@ static void fluid_modifier_processDomain(FluidModifierData *fmd,
|
|||
const char *relbase = BKE_modifier_path_relbase_from_global(ob);
|
||||
BLI_path_abs(fds->cache_directory, relbase);
|
||||
|
||||
/* If 'outdated', reset the cache here. */
|
||||
if (is_startframe && mode == FLUID_DOMAIN_CACHE_REPLAY) {
|
||||
PTCacheID pid;
|
||||
BKE_ptcache_id_from_smoke(&pid, ob, fmd);
|
||||
if (pid.cache->flag & PTCACHE_OUTDATED) {
|
||||
BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
|
||||
BKE_fluid_cache_free_all(fds, ob);
|
||||
fluid_modifier_reset_ex(fmd, false);
|
||||
}
|
||||
}
|
||||
|
||||
/* Ensure that all flags are up to date before doing any baking and/or cache reading. */
|
||||
objs = BKE_collision_objects_create(
|
||||
depsgraph, ob, fds->fluid_group, &numobj, eModifierType_Fluid);
|
||||
|
@ -3735,17 +3746,6 @@ static void fluid_modifier_processDomain(FluidModifierData *fmd,
|
|||
MEM_freeN(objs);
|
||||
}
|
||||
|
||||
/* If 'outdated', reset the cache here. */
|
||||
if (is_startframe && mode == FLUID_DOMAIN_CACHE_REPLAY) {
|
||||
PTCacheID pid;
|
||||
BKE_ptcache_id_from_smoke(&pid, ob, fmd);
|
||||
if (pid.cache->flag & PTCACHE_OUTDATED) {
|
||||
BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
|
||||
BKE_fluid_cache_free_all(fds, ob);
|
||||
fluid_modifier_reset_ex(fmd, false);
|
||||
}
|
||||
}
|
||||
|
||||
/* Fluid domain init must not fail in order to continue modifier evaluation. */
|
||||
if (!fds->fluid && !fluid_modifier_init(fmd, depsgraph, ob, scene, mesh)) {
|
||||
CLOG_ERROR(&LOG, "Fluid initialization failed. Should not happen!");
|
||||
|
|
Loading…
Reference in New Issue