@@ -1247,6 +1247,7 @@ TEST(RadientGLTFConverterTest, ExtractSceneGraphCopiesScenesNodesMeshesAndTransf
12471247 Model.Nodes [1 ].Name = " ChildA" ;
12481248 Model.Nodes [1 ].Parent = &Model.Nodes [0 ];
12491249 Model.Nodes [1 ].Translation = {4 .f , 5 .f , 6 .f };
1250+ Model.Nodes [1 ].Visible = false ;
12501251
12511252 Model.Nodes [2 ].Name = " ChildB" ;
12521253 Model.Nodes [2 ].Parent = &Model.Nodes [0 ];
@@ -1273,6 +1274,7 @@ TEST(RadientGLTFConverterTest, ExtractSceneGraphCopiesScenesNodesMeshesAndTransf
12731274
12741275 ASSERT_EQ (Scene.Nodes .size (), 3u );
12751276 EXPECT_EQ (Scene.Nodes [0 ].Name , " Root" );
1277+ EXPECT_EQ (Scene.Nodes [0 ].Visible , True);
12761278 EXPECT_EQ (Scene.Nodes [0 ].pMesh , pMesh);
12771279 ASSERT_EQ (Scene.Nodes [0 ].Children .size (), 2u );
12781280 EXPECT_EQ (Scene.Nodes [0 ].Children [0 ], 1u );
@@ -1283,14 +1285,74 @@ TEST(RadientGLTFConverterTest, ExtractSceneGraphCopiesScenesNodesMeshesAndTransf
12831285 ExpectFloat3Near (Scene.Nodes [0 ].Transform .Scale , {2 .f , 3 .f , 4 .f });
12841286
12851287 EXPECT_EQ (Scene.Nodes [1 ].Name , " ChildA" );
1288+ EXPECT_EQ (Scene.Nodes [1 ].Visible , False);
12861289 EXPECT_EQ (Scene.Nodes [1 ].pMesh , nullptr );
12871290 EXPECT_TRUE (Scene.Nodes [1 ].Children .empty ());
12881291 ExpectFloat3Near (Scene.Nodes [1 ].Transform .Position , {4 .f , 5 .f , 6 .f });
12891292
12901293 EXPECT_EQ (Scene.Nodes [2 ].Name , " ChildB" );
1294+ EXPECT_EQ (Scene.Nodes [2 ].Visible , True);
12911295 ExpectFloat3Near (Scene.Nodes [2 ].Transform .Scale , {0 .5f , 0 .25f , 0 .125f });
12921296}
12931297
1298+ TEST (RadientGLTFConverterTest, InstantiateSceneGraphPreservesNodeVisibility)
1299+ {
1300+ RadientImport::ImportedDocument ImportedScene;
1301+ ImportedScene.Nodes .resize (3 );
1302+ ImportedScene.Nodes [0 ].Name = " Hidden parent" ;
1303+ ImportedScene.Nodes [0 ].Visible = False;
1304+ ImportedScene.Nodes [0 ].Children = {1 };
1305+ ImportedScene.Nodes [1 ].Name = " Visible child" ;
1306+ ImportedScene.Nodes [2 ].Name = " Visible root" ;
1307+ ImportedScene.Scenes .emplace_back ().RootNodes = {0 , 2 };
1308+
1309+ RefCntAutoPtr<IRadientEngine> pEngine;
1310+ ASSERT_EQ (CreateRadientEngine ({}, pEngine.GetAddressOfEmpty ()), RADIENT_STATUS_OK );
1311+
1312+ RefCntAutoPtr<IRadientScene> pScene;
1313+ ASSERT_EQ (pEngine->CreateScene ({}, pScene.GetAddressOfEmpty ()), RADIENT_STATUS_OK );
1314+
1315+ RefCntAutoPtr<IRadientSceneWriter> pWriter;
1316+ ASSERT_EQ (pEngine->CreateSceneWriter (pScene, pWriter.GetAddressOfEmpty ()), RADIENT_STATUS_OK );
1317+
1318+ RadientEntityID RootEntity = InvalidRadientEntityID;
1319+ ASSERT_EQ (pWriter->CreateEntity ({}, RootEntity), RADIENT_STATUS_OK );
1320+ ASSERT_EQ (RadientGLTFConverter::InstantiateSceneGraph (ImportedScene, 0 , *pWriter, RootEntity),
1321+ RADIENT_STATUS_OK );
1322+ ASSERT_EQ (pWriter->CommitChanges (), RADIENT_STATUS_OK );
1323+
1324+ std::array<RadientEntityID, 2 > RootChildren{};
1325+ Uint32 ChildrenRetrieved = 0 ;
1326+ ASSERT_EQ (pScene->GetChildren (RootEntity, 0 , static_cast <Uint32>(RootChildren.size ()),
1327+ RootChildren.data (), ChildrenRetrieved),
1328+ RADIENT_STATUS_OK );
1329+ ASSERT_EQ (ChildrenRetrieved, RootChildren.size ());
1330+
1331+ const RadientEntityID HiddenParent = RootChildren[0 ];
1332+ const RadientEntityID VisibleRoot = RootChildren[1 ];
1333+
1334+ RadientEntityID VisibleChild = InvalidRadientEntityID;
1335+ ASSERT_EQ (pScene->GetChildren (HiddenParent, 0 , 1 , &VisibleChild, ChildrenRetrieved),
1336+ RADIENT_STATUS_OK );
1337+ ASSERT_EQ (ChildrenRetrieved, 1u );
1338+
1339+ Bool Visible = True;
1340+ ASSERT_EQ (pScene->GetEntityOwnVisibility (HiddenParent, Visible), RADIENT_STATUS_OK );
1341+ EXPECT_EQ (Visible, False);
1342+ ASSERT_EQ (pScene->GetEntityEffectiveVisibility (HiddenParent, Visible), RADIENT_STATUS_OK );
1343+ EXPECT_EQ (Visible, False);
1344+
1345+ ASSERT_EQ (pScene->GetEntityOwnVisibility (VisibleChild, Visible), RADIENT_STATUS_OK );
1346+ EXPECT_EQ (Visible, True);
1347+ ASSERT_EQ (pScene->GetEntityEffectiveVisibility (VisibleChild, Visible), RADIENT_STATUS_OK );
1348+ EXPECT_EQ (Visible, False);
1349+
1350+ ASSERT_EQ (pScene->GetEntityOwnVisibility (VisibleRoot, Visible), RADIENT_STATUS_OK );
1351+ EXPECT_EQ (Visible, True);
1352+ ASSERT_EQ (pScene->GetEntityEffectiveVisibility (VisibleRoot, Visible), RADIENT_STATUS_OK );
1353+ EXPECT_EQ (Visible, True);
1354+ }
1355+
12941356TEST (RadientGLTFConverterTest, ExtractSceneGraphConvertsCameras)
12951357{
12961358 GLTF ::Model Model;
0 commit comments