@cesium/engine 23.0.1 → 25.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 (398) hide show
  1. package/Build/Workers/{chunk-ZEMJQKHD.js → chunk-35H3UBIO.js} +13 -12
  2. package/Build/Workers/{chunk-PQTSXJBJ.js → chunk-3LSD7OOA.js} +16 -16
  3. package/Build/Workers/{chunk-PUO7BYDY.js → chunk-3RFFPH4M.js} +1 -1
  4. package/Build/Workers/{chunk-PBECJOWF.js → chunk-3TKLDHV3.js} +2 -2
  5. package/Build/Workers/{chunk-TMCTZ5E3.js → chunk-3VDDRF2E.js} +14 -14
  6. package/Build/Workers/{chunk-FKU77FNM.js → chunk-3XY3MVPG.js} +4 -4
  7. package/Build/Workers/{chunk-2OBWHTIC.js → chunk-4GF4MVPY.js} +7 -7
  8. package/Build/Workers/{chunk-JUKGMJX7.js → chunk-4MTRQFJP.js} +3 -2
  9. package/Build/Workers/{chunk-66OWUDO7.js → chunk-4QQXGTCE.js} +8 -8
  10. package/Build/Workers/{chunk-ALTCIHRH.js → chunk-4XXHJI6Y.js} +17 -17
  11. package/Build/Workers/{chunk-K7UTK4OM.js → chunk-5T6QQAJW.js} +3 -2
  12. package/Build/Workers/{chunk-IJ3SUMK3.js → chunk-6SDGQI27.js} +3 -2
  13. package/Build/Workers/{chunk-FXSRA5UG.js → chunk-77RL3MBD.js} +6 -5
  14. package/Build/Workers/{chunk-G6MJ3ZW3.js → chunk-7LSFAEWF.js} +12 -11
  15. package/Build/Workers/{chunk-C6HHBKT5.js → chunk-A7A433MD.js} +5 -5
  16. package/Build/Workers/{chunk-PGZ3B6CB.js → chunk-A7ZBMVFS.js} +14 -14
  17. package/Build/Workers/{chunk-OZYB3AOR.js → chunk-ACFFCHHZ.js} +11 -11
  18. package/Build/Workers/{chunk-DNMASBMH.js → chunk-AEAVLYPS.js} +2 -2
  19. package/Build/Workers/{chunk-VPWYHFQA.js → chunk-AWFZHD2B.js} +4 -4
  20. package/Build/Workers/{chunk-TFPG3ZKW.js → chunk-BTX2NL3P.js} +59 -46
  21. package/Build/Workers/{chunk-TNXOPEIG.js → chunk-BVAIWR7O.js} +12 -12
  22. package/Build/Workers/chunk-CKQP3DSS.js +973 -0
  23. package/Build/Workers/{chunk-N6HRZLS6.js → chunk-CZ23Y3RM.js} +2 -2
  24. package/Build/Workers/{chunk-EIC3VAOZ.js → chunk-DFEI5MAV.js} +7 -7
  25. package/Build/Workers/{chunk-BTP3634E.js → chunk-DH26SNAB.js} +4 -1
  26. package/Build/Workers/{chunk-TXYQNXNW.js → chunk-DYT5NR6P.js} +3 -3
  27. package/Build/Workers/{chunk-O67UP5YO.js → chunk-EZARA5FJ.js} +13 -13
  28. package/Build/Workers/{chunk-YSJRB2UZ.js → chunk-FIBS5S7R.js} +2 -2
  29. package/Build/Workers/{chunk-2M7DKGLW.js → chunk-FVLVVOBQ.js} +10 -10
  30. package/Build/Workers/{chunk-B2VA6IEL.js → chunk-GL7DNVUS.js} +5 -5
  31. package/Build/Workers/{chunk-77DJBHMI.js → chunk-GPIGURCG.js} +59 -32
  32. package/Build/Workers/{chunk-QPXGGVHC.js → chunk-H2A4USJR.js} +10 -10
  33. package/Build/Workers/chunk-HSVQATK2.js +147 -0
  34. package/Build/Workers/{chunk-HXEPZWJN.js → chunk-HVMG6AG4.js} +11 -10
  35. package/Build/Workers/{chunk-H3TVRJLY.js → chunk-I3A6DXYZ.js} +4 -4
  36. package/Build/Workers/{chunk-UEWYSOFD.js → chunk-ITD2IN7N.js} +2 -2
  37. package/Build/Workers/{chunk-CYOPNGPX.js → chunk-J3OFS2RD.js} +12 -12
  38. package/Build/Workers/{chunk-RZX6LOG6.js → chunk-J647NNZW.js} +6 -6
  39. package/Build/Workers/{chunk-GLCPE2BJ.js → chunk-J7KQEKPK.js} +13 -13
  40. package/Build/Workers/{chunk-XPMXRJDD.js → chunk-K6NFIRFB.js} +5 -5
  41. package/Build/Workers/{chunk-CID5SY7L.js → chunk-LH5SF3XV.js} +7 -6
  42. package/Build/Workers/{chunk-UOQB7XQI.js → chunk-ND3NTTOF.js} +713 -435
  43. package/Build/Workers/chunk-QO2CGXMP.js +2342 -0
  44. package/Build/Workers/chunk-QSDY4NS7.js +1287 -0
  45. package/Build/Workers/chunk-QXNQQYPV.js +3201 -0
  46. package/Build/Workers/{chunk-CJ7ZDY77.js → chunk-ST2UWDUU.js} +5 -5
  47. package/Build/Workers/{chunk-YDR5LX5Z.js → chunk-TA777BGS.js} +3 -2
  48. package/Build/Workers/{chunk-U4SWB6TI.js → chunk-TAI4HLII.js} +4 -4
  49. package/Build/Workers/{chunk-VX774SWE.js → chunk-URUCCIPS.js} +6 -6
  50. package/Build/Workers/{chunk-MNSNOONX.js → chunk-VQKLRBIK.js} +7 -7
  51. package/Build/Workers/{chunk-CVAAIRNP.js → chunk-WC57YYBN.js} +2 -2
  52. package/Build/Workers/{chunk-QNABVTTP.js → chunk-WN6P5UDH.js} +12 -12
  53. package/Build/Workers/{chunk-CNLXMOPM.js → chunk-WNN5D4W3.js} +12 -11
  54. package/Build/Workers/{chunk-4JJQRZYL.js → chunk-WTQGE7Q6.js} +17 -17
  55. package/Build/Workers/{chunk-FCJQO4NC.js → chunk-WUBKZFF6.js} +2213 -1349
  56. package/Build/Workers/{chunk-3UQ2YMPP.js → chunk-ZAPOS52G.js} +12 -10
  57. package/Build/Workers/{chunk-LHFC4R7Z.js → chunk-ZCCIIBZT.js} +6 -6
  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 +25 -25
  100. package/Build/Workers/createWallOutlineGeometry.js +24 -24
  101. package/Build/Workers/decodeDraco.js +10 -10
  102. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  103. package/Build/Workers/decodeI3S.js +12 -12
  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 +7 -5
  116. package/Source/Core/Cartesian3.js +9 -8
  117. package/Source/Core/Cartesian4.js +8 -6
  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 +846 -835
  122. package/Source/Core/ComponentDatatype.js +4 -1
  123. package/Source/Core/CornerType.js +6 -1
  124. package/Source/Core/Credit.js +121 -124
  125. package/Source/Core/DeveloperError.js +2 -1
  126. package/Source/Core/Ellipsoid.js +637 -660
  127. package/Source/Core/ExtrapolationType.js +6 -1
  128. package/Source/Core/GeocodeType.js +6 -1
  129. package/Source/Core/GeographicProjection.js +74 -74
  130. package/Source/Core/GeographicTilingScheme.js +179 -198
  131. package/Source/Core/GeometryOffsetAttribute.js +7 -1
  132. package/Source/Core/GeometryType.js +7 -1
  133. package/Source/Core/HeightmapEncoding.js +6 -1
  134. package/Source/Core/ITwinPlatform.js +1 -0
  135. package/Source/Core/Iau2006XysData.js +24 -13
  136. package/Source/Core/IndexDatatype.js +3 -1
  137. package/Source/Core/InterpolationType.js +5 -1
  138. package/Source/Core/Intersect.js +6 -1
  139. package/Source/Core/Ion.js +1 -1
  140. package/Source/Core/IonGeocodeProviderType.js +5 -1
  141. package/Source/Core/JulianDate.js +850 -848
  142. package/Source/Core/KeyboardEventModifier.js +6 -1
  143. package/Source/Core/MapProjection.js +39 -44
  144. package/Source/Core/Matrix2.js +906 -893
  145. package/Source/Core/Matrix3.js +1643 -1575
  146. package/Source/Core/Matrix4.js +2903 -2872
  147. package/Source/Core/PixelFormat.js +3 -1
  148. package/Source/Core/PrimitiveType.js +11 -1
  149. package/Source/Core/Ray.js +62 -60
  150. package/Source/Core/Rectangle.js +913 -904
  151. package/Source/Core/ReferenceFrame.js +6 -1
  152. package/Source/Core/RequestScheduler.js +8 -3
  153. package/Source/Core/RequestState.js +6 -1
  154. package/Source/Core/RequestType.js +6 -1
  155. package/Source/Core/S2Cell.js +2 -2
  156. package/Source/Core/ScreenSpaceEventType.js +6 -1
  157. package/Source/Core/TerrainMesh.js +10 -1
  158. package/Source/Core/TerrainPicker.js +1 -0
  159. package/Source/Core/TerrainQuantization.js +6 -1
  160. package/Source/Core/TilingScheme.js +100 -98
  161. package/Source/Core/TimeConstants.js +6 -1
  162. package/Source/Core/TimeStandard.js +6 -1
  163. package/Source/Core/TrackingReferenceFrame.js +6 -1
  164. package/Source/Core/Visibility.js +6 -1
  165. package/Source/Core/VulkanConstants.js +6 -1
  166. package/Source/Core/WallGeometry.js +1 -1
  167. package/Source/Core/WallOutlineGeometry.js +1 -1
  168. package/Source/Core/WebGLConstants.js +6 -1
  169. package/Source/Core/WebMercatorProjection.js +108 -109
  170. package/Source/Core/WebMercatorTilingScheme.js +246 -242
  171. package/Source/Core/WindingOrder.js +3 -1
  172. package/Source/Core/assert.js +27 -0
  173. package/Source/Core/globalTypes.js +4 -0
  174. package/Source/DataSources/CzmlDataSource.js +9 -0
  175. package/Source/DataSources/PathGraphics.js +13 -0
  176. package/Source/DataSources/PathVisualizer.js +330 -18
  177. package/Source/DataSources/StaticGeometryColorBatch.js +7 -2
  178. package/Source/DataSources/StaticGeometryPerMaterialBatch.js +7 -2
  179. package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +4 -1
  180. package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +4 -1
  181. package/Source/DataSources/StripeOrientation.js +6 -1
  182. package/Source/Renderer/BufferUsage.js +20 -9
  183. package/Source/Renderer/Context.js +2 -29
  184. package/Source/Renderer/DrawCommand.js +435 -403
  185. package/Source/Renderer/MipmapHint.js +5 -1
  186. package/Source/Renderer/Pass.js +7 -1
  187. package/Source/Renderer/PickId.js +44 -0
  188. package/Source/Renderer/PixelDatatype.js +3 -1
  189. package/Source/Renderer/RenderState.js +2 -2
  190. package/Source/Renderer/RenderbufferFormat.js +5 -1
  191. package/Source/Renderer/ShaderDestination.js +4 -1
  192. package/Source/Renderer/TextureMagnificationFilter.js +3 -1
  193. package/Source/Renderer/TextureMinificationFilter.js +3 -1
  194. package/Source/Renderer/TextureWrap.js +5 -1
  195. package/Source/Renderer/VertexArray.js +80 -0
  196. package/Source/Scene/AlphaMode.js +5 -1
  197. package/Source/Scene/ArcGisBaseMapType.js +6 -1
  198. package/Source/Scene/ArcGisMapService.js +1 -1
  199. package/Source/Scene/AttributeType.js +3 -1
  200. package/Source/Scene/Axis.js +3 -1
  201. package/Source/Scene/BillboardCollection.js +65 -364
  202. package/Source/Scene/BingMapsStyle.js +6 -1
  203. package/Source/Scene/BlendEquation.js +6 -1
  204. package/Source/Scene/BlendFunction.js +6 -1
  205. package/Source/Scene/BlendOption.js +6 -1
  206. package/Source/Scene/BlendingState.js +6 -1
  207. package/Source/Scene/BufferLoader.js +0 -2
  208. package/Source/Scene/BufferPoint.js +148 -0
  209. package/Source/Scene/BufferPointCollection.js +138 -0
  210. package/Source/Scene/BufferPointMaterial.js +95 -0
  211. package/Source/Scene/BufferPolygon.js +516 -0
  212. package/Source/Scene/BufferPolygonCollection.js +370 -0
  213. package/Source/Scene/BufferPolygonMaterial.js +41 -0
  214. package/Source/Scene/BufferPolyline.js +185 -0
  215. package/Source/Scene/BufferPolylineCollection.js +138 -0
  216. package/Source/Scene/BufferPolylineMaterial.js +93 -0
  217. package/Source/Scene/BufferPrimitive.js +347 -0
  218. package/Source/Scene/BufferPrimitiveCollection.js +818 -0
  219. package/Source/Scene/BufferPrimitiveMaterial.js +140 -0
  220. package/Source/Scene/CameraEventType.js +6 -1
  221. package/Source/Scene/Cesium3DTileColorBlendMode.js +6 -1
  222. package/Source/Scene/Cesium3DTileContent.js +5 -1
  223. package/Source/Scene/Cesium3DTileContentFactory.js +9 -0
  224. package/Source/Scene/Cesium3DTileContentState.js +6 -1
  225. package/Source/Scene/Cesium3DTileContentType.js +3 -1
  226. package/Source/Scene/Cesium3DTileFeature.js +289 -306
  227. package/Source/Scene/Cesium3DTileOptimizationHint.js +6 -1
  228. package/Source/Scene/Cesium3DTilePass.js +5 -1
  229. package/Source/Scene/Cesium3DTilePointFeature.js +433 -511
  230. package/Source/Scene/Cesium3DTileRefine.js +6 -1
  231. package/Source/Scene/Cesium3DTileStyle.js +22 -0
  232. package/Source/Scene/Cesium3DTileVectorFeature.js +586 -0
  233. package/Source/Scene/Cesium3DTileset.js +2 -1
  234. package/Source/Scene/ClassificationType.js +3 -1
  235. package/Source/Scene/ClippingPolygonCollection.js +270 -101
  236. package/Source/Scene/CloudType.js +3 -1
  237. package/Source/Scene/ColorBlendMode.js +4 -1
  238. package/Source/Scene/CubeMapPanorama.js +4 -4
  239. package/Source/Scene/CullFace.js +6 -1
  240. package/Source/Scene/DepthFunction.js +6 -1
  241. package/Source/Scene/DynamicAtmosphereLightingType.js +3 -1
  242. package/Source/Scene/EquirectangularPanorama.js +1 -0
  243. package/Source/Scene/ExpressionNodeType.js +6 -1
  244. package/Source/Scene/GaussianSplat3DTileContent.js +40 -46
  245. package/Source/Scene/GaussianSplatPrimitive.js +413 -70
  246. package/Source/Scene/GetFeatureInfoFormat.js +3 -3
  247. package/Source/Scene/GltfBufferViewLoader.js +0 -2
  248. package/Source/Scene/GltfDracoLoader.js +0 -2
  249. package/Source/Scene/GltfImageLoader.js +0 -3
  250. package/Source/Scene/GltfIndexBufferLoader.js +0 -4
  251. package/Source/Scene/GltfJsonLoader.js +0 -2
  252. package/Source/Scene/GltfLoader.js +215 -39
  253. package/Source/Scene/GltfLoaderUtil.js +14 -0
  254. package/Source/Scene/GltfSpzLoader.js +109 -2
  255. package/Source/Scene/GltfStructuralMetadataLoader.js +0 -2
  256. package/Source/Scene/GltfTextureLoader.js +0 -2
  257. package/Source/Scene/GltfVertexBufferLoader.js +0 -4
  258. package/Source/Scene/HeightReference.js +5 -1
  259. package/Source/Scene/HorizontalOrigin.js +6 -1
  260. package/Source/Scene/ITwinData.js +1 -0
  261. package/Source/Scene/ImageryProvider.js +1 -1
  262. package/Source/Scene/ImageryState.js +6 -1
  263. package/Source/Scene/ImplicitSubdivisionScheme.js +3 -1
  264. package/Source/Scene/InstanceAttributeSemantic.js +3 -1
  265. package/Source/Scene/IonWorldImageryStyle.js +6 -1
  266. package/Source/Scene/JobType.js +6 -1
  267. package/Source/Scene/Label.js +32 -0
  268. package/Source/Scene/LabelCollection.js +14 -13
  269. package/Source/Scene/LabelStyle.js +6 -1
  270. package/Source/Scene/MapMode2D.js +6 -1
  271. package/Source/Scene/Material.js +2 -0
  272. package/Source/Scene/Megatexture.js +1 -0
  273. package/Source/Scene/MetadataClassProperty.js +24 -10
  274. package/Source/Scene/MetadataComponentType.js +118 -24
  275. package/Source/Scene/MetadataSchemaLoader.js +0 -2
  276. package/Source/Scene/MetadataSemantic.js +6 -2
  277. package/Source/Scene/MetadataType.js +3 -1
  278. package/Source/Scene/Model/B3dmLoader.js +0 -3
  279. package/Source/Scene/Model/CustomShaderMode.js +3 -1
  280. package/Source/Scene/Model/CustomShaderPipelineStage.js +3 -1
  281. package/Source/Scene/Model/CustomShaderTranslucencyMode.js +5 -1
  282. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +735 -264
  283. package/Source/Scene/Model/Extensions/Gpm/PpeSource.js +5 -1
  284. package/Source/Scene/Model/Extensions/Gpm/StorageType.js +5 -1
  285. package/Source/Scene/Model/GeoJsonLoader.js +0 -2
  286. package/Source/Scene/Model/I3dmLoader.js +0 -3
  287. package/Source/Scene/Model/InstancingPipelineStage.js +1 -1
  288. package/Source/Scene/Model/LightingModel.js +5 -1
  289. package/Source/Scene/Model/MaterialPipelineStage.js +331 -3
  290. package/Source/Scene/Model/MetadataPipelineStage.js +3 -3
  291. package/Source/Scene/Model/ModelDrawCommand.js +6 -0
  292. package/Source/Scene/Model/ModelReader.js +475 -4
  293. package/Source/Scene/Model/ModelRuntimePrimitive.js +2 -1
  294. package/Source/Scene/Model/ModelType.js +3 -1
  295. package/Source/Scene/Model/ModelUtility.js +3 -1
  296. package/Source/Scene/Model/PntsLoader.js +4 -3
  297. package/Source/Scene/Model/StyleCommandsNeeded.js +3 -1
  298. package/Source/Scene/Model/UniformType.js +5 -1
  299. package/Source/Scene/Model/VaryingType.js +5 -1
  300. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +375 -0
  301. package/Source/Scene/Model/pickModel.js +94 -299
  302. package/Source/Scene/ModelAnimationLoop.js +6 -1
  303. package/Source/Scene/ModelAnimationState.js +6 -1
  304. package/Source/Scene/ModelComponents.js +1639 -1542
  305. package/Source/Scene/PickedMetadataInfo.js +1 -0
  306. package/Source/Scene/PrimitiveState.js +7 -1
  307. package/Source/Scene/QuadtreeOccluders.js +20 -15
  308. package/Source/Scene/QuadtreeTile.js +547 -541
  309. package/Source/Scene/QuadtreeTileLoadState.js +6 -1
  310. package/Source/Scene/QuadtreeTileProvider.js +159 -175
  311. package/Source/Scene/ResourceLoader.js +0 -1
  312. package/Source/Scene/ResourceLoaderState.js +7 -1
  313. package/Source/Scene/SceneMode.js +4 -1
  314. package/Source/Scene/ScreenSpaceCameraController.js +13 -0
  315. package/Source/Scene/ShadowMode.js +3 -1
  316. package/Source/Scene/SkyBox.js +17 -8
  317. package/Source/Scene/SplitDirection.js +6 -1
  318. package/Source/Scene/StencilFunction.js +6 -1
  319. package/Source/Scene/StencilOperation.js +6 -1
  320. package/Source/Scene/TerrainState.js +7 -1
  321. package/Source/Scene/TileBoundingRegion.js +1 -1
  322. package/Source/Scene/TileBoundingS2Cell.js +1 -1
  323. package/Source/Scene/TileBoundingSphere.js +1 -1
  324. package/Source/Scene/TileState.js +7 -1
  325. package/Source/Scene/Tonemapper.js +5 -1
  326. package/Source/Scene/TweenCollection.js +7 -0
  327. package/Source/Scene/VectorGltf3DTileContent.js +403 -0
  328. package/Source/Scene/VertexAttributeSemantic.js +17 -1
  329. package/Source/Scene/VerticalOrigin.js +6 -1
  330. package/Source/Scene/VoxelBoxShape.js +12 -6
  331. package/Source/Scene/VoxelContent.js +2 -0
  332. package/Source/Scene/VoxelCylinderShape.js +39 -38
  333. package/Source/Scene/VoxelEllipsoidShape.js +46 -96
  334. package/Source/Scene/VoxelMetadataOrder.js +6 -1
  335. package/Source/Scene/VoxelProvider.js +1 -0
  336. package/Source/Scene/VoxelShapeType.js +3 -1
  337. package/Source/Scene/WebMapServiceImageryProvider.js +2 -2
  338. package/Source/Scene/WebMapTileServiceImageryProvider.js +366 -131
  339. package/Source/Scene/parseStructuralMetadata.js +97 -37
  340. package/Source/Scene/renderBufferPointCollection.js +285 -0
  341. package/Source/Scene/renderBufferPolygonCollection.js +339 -0
  342. package/Source/Scene/renderBufferPolylineCollection.js +478 -0
  343. package/Source/Shaders/BillboardCollectionFS.glsl +2 -77
  344. package/Source/Shaders/BillboardCollectionFS.js +2 -77
  345. package/Source/Shaders/BillboardCollectionVS.glsl +2 -60
  346. package/Source/Shaders/BillboardCollectionVS.js +2 -60
  347. package/Source/Shaders/BufferPointMaterialFS.glsl +27 -0
  348. package/Source/Shaders/BufferPointMaterialFS.js +29 -0
  349. package/Source/Shaders/BufferPointMaterialVS.glsl +48 -0
  350. package/Source/Shaders/BufferPointMaterialVS.js +50 -0
  351. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  352. package/Source/Shaders/BufferPolygonMaterialFS.js +15 -0
  353. package/Source/Shaders/BufferPolygonMaterialVS.glsl +30 -0
  354. package/Source/Shaders/BufferPolygonMaterialVS.js +32 -0
  355. package/Source/Shaders/BufferPolylineMaterialFS.glsl +13 -0
  356. package/Source/Shaders/BufferPolylineMaterialFS.js +15 -0
  357. package/Source/Shaders/BufferPolylineMaterialVS.glsl +49 -0
  358. package/Source/Shaders/BufferPolylineMaterialVS.js +51 -0
  359. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
  360. package/Source/Shaders/Builtin/Functions/computeTextureTransform.glsl +24 -0
  361. package/Source/Shaders/Builtin/Functions/computeTextureTransform.js +25 -0
  362. package/Source/Shaders/Model/ConstantLodStageFS.glsl +60 -0
  363. package/Source/Shaders/Model/ConstantLodStageFS.js +62 -0
  364. package/Source/Shaders/Model/ConstantLodStageVS.glsl +12 -0
  365. package/Source/Shaders/Model/ConstantLodStageVS.js +13 -0
  366. package/Source/Shaders/Model/EdgeVisibilityStageFS.glsl +34 -48
  367. package/Source/Shaders/Model/EdgeVisibilityStageFS.js +34 -49
  368. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +98 -0
  369. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +100 -0
  370. package/Source/Shaders/Model/MaterialStageFS.glsl +46 -20
  371. package/Source/Shaders/Model/MaterialStageFS.js +46 -20
  372. package/Source/Shaders/Model/ModelFS.glsl +15 -0
  373. package/Source/Shaders/Model/ModelFS.js +15 -0
  374. package/Source/Shaders/Model/ModelVS.glsl +8 -0
  375. package/Source/Shaders/Model/ModelVS.js +8 -0
  376. package/Source/Shaders/PolygonSignedDistanceFS.glsl +64 -33
  377. package/Source/Shaders/PolygonSignedDistanceFS.js +64 -33
  378. package/Source/Shaders/PrimitiveGaussianSplatVS.glsl +9 -2
  379. package/Source/Shaders/PrimitiveGaussianSplatVS.js +9 -2
  380. package/Source/Shaders/Voxels/VoxelFS.glsl +1 -1
  381. package/Source/Shaders/Voxels/VoxelFS.js +1 -1
  382. package/Source/Shaders/Voxels/convertLocalToBoxUv.glsl +0 -1
  383. package/Source/Shaders/Voxels/convertLocalToBoxUv.js +0 -1
  384. package/Source/Shaders/Voxels/convertLocalToCylinderUv.glsl +7 -9
  385. package/Source/Shaders/Voxels/convertLocalToCylinderUv.js +7 -9
  386. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.glsl +7 -17
  387. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.js +7 -17
  388. package/Source/Widget/CesiumWidget.js +11 -4
  389. package/Source/Workers/decodeDraco.js +3 -0
  390. package/Source/Workers/decodeI3S.js +5 -2
  391. package/index.d.ts +1332 -402
  392. package/index.js +111 -81
  393. package/package.json +3 -3
  394. package/Build/Workers/chunk-54O3AGOA.js +0 -642
  395. package/Build/Workers/chunk-6U5QMZU3.js +0 -940
  396. package/Build/Workers/chunk-HNDE73JK.js +0 -1829
  397. package/Build/Workers/chunk-PAFMAR7A.js +0 -2357
  398. package/Build/Workers/chunk-S53HSRT6.js +0 -114
