[Bf-blender-cvs] [ada28d3c658] master: Fix T67712: cryptomatte sockets created in wrong order in some cases
Brecht Van Lommel
noreply at git.blender.org
Sat Mar 21 15:05:38 CET 2020
Commit: ada28d3c658492c10091c5dddd3278503f43db4c
Author: Brecht Van Lommel
Date: Sat Mar 21 01:30:31 2020 +0100
Branches: master
https://developer.blender.org/rBada28d3c658492c10091c5dddd3278503f43db4c
Fix T67712: cryptomatte sockets created in wrong order in some cases
Simplify the logic and always create node outputs in the order specified
by the render engine, I can't see a reason why built-in passes must be
first.
===================================================================
M source/blender/nodes/composite/nodes/node_composite_image.c
===================================================================
diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c
index cda142e1a8b..10de192277b 100644
--- a/source/blender/nodes/composite/nodes/node_composite_image.c
+++ b/source/blender/nodes/composite/nodes/node_composite_image.c
@@ -80,25 +80,14 @@ static void cmp_node_image_add_pass_output(bNodeTree *ntree,
const char *passname,
int rres_index,
eNodeSocketDatatype type,
- int is_rlayers,
+ int UNUSED(is_rlayers),
LinkNodePair *available_sockets,
int *prev_index)
{
- bNodeSocket *sock;
- int sock_index = BLI_findstringindex(&node->outputs, name, offsetof(bNodeSocket, name));
-
- if (sock_index < 0) {
- /* The first 31 sockets always are the legacy hardcoded sockets.
- * Any dynamically allocated sockets follow afterwards,
- * and are sorted in the order in which they were stored in the RenderResult.
- * Therefore, we remember the index of the last matched socket.
- * New sockets are placed behind the previously traversed one,
- * but always after the first 31. */
- int after_index = *prev_index;
- if (is_rlayers && after_index < MAX_LEGACY_SOCKET_INDEX) {
- after_index = MAX_LEGACY_SOCKET_INDEX;
- }
+ bNodeSocket *sock = BLI_findstring(&node->outputs, name, offsetof(bNodeSocket, name));
+ /* Create socket if it doesn't exist yet. */
+ if (sock == NULL) {
if (rres_index >= 0) {
sock = node_add_socket_from_template(
ntree, node, &cmp_node_rlayers_out[rres_index], SOCK_OUT);
@@ -109,26 +98,20 @@ static void cmp_node_image_add_pass_output(bNodeTree *ntree,
/* extra socket info */
NodeImageLayer *sockdata = MEM_callocN(sizeof(NodeImageLayer), "node image layer");
sock->storage = sockdata;
+ }
+ NodeImageLayer *sockdata = sock->storage;
+ if (sockdata) {
BLI_strncpy(sockdata->pass_name, passname, sizeof(sockdata->pass_name));
-
- sock_index = BLI_listbase_count(&node->outputs) - 1;
- if (sock_index != after_index + 1) {
- bNodeSocket *after_sock = BLI_findlink(&node->outputs, after_index);
- BLI_remlink(&node->outputs, sock);
- BLI_insertlinkafter(&node->outputs, after_sock, sock);
- }
- }
- else {
- sock = BLI_findlink(&node->outputs, sock_index);
- NodeImageLayer *sockdata = sock->storage;
- if (sockdata) {
- BLI_strncpy(sockdata->pass_name, passname, sizeof(sockdata->pass_name));
- }
}
+ /* Reorder sockets according to order that passes are added. */
+ const int after_index = (*prev_index)++;
+ bNodeSocket *after_sock = BLI_findlink(&node->outputs, after_index);
+ BLI_remlink(&node->outputs, sock);
+ BLI_insertlinkafter(&node->outputs, after_sock, sock);
+
BLI_linklist_append(available_sockets, sock);
- *prev_index = sock_index;
}
static void cmp_node_image_create_outputs(bNodeTree *ntree,
More information about the Bf-blender-cvs
mailing list