@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
@@ -21,25 +21,25 @@ import EncodedCartesian3 from "../Core/EncodedCartesian3.js";
21
21
  import AttributeCompression from "../Core/AttributeCompression.js";
22
22
  import IndexDatatype from "../Core/IndexDatatype.js";
23
23
  import PolylineCommon from "../Shaders/PolylineCommon.js";
24
- import Matrix4 from "../Core/Matrix4.js";
25
- import BoundingSphere from "../Core/BoundingSphere.js";
26
24
  import BufferPolylineMaterial from "./BufferPolylineMaterial.js";
25
+ import BlendOption from "./BlendOption.js";
27
26
 
28
27
  /** @import FrameState from "./FrameState.js"; */
29
28
  /** @import BufferPolylineCollection from "./BufferPolylineCollection.js"; */
30
- /** @import {Destroyable, TypedArray} from "../Core/globalTypes.js"; */
29
+ /** @import {TypedArray} from "../Core/globalTypes.js"; */
31
30
 
32
31
  /**
33
32
  * TODO(PR#13211): Need 'keyof' syntax to avoid duplicating attribute names.
34
- * @typedef {'positionHigh' | 'positionLow' | 'prevPositionHigh' | 'prevPositionLow' | 'nextPositionHigh' | 'nextPositionLow' | 'pickColor' | 'showColorWidthAndTexCoord'} BufferPolylineAttribute
33
+ * @typedef {'positionHigh' | 'positionLow' | 'prevPositionHigh' | 'prevPositionLow' | 'nextPositionHigh' | 'nextPositionLow' | 'pickColor' | 'showColorWidthAndTexCoord' | 'alpha'} BufferPolylineAttribute
35
34
  * @ignore
36
35
  */
37
36
 
38
37
  /**
38
+ * Attribute locations when using 64-bit position precision.
39
39
  * @type {Record<BufferPolylineAttribute, number>}
40
40
  * @ignore
41
41
  */
