[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49628] trunk/blender/source/blender/nodes /intern/node_common.c: Fix for Reroute nodes: Reloading could change socket types without updating the socket data structs , leading to crash.

Lukas Toenne lukas.toenne at googlemail.com
Mon Aug 6 18:25:39 CEST 2012


Revision: 49628
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49628
Author:   lukastoenne
Date:     2012-08-06 16:25:38 +0000 (Mon, 06 Aug 2012)
Log Message:
-----------
Fix for Reroute nodes: Reloading could change socket types without updating the socket data structs, leading to crash. This is caused by the node verification procedure, which resets any socket type to the initial type defined in the socket templates. Adding sockets dynamically without templates solves this (the sockets are then ignored by verification).

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-08-06 16:07:11 UTC (rev 49627)
+++ trunk/blender/source/blender/nodes/intern/node_common.c	2012-08-06 16:25:38 UTC (rev 49628)
@@ -547,15 +547,6 @@
 
 /* **************** REROUTE ******************** */
 
-static bNodeSocketTemplate node_reroute_in[]= {
-	{	SOCK_RGBA, 1, "Input",			0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
-	{	-1, 0, ""	}
-};
-static bNodeSocketTemplate node_reroute_out[]= {
-	{	SOCK_RGBA, 0, "Output",			0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
-	{	-1, 0, ""	}
-};
-
 /* simple, only a single input and output here */
 static ListBase node_reroute_internal_connect(bNodeTree *ntree, bNode *node)
 {
@@ -580,6 +571,15 @@
 	return ret;
 }
 
+static void node_reroute_init(bNodeTree *ntree, bNode* node, bNodeTemplate *UNUSED(ntemp))
+{
+	/* Note: Cannot use socket templates for this, since it would reset the socket type
+	 * on each file read via the template verification procedure.
+	 */
+	nodeAddSocket(ntree, node, SOCK_IN, "Input", SOCK_RGBA);
+	nodeAddSocket(ntree, node, SOCK_OUT, "Output", SOCK_RGBA);
+}
+
 static void node_reroute_update(bNodeTree *UNUSED(ntree), bNode *node)
 {
 	bNodeSocket *input = node->inputs.first;
@@ -603,7 +603,7 @@
 	bNodeType *ntype= MEM_callocN(sizeof(bNodeType), "frame node type");
 	
 	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_init(ntype, node_reroute_init);
 	node_type_internal_connect(ntype, node_reroute_internal_connect);
 	node_type_update(ntype, node_reroute_update, NULL);
 	




More information about the Bf-blender-cvs mailing list