@cesium/engine 24.0.0 → 26.0.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 (362) hide show
  1. package/Build/Workers/{chunk-6WLHJFD3.js → chunk-3VFEWOBI.js} +59 -32
  2. package/Build/Workers/{chunk-UQU4RXLT.js → chunk-424RNO3D.js} +50 -45
  3. package/Build/Workers/chunk-4MGMYHOO.js +147 -0
  4. package/Build/Workers/{chunk-AMIHNSST.js → chunk-4S7IE3LB.js} +2 -2
  5. package/Build/Workers/{chunk-J6AW5YHS.js → chunk-52JDLOEM.js} +14 -14
  6. package/Build/Workers/{chunk-6RMS4S72.js → chunk-54I6Y66F.js} +6 -6
  7. package/Build/Workers/{chunk-C6P4IG5P.js → chunk-6YEE6JDR.js} +6 -6
  8. package/Build/Workers/{chunk-72VYSVEW.js → chunk-7J2HKPRH.js} +11 -10
  9. package/Build/Workers/{chunk-7O5XJTVE.js → chunk-7WM2PX4V.js} +5 -5
  10. package/Build/Workers/{chunk-5A2SW66E.js → chunk-ACXQXN46.js} +16 -16
  11. package/Build/Workers/{chunk-VLDEUTOP.js → chunk-AYKR4VBR.js} +2 -2
  12. package/Build/Workers/{chunk-YQFTYQMZ.js → chunk-C6J67V5A.js} +3 -2
  13. package/Build/Workers/{chunk-D4EJ2NXG.js → chunk-C6KNZ7T4.js} +17 -17
  14. package/Build/Workers/{chunk-7MDYBRYJ.js → chunk-CFQP6LYM.js} +4 -4
  15. package/Build/Workers/{chunk-YAOZMOFL.js → chunk-CXOYE2WM.js} +5 -5
  16. package/Build/Workers/{chunk-B6SCUUFP.js → chunk-CZEYZU4N.js} +10 -10
  17. package/Build/Workers/{chunk-NPF7SSHZ.js → chunk-DBOEKL43.js} +7 -7
  18. package/Build/Workers/{chunk-44EMEGKW.js → chunk-DDWSZVMY.js} +5 -5
  19. package/Build/Workers/{chunk-7X322WP2.js → chunk-DOBXCNC3.js} +13 -13
  20. package/Build/Workers/{chunk-JCI63T3K.js → chunk-E7VQ76KE.js} +6 -6
  21. package/Build/Workers/{chunk-7TYLCBGK.js → chunk-EBSIOBXY.js} +12 -10
  22. package/Build/Workers/{chunk-GQUNK2XC.js → chunk-EF2QYXGA.js} +14 -14
  23. package/Build/Workers/{chunk-BJD6QGXZ.js → chunk-EPYXRCDB.js} +12 -12
  24. package/Build/Workers/{chunk-63SIWPLS.js → chunk-F6QDY6HU.js} +13 -13
  25. package/Build/Workers/{chunk-XY6HMDGI.js → chunk-FRQZECAO.js} +5 -5
  26. package/Build/Workers/{chunk-VMVOUQ5J.js → chunk-G7PXZRVF.js} +7 -7
  27. package/Build/Workers/{chunk-N65BAKSH.js → chunk-INUEEEQA.js} +8 -8
  28. package/Build/Workers/{chunk-7QRFIKWQ.js → chunk-IRBKFCEJ.js} +2 -2
  29. package/Build/Workers/{chunk-UIGVOKKI.js → chunk-IYOUHCZB.js} +3 -2
  30. package/Build/Workers/{chunk-5GXYJQ2K.js → chunk-J6BWOHUF.js} +3 -3
  31. package/Build/Workers/{chunk-A47HVBC5.js → chunk-KFSTQKNM.js} +7 -7
  32. package/Build/Workers/{chunk-EV3VGO6Y.js → chunk-KKOSKAZB.js} +17 -17
  33. package/Build/Workers/{chunk-6MPGQEHA.js → chunk-KSSWJIZW.js} +2 -2
  34. package/Build/Workers/{chunk-DHKPFLSJ.js → chunk-M3B5JKSM.js} +3 -2
  35. package/Build/Workers/chunk-MPZHGZU6.js +2342 -0
  36. package/Build/Workers/{chunk-YJZGW74L.js → chunk-MYP774IS.js} +2213 -1349
  37. package/Build/Workers/{chunk-LIB2H534.js → chunk-O3EA5HS7.js} +12 -11
  38. package/Build/Workers/{chunk-ILMFADZA.js → chunk-P3CK7MCY.js} +27 -5
  39. package/Build/Workers/chunk-Q3PY526V.js +3201 -0
  40. package/Build/Workers/chunk-QN67VG36.js +973 -0
  41. package/Build/Workers/{chunk-XJRBB253.js → chunk-QRWGUWI6.js} +11 -11
  42. package/Build/Workers/{chunk-AF3MU2RL.js → chunk-S4MCOY6I.js} +7 -6
  43. package/Build/Workers/{chunk-Y7HNNPNK.js → chunk-SMQZZOW6.js} +10 -10
  44. package/Build/Workers/{chunk-PVV64VFW.js → chunk-TKKIREQ6.js} +3 -2
  45. package/Build/Workers/{chunk-MKM27KGV.js → chunk-U3ZA64U7.js} +2 -2
  46. package/Build/Workers/{chunk-2N4KDHS3.js → chunk-UA25D5MX.js} +12 -11
  47. package/Build/Workers/{chunk-RQNJD3O4.js → chunk-UOOIQ3KX.js} +12 -12
  48. package/Build/Workers/{chunk-GOQBUCXH.js → chunk-V7VQKN6N.js} +709 -431
  49. package/Build/Workers/{chunk-LXMCPFFS.js → chunk-VQYETPWC.js} +4 -4
  50. package/Build/Workers/{chunk-NKT5K3K3.js → chunk-VWV2IJRB.js} +13 -12
  51. package/Build/Workers/chunk-XZMBNNDX.js +1287 -0
  52. package/Build/Workers/{chunk-ISY4EZCA.js → chunk-Y57HREW5.js} +4 -4
  53. package/Build/Workers/{chunk-EDXL4W76.js → chunk-Y5BF6AFU.js} +2 -2
  54. package/Build/Workers/{chunk-Q3C6VQH6.js → chunk-YLY7NKAB.js} +4 -4
  55. package/Build/Workers/{chunk-4TIG36AW.js → chunk-ZK3CF7ZD.js} +12 -12
  56. package/Build/Workers/{chunk-AJLTU6PF.js → chunk-ZP7JMQV4.js} +4 -1
  57. package/Build/Workers/{chunk-HXJMS2ZI.js → chunk-ZZ46LWL6.js} +1 -1
  58. package/Build/Workers/combineGeometry.js +24 -24
  59. package/Build/Workers/createBoxGeometry.js +18 -18
  60. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  61. package/Build/Workers/createCircleGeometry.js +26 -26
  62. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  63. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  64. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  65. package/Build/Workers/createCorridorGeometry.js +29 -29
  66. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  67. package/Build/Workers/createCylinderGeometry.js +20 -20
  68. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  69. package/Build/Workers/createEllipseGeometry.js +26 -26
  70. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  71. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  72. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  73. package/Build/Workers/createFrustumGeometry.js +18 -18
  74. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  75. package/Build/Workers/createGeometry.js +24 -24
  76. package/Build/Workers/createGroundPolylineGeometry.js +175 -118
  77. package/Build/Workers/createPlaneGeometry.js +16 -16
  78. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  79. package/Build/Workers/createPolygonGeometry.js +32 -32
  80. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  81. package/Build/Workers/createPolylineGeometry.js +25 -25
  82. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  83. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  84. package/Build/Workers/createRectangleGeometry.js +27 -27
  85. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  86. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  87. package/Build/Workers/createSphereGeometry.js +19 -19
  88. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  89. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  90. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  91. package/Build/Workers/createVectorTileGeometries.js +24 -24
  92. package/Build/Workers/createVectorTilePoints.js +13 -13
  93. package/Build/Workers/createVectorTilePolygons.js +22 -22
  94. package/Build/Workers/createVectorTilePolylines.js +14 -14
  95. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  96. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  97. package/Build/Workers/createVerticesFromHeightmap.js +24 -23
  98. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  99. package/Build/Workers/createWallGeometry.js +24 -24
  100. package/Build/Workers/createWallOutlineGeometry.js +23 -23
  101. package/Build/Workers/decodeDraco.js +10 -10
  102. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  103. package/Build/Workers/decodeI3S.js +10 -10
  104. package/Build/Workers/gaussianSplatSorter.js +4 -4
  105. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  106. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  107. package/Build/Workers/transcodeKTX2.js +12 -9
  108. package/Build/Workers/transferTypedArrayTest.js +1 -1
  109. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  110. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  111. package/Source/Core/ArcType.js +6 -1
  112. package/Source/Core/ArticulationStageType.js +5 -1
  113. package/Source/Core/AssociativeArray.js +100 -94
  114. package/Source/Core/BoundingSphere.js +1296 -1300
  115. package/Source/Core/Cartesian2.js +1 -1
  116. package/Source/Core/Cartesian3.js +2 -3
  117. package/Source/Core/Cartesian4.js +1 -1
  118. package/Source/Core/Cartographic.js +257 -249
  119. package/Source/Core/ClockRange.js +6 -1
  120. package/Source/Core/ClockStep.js +6 -1
  121. package/Source/Core/Color.js +844 -835
  122. package/Source/Core/ComponentDatatype.js +39 -1
  123. package/Source/Core/CornerType.js +6 -1
  124. package/Source/Core/Credit.js +121 -124
  125. package/Source/Core/Ellipsoid.js +637 -660
  126. package/Source/Core/ExtrapolationType.js +6 -1
  127. package/Source/Core/GeocodeType.js +6 -1
  128. package/Source/Core/GeographicProjection.js +74 -74
  129. package/Source/Core/GeographicTilingScheme.js +179 -198
  130. package/Source/Core/GeometryOffsetAttribute.js +7 -1
  131. package/Source/Core/GeometryType.js +7 -1
  132. package/Source/Core/HeightmapEncoding.js +6 -1
  133. package/Source/Core/Iau2006XysData.js +24 -13
  134. package/Source/Core/IndexDatatype.js +3 -1
  135. package/Source/Core/InterpolationType.js +5 -1
  136. package/Source/Core/Intersect.js +6 -1
  137. package/Source/Core/Ion.js +1 -1
  138. package/Source/Core/IonGeocodeProviderType.js +5 -1
  139. package/Source/Core/JulianDate.js +850 -848
  140. package/Source/Core/KeyboardEventModifier.js +6 -1
  141. package/Source/Core/MapProjection.js +40 -44
  142. package/Source/Core/Matrix2.js +906 -893
  143. package/Source/Core/Matrix3.js +1643 -1575
  144. package/Source/Core/Matrix4.js +2903 -2872
  145. package/Source/Core/PixelFormat.js +3 -1
  146. package/Source/Core/PrimitiveType.js +11 -1
  147. package/Source/Core/Ray.js +62 -60
  148. package/Source/Core/Rectangle.js +913 -904
  149. package/Source/Core/ReferenceFrame.js +6 -1
  150. package/Source/Core/RequestScheduler.js +8 -3
  151. package/Source/Core/RequestState.js +6 -1
  152. package/Source/Core/RequestType.js +6 -1
  153. package/Source/Core/Resource.js +1 -1
  154. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  155. package/Source/Core/ScreenSpaceEventType.js +6 -1
  156. package/Source/Core/TerrainQuantization.js +6 -1
  157. package/Source/Core/TilingScheme.js +100 -98
  158. package/Source/Core/TimeConstants.js +6 -1
  159. package/Source/Core/TimeStandard.js +6 -1
  160. package/Source/Core/TrackingReferenceFrame.js +6 -1
  161. package/Source/Core/Visibility.js +6 -1
  162. package/Source/Core/VulkanConstants.js +6 -1
  163. package/Source/Core/WebGLConstants.js +6 -1
  164. package/Source/Core/WebMercatorProjection.js +108 -109
  165. package/Source/Core/WebMercatorTilingScheme.js +246 -242
  166. package/Source/Core/WindingOrder.js +3 -1
  167. package/Source/Core/createColorRamp.js +37 -0
  168. package/Source/Core/globalTypes.js +25 -0
  169. package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +1 -0
  170. package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +1 -0
  171. package/Source/DataSources/StripeOrientation.js +6 -1
  172. package/Source/Renderer/BufferUsage.js +20 -9
  173. package/Source/Renderer/Context.js +2 -29
  174. package/Source/Renderer/DrawCommand.js +435 -403
  175. package/Source/Renderer/MipmapHint.js +5 -1
  176. package/Source/Renderer/Pass.js +10 -3
  177. package/Source/Renderer/PickId.js +44 -0
  178. package/Source/Renderer/PixelDatatype.js +3 -1
  179. package/Source/Renderer/RenderbufferFormat.js +5 -1
  180. package/Source/Renderer/ShaderDestination.js +4 -1
  181. package/Source/Renderer/TextureMagnificationFilter.js +3 -1
  182. package/Source/Renderer/TextureMinificationFilter.js +3 -1
  183. package/Source/Renderer/TextureWrap.js +5 -1
  184. package/Source/Renderer/createUniform.js +346 -239
  185. package/Source/Renderer/createUniformArray.js +494 -381
  186. package/Source/Scene/AlphaMode.js +5 -1
  187. package/Source/Scene/ArcGisBaseMapType.js +6 -1
  188. package/Source/Scene/ArcGisMapService.js +1 -1
  189. package/Source/Scene/AttributeType.js +3 -1
  190. package/Source/Scene/Axis.js +3 -1
  191. package/Source/Scene/BingMapsStyle.js +6 -1
  192. package/Source/Scene/BlendEquation.js +6 -1
  193. package/Source/Scene/BlendFunction.js +6 -1
  194. package/Source/Scene/BlendOption.js +6 -1
  195. package/Source/Scene/BlendingState.js +6 -1
  196. package/Source/Scene/BufferLoader.js +0 -2
  197. package/Source/Scene/BufferPoint.js +1 -0
  198. package/Source/Scene/BufferPointCollection.js +17 -1
  199. package/Source/Scene/BufferPolygon.js +3 -2
  200. package/Source/Scene/BufferPolygonCollection.js +13 -1
  201. package/Source/Scene/BufferPolyline.js +1 -0
  202. package/Source/Scene/BufferPolylineCollection.js +5 -1
  203. package/Source/Scene/BufferPrimitiveCollection.js +210 -43
  204. package/Source/Scene/CameraEventAggregator.js +30 -18
  205. package/Source/Scene/CameraEventType.js +6 -1
  206. package/Source/Scene/Cesium3DTile.js +54 -1
  207. package/Source/Scene/Cesium3DTileColorBlendMode.js +6 -1
  208. package/Source/Scene/Cesium3DTileContent.js +195 -254
  209. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  210. package/Source/Scene/Cesium3DTileContentState.js +6 -1
  211. package/Source/Scene/Cesium3DTileContentType.js +3 -1
  212. package/Source/Scene/Cesium3DTileFeature.js +289 -306
  213. package/Source/Scene/Cesium3DTileOptimizationHint.js +6 -1
  214. package/Source/Scene/Cesium3DTilePass.js +5 -1
  215. package/Source/Scene/Cesium3DTilePointFeature.js +433 -511
  216. package/Source/Scene/Cesium3DTileRefine.js +6 -1
  217. package/Source/Scene/Cesium3DTileVectorFeature.js +586 -0
  218. package/Source/Scene/Cesium3DTileset.js +46 -6
  219. package/Source/Scene/ClassificationType.js +3 -1
  220. package/Source/Scene/CloudType.js +3 -1
  221. package/Source/Scene/ColorBlendMode.js +4 -1
  222. package/Source/Scene/Composite3DTileContent.js +254 -292
  223. package/Source/Scene/CullFace.js +6 -1
  224. package/Source/Scene/DepthFunction.js +6 -1
  225. package/Source/Scene/DynamicAtmosphereLightingType.js +3 -1
  226. package/Source/Scene/EdgeDisplayMode.js +50 -0
  227. package/Source/Scene/Empty3DTileContent.js +100 -132
  228. package/Source/Scene/EquirectangularPanorama.js +1 -0
  229. package/Source/Scene/ExpressionNodeType.js +6 -1
  230. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  231. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  232. package/Source/Scene/Geometry3DTileContent.js +151 -185
  233. package/Source/Scene/GltfBufferViewLoader.js +0 -2
  234. package/Source/Scene/GltfDracoLoader.js +0 -2
  235. package/Source/Scene/GltfImageLoader.js +0 -3
  236. package/Source/Scene/GltfIndexBufferLoader.js +0 -4
  237. package/Source/Scene/GltfJsonLoader.js +0 -2
  238. package/Source/Scene/GltfLoader.js +109 -5
  239. package/Source/Scene/GltfLoaderUtil.js +14 -0
  240. package/Source/Scene/GltfSpzLoader.js +0 -2
  241. package/Source/Scene/GltfStructuralMetadataLoader.js +0 -2
  242. package/Source/Scene/GltfTextureLoader.js +0 -2
  243. package/Source/Scene/GltfVertexBufferLoader.js +0 -4
  244. package/Source/Scene/HeightReference.js +5 -1
  245. package/Source/Scene/HorizontalOrigin.js +6 -1
  246. package/Source/Scene/ImageryProvider.js +1 -1
  247. package/Source/Scene/ImageryState.js +6 -1
  248. package/Source/Scene/Implicit3DTileContent.js +179 -214
  249. package/Source/Scene/ImplicitSubdivisionScheme.js +3 -1
  250. package/Source/Scene/InstanceAttributeSemantic.js +3 -1
  251. package/Source/Scene/IonWorldImageryStyle.js +6 -1
  252. package/Source/Scene/JobType.js +6 -1
  253. package/Source/Scene/LabelStyle.js +6 -1
  254. package/Source/Scene/MVTDataProvider.js +147 -0
  255. package/Source/Scene/MapMode2D.js +6 -1
  256. package/Source/Scene/MetadataComponentType.js +3 -1
  257. package/Source/Scene/MetadataSchemaLoader.js +0 -2
  258. package/Source/Scene/MetadataSemantic.js +6 -2
  259. package/Source/Scene/MetadataType.js +3 -1
  260. package/Source/Scene/Model/B3dmLoader.js +0 -3
  261. package/Source/Scene/Model/CustomShaderMode.js +3 -1
  262. package/Source/Scene/Model/CustomShaderTranslucencyMode.js +5 -1
  263. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +78 -337
  264. package/Source/Scene/Model/Extensions/Gpm/PpeSource.js +5 -1
  265. package/Source/Scene/Model/Extensions/Gpm/StorageType.js +5 -1
  266. package/Source/Scene/Model/GeoJsonLoader.js +0 -2
  267. package/Source/Scene/Model/I3dmLoader.js +0 -3
  268. package/Source/Scene/Model/InstancingPipelineStage.js +1 -1
  269. package/Source/Scene/Model/LightingModel.js +5 -1
  270. package/Source/Scene/Model/MaterialPipelineStage.js +184 -3
  271. package/Source/Scene/Model/Model.js +34 -0
  272. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  273. package/Source/Scene/Model/ModelDrawCommand.js +31 -3
  274. package/Source/Scene/Model/ModelReader.js +474 -3
  275. package/Source/Scene/Model/ModelRuntimePrimitive.js +2 -1
  276. package/Source/Scene/Model/ModelType.js +3 -1
  277. package/Source/Scene/Model/ModelUtility.js +4 -0
  278. package/Source/Scene/Model/PntsLoader.js +4 -3
  279. package/Source/Scene/Model/StyleCommandsNeeded.js +3 -1
  280. package/Source/Scene/Model/UniformType.js +5 -1
  281. package/Source/Scene/Model/VaryingType.js +5 -1
  282. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +500 -139
  283. package/Source/Scene/Model/pickModel.js +94 -299
  284. package/Source/Scene/ModelAnimationLoop.js +6 -1
  285. package/Source/Scene/ModelAnimationState.js +6 -1
  286. package/Source/Scene/ModelComponents.js +47 -2
  287. package/Source/Scene/Multiple3DTileContent.js +291 -334
  288. package/Source/Scene/PrimitiveState.js +7 -1
  289. package/Source/Scene/QuadtreeOccluders.js +20 -15
  290. package/Source/Scene/QuadtreeTile.js +547 -541
  291. package/Source/Scene/QuadtreeTileLoadState.js +6 -1
  292. package/Source/Scene/QuadtreeTileProvider.js +159 -175
  293. package/Source/Scene/ResourceLoader.js +0 -1
  294. package/Source/Scene/ResourceLoaderState.js +7 -1
  295. package/Source/Scene/Scene.js +26 -0
  296. package/Source/Scene/SceneMode.js +4 -1
  297. package/Source/Scene/ShadowMode.js +3 -1
  298. package/Source/Scene/SkyBox.js +1 -1
  299. package/Source/Scene/SplitDirection.js +6 -1
  300. package/Source/Scene/StencilFunction.js +6 -1
  301. package/Source/Scene/StencilOperation.js +6 -1
  302. package/Source/Scene/TerrainState.js +7 -1
  303. package/Source/Scene/TileState.js +7 -1
  304. package/Source/Scene/Tileset3DTileContent.js +113 -146
  305. package/Source/Scene/Tonemapper.js +5 -1
  306. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +499 -0
  307. package/Source/Scene/Vector3DTileContent.js +205 -234
  308. package/Source/Scene/VectorGltf3DTileContent.js +131 -61
  309. package/Source/Scene/VertexAttributeSemantic.js +3 -1
  310. package/Source/Scene/VerticalOrigin.js +6 -1
  311. package/Source/Scene/VoxelBoxShape.js +12 -6
  312. package/Source/Scene/VoxelContent.js +2 -0
  313. package/Source/Scene/VoxelCylinderShape.js +39 -38
  314. package/Source/Scene/VoxelEllipsoidShape.js +46 -96
  315. package/Source/Scene/VoxelMetadataOrder.js +6 -1
  316. package/Source/Scene/VoxelPrimitive.js +159 -175
  317. package/Source/Scene/VoxelProvider.js +64 -90
  318. package/Source/Scene/VoxelShapeType.js +3 -1
  319. package/Source/Scene/buildVectorGltfFromMVT.js +1059 -0
  320. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  321. package/Source/Scene/decodeMVT.js +634 -0
  322. package/Source/Scene/renderBufferPointCollection.js +124 -127
  323. package/Source/Scene/renderBufferPolygonCollection.js +122 -122
  324. package/Source/Scene/renderBufferPolylineCollection.js +386 -238
  325. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  326. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  327. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  328. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  329. package/Source/Shaders/BufferPolygonMaterialVS.glsl +13 -4
  330. package/Source/Shaders/BufferPolygonMaterialVS.js +14 -5
  331. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  332. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  333. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  334. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  335. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  336. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  337. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  338. package/Source/Shaders/Builtin/Functions/computeTextureTransform.glsl +24 -0
  339. package/Source/Shaders/Builtin/Functions/computeTextureTransform.js +25 -0
  340. package/Source/Shaders/Model/ConstantLodStageFS.glsl +60 -0
  341. package/Source/Shaders/Model/ConstantLodStageFS.js +62 -0
  342. package/Source/Shaders/Model/ConstantLodStageVS.glsl +12 -0
  343. package/Source/Shaders/Model/ConstantLodStageVS.js +13 -0
  344. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  345. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  346. package/Source/Shaders/Model/MaterialStageFS.glsl +46 -20
  347. package/Source/Shaders/Model/MaterialStageFS.js +46 -20
  348. package/Source/Shaders/Voxels/convertLocalToBoxUv.glsl +0 -1
  349. package/Source/Shaders/Voxels/convertLocalToBoxUv.js +0 -1
  350. package/Source/Shaders/Voxels/convertLocalToCylinderUv.glsl +7 -9
  351. package/Source/Shaders/Voxels/convertLocalToCylinderUv.js +7 -9
  352. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.glsl +7 -17
  353. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.js +7 -17
  354. package/Source/Widget/CesiumWidget.js +11 -4
  355. package/index.d.ts +595 -343
  356. package/index.js +392 -378
  357. package/package.json +3 -3
  358. package/Build/Workers/chunk-DVB56LG7.js +0 -114
  359. package/Build/Workers/chunk-HKUES6UG.js +0 -2357
  360. package/Build/Workers/chunk-HRHRYFHS.js +0 -940
  361. package/Build/Workers/chunk-KLPGTXS3.js +0 -642
  362. package/Build/Workers/chunk-ZBZRTRJB.js +0 -1829
