@hztxi/cesium-engine 25.0.7 → 26.2.2

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/Workers/chunk-2FNKHQL3.js +754 -0
  2. package/Build/Workers/chunk-2NCNUVAT.js +56 -0
  3. package/Build/Workers/chunk-2ZYRUVVU.js +301 -0
  4. package/Build/Workers/chunk-36IU7N4V.js +1284 -0
  5. package/Build/Workers/chunk-3BDLET5S.js +198 -0
  6. package/Build/Workers/chunk-3JZXI44G.js +3822 -0
  7. package/Build/Workers/chunk-3N2UNLWJ.js +101 -0
  8. package/Build/Workers/chunk-3NCG2YYR.js +58 -0
  9. package/Build/Workers/chunk-3PRHI4KX.js +241 -0
  10. package/Build/Workers/chunk-3R6E2SH4.js +672 -0
  11. package/Build/Workers/chunk-3ZKKXEXL.js +415 -0
  12. package/Build/Workers/chunk-47KVKPTO.js +415 -0
  13. package/Build/Workers/chunk-4FFIJ7ZV.js +56 -0
  14. package/Build/Workers/chunk-4N227IPR.js +973 -0
  15. package/Build/Workers/chunk-4P6OAPBM.js +97 -0
  16. package/Build/Workers/chunk-4XR3K4GD.js +280 -0
  17. package/Build/Workers/chunk-4Z2JINRS.js +519 -0
  18. package/Build/Workers/chunk-4ZOLEPZK.js +519 -0
  19. package/Build/Workers/chunk-5EF3WWQG.js +352 -0
  20. package/Build/Workers/chunk-5I76476T.js +288 -0
  21. package/Build/Workers/chunk-5PBZKBAP.js +511 -0
  22. package/Build/Workers/chunk-5RVAAW26.js +82 -0
  23. package/Build/Workers/chunk-5VWK76PO.js +511 -0
  24. package/Build/Workers/chunk-6SEICASZ.js +241 -0
  25. package/Build/Workers/chunk-77DBX23X.js +455 -0
  26. package/Build/Workers/chunk-7C2D3DTI.js +959 -0
  27. package/Build/Workers/chunk-7GQOWCSN.js +959 -0
  28. package/Build/Workers/chunk-7J2ONMKC.js +198 -0
  29. package/Build/Workers/chunk-7MHUHXZZ.js +219 -0
  30. package/Build/Workers/chunk-7MQPHOAS.js +455 -0
  31. package/Build/Workers/chunk-7NJ5O7TP.js +387 -0
  32. package/Build/Workers/chunk-7T4MW2W4.js +368 -0
  33. package/Build/Workers/chunk-7UXZUGUZ.js +82 -0
  34. package/Build/Workers/chunk-7Y642MCO.js +352 -0
  35. package/Build/Workers/chunk-7ZFKBLUE.js +1054 -0
  36. package/Build/Workers/chunk-A2UHPWPL.js +38 -0
  37. package/Build/Workers/chunk-A7LGY5XS.js +140 -0
  38. package/Build/Workers/chunk-AN2NVYL6.js +1483 -0
  39. package/Build/Workers/chunk-AS2QC7H2.js +219 -0
  40. package/Build/Workers/chunk-AVOLMIGJ.js +57 -0
  41. package/Build/Workers/chunk-B7PT2VL5.js +630 -0
  42. package/Build/Workers/chunk-BHRHMUDM.js +147 -0
  43. package/Build/Workers/chunk-BUWAHRK5.js +672 -0
  44. package/Build/Workers/chunk-C5ET5HON.js +198 -0
  45. package/Build/Workers/chunk-C6XQGBPV.js +476 -0
  46. package/Build/Workers/chunk-C7B672RR.js +73 -0
  47. package/Build/Workers/chunk-CAEC5DA2.js +57 -0
  48. package/Build/Workers/chunk-CBCOHH5O.js +837 -0
  49. package/Build/Workers/chunk-CEMXKBQO.js +1800 -0
  50. package/Build/Workers/chunk-CKW3STKA.js +1067 -0
  51. package/Build/Workers/chunk-CV5RICKT.js +1992 -0
  52. package/Build/Workers/chunk-DBWSISJT.js +56 -0
  53. package/Build/Workers/chunk-DCMOBPLG.js +352 -0
  54. package/Build/Workers/chunk-DSBSPPPJ.js +1344 -0
  55. package/Build/Workers/chunk-DSGLDRTI.js +278 -0
  56. package/Build/Workers/chunk-DXD7OPSP.js +1992 -0
  57. package/Build/Workers/chunk-DXECZBSA.js +368 -0
  58. package/Build/Workers/chunk-DZIRO6ZK.js +682 -0
  59. package/Build/Workers/chunk-E4CRPGX5.js +140 -0
  60. package/Build/Workers/chunk-E4IVMEBH.js +52 -0
  61. package/Build/Workers/chunk-E6IPM6HP.js +56 -0
  62. package/Build/Workers/chunk-EB2HAHRY.js +1054 -0
  63. package/Build/Workers/chunk-ECDCQXCO.js +1992 -0
  64. package/Build/Workers/chunk-ECN3VUMA.js +73 -0
  65. package/Build/Workers/chunk-ECSKVHUB.js +476 -0
  66. package/Build/Workers/chunk-EIENGLA5.js +278 -0
  67. package/Build/Workers/chunk-EK5CWDW2.js +476 -0
  68. package/Build/Workers/chunk-EL4B5CSQ.js +162 -0
  69. package/Build/Workers/chunk-EUCUBIEZ.js +97 -0
  70. package/Build/Workers/chunk-FAYBQGKO.js +219 -0
  71. package/Build/Workers/chunk-FGCXPEZM.js +3201 -0
  72. package/Build/Workers/chunk-FHCRXPA6.js +44 -0
  73. package/Build/Workers/chunk-FM6EQUFX.js +1800 -0
  74. package/Build/Workers/chunk-FPFGGQ4X.js +301 -0
  75. package/Build/Workers/chunk-FQ42MT7M.js +58 -0
  76. package/Build/Workers/chunk-FQDYQG4P.js +1284 -0
  77. package/Build/Workers/chunk-FQTV6W3I.js +973 -0
  78. package/Build/Workers/chunk-FTCBY5HH.js +138 -0
  79. package/Build/Workers/chunk-GI5RWJAY.js +101 -0
  80. package/Build/Workers/chunk-GNLMSDRO.js +945 -0
  81. package/Build/Workers/chunk-GTA727KQ.js +140 -0
  82. package/Build/Workers/chunk-GVUJ6O3R.js +73 -0
  83. package/Build/Workers/chunk-GXTM7AG3.js +1483 -0
  84. package/Build/Workers/chunk-HAXQB2FS.js +2719 -0
  85. package/Build/Workers/chunk-HCGU7OCG.js +97 -0
  86. package/Build/Workers/chunk-HRIPVWSC.js +58 -0
  87. package/Build/Workers/chunk-IC3BR6SC.js +102 -0
  88. package/Build/Workers/chunk-IEPPOHF3.js +44 -0
  89. package/Build/Workers/chunk-IU3YAYPT.js +1344 -0
  90. package/Build/Workers/chunk-J3AXZ4WC.js +124 -0
  91. package/Build/Workers/chunk-J7MZR7B2.js +1483 -0
  92. package/Build/Workers/chunk-KBNW776Q.js +305 -0
  93. package/Build/Workers/chunk-KBSWXVSY.js +837 -0
  94. package/Build/Workers/chunk-KEYTLNVK.js +1067 -0
  95. package/Build/Workers/chunk-KN3RQWUA.js +3201 -0
  96. package/Build/Workers/chunk-KSIEJYNL.js +3822 -0
  97. package/Build/Workers/chunk-KT3GG7AW.js +754 -0
  98. package/Build/Workers/chunk-KYCEM22I.js +1800 -0
  99. package/Build/Workers/chunk-L2TFZKN6.js +455 -0
  100. package/Build/Workers/chunk-LHKE2VUR.js +945 -0
  101. package/Build/Workers/chunk-LJTQW46H.js +57 -0
  102. package/Build/Workers/chunk-LMQGYJME.js +672 -0
  103. package/Build/Workers/chunk-LOBYJQA4.js +76 -0
  104. package/Build/Workers/chunk-LOF32O7F.js +163 -0
  105. package/Build/Workers/chunk-LOTIJA7D.js +124 -0
  106. package/Build/Workers/chunk-M7Z3MPAX.js +973 -0
  107. package/Build/Workers/chunk-MHNLTQHO.js +3201 -0
  108. package/Build/Workers/chunk-MICPAD7R.js +398 -0
  109. package/Build/Workers/chunk-ML7OMD72.js +2342 -0
  110. package/Build/Workers/chunk-MPJ73WMH.js +138 -0
  111. package/Build/Workers/chunk-MUTHG7T7.js +171 -0
  112. package/Build/Workers/chunk-NBTGXEMT.js +945 -0
  113. package/Build/Workers/chunk-NQZC37F7.js +38 -0
  114. package/Build/Workers/chunk-O3X3D2Z3.js +352 -0
  115. package/Build/Workers/chunk-OBUIHPKF.js +352 -0
  116. package/Build/Workers/chunk-PAEWNYIV.js +138 -0
  117. package/Build/Workers/chunk-PANJ7YH6.js +102 -0
  118. package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
  119. package/Build/Workers/chunk-PHUELDXQ.js +76 -0
  120. package/Build/Workers/chunk-PIIUGRQD.js +387 -0
  121. package/Build/Workers/chunk-POKD22OT.js +2719 -0
  122. package/Build/Workers/chunk-PQMA7MFS.js +9237 -0
  123. package/Build/Workers/chunk-PQZW2QZG.js +163 -0
  124. package/Build/Workers/chunk-PURIPUSY.js +682 -0
  125. package/Build/Workers/chunk-QQZPPXY4.js +3822 -0
  126. package/Build/Workers/chunk-QXLQLGL2.js +1067 -0
  127. package/Build/Workers/chunk-R2JQAAU7.js +630 -0
  128. package/Build/Workers/chunk-RC4YC3VU.js +278 -0
  129. package/Build/Workers/chunk-RGNNWVR6.js +171 -0
  130. package/Build/Workers/chunk-RUOETBWP.js +288 -0
  131. package/Build/Workers/chunk-RV4EPLBO.js +2342 -0
  132. package/Build/Workers/chunk-SBBIEHYT.js +44 -0
  133. package/Build/Workers/chunk-SBEQLEO5.js +352 -0
  134. package/Build/Workers/chunk-SGC2GT3Y.js +1284 -0
  135. package/Build/Workers/chunk-SKLK4CBL.js +162 -0
  136. package/Build/Workers/chunk-SWVZTU6X.js +305 -0
  137. package/Build/Workers/chunk-T3EUPM5A.js +454 -0
  138. package/Build/Workers/chunk-TA6IU2XL.js +171 -0
  139. package/Build/Workers/chunk-TLSGD5TR.js +280 -0
  140. package/Build/Workers/chunk-TNDQT5AB.js +682 -0
  141. package/Build/Workers/chunk-TOXDLWKZ.js +368 -0
  142. package/Build/Workers/chunk-TZBM6TAB.js +124 -0
  143. package/Build/Workers/chunk-U2OY6MX6.js +398 -0
  144. package/Build/Workers/chunk-UCY4B5EV.js +288 -0
  145. package/Build/Workers/chunk-V52FEPCV.js +754 -0
  146. package/Build/Workers/chunk-VBEXZBG5.js +147 -0
  147. package/Build/Workers/chunk-VC76B6GM.js +959 -0
  148. package/Build/Workers/chunk-VCUOYHWC.js +519 -0
  149. package/Build/Workers/chunk-VDBQVKTF.js +387 -0
  150. package/Build/Workers/chunk-VJIL5H6K.js +2719 -0
  151. package/Build/Workers/chunk-VJLDRHKN.js +511 -0
  152. package/Build/Workers/chunk-VMF7KOGY.js +162 -0
  153. package/Build/Workers/chunk-W3X2ZAEJ.js +52 -0
  154. package/Build/Workers/chunk-W5OCKMPJ.js +101 -0
  155. package/Build/Workers/chunk-X4VZ33YL.js +454 -0
  156. package/Build/Workers/chunk-XDM5A6C4.js +102 -0
  157. package/Build/Workers/chunk-XHT5SVP4.js +52 -0
  158. package/Build/Workers/chunk-XITBARMZ.js +2342 -0
  159. package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
  160. package/Build/Workers/chunk-XZ6HDXKM.js +76 -0
  161. package/Build/Workers/chunk-Y6AQK4FY.js +1344 -0
  162. package/Build/Workers/chunk-Y7NDFEQ3.js +398 -0
  163. package/Build/Workers/chunk-YBBQDYX2.js +301 -0
  164. package/Build/Workers/chunk-YHPYPVAB.js +837 -0
  165. package/Build/Workers/chunk-YJBPRW4A.js +415 -0
  166. package/Build/Workers/chunk-YNKK6BXY.js +454 -0
  167. package/Build/Workers/chunk-YRAJ74HR.js +305 -0
  168. package/Build/Workers/chunk-YULTZK5O.js +147 -0
  169. package/Build/Workers/chunk-YUNQYP3Z.js +9237 -0
  170. package/Build/Workers/chunk-YX2FOQMF.js +9237 -0
  171. package/Build/Workers/chunk-Z7BONRW2.js +241 -0
  172. package/Build/Workers/chunk-ZK2R3DEJ.js +1054 -0
  173. package/Build/Workers/combineGeometry.js +24 -24
  174. package/Build/Workers/createBoxGeometry.js +18 -18
  175. package/Build/Workers/createBoxOutlineGeometry.js +18 -18
  176. package/Build/Workers/createCircleGeometry.js +26 -26
  177. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  178. package/Build/Workers/createCoplanarPolygonGeometry.js +39 -39
  179. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +33 -33
  180. package/Build/Workers/createCorridorGeometry.js +36 -37
  181. package/Build/Workers/createCorridorOutlineGeometry.js +34 -35
  182. package/Build/Workers/createCylinderGeometry.js +20 -20
  183. package/Build/Workers/createCylinderOutlineGeometry.js +20 -20
  184. package/Build/Workers/createEllipseGeometry.js +26 -26
  185. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  186. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  187. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  188. package/Build/Workers/createFrustumGeometry.js +18 -18
  189. package/Build/Workers/createFrustumOutlineGeometry.js +20 -20
  190. package/Build/Workers/createGeometry.js +25 -24
  191. package/Build/Workers/createGroundPolylineGeometry.js +26 -26
  192. package/Build/Workers/createMvtTile.js +111 -19
  193. package/Build/Workers/createPlaneGeometry.js +18 -18
  194. package/Build/Workers/createPlaneOutlineGeometry.js +17 -17
  195. package/Build/Workers/createPolygonGeometry.js +36 -36
  196. package/Build/Workers/createPolygonOutlineGeometry.js +33 -33
  197. package/Build/Workers/createPolylineGeometry.js +28 -28
  198. package/Build/Workers/createPolylineVolumeGeometry.js +38 -36
  199. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +32 -31
  200. package/Build/Workers/createRectangleGeometry.js +29 -29
  201. package/Build/Workers/createRectangleOutlineGeometry.js +23 -23
  202. package/Build/Workers/createSimplePolylineGeometry.js +26 -26
  203. package/Build/Workers/createSphereGeometry.js +19 -19
  204. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  205. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  206. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  207. package/Build/Workers/createVectorTileGeometries.js +24 -24
  208. package/Build/Workers/createVectorTilePoints.js +13 -13
  209. package/Build/Workers/createVectorTilePolygons.js +22 -22
  210. package/Build/Workers/createVectorTilePolylines.js +14 -14
  211. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -26
  212. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -23
  213. package/Build/Workers/createVerticesFromHeightmap.js +23 -23
  214. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +21 -21
  215. package/Build/Workers/createWallGeometry.js +26 -26
  216. package/Build/Workers/createWallOutlineGeometry.js +26 -26
  217. package/Build/Workers/decodeDraco.js +10 -10
  218. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +993 -2334
  219. package/Build/Workers/decodeI3S.js +10 -10
  220. package/Build/Workers/gaussianSplatSorter.js +4 -4
  221. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  222. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  223. package/Build/Workers/transcodeKTX2.js +6 -6
  224. package/Build/Workers/transferTypedArrayTest.js +1 -1
  225. package/Build/Workers/upsampleQuantizedTerrainMesh.js +23 -23
  226. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -26
  227. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  228. package/Source/Core/BoundingRectangle.js +6 -8
  229. package/Source/Core/BoundingSphere.js +0 -3
  230. package/Source/Core/Cartesian2.js +1 -1
  231. package/Source/Core/Cartesian3.js +1 -1
  232. package/Source/Core/Cartesian4.js +1 -1
  233. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  234. package/Source/Core/Color.js +1 -0
  235. package/Source/Core/ComponentDatatype.js +35 -0
  236. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  237. package/Source/Core/CorridorGeometry.js +2 -4
  238. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  239. package/Source/Core/EarthOrientationParameters.js +2 -2
  240. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  241. package/Source/Core/EllipsoidGeodesic.js +3 -3
  242. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  243. package/Source/Core/Heap.js +1 -1
  244. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  245. package/Source/Core/InterpolationAlgorithm.js +58 -50
  246. package/Source/Core/Ion.js +1 -1
  247. package/Source/Core/JulianDate.js +1 -1
  248. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  249. package/Source/Core/LinearApproximation.js +69 -66
  250. package/Source/Core/MapProjection.js +1 -0
  251. package/Source/Core/Math.js +59 -0
  252. package/Source/Core/Matrix2.js +3 -3
  253. package/Source/Core/Matrix3.js +3 -3
  254. package/Source/Core/Matrix4.js +1 -1
  255. package/Source/Core/OrthographicFrustum.js +1 -1
  256. package/Source/Core/PerspectiveFrustum.js +1 -1
  257. package/Source/Core/PolygonGeometry.js +2 -2
  258. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  259. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  260. package/Source/Core/PolylineGeometry.js +1 -1
  261. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  262. package/Source/Core/Rectangle.js +7 -1
  263. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  264. package/Source/Core/Resource.js +1 -1
  265. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  266. package/Source/Core/SimplePolylineGeometry.js +1 -1
  267. package/Source/Core/TerrainEncoding.js +2 -2
  268. package/Source/Core/TerrainMesh.js +3 -3
  269. package/Source/Core/TerrainPicker.js +180 -168
  270. package/Source/Core/TimeIntervalCollection.js +1 -3
  271. package/Source/Core/Tipsify.js +1 -1
  272. package/Source/Core/Transforms.js +5 -1
  273. package/Source/Core/VectorPipeline.js +1117 -0
  274. package/Source/Core/VectorProvider.js +429 -0
  275. package/Source/Core/WallOutlineGeometry.js +1 -1
  276. package/Source/Core/createColorRamp.js +37 -0
  277. package/Source/Core/getTimestamp.js +4 -2
  278. package/Source/Core/globalTypes.js +25 -0
  279. package/Source/Core/writeTextToCanvas.js +1 -0
  280. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  281. package/Source/DataSources/CzmlDataSource.js +14 -0
  282. package/Source/DataSources/DataSourceDisplay.js +1 -1
  283. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  284. package/Source/DataSources/GeometryVisualizer.js +1 -1
  285. package/Source/DataSources/KmlDataSource.js +529 -557
  286. package/Source/DataSources/PathGraphics.js +8 -1
  287. package/Source/DataSources/PathMode.js +27 -0
  288. package/Source/DataSources/PathVisualizer.js +298 -1
  289. package/Source/DataSources/PolylineVisualizer.js +1 -1
  290. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  291. package/Source/Renderer/AutomaticUniforms.js +23 -0
  292. package/Source/Renderer/Context.js +9 -3
  293. package/Source/Renderer/DrawCommand.js +22 -0
  294. package/Source/Renderer/Framebuffer.js +4 -0
  295. package/Source/Renderer/Pass.js +11 -9
  296. package/Source/Renderer/Texture.js +12 -1
  297. package/Source/Renderer/UniformState.js +7 -0
  298. package/Source/Renderer/VertexArray.js +1 -1
  299. package/Source/Renderer/createUniform.js +346 -239
  300. package/Source/Renderer/createUniformArray.js +494 -381
  301. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  302. package/Source/Scene/ArcGisMapService.js +1 -1
  303. package/Source/Scene/Billboard.js +2 -1
  304. package/Source/Scene/BillboardCollection.js +15 -5
  305. package/Source/Scene/BillboardTexture.js +5 -3
  306. package/Source/Scene/BufferPointCollection.js +11 -1
  307. package/Source/Scene/BufferPolygonCollection.js +26 -0
  308. package/Source/Scene/BufferPolylineCollection.js +2 -0
  309. package/Source/Scene/BufferPrimitiveCollection.js +105 -32
  310. package/Source/Scene/Camera.js +85 -9
  311. package/Source/Scene/CameraEventAggregator.js +30 -18
  312. package/Source/Scene/CameraFlightPath.js +7 -4
  313. package/Source/Scene/Cesium3DTile.js +102 -4
  314. package/Source/Scene/Cesium3DTileContent.js +195 -254
  315. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  316. package/Source/Scene/Cesium3DTileOptimizations.js +4 -6
  317. package/Source/Scene/Cesium3DTileStyle.js +40 -0
  318. package/Source/Scene/Cesium3DTileset.js +213 -8
  319. package/Source/Scene/Cesium3DTilesetTraversal.js +14 -0
  320. package/Source/Scene/ClippingPlaneCollection.js +4 -4
  321. package/Source/Scene/ClippingPolygon.js +2 -0
  322. package/Source/Scene/ClippingPolygonCollection.js +2 -2
  323. package/Source/Scene/Composite3DTileContent.js +254 -292
  324. package/Source/Scene/Controllers/Controller.js +63 -0
  325. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  326. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  327. package/Source/Scene/Controllers/MouseButton.js +32 -0
  328. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  329. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  330. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  331. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  332. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  333. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  334. package/Source/Scene/DerivedCommand.js +98 -0
  335. package/Source/Scene/EdgeDisplayMode.js +50 -0
  336. package/Source/Scene/EdgeFramebuffer.js +1 -5
  337. package/Source/Scene/Empty3DTileContent.js +100 -132
  338. package/Source/Scene/Expression.js +6 -8
  339. package/Source/Scene/FrameState.js +17 -0
  340. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  341. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  342. package/Source/Scene/Geometry3DTileContent.js +151 -185
  343. package/Source/Scene/Globe.js +22 -1
  344. package/Source/Scene/GlobeDepth.js +27 -1
  345. package/Source/Scene/GlobeSurfaceShaderSet.js +637 -540
  346. package/Source/Scene/GlobeSurfaceTile.js +575 -398
  347. package/Source/Scene/GlobeSurfaceTileProvider.js +1412 -1184
  348. package/Source/Scene/GltfBufferViewLoader.js +3 -3
  349. package/Source/Scene/GltfLoader.js +146 -3
  350. package/Source/Scene/GltfLoaderUtil.js +20 -4
  351. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +10 -0
  352. package/Source/Scene/GltfPipeline/removeUnusedElements.js +21 -11
  353. package/Source/Scene/GltfSpzLoader.js +1 -1
  354. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  355. package/Source/Scene/I3SDataProvider.js +1 -1
  356. package/Source/Scene/I3SLayer.js +1 -1
  357. package/Source/Scene/I3SNode.js +2 -2
  358. package/Source/Scene/ImageryLayer.js +2 -2
  359. package/Source/Scene/ImageryLayerCollection.js +190 -6
  360. package/Source/Scene/Implicit3DTileContent.js +192 -216
  361. package/Source/Scene/ImplicitTileCoordinates.js +17 -0
  362. package/Source/Scene/IonImageryProvider.js +1 -5
  363. package/Source/Scene/Label.js +4 -4
  364. package/Source/Scene/LabelCollection.js +4 -1
  365. package/Source/Scene/MVTDataProvider.js +555 -0
  366. package/Source/Scene/Material.js +1 -0
  367. package/Source/Scene/Model/B3dmLoader.js +1 -2
  368. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +82 -312
  369. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +4 -0
  370. package/Source/Scene/Model/I3dmLoader.js +1 -1
  371. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  372. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  373. package/Source/Scene/Model/Model.js +45 -10
  374. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  375. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  376. package/Source/Scene/Model/ModelDrawCommand.js +180 -8
  377. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  378. package/Source/Scene/Model/ModelSceneGraph.js +21 -0
  379. package/Source/Scene/Model/ModelUtility.js +5 -0
  380. package/Source/Scene/Model/PickingPipelineStage.js +29 -0
  381. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  382. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +645 -153
  383. package/Source/Scene/ModelComponents.js +112 -0
  384. package/Source/Scene/Multiple3DTileContent.js +291 -334
  385. package/Source/Scene/MvtLabelCandidates.js +295 -0
  386. package/Source/Scene/MvtLabelManager.js +1069 -0
  387. package/Source/Scene/Picking.js +19 -3
  388. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  389. package/Source/Scene/PntsParser.js +1 -1
  390. package/Source/Scene/PolylineCollection.js +5 -3
  391. package/Source/Scene/PostProcessStage.js +4 -2
  392. package/Source/Scene/QuadtreePrimitive.js +3 -2
  393. package/Source/Scene/ResourceCache.js +7 -4
  394. package/Source/Scene/ResourceCacheKey.js +21 -18
  395. package/Source/Scene/Scene.js +237 -11
  396. package/Source/Scene/SceneTransforms.js +6 -5
  397. package/Source/Scene/ShadowMap.js +9 -3
  398. package/Source/Scene/ShadowMapShader.js +50 -2
  399. package/Source/Scene/SnapFramebuffer.js +121 -0
  400. package/Source/Scene/Snapping.js +184 -0
  401. package/Source/Scene/TerrainFillMesh.js +3 -2
  402. package/Source/Scene/Tileset3DTileContent.js +113 -146
  403. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +543 -0
  404. package/Source/Scene/Vector3DTileContent.js +207 -237
  405. package/Source/Scene/VectorGltf3DTileContent.js +185 -45
  406. package/Source/Scene/View.js +10 -8
  407. package/Source/Scene/VoxelPrimitive.js +159 -175
  408. package/Source/Scene/VoxelProvider.js +64 -91
  409. package/Source/Scene/VoxelTraversal.js +1 -1
  410. package/Source/Scene/buildVectorGltfFromMVT.js +1208 -0
  411. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  412. package/Source/Scene/createElevationBandMaterial.js +1 -1
  413. package/Source/Scene/decodeMVT.js +877 -0
  414. package/Source/Scene/findMeshoptExtension.js +23 -0
  415. package/Source/Scene/renderBufferPointCollection.js +114 -64
  416. package/Source/Scene/renderBufferPolygonCollection.js +245 -53
  417. package/Source/Scene/renderBufferPolylineCollection.js +271 -145
  418. package/Source/Shaders/BillboardCollectionVS.glsl +23 -25
  419. package/Source/Shaders/BillboardCollectionVS.js +23 -25
  420. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  421. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  422. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  423. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  424. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  425. package/Source/Shaders/BufferPolygonMaterialFS.js +13 -0
  426. package/Source/Shaders/BufferPolygonMaterialVS.glsl +22 -4
  427. package/Source/Shaders/BufferPolygonMaterialVS.js +23 -5
  428. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  429. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  430. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  431. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  432. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  433. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  434. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  435. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  436. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  437. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  438. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  439. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  440. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  441. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  442. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  443. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  444. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  445. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  446. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  447. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  448. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  449. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  450. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  451. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  452. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  453. package/Source/Shaders/GlobeFS.glsl +10 -6
  454. package/Source/Shaders/GlobeFS.js +10 -6
  455. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  456. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  457. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  458. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  459. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  460. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  461. package/Source/Shaders/Model/ModelFS.glsl +105 -0
  462. package/Source/Shaders/Model/ModelFS.js +105 -0
  463. package/Source/Shaders/VectorCommon.glsl +178 -0
  464. package/Source/Shaders/VectorCommon.js +180 -0
  465. package/Source/ThirdParty/zip-module.wasm +0 -0
  466. package/Source/Widget/CesiumWidget.js +30 -0
  467. package/Source/Workers/createMvtTile.js +39 -0
  468. package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  469. package/Source/Workers/incrementallyBuildTerrainPicker.js +2 -0
  470. package/index.js +214 -184
  471. package/package.json +13 -13
