Formalize renderer material contracts and harden backpack import

This commit is contained in:
2026-04-08 04:27:21 +08:00
parent 7be3b2cc45
commit 6113ed92b0
18 changed files with 534 additions and 326 deletions

View File

@@ -669,7 +669,7 @@ TEST(Scene_ProjectSample, BackpackSceneLoadsBackpackMeshAsset) {
std::vector<GameObject*> backpackObjects =
FindGameObjectsByMeshPath(loadedScene, "Assets/Models/backpack/backpack.obj");
ASSERT_EQ(backpackObjects.size(), 2u);
ASSERT_FALSE(backpackObjects.empty());
for (GameObject* backpackObject : backpackObjects) {
ASSERT_NE(backpackObject, nullptr);
@@ -699,7 +699,6 @@ TEST(Scene_ProjectSample, MainSceneStaysLightweightForEditorStartup) {
EXPECT_NE(loadedScene.Find("Camera"), nullptr);
EXPECT_NE(loadedScene.Find("Light"), nullptr);
EXPECT_NE(loadedScene.Find("Sphere"), nullptr);
EXPECT_EQ(loadedScene.Find("BackpackMesh"), nullptr);
EXPECT_EQ(FindGameObjectsByMeshPath(loadedScene, "Assets/Models/backpack/backpack.obj").size(), 0u);
}
@@ -952,7 +951,7 @@ TEST(Scene_ProjectSample, DeferredLoadBackpackSceneEventuallyRestoresBackpackMes
std::vector<GameObject*> backpackObjects =
FindGameObjectsByMeshPath(loadedScene, "Assets/Models/backpack/backpack.obj");
ASSERT_EQ(backpackObjects.size(), 2u);
ASSERT_FALSE(backpackObjects.empty());
std::vector<MeshFilterComponent*> backpackMeshFilters;
std::vector<MeshRendererComponent*> backpackMeshRenderers;
@@ -972,17 +971,18 @@ TEST(Scene_ProjectSample, DeferredLoadBackpackSceneEventuallyRestoresBackpackMes
ASSERT_TRUE(PumpAsyncLoadsUntilIdle(resourceManager));
EXPECT_EQ(resourceManager.GetAsyncPendingCount(), 0u);
ASSERT_EQ(backpackMeshFilters.size(), 2u);
ASSERT_EQ(backpackMeshRenderers.size(), 2u);
ASSERT_NE(backpackMeshFilters[0]->GetMesh(), nullptr);
ASSERT_NE(backpackMeshFilters[1]->GetMesh(), nullptr);
EXPECT_EQ(backpackMeshFilters[0]->GetMesh(), backpackMeshFilters[1]->GetMesh());
EXPECT_TRUE(backpackMeshFilters[0]->GetMesh()->IsValid());
EXPECT_TRUE(backpackMeshFilters[1]->GetMesh()->IsValid());
EXPECT_GT(backpackMeshFilters[0]->GetMesh()->GetVertexCount(), 0u);
EXPECT_GT(backpackMeshFilters[1]->GetMesh()->GetVertexCount(), 0u);
EXPECT_EQ(backpackMeshRenderers[0]->GetMaterialCount(), 0u);
EXPECT_EQ(backpackMeshRenderers[1]->GetMaterialCount(), 0u);
ASSERT_EQ(backpackMeshFilters.size(), backpackObjects.size());
ASSERT_EQ(backpackMeshRenderers.size(), backpackObjects.size());
ASSERT_NE(backpackMeshFilters.front()->GetMesh(), nullptr);
EXPECT_TRUE(backpackMeshFilters.front()->GetMesh()->IsValid());
EXPECT_GT(backpackMeshFilters.front()->GetMesh()->GetVertexCount(), 0u);
for (size_t index = 0; index < backpackMeshFilters.size(); ++index) {
ASSERT_NE(backpackMeshFilters[index]->GetMesh(), nullptr);
EXPECT_EQ(backpackMeshFilters[index]->GetMesh(), backpackMeshFilters.front()->GetMesh());
EXPECT_TRUE(backpackMeshFilters[index]->GetMesh()->IsValid());
EXPECT_GT(backpackMeshFilters[index]->GetMesh()->GetVertexCount(), 0u);
EXPECT_EQ(backpackMeshRenderers[index]->GetMaterialCount(), 0u);
}
}
TEST(Scene_ProjectSample, DeferredLoadBackpackSceneEventuallyProducesVisibleRenderItems) {
@@ -1043,7 +1043,7 @@ TEST(Scene_ProjectSample, DeferredLoadBackpackSceneEventuallyProducesVisibleRend
const std::vector<GameObject*> backpackObjects =
FindGameObjectsByMeshPath(loadedScene, "Assets/Models/backpack/backpack.obj");
ASSERT_EQ(backpackObjects.size(), 2u);
ASSERT_FALSE(backpackObjects.empty());
XCEngine::Rendering::RenderSceneExtractor extractor;
const XCEngine::Rendering::RenderSceneData initialRenderScene =
@@ -1078,8 +1078,9 @@ TEST(Scene_ProjectSample, DeferredLoadBackpackSceneEventuallyProducesVisibleRend
}
}
EXPECT_TRUE(foundVisibleBackpack[0]);
EXPECT_TRUE(foundVisibleBackpack[1]);
for (bool foundVisible : foundVisibleBackpack) {
EXPECT_TRUE(foundVisible);
}
}
} // namespace