Skip to content

Commit 6febd2b

Browse files
committed
Removes rectangle check from quadtree tile for performance
1 parent 7de48c2 commit 6febd2b

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

packages/engine/Source/Scene/QuadtreePrimitive.js

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,6 @@ function selectTilesForRendering(primitive, frameState) {
510510
tilesToRender.length = 0;
511511

512512
// We can't render anything before the level zero tiles exist.
513-
let i;
514513
const tileProvider = primitive._tileProvider;
515514
if (!defined(primitive._levelZeroTiles)) {
516515
const tilingScheme = tileProvider.tilingScheme;
@@ -521,7 +520,7 @@ function selectTilesForRendering(primitive, frameState) {
521520
const numberOfRootTiles = primitive._levelZeroTiles.length;
522521
if (rootTraversalDetails.length < numberOfRootTiles) {
523522
rootTraversalDetails = new Array(numberOfRootTiles);
524-
for (i = 0; i < numberOfRootTiles; ++i) {
523+
for (let i = 0; i < numberOfRootTiles; ++i) {
525524
if (rootTraversalDetails[i] === undefined) {
526525
rootTraversalDetails[i] = new TraversalDetails();
527526
}
@@ -534,7 +533,6 @@ function selectTilesForRendering(primitive, frameState) {
534533

535534
primitive._occluders.ellipsoid.cameraPosition = frameState.camera.positionWC;
536535

537-
let tile;
538536
const levelZeroTiles = primitive._levelZeroTiles;
539537
const occluders =
540538
levelZeroTiles.length > 1 ? primitive._occluders : undefined;
@@ -548,18 +546,27 @@ function selectTilesForRendering(primitive, frameState) {
548546
const customDataAdded = primitive._addHeightCallbacks;
549547
const customDataRemoved = primitive._removeHeightCallbacks;
550548

551-
let len;
552-
if (customDataAdded.length > 0 || customDataRemoved.length > 0) {
553-
for (i = 0, len = levelZeroTiles.length; i < len; ++i) {
554-
tile = levelZeroTiles[i];
555-
tile._addedCustomData = customDataAdded;
556-
tile._removedCustomData = customDataRemoved;
557-
tile._updateCustomData();
549+
customDataAdded.forEach((data) => {
550+
const tile = levelZeroTiles.find((tile) =>
551+
Rectangle.contains(tile.rectangle, data.positionCartographic),
552+
);
553+
if (tile) {
554+
tile._addedCustomData.push(data);
558555
}
556+
});
559557

560-
customDataAdded.length = 0;
561-
customDataRemoved.length = 0;
562-
}
558+
customDataRemoved.forEach((data) => {
559+
const tile = levelZeroTiles.find((tile) =>
560+
Rectangle.contains(tile.rectangle, data.positionCartographic),
561+
);
562+
if (tile) {
563+
tile._removedCustomData.push(data);
564+
}
565+
});
566+
567+
levelZeroTiles.forEach((tile) => tile._updateCustomData());
568+
customDataAdded.length = 0;
569+
customDataRemoved.length = 0;
563570

564571
const camera = frameState.camera;
565572

@@ -575,8 +582,8 @@ function selectTilesForRendering(primitive, frameState) {
575582
);
576583

577584
// Traverse in depth-first, near-to-far order.
578-
for (i = 0, len = levelZeroTiles.length; i < len; ++i) {
579-
tile = levelZeroTiles[i];
585+
for (let i = 0; i < levelZeroTiles.length; ++i) {
586+
const tile = levelZeroTiles[i];
580587
primitive._tileReplacementQueue.markTileRendered(tile);
581588
if (!tile.renderable) {
582589
queueTileLoad(primitive, primitive._tileLoadQueueHigh, tile, frameState);

packages/engine/Source/Scene/QuadtreeTile.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,10 +323,6 @@ QuadtreeTile.prototype._updateCustomData = function () {
323323
const customData = this.customData;
324324
for (let i = 0; i < added.length; ++i) {
325325
const data = added[i];
326-
if (!Rectangle.contains(this._rectangle, data.positionCartographic)) {
327-
continue;
328-
}
329-
330326
customData.add(data);
331327

332328
const child = childTileAtPosition(this, data.positionCartographic);

0 commit comments

Comments
 (0)