diff --git a/Cesium3DTilesSelection/src/Tileset.cpp b/Cesium3DTilesSelection/src/Tileset.cpp index 6ed5878b2a..4afc47a0f4 100644 --- a/Cesium3DTilesSelection/src/Tileset.cpp +++ b/Cesium3DTilesSelection/src/Tileset.cpp @@ -333,9 +333,11 @@ const ViewUpdateResult& Tileset::updateViewGroupOffline( // TODO: fix the fading for offline case // (https://github.com/CesiumGS/cesium-native/issues/549) + this->_asyncSystem.dispatchMainThreadTasks(); this->updateViewGroup(viewGroup, frustums, 0.0f); while (viewGroup.getPreviousLoadProgressPercentage() < 100.0f) { this->_externals.pAssetAccessor->tick(); + this->_asyncSystem.dispatchMainThreadTasks(); this->loadTiles(); // If there are no frustums, we'll never make any progress. So break here to @@ -343,6 +345,7 @@ const ViewUpdateResult& Tileset::updateViewGroupOffline( if (frustums.empty()) break; + this->_asyncSystem.dispatchMainThreadTasks(); this->updateViewGroup(viewGroup, frustums, 0.0f); } @@ -371,9 +374,12 @@ const ViewUpdateResult& Tileset::updateViewGroupOffline( } const ViewUpdateResult& + Tileset::updateView(const std::vector& frustums, float deltaTime) { + this->_asyncSystem.dispatchMainThreadTasks(); const ViewUpdateResult& result = this->updateViewGroup(this->_defaultViewGroup, frustums, deltaTime); + this->_asyncSystem.dispatchMainThreadTasks(); this->loadTiles(); return result; } diff --git a/Cesium3DTilesSelection/test/TestTilesetSelectionAlgorithm.cpp b/Cesium3DTilesSelection/test/TestTilesetSelectionAlgorithm.cpp index fea0f96e7e..aad47ebcc8 100644 --- a/Cesium3DTilesSelection/test/TestTilesetSelectionAlgorithm.cpp +++ b/Cesium3DTilesSelection/test/TestTilesetSelectionAlgorithm.cpp @@ -567,6 +567,13 @@ TEST_CASE("Test replace refinement for render") { } } + SUBCASE( + "updateViewGroupOffline does its own dispatching of main thread tasks " + " so it doesn't get stuck") { + ViewState viewState = zoomToTileset(tileset); + tileset.updateViewGroupOffline(tileset.getDefaultViewGroup(), {viewState}); + } + SUBCASE( "updateViewGroupOffline does not get stuck in an endless loop when no " "frustums are given") {