@@ -9,15 +9,26 @@ import assert from "../Core/assert.js";
9
9
  import ComponentDatatype from "../Core/ComponentDatatype.js";
10
10
  import defined from "../Core/defined.js";
11
11
  import Check from "../Core/Check.js";
12
+ import AttributeCompression from "../Core/AttributeCompression.js";
13
+ import SceneMode from "./SceneMode.js";
14
+ import AttributeType from "./AttributeType.js";
15
+ import oneTimeWarning from "../Core/oneTimeWarning.js";
16
+ import BlendOption from "../Scene/BlendOption.js";
12
17
 
13
18
  /** @import { Destroyable, TypedArray, TypedArrayConstructor } from "../Core/globalTypes.js"; */
19
+ /** @import Context from "../Renderer/Context.js"; */
20
+ /** @import FrameState from "./FrameState.js"; */
14
21
  /** @import BufferPrimitive from "./BufferPrimitive.js"; */
15
22
  /** @import BufferPrimitiveMaterial from "./BufferPrimitiveMaterial.js"; */
23
+ /** @import PickId from "../Renderer/PickId.js"; */
16
24
 
17
25
  /**
18
26
  * @typedef {object} BufferPrimitiveOptions
27
+ * @property {Matrix4} [modelMatrix=Matrix4.IDENTITY] Transforms geometry from model to world coordinates.
19
28
  * @property {boolean} [show=true]
20
29
  * @property {BufferPrimitiveMaterial} [material]
30
+ * @property {number} [featureId]
31
+ * @property {object} [pickObject]
21
32
  * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
22
33
  */
