[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40960] branches/cycles: Cycles: make node with multiple input sockets with the same name work.
Brecht Van Lommel
brechtvanlommel at pandora.be
Wed Oct 12 17:45:52 CEST 2011
Revision: 40960
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40960
Author: blendix
Date: 2011-10-12 15:45:52 +0000 (Wed, 12 Oct 2011)
Log Message:
-----------
Cycles: make node with multiple input sockets with the same name work. Previously
nodes like Mix had their sockets renamed to Color1/Color2, but doing this breaks
compatibility for the internal renderer, so restored it now.
Modified Paths:
--------------
branches/cycles/intern/cycles/blender/blender_shader.cpp
branches/cycles/source/blender/blenloader/intern/readfile.c
branches/cycles/source/blender/nodes/shader/nodes/node_shader_add_shader.c
branches/cycles/source/blender/nodes/shader/nodes/node_shader_math.c
branches/cycles/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
branches/cycles/source/blender/nodes/shader/nodes/node_shader_mix_shader.c
branches/cycles/source/blender/nodes/shader/nodes/node_shader_vectMath.c
Modified: branches/cycles/intern/cycles/blender/blender_shader.cpp
===================================================================
--- branches/cycles/intern/cycles/blender/blender_shader.cpp 2011-10-12 15:42:35 UTC (rev 40959)
+++ branches/cycles/intern/cycles/blender/blender_shader.cpp 2011-10-12 15:45:52 UTC (rev 40960)
@@ -50,36 +50,26 @@
/* Graph */
-static BL::NodeSocket get_node_input(BL::Node *b_group_node, BL::Node b_node, const string& name)
+static BL::NodeSocket get_node_input(BL::Node *b_group_node, BL::NodeSocket b_in)
{
- BL::Node::inputs_iterator b_in;
+ if(b_group_node) {
- for(b_node.inputs.begin(b_in); b_in != b_node.inputs.end(); ++b_in) {
- if(b_in->name() == name) {
- if(b_group_node) {
+ BL::NodeTree b_ntree = BL::NodeGroup(*b_group_node).node_tree();
+ BL::NodeTree::links_iterator b_link;
- BL::NodeTree b_ntree = BL::NodeGroup(*b_group_node).node_tree();
- BL::NodeTree::links_iterator b_link;
+ for(b_ntree.links.begin(b_link); b_link != b_ntree.links.end(); ++b_link) {
+ if(b_link->to_socket().ptr.data == b_in.ptr.data) {
+ BL::Node::inputs_iterator b_gin;
- for(b_ntree.links.begin(b_link); b_link != b_ntree.links.end(); ++b_link) {
- if(b_link->to_socket().ptr.data == b_in->ptr.data) {
- BL::Node::inputs_iterator b_gin;
+ for(b_group_node->inputs.begin(b_gin); b_gin != b_group_node->inputs.end(); ++b_gin)
+ if(b_gin->group_socket().ptr.data == b_link->from_socket().ptr.data)
+ return *b_gin;
- for(b_group_node->inputs.begin(b_gin); b_gin != b_group_node->inputs.end(); ++b_gin)
- if(b_gin->group_socket().ptr.data == b_link->from_socket().ptr.data)
- return *b_gin;
-
- }
- }
}
-
- return *b_in;
}
}
- assert(0);
-
- return *b_in;
+ return b_in;
}
static BL::NodeSocket get_node_output(BL::Node b_node, const string& name)
@@ -414,18 +404,52 @@
return node;
}
-static const char *node_socket_map_name(const char *name)
+static SocketPair node_socket_map_pair(PtrNodeMap& node_map, BL::Node b_node, BL::NodeSocket b_socket)
{
- if(strstr(name, "Shader")) {
- if(strcmp(name, "Shader") == 0)
- return "Closure";
- if(strcmp(name, "Shader1") == 0)
- return "Closure1";
- if(strcmp(name, "Shader2") == 0)
- return "Closure2";
+ BL::Node::inputs_iterator b_input;
+ BL::Node::outputs_iterator b_output;
+ string name = b_socket.name();
+ bool found = false;
+ int counter = 0, total = 0;
+
+ /* find in inputs */
+ for(b_node.inputs.begin(b_input); b_input != b_node.inputs.end(); ++b_input) {
+ if(b_input->name() == name) {
+ if(!found)
+ counter++;
+ total++;
+ }
+
+ if(b_input->ptr.data == b_socket.ptr.data)
+ found = true;
}
- return name;
+ if(!found) {
+ /* find in outputs */
+ found = false;
+ counter = 0;
+ total = 0;
+
+ for(b_node.outputs.begin(b_output); b_output != b_node.outputs.end(); ++b_output) {
+ if(b_output->name() == name) {
+ if(!found)
+ counter++;
+ total++;
+ }
+
+ if(b_output->ptr.data == b_socket.ptr.data)
+ found = true;
+ }
+ }
+
+ /* rename if needed */
+ if(name == "Shader")
+ name = "Closure";
+
+ if(total > 1)
+ name = string_printf("%s%d", name.c_str(), counter);
+
+ return SocketPair(node_map[b_node.ptr.data], name);
}
static void add_nodes(BL::BlendData b_data, ShaderGraph *graph, BL::ShaderNodeTree b_ntree, BL::Node *b_group_node, PtrSockMap& sockets_map)
@@ -453,8 +477,9 @@
node_map[b_node->ptr.data] = node;
for(b_node->inputs.begin(b_input); b_input != b_node->inputs.end(); ++b_input) {
- ShaderInput *input = node->input(node_socket_map_name(b_input->name().c_str()));
- BL::NodeSocket sock(get_node_input(b_group_node, *b_node, b_input->name()));
+ SocketPair pair = node_socket_map_pair(node_map, *b_node, *b_input);
+ ShaderInput *input = pair.first->input(pair.second.c_str());
+ BL::NodeSocket sock(get_node_input(b_group_node, *b_input));
assert(input);
@@ -500,55 +525,50 @@
if(b_group_node) {
if(!b_from_node) {
sockets_map[b_from_sock.ptr.data] =
- SocketPair(node_map[b_to_node.ptr.data], b_to_sock.name());
+ node_socket_map_pair(node_map, b_to_node, b_to_sock);
continue;
}
else if(!b_to_node) {
sockets_map[b_to_sock.ptr.data] =
- SocketPair(node_map[b_from_node.ptr.data], b_from_sock.name());
+ node_socket_map_pair(node_map, b_from_node, b_from_sock);
continue;
}
}
- ShaderNode *from_node, *to_node;
- string from_name, to_name;
+ SocketPair from_pair, to_pair;
/* from sock */
if(b_from_node.is_a(&RNA_NodeGroup)) {
/* group node */
BL::NodeSocket group_sock = b_from_sock.group_socket();
- SocketPair& pair = node_groups[b_from_node.ptr.data][group_sock.ptr.data];
-
- from_node = pair.first;
- from_name = pair.second;
+ from_pair = node_groups[b_from_node.ptr.data][group_sock.ptr.data];
}
else {
/* regular node */
- from_node = node_map[b_from_node.ptr.data];
- from_name = b_from_sock.name();
+ from_pair = node_socket_map_pair(node_map, b_from_node, b_from_sock);
}
/* to sock */
if(b_to_node.is_a(&RNA_NodeGroup)) {
/* group node */
BL::NodeSocket group_sock = b_to_sock.group_socket();
- SocketPair& pair = node_groups[b_to_node.ptr.data][group_sock.ptr.data];
-
- to_node = pair.first;
- to_name = pair.second;
+ to_pair = node_groups[b_to_node.ptr.data][group_sock.ptr.data];
}
else {
/* regular node */
- to_node = node_map[b_to_node.ptr.data];
- to_name = b_to_sock.name();
+ to_pair = node_socket_map_pair(node_map, b_to_node, b_to_sock);
}
/* in case of groups there may not actually be a node inside the group
that the group socket connects to, so from_node or to_node may be NULL */
- if(from_node && to_node)
- graph->connect(from_node->output(node_socket_map_name(from_name.c_str())), to_node->input(node_socket_map_name(to_name.c_str())));
+ if(from_pair.first && to_pair.first) {
+ ShaderOutput *output = from_pair.first->output(from_pair.second.c_str());
+ ShaderInput *input = to_pair.first->input(to_pair.second.c_str());
+
+ graph->connect(output, input);
+ }
}
}
Modified: branches/cycles/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/cycles/source/blender/blenloader/intern/readfile.c 2011-10-12 15:42:35 UTC (rev 40959)
+++ branches/cycles/source/blender/blenloader/intern/readfile.c 2011-10-12 15:45:52 UTC (rev 40960)
@@ -2082,10 +2082,29 @@
for(sock=node->inputs.first; sock; sock=sock->next) {
if(strcmp(sock->name, "Closure1") == 0)
strcpy(sock->name, "Shader1");
-
if(strcmp(sock->name, "Closure2") == 0)
strcpy(sock->name, "Shader2");
+ if(strcmp(sock->name, "Color1") == 0)
+ strcpy(sock->name, "Color");
+ if(strcmp(sock->name, "Color2") == 0)
+ strcpy(sock->name, "Color");
+
+ if(strcmp(sock->name, "Vector1") == 0)
+ strcpy(sock->name, "Vector");
+ if(strcmp(sock->name, "Vector2") == 0)
+ strcpy(sock->name, "Vector");
+
+ if(strcmp(sock->name, "Value1") == 0)
+ strcpy(sock->name, "Value");
+ if(strcmp(sock->name, "Value2") == 0)
+ strcpy(sock->name, "Value");
+
+ if(strcmp(sock->name, "Shader1") == 0)
+ strcpy(sock->name, "Shader");
+ if(strcmp(sock->name, "Shader2") == 0)
+ strcpy(sock->name, "Shader");
+
if(strcmp(sock->name, "Surface") == 0)
strcpy(sock->name, "Shader");
Modified: branches/cycles/source/blender/nodes/shader/nodes/node_shader_add_shader.c
===================================================================
--- branches/cycles/source/blender/nodes/shader/nodes/node_shader_add_shader.c 2011-10-12 15:42:35 UTC (rev 40959)
+++ branches/cycles/source/blender/nodes/shader/nodes/node_shader_add_shader.c 2011-10-12 15:45:52 UTC (rev 40960)
@@ -32,8 +32,8 @@
/* **************** OUTPUT ******************** */
static bNodeSocketTemplate sh_node_add_shader_in[]= {
- { SOCK_SHADER, 1, "Shader1"},
- { SOCK_SHADER, 1, "Shader2"},
+ { SOCK_SHADER, 1, "Shader"},
+ { SOCK_SHADER, 1, "Shader"},
{ -1, 0, "" }
};
Modified: branches/cycles/source/blender/nodes/shader/nodes/node_shader_math.c
===================================================================
--- branches/cycles/source/blender/nodes/shader/nodes/node_shader_math.c 2011-10-12 15:42:35 UTC (rev 40959)
+++ branches/cycles/source/blender/nodes/shader/nodes/node_shader_math.c 2011-10-12 15:45:52 UTC (rev 40960)
@@ -37,8 +37,8 @@
/* **************** SCALAR MATH ******************** */
static bNodeSocketTemplate sh_node_math_in[]= {
- { SOCK_FLOAT, 1, "Value1", 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f, PROP_NONE},
- { SOCK_FLOAT, 1, "Value2", 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f, PROP_NONE},
+ { SOCK_FLOAT, 1, "Value", 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f, PROP_NONE},
+ { SOCK_FLOAT, 1, "Value", 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f, PROP_NONE},
{ -1, 0, "" }
};
Modified: branches/cycles/source/blender/nodes/shader/nodes/node_shader_mixRgb.c
===================================================================
--- branches/cycles/source/blender/nodes/shader/nodes/node_shader_mixRgb.c 2011-10-12 15:42:35 UTC (rev 40959)
+++ branches/cycles/source/blender/nodes/shader/nodes/node_shader_mixRgb.c 2011-10-12 15:45:52 UTC (rev 40960)
@@ -37,8 +37,8 @@
/* **************** MIX RGB ******************** */
static bNodeSocketTemplate sh_node_mix_rgb_in[]= {
{ SOCK_FLOAT, 1, "Fac", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
- { SOCK_RGBA, 1, "Color1", 0.5f, 0.5f, 0.5f, 1.0f},
- { SOCK_RGBA, 1, "Color2", 0.5f, 0.5f, 0.5f, 1.0f},
+ { SOCK_RGBA, 1, "Color", 0.5f, 0.5f, 0.5f, 1.0f},
+ { SOCK_RGBA, 1, "Color", 0.5f, 0.5f, 0.5f, 1.0f},
{ -1, 0, "" }
};
static bNodeSocketTemplate sh_node_mix_rgb_out[]= {
Modified: branches/cycles/source/blender/nodes/shader/nodes/node_shader_mix_shader.c
===================================================================
--- branches/cycles/source/blender/nodes/shader/nodes/node_shader_mix_shader.c 2011-10-12 15:42:35 UTC (rev 40959)
+++ branches/cycles/source/blender/nodes/shader/nodes/node_shader_mix_shader.c 2011-10-12 15:45:52 UTC (rev 40960)
@@ -33,8 +33,8 @@
static bNodeSocketTemplate sh_node_mix_shader_in[]= {
{ SOCK_FLOAT, 1, "Fac", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
- { SOCK_SHADER, 1, "Shader1"},
- { SOCK_SHADER, 1, "Shader2"},
+ { SOCK_SHADER, 1, "Shader"},
+ { SOCK_SHADER, 1, "Shader"},
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list