@cesium/engine 26.1.0 → 26.2.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 (384) hide show
  1. package/Build/ThirdParty/Workers/zip-web-worker.js +586 -480
  2. package/Build/Workers/chunk-27FWRTJI.js +454 -0
  3. package/Build/Workers/chunk-2H5264K7.js +1284 -0
  4. package/Build/Workers/chunk-2H73KDBM.js +511 -0
  5. package/Build/Workers/chunk-2RGJPWQX.js +1284 -0
  6. package/Build/Workers/chunk-2Z4ZLVOD.js +352 -0
  7. package/Build/Workers/chunk-2ZKH2QZB.js +387 -0
  8. package/Build/Workers/chunk-36NI5E6W.js +3820 -0
  9. package/Build/Workers/chunk-37SW7SYS.js +778 -0
  10. package/Build/Workers/chunk-3GHVJ3SO.js +455 -0
  11. package/Build/Workers/chunk-3LB4UVPU.js +387 -0
  12. package/Build/Workers/chunk-3PONLKEL.js +778 -0
  13. package/Build/Workers/chunk-3PSS3T43.js +102 -0
  14. package/Build/Workers/chunk-3QR662HH.js +3820 -0
  15. package/Build/Workers/chunk-3SX2WYSO.js +973 -0
  16. package/Build/Workers/chunk-3UDN6LYX.js +476 -0
  17. package/Build/Workers/chunk-47MCBSXI.js +9237 -0
  18. package/Build/Workers/chunk-4E626OCE.js +1067 -0
  19. package/Build/Workers/chunk-4NW2MJKH.js +455 -0
  20. package/Build/Workers/chunk-52YK5BSN.js +198 -0
  21. package/Build/Workers/chunk-5RNAQZK6.js +9234 -0
  22. package/Build/Workers/chunk-5YPQBFRD.js +519 -0
  23. package/Build/Workers/chunk-6FHT43QR.js +140 -0
  24. package/Build/Workers/chunk-6FZDPMTO.js +455 -0
  25. package/Build/Workers/chunk-6R5X2GUA.js +1284 -0
  26. package/Build/Workers/chunk-7A2OGDHT.js +305 -0
  27. package/Build/Workers/chunk-7CGEQUM2.js +305 -0
  28. package/Build/Workers/chunk-7I325HV6.js +1344 -0
  29. package/Build/Workers/chunk-7MM3N2VE.js +1067 -0
  30. package/Build/Workers/chunk-7TKLTCZW.js +219 -0
  31. package/Build/Workers/chunk-7UUKBDH6.js +1054 -0
  32. package/Build/Workers/chunk-7W6DUHAB.js +693 -0
  33. package/Build/Workers/chunk-7XM5JK5F.js +162 -0
  34. package/Build/Workers/chunk-7YG3ND3P.js +454 -0
  35. package/Build/Workers/chunk-A62YI6S6.js +305 -0
  36. package/Build/Workers/chunk-A7TTWVTF.js +2719 -0
  37. package/Build/Workers/chunk-ACTVJHSP.js +519 -0
  38. package/Build/Workers/chunk-ADX3CBKD.js +9234 -0
  39. package/Build/Workers/chunk-AF7DTMJ7.js +398 -0
  40. package/Build/Workers/chunk-AJSFRY4U.js +1344 -0
  41. package/Build/Workers/chunk-ARZICEEP.js +301 -0
  42. package/Build/Workers/chunk-B3QHNA4A.js +147 -0
  43. package/Build/Workers/chunk-BKPQFCXH.js +511 -0
  44. package/Build/Workers/chunk-BSPCI2LO.js +959 -0
  45. package/Build/Workers/chunk-BUJWSX5S.js +301 -0
  46. package/Build/Workers/chunk-C7QDUNI3.js +138 -0
  47. package/Build/Workers/chunk-CIV5DJOQ.js +778 -0
  48. package/Build/Workers/chunk-CQNFIAZU.js +56 -0
  49. package/Build/Workers/chunk-CRCGE4J4.js +9237 -0
  50. package/Build/Workers/chunk-CUTRKXUQ.js +288 -0
  51. package/Build/Workers/chunk-D6AY775A.js +3201 -0
  52. package/Build/Workers/chunk-DSGLDRTI.js +278 -0
  53. package/Build/Workers/chunk-DZBQUULR.js +138 -0
  54. package/Build/Workers/chunk-DZUFEE4L.js +140 -0
  55. package/Build/Workers/chunk-E2NKV5YT.js +3820 -0
  56. package/Build/Workers/chunk-EB3Y5P3A.js +368 -0
  57. package/Build/Workers/chunk-ELE6SC2C.js +837 -0
  58. package/Build/Workers/chunk-EOWDZN5S.js +288 -0
  59. package/Build/Workers/chunk-ERKUET22.js +3201 -0
  60. package/Build/Workers/chunk-EZGQPOIG.js +162 -0
  61. package/Build/Workers/chunk-F2IMBMZY.js +241 -0
  62. package/Build/Workers/chunk-F4CSNRZO.js +219 -0
  63. package/Build/Workers/chunk-FBP4DUQJ.js +693 -0
  64. package/Build/Workers/chunk-FJWZMGOQ.js +1992 -0
  65. package/Build/Workers/chunk-FQ42MT7M.js +58 -0
  66. package/Build/Workers/chunk-FU4BGABC.js +398 -0
  67. package/Build/Workers/chunk-FX3VEAIU.js +2719 -0
  68. package/Build/Workers/chunk-GGNWQWSB.js +301 -0
  69. package/Build/Workers/chunk-GHXVQVUM.js +1344 -0
  70. package/Build/Workers/chunk-GNKXEN4C.js +682 -0
  71. package/Build/Workers/chunk-GVA7XQI2.js +368 -0
  72. package/Build/Workers/chunk-GXDHRC4J.js +1344 -0
  73. package/Build/Workers/chunk-GYSYP6PC.js +1067 -0
  74. package/Build/Workers/chunk-H2WCFXLP.js +241 -0
  75. package/Build/Workers/chunk-HDL4HOXZ.js +778 -0
  76. package/Build/Workers/chunk-HLW2ZRVK.js +368 -0
  77. package/Build/Workers/chunk-HT6FASOT.js +973 -0
  78. package/Build/Workers/chunk-I74ZH5LK.js +959 -0
  79. package/Build/Workers/chunk-IDVHUDZT.js +352 -0
  80. package/Build/Workers/chunk-IJZJMIUY.js +789 -0
  81. package/Build/Workers/chunk-IMBVP57H.js +44 -0
  82. package/Build/Workers/chunk-IOO7Z2AV.js +57 -0
  83. package/Build/Workers/chunk-IUIFLOYO.js +44 -0
  84. package/Build/Workers/chunk-J73T2VOY.js +171 -0
  85. package/Build/Workers/chunk-JALGQYDY.js +288 -0
  86. package/Build/Workers/chunk-JXYLJCTC.js +124 -0
  87. package/Build/Workers/chunk-K27QOAW6.js +97 -0
  88. package/Build/Workers/chunk-KMV25A63.js +789 -0
  89. package/Build/Workers/chunk-KP5QD7WU.js +693 -0
  90. package/Build/Workers/chunk-KZWFWJML.js +2719 -0
  91. package/Build/Workers/chunk-LCXRRALY.js +387 -0
  92. package/Build/Workers/chunk-LDRQSYBN.js +1800 -0
  93. package/Build/Workers/chunk-M4JZ6TSZ.js +959 -0
  94. package/Build/Workers/chunk-M6QKXVAU.js +1054 -0
  95. package/Build/Workers/chunk-MAAHFYPC.js +198 -0
  96. package/Build/Workers/chunk-MCJDRDJQ.js +102 -0
  97. package/Build/Workers/chunk-MEENMEAH.js +198 -0
  98. package/Build/Workers/chunk-NAWU5RF4.js +162 -0
  99. package/Build/Workers/chunk-NCL22ZUX.js +56 -0
  100. package/Build/Workers/chunk-NEFDMMLY.js +241 -0
  101. package/Build/Workers/chunk-NJVBJG63.js +124 -0
  102. package/Build/Workers/chunk-NLLCQBX3.js +73 -0
  103. package/Build/Workers/chunk-NSKZ6SBK.js +1483 -0
  104. package/Build/Workers/chunk-NXGQBQWE.js +837 -0
  105. package/Build/Workers/chunk-O3DKEX7Q.js +352 -0
  106. package/Build/Workers/chunk-O3XFXGPZ.js +476 -0
  107. package/Build/Workers/chunk-OA6MYL2C.js +837 -0
  108. package/Build/Workers/chunk-OHP4ELS7.js +198 -0
  109. package/Build/Workers/chunk-OZGPS7FB.js +138 -0
  110. package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
  111. package/Build/Workers/chunk-PD4GK4EM.js +57 -0
  112. package/Build/Workers/chunk-PEDU33QG.js +2342 -0
  113. package/Build/Workers/chunk-PRWUMCXF.js +682 -0
  114. package/Build/Workers/chunk-PVTSNNVI.js +288 -0
  115. package/Build/Workers/chunk-QFSSCLLZ.js +973 -0
  116. package/Build/Workers/chunk-QHPZH22L.js +241 -0
  117. package/Build/Workers/chunk-QIZDWZK6.js +301 -0
  118. package/Build/Workers/chunk-QV6DG2YX.js +1483 -0
  119. package/Build/Workers/chunk-R4K7EHOU.js +171 -0
  120. package/Build/Workers/chunk-R7JGHDD6.js +789 -0
  121. package/Build/Workers/chunk-RASQEYD4.js +1483 -0
  122. package/Build/Workers/chunk-RW6ITX7Q.js +3820 -0
  123. package/Build/Workers/chunk-RYSQVJR6.js +398 -0
  124. package/Build/Workers/chunk-S6RJU5NM.js +1054 -0
  125. package/Build/Workers/chunk-SA2A2AN5.js +2342 -0
  126. package/Build/Workers/chunk-SDFHDNS4.js +147 -0
  127. package/Build/Workers/chunk-SJYSIOEM.js +414 -0
  128. package/Build/Workers/chunk-SMTGMFBL.js +97 -0
  129. package/Build/Workers/chunk-SXSP3JHS.js +38 -0
  130. package/Build/Workers/chunk-TN35HP5B.js +1067 -0
  131. package/Build/Workers/chunk-TNWKJNUZ.js +454 -0
  132. package/Build/Workers/chunk-TOAF47AQ.js +102 -0
  133. package/Build/Workers/chunk-TQ4QCOXT.js +2719 -0
  134. package/Build/Workers/chunk-TSDSILQB.js +124 -0
  135. package/Build/Workers/chunk-U5LV3F3Z.js +1054 -0
  136. package/Build/Workers/chunk-UAZUP4I5.js +1992 -0
  137. package/Build/Workers/chunk-UF46SZEZ.js +789 -0
  138. package/Build/Workers/chunk-UNRTMCET.js +398 -0
  139. package/Build/Workers/chunk-UTB7U3O6.js +1992 -0
  140. package/Build/Workers/chunk-V46YGZE6.js +352 -0
  141. package/Build/Workers/chunk-VDGOCROW.js +57 -0
  142. package/Build/Workers/chunk-VFWSSBPT.js +511 -0
  143. package/Build/Workers/chunk-VVYMXI3I.js +1284 -0
  144. package/Build/Workers/chunk-VXWHPYQM.js +837 -0
  145. package/Build/Workers/chunk-VXYUBRSB.js +219 -0
  146. package/Build/Workers/chunk-VZLDLEWI.js +387 -0
  147. package/Build/Workers/chunk-W5OCKMPJ.js +101 -0
  148. package/Build/Workers/chunk-WN3F4CVG.js +3201 -0
  149. package/Build/Workers/chunk-WPRUWXGV.js +693 -0
  150. package/Build/Workers/chunk-WTO2ERBP.js +414 -0
  151. package/Build/Workers/chunk-WVHMDVG4.js +959 -0
  152. package/Build/Workers/chunk-XCBZVTIV.js +280 -0
  153. package/Build/Workers/chunk-XGA23TAX.js +73 -0
  154. package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
  155. package/Build/Workers/chunk-XQH66YJC.js +147 -0
  156. package/Build/Workers/chunk-XTA7BXJG.js +682 -0
  157. package/Build/Workers/chunk-XTIDAFRS.js +476 -0
  158. package/Build/Workers/chunk-XUEDWBUD.js +682 -0
  159. package/Build/Workers/chunk-XYFLRH3H.js +124 -0
  160. package/Build/Workers/chunk-Y7JRTRTO.js +305 -0
  161. package/Build/Workers/chunk-Y7QSMDCJ.js +352 -0
  162. package/Build/Workers/chunk-YCB5TYTR.js +1483 -0
  163. package/Build/Workers/chunk-YEYOSTJX.js +219 -0
  164. package/Build/Workers/chunk-YGFVAGYF.js +630 -0
  165. package/Build/Workers/chunk-YIIACKQO.js +368 -0
  166. package/Build/Workers/chunk-YJGSP6PE.js +511 -0
  167. package/Build/Workers/chunk-Z4LR5EHE.js +454 -0
  168. package/Build/Workers/chunk-Z66EVE2A.js +44 -0
  169. package/Build/Workers/chunk-ZHIHHHTB.js +414 -0
  170. package/Build/Workers/chunk-ZNWHFSLE.js +171 -0
  171. package/Build/Workers/chunk-ZQLZG4IN.js +2342 -0
  172. package/Build/Workers/chunk-ZRTSMUZ2.js +414 -0
  173. package/Build/Workers/chunk-ZZUVT5BM.js +476 -0
  174. package/Build/Workers/combineGeometry.js +16 -16
  175. package/Build/Workers/createBoxGeometry.js +10 -10
  176. package/Build/Workers/createBoxOutlineGeometry.js +8 -8
  177. package/Build/Workers/createCircleGeometry.js +18 -18
  178. package/Build/Workers/createCircleOutlineGeometry.js +11 -11
  179. package/Build/Workers/createCoplanarPolygonGeometry.js +27 -27
  180. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +23 -23
  181. package/Build/Workers/createCorridorGeometry.js +23 -25
  182. package/Build/Workers/createCorridorOutlineGeometry.js +21 -23
  183. package/Build/Workers/createCylinderGeometry.js +12 -12
  184. package/Build/Workers/createCylinderOutlineGeometry.js +10 -10
  185. package/Build/Workers/createEllipseGeometry.js +18 -18
  186. package/Build/Workers/createEllipseOutlineGeometry.js +11 -11
  187. package/Build/Workers/createEllipsoidGeometry.js +11 -11
  188. package/Build/Workers/createEllipsoidOutlineGeometry.js +10 -10
  189. package/Build/Workers/createFrustumGeometry.js +11 -11
  190. package/Build/Workers/createFrustumOutlineGeometry.js +11 -11
  191. package/Build/Workers/createGeometry.js +16 -16
  192. package/Build/Workers/createGroundPolylineGeometry.js +16 -16
  193. package/Build/Workers/createPlaneGeometry.js +9 -9
  194. package/Build/Workers/createPlaneOutlineGeometry.js +8 -8
  195. package/Build/Workers/createPolygonGeometry.js +25 -25
  196. package/Build/Workers/createPolygonOutlineGeometry.js +22 -22
  197. package/Build/Workers/createPolylineGeometry.js +18 -18
  198. package/Build/Workers/createPolylineVolumeGeometry.js +24 -24
  199. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +20 -20
  200. package/Build/Workers/createRectangleGeometry.js +19 -19
  201. package/Build/Workers/createRectangleOutlineGeometry.js +13 -13
  202. package/Build/Workers/createSimplePolylineGeometry.js +16 -16
  203. package/Build/Workers/createSphereGeometry.js +11 -11
  204. package/Build/Workers/createSphereOutlineGeometry.js +10 -10
  205. package/Build/Workers/createVectorTileClampedPolylines.js +7 -7
  206. package/Build/Workers/createVectorTileGeometries.js +15 -15
  207. package/Build/Workers/createVectorTilePoints.js +6 -6
  208. package/Build/Workers/createVectorTilePolygons.js +14 -14
  209. package/Build/Workers/createVectorTilePolylines.js +7 -7
  210. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +17 -17
  211. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +14 -14
  212. package/Build/Workers/createVerticesFromHeightmap.js +14 -14
  213. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +12 -12
  214. package/Build/Workers/createWallGeometry.js +17 -17
  215. package/Build/Workers/createWallOutlineGeometry.js +17 -17
  216. package/Build/Workers/decodeDraco.js +2 -2
  217. package/Build/Workers/decodeI3S.js +5 -5
  218. package/Build/Workers/incrementallyBuildTerrainPicker.js +4 -4
  219. package/Build/Workers/upsampleQuantizedTerrainMesh.js +14 -14
  220. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +17 -17
  221. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  222. package/Source/Core/BoundingSphere.js +0 -3
  223. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  224. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  225. package/Source/Core/CorridorGeometry.js +2 -4
  226. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  227. package/Source/Core/EarthOrientationParameters.js +2 -2
  228. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  229. package/Source/Core/EllipsoidGeodesic.js +3 -3
  230. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  231. package/Source/Core/GroundPolylineGeometry.js +2 -2
  232. package/Source/Core/Heap.js +1 -1
  233. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  234. package/Source/Core/InterpolationAlgorithm.js +1 -0
  235. package/Source/Core/Ion.js +1 -1
  236. package/Source/Core/JulianDate.js +1 -1
  237. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  238. package/Source/Core/LinearApproximation.js +69 -66
  239. package/Source/Core/Math.js +59 -0
  240. package/Source/Core/Matrix2.js +2 -2
  241. package/Source/Core/Matrix3.js +2 -2
  242. package/Source/Core/OrthographicFrustum.js +1 -1
  243. package/Source/Core/PerspectiveFrustum.js +1 -1
  244. package/Source/Core/PolygonGeometry.js +2 -2
  245. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  246. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  247. package/Source/Core/PolylineGeometry.js +1 -1
  248. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  249. package/Source/Core/Rectangle.js +7 -1
  250. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  251. package/Source/Core/SimplePolylineGeometry.js +1 -1
  252. package/Source/Core/TerrainEncoding.js +2 -2
  253. package/Source/Core/TerrainPicker.js +179 -168
  254. package/Source/Core/TimeIntervalCollection.js +1 -3
  255. package/Source/Core/Tipsify.js +1 -1
  256. package/Source/Core/Transforms.js +5 -1
  257. package/Source/Core/VectorPipeline.js +1117 -0
  258. package/Source/Core/VectorProvider.js +429 -0
  259. package/Source/Core/WallOutlineGeometry.js +1 -1
  260. package/Source/Core/getTimestamp.js +4 -2
  261. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  262. package/Source/DataSources/CzmlDataSource.js +2 -0
  263. package/Source/DataSources/DataSourceDisplay.js +1 -1
  264. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  265. package/Source/DataSources/GeometryVisualizer.js +1 -1
  266. package/Source/DataSources/KmlDataSource.js +1 -2
  267. package/Source/DataSources/PolylineVisualizer.js +1 -1
  268. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  269. package/Source/Renderer/AutomaticUniforms.js +23 -0
  270. package/Source/Renderer/Context.js +9 -3
  271. package/Source/Renderer/DrawCommand.js +22 -0
  272. package/Source/Renderer/Framebuffer.js +4 -0
  273. package/Source/Renderer/Pass.js +11 -10
  274. package/Source/Renderer/Texture.js +11 -0
  275. package/Source/Renderer/UniformState.js +7 -0
  276. package/Source/Renderer/VertexArray.js +0 -1
  277. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  278. package/Source/Scene/ArcGisMapService.js +1 -1
  279. package/Source/Scene/Billboard.js +2 -1
  280. package/Source/Scene/BillboardCollection.js +7 -3
  281. package/Source/Scene/BufferPrimitiveCollection.js +27 -5
  282. package/Source/Scene/Camera.js +71 -5
  283. package/Source/Scene/Cesium3DTileset.js +1 -1
  284. package/Source/Scene/ClippingPlaneCollection.js +2 -2
  285. package/Source/Scene/Controllers/Controller.js +63 -0
  286. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  287. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  288. package/Source/Scene/Controllers/MouseButton.js +32 -0
  289. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  290. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  291. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  292. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  293. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  294. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  295. package/Source/Scene/DerivedCommand.js +94 -0
  296. package/Source/Scene/EdgeFramebuffer.js +1 -5
  297. package/Source/Scene/FrameState.js +17 -0
  298. package/Source/Scene/Globe.js +20 -0
  299. package/Source/Scene/GlobeDepth.js +27 -1
  300. package/Source/Scene/GlobeSurfaceShaderSet.js +12 -2
  301. package/Source/Scene/GlobeSurfaceTile.js +48 -10
  302. package/Source/Scene/GlobeSurfaceTileProvider.js +121 -3
  303. package/Source/Scene/GltfLoader.js +32 -3
  304. package/Source/Scene/GltfSpzLoader.js +1 -1
  305. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  306. package/Source/Scene/I3SDataProvider.js +1 -1
  307. package/Source/Scene/I3SLayer.js +1 -1
  308. package/Source/Scene/I3SNode.js +2 -2
  309. package/Source/Scene/ImageryLayerCollection.js +188 -4
  310. package/Source/Scene/IonImageryProvider.js +1 -5
  311. package/Source/Scene/Label.js +4 -4
  312. package/Source/Scene/LabelCollection.js +1 -1
  313. package/Source/Scene/MVTDataProvider.js +2 -0
  314. package/Source/Scene/Model/B3dmLoader.js +1 -2
  315. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +10 -8
  316. package/Source/Scene/Model/I3dmLoader.js +1 -1
  317. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  318. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  319. package/Source/Scene/Model/Model.js +8 -10
  320. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  321. package/Source/Scene/Model/ModelDrawCommand.js +160 -16
  322. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  323. package/Source/Scene/Model/ModelSceneGraph.js +21 -0
  324. package/Source/Scene/Model/PickingPipelineStage.js +29 -0
  325. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  326. package/Source/Scene/ModelComponents.js +71 -0
  327. package/Source/Scene/Picking.js +16 -5
  328. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  329. package/Source/Scene/PntsParser.js +0 -1
  330. package/Source/Scene/PolylineCollection.js +1 -1
  331. package/Source/Scene/PostProcessStage.js +4 -2
  332. package/Source/Scene/ResourceCache.js +7 -4
  333. package/Source/Scene/ResourceCacheKey.js +16 -13
  334. package/Source/Scene/Scene.js +202 -5
  335. package/Source/Scene/ScreenSpaceCameraController.js +1 -2
  336. package/Source/Scene/ShadowMap.js +9 -3
  337. package/Source/Scene/ShadowMapShader.js +50 -2
  338. package/Source/Scene/SnapFramebuffer.js +121 -0
  339. package/Source/Scene/Snapping.js +184 -0
  340. package/Source/Scene/TerrainFillMesh.js +3 -2
  341. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +1 -1
  342. package/Source/Scene/Vector3DTileContent.js +2 -3
  343. package/Source/Scene/VectorGltf3DTileContent.js +23 -3
  344. package/Source/Scene/View.js +10 -8
  345. package/Source/Scene/VoxelTraversal.js +1 -1
  346. package/Source/Scene/createElevationBandMaterial.js +1 -1
  347. package/Source/Scene/renderBufferPointCollection.js +1 -2
  348. package/Source/Scene/renderBufferPolygonCollection.js +1 -2
  349. package/Source/Scene/renderBufferPolylineCollection.js +1 -2
  350. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  351. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  352. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  353. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  354. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  355. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  356. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  357. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  358. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  359. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  360. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  361. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  362. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  363. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  364. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  365. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  366. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  367. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  368. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
  369. package/Source/Shaders/GlobeFS.glsl +10 -5
  370. package/Source/Shaders/GlobeFS.js +9 -5
  371. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  372. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  373. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  374. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  375. package/Source/Shaders/Model/ModelFS.glsl +105 -0
  376. package/Source/Shaders/Model/ModelFS.js +105 -0
  377. package/Source/Shaders/VectorCommon.glsl +178 -0
  378. package/Source/Shaders/VectorCommon.js +75 -0
  379. package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
  380. package/Source/ThirdParty/zip-module.wasm +0 -0
  381. package/Source/Widget/CesiumWidget.js +30 -0
  382. package/index.d.ts +770 -10
  383. package/index.js +177 -160
  384. package/package.json +1 -1
