static void gpu_stack_from_data_list(GPUNodeStack *gs, ListBase *sockets, bNodeStack **ns) { bNodeSocket *sock; int i; for (sock = sockets->first, i = 0; sock; sock = sock->next, i++) node_gpu_stack_from_data(&gs[i], sock->type, ns[i]); gs[i].type = GPU_NONE; }
/* Copy internal results to the external outputs. */ static void group_gpu_move_outputs(bNode *node, GPUNodeStack *out, bNodeStack *gstack) { bNodeSocket *sock; bNodeStack *ns; int a; for (sock=node->outputs.first, a=0; sock; sock=sock->next, ++a) { if (sock->groupsock) { ns = node_get_socket_stack(gstack, sock->groupsock); /* convert the node stack data result back to gpu stack */ node_gpu_stack_from_data(&out[a], sock->type, ns); } } }
/* Copy internal results to the external outputs. */ static void group_gpu_move_outputs(bNode *gnode, GPUNodeStack *out, bNodeStack *gstack) { bNodeTree *ngroup = (bNodeTree *)gnode->id; bNode *node; bNodeSocket *sock; bNodeStack *ns; int a; for (node = ngroup->nodes.first; node; node = node->next) { if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) { for (sock = node->inputs.first, a = 0; sock; sock = sock->next, ++a) { ns = node_get_socket_stack(gstack, sock); if (ns) { /* convert the node stack data result back to gpu stack */ node_gpu_stack_from_data(&out[a], sock->type, ns); } } break; /* only one active output node */ } } }