From 22e4f9e3bbdce90f8c3fca6b16ee09a7e9917ddd Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 14 Oct 2011 12:20:58 +0000 Subject: [PATCH] Fix #28914: crash loading file saved with cycles builds in trunk. The cause is an unknown node socket type in node groups. Ideally the node system should handle this better and remove the unknown sockets from groups, but this is a bit of a risky fix to do now, so instead the shader socket type has been added, since this is a simple change and the code has been tested well. --- source/blender/nodes/intern/node_socket.c | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c index aabaf5b86de..51e48b84383 100644 --- a/source/blender/nodes/intern/node_socket.c +++ b/source/blender/nodes/intern/node_socket.c @@ -128,6 +128,21 @@ static bNodeSocketType node_socket_type_boolean = { /* buttonfunc */ NULL, }; +/****************** SHADER ******************/ + +static bNodeSocketType node_socket_type_shader = { + /* type */ SOCK_SHADER, + /* ui_name */ "Shader", + /* ui_description */ "Shader", + /* ui_icon */ 0, + /* ui_color */ {100,200,100,255}, + + /* value_structname */ NULL, + /* value_structsize */ 0, + + /* buttonfunc */ NULL, +}; + /****************** MESH ******************/ static bNodeSocketType node_socket_type_mesh = { @@ -153,6 +168,7 @@ void node_socket_type_init(bNodeSocketType *types[]) INIT_TYPE(rgba); INIT_TYPE(int); INIT_TYPE(boolean); + INIT_TYPE(shader); INIT_TYPE(mesh); #undef INIT_TYPE @@ -241,6 +257,17 @@ struct bNodeSocket *nodeAddOutputRGBA(struct bNodeTree *ntree, struct bNode *nod return sock; } +struct bNodeSocket *nodeAddInputShader(struct bNodeTree *ntree, struct bNode *node, const char *name) +{ + bNodeSocket *sock= nodeAddSocket(ntree, node, SOCK_IN, name, SOCK_SHADER); + return sock; +} +struct bNodeSocket *nodeAddOutputShader(struct bNodeTree *ntree, struct bNode *node, const char *name) +{ + bNodeSocket *sock= nodeAddSocket(ntree, node, SOCK_OUT, name, SOCK_SHADER); + return sock; +} + struct bNodeSocket *nodeAddInputMesh(struct bNodeTree *ntree, struct bNode *node, const char *name) { bNodeSocket *sock= nodeAddSocket(ntree, node, SOCK_IN, name, SOCK_MESH); @@ -271,6 +298,9 @@ struct bNodeSocket *node_add_input_from_template(struct bNodeTree *ntree, struct case SOCK_RGBA: sock = nodeAddInputRGBA(ntree, node, stemp->name, stemp->val1, stemp->val2, stemp->val3, stemp->val4); break; + case SOCK_SHADER: + sock = nodeAddInputShader(ntree, node, stemp->name); + break; case SOCK_MESH: sock = nodeAddInputMesh(ntree, node, stemp->name); break; @@ -299,6 +329,9 @@ struct bNodeSocket *node_add_output_from_template(struct bNodeTree *ntree, struc case SOCK_RGBA: sock = nodeAddOutputRGBA(ntree, node, stemp->name); break; + case SOCK_SHADER: + sock = nodeAddOutputShader(ntree, node, stemp->name); + break; case SOCK_MESH: sock = nodeAddOutputMesh(ntree, node, stemp->name); break;