@@ -28,6 +28,7 @@ import QuadtreePrimitive from "./QuadtreePrimitive.js";
28
28
  import SceneMode from "./SceneMode.js";
29
29
  import ShadowMode from "./ShadowMode.js";
30
30
  import CesiumMath from "../Core/Math.js";
31
+ import VectorProvider from "../Core/VectorProvider.js";
31
32
 
32
33
  /**
33
34
  * The globe rendered in the scene, including its terrain ({@link Globe#terrainProvider})
@@ -45,6 +46,9 @@ function Globe(ellipsoid) {
45
46
  ellipsoid: ellipsoid,
46
47
  });
47
48
  const imageryLayerCollection = new ImageryLayerCollection();
49
+ const vectorProvider = new VectorProvider({
50
+ tilingScheme: terrainProvider.tilingScheme,
51
+ });
48
52
 
49
53
  this._ellipsoid = ellipsoid;
50
54
  this._imageryLayerCollection = imageryLayerCollection;
@@ -57,12 +61,15 @@ function Globe(ellipsoid) {
57
61
  terrainProvider: terrainProvider,
58
62
  imageryLayers: imageryLayerCollection,
59
63
  surfaceShaderSet: this._surfaceShaderSet,
64
+ vectorProvider,
60
65
  }),
61
66
  });
62
67
 
63
68
  this._terrainProvider = terrainProvider;
64
69
  this._terrainProviderChanged = new Event();
65
70
 
71
+ this._vectorProvider = vectorProvider;
72
+
66
73
  this._undergroundColor = Color.clone(Color.BLACK);
67
74
  this._undergroundColorAlphaByDistance = new NearFarScalar(
68
75
  ellipsoid.maximumRadius / 1000.0,
@@ -515,6 +522,9 @@ Object.defineProperties(Globe.prototype, {
515
522
  set: function (value) {
516
523
  if (value !== this._terrainProvider) {
517
524
  this._terrainProvider = value;
525
+ if (defined(value)) {
526
+ this._vectorProvider.tilingScheme = value.tilingScheme;
527
+ }
518
528
  this._terrainProviderChanged.raiseEvent(value);
519
529
  if (defined(this._material)) {
520
530
  makeShadersDirty(this);
@@ -534,6 +544,16 @@ Object.defineProperties(Globe.prototype, {
534
544
  return this._terrainProviderChanged;
535
545
  },
536
546
  },
547
+ /**
548
+ * @memberof Globe.prototype
549
+ * @type {VectorProvider}
550
+ * @ignore
551
+ */
552
+ vectorProvider: {
553
+ get: function () {
554
+ return this._vectorProvider;
555
+ },
556
+ },
537
557
  /**
538
558
  * Gets an event that's raised when the length of the tile load queue has changed since the last render frame. When the load queue is empty,
539
559
  * all terrain and imagery for the current view have been loaded. The event passes the new length of the tile load queue.
@@ -2,6 +2,7 @@ import BoundingRectangle from "../Core/BoundingRectangle.js";
2
2
  import Color from "../Core/Color.js";
3
3
  import defined from "../Core/defined.js";
4
4
  import destroyObject from "../Core/destroyObject.js";
5
+ import PixelFormat from "../Core/PixelFormat.js";
5
6
  import ClearCommand from "../Renderer/ClearCommand.js";
6
7
  import FramebufferManager from "../Renderer/FramebufferManager.js";
7
8
  import PixelDatatype from "../Renderer/PixelDatatype.js";
@@ -21,6 +22,7 @@ import StencilOperation from "./StencilOperation.js";
21
22
  */
