[Bf-blender-cvs] [0e255b2e7a0] compositor-full-frame: Compositor: Fix image node alpha socket converted into operations twice

Manuel Castilla noreply at git.blender.org
Fri Jul 23 19:23:11 CEST 2021


Commit: 0e255b2e7a0497ccdb691c3aa0cf224c8ce25226
Author: Manuel Castilla
Date:   Wed Jun 2 12:22:21 2021 +0200
Branches: compositor-full-frame
https://developer.blender.org/rB0e255b2e7a0497ccdb691c3aa0cf224c8ce25226

Compositor: Fix image node alpha socket converted into operations twice

When translating image node sockets into operations, unavailable ones (with flag SOCK_UNAVAIL) are converted too. This causes an assertion to fail when selecting a multi-layer image with a "Combined" layer because it's mapping associated "Alpha" socket to operation output twice (as there is an unavailable "Image" socket used for combined too).

During compositing execution there is not need to create unavailable sockets as they are not linked or executed. Assertion fails since commit 93e2491, as now map add_new is used instead of just overwriting last mapped socket.

===================================================================

M	source/blender/compositor/nodes/COM_ImageNode.cc

===================================================================

diff --git a/source/blender/compositor/nodes/COM_ImageNode.cc b/source/blender/compositor/nodes/COM_ImageNode.cc
index f0bfda0f40e..df96b999115 100644
--- a/source/blender/compositor/nodes/COM_ImageNode.cc
+++ b/source/blender/compositor/nodes/COM_ImageNode.cc
@@ -92,8 +92,11 @@ void ImageNode::convertToOperations(NodeConverter &converter,
 
         for (int64_t index = 0; index < outputs.size(); index++) {
           NodeOutput *socket = outputs[index];
-          NodeOperation *operation = nullptr;
           bNodeSocket *bnodeSocket = socket->getbNodeSocket();
+          if (bnodeSocket->flag & SOCK_UNAVAIL) {
+            continue;
+          }
+          NodeOperation *operation = nullptr;
           NodeImageLayer *storage = (NodeImageLayer *)bnodeSocket->storage;
           RenderPass *rpass = (RenderPass *)BLI_findstring(
               &rl->passes, storage->pass_name, offsetof(RenderPass, name));



More information about the Bf-blender-cvs mailing list