@@ -0,0 +1,818 @@
1
+ // @ts-check
2
+
3
+ import BoundingSphere from "../Core/BoundingSphere.js";
4
+ import Cartesian3 from "../Core/Cartesian3.js";
5
+ import DeveloperError from "../Core/DeveloperError.js";
6
+ import Frozen from "../Core/Frozen.js";
7
+ import Matrix4 from "../Core/Matrix4.js";
8
+ import assert from "../Core/assert.js";
9
+ import ComponentDatatype from "../Core/ComponentDatatype.js";
10
+ import defined from "../Core/defined.js";
11
+ import Check from "../Core/Check.js";
12
+ import SceneMode from "./SceneMode.js";
13
+ import oneTimeWarning from "../Core/oneTimeWarning.js";
14
+
15
+ /** @import { Destroyable, TypedArray, TypedArrayConstructor } from "../Core/globalTypes.js"; */
16
+ /** @import Context from "../Renderer/Context.js"; */
17
+ /** @import FrameState from "./FrameState.js"; */
18
+ /** @import BufferPrimitive from "./BufferPrimitive.js"; */
19
+ /** @import BufferPrimitiveMaterial from "./BufferPrimitiveMaterial.js"; */
20
+ /** @import PickId from "../Renderer/PickId.js"; */
21
+
22
+ /**
23
+ * @typedef {object} BufferPrimitiveOptions
24
+ * @property {Matrix4} [modelMatrix=Matrix4.IDENTITY] Transforms geometry from model to world coordinates.
25
+ * @property {boolean} [show=true]
26
+ * @property {BufferPrimitiveMaterial} [material]
27
+ * @property {number} [featureId]
28
+ * @property {object} [pickObject]
29
+ * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
30
+ */
31
+
32
+ /**
33
+ * Collection of primitives held in ArrayBuffer storage for performance and memory optimization.
34
+ *
35
+ * <p>To get the full performance benefit of using a BufferPrimitiveCollection containing "N" primitives,
36
+ * be careful to avoid allocating "N" instances of any related JavaScript object. {@link BufferPrimitive},
37
+ * {@link Color}, {@link Cartesian3}, and other objects can all be reused when working with large collections,
38
+ * using the {@link https://en.wikipedia.org/wiki/Flyweight_pattern|flyweight pattern}.</p>
39
+ *
40
+ * @abstract
41
+ * @template T extends BufferPrimitive
42
+ * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
43
+ *
44
+ * @see BufferPrimitive
45
+ * @see BufferPrimitiveMaterial
46
+ * @see BufferPointCollection
47
+ * @see BufferPolylineCollection
48
+ * @see BufferPolygonCollection
49
+ */
50
+ class BufferPrimitiveCollection {
51
+ /** @ignore */
52
+ static Error = {
53
+ ERR_RESIZE: "BufferPrimitive range cannot be resized after initialization.",
54
+ ERR_CAPACITY: "BufferPrimitiveCollection capacity exceeded.",
55
+ ERR_MULTIPLE_OF_FOUR:
56
+ "BufferPrimitive byte length must be a multiple of 4.",
57
+ ERR_OUT_OF_RANGE: "BufferPrimitive buffer access out of range.",
58
+ };
59
+
60
+ /**
61
+ * Resources managed by the collection's renderer. Collections may have multiple renderer
62
+ * implementations, so the collection should be ignorant of the renderer's implementation
63
+ * and context data. A collection only has one renderer active at a time.
64
+ *
65
+ * @type {Destroyable|null}
66
+ * @ignore
67
+ */
68
+ _renderContext = null;
69
+
70
+ /**
71
+ * @param {object} options
72
+ * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] Transforms geometry from model to world coordinates.
73
+ * @param {number} [options.primitiveCountMax=BufferPrimitiveCollection.DEFAULT_CAPACITY]
74
+ * @param {number} [options.vertexCountMax=BufferPrimitiveCollection.DEFAULT_CAPACITY]
75
+ * @param {boolean} [options.show=true]
76
+ * @param {ComponentDatatype} [options.positionDatatype=ComponentDatatype.DOUBLE]
77
+ * @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.
78
+ * @param {boolean} [options.debugShowBoundingVolume=false]
79
+ */
80
+ constructor(options = Frozen.EMPTY_OBJECT) {
81
+ /**
82
+ * Determines if primitives in this collection will be shown.
83
+ * @type {boolean}
84
+ * @default true
85
+ */
86
+ this.show = options.show ?? true;
87
+
88
+ /**
89
+ * @type {Matrix4}
90
+ * @default Matrix4.IDENTITY
91
+ * @readonly
92
+ * @protected
93
+ */
94
+ this._modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);
95
+
96
+ /**
97
+ * @type {BoundingSphere}
98
+ * @readonly
99
+ * @protected
100
+ */
101
+ this._boundingVolume = new BoundingSphere();
102
+
103
+ /**
104
+ * @type {BoundingSphere}
105
+ * @readonly
106
+ * @protected
107
+ */
108
+ this._boundingVolumeWC = new BoundingSphere();
109
+
110
+ /**
111
+ * When <code>true</code>, primitives are pickable with {@link Scene#pick}.
112
+ * When <code>false</code>, memory and initialization cost are lower.
113
+ * @type {boolean}
114
+ * @readonly
115
+ * @ignore
116
+ * @default false
117
+ */
118
+ this._allowPicking = options.allowPicking ?? false;
119
+
120
+ /**
121
+ * @type {Map<Context, PickId[]>}
122
+ * @readonly
123
+ * @ignore
124
+ */
125
+ this._pickIds = new Map();
126
+
127
+ /**
128
+ * @type {object[]}
129
+ * @readonly
130
+ * @ignore
131
+ */
132
+ this._pickObjects = [];
133
+
134
+ /**
135
+ * This property is for debugging only; it is not for production use nor is it optimized.
136
+ * <p>
137
+ * Draws the bounding sphere for each draw command in the primitive.
138
+ * </p>
139
+ *
140
+ * @type {boolean}
141
+ * @default false
142
+ */
143
+ this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;
144
+
145
+ /**
146
+ * @type {number}
147
+ * @protected
148
+ * @ignore
149
+ */
150
+ this._primitiveCount = 0;
151
+
152
+ /**
153
+ * @type {number}
154
+ * @protected
155
+ * @ignore
156
+ */
157
+ this._primitiveCountMax =
158
+ options.primitiveCountMax ?? BufferPrimitiveCollection.DEFAULT_CAPACITY;
159
+
160
+ /**
161
+ * @type {DataView<ArrayBuffer>}
162
+ * @ignore
163
+ */
164
+ this._primitiveView = null;
165
+
166
+ /**
167
+ * @type {number}
168
+ * @ignore
169
+ */
170
+ this._positionCount = 0;
171
+
172
+ /**
173
+ * @type {number}
174
+ * @protected
175
+ * @ignore
176
+ */
177
+ this._positionCountMax =
178
+ options.vertexCountMax ?? BufferPrimitiveCollection.DEFAULT_CAPACITY;
179
+
180
+ /**
181
+ * @type {TypedArray}
182
+ * @ignore
183
+ */
184
+ this._positionView = null;
185
+
186
+ /**
187
+ * @type {DataView<ArrayBuffer>}
188
+ * @ignore
189
+ */
190
+ this._materialView = null;
191
+
192
+ // Potentially-dirty primitives are tracked as a contiguous range, with
193
+ // 'clean' primitives potentially within the range. Individual primitive
194
+ // 'dirty' flags are source-of-truth.
195
+
196
+ /**
197
+ * @type {number}
198
+ * @ignore
199
+ */
200
+ this._dirtyOffset = 0;
201
+
202
+ /**
203
+ * @type {number}
204
+ * @ignore
205
+ */
206
+ this._dirtyCount = 0;
207
+
208
+ /**
209
+ * @type {boolean}
210
+ * @ignore
211
+ */
212
+ this._dirtyBoundingVolume = false;
213
+
214
+ this._allocatePrimitiveBuffer();
215
+ this._allocatePositionBuffer(
216
+ options.positionDatatype ?? ComponentDatatype.DOUBLE,
217
+ );
218
+ this._allocateMaterialBuffer();
219
+ }
220
+
221
+ /**
222
+ * Accessing `this.constructor` can cause JSDoc builds to fail, so use this
223
+ * protected getter function instead.
224
+ * @protected
225
+ * @return {*}
226
+ * @ignore
227
+ */
228
+ _getCollectionClass() {
229
+ DeveloperError.throwInstantiationError();
230
+ }
231
+
232
+ /**
233
+ * @protected
234
+ * @return {*}
235
+ * @ignore
236
+ */
237
+ _getPrimitiveClass() {
238
+ DeveloperError.throwInstantiationError();
239
+ }
240
+
241
+ /**
242
+ * @return {*}
243
+ * @ignore
244
+ */
245
+ _getMaterialClass() {
246
+ DeveloperError.throwInstantiationError();
247
+ }
248
+
249
+ /////////////////////////////////////////////////////////////////////////////
250
+ // COLLECTION LIFECYCLE
251
+
252
+ /**
253
+ * @private
254
+ * @ignore
255
+ */
256
+ _allocatePrimitiveBuffer() {
257
+ const layout = this._getPrimitiveClass().Layout;
258
+
259
+ //>>includeStart('debug', pragmas.debug);
260
+ const { ERR_MULTIPLE_OF_FOUR } = BufferPrimitiveCollection.Error;
261
+ assert(layout.__BYTE_LENGTH % 4 === 0, ERR_MULTIPLE_OF_FOUR);
262
+ //>>includeEnd('debug');
263
+
264
+ this._primitiveView = new DataView(
265
+ new ArrayBuffer(this._primitiveCountMax * layout.__BYTE_LENGTH),
266
+ );
267
+ }
268
+
269
+ /**
270
+ * @param {ComponentDatatype} datatype
271
+ * @private
272
+ * @ignore
273
+ */
274
+ _allocatePositionBuffer(datatype) {
275
+ // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
276
+ this._positionView = ComponentDatatype.createTypedArray(
277
+ datatype,
278
+ this._positionCountMax * 3,
279
+ );
280
+ }
281
+
282
+ /**
283
+ * @private
284
+ * @ignore
285
+ */
286
+ _allocateMaterialBuffer() {
287
+ const MaterialClass = this._getMaterialClass();
288
+ this._materialView = new DataView(
289
+ new ArrayBuffer(this._primitiveCountMax * MaterialClass.packedLength),
290
+ );
291
+ }
292
+
293
+ /**
294
+ * Returns true if this object was destroyed; otherwise, false.
295
+ *
296
+ * @returns {boolean} True if this object was destroyed; otherwise, false.
297
+ */
298
+ isDestroyed() {
299
+ return false;
300
+ }
301
+
302
+ /** Destroys collection and its GPU resources. */
303
+ destroy() {
304
+ this._pickObjects.length = 0;
305
+
306
+ for (const contextPickIds of this._pickIds.values()) {
307
+ for (const pickId of contextPickIds) {
308
+ pickId.destroy();
309
+ }
310
+ }
311
+
312
+ if (defined(this._renderContext)) {
313
+ this._renderContext.destroy();
314
+ this._renderContext = undefined;
315
+ this._dirtyOffset = 0;
316
+ this._dirtyCount = this.primitiveCount;
317
+ }
318
+ }
319
+
320
+ /**
321
+ * Sorts primitives of the collection.
322
+ *
323
+ * Because sorting changes the indices (but not the feature IDs) of primitives
324
+ * in the collection, the function also returns an array mapping from previous
325
+ * index to new index. When sorting repeatedly, the array can be reused and
326
+ * passed as the 'result' argument for each call.
327
+ *
328
+ * @param {Function} sortFn
329
+ * @param {Uint32Array} result
330
+ * @returns {Uint32Array} Mapping from previous index to new index.
331
+ */
332
+ sort(sortFn, result = new Uint32Array(this.primitiveCount)) {
333
+ const PrimitiveClass = this._getPrimitiveClass();
334
+ const CollectionClass = this._getCollectionClass();
335
+
336
+ const { primitiveCount } = this;
337
+
338
+ const a = new PrimitiveClass();
339
+ const b = new PrimitiveClass();
340
+
341
+ // Mapping from NEW index to PREVIOUS index.
342
+ const dstSrcMap = new Uint32Array(primitiveCount);
343
+ for (let i = 0; i < primitiveCount; i++) {
344
+ dstSrcMap[i] = i;
345
+ }
346
+ dstSrcMap.sort((indexA, indexB) =>
347
+ sortFn(this.get(indexA, a), this.get(indexB, b)),
348
+ );
349
+
350
+ // Mapping from PREVIOUS index to NEW index.
351
+ for (let i = 0; i < primitiveCount; i++) {
352
+ result[dstSrcMap[i]] = i;
353
+ }
354
+
355
+ // Copy primitives to temporary collection, in sort order.
356
+ const tmp = CollectionClass._cloneEmpty(this);
357
+ for (let i = 0; i < primitiveCount; i++) {
358
+ const src = this.get(dstSrcMap[i], a);
359
+ const dst = tmp.add({}, b);
360
+ PrimitiveClass.clone(src, dst);
361
+ }
362
+
363
+ // Assign buffers from temporary collection onto this one.
364
+ CollectionClass._replaceBuffers(tmp, this);
365
+ this._dirtyOffset = 0;
366
+ this._dirtyCount = primitiveCount;
367
+
368
+ return result;
369
+ }
370
+
371
+ /**
372
+ * Duplicates the contents of this collection into the result collection.
373
+ * Result collection is not resized, and must contain enough space for all
374
+ * primitives in the source collection. Existing primitives in the result
375
+ * collection will be overwritten.
376
+ *
377
+ * <p>Useful when allocating more space for a collection that has reached its
378
+ * capacity, and efficiently transferring features to the new collection.</p>
379
+ *
380
+ * @example
381
+ * const result = new BufferPrimitiveCollection({ ... }); // allocate larger 'result' collection
382
+ * BufferPrimitiveCollection.clone(collection, result); // copy primitives from 'collection' into 'result'
383
+ *
384
+ * @param {BufferPrimitiveCollection<T>} collection
385
+ * @param {BufferPrimitiveCollection<T>} result
386
+ * @template T extends BufferPrimitive
387
+ */
388
+ static clone(collection, result) {
389
+ //>>includeStart('debug', pragmas.debug);
390
+ const { ERR_CAPACITY } = BufferPrimitiveCollection.Error;
391
+ assert(collection.primitiveCount <= result.primitiveCountMax, ERR_CAPACITY);
392
+ assert(collection.vertexCount <= result.vertexCountMax, ERR_CAPACITY);
393
+ //>>includeEnd('debug');
394
+
395
+ const layout = collection._getPrimitiveClass().Layout;
396
+ const MaterialClass = collection._getMaterialClass();
397
+ const PrimitiveClass = collection._getPrimitiveClass();
398
+
399
+ this._copySubDataView(
400
+ collection._primitiveView,
401
+ result._primitiveView,
402
+ collection.primitiveCount * layout.__BYTE_LENGTH,
403
+ );
404
+
405
+ this._copySubArray(
406
+ collection._positionView,
407
+ result._positionView,
408
+ collection.vertexCount * 3,
409
+ );
410
+
411
+ this._copySubDataView(
412
+ collection._materialView,
413
+ result._materialView,
414
+ collection.primitiveCount * MaterialClass.packedLength,
415
+ );
416
+
417
+ result.show = collection.show;
418
+ result.debugShowBoundingVolume = collection.debugShowBoundingVolume;
419
+ result._primitiveCount = collection._primitiveCount;
420
+ result._positionCount = collection._positionCount;
421
+
422
+ // Unset PickIds.
423
+ const primitive = new PrimitiveClass();
424
+ for (let i = 0, il = result.primitiveCount; i < il; i++) {
425
+ result.get(i, primitive)._pickId = 0;
426
+ }
427
+
428
+ result._dirtyOffset = 0;
429
+ result._dirtyCount = result.primitiveCount;
430
+
431
+ collection.boundingVolume.clone(result.boundingVolume);
432
+
433
+ return result;
434
+ }
435
+
436
+ /**
437
+ * Returns an empty collection with the same buffer sizes as this collection.
438
+ * Internal utility for operations requiring a working copy of memory.
439
+ *
440
+ * @param {BufferPrimitiveCollection<T>} collection
441
+ * @returns {BufferPrimitiveCollection<T>}
442
+ * @template T extends BufferPrimitive
443
+ * @protected
444
+ * @abstract
445
+ * @ignore
446
+ */
447
+ static _cloneEmpty(collection) {
448
+ DeveloperError.throwInstantiationError();
449
+ }
450
+
451
+ /**
452
+ * Assigns buffers from source collection to target collection, without
453
+ * validation or side effects. Callers must handle any validation, dirty
454
+ * flag updates, etc.
455
+ *
456
+ * @param {BufferPrimitiveCollection<T>} src
457
+ * @param {BufferPrimitiveCollection<T>} dst
458
+ * @template T extends BufferPrimitive
459
+ * @protected
460
+ * @ignore
461
+ */
462
+ static _replaceBuffers(src, dst) {
463
+ dst._primitiveView = src._primitiveView;
464
+ dst._positionView = src._positionView;
465
+ dst._materialView = src._materialView;
466
+ }
467
+
468
+ /**
469
+ * Rebuilds collection bounding volume.
470
+ * @protected
471
+ * @ignore
472
+ */
473
+ _updateBoundingVolume() {
474
+ const TypedArray = /** @type {TypedArrayConstructor} */ (
475
+ this._positionView.constructor
476
+ );
477
+
478
+ // Exclude unused space in the position buffer.
479
+ const vertices = new TypedArray(
480
+ /** @type {ArrayBuffer} */ (this._positionView.buffer),
481
+ this._positionView.byteOffset,
482
+ this._positionCount * 3,
483
+ );
484
+
485
+ BoundingSphere.fromVertices(
486
+ vertices,
487
+ Cartesian3.ZERO,
488
+ 3,
489
+ this.boundingVolume,
490
+ );
491
+ BoundingSphere.transform(
492
+ this.boundingVolume,
493
+ this.modelMatrix,
494
+ this.boundingVolumeWC,
495
+ );
496
+ this._dirtyBoundingVolume = false;
497
+ }
498
+
499
+ /**
500
+ * Updates PickIds for the given context.
501
+ * @param {Context} context
502
+ * @protected
503
+ * @ignore
504
+ */
505
+ _updatePickIds(context) {
506
+ let pickIds = this._pickIds.get(context);
507
+ if (pickIds && pickIds.length === this._primitiveCount) {
508
+ return;
509
+ }
510
+
511
+ if (!pickIds) {
512
+ pickIds = [];
513
+ this._pickIds.set(context, pickIds);
514
+ }
515
+
516
+ const collection = this;
517
+ const PrimitiveClass = this._getPrimitiveClass();
518
+ const primitive = new PrimitiveClass();
519
+
520
+ // Fill in missing PickIDs for recently-added primitives.
521
+ for (let i = pickIds.length, il = this._primitiveCount; i < il; i++) {
522
+ this.get(i, primitive);
523
+
524
+ const pickObject = this._pickObjects[i] || {
525
+ collection: this,
526
+ index: i,
527
+ get primitive() {
528
+ // Cannot reuse primitives; scene.drillPick() appends to a list.
529
+ return collection.get(i, new PrimitiveClass());
530
+ },
531
+ };
532
+
533
+ const pickId = context.createPickId(pickObject);
534
+ primitive._pickId = pickId.key;
535
+ pickIds.push(pickId);
536
+ }
537
+ }
538
+
539
+ /////////////////////////////////////////////////////////////////////////////
540
+ // PRIMITIVE LIFECYCLE
541
+
542
+ /**
543
+ * Makes the given {@link BufferPrimitive} a view onto this collection's
544
+ * primitive at the given index, for use when reading/writing primitive
545
+ * properties. When iterating over a large collection, prefer to reuse
546
+ * the same BufferPrimitive instance throughout the loop — rebinding
547
+ * an existing instance to a different primitive is cheap, and avoids
548
+ * allocating in-memory objects for every object.
549
+ *
550
+ * @example
551
+ * const primitive = new BufferPrimitive();
552
+ * for (let i = 0; i < collection.primitiveCount; i++) {
553
+ * collection.get(i, primitive);
554
+ * primitive.setColor(Color.RED);
555
+ * }
556
+ *
557
+ * @param {number} index
558
+ * @param {BufferPrimitive} result
559
+ * @returns {BufferPrimitive} The BufferPrimitive instance passed as the
560
+ * 'result' argument, now bound to the specified primitive index.
561
+ */
562
+ get(index, result) {
563
+ //>>includeStart('debug', pragmas.debug);
564
+ Check.typeOf.number.greaterThanOrEquals("index", index, 0);
565
+ Check.typeOf.number.lessThan("index", index, this._primitiveCount);
566
+ //>>includeEnd('debug');
567
+
568
+ result._collection = this;
569
+ result._index = index;
570
+ result._byteOffset = index * this._getPrimitiveClass().Layout.__BYTE_LENGTH;
571
+ return result;
572
+ }
573
+
574
+ /**
575
+ * Adds a new primitive to the collection, with the specified options. A
576
+ * {@link BufferPrimitive} instance is linked to the new primitive, using
577
+ * the 'result' argument if given, or a new instance if not. For repeated
578
+ * calls, prefer to reuse a single BufferPrimitive instance rather than
579
+ * allocating a new instance on each call.
580
+ *
581
+ * @param {BufferPrimitiveOptions} options
582
+ * @param {BufferPrimitive} result
583
+ * @returns {BufferPrimitive}
584
+ */
585
+ add(options = Frozen.EMPTY_OBJECT, result) {
586
+ //>>includeStart('debug', pragmas.debug);
587
+ const { ERR_CAPACITY } = BufferPrimitiveCollection.Error;
588
+ assert(this.primitiveCount < this.primitiveCountMax, ERR_CAPACITY);
589
+ //>>includeEnd('debug');
590
+
591
+ const MaterialClass = this._getMaterialClass();
592
+ const index = this._primitiveCount++;
593
+
594
+ result = this.get(index, result);
595
+ result.featureId = options.featureId ?? index;
596
+ result.show = options.show ?? true;
597
+ result.setMaterial(options.material ?? MaterialClass.DEFAULT_MATERIAL);
598
+ result._pickId = 0; // unset
599
+ result._dirty = true;
600
+
601
+ if (defined(options.pickObject)) {
602
+ this._pickObjects[index] = options.pickObject;
603
+ }
604
+
605
+ return result;
606
+ }
607
+
608
+ /**
609
+ * Marks primitive at given index as 'dirty', to be updated on next render.
610
+ * @param {number} index
611
+ * @ignore
612
+ */
613
+ _makeDirty(index) {
614
+ if (this._dirtyCount === 0) {
615
+ this._dirtyCount = 1;
616
+ this._dirtyOffset = index;
617
+ } else if (index < this._dirtyOffset) {
618
+ this._dirtyCount += this._dirtyOffset - index;
619
+ this._dirtyOffset = index;
620
+ } else if (index + 1 > this._dirtyOffset + this._dirtyCount) {
621
+ this._dirtyCount = index + 1 - this._dirtyOffset;
622
+ }
623
+ }
624
+
625
+ /**
626
+ * Marks collection bounding volume as 'dirty', to be updated on next render.
627
+ * @ignore
628
+ */
629
+ _makeDirtyBoundingVolume() {
630
+ this._dirtyBoundingVolume = true;
631
+ }
632
+
633
+ /////////////////////////////////////////////////////////////////////////////
634
+ // RENDER
635
+
636
+ /** @param {object} frameState */
637
+ update(frameState) {
638
+ if (/** @type {FrameState} */ (frameState).mode !== SceneMode.SCENE3D) {
639
+ oneTimeWarning(
640
+ "bufferprim-scenemode",
641
+ "BufferPrimitiveCollection requires SceneMode.SCENE3D.",
642
+ );
643
+ }
644
+
645
+ if (this._dirtyBoundingVolume) {
646
+ this._updateBoundingVolume();
647
+ }
648
+ if (this._allowPicking && this._dirtyCount > 0) {
649
+ this._updatePickIds(/** @type {FrameState} */ (frameState).context);
650
+ }
651
+ }
652
+
653
+ /////////////////////////////////////////////////////////////////////////////
654
+ // ACCESSORS
655
+
656
+ /**
657
+ * Number of primitives in collection. Must be <= {@link primitiveCountMax}.
658
+ *
659
+ * @type {number}
660
+ * @readonly
661
+ */
662
+ get primitiveCount() {
663
+ return this._primitiveCount;
664
+ }
665
+
666
+ /**
667
+ * Maximum number of primitives this collection can contain. Must be >=
668
+ * {@link primitiveCount}.
669
+ *
670
+ * @type {number}
671
+ * @readonly
672
+ * @default {@link BufferPrimitiveCollection.DEFAULT_CAPACITY}
673
+ */
674
+ get primitiveCountMax() {
675
+ return this._primitiveCountMax;
676
+ }
677
+
678
+ /**
679
+ * Total byte length of buffers owned by this collection. Includes any unused
680
+ * space allocated by {@link primitiveCountMax}, even if no primitives have
681
+ * yet been added in that space.
682
+ *
683
+ * @type {number}
684
+ * @readonly
685
+ */
686
+ get byteLength() {
687
+ return (
688
+ this._primitiveView.byteLength +
689
+ this._positionView.byteLength +
690
+ this._materialView.byteLength
691
+ );
692
+ }
693
+
694
+ /**
695
+ * Number of vertices in collection. Must be <= {@link vertexCountMax}.
696
+ *
697
+ * @type {number}
698
+ * @readonly
699
+ */
700
+ get vertexCount() {
701
+ return this._positionCount;
702
+ }
703
+
704
+ /**
705
+ * Maximum number of vertices this collection can contain. Must be >=
706
+ * {@link vertexCount}.
707
+ *
708
+ * @type {number}
709
+ * @readonly
710
+ * @default {@link BufferPrimitiveCollection.DEFAULT_CAPACITY}
711
+ */
712
+ get vertexCountMax() {
713
+ return this._positionCountMax;
714
+ }
715
+
716
+ /**
717
+ * Transforms geometry from model to world coordinates.
718
+ * @type {Matrix4}
719
+ * @default Matrix4.IDENTITY
720
+ * @readonly
721
+ */
722
+ get modelMatrix() {
723
+ return this._modelMatrix;
724
+ }
725
+
726
+ /**
727
+ * Local bounding volume for all primitives in the collection, including both
728
+ * shown and hidden primitives.
729
+ * @type {BoundingSphere}
730
+ * @readonly
731
+ */
732
+ get boundingVolume() {
733
+ return this._boundingVolume;
734
+ }
735
+
736
+ /**
737
+ * World bounding volume for all primitives in the collection, including both
738
+ * shown and hidden primitives.
739
+ * @type {BoundingSphere}
740
+ * @readonly
741
+ */
742
+ get boundingVolumeWC() {
743
+ return this._boundingVolumeWC;
744
+ }
745
+
746
+ /////////////////////////////////////////////////////////////////////////////
747
+ // UTILS
748
+
749
+ /**
750
+ * @param {TypedArray} src
751
+ * @param {TypedArray} dst
752
+ * @param {number} count
753
+ * @protected
754
+ * @ignore
755
+ */
756
+ static _copySubArray(src, dst, count) {
757
+ for (let i = 0; i < count; i++) {
758
+ dst[i] = src[i];
759
+ }
760
+ }
761
+
762
+ /**
763
+ * @param {DataView} src
764
+ * @param {DataView} dst
765
+ * @param {number} byteLength
766
+ * @protected
767
+ * @ignore
768
+ */
769
+ static _copySubDataView(src, dst, byteLength) {
770
+ // No need to match the original array type, just copy in 4-byte chunks.
771
+ this._copySubArray(
772
+ new Uint32Array(src.buffer, src.byteOffset, src.byteLength / 4),
773
+ new Uint32Array(dst.buffer, dst.byteOffset, dst.byteLength / 4),
774
+ byteLength / 4,
775
+ );
776
+ }
777
+
778
+ /////////////////////////////////////////////////////////////////////////////
779
+ // DEBUG
780
+
781
+ /**
782
+ * Returns a JSON-serializable array representing the collection. This encoding
783
+ * is not memory-efficient, and should generally be used for debugging and
784
+ * testing.
785
+ *
786
+ * @example
787
+ * console.table(collection.toJSON());
788
+ *
789
+ * @returns {Array<Object>} List of JSON-serializable objects, one for each
790
+ * primitive in the collection.
791
+ */
792
+ toJSON() {
793
+ const PrimitiveClass = this._getPrimitiveClass();
794
+ const primitive = new PrimitiveClass();
795
+
796
+ const results = [];
797
+ for (let i = 0, il = this.primitiveCount; i < il; i++) {
798
+ results.push(this.get(i, primitive).toJSON());
799
+ }
800
+
801
+ return results;
802
+ }
803
+ }
804
+
805
+ /**
806
+ * Default capacity of buffers on new collections. A quantity of elements:
807
+ * number of vertices in the vertex buffer, primitives in the primitive
808
+ * buffer, etc. This value is arbitrary, and collections cannot be resized,
809
+ * so specific per-buffer capacities should be provided in the collection
810
+ * constructor when available.
811
+ *
812
+ * @type {number}
813
+ * @static
814
+ * @constant
815
+ */
816
+ BufferPrimitiveCollection.DEFAULT_CAPACITY = 1024;
817
+
818
+ export default BufferPrimitiveCollection;