forked from bartvdbraak/blender
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
This commit is contained in:
parent
cdb0b3cedc
commit
eaada56591
@ -1 +1 @@
|
|||||||
Subproject commit aafea2abb18bb42e7d31a6926b2caba90f4e0316
|
Subproject commit b06e7fe345e4a313eb701692e5d45033131caee1
|
@ -1 +1 @@
|
|||||||
Subproject commit 117faa96af35685d72e5e01f9a386d163d874133
|
Subproject commit ef3104dae302dcfb08b21e32d10b548bf304bd29
|
@ -29,6 +29,8 @@
|
|||||||
#include "BLI_map.hh"
|
#include "BLI_map.hh"
|
||||||
#include "BLI_string_ref.hh"
|
#include "BLI_string_ref.hh"
|
||||||
|
|
||||||
|
#include "BKE_cryptomatte.h"
|
||||||
|
|
||||||
struct ID;
|
struct ID;
|
||||||
|
|
||||||
namespace blender::bke::cryptomatte {
|
namespace blender::bke::cryptomatte {
|
||||||
@ -103,4 +105,13 @@ struct CryptomatteStampDataCallbackData {
|
|||||||
static void extract_layer_manifest(void *_data, const char *propname, char *propvalue, int len);
|
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<CryptomatteSession, CryptomatteSessionDeleter>;
|
||||||
|
|
||||||
} // namespace blender::bke::cryptomatte
|
} // namespace blender::bke::cryptomatte
|
||||||
|
@ -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/name", "layer2");
|
||||||
BKE_render_result_stamp_data(
|
BKE_render_result_stamp_data(
|
||||||
render_result, "cryptomatte/uiop/manifest", "{\"Object2\":\"87654321\"}");
|
render_result, "cryptomatte/uiop/manifest", "{\"Object2\":\"87654321\"}");
|
||||||
CryptomatteSession *session = BKE_cryptomatte_init_from_render_result(render_result);
|
CryptomatteSessionPtr session(BKE_cryptomatte_init_from_render_result(render_result));
|
||||||
EXPECT_NE(session, nullptr);
|
EXPECT_NE(session.get(), nullptr);
|
||||||
RE_FreeRenderResult(render_result);
|
RE_FreeRenderResult(render_result);
|
||||||
|
|
||||||
/* Create StampData from CryptomatteSession. */
|
/* Create StampData from CryptomatteSession. */
|
||||||
@ -166,14 +166,13 @@ TEST(cryptomatte, session_from_stamp_data)
|
|||||||
BLI_strncpy(view_layer.name, "viewlayername", sizeof(view_layer.name));
|
BLI_strncpy(view_layer.name, "viewlayername", sizeof(view_layer.name));
|
||||||
RenderResult *render_result2 = static_cast<RenderResult *>(
|
RenderResult *render_result2 = static_cast<RenderResult *>(
|
||||||
MEM_callocN(sizeof(RenderResult), __func__));
|
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. */
|
/* Validate StampData. */
|
||||||
BKE_stamp_info_callback(
|
BKE_stamp_info_callback(
|
||||||
nullptr, render_result2->stamp_data, validate_cryptomatte_session_from_stamp_data, false);
|
nullptr, render_result2->stamp_data, validate_cryptomatte_session_from_stamp_data, false);
|
||||||
|
|
||||||
RE_FreeRenderResult(render_result2);
|
RE_FreeRenderResult(render_result2);
|
||||||
BKE_cryptomatte_free(session);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace blender::bke::cryptomatte::tests
|
} // namespace blender::bke::cryptomatte::tests
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit c37d8bd28ddddb8f1b0dff5739d75f8004e8034f
|
Subproject commit b66c22e1fb977bf8dd3797ebedc28fbe28f0305e
|
Loading…
Reference in New Issue
Block a user