@loaders.gl/tiles 3.2.12 → 3.3.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/dist.min.js +951 -1387
  2. package/dist/es5/bundle.js +0 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/constants.js +2 -1
  5. package/dist/es5/constants.js.map +1 -1
  6. package/dist/es5/index.js +26 -36
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/tileset/helpers/3d-tiles-options.js +0 -1
  9. package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -1
  10. package/dist/es5/tileset/helpers/bounding-volume.js +7 -26
  11. package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -1
  12. package/dist/es5/tileset/helpers/frame-state.js +22 -42
  13. package/dist/es5/tileset/helpers/frame-state.js.map +1 -1
  14. package/dist/es5/tileset/helpers/i3s-lod.js +0 -13
  15. package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -1
  16. package/dist/es5/tileset/helpers/tiles-3d-lod.js +7 -16
  17. package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -1
  18. package/dist/es5/tileset/helpers/transform-utils.js +2 -11
  19. package/dist/es5/tileset/helpers/transform-utils.js.map +1 -1
  20. package/dist/es5/tileset/helpers/zoom.js +6 -16
  21. package/dist/es5/tileset/helpers/zoom.js.map +1 -1
  22. package/dist/es5/tileset/tile-3d.js +119 -96
  23. package/dist/es5/tileset/tile-3d.js.map +1 -1
  24. package/dist/es5/tileset/tileset-3d.js +119 -185
  25. package/dist/es5/tileset/tileset-3d.js.map +1 -1
  26. package/dist/es5/tileset/tileset-cache.js +1 -14
  27. package/dist/es5/tileset/tileset-cache.js.map +1 -1
  28. package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js +8 -13
  29. package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -1
  30. package/dist/es5/tileset/traversers/i3s-tile-manager.js +20 -24
  31. package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
  32. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +8 -50
  33. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
  34. package/dist/es5/tileset/traversers/tileset-3d-traverser.js +0 -22
  35. package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -1
  36. package/dist/es5/tileset/traversers/tileset-traverser.js +53 -76
  37. package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -1
  38. package/dist/es5/types.js.map +1 -1
  39. package/dist/es5/utils/doubly-linked-list-node.js +3 -7
  40. package/dist/es5/utils/doubly-linked-list-node.js.map +1 -1
  41. package/dist/es5/utils/doubly-linked-list.js +9 -17
  42. package/dist/es5/utils/doubly-linked-list.js.map +1 -1
  43. package/dist/es5/utils/managed-array.js +29 -30
  44. package/dist/es5/utils/managed-array.js.map +1 -1
  45. package/dist/esm/bundle.js +1 -1
  46. package/dist/esm/bundle.js.map +1 -1
  47. package/dist/esm/constants.js +3 -0
  48. package/dist/esm/constants.js.map +1 -1
  49. package/dist/esm/index.js.map +1 -1
  50. package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -1
  51. package/dist/esm/tileset/helpers/bounding-volume.js +4 -10
  52. package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -1
  53. package/dist/esm/tileset/helpers/frame-state.js +16 -16
  54. package/dist/esm/tileset/helpers/frame-state.js.map +1 -1
  55. package/dist/esm/tileset/helpers/i3s-lod.js +4 -4
  56. package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -1
  57. package/dist/esm/tileset/helpers/tiles-3d-lod.js +11 -8
  58. package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -1
  59. package/dist/esm/tileset/helpers/transform-utils.js +1 -3
  60. package/dist/esm/tileset/helpers/transform-utils.js.map +1 -1
  61. package/dist/esm/tileset/helpers/zoom.js +3 -2
  62. package/dist/esm/tileset/helpers/zoom.js.map +1 -1
  63. package/dist/esm/tileset/tile-3d.js +55 -108
  64. package/dist/esm/tileset/tile-3d.js.map +1 -1
  65. package/dist/esm/tileset/tileset-3d.js +58 -154
  66. package/dist/esm/tileset/tileset-3d.js.map +1 -1
  67. package/dist/esm/tileset/tileset-cache.js +2 -18
  68. package/dist/esm/tileset/tileset-cache.js.map +1 -1
  69. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js +0 -5
  70. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -1
  71. package/dist/esm/tileset/traversers/i3s-tile-manager.js +2 -4
  72. package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
  73. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +5 -19
  74. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
  75. package/dist/esm/tileset/traversers/tileset-3d-traverser.js +2 -9
  76. package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -1
  77. package/dist/esm/tileset/traversers/tileset-traverser.js +18 -57
  78. package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -1
  79. package/dist/esm/types.js.map +1 -1
  80. package/dist/esm/utils/doubly-linked-list-node.js +1 -4
  81. package/dist/esm/utils/doubly-linked-list-node.js.map +1 -1
  82. package/dist/esm/utils/doubly-linked-list.js +2 -11
  83. package/dist/esm/utils/doubly-linked-list.js.map +1 -1
  84. package/dist/esm/utils/managed-array.js +4 -22
  85. package/dist/esm/utils/managed-array.js.map +1 -1
  86. package/dist/tileset/helpers/frame-state.d.ts +1 -1
  87. package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
  88. package/dist/tileset/helpers/frame-state.js +1 -1
  89. package/dist/tileset/tile-3d.d.ts +24 -5
  90. package/dist/tileset/tile-3d.d.ts.map +1 -1
  91. package/dist/tileset/tile-3d.js +27 -2
  92. package/dist/tileset/tileset-3d.d.ts +14 -2
  93. package/dist/tileset/tileset-3d.d.ts.map +1 -1
  94. package/dist/tileset/tileset-3d.js +35 -0
  95. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -1
  96. package/dist/tileset/traversers/i3s-tileset-traverser.js +5 -6
  97. package/dist/tileset/traversers/tileset-traverser.d.ts +2 -2
  98. package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
  99. package/dist/tileset/traversers/tileset-traverser.js +3 -3
  100. package/dist/types.d.ts +3 -3
  101. package/dist/types.d.ts.map +1 -1
  102. package/package.json +4 -4
  103. package/src/tileset/helpers/frame-state.ts +1 -1
  104. package/src/tileset/tile-3d.ts +31 -4
  105. package/src/tileset/tileset-3d.ts +36 -0
  106. package/src/tileset/traversers/i3s-tileset-traverser.ts +1 -2
