test: close render object id coverage gaps
This commit is contained in:
@@ -46,9 +46,9 @@ Shader "Builtin Object Id Outline"
|
||||
|
||||
bool IsSelectedObject(float4 objectIdColor)
|
||||
{
|
||||
// Object-id surfaces encode the low 32 bits across RGBA, so low-valued
|
||||
// runtime ids legitimately have zero alpha. Only the all-zero clear
|
||||
// color should be treated as "no object".
|
||||
// Object-id surfaces encode the formal 32-bit render object id across
|
||||
// RGBA. Low-valued ids legitimately have zero alpha, so only the
|
||||
// all-zero clear color should be treated as "no object".
|
||||
if (all(abs(objectIdColor) <= float4(
|
||||
0.0025,
|
||||
0.0025,
|
||||
|
||||
@@ -29,6 +29,7 @@ using XCEngine::Rendering::BuildRenderCameraData;
|
||||
using XCEngine::Rendering::CompareVisibleRenderItemsStable;
|
||||
using XCEngine::Rendering::CollectRenderItemsForEntityIds;
|
||||
using XCEngine::Rendering::ConvertRenderObjectIdToRuntimeObjectId;
|
||||
using XCEngine::Rendering::IsValidRenderObjectId;
|
||||
using XCEngine::Rendering::VisibleRenderItem;
|
||||
using XCEngine::Rendering::kInvalidRenderObjectId;
|
||||
using XCEngine::Resources::Mesh;
|
||||
@@ -200,9 +201,10 @@ TEST_F(RenderSceneUtilityTest, CollectRenderItemsForEntityIdsFiltersInvalidTarge
|
||||
ASSERT_EQ(renderables.size(), 1u);
|
||||
EXPECT_EQ(renderables[0].gameObject, validObject);
|
||||
EXPECT_EQ(renderables[0].meshRenderer, validObject->GetComponent<MeshRendererComponent>());
|
||||
EXPECT_TRUE(renderables[0].hasSection);
|
||||
EXPECT_TRUE(IsValidRenderObjectId(renderables[0].renderObjectId));
|
||||
EXPECT_NE(renderables[0].renderObjectId, kInvalidRenderObjectId);
|
||||
EXPECT_EQ(ConvertRenderObjectIdToRuntimeObjectId(renderables[0].renderObjectId), validObject->GetID());
|
||||
EXPECT_TRUE(renderables[0].hasSection);
|
||||
}
|
||||
|
||||
TEST_F(RenderSceneUtilityTest, CollectRenderItemsForEntityIdsExpandsMeshSections) {
|
||||
@@ -221,6 +223,8 @@ TEST_F(RenderSceneUtilityTest, CollectRenderItemsForEntityIdsExpandsMeshSections
|
||||
|
||||
ASSERT_EQ(renderables.size(), 2u);
|
||||
EXPECT_EQ(renderables[0].gameObject, object);
|
||||
EXPECT_TRUE(IsValidRenderObjectId(renderables[0].renderObjectId));
|
||||
EXPECT_EQ(renderables[0].renderObjectId, renderables[1].renderObjectId);
|
||||
EXPECT_EQ(renderables[0].sectionIndex, 0u);
|
||||
EXPECT_EQ(renderables[0].materialIndex, 0u);
|
||||
EXPECT_EQ(renderables[1].sectionIndex, 1u);
|
||||
|
||||
@@ -17,6 +17,7 @@ using XCEngine::Editor::ViewportObjectIdReadbackRequest;
|
||||
using XCEngine::RHI::RHICommandQueue;
|
||||
using XCEngine::RHI::RHITexture;
|
||||
using XCEngine::RHI::ResourceStates;
|
||||
using XCEngine::Rendering::kInvalidRenderObjectId;
|
||||
using XCEngine::UI::UIPoint;
|
||||
using XCEngine::UI::UISize;
|
||||
|
||||
@@ -85,6 +86,16 @@ TEST(ViewportObjectIdPickerTest, BuildReadbackRequestMapsViewportCoordinatesToTe
|
||||
TEST(ViewportObjectIdPickerTest, TryPickViewportObjectIdEntityDecodesReadbackColor) {
|
||||
const ViewportObjectIdPickContext context = CreateValidContext();
|
||||
|
||||
const ViewportObjectIdPickResult result = PickViewportObjectIdEntity(
|
||||
context,
|
||||
[](const ViewportObjectIdReadbackRequest&, std::array<uint8_t, 4>& outRgba) {
|
||||
outRgba = { 0x78, 0x56, 0x34, 0x12 };
|
||||
return true;
|
||||
});
|
||||
EXPECT_EQ(result.renderObjectId, 0x12345678u);
|
||||
EXPECT_EQ(result.entityId, 0x12345678ull);
|
||||
EXPECT_TRUE(result.HasResolvedSample());
|
||||
|
||||
uint64_t entityId = 0;
|
||||
ViewportObjectIdReadbackRequest capturedRequest = {};
|
||||
const bool picked = TryPickViewportObjectIdEntity(
|
||||
@@ -113,6 +124,7 @@ TEST(ViewportObjectIdPickerTest, PickViewportObjectIdEntityReturnsSuccessForZero
|
||||
});
|
||||
|
||||
EXPECT_EQ(result.status, ViewportObjectIdPickStatus::Success);
|
||||
EXPECT_EQ(result.renderObjectId, kInvalidRenderObjectId);
|
||||
EXPECT_EQ(result.entityId, 0u);
|
||||
EXPECT_TRUE(result.HasResolvedSample());
|
||||
}
|
||||
@@ -128,6 +140,7 @@ TEST(ViewportObjectIdPickerTest, PickViewportObjectIdEntityReturnsUnavailableWhe
|
||||
});
|
||||
|
||||
EXPECT_EQ(result.status, ViewportObjectIdPickStatus::Unavailable);
|
||||
EXPECT_EQ(result.renderObjectId, kInvalidRenderObjectId);
|
||||
EXPECT_EQ(result.entityId, 0u);
|
||||
EXPECT_FALSE(result.HasResolvedSample());
|
||||
}
|
||||
@@ -157,6 +170,7 @@ TEST(ViewportObjectIdPickerTest, PickViewportObjectIdEntityReportsReadbackFailur
|
||||
});
|
||||
|
||||
EXPECT_EQ(result.status, ViewportObjectIdPickStatus::ReadbackFailed);
|
||||
EXPECT_EQ(result.renderObjectId, kInvalidRenderObjectId);
|
||||
EXPECT_EQ(result.entityId, 0u);
|
||||
EXPECT_FALSE(result.HasResolvedSample());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user