diff options
Diffstat (limited to 'source/blender/compositor/nodes/COM_RenderLayersNode.cpp')
-rw-r--r-- | source/blender/compositor/nodes/COM_RenderLayersNode.cpp | 101 |
1 files changed, 44 insertions, 57 deletions
diff --git a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp index 512f8eec90f..cc66c688379 100644 --- a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp +++ b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp @@ -21,7 +21,6 @@ */ #include "COM_RenderLayersNode.h" -#include "COM_ExecutionSystem.h" #include "COM_RenderLayersProg.h" #include "COM_TranslateOperation.h" #include "COM_RotateOperation.h" @@ -33,69 +32,57 @@ RenderLayersNode::RenderLayersNode(bNode *editorNode) : Node(editorNode) /* pass */ } -void RenderLayersNode::testSocketConnection(ExecutionSystem *system, CompositorContext *context, int outputSocketNumber, RenderLayersBaseProg *operation) +void RenderLayersNode::testSocketLink(NodeConverter &converter, const CompositorContext &context, + int outputSocketNumber, RenderLayersBaseProg *operation) const { - OutputSocket *outputSocket = this->getOutputSocket(outputSocketNumber); + NodeOutput *outputSocket = this->getOutputSocket(outputSocketNumber); Scene *scene = (Scene *)this->getbNode()->id; short layerId = this->getbNode()->custom1; - if (outputSocket->isConnected()) { - operation->setScene(scene); - operation->setLayerId(layerId); - operation->setRenderData(context->getRenderData()); - outputSocket->relinkConnections(operation->getOutputSocket()); - system->addOperation(operation); - if (outputSocketNumber == 0) { // only do for image socket if connected - addPreviewOperation(system, context, operation->getOutputSocket()); - } - } - else { - if (outputSocketNumber == 0) { - system->addOperation(operation); - operation->setScene(scene); - operation->setLayerId(layerId); - operation->setRenderData(context->getRenderData()); - addPreviewOperation(system, context, operation->getOutputSocket()); - } - else { - delete operation; - } - } + operation->setScene(scene); + operation->setLayerId(layerId); + operation->setRenderData(context.getRenderData()); + + converter.mapOutputSocket(outputSocket, operation->getOutputSocket()); + converter.addOperation(operation); + + if (outputSocketNumber == 0) /* only for image socket */ + converter.addPreview(operation->getOutputSocket()); } -void RenderLayersNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context) +void RenderLayersNode::convertToOperations(NodeConverter &converter, const CompositorContext &context) const { - testSocketConnection(graph, context, 0, new RenderLayersColorProg()); - testSocketConnection(graph, context, 1, new RenderLayersAlphaProg()); - testSocketConnection(graph, context, 2, new RenderLayersDepthProg()); - testSocketConnection(graph, context, 3, new RenderLayersNormalOperation()); - testSocketConnection(graph, context, 4, new RenderLayersUVOperation()); - testSocketConnection(graph, context, 5, new RenderLayersSpeedOperation()); - testSocketConnection(graph, context, 6, new RenderLayersColorOperation()); - testSocketConnection(graph, context, 7, new RenderLayersDiffuseOperation()); - testSocketConnection(graph, context, 8, new RenderLayersSpecularOperation()); - testSocketConnection(graph, context, 9, new RenderLayersShadowOperation()); - testSocketConnection(graph, context, 10, new RenderLayersAOOperation()); - testSocketConnection(graph, context, 11, new RenderLayersReflectionOperation()); - testSocketConnection(graph, context, 12, new RenderLayersRefractionOperation()); - testSocketConnection(graph, context, 13, new RenderLayersIndirectOperation()); - testSocketConnection(graph, context, 14, new RenderLayersObjectIndexOperation()); - testSocketConnection(graph, context, 15, new RenderLayersMaterialIndexOperation()); - testSocketConnection(graph, context, 16, new RenderLayersMistOperation()); - testSocketConnection(graph, context, 17, new RenderLayersEmitOperation()); - testSocketConnection(graph, context, 18, new RenderLayersEnvironmentOperation()); + testSocketLink(converter, context, 0, new RenderLayersColorProg()); + testSocketLink(converter, context, 1, new RenderLayersAlphaProg()); + testSocketLink(converter, context, 2, new RenderLayersDepthProg()); + testSocketLink(converter, context, 3, new RenderLayersNormalOperation()); + testSocketLink(converter, context, 4, new RenderLayersUVOperation()); + testSocketLink(converter, context, 5, new RenderLayersSpeedOperation()); + testSocketLink(converter, context, 6, new RenderLayersColorOperation()); + testSocketLink(converter, context, 7, new RenderLayersDiffuseOperation()); + testSocketLink(converter, context, 8, new RenderLayersSpecularOperation()); + testSocketLink(converter, context, 9, new RenderLayersShadowOperation()); + testSocketLink(converter, context, 10, new RenderLayersAOOperation()); + testSocketLink(converter, context, 11, new RenderLayersReflectionOperation()); + testSocketLink(converter, context, 12, new RenderLayersRefractionOperation()); + testSocketLink(converter, context, 13, new RenderLayersIndirectOperation()); + testSocketLink(converter, context, 14, new RenderLayersObjectIndexOperation()); + testSocketLink(converter, context, 15, new RenderLayersMaterialIndexOperation()); + testSocketLink(converter, context, 16, new RenderLayersMistOperation()); + testSocketLink(converter, context, 17, new RenderLayersEmitOperation()); + testSocketLink(converter, context, 18, new RenderLayersEnvironmentOperation()); // cycles passes - testSocketConnection(graph, context, 19, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_DIRECT)); - testSocketConnection(graph, context, 20, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_INDIRECT)); - testSocketConnection(graph, context, 21, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_COLOR)); - testSocketConnection(graph, context, 22, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_DIRECT)); - testSocketConnection(graph, context, 23, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_INDIRECT)); - testSocketConnection(graph, context, 24, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_COLOR)); - testSocketConnection(graph, context, 25, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_DIRECT)); - testSocketConnection(graph, context, 26, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_INDIRECT)); - testSocketConnection(graph, context, 27, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_COLOR)); - testSocketConnection(graph, context, 28, new RenderLayersCyclesOperation(SCE_PASS_SUBSURFACE_DIRECT)); - testSocketConnection(graph, context, 29, new RenderLayersCyclesOperation(SCE_PASS_SUBSURFACE_INDIRECT)); - testSocketConnection(graph, context, 30, new RenderLayersCyclesOperation(SCE_PASS_SUBSURFACE_COLOR)); + testSocketLink(converter, context, 19, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_DIRECT)); + testSocketLink(converter, context, 20, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_INDIRECT)); + testSocketLink(converter, context, 21, new RenderLayersCyclesOperation(SCE_PASS_DIFFUSE_COLOR)); + testSocketLink(converter, context, 22, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_DIRECT)); + testSocketLink(converter, context, 23, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_INDIRECT)); + testSocketLink(converter, context, 24, new RenderLayersCyclesOperation(SCE_PASS_GLOSSY_COLOR)); + testSocketLink(converter, context, 25, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_DIRECT)); + testSocketLink(converter, context, 26, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_INDIRECT)); + testSocketLink(converter, context, 27, new RenderLayersCyclesOperation(SCE_PASS_TRANSM_COLOR)); + testSocketLink(converter, context, 28, new RenderLayersCyclesOperation(SCE_PASS_SUBSURFACE_DIRECT)); + testSocketLink(converter, context, 29, new RenderLayersCyclesOperation(SCE_PASS_SUBSURFACE_INDIRECT)); + testSocketLink(converter, context, 30, new RenderLayersCyclesOperation(SCE_PASS_SUBSURFACE_COLOR)); } |