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

Reply via email to