@cesium/engine 26.0.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 (471) hide show
  1. package/Build/ThirdParty/Workers/zip-web-worker.js +586 -480
  2. package/Build/Workers/{chunk-7J2HKPRH.js → chunk-27FWRTJI.js} +9 -9
  3. package/Build/Workers/{chunk-EF2QYXGA.js → chunk-2EFYUSUY.js} +14 -14
  4. package/Build/Workers/chunk-2H5264K7.js +1284 -0
  5. package/Build/Workers/{chunk-DOBXCNC3.js → chunk-2H73KDBM.js} +13 -13
  6. package/Build/Workers/chunk-2RGJPWQX.js +1284 -0
  7. package/Build/Workers/chunk-2Z4ZLVOD.js +352 -0
  8. package/Build/Workers/{chunk-F6QDY6HU.js → chunk-2ZKH2QZB.js} +13 -13
  9. package/Build/Workers/chunk-36NI5E6W.js +3820 -0
  10. package/Build/Workers/{chunk-ZK3CF7ZD.js → chunk-37SW7SYS.js} +12 -12
  11. package/Build/Workers/chunk-3GHVJ3SO.js +455 -0
  12. package/Build/Workers/chunk-3LB4UVPU.js +387 -0
  13. package/Build/Workers/chunk-3PONLKEL.js +778 -0
  14. package/Build/Workers/{chunk-Y57HREW5.js → chunk-3PSS3T43.js} +4 -4
  15. package/Build/Workers/chunk-3QR662HH.js +3820 -0
  16. package/Build/Workers/{chunk-QN67VG36.js → chunk-3SX2WYSO.js} +6 -6
  17. package/Build/Workers/{chunk-G7PXZRVF.js → chunk-3UDN6LYX.js} +7 -7
  18. package/Build/Workers/chunk-47MCBSXI.js +9237 -0
  19. package/Build/Workers/{chunk-KKOSKAZB.js → chunk-4E626OCE.js} +17 -17
  20. package/Build/Workers/chunk-4NW2MJKH.js +455 -0
  21. package/Build/Workers/{chunk-DBOEKL43.js → chunk-52YK5BSN.js} +7 -7
  22. package/Build/Workers/{chunk-KFSTQKNM.js → chunk-5LSOO2KD.js} +7 -7
  23. package/Build/Workers/chunk-5RNAQZK6.js +9234 -0
  24. package/Build/Workers/chunk-5YPQBFRD.js +519 -0
  25. package/Build/Workers/{chunk-S4MCOY6I.js → chunk-6FHT43QR.js} +5 -5
  26. package/Build/Workers/chunk-6FZDPMTO.js +455 -0
  27. package/Build/Workers/{chunk-VQYETPWC.js → chunk-6HK6IXK2.js} +4 -4
  28. package/Build/Workers/chunk-6R5X2GUA.js +1284 -0
  29. package/Build/Workers/{chunk-AYKR4VBR.js → chunk-6YR6JBMY.js} +2 -2
  30. package/Build/Workers/chunk-76FDC45O.js +511 -0
  31. package/Build/Workers/chunk-7A2OGDHT.js +305 -0
  32. package/Build/Workers/chunk-7CGEQUM2.js +305 -0
  33. package/Build/Workers/{chunk-54I6Y66F.js → chunk-7D2HZKH7.js} +6 -6
  34. package/Build/Workers/{chunk-3VFEWOBI.js → chunk-7I325HV6.js} +7 -7
  35. package/Build/Workers/{chunk-4MGMYHOO.js → chunk-7KVKHY7O.js} +6 -6
  36. package/Build/Workers/chunk-7MM3N2VE.js +1067 -0
  37. package/Build/Workers/chunk-7TKLTCZW.js +219 -0
  38. package/Build/Workers/chunk-7UUKBDH6.js +1054 -0
  39. package/Build/Workers/chunk-7W6DUHAB.js +693 -0
  40. package/Build/Workers/{chunk-DDWSZVMY.js → chunk-7XM5JK5F.js} +5 -5
  41. package/Build/Workers/chunk-7YG3ND3P.js +454 -0
  42. package/Build/Workers/{chunk-IRBKFCEJ.js → chunk-A3O6EDBK.js} +2 -2
  43. package/Build/Workers/chunk-A62YI6S6.js +305 -0
  44. package/Build/Workers/{chunk-V7VQKN6N.js → chunk-A6X24AZI.js} +5 -5
  45. package/Build/Workers/chunk-A7TTWVTF.js +2719 -0
  46. package/Build/Workers/chunk-ACTVJHSP.js +519 -0
  47. package/Build/Workers/chunk-ADX3CBKD.js +9234 -0
  48. package/Build/Workers/{chunk-52JDLOEM.js → chunk-AF7DTMJ7.js} +14 -14
  49. package/Build/Workers/{chunk-ZP7JMQV4.js → chunk-AHWAZRBV.js} +6 -2
  50. package/Build/Workers/chunk-AJSFRY4U.js +1344 -0
  51. package/Build/Workers/{chunk-EBSIOBXY.js → chunk-ARZICEEP.js} +8 -8
  52. package/Build/Workers/chunk-B3QHNA4A.js +147 -0
  53. package/Build/Workers/{chunk-YLY7NKAB.js → chunk-B4CQSLZJ.js} +4 -4
  54. package/Build/Workers/chunk-BKPQFCXH.js +511 -0
  55. package/Build/Workers/{chunk-O3EA5HS7.js → chunk-BSPCI2LO.js} +10 -10
  56. package/Build/Workers/chunk-BUJWSX5S.js +301 -0
  57. package/Build/Workers/{chunk-J6BWOHUF.js → chunk-C7JQVRLM.js} +3 -3
  58. package/Build/Workers/chunk-C7QDUNI3.js +138 -0
  59. package/Build/Workers/{chunk-KSSWJIZW.js → chunk-CDJDJ5LK.js} +2 -2
  60. package/Build/Workers/chunk-CEEZE3YZ.js +476 -0
  61. package/Build/Workers/chunk-CIV5DJOQ.js +778 -0
  62. package/Build/Workers/{chunk-INUEEEQA.js → chunk-CLCTQVVL.js} +8 -8
  63. package/Build/Workers/{chunk-C6J67V5A.js → chunk-CQNFIAZU.js} +1 -1
  64. package/Build/Workers/chunk-CRCGE4J4.js +9237 -0
  65. package/Build/Workers/{chunk-SMQZZOW6.js → chunk-CUTRKXUQ.js} +10 -10
  66. package/Build/Workers/{chunk-Q3PY526V.js → chunk-D6AY775A.js} +6 -6
  67. package/Build/Workers/chunk-DBD5WWG2.js +959 -0
  68. package/Build/Workers/{chunk-E7VQ76KE.js → chunk-DIGUUD6G.js} +6 -6
  69. package/Build/Workers/{chunk-P3CK7MCY.js → chunk-DSGLDRTI.js} +4 -4
  70. package/Build/Workers/chunk-DZBQUULR.js +138 -0
  71. package/Build/Workers/chunk-DZUFEE4L.js +140 -0
  72. package/Build/Workers/chunk-E2NKV5YT.js +3820 -0
  73. package/Build/Workers/{chunk-424RNO3D.js → chunk-E7NZJOK7.js} +196 -22
  74. package/Build/Workers/{chunk-UOOIQ3KX.js → chunk-EB3Y5P3A.js} +12 -12
  75. package/Build/Workers/{chunk-ACXQXN46.js → chunk-EHTS2YPT.js} +16 -16
  76. package/Build/Workers/{chunk-EPYXRCDB.js → chunk-ELE6SC2C.js} +12 -12
  77. package/Build/Workers/{chunk-VWV2IJRB.js → chunk-ENNFMWDW.js} +11 -11
  78. package/Build/Workers/chunk-EOWDZN5S.js +288 -0
  79. package/Build/Workers/chunk-ERKUET22.js +3201 -0
  80. package/Build/Workers/chunk-EZGQPOIG.js +162 -0
  81. package/Build/Workers/chunk-F2IMBMZY.js +241 -0
  82. package/Build/Workers/chunk-F4CSNRZO.js +219 -0
  83. package/Build/Workers/chunk-FBP4DUQJ.js +693 -0
  84. package/Build/Workers/{chunk-FRQZECAO.js → chunk-FCP2QY4G.js} +5 -5
  85. package/Build/Workers/{chunk-ZZ46LWL6.js → chunk-FDK4K5IA.js} +1 -1
  86. package/Build/Workers/{chunk-C6KNZ7T4.js → chunk-FGQFQHN5.js} +17 -17
  87. package/Build/Workers/chunk-FJWZMGOQ.js +1992 -0
  88. package/Build/Workers/{chunk-Y5BF6AFU.js → chunk-FQ42MT7M.js} +2 -2
  89. package/Build/Workers/chunk-FU4BGABC.js +398 -0
  90. package/Build/Workers/chunk-FX3VEAIU.js +2719 -0
  91. package/Build/Workers/chunk-GGNWQWSB.js +301 -0
  92. package/Build/Workers/chunk-GHXVQVUM.js +1344 -0
  93. package/Build/Workers/{chunk-CZEYZU4N.js → chunk-GNKXEN4C.js} +10 -10
  94. package/Build/Workers/{chunk-MYP774IS.js → chunk-GSWMAFTE.js} +8 -8
  95. package/Build/Workers/chunk-GVA7XQI2.js +368 -0
  96. package/Build/Workers/chunk-GXDHRC4J.js +1344 -0
  97. package/Build/Workers/chunk-GXWQZBAI.js +58 -0
  98. package/Build/Workers/chunk-GYSYP6PC.js +1067 -0
  99. package/Build/Workers/chunk-H2WCFXLP.js +241 -0
  100. package/Build/Workers/chunk-HDL4HOXZ.js +778 -0
  101. package/Build/Workers/chunk-HHV3MCGV.js +162 -0
  102. package/Build/Workers/chunk-HLW2ZRVK.js +368 -0
  103. package/Build/Workers/chunk-HS6AD4P2.js +398 -0
  104. package/Build/Workers/chunk-HT6FASOT.js +973 -0
  105. package/Build/Workers/chunk-I74ZH5LK.js +959 -0
  106. package/Build/Workers/{chunk-7WM2PX4V.js → chunk-IDVHUDZT.js} +5 -5
  107. package/Build/Workers/chunk-IGAZBTFZ.js +3201 -0
  108. package/Build/Workers/chunk-IJZJMIUY.js +789 -0
  109. package/Build/Workers/chunk-ILME5BXA.js +301 -0
  110. package/Build/Workers/chunk-IMBVP57H.js +44 -0
  111. package/Build/Workers/chunk-IOO7Z2AV.js +57 -0
  112. package/Build/Workers/chunk-IUIFLOYO.js +44 -0
  113. package/Build/Workers/chunk-J73T2VOY.js +171 -0
  114. package/Build/Workers/chunk-JALGQYDY.js +288 -0
  115. package/Build/Workers/chunk-JKXV6PG5.js +56 -0
  116. package/Build/Workers/chunk-JW6OZT4R.js +288 -0
  117. package/Build/Workers/{chunk-CXOYE2WM.js → chunk-JXYLJCTC.js} +5 -5
  118. package/Build/Workers/{chunk-CFQP6LYM.js → chunk-K27QOAW6.js} +4 -4
  119. package/Build/Workers/chunk-KGXSYGBG.js +387 -0
  120. package/Build/Workers/chunk-KMV25A63.js +789 -0
  121. package/Build/Workers/chunk-KP5QD7WU.js +693 -0
  122. package/Build/Workers/chunk-KZWFWJML.js +2719 -0
  123. package/Build/Workers/chunk-LCXRRALY.js +387 -0
  124. package/Build/Workers/chunk-LD64RPYV.js +368 -0
  125. package/Build/Workers/{chunk-U3ZA64U7.js → chunk-LDRQSYBN.js} +2 -2
  126. package/Build/Workers/chunk-LGNDTZVX.js +97 -0
  127. package/Build/Workers/chunk-LNSQVXFH.js +1800 -0
  128. package/Build/Workers/chunk-M4JZ6TSZ.js +959 -0
  129. package/Build/Workers/chunk-M6QKXVAU.js +1054 -0
  130. package/Build/Workers/chunk-MAAHFYPC.js +198 -0
  131. package/Build/Workers/chunk-MCJDRDJQ.js +102 -0
  132. package/Build/Workers/chunk-MEENMEAH.js +198 -0
  133. package/Build/Workers/{chunk-TKKIREQ6.js → chunk-N7CCOFLX.js} +1 -1
  134. package/Build/Workers/chunk-NAWU5RF4.js +162 -0
  135. package/Build/Workers/{chunk-M3B5JKSM.js → chunk-NCL22ZUX.js} +1 -1
  136. package/Build/Workers/chunk-NEFDMMLY.js +241 -0
  137. package/Build/Workers/{chunk-UA25D5MX.js → chunk-NIWITKQK.js} +10 -10
  138. package/Build/Workers/chunk-NJVBJG63.js +124 -0
  139. package/Build/Workers/chunk-NLLCQBX3.js +73 -0
  140. package/Build/Workers/chunk-NSKZ6SBK.js +1483 -0
  141. package/Build/Workers/chunk-NXGQBQWE.js +837 -0
  142. package/Build/Workers/chunk-O3DKEX7Q.js +352 -0
  143. package/Build/Workers/chunk-O3XFXGPZ.js +476 -0
  144. package/Build/Workers/chunk-OA6MYL2C.js +837 -0
  145. package/Build/Workers/chunk-OBEU25PI.js +1067 -0
  146. package/Build/Workers/chunk-OHP4ELS7.js +198 -0
  147. package/Build/Workers/chunk-OZGPS7FB.js +138 -0
  148. package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
  149. package/Build/Workers/chunk-PD4GK4EM.js +57 -0
  150. package/Build/Workers/chunk-PEDU33QG.js +2342 -0
  151. package/Build/Workers/chunk-PRWUMCXF.js +682 -0
  152. package/Build/Workers/chunk-PVTSNNVI.js +288 -0
  153. package/Build/Workers/chunk-QFSSCLLZ.js +973 -0
  154. package/Build/Workers/chunk-QHPZH22L.js +241 -0
  155. package/Build/Workers/chunk-QIZDWZK6.js +301 -0
  156. package/Build/Workers/chunk-QV6DG2YX.js +1483 -0
  157. package/Build/Workers/chunk-QVLAFFJY.js +56 -0
  158. package/Build/Workers/{chunk-6YEE6JDR.js → chunk-R4FPNAZ2.js} +6 -6
  159. package/Build/Workers/chunk-R4K7EHOU.js +171 -0
  160. package/Build/Workers/chunk-R7JGHDD6.js +789 -0
  161. package/Build/Workers/chunk-RASQEYD4.js +1483 -0
  162. package/Build/Workers/chunk-RG4F5R57.js +454 -0
  163. package/Build/Workers/chunk-RW6ITX7Q.js +3820 -0
  164. package/Build/Workers/chunk-RYSQVJR6.js +398 -0
  165. package/Build/Workers/chunk-S6RJU5NM.js +1054 -0
  166. package/Build/Workers/chunk-SA2A2AN5.js +2342 -0
  167. package/Build/Workers/chunk-SDFHDNS4.js +147 -0
  168. package/Build/Workers/chunk-SF6K72D7.js +124 -0
  169. package/Build/Workers/chunk-SGRGNDOD.js +682 -0
  170. package/Build/Workers/{chunk-QRWGUWI6.js → chunk-SJYSIOEM.js} +11 -11
  171. package/Build/Workers/chunk-SM2CDCYF.js +198 -0
  172. package/Build/Workers/chunk-SMTGMFBL.js +97 -0
  173. package/Build/Workers/chunk-SS5ABQGY.js +102 -0
  174. package/Build/Workers/{chunk-IYOUHCZB.js → chunk-SXSP3JHS.js} +1 -1
  175. package/Build/Workers/chunk-T5QBPLE3.js +414 -0
  176. package/Build/Workers/chunk-TN35HP5B.js +1067 -0
  177. package/Build/Workers/chunk-TNWKJNUZ.js +454 -0
  178. package/Build/Workers/chunk-TOAF47AQ.js +102 -0
  179. package/Build/Workers/chunk-TQ4QCOXT.js +2719 -0
  180. package/Build/Workers/chunk-TSDSILQB.js +124 -0
  181. package/Build/Workers/chunk-TVZD72WJ.js +778 -0
  182. package/Build/Workers/chunk-U5LV3F3Z.js +1054 -0
  183. package/Build/Workers/chunk-UAZUP4I5.js +1992 -0
  184. package/Build/Workers/chunk-UEY73NRN.js +38 -0
  185. package/Build/Workers/chunk-UF46SZEZ.js +789 -0
  186. package/Build/Workers/chunk-UNRTMCET.js +398 -0
  187. package/Build/Workers/chunk-UTB7U3O6.js +1992 -0
  188. package/Build/Workers/chunk-UVO6COT2.js +352 -0
  189. package/Build/Workers/chunk-V46YGZE6.js +352 -0
  190. package/Build/Workers/chunk-VAL7DYNR.js +278 -0
  191. package/Build/Workers/chunk-VDGOCROW.js +57 -0
  192. package/Build/Workers/chunk-VFWSSBPT.js +511 -0
  193. package/Build/Workers/chunk-VVYMXI3I.js +1284 -0
  194. package/Build/Workers/chunk-VXWHPYQM.js +837 -0
  195. package/Build/Workers/chunk-VXYUBRSB.js +219 -0
  196. package/Build/Workers/chunk-VZLDLEWI.js +387 -0
  197. package/Build/Workers/{chunk-4S7IE3LB.js → chunk-W5OCKMPJ.js} +2 -2
  198. package/Build/Workers/chunk-WBSY7HDY.js +837 -0
  199. package/Build/Workers/chunk-WN3F4CVG.js +3201 -0
  200. package/Build/Workers/chunk-WPRUWXGV.js +693 -0
  201. package/Build/Workers/chunk-WTO2ERBP.js +414 -0
  202. package/Build/Workers/chunk-WVHMDVG4.js +959 -0
  203. package/Build/Workers/chunk-XCBZVTIV.js +280 -0
  204. package/Build/Workers/chunk-XDWCTQCZ.js +101 -0
  205. package/Build/Workers/chunk-XGA23TAX.js +73 -0
  206. package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
  207. package/Build/Workers/chunk-XLXSDIP5.js +973 -0
  208. package/Build/Workers/chunk-XQ3SKCMM.js +140 -0
  209. package/Build/Workers/chunk-XQH66YJC.js +147 -0
  210. package/Build/Workers/chunk-XTA7BXJG.js +682 -0
  211. package/Build/Workers/chunk-XTIDAFRS.js +476 -0
  212. package/Build/Workers/chunk-XUEDWBUD.js +682 -0
  213. package/Build/Workers/chunk-XYFLRH3H.js +124 -0
  214. package/Build/Workers/chunk-Y7JRTRTO.js +305 -0
  215. package/Build/Workers/chunk-Y7QSMDCJ.js +352 -0
  216. package/Build/Workers/chunk-YCB5TYTR.js +1483 -0
  217. package/Build/Workers/chunk-YEYOSTJX.js +219 -0
  218. package/Build/Workers/chunk-YGFVAGYF.js +630 -0
  219. package/Build/Workers/chunk-YIIACKQO.js +368 -0
  220. package/Build/Workers/chunk-YJGSP6PE.js +511 -0
  221. package/Build/Workers/{chunk-XZMBNNDX.js → chunk-YKU2Q3A2.js} +9 -9
  222. package/Build/Workers/chunk-Z4LR5EHE.js +454 -0
  223. package/Build/Workers/chunk-Z66EVE2A.js +44 -0
  224. package/Build/Workers/chunk-ZHIHHHTB.js +414 -0
  225. package/Build/Workers/chunk-ZMBHFYOX.js +1344 -0
  226. package/Build/Workers/chunk-ZNWHFSLE.js +171 -0
  227. package/Build/Workers/chunk-ZQLZG4IN.js +2342 -0
  228. package/Build/Workers/chunk-ZRTSMUZ2.js +414 -0
  229. package/Build/Workers/{chunk-MPZHGZU6.js → chunk-ZSGUV73H.js} +4 -4
  230. package/Build/Workers/chunk-ZZUVT5BM.js +476 -0
  231. package/Build/Workers/combineGeometry.js +24 -24
  232. package/Build/Workers/createBoxGeometry.js +18 -18
  233. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  234. package/Build/Workers/createCircleGeometry.js +26 -26
  235. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  236. package/Build/Workers/createCoplanarPolygonGeometry.js +35 -35
  237. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  238. package/Build/Workers/createCorridorGeometry.js +31 -33
  239. package/Build/Workers/createCorridorOutlineGeometry.js +29 -31
  240. package/Build/Workers/createCylinderGeometry.js +20 -20
  241. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  242. package/Build/Workers/createEllipseGeometry.js +26 -26
  243. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  244. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  245. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  246. package/Build/Workers/createFrustumGeometry.js +18 -18
  247. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  248. package/Build/Workers/createGeometry.js +24 -24
  249. package/Build/Workers/createGroundPolylineGeometry.js +24 -24
  250. package/Build/Workers/createPlaneGeometry.js +16 -16
  251. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  252. package/Build/Workers/createPolygonGeometry.js +34 -34
  253. package/Build/Workers/createPolygonOutlineGeometry.js +31 -31
  254. package/Build/Workers/createPolylineGeometry.js +26 -26
  255. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  256. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  257. package/Build/Workers/createRectangleGeometry.js +27 -27
  258. package/Build/Workers/createRectangleOutlineGeometry.js +21 -21
  259. package/Build/Workers/createSimplePolylineGeometry.js +24 -24
  260. package/Build/Workers/createSphereGeometry.js +19 -19
  261. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  262. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  263. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  264. package/Build/Workers/createVectorTileGeometries.js +24 -24
  265. package/Build/Workers/createVectorTilePoints.js +13 -13
  266. package/Build/Workers/createVectorTilePolygons.js +22 -22
  267. package/Build/Workers/createVectorTilePolylines.js +14 -14
  268. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  269. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  270. package/Build/Workers/createVerticesFromHeightmap.js +22 -22
  271. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  272. package/Build/Workers/createWallGeometry.js +24 -24
  273. package/Build/Workers/createWallOutlineGeometry.js +24 -24
  274. package/Build/Workers/decodeDraco.js +10 -10
  275. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +987 -2320
  276. package/Build/Workers/decodeI3S.js +10 -10
  277. package/Build/Workers/gaussianSplatSorter.js +4 -4
  278. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  279. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  280. package/Build/Workers/transcodeKTX2.js +6 -6
  281. package/Build/Workers/transferTypedArrayTest.js +1 -1
  282. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  283. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  284. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  285. package/Source/Core/BoundingRectangle.js +6 -8
  286. package/Source/Core/BoundingSphere.js +0 -3
  287. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  288. package/Source/Core/Color.js +1 -0
  289. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  290. package/Source/Core/CorridorGeometry.js +2 -4
  291. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  292. package/Source/Core/EarthOrientationParameters.js +2 -2
  293. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  294. package/Source/Core/EllipsoidGeodesic.js +3 -3
  295. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  296. package/Source/Core/GroundPolylineGeometry.js +2 -2
  297. package/Source/Core/Heap.js +1 -1
  298. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  299. package/Source/Core/InterpolationAlgorithm.js +58 -50
  300. package/Source/Core/Ion.js +1 -1
  301. package/Source/Core/JulianDate.js +1 -1
  302. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  303. package/Source/Core/LinearApproximation.js +69 -66
  304. package/Source/Core/Math.js +59 -0
  305. package/Source/Core/Matrix2.js +2 -2
  306. package/Source/Core/Matrix3.js +2 -2
  307. package/Source/Core/OrthographicFrustum.js +1 -1
  308. package/Source/Core/PerspectiveFrustum.js +1 -1
  309. package/Source/Core/PolygonGeometry.js +2 -2
  310. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  311. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  312. package/Source/Core/PolylineGeometry.js +1 -1
  313. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  314. package/Source/Core/Rectangle.js +7 -1
  315. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  316. package/Source/Core/SimplePolylineGeometry.js +1 -1
  317. package/Source/Core/TerrainEncoding.js +2 -2
  318. package/Source/Core/TerrainMesh.js +3 -3
  319. package/Source/Core/TerrainPicker.js +180 -168
  320. package/Source/Core/TimeIntervalCollection.js +1 -3
  321. package/Source/Core/Tipsify.js +1 -1
  322. package/Source/Core/Transforms.js +5 -1
  323. package/Source/Core/VectorPipeline.js +1117 -0
  324. package/Source/Core/VectorProvider.js +429 -0
  325. package/Source/Core/WallOutlineGeometry.js +1 -1
  326. package/Source/Core/getTimestamp.js +4 -2
  327. package/Source/Core/writeTextToCanvas.js +1 -0
  328. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  329. package/Source/DataSources/CzmlDataSource.js +14 -0
  330. package/Source/DataSources/DataSourceDisplay.js +1 -1
  331. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  332. package/Source/DataSources/GeometryVisualizer.js +1 -1
  333. package/Source/DataSources/KmlDataSource.js +529 -557
  334. package/Source/DataSources/PathGraphics.js +8 -1
  335. package/Source/DataSources/PathMode.js +27 -0
  336. package/Source/DataSources/PathVisualizer.js +298 -1
  337. package/Source/DataSources/PolylineVisualizer.js +1 -1
  338. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  339. package/Source/Renderer/AutomaticUniforms.js +23 -0
  340. package/Source/Renderer/Context.js +9 -3
  341. package/Source/Renderer/DrawCommand.js +22 -0
  342. package/Source/Renderer/Framebuffer.js +4 -0
  343. package/Source/Renderer/Pass.js +11 -10
  344. package/Source/Renderer/Texture.js +12 -1
  345. package/Source/Renderer/UniformState.js +7 -0
  346. package/Source/Renderer/VertexArray.js +1 -1
  347. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  348. package/Source/Scene/ArcGisMapService.js +1 -1
  349. package/Source/Scene/Billboard.js +2 -1
  350. package/Source/Scene/BillboardCollection.js +7 -3
  351. package/Source/Scene/BillboardTexture.js +5 -3
  352. package/Source/Scene/BufferPrimitiveCollection.js +27 -5
  353. package/Source/Scene/Camera.js +71 -5
  354. package/Source/Scene/Cesium3DTileOptimizations.js +4 -6
  355. package/Source/Scene/Cesium3DTileset.js +1 -1
  356. package/Source/Scene/ClippingPlaneCollection.js +4 -4
  357. package/Source/Scene/ClippingPolygon.js +2 -0
  358. package/Source/Scene/ClippingPolygonCollection.js +2 -2
  359. package/Source/Scene/Controllers/Controller.js +63 -0
  360. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  361. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  362. package/Source/Scene/Controllers/MouseButton.js +32 -0
  363. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  364. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  365. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  366. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  367. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  368. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  369. package/Source/Scene/DerivedCommand.js +98 -0
  370. package/Source/Scene/EdgeFramebuffer.js +1 -5
  371. package/Source/Scene/Expression.js +6 -8
  372. package/Source/Scene/FrameState.js +17 -0
  373. package/Source/Scene/Globe.js +20 -0
  374. package/Source/Scene/GlobeDepth.js +27 -1
  375. package/Source/Scene/GlobeSurfaceShaderSet.js +511 -409
  376. package/Source/Scene/GlobeSurfaceTile.js +575 -398
  377. package/Source/Scene/GlobeSurfaceTileProvider.js +1382 -1151
  378. package/Source/Scene/GltfBufferViewLoader.js +3 -3
  379. package/Source/Scene/GltfLoader.js +33 -3
  380. package/Source/Scene/GltfLoaderUtil.js +20 -4
  381. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +10 -0
  382. package/Source/Scene/GltfPipeline/removeUnusedElements.js +21 -11
  383. package/Source/Scene/GltfSpzLoader.js +1 -1
  384. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  385. package/Source/Scene/I3SDataProvider.js +1 -1
  386. package/Source/Scene/I3SLayer.js +1 -1
  387. package/Source/Scene/I3SNode.js +2 -2
  388. package/Source/Scene/ImageryLayer.js +2 -2
  389. package/Source/Scene/ImageryLayerCollection.js +190 -6
  390. package/Source/Scene/IonImageryProvider.js +1 -5
  391. package/Source/Scene/Label.js +4 -4
  392. package/Source/Scene/LabelCollection.js +1 -1
  393. package/Source/Scene/MVTDataProvider.js +2 -0
  394. package/Source/Scene/Material.js +1 -0
  395. package/Source/Scene/Model/B3dmLoader.js +1 -2
  396. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +10 -8
  397. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +4 -0
  398. package/Source/Scene/Model/I3dmLoader.js +1 -1
  399. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  400. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  401. package/Source/Scene/Model/Model.js +11 -10
  402. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  403. package/Source/Scene/Model/ModelDrawCommand.js +160 -16
  404. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  405. package/Source/Scene/Model/ModelSceneGraph.js +21 -0
  406. package/Source/Scene/Model/ModelUtility.js +1 -0
  407. package/Source/Scene/Model/PickingPipelineStage.js +29 -0
  408. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  409. package/Source/Scene/ModelComponents.js +71 -0
  410. package/Source/Scene/Picking.js +19 -3
  411. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  412. package/Source/Scene/PntsParser.js +1 -1
  413. package/Source/Scene/PolylineCollection.js +1 -1
  414. package/Source/Scene/PostProcessStage.js +4 -2
  415. package/Source/Scene/QuadtreePrimitive.js +3 -2
  416. package/Source/Scene/ResourceCache.js +7 -4
  417. package/Source/Scene/ResourceCacheKey.js +21 -18
  418. package/Source/Scene/Scene.js +203 -5
  419. package/Source/Scene/ScreenSpaceCameraController.js +1 -2
  420. package/Source/Scene/ShadowMap.js +9 -3
  421. package/Source/Scene/ShadowMapShader.js +50 -2
  422. package/Source/Scene/SnapFramebuffer.js +121 -0
  423. package/Source/Scene/Snapping.js +184 -0
  424. package/Source/Scene/TerrainFillMesh.js +3 -2
  425. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +1 -1
  426. package/Source/Scene/Vector3DTileContent.js +2 -3
  427. package/Source/Scene/VectorGltf3DTileContent.js +23 -3
  428. package/Source/Scene/View.js +10 -8
  429. package/Source/Scene/VoxelTraversal.js +1 -1
  430. package/Source/Scene/createElevationBandMaterial.js +1 -1
  431. package/Source/Scene/findMeshoptExtension.js +23 -0
  432. package/Source/Scene/renderBufferPointCollection.js +14 -10
  433. package/Source/Scene/renderBufferPolygonCollection.js +10 -15
  434. package/Source/Scene/renderBufferPolylineCollection.js +121 -194
  435. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  436. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  437. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  438. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  439. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  440. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  441. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  442. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  443. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  444. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  445. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  446. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  447. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  448. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  449. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  450. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  451. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  452. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  453. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
  454. package/Source/Shaders/GlobeFS.glsl +10 -5
  455. package/Source/Shaders/GlobeFS.js +9 -5
  456. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  457. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  458. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  459. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  460. package/Source/Shaders/Model/ModelFS.glsl +105 -0
  461. package/Source/Shaders/Model/ModelFS.js +105 -0
  462. package/Source/Shaders/VectorCommon.glsl +178 -0
  463. package/Source/Shaders/VectorCommon.js +75 -0
  464. package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
  465. package/Source/ThirdParty/zip-module.wasm +0 -0
  466. package/Source/Widget/CesiumWidget.js +30 -0
  467. package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  468. package/Source/Workers/incrementallyBuildTerrainPicker.js +2 -0
  469. package/index.d.ts +825 -260
  470. package/index.js +29 -10
  471. package/package.json +4 -4
