@loaders.gl/tiles 3.3.0-alpha.1 → 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 (124) hide show
  1. package/dist/dist.min.js +1027 -1431
  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 +45 -50
  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 +111 -98
  23. package/dist/es5/tileset/tile-3d.js.map +1 -1
  24. package/dist/es5/tileset/tileset-3d.js +130 -196
  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-frame-counter.js → i3s-pending-tiles-register.js} +21 -16
  29. package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
  30. package/dist/es5/tileset/traversers/i3s-tile-manager.js +33 -27
  31. package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
  32. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +10 -52
  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 +55 -78
  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 +36 -20
  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 +47 -108
  64. package/dist/esm/tileset/tile-3d.js.map +1 -1
  65. package/dist/esm/tileset/tileset-3d.js +70 -163
  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 +28 -0
  70. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
  71. package/dist/esm/tileset/traversers/i3s-tile-manager.js +34 -15
  72. package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
  73. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +8 -22
  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 +20 -59
  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 +5 -8
  87. package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
  88. package/dist/tileset/helpers/frame-state.js +27 -12
  89. package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
  90. package/dist/tileset/tile-3d.d.ts +15 -4
  91. package/dist/tileset/tile-3d.d.ts.map +1 -1
  92. package/dist/tileset/tile-3d.js +15 -2
  93. package/dist/tileset/tileset-3d.d.ts +17 -4
  94. package/dist/tileset/tileset-3d.d.ts.map +1 -1
  95. package/dist/tileset/tileset-3d.js +47 -10
  96. package/dist/tileset/traversers/{i3s-frame-counter.d.ts → i3s-pending-tiles-register.d.ts} +7 -4
  97. package/dist/tileset/traversers/i3s-pending-tiles-register.d.ts.map +1 -0
  98. package/dist/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +17 -8
  99. package/dist/tileset/traversers/i3s-tile-manager.d.ts +19 -1
  100. package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -1
  101. package/dist/tileset/traversers/i3s-tile-manager.js +32 -12
  102. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +1 -1
  103. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -1
  104. package/dist/tileset/traversers/i3s-tileset-traverser.js +9 -9
  105. package/dist/tileset/traversers/tileset-traverser.d.ts +3 -3
  106. package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
  107. package/dist/tileset/traversers/tileset-traverser.js +4 -4
  108. package/dist/types.d.ts +30 -1
  109. package/dist/types.d.ts.map +1 -1
  110. package/package.json +4 -4
  111. package/src/tileset/helpers/frame-state.ts +47 -19
  112. package/src/tileset/helpers/i3s-lod.ts +3 -1
  113. package/src/tileset/tile-3d.ts +16 -2
  114. package/src/tileset/tileset-3d.ts +55 -16
  115. package/src/tileset/traversers/i3s-pending-tiles-register.ts +44 -0
  116. package/src/tileset/traversers/i3s-tile-manager.ts +47 -11
  117. package/src/tileset/traversers/i3s-tileset-traverser.ts +5 -5
  118. package/src/tileset/traversers/tileset-traverser.ts +2 -2
  119. package/src/types.ts +32 -0
  120. package/dist/es5/tileset/traversers/i3s-frame-counter.js.map +0 -1
  121. package/dist/esm/tileset/traversers/i3s-frame-counter.js +0 -23
  122. package/dist/esm/tileset/traversers/i3s-frame-counter.js.map +0 -1
  123. package/dist/tileset/traversers/i3s-frame-counter.d.ts.map +0 -1
  124. package/src/tileset/traversers/i3s-frame-counter.ts +0 -35
@@ -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,60 +212,54 @@ 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
- this.doUpdate(viewports);
223
+ if (viewports) {
224
+ this.doUpdate(viewports);
225
+ }
260
226
  });
261
227
  }
262
228
 
