@cesium/engine 2.1.0 → 2.2.0

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 (193) hide show
  1. package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-379015ef.js} +1 -1
  2. package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-57f2b24f.js} +1 -1
  3. package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-ecabfc78.js} +1 -1
  4. package/Build/Workers/{Color-f85df1be.js → Color-14d1a36d.js} +1 -1
  5. package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-048c3c14.js} +1 -1
  6. package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-520c8619.js} +1 -1
  7. package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-119068b8.js} +1 -1
  8. package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-2dfc3523.js} +1 -1
  9. package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-0a1e0170.js} +1 -1
  10. package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-c5251669.js} +1 -1
  11. package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-d10a5221.js} +1 -1
  12. package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-7039a0ae.js} +1 -1
  13. package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-857186be.js} +1 -1
  14. package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-400fa1b7.js} +2 -2
  15. package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-7a2de5c6.js} +1 -1
  16. package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-916636fa.js} +1 -1
  17. package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-b4d02d4d.js} +1 -1
  18. package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-96fe1752.js} +5 -3
  19. package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-931f1ec6.js} +1 -1
  20. package/Build/Workers/{PolygonPipeline-d31ff61c.js → PolygonPipeline-32fc92cc.js} +1 -1
  21. package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-6d5c63e5.js} +1 -1
  22. package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-f068c1fb.js} +1 -1
  23. package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-879f996a.js} +1 -1
  24. package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-2d6f36f3.js} +1 -1
  25. package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-82882059.js} +1 -1
  26. package/Build/Workers/{Transforms-9e9df299.js → Transforms-9052372a.js} +6 -5
  27. package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-db7a64fb.js} +1 -1
  28. package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
  29. package/Build/Workers/combineGeometry.js +1 -1
  30. package/Build/Workers/createBoxGeometry.js +1 -1
  31. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  32. package/Build/Workers/createCircleGeometry.js +1 -1
  33. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  34. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  35. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  36. package/Build/Workers/createCorridorGeometry.js +1 -1
  37. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  38. package/Build/Workers/createCylinderGeometry.js +1 -1
  39. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  40. package/Build/Workers/createEllipseGeometry.js +1 -1
  41. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  42. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  43. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  44. package/Build/Workers/createFrustumGeometry.js +1 -1
  45. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  46. package/Build/Workers/createGeometry.js +1 -1
  47. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  48. package/Build/Workers/createPlaneGeometry.js +1 -1
  49. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  50. package/Build/Workers/createPolygonGeometry.js +1 -1
  51. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  52. package/Build/Workers/createPolylineGeometry.js +1 -1
  53. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  54. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  55. package/Build/Workers/createRectangleGeometry.js +1 -1
  56. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  57. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  58. package/Build/Workers/createSphereGeometry.js +1 -1
  59. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  60. package/Build/Workers/createVectorTileGeometries.js +1 -1
  61. package/Build/Workers/createVectorTilePolygons.js +1 -1
  62. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  63. package/Build/Workers/createVerticesFromHeightmap.js +1 -1
  64. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
  65. package/Build/Workers/createWallGeometry.js +1 -1
  66. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  67. package/Build/Workers/package.js +1 -1
  68. package/Build/Workers/transferTypedArrayTest.js +1 -1
  69. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  70. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +291 -191
  71. package/Source/Core/CesiumTerrainProvider.js +571 -434
  72. package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
  73. package/Source/Core/EllipsoidTerrainProvider.js +17 -10
  74. package/Source/Core/FrustumGeometry.js +1 -1
  75. package/Source/Core/GoogleEarthEnterpriseMetadata.js +86 -34
  76. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +119 -82
  77. package/Source/Core/Ion.js +1 -1
  78. package/Source/Core/IonResource.js +14 -3
  79. package/Source/Core/OrientedBoundingBox.js +4 -2
  80. package/Source/Core/RequestScheduler.js +1 -1
  81. package/Source/Core/Resource.js +2 -2
  82. package/Source/Core/TerrainProvider.js +9 -14
  83. package/Source/Core/TileProviderError.js +8 -8
  84. package/Source/Core/VRTheWorldTerrainProvider.js +193 -124
  85. package/Source/Core/buildModuleUrl.js +4 -3
  86. package/Source/Core/createWorldTerrain.js +20 -2
  87. package/Source/Core/createWorldTerrainAsync.js +48 -0
  88. package/Source/Core/sampleTerrain.js +9 -10
  89. package/Source/Core/sampleTerrainMostDetailed.js +66 -72
  90. package/Source/DataSources/Cesium3DTilesetVisualizer.js +37 -26
  91. package/Source/DataSources/Entity.js +6 -1
  92. package/Source/DataSources/ModelVisualizer.js +99 -31
  93. package/Source/DataSources/PolygonGraphics.js +1 -1
  94. package/Source/Scene/ArcGisMapServerImageryProvider.js +552 -376
  95. package/Source/Scene/BingMapsImageryProvider.js +511 -305
  96. package/Source/Scene/BufferLoader.js +29 -34
  97. package/Source/Scene/Cesium3DTile.js +388 -251
  98. package/Source/Scene/Cesium3DTileBatchTable.js +2 -2
  99. package/Source/Scene/Cesium3DTileContent.js +16 -0
  100. package/Source/Scene/Cesium3DTileContentFactory.js +4 -4
  101. package/Source/Scene/Cesium3DTilePass.js +8 -11
  102. package/Source/Scene/Cesium3DTileStyleEngine.js +1 -1
  103. package/Source/Scene/Cesium3DTilesVoxelProvider.js +225 -117
  104. package/Source/Scene/Cesium3DTileset.js +755 -481
  105. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +301 -0
  106. package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +33 -46
  107. package/Source/Scene/Cesium3DTilesetSkipTraversal.js +421 -0
  108. package/Source/Scene/Cesium3DTilesetTraversal.js +219 -671
  109. package/Source/Scene/ClassificationPrimitive.js +7 -0
  110. package/Source/Scene/Composite3DTileContent.js +69 -26
  111. package/Source/Scene/CreditDisplay.js +20 -4
  112. package/Source/Scene/DepthPlane.js +1 -1
  113. package/Source/Scene/Empty3DTileContent.js +31 -1
  114. package/Source/Scene/Geometry3DTileContent.js +47 -7
  115. package/Source/Scene/Globe.js +5 -1
  116. package/Source/Scene/GlobeSurfaceTile.js +2 -1
  117. package/Source/Scene/GlobeSurfaceTileProvider.js +50 -27
  118. package/Source/Scene/GltfBufferViewLoader.js +47 -91
  119. package/Source/Scene/GltfDracoLoader.js +110 -112
  120. package/Source/Scene/GltfImageLoader.js +71 -78
  121. package/Source/Scene/GltfIndexBufferLoader.js +108 -121
  122. package/Source/Scene/GltfJsonLoader.js +75 -74
  123. package/Source/Scene/GltfLoader.js +392 -280
  124. package/Source/Scene/GltfStructuralMetadataLoader.js +109 -110
  125. package/Source/Scene/GltfTextureLoader.js +97 -96
  126. package/Source/Scene/GltfVertexBufferLoader.js +128 -133
  127. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +353 -225
  128. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +491 -331
  129. package/Source/Scene/GridImageryProvider.js +267 -104
  130. package/Source/Scene/GroundPolylinePrimitive.js +12 -1
  131. package/Source/Scene/GroundPrimitive.js +8 -1
  132. package/Source/Scene/I3SDataProvider.js +214 -113
  133. package/Source/Scene/I3SFeature.js +7 -6
  134. package/Source/Scene/I3SLayer.js +26 -37
  135. package/Source/Scene/I3SNode.js +59 -66
  136. package/Source/Scene/Imagery.js +6 -1
  137. package/Source/Scene/ImageryLayer.js +299 -48
  138. package/Source/Scene/ImageryLayerCollection.js +26 -0
  139. package/Source/Scene/ImageryProvider.js +129 -111
  140. package/Source/Scene/Implicit3DTileContent.js +72 -23
  141. package/Source/Scene/ImplicitSubtree.js +66 -45
  142. package/Source/Scene/IonImageryProvider.js +471 -264
  143. package/Source/Scene/MapboxImageryProvider.js +272 -112
  144. package/Source/Scene/MapboxStyleImageryProvider.js +270 -111
  145. package/Source/Scene/MetadataSchemaLoader.js +26 -36
  146. package/Source/Scene/Model/B3dmLoader.js +42 -46
  147. package/Source/Scene/Model/GeoJsonLoader.js +8 -32
  148. package/Source/Scene/Model/I3dmLoader.js +48 -74
  149. package/Source/Scene/Model/Model.js +470 -132
  150. package/Source/Scene/Model/Model3DTileContent.js +83 -31
  151. package/Source/Scene/Model/ModelAnimationCollection.js +3 -3
  152. package/Source/Scene/Model/ModelDrawCommand.js +15 -26
  153. package/Source/Scene/Model/ModelUtility.js +16 -16
  154. package/Source/Scene/Model/PntsLoader.js +27 -32
  155. package/Source/Scene/Multiple3DTileContent.js +134 -115
  156. package/Source/Scene/PointCloud.js +11 -19
  157. package/Source/Scene/Primitive.js +20 -0
  158. package/Source/Scene/QuadtreePrimitive.js +2 -0
  159. package/Source/Scene/QuadtreeTileProvider.js +4 -8
  160. package/Source/Scene/ResourceCache.js +47 -105
  161. package/Source/Scene/ResourceCacheStatistics.js +24 -58
  162. package/Source/Scene/ResourceLoader.js +5 -17
  163. package/Source/Scene/ResourceLoaderState.js +12 -4
  164. package/Source/Scene/Scene.js +65 -0
  165. package/Source/Scene/ScreenSpaceCameraController.js +1 -1
  166. package/Source/Scene/SingleTileImageryProvider.js +382 -209
  167. package/Source/Scene/Terrain.js +196 -0
  168. package/Source/Scene/TileCoordinatesImageryProvider.js +267 -104
  169. package/Source/Scene/TileMapServiceImageryProvider.js +177 -85
  170. package/Source/Scene/Tileset3DTileContent.js +47 -5
  171. package/Source/Scene/TimeDynamicPointCloud.js +15 -2
  172. package/Source/Scene/UrlTemplateImageryProvider.js +343 -215
  173. package/Source/Scene/Vector3DTileClampedPolylines.js +96 -84
  174. package/Source/Scene/Vector3DTileContent.js +47 -22
  175. package/Source/Scene/Vector3DTileGeometry.js +57 -52
  176. package/Source/Scene/Vector3DTilePoints.js +72 -68
  177. package/Source/Scene/Vector3DTilePolygons.js +118 -117
  178. package/Source/Scene/Vector3DTilePolylines.js +86 -82
  179. package/Source/Scene/Vector3DTilePrimitive.js +0 -1
  180. package/Source/Scene/VoxelContent.js +61 -63
  181. package/Source/Scene/VoxelPrimitive.js +39 -91
  182. package/Source/Scene/VoxelProvider.js +2 -2
  183. package/Source/Scene/WebMapServiceImageryProvider.js +272 -111
  184. package/Source/Scene/WebMapTileServiceImageryProvider.js +270 -107
  185. package/Source/Scene/computeFlyToLocationForRectangle.js +33 -37
  186. package/Source/Scene/createOsmBuildings.js +6 -0
  187. package/Source/Scene/createOsmBuildingsAsync.js +82 -0
  188. package/Source/Scene/createWorldImagery.js +14 -5
  189. package/Source/Scene/createWorldImageryAsync.js +39 -0
  190. package/Source/Widget/CesiumWidget.js +55 -27
  191. package/index.d.ts +2158 -1395
  192. package/index.js +58 -51
  193. package/package.json +1 -1
