[Bf-blender-cvs] [d91211f6237] compositor-cryptomatte-workflow: Add fallback logic when layer does not exist
Jeroen Bakker
noreply at git.blender.org
Tue Mar 9 14:10:56 CET 2021
Commit: d91211f6237aa1076930442892beff6139d9fddb
Author: Jeroen Bakker
Date: Tue Mar 9 13:28:00 2021 +0100
Branches: compositor-cryptomatte-workflow
https://developer.blender.org/rBd91211f6237aa1076930442892beff6139d9fddb
Add fallback logic when layer does not exist
===================================================================
M source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
===================================================================
diff --git a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
index 9053aec884b..615ae2541b2 100644
--- a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
@@ -36,6 +36,8 @@
#include "BKE_library.h"
#include "BKE_main.h"
+#include <optional>
+
static CryptomatteSession *cryptomatte_init_from_node(const bNode &node,
const int frame_number,
const bool use_meta_data)
@@ -184,7 +186,29 @@ void ntreeCompositCryptomatteUpdateLayerNames(bNode *node)
const char *ntreeCompositCryptomatteLayerPrefix(const bNode *node)
{
NodeCryptomatte *node_cryptomatte = (NodeCryptomatte *)node->storage;
- return node_cryptomatte->layer_name;
+ CryptomatteSession *session = cryptomatte_init_from_node(*node, 0, false);
+ std::optional<std::string> first_layer_name = std::nullopt;
+
+ if (session) {
+ for (blender::StringRef layer_name :
+ blender::bke::cryptomatte::BKE_cryptomatte_layer_names_get(*session)) {
+ if (!first_layer_name.has_value()) {
+ first_layer_name = layer_name;
+ }
+
+ if (layer_name == node_cryptomatte->layer_name) {
+ BKE_cryptomatte_free(session);
+ return node_cryptomatte->layer_name;
+ }
+ }
+
+ BKE_cryptomatte_free(session);
+ }
+
+ if (!first_layer_name.has_value()) {
+ return "";
+ }
+ return first_layer_name.value().c_str();
}
static void node_init_cryptomatte(bNodeTree *UNUSED(ntree), bNode *node)
More information about the Bf-blender-cvs
mailing list