[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47775] trunk/blender/source/blender/nodes /intern/node_common.c: Reroute node socket types update automatically from connections when possible .
Lukas Toenne
lukas.toenne at googlemail.com
Tue Jun 12 10:28:38 CEST 2012
Revision: 47775
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47775
Author: lukastoenne
Date: 2012-06-12 08:28:25 +0000 (Tue, 12 Jun 2012)
Log Message:
-----------
Reroute node socket types update automatically from connections when possible. This prevents unnecessary conversions and breaking connections when linking incompatible types to the reroute color sockets (point in case: cycles shaders).
Modified Paths:
--------------
trunk/blender/source/blender/nodes/intern/node_common.c
Modified: trunk/blender/source/blender/nodes/intern/node_common.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_common.c 2012-06-12 08:10:34 UTC (rev 47774)
+++ trunk/blender/source/blender/nodes/intern/node_common.c 2012-06-12 08:28:25 UTC (rev 47775)
@@ -853,7 +853,7 @@
};
/* simple, only a single input and output here */
-ListBase node_reroute_internal_connect(bNodeTree *ntree, bNode *node)
+static ListBase node_reroute_internal_connect(bNodeTree *ntree, bNode *node)
{
bNodeLink *link;
ListBase ret;
@@ -876,6 +876,23 @@
return ret;
}
+static void node_reroute_update(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ bNodeSocket *input = node->inputs.first;
+ bNodeSocket *output = node->outputs.first;
+ int type = SOCK_FLOAT;
+
+ /* determine socket type from unambiguous input/output connection if possible */
+ if (input->limit==1 && input->link)
+ type = input->link->fromsock->type;
+ else if (output->limit==1 && output->link)
+ type = output->link->tosock->type;
+
+ /* same type for input/output */
+ nodeSocketSetType(input, type);
+ nodeSocketSetType(output, type);
+}
+
void register_node_type_reroute(bNodeTreeType *ttype)
{
/* frame type is used for all tree types, needs dynamic allocation */
@@ -884,6 +901,7 @@
node_type_base(ttype, ntype, NODE_REROUTE, "Reroute", NODE_CLASS_LAYOUT, 0);
node_type_socket_templates(ntype, node_reroute_in, node_reroute_out);
node_type_internal_connect(ntype, node_reroute_internal_connect);
+ node_type_update(ntype, node_reroute_update, NULL);
ntype->needs_free = 1;
nodeRegisterType(ttype, ntype);
More information about the Bf-blender-cvs
mailing list