diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-09-13 12:52:24 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-09-13 13:46:19 +0300 |
commit | 4fde0910d5236a83845c1f6428a57af723df42d9 (patch) | |
tree | 5f503adfbac49c5cc7ae07840766afb1e01c058b /source | |
parent | 659ba012b0f30450c6de13f8b1c2fccce32fc461 (diff) |
Compositor: Cleanup, reduce indentation level in render layer node
There is absolute no reason to have such an indentation level, it only causes
readability and maintainability issues. It is really simple to make code more
"streamlined".
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/compositor/nodes/COM_RenderLayersNode.cpp | 104 | ||||
-rw-r--r-- | source/blender/compositor/nodes/COM_RenderLayersNode.h | 9 |
2 files changed, 81 insertions, 32 deletions
diff --git a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp index 75128de2d84..a3b804e4559 100644 --- a/source/blender/compositor/nodes/COM_RenderLayersNode.cpp +++ b/source/blender/compositor/nodes/COM_RenderLayersNode.cpp @@ -48,40 +48,82 @@ void RenderLayersNode::testSocketLink(NodeConverter &converter, const Compositor converter.addPreview(operation->getOutputSocket()); } -void RenderLayersNode::convertToOperations(NodeConverter &converter, const CompositorContext &context) const +void RenderLayersNode::testRenderLink(NodeConverter &converter, + const CompositorContext &context, + Render *re) const { Scene *scene = (Scene *)this->getbNode()->id; - short layerId = this->getbNode()->custom1; - Render *re = (scene) ? RE_GetRender(scene->id.name) : NULL; - int numberOfOutputs = this->getNumberOfOutputSockets(); - - if (re) { - RenderResult *rr = RE_AcquireResultRead(re); - if (rr) { - SceneRenderLayer *srl = (SceneRenderLayer *)BLI_findlink(&scene->r.layers, layerId); - if (srl) { - RenderLayer *rl = RE_GetRenderLayer(rr, srl->name); - if (rl) { - for (int i = 0; i < numberOfOutputs; i++) { - NodeOutput *output = this->getOutputSocket(i); - NodeImageLayer *storage = (NodeImageLayer*) output->getbNodeSocket()->storage; - RenderPass *rpass = (RenderPass*) BLI_findstring(&rl->passes, storage->pass_name, offsetof(RenderPass, name)); - if (rpass) { - if (STREQ(rpass->name, RE_PASSNAME_COMBINED) && STREQ(output->getbNodeSocket()->name, "Alpha")) { - testSocketLink(converter, context, output, new RenderLayersAlphaProg(rpass->name, COM_DT_VALUE, rpass->channels), scene, layerId, false); - } - else if (STREQ(rpass->name, RE_PASSNAME_Z)) { - testSocketLink(converter, context, output, new RenderLayersDepthProg(rpass->name, COM_DT_VALUE, rpass->channels), scene, layerId, false); - } - else { - DataType type = ((rpass->channels == 4)? COM_DT_COLOR : ((rpass->channels == 3)? COM_DT_VECTOR : COM_DT_VALUE)); - testSocketLink(converter, context, output, new RenderLayersProg(rpass->name, type, rpass->channels), scene, layerId, STREQ(output->getbNodeSocket()->name, "Image")); - } - } - } - } - } + const short layerId = this->getbNode()->custom1; + RenderResult *rr = RE_AcquireResultRead(re); + if (rr == NULL) { + return; + } + SceneRenderLayer *srl = (SceneRenderLayer *)BLI_findlink(&scene->r.layers, layerId); + if (srl == NULL) { + return; + } + RenderLayer *rl = RE_GetRenderLayer(rr, srl->name); + if (rl == NULL) { + return; + } + const int numberOfOutputs = this->getNumberOfOutputSockets(); + for (int i = 0; i < numberOfOutputs; i++) { + NodeOutput *output = this->getOutputSocket(i); + NodeImageLayer *storage = (NodeImageLayer*) output->getbNodeSocket()->storage; + RenderPass *rpass = (RenderPass*) BLI_findstring( + &rl->passes, + storage->pass_name, + offsetof(RenderPass, name)); + if (rpass == NULL) { + continue; + } + if (STREQ(rpass->name, RE_PASSNAME_COMBINED) && + STREQ(output->getbNodeSocket()->name, "Alpha")) + { + testSocketLink(converter, + context, + output, + new RenderLayersAlphaProg(rpass->name, + COM_DT_VALUE, + rpass->channels), + scene, + layerId, + false); + } + else if (STREQ(rpass->name, RE_PASSNAME_Z)) { + testSocketLink(converter, + context, + output, + new RenderLayersDepthProg(rpass->name, + COM_DT_VALUE, + rpass->channels), + scene, + layerId, + false); + } + else { + DataType type = ((rpass->channels == 4)? COM_DT_COLOR : ((rpass->channels == 3)? COM_DT_VECTOR : COM_DT_VALUE)); + testSocketLink(converter, + context, + output, + new RenderLayersProg(rpass->name, + type, + rpass->channels), + scene, + layerId, + STREQ(output->getbNodeSocket()->name, "Image")); } + } +} + +void RenderLayersNode::convertToOperations(NodeConverter &converter, + const CompositorContext &context) const +{ + Scene *scene = (Scene *)this->getbNode()->id; + Render *re = (scene) ? RE_GetRender(scene->id.name) : NULL; + + if (re != NULL) { + testRenderLink(converter, context, re); RE_ReleaseResult(re); } } diff --git a/source/blender/compositor/nodes/COM_RenderLayersNode.h b/source/blender/compositor/nodes/COM_RenderLayersNode.h index 1f733a9f4bb..a90e09853c2 100644 --- a/source/blender/compositor/nodes/COM_RenderLayersNode.h +++ b/source/blender/compositor/nodes/COM_RenderLayersNode.h @@ -24,6 +24,8 @@ #include "DNA_node_types.h" #include "COM_RenderLayersProg.h" +struct Render; + /** * @brief RenderLayersNode * @ingroup Node @@ -31,7 +33,8 @@ class RenderLayersNode : public Node { public: RenderLayersNode(bNode *editorNode); - void convertToOperations(NodeConverter &converter, const CompositorContext &context) const; + void convertToOperations(NodeConverter &converter, + const CompositorContext &context) const; private: void testSocketLink(NodeConverter &converter, const CompositorContext &context, @@ -40,4 +43,8 @@ private: Scene *scene, int layerId, bool is_preview) const; + + void testRenderLink(NodeConverter &converter, + const CompositorContext &context, + Render *re) const; }; |