@cesium/engine 2.1.0 → 2.3.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 (240) hide show
  1. package/Build/Workers/{AttributeCompression-8a5a065e.js → AttributeCompression-f9f6c717.js} +1 -1
  2. package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-31fadcf0.js} +1 -1
  3. package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-995f0079.js} +1 -1
  4. package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-7eb1af60.js} +1 -1
  5. package/Build/Workers/{Color-f85df1be.js → Color-2dc49658.js} +1 -1
  6. package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-d7d972d6.js} +1 -1
  7. package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-1f5ef7b3.js} +1 -1
  8. package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-23c67a6c.js} +1 -1
  9. package/Build/Workers/{CylinderGeometryLibrary-135b0858.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
  10. package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-37014da4.js} +1 -1
  11. package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-92ab6b1e.js} +1 -1
  12. package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-12b6fef5.js} +1 -1
  13. package/Build/Workers/{EllipsoidGeodesic-dcff5cbd.js → EllipsoidGeodesic-5b3623dc.js} +1 -1
  14. package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-508da15c.js} +1 -1
  15. package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-40d97455.js} +1 -1
  16. package/Build/Workers/{EllipsoidRhumbLine-b672d507.js → EllipsoidRhumbLine-ef872433.js} +1 -1
  17. package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-46d4d9c2.js} +1 -1
  18. package/Build/Workers/{EncodedCartesian3-e8bbca36.js → EncodedCartesian3-57415c8a.js} +1 -1
  19. package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-38605e69.js} +32 -4
  20. package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-a466e9c7.js} +1 -1
  21. package/Build/Workers/{GeometryInstance-3fb607b7.js → GeometryInstance-34d9e21e.js} +1 -1
  22. package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-dcf79306.js} +1 -1
  23. package/Build/Workers/{IndexDatatype-b8f3e09d.js → IndexDatatype-2643aa47.js} +1 -1
  24. package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-88c49b2e.js} +1 -1
  25. package/Build/Workers/{Math-dad82b4d.js → Math-0a2ac845.js} +12 -2
  26. package/Build/Workers/{Matrix2-1e403d0e.js → Matrix2-e1298525.js} +1 -1
  27. package/Build/Workers/{Matrix3-fa806b97.js → Matrix3-41c58dde.js} +1 -1
  28. package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-2dd47921.js} +5 -3
  29. package/Build/Workers/{Plane-c27e1ac6.js → Plane-4c3d403b.js} +1 -1
  30. package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-59126025.js} +1 -1
  31. package/Build/Workers/PolygonPipeline-1fe328c0.js +1344 -0
  32. package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-896735cc.js} +1 -1
  33. package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-9c0639f7.js} +1 -1
  34. package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-fc1a47ff.js} +1 -1
  35. package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-a23c9ebe.js} +1 -1
  36. package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-51b8b33b.js} +1 -1
  37. package/Build/Workers/Transforms-bc45e707.js +14699 -0
  38. package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-007e9883.js} +1 -1
  39. package/Build/Workers/{WebMercatorProjection-76a3fcc0.js → WebMercatorProjection-13ed1a6e.js} +1 -1
  40. package/Build/Workers/{arrayRemoveDuplicates-fac118a8.js → arrayRemoveDuplicates-d2061e85.js} +1 -1
  41. package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
  42. package/Build/Workers/combineGeometry.js +1 -1
  43. package/Build/Workers/createBoxGeometry.js +1 -1
  44. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  45. package/Build/Workers/createCircleGeometry.js +1 -1
  46. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  47. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  48. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  49. package/Build/Workers/createCorridorGeometry.js +1 -1
  50. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  51. package/Build/Workers/createCylinderGeometry.js +1 -1
  52. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  53. package/Build/Workers/createEllipseGeometry.js +1 -1
  54. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  55. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  56. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  57. package/Build/Workers/createFrustumGeometry.js +1 -1
  58. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  59. package/Build/Workers/createGeometry.js +1 -1
  60. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  61. package/Build/Workers/createPlaneGeometry.js +1 -1
  62. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  63. package/Build/Workers/createPolygonGeometry.js +1 -1
  64. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  65. package/Build/Workers/createPolylineGeometry.js +1 -1
  66. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  67. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  68. package/Build/Workers/createRectangleGeometry.js +1 -1
  69. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  70. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  71. package/Build/Workers/createSphereGeometry.js +1 -1
  72. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  73. package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
  74. package/Build/Workers/createVectorTileGeometries.js +1 -1
  75. package/Build/Workers/createVectorTilePoints.js +1 -1
  76. package/Build/Workers/createVectorTilePolygons.js +1 -1
  77. package/Build/Workers/createVectorTilePolylines.js +1 -1
  78. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  79. package/Build/Workers/createVerticesFromHeightmap.js +5 -8
  80. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
  81. package/Build/Workers/createWallGeometry.js +1 -1
  82. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  83. package/Build/Workers/decodeDraco.js +1 -1
  84. package/Build/Workers/decodeI3S.js +1 -1
  85. package/Build/Workers/package.js +1 -1
  86. package/Build/Workers/transferTypedArrayTest.js +1 -1
  87. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  88. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +291 -191
  89. package/Source/Core/BingMapsGeocoderService.js +19 -1
  90. package/Source/Core/CartographicGeocoderService.js +15 -0
  91. package/Source/Core/CesiumTerrainProvider.js +571 -434
  92. package/Source/Core/Credit.js +1 -1
  93. package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
  94. package/Source/Core/EllipsoidTerrainProvider.js +17 -10
  95. package/Source/Core/FrustumGeometry.js +4 -3
  96. package/Source/Core/GeocoderService.js +32 -1
  97. package/Source/Core/GoogleEarthEnterpriseMetadata.js +86 -34
  98. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +119 -82
  99. package/Source/Core/Ion.js +1 -1
  100. package/Source/Core/IonGeocoderService.js +17 -2
  101. package/Source/Core/IonResource.js +14 -3
  102. package/Source/Core/OpenCageGeocoderService.js +18 -1
  103. package/Source/Core/OrientedBoundingBox.js +4 -2
  104. package/Source/Core/OrthographicFrustum.js +13 -0
  105. package/Source/Core/PeliasGeocoderService.js +14 -1
  106. package/Source/Core/PerspectiveFrustum.js +14 -0
  107. package/Source/Core/Request.js +3 -2
  108. package/Source/Core/RequestScheduler.js +10 -5
  109. package/Source/Core/Resource.js +230 -236
  110. package/Source/Core/TerrainProvider.js +9 -14
  111. package/Source/Core/TileProviderError.js +8 -8
  112. package/Source/Core/VRTheWorldTerrainProvider.js +193 -124
  113. package/Source/Core/buildModuleUrl.js +4 -3
  114. package/Source/Core/createWorldTerrain.js +20 -2
  115. package/Source/Core/createWorldTerrainAsync.js +48 -0
  116. package/Source/Core/sampleTerrain.js +9 -10
  117. package/Source/Core/sampleTerrainMostDetailed.js +66 -72
  118. package/Source/DataSources/Cesium3DTilesetVisualizer.js +37 -26
  119. package/Source/DataSources/DataSourceDisplay.js +2 -2
  120. package/Source/DataSources/Entity.js +6 -1
  121. package/Source/DataSources/EntityCluster.js +126 -128
  122. package/Source/DataSources/ModelVisualizer.js +104 -34
  123. package/Source/DataSources/PolygonGraphics.js +1 -1
  124. package/Source/Renderer/UniformState.js +3 -2
  125. package/Source/Renderer/demodernizeShader.js +5 -5
  126. package/Source/Scene/ArcGisBaseMapType.js +12 -0
  127. package/Source/Scene/ArcGisMapServerImageryProvider.js +694 -376
  128. package/Source/Scene/ArcGisMapService.js +83 -0
  129. package/Source/Scene/BingMapsImageryProvider.js +511 -305
  130. package/Source/Scene/BufferLoader.js +29 -34
  131. package/Source/Scene/Camera.js +8 -7
  132. package/Source/Scene/Cesium3DTile.js +392 -254
  133. package/Source/Scene/Cesium3DTileBatchTable.js +2 -2
  134. package/Source/Scene/Cesium3DTileContent.js +16 -0
  135. package/Source/Scene/Cesium3DTileContentFactory.js +4 -4
  136. package/Source/Scene/Cesium3DTilePass.js +8 -11
  137. package/Source/Scene/Cesium3DTileStyleEngine.js +1 -1
  138. package/Source/Scene/Cesium3DTilesVoxelProvider.js +225 -117
  139. package/Source/Scene/Cesium3DTileset.js +756 -482
  140. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +301 -0
  141. package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +33 -46
  142. package/Source/Scene/Cesium3DTilesetSkipTraversal.js +421 -0
  143. package/Source/Scene/Cesium3DTilesetTraversal.js +219 -671
  144. package/Source/Scene/ClassificationPrimitive.js +7 -0
  145. package/Source/Scene/Composite3DTileContent.js +69 -26
  146. package/Source/Scene/CreditDisplay.js +132 -20
  147. package/Source/Scene/DepthPlane.js +1 -1
  148. package/Source/Scene/Empty3DTileContent.js +31 -1
  149. package/Source/Scene/Geometry3DTileContent.js +47 -7
  150. package/Source/Scene/Globe.js +5 -1
  151. package/Source/Scene/GlobeSurfaceTile.js +2 -1
  152. package/Source/Scene/GlobeSurfaceTileProvider.js +53 -30
  153. package/Source/Scene/GltfBufferViewLoader.js +47 -91
  154. package/Source/Scene/GltfDracoLoader.js +110 -112
  155. package/Source/Scene/GltfImageLoader.js +71 -78
  156. package/Source/Scene/GltfIndexBufferLoader.js +108 -121
  157. package/Source/Scene/GltfJsonLoader.js +87 -74
  158. package/Source/Scene/GltfLoader.js +381 -300
  159. package/Source/Scene/GltfStructuralMetadataLoader.js +109 -110
  160. package/Source/Scene/GltfTextureLoader.js +97 -96
  161. package/Source/Scene/GltfVertexBufferLoader.js +128 -133
  162. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +353 -225
  163. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +491 -331
  164. package/Source/Scene/GridImageryProvider.js +267 -104
  165. package/Source/Scene/GroundPolylinePrimitive.js +12 -1
  166. package/Source/Scene/GroundPrimitive.js +8 -1
  167. package/Source/Scene/I3SDataProvider.js +214 -113
  168. package/Source/Scene/I3SFeature.js +7 -6
  169. package/Source/Scene/I3SLayer.js +26 -37
  170. package/Source/Scene/I3SNode.js +59 -66
  171. package/Source/Scene/Imagery.js +6 -1
  172. package/Source/Scene/ImageryLayer.js +299 -48
  173. package/Source/Scene/ImageryLayerCollection.js +26 -0
  174. package/Source/Scene/ImageryProvider.js +129 -111
  175. package/Source/Scene/Implicit3DTileContent.js +72 -23
  176. package/Source/Scene/ImplicitSubtree.js +66 -45
  177. package/Source/Scene/IonImageryProvider.js +482 -275
  178. package/Source/Scene/MapboxImageryProvider.js +272 -112
  179. package/Source/Scene/MapboxStyleImageryProvider.js +270 -111
  180. package/Source/Scene/MetadataSchemaLoader.js +26 -36
  181. package/Source/Scene/Model/B3dmLoader.js +42 -46
  182. package/Source/Scene/Model/GeoJsonLoader.js +8 -32
  183. package/Source/Scene/Model/I3dmLoader.js +48 -74
  184. package/Source/Scene/Model/MaterialPipelineStage.js +12 -12
  185. package/Source/Scene/Model/Model.js +514 -135
  186. package/Source/Scene/Model/Model3DTileContent.js +83 -31
  187. package/Source/Scene/Model/ModelAnimationCollection.js +3 -3
  188. package/Source/Scene/Model/ModelDrawCommand.js +15 -26
  189. package/Source/Scene/Model/ModelUtility.js +16 -16
  190. package/Source/Scene/Model/PntsLoader.js +27 -32
  191. package/Source/Scene/Model/UniformType.js +1 -1
  192. package/Source/Scene/Multiple3DTileContent.js +134 -115
  193. package/Source/Scene/Picking.js +3 -2
  194. package/Source/Scene/PointCloud.js +11 -19
  195. package/Source/Scene/Primitive.js +20 -0
  196. package/Source/Scene/QuadtreePrimitive.js +5 -2
  197. package/Source/Scene/QuadtreeTileProvider.js +4 -8
  198. package/Source/Scene/ResourceCache.js +47 -105
  199. package/Source/Scene/ResourceCacheStatistics.js +24 -58
  200. package/Source/Scene/ResourceLoader.js +5 -17
  201. package/Source/Scene/ResourceLoaderState.js +12 -4
  202. package/Source/Scene/Scene.js +65 -0
  203. package/Source/Scene/SceneTransforms.js +3 -2
  204. package/Source/Scene/ScreenSpaceCameraController.js +2 -2
  205. package/Source/Scene/SingleTileImageryProvider.js +382 -209
  206. package/Source/Scene/Terrain.js +196 -0
  207. package/Source/Scene/TileCoordinatesImageryProvider.js +267 -104
  208. package/Source/Scene/TileMapServiceImageryProvider.js +177 -85
  209. package/Source/Scene/Tileset3DTileContent.js +47 -5
  210. package/Source/Scene/TimeDynamicPointCloud.js +15 -2
  211. package/Source/Scene/UrlTemplateImageryProvider.js +343 -215
  212. package/Source/Scene/Vector3DTileClampedPolylines.js +96 -84
  213. package/Source/Scene/Vector3DTileContent.js +47 -22
  214. package/Source/Scene/Vector3DTileGeometry.js +57 -52
  215. package/Source/Scene/Vector3DTilePoints.js +97 -81
  216. package/Source/Scene/Vector3DTilePolygons.js +118 -117
  217. package/Source/Scene/Vector3DTilePolylines.js +86 -82
  218. package/Source/Scene/Vector3DTilePrimitive.js +0 -1
  219. package/Source/Scene/VoxelContent.js +61 -63
  220. package/Source/Scene/VoxelPrimitive.js +39 -91
  221. package/Source/Scene/VoxelProvider.js +2 -2
  222. package/Source/Scene/WebMapServiceImageryProvider.js +272 -111
  223. package/Source/Scene/WebMapTileServiceImageryProvider.js +270 -107
  224. package/Source/Scene/computeFlyToLocationForRectangle.js +33 -37
  225. package/Source/Scene/createOsmBuildings.js +6 -0
  226. package/Source/Scene/createOsmBuildingsAsync.js +82 -0
  227. package/Source/Scene/createWorldImagery.js +14 -5
  228. package/Source/Scene/createWorldImageryAsync.js +39 -0
  229. package/Source/Shaders/AtmosphereCommon.glsl +51 -8
  230. package/Source/Shaders/AtmosphereCommon.js +51 -8
  231. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +1 -1
  232. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +1 -1
  233. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +3 -3
  234. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +3 -3
  235. package/Source/Widget/CesiumWidget.js +67 -27
  236. package/index.d.ts +2429 -1475
  237. package/index.js +324 -315
  238. package/package.json +4 -4
  239. package/Build/Workers/PolygonPipeline-d31ff61c.js +0 -1345
  240. package/Build/Workers/Transforms-9e9df299.js +0 -14714