42
- const BufferPolylineAttributeLocations = {
42
+ const BufferPolylineAttributeLocationsFloat64 = {
43
43
  positionHigh: 0,
44
44
  positionLow: 1,
45
45
  prevPositionHigh: 2,
@@ -48,17 +48,31 @@ const BufferPolylineAttributeLocations = {
48
48
  nextPositionLow: 5,
49
49
  pickColor: 6,
50
50
  showColorWidthAndTexCoord: 7,
51
+ alpha: 8,
52
+ };
53
+
54
+ /**
55
+ * Attribute locations when using <= 32-bit position precision.
56
+ * @type {Record<string, number>}
57
+ * @ignore
58
+ */
59
+ const BufferPolylineAttributeLocations = {
60
+ position: 0,
61
+ prevPosition: 1,
62
+ nextPosition: 2,
63
+ pickColor: 3,
64
+ showColorWidthAndTexCoord: 4,
65
+ alpha: 5,
51
66
  };
52
67
 
53
68
  /**
54
69
  * @typedef {object} BufferPolylineRenderContext
55
70
  * @property {VertexArray} [vertexArray]
56
- * @property {Record<BufferPolylineAttribute, TypedArray>} [attributeArrays]
71
+ * @property {Record<string, TypedArray>} [attributeArrays]
57
72
  * @property {TypedArray} [indexArray]
58
73
  * @property {RenderState} [renderState]
59
74
  * @property {ShaderProgram} [shaderProgram]
60
75
  * @property {DrawCommand} [command]
61
- * @property {Destroyable[]} [pickIds]
62
76
  * @property {Function} destroy
63
77
  * @ignore
64
78
  */
@@ -97,6 +111,10 @@ const nextCartesianEnc = new EncodedCartesian3();
97
111
  function renderBufferPolylineCollection(collection, frameState, renderContext) {
98
112
  const context = frameState.context;
99
113
  renderContext = renderContext || { destroy: destroyRenderContext };
114
+ const useFloat64 = collection._positionDatatype === ComponentDatatype.DOUBLE;
115
+ const attributeLocations = useFloat64
116
+ ? BufferPolylineAttributeLocationsFloat64
117
+ : BufferPolylineAttributeLocations;
100
118
 
101
119
  if (
102
120
  !defined(renderContext.attributeArrays) ||
@@ -108,42 +126,54 @@ function renderBufferPolylineCollection(collection, frameState, renderContext) {
108
126
  collection.vertexCountMax - collection.primitiveCount;
109
127
  const vertexCountMax = collection.vertexCountMax * 2;
110
128
 
111
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
129
+ // @ts-expect-error https://github.com/CesiumGS/cesium/issues/13420
112
130
  renderContext.indexArray = IndexDatatype.createTypedArray(
113
131
  vertexCountMax,
114
132
  segmentCountMax * 6,
115
133
  );
116
134
 
117
135
  renderContext.attributeArrays = {
118
- positionHigh: new Float32Array(vertexCountMax * 3),
119
- positionLow: new Float32Array(vertexCountMax * 3),
120
- prevPositionHigh: new Float32Array(vertexCountMax * 3),
121
- prevPositionLow: new Float32Array(vertexCountMax * 3),
122
- nextPositionHigh: new Float32Array(vertexCountMax * 3),
123
- nextPositionLow: new Float32Array(vertexCountMax * 3),
136
+ ...(!useFloat64
137
+ ? {
138
+ // @ts-expect-error https://github.com/CesiumGS/cesium/issues/13420
139
+ position: ComponentDatatype.createTypedArray(
140
+ collection._positionDatatype,
141
+ vertexCountMax * 3,
142
+ ),
143
+ // @ts-expect-error https://github.com/CesiumGS/cesium/issues/13420
144
+ prevPosition: ComponentDatatype.createTypedArray(
145
+ collection._positionDatatype,
146
+ vertexCountMax * 3,
147
+ ),
148
+ // @ts-expect-error https://github.com/CesiumGS/cesium/issues/13420
149
+ nextPosition: ComponentDatatype.createTypedArray(
150
+ collection._positionDatatype,
151
+ vertexCountMax * 3,
152
+ ),
153
+ }
154
+ : {
155
+ positionHigh: new Float32Array(vertexCountMax * 3),
156
+ positionLow: new Float32Array(vertexCountMax * 3),
157
+ prevPositionHigh: new Float32Array(vertexCountMax * 3),
158
+ prevPositionLow: new Float32Array(vertexCountMax * 3),
159
+ nextPositionHigh: new Float32Array(vertexCountMax * 3),
160
+ nextPositionLow: new Float32Array(vertexCountMax * 3),
161
+ }),
124
162
  pickColor: new Uint8Array(vertexCountMax * 4),
125
163
  showColorWidthAndTexCoord: new Float32Array(vertexCountMax * 4),
164
+ alpha: new Uint8Array(vertexCountMax),
126
165
  };
127
166
  }
128
167
 
129
- if (!defined(renderContext.pickIds)) {
130
- renderContext.pickIds = [];
131
- }
132
-
133
168
  if (collection._dirtyCount > 0) {
134
169
  const { _dirtyOffset, _dirtyCount } = collection;
135
- const { attributeArrays, pickIds } = renderContext;
170
+ const { attributeArrays } = renderContext;
136
171
 
137
172
  const indexArray = renderContext.indexArray;
138
- const positionHighArray = attributeArrays.positionHigh;
139
- const positionLowArray = attributeArrays.positionLow;
140
- const prevPositionHighArray = attributeArrays.prevPositionHigh;
141
- const prevPositionLowArray = attributeArrays.prevPositionLow;
142
- const nextPositionHighArray = attributeArrays.nextPositionHigh;
143
- const nextPositionLowArray = attributeArrays.nextPositionLow;
144
173
  const pickColorArray = attributeArrays.pickColor;
145
174
  const showColorWidthAndTexCoordArray =
146
175
  attributeArrays.showColorWidthAndTexCoord;
176
+ const alphaArray = attributeArrays.alpha;
147
177
 
148
178
  for (let i = _dirtyOffset, il = _dirtyOffset + _dirtyCount; i < il; i++) {
149
179
  collection.get(i, polyline);
@@ -152,112 +182,208 @@ function renderBufferPolylineCollection(collection, frameState, renderContext) {
152
182
  continue;
153
183
  }
154
184
 
155
- if (collection._allowPicking && polyline._pickId === 0) {
156
- const pickId = context.createPickId({
157
- collection,
158
- index: i,
159
- get primitive() {
160
- // Cannot reuse primitives; scene.drillPick() appends to a list.
161
- return collection.get(i, new BufferPolyline());
162
- },
163
- });
164
- polyline._pickId = pickId.key;
165
- pickIds.push(pickId);
166
- }
167
-
168
- const cartesianArray = polyline.getPositions();
169
185
  polyline.getMaterial(material);
170
186
  const encodedColor = AttributeCompression.encodeRGB8(material.color);
187
+ const colorAlpha = material.color.alpha;
171
188
  Color.fromRgba(polyline._pickId, pickColor);
172
189
  const show = polyline.show;
173
190
 
174
191
  let vOffset = polyline.vertexOffset * 2; // vertex offset
175
192
  let iOffset = (polyline.vertexOffset - i) * 6; // index offset
176
193
 
177
- for (let j = 0, jl = polyline.vertexCount; j < jl; j++) {
178
- const isFirstSegment = j === 0;
179
- const isLastSegment = j === jl - 1;
180
-
181
- // For first/last vertices, infer missing vertices by mirroring the segment.
182
- // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
183
- Cartesian3.fromArray(cartesianArray, j * 3, cartesian);
184
- if (isFirstSegment) {
185
- // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
186
- Cartesian3.fromArray(cartesianArray, (j + 1) * 3, nextCartesian);
187
- Cartesian3.subtract(cartesian, nextCartesian, prevCartesian);
188
- Cartesian3.add(cartesian, prevCartesian, prevCartesian);
189
- } else if (isLastSegment) {
190
- // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
191
- Cartesian3.fromArray(cartesianArray, (j - 1) * 3, prevCartesian);
192
- Cartesian3.subtract(cartesian, prevCartesian, nextCartesian);
193
- Cartesian3.add(cartesian, nextCartesian, nextCartesian);
194
- } else {
195
- // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
196
- Cartesian3.fromArray(cartesianArray, (j - 1) * 3, prevCartesian);
197
- // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
198
- Cartesian3.fromArray(cartesianArray, (j + 1) * 3, nextCartesian);
194
+ const jl = polyline.vertexCount;
195
+
196
+ if (!useFloat64) {
197
+ const posView = collection._positionView;
198
+ const posStart = polyline.vertexOffset * 3;
199
+ const posArray = attributeArrays.position;
200
+ const prevPosArray = attributeArrays.prevPosition;
201
+ const nextPosArray = attributeArrays.nextPosition;
202
+
203
+ for (let j = 0; j < jl; j++) {
204
+ const isFirstSegment = j === 0;
205
+ const isLastSegment = j === jl - 1;
206
+
207
+ const cx = posView[posStart + j * 3];
208
+ const cy = posView[posStart + j * 3 + 1];
209
+ const cz = posView[posStart + j * 3 + 2];
210
+
211
+ let px, py, pz, nx, ny, nz;
212
+
213
+ if (isFirstSegment) {
214
+ nx = posView[posStart + 1 * 3];
215
+ ny = posView[posStart + 1 * 3 + 1];
216
+ nz = posView[posStart + 1 * 3 + 2];
217
+ // Mirror current over next to get synthetic prev.
218
+ px = 2 * cx - nx;
219
+ py = 2 * cy - ny;
220
+ pz = 2 * cz - nz;
221
+ } else if (isLastSegment) {
222
+ px = posView[posStart + (j - 1) * 3];
223
+ py = posView[posStart + (j - 1) * 3 + 1];
224
+ pz = posView[posStart + (j - 1) * 3 + 2];
225
+ // Mirror current over prev to get synthetic next.
226
+ nx = 2 * cx - px;
227
+ ny = 2 * cy - py;
228
+ nz = 2 * cz - pz;
229
+ } else {
230
+ px = posView[posStart + (j - 1) * 3];
231
+ py = posView[posStart + (j - 1) * 3 + 1];
232
+ pz = posView[posStart + (j - 1) * 3 + 2];
233
+ nx = posView[posStart + (j + 1) * 3];
234
+ ny = posView[posStart + (j + 1) * 3 + 1];
235
+ nz = posView[posStart + (j + 1) * 3 + 2];
236
+ }
237
+
238
+ if (!isLastSegment) {
239
+ indexArray[iOffset] = vOffset;
240
+ indexArray[iOffset + 1] = vOffset + 1;
241
+ indexArray[iOffset + 2] = vOffset + 2;
242
+ indexArray[iOffset + 3] = vOffset + 2;
243
+ indexArray[iOffset + 4] = vOffset + 1;
244
+ indexArray[iOffset + 5] = vOffset + 3;
245
+ iOffset += 6;
246
+ }
247
+
248
+ // Write each vertex twice for the quad.
249
+ for (let k = 0; k < 2; k++) {
250
+ posArray[vOffset * 3] = cx;
251
+ posArray[vOffset * 3 + 1] = cy;
252
+ posArray[vOffset * 3 + 2] = cz;
253
+
254
+ prevPosArray[vOffset * 3] = px;
255
+ prevPosArray[vOffset * 3 + 1] = py;
256
+ prevPosArray[vOffset * 3 + 2] = pz;
257
+
258
+ nextPosArray[vOffset * 3] = nx;
259
+ nextPosArray[vOffset * 3 + 1] = ny;
260
+ nextPosArray[vOffset * 3 + 2] = nz;
261
+
262
+ pickColorArray[vOffset * 4] = Color.floatToByte(pickColor.red);
263
+ pickColorArray[vOffset * 4 + 1] = Color.floatToByte(
264
+ pickColor.green,
265
+ );
266
+ pickColorArray[vOffset * 4 + 2] = Color.floatToByte(pickColor.blue);
267
+ pickColorArray[vOffset * 4 + 3] = Color.floatToByte(
268
+ pickColor.alpha,
269
+ );
270
+
271
+ showColorWidthAndTexCoordArray[vOffset * 4] = show ? 1 : 0;
272
+ showColorWidthAndTexCoordArray[vOffset * 4 + 1] = encodedColor;
273
+ showColorWidthAndTexCoordArray[vOffset * 4 + 2] = material.width;
274
+ showColorWidthAndTexCoordArray[vOffset * 4 + 3] = j / (jl - 1);
275
+
276
+ alphaArray[vOffset] = colorAlpha * 255.0;
277
+
278
+ vOffset++;
279
+ }
199
280
  }
281
+ } else {
282
+ const cartesianArray = polyline.getPositions();
200
283
 
201
- // For each segment, draw two triangles.
202
- if (!isLastSegment) {
203
- indexArray[iOffset] = vOffset;
204
- indexArray[iOffset + 1] = vOffset + 1;
205
- indexArray[iOffset + 2] = vOffset + 2;
284
+ for (let j = 0; j < jl; j++) {
285
+ const isFirstSegment = j === 0;
286
+ const isLastSegment = j === jl - 1;
206
287
 
207
- indexArray[iOffset + 3] = vOffset + 2;
208
- indexArray[iOffset + 4] = vOffset + 1;
209
- indexArray[iOffset + 5] = vOffset + 3;
210
-
211
- iOffset += 6;
212
- }
213
-
214
- EncodedCartesian3.fromCartesian(cartesian, cartesianEnc);
215
- EncodedCartesian3.fromCartesian(prevCartesian, prevCartesianEnc);
216
- EncodedCartesian3.fromCartesian(nextCartesian, nextCartesianEnc);
217
-
218
- // TODO(donmccurdy): Diverging from PolylineCollection.js, which writes
219
- // internal vertices to buffer 4x, not 2x. Not sure that's needed?
220
- for (let k = 0; k < 2; k++) {
221
- // Position.
222
- positionHighArray[vOffset * 3] = cartesianEnc.high.x;
223
- positionHighArray[vOffset * 3 + 1] = cartesianEnc.high.y;
224
- positionHighArray[vOffset * 3 + 2] = cartesianEnc.high.z;
225
-
226
- positionLowArray[vOffset * 3] = cartesianEnc.low.x;
227
- positionLowArray[vOffset * 3 + 1] = cartesianEnc.low.y;
228
- positionLowArray[vOffset * 3 + 2] = cartesianEnc.low.z;
229
-
230
- // Previous position.
231
- prevPositionHighArray[vOffset * 3] = prevCartesianEnc.high.x;
232
- prevPositionHighArray[vOffset * 3 + 1] = prevCartesianEnc.high.y;
233
- prevPositionHighArray[vOffset * 3 + 2] = prevCartesianEnc.high.z;
234
-
235
- prevPositionLowArray[vOffset * 3] = prevCartesianEnc.low.x;
236
- prevPositionLowArray[vOffset * 3 + 1] = prevCartesianEnc.low.y;
237
- prevPositionLowArray[vOffset * 3 + 2] = prevCartesianEnc.low.z;
238
-
239
- // Next position.
240
- nextPositionHighArray[vOffset * 3] = nextCartesianEnc.high.x;
241
- nextPositionHighArray[vOffset * 3 + 1] = nextCartesianEnc.high.y;
242
- nextPositionHighArray[vOffset * 3 + 2] = nextCartesianEnc.high.z;
243
-
244
- nextPositionLowArray[vOffset * 3] = nextCartesianEnc.low.x;
245
- nextPositionLowArray[vOffset * 3 + 1] = nextCartesianEnc.low.y;
246
- nextPositionLowArray[vOffset * 3 + 2] = nextCartesianEnc.low.z;
247
-
248
- // Pick ID.
249
- pickColorArray[vOffset * 4] = Color.floatToByte(pickColor.red);
250
- pickColorArray[vOffset * 4 + 1] = Color.floatToByte(pickColor.green);
251
- pickColorArray[vOffset * 4 + 2] = Color.floatToByte(pickColor.blue);
252
- pickColorArray[vOffset * 4 + 3] = Color.floatToByte(pickColor.alpha);
253
-
254
- // Properties.
255
- showColorWidthAndTexCoordArray[vOffset * 4] = show ? 1 : 0;
256
- showColorWidthAndTexCoordArray[vOffset * 4 + 1] = encodedColor;
257
- showColorWidthAndTexCoordArray[vOffset * 4 + 2] = material.width;
258
- showColorWidthAndTexCoordArray[vOffset * 4 + 3] = j / (jl - 1); // texcoord.s
259
-
260
- vOffset++;
288
+ // For first/last vertices, infer missing vertices by mirroring the segment.
289
+ // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
290
+ Cartesian3.fromArray(cartesianArray, j * 3, cartesian);
291
+ if (isFirstSegment) {
292
+ // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
293
+ Cartesian3.fromArray(cartesianArray, (j + 1) * 3, nextCartesian);
294
+ Cartesian3.subtract(cartesian, nextCartesian, prevCartesian);
295
+ Cartesian3.add(cartesian, prevCartesian, prevCartesian);
296
+ } else if (isLastSegment) {
297
+ // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
298
+ Cartesian3.fromArray(cartesianArray, (j - 1) * 3, prevCartesian);
299
+ Cartesian3.subtract(cartesian, prevCartesian, nextCartesian);
300
+ Cartesian3.add(cartesian, nextCartesian, nextCartesian);
301
+ } else {
302
+ // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
303
+ Cartesian3.fromArray(cartesianArray, (j - 1) * 3, prevCartesian);
304
+ // @ts-expect-error TODO(tsd-jsdoc): See https://github.com/CesiumGS/cesium/pull/13302.
305
+ Cartesian3.fromArray(cartesianArray, (j + 1) * 3, nextCartesian);
306
+ }
307
+
308
+ // For each segment, draw two triangles.
309
+ if (!isLastSegment) {
310
+ indexArray[iOffset] = vOffset;
311
+ indexArray[iOffset + 1] = vOffset + 1;
312
+ indexArray[iOffset + 2] = vOffset + 2;
313
+
314
+ indexArray[iOffset + 3] = vOffset + 2;
315
+ indexArray[iOffset + 4] = vOffset + 1;
316
+ indexArray[iOffset + 5] = vOffset + 3;
317
+
318
+ iOffset += 6;
319
+ }
320
+
321
+ EncodedCartesian3.fromCartesian(cartesian, cartesianEnc);
322
+ EncodedCartesian3.fromCartesian(prevCartesian, prevCartesianEnc);
323
+ EncodedCartesian3.fromCartesian(nextCartesian, nextCartesianEnc);
324
+
325
+ // TODO(donmccurdy): Diverging from PolylineCollection.js, which writes
326
+ // internal vertices to buffer 4x, not 2x. Not sure that's needed?
327
+ for (let k = 0; k < 2; k++) {
328
+ // Position.
329
+ attributeArrays.positionHigh[vOffset * 3] = cartesianEnc.high.x;
330
+ attributeArrays.positionHigh[vOffset * 3 + 1] = cartesianEnc.high.y;
331
+ attributeArrays.positionHigh[vOffset * 3 + 2] = cartesianEnc.high.z;
332
+
333
+ attributeArrays.positionLow[vOffset * 3] = cartesianEnc.low.x;
334
+ attributeArrays.positionLow[vOffset * 3 + 1] = cartesianEnc.low.y;
335
+ attributeArrays.positionLow[vOffset * 3 + 2] = cartesianEnc.low.z;
336
+
337
+ // Previous position.
338
+ attributeArrays.prevPositionHigh[vOffset * 3] =
339
+ prevCartesianEnc.high.x;
340
+ attributeArrays.prevPositionHigh[vOffset * 3 + 1] =
341
+ prevCartesianEnc.high.y;
342
+ attributeArrays.prevPositionHigh[vOffset * 3 + 2] =
343
+ prevCartesianEnc.high.z;
344
+
345
+ attributeArrays.prevPositionLow[vOffset * 3] =
346
+ prevCartesianEnc.low.x;
347
+ attributeArrays.prevPositionLow[vOffset * 3 + 1] =
348
+ prevCartesianEnc.low.y;
349
+ attributeArrays.prevPositionLow[vOffset * 3 + 2] =
350
+ prevCartesianEnc.low.z;
351
+
352
+ // Next position.
353
+ attributeArrays.nextPositionHigh[vOffset * 3] =
354
+ nextCartesianEnc.high.x;
355
+ attributeArrays.nextPositionHigh[vOffset * 3 + 1] =
356
+ nextCartesianEnc.high.y;
357
+ attributeArrays.nextPositionHigh[vOffset * 3 + 2] =
358
+ nextCartesianEnc.high.z;
359
+
360
+ attributeArrays.nextPositionLow[vOffset * 3] =
361
+ nextCartesianEnc.low.x;
362
+ attributeArrays.nextPositionLow[vOffset * 3 + 1] =
363
+ nextCartesianEnc.low.y;
364
+ attributeArrays.nextPositionLow[vOffset * 3 + 2] =
365
+ nextCartesianEnc.low.z;
366
+
367
+ // Pick ID.
368
+ pickColorArray[vOffset * 4] = Color.floatToByte(pickColor.red);
369
+ pickColorArray[vOffset * 4 + 1] = Color.floatToByte(
370
+ pickColor.green,
371
+ );
372
+ pickColorArray[vOffset * 4 + 2] = Color.floatToByte(pickColor.blue);
373
+ pickColorArray[vOffset * 4 + 3] = Color.floatToByte(
374
+ pickColor.alpha,
375
+ );
376
+
377
+ // Properties.
378
+ showColorWidthAndTexCoordArray[vOffset * 4] = show ? 1 : 0;
379
+ showColorWidthAndTexCoordArray[vOffset * 4 + 1] = encodedColor;
380
+ showColorWidthAndTexCoordArray[vOffset * 4 + 2] = material.width;
381
+ showColorWidthAndTexCoordArray[vOffset * 4 + 3] = j / (jl - 1); // texcoord.s
382
+
383
+ alphaArray[vOffset] = colorAlpha * 255.0;
384
+
385
+ vOffset++;
386
+ }
261
387
  }
262
388
  }
263
389
 
@@ -274,100 +400,137 @@ function renderBufferPolylineCollection(collection, frameState, renderContext) {
274
400
  indexBuffer: Buffer.createIndexBuffer({
275
401
  context,
276
402
  typedArray: renderContext.indexArray,
277
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
278
403
  usage: BufferUsage.STATIC_DRAW,
279
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
404
+ // @ts-expect-error https://github.com/CesiumGS/cesium/issues/13420
280
405
  indexDatatype: IndexDatatype.fromTypedArray(renderContext.indexArray),
281
406
  }),
282
407
 
283
408
  attributes: [
409
+ ...(!useFloat64
410
+ ? [
411
+ {
412
+ index: BufferPolylineAttributeLocations.position,
413
+ componentDatatype: collection._positionDatatype,
414
+ componentsPerAttribute: 3,
415
+ normalize: collection._positionNormalized,
416
+ vertexBuffer: Buffer.createVertexBuffer({
417
+ typedArray: attributeArrays.position,
418
+ context,
419
+ usage: BufferUsage.STATIC_DRAW,
420
+ }),
421
+ },
422
+ {
423
+ index: BufferPolylineAttributeLocations.prevPosition,
424
+ componentDatatype: collection._positionDatatype,
425
+ componentsPerAttribute: 3,
426
+ normalize: collection._positionNormalized,
427
+ vertexBuffer: Buffer.createVertexBuffer({
428
+ typedArray: attributeArrays.prevPosition,
429
+ context,
430
+ usage: BufferUsage.STATIC_DRAW,
431
+ }),
432
+ },
433
+ {
434
+ index: BufferPolylineAttributeLocations.nextPosition,
435
+ componentDatatype: collection._positionDatatype,
436
+ componentsPerAttribute: 3,
437
+ normalize: collection._positionNormalized,
438
+ vertexBuffer: Buffer.createVertexBuffer({
439
+ typedArray: attributeArrays.nextPosition,
440
+ context,
441
+ usage: BufferUsage.STATIC_DRAW,
442
+ }),
443
+ },
444
+ ]
445
+ : [
446
+ {
447
+ index: BufferPolylineAttributeLocationsFloat64.positionHigh,
448
+ componentDatatype: ComponentDatatype.FLOAT,
449
+ componentsPerAttribute: 3,
450
+ vertexBuffer: Buffer.createVertexBuffer({
451
+ typedArray: attributeArrays.positionHigh,
452
+ context,
453
+ usage: BufferUsage.STATIC_DRAW,
454
+ }),
455
+ },
456
+ {
457
+ index: BufferPolylineAttributeLocationsFloat64.positionLow,
458
+ componentDatatype: ComponentDatatype.FLOAT,
459
+ componentsPerAttribute: 3,
460
+ vertexBuffer: Buffer.createVertexBuffer({
461
+ typedArray: attributeArrays.positionLow,
462
+ context,
463
+ usage: BufferUsage.STATIC_DRAW,
464
+ }),
465
+ },
466
+ {
467
+ index: BufferPolylineAttributeLocationsFloat64.prevPositionHigh,
468
+ componentDatatype: ComponentDatatype.FLOAT,
469
+ componentsPerAttribute: 3,
470
+ vertexBuffer: Buffer.createVertexBuffer({
471
+ typedArray: attributeArrays.prevPositionHigh,
472
+ context,
473
+ usage: BufferUsage.STATIC_DRAW,
474
+ }),
475
+ },
476
+ {
477
+ index: BufferPolylineAttributeLocationsFloat64.prevPositionLow,
478
+ componentDatatype: ComponentDatatype.FLOAT,
479
+ componentsPerAttribute: 3,
480
+ vertexBuffer: Buffer.createVertexBuffer({
481
+ typedArray: attributeArrays.prevPositionLow,
482
+ context,
483
+ usage: BufferUsage.STATIC_DRAW,
484
+ }),
485
+ },
486
+ {
487
+ index: BufferPolylineAttributeLocationsFloat64.nextPositionHigh,
488
+ componentDatatype: ComponentDatatype.FLOAT,
489
+ componentsPerAttribute: 3,
490
+ vertexBuffer: Buffer.createVertexBuffer({
491
+ typedArray: attributeArrays.nextPositionHigh,
492
+ context,
493
+ usage: BufferUsage.STATIC_DRAW,
494
+ }),
495
+ },
496
+ {
497
+ index: BufferPolylineAttributeLocationsFloat64.nextPositionLow,
498
+ componentDatatype: ComponentDatatype.FLOAT,
499
+ componentsPerAttribute: 3,
500
+ vertexBuffer: Buffer.createVertexBuffer({
501
+ typedArray: attributeArrays.nextPositionLow,
502
+ context,
503
+ usage: BufferUsage.STATIC_DRAW,
504
+ }),
505
+ },
506
+ ]),
284
507
  {
285
- index: BufferPolylineAttributeLocations.positionHigh,
286
- componentDatatype: ComponentDatatype.FLOAT,
287
- componentsPerAttribute: 3,
288
- vertexBuffer: Buffer.createVertexBuffer({
289
- typedArray: attributeArrays.positionHigh,
290
- context,
291
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
292
- usage: BufferUsage.STATIC_DRAW,
293
- }),
294
- },
295
- {
296
- index: BufferPolylineAttributeLocations.positionLow,
297
- componentDatatype: ComponentDatatype.FLOAT,
298
- componentsPerAttribute: 3,
299
- vertexBuffer: Buffer.createVertexBuffer({
300
- typedArray: attributeArrays.positionLow,
301
- context,
302
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
303
- usage: BufferUsage.STATIC_DRAW,
304
- }),
305
- },
306
-
307
- {
308
- index: BufferPolylineAttributeLocations.prevPositionHigh,
309
- componentDatatype: ComponentDatatype.FLOAT,
310
- componentsPerAttribute: 3,
311
- vertexBuffer: Buffer.createVertexBuffer({
312
- typedArray: attributeArrays.prevPositionHigh,
313
- context,
314
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
315
- usage: BufferUsage.STATIC_DRAW,
316
- }),
317
- },
318
- {
319
- index: BufferPolylineAttributeLocations.prevPositionLow,
320
- componentDatatype: ComponentDatatype.FLOAT,
321
- componentsPerAttribute: 3,
322
- vertexBuffer: Buffer.createVertexBuffer({
323
- typedArray: attributeArrays.prevPositionLow,
324
- context,
325
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
326
- usage: BufferUsage.STATIC_DRAW,
327
- }),
328
- },
329
-
330
- {
331
- index: BufferPolylineAttributeLocations.nextPositionHigh,
332
- componentDatatype: ComponentDatatype.FLOAT,
333
- componentsPerAttribute: 3,
508
+ index: attributeLocations.pickColor,
509
+ componentDatatype: ComponentDatatype.UNSIGNED_BYTE,
510
+ componentsPerAttribute: 4,
334
511
  vertexBuffer: Buffer.createVertexBuffer({
335
- typedArray: attributeArrays.nextPositionHigh,
512
+ typedArray: attributeArrays.pickColor,
336
513
  context,
337
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
338
514
  usage: BufferUsage.STATIC_DRAW,
339
515
  }),
340
516
  },
341
517
  {
342
- index: BufferPolylineAttributeLocations.nextPositionLow,
518
+ index: attributeLocations.showColorWidthAndTexCoord,
343
519
  componentDatatype: ComponentDatatype.FLOAT,
344
- componentsPerAttribute: 3,
345
- vertexBuffer: Buffer.createVertexBuffer({
346
- typedArray: attributeArrays.nextPositionLow,
347
- context,
348
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
349
- usage: BufferUsage.STATIC_DRAW,
350
- }),
351
- },
352
- {
353
- index: BufferPolylineAttributeLocations.pickColor,
354
- componentDatatype: ComponentDatatype.UNSIGNED_BYTE,
355
520
  componentsPerAttribute: 4,
356
521
  vertexBuffer: Buffer.createVertexBuffer({
357
- typedArray: attributeArrays.pickColor,
522
+ typedArray: attributeArrays.showColorWidthAndTexCoord,
358
523
  context,
359
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
360
524
  usage: BufferUsage.STATIC_DRAW,
361
525
  }),
362
526
  },
363
527
  {
364
- index: BufferPolylineAttributeLocations.showColorWidthAndTexCoord,
365
- componentDatatype: ComponentDatatype.FLOAT,
366
- componentsPerAttribute: 4,
528
+ index: attributeLocations.alpha,
529
+ componentDatatype: ComponentDatatype.UNSIGNED_BYTE,
530
+ componentsPerAttribute: 1,
367
531
  vertexBuffer: Buffer.createVertexBuffer({
368
- typedArray: attributeArrays.showColorWidthAndTexCoord,
532
+ typedArray: attributeArrays.alpha,
369
533
  context,
370
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
371
534
  usage: BufferUsage.STATIC_DRAW,
372
535
  }),
373
536
  },
@@ -383,11 +546,11 @@ function renderBufferPolylineCollection(collection, frameState, renderContext) {
383
546
  indexCount,
384
547
  );
385
548
 
386
- for (const key in BufferPolylineAttributeLocations) {
387
- if (Object.hasOwn(BufferPolylineAttributeLocations, key)) {
549
+ for (const key in attributeLocations) {
550
+ if (Object.hasOwn(attributeLocations, key)) {
388
551
  const attribute = /** @type {BufferPolylineAttribute} */ (key);
389
552
  renderContext.vertexArray.copyAttributeFromRange(
390
- BufferPolylineAttributeLocations[attribute],
553
+ attributeLocations[attribute],
391
554
  renderContext.attributeArrays[attribute],
392
555
  vertexOffset,
393
556
  vertexCount,
@@ -398,7 +561,10 @@ function renderBufferPolylineCollection(collection, frameState, renderContext) {
398
561
 
399
562
  if (!defined(renderContext.renderState)) {
400
563
  renderContext.renderState = RenderState.fromCache({
401
- blending: BlendingState.DISABLED,
564
+ blending:
565
+ collection._blendOption === BlendOption.OPAQUE
566
+ ? BlendingState.DISABLED
567
+ : BlendingState.ALPHA_BLEND,
402
568
  depthTest: { enabled: true },
403
569
  });
404
570
  }
@@ -408,34 +574,47 @@ function renderBufferPolylineCollection(collection, frameState, renderContext) {
408
574
  context,
409
575
  vertexShaderSource: new ShaderSource({
410
576
  sources: [PolylineCommon, BufferPolylineMaterialVS],
577
+ defines: useFloat64 ? ["USE_FLOAT64"] : [],
411
578
  }),
412
579
  fragmentShaderSource: new ShaderSource({
413
580
  sources: [BufferPolylineMaterialFS],
414
581
  }),
415
- attributeLocations: BufferPolylineAttributeLocations,
582
+ attributeLocations,
416
583
  });
417
584
  }
418
585
 
419
- if (
420
- !defined(renderContext.command) ||
421
- isCommandDirty(collection, renderContext.command)
422
- ) {
586
+ const drawCount = getDrawIndexCount(collection);
587
+
588
+ if (!defined(renderContext.command)) {
423
589
  renderContext.command = new DrawCommand({
424
590
  vertexArray: renderContext.vertexArray,
425
591
  renderState: renderContext.renderState,
426
592
  shaderProgram: renderContext.shaderProgram,
427
593
  primitiveType: PrimitiveType.TRIANGLES,
428
- pass: Pass.OPAQUE,
429
- pickId: "v_pickColor",
594
+ pass:
595
+ collection._blendOption === BlendOption.OPAQUE
596
+ ? Pass.OPAQUE
597
+ : Pass.TRANSLUCENT,
598
+ pickId: collection._allowPicking ? "v_pickColor" : undefined,
430
599
  owner: collection,
431
- count: getDrawIndexCount(collection),
432
- modelMatrix: collection.modelMatrix,
433
- boundingVolume: collection.boundingVolumeWC,
600
+ count: drawCount,
601
+ modelMatrix: collection.modelMatrix, // shared reference
602
+ boundingVolume: collection.boundingVolume, // shared reference
434
603
  debugShowBoundingVolume: collection.debugShowBoundingVolume,
435
604
  });
436
605
  }
437
606
 
438
- frameState.commandList.push(renderContext.command);
607
+ const command = renderContext.command;
608
+
609
+ if (command.count !== drawCount) {
610
+ command.count = drawCount;
611
+ }
612
+
613
+ if (command.debugShowBoundingVolume !== collection.debugShowBoundingVolume) {
614
+ command.debugShowBoundingVolume = collection.debugShowBoundingVolume;
615
+ }
616
+
617
+ frameState.commandList.push(command);
439
618
 
440
619
  collection._dirtyCount = 0;
441
620
  collection._dirtyOffset = 0;
@@ -443,31 +622,6 @@ function renderBufferPolylineCollection(collection, frameState, renderContext) {
443
622
  return renderContext;
444
623
  }
445
624
 
446
- /**
447
- * Returns true if DrawCommand is out of date for given collection.
448
- * @param {BufferPolylineCollection} collection
449
- * @param {DrawCommand} command
450
- * @ignore
451
- */
452
- function isCommandDirty(collection, command) {
453
- const isModelMatrixEqual = Matrix4.equals(
454
- collection.modelMatrix,
455
- command._modelMatrix,
456
- );
457
-
458
- const isBoundingVolumeEqual = BoundingSphere.equals(
459
- collection.boundingVolumeWC,
460
- command._boundingVolume,
461
- );
462
-
463
- return (
464
- getDrawIndexCount(collection) !== command._count ||
465
- collection.debugShowBoundingVolume !== command.debugShowBoundingVolume ||
466
- !isModelMatrixEqual ||
467
- !isBoundingVolumeEqual
468
- );
469
- }
470
-
471
625
  /**
472
626
  * Returns number of drawn (not allocated) indices for given collection.
473
627
  * @param {BufferPolylineCollection} collection
@@ -518,12 +672,6 @@ function destroyRenderContext() {
518
672
  if (defined(context.renderState)) {
519
673
  RenderState.removeFromCache(context.renderState);
520
674
  }
521
-
522
- if (defined(context.pickIds)) {
523
- for (const pickId of context.pickIds) {
524
- pickId.destroy();
525
- }
526
- }
527
675
  }
528
676
 
529
677
  export default renderBufferPolylineCollection;