@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
@@ -1,4 +1,5 @@
1
1
  import defined from "../Core/defined.js";
2
+ import deprecationWarning from "../Core/deprecationWarning.js";
2
3
  import destroyObject from "../Core/destroyObject.js";
3
4
  import DeveloperError from "../Core/DeveloperError.js";
4
5
  import Request from "../Core/Request.js";
@@ -54,6 +55,12 @@ function Multiple3DTileContent(tileset, tile, tilesetResource, contentsJson) {
54
55
  const contentCount = this._innerContentHeaders.length;
55
56
  this._arrayFetchPromises = new Array(contentCount);
56
57
  this._requests = new Array(contentCount);
58
+ this._ready = false;
59
+
60
+ this._resolveContent = undefined;
61
+ this._readyPromise = new Promise((resolve) => {
62
+ this._resolveContent = resolve;
63
+ });
57
64
 
58
65
  this._innerContentResources = new Array(contentCount);
59
66
  this._serverKeys = new Array(contentCount);
@@ -70,9 +77,6 @@ function Multiple3DTileContent(tileset, tile, tilesetResource, contentsJson) {
70
77
  this._innerContentResources[i] = contentResource;
71
78
  this._serverKeys[i] = serverKey;
72
79
  }
73
-
74
- // undefined until the first time requests are scheduled
75
- this._contentsFetchedPromise = undefined;
76
80
  }
77
81
 
78
82
  Object.defineProperties(Multiple3DTileContent.prototype, {
@@ -214,34 +218,41 @@ Object.defineProperties(Multiple3DTileContent.prototype, {
214
218
  },
215
219
 
216
220
  /**
217
- * Part of the {@link Cesium3DTileContent} interface. This behaves
218
- * differently for <code>Multiple3DTileContent</code>: it returns
219
- * undefined if the inner contents have not yet been created. This
220
- * is handled specially in {@link Cesium3DTile}.
221
+ * Returns true when the tile's content is ready to render; otherwise false
221
222
  *
222
223
  * @memberof Multiple3DTileContent.prototype
223
224
  *
224
- * @type {Promise<Cesium3DTileContent>|undefined}
225
+ * @type {boolean}
225
226
  * @readonly
226
- *
227
227
  * @private
228
228
  */
229
- readyPromise: {
229
+ ready: {
230
230
  get: function () {
231
- // The contents haven't been created yet, short-circuit. The tile
232
- // will handle this as a special case
233
231
  if (!this._contentsCreated) {
234
- return undefined;
232
+ return false;
235
233
  }
236
234
 
237
- const readyPromises = this._contents.map(function (content) {
238
- return content.readyPromise;
239
- });
235
+ return this._ready;
236
+ },
237
+ },
240
238
 
241
- const that = this;
242
- return Promise.all(readyPromises).then(function () {
243
- return that;
244
- });
239
+ /**
240
+ * Gets the promise that will be resolved when the tile's content is ready to render.
241
+ *
242
+ * @memberof Multiple3DTileContent.prototype
243
+ *
244
+ * @type {Promise<Multiple3DTileContent>}
245
+ * @readonly
246
+ * @deprecated
247
+ * @private
248
+ */
249
+ readyPromise: {
250
+ get: function () {
251
+ deprecationWarning(
252
+ "Multiple3DTileContent.readyPromise",
253
+ "Multiple3DTileContent.readyPromise was deprecated in CesiumJS 1.104. It will be removed in 1.107. Wait for Multiple3DTileContent.ready to return true instead."
254
+ );
255
+ return this._readyPromise;
245
256
  },
246
257
  },
247
258
 
@@ -338,21 +349,6 @@ Object.defineProperties(Multiple3DTileContent.prototype, {
338
349
  });
339
350
  },
340
351
  },
341
-
342
- /**
343
- * A promise that resolves when all of the inner contents have been fetched.
344
- * This promise is undefined until the first frame where all array buffer
345
- * requests have been scheduled.
346
- * @memberof Multiple3DTileContent.prototype
347
- *
348
- * @type {Promise}
349
- * @private
350
- */
351
- contentsFetchedPromise: {
352
- get: function () {
353
- return this._contentsFetchedPromise;
354
- },
355
- },
356
352
  });
