@cesium/engine 17.0.0 → 18.0.1-splats.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 (188) hide show
  1. package/Build/ThirdParty/Workers/z-worker-pako.js +1 -1
  2. package/Build/Workers/{chunk-UC7KH56Y.js → chunk-2AXKROJA.js} +5 -5
  3. package/Build/Workers/{chunk-IKDQX7DY.js → chunk-2J5ZZ7CY.js} +4 -4
  4. package/Build/Workers/{chunk-4TIR5UPL.js → chunk-2SYY3UBI.js} +1 -1
  5. package/Build/Workers/{chunk-CC2WKHIW.js → chunk-2WKW3BEB.js} +6 -6
  6. package/Build/Workers/{chunk-CBFJVM6I.js → chunk-2ZO6BCHN.js} +11 -11
  7. package/Build/Workers/{chunk-7PHT4JHA.js → chunk-3UKG5X7F.js} +12 -12
  8. package/Build/Workers/{chunk-PM4Q36WX.js → chunk-4GYIDPXP.js} +9 -9
  9. package/Build/Workers/{chunk-QUFN3GEO.js → chunk-6EP7ED36.js} +3 -3
  10. package/Build/Workers/{chunk-QJTIOB2Z.js → chunk-6QOBORNG.js} +6 -6
  11. package/Build/Workers/{chunk-YE6MDFDA.js → chunk-6WWHK2ER.js} +14 -14
  12. package/Build/Workers/{chunk-RX65FA7X.js → chunk-6Y6TVYHS.js} +7 -7
  13. package/Build/Workers/{chunk-P2N5IDWU.js → chunk-744VWE2U.js} +13 -13
  14. package/Build/Workers/{chunk-LVGYWPEX.js → chunk-7PQ52XCW.js} +4 -4
  15. package/Build/Workers/{chunk-PS3OKVOQ.js → chunk-A5UFJW2M.js} +12 -12
  16. package/Build/Workers/{chunk-CAKU6ZPR.js → chunk-AQKVFTWV.js} +8 -8
  17. package/Build/Workers/{chunk-236N6BJN.js → chunk-BKTEHJFD.js} +2 -2
  18. package/Build/Workers/{chunk-5PC577K7.js → chunk-CQXYKPAW.js} +16 -16
  19. package/Build/Workers/{chunk-DRMXU674.js → chunk-DI7PHKC6.js} +5 -5
  20. package/Build/Workers/{chunk-CQMXZF4A.js → chunk-DKKIQS6F.js} +6 -6
  21. package/Build/Workers/{chunk-J2HTPGC7.js → chunk-DTVWE5YL.js} +2 -2
  22. package/Build/Workers/{chunk-SSLK4U3V.js → chunk-ERPS2WZC.js} +4 -4
  23. package/Build/Workers/chunk-EYMZ5FSQ.js +280 -0
  24. package/Build/Workers/{chunk-LPGOAMYH.js → chunk-F43TQW5B.js} +2 -2
  25. package/Build/Workers/{chunk-5RPUEFSA.js → chunk-FOMRN6II.js} +6 -6
  26. package/Build/Workers/{chunk-2BJXFXD7.js → chunk-FOTXJYKS.js} +4 -4
  27. package/Build/Workers/{chunk-VXAKU6EV.js → chunk-G2Y7EA4W.js} +5 -5
  28. package/Build/Workers/{chunk-KE45DUDH.js → chunk-GY4E4ZP6.js} +10 -10
  29. package/Build/Workers/{chunk-NZSBSY5K.js → chunk-HDG3VHYL.js} +2 -2
  30. package/Build/Workers/{chunk-WP3IJYLC.js → chunk-HOEUXPBL.js} +9 -9
  31. package/Build/Workers/{chunk-5YEFZMMM.js → chunk-IWDYVJ56.js} +12 -12
  32. package/Build/Workers/{chunk-SQKTLDSD.js → chunk-JA4KPQJL.js} +12 -12
  33. package/Build/Workers/{chunk-MAIKDIBS.js → chunk-JZZQEZMA.js} +6 -6
  34. package/Build/Workers/{chunk-77MDEA47.js → chunk-KPLU3WDY.js} +5 -5
  35. package/Build/Workers/{chunk-E7SMO47Q.js → chunk-LHM6V4D6.js} +5 -5
  36. package/Build/Workers/{chunk-HBNWBMAM.js → chunk-LMTGCD6P.js} +1 -1
  37. package/Build/Workers/{chunk-XYGBWBD5.js → chunk-LWZOYSSF.js} +1 -1
  38. package/Build/Workers/{chunk-OBHLT34A.js → chunk-M6U7SV4T.js} +7 -7
  39. package/Build/Workers/{chunk-MS5NWDHH.js → chunk-O25M56DO.js} +2 -2
  40. package/Build/Workers/{chunk-UX5JWAC7.js → chunk-OE2WXO2Z.js} +10 -10
  41. package/Build/Workers/{chunk-C5DCX2YQ.js → chunk-PFD462OE.js} +6 -6
  42. package/Build/Workers/{chunk-37PA7GZW.js → chunk-PPI33PXH.js} +7 -7
  43. package/Build/Workers/{chunk-4BGKMM7J.js → chunk-PRQQHLUB.js} +1 -1
  44. package/Build/Workers/{chunk-IFIS4CVK.js → chunk-RTUZ7MJB.js} +2 -2
  45. package/Build/Workers/{chunk-G6JUXZUO.js → chunk-S6QBTP5U.js} +4 -4
  46. package/Build/Workers/{chunk-UFV3YUIN.js → chunk-SMFCIGM3.js} +5 -5
  47. package/Build/Workers/{chunk-P57PR3WM.js → chunk-TC3LEKFJ.js} +5 -5
  48. package/Build/Workers/{chunk-7IIMO7ZZ.js → chunk-UTLYCPFY.js} +16 -16
  49. package/Build/Workers/{chunk-HGEGZ67N.js → chunk-V7LEBY53.js} +6 -6
  50. package/Build/Workers/{chunk-GO3RZX2R.js → chunk-VE3UKRDB.js} +9 -9
  51. package/Build/Workers/{chunk-ZTBZMRQT.js → chunk-W3FBD4FE.js} +8 -8
  52. package/Build/Workers/{chunk-K5JTWJPE.js → chunk-YRR6CJGG.js} +4 -4
  53. package/Build/Workers/{chunk-UZ6KXWCA.js → chunk-ZVTKMLU6.js} +4 -4
  54. package/Build/Workers/combineGeometry.js +21 -21
  55. package/Build/Workers/createBoxGeometry.js +15 -15
  56. package/Build/Workers/createBoxOutlineGeometry.js +13 -13
  57. package/Build/Workers/createCircleGeometry.js +23 -23
  58. package/Build/Workers/createCircleOutlineGeometry.js +16 -16
  59. package/Build/Workers/createCoplanarPolygonGeometry.js +30 -30
  60. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +28 -28
  61. package/Build/Workers/createCorridorGeometry.js +26 -26
  62. package/Build/Workers/createCorridorOutlineGeometry.js +25 -25
  63. package/Build/Workers/createCylinderGeometry.js +17 -17
  64. package/Build/Workers/createCylinderOutlineGeometry.js +15 -15
  65. package/Build/Workers/createEllipseGeometry.js +23 -23
  66. package/Build/Workers/createEllipseOutlineGeometry.js +16 -16
  67. package/Build/Workers/createEllipsoidGeometry.js +16 -16
  68. package/Build/Workers/createEllipsoidOutlineGeometry.js +15 -15
  69. package/Build/Workers/createFrustumGeometry.js +15 -15
  70. package/Build/Workers/createFrustumOutlineGeometry.js +15 -15
  71. package/Build/Workers/createGeometry.js +23 -21
  72. package/Build/Workers/createGroundPolylineGeometry.js +19 -19
  73. package/Build/Workers/createPlaneGeometry.js +13 -13
  74. package/Build/Workers/createPlaneOutlineGeometry.js +12 -12
  75. package/Build/Workers/createPolygonGeometry.js +29 -29
  76. package/Build/Workers/createPolygonOutlineGeometry.js +27 -27
  77. package/Build/Workers/createPolylineGeometry.js +22 -22
  78. package/Build/Workers/createPolylineVolumeGeometry.js +28 -28
  79. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +24 -24
  80. package/Build/Workers/createRectangleGeometry.js +24 -24
  81. package/Build/Workers/createRectangleOutlineGeometry.js +17 -17
  82. package/Build/Workers/createSimplePolylineGeometry.js +20 -20
  83. package/Build/Workers/createSphereGeometry.js +16 -16
  84. package/Build/Workers/createSphereOutlineGeometry.js +15 -15
  85. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  86. package/Build/Workers/createVectorTileClampedPolylines.js +12 -12
  87. package/Build/Workers/createVectorTileGeometries.js +21 -21
  88. package/Build/Workers/createVectorTilePoints.js +11 -11
  89. package/Build/Workers/createVectorTilePolygons.js +19 -19
  90. package/Build/Workers/createVectorTilePolylines.js +12 -12
  91. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +19 -19
  92. package/Build/Workers/createVerticesFromHeightmap.js +19 -19
  93. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +16 -16
  94. package/Build/Workers/createWallGeometry.js +21 -21
  95. package/Build/Workers/createWallOutlineGeometry.js +20 -20
  96. package/Build/Workers/decodeDraco.js +10 -10
  97. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  98. package/Build/Workers/decodeI3S.js +9 -9
  99. package/Build/Workers/gaussianSplatSorter.js +62 -0
  100. package/Build/Workers/gaussianSplatTextureGenerator.js +68 -0
  101. package/Build/Workers/transcodeKTX2.js +78 -7
  102. package/Build/Workers/transferTypedArrayTest.js +1 -1
  103. package/Build/Workers/upsampleQuantizedTerrainMesh.js +19 -19
  104. package/Source/Core/Ion.js +1 -1
  105. package/Source/Core/PixelFormat.js +98 -0
  106. package/Source/Renderer/Context.js +2 -0
  107. package/Source/Renderer/Pass.js +3 -2
  108. package/Source/Renderer/Texture.js +1 -0
  109. package/Source/Renderer/Texture3D.js +568 -0
  110. package/Source/Renderer/VertexArray.js +33 -8
  111. package/Source/Renderer/createUniform.js +3 -0
  112. package/Source/Renderer/createUniformArray.js +1 -0
  113. package/Source/Scene/ArcGisMapService.js +1 -1
  114. package/Source/Scene/Cesium3DTileContentFactory.js +23 -0
  115. package/Source/Scene/Cesium3DTileset.js +197 -2
  116. package/Source/Scene/GaussianSplat3DTileContent.js +504 -0
  117. package/Source/Scene/GaussianSplatPrimitive.js +932 -0
  118. package/Source/Scene/GaussianSplatRenderResources.js +81 -0
  119. package/Source/Scene/GaussianSplatSorter.js +73 -0
  120. package/Source/Scene/GaussianSplatTextureGenerator.js +64 -0
  121. package/Source/Scene/GlobeSurfaceShaderSet.js +4 -5
  122. package/Source/Scene/GltfLoader.js +82 -4
  123. package/Source/Scene/GltfSpzLoader.js +222 -0
  124. package/Source/Scene/GltfVertexBufferLoader.js +98 -3
  125. package/Source/Scene/ImageryLayer.js +19 -4
  126. package/Source/Scene/ImageryLayerCollection.js +3 -2
  127. package/Source/Scene/Model/CartesianRectangle.js +108 -0
  128. package/Source/Scene/Model/ImageryConfiguration.js +25 -0
  129. package/Source/Scene/Model/ImageryCoverage.js +488 -0
  130. package/Source/Scene/Model/ImageryFlags.js +31 -0
  131. package/Source/Scene/Model/ImageryInput.js +60 -0
  132. package/Source/Scene/Model/ImageryPipelineStage.js +1040 -0
  133. package/Source/Scene/Model/MappedPositions.js +84 -0
  134. package/Source/Scene/Model/Model.js +38 -0
  135. package/Source/Scene/Model/ModelImagery.js +403 -0
  136. package/Source/Scene/Model/ModelImageryMapping.js +489 -0
  137. package/Source/Scene/Model/ModelPrimitiveImagery.js +972 -0
  138. package/Source/Scene/Model/ModelReader.js +810 -0
  139. package/Source/Scene/Model/ModelRenderResources.js +13 -0
  140. package/Source/Scene/Model/ModelRuntimePrimitive.js +20 -0
  141. package/Source/Scene/Model/ModelSceneGraph.js +133 -27
  142. package/Source/Scene/Model/ModelUtility.js +2 -0
  143. package/Source/Scene/Model/NodeRenderResources.js +10 -0
  144. package/Source/Scene/ModelComponents.js +10 -0
  145. package/Source/Scene/PrimitiveLoadPlan.js +59 -0
  146. package/Source/Scene/ResourceCache.js +60 -3
  147. package/Source/Scene/ResourceCacheKey.js +39 -1
  148. package/Source/Scene/Scene.js +32 -1
  149. package/Source/Scene/VertexAttributeSemantic.js +30 -0
  150. package/Source/Scene/VoxelPrimitive.js +22 -37
  151. package/Source/Scene/VoxelRenderResources.js +1 -1
  152. package/Source/Scene/processVoxelProperties.js +41 -100
  153. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +9 -0
  154. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +11 -0
  155. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  156. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  157. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
  158. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.glsl +0 -1
  159. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +0 -1
  160. package/Source/Shaders/GlobeFS.glsl +22 -0
  161. package/Source/Shaders/GlobeFS.js +22 -0
  162. package/Source/Shaders/Model/MaterialStageFS.glsl +4 -0
  163. package/Source/Shaders/Model/MaterialStageFS.js +4 -0
  164. package/Source/Shaders/Model/ModelFS.glsl +3 -1
  165. package/Source/Shaders/Model/ModelFS.js +3 -1
  166. package/Source/Shaders/Model/ModelVS.glsl +5 -1
  167. package/Source/Shaders/Model/ModelVS.js +5 -1
  168. package/Source/Shaders/Model/PointCloudStylingStageVS.glsl +1 -1
  169. package/Source/Shaders/Model/PointCloudStylingStageVS.js +2 -1
  170. package/Source/Shaders/PrimitiveGaussianSplatFS.glsl +18 -0
  171. package/Source/Shaders/PrimitiveGaussianSplatFS.js +20 -0
  172. package/Source/Shaders/PrimitiveGaussianSplatVS.glsl +108 -0
  173. package/Source/Shaders/PrimitiveGaussianSplatVS.js +109 -0
  174. package/Source/Shaders/Voxels/IntersectDepth.glsl +10 -3
  175. package/Source/Shaders/Voxels/IntersectDepth.js +10 -3
  176. package/Source/Shaders/Voxels/Intersection.glsl +1 -3
  177. package/Source/Shaders/Voxels/Intersection.js +1 -3
  178. package/Source/Shaders/Voxels/IntersectionUtils.glsl +1 -0
  179. package/Source/Shaders/Voxels/IntersectionUtils.js +1 -0
  180. package/Source/Shaders/Voxels/VoxelFS.glsl +37 -24
  181. package/Source/Shaders/Voxels/VoxelFS.js +37 -24
  182. package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
  183. package/Source/ThirdParty/wasm_splats_bg.wasm +0 -0
  184. package/Source/Workers/gaussianSplatSorter.js +34 -0
  185. package/Source/Workers/gaussianSplatTextureGenerator.js +39 -0
  186. package/index.d.ts +66 -2
  187. package/index.js +101 -80
  188. package/package.json +6 -4
