Revision: 49680
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49680
Author:   nazgul
Date:     2012-08-08 08:15:56 +0000 (Wed, 08 Aug 2012)
Log Message:
-----------
Fix crash in cases when render layers node is muted

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_MuteNode.cpp

Modified: trunk/blender/source/blender/compositor/nodes/COM_MuteNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_MuteNode.cpp      
2012-08-08 07:31:19 UTC (rev 49679)
+++ trunk/blender/source/blender/compositor/nodes/COM_MuteNode.cpp      
2012-08-08 08:15:56 UTC (rev 49680)
@@ -110,6 +110,7 @@
         */
        if ((editorNode->flag & NODE_MUTED) && 
editorNode->typeinfo->internal_connect) {
                vector<InputSocket *> &inputsockets = this->getInputSockets();
+               vector<OutputSocket *> relinkedsockets;
                bNodeTree *editorTree = (bNodeTree *) context->getbNodeTree();
                SocketMap socketMap;
                ListBase intlinks;
@@ -132,10 +133,37 @@
                                        else {
                                                createDefaultOutput(graph, 
toSocket);
                                        }
+
+                                       relinkedsockets.push_back(toSocket);
                                }
                        }
                }
 
+               /* in some cases node could be marked as muted, but it wouldn't 
have internal connections
+                * this happens in such cases as muted render layer node
+                *
+                * to deal with such cases create default operation for 
not-relinked output sockets
+                */
+
+               for (unsigned int index = 0; index < outputsockets.size(); 
index++) {
+                       OutputSocket *output = outputsockets[index];
+
+                       if (output->isConnected()) {
+                               bool relinked = false;
+                               vector<OutputSocket *>::iterator it;
+
+                               for (it = relinkedsockets.begin(); it != 
relinkedsockets.end(); it++) {
+                                       if (*it == output) {
+                                               relinked = true;
+                                               break;
+                                       }
+                               }
+
+                               if (!relinked)
+                                       createDefaultOutput(graph, output);
+                       }
+               }
+
                BLI_freelistN(&intlinks);
        }
        else {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to