357
353
 
358
354
  function updatePendingRequests(multipleContents, deltaRequestCount) {
@@ -386,7 +382,7 @@ function cancelPendingRequests(multipleContents, originalContentState) {
386
382
  * requests are successfully scheduled.
387
383
  * </p>
388
384
  *
389
- * @return {number} The number of attempted requests that were unable to be scheduled.
385
+ * @return {Promise<void>|undefined} A promise that resolves when the request completes, or undefined if there is no request needed, or the request cannot be scheduled.
390
386
  * @private
391
387
  */
392
388
  Multiple3DTileContent.prototype.requestInnerContents = function () {
@@ -395,26 +391,26 @@ Multiple3DTileContent.prototype.requestInnerContents = function () {
395
391
  // if we can schedule all the requests at once. If not, no requests are
396
392
  // scheduled
397
393
  if (!canScheduleAllRequests(this._serverKeys)) {
398
- return this._serverKeys.length;
394
+ this.tileset.statistics.numberOfAttemptedRequests += this._serverKeys.length;
395
+ return;
399
396
  }
400
397
 
401
398
  const contentHeaders = this._innerContentHeaders;
402
399
  updatePendingRequests(this, contentHeaders.length);
403
400
 
401
+ const originalCancelCount = this._cancelCount;
404
402
  for (let i = 0; i < contentHeaders.length; i++) {
405
403
  // The cancel count is needed to avoid a race condition where a content
406
404
  // is canceled multiple times.
407
405
  this._arrayFetchPromises[i] = requestInnerContent(
408
406
  this,
409
407
  i,
410
- this._cancelCount,
408
+ originalCancelCount,
411
409
  this._tile._contentState
412
410
  );
413
411
  }
414
412
 
415
- this._contentsFetchedPromise = createInnerContents(this);
416
-
417
- return 0;
413
+ return createInnerContents(this);
418
414
  };
419
415
 
420
416
  /**
@@ -476,28 +472,39 @@ function requestInnerContent(
476
472
 
477
473
  const promise = contentResource.fetchArrayBuffer();
478
474
  if (!defined(promise)) {
479
- return Promise.resolve(undefined);
475
+ return;
480
476
  }
481
477
 
482
478
  return promise
483
479
  .then(function (arrayBuffer) {
484
- // Short circuit if another inner content was canceled.
480
+ // Pending requests have already been canceled.
485
481
  if (originalCancelCount < multipleContents._cancelCount) {
486
- return undefined;
482
+ return;
483
+ }
484
+
485
+ if (
486
+ contentResource.request.cancelled ||
487
+ contentResource.request.state === RequestState.CANCELLED
488
+ ) {
489
+ cancelPendingRequests(multipleContents, originalContentState);
490
+ return;
487
491
  }
488
492
 
489
493
  updatePendingRequests(multipleContents, -1);
490
494
  return arrayBuffer;
491
495
  })
492
496
  .catch(function (error) {
493
- // Short circuit if another inner content was canceled.
497
+ // Pending requests have already been canceled.
494
498
  if (originalCancelCount < multipleContents._cancelCount) {
495
- return undefined;
499
+ return;
496
500
  }
497
501
 
498
- if (contentResource.request.state === RequestState.CANCELLED) {
502
+ if (
503
+ contentResource.request.cancelled ||
504
+ contentResource.request.state === RequestState.CANCELLED
505
+ ) {
499
506
  cancelPendingRequests(multipleContents, originalContentState);
500
- return undefined;
507
+ return;
501
508
  }
502
509
 
503
510
  updatePendingRequests(multipleContents, -1);
@@ -505,85 +512,90 @@ function requestInnerContent(
505
512
  });
506
513
  }
507
514
 
508
- function createInnerContents(multipleContents) {
515
+ async function createInnerContents(multipleContents) {
509
516
  const originalCancelCount = multipleContents._cancelCount;
510
- return Promise.all(multipleContents._arrayFetchPromises).then(function (
511
- arrayBuffers
512
- ) {
513
- // Short circuit if inner contents were canceled
514
- if (originalCancelCount < multipleContents._cancelCount) {
515
- return undefined;
516
- }
517
-
518
- const contents = arrayBuffers.map(function (arrayBuffer, i) {
519
- if (!defined(arrayBuffer)) {
520
- // Content was not fetched. The error was handled in
521
- // the fetch promise. Return undefined to indicate partial failure.
522
- return undefined;
523
- }
517
+ const arrayBuffers = await Promise.all(multipleContents._arrayFetchPromises);
518
+ // Request have been cancelled
519
+ if (originalCancelCount < multipleContents._cancelCount) {
520
+ return;
521
+ }
524
522
 
525
- return createInnerContent(multipleContents, arrayBuffer, i);
526
- });
523
+ const promises = arrayBuffers.map((arrayBuffer, i) =>
524
+ createInnerContent(multipleContents, arrayBuffer, i)
525
+ );
527
526
 
528
- // Even if we had a partial success, mark that we finished creating
529
- // contents
530
- multipleContents._contentsCreated = true;
531
- multipleContents._contents = contents.filter(defined);
532
- });
527
+ // Even if we had a partial success (in which case the inner promise will be handled, but the content will not be returned), mark that we finished creating
528
+ // contents
529
+ const contents = await Promise.all(promises);
530
+ multipleContents._contentsCreated = true;
531
+ multipleContents._contents = contents.filter(defined);
532
+ return contents;
533
533
  }
534
534
 
535
- function createInnerContent(multipleContents, arrayBuffer, index) {
536
- const preprocessed = preprocess3DTileContent(arrayBuffer);
537
-
538
- if (preprocessed.contentType === Cesium3DTileContentType.EXTERNAL_TILESET) {
539
- const error = new RuntimeError(
540
- "External tilesets are disallowed inside multiple contents"
541
- );
542
-
543
- return handleInnerContentFailed(multipleContents, index, error);
535
+ async function createInnerContent(multipleContents, arrayBuffer, index) {
536
+ if (!defined(arrayBuffer)) {
537
+ // Content was not fetched. The error was handled in
538
+ // the fetch promise. Return undefined to indicate partial failure.
539
+ return;
544
540
  }
545
541
 
546
- multipleContents._disableSkipLevelOfDetail =
547
- multipleContents._disableSkipLevelOfDetail ||
548
- preprocessed.contentType === Cesium3DTileContentType.GEOMETRY ||
549
- preprocessed.contentType === Cesium3DTileContentType.VECTOR;
542
+ try {
543
+ const preprocessed = preprocess3DTileContent(arrayBuffer);
550
544
 
551
- const tileset = multipleContents._tileset;
552
- const resource = multipleContents._innerContentResources[index];
553
- const tile = multipleContents._tile;
554
-
555
- let content;
556
- const contentFactory = Cesium3DTileContentFactory[preprocessed.contentType];
557
- if (defined(preprocessed.binaryPayload)) {
558
- content = contentFactory(
559
- tileset,
560
- tile,
561
- resource,
562
- preprocessed.binaryPayload.buffer,
563
- 0
564
- );
565
- } else {
566
- // JSON formats
567
- content = contentFactory(tileset, tile, resource, preprocessed.jsonPayload);
568
- }
545
+ if (preprocessed.contentType === Cesium3DTileContentType.EXTERNAL_TILESET) {
546
+ throw new RuntimeError(
547
+ "External tilesets are disallowed inside multiple contents"
548
+ );
549
+ }
569
550
 
570
- const contentHeader = multipleContents._innerContentHeaders[index];
551
+ multipleContents._disableSkipLevelOfDetail =
552
+ multipleContents._disableSkipLevelOfDetail ||
553
+ preprocessed.contentType === Cesium3DTileContentType.GEOMETRY ||
554
+ preprocessed.contentType === Cesium3DTileContentType.VECTOR;
555
+
556
+ const tileset = multipleContents._tileset;
557
+ const resource = multipleContents._innerContentResources[index];
558
+ const tile = multipleContents._tile;
559
+
560
+ let content;
561
+ const contentFactory = Cesium3DTileContentFactory[preprocessed.contentType];
562
+ if (defined(preprocessed.binaryPayload)) {
563
+ content = await Promise.resolve(
564
+ contentFactory(
565
+ tileset,
566
+ tile,
567
+ resource,
568
+ preprocessed.binaryPayload.buffer,
569
+ 0
570
+ )
571
+ );
572
+ } else {
573
+ // JSON formats
574
+ content = await Promise.resolve(
575
+ contentFactory(tileset, tile, resource, preprocessed.jsonPayload)
576
+ );
577
+ }
571
578
 
572
- if (tile.hasImplicitContentMetadata) {
573
- const subtree = tile.implicitSubtree;
574
- const coordinates = tile.implicitCoordinates;
575
- content.metadata = subtree.getContentMetadataView(coordinates, index);
576
- } else if (!tile.hasImplicitContent) {
577
- content.metadata = findContentMetadata(tileset, contentHeader);
578
- }
579
+ const contentHeader = multipleContents._innerContentHeaders[index];
579
580
 
580
- const groupMetadata = findGroupMetadata(tileset, contentHeader);
581
- if (defined(groupMetadata)) {
582
- content.group = new Cesium3DContentGroup({
583
- metadata: groupMetadata,
584
- });
581
+ if (tile.hasImplicitContentMetadata) {
582
+ const subtree = tile.implicitSubtree;
583
+ const coordinates = tile.implicitCoordinates;
584
+ content.metadata = subtree.getContentMetadataView(coordinates, index);
585
+ } else if (!tile.hasImplicitContent) {
586
+ content.metadata = findContentMetadata(tileset, contentHeader);
587
+ }
588
+
589
+ const groupMetadata = findGroupMetadata(tileset, contentHeader);
590
+ if (defined(groupMetadata)) {
591
+ content.group = new Cesium3DContentGroup({
592
+ metadata: groupMetadata,
593
+ });
594
+ }
595
+ return content;
596
+ } catch (error) {
597
+ handleInnerContentFailed(multipleContents, index, error);
585
598
  }
586
- return content;
587
599
  }
588
600
 
589
601
  function handleInnerContentFailed(multipleContents, index, error) {
@@ -653,8 +665,15 @@ Multiple3DTileContent.prototype.applyStyle = function (style) {
653
665
  Multiple3DTileContent.prototype.update = function (tileset, frameState) {
654
666
  const contents = this._contents;
655
667
  const length = contents.length;
668
+ let ready = true;
656
669
  for (let i = 0; i < length; ++i) {
657
670
  contents[i].update(tileset, frameState);
671
+ ready = ready && contents[i].ready;
672
+ }
673
+
674
+ if (!this._ready && ready) {
675
+ this._ready = true;
676
+ this._resolveContent(this);
658
677
  }
659
678
  };
660
679
 
@@ -92,8 +92,9 @@ function getPickOrthographicCullingVolume(
92
92
  ) {
93
93
  const camera = scene.camera;
94
94
  let frustum = camera.frustum;
95
- if (defined(frustum._offCenterFrustum)) {
96
- frustum = frustum._offCenterFrustum;
95
+ const offCenterFrustum = frustum.offCenterFrustum;
96
+ if (defined(offCenterFrustum)) {
97
+ frustum = offCenterFrustum;
97
98
  }
98
99
 
99
100
  let x = (2.0 * (drawingBufferPosition.x - viewport.x)) / viewport.width - 1.0;
@@ -156,9 +156,8 @@ function PointCloud(options) {
156
156
  );
157
157
  this._splittingEnabled = false;
158
158
 
159
- this._resolveReadyPromise = undefined;
160
- this._rejectReadyPromise = undefined;
161
- this._readyPromise = initialize(this, options);
159
+ this._error = undefined;
160
+ initialize(this, options);
162
161
  }
163
162
 
164
163
  Object.defineProperties(PointCloud.prototype, {
@@ -180,12 +179,6 @@ Object.defineProperties(PointCloud.prototype, {
180
179
  },
181
180
  },
182
181
 
183
- readyPromise: {
184
- get: function () {
185
- return this._readyPromise;
186
- },
187
- },
188
-
189
182
  color: {
190
183
  get: function () {
191
184
  return Color.clone(this._highlightColor);
@@ -283,14 +276,6 @@ function initialize(pointCloud, options) {
283
276
  }
284
277
 
285
278
  pointCloud._pointsLength = parsedContent.pointsLength;
286
-
287
- return new Promise(function (resolve, reject) {
288
- pointCloud._resolveReadyPromise = function () {
289
- pointCloud._ready = true;
290
- resolve(pointCloud);
291
- };
292
- pointCloud._rejectReadyPromise = reject;
293
- });
294
279
  }
295
280
 
296
281
  const scratchMin = new Cartesian3();
@@ -1280,7 +1265,7 @@ function decodeDraco(pointCloud, context) {
1280
1265
  })
1281
1266
  .catch(function (error) {
1282
1267
  pointCloud._decodingState = DecodingState.FAILED;
1283
- pointCloud._rejectReadyPromise(error);
1268
+ pointCloud._error = error;
1284
1269
  });
1285
1270
  }
1286
1271
  }
@@ -1292,6 +1277,13 @@ const scratchScale = new Cartesian3();
1292
1277
 
1293
1278
  PointCloud.prototype.update = function (frameState) {
1294
1279
  const context = frameState.context;
1280
+
1281
+ if (defined(this._error)) {
1282
+ const error = this._error;
1283
+ this._error = undefined;
1284
+ throw error;
1285
+ }
1286
+
1295
1287
  const decoding = decodeDraco(this, context);
1296
1288
  if (decoding) {
1297
1289
  return;
@@ -1309,7 +1301,7 @@ PointCloud.prototype.update = function (frameState) {
1309
1301
  createResources(this, frameState);
1310
1302
  modelMatrixDirty = true;
1311
1303
  shadersDirty = true;
1312
- this._resolveReadyPromise();
1304
+ this._ready = true;
1313
1305
  this._parsedContent = undefined; // Unload
1314
1306
  }
1315
1307
 
@@ -9,6 +9,7 @@ import combine from "../Core/combine.js";
9
9
  import ComponentDatatype from "../Core/ComponentDatatype.js";
10
10
  import defaultValue from "../Core/defaultValue.js";
11
11
  import defined from "../Core/defined.js";
12
+ import deprecationWarning from "../Core/deprecationWarning.js";
12
13
  import destroyObject from "../Core/destroyObject.js";
13
14
  import DeveloperError from "../Core/DeveloperError.js";
14
15
  import EncodedCartesian3 from "../Core/EncodedCartesian3.js";
@@ -350,6 +351,7 @@ function Primitive(options) {
350
351
  this._ready = false;
351
352
 
352
353
  const primitive = this;
354
+ // This is here for backwards compatibility. This promise wrapper can be removed once readyPromise is removed.
353
355
  this._readyPromise = new Promise((resolve, reject) => {
354
356
  primitive._completeLoad = (frameState, state, error) => {
355
357
  this._error = error;
@@ -486,6 +488,19 @@ Object.defineProperties(Primitive.prototype, {
486
488
  *
487
489
  * @type {boolean}
488
490
  * @readonly
491
+ *
492
+ * @example
493
+ * // Wait for a primitive to become ready before accessing attributes
494
+ * const removeListener = scene.postRender.addEventListener(() => {
495
+ * if (!frustumPrimitive.ready) {
496
+ * return;
497
+ * }
498
+ *
499
+ * const attributes = primitive.getGeometryInstanceAttributes('an id');
500
+ * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);
501
+ *
502
+ * removeListener();
503
+ * });
489
504
  */
490
505
  ready: {
491
506
  get: function () {
@@ -498,9 +513,14 @@ Object.defineProperties(Primitive.prototype, {
498
513
  * @memberof Primitive.prototype
499
514
  * @type {Promise<Primitive>}
500
515
  * @readonly
516
+ * @deprecated
501
517
  */
502
518
  readyPromise: {
503
519
  get: function () {
520
+ deprecationWarning(
521
+ "Primitive.readyPromise",
522
+ "Primitive.readyPromise was deprecated in CesiumJS 1.104. It will be removed in 1.107. Wait for Primitive.ready to return true instead."
523
+ );
504
524
  return this._readyPromise;
505
525
  },
506
526
  },
@@ -520,6 +520,7 @@ function selectTilesForRendering(primitive, frameState) {
520
520
  let i;
521
521
  const tileProvider = primitive._tileProvider;
522
522
  if (!defined(primitive._levelZeroTiles)) {
523
+ // ready is deprecated. This is here for backwards compatibility
523
524
  if (tileProvider.ready) {
524
525
  const tilingScheme = tileProvider.tilingScheme;
525
526
  primitive._levelZeroTiles = QuadtreeTile.createLevelZeroTiles(
@@ -1274,8 +1275,9 @@ function screenSpaceError(primitive, frameState, tile) {
1274
1275
  function screenSpaceError2D(primitive, frameState, tile) {
1275
1276
  const camera = frameState.camera;
1276
1277
  let frustum = camera.frustum;
1277
- if (defined(frustum._offCenterFrustum)) {
1278
- frustum = frustum._offCenterFrustum;
1278
+ const offCenterFrustum = frustum.offCenterFrustum;
1279
+ if (defined(offCenterFrustum)) {
1280
+ frustum = offCenterFrustum;
1279
1281
  }
1280
1282
 
1281
1283
  const context = frameState.context;
@@ -1387,6 +1389,7 @@ const scratchPosition = new Cartesian3();
1387
1389
  const scratchArray = [];
1388
1390
 
1389
1391
  function updateHeights(primitive, frameState) {
1392
+ // ready is deprecated. This is here for backwards compatibility.
1390
1393
  if (!primitive.tileProvider.ready) {
1391
1394
  return;
1392
1395
  }
@@ -46,14 +46,14 @@ Object.defineProperties(QuadtreeTileProvider.prototype, {
46
46
  * Gets a value indicating whether or not the provider is ready for use.
47
47
  * @memberof QuadtreeTileProvider.prototype
48
48
  * @type {boolean}
49
+ * @deprecated
49
50
  */
50
51
  ready: {
51
52
  get: DeveloperError.throwInstantiationError,
52
53
  },
53
54
 
54
55
  /**
55
- * Gets the tiling scheme used by the provider. This property should
56
- * not be accessed before {@link QuadtreeTileProvider#ready} returns true.
56
+ * Gets the tiling scheme used by the provider.
57
57
  * @memberof QuadtreeTileProvider.prototype
58
58
  * @type {TilingScheme}
59
59
  */
@@ -112,8 +112,7 @@ QuadtreeTileProvider.prototype.endUpdate =
112
112
  DeveloperError.throwInstantiationError;
113
113
 
114
114
  /**
115
- * Gets the maximum geometric error allowed in a tile at a given level, in meters. This function should not be
116
- * called before {@link QuadtreeTileProvider#ready} returns true.
115
+ * Gets the maximum geometric error allowed in a tile at a given level, in meters.
117
116
  *
118
117
  * @see QuadtreeTileProvider#computeDefaultLevelZeroMaximumGeometricError
119
118
  *
@@ -128,8 +127,7 @@ QuadtreeTileProvider.prototype.getLevelMaximumGeometricError =
128
127
 
129
128
  /**
130
129
  * Loads, or continues loading, a given tile. This function will continue to be called
131
- * until {@link QuadtreeTile#state} is no longer {@link QuadtreeTileLoadState#LOADING}. This function should
132
- * not be called before {@link QuadtreeTileProvider#ready} returns true.
130
+ * until {@link QuadtreeTile#state} is no longer {@link QuadtreeTileLoadState#LOADING}.
133
131
  *
134
132
  * @memberof QuadtreeTileProvider
135
133
  * @function
@@ -137,8 +135,6 @@ QuadtreeTileProvider.prototype.getLevelMaximumGeometricError =
137
135
  * @param {Context} context The rendering context.
138
136
  * @param {FrameState} frameState The frame state.
139
137
  * @param {QuadtreeTile} tile The tile to load.
140
- *
141
- * @exception {DeveloperError} <code>loadTile</code> must not be called before the tile provider is ready.
142
138
  */
143
139
  QuadtreeTileProvider.prototype.loadTile =
144
140
  DeveloperError.throwInstantiationError;