@@ -62,6 +62,7 @@ import Cesium3DTilesetBaseTraversal from "./Cesium3DTilesetBaseTraversal.js";
62
62
  import Cesium3DTilesetSkipTraversal from "./Cesium3DTilesetSkipTraversal.js";
63
63
  import Ray from "../Core/Ray.js";
64
64
  import DynamicEnvironmentMapManager from "./DynamicEnvironmentMapManager.js";
65
+ import ImageryLayerCollection from "./ImageryLayerCollection.js";
65
66
 
66
67
  /**
67
68
  * @typedef {Object} Cesium3DTileset.ConstructorOptions
@@ -119,6 +120,7 @@ import DynamicEnvironmentMapManager from "./DynamicEnvironmentMapManager.js";
119
120
  * @property {boolean} [enableCollision=false] When <code>true</code>, enables collisions for camera or CPU picking. While this is <code>true</code> the camera will be prevented from going below the tileset surface if {@link ScreenSpaceCameraController#enableCollisionDetection} is true.
120
121
  * @property {boolean} [projectTo2D=false] Whether to accurately project the tileset to 2D. If this is true, the tileset will be projected accurately to 2D, but it will use more memory to do so. If this is false, the tileset will use less memory and will still render in 2D / CV mode, but its projected positions may be inaccurate. This cannot be set after the tileset has been created.
121
122
  * @property {boolean} [enablePick=false] Whether to allow collision and CPU picking with <code>pick</code> when using WebGL 1. If using WebGL 2 or above, this option will be ignored. If using WebGL 1 and this is true, the <code>pick</code> operation will work correctly, but it will use more memory to do so. If running with WebGL 1 and this is false, the model will use less memory, but <code>pick</code> will always return <code>undefined</code>. This cannot be set after the tileset has loaded.
123
+ * @property {boolean} [asynchronouslyLoadImagery=false] Whether loading imagery that is draped over the tileset should be done asynchronously. If this is <code>true</code>, then tile content will be displayed with its original texture until the imagery texture is loaded. If this is <code>false</code>, then the tile content will not be displayed until the imagery is ready.
122
124
  * @property {string} [debugHeatmapTilePropertyName] The tile variable to colorize as a heatmap. All rendered tiles will be colorized relative to each other's specified variable value.
123
125
  * @property {boolean} [debugFreezeFrame=false] For debugging only. Determines if only the tiles from last frame should be used for rendering.
124
126
  * @property {boolean} [debugColorizeTiles=false] For debugging only. When true, assigns a random color to each tile.
@@ -143,7 +145,7 @@ import DynamicEnvironmentMapManager from "./DynamicEnvironmentMapManager.js";
143
145
  *
144
146
  * @alias Cesium3DTileset
145
147
  * @constructor
146
- *
148
+ * @experimental Support for loading Gaussian splats content encoded with SPZ compression using the draft glTF extension {@link https://github.com/KhronosGroup/glTF/pull/2490 | KHR_spz_gaussian_splats_compression} is experimental and is subject change without Cesium's standard deprecation policy.
147
149
  * @param {Cesium3DTileset.ConstructorOptions} options An object describing initialization options
148
150
  *
149
151
  * @exception {DeveloperError} The tileset must be 3D Tiles version 0.0 or 1.0.
@@ -194,7 +196,6 @@ import DynamicEnvironmentMapManager from "./DynamicEnvironmentMapManager.js";
194
196
  * dynamicScreenSpaceErrorHeightFalloff: 0.25
195
197
  * });
196
198
  * scene.primitives.add(tileset);
197
- *
198
199
  * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles specification}
199
200
  */
