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.
This commit is contained in:
Brecht Van Lommel
2011-10-14 12:20:58 +00:00
parent 43de42824f
commit 22e4f9e3bb

View File

@@ -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;