@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
@@ -1,41 +1,643 @@
1
+ // @ts-check
2
+
1
3
  import defined from "../Core/defined.js";
2
4
  import destroyObject from "../Core/destroyObject.js";
3
5
  import TerrainQuantization from "../Core/TerrainQuantization.js";
4
6
  import ShaderProgram from "../Renderer/ShaderProgram.js";
7
+ import VectorCommon from "../Shaders/VectorCommon.js";
5
8
  import getClippingFunction from "./getClippingFunction.js";
6
9
  import SceneMode from "./SceneMode.js";
7
10
 
8
- function GlobeSurfaceShader(
9
- numberOfDayTextures,
10
- flags,
11
- material,
12
- shaderProgram,
13
- clippingShaderState,
14
- clippingPolygonShaderState,
15
- ) {
16
- this.numberOfDayTextures = numberOfDayTextures;
17
- this.flags = flags;
18
- this.material = material;
19
- this.shaderProgram = shaderProgram;
20
- this.clippingShaderState = clippingShaderState;
21
- this.clippingPolygonShaderState = clippingPolygonShaderState;
11
+ /** @import ClippingPlaneCollection from "./ClippingPlaneCollection.js"; */
12
+ /** @import ClippingPolygonCollection from "./ClippingPolygonCollection.js"; */
13
+ /** @import Context from "../Renderer/Context.js"; */
14
+ /** @import FrameState from "./FrameState.js"; */
15
+ /** @import GlobeSurfaceTile from "./GlobeSurfaceTile.js"; */
16
+
17
+ /**
18
+ * @ignore
19
+ */
20
+ class GlobeSurfaceShader {
21
+ /**
22
+ * @param {number} numberOfDayTextures
23
+ * @param {number} flags
24
+ * @param {*} material
25
+ * @param {ShaderProgram} shaderProgram
26
+ * @param {number} clippingShaderState
27
+ * @param {number} clippingPolygonShaderState
28
+ */
29
+ constructor(
30
+ numberOfDayTextures,
31
+ flags,
32
+ material,
33
+ shaderProgram,
34
+ clippingShaderState,
35
+ clippingPolygonShaderState,
36
+ ) {
37
+ /** @type {number} */
38
+ this.numberOfDayTextures = numberOfDayTextures;
39
+ this.flags = flags;
40
+ this.material = material;
41
+ /** @type {ShaderProgram} */
42
+ this.shaderProgram = shaderProgram;
43
+ this.clippingShaderState = clippingShaderState;
44
+ this.clippingPolygonShaderState = clippingPolygonShaderState;
45
+ }
22
46
  }
23
47
 
48
+ /**
49
+ * @typedef {object} GlobeSurfaceShaderSetOptions
50
+ * @property {FrameState} [frameState]
51
+ * @property {GlobeSurfaceTile} [surfaceTile]
52
+ * @property {number} [numberOfDayTextures]
53
+ * @property {boolean} [applyBrightness]
54
+ * @property {boolean} [applyContrast]
55
+ * @property {boolean} [applyHue]
56
+ * @property {boolean} [applySaturation]
57
+ * @property {boolean} [applyGamma]
58
+ * @property {boolean} [applyToneMatch]
59
+ * @property {boolean} [applyToneMatchEdge]
60
+ * @property {boolean} [applyToneMatchCross]
61
+ * @property {boolean} [applyAlpha]
62
+ * @property {boolean} [applyDayNightAlpha]
63
+ * @property {boolean} [applySplit]
64
+ * @property {boolean} [hasWaterMask]
65
+ * @property {boolean} [showReflectiveOcean]
66
+ * @property {boolean} [showOceanWaves]
67
+ * @property {boolean} [enableLighting]
68
+ * @property {boolean} [dynamicAtmosphereLighting]
69
+ * @property {boolean} [dynamicAtmosphereLightingFromSun]
70
+ * @property {boolean} [showGroundAtmosphere]
71
+ * @property {boolean} [perFragmentGroundAtmosphere]
72
+ * @property {boolean} [hasVertexNormals]
73
+ * @property {boolean} [useWebMercatorProjection]
74
+ * @property {boolean} [enableFog]
75
+ * @property {boolean} [enableClippingPlanes]
76
+ * @property {ClippingPlaneCollection} [clippingPlanes]
77
+ * @property {boolean} [enableClippingPolygons]
78
+ * @property {ClippingPolygonCollection} [clippingPolygons]
79
+ * @property {boolean} [clippedByBoundaries]
80
+ * @property {boolean} [hasImageryLayerCutout]
81
+ * @property {boolean} [colorCorrect]
82
+ * @property {boolean} [highlightFillTile]
83
+ * @property {boolean} [colorToAlpha]
84
+ * @property {boolean} [hasGeodeticSurfaceNormals]
85
+ * @property {boolean} [hasExaggeration]
86
+ * @property {boolean} [showUndergroundColor]
87
+ * @property {boolean} [translucent]
88
+ * @private
89
+ */
90
+
24
91
  /**
25
92
  * Manages the shaders used to shade the surface of a {@link Globe}.
26
93
  *
27
- * @alias GlobeSurfaceShaderSet
28
94
  * @private
29
95
  */
30
- function GlobeSurfaceShaderSet() {
31
- this.baseVertexShaderSource = undefined;
32
- this.baseFragmentShaderSource = undefined;
96
+ class GlobeSurfaceShaderSet {
97
+ constructor() {
98
+ this.baseVertexShaderSource = undefined;
99
+ this.baseFragmentShaderSource = undefined;
100
+
101
+ /** @type {GlobeSurfaceShader[][]} */
102
+ this._shadersByTexturesFlags = [];
103
+
104
+ this.material = undefined;
105
+ }
106
+
107
+ /** @param {GlobeSurfaceShaderSetOptions} options */
108
+ getShaderProgram(options) {
109
+ const frameState = options.frameState;
110
+ const surfaceTile = options.surfaceTile;
111
+ const numberOfDayTextures = options.numberOfDayTextures;
112
+ const applyBrightness = options.applyBrightness;
113
+ const applyContrast = options.applyContrast;
114
+ const applyHue = options.applyHue;
115
+ const applySaturation = options.applySaturation;
116
+ const applyGamma = options.applyGamma;
117
+ const applyToneMatch = options.applyToneMatch;
118
+ const applyToneMatchEdge = options.applyToneMatchEdge;
119
+ const applyToneMatchCross = options.applyToneMatchCross;
120
+ const applyAlpha = options.applyAlpha;
121
+ const applyDayNightAlpha = options.applyDayNightAlpha;
122
+ const applySplit = options.applySplit;
123
+ const hasWaterMask = options.hasWaterMask;
124
+ const showReflectiveOcean = options.showReflectiveOcean;
125
+ const showOceanWaves = options.showOceanWaves;
126
+ const enableLighting = options.enableLighting;
127
+ const dynamicAtmosphereLighting = options.dynamicAtmosphereLighting;
128
+ const dynamicAtmosphereLightingFromSun =
129
+ options.dynamicAtmosphereLightingFromSun;
130
+ const showGroundAtmosphere = options.showGroundAtmosphere;
131
+ const perFragmentGroundAtmosphere = options.perFragmentGroundAtmosphere;
132
+ const hasVertexNormals = options.hasVertexNormals;
133
+ const useWebMercatorProjection = options.useWebMercatorProjection;
134
+ const enableFog = options.enableFog;
135
+ const enableClippingPlanes = options.enableClippingPlanes;
136
+ const clippingPlanes = options.clippingPlanes;
137
+ const enableClippingPolygons = options.enableClippingPolygons;
138
+ const clippingPolygons = options.clippingPolygons;
139
+ const clippedByBoundaries = options.clippedByBoundaries;
140
+ const hasImageryLayerCutout = options.hasImageryLayerCutout;
141
+ const colorCorrect = options.colorCorrect;
142
+ const highlightFillTile = options.highlightFillTile;
143
+ const colorToAlpha = options.colorToAlpha;
144
+ const hasGeodeticSurfaceNormals = options.hasGeodeticSurfaceNormals;
145
+ const hasExaggeration = options.hasExaggeration;
146
+ const showUndergroundColor = options.showUndergroundColor;
147
+ const translucent = options.translucent;
148
+ const vectorData = surfaceTile.vectorData;
149
+ const hasVectorLayer = vectorData?.show;
150
+
151
+ let quantization = 0;
152
+ let quantizationDefine = "";
153
+
154
+ const mesh = surfaceTile.renderedMesh;
155
+ const terrainEncoding = mesh.encoding;
156
+ const quantizationMode = terrainEncoding.quantization;
157
+ if (quantizationMode === TerrainQuantization.BITS12) {
158
+ quantization = 1;
159
+ quantizationDefine = "QUANTIZATION_BITS12";
160
+ }
161
+
162
+ let cartographicLimitRectangleFlag = 0;
163
+ let cartographicLimitRectangleDefine = "";
164
+ if (clippedByBoundaries) {
165
+ cartographicLimitRectangleFlag = 1;
166
+ cartographicLimitRectangleDefine = "TILE_LIMIT_RECTANGLE";
167
+ }
168
+
169
+ let imageryCutoutFlag = 0;
170
+ let imageryCutoutDefine = "";
171
+ if (hasImageryLayerCutout) {
172
+ imageryCutoutFlag = 1;
173
+ imageryCutoutDefine = "APPLY_IMAGERY_CUTOUT";
174
+ }
175
+
176
+ const sceneMode = frameState.mode;
177
+ // Bitwise OR uses 32-bit integers; bits 0-31 are packed below.
178
+ // Flags beyond bit 31 use arithmetic to avoid silent wrap-around
179
+ // (x << 32 === x << 0 in JavaScript).
180
+ const flags =
181
+ ((sceneMode |
182
+ (+applyBrightness << 2) |
183
+ (+applyContrast << 3) |
184
+ (+applyHue << 4) |
185
+ (+applySaturation << 5) |
186
+ (+applyGamma << 6) |
187
+ (+applyAlpha << 7) |
188
+ (+hasWaterMask << 8) |
189
+ (+showReflectiveOcean << 9) |
190
+ (+showOceanWaves << 10) |
191
+ (+enableLighting << 11) |
192
+ (+dynamicAtmosphereLighting << 12) |
193
+ (+dynamicAtmosphereLightingFromSun << 13) |
194
+ (+showGroundAtmosphere << 14) |
195
+ (+perFragmentGroundAtmosphere << 15) |
196
+ (+hasVertexNormals << 16) |
197
+ (+useWebMercatorProjection << 17) |
198
+ (+enableFog << 18) |
199
+ (quantization << 19) |
200
+ (+applySplit << 20) |
201
+ (+enableClippingPlanes << 21) |
202
+ (+enableClippingPolygons << 22) |
203
+ (cartographicLimitRectangleFlag << 23) |
204
+ (imageryCutoutFlag << 24) |
205
+ (+colorCorrect << 25) |
206
+ (+highlightFillTile << 26) |
207
+ (+colorToAlpha << 27) |
208
+ (+hasGeodeticSurfaceNormals << 28) |
209
+ (+hasExaggeration << 29) |
210
+ (+showUndergroundColor << 30) |
211
+ (+translucent << 31)) >>>
212
+ 0) +
213
+ (applyDayNightAlpha ? 0x100000000 : 0) +
214
+ (applyToneMatch ? 0x200000000 : 0) +
215
+ (applyToneMatchEdge ? 0x400000000 : 0) +
216
+ (applyToneMatchCross ? 0x800000000 : 0) +
217
+ (hasVectorLayer ? 0x1000000000 : 0);
218
+
219
+ let currentClippingShaderState = 0;
220
+ // @ts-expect-error Missing types.
221
+ if (defined(clippingPlanes) && clippingPlanes.length > 0) {
222
+ currentClippingShaderState = enableClippingPlanes
223
+ ? // @ts-expect-error Missing types.
224
+ clippingPlanes.clippingPlanesState
225
+ : 0;
226
+ }
227
+
228
+ let currentClippingPolygonsShaderState = 0;
229
+ // @ts-expect-error Missing types.
230
+ if (defined(clippingPolygons) && clippingPolygons.length > 0) {
231
+ currentClippingPolygonsShaderState = enableClippingPolygons
232
+ ? // @ts-expect-error Missing types.
233
+ clippingPolygons.clippingPolygonsState
234
+ : 0;
235
+ }
236
+
237
+ let surfaceShader = surfaceTile.surfaceShader;
238
+ if (
239
+ defined(surfaceShader) &&
240
+ surfaceShader.numberOfDayTextures === numberOfDayTextures &&
241
+ surfaceShader.flags === flags &&
242
+ surfaceShader.material === this.material &&
243
+ surfaceShader.clippingShaderState === currentClippingShaderState &&
244
+ surfaceShader.clippingPolygonShaderState ===
245
+ currentClippingPolygonsShaderState
246
+ ) {
247
+ return surfaceShader.shaderProgram;
248
+ }
249
+
250
+ // New tile, or tile changed number of textures, flags, or clipping planes
251
+ let shadersByFlags = this._shadersByTexturesFlags[numberOfDayTextures];
252
+ if (!defined(shadersByFlags)) {
253
+ shadersByFlags = this._shadersByTexturesFlags[numberOfDayTextures] = [];
254
+ }
255
+
256
+ surfaceShader = shadersByFlags[flags];
257
+ if (
258
+ !defined(surfaceShader) ||
259
+ surfaceShader.material !== this.material ||
260
+ surfaceShader.clippingShaderState !== currentClippingShaderState ||
261
+ surfaceShader.clippingPolygonShaderState !==
262
+ currentClippingPolygonsShaderState
263
+ ) {
264
+ // Cache miss - we've never seen this combination of numberOfDayTextures and flags before.
265
+ const vs = this.baseVertexShaderSource.clone();
266
+ const fs = this.baseFragmentShaderSource.clone();
267
+
268
+ // Need to go before GlobeFS
269
+ if (currentClippingShaderState !== 0) {
270
+ fs.sources.unshift(
271
+ getClippingFunction(clippingPlanes, frameState.context),
272
+ );
273
+ }
274
+
275
+ // Need to go before GlobeFS
276
+ if (currentClippingPolygonsShaderState !== 0) {
277
+ fs.sources.unshift(getPolygonClippingFunction(frameState.context));
278
+ vs.sources.unshift(getUnpackClippingFunction(frameState.context));
279
+ }
280
+
281
+ vs.defines.push(quantizationDefine);
282
+ fs.defines.push(
283
+ `TEXTURE_UNITS ${numberOfDayTextures}`,
284
+ cartographicLimitRectangleDefine,
285
+ imageryCutoutDefine,
286
+ );
287
+
288
+ if (applyBrightness) {
289
+ fs.defines.push("APPLY_BRIGHTNESS");
290
+ }
291
+ if (applyContrast) {
292
+ fs.defines.push("APPLY_CONTRAST");
293
+ }
294
+ if (applyHue) {
295
+ fs.defines.push("APPLY_HUE");
296
+ }
297
+ if (applySaturation) {
298
+ fs.defines.push("APPLY_SATURATION");
299
+ }
300
+ if (applyGamma) {
301
+ fs.defines.push("APPLY_GAMMA");
302
+ }
303
+ if (applyToneMatch) {
304
+ fs.defines.push("APPLY_TONE_MATCH");
305
+ }
306
+ if (applyToneMatchEdge) {
307
+ fs.defines.push("APPLY_TONE_MATCH_EDGE");
308
+ }
309
+ if (applyToneMatchCross) {
310
+ fs.defines.push("APPLY_TONE_MATCH_CROSS");
311
+ }
312
+ if (applyAlpha) {
313
+ fs.defines.push("APPLY_ALPHA");
314
+ }
315
+ if (applyDayNightAlpha) {
316
+ fs.defines.push("APPLY_DAY_NIGHT_ALPHA");
317
+ }
318
+ if (hasWaterMask) {
319
+ fs.defines.push("HAS_WATER_MASK");
320
+ }
321
+ if (showReflectiveOcean) {
322
+ fs.defines.push("SHOW_REFLECTIVE_OCEAN");
323
+ vs.defines.push("SHOW_REFLECTIVE_OCEAN");
324
+ }
325
+ if (showOceanWaves) {
326
+ fs.defines.push("SHOW_OCEAN_WAVES");
327
+ }
328
+ if (colorToAlpha) {
329
+ fs.defines.push("APPLY_COLOR_TO_ALPHA");
330
+ }
331
+ if (showUndergroundColor) {
332
+ vs.defines.push("UNDERGROUND_COLOR");
333
+ fs.defines.push("UNDERGROUND_COLOR");
334
+ }
335
+ if (translucent) {
336
+ vs.defines.push("TRANSLUCENT");
337
+ fs.defines.push("TRANSLUCENT");
338
+ }
339
+ if (enableLighting) {
340
+ if (hasVertexNormals) {
341
+ vs.defines.push("ENABLE_VERTEX_LIGHTING");
342
+ fs.defines.push("ENABLE_VERTEX_LIGHTING");
343
+ } else {
344
+ vs.defines.push("ENABLE_DAYNIGHT_SHADING");
345
+ fs.defines.push("ENABLE_DAYNIGHT_SHADING");
346
+ }
347
+ }
348
+
349
+ if (dynamicAtmosphereLighting) {
350
+ vs.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING");
351
+ fs.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING");
352
+ if (dynamicAtmosphereLightingFromSun) {
353
+ vs.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN");
354
+ fs.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN");
355
+ }
356
+ }
357
+
358
+ if (showGroundAtmosphere) {
359
+ vs.defines.push("GROUND_ATMOSPHERE");
360
+ fs.defines.push("GROUND_ATMOSPHERE");
361
+ if (perFragmentGroundAtmosphere) {
362
+ vs.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE");
363
+ fs.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE");
364
+ }
365
+ }
366
+
367
+ vs.defines.push("INCLUDE_WEB_MERCATOR_Y");
368
+ fs.defines.push("INCLUDE_WEB_MERCATOR_Y");
369
+
370
+ if (enableFog) {
371
+ vs.defines.push("FOG");
372
+ fs.defines.push("FOG");
373
+ }
374
+
375
+ if (applySplit) {
376
+ fs.defines.push("APPLY_SPLIT");
377
+ }
378
+
379
+ if (enableClippingPlanes) {
380
+ fs.defines.push("ENABLE_CLIPPING_PLANES");
381
+ }
382
+
383
+ if (enableClippingPolygons) {
384
+ fs.defines.push("ENABLE_CLIPPING_POLYGONS");
385
+ vs.defines.push("ENABLE_CLIPPING_POLYGONS");
386
+
387
+ if (clippingPolygons.inverse) {
388
+ fs.defines.push("CLIPPING_INVERSE");
389
+ }
390
+
391
+ fs.defines.push(
392
+ // @ts-expect-error Missing types.
393
+ `CLIPPING_POLYGON_REGIONS_LENGTH ${clippingPolygons.extentsCount}`,
394
+ );
395
+ vs.defines.push(
396
+ // @ts-expect-error Missing types.
397
+ `CLIPPING_POLYGON_REGIONS_LENGTH ${clippingPolygons.extentsCount}`,
398
+ );
399
+ }
400
+
401
+ if (colorCorrect) {
402
+ fs.defines.push("COLOR_CORRECT");
403
+ }
404
+
405
+ if (highlightFillTile) {
406
+ fs.defines.push("HIGHLIGHT_FILL_TILE");
407
+ }
408
+
409
+ if (hasGeodeticSurfaceNormals) {
410
+ vs.defines.push("GEODETIC_SURFACE_NORMALS");
411
+ }
412
+
413
+ if (hasExaggeration) {
414
+ vs.defines.push("EXAGGERATION");
415
+ }
416
+
417
+ if (hasVectorLayer) {
418
+ vs.defines.push("HAS_VECTOR_LAYER");
419
+ fs.defines.push("HAS_VECTOR_LAYER");
420
+ fs.sources.unshift(VectorCommon); // before GlobeFS.
421
+ }
422
+
423
+ let computeDayColor =
424
+ "\
425
+ vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)\n\
426
+ {\n\
427
+ vec4 color = initialColor;\n";
33
428
 
34
- this._shadersByTexturesFlags = [];
429
+ if (hasImageryLayerCutout) {
430
+ computeDayColor +=
431
+ "\
432
+ vec4 cutoutAndColorResult;\n\
433
+ bool texelUnclipped;\n";
434
+ }
35
435
 
36
- this.material = undefined;
436
+ for (let i = 0; i < numberOfDayTextures; ++i) {
437
+ if (applyToneMatchEdge) {
438
+ computeDayColor += `\
439
+ vec3 toneGain${i} = u_dayTextureToneGain[${i}];
440
+ vec3 toneBias${i} = u_dayTextureToneBias[${i}];
441
+ {
442
+ vec2 toneEdgeUV${i} = textureCoordinates.xy;
443
+ float toneEdgeW${i};
444
+ float toneEdgeT${i};
445
+ toneEdgeW${i} = u_dayTextureToneEdgeBlend[${i * 4}];
446
+ if (toneEdgeW${i} > 0.0) {
447
+ toneEdgeT${i} = smoothstep(0.0, toneEdgeW${i}, toneEdgeUV${i}.y);
448
+ toneGain${i} = mix(u_dayTextureToneEdgeGain[${i * 4}], toneGain${i}, toneEdgeT${i});
449
+ toneBias${i} = mix(u_dayTextureToneEdgeBias[${i * 4}], toneBias${i}, toneEdgeT${i});
450
+ }
451
+ toneEdgeW${i} = u_dayTextureToneEdgeBlend[${i * 4 + 1}];
452
+ if (toneEdgeW${i} > 0.0) {
453
+ toneEdgeT${i} = smoothstep(0.0, toneEdgeW${i}, 1.0 - toneEdgeUV${i}.x);
454
+ toneGain${i} = mix(u_dayTextureToneEdgeGain[${i * 4 + 1}], toneGain${i}, toneEdgeT${i});
455
+ toneBias${i} = mix(u_dayTextureToneEdgeBias[${i * 4 + 1}], toneBias${i}, toneEdgeT${i});
456
+ }
457
+ toneEdgeW${i} = u_dayTextureToneEdgeBlend[${i * 4 + 2}];
458
+ if (toneEdgeW${i} > 0.0) {
459
+ toneEdgeT${i} = smoothstep(0.0, toneEdgeW${i}, 1.0 - toneEdgeUV${i}.y);
460
+ toneGain${i} = mix(u_dayTextureToneEdgeGain[${i * 4 + 2}], toneGain${i}, toneEdgeT${i});
461
+ toneBias${i} = mix(u_dayTextureToneEdgeBias[${i * 4 + 2}], toneBias${i}, toneEdgeT${i});
462
+ }
463
+ toneEdgeW${i} = u_dayTextureToneEdgeBlend[${i * 4 + 3}];
464
+ if (toneEdgeW${i} > 0.0) {
465
+ toneEdgeT${i} = smoothstep(0.0, toneEdgeW${i}, toneEdgeUV${i}.x);
466
+ toneGain${i} = mix(u_dayTextureToneEdgeGain[${i * 4 + 3}], toneGain${i}, toneEdgeT${i});
467
+ toneBias${i} = mix(u_dayTextureToneEdgeBias[${i * 4 + 3}], toneBias${i}, toneEdgeT${i});
468
+ }
469
+ }
470
+ `;
471
+ }
472
+ if (applyToneMatchCross) {
473
+ computeDayColor += `\
474
+ vec4 tonePrevColor${i} = color;\n`;
475
+ }
476
+ if (hasImageryLayerCutout) {
477
+ computeDayColor += `\
478
+ cutoutAndColorResult = u_dayTextureCutoutRectangles[${i}];\n\
479
+ texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y;\n\
480
+ cutoutAndColorResult = sampleAndBlend(\n`;
481
+ } else {
482
+ computeDayColor +=
483
+ "\
484
+ color = sampleAndBlend(\n";
485
+ }
486
+ computeDayColor += `\
487
+ color,\n\
488
+ u_dayTextures[${i}],\n\
489
+ u_dayTextureUseWebMercatorT[${i}] ? textureCoordinates.xz : textureCoordinates.xy,\n\
490
+ u_dayTextureTexCoordsRectangle[${i}],\n\
491
+ u_dayTextureTranslationAndScale[${i}],\n\
492
+ ${applyAlpha ? `u_dayTextureAlpha[${i}]` : "1.0"},\n\
493
+ ${applyDayNightAlpha ? `u_dayTextureNightAlpha[${i}]` : "1.0"},\n\
494
+ ${applyDayNightAlpha ? `u_dayTextureDayAlpha[${i}]` : "1.0"},\n\
495
+ ${applyBrightness ? `u_dayTextureBrightness[${i}]` : "0.0"},\n\
496
+ ${applyContrast ? `u_dayTextureContrast[${i}]` : "0.0"},\n\
497
+ ${applyHue ? `u_dayTextureHue[${i}]` : "0.0"},\n\
498
+ ${applySaturation ? `u_dayTextureSaturation[${i}]` : "0.0"},\n\
499
+ ${applyGamma ? `u_dayTextureOneOverGamma[${i}]` : "0.0"},\n\
500
+ ${
501
+ applyToneMatchEdge
502
+ ? `toneGain${i}`
503
+ : applyToneMatch
504
+ ? `u_dayTextureToneGain[${i}]`
505
+ : "vec3(1.0)"
506
+ },\n\
507
+ ${
508
+ applyToneMatchEdge
509
+ ? `toneBias${i}`
510
+ : applyToneMatch
511
+ ? `u_dayTextureToneBias[${i}]`
512
+ : "vec3(0.0)"
513
+ },\n\
514
+ ${applySplit ? `u_dayTextureSplit[${i}]` : "0.0"},\n\
515
+ ${colorToAlpha ? `u_colorsToAlpha[${i}]` : "vec4(0.0)"},\n\
516
+ nightBlend\);\n`;
517
+ if (hasImageryLayerCutout) {
518
+ computeDayColor +=
519
+ "\
520
+ color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color);\n";
521
+ }
522
+ if (applyToneMatchCross) {
523
+ computeDayColor += `\
524
+ if (u_dayTextureCrossBlend[${i * 4}] + u_dayTextureCrossBlend[${i * 4 + 1}] + u_dayTextureCrossBlend[${i * 4 + 2}] + u_dayTextureCrossBlend[${i * 4 + 3}] > 0.0) {
525
+ vec4 crossResult${i} = sampleAndBlend(
526
+ tonePrevColor${i},
527
+ u_dayTextureCrossTexture[${i}],
528
+ u_dayTextureUseWebMercatorT[${i}] ? textureCoordinates.xz : textureCoordinates.xy,
529
+ u_dayTextureTexCoordsRectangle[${i}],
530
+ u_dayTextureCrossTranslationAndScale[${i}],
531
+ ${applyAlpha ? `u_dayTextureAlpha[${i}]` : "1.0"},
532
+ ${applyDayNightAlpha ? `u_dayTextureNightAlpha[${i}]` : "1.0"},
533
+ ${applyDayNightAlpha ? `u_dayTextureDayAlpha[${i}]` : "1.0"},
534
+ ${applyBrightness ? `u_dayTextureBrightness[${i}]` : "0.0"},
535
+ ${applyContrast ? `u_dayTextureContrast[${i}]` : "0.0"},
536
+ ${applyHue ? `u_dayTextureHue[${i}]` : "0.0"},
537
+ ${applySaturation ? `u_dayTextureSaturation[${i}]` : "0.0"},
538
+ ${applyGamma ? `u_dayTextureOneOverGamma[${i}]` : "0.0"},
539
+ u_dayTextureCrossGain[${i}],
540
+ u_dayTextureCrossBias[${i}],
541
+ ${applySplit ? `u_dayTextureSplit[${i}]` : "0.0"},
542
+ ${colorToAlpha ? `u_colorsToAlpha[${i}]` : "vec4(0.0)"},
543
+ nightBlend);
544
+ ${
545
+ hasImageryLayerCutout
546
+ ? `\
547
+ crossResult${i} = czm_branchFreeTernary(texelUnclipped, crossResult${i}, tonePrevColor${i});\n`
548
+ : ""
549
+ }\
550
+ float crossT${i} = 1.0;
551
+ float crossW${i};
552
+ float crossTOne${i};
553
+ crossW${i} = u_dayTextureCrossBlend[${i * 4}];
554
+ if (crossW${i} > 0.0) {
555
+ crossTOne${i} = smoothstep(0.0, crossW${i}, textureCoordinates.y);
556
+ crossT${i} = min(crossT${i}, crossTOne${i});
557
+ }
558
+ crossW${i} = u_dayTextureCrossBlend[${i * 4 + 1}];
559
+ if (crossW${i} > 0.0) {
560
+ crossTOne${i} = smoothstep(0.0, crossW${i}, 1.0 - textureCoordinates.x);
561
+ crossT${i} = min(crossT${i}, crossTOne${i});
562
+ }
563
+ crossW${i} = u_dayTextureCrossBlend[${i * 4 + 2}];
564
+ if (crossW${i} > 0.0) {
565
+ crossTOne${i} = smoothstep(0.0, crossW${i}, 1.0 - textureCoordinates.y);
566
+ crossT${i} = min(crossT${i}, crossTOne${i});
567
+ }
568
+ crossW${i} = u_dayTextureCrossBlend[${i * 4 + 3}];
569
+ if (crossW${i} > 0.0) {
570
+ crossTOne${i} = smoothstep(0.0, crossW${i}, textureCoordinates.x);
571
+ crossT${i} = min(crossT${i}, crossTOne${i});
572
+ }
573
+ color = mix(crossResult${i}, color, crossT${i});
574
+ }
575
+ `;
576
+ }
577
+ }
578
+
579
+ computeDayColor +=
580
+ "\
581
+ return color;\n\
582
+ }";
583
+
584
+ fs.sources.push(computeDayColor);
585
+
586
+ vs.sources.push(getPositionMode(sceneMode));
587
+ vs.sources.push(get2DYPositionFraction(useWebMercatorProjection));
588
+
589
+ const shader = ShaderProgram.fromCache({
590
+ context: frameState.context,
591
+ vertexShaderSource: vs,
592
+ fragmentShaderSource: fs,
593
+ attributeLocations: terrainEncoding.getAttributeLocations(),
594
+ });
595
+
596
+ surfaceShader = shadersByFlags[flags] = new GlobeSurfaceShader(
597
+ numberOfDayTextures,
598
+ flags,
599
+ this.material,
600
+ shader,
601
+ currentClippingShaderState,
602
+ currentClippingPolygonsShaderState,
603
+ );
604
+ }
605
+
606
+ surfaceTile.surfaceShader = surfaceShader;
607
+ return surfaceShader.shaderProgram;
608
+ }
609
+
610
+ destroy() {
611
+ let flags;
612
+ let shader;
613
+
614
+ const shadersByTexturesFlags = this._shadersByTexturesFlags;
615
+ for (const textureCount in shadersByTexturesFlags) {
616
+ if (shadersByTexturesFlags.hasOwnProperty(textureCount)) {
617
+ const shadersByFlags = shadersByTexturesFlags[textureCount];
618
+ if (!defined(shadersByFlags)) {
619
+ continue;
620
+ }
621
+
622
+ for (flags in shadersByFlags) {
623
+ if (shadersByFlags.hasOwnProperty(flags)) {
624
+ shader = shadersByFlags[flags];
625
+ if (defined(shader)) {
626
+ shader.shaderProgram.destroy();
627
+ }
628
+ }
629
+ }
630
+ }
631
+ }
632
+
633
+ return destroyObject(this);
634
+ }
37
635
  }
38
636
 
637
+ /**
638
+ * @param {SceneMode} sceneMode
639
+ * @ignore
640
+ */
39
641
  function getPositionMode(sceneMode) {
40
642
  const getPosition3DMode =
41
643
  "vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }";
@@ -62,8 +664,13 @@ function getPositionMode(sceneMode) {
62
664
  return positionMode;
63
665
  }
64
666
 
667
+ /**
668
+ * @param {Context} context
669
+ * @ignore
670
+ */
65
671
  function getPolygonClippingFunction(context) {
66
672
  // return a noop for webgl1
673
+ // @ts-expect-error Missing types.
67
674
  if (!context.webgl2) {
68
675
  return `void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) {
69
676
  }`;
@@ -74,8 +681,13 @@ function getPolygonClippingFunction(context) {
74
681
  }`;
75
682
  }
76
683
 
684
+ /**
685
+ * @param {Context} context
686
+ * @ignore
687
+ */
77
688
  function getUnpackClippingFunction(context) {
78
689
  // return a noop for webgl1
690
+ // @ts-expect-error Missing types.
79
691
  if (!context.webgl2) {
80
692
  return `vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) {
81
693
  return vec4();
@@ -87,6 +699,11 @@ function getUnpackClippingFunction(context) {
87
699
  }`;
88
700
  }
89
701
 
702
+ /**
703
+ * @param {boolean} useWebMercatorProjection
704
+ * @returns {string}
705
+ * @ignore
706
+ */
90
707
  function get2DYPositionFraction(useWebMercatorProjection) {
91
708
  const get2DYPositionFractionGeographicProjection =
92
709
  "float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }";
@@ -97,524 +714,4 @@ function get2DYPositionFraction(useWebMercatorProjection) {
97
714
  : get2DYPositionFractionGeographicProjection;
98
715
  }
99
716
 
100
- GlobeSurfaceShaderSet.prototype.getShaderProgram = function (options) {
101
- const frameState = options.frameState;
102
- const surfaceTile = options.surfaceTile;
103
- const numberOfDayTextures = options.numberOfDayTextures;
104
- const applyBrightness = options.applyBrightness;
105
- const applyContrast = options.applyContrast;
106
- const applyHue = options.applyHue;
107
- const applySaturation = options.applySaturation;
108
- const applyGamma = options.applyGamma;
109
- const applyToneMatch = options.applyToneMatch;
110
- const applyToneMatchEdge = options.applyToneMatchEdge;
111
- const applyToneMatchCross = options.applyToneMatchCross;
112
- const applyAlpha = options.applyAlpha;
113
- const applyDayNightAlpha = options.applyDayNightAlpha;
114
- const applySplit = options.applySplit;
115
- const hasWaterMask = options.hasWaterMask;
116
- const showReflectiveOcean = options.showReflectiveOcean;
117
- const showOceanWaves = options.showOceanWaves;
118
- const enableLighting = options.enableLighting;
119
- const dynamicAtmosphereLighting = options.dynamicAtmosphereLighting;
120
- const dynamicAtmosphereLightingFromSun =
121
- options.dynamicAtmosphereLightingFromSun;
122
- const showGroundAtmosphere = options.showGroundAtmosphere;
123
- const perFragmentGroundAtmosphere = options.perFragmentGroundAtmosphere;
124
- const hasVertexNormals = options.hasVertexNormals;
125
- const useWebMercatorProjection = options.useWebMercatorProjection;
126
- const enableFog = options.enableFog;
127
- const enableClippingPlanes = options.enableClippingPlanes;
128
- const clippingPlanes = options.clippingPlanes;
129
- const enableClippingPolygons = options.enableClippingPolygons;
130
- const clippingPolygons = options.clippingPolygons;
131
- const clippedByBoundaries = options.clippedByBoundaries;
132
- const hasImageryLayerCutout = options.hasImageryLayerCutout;
133
- const colorCorrect = options.colorCorrect;
134
- const highlightFillTile = options.highlightFillTile;
135
- const colorToAlpha = options.colorToAlpha;
136
- const hasGeodeticSurfaceNormals = options.hasGeodeticSurfaceNormals;
137
- const hasExaggeration = options.hasExaggeration;
138
- const showUndergroundColor = options.showUndergroundColor;
139
- const translucent = options.translucent;
140
-
141
- let quantization = 0;
142
- let quantizationDefine = "";
143
-
144
- const mesh = surfaceTile.renderedMesh;
145
- const terrainEncoding = mesh.encoding;
146
- const quantizationMode = terrainEncoding.quantization;
147
- if (quantizationMode === TerrainQuantization.BITS12) {
148
- quantization = 1;
149
- quantizationDefine = "QUANTIZATION_BITS12";
150
- }
151
-
152
- let cartographicLimitRectangleFlag = 0;
153
- let cartographicLimitRectangleDefine = "";
154
- if (clippedByBoundaries) {
155
- cartographicLimitRectangleFlag = 1;
156
- cartographicLimitRectangleDefine = "TILE_LIMIT_RECTANGLE";
157
- }
158
-
159
- let imageryCutoutFlag = 0;
160
- let imageryCutoutDefine = "";
161
- if (hasImageryLayerCutout) {
162
- imageryCutoutFlag = 1;
163
- imageryCutoutDefine = "APPLY_IMAGERY_CUTOUT";
164
- }
165
-
166
- const sceneMode = frameState.mode;
167
- // Bitwise OR uses 32-bit integers; bits 0-31 are packed below.
168
- // Flags beyond bit 31 use arithmetic to avoid silent wrap-around
169
- // (x << 32 === x << 0 in JavaScript).
170
- const flags =
171
- ((sceneMode |
172
- (applyBrightness << 2) |
173
- (applyContrast << 3) |
174
- (applyHue << 4) |
175
- (applySaturation << 5) |
176
- (applyGamma << 6) |
177
- (applyAlpha << 7) |
178
- (hasWaterMask << 8) |
179
- (showReflectiveOcean << 9) |
180
- (showOceanWaves << 10) |
181
- (enableLighting << 11) |
182
- (dynamicAtmosphereLighting << 12) |
183
- (dynamicAtmosphereLightingFromSun << 13) |
184
- (showGroundAtmosphere << 14) |
185
- (perFragmentGroundAtmosphere << 15) |
186
- (hasVertexNormals << 16) |
187
- (useWebMercatorProjection << 17) |
188
- (enableFog << 18) |
189
- (quantization << 19) |
190
- (applySplit << 20) |
191
- (enableClippingPlanes << 21) |
192
- (enableClippingPolygons << 22) |
193
- (cartographicLimitRectangleFlag << 23) |
194
- (imageryCutoutFlag << 24) |
195
- (colorCorrect << 25) |
196
- (highlightFillTile << 26) |
197
- (colorToAlpha << 27) |
198
- (hasGeodeticSurfaceNormals << 28) |
199
- (hasExaggeration << 29) |
200
- (showUndergroundColor << 30) |
201
- (translucent << 31)) >>>
202
- 0) +
203
- (applyDayNightAlpha ? 0x100000000 : 0) +
204
- (applyToneMatch ? 0x200000000 : 0) +
205
- (applyToneMatchEdge ? 0x400000000 : 0) +
206
- (applyToneMatchCross ? 0x800000000 : 0);
207
-
208
- let currentClippingShaderState = 0;
209
- if (defined(clippingPlanes) && clippingPlanes.length > 0) {
210
- currentClippingShaderState = enableClippingPlanes
211
- ? clippingPlanes.clippingPlanesState
212
- : 0;
213
- }
214
-
215
- let currentClippingPolygonsShaderState = 0;
216
- if (defined(clippingPolygons) && clippingPolygons.length > 0) {
217
- currentClippingPolygonsShaderState = enableClippingPolygons
218
- ? clippingPolygons.clippingPolygonsState
219
- : 0;
220
- }
221
-
222
- let surfaceShader = surfaceTile.surfaceShader;
223
- if (
224
- defined(surfaceShader) &&
225
- surfaceShader.numberOfDayTextures === numberOfDayTextures &&
226
- surfaceShader.flags === flags &&
227
- surfaceShader.material === this.material &&
228
- surfaceShader.clippingShaderState === currentClippingShaderState &&
229
- surfaceShader.clippingPolygonShaderState ===
230
- currentClippingPolygonsShaderState
231
- ) {
232
- return surfaceShader.shaderProgram;
233
- }
234
-
235
- // New tile, or tile changed number of textures, flags, or clipping planes
236
- let shadersByFlags = this._shadersByTexturesFlags[numberOfDayTextures];
237
- if (!defined(shadersByFlags)) {
238
- shadersByFlags = this._shadersByTexturesFlags[numberOfDayTextures] = [];
239
- }
240
-
241
- surfaceShader = shadersByFlags[flags];
242
- if (
243
- !defined(surfaceShader) ||
244
- surfaceShader.material !== this.material ||
245
- surfaceShader.clippingShaderState !== currentClippingShaderState ||
246
- surfaceShader.clippingPolygonShaderState !==
247
- currentClippingPolygonsShaderState
248
- ) {
249
- // Cache miss - we've never seen this combination of numberOfDayTextures and flags before.
250
- const vs = this.baseVertexShaderSource.clone();
251
- const fs = this.baseFragmentShaderSource.clone();
252
-
253
- // Need to go before GlobeFS
254
- if (currentClippingShaderState !== 0) {
255
- fs.sources.unshift(
256
- getClippingFunction(clippingPlanes, frameState.context),
257
- );
258
- }
259
-
260
- // Need to go before GlobeFS
261
- if (currentClippingPolygonsShaderState !== 0) {
262
- fs.sources.unshift(getPolygonClippingFunction(frameState.context));
263
- vs.sources.unshift(getUnpackClippingFunction(frameState.context));
264
- }
265
-
266
- vs.defines.push(quantizationDefine);
267
- fs.defines.push(
268
- `TEXTURE_UNITS ${numberOfDayTextures}`,
269
- cartographicLimitRectangleDefine,
270
- imageryCutoutDefine,
271
- );
272
-
273
- if (applyBrightness) {
274
- fs.defines.push("APPLY_BRIGHTNESS");
275
- }
276
- if (applyContrast) {
277
- fs.defines.push("APPLY_CONTRAST");
278
- }
279
- if (applyHue) {
280
- fs.defines.push("APPLY_HUE");
281
- }
282
- if (applySaturation) {
283
- fs.defines.push("APPLY_SATURATION");
284
- }
285
- if (applyGamma) {
286
- fs.defines.push("APPLY_GAMMA");
287
- }
288
- if (applyToneMatch) {
289
- fs.defines.push("APPLY_TONE_MATCH");
290
- }
291
- if (applyToneMatchEdge) {
292
- fs.defines.push("APPLY_TONE_MATCH_EDGE");
293
- }
294
- if (applyToneMatchCross) {
295
- fs.defines.push("APPLY_TONE_MATCH_CROSS");
296
- }
297
- if (applyAlpha) {
298
- fs.defines.push("APPLY_ALPHA");
299
- }
300
- if (applyDayNightAlpha) {
301
- fs.defines.push("APPLY_DAY_NIGHT_ALPHA");
302
- }
303
- if (hasWaterMask) {
304
- fs.defines.push("HAS_WATER_MASK");
305
- }
306
- if (showReflectiveOcean) {
307
- fs.defines.push("SHOW_REFLECTIVE_OCEAN");
308
- vs.defines.push("SHOW_REFLECTIVE_OCEAN");
309
- }
310
- if (showOceanWaves) {
311
- fs.defines.push("SHOW_OCEAN_WAVES");
312
- }
313
- if (colorToAlpha) {
314
- fs.defines.push("APPLY_COLOR_TO_ALPHA");
315
- }
316
- if (showUndergroundColor) {
317
- vs.defines.push("UNDERGROUND_COLOR");
318
- fs.defines.push("UNDERGROUND_COLOR");
319
- }
320
- if (translucent) {
321
- vs.defines.push("TRANSLUCENT");
322
- fs.defines.push("TRANSLUCENT");
323
- }
324
- if (enableLighting) {
325
- if (hasVertexNormals) {
326
- vs.defines.push("ENABLE_VERTEX_LIGHTING");
327
- fs.defines.push("ENABLE_VERTEX_LIGHTING");
328
- } else {
329
- vs.defines.push("ENABLE_DAYNIGHT_SHADING");
330
- fs.defines.push("ENABLE_DAYNIGHT_SHADING");
331
- }
332
- }
333
-
334
- if (dynamicAtmosphereLighting) {
335
- vs.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING");
336
- fs.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING");
337
- if (dynamicAtmosphereLightingFromSun) {
338
- vs.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN");
339
- fs.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN");
340
- }
341
- }
342
-
343
- if (showGroundAtmosphere) {
344
- vs.defines.push("GROUND_ATMOSPHERE");
345
- fs.defines.push("GROUND_ATMOSPHERE");
346
- if (perFragmentGroundAtmosphere) {
347
- vs.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE");
348
- fs.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE");
349
- }
350
- }
351
-
352
- vs.defines.push("INCLUDE_WEB_MERCATOR_Y");
353
- fs.defines.push("INCLUDE_WEB_MERCATOR_Y");
354
-
355
- if (enableFog) {
356
- vs.defines.push("FOG");
357
- fs.defines.push("FOG");
358
- }
359
-
360
- if (applySplit) {
361
- fs.defines.push("APPLY_SPLIT");
362
- }
363
-
364
- if (enableClippingPlanes) {
365
- fs.defines.push("ENABLE_CLIPPING_PLANES");
366
- }
367
-
368
- if (enableClippingPolygons) {
369
- fs.defines.push("ENABLE_CLIPPING_POLYGONS");
370
- vs.defines.push("ENABLE_CLIPPING_POLYGONS");
371
-
372
- if (clippingPolygons.inverse) {
373
- fs.defines.push("CLIPPING_INVERSE");
374
- }
375
-
376
- fs.defines.push(
377
- `CLIPPING_POLYGON_REGIONS_LENGTH ${clippingPolygons.extentsCount}`,
378
- );
379
- vs.defines.push(
380
- `CLIPPING_POLYGON_REGIONS_LENGTH ${clippingPolygons.extentsCount}`,
381
- );
382
- }
383
-
384
- if (colorCorrect) {
385
- fs.defines.push("COLOR_CORRECT");
386
- }
387
-
388
- if (highlightFillTile) {
389
- fs.defines.push("HIGHLIGHT_FILL_TILE");
390
- }
391
-
392
- if (hasGeodeticSurfaceNormals) {
393
- vs.defines.push("GEODETIC_SURFACE_NORMALS");
394
- }
395
-
396
- if (hasExaggeration) {
397
- vs.defines.push("EXAGGERATION");
398
- }
399
-
400
- let computeDayColor =
401
- "\
402
- vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)\n\
403
- {\n\
404
- vec4 color = initialColor;\n";
405
-
406
- if (hasImageryLayerCutout) {
407
- computeDayColor +=
408
- "\
409
- vec4 cutoutAndColorResult;\n\
410
- bool texelUnclipped;\n";
411
- }
412
-
413
- for (let i = 0; i < numberOfDayTextures; ++i) {
414
- if (applyToneMatchEdge) {
415
- computeDayColor += `\
416
- vec3 toneGain${i} = u_dayTextureToneGain[${i}];
417
- vec3 toneBias${i} = u_dayTextureToneBias[${i}];
418
- {
419
- // Per-edge sequential blend; edges with width 0 (same-level / finer /
420
- // no neighbor) must NOT participate: an argmin over all four edge
421
- // distances truncates the band into diagonal wedges at corners where
422
- // an active edge meets an inactive one.
423
- vec2 toneEdgeUV${i} = textureCoordinates.xy;
424
- float toneEdgeW${i};
425
- float toneEdgeT${i};
426
- toneEdgeW${i} = u_dayTextureToneEdgeBlend[${i * 4}];
427
- if (toneEdgeW${i} > 0.0) {
428
- toneEdgeT${i} = smoothstep(0.0, toneEdgeW${i}, toneEdgeUV${i}.y);
429
- toneGain${i} = mix(u_dayTextureToneEdgeGain[${i * 4}], toneGain${i}, toneEdgeT${i});
430
- toneBias${i} = mix(u_dayTextureToneEdgeBias[${i * 4}], toneBias${i}, toneEdgeT${i});
431
- }
432
- toneEdgeW${i} = u_dayTextureToneEdgeBlend[${i * 4 + 1}];
433
- if (toneEdgeW${i} > 0.0) {
434
- toneEdgeT${i} = smoothstep(0.0, toneEdgeW${i}, 1.0 - toneEdgeUV${i}.x);
435
- toneGain${i} = mix(u_dayTextureToneEdgeGain[${i * 4 + 1}], toneGain${i}, toneEdgeT${i});
436
- toneBias${i} = mix(u_dayTextureToneEdgeBias[${i * 4 + 1}], toneBias${i}, toneEdgeT${i});
437
- }
438
- toneEdgeW${i} = u_dayTextureToneEdgeBlend[${i * 4 + 2}];
439
- if (toneEdgeW${i} > 0.0) {
440
- toneEdgeT${i} = smoothstep(0.0, toneEdgeW${i}, 1.0 - toneEdgeUV${i}.y);
441
- toneGain${i} = mix(u_dayTextureToneEdgeGain[${i * 4 + 2}], toneGain${i}, toneEdgeT${i});
442
- toneBias${i} = mix(u_dayTextureToneEdgeBias[${i * 4 + 2}], toneBias${i}, toneEdgeT${i});
443
- }
444
- toneEdgeW${i} = u_dayTextureToneEdgeBlend[${i * 4 + 3}];
445
- if (toneEdgeW${i} > 0.0) {
446
- toneEdgeT${i} = smoothstep(0.0, toneEdgeW${i}, toneEdgeUV${i}.x);
447
- toneGain${i} = mix(u_dayTextureToneEdgeGain[${i * 4 + 3}], toneGain${i}, toneEdgeT${i});
448
- toneBias${i} = mix(u_dayTextureToneEdgeBias[${i * 4 + 3}], toneBias${i}, toneEdgeT${i});
449
- }
450
- }
451
- `;
452
- }
453
- if (applyToneMatchCross) {
454
- computeDayColor += `\
455
- vec4 tonePrevColor${i} = color;\n`;
456
- }
457
- if (hasImageryLayerCutout) {
458
- computeDayColor += `\
459
- cutoutAndColorResult = u_dayTextureCutoutRectangles[${i}];\n\
460
- texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y;\n\
461
- cutoutAndColorResult = sampleAndBlend(\n`;
462
- } else {
463
- computeDayColor +=
464
- "\
465
- color = sampleAndBlend(\n";
466
- }
467
- computeDayColor += `\
468
- color,\n\
469
- u_dayTextures[${i}],\n\
470
- u_dayTextureUseWebMercatorT[${i}] ? textureCoordinates.xz : textureCoordinates.xy,\n\
471
- u_dayTextureTexCoordsRectangle[${i}],\n\
472
- u_dayTextureTranslationAndScale[${i}],\n\
473
- ${applyAlpha ? `u_dayTextureAlpha[${i}]` : "1.0"},\n\
474
- ${applyDayNightAlpha ? `u_dayTextureNightAlpha[${i}]` : "1.0"},\n\
475
- ${applyDayNightAlpha ? `u_dayTextureDayAlpha[${i}]` : "1.0"},\n\
476
- ${applyBrightness ? `u_dayTextureBrightness[${i}]` : "0.0"},\n\
477
- ${applyContrast ? `u_dayTextureContrast[${i}]` : "0.0"},\n\
478
- ${applyHue ? `u_dayTextureHue[${i}]` : "0.0"},\n\
479
- ${applySaturation ? `u_dayTextureSaturation[${i}]` : "0.0"},\n\
480
- ${applyGamma ? `u_dayTextureOneOverGamma[${i}]` : "0.0"},\n\
481
- ${
482
- applyToneMatchEdge
483
- ? `toneGain${i}`
484
- : applyToneMatch
485
- ? `u_dayTextureToneGain[${i}]`
486
- : "vec3(1.0)"
487
- },\n\
488
- ${
489
- applyToneMatchEdge
490
- ? `toneBias${i}`
491
- : applyToneMatch
492
- ? `u_dayTextureToneBias[${i}]`
493
- : "vec3(0.0)"
494
- },\n\
495
- ${applySplit ? `u_dayTextureSplit[${i}]` : "0.0"},\n\
496
- ${colorToAlpha ? `u_colorsToAlpha[${i}]` : "vec4(0.0)"},\n\
497
- nightBlend\);\n`;
498
- if (hasImageryLayerCutout) {
499
- computeDayColor +=
500
- "\
501
- color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color);\n";
502
- }
503
- if (applyToneMatchCross) {
504
- computeDayColor += `\
505
- if (u_dayTextureCrossBlend[${i * 4}] + u_dayTextureCrossBlend[${i * 4 + 1}] + u_dayTextureCrossBlend[${i * 4 + 2}] + u_dayTextureCrossBlend[${i * 4 + 3}] > 0.0) {
506
- vec4 crossResult${i} = sampleAndBlend(
507
- tonePrevColor${i},
508
- u_dayTextureCrossTexture[${i}],
509
- u_dayTextureUseWebMercatorT[${i}] ? textureCoordinates.xz : textureCoordinates.xy,
510
- u_dayTextureTexCoordsRectangle[${i}],
511
- u_dayTextureCrossTranslationAndScale[${i}],
512
- ${applyAlpha ? `u_dayTextureAlpha[${i}]` : "1.0"},
513
- ${applyDayNightAlpha ? `u_dayTextureNightAlpha[${i}]` : "1.0"},
514
- ${applyDayNightAlpha ? `u_dayTextureDayAlpha[${i}]` : "1.0"},
515
- ${applyBrightness ? `u_dayTextureBrightness[${i}]` : "0.0"},
516
- ${applyContrast ? `u_dayTextureContrast[${i}]` : "0.0"},
517
- ${applyHue ? `u_dayTextureHue[${i}]` : "0.0"},
518
- ${applySaturation ? `u_dayTextureSaturation[${i}]` : "0.0"},
519
- ${applyGamma ? `u_dayTextureOneOverGamma[${i}]` : "0.0"},
520
- u_dayTextureCrossGain[${i}],
521
- u_dayTextureCrossBias[${i}],
522
- ${applySplit ? `u_dayTextureSplit[${i}]` : "0.0"},
523
- ${colorToAlpha ? `u_colorsToAlpha[${i}]` : "vec4(0.0)"},
524
- nightBlend);
525
- ${
526
- hasImageryLayerCutout
527
- ? `\
528
- crossResult${i} = czm_branchFreeTernary(texelUnclipped, crossResult${i}, tonePrevColor${i});\n`
529
- : ""
530
- }\
531
- // Only edges with a positive width participate; combining by min over
532
- // active edges keeps the fade band anchored to the seam. An argmin over
533
- // all four distances lets a width-0 edge win near active/inactive
534
- // corners, truncating the band into periodic unblended wedges.
535
- float crossT${i} = 1.0;
536
- float crossW${i};
537
- float crossTOne${i};
538
- crossW${i} = u_dayTextureCrossBlend[${i * 4}];
539
- if (crossW${i} > 0.0) {
540
- crossTOne${i} = smoothstep(0.0, crossW${i}, textureCoordinates.y);
541
- crossT${i} = min(crossT${i}, crossTOne${i});
542
- }
543
- crossW${i} = u_dayTextureCrossBlend[${i * 4 + 1}];
544
- if (crossW${i} > 0.0) {
545
- crossTOne${i} = smoothstep(0.0, crossW${i}, 1.0 - textureCoordinates.x);
546
- crossT${i} = min(crossT${i}, crossTOne${i});
547
- }
548
- crossW${i} = u_dayTextureCrossBlend[${i * 4 + 2}];
549
- if (crossW${i} > 0.0) {
550
- crossTOne${i} = smoothstep(0.0, crossW${i}, 1.0 - textureCoordinates.y);
551
- crossT${i} = min(crossT${i}, crossTOne${i});
552
- }
553
- crossW${i} = u_dayTextureCrossBlend[${i * 4 + 3}];
554
- if (crossW${i} > 0.0) {
555
- crossTOne${i} = smoothstep(0.0, crossW${i}, textureCoordinates.x);
556
- crossT${i} = min(crossT${i}, crossTOne${i});
557
- }
558
- color = mix(crossResult${i}, color, crossT${i});
559
- }
560
- `;
561
- }
562
- }
563
-
564
- computeDayColor +=
565
- "\
566
- return color;\n\
567
- }";
568
-
569
- fs.sources.push(computeDayColor);
570
-
571
- vs.sources.push(getPositionMode(sceneMode));
572
- vs.sources.push(get2DYPositionFraction(useWebMercatorProjection));
573
-
574
- const shader = ShaderProgram.fromCache({
575
- context: frameState.context,
576
- vertexShaderSource: vs,
577
- fragmentShaderSource: fs,
578
- attributeLocations: terrainEncoding.getAttributeLocations(),
579
- });
580
-
581
- surfaceShader = shadersByFlags[flags] = new GlobeSurfaceShader(
582
- numberOfDayTextures,
583
- flags,
584
- this.material,
585
- shader,
586
- currentClippingShaderState,
587
- currentClippingPolygonsShaderState,
588
- );
589
- }
590
-
591
- surfaceTile.surfaceShader = surfaceShader;
592
- return surfaceShader.shaderProgram;
593
- };
594
-
595
- GlobeSurfaceShaderSet.prototype.destroy = function () {
596
- let flags;
597
- let shader;
598
-
599
- const shadersByTexturesFlags = this._shadersByTexturesFlags;
600
- for (const textureCount in shadersByTexturesFlags) {
601
- if (shadersByTexturesFlags.hasOwnProperty(textureCount)) {
602
- const shadersByFlags = shadersByTexturesFlags[textureCount];
603
- if (!defined(shadersByFlags)) {
604
- continue;
605
- }
606
-
607
- for (flags in shadersByFlags) {
608
- if (shadersByFlags.hasOwnProperty(flags)) {
609
- shader = shadersByFlags[flags];
610
- if (defined(shader)) {
611
- shader.shaderProgram.destroy();
612
- }
613
- }
614
- }
615
- }
616
- }
617
-
618
- return destroyObject(this);
619
- };
620
717
  export default GlobeSurfaceShaderSet;