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);
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs