Refactor: use new api for expand in blenloader

This is part of T76372.
This commit is contained in:
Jacques Lucke
2020-06-26 16:52:44 +02:00
parent 9b4e621db0
commit 4006cd2d2c

View File

@@ -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;