Refactor: use new api for direct linking armature, action, nodetree and brush

This commit is contained in:
2020-06-06 14:34:57 +02:00
parent a5e56efc98
commit 9b3fda0357

View File

@@ -2796,7 +2796,7 @@ static void direct_link_id_override_property_cb(FileData *fd, void *data)
static void direct_link_id_common( static void direct_link_id_common(
FileData *fd, Library *current_library, ID *id, ID *id_old, const int tag); FileData *fd, Library *current_library, ID *id, ID *id_old, const int tag);
static void direct_link_nodetree(FileData *fd, bNodeTree *ntree); static void direct_link_nodetree(BlendDataReader *reader, bNodeTree *ntree);
static void direct_link_collection(BlendDataReader *reader, Collection *collection); static void direct_link_collection(BlendDataReader *reader, Collection *collection);
static void direct_link_id_embedded_id(FileData *fd, Library *current_library, ID *id, ID *id_old) static void direct_link_id_embedded_id(FileData *fd, Library *current_library, ID *id, ID *id_old)
@@ -2812,7 +2812,7 @@ static void direct_link_id_embedded_id(FileData *fd, Library *current_library, I
(ID *)*nodetree, (ID *)*nodetree,
id_old != NULL ? (ID *)ntreeFromID(id_old) : NULL, id_old != NULL ? (ID *)ntreeFromID(id_old) : NULL,
0); 0);
direct_link_nodetree(fd, *nodetree); direct_link_nodetree(&reader, *nodetree);
} }
if (GS(id->name) == ID_SCE) { if (GS(id->name) == ID_SCE) {
@@ -3020,78 +3020,70 @@ static void lib_link_brush(FileData *fd, Main *UNUSED(bmain), Brush *brush)
} }
} }
static void direct_link_brush(FileData *fd, Brush *brush) static void direct_link_brush(BlendDataReader *reader, Brush *brush)
{ {
/* brush itself has been read */ /* brush itself has been read */
/* fallof curve */ /* fallof curve */
brush->curve = newdataadr(fd, brush->curve); BLO_read_data_address(reader, &brush->curve);
brush->gradient = newdataadr(fd, brush->gradient); BLO_read_data_address(reader, &brush->gradient);
if (brush->curve) { if (brush->curve) {
direct_link_curvemapping(fd, brush->curve); direct_link_curvemapping(reader->fd, brush->curve);
} }
else { else {
BKE_brush_curve_preset(brush, CURVE_PRESET_SHARP); BKE_brush_curve_preset(brush, CURVE_PRESET_SHARP);
} }
/* grease pencil */ /* grease pencil */
brush->gpencil_settings = newdataadr(fd, brush->gpencil_settings); BLO_read_data_address(reader, &brush->gpencil_settings);
if (brush->gpencil_settings != NULL) { if (brush->gpencil_settings != NULL) {
brush->gpencil_settings->curve_sensitivity = newdataadr( BLO_read_data_address(reader, &brush->gpencil_settings->curve_sensitivity);
fd, brush->gpencil_settings->curve_sensitivity); BLO_read_data_address(reader, &brush->gpencil_settings->curve_strength);
brush->gpencil_settings->curve_strength = newdataadr(fd, BLO_read_data_address(reader, &brush->gpencil_settings->curve_jitter);
brush->gpencil_settings->curve_strength);
brush->gpencil_settings->curve_jitter = newdataadr(fd, brush->gpencil_settings->curve_jitter);
brush->gpencil_settings->curve_rand_pressure = newdataadr( BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_pressure);
fd, brush->gpencil_settings->curve_rand_pressure); BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_strength);
brush->gpencil_settings->curve_rand_strength = newdataadr( BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_uv);
fd, brush->gpencil_settings->curve_rand_strength); BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_hue);
brush->gpencil_settings->curve_rand_uv = newdataadr(fd, BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_saturation);
brush->gpencil_settings->curve_rand_uv); BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_value);
brush->gpencil_settings->curve_rand_hue = newdataadr(fd,
brush->gpencil_settings->curve_rand_hue);
brush->gpencil_settings->curve_rand_saturation = newdataadr(
fd, brush->gpencil_settings->curve_rand_saturation);
brush->gpencil_settings->curve_rand_value = newdataadr(
fd, brush->gpencil_settings->curve_rand_value);
if (brush->gpencil_settings->curve_sensitivity) { if (brush->gpencil_settings->curve_sensitivity) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_sensitivity); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_sensitivity);
} }
if (brush->gpencil_settings->curve_strength) { if (brush->gpencil_settings->curve_strength) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_strength); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_strength);
} }
if (brush->gpencil_settings->curve_jitter) { if (brush->gpencil_settings->curve_jitter) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_jitter); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_jitter);
} }
if (brush->gpencil_settings->curve_rand_pressure) { if (brush->gpencil_settings->curve_rand_pressure) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_rand_pressure); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_rand_pressure);
} }
if (brush->gpencil_settings->curve_rand_strength) { if (brush->gpencil_settings->curve_rand_strength) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_rand_strength); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_rand_strength);
} }
if (brush->gpencil_settings->curve_rand_uv) { if (brush->gpencil_settings->curve_rand_uv) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_rand_uv); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_rand_uv);
} }
if (brush->gpencil_settings->curve_rand_hue) { if (brush->gpencil_settings->curve_rand_hue) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_rand_hue); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_rand_hue);
} }
if (brush->gpencil_settings->curve_rand_saturation) { if (brush->gpencil_settings->curve_rand_saturation) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_rand_saturation); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_rand_saturation);
} }
if (brush->gpencil_settings->curve_rand_value) { if (brush->gpencil_settings->curve_rand_value) {
direct_link_curvemapping(fd, brush->gpencil_settings->curve_rand_value); direct_link_curvemapping(reader->fd, brush->gpencil_settings->curve_rand_value);
} }
} }
@@ -3393,29 +3385,29 @@ static void lib_link_action(FileData *fd, Main *UNUSED(bmain), bAction *act)
} }
} }
static void direct_link_action(FileData *fd, bAction *act) static void direct_link_action(BlendDataReader *reader, bAction *act)
{ {
bActionChannel *achan; // XXX deprecated - old animation system bActionChannel *achan; // XXX deprecated - old animation system
bActionGroup *agrp; bActionGroup *agrp;
link_list(fd, &act->curves); BLO_read_list(reader, &act->curves);
link_list(fd, &act->chanbase); // XXX deprecated - old animation system BLO_read_list(reader, &act->chanbase); // XXX deprecated - old animation system
link_list(fd, &act->groups); BLO_read_list(reader, &act->groups);
link_list(fd, &act->markers); BLO_read_list(reader, &act->markers);
// XXX deprecated - old animation system <<< // XXX deprecated - old animation system <<<
for (achan = act->chanbase.first; achan; achan = achan->next) { for (achan = act->chanbase.first; achan; achan = achan->next) {
achan->grp = newdataadr(fd, achan->grp); BLO_read_data_address(reader, &achan->grp);
link_list(fd, &achan->constraintChannels); BLO_read_list(reader, &achan->constraintChannels);
} }
// >>> XXX deprecated - old animation system // >>> XXX deprecated - old animation system
direct_link_fcurves(fd, &act->curves); direct_link_fcurves(reader->fd, &act->curves);
for (agrp = act->groups.first; agrp; agrp = agrp->next) { for (agrp = act->groups.first; agrp; agrp = agrp->next) {
agrp->channels.first = newdataadr(fd, agrp->channels.first); BLO_read_data_address(reader, &agrp->channels.first);
agrp->channels.last = newdataadr(fd, agrp->channels.last); BLO_read_data_address(reader, &agrp->channels.last);
} }
} }
@@ -3756,7 +3748,7 @@ static void direct_link_node_socket(FileData *fd, bNodeSocket *sock)
} }
/* ntree itself has been read! */ /* ntree itself has been read! */
static void direct_link_nodetree(FileData *fd, bNodeTree *ntree) static void direct_link_nodetree(BlendDataReader *reader, bNodeTree *ntree)
{ {
/* note: writing and reading goes in sync, for speed */ /* note: writing and reading goes in sync, for speed */
bNode *node; bNode *node;
@@ -3771,32 +3763,33 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
ntree->progress = NULL; ntree->progress = NULL;
ntree->execdata = NULL; ntree->execdata = NULL;
ntree->adt = newdataadr(fd, ntree->adt); BLO_read_data_address(reader, &ntree->adt);
direct_link_animdata(fd, ntree->adt); direct_link_animdata(reader->fd, ntree->adt);
link_list(fd, &ntree->nodes); BLO_read_list(reader, &ntree->nodes);
for (node = ntree->nodes.first; node; node = node->next) { for (node = ntree->nodes.first; node; node = node->next) {
node->typeinfo = NULL; node->typeinfo = NULL;
link_list(fd, &node->inputs); BLO_read_list(reader, &node->inputs);
link_list(fd, &node->outputs); BLO_read_list(reader, &node->outputs);
node->prop = newdataadr(fd, node->prop); BLO_read_data_address(reader, &node->prop);
IDP_DirectLinkGroup_OrFree(&node->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); IDP_DirectLinkGroup_OrFree(
&node->prop, (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN), reader->fd);
link_list(fd, &node->internal_links); BLO_read_list(reader, &node->internal_links);
for (link = node->internal_links.first; link; link = link->next) { for (link = node->internal_links.first; link; link = link->next) {
link->fromnode = newdataadr(fd, link->fromnode); BLO_read_data_address(reader, &link->fromnode);
link->fromsock = newdataadr(fd, link->fromsock); BLO_read_data_address(reader, &link->fromsock);
link->tonode = newdataadr(fd, link->tonode); BLO_read_data_address(reader, &link->tonode);
link->tosock = newdataadr(fd, link->tosock); BLO_read_data_address(reader, &link->tosock);
} }
if (node->type == CMP_NODE_MOVIEDISTORTION) { if (node->type == CMP_NODE_MOVIEDISTORTION) {
node->storage = newmclipadr(fd, node->storage); node->storage = newmclipadr(reader->fd, node->storage);
} }
else { else {
node->storage = newdataadr(fd, node->storage); BLO_read_data_address(reader, &node->storage);
} }
if (node->storage) { if (node->storage) {
@@ -3810,12 +3803,12 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
case CMP_NODE_HUECORRECT: case CMP_NODE_HUECORRECT:
case TEX_NODE_CURVE_RGB: case TEX_NODE_CURVE_RGB:
case TEX_NODE_CURVE_TIME: { case TEX_NODE_CURVE_TIME: {
direct_link_curvemapping(fd, node->storage); direct_link_curvemapping(reader->fd, node->storage);
break; break;
} }
case SH_NODE_SCRIPT: { case SH_NODE_SCRIPT: {
NodeShaderScript *nss = (NodeShaderScript *)node->storage; NodeShaderScript *nss = (NodeShaderScript *)node->storage;
nss->bytecode = newdataadr(fd, nss->bytecode); BLO_read_data_address(reader, &nss->bytecode);
break; break;
} }
case SH_NODE_TEX_POINTDENSITY: { case SH_NODE_TEX_POINTDENSITY: {
@@ -3846,7 +3839,7 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
} }
case CMP_NODE_CRYPTOMATTE: { case CMP_NODE_CRYPTOMATTE: {
NodeCryptomatte *nc = (NodeCryptomatte *)node->storage; NodeCryptomatte *nc = (NodeCryptomatte *)node->storage;
nc->matte_id = newdataadr(fd, nc->matte_id); BLO_read_data_address(reader, &nc->matte_id);
break; break;
} }
case TEX_NODE_IMAGE: { case TEX_NODE_IMAGE: {
@@ -3860,36 +3853,36 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
} }
} }
} }
link_list(fd, &ntree->links); BLO_read_list(reader, &ntree->links);
/* and we connect the rest */ /* and we connect the rest */
for (node = ntree->nodes.first; node; node = node->next) { for (node = ntree->nodes.first; node; node = node->next) {
node->parent = newdataadr(fd, node->parent); BLO_read_data_address(reader, &node->parent);
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(fd, sock); direct_link_node_socket(reader->fd, sock);
} }
for (sock = node->outputs.first; sock; sock = sock->next) { for (sock = node->outputs.first; sock; sock = sock->next) {
direct_link_node_socket(fd, sock); direct_link_node_socket(reader->fd, sock);
} }
} }
/* interface socket lists */ /* interface socket lists */
link_list(fd, &ntree->inputs); BLO_read_list(reader, &ntree->inputs);
link_list(fd, &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(fd, sock); direct_link_node_socket(reader->fd, sock);
} }
for (sock = ntree->outputs.first; sock; sock = sock->next) { for (sock = ntree->outputs.first; sock; sock = sock->next) {
direct_link_node_socket(fd, sock); direct_link_node_socket(reader->fd, sock);
} }
for (link = ntree->links.first; link; link = link->next) { for (link = ntree->links.first; link; link = link->next) {
link->fromnode = newdataadr(fd, link->fromnode); BLO_read_data_address(reader, &link->fromnode);
link->tonode = newdataadr(fd, link->tonode); BLO_read_data_address(reader, &link->tonode);
link->fromsock = newdataadr(fd, link->fromsock); BLO_read_data_address(reader, &link->fromsock);
link->tosock = newdataadr(fd, link->tosock); BLO_read_data_address(reader, &link->tosock);
} }
#if 0 #if 0
@@ -4117,24 +4110,24 @@ static void direct_link_bones(FileData *fd, Bone *bone)
} }
} }
static void direct_link_armature(FileData *fd, bArmature *arm) static void direct_link_armature(BlendDataReader *reader, bArmature *arm)
{ {
Bone *bone; Bone *bone;
link_list(fd, &arm->bonebase); BLO_read_list(reader, &arm->bonebase);
arm->bonehash = NULL; arm->bonehash = NULL;
arm->edbo = NULL; arm->edbo = NULL;
/* Must always be cleared (armatures don't have their own edit-data). */ /* Must always be cleared (armatures don't have their own edit-data). */
arm->needs_flush_to_id = 0; arm->needs_flush_to_id = 0;
arm->adt = newdataadr(fd, arm->adt); BLO_read_data_address(reader, &arm->adt);
direct_link_animdata(fd, arm->adt); direct_link_animdata(reader->fd, arm->adt);
for (bone = arm->bonebase.first; bone; bone = bone->next) { for (bone = arm->bonebase.first; bone; bone = bone->next) {
direct_link_bones(fd, bone); direct_link_bones(reader->fd, bone);
} }
arm->act_bone = newdataadr(fd, arm->act_bone); BLO_read_data_address(reader, &arm->act_bone);
arm->act_edbone = NULL; arm->act_edbone = NULL;
BKE_armature_bone_hash_make(arm); BKE_armature_bone_hash_make(arm);
@@ -9450,16 +9443,16 @@ static bool direct_link_id(FileData *fd, Main *main, const int tag, ID *id, ID *
direct_link_collection(&reader, (Collection *)id); direct_link_collection(&reader, (Collection *)id);
break; break;
case ID_AR: case ID_AR:
direct_link_armature(fd, (bArmature *)id); direct_link_armature(&reader, (bArmature *)id);
break; break;
case ID_AC: case ID_AC:
direct_link_action(fd, (bAction *)id); direct_link_action(&reader, (bAction *)id);
break; break;
case ID_NT: case ID_NT:
direct_link_nodetree(fd, (bNodeTree *)id); direct_link_nodetree(&reader, (bNodeTree *)id);
break; break;
case ID_BR: case ID_BR:
direct_link_brush(fd, (Brush *)id); direct_link_brush(&reader, (Brush *)id);
break; break;
case ID_PA: case ID_PA:
direct_link_particlesettings(fd, (ParticleSettings *)id); direct_link_particlesettings(fd, (ParticleSettings *)id);