@@ -3,8 +3,8 @@ import Frozen from "../Core/Frozen.js";
3
3
  import defined from "../Core/defined.js";
4
4
  import DeveloperError from "../Core/DeveloperError.js";
5
5
  import getAbsoluteUri from "../Core/getAbsoluteUri.js";
6
+ import findMeshoptExtension from "./findMeshoptExtension.js";
6
7
  import GltfLoaderUtil from "./GltfLoaderUtil.js";
7
- import hasExtension from "./hasExtension.js";
8
8
 
9
9
  /**
10
10
  * Compute cache keys for resources in {@link ResourceCache}.
@@ -22,8 +22,8 @@ function getExternalResourceCacheKey(resource) {
22
22
  function getBufferViewCacheKey(bufferView) {
23
23
  let { byteOffset, byteLength } = bufferView;
24
24
 
25
- if (hasExtension(bufferView, "EXT_meshopt_compression")) {
26
- const meshopt = bufferView.extensions.EXT_meshopt_compression;
25
+ const meshopt = findMeshoptExtension(bufferView);
26
+ if (defined(meshopt)) {
27
27
  byteOffset = meshopt.byteOffset ?? 0;
28
28
  byteLength = meshopt.byteLength;
29
29
  }
@@ -71,8 +71,8 @@ function getDracoCacheKey(gltf, draco, gltfResource, baseResource) {
71
71
  return `${bufferCacheKey}-range-${bufferViewCacheKey}`;
72
72
  }
73
73
 
74
- function getSpzCacheKey(gltf, primitive, gltfResource, baseResource) {
75
- const bufferViewId = 0;
74
+ function getSpzCacheKey(gltf, spz, gltfResource, baseResource) {
75
+ const bufferViewId = spz.bufferView;
76
76
  const bufferView = gltf.bufferViews[bufferViewId];
77
77
  const bufferId = bufferView.buffer;
78
78
  const buffer = gltf.buffers[bufferId];
@@ -247,8 +247,8 @@ ResourceCacheKey.getBufferViewCacheKey = function (options) {
247
247
  const bufferView = gltf.bufferViews[bufferViewId];
248
248
  let bufferId = bufferView.buffer;
249
249
  const buffer = gltf.buffers[bufferId];
250
- if (hasExtension(bufferView, "EXT_meshopt_compression")) {
251
- const meshopt = bufferView.extensions.EXT_meshopt_compression;
250
+ const meshopt = findMeshoptExtension(bufferView);
251
+ if (defined(meshopt)) {
252
252
  bufferId = meshopt.buffer;
253
253
  }
254
254
 
@@ -292,16 +292,16 @@ ResourceCacheKey.getDracoCacheKey = function (options) {
292
292
 
293
293
  ResourceCacheKey.getSpzCacheKey = function (options) {
294
294
  options = options ?? Frozen.EMPTY_OBJECT;
295
- const { gltf, primitive, gltfResource, baseResource } = options;
295
+ const { gltf, spz, gltfResource, baseResource } = options;
296
296
 
297
297
  //>>includeStart('debug', pragmas.debug);
298
298
  Check.typeOf.object("options.gltf", gltf);
299
- Check.typeOf.object("options.primitive", primitive);
299
+ Check.typeOf.object("options.spz", spz);
300
300
  Check.typeOf.object("options.gltfResource", gltfResource);
301
301
  Check.typeOf.object("options.baseResource", baseResource);
302
302
  //>>includeEnd('debug');
303
303
 
304
- return `spz:${getSpzCacheKey(gltf, primitive, gltfResource, baseResource)}`;
304
+ return `spz:${getSpzCacheKey(gltf, spz, gltfResource, baseResource)}`;
305
305
  };
306
306
  /**
307
307
  * Gets the vertex buffer cache key.
@@ -313,11 +313,12 @@ ResourceCacheKey.getSpzCacheKey = function (options) {
313
313
  * @param {FrameState} options.frameState The frame state.
314
314
  * @param {number} [options.bufferViewId] The bufferView ID corresponding to the vertex buffer.
315
315
  * @param {object} [options.draco] The Draco extension object.
316
+ * @param {object} [options.spz] The SPZ extension object.
316
317
  * @param {string} [options.attributeSemantic] The attribute semantic, e.g. POSITION or NORMAL.
317
318
  * @param {boolean} [options.dequantize=false] Determines whether or not the vertex buffer will be dequantized on the CPU.
318
319
  * @param {boolean} [options.loadBuffer=false] Load vertex buffer as a GPU vertex buffer.
319
320
  * @param {boolean} [options.loadTypedArray=false] Load vertex buffer as a typed array.
320
- * @exception {DeveloperError} One of options.bufferViewId and options.draco must be defined.
321
+ * @exception {DeveloperError} Exactly one vertex buffer source must be effective: options.bufferViewId, options.spz, or options.draco for options.attributeSemantic.
321
322
  * @exception {DeveloperError} When options.draco is defined options.attributeSemantic must also be defined.
322
323
  *
323
324
  * @returns {string} The vertex buffer cache key.
@@ -350,9 +351,11 @@ ResourceCacheKey.getVertexBufferCacheKey = function (options) {
350
351
  const hasAttributeSemantic = defined(attributeSemantic);
351
352
  const hasSpz = defined(spz);
352
353
 
353
- if (hasBufferViewId === (hasDraco !== hasSpz)) {
354
+ const sourceCount =
355
+ Number(hasBufferViewId) + Number(hasDraco) + Number(hasSpz);
356
+ if (sourceCount !== 1) {
354
357
  throw new DeveloperError(
355
- "One of options.bufferViewId and options.draco must be defined.",
358
+ "Exactly one vertex buffer source must be effective: options.bufferViewId, options.spz, or options.draco for options.attributeSemantic.",
356
359
  );
357
360
  }
358
361
 
@@ -388,6 +391,11 @@ ResourceCacheKey.getVertexBufferCacheKey = function (options) {
388
391
  cacheKeySuffix += "-typed-array";
389
392
  }
390
393
 
394
+ if (defined(spz)) {
395
+ const spzCacheKey = getSpzCacheKey(gltf, spz, gltfResource, baseResource);
396
+ return `vertex-buffer:${spzCacheKey}-spz-${attributeSemantic}${cacheKeySuffix}`;
397
+ }
398
+
391
399
  if (defined(draco)) {
392
400
  const dracoCacheKey = getDracoCacheKey(
393
401
  gltf,
@@ -398,11 +406,6 @@ ResourceCacheKey.getVertexBufferCacheKey = function (options) {
398
406
  return `vertex-buffer:${dracoCacheKey}-draco-${attributeSemantic}${cacheKeySuffix}`;
399
407
  }
400
408
 
401
- if (spz) {
402
- const spzCacheKey = getSpzCacheKey(gltf, spz, gltfResource, baseResource);
403
- return `vertex-buffer:${spzCacheKey}-spz-${attributeSemantic}${cacheKeySuffix}`;
404
- }
405
-
406
409
  const bufferView = gltf.bufferViews[bufferViewId];
407
410
  const bufferId = bufferView.buffer;
408
411
  const buffer = gltf.buffers[bufferId];
@@ -45,6 +45,7 @@ import BrdfLutGenerator from "./BrdfLutGenerator.js";
45
45
  import Camera from "./Camera.js";
46
46
  import Cesium3DTilePass from "./Cesium3DTilePass.js";
47
47
  import Cesium3DTilePassState from "./Cesium3DTilePassState.js";
48
+ import ControllerHost from "./Controllers/ControllerHost.js";
48
49
  import CreditDisplay from "./CreditDisplay.js";
49
50
  import DebugCameraPrimitive from "./DebugCameraPrimitive.js";
50
51
  import DepthPlane from "./DepthPlane.js";
@@ -69,6 +70,7 @@ import SceneTransitioner from "./SceneTransitioner.js";
69
70
  import ScreenSpaceCameraController from "./ScreenSpaceCameraController.js";
70
71
  import ShadowMap from "./ShadowMap.js";
71
72
  import SharedContext from "../Renderer/SharedContext.js";
73
+ import Snapping from "./Snapping.js";
72
74
  import SpecularEnvironmentCubeMap from "./SpecularEnvironmentCubeMap.js";
73
75
  import StencilConstants from "./StencilConstants.js";
74
76
  import SunLight from "./SunLight.js";
@@ -241,6 +243,8 @@ function Scene(options) {
241
243
  this._preRender = new Event();
242
244
  this._postRender = new Event();
243
245
 
246
+ this._controllerHost = new ControllerHost();
247
+
244
248
  this._minimumDisableDepthTestDistance = 0.0;
245
249
  this._debugInspector = new DebugInspector();
246
250
 
@@ -770,6 +774,15 @@ function Scene(options) {
770
774
  */
