From eaada565910b4ff31081ced86c3b7242f2f28b4e Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Tue, 9 Mar 2021 15:19:00 +0100 Subject: 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 --- source/blender/blenkernel/BKE_cryptomatte.hh | 11 +++++++++++ source/blender/blenkernel/intern/cryptomatte_test.cc | 7 +++---- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'source/blender') 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 -- cgit v1.2.3