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(
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_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_old != NULL ? (ID *)ntreeFromID(id_old) : NULL,
0);
direct_link_nodetree(fd, *nodetree);
direct_link_nodetree(&reader, *nodetree);
}
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 */
/* 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) {
direct_link_curvemapping(fd, brush->curve);
direct_link_curvemapping(reader->fd, brush->curve);
}
else {
BKE_brush_curve_preset(brush, CURVE_PRESET_SHARP);
}
/* grease pencil */
brush->gpencil_settings = newdataadr(fd, brush->gpencil_settings);
BLO_read_data_address(reader, &brush->gpencil_settings);
if (brush->gpencil_settings != NULL) {
brush->gpencil_settings->curve_sensitivity = newdataadr(
fd, brush->gpencil_settings->curve_sensitivity);
brush->gpencil_settings->curve_strength = newdataadr(fd,
brush->gpencil_settings->curve_strength);
brush->gpencil_settings->curve_jitter = newdataadr(fd, brush->gpencil_settings->curve_jitter);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_sensitivity);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_strength);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_jitter);
brush->gpencil_settings->curve_rand_pressure = newdataadr(
fd, brush->gpencil_settings->curve_rand_pressure);
brush->gpencil_settings->curve_rand_strength = newdataadr(
fd, brush->gpencil_settings->curve_rand_strength);
brush->gpencil_settings->curve_rand_uv = newdataadr(fd,
brush->gpencil_settings->curve_rand_uv);
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);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_pressure);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_strength);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_uv);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_hue);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_saturation);
BLO_read_data_address(reader, &brush->gpencil_settings->curve_rand_value);
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) {
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) {
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) {
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) {
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) {
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) {
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) {
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) {
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
bActionGroup *agrp;
link_list(fd, &act->curves);
link_list(fd, &act->chanbase); // XXX deprecated - old animation system
link_list(fd, &act->groups);
link_list(fd, &act->markers);
BLO_read_list(reader, &act->curves);
BLO_read_list(reader, &act->chanbase); // XXX deprecated - old animation system
BLO_read_list(reader, &act->groups);
BLO_read_list(reader, &act->markers);
// XXX deprecated - old animation system <<<
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
direct_link_fcurves(fd, &act->curves);
direct_link_fcurves(reader->fd, &act->curves);
for (agrp = act->groups.first; agrp; agrp = agrp->next) {
agrp->channels.first = newdataadr(fd, agrp->channels.first);
agrp->channels.last = newdataadr(fd, agrp->channels.last);
BLO_read_data_address(reader, &agrp->channels.first);
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! */
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 */
bNode *node;
@@ -3771,32 +3763,33 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
ntree->progress = NULL;
ntree->execdata = NULL;
ntree->adt = newdataadr(fd, ntree->adt);
direct_link_animdata(fd, ntree->adt);
BLO_read_data_address(reader, &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) {
node->typeinfo = NULL;
link_list(fd, &node->inputs);
link_list(fd, &node->outputs);
BLO_read_list(reader, &node->inputs);
BLO_read_list(reader, &node->outputs);
node->prop = newdataadr(fd, node->prop);
IDP_DirectLinkGroup_OrFree(&node->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
BLO_read_data_address(reader, &node->prop);
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) {
link->fromnode = newdataadr(fd, link->fromnode);
link->fromsock = newdataadr(fd, link->fromsock);
link->tonode = newdataadr(fd, link->tonode);
link->tosock = newdataadr(fd, link->tosock);
BLO_read_data_address(reader, &link->fromnode);
BLO_read_data_address(reader, &link->fromsock);
BLO_read_data_address(reader, &link->tonode);
BLO_read_data_address(reader, &link->tosock);
}
if (node->type == CMP_NODE_MOVIEDISTORTION) {
node->storage = newmclipadr(fd, node->storage);
node->storage = newmclipadr(reader->fd, node->storage);
}
else {
node->storage = newdataadr(fd, node->storage);
BLO_read_data_address(reader, &node->storage);
}
if (node->storage) {
@@ -3810,12 +3803,12 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
case CMP_NODE_HUECORRECT:
case TEX_NODE_CURVE_RGB:
case TEX_NODE_CURVE_TIME: {
direct_link_curvemapping(fd, node->storage);
direct_link_curvemapping(reader->fd, node->storage);
break;
}
case SH_NODE_SCRIPT: {
NodeShaderScript *nss = (NodeShaderScript *)node->storage;
nss->bytecode = newdataadr(fd, nss->bytecode);
BLO_read_data_address(reader, &nss->bytecode);
break;
}
case SH_NODE_TEX_POINTDENSITY: {
@@ -3846,7 +3839,7 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
}
case CMP_NODE_CRYPTOMATTE: {
NodeCryptomatte *nc = (NodeCryptomatte *)node->storage;
nc->matte_id = newdataadr(fd, nc->matte_id);
BLO_read_data_address(reader, &nc->matte_id);
break;
}
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 */
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;
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) {
direct_link_node_socket(fd, sock);
direct_link_node_socket(reader->fd, sock);
}
}
/* interface socket lists */
link_list(fd, &ntree->inputs);
link_list(fd, &ntree->outputs);
BLO_read_list(reader, &ntree->inputs);
BLO_read_list(reader, &ntree->outputs);
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) {
direct_link_node_socket(fd, sock);
direct_link_node_socket(reader->fd, sock);
}
for (link = ntree->links.first; link; link = link->next) {
link->fromnode = newdataadr(fd, link->fromnode);
link->tonode = newdataadr(fd, link->tonode);
link->fromsock = newdataadr(fd, link->fromsock);
link->tosock = newdataadr(fd, link->tosock);
BLO_read_data_address(reader, &link->fromnode);
BLO_read_data_address(reader, &link->tonode);
BLO_read_data_address(reader, &link->fromsock);
BLO_read_data_address(reader, &link->tosock);
}
#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;
link_list(fd, &arm->bonebase);
BLO_read_list(reader, &arm->bonebase);
arm->bonehash = NULL;
arm->edbo = NULL;
/* Must always be cleared (armatures don't have their own edit-data). */
arm->needs_flush_to_id = 0;
arm->adt = newdataadr(fd, arm->adt);
direct_link_animdata(fd, arm->adt);
BLO_read_data_address(reader, &arm->adt);
direct_link_animdata(reader->fd, arm->adt);
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;
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);
break;
case ID_AR:
direct_link_armature(fd, (bArmature *)id);
direct_link_armature(&reader, (bArmature *)id);
break;
case ID_AC:
direct_link_action(fd, (bAction *)id);
direct_link_action(&reader, (bAction *)id);
break;
case ID_NT:
direct_link_nodetree(fd, (bNodeTree *)id);
direct_link_nodetree(&reader, (bNodeTree *)id);
break;
case ID_BR:
direct_link_brush(fd, (Brush *)id);
direct_link_brush(&reader, (Brush *)id);
break;
case ID_PA:
direct_link_particlesettings(fd, (ParticleSettings *)id);