Skip to content

Commit b35ac36

Browse files
committedMay 8, 2023
Make sure availability tiles are loaded before deciding there is no terrain at that x, y, level
1 parent a1b0da4 commit b35ac36

File tree

2 files changed

+44
-16
lines changed

2 files changed

+44
-16
lines changed
 

‎packages/engine/Source/Core/CesiumTerrainProvider.js

+28
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,34 @@ CesiumTerrainProvider.prototype.requestTileGeometry = function (
915915
layerToUse = layer;
916916
break;
917917
}
918+
919+
if (!defined(layer.availabilityLevels)) {
920+
// This layer doesn't use cutout terrain, so we don't need to do the following check
921+
continue;
922+
}
923+
924+
const tile = getAvailabilityTile(layer, x, y, level);
925+
if (
926+
!defined(tile) ||
927+
!layer.availability.isTileAvailable(tile.level, tile.x, tile.y) ||
928+
layer.availabilityTilesLoaded.isTileAvailable(
929+
tile.level,
930+
tile.x,
931+
tile.y
932+
)
933+
) {
934+
continue;
935+
}
936+
937+
// There are some cases where availability tiles are not completely loaded at this point. Request them now.
938+
return requestTileGeometry(
939+
this,
940+
tile.x,
941+
tile.y,
942+
tile.level,
943+
layer,
944+
request
945+
);
918946
}
919947
}
920948

‎packages/engine/Source/Core/TileAvailability.js

+16-16
Original file line numberDiff line numberDiff line change
@@ -396,10 +396,10 @@ function findMaxLevelFromNode(stopNode, node, position) {
396396
// Find the deepest quadtree node containing this point.
397397
let found = false;
398398
while (!found) {
399-
const nw = node._nw && rectangleContainsPosition(node._nw.extent, position);
400-
const ne = node._ne && rectangleContainsPosition(node._ne.extent, position);
401-
const sw = node._sw && rectangleContainsPosition(node._sw.extent, position);
402-
const se = node._se && rectangleContainsPosition(node._se.extent, position);
399+
const nw = node.nw && rectangleContainsPosition(node.nw.extent, position);
400+
const ne = node.ne && rectangleContainsPosition(node.ne.extent, position);
401+
const sw = node.sw && rectangleContainsPosition(node.sw.extent, position);
402+
const se = node.se && rectangleContainsPosition(node.se.extent, position);
403403

404404
// The common scenario is that the point is in only one quadrant and we can simply
405405
// iterate down the tree. But if the point is on a boundary between tiles, it is
@@ -408,36 +408,36 @@ function findMaxLevelFromNode(stopNode, node, position) {
408408
if (nw) {
409409
maxLevel = Math.max(
410410
maxLevel,
411-
findMaxLevelFromNode(node, node._nw, position)
411+
findMaxLevelFromNode(node, node.nw, position)
412412
);
413413
}
414414
if (ne) {
415415
maxLevel = Math.max(
416416
maxLevel,
417-
findMaxLevelFromNode(node, node._ne, position)
417+
findMaxLevelFromNode(node, node.ne, position)
418418
);
419419
}
420420
if (sw) {
421421
maxLevel = Math.max(
422422
maxLevel,
423-
findMaxLevelFromNode(node, node._sw, position)
423+
findMaxLevelFromNode(node, node.sw, position)
424424
);
425425
}
426426
if (se) {
427427
maxLevel = Math.max(
428428
maxLevel,
429-
findMaxLevelFromNode(node, node._se, position)
429+
findMaxLevelFromNode(node, node.se, position)
430430
);
431431
}
432432
break;
433433
} else if (nw) {
434-
node = node._nw;
434+
node = node.nw;
435435
} else if (ne) {
436-
node = node._ne;
436+
node = node.ne;
437437
} else if (sw) {
438-
node = node._sw;
438+
node = node.sw;
439439
} else if (se) {
440-
node = node._se;
440+
node = node.se;
441441
} else {
442442
found = true;
443443
}
@@ -501,10 +501,10 @@ function updateCoverageWithNode(
501501
}
502502

503503
// Update with child nodes.
504-
updateCoverageWithNode(remainingToCoverByLevel, node._nw, rectanglesToCover);
505-
updateCoverageWithNode(remainingToCoverByLevel, node._ne, rectanglesToCover);
506-
updateCoverageWithNode(remainingToCoverByLevel, node._sw, rectanglesToCover);
507-
updateCoverageWithNode(remainingToCoverByLevel, node._se, rectanglesToCover);
504+
updateCoverageWithNode(remainingToCoverByLevel, node.nw, rectanglesToCover);
505+
updateCoverageWithNode(remainingToCoverByLevel, node.ne, rectanglesToCover);
506+
updateCoverageWithNode(remainingToCoverByLevel, node.sw, rectanglesToCover);
507+
updateCoverageWithNode(remainingToCoverByLevel, node.se, rectanglesToCover);
508508
}
509509

510510
function subtractRectangle(rectangleList, rectangleToSubtract) {

0 commit comments

Comments
 (0)
Please sign in to comment.