#include #include #include using namespace XCEngine::Rendering; TEST(ObjectIdEncoding_Test, RegistryMapsRuntimeObjectIdsToStableRenderObjectIds) { RenderObjectIdRegistry& registry = RenderObjectIdRegistry::Get(); registry.Reset(); constexpr uint64_t runtimeObjectId = 0x1ABCDEF0123ull; const RenderObjectId renderObjectId = registry.GetOrAllocateRenderObjectId(runtimeObjectId); ASSERT_TRUE(IsValidRenderObjectId(renderObjectId)); EXPECT_EQ( registry.GetOrAllocateRenderObjectId(runtimeObjectId), renderObjectId); RenderObjectId resolvedRenderObjectId = kInvalidRenderObjectId; EXPECT_TRUE( registry.TryGetRenderObjectId( runtimeObjectId, resolvedRenderObjectId)); EXPECT_EQ(resolvedRenderObjectId, renderObjectId); uint64_t resolvedRuntimeObjectId = 0u; EXPECT_TRUE( registry.TryResolveRuntimeObjectId( renderObjectId, resolvedRuntimeObjectId)); EXPECT_EQ(resolvedRuntimeObjectId, runtimeObjectId); EXPECT_EQ( registry.ResolveRuntimeObjectId(renderObjectId), runtimeObjectId); } TEST(ObjectIdEncoding_Test, RegistryRejectsInvalidRuntimeAndRenderObjectIds) { RenderObjectIdRegistry& registry = RenderObjectIdRegistry::Get(); registry.Reset(); EXPECT_EQ( registry.GetOrAllocateRenderObjectId(0u), kInvalidRenderObjectId); RenderObjectId renderObjectId = 123u; EXPECT_FALSE( registry.TryGetRenderObjectId( 0u, renderObjectId)); EXPECT_EQ(renderObjectId, kInvalidRenderObjectId); uint64_t runtimeObjectId = 99u; EXPECT_FALSE( registry.TryResolveRuntimeObjectId( kInvalidRenderObjectId, runtimeObjectId)); EXPECT_EQ(runtimeObjectId, 0u); EXPECT_EQ( registry.ResolveRuntimeObjectId(kInvalidRenderObjectId), 0u); } TEST(ObjectIdEncoding_Test, DecodesColorBackToRenderObjectId) { constexpr uint8_t r = 0x12u; constexpr uint8_t g = 0x34u; constexpr uint8_t b = 0x56u; constexpr uint8_t a = 0x78u; EXPECT_EQ(DecodeEncodedObjectIdFromColor(r, g, b, a), 0x78563412u); EXPECT_EQ(DecodeRenderObjectIdFromColor(r, g, b, a), 0x78563412u); } TEST(ObjectIdEncoding_Test, EncodesColorChannelsFromRenderObjectId) { const auto encodedColor = EncodeRenderObjectIdToColor(0x78563412u); constexpr float kInv255 = 1.0f / 255.0f; EXPECT_FLOAT_EQ(encodedColor.x, 0x12u * kInv255); EXPECT_FLOAT_EQ(encodedColor.y, 0x34u * kInv255); EXPECT_FLOAT_EQ(encodedColor.z, 0x56u * kInv255); EXPECT_FLOAT_EQ(encodedColor.w, 0x78u * kInv255); }