Skip to content

Commit 65be492

Browse files
authored
Merge pull request #1336 from WorldscapeAI/fix-updateViewGroupOffline
Fix updateViewGroupOffline() so that it doesn't hang
2 parents a543282 + e227a5f commit 65be492

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

Cesium3DTilesSelection/src/Tileset.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,16 +333,19 @@ const ViewUpdateResult& Tileset::updateViewGroupOffline(
333333

334334
// TODO: fix the fading for offline case
335335
// (https://github.com/CesiumGS/cesium-native/issues/549)
336+
this->_asyncSystem.dispatchMainThreadTasks();
336337
this->updateViewGroup(viewGroup, frustums, 0.0f);
337338
while (viewGroup.getPreviousLoadProgressPercentage() < 100.0f) {
338339
this->_externals.pAssetAccessor->tick();
340+
this->_asyncSystem.dispatchMainThreadTasks();
339341
this->loadTiles();
340342

341343
// If there are no frustums, we'll never make any progress. So break here to
342344
// avoid getting stuck in an endless loop.
343345
if (frustums.empty())
344346
break;
345347

348+
this->_asyncSystem.dispatchMainThreadTasks();
346349
this->updateViewGroup(viewGroup, frustums, 0.0f);
347350
}
348351

@@ -371,9 +374,12 @@ const ViewUpdateResult& Tileset::updateViewGroupOffline(
371374
}
372375

373376
const ViewUpdateResult&
377+
374378
Tileset::updateView(const std::vector<ViewState>& frustums, float deltaTime) {
379+
this->_asyncSystem.dispatchMainThreadTasks();
375380
const ViewUpdateResult& result =
376381
this->updateViewGroup(this->_defaultViewGroup, frustums, deltaTime);
382+
this->_asyncSystem.dispatchMainThreadTasks();
377383
this->loadTiles();
378384
return result;
379385
}

Cesium3DTilesSelection/test/TestTilesetSelectionAlgorithm.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,13 @@ TEST_CASE("Test replace refinement for render") {
567567
}
568568
}
569569

570+
SUBCASE(
571+
"updateViewGroupOffline does its own dispatching of main thread tasks "
572+
" so it doesn't get stuck") {
573+
ViewState viewState = zoomToTileset(tileset);
574+
tileset.updateViewGroupOffline(tileset.getDefaultViewGroup(), {viewState});
575+
}
576+
570577
SUBCASE(
571578
"updateViewGroupOffline does not get stuck in an endless loop when no "
572579
"frustums are given") {

0 commit comments

Comments
 (0)