@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
@@ -129,34 +129,17 @@ if (defined(Object.create)) {
129
129
 
130
130
  Object.defineProperties(B3dmLoader.prototype, {
131
131
  /**
132
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource hasn't started loading.
132
+ * true if textures are loaded, useful when incrementallyLoadTextures is true
133
133
  *
134
134
  * @memberof B3dmLoader.prototype
135
135
  *
136
- * @type {Promise<B3dmLoader>|undefined}
136
+ * @type {boolean}
137
137
  * @readonly
138
138
  * @private
139
139
  */
140
- promise: {
140
+ texturesLoaded: {
141
141
  get: function () {
142
- return this._promise;
143
- },
144
- },
145
-
146
- /**
147
- * A promise that resolves when all textures are loaded.
148
- * When <code>incrementallyLoadTextures</code> is true this may resolve after
149
- * <code>promise</code> resolves.
150
- *
151
- * @memberof B3dmLoader.prototype
152
- *
153
- * @type {Promise}
154
- * @readonly
155
- * @private
156
- */
157
- texturesLoadedPromise: {
158
- get: function () {
159
- return this._gltfLoader.texturesLoadedPromise;
142
+ return this._gltfLoader?.texturesLoaded;
160
143
  },
161
144
  },
162
145
  /**
@@ -196,6 +179,10 @@ Object.defineProperties(B3dmLoader.prototype, {
196
179
  * @private
197
180
  */
198
181
  B3dmLoader.prototype.load = function () {
182
+ if (defined(this._promise)) {
183
+ return this._promise;
184
+ }
185
+
199
186
  const b3dm = B3dmParser.parse(this._arrayBuffer, this._byteOffset);
200
187
 
201
188
  let batchLength = b3dm.batchLength;
@@ -246,37 +233,21 @@ B3dmLoader.prototype.load = function () {
246
233
  this._state = B3dmLoaderState.LOADING;
247
234
 
248
235
  const that = this;
249
- gltfLoader.load();
250
- this._promise = gltfLoader.promise
236
+ this._promise = gltfLoader
237
+ .load()
251
238
  .then(function () {
252
239
  if (that.isDestroyed()) {
253
240
  return;
254
241
  }
255
242
 
256
- const components = gltfLoader.components;
257
-
258
- // Combine the RTC_CENTER transform from the b3dm and the CESIUM_RTC
259
- // transform from the glTF. In practice usually only one or the
260
- // other is supplied. If they don't exist the transforms will
261
- // be identity matrices.
262
- components.transform = Matrix4.multiplyTransformation(
263
- that._transform,
264
- components.transform,
265
- components.transform
266
- );
267
- createStructuralMetadata(that, components);
268
- that._components = components;
269
-
270
- // Now that we have the parsed components, we can release the array buffer
271
- that._arrayBuffer = undefined;
272
-
273
- that._state = B3dmLoaderState.READY;
243
+ that._state = B3dmLoaderState.PROCESSING;
274
244
  return that;
275
245
  })
276
246
  .catch(function (error) {
277
247
  if (that.isDestroyed()) {
278
248
  return;
279
249
  }
250
+
280
251
  return handleError(that, error);
281
252
  });
282
253
 
@@ -296,13 +267,38 @@ B3dmLoader.prototype.process = function (frameState) {
296
267
  Check.typeOf.object("frameState", frameState);
297
268
  //>>includeEnd('debug');
298
269
 
299
- if (this._state === B3dmLoaderState.LOADING) {
300
- this._state = B3dmLoaderState.PROCESSING;
270
+ if (this._state === B3dmLoaderState.READY) {
271
+ return true;
272
+ }
273
+
274
+ if (this._state !== B3dmLoaderState.PROCESSING) {
275
+ return false;
301
276
  }
302
277
 
303
- if (this._state === B3dmLoaderState.PROCESSING) {
304
- this._gltfLoader.process(frameState);
278
+ const ready = this._gltfLoader.process(frameState);
279
+ if (!ready) {
280
+ return false;
305
281
  }
282
+
283
+ const components = this._gltfLoader.components;
284
+
285
+ // Combine the RTC_CENTER transform from the b3dm and the CESIUM_RTC
286
+ // transform from the glTF. In practice usually only one or the
287
+ // other is supplied. If they don't exist the transforms will
288
+ // be identity matrices.
289
+ components.transform = Matrix4.multiplyTransformation(
290
+ this._transform,
291
+ components.transform,
292
+ components.transform
293
+ );
294
+ createStructuralMetadata(this, components);
295
+ this._components = components;
296
+
297
+ // Now that we have the parsed components, we can release the array buffer
298
+ this._arrayBuffer = undefined;
299
+
300
+ this._state = B3dmLoaderState.READY;
301
+ return true;
306
302
  };
307
303
 
308
304
  function createStructuralMetadata(loader, components) {
@@ -368,7 +364,7 @@ function processNode(node) {
368
364
  }
369
365
 
370
366
  B3dmLoader.prototype.unload = function () {
371
- if (defined(this._gltfLoader)) {
367
+ if (defined(this._gltfLoader) && !this._gltfLoader.isDestroyed()) {
372
368
  this._gltfLoader.unload();
373
369
  }
374
370
 
@@ -48,8 +48,6 @@ function GeoJsonLoader(options) {
48
48
  //>>includeEnd('debug');
49
49
 
50
50
  this._geoJson = options.geoJson;
51
- this._promise = undefined;
52
- this._process = function (loader, frameState) {};
53
51
  this._components = undefined;
54
52
  }
55
53
 
@@ -59,20 +57,6 @@ if (defined(Object.create)) {
59
57
  }
60
58
 
61
59
  Object.defineProperties(GeoJsonLoader.prototype, {
62
- /**
63
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource has not yet started loading.
64
- *
65
- * @memberof GeoJsonLoader.prototype
66
- *
67
- * @type {Promise<GeoJsonLoader>|Undefined}
68
- * @readonly
69
- * @private
70
- */
71
- promise: {
72
- get: function () {
73
- return this._promise;
74
- },
75
- },
76
60
  /**
77
61
  * The cache key of the resource.
78
62
  *
@@ -109,21 +93,7 @@ Object.defineProperties(GeoJsonLoader.prototype, {
109
93
  * @private
110
94
  */
111
95
  GeoJsonLoader.prototype.load = function () {
112
- const loader = this;
113
- const promise = new Promise(function (resolve) {
114
- loader._process = function (loader, frameState) {
115
- if (defined(loader._components)) {
116
- return;
117
- }
118
-
119
- loader._components = parse(loader._geoJson, frameState);
120
- loader._geoJson = undefined;
121
- resolve(loader);
122
- };
123
- });
124
-
125
- this._promise = promise;
126
- return promise;
96
+ return Promise.resolve(this);
127
97
  };
128
98
 
129
99
  /**
@@ -137,7 +107,13 @@ GeoJsonLoader.prototype.process = function (frameState) {
137
107
  Check.typeOf.object("frameState", frameState);
138
108
  //>>includeEnd('debug');
139
109
 
140
- this._process(this, frameState);
110
+ if (defined(this._components)) {
111
+ return true;
112
+ }
113
+
114
+ this._components = parse(this._geoJson, frameState);
115
+ this._geoJson = undefined;
116
+ return true;
141
117
  };
142
118
 
143
119
  function ParsedFeature() {
@@ -116,9 +116,6 @@ function I3dmLoader(options) {
116
116
  this._promise = undefined;
117
117
 
118
118
  this._gltfLoader = undefined;
119
- this._gltfLoaderPromise = undefined;
120
- this._process = function (loader, frameState) {};
121
- this._postProcess = function (loader, frameState) {};
122
119
 
123
120
  // Instanced attributes are initially parsed as typed arrays, but if they
124
121
  // do not need to be further processed (e.g. turned into transform matrices),
@@ -140,34 +137,17 @@ if (defined(Object.create)) {
140
137
 
141
138
  Object.defineProperties(I3dmLoader.prototype, {
142
139
  /**
143
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource hasn't started loading.
140
+ * true if textures are loaded, useful when incrementallyLoadTextures is true
144
141
  *
145
- * @memberof I3dmLoader.prototype
146
- *
147
- * @type {Promise<I3dmLoader>|undefined}
148
- * @readonly
149
- * @private
150
- */
151
- promise: {
152
- get: function () {
153
- return this._promise;
154
- },
155
- },
156
-
157
- /**
158
- * A promise that resolves when all textures are loaded.
159
- * When <code>incrementallyLoadTextures</code> is true this may resolve after
160
- * <code>promise</code> resolves.
142
+ * @memberof I3dmLoader.prototype
161
143
  *
162
- * @memberof I3dmLoader.prototype
163
- *
164
- * @type {Promise}
144
+ * @type {boolean}
165
145
  * @readonly
166
146
  * @private
167
147
  */
168
- texturesLoadedPromise: {
148
+ texturesLoaded: {
169
149
  get: function () {
170
- return this._gltfLoader.texturesLoadedPromise;
150
+ return this._gltfLoader?.texturesLoaded;
171
151
  },
172
152
  },
173
153
  /**
@@ -208,6 +188,10 @@ Object.defineProperties(I3dmLoader.prototype, {
208
188
  * @private
209
189
  */
210
190
  I3dmLoader.prototype.load = function () {
191
+ if (defined(this._promise)) {
192
+ return this._promise;
193
+ }
194
+
211
195
  // Parse the i3dm into its various sections.
212
196
  const i3dm = I3dmParser.parse(this._arrayBuffer, this._byteOffset);
213
197
 
@@ -282,53 +266,21 @@ I3dmLoader.prototype.load = function () {
282
266
  this._gltfLoader = gltfLoader;
283
267
  this._state = I3dmLoaderState.LOADING;
284
268
 
285
- gltfLoader.load();
286
-
287
- const that = this;
288
- const processPromise = new Promise(function (resolve) {
289
- that._process = function (loader, frameState) {
290
- loader._gltfLoader.process(frameState);
291
- };
292
-
293
- that._postProcess = function (loader, frameState) {
294
- const gltfLoader = loader._gltfLoader;
295
- const components = gltfLoader.components;
296
-
297
- // Combine the RTC_CENTER transform from the i3dm and the CESIUM_RTC
298
- // transform from the glTF. In practice CESIUM_RTC is not set for
299
- // instanced models but multiply the transforms just in case.
300
- components.transform = Matrix4.multiplyTransformation(
301
- loader._transform,
302
- components.transform,
303
- components.transform
304
- );
305
-
306
- createInstances(loader, components, frameState);
307
- createStructuralMetadata(loader, components);
308
- loader._components = components;
309
-
310
- // Now that we have the parsed components, we can release the array buffer
311
- loader._arrayBuffer = undefined;
312
-
313
- loader._state = I3dmLoaderState.READY;
314
- resolve(loader);
315
- };
316
- });
317
-
318
- this._promise = gltfLoader.promise
319
- .then(function () {
320
- if (that.isDestroyed()) {
269
+ this._promise = gltfLoader
270
+ .load()
271
+ .then(() => {
272
+ if (this.isDestroyed()) {
321
273
  return;
322
274
  }
323
- that._state = I3dmLoaderState.POST_PROCESSING;
324
275
 
325
- return processPromise;
276
+ this._state = I3dmLoaderState.PROCESSING;
277
+ return this;
326
278
  })
327
- .catch(function (error) {
328
- if (that.isDestroyed()) {
279
+ .catch((error) => {
280
+ if (this.isDestroyed()) {
329
281
  return;
330
282
  }
331
- return handleError(that, error);
283
+ throw handleError(this, error);
332
284
  });
333
285
 
334
286
  return this._promise;
@@ -338,8 +290,7 @@ function handleError(i3dmLoader, error) {
338
290
  i3dmLoader.unload();
339
291
  i3dmLoader._state = I3dmLoaderState.FAILED;
340
292
  const errorMessage = "Failed to load i3dm";
341
- error = i3dmLoader.getError(errorMessage, error);
342
- return Promise.reject(error);
293
+ return i3dmLoader.getError(errorMessage, error);
343
294
  }
344
295
 
345
296
  I3dmLoader.prototype.process = function (frameState) {
@@ -347,17 +298,40 @@ I3dmLoader.prototype.process = function (frameState) {
347
298
  Check.typeOf.object("frameState", frameState);
348
299
  //>>includeEnd('debug');
349
300
 
350
- if (this._state === I3dmLoaderState.LOADING) {
351
- this._state = I3dmLoaderState.PROCESSING;
301
+ if (this._state === I3dmLoaderState.READY) {
302
+ return true;
352
303
  }
353
304
 
305
+ const gltfLoader = this._gltfLoader;
306
+ let ready = false;
354
307
  if (this._state === I3dmLoaderState.PROCESSING) {
355
- this._process(this, frameState);
308
+ ready = gltfLoader.process(frameState);
356
309
  }
357
310
 
358
- if (this._state === I3dmLoaderState.POST_PROCESSING) {
359
- this._postProcess(this, frameState);
311
+ if (!ready) {
312
+ return false;
360
313
  }
314
+
315
+ const components = gltfLoader.components;
316
+
317
+ // Combine the RTC_CENTER transform from the i3dm and the CESIUM_RTC
318
+ // transform from the glTF. In practice CESIUM_RTC is not set for
319
+ // instanced models but multiply the transforms just in case.
320
+ components.transform = Matrix4.multiplyTransformation(
321
+ this._transform,
322
+ components.transform,
323
+ components.transform
324
+ );
325
+
326
+ createInstances(this, components, frameState);
327
+ createStructuralMetadata(this, components);
328
+ this._components = components;
329
+
330
+ // Now that we have the parsed components, we can release the array buffer
331
+ this._arrayBuffer = undefined;
332
+
333
+ this._state = I3dmLoaderState.READY;
334
+ return true;
361
335
  };
362
336
 
363
337
  function createStructuralMetadata(loader, components) {
@@ -895,7 +869,7 @@ I3dmLoader.prototype.isUnloaded = function () {
895
869
  };
896
870
 
897
871
  I3dmLoader.prototype.unload = function () {
898
- if (defined(this._gltfLoader)) {
872
+ if (defined(this._gltfLoader) && !this._gltfLoader.isDestroyed()) {
899
873
  this._gltfLoader.unload();
900
874
  }
901
875