diff options
-rw-r--r-- | source/blender/blenkernel/intern/cryptomatte.cc | 22 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/cryptomatte_test.cc | 13 |
2 files changed, 7 insertions, 28 deletions
diff --git a/source/blender/blenkernel/intern/cryptomatte.cc b/source/blender/blenkernel/intern/cryptomatte.cc index 9d9cace3a35..3188656aa6b 100644 --- a/source/blender/blenkernel/intern/cryptomatte.cc +++ b/source/blender/blenkernel/intern/cryptomatte.cc @@ -184,30 +184,22 @@ float BKE_cryptomatte_hash_to_float(uint32_t cryptomatte_hash) char *BKE_cryptomatte_entries_to_matte_id(NodeCryptomatte *node_storage) { - std::stringstream ss; - ss.precision(9); - + DynStr *matte_id = BLI_dynstr_new(); bool first = true; LISTBASE_FOREACH (CryptomatteEntry *, entry, &node_storage->entries) { if (!first) { - ss << ','; + BLI_dynstr_append(matte_id, ","); } - blender::StringRef entry_name(entry->name, BLI_strnlen(entry->name, sizeof(entry->name))); - if (!entry_name.is_empty()) { - ss << entry_name; + if (BLI_strnlen(entry->name, sizeof(entry->name)) != 0) { + BLI_dynstr_nappend(matte_id, entry->name, sizeof(entry->name)); } else { - ss << '<' << std::scientific << entry->encoded_hash << '>'; + BLI_dynstr_appendf(matte_id, "<%.9g>", entry->encoded_hash); } first = false; } - - /* Convert result to C string. */ - const std::string result_string = ss.str(); - const char *c_str = result_string.c_str(); - size_t result_len = result_string.size() + 1; - char *result = static_cast<char *>(MEM_mallocN(sizeof(char) * result_len, __func__)); - memcpy(result, c_str, result_len); + char *result = BLI_dynstr_get_cstring(matte_id); + BLI_dynstr_free(matte_id); return result; } diff --git a/source/blender/blenkernel/intern/cryptomatte_test.cc b/source/blender/blenkernel/intern/cryptomatte_test.cc index 22abd1a4d56..13e29cecf0a 100644 --- a/source/blender/blenkernel/intern/cryptomatte_test.cc +++ b/source/blender/blenkernel/intern/cryptomatte_test.cc @@ -21,8 +21,6 @@ #include "BKE_cryptomatte.hh" #include "BKE_image.h" -#include "DNA_node_types.h" - #include "RE_pipeline.h" #include "MEM_guardedalloc.h" @@ -176,15 +174,4 @@ TEST(cryptomatte, session_from_stamp_data) BKE_cryptomatte_free(session); } -TEST(cryptomatte, T86026) -{ - NodeCryptomatte storage = {{0.0f}}; - CryptomatteEntry entry = {nullptr}; - BLI_addtail(&storage.entries, &entry); - entry.encoded_hash = 4.76190593e-07; - char *matte_id = BKE_cryptomatte_entries_to_matte_id(&storage); - EXPECT_STREQ("<4.761905927e-07>", matte_id); - MEM_freeN(matte_id); -} - } // namespace blender::bke::cryptomatte::tests |