@@ -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 ColumbusWorlds from "./ColumbusWorlds.js";
49
50
  import CreditDisplay from "./CreditDisplay.js";
50
51
  import DebugCameraPrimitive from "./DebugCameraPrimitive.js";
@@ -70,6 +71,7 @@ import SceneTransitioner from "./SceneTransitioner.js";
70
71
  import ScreenSpaceCameraController from "./ScreenSpaceCameraController.js";
71
72
  import ShadowMap from "./ShadowMap.js";
72
73
  import SharedContext from "../Renderer/SharedContext.js";
74
+ import Snapping from "./Snapping.js";
73
75
  import SpecularEnvironmentCubeMap from "./SpecularEnvironmentCubeMap.js";
74
76
  import StencilConstants from "./StencilConstants.js";
75
77
  import SunLight from "./SunLight.js";
@@ -109,9 +111,9 @@ const requestRenderAfterFrame = function (scene) {
109
111
  * @param {boolean} [options.scene3DOnly=false] If true, optimizes memory use and performance for 3D mode but disables the ability to use 2D or Columbus View.
110
112
  * @param {boolean} [options.shadows=false] Determines if shadows are cast by light sources.
111
113
  * @param {MapMode2D} [options.mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.
112
- * @param {boolean} [options.columbusRepeatWorlds=false] If true, the Columbus View map repeats horizontally: translated
113
- * copies of the globe surface tiles are rendered beyond the ±180° meridian so the map, entity placement, and
114
- * picking continue seamlessly across the antimeridian.
114
+ * @param {boolean} [options.columbusRepeatWorlds=false] If true, the 2D or Columbus View map repeats horizontally:
115
+ * translated copies of the globe surface tiles are rendered beyond the ±180° meridian so the map, entity
116
+ * placement, and picking continue seamlessly across the antimeridian.
115
117
  * @param {boolean} [options.requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.
116
118
  * @param {number} [options.maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.
117
119
  * @param {number} [options.depthPlaneEllipsoidOffset=0.0] Adjust the DepthPlane to address rendering artefacts below ellipsoid zero elevation.
@@ -245,6 +247,8 @@ function Scene(options) {
245
247
  this._preRender = new Event();
246
248
  this._postRender = new Event();
247
249
 
250
+ this._controllerHost = new ControllerHost();
251
+
248
252
  this._minimumDisableDepthTestDistance = 0.0;
249
253
  this._debugInspector = new DebugInspector();
250
254
 
@@ -775,6 +779,15 @@ function Scene(options) {
775
779
  */
776
780
  this._enableEdgeVisibility = false;
777
781
 
782
+ /**
783
+ * Whether or not to enable the planar fill feature-ID pre-pass.
784
+ * Updated each frame from FrameState.planarFillRequested.
785
+ * @type {boolean}
786
+ * @default false
787
+ * @private
788
+ */
789
+ this._enablePlanarFillId = false;
790
+
778
791
  // Give frameState, camera, and screen space camera controller initial state before rendering
779
792
  updateFrameNumber(this, 0.0, JulianDate.now());
780
793
  this.updateFrameState();
@@ -1084,6 +1097,25 @@ Object.defineProperties(Scene.prototype, {
1084
1097
  },
1085
1098
  },
1086
1099
 
1100
+ /**
1101
+ * Collects an array of <code>Controller</code> objects that can be registered with the scene to handle input events, camera animations, and other interactions.
1102
+ * @see {@link Controller}
1103
+ * @type {ControllerHost}
1104
+ * @memberof Scene.prototype
1105
+ * @readonly
1106
+ * @example
1107
+ * scene.screenSpaceCameraController.enableInputs = false;
1108
+ * scene.screenSpaceCameraController.enableCollisionDetection = false;
1109
+ *
1110
+ * const tiltOrbitController = new Cesium.ScreenSpaceTiltOrbitCameraController();
1111
+ * scene.controllerHost.registerController(tiltOrbitController, scene.canvas.parentNode);
1112
+ */
1113
+ controllerHost: {
1114
+ get: function () {
1115
+ return this._controllerHost;
1116
+ },
1117
+ },
1118
+
1087
1119
  /**
1088
1120
  * Gets the controller for camera input handling.
1089
1121
  * @memberof Scene.prototype
@@ -1232,6 +1264,17 @@ Object.defineProperties(Scene.prototype, {
1232
1264
  },
1233
1265
  },
1234
1266
 
1267
+ /**
1268
+ * @memberof Scene.prototype
1269
+ * @type {VectorProvider}
1270
+ * @ignore
1271
+ */
1272
+ vectorProvider: {
1273
+ get: function () {
1274
+ return this.globe?.vectorProvider;
1275
+ },
1276
+ },
1277
+
1235
1278
  /**
1236
1279
  * Gets the event that will be raised before the scene is updated or rendered. Subscribers to the event
1237
1280
  * receive the Scene instance as the first parameter and the current time as the second parameter.
@@ -1530,11 +1573,12 @@ Object.defineProperties(Scene.prototype, {
1530
1573
  },
1531
1574
 
1532
1575
  /**
1533
- * Gets or sets whether the Columbus View map repeats horizontally. When true,
1534
- * translated copies of the globe surface tiles are rendered beyond the ±180°
1535
- * meridian, and entity placement/picking wrap to the copy nearest the camera,
1536
- * so editing and animation work seamlessly across the antimeridian.
1537
- * Only has an effect in {@link SceneMode.COLUMBUS_VIEW}.
1576
+ * Gets or sets whether the 2D or Columbus View map repeats horizontally. When
1577
+ * true, translated copies of the globe surface tiles are rendered beyond the
1578
+ * ±180° meridian, and entity placement/picking wrap to the copy nearest the
1579
+ * camera, so editing and animation work seamlessly across the antimeridian.
1580
+ * Only has an effect in {@link SceneMode.SCENE2D} and
1581
+ * {@link SceneMode.COLUMBUS_VIEW}.
1538
1582
  * @memberof Scene.prototype
1539
1583
  *
1540
1584
  * @type {boolean}
@@ -1795,6 +1839,16 @@ function updateDerivedCommands(scene, command, shadowsDirty) {
1795
1839
  derivedCommands.picking,
1796
1840
  );
1797
1841
  }
1842
+ // Snap derived commands are only created on demand, during a snapping pass,
1843
+ // so applications that never call Scene.snap pay no shader-derivation cost.
1844
+ if (defined(command.snapId) && frameState.passes.snap) {
1845
+ derivedCommands.snapping = DerivedCommand.createSnapDerivedCommand(
1846
+ scene,
1847
+ command,
1848
+ context,
1849
+ derivedCommands.snapping,
1850
+ );
1851
+ }
1798
1852
  if (frameState.pickingMetadata && command.pickMetadataAllowed) {
1799
1853
  command.pickedMetadataInfo = frameState.pickedMetadataInfo;
1800
1854
  if (defined(command.pickedMetadataInfo)) {
@@ -1892,12 +1946,17 @@ Scene.prototype.updateDerivedCommands = function (command) {
1892
1946
  const needsUpdateForMetadataPicking =
1893
1947
  frameState.pickingMetadata &&
1894
1948
  pickedMetadataInfoChanged(command, frameState);
1949
+ const needsUpdateForSnap =
1950
+ frameState.passes.snap &&
1951
+ defined(command.snapId) &&
1952
+ !defined(derivedCommands.snapping);
1895
1953
  command.dirty =
1896
1954
  command.dirty ||
1897
1955
  needsLogDepthDerivedCommands ||
1898
1956
  needsHdrCommands ||
1899
1957
  needsDerivedCommands ||
1900
- needsUpdateForMetadataPicking;
1958
+ needsUpdateForMetadataPicking ||
1959
+ needsUpdateForSnap;
1901
1960
 
1902
1961
  if (!command.dirty) {
1903
1962
  return;
@@ -1985,6 +2044,7 @@ Scene.prototype.clearPasses = function (passes) {
1985
2044
  passes.render = false;
1986
2045
  passes.pick = false;
1987
2046
  passes.pickVoxel = false;
2047
+ passes.snap = false;
1988
2048
  passes.depth = false;
1989
2049
  passes.postProcess = false;
1990
2050
  passes.offscreen = false;
@@ -2271,6 +2331,21 @@ function executeCommand(command, scene, passState, debugFramebuffer) {
2271
2331
 
2272
2332
  if (passes.pick || passes.depth) {
2273
2333
  if (passes.pick && !passes.depth) {
2334
+ if (frameState.passes.snap) {
2335
+ // Snapping pass: only commands with a snap variant write the float
2336
+ // snap payload. Commands without one (no snapId, e.g. globe/terrain)
2337
+ // execute depth-only so they still occlude snappable geometry behind
2338
+ // them without polluting the RGBA32F snap framebuffer with RGBA8
2339
+ // pick colors.
2340
+ if (defined(command.derivedCommands.snapping)) {
2341
+ command = command.derivedCommands.snapping.snapCommand;
2342
+ command.execute(context, passState);
2343
+ } else if (defined(command.derivedCommands.depth)) {
2344
+ command = command.derivedCommands.depth.depthOnlyCommand;
2345
+ command.execute(context, passState);
2346
+ }
2347
+ return;
2348
+ }
2274
2349
  if (
2275
2350
  frameState.pickingMetadata &&
2276
2351
  defined(command.derivedCommands.pickingMetadata)
@@ -2492,6 +2567,7 @@ function createWorkingFrustum(camera) {
2492
2567
  *
2493
2568
  * @param {Scene} scene The scene.
2494
2569
  * @returns {Function} A function to execute translucent commands.
2570
+ * @ignore
2495
2571
  */
2496
2572
  function obtainTranslucentCommandExecutionFunction(scene) {
2497
2573
  if (scene._environmentState.useOIT) {
@@ -2993,6 +3069,77 @@ function executeColumbusWorldCopyClassification(
2993
3069
  uniformState.updateFrustum(frustum);
2994
3070
  }
2995
3071
 
3072
+ /**
3073
+ * Execute the planar fill feature-ID pre-pass.
3074
+ *
3075
+ * Non-behind planar fill geometry writes its per-fragment feature ID into the
3076
+ * planar fill ID framebuffer. This allows behind fills in the main 3D tile
3077
+ * pass to check whether the existing pixel belongs to the same logical object.
3078
+ *
3079
+ * @param {Scene} scene
3080
+ * @param {PassState} passState
3081
+ * @param {FrustumCommands} frustumCommands
3082
+ * @private
3083
+ */
3084
+ function performPlanarFillIdPass(scene, passState, frustumCommands) {
3085
+ const { context } = scene;
3086
+ const { uniformState } = context;
3087
+
3088
+ uniformState.updatePass(Pass.CESIUM_3D_TILE_PLANAR_FILL_ID);
3089
+
3090
+ // Default to a blank texture so shaders always have something to sample.
3091
+ uniformState.planarFillIdTexture = context.defaultTexture;
3092
+
3093
+ const view = scene._view;
3094
+ const fb = view && view.planarFillIdFramebuffer;
3095
+
3096
+ const commands = frustumCommands.commands[Pass.CESIUM_3D_TILE_PLANAR_FILL_ID];
3097
+ const commandCount =
3098
+ frustumCommands.indices[Pass.CESIUM_3D_TILE_PLANAR_FILL_ID];
3099
+
3100
+ if (commandCount === 0) {
3101
+ return;
3102
+ }
3103
+
3104
+ if (scene._enablePlanarFillId && defined(fb) && defined(fb.framebuffer)) {
3105
+ const originalFramebuffer = passState.framebuffer;
3106
+ passState.framebuffer = fb.framebuffer;
3107
+
3108
+ // Clear to (0,0,0,0) — feature ID 0 means "no planar fill here".
3109
+ const clearCommand = fb.getClearCommand(new Color(0.0, 0.0, 0.0, 0.0));
3110
+ clearCommand.execute(context, passState);
3111
+
3112
+ for (let j = 0; j < commandCount; ++j) {
3113
+ executeCommand(commands[j], scene, passState);
3114
+ }
3115
+
3116
+ passState.framebuffer = originalFramebuffer;
3117
+ }
3118
+ }
3119
+
3120
+ /**
3121
+ * Execute edge commands that should render directly to the main framebuffer
3122
+ * (EDGES_ONLY mode). These edges bypass the MRT edge framebuffer and render
3123
+ * on top of surface geometry.
3124
+ *
3125
+ * @param {Scene} scene
3126
+ * @param {PassState} passState
3127
+ * @param {FrustumCommands} frustumCommands
3128
+ *
3129
+ * @private
3130
+ */
3131
+ function performCesium3DTileEdgesDirectPass(scene, passState, frustumCommands) {
3132
+ scene.context.uniformState.updatePass(Pass.CESIUM_3D_TILE_EDGES_DIRECT);
3133
+
3134
+ const commands = frustumCommands.commands[Pass.CESIUM_3D_TILE_EDGES_DIRECT];
3135
+ const commandCount =
3136
+ frustumCommands.indices[Pass.CESIUM_3D_TILE_EDGES_DIRECT];
3137
+
3138
+ for (let j = 0; j < commandCount; ++j) {
3139
+ executeCommand(commands[j], scene, passState);
3140
+ }
3141
+ }
3142
+
2996
3143
  /**
2997
3144
  * Execute the draw commands for all the render passes.
2998
3145
  *
@@ -3007,6 +3154,10 @@ function executeCommands(scene, passState) {
3007
3154
 
3008
3155
  uniformState.updateCamera(camera);
3009
3156
 
3157
+ // Ensure planar fill ID texture is always available (even during edge pass)
3158
+ // so that shaders referencing czm_planarFillIdTexture never see undefined.
3159
+ uniformState.planarFillIdTexture = context.defaultTexture;
3160
+
3010
3161
  const frustum = createWorkingFrustum(camera);
3011
3162
  frustum.near = camera.frustum.near;
3012
3163
  frustum.far = camera.frustum.far;
@@ -3040,7 +3191,8 @@ function executeCommands(scene, passState) {
3040
3191
  !renderTranslucentDepthForPick &&
3041
3192
  useGlobeDepthFramebuffer &&
3042
3193
  frameState.columbusRepeatWorlds === true &&
3043
- scene.mode === SceneMode.COLUMBUS_VIEW &&
3194
+ (scene.mode === SceneMode.SCENE2D ||
3195
+ scene.mode === SceneMode.COLUMBUS_VIEW) &&
3044
3196
  (passes.render || passes.pick || passes.pickVoxel);
3045
3197
 
3046
3198
  const {
@@ -3212,6 +3364,23 @@ function executeCommands(scene, passState) {
3212
3364
  scene.context.defaultTexture;
3213
3365
  }
3214
3366
 
3367
+ // Planar fill feature-ID pre-pass: write feature IDs from non-behind
3368
+ // planar fill geometry so that behind fills can test same-object.
3369
+ performPlanarFillIdPass(scene, passState, frustumCommands);
3370
+
3371
+ if (
3372
+ scene._enablePlanarFillId &&
3373
+ defined(scene._view) &&
3374
+ defined(scene._view.planarFillIdFramebuffer)
3375
+ ) {
3376
+ const pfIdTexture = scene._view.planarFillIdFramebuffer.idTexture;
3377
+ uniformState.planarFillIdTexture = defined(pfIdTexture)
3378
+ ? pfIdTexture
3379
+ : context.defaultTexture;
3380
+ } else {
3381
+ uniformState.planarFillIdTexture = context.defaultTexture;
3382
+ }
3383
+
3215
3384
  if (!useInvertClassification || picking || renderTranslucentDepthForPick) {
3216
3385
  // Common/fastest path. Draw 3D Tiles and classification normally.
3217
3386
 
@@ -3321,6 +3490,9 @@ function executeCommands(scene, passState) {
3321
3490
 
3322
3491
  performPass(frustumCommands, Pass.OPAQUE);
3323
3492
 
3493
+ // Draw direct edges (EDGES_ONLY mode) after opaque surfaces
3494
+ performCesium3DTileEdgesDirectPass(scene, passState, frustumCommands);
3495
+
3324
3496
  performGaussianSplatPass(scene, passState, frustumCommands);
3325
3497
 
3326
3498
  if (index !== 0 && scene.mode !== SceneMode.SCENE2D) {
@@ -3391,7 +3563,8 @@ function executeCommands(scene, passState) {
3391
3563
 
3392
3564
  if (
3393
3565
  frameState.columbusRepeatWorlds === true &&
3394
- frameState.mode === SceneMode.COLUMBUS_VIEW &&
3566
+ (frameState.mode === SceneMode.SCENE2D ||
3567
+ frameState.mode === SceneMode.COLUMBUS_VIEW) &&
3395
3568
  (passes.render || passes.pick || passes.pickVoxel)
3396
3569
  ) {
3397
3570
  executeColumbusWorldCopyCommands(
@@ -4125,6 +4298,7 @@ function updateAndRenderPrimitives(scene) {
4125
4298
 
4126
4299
  // Reset per-frame edge visibility request flag before primitives update
4127
4300
  frameState.edgeVisibilityRequested = false;
4301
+ frameState.planarFillRequested = false;
4128
4302
 
4129
4303
  scene._groundPrimitives.update(frameState);
4130
4304
  scene._primitives.update(frameState);
@@ -4137,6 +4311,10 @@ function updateAndRenderPrimitives(scene) {
4137
4311
  scene._enableEdgeVisibility = true;
4138
4312
  }
4139
4313
 
4314
+ // True only while at least one planar fill primitive is rendering;
4315
+ // the request flag is renewed each frame by ModelSceneGraph.
4316
+ scene._enablePlanarFillId = frameState.planarFillRequested;
4317
+
4140
4318
  updateDebugFrustumPlanes(scene);
4141
4319
  updateShadowMaps(scene);
4142
4320
 
@@ -4155,6 +4333,7 @@ function updateAndClearFramebuffers(scene, passState, clearColor) {
4155
4333
  const picking = passes.pick || passes.pickVoxel;
4156
4334
  if (defined(view.globeDepth)) {
4157
4335
  view.globeDepth.picking = picking;
4336
+ view.globeDepth.snapping = passes.snap;
4158
4337
  }
4159
4338
  const useWebVR = environmentState.useWebVR;
4160
4339
 
@@ -4260,6 +4439,15 @@ function updateAndClearFramebuffers(scene, passState, clearColor) {
4260
4439
  view.edgeFramebuffer.update(context, view.viewport, scene._hdr);
4261
4440
  }
4262
4441
 
4442
+ // Update planar fill ID framebuffer
4443
+ const usePlanarFillIdFramebuffer = !picking && scene._enablePlanarFillId;
4444
+ if (usePlanarFillIdFramebuffer) {
4445
+ view.planarFillIdFramebuffer.update(context, view.viewport, scene._hdr);
4446
+ } else if (!picking) {
4447
+ // Release GPU resources while unused; recreated on demand by update().
4448
+ view.planarFillIdFramebuffer.releaseResources();
4449
+ }
4450
+
4263
4451
  if (useInvertClassification) {
4264
4452
  let depthFramebuffer;
4265
4453
  if (frameState.invertClassificationColor.alpha === 1.0) {
@@ -4816,6 +5004,8 @@ Scene.prototype.render = function (time) {
4816
5004
  time = JulianDate.now();
4817
5005
  }
4818
5006
 
5007
+ this._controllerHost.update(this, time);
5008
+
4819
5009
  const cameraChanged = this._view.checkForCameraUpdates(this);
4820
5010
  if (cameraChanged) {
4821
5011
  this._globeHeightDirty = true;
@@ -4953,6 +5143,42 @@ Scene.prototype.pick = function (windowPosition, width, height) {
4953
5143
  return this._picking.pick(this, windowPosition, width, height, 1)[0];
4954
5144
  };
4955
5145
 
5146
+ /**
5147
+ * The result of a snap operation. See {@link Scene#snap}.
5148
+ *
5149
+ * @typedef {object} SceneSnapResult
5150
+ * @property {object} object The snapped primitive or feature.
5151
+ * @property {Cartesian3} position The world-space position of the snap point, un-projected from the snap framebuffer's eye-space depth.
5152
+ * @property {Cartesian2} screenPosition The window coordinates of the snap point.
5153
+ * @property {boolean} isEdge <code>true</code> if the snap point lies on an edge; <code>false</code> if it lies on a surface.
5154
+ *
5155
+ * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
5156
+ */
5157
+
5158
+ /**
5159
+ * Returns the best snap target in a screen-space region around <code>windowPosition</code>.
5160
+ * Edges are preferred over surfaces; among hits of the same kind the one
5161
+ * nearest the cursor wins. Returns <code>undefined</code> if the region contains
5162
+ * no snappable geometry.
5163
+ * <p>
5164
+ * Only primitives rendered through the Model pipeline (e.g. 3D Tiles and glTF
5165
+ * models) are snappable. Snapping requires float color attachments
5166
+ * (WebGL2 with <code>EXT_color_buffer_float</code>); if unsupported, this
5167
+ * function returns <code>undefined</code>.
5168
+ * </p>
5169
+ *
5170
+ * @param {Cartesian2} windowPosition Window coordinates at the center of the search region.
5171
+ * @param {object} [options] Object with the following properties:
5172
+ * @param {number} [options.width=25] Width of the search region in pixels.
5173
+ * @param {number} [options.height=options.width] Height of the search region in pixels.
5174
+ * @returns {SceneSnapResult | undefined} The best snap target in the region, or <code>undefined</code> if there is none.
5175
+ *
5176
+ * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
5177
+ */
5178
+ Scene.prototype.snap = function (windowPosition, options) {
5179
+ return Snapping.snap(this, windowPosition, options);
5180
+ };
5181
+
4956
5182
  /**
4957
5183
  * Performs the same operation as Scene.pick but asynchonosly without blocking the main render thread.
4958
5184
  * Requires WebGL2 else using fallback.
@@ -135,13 +135,14 @@ SceneTransforms.worldWithEyeOffsetToWindowCoordinates = function (
135
135
  const camera = scene.camera;
136
136
 
137
137
  if (
138
- frameState.mode === SceneMode.COLUMBUS_VIEW &&
138
+ (frameState.mode === SceneMode.SCENE2D ||
139
+ frameState.mode === SceneMode.COLUMBUS_VIEW) &&
139
140
  frameState.columbusRepeatWorlds === true
140
141
  ) {
141
- // Columbus repeat worlds: rendering replicates the data onto every world
142
- // copy, so screen-space consumers (HTML overlays, editor handles) must
143
- // project onto the copy nearest the camera as well. Columbus world
144
- // coordinates are (height, u, v), so the copy offset applies to y.
142
+ // Repeat worlds: rendering replicates the data onto every world copy, so
143
+ // screen-space consumers (HTML overlays, editor handles) must project onto
144
+ // the copy nearest the camera as well. Both 2D and Columbus View place the
145
+ // map-u axis on world y, so the copy offset applies to y.
145
146
  actualPosition.y = ColumbusWorlds.nearestWorldU(
146
147
  camera.positionWC.y,
147
148
  actualPosition.y,
@@ -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 +=
@@ -0,0 +1,121 @@
1
+ import BoundingRectangle from "../Core/BoundingRectangle.js";
2
+ import defined from "../Core/defined.js";
3
+ import destroyObject from "../Core/destroyObject.js";
4
+ import PixelFormat from "../Core/PixelFormat.js";
5
+ import FramebufferManager from "../Renderer/FramebufferManager.js";
6
+ import PassState from "../Renderer/PassState.js";
7
+ import PixelDatatype from "../Renderer/PixelDatatype.js";
8
+
9
+ /**
10
+ * @private
11
+ */
12
+ function SnapFramebuffer(context) {
13
+ const passState = new PassState(context);
14
+ passState.blendingEnabled = false;
15
+ passState.scissorTest = {
16
+ enabled: true,
17
+ rectangle: new BoundingRectangle(),
18
+ };
19
+ passState.viewport = new BoundingRectangle();
20
+
21
+ this._context = context;
22
+ this._fb = new FramebufferManager({
23
+ depthStencil: true,
24
+ pixelDatatype: PixelDatatype.FLOAT,
25
+ pixelFormat: PixelFormat.RGBA,
26
+ });
27
+ this._passState = passState;
28
+ }
29
+
30
+ function getSnapObjectsFromPixels(context, pixels, width, height) {
31
+ const max = Math.max(width, height);
32
+ const length = max * max;
33
+ const halfWidth = Math.floor(width * 0.5);
34
+ const halfHeight = Math.floor(height * 0.5);
35
+
36
+ let x = 0;
37
+ let y = 0;
38
+ let dx = 0;
39
+ let dy = -1;
40
+
41
+ const results = [];
42
+ for (let i = 0; i < length; ++i) {
43
+ if (
44
+ -halfWidth <= x &&
45
+ x <= halfWidth &&
46
+ -halfHeight <= y &&
47
+ y <= halfHeight
48
+ ) {
49
+ const index = 4 * ((halfHeight - y) * width + x + halfWidth);
50
+
51
+ const pickColor = pixels[index];
52
+ const object = context.getObjectByPickColor(pickColor);
53
+ if (defined(object)) {
54
+ results.push({
55
+ object: object,
56
+ isEdge: pixels[index + 1] > 0.0,
57
+ depth: pixels[index + 2],
58
+ x: x,
59
+ y: y,
60
+ });
61
+ }
62
+ }
63
+
64
+ if (x === y || (x < 0 && -x === y) || (x > 0 && x === 1 - y)) {
65
+ const temp = dx;
66
+ dx = -dy;
67
+ dy = temp;
68
+ }
69
+
70
+ x += dx;
71
+ y += dy;
72
+ }
73
+
74
+ return results;
75
+ }
76
+
77
+ SnapFramebuffer.prototype.begin = function (screenSpaceRectangle, viewport) {
78
+ const context = this._context;
79
+ const { width, height } = viewport;
80
+
81
+ BoundingRectangle.clone(
82
+ screenSpaceRectangle,
83
+ this._passState.scissorTest.rectangle,
84
+ );
85
+
86
+ this._fb.update(context, width, height);
87
+ this._passState.framebuffer = this._fb.framebuffer;
88
+
89
+ this._passState.viewport.width = width;
90
+ this._passState.viewport.height = height;
91
+
92
+ return this._passState;
93
+ };
94
+
95
+ SnapFramebuffer.prototype.end = function (screenSpaceRectangle) {
96
+ const width = screenSpaceRectangle.width ?? 1.0;
97
+ const height = screenSpaceRectangle.height ?? 1.0;
98
+
99
+ const context = this._context;
100
+ const pixels = context.readPixels({
101
+ x: screenSpaceRectangle.x,
102
+ y: screenSpaceRectangle.y,
103
+ width: width,
104
+ height: height,
105
+ pixelDatatype: PixelDatatype.FLOAT,
106
+ framebuffer: this._fb.framebuffer,
107
+ });
108
+
109
+ return getSnapObjectsFromPixels(context, pixels, width, height);
110
+ };
111
+
112
+ SnapFramebuffer.prototype.isDestroyed = function () {
113
+ return false;
114
+ };
115
+
116
+ SnapFramebuffer.prototype.destroy = function () {
117
+ this._fb.destroy();
118
+ return destroyObject(this);
119
+ };
120
+
121
+ export default SnapFramebuffer;