200
201
  function Cesium3DTileset(options) {
@@ -347,6 +348,60 @@ function Cesium3DTileset(options) {
347
348
  this._vectorKeepDecodedPositions =
348
349
  options.vectorKeepDecodedPositions ?? false;
349
350
 
351
+ /**
352
+ * The collection of <code>ImageryLayer</code> objects providing 2D georeferenced
353
+ * image data that will be rendered over the tileset.
354
+ *
355
+ * @private
356
+ * @type {ImageryLayerCollection}
357
+ * @readonly
358
+ */
359
+ this._imageryLayers = new ImageryLayerCollection(this);
360
+
361
+ /**
362
+ * A counter that will be increased for each modification of the
363
+ * imagery layers (i.e. for each layerAdded, layerRemoved,
364
+ * layerMoved, or layerShownOrHidden event). This can be used
365
+ * by the <code>ModelImagery</code> class to detect changes in
366
+ * the imagery, and trigger the appropriate updates.
367
+ *
368
+ * @private
369
+ */
370
+ this._imageryLayersModificationCounter = 0;
371
+
372
+ /**
373
+ * A listener that will be attached to the layerAdded, layerRemoved,
374
+ * layerMoved, and layerShownOrHidden events of the imagery layers,
375
+ * and increment the imagery layers modification counter for each
376
+ * event.
377
+ *
378
+ * @private
379
+ * @readonly
380
+ */
381
+ this._imageryLayersListener = () => {
382
+ this._imageryLayersModificationCounter++;
383
+ };
384
+
385
+ // Attach the imagery layers listener to all events of
386
+ // the imagery layers collection
387
+ this.imageryLayers.layerAdded.addEventListener(this._imageryLayersListener);
388
+ this.imageryLayers.layerRemoved.addEventListener(this._imageryLayersListener);
389
+ this.imageryLayers.layerMoved.addEventListener(this._imageryLayersListener);
390
+ this.imageryLayers.layerShownOrHidden.addEventListener(
391
+ this._imageryLayersListener,
392
+ );
393
+
394
+ /**
395
+ * Whether loading imagery that is draped over the tileset should be
396
+ * done asynchronously. If this is <code>true</code>, then tile content
397
+ * will be displayed with its original texture until the imagery texture
398
+ * is loaded. If this is <code>false</code>, then the tile content will
399
+ * not be displayed until the imagery is ready.
400
+ *
401
+ * @private
402
+ */
403
+ this._asynchronouslyLoadImagery = options.asynchronouslyLoadImagery ?? false;
404
+
350
405
  /**
351
406
  * Preload tiles when <code>tileset.show</code> is <code>false</code>. Loads tiles as if the tileset is visible but does not render them.
352
407
  *
@@ -1097,6 +1152,69 @@ Object.defineProperties(Cesium3DTileset.prototype, {
1097
1152
  },
1098
1153
  },
1099
1154
 
1155
+ /**
1156
+ * The collection of <code>ImageryLayer</code> objects providing 2D georeferenced
1157
+ * image data that will be rendered over the tileset.
1158
+ *
1159
+ * The imagery will be draped over glTF, B3DM, PNTS, or GeoJSON tile content.
1160
+ *
1161
+ * @see ImageryLayer
1162
+ *
1163
+ * @memberof Cesium3DTileset.prototype
1164
+ * @readonly
1165
+ * @type {ImageryLayerCollection}
1166
+ *
1167
+ * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
1168
+ *
1169
+ * @example
1170
+ * // Drape Bing Maps Aerial imagery over the tileset
1171
+ * const imageryProvider = await Cesium.createWorldImageryAsync({
1172
+ * style: Cesium.IonWorldImageryStyle.AERIAL,
1173
+ * });
1174
+ * const imageryLayer = new ImageryLayer(imageryProvider);
1175
+ * tileset.imageryLayers.add(imageryLayer);
1176
+ */
1177
+ imageryLayers: {
1178
+ get: function () {
1179
+ return this._imageryLayers;
1180
+ },
1181
+ },
1182
+
1183
+ /**
1184
+ * The modification counter of the imagery layers.
1185
+ *
1186
+ * This is incremented for each modification (layerAdded, layerMoved,
1187
+ * layerRemoved, layerShownOrHidden) of the imagery layers, and can
1188
+ * be used <b>internally</b> (by <code>ModelPrimitiveImagery</code>)
1189
+ * to trigger updates whenever the collection of imagery layers
1190
+ * changes.
1191
+ *
1192
+ * @memberof Cesium3DTileset.prototype
1193
+ * @readonly
1194
+ * @type {number}
1195
+ * @private
1196
+ */
1197
+ imageryLayersModificationCounter: {
1198
+ get: function () {
1199
+ return this._imageryLayersModificationCounter;
1200
+ },
1201
+ },
1202
+
1203
+ /**
1204
+ * Whether loading imagery that is draped over the tileset should be
1205
+ * done asynchronously.
1206
+ *
1207
+ * @memberof Cesium3DTileset.prototype
1208
+ * @readonly
1209
+ * @type {boolean}
1210
+ * @private
1211
+ */
1212
+ asynchronouslyLoadImagery: {
1213
+ get: function () {
1214
+ return this._asynchronouslyLoadImagery;
1215
+ },
1216
+ },
1217
+
1100
1218
  /**
1101
1219
  * Gets the tileset's properties dictionary object, which contains metadata about per-feature properties.
1102
1220
  * <p>
@@ -2638,6 +2756,7 @@ function filterProcessingQueue(tileset) {
2638
2756
  const scratchUpdateHeightCartographic = new Cartographic();
2639
2757
  const scratchUpdateHeightCartographic2 = new Cartographic();
2640
2758
  const scratchUpdateHeightCartesian = new Cartesian3();
2759
+
2641
2760
  function processUpdateHeight(tileset, tile, frameState) {
2642
2761
  if (!tileset.enableCollision || !tileset.show) {
2643
2762
  return;
@@ -3338,6 +3457,8 @@ Cesium3DTileset.prototype.updateForPass = function (
3338
3457
  Check.typeOf.object("tilesetPassState", tilesetPassState);
3339
3458
  //>>includeEnd('debug');
3340
3459
 
3460
+ this.imageryLayers._update();
3461
+
3341
3462
  const pass = tilesetPassState.pass;
3342
3463
  if (
3343
3464
  (pass === Cesium3DTilePass.PRELOAD &&
@@ -3484,6 +3605,23 @@ Cesium3DTileset.prototype.destroy = function () {
3484
3605
  }
3485
3606
  this._environmentMapManager = undefined;
3486
3607
 
3608
+ if (!this._imageryLayers.isDestroyed()) {
3609
+ this.imageryLayers.layerAdded.removeEventListener(
3610
+ this._imageryLayersListener,
3611
+ );
3612
+ this.imageryLayers.layerRemoved.removeEventListener(
3613
+ this._imageryLayersListener,
3614
+ );
3615
+ this.imageryLayers.layerMoved.removeEventListener(
3616
+ this._imageryLayersListener,
3617
+ );
3618
+ this.imageryLayers.layerShownOrHidden.removeEventListener(
3619
+ this._imageryLayersListener,
3620
+ );
3621
+ this._imageryLayers.destroy();
3622
+ }
3623
+ this._imageryLayers = undefined;
3624
+
3487
3625
  return destroyObject(this);
3488
3626
  };
3489
3627
 
@@ -3681,6 +3819,63 @@ Cesium3DTileset.prototype.pick = function (ray, frameState, result) {
3681
3819
  }
3682
3820
  };
3683
3821
 
3822
+ /**
3823
+ * Returns true if the given glTF extension is used by this tileset.
3824
+ * <br/><br/>
3825
+ * Relies on the <code>3DTILES_content_gltf</code> extension and will return
3826
+ * false if that extension is not used.
3827
+ *
3828
+ * @param {string} gltfExtensionName The name of the glTF extension to check.
3829
+ * @returns {boolean} <code>true</code> if the glTF extension is used by this tileset; otherwise, <code>false</code>.
3830
+ *
3831
+ * @private
3832
+ */
3833
+ Cesium3DTileset.prototype.isGltfExtensionUsed = function (gltfExtensionName) {
3834
+ if (this.hasExtension("3DTILES_content_gltf")) {
3835
+ if (!defined(this.extensions)) {
3836
+ return false;
3837
+ }
3838
+ const extensionsUsed =
3839
+ this.extensions["3DTILES_content_gltf"]?.extensionsUsed;
3840
+
3841
+ if (!defined(extensionsUsed)) {
3842
+ return false;
3843
+ }
3844
+
3845
+ return extensionsUsed.indexOf(gltfExtensionName) > -1;
3846
+ }
3847
+
3848
+ return false;
3849
+ };
3850
+
3851
+ /**
3852
+ * Returns true if the given glTF extension is used and required by this tileset.
3853
+ * <br/><br/>
3854
+ * Relies on the <code>3DTILES_content_gltf</code> extension and will return
3855
+ * <code>false</code> if that extension is not used.
3856
+ *
3857
+ * @param {string} gltfExtensionName The name of the glTF extension to check.
3858
+ * @returns {boolean} <code>true</code> if the glTF extension is required by this tileset; otherwise, <code>false</code>.
3859
+ *
3860
+ * @private
3861
+ */
3862
+ Cesium3DTileset.prototype.isGltfExtensionRequired = function (
3863
+ gltfExtensionName,
3864
+ ) {
3865
+ if (this.isGltfExtensionUsed(gltfExtensionName)) {
3866
+ const extensionsRequired =
3867
+ this.extensions["3DTILES_content_gltf"].extensionsRequired;
3868
+
3869
+ if (!defined(extensionsRequired)) {
3870
+ return false;
3871
+ }
3872
+
3873
+ return extensionsRequired.indexOf(gltfExtensionName) > -1;
3874
+ }
3875
+
3876
+ return false;
3877
+ };
3878
+
3684
3879
  /**
3685
3880
  * Optimization option. Used as a callback when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how much to raise the screen space error for tiles outside the foveated cone,
3686
3881
  * interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}.