11import * as THREE from 'three' ;
22import { TileGeometry } from 'Core/TileGeometry' ;
3- import Cache from 'Core/Scheduler/Cache ' ;
3+ import { LRUCache } from 'lru-cache ' ;
44import { computeBuffers } from 'Core/Prefab/computeBufferTileGeometry' ;
55import OBB from 'Renderer/OBB' ;
66import type Extent from 'Core/Geographic/Extent' ;
@@ -10,7 +10,7 @@ const cacheBuffer = new Map<string, {
1010 index : THREE . BufferAttribute ,
1111 uv : THREE . BufferAttribute ,
1212} > ( ) ;
13- const cacheTile = new Cache ( ) ;
13+ const cacheTile = new LRUCache < string , Promise < TileGeometry > > ( { max : 500 } ) ;
1414
1515export type GpuBufferAttributes = {
1616 index : THREE . BufferAttribute | null ;
@@ -84,13 +84,14 @@ export function newTileGeometry(
8484 const bufferKey =
8585 `${ builder . crs } _${ params . disableSkirt ? 0 : 1 } _${ params . segments } ` ;
8686
87- let promiseGeometry = cacheTile . get ( south , params . level , bufferKey ) ;
87+ const key = `s${ south } l${ params . level } bK${ bufferKey } ` ;
88+ let promiseGeometry = cacheTile . get ( key ) ;
8889
8990 // build geometry if doesn't exist
9091 if ( ! promiseGeometry ) {
9192 let resolve ;
9293 promiseGeometry = new Promise ( ( r ) => { resolve = r ; } ) ;
93- cacheTile . set ( promiseGeometry , south , params . level , bufferKey ) ;
94+ cacheTile . set ( key , promiseGeometry ) ;
9495
9596 params . extent = shareableExtent ;
9697 params . center = builder . center ( params . extent ) . clone ( ) ;
@@ -145,7 +146,7 @@ export function newTileGeometry(
145146 const geometry = new TileGeometry ( builder , params , gpuBuffers ) ;
146147 geometry . OBB =
147148 new OBB ( geometry . boundingBox ! . min , geometry . boundingBox ! . max ) ;
148- geometry . initRefCount ( cacheTile , [ south , params . level , bufferKey ] ) ;
149+ geometry . initRefCount ( cacheTile , key ) ;
149150 resolve ! ( geometry ) ;
150151
151152 return Promise . resolve ( { geometry, quaternion, position } ) ;
0 commit comments