22
23
  function GlobeDepth() {
23
24
  this._picking = false;
25
+ this._snapping = false;
24
26
  this._numSamples = 1;
25
27
  this._tempCopyDepthTexture = undefined;
26
28
 
@@ -28,6 +30,16 @@ function GlobeDepth() {
28
30
  depthStencil: true,
29
31
  supportsDepthTexture: true,
30
32
  });
33
+ // Float twin of the pick color framebuffer, used during a snapping pass
34
+ // (see Scene#snap). RGBA32F so each pixel can carry the snap payload
35
+ // (uint32 pick ID, isEdge flag, eye-space depth). GPU resources are only
36
+ // allocated on first use (FramebufferManager allocates lazily in update).
37
+ this._snapColorFramebuffer = new FramebufferManager({
38
+ depthStencil: true,
39
+ supportsDepthTexture: true,
40
+ pixelDatatype: PixelDatatype.FLOAT,
41
+ pixelFormat: PixelFormat.RGBA,
42
+ });
31
43
  this._outputFramebuffer = new FramebufferManager({
32
44
  depthStencil: true,
33
45
  supportsDepthTexture: true,
@@ -61,6 +73,9 @@ function GlobeDepth() {
61
73
  Object.defineProperties(GlobeDepth.prototype, {
62
74
  colorFramebufferManager: {
63
75
  get: function () {
76
+ if (this._snapping) {
77
+ return this._snapColorFramebuffer;
78
+ }
64
79
  return this._picking
65
80
  ? this._pickColorFramebuffer
66
81
  : this._outputFramebuffer;
@@ -84,6 +99,14 @@ Object.defineProperties(GlobeDepth.prototype, {
84
99
  this._picking = value;
85
100
  },
86
101
  },
102
+ snapping: {
103
+ get: function () {
104
+ return this._snapping;
105
+ },
106
+ set: function (value) {
107
+ this._snapping = value;
108
+ },
109
+ },
87
110
  });
88
111
 
89
112
  function updateCopyCommands(globeDepth, context, width, height, passState) {
@@ -260,7 +283,9 @@ GlobeDepth.prototype.update = function (
260
283
  : PixelDatatype.FLOAT
261
284
  : PixelDatatype.UNSIGNED_BYTE;
262
285
  this._numSamples = numSamples;
263
- if (this.picking) {
286
+ if (this.snapping) {
287
+ this._snapColorFramebuffer.update(context, width, height);
288
+ } else if (this.picking) {
264
289
  this._pickColorFramebuffer.update(context, width, height);
265
290
  } else {
266
291
  this._outputFramebuffer.update(
@@ -377,6 +402,7 @@ GlobeDepth.prototype.isDestroyed = function () {
377
402
 
378
403
  GlobeDepth.prototype.destroy = function () {
379
404
  this._pickColorFramebuffer.destroy();
405
+ this._snapColorFramebuffer.destroy();
380
406
  this._outputFramebuffer.destroy();
381
407
  this._copyDepthFramebuffer.destroy();
382
408
  this._tempCopyDepthFramebuffer.destroy();
@@ -4,6 +4,7 @@ import defined from "../Core/defined.js";
4
4
  import destroyObject from "../Core/destroyObject.js";
5
5
  import TerrainQuantization from "../Core/TerrainQuantization.js";
6
6
  import ShaderProgram from "../Renderer/ShaderProgram.js";
7
+ import VectorCommon from "../Shaders/VectorCommon.js";
7
8
  import getClippingFunction from "./getClippingFunction.js";
8
9
  import SceneMode from "./SceneMode.js";
9
10
 
@@ -81,7 +82,7 @@ class GlobeSurfaceShader {
81
82
  * @property {boolean} [hasExaggeration]
82
83
  * @property {boolean} [showUndergroundColor]
83
84
  * @property {boolean} [translucent]
84
- * @ignore
85
+ * @private
85
86
  */
86
87
 
87
88
  /**
@@ -138,6 +139,8 @@ class GlobeSurfaceShaderSet {
138
139
  const hasExaggeration = options.hasExaggeration;
139
140
  const showUndergroundColor = options.showUndergroundColor;
140
141
  const translucent = options.translucent;
142
+ const vectorData = surfaceTile.vectorData;
143
+ const hasVectorLayer = vectorData?.show;
141
144
 
142
145
  let quantization = 0;
143
146
  let quantizationDefine = "";
@@ -201,7 +204,8 @@ class GlobeSurfaceShaderSet {
201
204
  (+showUndergroundColor << 30) |
202
205
  (+translucent << 31)) >>>
203
206
  0) +
204
- (applyDayNightAlpha ? 0x100000000 : 0);
207
+ (applyDayNightAlpha ? 0x100000000 : 0) +
208
+ (hasVectorLayer ? 0x200000000 : 0);
205
209
 
206
210
  let currentClippingShaderState = 0;
207
211
  // @ts-expect-error Missing types.
@@ -392,6 +396,12 @@ class GlobeSurfaceShaderSet {
392
396
  vs.defines.push("EXAGGERATION");
393
397
  }
394
398
 
399
+ if (hasVectorLayer) {
400
+ vs.defines.push("HAS_VECTOR_LAYER");
401
+ fs.defines.push("HAS_VECTOR_LAYER");
402
+ fs.sources.unshift(VectorCommon); // before GlobeFS.
403
+ }
404
+
395
405
  let computeDayColor =
396
406
  "\
397
407
  vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)\n\
@@ -9,6 +9,7 @@ import RequestState from "../Core/RequestState.js";
9
9
  import RequestType from "../Core/RequestType.js";
10
10
  import TerrainEncoding from "../Core/TerrainEncoding.js";
11
11
  import TileProviderError from "../Core/TileProviderError.js";
12
+ import VectorPipeline from "../Core/VectorPipeline.js";
12
13
  import Buffer from "../Renderer/Buffer.js";
13
14
  import BufferUsage from "../Renderer/BufferUsage.js";
14
15
  import PixelDatatype from "../Renderer/PixelDatatype.js";
@@ -36,6 +37,7 @@ import TerrainState from "./TerrainState.js";
36
37
  /** @import TerrainProvider from "../Core/TerrainProvider.js"; */
37
38
  /** @import TileBoundingRegion from "./TileBoundingRegion.js"; */
38
39
  /** @import TileImagery from "./TileImagery.js"; */
40
+ /** @import VectorProvider, { VectorTileData } from "../Core/VectorProvider.js"; */
39
41
 
40
42
  /**
41
43
  * Contains additional information about a {@link QuadtreeTile} of the globe's surface, and
@@ -62,6 +64,9 @@ class GlobeSurfaceTile {
62
64
  /** @type {HeightmapTerrainData} */
63
65
  this.terrainData = undefined;
64
66
 
67
+ /** @type {VectorTileData} */
68
+ this.vectorData = undefined;
69
+
65
70
  /** @type {VertexArray} */
66
71
  this.vertexArray = undefined;
67
72
 
@@ -159,6 +164,11 @@ class GlobeSurfaceTile {
159
164
  this.waterMaskTexture = undefined;
160
165
  }
161
166
 
167
+ if (defined(this.vectorData)) {
168
+ VectorPipeline.freeResources(this.vectorData);
169
+ this.vectorData = undefined;
170
+ }
171
+
162
172
  this.terrainData = undefined;
163
173
 
164
174
  this.terrainState = TerrainState.UNLOADED;
@@ -184,26 +194,37 @@ class GlobeSurfaceTile {
184
194
  /**
185
195
  * @param {QuadtreeTile} tile
186
196
  * @param {TerrainProvider} terrainProvider
197
+ * @param {VectorProvider} vectorProvider
187
198
  * @param {ImageryLayerCollection} imageryLayerCollection
188
199
  */
189
- static initialize(tile, terrainProvider, imageryLayerCollection) {
190
- let surfaceTile = tile.data;
191
- if (!defined(surfaceTile)) {
192
- surfaceTile = tile.data = new GlobeSurfaceTile();
200
+ static initialize(
201
+ tile,
202
+ terrainProvider,
203
+ vectorProvider,
204
+ imageryLayerCollection,
205
+ ) {
206
+ if (!defined(tile.data)) {
207
+ tile.data = new GlobeSurfaceTile();
193
208
  }
194
209
 
195
210
  if (tile.state === QuadtreeTileLoadState.START) {
196
- prepareNewTile(tile, terrainProvider, imageryLayerCollection);
211
+ prepareNewTile(
212
+ tile,
213
+ terrainProvider,
214
+ vectorProvider,
215
+ imageryLayerCollection,
216
+ );
197
217
  tile.state = QuadtreeTileLoadState.LOADING;
198
218
  }
199
219
  }
200
220
 
201
221
  /**
202
- * @param {*} tile
222
+ * @param {QuadtreeTile} tile
203
223
  * @param {FrameState} frameState
204
224
  * @param {TerrainProvider} terrainProvider
225
+ * @param {VectorProvider} vectorProvider
205
226
  * @param {ImageryLayerCollection} imageryLayerCollection
206
- * @param {*} quadtree
227
+ * @param {QuadtreePrimitive} quadtree
207
228
  * @param {*} vertexArraysToDestroy
208
229
  * @param {*} terrainOnly
209
230
  */
@@ -211,12 +232,18 @@ class GlobeSurfaceTile {
211
232
  tile,
212
233
  frameState,
213
234
  terrainProvider,
235
+ vectorProvider,
214
236
  imageryLayerCollection,
215
237
  quadtree,
216
238
  vertexArraysToDestroy,
217
239
  terrainOnly,
218
240
  ) {
219
- GlobeSurfaceTile.initialize(tile, terrainProvider, imageryLayerCollection);
241
+ GlobeSurfaceTile.initialize(
242
+ tile,
243
+ terrainProvider,
244
+ vectorProvider,
245
+ imageryLayerCollection,
246
+ );
220
247
 
221
248
  const surfaceTile = tile.data;
222
249
 
@@ -225,6 +252,7 @@ class GlobeSurfaceTile {
225
252
  tile,
226
253
  frameState,
227
254
  terrainProvider,
255
+ vectorProvider,
228
256
  imageryLayerCollection,
229
257
  quadtree,
230
258
  vertexArraysToDestroy,
@@ -604,10 +632,16 @@ function toggleGeodeticSurfaceNormals(
604
632
  /**
605
633
  * @param {QuadtreeTile} tile
606
634
  * @param {TerrainProvider} terrainProvider
635
+ * @param {VectorProvider} vectorProvider
607
636
  * @param {ImageryLayerCollection} imageryLayerCollection
608
637
  * @ignore
609
638
  */
610
- function prepareNewTile(tile, terrainProvider, imageryLayerCollection) {
639
+ function prepareNewTile(
640
+ tile,
641
+ terrainProvider,
642
+ vectorProvider,
643
+ imageryLayerCollection,
644
+ ) {
611
645
  /** @type {boolean} */
612
646
  let available = terrainProvider.getTileDataAvailable(
613
647
  // @ts-expect-error Missing types.
@@ -630,8 +664,9 @@ function prepareNewTile(tile, terrainProvider, imageryLayerCollection) {
630
664
  }
631
665
  }
632
666
 
667
+ const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
668
+
633
669
  if (available === false) {
634
- const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
635
670
  // This tile is not available, so mark it failed so we start upsampling right away.
636
671
  surfaceTile.terrainState = TerrainState.FAILED;
637
672
  }
@@ -650,6 +685,7 @@ function prepareNewTile(tile, terrainProvider, imageryLayerCollection) {
650
685
  * @param {QuadtreeTile} tile
651
686
  * @param {FrameState} frameState
652
687
  * @param {TerrainProvider} terrainProvider
688
+ * @param {VectorProvider} vectorProvider
653
689
  * @param {ImageryLayerCollection} imageryLayerCollection
654
690
  * @param {QuadtreePrimitive} quadtree
655
691
  * @param {*} vertexArraysToDestroy
@@ -659,6 +695,7 @@ function processTerrainStateMachine(
659
695
  tile,
660
696
  frameState,
661
697
  terrainProvider,
698
+ vectorProvider,
662
699
  imageryLayerCollection,
663
700
  quadtree,
664
701
  vertexArraysToDestroy,
@@ -684,6 +721,7 @@ function processTerrainStateMachine(
684
721
  parent,
685
722
  frameState,
686
723
  terrainProvider,
724
+ vectorProvider,
687
725
  imageryLayerCollection,
688
726
  quadtree,
689
727
  vertexArraysToDestroy,
@@ -63,6 +63,7 @@ import TileSelectionResult from "./TileSelectionResult.js";
63
63
  /** @import TerrainMesh from "../Core/TerrainMesh.js"; */
64
64
  /** @import TerrainProvider from "../Core/TerrainProvider.js"; */
65
65
  /** @import TilingScheme from "../Core/TilingScheme.js"; */
66
+ /** @import VectorProvider, { VectorTileData } from "../Core/VectorProvider.js"; */
66
67
  /** @import { GlobeSurfaceShaderSetOptions } from "./GlobeSurfaceShaderSet.js"; */
67
68
 
68
69
  /**
@@ -77,6 +78,7 @@ class GlobeSurfaceTileProvider {
77
78
  * @param {TerrainProvider} options.terrainProvider The terrain provider that describes the surface geometry.
78
79
  * @param {ImageryLayerCollection} options.imageryLayers The collection of imagery layers describing the shading of the surface.
79
80
  * @param {GlobeSurfaceShaderSet} options.surfaceShaderSet The set of shaders used to render the surface.
81
+ * @param {VectorProvider} options.vectorProvider
80
82
  */
81
83
  constructor(options) {
82
84
  //>>includeStart('debug', pragmas.debug);
@@ -89,6 +91,8 @@ class GlobeSurfaceTileProvider {
89
91
  throw new DeveloperError("options.imageryLayers is required.");
90
92
  } else if (!defined(options.surfaceShaderSet)) {
91
93
  throw new DeveloperError("options.surfaceShaderSet is required.");
94
+ } else if (!defined(options.vectorProvider)) {
95
+ throw new DeveloperError("options.vectorProvider is required.");
92
96
  }
93
97
  //>>includeEnd('debug');
94
98
 
@@ -131,6 +135,7 @@ class GlobeSurfaceTileProvider {
131
135
 
132
136
  this._quadtree = undefined;
133
137
  this._terrainProvider = options.terrainProvider;
138
+ this._vectorProvider = options.vectorProvider;
134
139
  this._imageryLayers = options.imageryLayers;
135
140
  this._surfaceShaderSet = options.surfaceShaderSet;
136
141
 
@@ -311,6 +316,11 @@ class GlobeSurfaceTileProvider {
311
316
  }
312
317
  }
313
318
 
319
+ /** @type {VectorProvider} */
320
+ get vectorProvider() {
321
+ return this._vectorProvider;
322
+ }
323
+
314
324
  /**
315
325
  * The {@link ClippingPlaneCollection} used to selectively disable rendering.
316
326
  *
@@ -371,6 +381,35 @@ class GlobeSurfaceTileProvider {
371
381
  );
372
382
  }
373
383
 
384
+ // Record regions dirtied by changed collections, re-bake overlapping
385
+ // tiles, and build vector data for new surface tiles.
386
+ const vectorProvider = this._vectorProvider;
387
+ vectorProvider.update();
388
+ this._quadtree.forEachRenderedTile(
389
+ /** @param {QuadtreeTile} tile */
390
+ (tile) => {
391
+ const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
392
+
393
+ if (defined(surfaceTile.vectorData)) {
394
+ surfaceTile.vectorData = vectorProvider.updateTileData(
395
+ tile.x,
396
+ tile.y,
397
+ tile.level,
398
+ frameState.context,
399
+ surfaceTile.vectorData,
400
+ );
401
+ } else {
402
+ surfaceTile.vectorData = vectorProvider.requestTileData(
403
+ tile.x,
404
+ tile.y,
405
+ tile.level,
406
+ frameState.context,
407
+ );
408
+ }
409
+ },
410
+ );
411
+ vectorProvider.makeClean();
412
+
374
413
  // Add credits for terrain and imagery providers.
375
414
  updateCredits(this, frameState);
376
415
 
@@ -609,6 +648,7 @@ class GlobeSurfaceTileProvider {
609
648
  tile,
610
649
  frameState,
611
650
  this.terrainProvider,
651
+ this.vectorProvider,
612
652
  this._imageryLayers,
613
653
  this.quadtree,
614
654
  this._vertexArraysToDestroy,
@@ -635,6 +675,7 @@ class GlobeSurfaceTileProvider {
635
675
  tile,
636
676
  frameState,
637
677
  this.terrainProvider,
678
+ this.vectorProvider,
638
679
  this._imageryLayers,
639
680
  this.quadtree,
640
681
  this._vertexArraysToDestroy,
@@ -1915,6 +1956,52 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
1915
1956
  u_vertexShadowDarkness: function () {
1916
1957
  return this.properties.vertexShadowDarkness;
1917
1958
  },
1959
+ u_vectorSegmentTexture: function () {
1960
+ return (
1961
+ this.properties.vectorSegmentTexture ??
1962
+ frameState.context.defaultTexture
1963
+ );
1964
+ },
1965
+ u_vectorWidthTexture: function () {
1966
+ return (
1967
+ this.properties.vectorWidthTexture ?? frameState.context.defaultTexture
1968
+ );
1969
+ },
1970
+ u_vectorColorTexture: function () {
1971
+ return (
1972
+ this.properties.vectorColorTexture ?? frameState.context.defaultTexture
1973
+ );
1974
+ },
1975
+ u_vectorSegmentPrimitiveIndicesTexture: function () {
1976
+ return (
1977
+ this.properties.vectorSegmentPrimitiveIndicesTexture ??
1978
+ frameState.context.defaultTexture
1979
+ );
1980
+ },
1981
+ u_vectorGridCellIndicesTexture: function () {
1982
+ return (
1983
+ this.properties.vectorGridCellIndicesTexture ??
1984
+ frameState.context.defaultTexture
1985
+ );
1986
+ },
1987
+ u_vectorPolygonEdgeTexture: function () {
1988
+ return (
1989
+ this.properties.vectorPolygonEdgeTexture ??
1990
+ frameState.context.defaultTexture
1991
+ );
1992
+ },
1993
+ u_vectorPolygonEdgePrimitiveIndicesTexture: function () {
1994
+ return (
1995
+ this.properties.vectorPolygonEdgePrimitiveIndicesTexture ??
1996
+ frameState.context.defaultTexture
1997
+ );
1998
+ },
1999
+ u_vectorPolygonGridCellIndicesTexture: function () {
2000
+ return (
2001
+ this.properties.vectorPolygonGridCellIndicesTexture ??
2002
+ frameState.context.defaultTexture
2003
+ );
2004
+ },
1918
2005
 
1919
2006
  // make a separate object so that changes to the properties are seen on
1920
2007
  // derived commands that combine another uniform map with this one.
@@ -1977,6 +2064,15 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
1977
2064
  undergroundColorAlphaByDistance: new Cartesian4(),
1978
2065
  lambertDiffuseMultiplier: 0.0,
1979
2066
  vertexShadowDarkness: 0.0,
2067
+
2068
+ vectorSegmentTexture: undefined,
2069
+ vectorWidthTexture: undefined,
2070
+ vectorColorTexture: undefined,
2071
+ vectorSegmentPrimitiveIndicesTexture: undefined,
2072
+ vectorGridCellIndicesTexture: undefined,
2073
+ vectorPolygonEdgeTexture: undefined,
2074
+ vectorPolygonEdgePrimitiveIndicesTexture: undefined,
2075
+ vectorPolygonGridCellIndicesTexture: undefined,
1980
2076
  },
1981
2077
  };
1982
2078
 
@@ -2916,10 +3012,32 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2916
3012
  uniformMapProperties.clippingPlanesEdgeWidth = clippingPlanes.edgeWidth;
2917
3013
  }
2918
3014
 
3015
+ // update vector collections clamped to terrain
3016
+ const vectorData = surfaceTile.vectorData;
3017
+ if (defined(vectorData)) {
3018
+ uniformMapProperties.vectorSegmentTexture =
3019
+ vectorData.polylineSegmentTexture;
3020
+ uniformMapProperties.vectorWidthTexture = vectorData.widthTexture;
3021
+ uniformMapProperties.vectorColorTexture = vectorData.colorTexture;
3022
+ uniformMapProperties.vectorSegmentPrimitiveIndicesTexture =
3023
+ vectorData.polylineSegmentPrimitiveIndicesTexture;
3024
+ uniformMapProperties.vectorGridCellIndicesTexture =
3025
+ vectorData.polylineGridCellIndicesTexture;
3026
+ uniformMapProperties.vectorPolygonEdgeTexture =
3027
+ vectorData.polygonEdgeTexture;
3028
+ uniformMapProperties.vectorPolygonEdgePrimitiveIndicesTexture =
3029
+ vectorData.polygonEdgePrimitiveIndicesTexture;
3030
+ uniformMapProperties.vectorPolygonGridCellIndicesTexture =
3031
+ vectorData.polygonGridCellIndicesTexture;
3032
+ }
3033
+
2919
3034
  // update clipping polygons
2920
3035
  const clippingPolygons = tileProvider._clippingPolygons;
2921
3036
  const clippingPolygonsEnabled =
2922
- defined(clippingPolygons) && clippingPolygons.enabled && tile.isClipped;
3037
+ defined(clippingPolygons) &&
3038
+ clippingPolygons.enabled &&
3039
+ clippingPolygons.length > 0 &&
3040
+ tile.isClipped;
2923
3041
 
2924
3042
  surfaceShaderSetOptions.numberOfDayTextures = numberOfDayTextures;
2925
3043
  surfaceShaderSetOptions.applyBrightness = applyBrightness;
@@ -2969,7 +3087,7 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2969
3087
  }
2970
3088
  }
2971
3089
 
2972
- let boundingVolume = command.boundingVolume;
3090
+ const boundingVolume = command.boundingVolume;
2973
3091
  const orientedBoundingBox = command.orientedBoundingBox;
2974
3092
 
2975
3093
  if (frameState.mode !== SceneMode.SCENE3D) {
@@ -2988,7 +3106,7 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2988
3106
  );
2989
3107
 
2990
3108
  if (frameState.mode === SceneMode.MORPHING) {
2991
- boundingVolume = BoundingSphere.union(
3109
+ BoundingSphere.union(
2992
3110
  // @ts-expect-error Missing types.
2993
3111
  tileBoundingRegion.boundingSphere,
2994
3112
  boundingVolume,
@@ -61,6 +61,7 @@ const {
61
61
  Specular,
62
62
  Anisotropy,
63
63
  Clearcoat,
64
+ PlanarFill,
64
65
  LineStyle,
65
66
  Material,
66
67
  Vector,
@@ -1787,6 +1788,23 @@ function loadClearcoat(loader, clearcoatInfo, frameState) {
1787
1788
  return clearcoat;
1788
1789
  }
1789
1790
 
1791
+ /**
1792
+ * Load properties for the BENTLEY_materials_planar_fill extension.
1793
+ *
1794
+ * Note: The wireframeFill property is loaded but is currently a NO-OP in the
1795
+ * rendering pipeline. CesiumJS does not yet have a proper wireframe rendering
1796
+ * mode, so this value is stored for completeness but has no effect on rendering.
1797
+ * See https://github.com/CesiumGS/cesium/issues/13620 and
1798
+ * MaterialPipelineStage.js for more details.
1799
+ *
1800
+ * @param {object} planarFillInfo The contents of the BENTLEY_materials_planar_fill extension in the parsed glTF JSON
1801
+ * @returns {ModelComponents.PlanarFill}
1802
+ * @private
1803
+ */
1804
+ function loadPlanarFill(planarFillInfo) {
1805
+ return new PlanarFill(planarFillInfo);
1806
+ }
1807
+
1790
1808
  function loadLineStyle(lineStyleInfo) {
1791
1809
  if (!defined(lineStyleInfo)) {
1792
1810
  return undefined;
@@ -1833,6 +1851,7 @@ function loadMaterial(loader, gltfMaterial, frameState) {
1833
1851
  const pbrAnisotropy = extensions.KHR_materials_anisotropy;
1834
1852
  const pbrClearcoat = extensions.KHR_materials_clearcoat;
1835
1853
  const pbrMetallicRoughness = gltfMaterial.pbrMetallicRoughness;
1854
+ const planarFill = extensions.BENTLEY_materials_planar_fill;
1836
1855
 
1837
1856
  material.unlit = defined(extensions.KHR_materials_unlit);
1838
1857
 
@@ -1889,6 +1908,11 @@ function loadMaterial(loader, gltfMaterial, frameState) {
1889
1908
  material.alphaCutoff = gltfMaterial.alphaCutoff;
1890
1909
  material.doubleSided = gltfMaterial.doubleSided;
1891
1910
 
1911
+ // BENTLEY_materials_planar_fill extension
1912
+ if (defined(planarFill)) {
1913
+ material.planarFill = loadPlanarFill(planarFill);
1914
+ }
1915
+
1892
1916
  // BENTLEY_materials_point_style extension
1893
1917
  const pointStyleExtension = extensions.BENTLEY_materials_point_style;
1894
1918
  if (defined(pointStyleExtension) && defined(pointStyleExtension.diameter)) {
@@ -2156,7 +2180,7 @@ function loadEdgeVisibilityLineStrings(
2156
2180
  throw new RuntimeError("Edge visibility line string accessor not found!");
2157
2181
  }
2158
2182
 
2159
- const indices = loadAccessor(loader, accessor);
2183
+ const indices = loadAccessorTypedArray(loader, accessor);
2160
2184
  const restartIndex = getLineStringPrimitiveRestartValue(
2161
2185
  accessor.componentType,
2162
2186
  );
@@ -2188,7 +2212,10 @@ function loadEdgeVisibility(loader, edgeVisibilityExtension) {
2188
2212
  if (!defined(visibilityAccessor)) {
2189
2213
  throw new RuntimeError("Edge visibility accessor not found!");
2190
2214
  }
2191
- edgeVisibility.visibility = loadAccessor(loader, visibilityAccessor);
2215
+ edgeVisibility.visibility = loadAccessorTypedArray(
2216
+ loader,
2217
+ visibilityAccessor,
2218
+ );
2192
2219
  }
2193
2220
 
2194
2221
  edgeVisibility.materialColor = getEdgeVisibilityMaterialColor(
@@ -2200,7 +2227,9 @@ function loadEdgeVisibility(loader, edgeVisibilityExtension) {
2200
2227
  const silhouetteNormalsAccessor =
2201
2228
  loader.gltfJson.accessors[edgeVisibilityExtension.silhouetteNormals];
2202
2229
  if (defined(silhouetteNormalsAccessor)) {
2203
- edgeVisibility.silhouetteNormals = loadAccessor(
2230
+ // Packed typed array (x0,y0,z0, x1,y1,z1, ...), not an array of
2231
+ // Cartesian3s. Avoids a large JS heap cost for edge-heavy tiles.
2232
+ edgeVisibility.silhouetteNormals = loadAccessorTypedArray(
2204
2233
  loader,
2205
2234
  silhouetteNormalsAccessor,
2206
2235
  );
@@ -267,7 +267,7 @@ async function loadResources(loader) {
267
267
  try {
268
268
  const bufferViewLoader = resourceCache.getBufferViewLoader({
269
269
  gltf: loader._gltf,
270
- bufferViewId: 0,
270
+ bufferViewId: loader._spz.bufferView,
271
271
  gltfResource: loader._gltfResource,
272
272
  baseResource: loader._baseResource,
273
273
  });
@@ -29,6 +29,7 @@ class GltfVertexBufferLoader extends ResourceLoader {
29
29
  * @param {number} [options.bufferViewId] The bufferView ID corresponding to the vertex buffer.
30
30
  * @param {object} [options.primitive] The primitive containing the Draco extension.
31
31
  * @param {object} [options.draco] The Draco extension object.
32
+ * @param {object} [options.spz] The SPZ extension object.
32
33
  * @param {string} [options.attributeSemantic] The attribute semantic, e.g. POSITION or NORMAL.
33
34
  * @param {number} [options.accessorId] The accessor id.
34
35
  * @param {string} [options.cacheKey] The cache key of the resource.
@@ -36,7 +37,7 @@ class GltfVertexBufferLoader extends ResourceLoader {
36
37
  * @param {boolean} [options.loadBuffer=false] Load vertex buffer as a GPU vertex buffer.
37
38
  * @param {boolean} [options.loadTypedArray=false] Load vertex buffer as a typed array.
38
39
  *
39
- * @exception {DeveloperError} One of options.bufferViewId and options.draco must be defined.
40
+ * @exception {DeveloperError} Exactly one vertex buffer source must be effective: options.bufferViewId, options.spz, or options.draco for options.attributeSemantic.
40
41
  * @exception {DeveloperError} When options.draco is defined options.attributeSemantic must also be defined.
41
42
  * @exception {DeveloperError} When options.draco is defined options.accessorId must also be defined.
42
43
  */
@@ -76,9 +77,11 @@ class GltfVertexBufferLoader extends ResourceLoader {
76
77
  const hasAttributeSemantic = defined(attributeSemantic);
77
78
  const hasAccessorId = defined(accessorId);
78
79
  const hasSpz = defined(spz);
79
- if (hasBufferViewId === (hasDraco !== hasSpz)) {
80
+ const sourceCount =
81
+ Number(hasBufferViewId) + Number(hasDraco) + Number(hasSpz);
82
+ if (sourceCount !== 1) {
80
83
  throw new DeveloperError(
81
- "One of options.bufferViewId, options.draco, or options.spz must be defined.",
84
+ "Exactly one vertex buffer source must be effective: options.bufferViewId, options.spz, or options.draco for options.attributeSemantic.",
82
85
  );
83
86
  }
84
87
 
@@ -408,7 +408,7 @@ I3SDataProvider.prototype.updateForPass = function (frameState, passState) {
408
408
  function buildLayerUrl(provider, layerId) {
409
409
  const dataProviderUrl = provider.resource.getUrlComponent();
410
410
 
411
- let layerUrl = "";
411
+ let layerUrl;
412
412
  if (dataProviderUrl.match(/layers\/\d/)) {
413
413
  layerUrl = `${dataProviderUrl}`.replace(/\/+$/, "");
414
414
  } else {