@@ -79,7 +79,6 @@ function GltfIndexBufferLoader(options) {
79
79
  this._buffer = undefined;
80
80
  this._state = ResourceLoaderState.UNLOADED;
81
81
  this._promise = undefined;
82
- this._process = function (loader, frameState) {};
83
82
  }
84
83
 
85
84
  if (defined(Object.create)) {
@@ -88,20 +87,6 @@ if (defined(Object.create)) {
88
87
  }
89
88
 
90
89
  Object.defineProperties(GltfIndexBufferLoader.prototype, {
91
- /**
92
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource has not yet started loading.
93
- *
94
- * @memberof GltfIndexBufferLoader.prototype
95
- *
96
- * @type {Promise<GltfIndexBufferLoader>|undefined}
97
- * @readonly
98
- * @private
99
- */
100
- promise: {
101
- get: function () {
102
- return this._promise;
103
- },
104
- },
105
90
  /**
106
91
  * The cache key of the resource.
107
92
  *
@@ -168,135 +153,72 @@ const scratchIndexBufferJob = new CreateIndexBufferJob();
168
153
  * @returns {Promise<GltfIndexBufferLoader>} A promise which resolves to the loader when the resource loading is completed.
169
154
  * @private
170
155
  */
171
- GltfIndexBufferLoader.prototype.load = function () {
172
- let promise;
156
+ GltfIndexBufferLoader.prototype.load = async function () {
157
+ if (defined(this._promise)) {
158
+ return this._promise;
159
+ }
173
160
 
174
161
  if (defined(this._draco)) {
175
- promise = loadFromDraco(this);
176
- } else {
177
- promise = loadFromBufferView(this);
162
+ this._promise = loadFromDraco(this);
163
+ return this._promise;
178
164
  }
179
165
 
180
- const that = this;
181
- const processPromise = new Promise(function (resolve) {
182
- that._process = function (loader, frameState) {
183
- if (loader._state === ResourceLoaderState.READY) {
184
- return;
185
- }
186
-
187
- const typedArray = loader._typedArray;
188
- const indexDatatype = loader._indexDatatype;
189
-
190
- if (defined(loader._dracoLoader)) {
191
- loader._dracoLoader.process(frameState);
192
- }
193
-
194
- if (defined(loader._bufferViewLoader)) {
195
- loader._bufferViewLoader.process(frameState);
196
- }
197
-
198
- if (!defined(typedArray)) {
199
- // Buffer view hasn't been loaded yet
200
- return;
201
- }
202
-
203
- let buffer;
204
- if (loader._loadBuffer && loader._asynchronous) {
205
- const indexBufferJob = scratchIndexBufferJob;
206
- indexBufferJob.set(typedArray, indexDatatype, frameState.context);
207
- const jobScheduler = frameState.jobScheduler;
208
- if (!jobScheduler.execute(indexBufferJob, JobType.BUFFER)) {
209
- // Job scheduler is full. Try again next frame.
210
- return;
211
- }
212
- buffer = indexBufferJob.buffer;
213
- } else if (loader._loadBuffer) {
214
- buffer = createIndexBuffer(
215
- typedArray,
216
- indexDatatype,
217
- frameState.context
218
- );
219
- }
220
-
221
- // Unload everything except the index buffer and/or typed array.
222
- loader.unload();
223
-
224
- loader._buffer = buffer;
225
- loader._typedArray = loader._loadTypedArray ? typedArray : undefined;
226
- loader._state = ResourceLoaderState.READY;
227
- resolve(loader);
228
- };
229
- });
230
-
231
- this._promise = promise
232
- .then(function () {
233
- if (that.isDestroyed()) {
234
- return;
235
- }
236
-
237
- return processPromise;
238
- })
239
- .catch(function (error) {
240
- if (that.isDestroyed()) {
241
- return;
242
- }
243
-
244
- return handleError(that, error);
245
- });
246
-
166
+ this._promise = loadFromBufferView(this);
247
167
  return this._promise;
248
168
  };
249
169
 
250
- function loadFromDraco(indexBufferLoader) {
170
+ async function loadFromDraco(indexBufferLoader) {
171
+ indexBufferLoader._state = ResourceLoaderState.LOADING;
251
172
  const resourceCache = indexBufferLoader._resourceCache;
252
- const dracoLoader = resourceCache.loadDraco({
253
- gltf: indexBufferLoader._gltf,
254
- draco: indexBufferLoader._draco,
255
- gltfResource: indexBufferLoader._gltfResource,
256
- baseResource: indexBufferLoader._baseResource,
257
- });
258
173
 
259
- indexBufferLoader._dracoLoader = dracoLoader;
260
- indexBufferLoader._state = ResourceLoaderState.LOADING;
174
+ try {
175
+ const dracoLoader = resourceCache.getDracoLoader({
176
+ gltf: indexBufferLoader._gltf,
177
+ draco: indexBufferLoader._draco,
178
+ gltfResource: indexBufferLoader._gltfResource,
179
+ baseResource: indexBufferLoader._baseResource,
180
+ });
181
+ indexBufferLoader._dracoLoader = dracoLoader;
182
+ await dracoLoader.load();
261
183
 
262
- return dracoLoader.promise.then(function () {
263
184
  if (indexBufferLoader.isDestroyed()) {
264
185
  return;
265
186
  }
187
+
266
188
  // Now wait for process() to run to finish loading
267
- const typedArray = dracoLoader.decodedData.indices.typedArray;
268
- indexBufferLoader._typedArray = typedArray;
269
- // The index datatype may be a smaller datatype after draco decode
270
- indexBufferLoader._indexDatatype = ComponentDatatype.fromTypedArray(
271
- typedArray
272
- );
273
- indexBufferLoader._state = ResourceLoaderState.PROCESSING;
189
+ indexBufferLoader._state = ResourceLoaderState.LOADED;
274
190
  return indexBufferLoader;
275
- });
191
+ } catch (error) {
192
+ if (indexBufferLoader.isDestroyed()) {
193
+ return;
194
+ }
195
+
196
+ handleError(indexBufferLoader, error);
197
+ }
276
198
  }
277
199
 
278
- function loadFromBufferView(indexBufferLoader) {
200
+ async function loadFromBufferView(indexBufferLoader) {
279
201
  const gltf = indexBufferLoader._gltf;
280
202
  const accessorId = indexBufferLoader._accessorId;
281
203
  const accessor = gltf.accessors[accessorId];
282
204
  const bufferViewId = accessor.bufferView;
283
205
 
284
- const resourceCache = indexBufferLoader._resourceCache;
285
- const bufferViewLoader = resourceCache.loadBufferView({
286
- gltf: gltf,
287
- bufferViewId: bufferViewId,
288
- gltfResource: indexBufferLoader._gltfResource,
289
- baseResource: indexBufferLoader._baseResource,
290
- });
291
206
  indexBufferLoader._state = ResourceLoaderState.LOADING;
292
- indexBufferLoader._bufferViewLoader = bufferViewLoader;
207
+ const resourceCache = indexBufferLoader._resourceCache;
208
+ try {
209
+ const bufferViewLoader = resourceCache.getBufferViewLoader({
210
+ gltf: gltf,
211
+ bufferViewId: bufferViewId,
212
+ gltfResource: indexBufferLoader._gltfResource,
213
+ baseResource: indexBufferLoader._baseResource,
214
+ });
215
+ indexBufferLoader._bufferViewLoader = bufferViewLoader;
293
216
 
294
- return bufferViewLoader.promise.then(function () {
217
+ await bufferViewLoader.load();
295
218
  if (indexBufferLoader.isDestroyed()) {
296
219
  return;
297
220
  }
298
221
 
299
- // Now wait for process() to run to finish loading
300
222
  const bufferViewTypedArray = bufferViewLoader.typedArray;
301
223
  indexBufferLoader._typedArray = createIndicesTypedArray(
302
224
  indexBufferLoader,
@@ -304,7 +226,13 @@ function loadFromBufferView(indexBufferLoader) {
304
226
  );
305
227
  indexBufferLoader._state = ResourceLoaderState.PROCESSING;
306
228
  return indexBufferLoader;
307
- });
229
+ } catch (error) {
230
+ if (indexBufferLoader.isDestroyed()) {
231
+ return;
232
+ }
233
+
234
+ handleError(indexBufferLoader, error);
235
+ }
308
236
  }
309
237
 
310
238
  function createIndicesTypedArray(indexBufferLoader, bufferViewTypedArray) {
@@ -346,8 +274,7 @@ function handleError(indexBufferLoader, error) {
346
274
  indexBufferLoader.unload();
347
275
  indexBufferLoader._state = ResourceLoaderState.FAILED;
348
276
  const errorMessage = "Failed to load index buffer";
349
- error = indexBufferLoader.getError(errorMessage, error);
350
- return Promise.reject(error);
277
+ throw indexBufferLoader.getError(errorMessage, error);
351
278
  }
352
279
 
353
280
  function CreateIndexBufferJob() {
@@ -397,7 +324,64 @@ GltfIndexBufferLoader.prototype.process = function (frameState) {
397
324
  Check.typeOf.object("frameState", frameState);
398
325
  //>>includeEnd('debug');
399
326
 
400
- return this._process(this, frameState);
327
+ if (this._state === ResourceLoaderState.READY) {
328
+ return true;
329
+ }
330
+
331
+ if (
332
+ this._state !== ResourceLoaderState.LOADED &&
333
+ this._state !== ResourceLoaderState.PROCESSING
334
+ ) {
335
+ return false;
336
+ }
337
+
338
+ let typedArray = this._typedArray;
339
+ let indexDatatype = this._indexDatatype;
340
+
341
+ if (defined(this._dracoLoader)) {
342
+ try {
343
+ const ready = this._dracoLoader.process(frameState);
344
+ if (ready) {
345
+ const dracoLoader = this._dracoLoader;
346
+ typedArray = dracoLoader.decodedData.indices.typedArray;
347
+ this._typedArray = typedArray;
348
+ // The index datatype may be a smaller datatype after draco decode
349
+ indexDatatype = ComponentDatatype.fromTypedArray(typedArray);
350
+ this._indexDatatype = indexDatatype;
351
+ }
352
+ } catch (error) {
353
+ handleError(this, error);
354
+ }
355
+ }
356
+
357
+ if (!defined(typedArray)) {
358
+ // Buffer view hasn't been loaded yet
359
+ return false;
360
+ }
361
+
362
+ let buffer;
363
+ if (this._loadBuffer && this._asynchronous) {
364
+ const indexBufferJob = scratchIndexBufferJob;
365
+ indexBufferJob.set(typedArray, indexDatatype, frameState.context);
366
+ const jobScheduler = frameState.jobScheduler;
367
+ if (!jobScheduler.execute(indexBufferJob, JobType.BUFFER)) {
368
+ // Job scheduler is full. Try again next frame.
369
+ return false;
370
+ }
371
+ buffer = indexBufferJob.buffer;
372
+ } else if (this._loadBuffer) {
373
+ buffer = createIndexBuffer(typedArray, indexDatatype, frameState.context);
374
+ }
375
+
376
+ // Unload everything except the index buffer and/or typed array.
377
+ this.unload();
378
+
379
+ this._buffer = buffer;
380
+ this._typedArray = this._loadTypedArray ? typedArray : undefined;
381
+ this._state = ResourceLoaderState.READY;
382
+
383
+ this._resourceCache.statistics.addGeometryLoader(this);
384
+ return true;
401
385
  };
402
386
 
403
387
  /**
@@ -411,7 +395,10 @@ GltfIndexBufferLoader.prototype.unload = function () {
411
395
 
412
396
  const resourceCache = this._resourceCache;
413
397
 
414
- if (defined(this._bufferViewLoader)) {
398
+ if (
399
+ defined(this._bufferViewLoader) &&
400
+ !this._bufferViewLoader.isDestroyed()
401
+ ) {
415
402
  resourceCache.unload(this._bufferViewLoader);
416
403
  }
417
404
 
@@ -68,20 +68,6 @@ if (defined(Object.create)) {
68
68
  }
69
69
 
70
70
  Object.defineProperties(GltfJsonLoader.prototype, {
71
- /**
72
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource hasn't started loading.
73
- *
74
- * @memberof GltfJsonLoader.prototype
75
- *
76
- * @type {Promise<GltfJsonLoader>|undefined}
77
- * @readonly
78
- * @private
79
- */
80
- promise: {
81
- get: function () {
82
- return this._promise;
83
- },
84
- },
85
71
  /**
86
72
  * The cache key of the resource.
87
73
  *
@@ -117,56 +103,55 @@ Object.defineProperties(GltfJsonLoader.prototype, {
117
103
  * @returns {Promise<GltfJsonLoader>} A promise which resolves to the loader when the resource loading is completed.
118
104
  * @private
119
105
  */
120
- GltfJsonLoader.prototype.load = function () {
106
+ GltfJsonLoader.prototype.load = async function () {
107
+ if (defined(this._promise)) {
108
+ return this._promise;
109
+ }
110
+
121
111
  this._state = ResourceLoaderState.LOADING;
122
112
 
123
- let processPromise;
124
113
  if (defined(this._gltfJson)) {
125
- processPromise = processGltfJson(this, this._gltfJson);
126
- } else if (defined(this._typedArray)) {
127
- processPromise = processGltfTypedArray(this, this._typedArray);
128
- } else {
129
- processPromise = loadFromUri(this);
114
+ this._promise = processGltfJson(this, this._gltfJson);
115
+ return this._promise;
130
116
  }
131
117
 
132
- const that = this;
133
- this._promise = processPromise
134
- .then(function (gltf) {
135
- if (that.isDestroyed()) {
136
- return;
137
- }
138
- that._gltf = gltf;
139
- that._state = ResourceLoaderState.READY;
140
- return that;
141
- })
142
- .catch(function (error) {
143
- if (that.isDestroyed()) {
144
- return;
145
- }
146
- return handleError(that, error);
147
- });
118
+ if (defined(this._typedArray)) {
119
+ this._promise = processGltfTypedArray(this, this._typedArray);
120
+ return this._promise;
121
+ }
148
122
 
123
+ this._promise = loadFromUri(this);
149
124
  return this._promise;
150
125
  };
151
126
 
152
- function loadFromUri(gltfJsonLoader) {
153
- return gltfJsonLoader._fetchGltf().then(function (arrayBuffer) {
127
+ async function loadFromUri(gltfJsonLoader) {
128
+ let typedArray;
129
+ try {
130
+ const arrayBuffer = await gltfJsonLoader._fetchGltf();
154
131
  if (gltfJsonLoader.isDestroyed()) {
155
132
  return;
156
133
  }
157
- const typedArray = new Uint8Array(arrayBuffer);
158
- return processGltfTypedArray(gltfJsonLoader, typedArray);
159
- });
134
+
135
+ typedArray = new Uint8Array(arrayBuffer);
136
+ } catch (error) {
137
+ if (gltfJsonLoader.isDestroyed()) {
138
+ return;
139
+ }
140
+
141
+ handleError(gltfJsonLoader, error);
142
+ }
143
+
144
+ return processGltfTypedArray(gltfJsonLoader, typedArray);
160
145
  }
161
146
 
162
147
  function handleError(gltfJsonLoader, error) {
163
148
  gltfJsonLoader.unload();
164
149
  gltfJsonLoader._state = ResourceLoaderState.FAILED;
165
150
  const errorMessage = `Failed to load glTF: ${gltfJsonLoader._gltfResource.url}`;
166
- return Promise.reject(gltfJsonLoader.getError(errorMessage, error));
151
+ throw gltfJsonLoader.getError(errorMessage, error);
167
152
  }
168
153
 
169
- function upgradeVersion(gltfJsonLoader, gltf) {
154
+ async function upgradeVersion(gltfJsonLoader, gltf) {
170
155
  if (
171
156
  defined(gltf.asset) &&
172
157
  gltf.asset.version === "2.0" &&
@@ -188,23 +173,25 @@ function upgradeVersion(gltfJsonLoader, gltf) {
188
173
  url: buffer.uri,
189
174
  });
190
175
  const resourceCache = gltfJsonLoader._resourceCache;
191
- const bufferLoader = resourceCache.loadExternalBuffer({
176
+ const bufferLoader = resourceCache.getExternalBufferLoader({
192
177
  resource: resource,
193
178
  });
194
-
195
179
  gltfJsonLoader._bufferLoaders.push(bufferLoader);
196
180
 
197
181
  promises.push(
198
- bufferLoader.promise.then(function (bufferLoader) {
182
+ bufferLoader.load().then(function () {
183
+ if (bufferLoader.isDestroyed()) {
184
+ return;
185
+ }
186
+
199
187
  buffer.extras._pipeline.source = bufferLoader.typedArray;
200
188
  })
201
189
  );
202
190
  }
203
191
  });
204
192
 
205
- return Promise.all(promises).then(function () {
206
- updateVersion(gltf);
207
- });
193
+ await Promise.all(promises);
194
+ updateVersion(gltf);
208
195
  }
209
196
 
210
197
  function decodeDataUris(gltf) {
@@ -233,42 +220,54 @@ function loadEmbeddedBuffers(gltfJsonLoader, gltf) {
233
220
  const source = buffer.extras._pipeline.source;
234
221
  if (defined(source) && !defined(buffer.uri)) {
235
222
  const resourceCache = gltfJsonLoader._resourceCache;
236
- const bufferLoader = resourceCache.loadEmbeddedBuffer({
223
+ const bufferLoader = resourceCache.getEmbeddedBufferLoader({
237
224
  parentResource: gltfJsonLoader._gltfResource,
238
225
  bufferId: bufferId,
239
226
  typedArray: source,
240
227
  });
241
-
242
228
  gltfJsonLoader._bufferLoaders.push(bufferLoader);
243
- promises.push(bufferLoader.promise);
229
+ promises.push(bufferLoader.load());
244
230
  }
245
231
  });
246
232
  return Promise.all(promises);
247
233
  }
248
234
 
249
- function processGltfJson(gltfJsonLoader, gltf) {
250
- addPipelineExtras(gltf);
251
-
252
- return decodeDataUris(gltf)
253
- .then(function () {
254
- return upgradeVersion(gltfJsonLoader, gltf);
255
- })
256
- .then(function () {
257
- addDefaults(gltf);
258
- return loadEmbeddedBuffers(gltfJsonLoader, gltf);
259
- })
260
- .then(function () {
261
- removePipelineExtras(gltf);
262
- return gltf;
263
- });
235
+ async function processGltfJson(gltfJsonLoader, gltf) {
236
+ try {
237
+ addPipelineExtras(gltf);
238
+
239
+ await decodeDataUris(gltf);
240
+ await upgradeVersion(gltfJsonLoader, gltf);
241
+ addDefaults(gltf);
242
+ await loadEmbeddedBuffers(gltfJsonLoader, gltf);
243
+ removePipelineExtras(gltf);
244
+
245
+ gltfJsonLoader._gltf = gltf;
246
+ gltfJsonLoader._state = ResourceLoaderState.READY;
247
+ return gltfJsonLoader;
248
+ } catch (error) {
249
+ if (gltfJsonLoader.isDestroyed()) {
250
+ return;
251
+ }
252
+
253
+ handleError(gltfJsonLoader, error);
254
+ }
264
255
  }
265
256
 
266
- function processGltfTypedArray(gltfJsonLoader, typedArray) {
257
+ async function processGltfTypedArray(gltfJsonLoader, typedArray) {
267
258
  let gltf;
268
- if (getMagic(typedArray) === "glTF") {
269
- gltf = parseGlb(typedArray);
270
- } else {
271
- gltf = getJsonFromTypedArray(typedArray);
259
+ try {
260
+ if (getMagic(typedArray) === "glTF") {
261
+ gltf = parseGlb(typedArray);
262
+ } else {
263
+ gltf = getJsonFromTypedArray(typedArray);
264
+ }
265
+ } catch (error) {
266
+ if (gltfJsonLoader.isDestroyed()) {
267
+ return;
268
+ }
269
+
270
+ handleError(gltfJsonLoader, error);
272
271
  }
273
272
 
274
273
  return processGltfJson(gltfJsonLoader, gltf);
@@ -282,7 +281,9 @@ GltfJsonLoader.prototype.unload = function () {
282
281
  const bufferLoaders = this._bufferLoaders;
283
282
  const bufferLoadersLength = bufferLoaders.length;
284
283
  for (let i = 0; i < bufferLoadersLength; ++i) {
285
- this._resourceCache.unload(bufferLoaders[i]);
284
+ bufferLoaders[i] =
285
+ !bufferLoaders[i].isDestroyed() &&
286
+ this._resourceCache.unload(bufferLoaders[i]);
286
287
  }
287
288
  this._bufferLoaders.length = 0;
288
289