Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-10-14 16:20:58 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-10-14 16:20:58 +0400
commit22e4f9e3bbdce90f8c3fca6b16ee09a7e9917ddd (patch)
treebdcf0f214e745d1a7ead7612c955c424a36f6681 /source/blender
parent43de42824f4b7d20188d80aedf175054d8e1c552 (diff)
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.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/nodes/intern/node_socket.c33
1 files changed, 33 insertions, 0 deletions
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;