diff options
author | Jacques Lucke <jacques@blender.org> | 2020-06-26 17:52:44 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-06-26 17:53:10 +0300 |
commit | 4006cd2d2cf5c8ab23d60f160ea884e6fd3fc01f (patch) | |
tree | 910a659c7b8cb624736d2cfc8c37ed6d1d7345b3 /source/blender/blenloader | |
parent | 9b4e621db02a152d5582433551e3688643a9b573 (diff) |
Refactor: use new api for expand in blenloader
This is part of T76372.
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 570 |
1 files changed, 266 insertions, 304 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index f9e60cd35cb..82b6b25a679 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -259,7 +259,7 @@ static BHead *find_bhead_from_code_name(FileData *fd, const short idcode, const static BHead *find_bhead_from_idname(FileData *fd, const char *idname); #ifdef USE_COLLECTION_COMPAT_28 -static void expand_scene_collection(FileData *fd, Main *mainvar, SceneCollection *sc); +static void expand_scene_collection(BlendExpander *expander, SceneCollection *sc); #endif static void direct_link_animdata(BlendDataReader *reader, AnimData *adt); static void lib_link_animdata(BlendLibReader *reader, ID *id, AnimData *adt); @@ -10486,26 +10486,26 @@ static void expand_doit_library(void *fdhandle, Main *mainvar, void *old) static BLOExpandDoitCallback expand_doit; // XXX deprecated - old animation system -static void expand_ipo(FileData *fd, Main *mainvar, Ipo *ipo) +static void expand_ipo(BlendExpander *expander, Ipo *ipo) { IpoCurve *icu; for (icu = ipo->curve.first; icu; icu = icu->next) { if (icu->driver) { - expand_doit(fd, mainvar, icu->driver->ob); + BLO_expand(expander, icu->driver->ob); } } } // XXX deprecated - old animation system -static void expand_constraint_channels(FileData *fd, Main *mainvar, ListBase *chanbase) +static void expand_constraint_channels(BlendExpander *expander, ListBase *chanbase) { bConstraintChannel *chan; for (chan = chanbase->first; chan; chan = chan->next) { - expand_doit(fd, mainvar, chan->ipo); + BLO_expand(expander, chan->ipo); } } -static void expand_fmodifiers(FileData *fd, Main *mainvar, ListBase *list) +static void expand_fmodifiers(BlendExpander *expander, ListBase *list) { FModifier *fcm; @@ -10515,7 +10515,7 @@ static void expand_fmodifiers(FileData *fd, Main *mainvar, ListBase *list) case FMODIFIER_TYPE_PYTHON: { FMod_Python *data = (FMod_Python *)fcm->data; - expand_doit(fd, mainvar, data->script); + BLO_expand(expander, data->script); break; } @@ -10523,7 +10523,7 @@ static void expand_fmodifiers(FileData *fd, Main *mainvar, ListBase *list) } } -static void expand_fcurves(FileData *fd, Main *mainvar, ListBase *list) +static void expand_fcurves(BlendExpander *expander, ListBase *list) { FCurve *fcu; @@ -10536,54 +10536,54 @@ static void expand_fcurves(FileData *fd, Main *mainvar, ListBase *list) for (dvar = driver->variables.first; dvar; dvar = dvar->next) { DRIVER_TARGETS_LOOPER_BEGIN (dvar) { // TODO: only expand those that are going to get used? - expand_doit(fd, mainvar, dtar->id); + BLO_expand(expander, dtar->id); } DRIVER_TARGETS_LOOPER_END; } } /* F-Curve Modifiers */ - expand_fmodifiers(fd, mainvar, &fcu->modifiers); + expand_fmodifiers(expander, &fcu->modifiers); } } -static void expand_animdata_nlastrips(FileData *fd, Main *mainvar, ListBase *list) +static void expand_animdata_nlastrips(BlendExpander *expander, ListBase *list) { NlaStrip *strip; for (strip = list->first; strip; strip = strip->next) { /* check child strips */ - expand_animdata_nlastrips(fd, mainvar, &strip->strips); + expand_animdata_nlastrips(expander, &strip->strips); /* check F-Curves */ - expand_fcurves(fd, mainvar, &strip->fcurves); + expand_fcurves(expander, &strip->fcurves); /* check F-Modifiers */ - expand_fmodifiers(fd, mainvar, &strip->modifiers); + expand_fmodifiers(expander, &strip->modifiers); /* relink referenced action */ - expand_doit(fd, mainvar, strip->act); + BLO_expand(expander, strip->act); } } -static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt) +static void expand_animdata(BlendExpander *expander, AnimData *adt) { NlaTrack *nlt; /* own action */ - expand_doit(fd, mainvar, adt->action); - expand_doit(fd, mainvar, adt->tmpact); + BLO_expand(expander, adt->action); + BLO_expand(expander, adt->tmpact); /* drivers - assume that these F-Curves have driver data to be in this list... */ - expand_fcurves(fd, mainvar, &adt->drivers); + expand_fcurves(expander, &adt->drivers); /* nla-data - referenced actions */ for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) { - expand_animdata_nlastrips(fd, mainvar, &nlt->strips); + expand_animdata_nlastrips(expander, &nlt->strips); } } -static void expand_idprops(FileData *fd, Main *mainvar, IDProperty *prop) +static void expand_idprops(BlendExpander *expander, IDProperty *prop) { if (!prop) { return; @@ -10591,84 +10591,84 @@ static void expand_idprops(FileData *fd, Main *mainvar, IDProperty *prop) switch (prop->type) { case IDP_ID: - expand_doit(fd, mainvar, IDP_Id(prop)); + BLO_expand(expander, IDP_Id(prop)); break; case IDP_IDPARRAY: { IDProperty *idp_array = IDP_IDPArray(prop); for (int i = 0; i < prop->len; i++) { - expand_idprops(fd, mainvar, &idp_array[i]); + expand_idprops(expander, &idp_array[i]); } break; } case IDP_GROUP: LISTBASE_FOREACH (IDProperty *, loop, &prop->data.group) { - expand_idprops(fd, mainvar, loop); + expand_idprops(expander, loop); } break; } } -static void expand_id(FileData *fd, Main *mainvar, ID *id); -static void expand_nodetree(FileData *fd, Main *mainvar, bNodeTree *ntree); -static void expand_collection(FileData *fd, Main *mainvar, Collection *collection); +static void expand_id(BlendExpander *expander, ID *id); +static void expand_nodetree(BlendExpander *expander, bNodeTree *ntree); +static void expand_collection(BlendExpander *expander, Collection *collection); -static void expand_id_embedded_id(FileData *fd, Main *mainvar, ID *id) +static void expand_id_embedded_id(BlendExpander *expander, ID *id) { /* Handle 'private IDs'. */ bNodeTree *nodetree = ntreeFromID(id); if (nodetree != NULL) { - expand_id(fd, mainvar, &nodetree->id); - expand_nodetree(fd, mainvar, nodetree); + expand_id(expander, &nodetree->id); + expand_nodetree(expander, nodetree); } if (GS(id->name) == ID_SCE) { Scene *scene = (Scene *)id; if (scene->master_collection != NULL) { - expand_id(fd, mainvar, &scene->master_collection->id); - expand_collection(fd, mainvar, scene->master_collection); + expand_id(expander, &scene->master_collection->id); + expand_collection(expander, scene->master_collection); } } } -static void expand_id(FileData *fd, Main *mainvar, ID *id) +static void expand_id(BlendExpander *expander, ID *id) { - expand_idprops(fd, mainvar, id->properties); + expand_idprops(expander, id->properties); if (id->override_library) { - expand_doit(fd, mainvar, id->override_library->reference); - expand_doit(fd, mainvar, id->override_library->storage); + BLO_expand(expander, id->override_library->reference); + BLO_expand(expander, id->override_library->storage); } AnimData *adt = BKE_animdata_from_id(id); if (adt != NULL) { - expand_animdata(fd, mainvar, adt); + expand_animdata(expander, adt); } - expand_id_embedded_id(fd, mainvar, id); + expand_id_embedded_id(expander, id); } -static void expand_action(FileData *fd, Main *mainvar, bAction *act) +static void expand_action(BlendExpander *expander, bAction *act) { bActionChannel *chan; // XXX deprecated - old animation system -------------- for (chan = act->chanbase.first; chan; chan = chan->next) { - expand_doit(fd, mainvar, chan->ipo); - expand_constraint_channels(fd, mainvar, &chan->constraintChannels); + BLO_expand(expander, chan->ipo); + expand_constraint_channels(expander, &chan->constraintChannels); } // --------------------------------------------------- /* F-Curves in Action */ - expand_fcurves(fd, mainvar, &act->curves); + expand_fcurves(expander, &act->curves); LISTBASE_FOREACH (TimeMarker *, marker, &act->markers) { if (marker->camera) { - expand_doit(fd, mainvar, marker->camera); + BLO_expand(expander, marker->camera); } } } -static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list) +static void expand_keyingsets(BlendExpander *expander, ListBase *list) { KeyingSet *ks; KS_Path *ksp; @@ -10676,39 +10676,39 @@ static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list) /* expand the ID-pointers in KeyingSets's paths */ for (ks = list->first; ks; ks = ks->next) { for (ksp = ks->paths.first; ksp; ksp = ksp->next) { - expand_doit(fd, mainvar, ksp->id); + BLO_expand(expander, ksp->id); } } } -static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSettings *part) +static void expand_particlesettings(BlendExpander *expander, ParticleSettings *part) { int a; - expand_doit(fd, mainvar, part->instance_object); - expand_doit(fd, mainvar, part->instance_collection); - expand_doit(fd, mainvar, part->force_group); - expand_doit(fd, mainvar, part->bb_ob); - expand_doit(fd, mainvar, part->collision_group); + BLO_expand(expander, part->instance_object); + BLO_expand(expander, part->instance_collection); + BLO_expand(expander, part->force_group); + BLO_expand(expander, part->bb_ob); + BLO_expand(expander, part->collision_group); for (a = 0; a < MAX_MTEX; a++) { if (part->mtex[a]) { - expand_doit(fd, mainvar, part->mtex[a]->tex); - expand_doit(fd, mainvar, part->mtex[a]->object); + BLO_expand(expander, part->mtex[a]->tex); + BLO_expand(expander, part->mtex[a]->object); } } if (part->effector_weights) { - expand_doit(fd, mainvar, part->effector_weights->group); + BLO_expand(expander, part->effector_weights->group); } if (part->pd) { - expand_doit(fd, mainvar, part->pd->tex); - expand_doit(fd, mainvar, part->pd->f_source); + BLO_expand(expander, part->pd->tex); + BLO_expand(expander, part->pd->f_source); } if (part->pd2) { - expand_doit(fd, mainvar, part->pd2->tex); - expand_doit(fd, mainvar, part->pd2->f_source); + BLO_expand(expander, part->pd2->tex); + BLO_expand(expander, part->pd2->f_source); } if (part->boids) { @@ -10719,58 +10719,58 @@ static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSetting for (rule = state->rules.first; rule; rule = rule->next) { if (rule->type == eBoidRuleType_Avoid) { BoidRuleGoalAvoid *gabr = (BoidRuleGoalAvoid *)rule; - expand_doit(fd, mainvar, gabr->ob); + BLO_expand(expander, gabr->ob); } else if (rule->type == eBoidRuleType_FollowLeader) { BoidRuleFollowLeader *flbr = (BoidRuleFollowLeader *)rule; - expand_doit(fd, mainvar, flbr->ob); + BLO_expand(expander, flbr->ob); } } } } LISTBASE_FOREACH (ParticleDupliWeight *, dw, &part->instance_weights) { - expand_doit(fd, mainvar, dw->ob); + BLO_expand(expander, dw->ob); } } -static void expand_collection(FileData *fd, Main *mainvar, Collection *collection) +static void expand_collection(BlendExpander *expander, Collection *collection) { LISTBASE_FOREACH (CollectionObject *, cob, &collection->gobject) { - expand_doit(fd, mainvar, cob->ob); + BLO_expand(expander, cob->ob); } LISTBASE_FOREACH (CollectionChild *, child, &collection->children) { - expand_doit(fd, mainvar, child->collection); + BLO_expand(expander, child->collection); } #ifdef USE_COLLECTION_COMPAT_28 if (collection->collection != NULL) { - expand_scene_collection(fd, mainvar, collection->collection); + expand_scene_collection(expander, collection->collection); } #endif } -static void expand_key(FileData *fd, Main *mainvar, Key *key) +static void expand_key(BlendExpander *expander, Key *key) { - expand_doit(fd, mainvar, key->ipo); // XXX deprecated - old animation system + BLO_expand(expander, key->ipo); // XXX deprecated - old animation system } -static void expand_node_socket(FileData *fd, Main *mainvar, bNodeSocket *sock) +static void expand_node_socket(BlendExpander *expander, bNodeSocket *sock) { - expand_idprops(fd, mainvar, sock->prop); + expand_idprops(expander, sock->prop); if (sock->default_value != NULL) { switch ((eNodeSocketDatatype)sock->type) { case SOCK_OBJECT: { bNodeSocketValueObject *default_value = sock->default_value; - expand_doit(fd, mainvar, default_value->value); + BLO_expand(expander, default_value->value); break; } case SOCK_IMAGE: { bNodeSocketValueImage *default_value = sock->default_value; - expand_doit(fd, mainvar, default_value->value); + BLO_expand(expander, default_value->value); break; } case SOCK_FLOAT: @@ -10791,155 +10791,145 @@ static void expand_node_socket(FileData *fd, Main *mainvar, bNodeSocket *sock) } } -static void expand_node_sockets(FileData *fd, Main *mainvar, ListBase *sockets) +static void expand_node_sockets(BlendExpander *expander, ListBase *sockets) { LISTBASE_FOREACH (bNodeSocket *, sock, sockets) { - expand_node_socket(fd, mainvar, sock); + expand_node_socket(expander, sock); } } -static void expand_nodetree(FileData *fd, Main *mainvar, bNodeTree *ntree) +static void expand_nodetree(BlendExpander *expander, bNodeTree *ntree) { bNode *node; if (ntree->gpd) { - expand_doit(fd, mainvar, ntree->gpd); + BLO_expand(expander, ntree->gpd); } for (node = ntree->nodes.first; node; node = node->next) { if (node->id && node->type != CMP_NODE_R_LAYERS) { - expand_doit(fd, mainvar, node->id); + BLO_expand(expander, node->id); } - expand_idprops(fd, mainvar, node->prop); + expand_idprops(expander, node->prop); - expand_node_sockets(fd, mainvar, &node->inputs); - expand_node_sockets(fd, mainvar, &node->outputs); + expand_node_sockets(expander, &node->inputs); + expand_node_sockets(expander, &node->outputs); } - expand_node_sockets(fd, mainvar, &ntree->inputs); - expand_node_sockets(fd, mainvar, &ntree->outputs); + expand_node_sockets(expander, &ntree->inputs); + expand_node_sockets(expander, &ntree->outputs); } -static void expand_texture(FileData *fd, Main *mainvar, Tex *tex) +static void expand_texture(BlendExpander *expander, Tex *tex) { - expand_doit(fd, mainvar, tex->ima); - expand_doit(fd, mainvar, tex->ipo); // XXX deprecated - old animation system + BLO_expand(expander, tex->ima); + BLO_expand(expander, tex->ipo); // XXX deprecated - old animation system } -static void expand_brush(FileData *fd, Main *mainvar, Brush *brush) +static void expand_brush(BlendExpander *expander, Brush *brush) { - expand_doit(fd, mainvar, brush->mtex.tex); - expand_doit(fd, mainvar, brush->mask_mtex.tex); - expand_doit(fd, mainvar, brush->clone.image); - expand_doit(fd, mainvar, brush->paint_curve); + BLO_expand(expander, brush->mtex.tex); + BLO_expand(expander, brush->mask_mtex.tex); + BLO_expand(expander, brush->clone.image); + BLO_expand(expander, brush->paint_curve); if (brush->gpencil_settings != NULL) { - expand_doit(fd, mainvar, brush->gpencil_settings->material); + BLO_expand(expander, brush->gpencil_settings->material); } } -static void expand_material(FileData *fd, Main *mainvar, Material *ma) +static void expand_material(BlendExpander *expander, Material *ma) { - expand_doit(fd, mainvar, ma->ipo); // XXX deprecated - old animation system + BLO_expand(expander, ma->ipo); // XXX deprecated - old animation system if (ma->gp_style) { MaterialGPencilStyle *gp_style = ma->gp_style; - expand_doit(fd, mainvar, gp_style->sima); - expand_doit(fd, mainvar, gp_style->ima); + BLO_expand(expander, gp_style->sima); + BLO_expand(expander, gp_style->ima); } } -static void expand_light(FileData *fd, Main *mainvar, Light *la) +static void expand_light(BlendExpander *expander, Light *la) { - expand_doit(fd, mainvar, la->ipo); // XXX deprecated - old animation system + BLO_expand(expander, la->ipo); // XXX deprecated - old animation system } -static void expand_lattice(FileData *fd, Main *mainvar, Lattice *lt) +static void expand_lattice(BlendExpander *expander, Lattice *lt) { - expand_doit(fd, mainvar, lt->ipo); // XXX deprecated - old animation system - expand_doit(fd, mainvar, lt->key); + BLO_expand(expander, lt->ipo); // XXX deprecated - old animation system + BLO_expand(expander, lt->key); } -static void expand_world(FileData *fd, Main *mainvar, World *wrld) +static void expand_world(BlendExpander *expander, World *wrld) { - expand_doit(fd, mainvar, wrld->ipo); // XXX deprecated - old animation system + BLO_expand(expander, wrld->ipo); // XXX deprecated - old animation system } -static void expand_mball(FileData *fd, Main *mainvar, MetaBall *mb) +static void expand_mball(BlendExpander *expander, MetaBall *mb) { int a; for (a = 0; a < mb->totcol; a++) { - expand_doit(fd, mainvar, mb->mat[a]); + BLO_expand(expander, mb->mat[a]); } } -static void expand_curve(FileData *fd, Main *mainvar, Curve *cu) +static void expand_curve(BlendExpander *expander, Curve *cu) { int a; for (a = 0; a < cu->totcol; a++) { - expand_doit(fd, mainvar, cu->mat[a]); + BLO_expand(expander, cu->mat[a]); } - expand_doit(fd, mainvar, cu->vfont); - expand_doit(fd, mainvar, cu->vfontb); - expand_doit(fd, mainvar, cu->vfonti); - expand_doit(fd, mainvar, cu->vfontbi); - expand_doit(fd, mainvar, cu->key); - expand_doit(fd, mainvar, cu->ipo); // XXX deprecated - old animation system - expand_doit(fd, mainvar, cu->bevobj); - expand_doit(fd, mainvar, cu->taperobj); - expand_doit(fd, mainvar, cu->textoncurve); + BLO_expand(expander, cu->vfont); + BLO_expand(expander, cu->vfontb); + BLO_expand(expander, cu->vfonti); + BLO_expand(expander, cu->vfontbi); + BLO_expand(expander, cu->key); + BLO_expand(expander, cu->ipo); // XXX deprecated - old animation system + BLO_expand(expander, cu->bevobj); + BLO_expand(expander, cu->taperobj); + BLO_expand(expander, cu->textoncurve); } -static void expand_mesh(FileData *fd, Main *mainvar, Mesh *me) +static void expand_mesh(BlendExpander *expander, Mesh *me) { int a; for (a = 0; a < me->totcol; a++) { - expand_doit(fd, mainvar, me->mat[a]); + BLO_expand(expander, me->mat[a]); } - expand_doit(fd, mainvar, me->key); - expand_doit(fd, mainvar, me->texcomesh); + BLO_expand(expander, me->key); + BLO_expand(expander, me->texcomesh); } -/* temp struct used to transport needed info to expand_constraint_cb() */ -typedef struct tConstraintExpandData { - FileData *fd; - Main *mainvar; -} tConstraintExpandData; /* callback function used to expand constraint ID-links */ static void expand_constraint_cb(bConstraint *UNUSED(con), ID **idpoin, bool UNUSED(is_reference), void *userdata) { - tConstraintExpandData *ced = (tConstraintExpandData *)userdata; - expand_doit(ced->fd, ced->mainvar, *idpoin); + BlendExpander *expander = userdata; + BLO_expand(expander, *idpoin); } -static void expand_constraints(FileData *fd, Main *mainvar, ListBase *lb) +static void expand_constraints(BlendExpander *expander, ListBase *lb) { - tConstraintExpandData ced; bConstraint *curcon; - /* relink all ID-blocks used by the constraints */ - ced.fd = fd; - ced.mainvar = mainvar; - - BKE_constraints_id_loop(lb, expand_constraint_cb, &ced); + BKE_constraints_id_loop(lb, expand_constraint_cb, expander); /* deprecated manual expansion stuff */ for (curcon = lb->first; curcon; curcon = curcon->next) { if (curcon->ipo) { - expand_doit(fd, mainvar, curcon->ipo); // XXX deprecated - old animation system + BLO_expand(expander, curcon->ipo); // XXX deprecated - old animation system } } } -static void expand_pose(FileData *fd, Main *mainvar, bPose *pose) +static void expand_pose(BlendExpander *expander, bPose *pose) { bPoseChannel *chan; @@ -10948,25 +10938,25 @@ static void expand_pose(FileData *fd, Main *mainvar, bPose *pose) } for (chan = pose->chanbase.first; chan; chan = chan->next) { - expand_constraints(fd, mainvar, &chan->constraints); - expand_idprops(fd, mainvar, chan->prop); - expand_doit(fd, mainvar, chan->custom); + expand_constraints(expander, &chan->constraints); + expand_idprops(expander, chan->prop); + BLO_expand(expander, chan->custom); } } -static void expand_bones(FileData *fd, Main *mainvar, Bone *bone) +static void expand_bones(BlendExpander *expander, Bone *bone) { - expand_idprops(fd, mainvar, bone->prop); + expand_idprops(expander, bone->prop); LISTBASE_FOREACH (Bone *, curBone, &bone->childbase) { - expand_bones(fd, mainvar, curBone); + expand_bones(expander, curBone); } } -static void expand_armature(FileData *fd, Main *mainvar, bArmature *arm) +static void expand_armature(BlendExpander *expander, bArmature *arm) { LISTBASE_FOREACH (Bone *, curBone, &arm->bonebase) { - expand_bones(fd, mainvar, curBone); + expand_bones(expander, curBone); } } @@ -10975,298 +10965,268 @@ static void expand_object_expandModifiers(void *userData, ID **idpoin, int UNUSED(cb_flag)) { - struct { - FileData *fd; - Main *mainvar; - } *data = userData; - - FileData *fd = data->fd; - Main *mainvar = data->mainvar; - - expand_doit(fd, mainvar, *idpoin); + BlendExpander *expander = userData; + BLO_expand(expander, *idpoin); } -static void expand_object(FileData *fd, Main *mainvar, Object *ob) +static void expand_object(BlendExpander *expander, Object *ob) { ParticleSystem *psys; bActionStrip *strip; PartEff *paf; int a; - expand_doit(fd, mainvar, ob->data); + BLO_expand(expander, ob->data); /* expand_object_expandModifier() */ if (ob->modifiers.first) { - struct { - FileData *fd; - Main *mainvar; - } data; - data.fd = fd; - data.mainvar = mainvar; - - BKE_modifiers_foreach_ID_link(ob, expand_object_expandModifiers, (void *)&data); + BKE_modifiers_foreach_ID_link(ob, expand_object_expandModifiers, expander); } /* expand_object_expandModifier() */ if (ob->greasepencil_modifiers.first) { - struct { - FileData *fd; - Main *mainvar; - } data; - data.fd = fd; - data.mainvar = mainvar; - - BKE_gpencil_modifiers_foreach_ID_link(ob, expand_object_expandModifiers, (void *)&data); + BKE_gpencil_modifiers_foreach_ID_link(ob, expand_object_expandModifiers, expander); } /* expand_object_expandShaderFx() */ if (ob->shader_fx.first) { - struct { - FileData *fd; - Main *mainvar; - } data; - data.fd = fd; - data.mainvar = mainvar; - - BKE_shaderfx_foreach_ID_link(ob, expand_object_expandModifiers, (void *)&data); + BKE_shaderfx_foreach_ID_link(ob, expand_object_expandModifiers, expander); } - expand_pose(fd, mainvar, ob->pose); - expand_doit(fd, mainvar, ob->poselib); - expand_constraints(fd, mainvar, &ob->constraints); + expand_pose(expander, ob->pose); + BLO_expand(expander, ob->poselib); + expand_constraints(expander, &ob->constraints); - expand_doit(fd, mainvar, ob->gpd); + BLO_expand(expander, ob->gpd); // XXX deprecated - old animation system (for version patching only) - expand_doit(fd, mainvar, ob->ipo); - expand_doit(fd, mainvar, ob->action); + BLO_expand(expander, ob->ipo); + BLO_expand(expander, ob->action); - expand_constraint_channels(fd, mainvar, &ob->constraintChannels); + expand_constraint_channels(expander, &ob->constraintChannels); for (strip = ob->nlastrips.first; strip; strip = strip->next) { - expand_doit(fd, mainvar, strip->object); - expand_doit(fd, mainvar, strip->act); - expand_doit(fd, mainvar, strip->ipo); + BLO_expand(expander, strip->object); + BLO_expand(expander, strip->act); + BLO_expand(expander, strip->ipo); } // XXX deprecated - old animation system (for version patching only) for (a = 0; a < ob->totcol; a++) { - expand_doit(fd, mainvar, ob->mat[a]); + BLO_expand(expander, ob->mat[a]); } paf = blo_do_version_give_parteff_245(ob); if (paf && paf->group) { - expand_doit(fd, mainvar, paf->group); + BLO_expand(expander, paf->group); } if (ob->instance_collection) { - expand_doit(fd, mainvar, ob->instance_collection); + BLO_expand(expander, ob->instance_collection); } if (ob->proxy) { - expand_doit(fd, mainvar, ob->proxy); + BLO_expand(expander, ob->proxy); } if (ob->proxy_group) { - expand_doit(fd, mainvar, ob->proxy_group); + BLO_expand(expander, ob->proxy_group); } for (psys = ob->particlesystem.first; psys; psys = psys->next) { - expand_doit(fd, mainvar, psys->part); + BLO_expand(expander, psys->part); } if (ob->pd) { - expand_doit(fd, mainvar, ob->pd->tex); - expand_doit(fd, mainvar, ob->pd->f_source); + BLO_expand(expander, ob->pd->tex); + BLO_expand(expander, ob->pd->f_source); } if (ob->soft) { - expand_doit(fd, mainvar, ob->soft->collision_group); + BLO_expand(expander, ob->soft->collision_group); if (ob->soft->effector_weights) { - expand_doit(fd, mainvar, ob->soft->effector_weights->group); + BLO_expand(expander, ob->soft->effector_weights->group); } } if (ob->rigidbody_constraint) { - expand_doit(fd, mainvar, ob->rigidbody_constraint->ob1); - expand_doit(fd, mainvar, ob->rigidbody_constraint->ob2); + BLO_expand(expander, ob->rigidbody_constraint->ob1); + BLO_expand(expander, ob->rigidbody_constraint->ob2); } if (ob->currentlod) { LodLevel *level; for (level = ob->lodlevels.first; level; level = level->next) { - expand_doit(fd, mainvar, level->source); + BLO_expand(expander, level->source); } } } #ifdef USE_COLLECTION_COMPAT_28 -static void expand_scene_collection(FileData *fd, Main *mainvar, SceneCollection *sc) +static void expand_scene_collection(BlendExpander *expander, SceneCollection *sc) { LISTBASE_FOREACH (LinkData *, link, &sc->objects) { - expand_doit(fd, mainvar, link->data); + BLO_expand(expander, link->data); } LISTBASE_FOREACH (SceneCollection *, nsc, &sc->scene_collections) { - expand_scene_collection(fd, mainvar, nsc); + expand_scene_collection(expander, nsc); } } #endif -static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) +static void expand_scene(BlendExpander *expander, Scene *sce) { SceneRenderLayer *srl; FreestyleModuleConfig *module; FreestyleLineSet *lineset; LISTBASE_FOREACH (Base *, base_legacy, &sce->base) { - expand_doit(fd, mainvar, base_legacy->object); + BLO_expand(expander, base_legacy->object); } - expand_doit(fd, mainvar, sce->camera); - expand_doit(fd, mainvar, sce->world); + BLO_expand(expander, sce->camera); + BLO_expand(expander, sce->world); - expand_keyingsets(fd, mainvar, &sce->keyingsets); + expand_keyingsets(expander, &sce->keyingsets); if (sce->set) { - expand_doit(fd, mainvar, sce->set); + BLO_expand(expander, sce->set); } for (srl = sce->r.layers.first; srl; srl = srl->next) { - expand_doit(fd, mainvar, srl->mat_override); + BLO_expand(expander, srl->mat_override); for (module = srl->freestyleConfig.modules.first; module; module = module->next) { if (module->script) { - expand_doit(fd, mainvar, module->script); + BLO_expand(expander, module->script); } } for (lineset = srl->freestyleConfig.linesets.first; lineset; lineset = lineset->next) { if (lineset->group) { - expand_doit(fd, mainvar, lineset->group); + BLO_expand(expander, lineset->group); } - expand_doit(fd, mainvar, lineset->linestyle); + BLO_expand(expander, lineset->linestyle); } } LISTBASE_FOREACH (ViewLayer *, view_layer, &sce->view_layers) { - expand_idprops(fd, mainvar, view_layer->id_properties); + expand_idprops(expander, view_layer->id_properties); for (module = view_layer->freestyle_config.modules.first; module; module = module->next) { if (module->script) { - expand_doit(fd, mainvar, module->script); + BLO_expand(expander, module->script); } } for (lineset = view_layer->freestyle_config.linesets.first; lineset; lineset = lineset->next) { if (lineset->group) { - expand_doit(fd, mainvar, lineset->group); + BLO_expand(expander, lineset->group); } - expand_doit(fd, mainvar, lineset->linestyle); + BLO_expand(expander, lineset->linestyle); } } if (sce->gpd) { - expand_doit(fd, mainvar, sce->gpd); + BLO_expand(expander, sce->gpd); } if (sce->ed) { Sequence *seq; SEQ_BEGIN (sce->ed, seq) { - expand_idprops(fd, mainvar, seq->prop); + expand_idprops(expander, seq->prop); if (seq->scene) { - expand_doit(fd, mainvar, seq->scene); + BLO_expand(expander, seq->scene); } if (seq->scene_camera) { - expand_doit(fd, mainvar, seq->scene_camera); + BLO_expand(expander, seq->scene_camera); } if (seq->clip) { - expand_doit(fd, mainvar, seq->clip); + BLO_expand(expander, seq->clip); } if (seq->mask) { - expand_doit(fd, mainvar, seq->mask); + BLO_expand(expander, seq->mask); } if (seq->sound) { - expand_doit(fd, mainvar, seq->sound); + BLO_expand(expander, seq->sound); } if (seq->type == SEQ_TYPE_TEXT && seq->effectdata) { TextVars *data = seq->effectdata; - expand_doit(fd, mainvar, data->text_font); + BLO_expand(expander, data->text_font); } } SEQ_END; } if (sce->rigidbody_world) { - expand_doit(fd, mainvar, sce->rigidbody_world->group); - expand_doit(fd, mainvar, sce->rigidbody_world->constraints); + BLO_expand(expander, sce->rigidbody_world->group); + BLO_expand(expander, sce->rigidbody_world->constraints); } LISTBASE_FOREACH (TimeMarker *, marker, &sce->markers) { if (marker->camera) { - expand_doit(fd, mainvar, marker->camera); + BLO_expand(expander, marker->camera); } } - expand_doit(fd, mainvar, sce->clip); + BLO_expand(expander, sce->clip); #ifdef USE_COLLECTION_COMPAT_28 if (sce->collection) { - expand_scene_collection(fd, mainvar, sce->collection); + expand_scene_collection(expander, sce->collection); } #endif if (sce->r.bake.cage_object) { - expand_doit(fd, mainvar, sce->r.bake.cage_object); + BLO_expand(expander, sce->r.bake.cage_object); } } -static void expand_camera(FileData *fd, Main *mainvar, Camera *ca) +static void expand_camera(BlendExpander *expander, Camera *ca) { - expand_doit(fd, mainvar, ca->ipo); // XXX deprecated - old animation system + BLO_expand(expander, ca->ipo); // XXX deprecated - old animation system LISTBASE_FOREACH (CameraBGImage *, bgpic, &ca->bg_images) { if (bgpic->source == CAM_BGIMG_SOURCE_IMAGE) { - expand_doit(fd, mainvar, bgpic->ima); + BLO_expand(expander, bgpic->ima); } else if (bgpic->source == CAM_BGIMG_SOURCE_MOVIE) { - expand_doit(fd, mainvar, bgpic->ima); + BLO_expand(expander, bgpic->ima); } } } -static void expand_cachefile(FileData *UNUSED(fd), - Main *UNUSED(mainvar), - CacheFile *UNUSED(cache_file)) +static void expand_cachefile(BlendExpander *UNUSED(expander), CacheFile *UNUSED(cache_file)) { } -static void expand_speaker(FileData *fd, Main *mainvar, Speaker *spk) +static void expand_speaker(BlendExpander *expander, Speaker *spk) { - expand_doit(fd, mainvar, spk->sound); + BLO_expand(expander, spk->sound); } -static void expand_sound(FileData *fd, Main *mainvar, bSound *snd) +static void expand_sound(BlendExpander *expander, bSound *snd) { - expand_doit(fd, mainvar, snd->ipo); // XXX deprecated - old animation system + BLO_expand(expander, snd->ipo); // XXX deprecated - old animation system } -static void expand_lightprobe(FileData *UNUSED(fd), Main *UNUSED(mainvar), LightProbe *UNUSED(prb)) +static void expand_lightprobe(BlendExpander *UNUSED(expander), LightProbe *UNUSED(prb)) { } -static void expand_movieclip(FileData *UNUSED(fd), Main *UNUSED(mainvar), MovieClip *UNUSED(clip)) +static void expand_movieclip(BlendExpander *UNUSED(expander), MovieClip *UNUSED(clip)) { } -static void expand_mask_parent(FileData *fd, Main *mainvar, MaskParent *parent) +static void expand_mask_parent(BlendExpander *expander, MaskParent *parent) { if (parent->id) { - expand_doit(fd, mainvar, parent->id); + BLO_expand(expander, parent->id); } } -static void expand_mask(FileData *fd, Main *mainvar, Mask *mask) +static void expand_mask(BlendExpander *expander, Mask *mask) { MaskLayer *mask_layer; @@ -11279,98 +11239,98 @@ static void expand_mask(FileData *fd, Main *mainvar, Mask *mask) for (i = 0; i < spline->tot_point; i++) { MaskSplinePoint *point = &spline->points[i]; - expand_mask_parent(fd, mainvar, &point->parent); + expand_mask_parent(expander, &point->parent); } - expand_mask_parent(fd, mainvar, &spline->parent); + expand_mask_parent(expander, &spline->parent); } } } -static void expand_linestyle(FileData *fd, Main *mainvar, FreestyleLineStyle *linestyle) +static void expand_linestyle(BlendExpander *expander, FreestyleLineStyle *linestyle) { int a; LineStyleModifier *m; for (a = 0; a < MAX_MTEX; a++) { if (linestyle->mtex[a]) { - expand_doit(fd, mainvar, linestyle->mtex[a]->tex); - expand_doit(fd, mainvar, linestyle->mtex[a]->object); + BLO_expand(expander, linestyle->mtex[a]->tex); + BLO_expand(expander, linestyle->mtex[a]->object); } } for (m = linestyle->color_modifiers.first; m; m = m->next) { if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) { - expand_doit(fd, mainvar, ((LineStyleColorModifier_DistanceFromObject *)m)->target); + BLO_expand(expander, ((LineStyleColorModifier_DistanceFromObject *)m)->target); } } for (m = linestyle->alpha_modifiers.first; m; m = m->next) { if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) { - expand_doit(fd, mainvar, ((LineStyleAlphaModifier_DistanceFromObject *)m)->target); + BLO_expand(expander, ((LineStyleAlphaModifier_DistanceFromObject *)m)->target); } } for (m = linestyle->thickness_modifiers.first; m; m = m->next) { if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) { - expand_doit(fd, mainvar, ((LineStyleThicknessModifier_DistanceFromObject *)m)->target); + BLO_expand(expander, ((LineStyleThicknessModifier_DistanceFromObject *)m)->target); } } } -static void expand_gpencil(FileData *fd, Main *mainvar, bGPdata *gpd) +static void expand_gpencil(BlendExpander *expander, bGPdata *gpd) { LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) { - expand_doit(fd, mainvar, gpl->parent); + BLO_expand(expander, gpl->parent); } for (int a = 0; a < gpd->totcol; a++) { - expand_doit(fd, mainvar, gpd->mat[a]); + BLO_expand(expander, gpd->mat[a]); } } -static void expand_workspace(FileData *fd, Main *mainvar, WorkSpace *workspace) +static void expand_workspace(BlendExpander *expander, WorkSpace *workspace) { LISTBASE_FOREACH (WorkSpaceLayout *, layout, &workspace->layouts) { - expand_doit(fd, mainvar, BKE_workspace_layout_screen_get(layout)); + BLO_expand(expander, BKE_workspace_layout_screen_get(layout)); } } -static void expand_hair(FileData *fd, Main *mainvar, Hair *hair) +static void expand_hair(BlendExpander *expander, Hair *hair) { for (int a = 0; a < hair->totcol; a++) { - expand_doit(fd, mainvar, hair->mat[a]); + BLO_expand(expander, hair->mat[a]); } if (hair->adt) { - expand_animdata(fd, mainvar, hair->adt); + expand_animdata(expander, hair->adt); } } -static void expand_pointcloud(FileData *fd, Main *mainvar, PointCloud *pointcloud) +static void expand_pointcloud(BlendExpander *expander, PointCloud *pointcloud) { for (int a = 0; a < pointcloud->totcol; a++) { - expand_doit(fd, mainvar, pointcloud->mat[a]); + BLO_expand(expander, pointcloud->mat[a]); } if (pointcloud->adt) { - expand_animdata(fd, mainvar, pointcloud->adt); + expand_animdata(expander, pointcloud->adt); } } -static void expand_volume(FileData *fd, Main *mainvar, Volume *volume) +static void expand_volume(BlendExpander *expander, Volume *volume) { for (int a = 0; a < volume->totcol; a++) { - expand_doit(fd, mainvar, volume->mat[a]); + BLO_expand(expander, volume->mat[a]); } if (volume->adt) { - expand_animdata(fd, mainvar, volume->adt); + expand_animdata(expander, volume->adt); } } -static void expand_simulation(FileData *fd, Main *mainvar, Simulation *simulation) +static void expand_simulation(BlendExpander *expander, Simulation *simulation) { if (simulation->adt) { - expand_animdata(fd, mainvar, simulation->adt); + expand_animdata(expander, simulation->adt); } } @@ -11399,6 +11359,8 @@ void BLO_expand_main(void *fdhandle, Main *mainvar) int a; bool do_it = true; + BlendExpander expander = {fd, mainvar}; + while (do_it) { do_it = false; @@ -11407,104 +11369,104 @@ void BLO_expand_main(void *fdhandle, Main *mainvar) id = lbarray[a]->first; while (id) { if (id->tag & LIB_TAG_NEED_EXPAND) { - expand_id(fd, mainvar, id); + expand_id(&expander, id); switch (GS(id->name)) { case ID_OB: - expand_object(fd, mainvar, (Object *)id); + expand_object(&expander, (Object *)id); break; case ID_ME: - expand_mesh(fd, mainvar, (Mesh *)id); + expand_mesh(&expander, (Mesh *)id); break; case ID_CU: - expand_curve(fd, mainvar, (Curve *)id); + expand_curve(&expander, (Curve *)id); break; case ID_MB: - expand_mball(fd, mainvar, (MetaBall *)id); + expand_mball(&expander, (MetaBall *)id); break; case ID_SCE: - expand_scene(fd, mainvar, (Scene *)id); + expand_scene(&expander, (Scene *)id); break; case ID_MA: - expand_material(fd, mainvar, (Material *)id); + expand_material(&expander, (Material *)id); break; case ID_TE: - expand_texture(fd, mainvar, (Tex *)id); + expand_texture(&expander, (Tex *)id); break; case ID_WO: - expand_world(fd, mainvar, (World *)id); + expand_world(&expander, (World *)id); break; case ID_LT: - expand_lattice(fd, mainvar, (Lattice *)id); + expand_lattice(&expander, (Lattice *)id); break; case ID_LA: - expand_light(fd, mainvar, (Light *)id); + expand_light(&expander, (Light *)id); break; case ID_KE: - expand_key(fd, mainvar, (Key *)id); + expand_key(&expander, (Key *)id); break; case ID_CA: - expand_camera(fd, mainvar, (Camera *)id); + expand_camera(&expander, (Camera *)id); break; case ID_SPK: - expand_speaker(fd, mainvar, (Speaker *)id); + expand_speaker(&expander, (Speaker *)id); break; case ID_SO: - expand_sound(fd, mainvar, (bSound *)id); + expand_sound(&expander, (bSound *)id); break; case ID_LP: - expand_lightprobe(fd, mainvar, (LightProbe *)id); + expand_lightprobe(&expander, (LightProbe *)id); break; case ID_AR: - expand_armature(fd, mainvar, (bArmature *)id); + expand_armature(&expander, (bArmature *)id); break; case ID_AC: - expand_action(fd, mainvar, (bAction *)id); // XXX deprecated - old animation system + expand_action(&expander, (bAction *)id); // XXX deprecated - old animation system break; case ID_GR: - expand_collection(fd, mainvar, (Collection *)id); + expand_collection(&expander, (Collection *)id); break; case ID_NT: - expand_nodetree(fd, mainvar, (bNodeTree *)id); + expand_nodetree(&expander, (bNodeTree *)id); break; case ID_BR: - expand_brush(fd, mainvar, (Brush *)id); + expand_brush(&expander, (Brush *)id); break; case ID_IP: - expand_ipo(fd, mainvar, (Ipo *)id); // XXX deprecated - old animation system + expand_ipo(&expander, (Ipo *)id); // XXX deprecated - old animation system break; case ID_PA: - expand_particlesettings(fd, mainvar, (ParticleSettings *)id); + expand_particlesettings(&expander, (ParticleSettings *)id); break; case ID_MC: - expand_movieclip(fd, mainvar, (MovieClip *)id); + expand_movieclip(&expander, (MovieClip *)id); break; case ID_MSK: - expand_mask(fd, mainvar, (Mask *)id); + expand_mask(&expander, (Mask *)id); break; case ID_LS: - expand_linestyle(fd, mainvar, (FreestyleLineStyle *)id); + expand_linestyle(&expander, (FreestyleLineStyle *)id); break; case ID_GD: - expand_gpencil(fd, mainvar, (bGPdata *)id); + expand_gpencil(&expander, (bGPdata *)id); break; case ID_CF: - expand_cachefile(fd, mainvar, (CacheFile *)id); + expand_cachefile(&expander, (CacheFile *)id); break; case ID_WS: - expand_workspace(fd, mainvar, (WorkSpace *)id); + expand_workspace(&expander, (WorkSpace *)id); break; case ID_HA: - expand_hair(fd, mainvar, (Hair *)id); + expand_hair(&expander, (Hair *)id); break; case ID_PT: - expand_pointcloud(fd, mainvar, (PointCloud *)id); + expand_pointcloud(&expander, (PointCloud *)id); break; case ID_VO: - expand_volume(fd, mainvar, (Volume *)id); + expand_volume(&expander, (Volume *)id); break; case ID_SIM: - expand_simulation(fd, mainvar, (Simulation *)id); + expand_simulation(&expander, (Simulation *)id); break; default: break; |