263
- async selectTiles(viewports = null) {
229
+ async selectTiles() {
230
+ let viewports = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
264
231
  await this.tilesetInitializationPromise;
265
-
266
232
  if (viewports) {
267
233
  this.lastUpdatedVieports = viewports;
268
234
  }
269
-
270
235
  if (!this.updatePromise) {
271
236
  this.updatePromise = new Promise(resolve => {
272
237
  setTimeout(() => {
273
- this.doUpdate(this.lastUpdatedVieports);
238
+ if (this.lastUpdatedVieports) {
239
+ this.doUpdate(this.lastUpdatedVieports);
240
+ }
274
241
  resolve(this._frameNumber);
275
242
  this.updatePromise = null;
276
243
  }, this.options.debounceTime);
277
244
  });
278
245
  }
279
-
280
246
  return this.updatePromise;
281
247
  }
282
248
 
283
- doUpdate(viewports = null) {
249
+ doUpdate(viewports) {
284
250
  if ('loadTiles' in this.options && !this.options.loadTiles) {
285
251
  return;
286
252
  }
287
-
288
253
  if (this.traverseCounter > 0) {
289
254
  return;
290
255
  }
291
-
292
- if (!(viewports instanceof Array)) {
293
- viewports = [viewports];
294
- }
295
-
256
+ const preparedViewports = viewports instanceof Array ? viewports : [viewports];
296
257
  this._cache.reset();
297
-
298
258
  this._frameNumber++;
299
- this.traverseCounter = viewports.length;
259
+ this.traverseCounter = preparedViewports.length;
300
260
  const viewportsToTraverse = [];
301
-
302
- for (const viewport of viewports) {
261
+ for (const viewport of preparedViewports) {
303
262
  const id = viewport.id;
304
-
305
263
  if (this._needTraverse(id)) {
306
264
  viewportsToTraverse.push(id);
307
265
  } else {
@@ -309,40 +267,33 @@ export default class Tileset3D {
309
267
  }
310
268
  }
311
269
 
312
- for (const viewport of viewports) {
270
+ for (const viewport of preparedViewports) {
313
271
  const id = viewport.id;
314
-
315
272
  if (!this.roots[id]) {
316
273
  this.roots[id] = this._initializeTileHeaders(this.tileset, null);
317
274
  }
318
-
319
275
  if (!viewportsToTraverse.includes(id)) {
320
276
  continue;
321
277
  }
322
278
 
323
279
  const frameState = getFrameState(viewport, this._frameNumber);
324
-
325
280
  this._traverser.traverse(this.roots[id], frameState, this.options);
326
281
  }
327
282
  }
328
283
 
329
284
  _needTraverse(viewportId) {
330
285
  let traverserId = viewportId;
331
-
332
286
  if (this.options.viewportTraversersMap) {
333
287
  traverserId = this.options.viewportTraversersMap[viewportId];
334
288
  }
335
-
336
289
  if (traverserId !== viewportId) {
337
290
  return false;
338
291
  }
339
-
340
292
  return true;
341
293
  }
342
294
 
343
295
  _onTraversalEnd(frameState) {
344
296
  const id = frameState.viewport.id;
345
-
346
297
  if (!this.frameStateData[id]) {
347
298
  this.frameStateData[id] = {
348
299
  selectedTiles: [],
@@ -350,24 +301,19 @@ export default class Tileset3D {
350
301
  _emptyTiles: []
351
302
  };
352
303
  }
353
-
354
304
  const currentFrameStateData = this.frameStateData[id];
355
305
  const selectedTiles = Object.values(this._traverser.selectedTiles);
356
306
  const [filteredSelectedTiles, unselectedTiles] = limitSelectedTiles(selectedTiles, frameState, this.options.maximumTilesSelected);
357
307
  currentFrameStateData.selectedTiles = filteredSelectedTiles;
358
-
359
308
  for (const tile of unselectedTiles) {
360
309
  tile.unselect();
361
310
  }
362
-
363
311
  currentFrameStateData._requestedTiles = Object.values(this._traverser.requestedTiles);
364
312
  currentFrameStateData._emptyTiles = Object.values(this._traverser.emptyTiles);
365
313
  this.traverseCounter--;
366
-
367
314
  if (this.traverseCounter > 0) {
368
315
  return;
369
316
  }
370
-
371
317
  this._updateTiles();
372
318
  }
373
319
 
@@ -375,39 +321,30 @@ export default class Tileset3D {
375
321
  this.selectedTiles = [];
376
322
  this._requestedTiles = [];
377
323
  this._emptyTiles = [];
378
-
379
324
  for (const frameStateKey in this.frameStateData) {
380
325
  const frameStateDataValue = this.frameStateData[frameStateKey];
381
326
  this.selectedTiles = this.selectedTiles.concat(frameStateDataValue.selectedTiles);
382
327
  this._requestedTiles = this._requestedTiles.concat(frameStateDataValue._requestedTiles);
383
328
  this._emptyTiles = this._emptyTiles.concat(frameStateDataValue._emptyTiles);
384
329
  }
385
-
386
330
  this.selectedTiles = this.options.onTraversalComplete(this.selectedTiles);
387
-
388
331
  for (const tile of this.selectedTiles) {
389
332
  this._tiles[tile.id] = tile;
390
333
  }
391
-
392
334
  this._loadTiles();
393
-
394
335
  this._unloadTiles();
395
-
396
336
  this._updateStats();
397
337
  }
398
-
399
338
  _tilesChanged(oldSelectedTiles, selectedTiles) {
400
339
  if (oldSelectedTiles.length !== selectedTiles.length) {
401
340
  return true;
402
341
  }
403
-
404
342
  const set1 = new Set(oldSelectedTiles.map(t => t.id));
405
343
  const set2 = new Set(selectedTiles.map(t => t.id));
406
344
  let changed = oldSelectedTiles.filter(x => !set2.has(x.id)).length > 0;
407
345
  changed = changed || selectedTiles.filter(x => !set1.has(x.id)).length > 0;
408
346
  return changed;
409
347
  }
410
-
411
348
  _loadTiles() {
412
349
  for (const tile of this._requestedTiles) {
413
350
  if (tile.contentUnloaded) {
@@ -415,19 +352,15 @@ export default class Tileset3D {
415
352
  }
416
353
  }
417
354
  }
418
-
419
355
  _unloadTiles() {
420
356
  this._cache.unloadTiles(this, (tileset, tile) => tileset._unloadTile(tile));
421
357
  }
422
-
423
358
  _updateStats() {
424
359
  let tilesRenderable = 0;
425
360
  let pointsRenderable = 0;
426
-
427
361
  for (const tile of this.selectedTiles) {
428
362
  if (tile.contentAvailable && tile.content) {
429
363
  tilesRenderable++;
430
-
431
364
  if (tile.content.pointCount) {
432
365
  pointsRenderable += tile.content.pointCount;
433
366
  } else {
@@ -435,26 +368,20 @@ export default class Tileset3D {
435
368
  }
436
369
  }
437
370
  }
438
-
439
371
  this.stats.get(TILES_IN_VIEW).count = this.selectedTiles.length;
440
372
  this.stats.get(TILES_RENDERABLE).count = tilesRenderable;
441
373
  this.stats.get(POINTS_COUNT).count = pointsRenderable;
442
374
  }
443
-
444
375
  async _initializeTileSet(tilesetJson) {
445
376
  if (this.type === TILESET_TYPE.I3S) {
446
377
  this.calculateViewPropsI3S();
447
378
  tilesetJson.root = await tilesetJson.root;
448
379
  }
449
-
450
380
  this.root = this._initializeTileHeaders(tilesetJson, null);
451
-
452
381
  if (this.type === TILESET_TYPE.TILES3D) {
453
382
  this._initializeTiles3DTileset(tilesetJson);
454
-
455
383
  this.calculateViewPropsTiles3D();
456
384
  }
457
-
458
385
  if (this.type === TILESET_TYPE.I3S) {
459
386
  this._initializeI3STileset();
460
387
  }
@@ -462,9 +389,7 @@ export default class Tileset3D {
462
389
 
463
390
  calculateViewPropsI3S() {
464
391
  var _this$tileset$store;
465
-
466
392
  const fullExtent = this.tileset.fullExtent;
467
-
468
393
  if (fullExtent) {
469
394
  const {
470
395
  xmin,
@@ -479,9 +404,7 @@ export default class Tileset3D {
479
404
  this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);
480
405
  return;
481
406
  }
482
-
483
407
  const extent = (_this$tileset$store = this.tileset.store) === null || _this$tileset$store === void 0 ? void 0 : _this$tileset$store.extent;
484
-
485
408
  if (extent) {
486
409
  const [xmin, ymin, xmax, ymax] = extent;
487
410
  this.cartographicCenter = new Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);
@@ -489,7 +412,6 @@ export default class Tileset3D {
489
412
  this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);
490
413
  return;
491
414
  }
492
-
493
415
  console.warn('Extent is not defined in the tileset header');
494
416
  this.cartographicCenter = new Vector3();
495
417
  this.zoom = 1;
@@ -502,7 +424,6 @@ export default class Tileset3D {
502
424
  const {
503
425
  center
504
426
  } = root.boundingVolume;
505
-
506
427
  if (!center) {
507
428
  console.warn('center was not pre-calculated for the root tile');
508
429
  this.cartographicCenter = new Vector3();
@@ -515,11 +436,9 @@ export default class Tileset3D {
515
436
  } else {
516
437
  this.cartographicCenter = new Vector3(0, 0, -Ellipsoid.WGS84.radii[0]);
517
438
  }
518
-
519
439
  this.cartesianCenter = center;
520
440
  this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);
521
441
  }
522
-
523
442
  _initializeStats() {
524
443
  this.stats.get(TILES_TOTAL);
525
444
  this.stats.get(TILES_LOADING);
@@ -529,7 +448,7 @@ export default class Tileset3D {
529
448
  this.stats.get(TILES_LOADED);
530
449
  this.stats.get(TILES_UNLOADED);
531
450
  this.stats.get(TILES_LOAD_FAILED);
532
- this.stats.get(POINTS_COUNT, 'memory');
451
+ this.stats.get(POINTS_COUNT);
533
452
  this.stats.get(TILES_GPU_MEMORY, 'memory');
534
453
  }
535
454
 
@@ -544,12 +463,10 @@ export default class Tileset3D {
544
463
  if (this.type === TILESET_TYPE.TILES3D) {
545
464
  const stack = [];
546
465
  stack.push(rootTile);
547
-
548
466
  while (stack.length > 0) {
549
467
  const tile = stack.pop();
550
468
  this.stats.get(TILES_TOTAL).incrementCount();
551
469
  const children = tile.header.children || [];
552
-
553
470
  for (const childHeader of children) {
554
471
  const childTile = new Tile3D(this, childHeader, tile);
555
472
  tile.children.push(childTile);
@@ -558,53 +475,41 @@ export default class Tileset3D {
558
475
  }
559
476
  }
560
477
  }
561
-
562
478
  return rootTile;
563
479
  }
564
-
565
480
  _initializeTraverser() {
566
481
  let TraverserClass;
567
482
  const type = this.type;
568
-
569
483
  switch (type) {
570
484
  case TILESET_TYPE.TILES3D:
571
485
  TraverserClass = Tileset3DTraverser;
572
486
  break;
573
-
574
487
  case TILESET_TYPE.I3S:
575
488
  TraverserClass = I3SetTraverser;
576
489
  break;
577
-
578
490
  default:
579
491
  TraverserClass = TilesetTraverser;
580
492
  }
581
-
582
493
  return new TraverserClass({
583
494
  basePath: this.basePath,
584
495
  onTraversalEnd: this._onTraversalEnd.bind(this)
585
496
  });
586
497
  }
587
-
588
498
  _destroyTileHeaders(parentTile) {
589
499
  this._destroySubtree(parentTile);
590
500
  }
591
-
592
501
  async _loadTile(tile) {
593
502
  let loaded;
594
-
595
503
  try {
596
504
  this._onStartTileLoading();
597
-
598
505
  loaded = await tile.loadContent();
599
506
  } catch (error) {
600
507
  this._onTileLoadError(tile, error);
601
508
  } finally {
602
509
  this._onEndTileLoading();
603
-
604
510
  this._onTileLoad(tile, loaded);
605
511
  }
606
512
  }
607
-
608
513
  _onTileLoadError(tile, error) {
609
514
  this.stats.get(TILES_LOAD_FAILED).incrementCount();
610
515
  const message = error.message || error.toString();
@@ -612,15 +517,12 @@ export default class Tileset3D {
612
517
  console.error("A 3D tile failed to load: ".concat(tile.url, " ").concat(message));
613
518
  this.options.onTileError(tile, message, url);
614
519
  }
615
-
616
520
  _onTileLoad(tile, loaded) {
617
521
  if (!loaded) {
618
522
  return;
619
523
  }
620
-
621
524
  if (this.type === TILESET_TYPE.I3S) {
622
525
  var _this$tileset, _this$tileset$nodePag;
623
-
624
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;
625
527
  this.stats.get(TILES_TOTAL).reset();
626
528
  this.stats.get(TILES_TOTAL).addCount(nodesInNodePages);
@@ -629,33 +531,59 @@ export default class Tileset3D {
629
531
  if (tile && tile.content) {
630
532
  calculateTransformProps(tile, tile.content);
631
533
  }
632
-
534
+ this.updateContentTypes(tile);
633
535
  this._addTileToCache(tile);
634
-
635
536
  this.options.onTileLoad(tile);
636
537
  }
637
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
+ }
638
569
  _onStartTileLoading() {
639
570
  this._pendingCount++;
640
571
  this.stats.get(TILES_LOADING).incrementCount();
641
572
  }
642
-
643
573
  _onEndTileLoading() {
644
574
  this._pendingCount--;
645
575
  this.stats.get(TILES_LOADING).decrementCount();
646
576
  }
647
-
648
577
  _addTileToCache(tile) {
649
578
  this._cache.add(this, tile, tileset => tileset._updateCacheStats(tile));
650
579
  }
651
-
652
580
  _updateCacheStats(tile) {
653
581
  this.stats.get(TILES_LOADED).incrementCount();
654
582
  this.stats.get(TILES_IN_MEMORY).incrementCount();
583
+
655
584
  this.gpuMemoryUsageInBytes += tile.content.byteLength || 0;
656
585
  this.stats.get(TILES_GPU_MEMORY).count = this.gpuMemoryUsageInBytes;
657
586
  }
658
-
659
587
  _unloadTile(tile) {
660
588
  this.gpuMemoryUsageInBytes -= tile.content && tile.content.byteLength || 0;
661
589
  this.stats.get(TILES_IN_MEMORY).decrementCount();
@@ -667,21 +595,16 @@ export default class Tileset3D {
667
595
 
668
596
  _destroy() {
669
597
  const stack = [];
670
-
671
598
  if (this.root) {
672
599
  stack.push(this.root);
673
600
  }
674
-
675
601
  while (stack.length > 0) {
676
602
  const tile = stack.pop();
677
-
678
603
  for (const child of tile.children) {
679
604
  stack.push(child);
680
605
  }
681
-
682
606
  this._destroyTile(tile);
683
607
  }
684
-
685
608
  this.root = null;
686
609
  }
687
610
 
@@ -689,37 +612,27 @@ export default class Tileset3D {
689
612
  const root = tile;
690
613
  const stack = [];
691
614
  stack.push(root);
692
-
693
615
  while (stack.length > 0) {
694
616
  tile = stack.pop();
695
-
696
617
  for (const child of tile.children) {
697
618
  stack.push(child);
698
619
  }
699
-
700
620
  if (tile !== root) {
701
621
  this._destroyTile(tile);
702
622
  }
703
623
  }
704
-
705
624
  root.children = [];
706
625
  }
707
-
708
626
  _destroyTile(tile) {
709
627
  this._cache.unloadTile(this, tile);
710
-
711
628
  this._unloadTile(tile);
712
-
713
629
  tile.destroy();
714
630
  }
715
-
716
631
  _initializeTiles3DTileset(tilesetJson) {
717
632
  this.asset = tilesetJson.asset;
718
-
719
633
  if (!this.asset) {
720
634
  throw new Error('Tileset must have an asset property.');
721
635
  }
722
-
723
636
  if (this.asset.version !== '0.0' && this.asset.version !== '1.0') {
724
637
  throw new Error('The tileset must be 3D Tiles version 0.0 or 1.0.');
725
638
  }
@@ -732,34 +645,28 @@ export default class Tileset3D {
732
645
  attributions: this.options.attributions || []
733
646
  };
734
647
  this.description = this.options.description || '';
648
+
735
649
  this.properties = tilesetJson.properties;
736
650
  this.geometricError = tilesetJson.geometricError;
737
651
  this._extensionsUsed = tilesetJson.extensionsUsed;
738
652
  this.extras = tilesetJson.extras;
739
653
  }
740
-
741
654
  _initializeI3STileset() {
742
655
  if (this.loadOptions.i3s && 'token' in this.loadOptions.i3s) {
743
656
  this._queryParams.token = this.loadOptions.i3s.token;
744
657
  }
745
658
  }
746
-
747
659
  }
748
-
749
660
  function getQueryParamString(queryParams) {
750
661
  const queryParamStrings = [];
751
-
752
662
  for (const key of Object.keys(queryParams)) {
753
663
  queryParamStrings.push("".concat(key, "=").concat(queryParams[key]));
754
664
  }
755
-
756
665
  switch (queryParamStrings.length) {
757
666
  case 0:
758
667
  return '';
759
-
760
668
  case 1:
761
669
  return "?".concat(queryParamStrings[0]);
762
-
763
670
  default:
764
671
  return "?".concat(queryParamStrings.join('&'));
765
672
  }