@@ -127,19 +127,19 @@ function GlobeSurfaceTileProvider(options) {
127
127
 
128
128
  this._errorEvent = new Event();
129
129
 
130
- this._imageryLayers.layerAdded.addEventListener(
130
+ this._removeLayerAddedListener = this._imageryLayers.layerAdded.addEventListener(
131
131
  GlobeSurfaceTileProvider.prototype._onLayerAdded,
132
132
  this
133
133
  );
134
- this._imageryLayers.layerRemoved.addEventListener(
134
+ this._removeLayerRemovedListener = this._imageryLayers.layerRemoved.addEventListener(
135
135
  GlobeSurfaceTileProvider.prototype._onLayerRemoved,
136
136
  this
137
137
  );
138
- this._imageryLayers.layerMoved.addEventListener(
138
+ this._removeLayerMovedListener = this._imageryLayers.layerMoved.addEventListener(
139
139
  GlobeSurfaceTileProvider.prototype._onLayerMoved,
140
140
  this
141
141
  );
142
- this._imageryLayers.layerShownOrHidden.addEventListener(
142
+ this._removeLayerShownListener = this._imageryLayers.layerShownOrHidden.addEventListener(
143
143
  GlobeSurfaceTileProvider.prototype._onLayerShownOrHidden,
144
144
  this
145
145
  );
@@ -233,20 +233,24 @@ Object.defineProperties(GlobeSurfaceTileProvider.prototype, {
233
233
  * Gets a value indicating whether or not the provider is ready for use.
234
234
  * @memberof GlobeSurfaceTileProvider.prototype
235
235
  * @type {boolean}
236
+ * @deprecated
236
237
  */
237
238
  ready: {
238
239
  get: function () {
239
240
  return (
240
- this._terrainProvider.ready &&
241
+ defined(this._terrainProvider) &&
242
+ // TerrainProvider.ready is deprecated; This is here for backwards compatibility
243
+ this._terrainProvider._ready &&
241
244
  (this._imageryLayers.length === 0 ||
242
- this._imageryLayers.get(0).imageryProvider.ready)
245
+ // ImageryProvider.ready is deprecated; This is here for backwards compatibility
246
+ (this._imageryLayers.get(0).ready &&
247
+ this._imageryLayers.get(0).imageryProvider._ready))
243
248
  );
244
249
  },
245
250
  },
246
251
 
247
252
  /**
248
- * Gets the tiling scheme used by the provider. This property should
249
- * not be accessed before {@link GlobeSurfaceTileProvider#ready} returns true.
253
+ * Gets the tiling scheme used by the provider.
250
254
  * @memberof GlobeSurfaceTileProvider.prototype
251
255
  * @type {TilingScheme}
252
256
  */
@@ -294,12 +298,6 @@ Object.defineProperties(GlobeSurfaceTileProvider.prototype, {
294
298
  return;
295
299
  }
296
300
 
297
- //>>includeStart('debug', pragmas.debug);
298
- if (!defined(terrainProvider)) {
299
- throw new DeveloperError("terrainProvider is required.");
300
- }
301
- //>>includeEnd('debug');
302
-
303
301
  this._terrainProvider = terrainProvider;
304
302
 
305
303
  if (defined(this._quadtree)) {
@@ -349,17 +347,24 @@ GlobeSurfaceTileProvider.prototype.update = function (frameState) {
349
347
  function updateCredits(surface, frameState) {
350
348
  const creditDisplay = frameState.creditDisplay;
351
349
  if (
352
- surface._terrainProvider.ready &&
350
+ defined(surface._terrainProvider) &&
351
+ // ready is deprecated; This is here for backwards compatibility
352
+ surface._terrainProvider._ready &&
353
353
  defined(surface._terrainProvider.credit)
354
354
  ) {
355
- creditDisplay.addCredit(surface._terrainProvider.credit);
355
+ creditDisplay.addCreditToNextFrame(surface._terrainProvider.credit);
356
356
  }
357
357
 
358
358
  const imageryLayers = surface._imageryLayers;
359
359
  for (let i = 0, len = imageryLayers.length; i < len; ++i) {
360
- const imageryProvider = imageryLayers.get(i).imageryProvider;
361
- if (imageryProvider.ready && defined(imageryProvider.credit)) {
362
- creditDisplay.addCredit(imageryProvider.credit);
360
+ const layer = imageryLayers.get(i);
361
+ // ImageryProvider.ready is deprecated; This is here for backwards compatibility
362
+ if (
363
+ layer.ready &&
364
+ layer.imageryProvider._ready &&
365
+ defined(layer.imageryProvider.credit)
366
+ ) {
367
+ creditDisplay.addCreditToNextFrame(layer.imageryProvider.credit);
363
368
  }
364
369
  }
365
370
  }
@@ -562,8 +567,7 @@ GlobeSurfaceTileProvider.prototype.cancelReprojections = function () {
562
567
  };
563
568
 
564
569
  /**
565
- * Gets the maximum geometric error allowed in a tile at a given level, in meters. This function should not be
566
- * called before {@link GlobeSurfaceTileProvider#ready} returns true.
570
+ * Gets the maximum geometric error allowed in a tile at a given level, in meters.
567
571
  *
568
572
  * @param {number} level The tile level for which to get the maximum geometric error.
569
573
  * @returns {number} The maximum geometric error in meters.
@@ -571,18 +575,19 @@ GlobeSurfaceTileProvider.prototype.cancelReprojections = function () {
571
575
  GlobeSurfaceTileProvider.prototype.getLevelMaximumGeometricError = function (
572
576
  level
573
577
  ) {
578
+ if (!defined(this._terrainProvider)) {
579
+ return 0;
580
+ }
581
+
574
582
  return this._terrainProvider.getLevelMaximumGeometricError(level);
575
583
  };
576
584
 
577
585
  /**
578
586
  * Loads, or continues loading, a given tile. This function will continue to be called
579
- * until {@link QuadtreeTile#state} is no longer {@link QuadtreeTileLoadState#LOADING}. This function should
580
- * not be called before {@link GlobeSurfaceTileProvider#ready} returns true.
587
+ * until {@link QuadtreeTile#state} is no longer {@link QuadtreeTileLoadState#LOADING}.
581
588
  *
582
589
  * @param {FrameState} frameState The frame state.
583
590
  * @param {QuadtreeTile} tile The tile to load.
584
- *
585
- * @exception {DeveloperError} <code>loadTile</code> must not be called before the tile provider is ready.
586
591
  */
587
592
  GlobeSurfaceTileProvider.prototype.loadTile = function (frameState, tile) {
588
593
  // We don't want to load imagery until we're certain that the terrain tiles are actually visible.
@@ -1384,6 +1389,14 @@ GlobeSurfaceTileProvider.prototype.isDestroyed = function () {
1384
1389
  GlobeSurfaceTileProvider.prototype.destroy = function () {
1385
1390
  this._tileProvider = this._tileProvider && this._tileProvider.destroy();
1386
1391
  this._clippingPlanes = this._clippingPlanes && this._clippingPlanes.destroy();
1392
+ this._removeLayerAddedListener =
1393
+ this._removeLayerAddedListener && this._removeLayerAddedListener();
1394
+ this._removeLayerRemovedListener =
1395
+ this._removeLayerRemovedListener && this._removeLayerRemovedListener();
1396
+ this._removeLayerMovedListener =
1397
+ this._removeLayerMovedListener && this._removeLayerMovedListener();
1398
+ this._removeLayerShownListener =
1399
+ this._removeLayerShownListener && this._removeLayerShownListener();
1387
1400
 
1388
1401
  return destroyObject(this);
1389
1402
  };
@@ -1436,13 +1449,16 @@ function getTileReadyCallback(tileImageriesToFree, layer, terrainProvider) {
1436
1449
  }
1437
1450
 
1438
1451
  GlobeSurfaceTileProvider.prototype._onLayerAdded = function (layer, index) {
1452
+ if (this.isDestroyed()) {
1453
+ return;
1454
+ }
1455
+
1439
1456
  if (layer.show) {
1440
1457
  const terrainProvider = this._terrainProvider;
1441
1458
 
1442
1459
  const that = this;
1443
- const imageryProvider = layer.imageryProvider;
1444
1460
  const tileImageryUpdatedEvent = this._imageryLayersUpdatedEvent;
1445
- imageryProvider._reload = function () {
1461
+ const reloadFunction = function () {
1446
1462
  // Clear the layer's cache
1447
1463
  layer._imageryCache = {};
1448
1464
 
@@ -1504,6 +1520,11 @@ GlobeSurfaceTileProvider.prototype._onLayerAdded = function (layer, index) {
1504
1520
  });
1505
1521
  };
1506
1522
 
1523
+ if (layer.ready) {
1524
+ const imageryProvider = layer.imageryProvider;
1525
+ imageryProvider._reload = reloadFunction;
1526
+ }
1527
+
1507
1528
  // create TileImageries for this layer for all previously loaded tiles
1508
1529
  this._quadtree.forEachLoadedTile(function (tile) {
1509
1530
  if (layer._createTileImagerySkeletons(tile, terrainProvider)) {
@@ -2077,7 +2098,7 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2077
2098
  tileCreditIndex < tileCreditLength;
2078
2099
  ++tileCreditIndex
2079
2100
  ) {
2080
- creditDisplay.addCredit(tileCredits[tileCreditIndex]);
2101
+ creditDisplay.addCreditToNextFrame(tileCredits[tileCreditIndex]);
2081
2102
  }
2082
2103
  }
2083
2104
 
@@ -2124,7 +2145,9 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2124
2145
  const oceanNormalMap = tileProvider.oceanNormalMap;
2125
2146
  const showOceanWaves = showReflectiveOcean && defined(oceanNormalMap);
2126
2147
  const hasVertexNormals =
2127
- tileProvider.terrainProvider.ready &&
2148
+ defined(tileProvider.terrainProvider) &&
2149
+ // ready is deprecated; This is here for backwards compatibility
2150
+ tileProvider.terrainProvider._ready &&
2128
2151
  tileProvider.terrainProvider.hasVertexNormals;
2129
2152
  const enableFog =
2130
2153
  frameState.fog.enabled && frameState.fog.renderable && !cameraUnderground;
@@ -2696,7 +2719,7 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2696
2719
  creditIndex < creditLength;
2697
2720
  ++creditIndex
2698
2721
  ) {
2699
- creditDisplay.addCredit(credits[creditIndex]);
2722
+ creditDisplay.addCreditToNextFrame(credits[creditIndex]);
2700
2723
  }
2701
2724
  }
2702
2725
 
@@ -87,7 +87,6 @@ function GltfBufferViewLoader(options) {
87
87
  this._typedArray = undefined;
88
88
  this._state = ResourceLoaderState.UNLOADED;
89
89
  this._promise = undefined;
90
- this._process = function (loader, frameState) {};
91
90
  }
92
91
 
93
92
  if (defined(Object.create)) {
@@ -96,20 +95,6 @@ if (defined(Object.create)) {
96
95
  }
97
96
 
98
97
  Object.defineProperties(GltfBufferViewLoader.prototype, {
99
- /**
100
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource hasn't started loading.
101
- *
102
- * @memberof GltfBufferViewLoader.prototype
103
- *
104
- * @type {Promise<GltfBufferViewLoader>|undefined}
105
- * @readonly
106
- * @private
107
- */
108
- promise: {
109
- get: function () {
110
- return this._promise;
111
- },
112
- },
113
98
  /**
114
99
  * The cache key of the resource.
115
100
  *
@@ -140,31 +125,28 @@ Object.defineProperties(GltfBufferViewLoader.prototype, {
140
125
  },
141
126
  });
142
127
 
143
- /**
144
- * Loads the resource.
145
- * @returns {Promise<GltfBufferViewLoader>} A promise which resolves to the loader when the resource loading is completed.
146
- * @private
147
- */
148
- GltfBufferViewLoader.prototype.load = function () {
149
- const bufferLoader = getBufferLoader(this);
150
- this._bufferLoader = bufferLoader;
151
- this._state = ResourceLoaderState.LOADING;
128
+ async function loadResources(loader) {
129
+ try {
130
+ const bufferLoader = getBufferLoader(loader);
131
+ loader._bufferLoader = bufferLoader;
132
+ await bufferLoader.load();
152
133
 
153
- const that = this;
154
- const bufferViewPromise = new Promise(function (resolve) {
155
- that._process = function (loader, frameState) {
156
- if (!loader._hasMeshopt) {
157
- return;
158
- }
134
+ if (loader.isDestroyed()) {
135
+ return;
136
+ }
159
137
 
160
- if (!defined(loader._typedArray)) {
161
- return;
162
- }
138
+ const bufferTypedArray = bufferLoader.typedArray;
139
+ const bufferViewTypedArray = new Uint8Array(
140
+ bufferTypedArray.buffer,
141
+ bufferTypedArray.byteOffset + loader._byteOffset,
142
+ loader._byteLength
143
+ );
163
144
 
164
- if (loader._state !== ResourceLoaderState.PROCESSING) {
165
- return;
166
- }
145
+ // Unload the buffer
146
+ loader.unload();
167
147
 
148
+ loader._typedArray = bufferViewTypedArray;
149
+ if (loader._hasMeshopt) {
168
150
  const count = loader._meshoptCount;
169
151
  const byteStride = loader._meshoptByteStride;
170
152
  const result = new Uint8Array(count * byteStride);
@@ -176,47 +158,35 @@ GltfBufferViewLoader.prototype.load = function () {
176
158
  loader._meshoptMode,
177
159
  loader._meshoptFilter
178
160
  );
179
-
180
161
  loader._typedArray = result;
181
- loader._state = ResourceLoaderState.READY;
182
- resolve(loader);
183
- };
184
- });
185
-
186
- this._promise = bufferLoader.promise
187
- .then(function () {
188
- if (that.isDestroyed()) {
189
- return;
190
- }
191
- const bufferTypedArray = bufferLoader.typedArray;
192
- const bufferViewTypedArray = new Uint8Array(
193
- bufferTypedArray.buffer,
194
- bufferTypedArray.byteOffset + that._byteOffset,
195
- that._byteLength
196
- );
197
-
198
- // Unload the buffer
199
- that.unload();
200
-
201
- that._typedArray = bufferViewTypedArray;
202
- if (that._hasMeshopt) {
203
- that._state = ResourceLoaderState.PROCESSING;
204
- return bufferViewPromise;
205
- }
162
+ }
163
+
164
+ loader._state = ResourceLoaderState.READY;
165
+ return loader;
166
+ } catch (error) {
167
+ if (loader.isDestroyed()) {
168
+ return;
169
+ }
170
+
171
+ loader.unload();
172
+ loader._state = ResourceLoaderState.FAILED;
173
+ const errorMessage = "Failed to load buffer view";
174
+ throw loader.getError(errorMessage, error);
175
+ }
176
+ }
206
177
 
207
- that._state = ResourceLoaderState.READY;
208
- return that;
209
- })
210
- .catch(function (error) {
211
- if (that.isDestroyed()) {
212
- return;
213
- }
214
- that.unload();
215
- that._state = ResourceLoaderState.FAILED;
216
- const errorMessage = "Failed to load buffer view";
217
- return Promise.reject(that.getError(errorMessage, error));
218
- });
178
+ /**
179
+ * Loads the resource.
180
+ * @returns {Promise<GltfBufferViewLoader>} A promise which resolves to the loader when the resource loading is completed.
181
+ * @private
182
+ */
183
+ GltfBufferViewLoader.prototype.load = async function () {
184
+ if (defined(this._promise)) {
185
+ return this._promise;
186
+ }
219
187
 
188
+ this._state = ResourceLoaderState.LOADING;
189
+ this._promise = loadResources(this);
220
190
  return this._promise;
221
191
  };
222
192
 
@@ -228,36 +198,22 @@ function getBufferLoader(bufferViewLoader) {
228
198
  const resource = baseResource.getDerivedResource({
229
199
  url: buffer.uri,
230
200
  });
231
- return resourceCache.loadExternalBuffer({
201
+ return resourceCache.getExternalBufferLoader({
232
202
  resource: resource,
233
203
  });
234
204
  }
235
- return resourceCache.loadEmbeddedBuffer({
205
+ return resourceCache.getEmbeddedBufferLoader({
236
206
  parentResource: bufferViewLoader._gltfResource,
237
207
  bufferId: bufferViewLoader._bufferId,
238
208
  });
239
209
  }
240
210
 
241
- /**
242
- * Processes the resources. For a BufferView that does not have the EXT_meshopt_compression extension, there
243
- * is no processing that needs to happen, so this function returns immediately.
244
- *
245
- * @param {FrameState} frameState The frame state.
246
- */
247
- GltfBufferViewLoader.prototype.process = function (frameState) {
248
- //>>includeStart('debug', pragmas.debug);
249
- Check.typeOf.object("frameState", frameState);
250
- //>>includeEnd('debug');
251
-
252
- return this._process(this, frameState);
253
- };
254
-
255
211
  /**
256
212
  * Unloads the resource.
257
213
  * @private
258
214
  */
259
215
  GltfBufferViewLoader.prototype.unload = function () {
260
- if (defined(this._bufferLoader)) {
216
+ if (defined(this._bufferLoader) && !this._bufferLoader.isDestroyed()) {
261
217
  this._resourceCache.unload(this._bufferLoader);
262
218
  }
263
219
 
@@ -54,7 +54,7 @@ function GltfDracoLoader(options) {
54
54
  this._decodedData = undefined;
55
55
  this._state = ResourceLoaderState.UNLOADED;
56
56
  this._promise = undefined;
57
- this._process = function (loader, frameState) {};
57
+ this._dracoError = undefined;
58
58
  }
59
59
 
60
60
  if (defined(Object.create)) {
@@ -63,20 +63,6 @@ if (defined(Object.create)) {
63
63
  }
64
64
 
65
65
  Object.defineProperties(GltfDracoLoader.prototype, {
66
- /**
67
- * A promise that resolves to the resource when the resource is ready.
68
- *
69
- * @memberof GltfDracoLoader.prototype
70
- *
71
- * @type {Promise<GltfDracoLoader>}
72
- * @readonly
73
- * @private
74
- */
75
- promise: {
76
- get: function () {
77
- return this._promise;
78
- },
79
- },
80
66
  /**
81
67
  * The cache key of the resource.
82
68
  *
@@ -107,107 +93,46 @@ Object.defineProperties(GltfDracoLoader.prototype, {
107
93
  },
108
94
  });
109
95
 
96
+ async function loadResources(loader) {
97
+ const resourceCache = loader._resourceCache;
98
+ try {
99
+ const bufferViewLoader = resourceCache.getBufferViewLoader({
100
+ gltf: loader._gltf,
101
+ bufferViewId: loader._draco.bufferView,
102
+ gltfResource: loader._gltfResource,
103
+ baseResource: loader._baseResource,
104
+ });
105
+ loader._bufferViewLoader = bufferViewLoader;
106
+ await bufferViewLoader.load();
107
+
108
+ if (loader.isDestroyed()) {
109
+ return;
110
+ }
111
+
112
+ loader._bufferViewTypedArray = bufferViewLoader.typedArray;
113
+ loader._state = ResourceLoaderState.PROCESSING;
114
+ return loader;
115
+ } catch (error) {
116
+ if (loader.isDestroyed()) {
117
+ return;
118
+ }
119
+
120
+ handleError(loader, error);
121
+ }
122
+ }
123
+
110
124
  /**
111
125
  * Loads the resource.
112
126
  * @returns {Promise<GltfDracoLoader>} A promise which resolves to the loader when the resource loading is completed.
113
127
  * @private
114
128
  */
115
- GltfDracoLoader.prototype.load = function () {
116
- const resourceCache = this._resourceCache;
117
- const bufferViewLoader = resourceCache.loadBufferView({
118
- gltf: this._gltf,
119
- bufferViewId: this._draco.bufferView,
120
- gltfResource: this._gltfResource,
121
- baseResource: this._baseResource,
122
- });
123
-
124
- this._bufferViewLoader = bufferViewLoader;
125
- this._state = ResourceLoaderState.LOADING;
126
- const that = this;
127
- const dracoPromise = new Promise(function (resolve, reject) {
128
- that._process = function (loader, frameState) {
129
- if (!defined(loader._bufferViewTypedArray)) {
130
- // Not ready to decode the Draco buffer
131
- return;
132
- }
133
-
134
- if (defined(loader._decodePromise)) {
135
- // Currently decoding
136
- return;
137
- }
138
-
139
- const draco = loader._draco;
140
- const gltf = loader._gltf;
141
- const bufferViews = gltf.bufferViews;
142
- const bufferViewId = draco.bufferView;
143
- const bufferView = bufferViews[bufferViewId];
144
- const compressedAttributes = draco.attributes;
145
-
146
- const decodeOptions = {
147
- // Need to make a copy of the typed array otherwise the underlying
148
- // ArrayBuffer may be accessed on both the worker and the main thread. This
149
- // leads to errors such as "ArrayBuffer at index 0 is already detached".
150
- // PERFORMANCE_IDEA: Look into SharedArrayBuffer to get around this.
151
- array: new Uint8Array(loader._bufferViewTypedArray),
152
- bufferView: bufferView,
153
- compressedAttributes: compressedAttributes,
154
- dequantizeInShader: true,
155
- };
156
-
157
- const decodePromise = DracoLoader.decodeBufferView(decodeOptions);
158
-
159
- if (!defined(decodePromise)) {
160
- // Cannot schedule task this frame
161
- return;
162
- }
163
-
164
- loader._decodePromise = decodePromise
165
- .then(function (results) {
166
- if (loader.isDestroyed()) {
167
- resolve();
168
- return;
169
- }
170
-
171
- // Unload everything except the decoded data
172
- loader.unload();
173
-
174
- loader._decodedData = {
175
- indices: results.indexArray,
176
- vertexAttributes: results.attributeData,
177
- };
178
- loader._state = ResourceLoaderState.READY;
179
- resolve(loader);
180
- })
181
- .catch(function (e) {
182
- if (loader.isDestroyed()) {
183
- resolve();
184
- return;
185
- }
186
-
187
- reject(e);
188
- });
189
- };
190
- });
191
-
192
- this._promise = bufferViewLoader.promise
193
- .then(function () {
194
- if (that.isDestroyed()) {
195
- return;
196
- }
197
- // Now wait for process() to run to finish loading
198
- that._bufferViewTypedArray = bufferViewLoader.typedArray;
199
- that._state = ResourceLoaderState.PROCESSING;
200
-
201
- return dracoPromise;
202
- })
203
- .catch(function (error) {
204
- if (that.isDestroyed()) {
205
- return;
206
- }
207
-
208
- return handleError(that, error);
209
- });
129
+ GltfDracoLoader.prototype.load = async function () {
130
+ if (defined(this._promise)) {
131
+ return this._promise;
132
+ }
210
133
 
134
+ this._state = ResourceLoaderState.LOADING;
135
+ this._promise = loadResources(this);
211
136
  return this._promise;
212
137
  };
213
138
 
@@ -215,7 +140,33 @@ function handleError(dracoLoader, error) {
215
140
  dracoLoader.unload();
216
141
  dracoLoader._state = ResourceLoaderState.FAILED;
217
142
  const errorMessage = "Failed to load Draco";
218
- return Promise.reject(dracoLoader.getError(errorMessage, error));
143
+ throw dracoLoader.getError(errorMessage, error);
144
+ }
145
+
146
+ async function processDecode(loader, decodePromise) {
147
+ try {
148
+ const results = await decodePromise;
149
+ if (loader.isDestroyed()) {
150
+ return;
151
+ }
152
+
153
+ // Unload everything except the decoded data
154
+ loader.unload();
155
+
156
+ loader._decodedData = {
157
+ indices: results.indexArray,
158
+ vertexAttributes: results.attributeData,
159
+ };
160
+ loader._state = ResourceLoaderState.READY;
161
+ return loader._baseResource;
162
+ } catch (error) {
163
+ if (loader.isDestroyed()) {
164
+ return;
165
+ }
166
+
167
+ // Capture this error so it can be thrown on the next `process` call
168
+ loader._dracoError = error;
169
+ }
219
170
  }
220
171
 
221
172
  /**
@@ -229,7 +180,54 @@ GltfDracoLoader.prototype.process = function (frameState) {
229
180
  Check.typeOf.object("frameState", frameState);
230
181
  //>>includeEnd('debug');
231
182
 
232
- return this._process(this, frameState);
183
+ if (this._state === ResourceLoaderState.READY) {
184
+ return true;
185
+ }
186
+
187
+ if (this._state !== ResourceLoaderState.PROCESSING) {
188
+ return false;
189
+ }
190
+
191
+ if (defined(this._dracoError)) {
192
+ handleError(this, this._dracoError);
193
+ }
194
+
195
+ if (!defined(this._bufferViewTypedArray)) {
196
+ // Not ready to decode the Draco buffer
197
+ return false;
198
+ }
199
+
200
+ if (defined(this._decodePromise)) {
201
+ // Currently decoding
202
+ return false;
203
+ }
204
+
205
+ const draco = this._draco;
206
+ const gltf = this._gltf;
207
+ const bufferViews = gltf.bufferViews;
208
+ const bufferViewId = draco.bufferView;
209
+ const bufferView = bufferViews[bufferViewId];
210
+ const compressedAttributes = draco.attributes;
211
+
212
+ const decodeOptions = {
213
+ // Need to make a copy of the typed array otherwise the underlying
214
+ // ArrayBuffer may be accessed on both the worker and the main thread. This
215
+ // leads to errors such as "ArrayBuffer at index 0 is already detached".
216
+ // PERFORMANCE_IDEA: Look into SharedArrayBuffer to get around this.
217
+ array: new Uint8Array(this._bufferViewTypedArray),
218
+ bufferView: bufferView,
219
+ compressedAttributes: compressedAttributes,
220
+ dequantizeInShader: true,
221
+ };
222
+
223
+ const decodePromise = DracoLoader.decodeBufferView(decodeOptions);
224
+
225
+ if (!defined(decodePromise)) {
226
+ // Cannot schedule task this frame
227
+ return false;
228
+ }
229
+
230
+ this._decodePromise = processDecode(this, decodePromise);
233
231
  };
234
232
 
235
233
  /**