771
775
  this._enableEdgeVisibility = false;
772
776
 
777
+ /**
778
+ * Whether or not to enable the planar fill feature-ID pre-pass.
779
+ * Updated each frame from FrameState.planarFillRequested.
780
+ * @type {boolean}
781
+ * @default false
782
+ * @private
783
+ */
784
+ this._enablePlanarFillId = false;
785
+
773
786
  // Give frameState, camera, and screen space camera controller initial state before rendering
774
787
  updateFrameNumber(this, 0.0, JulianDate.now());
775
788
  this.updateFrameState();
@@ -1079,6 +1092,25 @@ Object.defineProperties(Scene.prototype, {
1079
1092
  },
1080
1093
  },
1081
1094
 
1095
+ /**
1096
+ * Collects an array of <code>Controller</code> objects that can be registered with the scene to handle input events, camera animations, and other interactions.
1097
+ * @see {@link Controller}
1098
+ * @type {ControllerHost}
1099
+ * @memberof Scene.prototype
1100
+ * @readonly
1101
+ * @example
1102
+ * scene.screenSpaceCameraController.enableInputs = false;
1103
+ * scene.screenSpaceCameraController.enableCollisionDetection = false;
1104
+ *
1105
+ * const tiltOrbitController = new Cesium.ScreenSpaceTiltOrbitCameraController();
1106
+ * scene.controllerHost.registerController(tiltOrbitController, scene.canvas.parentNode);
1107
+ */
1108
+ controllerHost: {
1109
+ get: function () {
1110
+ return this._controllerHost;
1111
+ },
1112
+ },
1113
+
1082
1114
  /**
1083
1115
  * Gets the controller for camera input handling.
1084
1116
  * @memberof Scene.prototype
@@ -1227,6 +1259,17 @@ Object.defineProperties(Scene.prototype, {
1227
1259
  },
1228
1260
  },
1229
1261
 
1262
+ /**
1263
+ * @memberof Scene.prototype
1264
+ * @type {VectorProvider}
1265
+ * @ignore
1266
+ */
1267
+ vectorProvider: {
1268
+ get: function () {
1269
+ return this.globe?.vectorProvider;
1270
+ },
1271
+ },
1272
+
1230
1273
  /**
1231
1274
  * Gets the event that will be raised before the scene is updated or rendered. Subscribers to the event
1232
1275
  * receive the Scene instance as the first parameter and the current time as the second parameter.
@@ -1770,6 +1813,16 @@ function updateDerivedCommands(scene, command, shadowsDirty) {
1770
1813
  derivedCommands.picking,
1771
1814
  );
1772
1815
  }
1816
+ // Snap derived commands are only created on demand, during a snapping pass,
1817
+ // so applications that never call Scene.snap pay no shader-derivation cost.
1818
+ if (defined(command.snapId) && frameState.passes.snap) {
1819
+ derivedCommands.snapping = DerivedCommand.createSnapDerivedCommand(
1820
+ scene,
1821
+ command,
1822
+ context,
1823
+ derivedCommands.snapping,
1824
+ );
1825
+ }
1773
1826
  if (frameState.pickingMetadata && command.pickMetadataAllowed) {
1774
1827
  command.pickedMetadataInfo = frameState.pickedMetadataInfo;
1775
1828
  if (defined(command.pickedMetadataInfo)) {
@@ -1867,12 +1920,17 @@ Scene.prototype.updateDerivedCommands = function (command) {
1867
1920
  const needsUpdateForMetadataPicking =
1868
1921
  frameState.pickingMetadata &&
1869
1922
  pickedMetadataInfoChanged(command, frameState);
1923
+ const needsUpdateForSnap =
1924
+ frameState.passes.snap &&
1925
+ defined(command.snapId) &&
1926
+ !defined(derivedCommands.snapping);
1870
1927
  command.dirty =
1871
1928
  command.dirty ||
1872
1929
  needsLogDepthDerivedCommands ||
1873
1930
  needsHdrCommands ||
1874
1931
  needsDerivedCommands ||
1875
- needsUpdateForMetadataPicking;
1932
+ needsUpdateForMetadataPicking ||
1933
+ needsUpdateForSnap;
1876
1934
 
1877
1935
  if (!command.dirty) {
1878
1936
  return;
@@ -1960,6 +2018,7 @@ Scene.prototype.clearPasses = function (passes) {
1960
2018
  passes.render = false;
1961
2019
  passes.pick = false;
1962
2020
  passes.pickVoxel = false;
2021
+ passes.snap = false;
1963
2022
  passes.depth = false;
1964
2023
  passes.postProcess = false;
1965
2024
  passes.offscreen = false;
@@ -2245,6 +2304,21 @@ function executeCommand(command, scene, passState, debugFramebuffer) {
2245
2304
 
2246
2305
  if (passes.pick || passes.depth) {
2247
2306
  if (passes.pick && !passes.depth) {
2307
+ if (frameState.passes.snap) {
2308
+ // Snapping pass: only commands with a snap variant write the float
2309
+ // snap payload. Commands without one (no snapId, e.g. globe/terrain)
2310
+ // execute depth-only so they still occlude snappable geometry behind
2311
+ // them without polluting the RGBA32F snap framebuffer with RGBA8
2312
+ // pick colors.
2313
+ if (defined(command.derivedCommands.snapping)) {
2314
+ command = command.derivedCommands.snapping.snapCommand;
2315
+ command.execute(context, passState);
2316
+ } else if (defined(command.derivedCommands.depth)) {
2317
+ command = command.derivedCommands.depth.depthOnlyCommand;
2318
+ command.execute(context, passState);
2319
+ }
2320
+ return;
2321
+ }
2248
2322
  if (
2249
2323
  frameState.pickingMetadata &&
2250
2324
  defined(command.derivedCommands.pickingMetadata)
@@ -2466,6 +2540,7 @@ function createWorkingFrustum(camera) {
2466
2540
  *
2467
2541
  * @param {Scene} scene The scene.
2468
2542
  * @returns {Function} A function to execute translucent commands.
2543
+ * @ignore
2469
2544
  */
