Revision: 47662
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47662
Author:   lukastoenne
Date:     2012-06-10 09:30:31 +0000 (Sun, 10 Jun 2012)
Log Message:
-----------
Fix for Tile group nodes with internally unconnected outputs, this was crashing 
due to missing constant value operations for such outputs. The SocketProxyNode 
now checks connection of the input socket on conversion, so this also 
simplifies usage of proxy nodes quite a bit.

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_GroupNode.cpp
    trunk/blender/source/blender/compositor/nodes/COM_SocketProxyNode.cpp
    trunk/blender/source/blender/compositor/nodes/COM_SocketProxyNode.h

Modified: trunk/blender/source/blender/compositor/nodes/COM_GroupNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_GroupNode.cpp     
2012-06-10 09:10:56 UTC (rev 47661)
+++ trunk/blender/source/blender/compositor/nodes/COM_GroupNode.cpp     
2012-06-10 09:30:31 UTC (rev 47662)
@@ -45,23 +45,16 @@
                InputSocket * inputSocket = inputsockets[index];
                bNodeSocket *editorInput = inputSocket->getbNodeSocket();
                if (editorInput->groupsock) {
-                       if (inputSocket->isConnected()) {
-                               SocketProxyNode * proxy = new 
SocketProxyNode(this->getbNode(), editorInput, editorInput->groupsock);
-                               
inputSocket->relinkConnections(proxy->getInputSocket(0), index, &system);
-                               
ExecutionSystemHelper::addNode(system.getNodes(), proxy);
-                       }
-                       else {
-                               OutputSocketProxyNode * proxy = new 
OutputSocketProxyNode(this->getbNode(), editorInput, editorInput->groupsock);
-                               
inputSocket->relinkConnections(proxy->getInputSocket(0), index, &system);
-                               
ExecutionSystemHelper::addNode(system.getNodes(), proxy);
-                       }
+                       SocketProxyNode * proxy = new 
SocketProxyNode(this->getbNode(), editorInput, editorInput->groupsock);
+                       
inputSocket->relinkConnections(proxy->getInputSocket(0), index, &system);
+                       ExecutionSystemHelper::addNode(system.getNodes(), 
proxy);
                }
        }
 
        for (index = 0 ; index < outputsockets.size();index ++) {
                OutputSocket * outputSocket = outputsockets[index];
                bNodeSocket *editorOutput = outputSocket->getbNodeSocket();
-               if (outputSocket->isConnected() && editorOutput->groupsock) {
+               if (editorOutput->groupsock) {
                        SocketProxyNode * proxy = new 
SocketProxyNode(this->getbNode(), editorOutput->groupsock, editorOutput);
                        
outputSocket->relinkConnections(proxy->getOutputSocket(0));
                        ExecutionSystemHelper::addNode(system.getNodes(), 
proxy);

Modified: trunk/blender/source/blender/compositor/nodes/COM_SocketProxyNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_SocketProxyNode.cpp       
2012-06-10 09:10:56 UTC (rev 47661)
+++ trunk/blender/source/blender/compositor/nodes/COM_SocketProxyNode.cpp       
2012-06-10 09:30:31 UTC (rev 47662)
@@ -46,50 +46,48 @@
 void SocketProxyNode::convertToOperations(ExecutionSystem *graph, 
CompositorContext * context)
 {
        OutputSocket * outputsocket = this->getOutputSocket(0);
-       if (outputsocket->isConnected()) {
-               SocketProxyOperation *operation = new SocketProxyOperation();
-               
this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0));
-               
this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
-               graph->addOperation(operation);
-       }
-}
-
-void OutputSocketProxyNode::convertToOperations(ExecutionSystem *graph, 
CompositorContext * context)
-{
-       OutputSocket * outputsocket = this->getOutputSocket(0);
        InputSocket * inputsocket = this->getInputSocket(0);
        if (outputsocket->isConnected()) {
-               switch (outputsocket->getActualDataType()) {
-               case COM_DT_VALUE:
-               {
-                       SetValueOperation *operation = new SetValueOperation();
-                       bNodeSocketValueFloat *dval = 
(bNodeSocketValueFloat*)inputsocket->getbNodeSocket()->default_value;
-                       operation->setValue(dval->value);
-                       
this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
+               if (inputsocket->isConnected()) {
+                       SocketProxyOperation *operation = new 
SocketProxyOperation();
+                       
inputsocket->relinkConnections(operation->getInputSocket(0));
+                       
outputsocket->relinkConnections(operation->getOutputSocket(0));
                        graph->addOperation(operation);
-                       break;
                }
-               case COM_DT_COLOR:
-               {
-                       SetColorOperation *operation = new SetColorOperation();
-                       bNodeSocketValueRGBA *dval = 
(bNodeSocketValueRGBA*)inputsocket->getbNodeSocket()->default_value;
-                       operation->setChannels(dval->value);
-                       
this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
-                       graph->addOperation(operation);
-                       break;
+               else {
+                       /* If input is not connected, add a constant value 
operation instead */
+                       switch (outputsocket->getActualDataType()) {
+                       case COM_DT_VALUE:
+                       {
+                               SetValueOperation *operation = new 
SetValueOperation();
+                               bNodeSocketValueFloat *dval = 
(bNodeSocketValueFloat*)inputsocket->getbNodeSocket()->default_value;
+                               operation->setValue(dval->value);
+                               
outputsocket->relinkConnections(operation->getOutputSocket(0));
+                               graph->addOperation(operation);
+                               break;
+                       }
+                       case COM_DT_COLOR:
+                       {
+                               SetColorOperation *operation = new 
SetColorOperation();
+                               bNodeSocketValueRGBA *dval = 
(bNodeSocketValueRGBA*)inputsocket->getbNodeSocket()->default_value;
+                               operation->setChannels(dval->value);
+                               
outputsocket->relinkConnections(operation->getOutputSocket(0));
+                               graph->addOperation(operation);
+                               break;
+                       }
+                       case COM_DT_VECTOR:
+                       {
+                               SetVectorOperation *operation = new 
SetVectorOperation();
+                               bNodeSocketValueVector *dval = 
(bNodeSocketValueVector*)inputsocket->getbNodeSocket()->default_value;
+                               operation->setVector(dval->value);
+                               
outputsocket->relinkConnections(operation->getOutputSocket(0));
+                               graph->addOperation(operation);
+                               break;
+                       }
+                               /* quiet warnings */
+                       case COM_DT_UNKNOWN:
+                               break;
+                       }
                }
-               case COM_DT_VECTOR:
-               {
-                       SetVectorOperation *operation = new 
SetVectorOperation();
-                       bNodeSocketValueVector *dval = 
(bNodeSocketValueVector*)inputsocket->getbNodeSocket()->default_value;
-                       operation->setVector(dval->value);
-                       
this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
-                       graph->addOperation(operation);
-                       break;
-               }
-                       /* quiet warnings */
-               case COM_DT_UNKNOWN:
-                       break;
-               }
        }
 }

Modified: trunk/blender/source/blender/compositor/nodes/COM_SocketProxyNode.h
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_SocketProxyNode.h 
2012-06-10 09:10:56 UTC (rev 47661)
+++ trunk/blender/source/blender/compositor/nodes/COM_SocketProxyNode.h 
2012-06-10 09:30:31 UTC (rev 47662)
@@ -37,10 +37,4 @@
        virtual bool isProxyNode() const { return true; }
 };
 
-class OutputSocketProxyNode: public SocketProxyNode {
-public:
-       OutputSocketProxyNode(bNode *editorNode, bNodeSocket *editorInput, 
bNodeSocket *editorOutput): SocketProxyNode(editorNode, editorInput, 
editorOutput) {}
-       void convertToOperations(ExecutionSystem *graph, CompositorContext * 
context);
-};
-
 #endif

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

Reply via email to