diff options
Diffstat (limited to 'source/blender/blenloader/intern/readfile.c')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 176 |
1 files changed, 93 insertions, 83 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 2a51a57f887..f8723b495f7 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -83,7 +83,7 @@ #include "DNA_sdna_types.h" #include "DNA_scene_types.h" #include "DNA_sequence_types.h" -#include "DNA_smoke_types.h" +#include "DNA_fluid_types.h" #include "DNA_speaker_types.h" #include "DNA_sound_types.h" #include "DNA_space_types.h" @@ -239,7 +239,7 @@ /* local prototypes */ static void read_libraries(FileData *basefd, ListBase *mainlist); static void *read_struct(FileData *fd, BHead *bh, const char *blockname); -static void direct_link_modifiers(FileData *fd, ListBase *lb); +static void direct_link_modifiers(FileData *fd, ListBase *lb, const Object *ob); static BHead *find_bhead_from_code_name(FileData *fd, const short idcode, const char *name); static BHead *find_bhead_from_idname(FileData *fd, const char *idname); @@ -4636,7 +4636,7 @@ static void lib_link_particlesettings(FileData *fd, Main *main) part->instance_object = newlibadr(fd, part->id.lib, part->instance_object); part->instance_collection = newlibadr_us(fd, part->id.lib, part->instance_collection); - part->eff_group = newlibadr(fd, part->id.lib, part->eff_group); + part->force_group = newlibadr(fd, part->id.lib, part->force_group); part->bb_ob = newlibadr(fd, part->id.lib, part->bb_ob); part->collision_group = newlibadr(fd, part->id.lib, part->collision_group); @@ -4647,7 +4647,7 @@ static void lib_link_particlesettings(FileData *fd, Main *main) part->effector_weights->group = newlibadr(fd, part->id.lib, part->effector_weights->group); } else { - part->effector_weights = BKE_effector_add_weights(part->eff_group); + part->effector_weights = BKE_effector_add_weights(part->force_group); } if (part->instance_weights.first && part->instance_collection) { @@ -4729,7 +4729,7 @@ static void direct_link_particlesettings(FileData *fd, ParticleSettings *part) part->effector_weights = newdataadr(fd, part->effector_weights); if (!part->effector_weights) { - part->effector_weights = BKE_effector_add_weights(part->eff_group); + part->effector_weights = BKE_effector_add_weights(part->force_group); } link_list(fd, &part->instance_weights); @@ -5372,12 +5372,12 @@ static void lib_link_object(FileData *fd, Main *main) } { - SmokeModifierData *smd = (SmokeModifierData *)modifiers_findByType(ob, - eModifierType_Smoke); + FluidModifierData *mmd = (FluidModifierData *)modifiers_findByType(ob, + eModifierType_Fluid); - if (smd && (smd->type == MOD_SMOKE_TYPE_DOMAIN) && smd->domain) { - /* Flag for refreshing the simulation after loading. */ - smd->domain->flags |= MOD_SMOKE_FILE_LOAD; + if (mmd && (mmd->type == MOD_FLUID_TYPE_DOMAIN) && mmd->domain) { + /* Flag for refreshing the simulation after loading */ + mmd->domain->flags |= FLUID_DOMAIN_FILE_LOAD; } } @@ -5485,7 +5485,7 @@ static void direct_link_pose(FileData *fd, bPose *pose) } } -static void direct_link_modifiers(FileData *fd, ListBase *lb) +static void direct_link_modifiers(FileData *fd, ListBase *lb, const Object *ob) { ModifierData *md; @@ -5495,6 +5495,24 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) md->error = NULL; md->runtime = NULL; + if (md->type == eModifierType_Fluidsim) { + blo_reportf_wrap( + fd->reports, + RPT_WARNING, + TIP_( + "Possible data loss when saving this file! %s modifier is deprecated (Object: %s)."), + md->name, + ob->id.name + 2); + } + else if (md->type == eModifierType_Smoke) { + blo_reportf_wrap( + fd->reports, + RPT_WARNING, + TIP_( + "Possible data loss when saving this file! %s modifier is deprecated (Object: %s)."), + md->name, + ob->id.name + 2); + } /* if modifiers disappear, or for upward compatibility */ if (NULL == modifierType_getInfo(md->type)) { md->type = eModifierType_None; @@ -5537,91 +5555,83 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) clmd->solver_result = NULL; } - else if (md->type == eModifierType_Fluidsim) { - FluidsimModifierData *fluidmd = (FluidsimModifierData *)md; + else if (md->type == eModifierType_Fluid) { - fluidmd->fss = newdataadr(fd, fluidmd->fss); - if (fluidmd->fss) { - fluidmd->fss->fmd = fluidmd; - fluidmd->fss->meshVelocities = NULL; - } - } - else if (md->type == eModifierType_Smoke) { - SmokeModifierData *smd = (SmokeModifierData *)md; - - if (smd->type == MOD_SMOKE_TYPE_DOMAIN) { - smd->flow = NULL; - smd->coll = NULL; - smd->domain = newdataadr(fd, smd->domain); - smd->domain->smd = smd; - - smd->domain->fluid = NULL; - smd->domain->fluid_mutex = BLI_rw_mutex_alloc(); - smd->domain->wt = NULL; - smd->domain->shadow = NULL; - smd->domain->tex = NULL; - smd->domain->tex_shadow = NULL; - smd->domain->tex_flame = NULL; - smd->domain->tex_flame_coba = NULL; - smd->domain->tex_coba = NULL; - smd->domain->tex_field = NULL; - smd->domain->tex_velocity_x = NULL; - smd->domain->tex_velocity_y = NULL; - smd->domain->tex_velocity_z = NULL; - smd->domain->tex_wt = NULL; - smd->domain->coba = newdataadr(fd, smd->domain->coba); - - smd->domain->effector_weights = newdataadr(fd, smd->domain->effector_weights); - if (!smd->domain->effector_weights) { - smd->domain->effector_weights = BKE_effector_add_weights(NULL); + FluidModifierData *mmd = (FluidModifierData *)md; + + if (mmd->type == MOD_FLUID_TYPE_DOMAIN) { + mmd->flow = NULL; + mmd->effector = NULL; + mmd->domain = newdataadr(fd, mmd->domain); + mmd->domain->mmd = mmd; + + mmd->domain->fluid = NULL; + mmd->domain->fluid_mutex = BLI_rw_mutex_alloc(); + mmd->domain->tex = NULL; + mmd->domain->tex_shadow = NULL; + mmd->domain->tex_flame = NULL; + mmd->domain->tex_flame_coba = NULL; + mmd->domain->tex_coba = NULL; + mmd->domain->tex_field = NULL; + mmd->domain->tex_velocity_x = NULL; + mmd->domain->tex_velocity_y = NULL; + mmd->domain->tex_velocity_z = NULL; + mmd->domain->tex_wt = NULL; + mmd->domain->mesh_velocities = NULL; + mmd->domain->coba = newdataadr(fd, mmd->domain->coba); + + mmd->domain->effector_weights = newdataadr(fd, mmd->domain->effector_weights); + if (!mmd->domain->effector_weights) { + mmd->domain->effector_weights = BKE_effector_add_weights(NULL); } direct_link_pointcache_list( - fd, &(smd->domain->ptcaches[0]), &(smd->domain->point_cache[0]), 1); + fd, &(mmd->domain->ptcaches[0]), &(mmd->domain->point_cache[0]), 1); - /* Smoke uses only one cache from now on, so store pointer convert */ - if (smd->domain->ptcaches[1].first || smd->domain->point_cache[1]) { - if (smd->domain->point_cache[1]) { - PointCache *cache = newdataadr(fd, smd->domain->point_cache[1]); + /* Manta sim uses only one cache from now on, so store pointer convert */ + if (mmd->domain->ptcaches[1].first || mmd->domain->point_cache[1]) { + if (mmd->domain->point_cache[1]) { + PointCache *cache = newdataadr(fd, mmd->domain->point_cache[1]); if (cache->flag & PTCACHE_FAKE_SMOKE) { - /* Smoke was already saved in "new format" and this cache is a fake one. */ + /* Mantasim / smoke was already saved in "new format" and this cache is a fake one. + */ } else { printf( - "High resolution smoke cache not available due to pointcache update. Please " + "High resolution manta cache not available due to pointcache update. Please " "reset the simulation.\n"); } BKE_ptcache_free(cache); } - BLI_listbase_clear(&smd->domain->ptcaches[1]); - smd->domain->point_cache[1] = NULL; - } - } - else if (smd->type == MOD_SMOKE_TYPE_FLOW) { - smd->domain = NULL; - smd->coll = NULL; - smd->flow = newdataadr(fd, smd->flow); - smd->flow->smd = smd; - smd->flow->mesh = NULL; - smd->flow->verts_old = NULL; - smd->flow->numverts = 0; - smd->flow->psys = newdataadr(fd, smd->flow->psys); - } - else if (smd->type == MOD_SMOKE_TYPE_COLL) { - smd->flow = NULL; - smd->domain = NULL; - smd->coll = newdataadr(fd, smd->coll); - if (smd->coll) { - smd->coll->smd = smd; - smd->coll->verts_old = NULL; - smd->coll->numverts = 0; - smd->coll->mesh = NULL; + BLI_listbase_clear(&mmd->domain->ptcaches[1]); + mmd->domain->point_cache[1] = NULL; + } + } + else if (mmd->type == MOD_FLUID_TYPE_FLOW) { + mmd->domain = NULL; + mmd->effector = NULL; + mmd->flow = newdataadr(fd, mmd->flow); + mmd->flow->mmd = mmd; + mmd->flow->mesh = NULL; + mmd->flow->verts_old = NULL; + mmd->flow->numverts = 0; + mmd->flow->psys = newdataadr(fd, mmd->flow->psys); + } + else if (mmd->type == MOD_FLUID_TYPE_EFFEC) { + mmd->flow = NULL; + mmd->domain = NULL; + mmd->effector = newdataadr(fd, mmd->effector); + if (mmd->effector) { + mmd->effector->mmd = mmd; + mmd->effector->verts_old = NULL; + mmd->effector->numverts = 0; + mmd->effector->mesh = NULL; } else { - smd->type = 0; - smd->flow = NULL; - smd->domain = NULL; - smd->coll = NULL; + mmd->type = 0; + mmd->flow = NULL; + mmd->domain = NULL; + mmd->effector = NULL; } } } @@ -5944,7 +5954,7 @@ static void direct_link_object(FileData *fd, Object *ob) ob->matbits = newdataadr(fd, ob->matbits); /* do it here, below old data gets converted */ - direct_link_modifiers(fd, &ob->modifiers); + direct_link_modifiers(fd, &ob->modifiers, ob); direct_link_gpencil_modifiers(fd, &ob->greasepencil_modifiers); direct_link_shaderfxs(fd, &ob->shader_fx); @@ -10383,7 +10393,7 @@ static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSetting expand_doit(fd, mainvar, part->instance_object); expand_doit(fd, mainvar, part->instance_collection); - expand_doit(fd, mainvar, part->eff_group); + expand_doit(fd, mainvar, part->force_group); expand_doit(fd, mainvar, part->bb_ob); expand_doit(fd, mainvar, part->collision_group); |