@@ -90,7 +90,6 @@ function QuadtreePrimitive(options) {
9090 this . _removeHeightCallbacks = [ ] ;
9191
9292 this . _tileToUpdateHeights = [ ] ;
93- this . _lastTileIndex = 0 ;
9493 this . _updateHeightsTimeSlice = 2.0 ;
9594
9695 // If a culled tile contains _cameraPositionCartographic or _cameraReferenceFrameOriginCartographic, it will be marked
@@ -217,10 +216,8 @@ function invalidateAllTiles(primitive) {
217216 for ( let i = 0 ; i < levelZeroTiles . length ; ++ i ) {
218217 const tile = levelZeroTiles [ i ] ;
219218 const customData = tile . customData ;
220- const customDataLength = customData . length ;
221219
222- for ( let j = 0 ; j < customDataLength ; ++ j ) {
223- const data = customData [ j ] ;
220+ for ( const data of customData ) {
224221 data . level = 0 ;
225222 primitive . _addHeightCallbacks . push ( data ) ;
226223 }
@@ -513,7 +510,6 @@ function selectTilesForRendering(primitive, frameState) {
513510 tilesToRender . length = 0 ;
514511
515512 // We can't render anything before the level zero tiles exist.
516- let i ;
517513 const tileProvider = primitive . _tileProvider ;
518514 if ( ! defined ( primitive . _levelZeroTiles ) ) {
519515 const tilingScheme = tileProvider . tilingScheme ;
@@ -524,7 +520,7 @@ function selectTilesForRendering(primitive, frameState) {
524520 const numberOfRootTiles = primitive . _levelZeroTiles . length ;
525521 if ( rootTraversalDetails . length < numberOfRootTiles ) {
526522 rootTraversalDetails = new Array ( numberOfRootTiles ) ;
527- for ( i = 0 ; i < numberOfRootTiles ; ++ i ) {
523+ for ( let i = 0 ; i < numberOfRootTiles ; ++ i ) {
528524 if ( rootTraversalDetails [ i ] === undefined ) {
529525 rootTraversalDetails [ i ] = new TraversalDetails ( ) ;
530526 }
@@ -537,7 +533,6 @@ function selectTilesForRendering(primitive, frameState) {
537533
538534 primitive . _occluders . ellipsoid . cameraPosition = frameState . camera . positionWC ;
539535
540- let tile ;
541536 const levelZeroTiles = primitive . _levelZeroTiles ;
542537 const occluders =
543538 levelZeroTiles . length > 1 ? primitive . _occluders : undefined ;
@@ -550,18 +545,28 @@ function selectTilesForRendering(primitive, frameState) {
550545
551546 const customDataAdded = primitive . _addHeightCallbacks ;
552547 const customDataRemoved = primitive . _removeHeightCallbacks ;
553- const frameNumber = frameState . frameNumber ;
554548
555- let len ;
556- if ( customDataAdded . length > 0 || customDataRemoved . length > 0 ) {
557- for ( i = 0 , len = levelZeroTiles . length ; i < len ; ++ i ) {
558- tile = levelZeroTiles [ i ] ;
559- tile . _updateCustomData ( frameNumber , customDataAdded , customDataRemoved ) ;
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 ) ;
560555 }
556+ } ) ;
561557
562- customDataAdded . length = 0 ;
563- customDataRemoved . length = 0 ;
564- }
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 ;
565570
566571 const camera = frameState . camera ;
567572
@@ -577,8 +582,8 @@ function selectTilesForRendering(primitive, frameState) {
577582 ) ;
578583
579584 // Traverse in depth-first, near-to-far order.
580- for ( i = 0 , len = levelZeroTiles . length ; i < len ; ++ i ) {
581- tile = levelZeroTiles [ i ] ;
585+ for ( let i = 0 ; i < levelZeroTiles . length ; ++ i ) {
586+ const tile = levelZeroTiles [ i ] ;
582587 primitive . _tileReplacementQueue . markTileRendered ( tile ) ;
583588 if ( ! tile . renderable ) {
584589 queueTileLoad ( primitive , primitive . _tileLoadQueueHigh , tile , frameState ) ;
@@ -596,7 +601,7 @@ function selectTilesForRendering(primitive, frameState) {
596601 }
597602 }
598603
599- primitive . _lastSelectionFrameNumber = frameNumber ;
604+ primitive . _lastSelectionFrameNumber = frameState . frameNumber ;
600605}
601606
602607function queueTileLoad ( primitive , queue , tile , frameState ) {
@@ -716,7 +721,7 @@ function visitTile(
716721 ++ debug . tilesVisited ;
717722
718723 primitive . _tileReplacementQueue . markTileRendered ( tile ) ;
719- tile . _updateCustomData ( frameState . frameNumber ) ;
724+ tile . updateCustomData ( ) ;
720725
721726 if ( tile . level > debug . maxDepthVisited ) {
722727 debug . maxDepthVisited = tile . level ;
@@ -1417,15 +1422,18 @@ function updateHeights(primitive, frameState) {
14171422 // Ensure stale position cache is cleared
14181423 tile . clearPositionCache ( ) ;
14191424 tilesToUpdateHeights . shift ( ) ;
1420- primitive . _lastTileIndex = 0 ;
14211425 continue ;
14221426 }
14231427 const customData = tile . customData ;
1424- const customDataLength = customData . length ;
1428+ if ( ! defined ( tile . _customDataIterator ) ) {
1429+ tile . _customDataIterator = customData . values ( ) ;
1430+ }
1431+ const customDataIterator = tile . _customDataIterator ;
14251432
14261433 let timeSliceMax = false ;
1427- for ( i = primitive . _lastTileIndex ; i < customDataLength ; ++ i ) {
1428- const data = customData [ i ] ;
1434+ let nextData ;
1435+ while ( ! ( nextData = customDataIterator . next ( ) ) . done ) {
1436+ const data = nextData . value ;
14291437
14301438 // No need to run this code when the tile is upsampled, because the height will be the same as its parent.
14311439 const terrainData = tile . data . terrainData ;
@@ -1543,10 +1551,10 @@ function updateHeights(primitive, frameState) {
15431551 }
15441552
15451553 if ( timeSliceMax ) {
1546- primitive . _lastTileIndex = i ;
1554+ tile . _customDataIterator = customDataIterator ;
15471555 break ;
15481556 } else {
1549- primitive . _lastTileIndex = 0 ;
1557+ tile . _customDataIterator = undefined ;
15501558 tilesToUpdateHeights . shift ( ) ;
15511559 }
15521560 }
0 commit comments