23
34
 
@@ -40,19 +51,6 @@ import Check from "../Core/Check.js";
40
51
  * @see BufferPolygonCollection
41
52
  */
42
53
  class BufferPrimitiveCollection {
43
- /**
44
- * Default capacity of buffers on new collections. A quantity of elements:
45
- * number of vertices in the vertex buffer, primitives in the primitive
46
- * buffer, etc. This value is arbitrary, and collections cannot be resized,
47
- * so specific per-buffer capacities should be provided in the collection
48
- * constructor when available.
49
- *
50
- * @type {number}
51
- * @readonly
52
- * @static
53
- */
54
- static DEFAULT_CAPACITY = 1024;
55
-
56
54
  /** @ignore */
57
55
  static Error = {
58
56
  ERR_RESIZE: "BufferPrimitive range cannot be resized after initialization.",
@@ -79,8 +77,16 @@ class BufferPrimitiveCollection {
79
77
  * @param {number} [options.vertexCountMax=BufferPrimitiveCollection.DEFAULT_CAPACITY]
80
78
  * @param {boolean} [options.show=true]
81
79
  * @param {ComponentDatatype} [options.positionDatatype=ComponentDatatype.DOUBLE]
80
+ * @param {boolean} [options.positionNormalized=false] When <code>true</code>, integer position values are treated as normalized,
81
+ * where the full integer range maps to [-1, 1] (signed) or [0, 1] (unsigned). Only relevant for integer position datatypes
82
+ * (BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT).
82
83
  * @param {boolean} [options.allowPicking=false] When <code>true</code>, primitives are pickable with {@link Scene#pick}. When <code>false</code>, memory and initialization cost are lower.
84
+ * @param {BoundingSphere} [options.boundingVolume] Bounding volume, in world space, for the collection. When
85
+ * unspecified, a bounding volume is computed automatically and updated when primitive positions change. When
86
+ * specified, users are responsible for updating bounding volume as needed. Pre-computing the bounding volume
87
+ * manually, and updating it only as needed, will improve performance for larger dynamic collections.
83
88
  * @param {boolean} [options.debugShowBoundingVolume=false]
89
+ * @param {BlendOption} [options.blendOption=BlendOption.TRANSLUCENT]
84
90
  */
85
91
  constructor(options = Frozen.EMPTY_OBJECT) {
86
92
  /**
@@ -90,26 +96,39 @@ class BufferPrimitiveCollection {
90
96
  */
91
97
  this.show = options.show ?? true;
92
98
 
99
+ /**
100
+ * Collection blend option; must be OPAQUE or TRANSLUCENT.
101
+ * @type {BlendOption}
102
+ * @readonly
103
+ * @ignore
104
+ */
105
+ this._blendOption = options.blendOption ?? BlendOption.TRANSLUCENT;
106
+
93
107
  /**
94
108
  * Transforms geometry from model to world coordinates.
95
109
  * @type {Matrix4}
96
110
  * @default Matrix4.IDENTITY
111
+ * @readonly
112
+ * @protected
97
113
  */
98
- this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);
114
+ this._modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);
99
115
 
100
116
  /**
101
- * Local bounding volume for all primitives in the collection, including both
102
- * shown and hidden primitives.
103
117
  * @type {BoundingSphere}
118
+ * @readonly
119
+ * @protected
104
120
  */
105
- this.boundingVolume = new BoundingSphere();
121
+ this._boundingVolume = BoundingSphere.clone(
122
+ options.boundingVolume ?? new BoundingSphere(),
123
+ new BoundingSphere(),
124
+ );
106
125
 
107
126
  /**
108
- * World bounding volume for all primitives in the collection, including both
109
- * shown and hidden primitives.
110
- * @type {BoundingSphere}
127
+ * @type {boolean}
128
+ * @readonly
129
+ * @protected
111
130
  */
112
- this.boundingVolumeWC = new BoundingSphere();
131
+ this._boundingVolumeAutoUpdate = !defined(options.boundingVolume);
113
132
 
114
133
  /**
115
134
  * When <code>true</code>, primitives are pickable with {@link Scene#pick}.
@@ -121,6 +140,20 @@ class BufferPrimitiveCollection {
121
140
  */
122
141
  this._allowPicking = options.allowPicking ?? false;
123
142
 
143
+ /**
144
+ * @type {Map<Context, PickId[]>}
145
+ * @readonly
146
+ * @ignore
147
+ */
148
+ this._pickIds = new Map();
149
+
150
+ /**
151
+ * @type {object[]}
152
+ * @readonly
153
+ * @ignore
154
+ */
155
+ this._pickObjects = [];
156
+
124
157
  /**
125
158
  * This property is for debugging only; it is not for production use nor is it optimized.
126
159
  * <p>
@@ -173,6 +206,21 @@ class BufferPrimitiveCollection {
173
206
  */
174
207
  this._positionView = null;
175
208
 
209
+ /**
210
+ * @type {ComponentDatatype}
211
+ * @ignore
212
+ */
213
+ this._positionDatatype =
214
+ options.positionDatatype ?? ComponentDatatype.DOUBLE;
215
+
216
+ /**
217
+ * When <code>true</code>, integer position values represent normalized floats
218
+ * in [-1, 1] (signed) or [0, 1] (unsigned). Only applicable to integer datatypes.
219
+ * @type {boolean}
220
+ * @ignore
221
+ */
222
+ this._positionNormalized = options.positionNormalized ?? false;
223
+
176
224
  /**
177
225
  * @type {DataView<ArrayBuffer>}
178
226
  * @ignore
@@ -202,10 +250,7 @@ class BufferPrimitiveCollection {
202
250
  this._dirtyBoundingVolume = false;
203
251
 
204
252
  this._allocatePrimitiveBuffer();
205
- this._allocatePositionBuffer(
206
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
207
- options.positionDatatype ?? ComponentDatatype.DOUBLE,
208
- );
253
+ this._allocatePositionBuffer();
209
254
  this._allocateMaterialBuffer();
210
255
  }
211
256
 
@@ -258,14 +303,13 @@ class BufferPrimitiveCollection {
258
303
  }
259
304
 
260
305
  /**
261
- * @param {ComponentDatatype} datatype
262
306
  * @private
263
307
  * @ignore
264
308
  */
265
- _allocatePositionBuffer(datatype) {
266
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
309
+ _allocatePositionBuffer() {
310
+ // @ts-expect-error https://github.com/CesiumGS/cesium/issues/13420
267
311
  this._positionView = ComponentDatatype.createTypedArray(
268
- datatype,
312
+ this._positionDatatype,
269
313
  this._positionCountMax * 3,
270
314
  );
271
315
  }
@@ -292,6 +336,14 @@ class BufferPrimitiveCollection {
292
336
 
293
337
  /** Destroys collection and its GPU resources. */
294
338
  destroy() {
339
+ this._pickObjects.length = 0;
340
+
341
+ for (const contextPickIds of this._pickIds.values()) {
342
+ for (const pickId of contextPickIds) {
343
+ pickId.destroy();
344
+ }
345
+ }
346
+
295
347
  if (defined(this._renderContext)) {
296
348
  this._renderContext.destroy();
297
349
  this._renderContext = undefined;
@@ -454,16 +506,19 @@ class BufferPrimitiveCollection {
454
506
  * @ignore
455
507
  */
456
508
  _updateBoundingVolume() {
457
- const TypedArray = /** @type {TypedArrayConstructor} */ (
458
- this._positionView.constructor
459
- );
460
-
461
509
  // Exclude unused space in the position buffer.
462
- const vertices = new TypedArray(
463
- /** @type {ArrayBuffer} */ (this._positionView.buffer),
464
- this._positionView.byteOffset,
465
- this._positionCount * 3,
466
- );
510
+ let vertices = this._positionView.subarray(0, this._positionCount * 3);
511
+
512
+ if (this._positionNormalized) {
513
+ vertices = AttributeCompression.dequantize(
514
+ /** @type {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array} */ (
515
+ vertices
516
+ ),
517
+ this._positionDatatype,
518
+ AttributeType.VEC3,
519
+ this._positionCount,
520
+ );
521
+ }
467
522
 
468
523
  BoundingSphere.fromVertices(
469
524
  vertices,
@@ -474,11 +529,51 @@ class BufferPrimitiveCollection {
474
529
  BoundingSphere.transform(
475
530
  this.boundingVolume,
476
531
  this.modelMatrix,
477
- this.boundingVolumeWC,
532
+ this.boundingVolume,
478
533
  );
479
534
  this._dirtyBoundingVolume = false;
480
535
  }
481
536
 
537
+ /**
538
+ * Updates PickIds for the given context.
539
+ * @param {Context} context
540
+ * @protected
541
+ * @ignore
542
+ */
543
+ _updatePickIds(context) {
544
+ let pickIds = this._pickIds.get(context);
545
+ if (pickIds && pickIds.length === this._primitiveCount) {
546
+ return;
547
+ }
548
+
549
+ if (!pickIds) {
550
+ pickIds = [];
551
+ this._pickIds.set(context, pickIds);
552
+ }
553
+
554
+ const collection = this;
555
+ const PrimitiveClass = this._getPrimitiveClass();
556
+ const primitive = new PrimitiveClass();
557
+
558
+ // Fill in missing PickIDs for recently-added primitives.
559
+ for (let i = pickIds.length, il = this._primitiveCount; i < il; i++) {
560
+ this.get(i, primitive);
561
+
562
+ const pickObject = this._pickObjects[i] || {
563
+ collection: this,
564
+ index: i,
565
+ get primitive() {
566
+ // Cannot reuse primitives; scene.drillPick() appends to a list.
567
+ return collection.get(i, new PrimitiveClass());
568
+ },
569
+ };
570
+
571
+ const pickId = context.createPickId(pickObject);
572
+ primitive._pickId = pickId.key;
573
+ pickIds.push(pickId);
574
+ }
575
+ }
576
+
482
577
  /////////////////////////////////////////////////////////////////////////////
483
578
  // PRIMITIVE LIFECYCLE
484
579
 
@@ -532,13 +627,19 @@ class BufferPrimitiveCollection {
532
627
  //>>includeEnd('debug');
533
628
 
534
629
  const MaterialClass = this._getMaterialClass();
630
+ const index = this._primitiveCount++;
535
631
 
536
- result = this.get(this._primitiveCount++, result);
537
- result.featureId = this._primitiveCount - 1;
632
+ result = this.get(index, result);
633
+ result.featureId = options.featureId ?? index;
538
634
  result.show = options.show ?? true;
539
635
  result.setMaterial(options.material ?? MaterialClass.DEFAULT_MATERIAL);
540
636
  result._pickId = 0; // unset
541
637
  result._dirty = true;
638
+
639
+ if (defined(options.pickObject)) {
640
+ this._pickObjects[index] = options.pickObject;
641
+ }
642
+
542
643
  return result;
543
644
  }
544
645
 
@@ -560,11 +661,14 @@ class BufferPrimitiveCollection {
560
661
  }
561
662
 
562
663
  /**
563
- * Marks collection bounding volume as 'dirty', to be updated on next render.
664
+ * Marks collection bounding volume as 'dirty', to be updated on next render,
665
+ * if automatic bounding volume updates are enabled.
564
666
  * @ignore
565
667
  */
566
668
  _makeDirtyBoundingVolume() {
567
- this._dirtyBoundingVolume = true;
669
+ if (this._boundingVolumeAutoUpdate) {
670
+ this._dirtyBoundingVolume = true;
671
+ }
568
672
  }
569
673
 
570
674
  /////////////////////////////////////////////////////////////////////////////
@@ -572,9 +676,19 @@ class BufferPrimitiveCollection {
572
676
 
573
677
  /** @param {object} frameState */
574
678
  update(frameState) {
679
+ if (/** @type {FrameState} */ (frameState).mode !== SceneMode.SCENE3D) {
680
+ oneTimeWarning(
681
+ "bufferprim-scenemode",
682
+ "BufferPrimitiveCollection requires SceneMode.SCENE3D.",
683
+ );
684
+ }
685
+
575
686
  if (this._dirtyBoundingVolume) {
576
687
  this._updateBoundingVolume();
577
688
  }
689
+ if (this._allowPicking && this._dirtyCount > 0) {
690
+ this._updatePickIds(/** @type {FrameState} */ (frameState).context);
691
+ }
578
692
  }
579
693
 
580
694
  /////////////////////////////////////////////////////////////////////////////
@@ -640,6 +754,46 @@ class BufferPrimitiveCollection {
640
754
  return this._positionCountMax;
641
755
  }
642
756
 
757
+ /**
758
+ * Transforms geometry from model to world coordinates.
759
+ * @type {Matrix4}
760
+ * @default Matrix4.IDENTITY
761
+ * @readonly
762
+ */
763
+ get modelMatrix() {
764
+ return this._modelMatrix;
765
+ }
766
+
767
+ /**
768
+ * World-space bounding volume for all primitives in the collection, including both
769
+ * shown and hidden primitives.
770
+ * @type {BoundingSphere}
771
+ * @readonly
772
+ */
773
+ get boundingVolume() {
774
+ return this._boundingVolume;
775
+ }
776
+
777
+ /**
778
+ * The component datatype used to store position values.
779
+ * @type {ComponentDatatype}
780
+ * @readonly
781
+ */
782
+ get positionDatatype() {
783
+ return this._positionDatatype;
784
+ }
785
+
786
+ /**
787
+ * When <code>true</code>, integer position values are treated as normalized
788
+ * values, where the full integer range maps to [-1, 1] (signed) or [0, 1]
789
+ * (unsigned).
790
+ * @type {boolean}
791
+ * @readonly
792
+ */
793
+ get positionNormalized() {
794
+ return this._positionNormalized;
795
+ }
796
+
643
797
  /////////////////////////////////////////////////////////////////////////////
644
798
  // UTILS
645
799
 
@@ -699,4 +853,17 @@ class BufferPrimitiveCollection {
699
853
  }
700
854
  }
701
855
 
856
+ /**
857
+ * Default capacity of buffers on new collections. A quantity of elements:
858
+ * number of vertices in the vertex buffer, primitives in the primitive
859
+ * buffer, etc. This value is arbitrary, and collections cannot be resized,
860
+ * so specific per-buffer capacities should be provided in the collection
861
+ * constructor when available.
862
+ *
863
+ * @type {number}
864
+ * @static
865
+ * @constant
866
+ */
867
+ BufferPrimitiveCollection.DEFAULT_CAPACITY = 1024;
868
+
702
869
  export default BufferPrimitiveCollection;
@@ -8,12 +8,29 @@ import ScreenSpaceEventHandler from "../Core/ScreenSpaceEventHandler.js";
8
8
  import ScreenSpaceEventType from "../Core/ScreenSpaceEventType.js";
9
9
  import CameraEventType from "./CameraEventType.js";
10
10
 
11
- function getKey(type, modifier) {
12
- let key = `${type}`;
13
- if (defined(modifier)) {
14
- key += `+${modifier}`;
11
+ const keyboardModifierCombinations = [
12
+ KeyboardEventModifier.SHIFT,
13
+ KeyboardEventModifier.CTRL,
14
+ KeyboardEventModifier.ALT,
15
+ [KeyboardEventModifier.SHIFT, KeyboardEventModifier.CTRL],
16
+ [KeyboardEventModifier.SHIFT, KeyboardEventModifier.ALT],
17
+ [KeyboardEventModifier.CTRL, KeyboardEventModifier.ALT],
18
+ [
19
+ KeyboardEventModifier.SHIFT,
20
+ KeyboardEventModifier.CTRL,
21
+ KeyboardEventModifier.ALT,
22
+ ],
23
+ ];
24
+
25
+ function getKey(type, modifiers) {
26
+ if (!defined(modifiers)) {
27
+ return `${type}`;
15
28
  }
16
- return key;
29
+
30
+ const modifierList = Array.isArray(modifiers)
31
+ ? modifiers.toSorted()
32
+ : [modifiers];
33
+ return `${type}+${modifierList.join("+")}`;
17
34
  }
18
35
 
19
36
  function clonePinchMovement(pinchMovement, result) {
@@ -219,7 +236,7 @@ function listenMouseButtonDownUp(aggregator, modifier, type) {
219
236
  aggregator._eventHandler.setInputAction(
220
237
  function () {
221
238
  cancelMouseDownAction(getKey(type, undefined), aggregator);
222
- for (const modifier of Object.values(KeyboardEventModifier)) {
239
+ for (const modifier of keyboardModifierCombinations) {
223
240
  const cancelKey = getKey(type, modifier);
224
241
  cancelMouseDownAction(cancelKey, aggregator);
225
242
  }
@@ -382,18 +399,13 @@ function CameraEventAggregator(canvas) {
382
399
  listenMouseButtonDownUp(this, undefined, CameraEventType.MIDDLE_DRAG);
383
400
  listenMouseMove(this, undefined);
384
401
 
385
- for (const modifierName in KeyboardEventModifier) {
386
- if (KeyboardEventModifier.hasOwnProperty(modifierName)) {
387
- const modifier = KeyboardEventModifier[modifierName];
388
- if (defined(modifier)) {
389
- listenToWheel(this, modifier);
390
- listenToPinch(this, modifier, canvas);
391
- listenMouseButtonDownUp(this, modifier, CameraEventType.LEFT_DRAG);
392
- listenMouseButtonDownUp(this, modifier, CameraEventType.RIGHT_DRAG);
393
- listenMouseButtonDownUp(this, modifier, CameraEventType.MIDDLE_DRAG);
394
- listenMouseMove(this, modifier);
395
- }
396
- }
402
+ for (const modifiers of keyboardModifierCombinations) {
403
+ listenToWheel(this, modifiers);
404
+ listenToPinch(this, modifiers, canvas);
405
+ listenMouseButtonDownUp(this, modifiers, CameraEventType.LEFT_DRAG);
406
+ listenMouseButtonDownUp(this, modifiers, CameraEventType.RIGHT_DRAG);
407
+ listenMouseButtonDownUp(this, modifiers, CameraEventType.MIDDLE_DRAG);
408
+ listenMouseMove(this, modifiers);
397
409
  }
398
410
  }
399
411
 
@@ -1,3 +1,5 @@
1
+ // @ts-check
2
+
1
3
  /**
2
4
  * Enumerates the available input for interacting with the camera.
3
5
  *
@@ -44,4 +46,7 @@ const CameraEventType = {
44
46
  */
45
47
  PINCH: 4,
46
48
  };
47
- export default Object.freeze(CameraEventType);
49
+
50
+ Object.freeze(CameraEventType);
51
+
52
+ export default CameraEventType;
@@ -1232,6 +1232,16 @@ async function processArrayBuffer(
1232
1232
  return;
1233
1233
  }
1234
1234
 
1235
+ if (isEmptyTile(tile, error)) {
1236
+ if (expired) {
1237
+ tile.expireDate = undefined;
1238
+ }
1239
+ tile._content = new Empty3DTileContent(tileset, tile);
1240
+ markTileAsEmptyContent(tile);
1241
+ tile._contentState = Cesium3DTileContentState.PROCESSING;
1242
+ return tile._content;
1243
+ }
1244
+
1235
1245
  tile._contentState = Cesium3DTileContentState.FAILED;
1236
1246
  throw error;
1237
1247
  }
@@ -1264,6 +1274,9 @@ async function processArrayBuffer(
1264
1274
  }
1265
1275
 
1266
1276
  tile._content = content;
1277
+ if (content instanceof Empty3DTileContent) {
1278
+ markTileAsEmptyContent(tile);
1279
+ }
1267
1280
  tile._contentState = Cesium3DTileContentState.PROCESSING;
1268
1281
 
1269
1282
  return content;
@@ -1316,6 +1329,35 @@ function requestSingleContent(tile) {
1316
1329
  return processArrayBuffer(tile, tileset, request, expired, promise);
1317
1330
  }
1318
1331
 
1332
+ /**
1333
+ * Determines whether a tile load error should be interpreted as "no content"
1334
+ * (empty tile) rather than a true failure. A missing tile policy specifies
1335
+ * HTTP Status Codes to be interpreted as "no content", allowing tiles to be
1336
+ * statically hosted without generating and serving unnecessary content for
1337
+ * empty tiles.
1338
+ * @ignore
1339
+ */
1340
+ function isEmptyTile(tile, error) {
1341
+ const tileset = tile._tileset;
1342
+ const policy = tileset?._runtimeContentCodec?.missingTilePolicy;
1343
+ if (!defined(policy)) {
1344
+ return false;
1345
+ }
1346
+
1347
+ if (!defined(error.statusCode)) {
1348
+ return false;
1349
+ }
1350
+ return policy.statusCodes.includes(error.statusCode);
1351
+ }
1352
+
1353
+ function markTileAsEmptyContent(tile) {
1354
+ // These flags are mutable instance state initialized in the constructor.
1355
+ tile.hasEmptyContent = true;
1356
+ tile.hasRenderableContent = false;
1357
+ }
1358
+
1359
+ Cesium3DTile._isEmptyTile = isEmptyTile;
1360
+
1319
1361
  /**
1320
1362
  * Given a downloaded content payload, construct a {@link Cesium3DTileContent}.
1321
1363
  * <p>
@@ -1328,10 +1370,21 @@ function requestSingleContent(tile) {
1328
1370
  * @private
1329
1371
  */
1330
1372
  async function makeContent(tile, arrayBuffer) {
1373
+ const tileset = tile._tileset;
1374
+ const codec = tileset?._runtimeContentCodec;
1375
+ if (defined(codec) && typeof codec.createContent === "function") {
1376
+ const content = await Promise.resolve(
1377
+ codec.createContent(tileset, tile, tile._contentResource, arrayBuffer),
1378
+ );
1379
+ if (tile.isDestroyed()) {
1380
+ return;
1381
+ }
1382
+ return content;
1383
+ }
1384
+
1331
1385
  const preprocessed = preprocess3DTileContent(arrayBuffer);
1332
1386
 
1333
1387
  // Vector and Geometry tile rendering do not support the skip LOD optimization.
1334
- const tileset = tile._tileset;
1335
1388
  tileset._disableSkipLevelOfDetail =
1336
1389
  tileset._disableSkipLevelOfDetail ||
1337
1390
  preprocessed.contentType === Cesium3DTileContentType.GEOMETRY ||
@@ -1,3 +1,5 @@
1
+ // @ts-check
2
+
1
3
  /**
2
4
  * Defines how per-feature colors set from the Cesium API or declarative styling blend with the source colors from
3
5
  * the original feature, e.g. glTF material or per-point color in the tile.
@@ -49,4 +51,7 @@ const Cesium3DTileColorBlendMode = {
49
51
  */
50
52
  MIX: 2,
51
53
  };
52
- export default Object.freeze(Cesium3DTileColorBlendMode);
54
+
55
+ Object.freeze(Cesium3DTileColorBlendMode);
56
+
57
+ export default Cesium3DTileColorBlendMode;