Skip to content

Commit 25f74c1

Browse files
authored
Merge pull request #1316 from CesiumGS/resolve-invalid-loader
Resolve root tile event when `Tileset` has invalid loader
2 parents 56840e6 + 9296317 commit 25f74c1

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

CHANGES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Change Log
22

3+
### ? - ?
4+
5+
##### Fixes :wrench:
6+
7+
- `Cesium3DTilesetSelection::Tileset::getRootTileAvailableEvent` will now resolve even when a `Tileset` is constructed with invalid source parameters, instead of hanging indefinitely.
8+
39
### v0.58.0 - 2026-03-02
410

511
##### Fixes :wrench:

Cesium3DTilesSelection/src/TilesetContentManager.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,8 @@ TilesetContentManager::createFromUrl(
859859
pManager->_rootTileAvailablePromise.reject(
860860
std::runtime_error("Root tile failed to load."));
861861
});
862+
} else {
863+
pManager->_rootTileAvailablePromise.resolve();
862864
}
863865

864866
return pManager;
@@ -919,6 +921,8 @@ TilesetContentManager::createFromLoaderFactory(
919921
pManager->_rootTileAvailablePromise.reject(
920922
std::runtime_error("Root tile failed to load."));
921923
});
924+
} else {
925+
pManager->_rootTileAvailablePromise.resolve();
922926
}
923927

924928
return pManager;

Cesium3DTilesSelection/test/TestTilesetContentManager.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,48 @@ TEST_CASE("Test tile state machine") {
877877
CHECK(!upsampledTile.isRenderContent());
878878
CHECK(!upsampledTile.getContent().getRenderContent());
879879
}
880+
881+
SUBCASE("Resolves root tile promise for invalid URL") {
882+
// create manager
883+
TilesetOptions options{};
884+
options.contentOptions.generateMissingNormalsSmooth = true;
885+
886+
// Create an invalid Cesium ion loader that will never attempt to make a
887+
// request.
888+
IntrusivePointer<TilesetContentManager> pManager =
889+
TilesetContentManager::createFromUrl(externals, options, std::string());
890+
891+
bool eventResolved = false;
892+
pManager->getRootTileAvailableEvent().thenInMainThread(
893+
[&eventResolved]() { eventResolved = true; });
894+
895+
pManager->waitUntilIdle(5000.0);
896+
CHECK(eventResolved);
897+
CHECK(!pManager->getRootTile());
898+
}
899+
900+
SUBCASE("Resolves root tile promise for invalid loader") {
901+
// create manager
902+
TilesetOptions options{};
903+
options.contentOptions.generateMissingNormalsSmooth = true;
904+
905+
// Create an invalid Cesium ion loader that will never attempt to make a
906+
// request.
907+
IntrusivePointer<TilesetContentManager> pManager =
908+
TilesetContentManager::createFromCesiumIon(
909+
externals,
910+
options,
911+
0,
912+
std::string());
913+
914+
bool eventResolved = false;
915+
pManager->getRootTileAvailableEvent().thenInMainThread(
916+
[&eventResolved]() { eventResolved = true; });
917+
918+
pManager->waitUntilIdle(5000.0);
919+
CHECK(eventResolved);
920+
CHECK(!pManager->getRootTile());
921+
}
880922
}
881923

882924
TEST_CASE("Test the tileset content manager's post processing for gltf") {

0 commit comments

Comments
 (0)