3 #include "testing/testing.h"
15 TEST(cryptomatte, meta_data_key)
17 ASSERT_EQ(
"cryptomatte/c7dbf5e/key",
19 ASSERT_EQ(
"cryptomatte/b990b65/𝓴𝓮𝔂",
23 TEST(cryptomatte, extract_layer_name)
25 ASSERT_EQ(
"ViewLayer.CryptoMaterial",
28 ASSERT_EQ(
"NoTrailingSampleNumber",
41 ASSERT_EQ(
"{\"Object\":\"0000007b\"}", layer.
manifest());
43 layer.
add_hash(
"Object2", 123245678);
44 ASSERT_EQ(
"{\"Object\":\"0000007b\",\"Object2\":\"0758946e\"}", layer.
manifest());
47 TEST(cryptomatte, layer_quoted)
51 ASSERT_EQ(
"{\"\\\"Object\\\"\":\"0000007b\"}", layer.
manifest());
60 TEST(cryptomatte, layer_from_manifest)
65 R"({"Object":"12345678","Object2":"87654321"})");
67 R"( { "Object" : "12345678" , "Object2" : "87654321" } )");
70 R"({"Object\"01\"":"12345678","Object":"12345678","Object2":"87654321"})",
71 R"({"Object\"01\"":"12345678","Object":"12345678", "Object2":"87654321"})");
74 TEST(cryptomatte, extract_layer_hash_from_metadata_key)
78 "cryptomatte/eb4c67b/conversion"));
81 "cryptomatte/qwerty/name"));
101 if (prop_name ==
"cryptomatte/87f095e/name") {
102 EXPECT_STREQ(
"viewlayername.layer1", propvalue);
104 else if (prop_name ==
"cryptomatte/87f095e/hash") {
105 EXPECT_STREQ(
"MurmurHash3_32", propvalue);
107 else if (prop_name ==
"cryptomatte/87f095e/conversion") {
108 EXPECT_STREQ(
"uint32_to_float32", propvalue);
110 else if (prop_name ==
"cryptomatte/87f095e/manifest") {
111 EXPECT_STREQ(R
"({"Object":"12345678"})", propvalue);
114 else if (prop_name ==
"cryptomatte/c42daa7/name") {
115 EXPECT_STREQ(
"viewlayername.layer2", propvalue);
117 else if (prop_name ==
"cryptomatte/c42daa7/hash") {
118 EXPECT_STREQ(
"MurmurHash3_32", propvalue);
120 else if (prop_name ==
"cryptomatte/c42daa7/conversion") {
121 EXPECT_STREQ(
"uint32_to_float32", propvalue);
123 else if (prop_name ==
"cryptomatte/c42daa7/manifest") {
124 EXPECT_STREQ(R
"({"Object2":"87654321"})", propvalue);
128 EXPECT_EQ(
"Unhandled", std::string(propname) +
": " + propvalue);
132 TEST(cryptomatte, session_from_stamp_data)
139 render_result,
"cryptomatte/qwerty/manifest", R
"({"Object":"12345678"})");
142 render_result,
"cryptomatte/uiop/manifest", R
"({"Object2":"87654321"})");
144 EXPECT_NE(session.get(), nullptr);
164 TEST(cryptomatte, parsing_malformed_manifests)
168 R
"({"/obj/instance1:instances:0":"0d54c6cc","/obj/instance1:instances:1":"293d9340","/obj/instance1:instances:110":"ccb9e1f2","/obj/instance1:instances:111":"f8dd3a48","/obj/instance1:instances:112":"a99e07a8","/obj/instance1:instances:113":"e75599a4","/obj/instance1:instances:114":"794200f3","/obj/instance1:instances:115":"2a3a1728","/obj/instance1:instances:116":"478544a1","/obj/instance1:instances:117":"b2bd969a","/obj/instance1:instances:10":"3a0c8681","/obj/instance1:instances:11":"01e5970d","/obj/box:polygons:1":"9d416418","/obj/instance1:instances:100":"2dcd2966","/obj/instance1:instances:101":"9331cd82","/obj/instance1:instances:102":"df50fccb","/obj/instance1:instances:103":"97f8590d","/obj/instance1:instances:104":"bbcd220d","/obj/instance1:instances:105":"4ae06139","/obj/instance1:instances:106":"8873d5ea","/obj/instance1:instances:107":"39d8af8d","/obj/instance1:instances:108":"bb11bd4e","/obj/instance1:instances:109":"a32bba35"})",
169 R"({"\/obj\/box:polygons:1":"9d416418","\/obj\/instance1:instances:0":"0d54c6cc","\/obj\/instance1:instances:1":"293d9340","\/obj\/instance1:instances:10":"3a0c8681","\/obj\/instance1:instances:100":"2dcd2966","\/obj\/instance1:instances:101":"9331cd82","\/obj\/instance1:instances:102":"df50fccb","\/obj\/instance1:instances:103":"97f8590d","\/obj\/instance1:instances:104":"bbcd220d","\/obj\/instance1:instances:105":"4ae06139","\/obj\/instance1:instances:106":"8873d5ea","\/obj\/instance1:instances:107":"39d8af8d","\/obj\/instance1:instances:108":"bb11bd4e","\/obj\/instance1:instances:109":"a32bba35","\/obj\/instance1:instances:11":"01e5970d","\/obj\/instance1:instances:110":"ccb9e1f2","\/obj\/instance1:instances:111":"f8dd3a48","\/obj\/instance1:instances:112":"a99e07a8","\/obj\/instance1:instances:113":"e75599a4","\/obj\/instance1:instances:114":"794200f3","\/obj\/instance1:instances:115":"2a3a1728","\/obj\/instance1:instances:116":"478544a1","\/obj\/instance1:instances:117":"b2bd969a","\/obj\/instance1:instance)");
struct CryptomatteSession * BKE_cryptomatte_init_from_render_result(const struct RenderResult *render_result)
void BKE_cryptomatte_store_metadata(const struct CryptomatteSession *session, struct RenderResult *render_result, const ViewLayer *view_layer)
void BKE_render_result_stamp_data(struct RenderResult *rr, const char *key, const char *value)
void BKE_stamp_info_callback(void *data, struct StampData *stamp_data, StampCallback callback, bool noskip)
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
Read Guarded memory(de)allocation.
constexpr bool startswith(StringRef prefix) const
void *(* MEM_callocN)(size_t len, const char *str)
static void test_cryptomatte_manifest(std::string expected, std::string manifest)
static void validate_cryptomatte_session_from_stamp_data(void *UNUSED(data), const char *propname, char *propvalue, int UNUSED(len))
TEST(cryptomatte, meta_data_key)
StringRef BKE_cryptomatte_extract_layer_name(const StringRef render_pass_name)
std::string BKE_cryptomatte_meta_data_key(const StringRef layer_name, const StringRefNull key_name)
std::unique_ptr< CryptomatteSession, CryptomatteSessionDeleter > CryptomatteSessionPtr
void RE_FreeRenderResult(RenderResult *rr)
struct StampData * stamp_data
void add_hash(blender::StringRef name, CryptomatteHash cryptomatte_hash)
static std::unique_ptr< CryptomatteLayer > read_from_manifest(blender::StringRefNull manifest)
std::string manifest() const
static blender::StringRef extract_layer_hash(blender::StringRefNull key)