Refactor: use new api for direct linking keying sets, node sockets and pose

This commit is contained in:
2020-06-07 10:35:34 +02:00
parent 6c6658ccc0
commit a99a8061ae

View File

@@ -3487,8 +3487,8 @@ static void lib_link_keyingsets(FileData *fd, ID *id, ListBase *list)
} }
} }
/* NOTE: this assumes that link_list has already been called on the list */ /* NOTE: this assumes that BLO_read_list has already been called on the list */
static void direct_link_keyingsets(FileData *fd, ListBase *list) static void direct_link_keyingsets(BlendDataReader *reader, ListBase *list)
{ {
KeyingSet *ks; KeyingSet *ks;
KS_Path *ksp; KS_Path *ksp;
@@ -3496,11 +3496,11 @@ static void direct_link_keyingsets(FileData *fd, ListBase *list)
/* link KeyingSet data to KeyingSet again (non ID-libs) */ /* link KeyingSet data to KeyingSet again (non ID-libs) */
for (ks = list->first; ks; ks = ks->next) { for (ks = list->first; ks; ks = ks->next) {
/* paths */ /* paths */
link_list(fd, &ks->paths); BLO_read_list(reader, &ks->paths);
for (ksp = ks->paths.first; ksp; ksp = ksp->next) { for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
/* rna path */ /* rna path */
ksp->rna_path = newdataadr(fd, ksp->rna_path); BLO_read_data_address(reader, &ksp->rna_path);
} }
} }
} }
@@ -3735,15 +3735,16 @@ static void lib_link_nodetree(FileData *fd, Main *UNUSED(bmain), bNodeTree *ntre
lib_link_ntree(fd, ntree->id.lib, ntree); lib_link_ntree(fd, ntree->id.lib, ntree);
} }
static void direct_link_node_socket(FileData *fd, bNodeSocket *sock) static void direct_link_node_socket(BlendDataReader *reader, bNodeSocket *sock)
{ {
sock->prop = newdataadr(fd, sock->prop); BLO_read_data_address(reader, &sock->prop);
IDP_DirectLinkGroup_OrFree(&sock->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); IDP_DirectLinkGroup_OrFree(
&sock->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
sock->link = newdataadr(fd, sock->link); BLO_read_data_address(reader, &sock->link);
sock->typeinfo = NULL; sock->typeinfo = NULL;
sock->storage = newdataadr(fd, sock->storage); BLO_read_data_address(reader, &sock->storage);
sock->default_value = newdataadr(fd, sock->default_value); BLO_read_data_address(reader, &sock->default_value);
sock->cache = NULL; sock->cache = NULL;
} }
@@ -3861,10 +3862,10 @@ static void direct_link_nodetree(BlendDataReader *reader, bNodeTree *ntree)
node->lasty = 0; node->lasty = 0;
for (sock = node->inputs.first; sock; sock = sock->next) { for (sock = node->inputs.first; sock; sock = sock->next) {
direct_link_node_socket(reader->fd, sock); direct_link_node_socket(reader, sock);
} }
for (sock = node->outputs.first; sock; sock = sock->next) { for (sock = node->outputs.first; sock; sock = sock->next) {
direct_link_node_socket(reader->fd, sock); direct_link_node_socket(reader, sock);
} }
} }
@@ -3872,10 +3873,10 @@ static void direct_link_nodetree(BlendDataReader *reader, bNodeTree *ntree)
BLO_read_list(reader, &ntree->inputs); BLO_read_list(reader, &ntree->inputs);
BLO_read_list(reader, &ntree->outputs); BLO_read_list(reader, &ntree->outputs);
for (sock = ntree->inputs.first; sock; sock = sock->next) { for (sock = ntree->inputs.first; sock; sock = sock->next) {
direct_link_node_socket(reader->fd, sock); direct_link_node_socket(reader, sock);
} }
for (sock = ntree->outputs.first; sock; sock = sock->next) { for (sock = ntree->outputs.first; sock; sock = sock->next) {
direct_link_node_socket(reader->fd, sock); direct_link_node_socket(reader, sock);
} }
for (link = ntree->links.first; link; link = link->next) { for (link = ntree->links.first; link; link = link->next) {
@@ -3960,35 +3961,36 @@ static void lib_link_constraints(FileData *fd, ID *id, ListBase *conlist)
BKE_constraints_id_loop(conlist, lib_link_constraint_cb, &cld); BKE_constraints_id_loop(conlist, lib_link_constraint_cb, &cld);
} }
static void direct_link_constraints(FileData *fd, ListBase *lb) static void direct_link_constraints(BlendDataReader *reader, ListBase *lb)
{ {
bConstraint *con; bConstraint *con;
link_list(fd, lb); BLO_read_list(reader, lb);
for (con = lb->first; con; con = con->next) { for (con = lb->first; con; con = con->next) {
con->data = newdataadr(fd, con->data); BLO_read_data_address(reader, &con->data);
switch (con->type) { switch (con->type) {
case CONSTRAINT_TYPE_PYTHON: { case CONSTRAINT_TYPE_PYTHON: {
bPythonConstraint *data = con->data; bPythonConstraint *data = con->data;
link_list(fd, &data->targets); BLO_read_list(reader, &data->targets);
data->prop = newdataadr(fd, data->prop); BLO_read_data_address(reader, &data->prop);
IDP_DirectLinkGroup_OrFree(&data->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); IDP_DirectLinkGroup_OrFree(
&data->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
break; break;
} }
case CONSTRAINT_TYPE_ARMATURE: { case CONSTRAINT_TYPE_ARMATURE: {
bArmatureConstraint *data = con->data; bArmatureConstraint *data = con->data;
link_list(fd, &data->targets); BLO_read_list(reader, &data->targets);
break; break;
} }
case CONSTRAINT_TYPE_SPLINEIK: { case CONSTRAINT_TYPE_SPLINEIK: {
bSplineIKConstraint *data = con->data; bSplineIKConstraint *data = con->data;
data->points = newdataadr(fd, data->points); BLO_read_data_address(reader, &data->points);
break; break;
} }
case CONSTRAINT_TYPE_KINEMATIC: { case CONSTRAINT_TYPE_KINEMATIC: {
@@ -5449,7 +5451,7 @@ static void lib_link_object(FileData *fd, Main *bmain, Object *ob)
} }
/* direct data for cache */ /* direct data for cache */
static void direct_link_motionpath(FileData *fd, bMotionPath *mpath) static void direct_link_motionpath(BlendDataReader *reader, bMotionPath *mpath)
{ {
/* sanity check */ /* sanity check */
if (mpath == NULL) { if (mpath == NULL) {
@@ -5457,14 +5459,14 @@ static void direct_link_motionpath(FileData *fd, bMotionPath *mpath)
} }
/* relink points cache */ /* relink points cache */
mpath->points = newdataadr(fd, mpath->points); BLO_read_data_address(reader, &mpath->points);
mpath->points_vbo = NULL; mpath->points_vbo = NULL;
mpath->batch_line = NULL; mpath->batch_line = NULL;
mpath->batch_points = NULL; mpath->batch_points = NULL;
} }
static void direct_link_pose(FileData *fd, bPose *pose) static void direct_link_pose(BlendDataReader *reader, bPose *pose)
{ {
bPoseChannel *pchan; bPoseChannel *pchan;
@@ -5472,29 +5474,30 @@ static void direct_link_pose(FileData *fd, bPose *pose)
return; return;
} }
link_list(fd, &pose->chanbase); BLO_read_list(reader, &pose->chanbase);
link_list(fd, &pose->agroups); BLO_read_list(reader, &pose->agroups);
pose->chanhash = NULL; pose->chanhash = NULL;
pose->chan_array = NULL; pose->chan_array = NULL;
for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) { for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) {
pchan->bone = NULL; pchan->bone = NULL;
pchan->parent = newdataadr(fd, pchan->parent); BLO_read_data_address(reader, &pchan->parent);
pchan->child = newdataadr(fd, pchan->child); BLO_read_data_address(reader, &pchan->child);
pchan->custom_tx = newdataadr(fd, pchan->custom_tx); BLO_read_data_address(reader, &pchan->custom_tx);
pchan->bbone_prev = newdataadr(fd, pchan->bbone_prev); BLO_read_data_address(reader, &pchan->bbone_prev);
pchan->bbone_next = newdataadr(fd, pchan->bbone_next); BLO_read_data_address(reader, &pchan->bbone_next);
direct_link_constraints(fd, &pchan->constraints); direct_link_constraints(reader, &pchan->constraints);
pchan->prop = newdataadr(fd, pchan->prop); BLO_read_data_address(reader, &pchan->prop);
IDP_DirectLinkGroup_OrFree(&pchan->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); IDP_DirectLinkGroup_OrFree(
&pchan->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
pchan->mpath = newdataadr(fd, pchan->mpath); BLO_read_data_address(reader, &pchan->mpath);
if (pchan->mpath) { if (pchan->mpath) {
direct_link_motionpath(fd, pchan->mpath); direct_link_motionpath(reader, pchan->mpath);
} }
BLI_listbase_clear(&pchan->iktree); BLI_listbase_clear(&pchan->iktree);
@@ -5508,7 +5511,7 @@ static void direct_link_pose(FileData *fd, bPose *pose)
} }
pose->ikdata = NULL; pose->ikdata = NULL;
if (pose->ikparam != NULL) { if (pose->ikparam != NULL) {
pose->ikparam = newdataadr(fd, pose->ikparam); BLO_read_data_address(reader, &pose->ikparam);
} }
} }
@@ -6127,11 +6130,11 @@ static void direct_link_object(BlendDataReader *reader, Object *ob)
direct_link_animdata(reader, ob->adt); direct_link_animdata(reader, ob->adt);
BLO_read_data_address(reader, &ob->pose); BLO_read_data_address(reader, &ob->pose);
direct_link_pose(reader->fd, ob->pose); direct_link_pose(reader, ob->pose);
BLO_read_data_address(reader, &ob->mpath); BLO_read_data_address(reader, &ob->mpath);
if (ob->mpath) { if (ob->mpath) {
direct_link_motionpath(reader->fd, ob->mpath); direct_link_motionpath(reader, ob->mpath);
} }
BLO_read_list(reader, &ob->defbase); BLO_read_list(reader, &ob->defbase);
@@ -6254,7 +6257,7 @@ static void direct_link_object(BlendDataReader *reader, Object *ob)
BLO_read_list(reader, &ob->particlesystem); BLO_read_list(reader, &ob->particlesystem);
direct_link_particlesystems(reader->fd, &ob->particlesystem); direct_link_particlesystems(reader->fd, &ob->particlesystem);
direct_link_constraints(reader->fd, &ob->constraints); direct_link_constraints(reader, &ob->constraints);
BLO_read_list(reader, &ob->hooks); BLO_read_list(reader, &ob->hooks);
while (ob->hooks.first) { while (ob->hooks.first) {
@@ -6922,7 +6925,7 @@ static void direct_link_scene(BlendDataReader *reader, Scene *sce)
direct_link_animdata(reader, sce->adt); direct_link_animdata(reader, sce->adt);
BLO_read_list(reader, &sce->keyingsets); BLO_read_list(reader, &sce->keyingsets);
direct_link_keyingsets(reader->fd, &sce->keyingsets); direct_link_keyingsets(reader, &sce->keyingsets);
BLO_read_data_address(reader, &sce->basact); BLO_read_data_address(reader, &sce->basact);