@@ -1,4 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
2
3
  import { Matrix4, Vector3 } from '@math.gl/core';
3
4
  import { Ellipsoid } from '@math.gl/geospatial';
4
5
  import { Stats } from '@probe.gl/stats';
@@ -38,6 +39,7 @@ const DEFAULT_PROPS = {
38
39
  basePath: '',
39
40
  i3s: {}
40
41
  };
42
+
41
43
  const TILES_TOTAL = 'Tiles In Tileset(s)';
42
44
  const TILES_IN_MEMORY = 'Tiles In Memory';
43
45
  const TILES_IN_VIEW = 'Tiles In View';
@@ -49,101 +51,64 @@ const TILES_LOAD_FAILED = 'Failed Tile Loads';
49
51
  const POINTS_COUNT = 'Points/Vertices';
50
52
  const TILES_GPU_MEMORY = 'Tile Memory Use';
51
53
  export default class Tileset3D {
54
+
52
55
  constructor(json, options) {
53
56
  _defineProperty(this, "options", void 0);
54
-
55
57
  _defineProperty(this, "loadOptions", void 0);
56
-
57
58
  _defineProperty(this, "type", void 0);
58
-
59
59
  _defineProperty(this, "tileset", void 0);
60
-
61
60
  _defineProperty(this, "loader", void 0);
62
-
63
61
  _defineProperty(this, "url", void 0);
64
-
65
62
  _defineProperty(this, "basePath", void 0);
66
-
67
63
  _defineProperty(this, "modelMatrix", void 0);
68
-
69
64
  _defineProperty(this, "ellipsoid", void 0);
70
-
71
65
  _defineProperty(this, "lodMetricType", void 0);
72
-
73
66
  _defineProperty(this, "lodMetricValue", void 0);
74
-
75
67
  _defineProperty(this, "refine", void 0);
76
-
77
68
  _defineProperty(this, "root", void 0);
78
-
79
69
  _defineProperty(this, "roots", void 0);
80
-
81
70
  _defineProperty(this, "asset", void 0);
82
-
83
71
  _defineProperty(this, "description", void 0);
84
-
85
72
  _defineProperty(this, "properties", void 0);
86
-
87
73
  _defineProperty(this, "extras", void 0);
88
-
89
74
  _defineProperty(this, "attributions", void 0);
90
-
91
75
  _defineProperty(this, "credits", void 0);
92
-
93
76
  _defineProperty(this, "stats", void 0);
94
-
77
+ _defineProperty(this, "contentFormats", {
78
+ draco: false,
79
+ meshopt: false,
80
+ dds: false,
81
+ ktx2: false
82
+ });
95
83
  _defineProperty(this, "traverseCounter", void 0);
96
-
97
84
  _defineProperty(this, "geometricError", void 0);
98
-
99
85
  _defineProperty(this, "selectedTiles", void 0);
100
-
101
86
  _defineProperty(this, "updatePromise", null);
102
-
103
87
  _defineProperty(this, "tilesetInitializationPromise", void 0);
104
-
105
88
  _defineProperty(this, "cartographicCenter", void 0);
106
-
107
89
  _defineProperty(this, "cartesianCenter", void 0);
108
-
109
90
  _defineProperty(this, "zoom", void 0);
110
-
111
91
  _defineProperty(this, "boundingVolume", void 0);
112
-
113
92
  _defineProperty(this, "gpuMemoryUsageInBytes", void 0);
114
-
115
93
  _defineProperty(this, "dynamicScreenSpaceErrorComputedDensity", void 0);
116
-
117
94
  _defineProperty(this, "_traverser", void 0);
118
-
119
95
  _defineProperty(this, "_cache", void 0);
120
-
121
96
  _defineProperty(this, "_requestScheduler", void 0);
122
-
123
97
  _defineProperty(this, "_frameNumber", void 0);
124
-
125
98
  _defineProperty(this, "_queryParamsString", void 0);
126
-
127
99
  _defineProperty(this, "_queryParams", void 0);
128
-
129
100
  _defineProperty(this, "_extensionsUsed", void 0);
130
-
131
101
  _defineProperty(this, "_tiles", void 0);
132
-
133
102
  _defineProperty(this, "_pendingCount", void 0);
134
-
135
103
  _defineProperty(this, "lastUpdatedVieports", void 0);
136
-
137
104
  _defineProperty(this, "_requestedTiles", void 0);
138
-
139
105
  _defineProperty(this, "_emptyTiles", void 0);
140
-
141
106
  _defineProperty(this, "frameStateData", void 0);
142
-
143
107
  _defineProperty(this, "maximumMemoryUsage", void 0);
144
-
145
108
  assert(json);
146
- this.options = { ...DEFAULT_PROPS,
109
+
110
+ this.options = {
111
+ ...DEFAULT_PROPS,
147
112
  ...options
148
113
  };
149
114
  this.tileset = json;
@@ -153,6 +118,7 @@ export default class Tileset3D {
153
118
  this.basePath = json.basePath || path.dirname(this.url);
154
119
  this.modelMatrix = this.options.modelMatrix;
155
120
  this.ellipsoid = this.options.ellipsoid;
121
+
156
122
  this.lodMetricType = json.lodMetricType;
157
123
  this.lodMetricValue = json.lodMetricValue;
158
124
  this.refine = json.root.refine;
@@ -163,6 +129,7 @@ export default class Tileset3D {
163
129
  this.cartesianCenter = null;
164
130
  this.zoom = 1;
165
131
  this.boundingVolume = null;
132
+
166
133
  this.traverseCounter = 0;
167
134
  this.geometricError = 0;
168
135
  this._traverser = this._initializeTraverser();
@@ -172,7 +139,9 @@ export default class Tileset3D {
172
139
  maxRequests: this.options.maxRequests
173
140
  });
174
141
  this._frameNumber = 0;
142
+
175
143
  this._pendingCount = 0;
144
+
176
145
  this._tiles = {};
177
146
  this.selectedTiles = [];
178
147
  this._emptyTiles = [];
@@ -181,12 +150,12 @@ export default class Tileset3D {
181
150
  this.lastUpdatedVieports = null;
182
151
  this._queryParams = {};
183
152
  this._queryParamsString = '';
153
+
184
154
  this.maximumMemoryUsage = this.options.maximumMemoryUsage || 32;
185
155
  this.gpuMemoryUsageInBytes = 0;
186
156
  this.stats = new Stats({
187
157
  id: this.url
188
158
  });
189
-
190
159
  this._initializeStats();
191
160
 
192
161
  this._extensionsUsed = undefined;
@@ -205,42 +174,37 @@ export default class Tileset3D {
205
174
  isLoaded() {
206
175
  return this._pendingCount === 0 && this._frameNumber !== 0 && this._requestedTiles.length === 0;
207
176
  }
208
-
209
177
  get tiles() {
210
178
  return Object.values(this._tiles);
211
179
  }
212
-
213
180
  get frameNumber() {
214
181
  return this._frameNumber;
215
182
  }
216
-
217
183
  get queryParams() {
218
184
  if (!this._queryParamsString) {
219
185
  this._queryParamsString = getQueryParamString(this._queryParams);
220
186
  }
221
-
222
187
  return this._queryParamsString;
223
188
  }
224
-
225
189
  setProps(props) {
226
- this.options = { ...this.options,
190
+ this.options = {
191
+ ...this.options,
227
192
  ...props
228
193
  };
229
194
  }
230
195
 
231
196
  setOptions(options) {
232
- this.options = { ...this.options,
197
+ this.options = {
198
+ ...this.options,
233
199
  ...options
234
200
  };
235
201
  }
236
202
 
237
203
  getTileUrl(tilePath) {
238
204
  const isDataUrl = tilePath.startsWith('data:');
239
-
240
205
  if (isDataUrl) {
241
206
  return tilePath;
242
207
  }
243
-
244
208
  return "".concat(tilePath).concat(this.queryParams);
245
209
  }
246
210
 
@@ -248,40 +212,37 @@ export default class Tileset3D {
248
212
  return Boolean(this._extensionsUsed && this._extensionsUsed.indexOf(extensionName) > -1);
249
213
  }
250
214
 
251
- update(viewports = null) {
215
+ update() {
216
+ let viewports = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
252
217
  this.tilesetInitializationPromise.then(() => {
253
218
  if (!viewports && this.lastUpdatedVieports) {
254
219
  viewports = this.lastUpdatedVieports;
255
220
  } else {
256
221
  this.lastUpdatedVieports = viewports;
257
222
  }
258
-
259
223
  if (viewports) {
260
224
  this.doUpdate(viewports);
261
225
  }
262
226
  });
263
227
  }
264
228
 
265
- async selectTiles(viewports = null) {
229
+ async selectTiles() {
230
+ let viewports = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
266
231
  await this.tilesetInitializationPromise;
267
-
268
232
  if (viewports) {
269
233
  this.lastUpdatedVieports = viewports;
270
234
  }
271
-
272
235
  if (!this.updatePromise) {
273
236
  this.updatePromise = new Promise(resolve => {
274
237
  setTimeout(() => {
275
238
  if (this.lastUpdatedVieports) {
276
239
  this.doUpdate(this.lastUpdatedVieports);
277
240
  }
278
-
279
241
  resolve(this._frameNumber);
280
242
  this.updatePromise = null;
281
243
  }, this.options.debounceTime);
282
244
  });
283
245
  }
284
-
285
246
  return this.updatePromise;
286
247
  }
287
248
 
@@ -289,22 +250,16 @@ export default class Tileset3D {
289
250
  if ('loadTiles' in this.options && !this.options.loadTiles) {
290
251
  return;
291
252
  }
292
-
293
253
  if (this.traverseCounter > 0) {
294
254
  return;
295
255
  }
296
-
297
256
  const preparedViewports = viewports instanceof Array ? viewports : [viewports];
298
-
299
257
  this._cache.reset();
300
-
301
258
  this._frameNumber++;
302
259
  this.traverseCounter = preparedViewports.length;
303
260
  const viewportsToTraverse = [];
304
-
305
261
  for (const viewport of preparedViewports) {
306
262
  const id = viewport.id;
307
-
308
263
  if (this._needTraverse(id)) {
309
264
  viewportsToTraverse.push(id);
310
265
  } else {
@@ -314,38 +269,31 @@ export default class Tileset3D {
314
269
 
315
270
  for (const viewport of preparedViewports) {
316
271
  const id = viewport.id;
317
-
318
272
  if (!this.roots[id]) {
319
273
  this.roots[id] = this._initializeTileHeaders(this.tileset, null);
320
274
  }
321
-
322
275
  if (!viewportsToTraverse.includes(id)) {
323
276
  continue;
324
277
  }
325
278
 
326
279
  const frameState = getFrameState(viewport, this._frameNumber);
327
-
328
280
  this._traverser.traverse(this.roots[id], frameState, this.options);
329
281
  }
330
282
  }
331
283
 
332
284
  _needTraverse(viewportId) {
333
285
  let traverserId = viewportId;
334
-
335
286
  if (this.options.viewportTraversersMap) {
336
287
  traverserId = this.options.viewportTraversersMap[viewportId];
337
288
  }
338
-
339
289
  if (traverserId !== viewportId) {
340
290
  return false;
341
291
  }
342
-
343
292
  return true;
344
293
  }
345
294
 
346
295
  _onTraversalEnd(frameState) {
347
296
  const id = frameState.viewport.id;
348
-
349
297
  if (!this.frameStateData[id]) {
350
298
  this.frameStateData[id] = {
351
299
  selectedTiles: [],
@@ -353,24 +301,19 @@ export default class Tileset3D {
353
301
  _emptyTiles: []
354
302
  };
355
303
  }
356
-
357
304
  const currentFrameStateData = this.frameStateData[id];
358
305
  const selectedTiles = Object.values(this._traverser.selectedTiles);
359
306
  const [filteredSelectedTiles, unselectedTiles] = limitSelectedTiles(selectedTiles, frameState, this.options.maximumTilesSelected);
360
307
  currentFrameStateData.selectedTiles = filteredSelectedTiles;
361
-
362
308
  for (const tile of unselectedTiles) {
363
309
  tile.unselect();
364
310
  }
365
-
366
311
  currentFrameStateData._requestedTiles = Object.values(this._traverser.requestedTiles);
367
312
  currentFrameStateData._emptyTiles = Object.values(this._traverser.emptyTiles);
368
313
  this.traverseCounter--;
369
-
370
314
  if (this.traverseCounter > 0) {
371
315
  return;
372
316
  }
373
-
374
317
  this._updateTiles();
375
318
  }
376
319
 
@@ -378,39 +321,30 @@ export default class Tileset3D {
378
321
  this.selectedTiles = [];
379
322
  this._requestedTiles = [];
380
323
  this._emptyTiles = [];
381
-
382
324
  for (const frameStateKey in this.frameStateData) {
383
325
  const frameStateDataValue = this.frameStateData[frameStateKey];
384
326
  this.selectedTiles = this.selectedTiles.concat(frameStateDataValue.selectedTiles);
385
327
  this._requestedTiles = this._requestedTiles.concat(frameStateDataValue._requestedTiles);
386
328
  this._emptyTiles = this._emptyTiles.concat(frameStateDataValue._emptyTiles);
387
329
  }
388
-
389
330
  this.selectedTiles = this.options.onTraversalComplete(this.selectedTiles);
390
-
391
331
  for (const tile of this.selectedTiles) {
392
332
  this._tiles[tile.id] = tile;
393
333
  }
394
-
395
334
  this._loadTiles();
396
-
397
335
  this._unloadTiles();
398
-
399
336
  this._updateStats();
400
337
  }
401
-
402
338
  _tilesChanged(oldSelectedTiles, selectedTiles) {
403
339
  if (oldSelectedTiles.length !== selectedTiles.length) {
404
340
  return true;
405
341
  }
406
-
407
342
  const set1 = new Set(oldSelectedTiles.map(t => t.id));
408
343
  const set2 = new Set(selectedTiles.map(t => t.id));
409
344
  let changed = oldSelectedTiles.filter(x => !set2.has(x.id)).length > 0;
410
345
  changed = changed || selectedTiles.filter(x => !set1.has(x.id)).length > 0;
411
346
  return changed;
412
347
  }
413
-
414
348
  _loadTiles() {
415
349
  for (const tile of this._requestedTiles) {
416
350
  if (tile.contentUnloaded) {
@@ -418,19 +352,15 @@ export default class Tileset3D {
418
352
  }
419
353
  }
420
354
  }
421
-
422
355
  _unloadTiles() {
423
356
  this._cache.unloadTiles(this, (tileset, tile) => tileset._unloadTile(tile));
424
357
  }
425
-
426
358
  _updateStats() {
427
359
  let tilesRenderable = 0;
428
360
  let pointsRenderable = 0;
429
-
430
361
  for (const tile of this.selectedTiles) {
431
362
  if (tile.contentAvailable && tile.content) {
432
363
  tilesRenderable++;
433
-
434
364
  if (tile.content.pointCount) {
435
365
  pointsRenderable += tile.content.pointCount;
436
366
  } else {
@@ -438,26 +368,20 @@ export default class Tileset3D {
438
368
  }
439
369
  }
440
370
  }
441
-
442
371
  this.stats.get(TILES_IN_VIEW).count = this.selectedTiles.length;
443
372
  this.stats.get(TILES_RENDERABLE).count = tilesRenderable;
444
373
  this.stats.get(POINTS_COUNT).count = pointsRenderable;
445
374
  }
446
-
447
375
  async _initializeTileSet(tilesetJson) {
448
376
  if (this.type === TILESET_TYPE.I3S) {
449
377
  this.calculateViewPropsI3S();
450
378
  tilesetJson.root = await tilesetJson.root;
451
379
  }
452
-
453
380
  this.root = this._initializeTileHeaders(tilesetJson, null);
454
-
455
381
  if (this.type === TILESET_TYPE.TILES3D) {
456
382
  this._initializeTiles3DTileset(tilesetJson);
457
-
458
383
  this.calculateViewPropsTiles3D();
459
384
  }
460
-
461
385
  if (this.type === TILESET_TYPE.I3S) {
462
386
  this._initializeI3STileset();
463
387
  }
@@ -465,9 +389,7 @@ export default class Tileset3D {
465
389
 
466
390
  calculateViewPropsI3S() {
467
391
  var _this$tileset$store;
468
-
469
392
  const fullExtent = this.tileset.fullExtent;
470
-
471
393
  if (fullExtent) {
472
394
  const {
473
395
  xmin,
@@ -482,9 +404,7 @@ export default class Tileset3D {
482
404
  this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);
483
405
  return;
484
406
  }
485
-
486
407
  const extent = (_this$tileset$store = this.tileset.store) === null || _this$tileset$store === void 0 ? void 0 : _this$tileset$store.extent;
487
-
488
408
  if (extent) {
489
409
  const [xmin, ymin, xmax, ymax] = extent;
490
410
  this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);
@@ -492,7 +412,6 @@ export default class Tileset3D {
492
412
  this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);
493
413
  return;
494
414
  }
495
-
496
415
  console.warn('Extent is not defined in the tileset header');
497
416
  this.cartographicCenter = new Vector3();
498
417
  this.zoom = 1;
@@ -505,7 +424,6 @@ export default class Tileset3D {
505
424
  const {
506
425
  center
507
426
  } = root.boundingVolume;
508
-
509
427
  if (!center) {
510
428
  console.warn('center was not pre-calculated for the root tile');
511
429
  this.cartographicCenter = new Vector3();
@@ -518,11 +436,9 @@ export default class Tileset3D {
518
436
  } else {
519
437
  this.cartographicCenter = new Vector3(0, 0, -Ellipsoid.WGS84.radii[0]);
520
438
  }
521
-
522
439
  this.cartesianCenter = center;
523
440
  this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);
524
441
  }
525
-
526
442
  _initializeStats() {
527
443
  this.stats.get(TILES_TOTAL);
528
444
  this.stats.get(TILES_LOADING);
@@ -547,12 +463,10 @@ export default class Tileset3D {
547
463
  if (this.type === TILESET_TYPE.TILES3D) {
548
464
  const stack = [];
549
465
  stack.push(rootTile);
550
-
551
466
  while (stack.length > 0) {
552
467
  const tile = stack.pop();
553
468
  this.stats.get(TILES_TOTAL).incrementCount();
554
469
  const children = tile.header.children || [];
555
-
556
470
  for (const childHeader of children) {
557
471
  const childTile = new Tile3D(this, childHeader, tile);
558
472
  tile.children.push(childTile);
@@ -561,53 +475,41 @@ export default class Tileset3D {
561
475
  }
562
476
  }
563
477
  }
564
-
565
478
  return rootTile;
566
479
  }
567
-
568
480
  _initializeTraverser() {
569
481
  let TraverserClass;
570
482
  const type = this.type;
571
-
572
483
  switch (type) {
573
484
  case TILESET_TYPE.TILES3D:
574
485
  TraverserClass = Tileset3DTraverser;
575
486
  break;
576
-
577
487
  case TILESET_TYPE.I3S:
578
488
  TraverserClass = I3SetTraverser;
579
489
  break;
580
-
581
490
  default:
582
491
  TraverserClass = TilesetTraverser;
583
492
  }
584
-
585
493
  return new TraverserClass({
586
494
  basePath: this.basePath,
587
495
  onTraversalEnd: this._onTraversalEnd.bind(this)
588
496
  });
589
497
  }
590
-
591
498
  _destroyTileHeaders(parentTile) {
592
499
  this._destroySubtree(parentTile);
593
500
  }
594
-
595
501
  async _loadTile(tile) {
596
502
  let loaded;
597
-
598
503
  try {
599
504
  this._onStartTileLoading();
600
-
601
505
  loaded = await tile.loadContent();
602
506
  } catch (error) {
603
507
  this._onTileLoadError(tile, error);
604
508
  } finally {
605
509
  this._onEndTileLoading();
606
-
607
510
  this._onTileLoad(tile, loaded);
608
511
  }
609
512
  }
610
-
611
513
  _onTileLoadError(tile, error) {
612
514
  this.stats.get(TILES_LOAD_FAILED).incrementCount();
613
515
  const message = error.message || error.toString();
@@ -615,15 +517,12 @@ export default class Tileset3D {
615
517
  console.error("A 3D tile failed to load: ".concat(tile.url, " ").concat(message));
616
518
  this.options.onTileError(tile, message, url);
617
519
  }
618
-
619
520
  _onTileLoad(tile, loaded) {
620
521
  if (!loaded) {
621
522
  return;
622
523
  }
623
-
624
524
  if (this.type === TILESET_TYPE.I3S) {
625
525
  var _this$tileset, _this$tileset$nodePag;
626
-
627
526
  const nodesInNodePages = ((_this$tileset = this.tileset) === null || _this$tileset === void 0 ? void 0 : (_this$tileset$nodePag = _this$tileset.nodePagesTile) === null || _this$tileset$nodePag === void 0 ? void 0 : _this$tileset$nodePag.nodesInNodePages) || 0;
628
527
  this.stats.get(TILES_TOTAL).reset();
629
528
  this.stats.get(TILES_TOTAL).addCount(nodesInNodePages);
@@ -632,33 +531,59 @@ export default class Tileset3D {
632
531
  if (tile && tile.content) {
633
532
  calculateTransformProps(tile, tile.content);
634
533
  }
635
-
534
+ this.updateContentTypes(tile);
636
535
  this._addTileToCache(tile);
637
-
638
536
  this.options.onTileLoad(tile);
639
537
  }
640
538
 
539
+ updateContentTypes(tile) {
540
+ if (this.type === TILESET_TYPE.I3S) {
541
+ if (tile.header.isDracoGeometry) {
542
+ this.contentFormats.draco = true;
543
+ }
544
+ switch (tile.header.textureFormat) {
545
+ case 'dds':
546
+ this.contentFormats.dds = true;
547
+ break;
548
+ case 'ktx2':
549
+ this.contentFormats.ktx2 = true;
550
+ break;
551
+ default:
552
+ }
553
+ } else if (this.type === TILESET_TYPE.TILES3D) {
554
+ var _tile$content;
555
+ const {
556
+ extensionsRemoved = []
557
+ } = ((_tile$content = tile.content) === null || _tile$content === void 0 ? void 0 : _tile$content.gltf) || {};
558
+ if (extensionsRemoved.includes('KHR_draco_mesh_compression')) {
559
+ this.contentFormats.draco = true;
560
+ }
561
+ if (extensionsRemoved.includes('EXT_meshopt_compression')) {
562
+ this.contentFormats.meshopt = true;
563
+ }
564
+ if (extensionsRemoved.includes('KHR_texture_basisu')) {
565
+ this.contentFormats.ktx2 = true;
566
+ }
567
+ }
568
+ }
641
569
  _onStartTileLoading() {
642
570
  this._pendingCount++;
643
571
  this.stats.get(TILES_LOADING).incrementCount();
644
572
  }
645
-
646
573
  _onEndTileLoading() {
647
574
  this._pendingCount--;
648
575
  this.stats.get(TILES_LOADING).decrementCount();
649
576
  }
650
-
651
577
  _addTileToCache(tile) {
652
578
  this._cache.add(this, tile, tileset => tileset._updateCacheStats(tile));
653
579
  }
654
-
655
580
  _updateCacheStats(tile) {
656
581
  this.stats.get(TILES_LOADED).incrementCount();
657
582
  this.stats.get(TILES_IN_MEMORY).incrementCount();
583
+
658
584
  this.gpuMemoryUsageInBytes += tile.content.byteLength || 0;
659
585
  this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;
660
586
  }
661
-
662
587
  _unloadTile(tile) {
663
588
  this.gpuMemoryUsageInBytes -= tile.content && tile.content.byteLength || 0;
664
589
  this.stats.get(TILES_IN_MEMORY).decrementCount();
@@ -670,21 +595,16 @@ export default class Tileset3D {
670
595
 
671
596
  _destroy() {
672
597
  const stack = [];
673
-
674
598
  if (this.root) {
675
599
  stack.push(this.root);
676
600
  }
677
-
678
601
  while (stack.length > 0) {
679
602
  const tile = stack.pop();
680
-
681
603
  for (const child of tile.children) {
682
604
  stack.push(child);
683
605
  }
684
-
685
606
  this._destroyTile(tile);
686
607
  }
687
-
688
608
  this.root = null;
689
609
  }
690
610
 
@@ -692,37 +612,27 @@ export default class Tileset3D {
692
612
  const root = tile;
693
613
  const stack = [];
694
614
  stack.push(root);
695
-
696
615
  while (stack.length > 0) {
697
616
  tile = stack.pop();
698
-
699
617
  for (const child of tile.children) {
700
618
  stack.push(child);
701
619
  }
702
-
703
620
  if (tile !== root) {
704
621
  this._destroyTile(tile);
705
622
  }
706
623
  }
707
-
708
624
  root.children = [];
709
625
  }
710
-
711
626
  _destroyTile(tile) {
712
627
  this._cache.unloadTile(this, tile);
713
-
714
628
  this._unloadTile(tile);
715
-
716
629
  tile.destroy();
717
630
  }
718
-
719
631
  _initializeTiles3DTileset(tilesetJson) {
720
632
  this.asset = tilesetJson.asset;
721
-
722
633
  if (!this.asset) {
723
634
  throw new Error('Tileset must have an asset property.');
724
635
  }
725
-
726
636
  if (this.asset.version !== '0.0' && this.asset.version !== '1.0') {
727
637
  throw new Error('The tileset must be 3D Tiles version 0.0 or 1.0.');
728
638
  }
@@ -735,34 +645,28 @@ export default class Tileset3D {
735
645
  attributions: this.options.attributions || []
736
646
  };
737
647
  this.description = this.options.description || '';
648
+
738
649
  this.properties = tilesetJson.properties;
739
650
  this.geometricError = tilesetJson.geometricError;
740
651
  this._extensionsUsed = tilesetJson.extensionsUsed;
741
652
  this.extras = tilesetJson.extras;
742
653
  }
743
-
744
654
  _initializeI3STileset() {
745
655
  if (this.loadOptions.i3s && 'token' in this.loadOptions.i3s) {
746
656
  this._queryParams.token = this.loadOptions.i3s.token;
747
657
  }
748
658
  }
749
-
750
659
  }
751
-
752
660
  function getQueryParamString(queryParams) {
753
661
  const queryParamStrings = [];
754
-
755
662
  for (const key of Object.keys(queryParams)) {
756
663
  queryParamStrings.push("".concat(key, "=").concat(queryParams[key]));
757
664
  }
758
-
759
665
  switch (queryParamStrings.length) {
760
666
  case 0:
761
667
  return '';
762
-
763
668
  case 1:
764
669
  return "?".concat(queryParamStrings[0]);
765
-
766
670
  default:
767
671
  return "?".concat(queryParamStrings.join('&'));
768
672
  }