diff options
Diffstat (limited to 'source/blender/nodes')
10 files changed, 58 insertions, 35 deletions
diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c index 43a70a62350..89349d91f94 100644 --- a/source/blender/nodes/composite/node_composite_tree.c +++ b/source/blender/nodes/composite/node_composite_tree.c @@ -95,15 +95,17 @@ static void free_cache(bNodeTree *ntree) } /* local tree then owns all compbufs */ -static void localize(bNodeTree *UNUSED(localtree), bNodeTree *ntree) +static void localize(bNodeTree *localtree, bNodeTree *ntree) { - bNode *node; - bNodeSocket *sock; - for (node = ntree->nodes.first; node; node = node->next) { + bNode *node = ntree->nodes.first; + bNode *local_node = localtree->nodes.first; + while (node != NULL) { + local_node->original = node; + /* ensure new user input gets handled ok */ node->need_exec = 0; - node->new_node->original = node; + local_node->original = node; /* move over the compbufs */ /* right after ntreeCopyTree() oldsock pointers are valid */ @@ -111,19 +113,29 @@ static void localize(bNodeTree *UNUSED(localtree), bNodeTree *ntree) if (ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { if (node->id) { if (node->flag & NODE_DO_OUTPUT) { - node->new_node->id = (ID *)node->id; + local_node->id = (ID *)node->id; } else { - node->new_node->id = NULL; + local_node->id = NULL; } } } - for (sock = node->outputs.first; sock; sock = sock->next) { - sock->new_sock->cache = sock->cache; - sock->cache = NULL; - sock->new_sock->new_sock = sock; + bNodeSocket *output_sock = node->outputs.first; + bNodeSocket *local_output_sock = local_node->outputs.first; + while (output_sock != NULL) { + local_output_sock->cache = output_sock->cache; + output_sock->cache = NULL; + /* This is actually link to original: someone was just lazy enough and tried to save few + * bytes in the cost of readability. */ + local_output_sock->new_sock = output_sock; + + output_sock = output_sock->next; + local_output_sock = local_output_sock->next; } + + node = node->next; + local_node = local_node->next; } } diff --git a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c index 68a7e8d1589..8d05c18621f 100644 --- a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c +++ b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c @@ -273,7 +273,9 @@ static void node_free_cryptomatte(bNode *node) } } -static void node_copy_cryptomatte(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, bNode *src_node) +static void node_copy_cryptomatte(bNodeTree *UNUSED(dest_ntree), + bNode *dest_node, + const bNode *src_node) { NodeCryptomatte *src_nc = src_node->storage; NodeCryptomatte *dest_nc = MEM_dupallocN(src_nc); diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c index e1e23b843a1..79db436ec4e 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.c +++ b/source/blender/nodes/composite/nodes/node_composite_image.c @@ -432,15 +432,17 @@ static void node_composit_free_image(bNode *node) static void node_composit_copy_image(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, - bNode *src_node) + const bNode *src_node) { - bNodeSocket *sock; - dest_node->storage = MEM_dupallocN(src_node->storage); - /* copy extra socket info */ - for (sock = src_node->outputs.first; sock; sock = sock->next) { - sock->new_sock->storage = MEM_dupallocN(sock->storage); + const bNodeSocket *src_output_sock = src_node->outputs.first; + bNodeSocket *dest_output_sock = dest_node->outputs.first; + while (dest_output_sock != NULL) { + dest_output_sock->storage = MEM_dupallocN(src_output_sock->storage); + + src_output_sock = src_output_sock->next; + dest_output_sock = dest_output_sock->next; } } @@ -556,16 +558,17 @@ static void node_composit_free_rlayers(bNode *node) } static void node_composit_copy_rlayers(bNodeTree *UNUSED(dest_ntree), - bNode *UNUSED(dest_node), - bNode *src_node) + bNode *dest_node, + const bNode *src_node) { - bNodeSocket *sock; - /* copy extra socket info */ - for (sock = src_node->outputs.first; sock; sock = sock->next) { - if (sock->storage) { - sock->new_sock->storage = MEM_dupallocN(sock->storage); - } + const bNodeSocket *src_output_sock = src_node->outputs.first; + bNodeSocket *dest_output_sock = dest_node->outputs.first; + while (dest_output_sock != NULL) { + dest_output_sock->storage = MEM_dupallocN(src_output_sock->storage); + + src_output_sock = src_output_sock->next; + dest_output_sock = dest_output_sock->next; } } diff --git a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c index d4462d937ad..dbdd65c5976 100644 --- a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c +++ b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c @@ -64,7 +64,7 @@ static void storage_free(bNode *node) node->storage = NULL; } -static void storage_copy(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, bNode *src_node) +static void storage_copy(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, const bNode *src_node) { if (src_node->storage) { dest_node->storage = BKE_tracking_distortion_copy(src_node->storage); diff --git a/source/blender/nodes/composite/nodes/node_composite_outputFile.c b/source/blender/nodes/composite/nodes/node_composite_outputFile.c index c700aee1bc1..faf9e20da51 100644 --- a/source/blender/nodes/composite/nodes/node_composite_outputFile.c +++ b/source/blender/nodes/composite/nodes/node_composite_outputFile.c @@ -228,7 +228,9 @@ static void free_output_file(bNode *node) MEM_freeN(node->storage); } -static void copy_output_file(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, bNode *src_node) +static void copy_output_file(bNodeTree *UNUSED(dest_ntree), + bNode *dest_node, + const bNode *src_node) { bNodeSocket *src_sock, *dest_sock; diff --git a/source/blender/nodes/intern/node_util.c b/source/blender/nodes/intern/node_util.c index 6ad1c9b6925..2ab68e2f7cf 100644 --- a/source/blender/nodes/intern/node_util.c +++ b/source/blender/nodes/intern/node_util.c @@ -57,12 +57,14 @@ void node_free_standard_storage(bNode *node) } } -void node_copy_curves(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, bNode *src_node) +void node_copy_curves(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, const bNode *src_node) { dest_node->storage = curvemapping_copy(src_node->storage); } -void node_copy_standard_storage(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, bNode *src_node) +void node_copy_standard_storage(bNodeTree *UNUSED(dest_ntree), + bNode *dest_node, + const bNode *src_node) { dest_node->storage = MEM_dupallocN(src_node->storage); } diff --git a/source/blender/nodes/intern/node_util.h b/source/blender/nodes/intern/node_util.h index ec5cd074922..7eef70db498 100644 --- a/source/blender/nodes/intern/node_util.h +++ b/source/blender/nodes/intern/node_util.h @@ -58,10 +58,10 @@ extern void node_free_standard_storage(struct bNode *node); extern void node_copy_curves(struct bNodeTree *dest_ntree, struct bNode *dest_node, - struct bNode *src_node); + const struct bNode *src_node); extern void node_copy_standard_storage(struct bNodeTree *dest_ntree, struct bNode *dest_node, - struct bNode *src_node); + const struct bNode *src_node); extern void *node_initexec_curves(struct bNodeExecContext *context, struct bNode *node, bNodeInstanceKey key); diff --git a/source/blender/nodes/shader/nodes/node_shader_script.c b/source/blender/nodes/shader/nodes/node_shader_script.c index 29d3fd3ba67..42ab272de0e 100644 --- a/source/blender/nodes/shader/nodes/node_shader_script.c +++ b/source/blender/nodes/shader/nodes/node_shader_script.c @@ -44,7 +44,9 @@ static void node_free_script(bNode *node) } } -static void node_copy_script(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, bNode *src_node) +static void node_copy_script(bNodeTree *UNUSED(dest_ntree), + bNode *dest_node, + const bNode *src_node) { NodeShaderScript *src_nss = src_node->storage; NodeShaderScript *dest_nss = MEM_dupallocN(src_nss); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c b/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c index 561f39716b9..dbf79ec1f1d 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_pointdensity.c @@ -57,7 +57,7 @@ static void node_shader_free_tex_pointdensity(bNode *node) static void node_shader_copy_tex_pointdensity(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, - bNode *src_node) + const bNode *src_node) { dest_node->storage = MEM_dupallocN(src_node->storage); NodeShaderTexPointDensity *point_density = dest_node->storage; diff --git a/source/blender/nodes/texture/nodes/node_texture_output.c b/source/blender/nodes/texture/nodes/node_texture_output.c index f9f91e65912..cdacb05153d 100644 --- a/source/blender/nodes/texture/nodes/node_texture_output.c +++ b/source/blender/nodes/texture/nodes/node_texture_output.c @@ -154,7 +154,7 @@ static void init(bNodeTree *UNUSED(ntree), bNode *node) assign_index(node); } -static void copy(bNodeTree *dest_ntree, bNode *dest_node, bNode *src_node) +static void copy(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node) { node_copy_standard_storage(dest_ntree, dest_node, src_node); unique_name(dest_node); |