@hztxi/cesium-engine 25.0.7 → 26.2.1

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 (412) hide show
  1. package/Build/Workers/chunk-2NCNUVAT.js +56 -0
  2. package/Build/Workers/chunk-2ZYRUVVU.js +301 -0
  3. package/Build/Workers/chunk-36IU7N4V.js +1284 -0
  4. package/Build/Workers/chunk-3BDLET5S.js +198 -0
  5. package/Build/Workers/chunk-3PRHI4KX.js +241 -0
  6. package/Build/Workers/chunk-3R6E2SH4.js +672 -0
  7. package/Build/Workers/chunk-3ZKKXEXL.js +415 -0
  8. package/Build/Workers/chunk-47KVKPTO.js +415 -0
  9. package/Build/Workers/chunk-4N227IPR.js +973 -0
  10. package/Build/Workers/chunk-4P6OAPBM.js +97 -0
  11. package/Build/Workers/chunk-4ZOLEPZK.js +519 -0
  12. package/Build/Workers/chunk-5EF3WWQG.js +352 -0
  13. package/Build/Workers/chunk-5I76476T.js +288 -0
  14. package/Build/Workers/chunk-5PBZKBAP.js +511 -0
  15. package/Build/Workers/chunk-5RVAAW26.js +82 -0
  16. package/Build/Workers/chunk-5VWK76PO.js +511 -0
  17. package/Build/Workers/chunk-77DBX23X.js +455 -0
  18. package/Build/Workers/chunk-7GQOWCSN.js +959 -0
  19. package/Build/Workers/chunk-7J2ONMKC.js +198 -0
  20. package/Build/Workers/chunk-7MHUHXZZ.js +219 -0
  21. package/Build/Workers/chunk-7MQPHOAS.js +455 -0
  22. package/Build/Workers/chunk-7NJ5O7TP.js +387 -0
  23. package/Build/Workers/chunk-7Y642MCO.js +352 -0
  24. package/Build/Workers/chunk-7ZFKBLUE.js +1054 -0
  25. package/Build/Workers/chunk-A7LGY5XS.js +140 -0
  26. package/Build/Workers/chunk-AN2NVYL6.js +1483 -0
  27. package/Build/Workers/chunk-B7PT2VL5.js +630 -0
  28. package/Build/Workers/chunk-C6XQGBPV.js +476 -0
  29. package/Build/Workers/chunk-CAEC5DA2.js +57 -0
  30. package/Build/Workers/chunk-CBCOHH5O.js +837 -0
  31. package/Build/Workers/chunk-CEMXKBQO.js +1800 -0
  32. package/Build/Workers/chunk-CKW3STKA.js +1067 -0
  33. package/Build/Workers/chunk-CV5RICKT.js +1992 -0
  34. package/Build/Workers/chunk-DBWSISJT.js +56 -0
  35. package/Build/Workers/chunk-DSBSPPPJ.js +1344 -0
  36. package/Build/Workers/chunk-DSGLDRTI.js +278 -0
  37. package/Build/Workers/chunk-DXD7OPSP.js +1992 -0
  38. package/Build/Workers/chunk-DXECZBSA.js +368 -0
  39. package/Build/Workers/chunk-DZIRO6ZK.js +682 -0
  40. package/Build/Workers/chunk-E4CRPGX5.js +140 -0
  41. package/Build/Workers/chunk-E4IVMEBH.js +52 -0
  42. package/Build/Workers/chunk-ECN3VUMA.js +73 -0
  43. package/Build/Workers/chunk-ECSKVHUB.js +476 -0
  44. package/Build/Workers/chunk-EL4B5CSQ.js +162 -0
  45. package/Build/Workers/chunk-FAYBQGKO.js +219 -0
  46. package/Build/Workers/chunk-FGCXPEZM.js +3201 -0
  47. package/Build/Workers/chunk-FHCRXPA6.js +44 -0
  48. package/Build/Workers/chunk-FQ42MT7M.js +58 -0
  49. package/Build/Workers/chunk-FQDYQG4P.js +1284 -0
  50. package/Build/Workers/chunk-FTCBY5HH.js +138 -0
  51. package/Build/Workers/chunk-GI5RWJAY.js +101 -0
  52. package/Build/Workers/chunk-GNLMSDRO.js +945 -0
  53. package/Build/Workers/chunk-GVUJ6O3R.js +73 -0
  54. package/Build/Workers/chunk-HCGU7OCG.js +97 -0
  55. package/Build/Workers/chunk-HRIPVWSC.js +58 -0
  56. package/Build/Workers/chunk-IC3BR6SC.js +102 -0
  57. package/Build/Workers/chunk-IU3YAYPT.js +1344 -0
  58. package/Build/Workers/chunk-J7MZR7B2.js +1483 -0
  59. package/Build/Workers/chunk-KSIEJYNL.js +3822 -0
  60. package/Build/Workers/chunk-KT3GG7AW.js +754 -0
  61. package/Build/Workers/chunk-KYCEM22I.js +1800 -0
  62. package/Build/Workers/chunk-LJTQW46H.js +57 -0
  63. package/Build/Workers/chunk-LMQGYJME.js +672 -0
  64. package/Build/Workers/chunk-LOBYJQA4.js +76 -0
  65. package/Build/Workers/chunk-LOF32O7F.js +163 -0
  66. package/Build/Workers/chunk-LOTIJA7D.js +124 -0
  67. package/Build/Workers/chunk-M7Z3MPAX.js +973 -0
  68. package/Build/Workers/chunk-MHNLTQHO.js +3201 -0
  69. package/Build/Workers/chunk-ML7OMD72.js +2342 -0
  70. package/Build/Workers/chunk-NBTGXEMT.js +945 -0
  71. package/Build/Workers/chunk-NQZC37F7.js +38 -0
  72. package/Build/Workers/chunk-O3X3D2Z3.js +352 -0
  73. package/Build/Workers/chunk-OBUIHPKF.js +352 -0
  74. package/Build/Workers/chunk-PAEWNYIV.js +138 -0
  75. package/Build/Workers/chunk-PANJ7YH6.js +102 -0
  76. package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
  77. package/Build/Workers/chunk-PIIUGRQD.js +387 -0
  78. package/Build/Workers/chunk-POKD22OT.js +2719 -0
  79. package/Build/Workers/chunk-PQMA7MFS.js +9237 -0
  80. package/Build/Workers/chunk-PURIPUSY.js +682 -0
  81. package/Build/Workers/chunk-QQZPPXY4.js +3822 -0
  82. package/Build/Workers/chunk-QXLQLGL2.js +1067 -0
  83. package/Build/Workers/chunk-RC4YC3VU.js +278 -0
  84. package/Build/Workers/chunk-RGNNWVR6.js +171 -0
  85. package/Build/Workers/chunk-SBBIEHYT.js +44 -0
  86. package/Build/Workers/chunk-SWVZTU6X.js +305 -0
  87. package/Build/Workers/chunk-T3EUPM5A.js +454 -0
  88. package/Build/Workers/chunk-TA6IU2XL.js +171 -0
  89. package/Build/Workers/chunk-TLSGD5TR.js +280 -0
  90. package/Build/Workers/chunk-TOXDLWKZ.js +368 -0
  91. package/Build/Workers/chunk-TZBM6TAB.js +124 -0
  92. package/Build/Workers/chunk-U2OY6MX6.js +398 -0
  93. package/Build/Workers/chunk-UCY4B5EV.js +288 -0
  94. package/Build/Workers/chunk-V52FEPCV.js +754 -0
  95. package/Build/Workers/chunk-VBEXZBG5.js +147 -0
  96. package/Build/Workers/chunk-VC76B6GM.js +959 -0
  97. package/Build/Workers/chunk-VCUOYHWC.js +519 -0
  98. package/Build/Workers/chunk-VJIL5H6K.js +2719 -0
  99. package/Build/Workers/chunk-VMF7KOGY.js +162 -0
  100. package/Build/Workers/chunk-W5OCKMPJ.js +101 -0
  101. package/Build/Workers/chunk-XHT5SVP4.js +52 -0
  102. package/Build/Workers/chunk-XITBARMZ.js +2342 -0
  103. package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
  104. package/Build/Workers/chunk-XZ6HDXKM.js +76 -0
  105. package/Build/Workers/chunk-Y7NDFEQ3.js +398 -0
  106. package/Build/Workers/chunk-YBBQDYX2.js +301 -0
  107. package/Build/Workers/chunk-YHPYPVAB.js +837 -0
  108. package/Build/Workers/chunk-YNKK6BXY.js +454 -0
  109. package/Build/Workers/chunk-YRAJ74HR.js +305 -0
  110. package/Build/Workers/chunk-YULTZK5O.js +147 -0
  111. package/Build/Workers/chunk-YUNQYP3Z.js +9237 -0
  112. package/Build/Workers/chunk-Z7BONRW2.js +241 -0
  113. package/Build/Workers/chunk-ZK2R3DEJ.js +1054 -0
  114. package/Build/Workers/combineGeometry.js +24 -24
  115. package/Build/Workers/createBoxGeometry.js +18 -18
  116. package/Build/Workers/createBoxOutlineGeometry.js +18 -18
  117. package/Build/Workers/createCircleGeometry.js +26 -26
  118. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  119. package/Build/Workers/createCoplanarPolygonGeometry.js +39 -39
  120. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +33 -33
  121. package/Build/Workers/createCorridorGeometry.js +36 -37
  122. package/Build/Workers/createCorridorOutlineGeometry.js +34 -35
  123. package/Build/Workers/createCylinderGeometry.js +20 -20
  124. package/Build/Workers/createCylinderOutlineGeometry.js +20 -20
  125. package/Build/Workers/createEllipseGeometry.js +26 -26
  126. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  127. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  128. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  129. package/Build/Workers/createFrustumGeometry.js +18 -18
  130. package/Build/Workers/createFrustumOutlineGeometry.js +20 -20
  131. package/Build/Workers/createGeometry.js +25 -24
  132. package/Build/Workers/createGroundPolylineGeometry.js +26 -26
  133. package/Build/Workers/createMvtTile.js +111 -19
  134. package/Build/Workers/createPlaneGeometry.js +18 -18
  135. package/Build/Workers/createPlaneOutlineGeometry.js +17 -17
  136. package/Build/Workers/createPolygonGeometry.js +36 -36
  137. package/Build/Workers/createPolygonOutlineGeometry.js +33 -33
  138. package/Build/Workers/createPolylineGeometry.js +28 -28
  139. package/Build/Workers/createPolylineVolumeGeometry.js +38 -36
  140. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +32 -31
  141. package/Build/Workers/createRectangleGeometry.js +29 -29
  142. package/Build/Workers/createRectangleOutlineGeometry.js +23 -23
  143. package/Build/Workers/createSimplePolylineGeometry.js +26 -26
  144. package/Build/Workers/createSphereGeometry.js +19 -19
  145. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  146. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  147. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  148. package/Build/Workers/createVectorTileGeometries.js +24 -24
  149. package/Build/Workers/createVectorTilePoints.js +13 -13
  150. package/Build/Workers/createVectorTilePolygons.js +22 -22
  151. package/Build/Workers/createVectorTilePolylines.js +14 -14
  152. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -26
  153. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -23
  154. package/Build/Workers/createVerticesFromHeightmap.js +23 -23
  155. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +21 -21
  156. package/Build/Workers/createWallGeometry.js +26 -26
  157. package/Build/Workers/createWallOutlineGeometry.js +26 -26
  158. package/Build/Workers/decodeDraco.js +10 -10
  159. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +993 -2334
  160. package/Build/Workers/decodeI3S.js +10 -10
  161. package/Build/Workers/gaussianSplatSorter.js +4 -4
  162. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  163. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  164. package/Build/Workers/transcodeKTX2.js +6 -6
  165. package/Build/Workers/transferTypedArrayTest.js +1 -1
  166. package/Build/Workers/upsampleQuantizedTerrainMesh.js +23 -23
  167. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -26
  168. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  169. package/Source/Core/BoundingRectangle.js +6 -8
  170. package/Source/Core/BoundingSphere.js +0 -3
  171. package/Source/Core/Cartesian2.js +1 -1
  172. package/Source/Core/Cartesian3.js +1 -1
  173. package/Source/Core/Cartesian4.js +1 -1
  174. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  175. package/Source/Core/Color.js +1 -0
  176. package/Source/Core/ComponentDatatype.js +35 -0
  177. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  178. package/Source/Core/CorridorGeometry.js +2 -4
  179. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  180. package/Source/Core/EarthOrientationParameters.js +2 -2
  181. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  182. package/Source/Core/EllipsoidGeodesic.js +3 -3
  183. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  184. package/Source/Core/Heap.js +1 -1
  185. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  186. package/Source/Core/InterpolationAlgorithm.js +58 -50
  187. package/Source/Core/Ion.js +1 -1
  188. package/Source/Core/JulianDate.js +1 -1
  189. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  190. package/Source/Core/LinearApproximation.js +69 -66
  191. package/Source/Core/MapProjection.js +1 -0
  192. package/Source/Core/Math.js +59 -0
  193. package/Source/Core/Matrix2.js +3 -3
  194. package/Source/Core/Matrix3.js +3 -3
  195. package/Source/Core/Matrix4.js +1 -1
  196. package/Source/Core/OrthographicFrustum.js +1 -1
  197. package/Source/Core/PerspectiveFrustum.js +1 -1
  198. package/Source/Core/PolygonGeometry.js +2 -2
  199. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  200. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  201. package/Source/Core/PolylineGeometry.js +1 -1
  202. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  203. package/Source/Core/Rectangle.js +7 -1
  204. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  205. package/Source/Core/Resource.js +1 -1
  206. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  207. package/Source/Core/SimplePolylineGeometry.js +1 -1
  208. package/Source/Core/TerrainEncoding.js +2 -2
  209. package/Source/Core/TerrainMesh.js +3 -3
  210. package/Source/Core/TerrainPicker.js +180 -168
  211. package/Source/Core/TimeIntervalCollection.js +1 -3
  212. package/Source/Core/Tipsify.js +1 -1
  213. package/Source/Core/Transforms.js +5 -1
  214. package/Source/Core/VectorPipeline.js +1117 -0
  215. package/Source/Core/VectorProvider.js +429 -0
  216. package/Source/Core/WallOutlineGeometry.js +1 -1
  217. package/Source/Core/createColorRamp.js +37 -0
  218. package/Source/Core/getTimestamp.js +4 -2
  219. package/Source/Core/globalTypes.js +25 -0
  220. package/Source/Core/writeTextToCanvas.js +1 -0
  221. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  222. package/Source/DataSources/CzmlDataSource.js +14 -0
  223. package/Source/DataSources/DataSourceDisplay.js +1 -1
  224. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  225. package/Source/DataSources/GeometryVisualizer.js +1 -1
  226. package/Source/DataSources/KmlDataSource.js +529 -557
  227. package/Source/DataSources/PathGraphics.js +8 -1
  228. package/Source/DataSources/PathMode.js +27 -0
  229. package/Source/DataSources/PathVisualizer.js +298 -1
  230. package/Source/DataSources/PolylineVisualizer.js +1 -1
  231. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  232. package/Source/Renderer/AutomaticUniforms.js +23 -0
  233. package/Source/Renderer/Context.js +9 -3
  234. package/Source/Renderer/DrawCommand.js +22 -0
  235. package/Source/Renderer/Framebuffer.js +4 -0
  236. package/Source/Renderer/Pass.js +11 -9
  237. package/Source/Renderer/Texture.js +12 -1
  238. package/Source/Renderer/UniformState.js +7 -0
  239. package/Source/Renderer/VertexArray.js +1 -1
  240. package/Source/Renderer/createUniform.js +346 -239
  241. package/Source/Renderer/createUniformArray.js +494 -381
  242. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  243. package/Source/Scene/ArcGisMapService.js +1 -1
  244. package/Source/Scene/Billboard.js +2 -1
  245. package/Source/Scene/BillboardCollection.js +15 -5
  246. package/Source/Scene/BillboardTexture.js +5 -3
  247. package/Source/Scene/BufferPointCollection.js +11 -1
  248. package/Source/Scene/BufferPolygonCollection.js +26 -0
  249. package/Source/Scene/BufferPolylineCollection.js +2 -0
  250. package/Source/Scene/BufferPrimitiveCollection.js +105 -32
  251. package/Source/Scene/Camera.js +85 -9
  252. package/Source/Scene/CameraEventAggregator.js +30 -18
  253. package/Source/Scene/CameraFlightPath.js +7 -4
  254. package/Source/Scene/Cesium3DTile.js +102 -4
  255. package/Source/Scene/Cesium3DTileContent.js +195 -254
  256. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  257. package/Source/Scene/Cesium3DTileOptimizations.js +4 -6
  258. package/Source/Scene/Cesium3DTileStyle.js +40 -0
  259. package/Source/Scene/Cesium3DTileset.js +213 -8
  260. package/Source/Scene/Cesium3DTilesetTraversal.js +14 -0
  261. package/Source/Scene/ClippingPlaneCollection.js +4 -4
  262. package/Source/Scene/ClippingPolygon.js +2 -0
  263. package/Source/Scene/ClippingPolygonCollection.js +2 -2
  264. package/Source/Scene/Composite3DTileContent.js +254 -292
  265. package/Source/Scene/Controllers/Controller.js +63 -0
  266. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  267. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  268. package/Source/Scene/Controllers/MouseButton.js +32 -0
  269. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  270. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  271. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  272. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  273. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  274. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  275. package/Source/Scene/DerivedCommand.js +98 -0
  276. package/Source/Scene/EdgeDisplayMode.js +50 -0
  277. package/Source/Scene/EdgeFramebuffer.js +1 -5
  278. package/Source/Scene/Empty3DTileContent.js +100 -132
  279. package/Source/Scene/Expression.js +6 -8
  280. package/Source/Scene/FrameState.js +17 -0
  281. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  282. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  283. package/Source/Scene/Geometry3DTileContent.js +151 -185
  284. package/Source/Scene/Globe.js +22 -1
  285. package/Source/Scene/GlobeDepth.js +27 -1
  286. package/Source/Scene/GlobeSurfaceShaderSet.js +637 -540
  287. package/Source/Scene/GlobeSurfaceTile.js +575 -398
  288. package/Source/Scene/GlobeSurfaceTileProvider.js +1412 -1184
  289. package/Source/Scene/GltfBufferViewLoader.js +3 -3
  290. package/Source/Scene/GltfLoader.js +146 -3
  291. package/Source/Scene/GltfLoaderUtil.js +20 -4
  292. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +10 -0
  293. package/Source/Scene/GltfPipeline/removeUnusedElements.js +21 -11
  294. package/Source/Scene/GltfSpzLoader.js +1 -1
  295. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  296. package/Source/Scene/I3SDataProvider.js +1 -1
  297. package/Source/Scene/I3SLayer.js +1 -1
  298. package/Source/Scene/I3SNode.js +2 -2
  299. package/Source/Scene/ImageryLayer.js +2 -2
  300. package/Source/Scene/ImageryLayerCollection.js +190 -6
  301. package/Source/Scene/Implicit3DTileContent.js +192 -216
  302. package/Source/Scene/ImplicitTileCoordinates.js +17 -0
  303. package/Source/Scene/IonImageryProvider.js +1 -5
  304. package/Source/Scene/Label.js +4 -4
  305. package/Source/Scene/LabelCollection.js +4 -1
  306. package/Source/Scene/MVTDataProvider.js +555 -0
  307. package/Source/Scene/Material.js +1 -0
  308. package/Source/Scene/Model/B3dmLoader.js +1 -2
  309. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +82 -312
  310. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +4 -0
  311. package/Source/Scene/Model/I3dmLoader.js +1 -1
  312. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  313. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  314. package/Source/Scene/Model/Model.js +45 -10
  315. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  316. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  317. package/Source/Scene/Model/ModelDrawCommand.js +180 -8
  318. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  319. package/Source/Scene/Model/ModelSceneGraph.js +21 -0
  320. package/Source/Scene/Model/ModelUtility.js +5 -0
  321. package/Source/Scene/Model/PickingPipelineStage.js +29 -0
  322. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  323. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +645 -153
  324. package/Source/Scene/ModelComponents.js +112 -0
  325. package/Source/Scene/Multiple3DTileContent.js +291 -334
  326. package/Source/Scene/MvtLabelCandidates.js +295 -0
  327. package/Source/Scene/MvtLabelManager.js +1069 -0
  328. package/Source/Scene/Picking.js +19 -3
  329. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  330. package/Source/Scene/PntsParser.js +1 -1
  331. package/Source/Scene/PolylineCollection.js +5 -3
  332. package/Source/Scene/PostProcessStage.js +4 -2
  333. package/Source/Scene/QuadtreePrimitive.js +3 -2
  334. package/Source/Scene/ResourceCache.js +7 -4
  335. package/Source/Scene/ResourceCacheKey.js +21 -18
  336. package/Source/Scene/Scene.js +237 -11
  337. package/Source/Scene/SceneTransforms.js +6 -5
  338. package/Source/Scene/ShadowMap.js +9 -3
  339. package/Source/Scene/ShadowMapShader.js +50 -2
  340. package/Source/Scene/SnapFramebuffer.js +121 -0
  341. package/Source/Scene/Snapping.js +184 -0
  342. package/Source/Scene/TerrainFillMesh.js +3 -2
  343. package/Source/Scene/Tileset3DTileContent.js +113 -146
  344. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +543 -0
  345. package/Source/Scene/Vector3DTileContent.js +207 -237
  346. package/Source/Scene/VectorGltf3DTileContent.js +185 -45
  347. package/Source/Scene/View.js +10 -8
  348. package/Source/Scene/VoxelPrimitive.js +159 -175
  349. package/Source/Scene/VoxelProvider.js +64 -91
  350. package/Source/Scene/VoxelTraversal.js +1 -1
  351. package/Source/Scene/buildVectorGltfFromMVT.js +1208 -0
  352. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  353. package/Source/Scene/createElevationBandMaterial.js +1 -1
  354. package/Source/Scene/decodeMVT.js +877 -0
  355. package/Source/Scene/findMeshoptExtension.js +23 -0
  356. package/Source/Scene/renderBufferPointCollection.js +114 -64
  357. package/Source/Scene/renderBufferPolygonCollection.js +245 -53
  358. package/Source/Scene/renderBufferPolylineCollection.js +271 -145
  359. package/Source/Shaders/BillboardCollectionVS.glsl +23 -25
  360. package/Source/Shaders/BillboardCollectionVS.js +23 -25
  361. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  362. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  363. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  364. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  365. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  366. package/Source/Shaders/BufferPolygonMaterialFS.js +13 -0
  367. package/Source/Shaders/BufferPolygonMaterialVS.glsl +22 -4
  368. package/Source/Shaders/BufferPolygonMaterialVS.js +23 -5
  369. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  370. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  371. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  372. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  373. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  374. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  375. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  376. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  377. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  378. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  379. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  380. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  381. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  382. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  383. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  384. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  385. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  386. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  387. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  388. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  389. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  390. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  391. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  392. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  393. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  394. package/Source/Shaders/GlobeFS.glsl +10 -6
  395. package/Source/Shaders/GlobeFS.js +10 -6
  396. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  397. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  398. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  399. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  400. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  401. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  402. package/Source/Shaders/Model/ModelFS.glsl +105 -0
  403. package/Source/Shaders/Model/ModelFS.js +105 -0
  404. package/Source/Shaders/VectorCommon.glsl +178 -0
  405. package/Source/Shaders/VectorCommon.js +180 -0
  406. package/Source/ThirdParty/zip-module.wasm +0 -0
  407. package/Source/Widget/CesiumWidget.js +30 -0
  408. package/Source/Workers/createMvtTile.js +39 -0
  409. package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  410. package/Source/Workers/incrementallyBuildTerrainPicker.js +2 -0
  411. package/index.js +113 -83
  412. package/package.json +13 -13