2470
2545
  function obtainTranslucentCommandExecutionFunction(scene) {
2471
2546
  if (scene._environmentState.useOIT) {
@@ -2618,6 +2693,54 @@ function performCesium3DTileEdgesPass(scene, passState, frustumCommands) {
2618
2693
  passState.framebuffer = originalFramebuffer;
2619
2694
  }
2620
2695
 
2696
+ /**
2697
+ * Execute the planar fill feature-ID pre-pass.
2698
+ *
2699
+ * Non-behind planar fill geometry writes its per-fragment feature ID into the
2700
+ * planar fill ID framebuffer. This allows behind fills in the main 3D tile
2701
+ * pass to check whether the existing pixel belongs to the same logical object.
2702
+ *
2703
+ * @param {Scene} scene
2704
+ * @param {PassState} passState
2705
+ * @param {FrustumCommands} frustumCommands
2706
+ * @private
2707
+ */
2708
+ function performPlanarFillIdPass(scene, passState, frustumCommands) {
2709
+ const { context } = scene;
2710
+ const { uniformState } = context;
2711
+
2712
+ uniformState.updatePass(Pass.CESIUM_3D_TILE_PLANAR_FILL_ID);
2713
+
2714
+ // Default to a blank texture so shaders always have something to sample.
2715
+ uniformState.planarFillIdTexture = context.defaultTexture;
2716
+
2717
+ const view = scene._view;
2718
+ const fb = view && view.planarFillIdFramebuffer;
2719
+
2720
+ const commands = frustumCommands.commands[Pass.CESIUM_3D_TILE_PLANAR_FILL_ID];
2721
+ const commandCount =
2722
+ frustumCommands.indices[Pass.CESIUM_3D_TILE_PLANAR_FILL_ID];
2723
+
2724
+ if (commandCount === 0) {
2725
+ return;
2726
+ }
2727
+
2728
+ if (scene._enablePlanarFillId && defined(fb) && defined(fb.framebuffer)) {
2729
+ const originalFramebuffer = passState.framebuffer;
2730
+ passState.framebuffer = fb.framebuffer;
2731
+
2732
+ // Clear to (0,0,0,0) — feature ID 0 means "no planar fill here".
2733
+ const clearCommand = fb.getClearCommand(new Color(0.0, 0.0, 0.0, 0.0));
2734
+ clearCommand.execute(context, passState);
2735
+
2736
+ for (let j = 0; j < commandCount; ++j) {
2737
+ executeCommand(commands[j], scene, passState);
2738
+ }
2739
+
2740
+ passState.framebuffer = originalFramebuffer;
2741
+ }
2742
+ }
2743
+
2621
2744
  /**
2622
2745
  * Execute edge commands that should render directly to the main framebuffer
2623
2746
  * (EDGES_ONLY mode). These edges bypass the MRT edge framebuffer and render
@@ -2655,6 +2778,10 @@ function executeCommands(scene, passState) {
2655
2778
 
2656
2779
  uniformState.updateCamera(camera);
2657
2780
 
2781
+ // Ensure planar fill ID texture is always available (even during edge pass)
2782
+ // so that shaders referencing czm_planarFillIdTexture never see undefined.
2783
+ uniformState.planarFillIdTexture = context.defaultTexture;
2784
+
2658
2785
  const frustum = createWorkingFrustum(camera);
2659
2786
  frustum.near = camera.frustum.near;
2660
2787
  frustum.far = camera.frustum.far;
@@ -2825,6 +2952,23 @@ function executeCommands(scene, passState) {
2825
2952
  scene.context.defaultTexture;
2826
2953
  }
2827
2954
 
2955
+ // Planar fill feature-ID pre-pass: write feature IDs from non-behind
2956
+ // planar fill geometry so that behind fills can test same-object.
2957
+ performPlanarFillIdPass(scene, passState, frustumCommands);
2958
+
2959
+ if (
2960
+ scene._enablePlanarFillId &&
2961
+ defined(scene._view) &&
2962
+ defined(scene._view.planarFillIdFramebuffer)
2963
+ ) {
2964
+ const pfIdTexture = scene._view.planarFillIdFramebuffer.idTexture;
2965
+ uniformState.planarFillIdTexture = defined(pfIdTexture)
2966
+ ? pfIdTexture
2967
+ : context.defaultTexture;
2968
+ } else {
2969
+ uniformState.planarFillIdTexture = context.defaultTexture;
2970
+ }
2971
+
2828
2972
  if (!useInvertClassification || picking || renderTranslucentDepthForPick) {
2829
2973
  // Common/fastest path. Draw 3D Tiles and classification normally.
2830
2974
 
@@ -2888,7 +3032,7 @@ function executeCommands(scene, passState) {
2888
3032
  passState.framebuffer = scene._invertClassification._fbo.framebuffer;
2889
3033
 
2890
3034
  // Draw normally
2891
- commandCount = performPass(frustumCommands, Pass.CESIUM_3D_TILE);
3035
+ performPass(frustumCommands, Pass.CESIUM_3D_TILE);
2892
3036
 
2893
3037
  if (useGlobeDepthFramebuffer) {
2894
3038
  scene._invertClassification.prepareTextures(context);
@@ -3635,10 +3779,11 @@ Scene.prototype.updateEnvironment = function () {
3635
3779
  );
3636
3780
 
3637
3781
  const envMaps = this.specularEnvironmentMaps;
3638
- let specularEnvironmentCubeMap = this._specularEnvironmentCubeMap;
3782
+ const specularEnvironmentCubeMap = this._specularEnvironmentCubeMap;
3639
3783
  if (defined(envMaps) && specularEnvironmentCubeMap?.url !== envMaps) {
3640
- specularEnvironmentCubeMap =
3641
- specularEnvironmentCubeMap && specularEnvironmentCubeMap.destroy();
3784
+ if (defined(specularEnvironmentCubeMap)) {
3785
+ specularEnvironmentCubeMap.destroy();
3786
+ }
3642
3787
  this._specularEnvironmentCubeMap = new SpecularEnvironmentCubeMap(envMaps);
3643
3788
  } else if (!defined(envMaps) && defined(specularEnvironmentCubeMap)) {
3644
3789
  specularEnvironmentCubeMap.destroy();
@@ -3728,6 +3873,7 @@ function updateAndRenderPrimitives(scene) {
3728
3873
 
3729
3874
  // Reset per-frame edge visibility request flag before primitives update
3730
3875
  frameState.edgeVisibilityRequested = false;
3876
+ frameState.planarFillRequested = false;
3731
3877
 
3732
3878
  scene._groundPrimitives.update(frameState);
3733
3879
  scene._primitives.update(frameState);
@@ -3740,6 +3886,10 @@ function updateAndRenderPrimitives(scene) {
3740
3886
  scene._enableEdgeVisibility = true;
3741
3887
  }
3742
3888
 
3889
+ // True only while at least one planar fill primitive is rendering;
3890
+ // the request flag is renewed each frame by ModelSceneGraph.
3891
+ scene._enablePlanarFillId = frameState.planarFillRequested;
3892
+
3743
3893
  updateDebugFrustumPlanes(scene);
3744
3894
  updateShadowMaps(scene);
3745
3895
 
@@ -3758,6 +3908,7 @@ function updateAndClearFramebuffers(scene, passState, clearColor) {
3758
3908
  const picking = passes.pick || passes.pickVoxel;
3759
3909
  if (defined(view.globeDepth)) {
3760
3910
  view.globeDepth.picking = picking;
3911
+ view.globeDepth.snapping = passes.snap;
3761
3912
  }
3762
3913
  const useWebVR = environmentState.useWebVR;
3763
3914
 
@@ -3863,6 +4014,15 @@ function updateAndClearFramebuffers(scene, passState, clearColor) {
3863
4014
  view.edgeFramebuffer.update(context, view.viewport, scene._hdr);
3864
4015
  }
3865
4016
 
4017
+ // Update planar fill ID framebuffer
4018
+ const usePlanarFillIdFramebuffer = !picking && scene._enablePlanarFillId;
4019
+ if (usePlanarFillIdFramebuffer) {
4020
+ view.planarFillIdFramebuffer.update(context, view.viewport, scene._hdr);
4021
+ } else if (!picking) {
4022
+ // Release GPU resources while unused; recreated on demand by update().
4023
+ view.planarFillIdFramebuffer.releaseResources();
4024
+ }
4025
+
3866
4026
  if (useInvertClassification) {
3867
4027
  let depthFramebuffer;
3868
4028
  if (frameState.invertClassificationColor.alpha === 1.0) {
@@ -4419,6 +4579,8 @@ Scene.prototype.render = function (time) {
4419
4579
  time = JulianDate.now();
4420
4580
  }
4421
4581
 
4582
+ this._controllerHost.update(this, time);
4583
+
4422
4584
  const cameraChanged = this._view.checkForCameraUpdates(this);
4423
4585
  if (cameraChanged) {
4424
4586
  this._globeHeightDirty = true;
@@ -4556,6 +4718,42 @@ Scene.prototype.pick = function (windowPosition, width, height) {
4556
4718
  return this._picking.pick(this, windowPosition, width, height, 1)[0];
4557
4719
  };
4558
4720
 
4721
+ /**
4722
+ * The result of a snap operation. See {@link Scene#snap}.
4723
+ *
4724
+ * @typedef {object} SceneSnapResult
4725
+ * @property {object} object The snapped primitive or feature.
4726
+ * @property {Cartesian3} position The world-space position of the snap point, un-projected from the snap framebuffer's eye-space depth.
4727
+ * @property {Cartesian2} screenPosition The window coordinates of the snap point.
4728
+ * @property {boolean} isEdge <code>true</code> if the snap point lies on an edge; <code>false</code> if it lies on a surface.
4729
+ *
4730
+ * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
4731
+ */
4732
+
4733
+ /**
4734
+ * Returns the best snap target in a screen-space region around <code>windowPosition</code>.
4735
+ * Edges are preferred over surfaces; among hits of the same kind the one
4736
+ * nearest the cursor wins. Returns <code>undefined</code> if the region contains
4737
+ * no snappable geometry.
4738
+ * <p>
4739
+ * Only primitives rendered through the Model pipeline (e.g. 3D Tiles and glTF
4740
+ * models) are snappable. Snapping requires float color attachments
4741
+ * (WebGL2 with <code>EXT_color_buffer_float</code>); if unsupported, this
4742
+ * function returns <code>undefined</code>.
4743
+ * </p>
4744
+ *
4745
+ * @param {Cartesian2} windowPosition Window coordinates at the center of the search region.
4746
+ * @param {object} [options] Object with the following properties:
4747
+ * @param {number} [options.width=25] Width of the search region in pixels.
4748
+ * @param {number} [options.height=options.width] Height of the search region in pixels.
4749
+ * @returns {SceneSnapResult | undefined} The best snap target in the region, or <code>undefined</code> if there is none.
4750
+ *
4751
+ * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
4752
+ */
4753
+ Scene.prototype.snap = function (windowPosition, options) {
4754
+ return Snapping.snap(this, windowPosition, options);
4755
+ };
4756
+
4559
4757
  /**
4560
4758
  * Performs the same operation as Scene.pick but asynchonosly without blocking the main render thread.
4561
4759
  * Requires WebGL2 else using fallback.
@@ -1959,7 +1959,7 @@ function spin3D(controller, startPosition, movement) {
1959
1959
  scratchMousePosition,
1960
1960
  );
1961
1961
  if (defined(mousePos)) {
1962
- let strafing = false;
1962
+ let strafing;
1963
1963
  const ray = camera.getPickRay(
1964
1964
  movement.startPosition,
1965
1965
  pickGlobeScratchRay,
@@ -2367,7 +2367,6 @@ function zoom3D(controller, startPosition, movement) {
2367
2367
  if (!defined(controller._globe) && defined(distance)) {
2368
2368
  const targetDistance = camera.getMagnitude();
2369
2369
  if (targetDistance < distance) {
2370
- intersection = undefined;
2371
2370
  distance = undefined;
2372
2371
  }
2373
2372
  }
@@ -1719,20 +1719,25 @@ function createCastDerivedCommand(
1719
1719
  const isPointLight = shadowMap._isPointLight;
1720
1720
  const usesDepthTexture = shadowMap._usesDepthTexture;
1721
1721
 
1722
+ const vertexShaderSource = shaderProgram.vertexShaderSource;
1723
+ const fragmentShaderSource = shaderProgram.fragmentShaderSource;
1724
+
1725
+ const hasClipping =
1726
+ isOpaque &&
1727
+ ShadowMapShader.hasClippingForShadowCast(fragmentShaderSource);
1728
+
1722
1729
  const keyword = ShadowMapShader.getShadowCastShaderKeyword(
1723
1730
  isPointLight,
1724
1731
  isTerrain,
1725
1732
  usesDepthTexture,
1726
1733
  isOpaque,
1734
+ hasClipping,
1727
1735
  );
1728
1736
  castShader = context.shaderCache.getDerivedShaderProgram(
1729
1737
  shaderProgram,
1730
1738
  keyword,
1731
1739
  );
1732
1740
  if (!defined(castShader)) {
1733
- const vertexShaderSource = shaderProgram.vertexShaderSource;
1734
- const fragmentShaderSource = shaderProgram.fragmentShaderSource;
1735
-
1736
1741
  const castVS = ShadowMapShader.createShadowCastVertexShader(
1737
1742
  vertexShaderSource,
1738
1743
  isPointLight,
@@ -1743,6 +1748,7 @@ function createCastDerivedCommand(
1743
1748
  isPointLight,
1744
1749
  usesDepthTexture,
1745
1750
  isOpaque,
1751
+ hasClipping,
1746
1752
  );
1747
1753
 
1748
1754
  castShader = context.shaderCache.createDerivedShaderProgram(
@@ -6,13 +6,48 @@ import ShaderSource from "../Renderer/ShaderSource.js";
6
6
  */
7
7
  function ShadowMapShader() {}
8
8
 
9
+ const clippingDefines = {
10
+ HAS_CLIPPING_PLANES: true,
11
+ ENABLE_CLIPPING_POLYGONS: true,
12
+ };
13
+
14
+ /**
15
+ * Returns true if the fragment shader clips fragments via a
16
+ * ClippingPlaneCollection or ClippingPolygonCollection, in which case the
17
+ * shadow cast pass must run the original main so that clipped fragments
18
+ * are discarded and do not cast shadows.
19
+ *
20
+ * @param {ShaderSource} fragmentShaderSource
21
+ * @returns {boolean}
22
+ */
23
+ ShadowMapShader.hasClippingForShadowCast = function (fragmentShaderSource) {
24
+ const defines = fragmentShaderSource.defines;
25
+ return (
26
+ defined(defines) &&
27
+ defines.some(function (define) {
28
+ return clippingDefines[define] === true;
29
+ })
30
+ );
31
+ };
32
+
33
+ /**
34
+ * @param {boolean} isPointLight
35
+ * @param {boolean} isTerrain
36
+ * @param {boolean} usesDepthTexture
37
+ * @param {boolean} isOpaque
38
+ * @param {boolean} hasClipping True if the fragment shader discards clipped
39
+ * fragments. Differentiates cached shader variants so that a shader that
40
+ * must call czm_shadow_cast_main() is never reused for one that does not.
41
+ * @returns {string}
42
+ */
9
43
  ShadowMapShader.getShadowCastShaderKeyword = function (
10
44
  isPointLight,
11
45
  isTerrain,
12
46
  usesDepthTexture,
13
47
  isOpaque,
48
+ hasClipping,
14
49
  ) {
15
- return `castShadow ${isPointLight} ${isTerrain} ${usesDepthTexture} ${isOpaque}`;
50
+ return `castShadow ${isPointLight} ${isTerrain} ${usesDepthTexture} ${isOpaque} ${hasClipping}`;
16
51
  };
17
52
 
18
53
  ShadowMapShader.createShadowCastVertexShader = function (
@@ -54,11 +89,22 @@ ShadowMapShader.createShadowCastVertexShader = function (
54
89
  });
55
90
  };
56
91
 
92
+ /**
93
+ * @param {ShaderSource} fs
94
+ * @param {boolean} isPointLight
95
+ * @param {boolean} usesDepthTexture
96
+ * @param {boolean} opaque
97
+ * @param {boolean} hasClipping True if the fragment shader discards clipped
98
+ * fragments. When true, czm_shadow_cast_main() (the renamed original main)
99
+ * is called first so that clipping discards execute during the shadow cast pass.
100
+ * @returns {ShaderSource}
101
+ */
57
102
  ShadowMapShader.createShadowCastFragmentShader = function (
58
103
  fs,
59
104
  isPointLight,
60
105
  usesDepthTexture,
61
106
  opaque,
107
+ hasClipping,
62
108
  ) {
63
109
  const defines = fs.defines.slice(0);
64
110
  const sources = fs.sources.slice(0);
@@ -85,7 +131,9 @@ ShadowMapShader.createShadowCastFragmentShader = function (
85
131
  fsSource += "uniform vec4 shadowMap_lightPositionEC; \n";
86
132
  }
87
133
 
88
- if (opaque) {
134
+ if (opaque && hasClipping) {
135
+ fsSource += "void main() \n" + "{ \n" + " czm_shadow_cast_main(); \n";
136
+ } else if (opaque) {
89
137
  fsSource += "void main() \n" + "{ \n";
90
138
  } else {
91
139
  fsSource +=