From eaada565910b4ff31081ced86c3b7242f2f28b4e Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Tue, 9 Mar 2021 15:19:00 +0100 Subject: [PATCH] Cleanup: add resource manager for cryptomatte session. Auto frees cryptomatte session when it the pointer is collected from the stack. Reviewed By: Jacques Lucke Differential Revision: https://developer.blender.org/D10667 --- release/datafiles/locale | 2 +- release/scripts/addons | 2 +- source/blender/blenkernel/BKE_cryptomatte.hh | 11 +++++++++++ source/blender/blenkernel/intern/cryptomatte_test.cc | 7 +++---- source/tools | 2 +- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/release/datafiles/locale b/release/datafiles/locale index aafea2abb18..b06e7fe345e 160000 --- a/release/datafiles/locale +++ b/release/datafiles/locale @@ -1 +1 @@ -Subproject commit aafea2abb18bb42e7d31a6926b2caba90f4e0316 +Subproject commit b06e7fe345e4a313eb701692e5d45033131caee1 diff --git a/release/scripts/addons b/release/scripts/addons index 117faa96af3..ef3104dae30 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit 117faa96af35685d72e5e01f9a386d163d874133 +Subproject commit ef3104dae302dcfb08b21e32d10b548bf304bd29 diff --git a/source/blender/blenkernel/BKE_cryptomatte.hh b/source/blender/blenkernel/BKE_cryptomatte.hh index f10b4c1f7c4..98fdfc965bc 100644 --- a/source/blender/blenkernel/BKE_cryptomatte.hh +++ b/source/blender/blenkernel/BKE_cryptomatte.hh @@ -29,6 +29,8 @@ #include "BLI_map.hh" #include "BLI_string_ref.hh" +#include "BKE_cryptomatte.h" + struct ID; namespace blender::bke::cryptomatte { @@ -103,4 +105,13 @@ struct CryptomatteStampDataCallbackData { static void extract_layer_manifest(void *_data, const char *propname, char *propvalue, int len); }; +struct CryptomatteSessionDeleter { + void operator()(CryptomatteSession *session) + { + BKE_cryptomatte_free(session); + } +}; + +using CryptomatteSessionPtr = std::unique_ptr; + } // namespace blender::bke::cryptomatte diff --git a/source/blender/blenkernel/intern/cryptomatte_test.cc b/source/blender/blenkernel/intern/cryptomatte_test.cc index d9be252d654..5c57c906ca2 100644 --- a/source/blender/blenkernel/intern/cryptomatte_test.cc +++ b/source/blender/blenkernel/intern/cryptomatte_test.cc @@ -157,8 +157,8 @@ TEST(cryptomatte, session_from_stamp_data) BKE_render_result_stamp_data(render_result, "cryptomatte/uiop/name", "layer2"); BKE_render_result_stamp_data( render_result, "cryptomatte/uiop/manifest", "{\"Object2\":\"87654321\"}"); - CryptomatteSession *session = BKE_cryptomatte_init_from_render_result(render_result); - EXPECT_NE(session, nullptr); + CryptomatteSessionPtr session(BKE_cryptomatte_init_from_render_result(render_result)); + EXPECT_NE(session.get(), nullptr); RE_FreeRenderResult(render_result); /* Create StampData from CryptomatteSession. */ @@ -166,14 +166,13 @@ TEST(cryptomatte, session_from_stamp_data) BLI_strncpy(view_layer.name, "viewlayername", sizeof(view_layer.name)); RenderResult *render_result2 = static_cast( MEM_callocN(sizeof(RenderResult), __func__)); - BKE_cryptomatte_store_metadata(session, render_result2, &view_layer); + BKE_cryptomatte_store_metadata(session.get(), render_result2, &view_layer); /* Validate StampData. */ BKE_stamp_info_callback( nullptr, render_result2->stamp_data, validate_cryptomatte_session_from_stamp_data, false); RE_FreeRenderResult(render_result2); - BKE_cryptomatte_free(session); } } // namespace blender::bke::cryptomatte::tests diff --git a/source/tools b/source/tools index c37d8bd28dd..b66c22e1fb9 160000 --- a/source/tools +++ b/source/tools @@ -1 +1 @@ -Subproject commit c37d8bd28ddddb8f1b0dff5739d75f8004e8034f +Subproject commit b66c22e1fb977bf8dd3797ebedc28fbe28f0305e