@@ -2,6 +2,7 @@ import Cartesian2 from "../../Core/Cartesian2.js";
2
2
  import ClippingPlaneCollection from "../ClippingPlaneCollection.js";
3
3
  import combine from "../../Core/combine.js";
4
4
  import Color from "../../Core/Color.js";
5
+ import Matrix4 from "../../Core/Matrix4.js";
5
6
  import ModelClippingPlanesStageFS from "../../Shaders/Model/ModelClippingPlanesStageFS.js";
6
7
  import ShaderDestination from "../../Renderer/ShaderDestination.js";
7
8
 
@@ -17,6 +18,9 @@ const ModelClippingPlanesPipelineStage = {
17
18
  };
18
19
 
19
20
  const textureResolutionScratch = new Cartesian2();
21
+ const scratchClippingPlanesMatrix = new Matrix4();
22
+ const scratchClippingPlanesMatrix2 = new Matrix4();
23
+
20
24
  /**
21
25
  * Process a model. This modifies the following parts of the render resources:
22
26
  *
@@ -116,7 +120,30 @@ ModelClippingPlanesPipelineStage.process = function (
116
120
  return style;
117
121
  },
118
122
  model_clippingPlanesMatrix: function () {
119
- return model._clippingPlanesMatrix;
123
+ // The clipping planes matrix is factored into a view-dependent and a
124
+ // view-independent part:
125
+ // inverseTranspose(view3D * reference * clipping)
126
+ // = transpose(inverseView3D) * inverseTranspose(reference * clipping).
127
+ //
128
+ // The view-dependent part, transpose(inverseView3D), reuses inverseView3D
129
+ // already maintained on UniformState. Since it uses the active view, this is
130
+ // also correct in the shadow cast pass, where inverseView3D is the light's
131
+ // view rather than the camera's. Only a transpose is needed here, no inverse.
132
+ const inverseViewTranspose = Matrix4.transpose(
133
+ context.uniformState.inverseView3D,
134
+ scratchClippingPlanesMatrix,
135
+ );
136
+ // The view-independent part, inverseTranspose(reference * clipping), is
137
+ // computed once per frame in Model.updateReferenceMatrices.
138
+ //
139
+ // This recomputes the same product for every primitive of a model within
140
+ // a pass. If it ever shows up in profiling, see the discussion of
141
+ // alternatives in https://github.com/CesiumGS/cesium/pull/13388.
142
+ return Matrix4.multiply(
143
+ inverseViewTranspose,
144
+ model._clippingPlanesMatrix,
145
+ scratchClippingPlanesMatrix2,
146
+ );
120
147
  },
121
148
  };
122
149
 
@@ -14,6 +14,7 @@ import BlendingState from "../BlendingState.js";
14
14
  import CullFace from "../CullFace.js";
15
15
  import SceneMode from "../SceneMode.js";
16
16
  import ShadowMode from "../ShadowMode.js";
17
+ import EdgeDisplayMode from "../EdgeDisplayMode.js";
17
18
  import StencilConstants from "../StencilConstants.js";
18
19
  import StencilFunction from "../StencilFunction.js";
19
20
  import StencilOperation from "../StencilOperation.js";
@@ -102,6 +103,9 @@ function ModelDrawCommand(options) {
102
103
  this._needsSkipLevelOfDetailCommands = needsSkipLevelOfDetailCommands;
103
104
  this._needsSilhouetteCommands = needsSilhouetteCommands;
104
105
  this._needsEdgeCommands = needsEdgeCommands;
106
+ // Non-behind planar fill primitives write their feature IDs in a pre-pass
107
+ // so that behind fills can test same-object coplanarity.
108
+ this._needsPlanarFillIdCommand = renderResources.planarFillIdPass;
105
109
 
106
110
  // Derived commands
107
111
  this._originalCommand = undefined;
@@ -111,6 +115,10 @@ function ModelDrawCommand(options) {
111
115
  this._silhouetteModelCommand = undefined;
112
116
  this._silhouetteColorCommand = undefined;
113
117
  this._edgeCommand = undefined;
118
+ // Snap-pass variant of the edge command, pinned at 1 px width.
119
+ // See deriveEdgeCommand.
120
+ this._edgeSnapCommand = undefined;
121
+ this._planarFillIdCommand = undefined;
114
122
 
115
123
  // All derived commands (including 2D commands)
116
124
  this._derivedCommands = [];
@@ -225,8 +233,27 @@ function initialize(drawCommand) {
225
233
 
226
234
  if (drawCommand._needsEdgeCommands) {
227
235
  const renderResources = drawCommand._primitiveRenderResources;
236
+ const edgeGeometry = renderResources.edgeGeometry;
237
+ const colorLineWidth = defined(edgeGeometry.lineWidth)
238
+ ? edgeGeometry.lineWidth
239
+ : 1.0;
240
+ // Snap-pass edge width is held at 1 px independent of the color width.
241
+ // A wider snap band results in snap wiggle: as the cursor moves
242
+ // perpendicular to an edge inside the band, the "edge pixel nearest
243
+ // the cursor" shifts, so Snapping.snap returns a slightly different
244
+ // point each frame.
245
+ const snapLineWidth = 1.0;
246
+
228
247
  drawCommand._edgeCommand = new ModelDerivedCommand({
229
- command: deriveEdgeCommand(command, renderResources, model),
248
+ command: deriveEdgeCommand(command, renderResources, colorLineWidth),
249
+ updateShadows: false,
250
+ updateBackFaceCulling: false,
251
+ updateCullFace: false,
252
+ updateDebugShowBoundingVolume: false,
253
+ });
254
+
255
+ drawCommand._edgeSnapCommand = new ModelDerivedCommand({
256
+ command: deriveEdgeCommand(command, renderResources, snapLineWidth),
230
257
  updateShadows: false,
231
258
  updateBackFaceCulling: false,
232
259
  updateCullFace: false,
@@ -234,6 +261,19 @@ function initialize(drawCommand) {
234
261
  });
235
262
 
236
263
  derivedCommands.push(drawCommand._edgeCommand);
264
+ derivedCommands.push(drawCommand._edgeSnapCommand);
265
+ }
266
+
267
+ if (drawCommand._needsPlanarFillIdCommand) {
268
+ drawCommand._planarFillIdCommand = new ModelDerivedCommand({
269
+ command: derivePlanarFillIdCommand(command),
270
+ updateShadows: false,
271
+ updateBackFaceCulling: false,
272
+ updateCullFace: false,
273
+ updateDebugShowBoundingVolume: false,
274
+ });
275
+
276
+ derivedCommands.push(drawCommand._planarFillIdCommand);
237
277
  }
238
278
  }
239
279
 
@@ -572,13 +612,17 @@ ModelDrawCommand.prototype.pushCommands = function (frameState, result) {
572
612
  return;
573
613
  }
574
614
 
575
- pushCommand(result, this._originalCommand, use2D);
576
-
577
- // Push edge commands after the original command
578
- if (this._needsEdgeCommands) {
579
- pushCommand(result, this._edgeCommand, use2D);
615
+ // Skip surface rendering if EDGES_ONLY mode is enabled and this primitive
616
+ // has edge visibility data. Only the edges will render (via pushEdgeCommands).
617
+ if (
618
+ this._model.edgeDisplayMode === EdgeDisplayMode.EDGES_ONLY &&
619
+ this._needsEdgeCommands
620
+ ) {
621
+ return result;
580
622
  }
581
623
 
624
+ pushCommand(result, this._originalCommand, use2D);
625
+
582
626
  return result;
583
627
  };
584
628
 
@@ -623,12 +667,87 @@ ModelDrawCommand.prototype.pushEdgeCommands = function (frameState, result) {
623
667
  return result;
624
668
  }
625
669
 
670
+ const mode = this._model.edgeDisplayMode;
671
+ const passes = frameState.passes;
626
672
  const use2D = shouldUse2DCommands(this, frameState);
673
+
674
+ if (passes.snap) {
675
+ // Snapping pass: route the 1 px snap variant directly into the bound
676
+ // snap framebuffer, regardless of display mode -- snapping works even
677
+ // when edges are visually suppressed (SURFACES_ONLY).
678
+ const edgeCommand = this._edgeSnapCommand;
679
+ edgeCommand.command.pass = Pass.CESIUM_3D_TILE_EDGES_DIRECT;
680
+ if (defined(edgeCommand.derivedCommand2D)) {
681
+ edgeCommand.derivedCommand2D.command.pass =
682
+ Pass.CESIUM_3D_TILE_EDGES_DIRECT;
683
+ }
684
+ pushCommand(result, edgeCommand, use2D);
685
+ return result;
686
+ }
687
+
688
+ if (passes.pick) {
689
+ // Plain pick pass: edges contribute nothing to the RGBA8 pick
690
+ // framebuffer except in EDGES_ONLY mode, where they are the only
691
+ // pickable geometry (pushCommands skips the surface command).
692
+ if (mode !== EdgeDisplayMode.EDGES_ONLY) {
693
+ return result;
694
+ }
695
+ const edgeCommand = this._edgeCommand;
696
+ edgeCommand.command.pass = Pass.CESIUM_3D_TILE_EDGES_DIRECT;
697
+ if (defined(edgeCommand.derivedCommand2D)) {
698
+ edgeCommand.derivedCommand2D.command.pass =
699
+ Pass.CESIUM_3D_TILE_EDGES_DIRECT;
700
+ }
701
+ pushCommand(result, edgeCommand, use2D);
702
+ return result;
703
+ }
704
+
705
+ // Color pass. SURFACES_ONLY mode suppresses all edge rendering.
706
+ if (mode === EdgeDisplayMode.SURFACES_ONLY) {
707
+ return result;
708
+ }
709
+
710
+ // Use direct pass (renders to currently bound framebuffer) when EDGES_ONLY
711
+ // mode is enabled, otherwise use MRT pass (renders to edge framebuffer for
712
+ // compositing).
713
+ const edgePass =
714
+ mode === EdgeDisplayMode.EDGES_ONLY
715
+ ? Pass.CESIUM_3D_TILE_EDGES_DIRECT
716
+ : Pass.CESIUM_3D_TILE_EDGES;
717
+
718
+ this._edgeCommand.command.pass = edgePass;
719
+ if (defined(this._edgeCommand.derivedCommand2D)) {
720
+ this._edgeCommand.derivedCommand2D.command.pass = edgePass;
721
+ }
722
+
627
723
  pushCommand(result, this._edgeCommand, use2D);
628
724
 
629
725
  return result;
630
726
  };
631
727
 
728
+ /**
729
+ * Push the planar fill feature-ID pre-pass command (if any).
730
+ *
731
+ * @param {FrameState} frameState The frame state.
732
+ * @param {DrawCommand[]} result The draw commands to push to.
733
+ * @returns {DrawCommand[]} The modified command list.
734
+ *
735
+ * @private
736
+ */
737
+ ModelDrawCommand.prototype.pushPlanarFillIdCommands = function (
738
+ frameState,
739
+ result,
740
+ ) {
741
+ if (!defined(this._planarFillIdCommand)) {
742
+ return result;
743
+ }
744
+
745
+ const use2D = shouldUse2DCommands(this, frameState);
746
+ pushCommand(result, this._planarFillIdCommand, use2D);
747
+
748
+ return result;
749
+ };
750
+
632
751
  function pushCommand(commandList, derivedCommand, use2D) {
633
752
  commandList.push(derivedCommand.command);
634
753
  if (use2D) {
@@ -688,6 +807,8 @@ function derive2DCommands(drawCommand) {
688
807
  derive2DCommand(drawCommand, drawCommand._silhouetteModelCommand);
689
808
  derive2DCommand(drawCommand, drawCommand._silhouetteColorCommand);
690
809
  derive2DCommand(drawCommand, drawCommand._edgeCommand);
810
+ derive2DCommand(drawCommand, drawCommand._edgeSnapCommand);
811
+ derive2DCommand(drawCommand, drawCommand._planarFillIdCommand);
691
812
  }
692
813
 
693
814
  function deriveTranslucentCommand(command) {
@@ -796,7 +917,13 @@ function deriveSilhouetteColorCommand(command, model) {
796
917
  return silhouetteColorCommand;
797
918
  }
798
919
 
799
- function deriveEdgeCommand(command, renderResources) {
920
+ // Builds an edge draw command at the given screen-space line width.
921
+ //
922
+ // Two variants are derived per primitive (one for the color pass and one
923
+ // for the snapping pass). Therefore, the visual line width and the snap-pass line
924
+ // width can be set independently. The snap variant is pinned at 1 px to
925
+ // avoid snap wiggle (see initialize). In practice both default to 1 px.
926
+ function deriveEdgeCommand(command, renderResources, lineWidth) {
800
927
  const edgeGeometry = renderResources.edgeGeometry;
801
928
  const edgeCommand = DrawCommand.shallowClone(command);
802
929
 
@@ -818,7 +945,11 @@ function deriveEdgeCommand(command, renderResources) {
818
945
  uniformMap.u_isEdgePass = function () {
819
946
  return true; // This is the edge pass
820
947
  };
821
- edgeCommand.uniformMap = uniformMap;
948
+
949
+ // Set line width uniform for quad-based edge rendering
950
+ uniformMap.u_lineWidth = function () {
951
+ return lineWidth;
952
+ };
822
953
 
823
954
  edgeCommand.uniformMap = uniformMap;
824
955
  edgeCommand.castShadows = false;
@@ -827,6 +958,47 @@ function deriveEdgeCommand(command, renderResources) {
827
958
  return edgeCommand;
828
959
  }
829
960
 
961
+ /**
962
+ * Derive a command for the planar fill feature-ID pre-pass.
963
+ *
964
+ * This command uses the same geometry as the original but writes only a
965
+ * feature-ID value to the color attachment (no lighting, no material).
966
+ * The fragment shader outputs <code>vec4(featureId, 0, 0, 1)</code>
967
+ * via the <code>PLANAR_FILL_ID_PASS</code> define.
968
+ *
969
+ * No polygon offset is applied: the pre-pass uses the natural depth of the
970
+ * non-behind planar fill geometry (same program as the main command minus
971
+ * the POLYGON_OFFSET path that would shift it).
972
+ *
973
+ * Like the other derived commands (translucent, silhouette, edge, etc.),
974
+ * this is called once per draw command from <code>initialize</code> when the
975
+ * ModelDrawCommand is constructed — not per frame.
976
+ *
977
+ * @param {DrawCommand} command The original draw command.
978
+ * @returns {DrawCommand} The derived command for the feature-ID pass.
979
+ * @private
980
+ */
981
+ function derivePlanarFillIdCommand(command) {
982
+ const derived = DrawCommand.shallowClone(command);
983
+ derived.pass = Pass.CESIUM_3D_TILE_PLANAR_FILL_ID;
984
+ derived.castShadows = false;
985
+ derived.receiveShadows = false;
986
+
987
+ // Use the same render state but disable blending.
988
+ const rs = clone(command.renderState, true);
989
+ rs.blending.enabled = false;
990
+ derived.renderState = RenderState.fromCache(rs);
991
+
992
+ // Override uniformMap to set u_isPlanarFillIdPass to true for the pre-pass
993
+ const uniformMap = clone(command.uniformMap);
994
+ uniformMap.u_isPlanarFillIdPass = function () {
995
+ return true;
996
+ };
997
+ derived.uniformMap = uniformMap;
998
+
999
+ return derived;
1000
+ }
1001
+
830
1002
  function updateSkipLodStencilCommand(drawCommand, tile, use2D) {
831
1003
  const stencilDerivedComand = drawCommand._skipLodStencilCommand;
832
1004
  const stencilCommand = stencilDerivedComand.command;
@@ -169,6 +169,9 @@ function buildDrawCommandForModel(
169
169
  const pickId = hasClassification
170
170
  ? undefined
171
171
  : primitiveRenderResources.pickId;
172
+ const snapId = hasClassification
173
+ ? undefined
174
+ : primitiveRenderResources.snapId;
172
175
 
173
176
  const command = new DrawCommand({
174
177
  boundingVolume: boundingSphere,
@@ -182,6 +185,7 @@ function buildDrawCommandForModel(
182
185
  count: primitiveRenderResources.count,
183
186
  owner: model,
184
187
  pickId: pickId,
188
+ snapId: snapId,
185
189
  pickMetadataAllowed: true,
186
190
  instanceCount: primitiveRenderResources.instanceCount,
187
191
  primitiveType: primitiveRenderResources.primitiveType,
@@ -986,6 +986,7 @@ function updatePrimitiveShowBoundingVolume(runtimePrimitive, options) {
986
986
 
987
987
  const scratchSilhouetteCommands = [];
988
988
  const scratchEdgeCommands = [];
989
+ const scratchPlanarFillIdCommands = [];
989
990
  const scratchPushDrawCommandOptions = {
990
991
  frameState: undefined,
991
992
  hasSilhouette: undefined,
@@ -1011,6 +1012,10 @@ ModelSceneGraph.prototype.pushDrawCommands = function (frameState) {
1011
1012
  const edgeCommands = scratchEdgeCommands;
1012
1013
  edgeCommands.length = 0;
1013
1014
 
1015
+ // Gather planar fill feature-ID pre-pass commands
1016
+ const planarFillIdCommands = scratchPlanarFillIdCommands;
1017
+ planarFillIdCommands.length = 0;
1018
+
1014
1019
  // Since this function is called each frame, the options object is
1015
1020
  // preallocated in a scratch variable
1016
1021
  const pushDrawCommandOptions = scratchPushDrawCommandOptions;
@@ -1026,6 +1031,7 @@ ModelSceneGraph.prototype.pushDrawCommands = function (frameState) {
1026
1031
 
1027
1032
  addAllToArray(frameState.commandList, silhouetteCommands);
1028
1033
  addAllToArray(frameState.commandList, edgeCommands);
1034
+ addAllToArray(frameState.commandList, planarFillIdCommands);
1029
1035
  };
1030
1036
 
1031
1037
  // Callback is defined here to avoid allocating a closure in the render loop
@@ -1036,9 +1042,16 @@ function pushPrimitiveDrawCommands(runtimePrimitive, options) {
1036
1042
  const passes = frameState.passes;
1037
1043
  const silhouetteCommands = scratchSilhouetteCommands;
1038
1044
  const edgeCommands = scratchEdgeCommands;
1045
+ const planarFillIdCommands = scratchPlanarFillIdCommands;
1039
1046
  const primitiveDrawCommand = runtimePrimitive.drawCommand;
1040
1047
  primitiveDrawCommand.pushCommands(frameState, frameState.commandList);
1041
1048
 
1049
+ // Renew the per-frame planar fill request while this primitive renders.
1050
+ const material = runtimePrimitive.primitive.material;
1051
+ if (defined(material) && defined(material.planarFill)) {
1052
+ frameState.planarFillRequested = true;
1053
+ }
1054
+
1042
1055
  // If a model has silhouettes, the commands that draw the silhouettes for
1043
1056
  // each primitive can only be invoked after the entire model has drawn.
1044
1057
  // Otherwise, the silhouette may draw on top of the model. This requires
@@ -1051,6 +1064,14 @@ function pushPrimitiveDrawCommands(runtimePrimitive, options) {
1051
1064
  if (defined(primitiveDrawCommand.pushEdgeCommands)) {
1052
1065
  primitiveDrawCommand.pushEdgeCommands(frameState, edgeCommands);
1053
1066
  }
1067
+
1068
+ // Add planar fill feature-ID pre-pass commands
1069
+ if (defined(primitiveDrawCommand.pushPlanarFillIdCommands)) {
1070
+ primitiveDrawCommand.pushPlanarFillIdCommands(
1071
+ frameState,
1072
+ planarFillIdCommands,
1073
+ );
1074
+ }
1054
1075
  }
1055
1076
 
1056
1077
  /**
@@ -345,6 +345,7 @@ ModelUtility.sanitizeGlslIdentifier = function (identifier) {
345
345
 
346
346
  ModelUtility.supportedExtensions = {
347
347
  AGI_articulations: true,
348
+ CESIUM_mesh_vector: true,
348
349
  CESIUM_primitive_outline: true,
349
350
  CESIUM_RTC: true,
350
351
  EXT_feature_metadata: true,
@@ -353,6 +354,8 @@ ModelUtility.supportedExtensions = {
353
354
  EXT_instance_features: true,
354
355
  EXT_mesh_features: true,
355
356
  EXT_mesh_gpu_instancing: true,
357
+ EXT_mesh_polygon: true,
358
+ EXT_mesh_primitive_edge_visibility: true,
356
359
  EXT_meshopt_compression: true,
357
360
  EXT_primitive_voxels: true,
358
361
  EXT_structural_metadata: true,
@@ -367,6 +370,8 @@ ModelUtility.supportedExtensions = {
367
370
  KHR_materials_clearcoat: true,
368
371
  KHR_materials_unlit: true,
369
372
  KHR_mesh_quantization: true,
373
+ KHR_mesh_primitive_restart: true,
374
+ KHR_meshopt_compression: true,
370
375
  KHR_techniques_webgl: true,
371
376
  KHR_texture_basisu: true,
372
377
  KHR_texture_transform: true,
@@ -17,6 +17,32 @@ const PickingPipelineStage = {
17
17
  name: "PickingPipelineStage", // Helps with debugging
18
18
  };
19
19
 
20
+ /**
21
+ * Builds the GLSL expression for the float snap payload written during a
22
+ * snapping pass (see {@link Scene#snap}), from the expression that evaluates
23
+ * to the primitive's RGBA8-normalized pick color.
24
+ *
25
+ * Channel layout (RGBA32F snap framebuffer):
26
+ * <ul>
27
+ * <li>R: pick ID, repacked from the RGBA8 pick color to a uint32 via
28
+ * <code>rgba8UnormToUint32</code> (injected by DerivedCommand.createSnapDerivedCommand).
29
+ * Implicitly cast to float32, which represents far more pick IDs than occur in practice.</li>
30
+ * <li>G: isEdge flag (0.0/1.0). <code>isEdge</code> is a ModelFS.glsl global, set by
31
+ * edge-pass fragments under <code>u_isEdgePass</code>.</li>
32
+ * <li>B: linear eye-space depth (<code>-v_positionEC.z</code>, meters). Eye space is
33
+ * global across multifrustum and independent of log-depth encoding.</li>
34
+ * <li>A: unused</li>
35
+ * </ul>
36
+ *
37
+ * @param {string} pickId The GLSL expression for the RGBA8 pick color.
38
+ * @returns {string} The GLSL expression for the snap payload.
39
+ *
40
+ * @private
41
+ */
42
+ function snapIdFromPickId(pickId) {
43
+ return `vec4(rgba8UnormToUint32(${pickId}), isEdge ? 1.0 : 0.0, -v_positionEC.z, 0.0)`;
44
+ }
45
+
20
46
  /**
21
47
  * Process a primitive. This modifies the following parts of the render resources:
22
48
  * <ul>
@@ -65,6 +91,7 @@ PickingPipelineStage.process = function (
65
91
  };
66
92
 
67
93
  renderResources.pickId = "czm_pickColor";
94
+ renderResources.snapId = snapIdFromPickId(renderResources.pickId);
68
95
  }
69
96
  };
70
97
 
@@ -157,6 +184,7 @@ function processPickTexture(renderResources, primitive, instances) {
157
184
  // The feature ID is ignored if it is greater than the number of features.
158
185
  renderResources.pickId =
159
186
  "((selectedFeature.id < int(model_featuresLength)) ? texture(model_pickTexture, selectedFeature.st) : vec4(0.0))";
187
+ renderResources.snapId = snapIdFromPickId(renderResources.pickId);
160
188
  }
161
189
 
162
190
  function processInstancedPickIds(renderResources, context) {
@@ -213,6 +241,7 @@ function processInstancedPickIds(renderResources, context) {
213
241
  shaderBuilder.addAttribute("vec4", "a_pickColor");
214
242
  shaderBuilder.addVarying("vec4", "v_pickColor");
215
243
  renderResources.pickId = "v_pickColor";
244
+ renderResources.snapId = snapIdFromPickId(renderResources.pickId);
216
245
  }
217
246
 
218
247
  export default PickingPipelineStage;
@@ -133,6 +133,19 @@ function PrimitiveRenderResources(nodeRenderResources, runtimePrimitive) {
133
133
  */
134
134
  this.hasSkipLevelOfDetail = nodeRenderResources.hasSkipLevelOfDetail;
135
135
 
136
+ /**
137
+ * Whether this primitive writes its feature IDs to the planar fill ID
138
+ * texture in a pre-pass (BENTLEY_materials_planar_fill). Set by the
139
+ * material pipeline stage for non-behind planar fill primitives so that
140
+ * behind fills can test same-object coplanarity. This value indicates
141
+ * what draw commands are needed.
142
+ *
143
+ * @type {boolean}
144
+ *
145
+ * @private
146
+ */
147
+ this.planarFillIdPass = false;
148
+
136
149
  /**
137
150
  * An object used to build a shader incrementally. This is cloned from the
138
151
  * node render resources because each primitive can compute a different shader.
@@ -292,6 +305,17 @@ function PrimitiveRenderResources(nodeRenderResources, runtimePrimitive) {
292
305
  * @private
293
306
  */
294
307
  this.pickId = undefined;
308
+
309
+ /**
310
+ * The shader expression for the float snap payload written during a snapping
311
+ * pass (see Scene#snap). If picking is enabled, this value is set by
312
+ * PickingPipelineStage.
313
+ *
314
+ * @type {string|undefined}
315
+ *
316
+ * @private
317
+ */
318
+ this.snapId = undefined;
295
319
  }
296
320
 
297
321
  export default PrimitiveRenderResources;