@arcgis/core 4.25.0-next.20220705 → 4.25.0-next.20220708

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 (336) hide show
  1. package/TimeExtent.js +1 -1
  2. package/arcade/arcadeCompiler.js +1 -1
  3. package/assets/esri/core/workers/RemoteClient.js +1 -1
  4. package/assets/esri/core/workers/chunks/0703495557b0df6878c5.js +1 -0
  5. package/assets/esri/core/workers/chunks/1570676351a313f1841b.js +1 -0
  6. package/assets/esri/core/workers/chunks/{695f90305478f5024fa7.js → 1ecbf642debc2207b762.js} +1 -1
  7. package/assets/esri/core/workers/chunks/{30dbdf2aa1bc8e61cad4.js → 268e7b46202fc1decf9f.js} +1 -1
  8. package/assets/esri/core/workers/chunks/{47d78b4f7117554acecf.js → 357a27203f5d8fa152de.js} +1 -1
  9. package/assets/esri/core/workers/chunks/35dfba25a9077ab5dbaf.js +982 -0
  10. package/assets/esri/core/workers/chunks/377354a81e402edf3077.js +1 -0
  11. package/assets/esri/core/workers/chunks/3a42d96ea3b59d33bfe8.js +1 -0
  12. package/assets/esri/core/workers/chunks/3a61e4ab83183f5526a7.js +1 -0
  13. package/assets/esri/core/workers/chunks/{3790f0362b6f27ee798b.js → 3ee5e8d00cd3bc47a9fa.js} +1 -1
  14. package/assets/esri/core/workers/chunks/425d1fabc713a598139c.js +1 -0
  15. package/assets/esri/core/workers/chunks/425e16862feccb467191.js +1 -0
  16. package/assets/esri/core/workers/chunks/{bbe51b49fe7093e47306.js → 48c8ac9a22190c2b890c.js} +1 -1
  17. package/assets/esri/core/workers/chunks/4a364bc073fdc7c1b563.js +1 -0
  18. package/assets/esri/core/workers/chunks/4ca6ada7a4ccde5b5a24.js +1 -0
  19. package/assets/esri/core/workers/chunks/{905130ff0118962c8140.js → 61b71b8e028eda10ccab.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{b34cffd5c45d3a8134bc.js → 69f57ad2227e59b323e8.js} +1 -1
  21. package/assets/esri/core/workers/chunks/{290899b47a52f8b28a9c.js → 791220164501a791b2cd.js} +1 -1
  22. package/assets/esri/core/workers/chunks/792b4b0a43b4bbbc14ab.js +1 -0
  23. package/assets/esri/core/workers/chunks/7b32b8e8ebe48ae0dae2.js +1 -0
  24. package/assets/esri/core/workers/chunks/7f00125b02bb7211de43.js +1 -0
  25. package/assets/esri/core/workers/chunks/81074accfce5f109f909.js +1 -0
  26. package/assets/esri/core/workers/chunks/{594d7fdb80ad9cdedb85.js → 823e25dbc70e71257b6e.js} +1 -1
  27. package/assets/esri/core/workers/chunks/92e43e05265dfc8173a0.js +1 -0
  28. package/assets/esri/core/workers/chunks/{40fa9b28ca882a70813a.js → 92f7415c2e40e320addc.js} +1 -1
  29. package/assets/esri/core/workers/chunks/{9520b32d5d53ea9cd0d3.js → 9341e9e1fe0f6800aa44.js} +1 -1
  30. package/assets/esri/core/workers/chunks/95451d6405729a9f50c7.js +1 -0
  31. package/assets/esri/core/workers/chunks/{910a2ffb4328f8ee7a0d.js → 95cb9cd08941c28ebd85.js} +1 -1
  32. package/assets/esri/core/workers/chunks/{97f32af5893c86f6444c.js → 9b9a40b84640f00a1dcb.js} +1 -1
  33. package/assets/esri/core/workers/chunks/{77c6ba5ea85915d9078c.js → ac07c732aca6e67232f8.js} +1 -1
  34. package/assets/esri/core/workers/chunks/ae8e87da97411cff3783.js +1 -0
  35. package/assets/esri/core/workers/chunks/{65161a874595b0a34aa1.js → b312dd3027492007d75e.js} +1 -1
  36. package/assets/esri/core/workers/chunks/{83c9da68d6dbc77f60e5.js → beead2b06c994b4e61af.js} +1 -1
  37. package/assets/esri/core/workers/chunks/{5e20fd8b7c9497f2da1f.js → bfb08d3e2208c6178af9.js} +1 -1
  38. package/assets/esri/core/workers/chunks/{04e5486f0d8d4c6bd8a2.js → c3236a7058e64ea3b939.js} +1 -1
  39. package/assets/esri/core/workers/chunks/c4e9c71be6299c60c539.js +1 -0
  40. package/assets/esri/core/workers/chunks/c705f907ce60a646d9aa.js +1 -0
  41. package/assets/esri/core/workers/chunks/ce6abfafa0171b9c8d81.js +1 -0
  42. package/assets/esri/core/workers/chunks/{08a5c5a33a7c7c6852e5.js → d00b0f8236f1526099d4.js} +1 -1
  43. package/assets/esri/core/workers/chunks/d13951412a57e1af6208.js +1 -0
  44. package/assets/esri/core/workers/chunks/ecaf8f030026e41e1d1a.js +1 -0
  45. package/assets/esri/core/workers/chunks/f328a6cd4b7d8c653fc7.js +1 -0
  46. package/assets/esri/core/workers/chunks/f6a6178d4df029ff010d.js +1 -0
  47. package/assets/esri/core/workers/chunks/fde2301c6cd97a3cfb86.js +1 -0
  48. package/assets/esri/core/workers/chunks/fe84bcdfd9028b5e7ef6.js +1 -0
  49. package/assets/esri/themes/base/widgets/_BasemapLayerList.scss +4 -0
  50. package/assets/esri/themes/base/widgets/_LayerList.scss +4 -0
  51. package/assets/esri/themes/dark/main.css +1 -1
  52. package/assets/esri/themes/light/main.css +1 -1
  53. package/assets/esri/themes/light/view.css +1 -1
  54. package/chunks/CheckerBoard.glsl.js +2 -2
  55. package/chunks/ColorMaterial.glsl.js +9 -9
  56. package/chunks/ComponentShader.glsl.js +33 -33
  57. package/chunks/DefaultMaterial.glsl.js +35 -35
  58. package/chunks/HUDMaterial.glsl.js +11 -11
  59. package/chunks/ImageMaterial.glsl.js +5 -5
  60. package/chunks/LineMarker.glsl.js +17 -17
  61. package/chunks/NativeLine.glsl.js +3 -3
  62. package/chunks/Path.glsl.js +28 -28
  63. package/chunks/Pattern.glsl.js +9 -9
  64. package/chunks/PointRenderer.glsl.js +1 -1
  65. package/chunks/RealisticTree.glsl.js +4 -4
  66. package/chunks/RibbonLine.glsl.js +1 -1
  67. package/chunks/ShadedColorMaterial.glsl.js +1 -1
  68. package/chunks/SimpleAtmosphere.glsl.js +1 -1
  69. package/chunks/Terrain.glsl.js +92 -92
  70. package/chunks/WaterSurface.glsl.js +22 -22
  71. package/chunks/common.js +1 -1
  72. package/chunks/mat2.js +1 -1
  73. package/chunks/mat2d.js +1 -1
  74. package/chunks/mat3.js +1 -1
  75. package/chunks/mat4.js +1 -1
  76. package/chunks/quat.js +1 -1
  77. package/chunks/quat2.js +1 -1
  78. package/chunks/vec2.js +1 -1
  79. package/chunks/vec3.js +1 -1
  80. package/chunks/vec4.js +1 -1
  81. package/core/Message.js +1 -1
  82. package/core/accessorSupport/tracking.js +1 -1
  83. package/core/libs/gl-matrix-2/math/common.js +1 -1
  84. package/core/libs/gl-matrix-2/math/vec2.js +1 -1
  85. package/core/pbf.js +1 -1
  86. package/core/quantity.js +0 -1
  87. package/core/sql/WhereClause.js +1 -1
  88. package/core/urlUtils.js +1 -1
  89. package/geometry/support/scaleUtils.js +1 -1
  90. package/identity/IdentityForm.js +1 -1
  91. package/identity/IdentityModal.js +1 -1
  92. package/identity/OAuthCredential.js +1 -1
  93. package/interfaces.d.ts +3347 -190
  94. package/intl/date.js +1 -1
  95. package/intl/duration.js +1 -1
  96. package/intl/messages.js +1 -1
  97. package/intl/substitute.js +1 -1
  98. package/kernel.js +1 -1
  99. package/layers/ImageryTileLayer.js +1 -1
  100. package/layers/VoxelWasmPerSceneView.js +1 -1
  101. package/layers/mixins/ArcGISImageService.js +1 -1
  102. package/layers/mixins/ImageryTileMixin.js +1 -1
  103. package/layers/support/ControlPointsGeoreference.d.ts +4 -0
  104. package/layers/support/ControlPointsGeoreference.js +5 -0
  105. package/layers/support/CornersGeoreference.js +1 -1
  106. package/layers/support/ElevationSamplerData.js +5 -0
  107. package/layers/support/ElevationTile.js +1 -1
  108. package/layers/support/ExportImageServiceParameters.js +1 -1
  109. package/layers/support/MediaElementBase.js +1 -1
  110. package/layers/support/imageryRendererUtils.js +1 -1
  111. package/layers/support/rasterDatasets/TIFFRaster.js +1 -1
  112. package/package.json +1 -1
  113. package/renderers/support/RasterSymbolizer.js +1 -1
  114. package/request.js +1 -1
  115. package/rest/route/utils.js +1 -1
  116. package/rest/serviceArea.js +1 -1
  117. package/rest/support/ServiceAreaParameters.js +1 -1
  118. package/rest/support/ServiceAreaSolveResult.js +1 -1
  119. package/smartMapping/raster/renderers/classBreaks.js +1 -1
  120. package/smartMapping/raster/renderers/uniqueValue.js +1 -1
  121. package/support/apiKeyUtils.js +1 -1
  122. package/support/requestUtils.js +1 -1
  123. package/support/revision.js +1 -1
  124. package/views/2d/layers/MapNotesLayerView2D.js +1 -1
  125. package/views/2d/navigation/actions/Pinch.js +1 -1
  126. package/views/2d/tiling/TileCache.js +1 -1
  127. package/views/2d/viewpointUtils.js +1 -1
  128. package/views/3d/environment/ChapmanAtmosphereTechnique.js +1 -1
  129. package/views/3d/environment/CloudsCompositionTechnique.js +1 -1
  130. package/views/3d/environment/CloudsTechnique.js +1 -1
  131. package/views/3d/environment/EnvironmentRenderer.js +1 -1
  132. package/views/3d/environment/FogTechnique.js +1 -1
  133. package/views/3d/environment/NoiseTextureAtlasTechnique.js +1 -1
  134. package/views/3d/environment/Precipitation.js +1 -1
  135. package/views/3d/environment/PrecipitationTechnique.js +1 -1
  136. package/views/3d/environment/SimpleAtmosphereTechnique.js +1 -1
  137. package/views/3d/environment/SimpleAtmosphereTechniqueConfiguration.js +1 -1
  138. package/views/3d/environment/StarsTechnique.js +1 -1
  139. package/views/3d/externalRenderers/ExternalRendererStore.js +1 -1
  140. package/views/3d/interactive/Manipulator3D.js +1 -1
  141. package/views/3d/interactive/visualElements/LabelVisualElement.js +1 -1
  142. package/views/3d/interactive/visualElements/ParallelLineVisualElement.js +1 -1
  143. package/views/3d/layers/FeatureLayerViewBase3D.js +1 -1
  144. package/views/3d/layers/FeatureLikeLayerView3D.js +1 -1
  145. package/views/3d/layers/ImageryLayerView3D.js +1 -1
  146. package/views/3d/layers/SceneLayerGraphicsView3D.js +1 -1
  147. package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
  148. package/views/3d/layers/graphics/Graphics3DFeatureProcessor.js +1 -1
  149. package/views/3d/layers/i3s/PointRenderer.js +1 -1
  150. package/views/3d/layers/support/FeatureVisibilityFilter.js +5 -0
  151. package/views/3d/layers/support/HeatmapFeatureProcessor.js +1 -1
  152. package/views/3d/state/ViewStateManager.js +1 -1
  153. package/views/3d/support/LaserlinePathData.js +1 -1
  154. package/views/3d/support/ResourceController.js +1 -1
  155. package/views/3d/terrain/BlendLayersTechnique.js +1 -1
  156. package/views/3d/terrain/ElevationData.js +1 -1
  157. package/views/3d/terrain/GeometryState.js +1 -1
  158. package/views/3d/terrain/OverlayRenderTarget.js +1 -1
  159. package/views/3d/terrain/OverlayRenderer.js +1 -1
  160. package/views/3d/terrain/PatchGeometryFactory.js +1 -1
  161. package/views/3d/terrain/PatchRenderData.js +1 -1
  162. package/views/3d/terrain/RasterColorizerTechnique.js +1 -1
  163. package/views/3d/terrain/TerrainConst.js +1 -1
  164. package/views/3d/terrain/TerrainRenderer.js +1 -1
  165. package/views/3d/terrain/TerrainSurface.js +1 -1
  166. package/views/3d/terrain/Tile.js +1 -1
  167. package/views/3d/terrain/tileUtils.js +1 -1
  168. package/views/3d/webgl-engine/collections/Component/ComponentObjectCollection.js +1 -1
  169. package/views/3d/webgl-engine/collections/Component/Material/ComponentMaterial.js +1 -1
  170. package/views/3d/webgl-engine/collections/Component/Material/ComponentTechnique.js +1 -1
  171. package/views/3d/webgl-engine/collections/Component/Material/ComponentTechniqueConfiguration.js +1 -1
  172. package/views/3d/webgl-engine/collections/Component/Material/shader/ComponentShader.glsl.js +1 -1
  173. package/views/3d/webgl-engine/core/renderPasses/RenderPass.js +1 -1
  174. package/views/3d/webgl-engine/core/renderPasses/RenderPassManager.js +1 -1
  175. package/views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepth.glsl.js +2 -2
  176. package/views/3d/webgl-engine/core/shaderLibrary/ShaderOutput.js +5 -0
  177. package/views/3d/webgl-engine/core/shaderLibrary/ShaderOutputConfiguration.js +5 -0
  178. package/views/3d/webgl-engine/core/shaderLibrary/Transform.glsl.js +4 -4
  179. package/views/3d/webgl-engine/core/shaderLibrary/attributes/InstancedDoublePrecision.glsl.js +11 -11
  180. package/views/3d/webgl-engine/core/shaderLibrary/attributes/TextureCoordinateAttribute.glsl.js +1 -1
  181. package/views/3d/webgl-engine/core/shaderLibrary/default/DefaultMaterialAuxiliaryPasses.glsl.js +55 -55
  182. package/views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js +3 -3
  183. package/views/3d/webgl-engine/core/shaderLibrary/terrain/Terrain.glsl.js +1 -1
  184. package/views/3d/webgl-engine/core/shaderTechnique/ShaderTechnique.js +1 -1
  185. package/views/3d/webgl-engine/lib/BlendWeightsTechnique.js +1 -1
  186. package/views/3d/webgl-engine/lib/BlurTechnique.js +1 -1
  187. package/views/3d/webgl-engine/lib/Camera.js +1 -1
  188. package/views/3d/webgl-engine/lib/DrapedHeatmapRenderer.js +1 -1
  189. package/views/3d/webgl-engine/lib/EdgeDetectTechnique.js +1 -1
  190. package/views/3d/webgl-engine/lib/GLMaterialRepository.js +1 -1
  191. package/views/3d/webgl-engine/lib/GLMaterials.js +1 -1
  192. package/views/3d/webgl-engine/lib/Material.js +1 -1
  193. package/views/3d/webgl-engine/lib/OffscreenRendering.js +1 -1
  194. package/views/3d/webgl-engine/lib/OrderIndependentTransparency.js +1 -1
  195. package/views/3d/webgl-engine/lib/RenderContext.js +1 -1
  196. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  197. package/views/3d/webgl-engine/lib/RenderingContext.js +1 -1
  198. package/views/3d/webgl-engine/lib/SSAOTechnique.js +1 -1
  199. package/views/3d/webgl-engine/lib/ShadowAccumulator.js +1 -1
  200. package/views/3d/webgl-engine/lib/ShadowMap.js +1 -1
  201. package/views/3d/webgl-engine/lib/SortedRenderGeometryRenderer.js +1 -1
  202. package/views/3d/webgl-engine/lib/TextureTechnique.js +1 -1
  203. package/views/3d/webgl-engine/lib/TransparencyPassType.js +5 -0
  204. package/views/3d/webgl-engine/lib/basicInterfaces.js +1 -1
  205. package/views/3d/webgl-engine/lib/edgeRendering/EdgeShaderTechnique.js +1 -1
  206. package/views/3d/webgl-engine/lib/lodRendering/LodRenderer.js +1 -1
  207. package/views/3d/webgl-engine/lib/pathGeometryUtils.js +1 -1
  208. package/views/3d/webgl-engine/materials/CheckerBoardMaterial.js +1 -1
  209. package/views/3d/webgl-engine/materials/ColorMaterial.js +1 -1
  210. package/views/3d/webgl-engine/materials/DefaultMaterial.js +1 -1
  211. package/views/3d/webgl-engine/materials/DefaultTechniqueConfiguration.js +1 -1
  212. package/views/3d/webgl-engine/materials/HUDMaterial.js +1 -1
  213. package/views/3d/webgl-engine/materials/HeatmapDensityMaterial.js +1 -1
  214. package/views/3d/webgl-engine/materials/ImageMaterial.js +1 -1
  215. package/views/3d/webgl-engine/materials/LineCalloutMaterial.js +1 -1
  216. package/views/3d/webgl-engine/materials/LineMarkerMaterial.js +1 -1
  217. package/views/3d/webgl-engine/materials/MeasurementArrowMaterial.js +1 -1
  218. package/views/3d/webgl-engine/materials/NativeLineMaterial.js +1 -1
  219. package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
  220. package/views/3d/webgl-engine/materials/PathTechnique.js +1 -1
  221. package/views/3d/webgl-engine/materials/PatternMaterial.js +1 -1
  222. package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
  223. package/views/3d/webgl-engine/materials/ShadedColorMaterial.js +1 -1
  224. package/views/3d/webgl-engine/materials/SlicePlaneMaterial.js +1 -1
  225. package/views/3d/webgl-engine/materials/WaterGLMaterial.js +1 -1
  226. package/views/3d/webgl-engine/materials/WaterMaterial.js +1 -1
  227. package/views/3d/webgl-engine/materials/WaterTechnique.js +1 -1
  228. package/views/3d/webgl-engine/materials/renderers/MergedRenderer.js +1 -1
  229. package/views/3d/webgl-engine/shaders/CheckerBoard.glsl.js +1 -1
  230. package/views/3d/webgl-engine/shaders/CheckerBoardTechnique.js +1 -1
  231. package/views/3d/webgl-engine/shaders/CheckerBoardTechniqueConfiguration.js +1 -1
  232. package/views/3d/webgl-engine/shaders/ColorMaterial.glsl.js +1 -1
  233. package/views/3d/webgl-engine/shaders/ColorMaterialTechnique.js +1 -1
  234. package/views/3d/webgl-engine/shaders/ColorMaterialTechniqueConfiguration.js +1 -1
  235. package/views/3d/webgl-engine/shaders/CompositingTechnique.js +1 -1
  236. package/views/3d/webgl-engine/shaders/DefaultMaterial.glsl.js +1 -1
  237. package/views/3d/webgl-engine/shaders/DefaultMaterialTechnique.js +1 -1
  238. package/views/3d/webgl-engine/shaders/DefaultMaterialTechniqueConfiguration.js +1 -1
  239. package/views/3d/webgl-engine/shaders/HUDMaterial.glsl.js +1 -1
  240. package/views/3d/webgl-engine/shaders/HUDMaterialTechnique.js +1 -1
  241. package/views/3d/webgl-engine/shaders/HUDMaterialTechniqueConfiguration.js +1 -1
  242. package/views/3d/webgl-engine/shaders/HeatmapDensityTechnique.js +1 -1
  243. package/views/3d/webgl-engine/shaders/HeatmapTechnique.js +1 -1
  244. package/views/3d/webgl-engine/shaders/HighlightApplyTechnique.js +1 -1
  245. package/views/3d/webgl-engine/shaders/HighlightBlurTechnique.js +1 -1
  246. package/views/3d/webgl-engine/shaders/HighlightDownsampleTechnique.js +1 -1
  247. package/views/3d/webgl-engine/shaders/ImageMaterial.glsl.js +1 -1
  248. package/views/3d/webgl-engine/shaders/ImageMaterialTechnique.js +1 -1
  249. package/views/3d/webgl-engine/shaders/LaserlinePathTechnique.js +1 -1
  250. package/views/3d/webgl-engine/shaders/LaserlineTechnique.js +1 -1
  251. package/views/3d/webgl-engine/shaders/LineCalloutTechnique.js +1 -1
  252. package/views/3d/webgl-engine/shaders/LineMarker.glsl.js +1 -1
  253. package/views/3d/webgl-engine/shaders/LineMarkerTechnique.js +1 -1
  254. package/views/3d/webgl-engine/shaders/LineMarkerTechniqueConfiguration.js +1 -1
  255. package/views/3d/webgl-engine/shaders/MeasurementArrowTechnique.js +1 -1
  256. package/views/3d/webgl-engine/shaders/NativeLine.glsl.js +1 -1
  257. package/views/3d/webgl-engine/shaders/NativeLineTechnique.js +1 -1
  258. package/views/3d/webgl-engine/shaders/NativeLineTechniqueConfiguration.js +1 -1
  259. package/views/3d/webgl-engine/shaders/Path.glsl.js +1 -1
  260. package/views/3d/webgl-engine/shaders/Pattern.glsl.js +1 -1
  261. package/views/3d/webgl-engine/shaders/PatternTechnique.js +1 -1
  262. package/views/3d/webgl-engine/shaders/PointRenderer.glsl.js +1 -1
  263. package/views/3d/webgl-engine/shaders/PointRendererTechnique.js +1 -1
  264. package/views/3d/webgl-engine/shaders/PointRendererTechniqueConfiguration.js +1 -1
  265. package/views/3d/webgl-engine/shaders/RealisticTree.glsl.js +1 -1
  266. package/views/3d/webgl-engine/shaders/RibbonLine.glsl.js +1 -1
  267. package/views/3d/webgl-engine/shaders/RibbonLineTechnique.js +1 -1
  268. package/views/3d/webgl-engine/shaders/RibbonLineTechniqueConfiguration.js +1 -1
  269. package/views/3d/webgl-engine/shaders/ShadedColorMaterial.glsl.js +1 -1
  270. package/views/3d/webgl-engine/shaders/ShadedColorMaterialTechnique.js +1 -1
  271. package/views/3d/webgl-engine/shaders/ShadowCastAccumulateTechnique.js +1 -1
  272. package/views/3d/webgl-engine/shaders/ShadowCastVisualizeTechnique.js +1 -1
  273. package/views/3d/webgl-engine/shaders/ShadowHighlightTechnique.js +1 -1
  274. package/views/3d/webgl-engine/shaders/SlicePlaneMaterialTechnique.js +1 -1
  275. package/views/3d/webgl-engine/shaders/TerrainTechnique.js +1 -1
  276. package/views/3d/webgl-engine/shaders/TerrainTechniqueConfiguration.js +1 -1
  277. package/views/3d/webgl-engine/shaders/WaterSurface.glsl.js +1 -1
  278. package/views/SceneView.js +1 -1
  279. package/views/draw/support/Reshape.js +1 -1
  280. package/views/interactive/GraphicManipulator.js +1 -1
  281. package/views/interactive/SegmentLabels.js +1 -1
  282. package/views/interactive/coordinateHelper.js +1 -1
  283. package/views/interactive/editGeometry/support/editPlaneUtils.js +1 -1
  284. package/views/interactive/snapping/ParallelLineSnapper.js +1 -1
  285. package/views/interactive/snapping/RightAngleTriangleSnapper.js +1 -1
  286. package/views/interactive/snapping/SnappingConstraint.js +1 -1
  287. package/views/interactive/snapping/SnappingManager.js +1 -1
  288. package/views/interactive/snapping/candidates/ParallelLineSnappingCandidate.js +1 -1
  289. package/views/interactive/snapping/candidates/RightAngleTriangleSnappingCandidate.js +1 -1
  290. package/views/interactive/snapping/snappingUtils.js +1 -1
  291. package/views/interactive/support/viewUtils.js +1 -1
  292. package/views/layers/ImageryTileLayerView.js +1 -1
  293. package/views/support/geometry2dUtils.js +1 -1
  294. package/webscene/Slide.js +1 -1
  295. package/widgets/BasemapLayerList.js +1 -1
  296. package/widgets/ElevationProfile/support/geometryUtils.js +1 -1
  297. package/widgets/ElevationProfile.js +1 -1
  298. package/widgets/LayerList/ListItemPanel.js +1 -1
  299. package/widgets/LayerList.js +1 -1
  300. package/widgets/Widget.js +1 -1
  301. package/widgets/Zoom/ZoomConditions3D.js +1 -1
  302. package/widgets/Zoom/ZoomViewModel.js +1 -1
  303. package/widgets/Zoom.js +1 -1
  304. package/widgets/support/widgetUtils.js +1 -1
  305. package/assets/esri/core/workers/chunks/06a7f58260225f52f8e6.js +0 -1
  306. package/assets/esri/core/workers/chunks/0e00741d35cdbf48e72d.js +0 -1
  307. package/assets/esri/core/workers/chunks/1ebb29ceabc81509646c.js +0 -1
  308. package/assets/esri/core/workers/chunks/24f7a3df08c3a2d3795c.js +0 -1
  309. package/assets/esri/core/workers/chunks/39a754713a48d46618bd.js +0 -1
  310. package/assets/esri/core/workers/chunks/462163f31fa134b7b216.js +0 -1
  311. package/assets/esri/core/workers/chunks/4bfcb7350ca492767a45.js +0 -1
  312. package/assets/esri/core/workers/chunks/5470cb0c3f670957c22c.js +0 -1
  313. package/assets/esri/core/workers/chunks/6889d698a2c796ed1ce6.js +0 -1
  314. package/assets/esri/core/workers/chunks/869310ef4c98542bf9df.js +0 -1
  315. package/assets/esri/core/workers/chunks/8ebaad46e2fe8925e3b0.js +0 -1
  316. package/assets/esri/core/workers/chunks/98c519ac806cc55bc19b.js +0 -1
  317. package/assets/esri/core/workers/chunks/9d07969fbea13aa5b03c.js +0 -1
  318. package/assets/esri/core/workers/chunks/9e6ce879ec0da884b9b8.js +0 -1
  319. package/assets/esri/core/workers/chunks/abd1bd74ba571e39ab5a.js +0 -1
  320. package/assets/esri/core/workers/chunks/b26ea76e3f41b45756e0.js +0 -1
  321. package/assets/esri/core/workers/chunks/c2286d97539066c8549a.js +0 -1
  322. package/assets/esri/core/workers/chunks/c495a66978d67c7e17f3.js +0 -1
  323. package/assets/esri/core/workers/chunks/c7fa92daca3f6e91734e.js +0 -987
  324. package/assets/esri/core/workers/chunks/c9e890b4be9d01c13efe.js +0 -1
  325. package/assets/esri/core/workers/chunks/dda5ea7f8d35e257815c.js +0 -1
  326. package/assets/esri/core/workers/chunks/e153e89c8a15c2f036ef.js +0 -1
  327. package/assets/esri/core/workers/chunks/e201ffcca7321771ee20.js +0 -1
  328. package/assets/esri/core/workers/chunks/e5b5b93e707173a4c883.js +0 -1
  329. package/assets/esri/core/workers/chunks/f7d1f75b6aa3ef566d74.js +0 -1
  330. package/assets/esri/core/workers/chunks/fde9e9683335fa6c8236.js +0 -1
  331. package/core/queryUtils.js +0 -5
  332. package/views/3d/layers/graphics/Graphics3DFilterVisibility.js +0 -5
  333. package/views/3d/layers/support/HeatmapFilterVisibility.js +0 -5
  334. package/views/3d/webgl-engine/core/shaderLibrary/ShaderOutputOptions.js +0 -5
  335. package/views/3d/webgl-engine/core/shaderLibrary/util/HeaderComment.glsl.js +0 -10
  336. package/views/3d/webgl-engine/lib/RenderPass.js +0 -5
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{isSome as e,isNone as t}from"../../../core/maybe.js";import{s as r,b as s}from"../../../chunks/vec3.js";import{c as i}from"../../../chunks/vec3f64.js";import{glLayout as o}from"./buffer/glUtil.js";import{newLayout as n}from"./buffer/InterleavedLayout.js";import{VertexAttribute as f}from"../webgl-engine/lib/VertexAttribute.js";import{LaserlinePathTechnique as u}from"../webgl-engine/shaders/LaserlinePathTechnique.js";import{BufferObject as a}from"../../webgl/BufferObject.js";import{PrimitiveType as c,Usage as h}from"../../webgl/enums.js";import{VertexArrayObject as l}from"../../webgl/VertexArrayObject.js";class _{constructor(e){this._renderCoordsHelper=e,this._buffers=null,this._origin=i(),this._dirty=!1,this._count=0,this._vao=null}set vertices(e){const t=new Float64Array(3*e.length);let r=0;for(const s of e)t[r++]=s[0],t[r++]=s[1],t[r++]=s[2];this.buffers=[t]}set buffers(e){if(this._buffers=e,this._buffers.length>0){const e=this._buffers[0],t=3*Math.floor(e.length/3/2);r(this._origin,e[t+0],e[t+1],e[t+2])}else r(this._origin,0,0,0);this._dirty=!0}get origin(){return this._origin}draw(t){const r=this._ensureVAO(t);e(r)&&(t.bindVAO(r),t.drawArrays(c.TRIANGLES,0,this._count))}dispose(){e(this._vao)&&this._vao.dispose()}_ensureVAO(e){return t(this._buffers)?null:(t(this._vao)&&(this._vao=this._createVAO(e,this._buffers)),this._ensureVertexData(this._vao,this._buffers),this._vao)}_createVAO(e,t){const r=this._createDataBuffer(t);return this._dirty=!1,new l(e,u.attributeLocations,{data:o(V)},{data:a.createVertex(e,h.STATIC_DRAW,r)})}_ensureVertexData(e,t){if(!this._dirty)return;const r=this._createDataBuffer(t);e.vertexBuffers.data.setData(r),this._dirty=!1}_numberOfRenderVertices(e){return 3*(2*(e.length/3-1))}_createDataBuffer(e){const t=e.reduce(((e,t)=>e+this._numberOfRenderVertices(t)),0);this._count=t;const i=V.createBuffer(t),o=this._origin;let n=0,f=0;for(const u of e){for(let e=0;e<u.length;e+=3){const t=r(b,u[e+0],u[e+1],u[e+2]);0===e?f=this._renderCoordsHelper.getAltitude(t):this._renderCoordsHelper.setAltitude(t,f);const a=this._renderCoordsHelper.worldUpAtPosition(t,d),c=n+2*e,h=s(b,t,o);if(e<u.length-3){i.up.setVec(c,a),i.up.setVec(c+3,a),i.up.setVec(c+5,a);for(let e=0;e<6;e++)i.start.setVec(c+e,h);i.extrude.setValues(c+0,0,-1),i.extrude.setValues(c+1,1,-1),i.extrude.setValues(c+2,1,1),i.extrude.setValues(c+3,0,-1),i.extrude.setValues(c+4,1,1),i.extrude.setValues(c+5,0,1)}if(e>0){i.up.setVec(c-2,a),i.up.setVec(c-4,a),i.up.setVec(c-5,a);for(let e=-6;e<0;e++)i.end.setVec(c+e,h)}}n+=this._numberOfRenderVertices(u)}return i.buffer}}const d=i(),b=i(),V=n().vec3f(f.START).vec3f(f.END).vec3f(f.UP).vec2f(f.EXTRUDE);export{_ as LaserlinePathData};
5
+ import{isSome as e,isNone as t}from"../../../core/maybe.js";import{s as r,b as s}from"../../../chunks/vec3.js";import{c as i}from"../../../chunks/vec3f64.js";import{glLayout as o}from"./buffer/glUtil.js";import{newLayout as f}from"./buffer/InterleavedLayout.js";import{VertexAttribute as n}from"../webgl-engine/lib/VertexAttribute.js";import{attributeLocations as u}from"../webgl-engine/shaders/LaserlinePathTechnique.js";import{BufferObject as a}from"../../webgl/BufferObject.js";import{PrimitiveType as c,Usage as h}from"../../webgl/enums.js";import{VertexArrayObject as l}from"../../webgl/VertexArrayObject.js";class _{constructor(e){this._renderCoordsHelper=e,this._buffers=null,this._origin=i(),this._dirty=!1,this._count=0,this._vao=null}set vertices(e){const t=new Float64Array(3*e.length);let r=0;for(const s of e)t[r++]=s[0],t[r++]=s[1],t[r++]=s[2];this.buffers=[t]}set buffers(e){if(this._buffers=e,this._buffers.length>0){const e=this._buffers[0],t=3*Math.floor(e.length/3/2);r(this._origin,e[t+0],e[t+1],e[t+2])}else r(this._origin,0,0,0);this._dirty=!0}get origin(){return this._origin}draw(t){const r=this._ensureVAO(t);e(r)&&(t.bindVAO(r),t.drawArrays(c.TRIANGLES,0,this._count))}dispose(){e(this._vao)&&this._vao.dispose()}_ensureVAO(e){return t(this._buffers)?null:(t(this._vao)&&(this._vao=this._createVAO(e,this._buffers)),this._ensureVertexData(this._vao,this._buffers),this._vao)}_createVAO(e,t){const r=this._createDataBuffer(t);return this._dirty=!1,new l(e,u,{data:o(V)},{data:a.createVertex(e,h.STATIC_DRAW,r)})}_ensureVertexData(e,t){if(!this._dirty)return;const r=this._createDataBuffer(t);e.vertexBuffers.data.setData(r),this._dirty=!1}_numberOfRenderVertices(e){return 3*(2*(e.length/3-1))}_createDataBuffer(e){const t=e.reduce(((e,t)=>e+this._numberOfRenderVertices(t)),0);this._count=t;const i=V.createBuffer(t),o=this._origin;let f=0,n=0;for(const u of e){for(let e=0;e<u.length;e+=3){const t=r(b,u[e+0],u[e+1],u[e+2]);0===e?n=this._renderCoordsHelper.getAltitude(t):this._renderCoordsHelper.setAltitude(t,n);const a=this._renderCoordsHelper.worldUpAtPosition(t,d),c=f+2*e,h=s(b,t,o);if(e<u.length-3){i.up.setVec(c,a),i.up.setVec(c+3,a),i.up.setVec(c+5,a);for(let e=0;e<6;e++)i.start.setVec(c+e,h);i.extrude.setValues(c+0,0,-1),i.extrude.setValues(c+1,1,-1),i.extrude.setValues(c+2,1,1),i.extrude.setValues(c+3,0,-1),i.extrude.setValues(c+4,1,1),i.extrude.setValues(c+5,0,1)}if(e>0){i.up.setVec(c-2,a),i.up.setVec(c-4,a),i.up.setVec(c-5,a);for(let e=-6;e<0;e++)i.end.setVec(c+e,h)}}f+=this._numberOfRenderVertices(u)}return i.buffer}}const d=i(),b=i(),V=f().vec3f(n.START).vec3f(n.END).vec3f(n.UP).vec2f(n.EXTRUDE);export{_ as LaserlinePathData};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import r from"../../../core/Handles.js";import{destroyMaybe as s,removeMaybe as a}from"../../../core/maybe.js";import{watch as o,sync as i}from"../../../core/reactiveUtils.js";import{addFrameTask as h}from"../../../core/scheduling.js";import{secondsFromMilliseconds as l}from"../../../core/time.js";import{property as n}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as m}from"../../../core/accessorSupport/decorators/subclass.js";import{maxDownloadSlots as d,downloadSlotsPerClient as u}from"./index.js";import{newMemoryController as c}from"./MemoryController.js";import{StreamDataLoader as _}from"./StreamDataLoader.js";import{ImmediateTask as p,State as y,newScheduler as g,TaskPriority as C}from"../../support/Scheduler.js";let T=class extends t{constructor(){super(...arguments),this.updating=!1}};function f(e){return new v.ResourceController({view:e})}var v;e([n({readOnly:!0})],T.prototype,"updating",void 0),T=e([m("esri.views.3d.support.ResourceController")],T),function(t){let f=class extends T{constructor(){super(...arguments),this._scheduler=null,this._memoryController=null,this._streamDataLoader=null,this._scheduleTask=p,this._cameraChangeTime=0,this._handles=new r,this._frameTask=null,this._state=y.IDLE}initialize(){this._cameraChangeTime=performance.now(),this._scheduler=g(),this._memoryController=c(this.view),this._streamDataLoader=new _,this._streamDataLoader.setup(d,u,this._scheduler),this._handles.add([o((()=>this.view.state?.camera),((e,t)=>this._cameraChangedHandler(e,t)),i),o((()=>this.view.stationary),(()=>this._stationaryChangedHandler()))]),this._frameTask=h({update:e=>this._frame(e)}),this._scheduleTask=this._scheduler.registerTask(C.RESOURCE_CONTROLLER)}destroy(){this._handles=s(this._handles),this._scheduleTask.remove(),this._frameTask=a(this._frameTask),this._streamDataLoader=s(this._streamDataLoader),this._memoryController=s(this._memoryController),this._scheduler=s(this._scheduler)}get updating(){return!!(this._memoryController?.updating||this._streamDataLoader?.updating||this._scheduleTask?.updating)}get scheduler(){return this._scheduler}get memoryController(){return this._memoryController}schedule(e,t,r){return this._scheduleTask.schedule(e,t,r)}createStreamDataRequester(e){const t=this._streamDataLoader;return{request:(r,s,a)=>t.request(r,s,e,a),get busy(){return!t.hasDownloadSlots(e)}}}_frame(e){this.view.suspended||this.view.stateManager&&(this.view.stateManager.step(l(e.deltaTime)),!this._scheduler)||(this._updateState(),this._scheduler.state=this._state,this._scheduler.updateBudget(e)?(this._memoryController.update(),this._scheduler.frame()):this._memoryController.updating&&this._memoryController.update())}_cameraChangedHandler(e,t){e&&t&&e.almostEquals(t)||(this._cameraChangeTime=performance.now(),this._updateState(),this._scheduler.state=this._state)}_stationaryChangedHandler(){this.memoryController.resetStableQuality()}_updateState(){this.view.animation?this._state=y.ANIMATING:this.view.interacting?this._state=y.INTERACTING:(this._state===y.ANIMATING&&(this._cameraChangeTime=0),performance.now()-this._cameraChangeTime<=v?this._state=y.INTERACTING:this._state=y.IDLE)}get test(){return{getQueueStats:e=>this._streamDataLoader.test.loadQueue.getStatsForType(e),state:this._state}}};e([n({constructOnly:!0})],f.prototype,"view",void 0),e([n()],f.prototype,"_scheduler",void 0),e([n()],f.prototype,"_memoryController",void 0),e([n()],f.prototype,"_streamDataLoader",void 0),e([n()],f.prototype,"_scheduleTask",void 0),e([n({readOnly:!0})],f.prototype,"updating",null),f=e([m("esri.views.3d.support.ResourceController")],f),t.ResourceController=f;const v=300}(v||(v={}));export{T as ResourceControllerMain,f as newResourceController};
5
+ import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import r from"../../../core/Handles.js";import{destroyMaybe as s,removeMaybe as a}from"../../../core/maybe.js";import{watch as o,sync as i}from"../../../core/reactiveUtils.js";import{addFrameTask as h}from"../../../core/scheduling.js";import{secondsFromMilliseconds as m}from"../../../core/time.js";import{property as l}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as n}from"../../../core/accessorSupport/decorators/subclass.js";import{maxDownloadSlots as d,downloadSlotsPerClient as u}from"./index.js";import{newMemoryController as c}from"./MemoryController.js";import{StreamDataLoader as p}from"./StreamDataLoader.js";import{ImmediateTask as _,State as y,newScheduler as g,TaskPriority as C}from"../../support/Scheduler.js";let T=class extends t{constructor(){super(...arguments),this.updating=!1}};function f(e){return new v({view:e})}e([l({readOnly:!0})],T.prototype,"updating",void 0),T=e([n("esri.views.3d.support.ResourceControllerMain")],T);let v=class extends T{constructor(){super(...arguments),this._scheduler=null,this._memoryController=null,this._streamDataLoader=null,this._scheduleTask=_,this._cameraChangeTime=0,this._handles=new r,this._frameTask=null,this._state=y.IDLE}initialize(){this._cameraChangeTime=performance.now(),this._scheduler=g(),this._memoryController=c(this.view),this._streamDataLoader=new p,this._streamDataLoader.setup(d,u,this._scheduler),this._handles.add([o((()=>this.view.state?.camera),((e,t)=>this._cameraChangedHandler(e,t)),i),o((()=>this.view.stationary),(()=>this._stationaryChangedHandler()))]),this._frameTask=h({update:e=>this._frame(e)}),this._scheduleTask=this._scheduler.registerTask(C.RESOURCE_CONTROLLER)}destroy(){this._handles=s(this._handles),this._scheduleTask.remove(),this._frameTask=a(this._frameTask),this._streamDataLoader=s(this._streamDataLoader),this._memoryController=s(this._memoryController),this._scheduler=s(this._scheduler)}get updating(){return!!(this._memoryController?.updating||this._streamDataLoader?.updating||this._scheduleTask?.updating)}get scheduler(){return this._scheduler}get memoryController(){return this._memoryController}schedule(e,t,r){return this._scheduleTask.schedule(e,t,r)}createStreamDataRequester(e){const t=this._streamDataLoader;return{request:(r,s,a)=>t.request(r,s,e,a),get busy(){return!t.hasDownloadSlots(e)}}}_frame(e){this.view.suspended||this.view.stateManager&&(this.view.stateManager.step(m(e.deltaTime)),!this._scheduler)||(this._updateState(),this._scheduler.state=this._state,this._scheduler.updateBudget(e)?(this._memoryController.update(),this._scheduler.frame()):this._memoryController.updating&&this._memoryController.update())}_cameraChangedHandler(e,t){e&&t&&e.almostEquals(t)||(this._cameraChangeTime=performance.now(),this._updateState(),this._scheduler.state=this._state)}_stationaryChangedHandler(){this.memoryController.resetStableQuality()}_updateState(){this.view.animation?this._state=y.ANIMATING:this.view.interacting?this._state=y.INTERACTING:(this._state===y.ANIMATING&&(this._cameraChangeTime=0),performance.now()-this._cameraChangeTime<=w?this._state=y.INTERACTING:this._state=y.IDLE)}get test(){return{getQueueStats:e=>this._streamDataLoader.test.loadQueue.getStatsForType(e),state:this._state}}};e([l({constructOnly:!0})],v.prototype,"view",void 0),e([l()],v.prototype,"_scheduler",void 0),e([l()],v.prototype,"_memoryController",void 0),e([l()],v.prototype,"_streamDataLoader",void 0),e([l()],v.prototype,"_scheduleTask",void 0),e([l({readOnly:!0})],v.prototype,"updating",null),v=e([n("esri.views.3d.support.ResourceControllerImpl")],v);const w=300;export{f as newResourceController};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../../../chunks/tslib.es6.js";import{Z as r}from"../../../chunks/vec3f64.js";import{BlendModeTechniqueConfiguration as o}from"./BlendModeTechniqueConfiguration.js";import{LayerBlendMode as i}from"../webgl-engine/core/shaderLibrary/output/BlendOptions.js";import{TileCompositePassParameters as t}from"../webgl-engine/core/shaderLibrary/terrain/TileComposite.glsl.js";import{B as s,a as n,b as l}from"../../../chunks/BlendLayers.glsl.js";import{ReloadableShaderModule as a}from"../webgl-engine/core/shaderTechnique/ReloadableShaderModule.js";import{ShaderTechnique as u}from"../webgl-engine/core/shaderTechnique/ShaderTechnique.js";import{parameter as p}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueConfiguration.js";import{Default3D as c}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import{Program as m}from"../webgl-engine/lib/Program.js";import{BlendFactor as d}from"../../webgl/enums.js";import{makePipelineState as h,simpleBlendingParams as g,defaultColorWriteParams as b}from"../../webgl/renderState.js";class f extends t{constructor(){super(...arguments),this.opacity=1,this.baseOpacity=1,this.texture=null,this.fboTexture=null,this.blendMode=i.Normal,this.backgroundColor=r}}class j extends u{initializeProgram(e){const r=j.shader.get().build(this.configuration);return new m(e.rctx,r,c)}initializePipeline(){return h({blending:g(d.ONE,d.ONE_MINUS_SRC_ALPHA),colorWrite:b})}}j.shader=new a(l,(()=>import("../webgl-engine/core/shaderLibrary/util/BlendLayers.glsl.js")));class w extends o{constructor(){super(...arguments),this.output=s.Composite,this.baseOpacityMode=n.One,this.premultipliedSource=!1}}e([p({count:s.COUNT})],w.prototype,"output",void 0),e([p({count:n.COUNT})],w.prototype,"baseOpacityMode",void 0),e([p()],w.prototype,"premultipliedSource",void 0);export{f as BlendLayersPassParameters,j as BlendLayersTechnique,w as BlendLayersTechniqueConfiguration};
5
+ import{_ as e}from"../../../chunks/tslib.es6.js";import{Z as r}from"../../../chunks/vec3f64.js";import{BlendModeTechniqueConfiguration as o}from"./BlendModeTechniqueConfiguration.js";import{LayerBlendMode as i}from"../webgl-engine/core/shaderLibrary/output/BlendOptions.js";import{TileCompositePassParameters as t}from"../webgl-engine/core/shaderLibrary/terrain/TileComposite.glsl.js";import{B as s,a as n,b as l}from"../../../chunks/BlendLayers.glsl.js";import{ReloadableShaderModule as a}from"../webgl-engine/core/shaderTechnique/ReloadableShaderModule.js";import{ShaderTechnique as u}from"../webgl-engine/core/shaderTechnique/ShaderTechnique.js";import{parameter as p}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueConfiguration.js";import{Default3D as c}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import{Program as m}from"../webgl-engine/lib/Program.js";import{BlendFactor as d}from"../../webgl/enums.js";import{makePipelineState as h,simpleBlendingParams as g,defaultColorWriteParams as b}from"../../webgl/renderState.js";class f extends t{constructor(){super(...arguments),this.opacity=1,this.baseOpacity=1,this.texture=null,this.fboTexture=null,this.blendMode=i.Normal,this.backgroundColor=r}}class j extends u{initializeProgram(e){return new m(e.rctx,j.shader.get().build(this.configuration),c)}initializePipeline(){return h({blending:g(d.ONE,d.ONE_MINUS_SRC_ALPHA),colorWrite:b})}}j.shader=new a(l,(()=>import("../webgl-engine/core/shaderLibrary/util/BlendLayers.glsl.js")));class w extends o{constructor(){super(...arguments),this.output=s.Composite,this.baseOpacityMode=n.One,this.premultipliedSource=!1}}e([p({count:s.COUNT})],w.prototype,"output",void 0),e([p({count:n.COUNT})],w.prototype,"baseOpacityMode",void 0),e([p()],w.prototype,"premultipliedSource",void 0);export{f as BlendLayersPassParameters,j as BlendLayersTechnique,w as BlendLayersTechniqueConfiguration};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{clamp as t}from"../../../core/mathUtils.js";import{isNone as a,isSome as o}from"../../../core/maybe.js";import{bilerp as s}from"../support/mathUtils.js";import{ELEVATION_NODATA_VALUE as i}from"./TerrainConst.js";class e{constructor(t,a,o){this.type="elevation",this.samplerData=null,this.level=t[0],this.i=t[1],this.j=t[2],this.extent=a;const s=o.noDataValue,i=o.values;let e=1/0,l=-1/0,h=!0,r=!1;for(let n=0;n<i.length;n++){const t=i[n];t!==s?(e=t<e?t:e,l=t>l?t:l,h=!1):r=!0}h&&(e=0,l=0),l=l>-3e38?l:0,this.samplerData={pixelData:o.values,width:o.width,height:o.height,noDataValue:s,safeWidth:.99999999*(o.width-1),dx:(o.width-1)/(a[2]-a[0]),dy:(o.width-1)/(a[3]-a[1]),x0:a[0],y1:a[3]},this.bounds=[e,l],this.hasNoDataValues=r}release(){this.samplerData=null,this.bounds=null}computeMinMaxValue(t,a,o,e){e.min=1/0,e.max=-1/0,e.hasNoDataValues=!1;const l=t-this.level;if(l<=0)return e;const h=2**l;if(!(Math.floor(a/h)===this.i&&Math.floor(o/h)===this.j))return e;let r=1/0,n=-1/0;const u=this.samplerData.width,f=this.samplerData.pixelData,m=.5*i;let c=(u-1)/h,p=(o-this.j*h)*c,d=(a-this.i*h)*c;if(c<1){const t=Math.floor(p),a=Math.floor(d),o=t+a*u,i=f[o],l=f[o+1],h=f[o+u],r=f[o+u+1];if(i+l+h+r<m){const o=p-t,n=d-a,u=s(i,l,h,r,o,n),f=s(i,l,h,r,o+c,n),m=s(i,l,h,r,o,n+c),x=s(i,l,h,r,o+c,n+c);return e.min=Math.min(u,f,m,x),e.max=Math.max(u,f,m,x),e}p=t,d=a,c=1}else p=Math.floor(p),d=Math.floor(d),c=Math.ceil(c);for(let s=p;s<=p+c;s++)for(let t=d;t<=d+c;t++){const a=f[s+t*u];a<m?(r=Math.min(r,a),n=Math.max(n,a)):e.hasNoDataValues=!0}return e.min=r,e.max=n,e}}function l(o,s,e){if(a(e))return null;for(const a of e){if(!a)continue;const e=a.safeWidth;let l=t(a.dy*(a.y1-s),0,e),h=t(a.dx*(o-a.x0),0,e);const r=Math.floor(l),n=Math.floor(h),u=a.width,f=r*u+n,m=a.pixelData,c=m[f],p=m[f+1],d=f+u,x=m[d],M=m[d+1];if(c+x+p+M<.5*i){l-=r,h-=n;const t=c+(p-c)*h;return t+(x+(M-x)*h-t)*l}}return null}function h(t,a,s){const i=l(t,a,s);return o(i)?i:0}export{e as ElevationData,l as sampleElevation,h as sampleElevationOrZero};
5
+ import{clamp as t}from"../../../core/mathUtils.js";import{isNone as a,isSome as o}from"../../../core/maybe.js";import{ElevationSamplerData as s}from"../../../layers/support/ElevationSamplerData.js";import{bilerp as e}from"../support/mathUtils.js";import{ELEVATION_NODATA_VALUE as r}from"./TerrainConst.js";class i{constructor(t,a,o){this.type="elevation",this.samplerData=null,this.level=t[0],this.i=t[1],this.j=t[2],this.extent=a;const e=o.noDataValue,r=o.values;let i=1/0,l=-1/0,n=!0,h=!1;for(let s=0;s<r.length;s++){const t=r[s];t!==e?(i=t<i?t:i,l=t>l?t:l,n=!1):h=!0}n&&(i=0,l=0),l=l>-3e38?l:0,this.samplerData=new s(o,a),this.bounds=[i,l],this.hasNoDataValues=h}release(){this.samplerData=null,this.bounds=null}computeMinMaxValue(t,a,o,s){s.min=1/0,s.max=-1/0,s.hasNoDataValues=!1;const i=t-this.level;if(i<=0)return s;const l=2**i;if(!(Math.floor(a/l)===this.i&&Math.floor(o/l)===this.j))return s;let n=1/0,h=-1/0;const m=this.samplerData.width,f=this.samplerData.pixelData,u=.5*r;let c=(m-1)/l,p=(o-this.j*l)*c,M=(a-this.i*l)*c;if(c<1){const t=Math.floor(p),a=Math.floor(M),o=t+a*m,r=f[o],i=f[o+1],l=f[o+m],n=f[o+m+1];if(r+i+l+n<u){const o=p-t,h=M-a,m=e(r,i,l,n,o,h),f=e(r,i,l,n,o+c,h),u=e(r,i,l,n,o,h+c),x=e(r,i,l,n,o+c,h+c);return s.min=Math.min(m,f,u,x),s.max=Math.max(m,f,u,x),s}p=t,M=a,c=1}else p=Math.floor(p),M=Math.floor(M),c=Math.ceil(c);for(let e=p;e<=p+c;e++)for(let t=M;t<=M+c;t++){const a=f[e+t*m];a<u?(n=Math.min(n,a),h=Math.max(h,a)):s.hasNoDataValues=!0}return s.min=n,s.max=h,s}}const l=.5*r;function n(o,s,e){if(a(e))return null;for(const a of e){if(!a)continue;const e=a.safeWidth;let r=t(a.dy*(a.y1-s),0,e),i=t(a.dx*(o-a.x0),0,e);const n=Math.floor(r),h=Math.floor(i),m=a.width,f=n*m+h,u=a.pixelData,c=u[f],p=u[f+1],M=f+m,x=u[M],D=u[M+1];if(c+x+p+D<l){r-=n,i-=h;const t=c+(p-c)*i;return t+(x+(D-x)*i-t)*r}}return null}function h(t,a,s){const e=n(t,a,s);return o(e)?e:0}export{i as ElevationData,n as sampleElevation,h as sampleElevationOrZero};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- class s{}class e{constructor(){this.elevation=0,this.normal=[0,0,1],this.cornerTiles=[null,null,null,null]}}class l{constructor(){this.edgeNeighbours=[null,null,null,null],this.cornerNeighborData=[new e,new e,new e,new e],this.edgeResolutions=[1,1,1,1],this.modifiedEdgeResolutions=[!1,!1,!1,!1]}}class i{constructor(){this.numVerticesPerSide=0,this.samplerData=null,this.clippingArea=null,this.wireframe=!1,this.samplerDataVersion=0,this.neighborData=new l}}export{e as CornerNeighborData,s as EdgeNeighborData,i as GeometryState,l as NeighborhoodData};
5
+ class s{}class e{constructor(){this.elevation=0,this.normal=[0,0,1],this.cornerTiles=[null,null,null,null],this.cornerTileSamplerVersions=[-1,-1,-1,-1]}}class l{constructor(){this.edgeNeighbours=[null,null,null,null],this.cornerNeighborData=[new e,new e,new e,new e],this.edgeResolutions=[1,1,1,1],this.modifiedEdgeResolutions=[!1,!1,!1,!1]}}class i{constructor(){this.numVerticesPerSide=0,this.samplerData=null,this.clippingArea=null,this.wireframe=!1,this.samplerDataVersion=0,this.neighborData=new l}}export{e as CornerNeighborData,s as EdgeNeighborData,i as GeometryState,l as NeighborhoodData};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{RenderTargetType as e}from"./interfaces.js";import{OverlayFramebufferObject as r}from"./OverlayFramebufferObject.js";import{RenderPass as s}from"../webgl-engine/lib/RenderPass.js";class t{constructor(t){const o=(e,s,o=!0)=>({type:s,fbo:new r(t,o),renderPass:e,valid:!1,lastUsed:1/0});this.renderTargets=[o(s.MATERIAL,e.Color),o(s.MATERIAL,e.ColorNoRasterImage),o(s.MATERIAL_HIGHLIGHT,e.Highlight,!1),o(s.MATERIAL_NORMAL,e.Water),o(s.MATERIAL,e.Occluded)]}getTarget(e){return this.renderTargets[e].fbo}dispose(){for(const e of this.renderTargets)e.fbo.dispose()}disposeRenderTargetMemory(){for(const e of this.renderTargets)e.fbo.disposeRenderTargetMemory()}validateUsageForTarget(e,r,s){if(e)r.lastUsed=s;else if(s-r.lastUsed>o)r.fbo.disposeRenderTargetMemory(),r.lastUsed=1/0;else if(r.lastUsed<1/0)return!0;return!1}get gpuMemoryUsage(){return this.renderTargets.reduce(((e,r)=>e+r.fbo.gpuMemoryUsage),0)}}const o=1e3;export{t as OverlayRenderTarget};
5
+ import{RenderTargetType as e}from"./interfaces.js";import{OverlayFramebufferObject as r}from"./OverlayFramebufferObject.js";import{ShaderOutput as s}from"../webgl-engine/core/shaderLibrary/ShaderOutput.js";class t{constructor(e,s,t,o=!0){this.output=s,this.type=t,this.valid=!1,this.lastUsed=1/0,this.fbo=new r(e,o)}}class o{constructor(r){this.renderTargets=[new t(r,s.Color,e.Color),new t(r,s.Color,e.ColorNoRasterImage),new t(r,s.Highlight,e.Highlight,!1),new t(r,s.Normal,e.Water),new t(r,s.Color,e.Occluded)]}getTarget(e){return this.renderTargets[e].fbo}dispose(){for(const e of this.renderTargets)e.fbo.dispose()}disposeRenderTargetMemory(){for(const e of this.renderTargets)e.fbo.disposeRenderTargetMemory()}validateUsageForTarget(e,r,s){if(e)r.lastUsed=s;else if(s-r.lastUsed>a)r.fbo.disposeRenderTargetMemory(),r.lastUsed=1/0;else if(r.lastUsed<1/0)return!0;return!1}get gpuMemoryUsage(){return this.renderTargets.reduce(((e,r)=>e+r.fbo.gpuMemoryUsage),0)}}const a=1e3;export{o as OverlayRenderTarget,t as RenderTargetDescriptor};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Accessor.js";import t from"../../../core/Evented.js";import s from"../../../core/Handles.js";import{someMap as i}from"../../../core/MapUtils.js";import{releaseMaybe as o,disposeMaybe as a,isSome as n,isNone as d,unwrapOr as h}from"../../../core/maybe.js";import c from"../../../core/PooledArray.js";import{watch as l,syncAndInitial as p,on as u}from"../../../core/reactiveUtils.js";import{someSet as _}from"../../../core/SetUtils.js";import{property as m}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as g}from"../../../core/accessorSupport/decorators/subclass.js";import{x as y,f as R}from"../../../chunks/mat4.js";import{s as f}from"../../../chunks/vec3.js";import{f as T}from"../../../chunks/vec3f64.js";import{ViewingMode as S}from"../../ViewingMode.js";import{DrapeTargetType as w,DrapeSourceType as b}from"../layers/interfaces.js";import v from"../support/debugFlags.js";import{OverlayIndex as x,RenderTargetType as O}from"./interfaces.js";import{Overlay as D}from"./Overlay.js";import{OverlayFramebufferObject as j}from"./OverlayFramebufferObject.js";import{OverlayRenderTarget as E}from"./OverlayRenderTarget.js";import{T as P}from"../../../chunks/TextureOnly.glsl.js";import{ShaderTechniqueRepository as A}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueRepository.js";import{autoDispose as C,AutoDisposableMixin as F}from"../webgl-engine/lib/AutoDisposable.js";import{TransparencyPassType as M,UpdatePolicy as I}from"../webgl-engine/lib/basicInterfaces.js";import{Camera as q}from"../webgl-engine/lib/Camera.js";import{GLMaterialRepository as W}from"../webgl-engine/lib/GLMaterialRepository.js";import{createEmptyDepthTexture as L,createQuadVAO as U}from"../webgl-engine/lib/glUtil3D.js";import{GridLocalOriginFactory as V}from"../webgl-engine/lib/GridLocalOriginFactory.js";import{RenderOccludedFlag as H}from"../webgl-engine/lib/Material.js";import{OverlayRenderContext as B}from"../webgl-engine/lib/RenderContext.js";import{RenderPass as N}from"../webgl-engine/lib/RenderPass.js";import{RenderSlot as k}from"../webgl-engine/lib/RenderSlot.js";import{ShadowMap as G}from"../webgl-engine/lib/ShadowMap.js";import{SortedRenderGeometryRenderer as z}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{SSAOHelper as Y}from"../webgl-engine/lib/SSAOHelper.js";import{TextureTechnique as X}from"../webgl-engine/lib/TextureTechnique.js";import{TextureTechniqueConfiguration as Q}from"../webgl-engine/lib/TextureTechniqueConfiguration.js";import{AmbientLight as J}from"../webgl-engine/lighting/Lightsources.js";import{StippleTextureRepository as K}from"../webgl-engine/materials/StippleTextureRepository.js";import{AlphaMode as Z,CompositingFunction as $}from"../webgl-engine/shaders/CompositingTechniqueConfiguration.js";import{ImmediateTask as ee,TaskPriority as re,noBudget as te}from"../../support/Scheduler.js";import{ClearBufferBit as se,PrimitiveType as ie,TextureType as oe,PixelFormat as ae,PixelType as ne,TextureSamplingMode as de}from"../../webgl/enums.js";import{Texture as he}from"../../webgl/Texture.js";import{vertexCount as ce}from"../../webgl/Util.js";let le=class extends(F(r)){constructor(e){super(e),this._overlays=null,this._overlayRenderTarget=null,this._hasHighlights=!1,this._rendersOccluded=!1,this._hasWater=!1,this._handles=new s,this._frameTask=ee,this._drapeSourceRenderers=new Map,this._sortedDrapeSourceRenderersDirty=!1,this._sortedDrapeSourceRenderers=new c,this._passParameters=new P,this._rctx=null,this._materialRepository=null,this._screenToWorldRatio=1,this._localOriginFactory=null,this.worldToPCSRatio=1,this.events=new t,this.longitudeCyclical=null}get _bindParameters(){return this._renderContext.bindParameters}get rctx(){return this._rctx}get materialRepository(){return this._materialRepository}get screenToWorldRatio(){return this._screenToWorldRatio}get localOriginFactory(){return this._localOriginFactory}initialize(){const e=this.view._stage.renderView;this._rctx=e.renderingContext;const r=e.waterTextureRepository;this._stippleTextureRepository=new K(e.renderingContext),this._shaderTechniqueRepository=new A({rctx:this._rctx,viewingMode:S.Local,stippleTextureRepository:this._stippleTextureRepository,waterTextureRepository:r}),this._renderContext=new B(this._rctx,new G(this._rctx,this.view.state.viewingMode),new Y(this._shaderTechniqueRepository,this._rctx,(()=>{}))),this._handles.add([l((()=>r.updating),(()=>this.events.emit("content-changed")),p),l((()=>this.spatialReference),(e=>this._localOriginFactory=new V(e)),p),u((()=>this.view.allLayerViews),"after-changes",(()=>this._sortedDrapeSourceRenderersDirty=!0))]),this._materialRepository=new W(e.textureRepository,this._shaderTechniqueRepository,(e=>{(e.renderOccluded&ye)>0!==this._rendersOccluded&&this._updateRendersOccluded(),this.events.emit("content-changed"),this.notifyChange("updating")}),(()=>this.events.emit("content-changed"))),this._bindParameters.slot=k.DRAPED_MATERIAL,this._bindParameters.highlightDepthTexture=L(this._rctx),this._bindParameters.camera=me,this._bindParameters.transparencyPassType=M.NONE,this._bindParameters.lighting.groundLightingFactor=1,this._bindParameters.lighting.globalFactor=0,this._bindParameters.lighting.set([new J(T(1,1,1))]),this._frameTask=this.view.resourceController.scheduler.registerTask(re.STAGE,this),this._handles.add(this._frameTask)}dispose(){this._handles.destroy(),this._drapeSourceRenderers.forEach((e=>e.destroy())),this._drapeSourceRenderers.clear(),this._debugTextureTechnique=o(this._debugTextureTechnique),this._passParameters.texture=a(this._passParameters.texture),this._bindParameters.highlightDepthTexture=a(this._bindParameters.highlightDepthTexture),this._shaderTechniqueRepository=a(this._shaderTechniqueRepository),this._temporaryFBO=a(this._temporaryFBO),this._quadVAO=a(this._quadVAO),this.disposeOverlays()}get updating(){return this._sortedDrapeSourceRenderersDirty||this._frameTask.updating||i(this._drapeSourceRenderers,(e=>e.updating))}get hasOverlays(){return n(this._overlays)&&n(this._overlayRenderTarget)}get gpuMemoryUsage(){return n(this._overlayRenderTarget)?this._overlayRenderTarget.gpuMemoryUsage:0}createGeometryDrapeSourceRenderer(e){return this.createDrapeSourceRenderer(e,z)}createDrapeSourceRenderer(e,r,t){const s=this._drapeSourceRenderers.get(e);n(s)&&s.destroy();const i=new r({...t,rendererContext:this,drapeSource:e});return this._drapeSourceRenderers.set(e,i),this._sortedDrapeSourceRenderersDirty=!0,"fullOpacity"in e&&this._handles.add(l((()=>e.fullOpacity),(()=>this.events.emit("content-changed"))),e),i}removeDrapeSourceRenderer(e){if(d(e))return;const r=this._drapeSourceRenderers.get(e);d(r)||(this._sortedDrapeSourceRenderersDirty=!0,this._drapeSourceRenderers.delete(e),this._handles.remove(e),r.destroy())}collectUnusedRenderTargetMemory(e){let r=!1;if(n(this._overlayRenderTarget))for(const t of this._overlayRenderTarget.renderTargets){const s=this.overlays[0].validTargets[t.type]||!this.overlays[1].validTargets[t.type];r=this._overlayRenderTarget.validateUsageForTarget(s,t,e)||r}return r}get overlays(){return h(this._overlays,[])}ensureDrapeTargets(e){n(this._overlays)&&this._overlays.forEach((r=>{r.hasTargetWithoutRasterImage=_(e,(e=>e.drapeTargetType===w.WithoutRasterImage))}))}ensureDrapeSources(e){n(this._overlays)&&this._overlays.forEach((r=>{r.hasDrapedFeatureSource=_(e,(e=>e.drapeSourceType===b.Features)),r.hasDrapedRasterSource=_(e,(e=>e.drapeSourceType===b.RasterImage))}))}ensureOverlays(e,r){d(this._overlays)&&(this._overlayRenderTarget=new E(this._rctx),this._overlays=[new D(x.INNER,this._overlayRenderTarget),new D(x.OUTER,this._overlayRenderTarget)]),this.ensureDrapeTargets(e),this.ensureDrapeSources(r)}disposeOverlays(){this._overlays=null,this._overlayRenderTarget=a(this._overlayRenderTarget),this.events.emit("textures-disposed")}get running(){return this.updating}runTask(e,r=(()=>!0)){this._frameTask.processQueue(e),e.done||this._processDrapeSources(e,r)}_processDrapeSources(e,r){let t=!1;for(const[s,i]of this._drapeSourceRenderers){if(e.done)break;(s.destroyed||r(s))&&(i.commitChanges()&&(t=!0,e.madeProgress()))}this._updateSortedDrapeSourceRenderers(),t&&(n(this._overlays)&&0===this._drapeSourceRenderers.size&&this.disposeOverlays(),this.notifyChange("updating"),this.events.emit("content-changed"),this._updateHasHighlights(),this._updateRendersOccluded(),this._updateHasWater())}processSyncDrapeSources(){this._processDrapeSources(te,(e=>e.updatePolicy===I.SYNC))}isEmpty(){if(v.OVERLAY_DRAW_DEBUG_TEXTURE)return!1;for(const e of this._drapeSourceRenderers.values())if(!e.isEmpty)return!1;return!0}get hasHighlights(){return this._hasHighlights}get hasWater(){return this._hasWater}get rendersOccluded(){return this._rendersOccluded}updateAnimation(e){let r=!1;return this._drapeSourceRenderers.forEach((t=>r=t.updateAnimation(e)||r)),r}updateDrapeSourceOrder(){this._sortedDrapeSourceRenderersDirty=!0}drawTarget(e,r,t){const s=e.canvasGeometries;if(0===s.numViews)return!1;this._screenToWorldRatio=t*e.mapUnitsPerPixel;const i=r.renderPass;if(this.isEmpty()||i===N.MATERIAL_HIGHLIGHT&&!this.hasHighlights||i===N.MATERIAL_NORMAL&&!this.hasWater||!e.hasSomeSizedView())return!1;const o=r.fbo;if(!o.isValid())return!1;const a=2*e.resolution,d=e.resolution;o.resize(a,d);const h=this._rctx;me.pixelRatio=e.pixelRatio*t,this._renderContext.pass=i,this._bindParameters.screenToWorldRatio=this._screenToWorldRatio,this._bindParameters.screenToPCSRatio=this._screenToWorldRatio*this.worldToPCSRatio,this._bindParameters.slot=i===N.MATERIAL_NORMAL?k.DRAPED_WATER:k.DRAPED_MATERIAL,e.applyViewport(this._rctx),o.bind(h),e.index===x.INNER&&(h.setClearColor(0,0,0,0),h.clearSafe(se.COLOR_BUFFER_BIT));const c=r.type===O.ColorNoRasterImage?pe.ExcludeRasterImage:r.type===O.Occluded?pe.OccludedOnly:pe.Normal;if(c===pe.OccludedOnly&&(this._renderContext.renderOccludedMask=ye),v.OVERLAY_DRAW_DEBUG_TEXTURE&&c!==pe.OccludedOnly)for(let n=0;n<s.numViews;n++)this._setViewParameters(s.extents[n],e,me),this._drawDebugTexture(e.resolution,_e[e.index]);return this._drapeSourceRenderers.size>0&&this._sortedDrapeSourceRenderers.forAll((({drapeSource:r,renderer:t})=>{if(c===pe.ExcludeRasterImage&&r.drapeSourceType===b.RasterImage)return;const{fullOpacity:l}=r,p=n(l)&&l<1&&i===N.MATERIAL;p&&(this.bindTemporaryFramebuffer(this._rctx,a,d),h.clearSafe(se.COLOR_BUFFER_BIT));for(let i=0;i<s.numViews;i++)this._setViewParameters(s.extents[i],e,me),t.render(this._renderContext,this._bindParameters);p&&n(this._temporaryFBO)&&(o.bind(h),this.view._stage.renderView.compositingHelper.composite(this._renderContext.bindParameters,this._temporaryFBO.getTexture(),Z.PremultipliedAlpha,l,$.OverlayWithTransparency,e.index))})),h.bindFramebuffer(null),o.generateMipMap(),this._renderContext.resetRenderOccludedMask(),!0}bindTemporaryFramebuffer(e,r,t){d(this._temporaryFBO)&&(this._temporaryFBO=new j(e,!1)),this._temporaryFBO.resize(r,t),this._temporaryFBO.bind(e)}async reloadShaders(){await this._shaderTechniqueRepository.reloadAll()}notifyContentChanged(){this.events.emit("content-changed")}intersect(e,r,t,s){let i=0;for(const o of this._drapeSourceRenderers.values())i=o.intersect?.(e,r,t,s,i)??i}_updateSortedDrapeSourceRenderers(){if(!this._sortedDrapeSourceRenderersDirty)return;if(this._sortedDrapeSourceRenderersDirty=!1,this._sortedDrapeSourceRenderers.clear(),0===this._drapeSourceRenderers.size)return;const e=this.view.map.allLayers;this._drapeSourceRenderers.forEach(((r,t)=>{const s=e.indexOf(t.layer);this._sortedDrapeSourceRenderers.push(new ue(t,r,s<0?1/0:s))})),this._sortedDrapeSourceRenderers.sort(((e,r)=>e.index-r.index))}_setViewParameters(e,r,t){t.viewport[0]=t.viewport[1]=0,t.viewport[2]=t.viewport[3]=r.resolution,y(t.projectionMatrix,0,e[2]-e[0],0,e[3]-e[1],t.near,t.far),R(t.viewMatrix,[-e[0],-e[1],0]),this._bindParameters.camera=t}_updateHasWater(){const e=i(this._drapeSourceRenderers,(e=>e.hasWater));e!==this._hasWater&&(this._hasWater=e,this.events.emit("has-water",e))}_updateHasHighlights(){const e=i(this._drapeSourceRenderers,(e=>e.hasHighlights));e!==this._hasHighlights&&(this._hasHighlights=e,this.events.emit("has-highlights",e))}_updateRendersOccluded(){const e=i(this._drapeSourceRenderers,(e=>e.rendersOccluded));e!==this._rendersOccluded&&(this._rendersOccluded=e,this.events.emit("renders-occluded",e))}_drawDebugTexture(e,r){this._ensureDebugPatternResources(e,e,r);const t=this._rctx;t.bindTechnique(this._debugTextureTechnique,this._passParameters,null),t.bindVAO(this._quadVAO),t.drawArrays(ie.TRIANGLE_STRIP,0,ce(this._quadVAO,"geometry"))}_ensureDebugPatternResources(e,r,t){if(f(this._passParameters.color,t[0],t[1],t[2]),this._passParameters.texture)return;const s=new Uint8Array(e*r*4);let i=0;for(let a=0;a<r;a++)for(let t=0;t<e;t++){const o=Math.floor(t/10),n=Math.floor(a/10);o<2||n<2||10*o>e-20||10*n>r-20?(s[i++]=255,s[i++]=255,s[i++]=255,s[i++]=255):(s[i++]=255,s[i++]=255,s[i++]=255,s[i++]=1&o&&1&n?1&t^1&a?0:255:1&o^1&n?0:128)}this._passParameters.texture=new he(this._rctx,{target:oe.TEXTURE_2D,pixelFormat:ae.RGBA,dataType:ne.UNSIGNED_BYTE,samplingMode:de.NEAREST,width:e,height:r},s);const o=new Q;o.hasAlpha=!0,this._debugTextureTechnique=this._shaderTechniqueRepository.acquire(X,o),this._quadVAO=U(this._rctx)}get test(){return{drapeSourceRenderers:this._drapeSourceRenderers,getDrapeSourceRenderer:e=>this._drapeSourceRenderers.get(e)}}};var pe;e([m()],le.prototype,"_frameTask",void 0),e([m()],le.prototype,"_sortedDrapeSourceRenderersDirty",void 0),e([C()],le.prototype,"_shaderTechniqueRepository",void 0),e([C()],le.prototype,"_stippleTextureRepository",void 0),e([m({constructOnly:!0})],le.prototype,"view",void 0),e([m()],le.prototype,"worldToPCSRatio",void 0),e([m()],le.prototype,"spatialReference",void 0),e([m({type:Boolean,readOnly:!0})],le.prototype,"updating",null),le=e([g("esri.views.3d.terrain.OverlayRenderer")],le),function(e){e[e.Normal=0]="Normal",e[e.OccludedOnly=1]="OccludedOnly",e[e.ExcludeRasterImage=2]="ExcludeRasterImage"}(pe||(pe={}));class ue{constructor(e,r,t){this.drapeSource=e,this.renderer=r,this.index=t}}const _e=[[1,.5,.5],[.5,.5,1]],me=new q;me.near=1,me.far=1e4,me.relativeElevation=null;const ge=-2,ye=H.OccludeAndTransparent;export{ge as DRAPED_Z,pe as DrawPassOption,le as OverlayRenderer,ye as overlayRenderOccludedFlag};
5
+ import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Accessor.js";import t from"../../../core/Evented.js";import s from"../../../core/Handles.js";import{someMap as i}from"../../../core/MapUtils.js";import{releaseMaybe as o,disposeMaybe as a,isSome as n,isNone as h,unwrapOr as d}from"../../../core/maybe.js";import l from"../../../core/PooledArray.js";import{watch as c,syncAndInitial as p,on as u}from"../../../core/reactiveUtils.js";import{someSet as m}from"../../../core/SetUtils.js";import{property as _}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as g}from"../../../core/accessorSupport/decorators/subclass.js";import{x as y,f as R}from"../../../chunks/mat4.js";import{s as f}from"../../../chunks/vec3.js";import{f as T}from"../../../chunks/vec3f64.js";import{ViewingMode as b}from"../../ViewingMode.js";import{DrapeTargetType as w,DrapeSourceType as v}from"../layers/interfaces.js";import x from"../support/debugFlags.js";import{OverlayIndex as O,RenderTargetType as S}from"./interfaces.js";import{Overlay as D}from"./Overlay.js";import{OverlayFramebufferObject as j}from"./OverlayFramebufferObject.js";import{OverlayRenderTarget as P}from"./OverlayRenderTarget.js";import{ShaderOutput as E}from"../webgl-engine/core/shaderLibrary/ShaderOutput.js";import{T as A}from"../../../chunks/TextureOnly.glsl.js";import{ShaderTechniqueRepository as C}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueRepository.js";import{autoDispose as F,AutoDisposableMixin as q}from"../webgl-engine/lib/AutoDisposable.js";import{UpdatePolicy as M}from"../webgl-engine/lib/basicInterfaces.js";import{Camera as W}from"../webgl-engine/lib/Camera.js";import{GLMaterialRepository as U}from"../webgl-engine/lib/GLMaterialRepository.js";import{createEmptyDepthTexture as V,createQuadVAO as I}from"../webgl-engine/lib/glUtil3D.js";import{GridLocalOriginFactory as B}from"../webgl-engine/lib/GridLocalOriginFactory.js";import{RenderOccludedFlag as H}from"../webgl-engine/lib/Material.js";import{OverlayRenderContext as N}from"../webgl-engine/lib/RenderContext.js";import{RenderSlot as k}from"../webgl-engine/lib/RenderSlot.js";import{ShadowMap as L}from"../webgl-engine/lib/ShadowMap.js";import{SortedRenderGeometryRenderer as G}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{SSAOHelper as z}from"../webgl-engine/lib/SSAOHelper.js";import{TextureTechnique as Y}from"../webgl-engine/lib/TextureTechnique.js";import{TextureTechniqueConfiguration as X}from"../webgl-engine/lib/TextureTechniqueConfiguration.js";import{TransparencyPassType as Q}from"../webgl-engine/lib/TransparencyPassType.js";import{AmbientLight as J}from"../webgl-engine/lighting/Lightsources.js";import{StippleTextureRepository as K}from"../webgl-engine/materials/StippleTextureRepository.js";import{AlphaMode as Z,CompositingFunction as $}from"../webgl-engine/shaders/CompositingTechniqueConfiguration.js";import{ImmediateTask as ee,TaskPriority as re,noBudget as te}from"../../support/Scheduler.js";import{ClearBufferBit as se,PrimitiveType as ie,TextureType as oe,PixelFormat as ae,PixelType as ne,TextureSamplingMode as he}from"../../webgl/enums.js";import{Texture as de}from"../../webgl/Texture.js";import{vertexCount as le}from"../../webgl/Util.js";let ce=class extends(q(r)){constructor(e){super(e),this._overlays=null,this._overlayRenderTarget=null,this._hasHighlights=!1,this._rendersOccluded=!1,this._hasWater=!1,this._handles=new s,this._frameTask=ee,this._renderers=new Map,this._sortedDrapeSourceRenderersDirty=!1,this._sortedRenderers=new l,this._passParameters=new A,this._rctx=null,this._materialRepository=null,this._screenToWorldRatio=1,this._localOriginFactory=null,this.worldToPCSRatio=1,this.events=new t,this.longitudeCyclical=null}get _bindParameters(){return this._renderContext.bindParameters}get rctx(){return this._rctx}get materialRepository(){return this._materialRepository}get screenToWorldRatio(){return this._screenToWorldRatio}get localOriginFactory(){return this._localOriginFactory}initialize(){const e=this.view._stage.renderView;this._rctx=e.renderingContext;const r=e.waterTextureRepository;this._stippleTextureRepository=new K(e.renderingContext),this._shaderTechniqueRepository=new C({rctx:this._rctx,viewingMode:b.Local,stippleTextureRepository:this._stippleTextureRepository,waterTextureRepository:r}),this._renderContext=new N(this._rctx,new L(this._rctx,this.view.state.viewingMode),new z(this._shaderTechniqueRepository,this._rctx,(()=>{}))),this._handles.add([c((()=>r.updating),(()=>this.events.emit("content-changed")),p),c((()=>this.spatialReference),(e=>this._localOriginFactory=new B(e)),p),u((()=>this.view.allLayerViews),"after-changes",(()=>this._sortedDrapeSourceRenderersDirty=!0))]),this._materialRepository=new U(e.textureRepository,this._shaderTechniqueRepository,(e=>{(e.renderOccluded&ye)>0!==this._rendersOccluded&&this._updateRendersOccluded(),this.events.emit("content-changed"),this.notifyChange("updating")}),(()=>this.events.emit("content-changed"))),this._bindParameters.slot=k.DRAPED_MATERIAL,this._bindParameters.highlightDepthTexture=V(this._rctx),this._bindParameters.camera=_e,this._bindParameters.transparencyPassType=Q.NONE,this._bindParameters.lighting.groundLightingFactor=1,this._bindParameters.lighting.globalFactor=0,this._bindParameters.lighting.set([new J(T(1,1,1))]),this._frameTask=this.view.resourceController.scheduler.registerTask(re.STAGE,this),this._handles.add(this._frameTask)}dispose(){this._handles.destroy(),this._renderers.forEach((e=>e.destroy())),this._renderers.clear(),this._debugTextureTechnique=o(this._debugTextureTechnique),this._passParameters.texture=a(this._passParameters.texture),this._bindParameters.highlightDepthTexture=a(this._bindParameters.highlightDepthTexture),this._shaderTechniqueRepository=a(this._shaderTechniqueRepository),this._temporaryFBO=a(this._temporaryFBO),this._quadVAO=a(this._quadVAO),this.disposeOverlays()}get updating(){return this._sortedDrapeSourceRenderersDirty||this._frameTask.updating||i(this._renderers,(e=>e.updating))}get hasOverlays(){return n(this._overlays)&&n(this._overlayRenderTarget)}get gpuMemoryUsage(){return n(this._overlayRenderTarget)?this._overlayRenderTarget.gpuMemoryUsage:0}createGeometryDrapeSourceRenderer(e){return this.createDrapeSourceRenderer(e,G)}createDrapeSourceRenderer(e,r,t){const s=this._renderers.get(e);n(s)&&s.destroy();const i=new r({...t,rendererContext:this,drapeSource:e});return this._renderers.set(e,i),this._sortedDrapeSourceRenderersDirty=!0,"fullOpacity"in e&&this._handles.add(c((()=>e.fullOpacity),(()=>this.events.emit("content-changed"))),e),i}removeDrapeSourceRenderer(e){if(h(e))return;const r=this._renderers.get(e);h(r)||(this._sortedDrapeSourceRenderersDirty=!0,this._renderers.delete(e),this._handles.remove(e),r.destroy())}collectUnusedRenderTargetMemory(e){let r=!1;if(n(this._overlayRenderTarget))for(const t of this._overlayRenderTarget.renderTargets){const s=this.overlays[0].validTargets[t.type]||!this.overlays[1].validTargets[t.type];r=this._overlayRenderTarget.validateUsageForTarget(s,t,e)||r}return r}get overlays(){return d(this._overlays,[])}ensureDrapeTargets(e){n(this._overlays)&&this._overlays.forEach((r=>{r.hasTargetWithoutRasterImage=m(e,(e=>e.drapeTargetType===w.WithoutRasterImage))}))}ensureDrapeSources(e){n(this._overlays)&&this._overlays.forEach((r=>{r.hasDrapedFeatureSource=m(e,(e=>e.drapeSourceType===v.Features)),r.hasDrapedRasterSource=m(e,(e=>e.drapeSourceType===v.RasterImage))}))}ensureOverlays(e,r){h(this._overlays)&&(this._overlayRenderTarget=new P(this._rctx),this._overlays=[new D(O.INNER,this._overlayRenderTarget),new D(O.OUTER,this._overlayRenderTarget)]),this.ensureDrapeTargets(e),this.ensureDrapeSources(r)}disposeOverlays(){this._overlays=null,this._overlayRenderTarget=a(this._overlayRenderTarget),this.events.emit("textures-disposed")}get running(){return this.updating}runTask(e,r=(()=>!0)){this._frameTask.processQueue(e),e.done||this._processDrapeSources(e,r)}_processDrapeSources(e,r){let t=!1;for(const[s,i]of this._renderers){if(e.done)break;(s.destroyed||r(s))&&(i.commitChanges()&&(t=!0,e.madeProgress()))}this._updateSortedDrapeSourceRenderers(),t&&(n(this._overlays)&&0===this._renderers.size&&this.disposeOverlays(),this.notifyChange("updating"),this.events.emit("content-changed"),this._updateHasHighlights(),this._updateRendersOccluded(),this._updateHasWater())}processSyncDrapeSources(){this._processDrapeSources(te,(e=>e.updatePolicy===M.SYNC))}isEmpty(){if(x.OVERLAY_DRAW_DEBUG_TEXTURE)return!1;for(const e of this._renderers.values())if(!e.isEmpty)return!1;return!0}get hasHighlights(){return this._hasHighlights}get hasWater(){return this._hasWater}get rendersOccluded(){return this._rendersOccluded}updateAnimation(e){let r=!1;return this._renderers.forEach((t=>r=t.updateAnimation(e)||r)),r}updateDrapeSourceOrder(){this._sortedDrapeSourceRenderersDirty=!0}drawTarget(e,r,t){const s=e.canvasGeometries;if(0===s.numViews)return!1;this._screenToWorldRatio=t*e.mapUnitsPerPixel;const i=r.output;if(this.isEmpty()||i===E.Highlight&&!this.hasHighlights||i===E.Normal&&!this.hasWater||!e.hasSomeSizedView())return!1;const o=r.fbo;if(!o.isValid())return!1;const a=2*e.resolution,h=e.resolution;o.resize(a,h);const d=this._rctx;_e.pixelRatio=e.pixelRatio*t,this._renderContext.output=i,this._bindParameters.screenToWorldRatio=this._screenToWorldRatio,this._bindParameters.screenToPCSRatio=this._screenToWorldRatio*this.worldToPCSRatio,this._bindParameters.slot=i===E.Normal?k.DRAPED_WATER:k.DRAPED_MATERIAL,e.applyViewport(this._rctx),o.bind(d),e.index===O.INNER&&(d.setClearColor(0,0,0,0),d.clearSafe(se.COLOR_BUFFER_BIT));const l=r.type===S.ColorNoRasterImage?pe.ExcludeRasterImage:r.type===S.Occluded?pe.OccludedOnly:pe.Normal;if(l===pe.OccludedOnly&&(this._renderContext.renderOccludedMask=ye),x.OVERLAY_DRAW_DEBUG_TEXTURE&&l!==pe.OccludedOnly)for(let n=0;n<s.numViews;n++)this._setViewParameters(s.extents[n],e,_e),this._drawDebugTexture(e.resolution,me[e.index]);return this._renderers.size>0&&this._sortedRenderers.forAll((({drapeSource:r,renderer:t})=>{if(l===pe.ExcludeRasterImage&&r.drapeSourceType===v.RasterImage)return;const{fullOpacity:c}=r,p=n(c)&&c<1&&i===E.Color;p&&(this.bindTemporaryFramebuffer(this._rctx,a,h),d.clearSafe(se.COLOR_BUFFER_BIT));for(let i=0;i<s.numViews;i++)this._setViewParameters(s.extents[i],e,_e),t.render(this._renderContext,this._bindParameters);p&&n(this._temporaryFBO)&&(o.bind(d),this.view._stage.renderView.compositingHelper.composite(this._renderContext.bindParameters,this._temporaryFBO.getTexture(),Z.PremultipliedAlpha,c,$.OverlayWithTransparency,e.index))})),d.bindFramebuffer(null),o.generateMipMap(),this._renderContext.resetRenderOccludedMask(),!0}bindTemporaryFramebuffer(e,r,t){h(this._temporaryFBO)&&(this._temporaryFBO=new j(e,!1)),this._temporaryFBO.resize(r,t),this._temporaryFBO.bind(e)}async reloadShaders(){await this._shaderTechniqueRepository.reloadAll()}notifyContentChanged(){this.events.emit("content-changed")}intersect(e,r,t,s){let i=0;for(const o of this._renderers.values())i=o.intersect?.(e,r,t,s,i)??i}_updateSortedDrapeSourceRenderers(){if(!this._sortedDrapeSourceRenderersDirty)return;if(this._sortedDrapeSourceRenderersDirty=!1,this._sortedRenderers.clear(),0===this._renderers.size)return;const e=this.view.map.allLayers;this._renderers.forEach(((r,t)=>{const s=e.indexOf(t.layer);this._sortedRenderers.push(new ue(t,r,s<0?1/0:s))})),this._sortedRenderers.sort(((e,r)=>e.index-r.index))}_setViewParameters(e,r,t){t.viewport[0]=t.viewport[1]=0,t.viewport[2]=t.viewport[3]=r.resolution,y(t.projectionMatrix,0,e[2]-e[0],0,e[3]-e[1],t.near,t.far),R(t.viewMatrix,[-e[0],-e[1],0]),this._bindParameters.camera=t}_updateHasWater(){const e=i(this._renderers,(e=>e.hasWater));e!==this._hasWater&&(this._hasWater=e,this.events.emit("has-water",e))}_updateHasHighlights(){const e=i(this._renderers,(e=>e.hasHighlights));e!==this._hasHighlights&&(this._hasHighlights=e,this.events.emit("has-highlights",e))}_updateRendersOccluded(){const e=i(this._renderers,(e=>e.rendersOccluded));e!==this._rendersOccluded&&(this._rendersOccluded=e,this.events.emit("renders-occluded",e))}_drawDebugTexture(e,r){this._ensureDebugPatternResources(e,e,r);const t=this._rctx;t.bindTechnique(this._debugTextureTechnique,this._passParameters,null),t.bindVAO(this._quadVAO),t.drawArrays(ie.TRIANGLE_STRIP,0,le(this._quadVAO,"geometry"))}_ensureDebugPatternResources(e,r,t){if(f(this._passParameters.color,t[0],t[1],t[2]),this._passParameters.texture)return;const s=new Uint8Array(e*r*4);let i=0;for(let a=0;a<r;a++)for(let t=0;t<e;t++){const o=Math.floor(t/10),n=Math.floor(a/10);o<2||n<2||10*o>e-20||10*n>r-20?(s[i++]=255,s[i++]=255,s[i++]=255,s[i++]=255):(s[i++]=255,s[i++]=255,s[i++]=255,s[i++]=1&o&&1&n?1&t^1&a?0:255:1&o^1&n?0:128)}this._passParameters.texture=new de(this._rctx,{target:oe.TEXTURE_2D,pixelFormat:ae.RGBA,dataType:ne.UNSIGNED_BYTE,samplingMode:he.NEAREST,width:e,height:r},s);const o=new X;o.hasAlpha=!0,this._debugTextureTechnique=this._shaderTechniqueRepository.acquire(Y,o),this._quadVAO=I(this._rctx)}get test(){return{drapeSourceRenderers:this._renderers,getDrapeSourceRenderer:e=>this._renderers.get(e)}}};var pe;e([_()],ce.prototype,"_frameTask",void 0),e([_()],ce.prototype,"_sortedDrapeSourceRenderersDirty",void 0),e([F()],ce.prototype,"_shaderTechniqueRepository",void 0),e([F()],ce.prototype,"_stippleTextureRepository",void 0),e([_({constructOnly:!0})],ce.prototype,"view",void 0),e([_()],ce.prototype,"worldToPCSRatio",void 0),e([_()],ce.prototype,"spatialReference",void 0),e([_({type:Boolean,readOnly:!0})],ce.prototype,"updating",null),ce=e([g("esri.views.3d.terrain.OverlayRenderer")],ce),function(e){e[e.Normal=0]="Normal",e[e.OccludedOnly=1]="OccludedOnly",e[e.ExcludeRasterImage=2]="ExcludeRasterImage"}(pe||(pe={}));class ue{constructor(e,r,t){this.drapeSource=e,this.renderer=r,this.index=t}}const me=[[1,.5,.5],[.5,.5,1]],_e=new W;_e.near=1,_e.far=1e4,_e.relativeElevation=null;const ge=-2,ye=H.OccludeAndTransparent;export{ge as DRAPED_Z,pe as DrawPassOption,ce as OverlayRenderer,ye as overlayRenderOccludedFlag};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{isPowerOfTwo as e,clamp as t}from"../../../core/mathUtils.js";import{isNone as n,isSome as o,unwrapOr as r}from"../../../core/maybe.js";import{s as a,n as s,w as i,f as l,a as c}from"../../../chunks/vec3.js";import{c as u}from"../../../chunks/vec3f64.js";import{s as f}from"../../../chunks/vec4.js";import{empty as d}from"../../../geometry/support/aaBoundingBox.js";import{fromValues as g,containsXYWithMargin as m}from"../../../geometry/support/aaBoundingRect.js";import{sampleElevationOrZero as h}from"./ElevationData.js";import{PatchType as x}from"./interfaces.js";import{acquireTerrainAttributes as p,EdgeDescriptor as b}from"./PatchGeometry.js";import{PatchGeometryLUT as M}from"./PatchGeometryLUT.js";import{isElevationSampleIn as S}from"./PatchRenderData.js";import{GEOMETRY_VERTEX_STRIDE as v}from"./TerrainConst.js";import{internalAssert as y,ENABLE_TERRAIN_INTERNAL_CHECKS as D,neighborEdgeIndices as O,almostEquals as V}from"./terrainUtils.js";const R=65536;function E(e,t){const n=e.tile,{extent:o,extentInRadians:r,surface:i}=n,l=e.localOrigin,u=e.geometryState,g=i.isWebMercator,m=i.shadingEnabled,b=u.numVerticesPerSide,M=b-1,S=(b-2)**2,D=g&&(t===x.HAS_SOUTH_POLE||t===x.HAS_BOTH_POLES),O=g&&(t===x.HAS_NORTH_POLE||t===x.HAS_BOTH_POLES),V=6,R=((D?1:0)+(O?1:0))*V*(M+1),E=u.neighborData,L=E.edgeResolutions.reduce(((e,t)=>e+t+1),0),T=p(S+R+L),P=e.geometryInfo;P.numVerticesPerSide=u.numVerticesPerSide,P.vertexAttributes=T,f(P.uvOffsetAndScale,0,0,1,1);const B=T.position.typedBuffer,I=T.uv0.typedBuffer,N=T.normal.typedBuffer,w=P.boundingBox;d(w);const U=l[0],H=l[1],Z=l[2];xe.update(M,r);const W=u.samplerData,X=n.ellipsoid.radius,Y=C(e),q=b-2,k=o[0],G=o[2],z=o[1],F=o[3];(()=>{if((()=>{let e=0;for(let t=1;t<=q;t++){const n=t/M,o=z*(1-n)+F*n,r=Y(n),a=Math.cos(r),s=Math.sin(r);for(let t=1;t<=q;t++){const r=t/M,i=k*(1-r)+G*r,l=xe.sinLonLUT[t],c=xe.cosLonLUT[t],u=X+h(i,o,W),f=c*a*u-U,d=l*a*u-H,g=s*u-Z;me(f,d,g,w);const m=v*e;B[m+0]=f,B[m+1]=d,B[m+2]=g,I[m+0]=r,I[m+1]=n,++e}}})(),m){(()=>{const t=T.position,n=T.normal;let o=0;const r=e=>{t.getVec(e,Me),_()},i=(e,t)=>{{const n=e/M,o=k*(1-n)+G*n,r=xe.sinLonLUT[e],s=xe.cosLonLUT[e],i=t/M,l=z*(1-i)+F*i,c=Y(i),u=Math.cos(c),f=Math.sin(c),d=X+h(o,l,W);a(Me,s*u*d-U,r*u*d-H,f*d-Z)}_()},l=(e,t,n)=>{e>1&&t>1&&e<q&&t<q?r(o+n):i(e,t)};for(let u=1;u<=q;u++)for(let r=1;r<=q;r++)t.getVec(o,De),c(Oe,De,e.localOrigin),s(Ve,Oe),a(Re,0,0,0),l(r-1,u,-1),l(r+1,u,1),l(r,u-1,-q),l(r,u+1,+q),s(Re,Re),n.setVec(o,Re),++o})()}})(),ue(e,S),A(e);const J=[];(()=>{let e=S+L;const t=(t,n)=>{const o=n*b;me(-U,-H,t*X-Z,w),J.push({connectedRowOffset:o,connectedOuterEdgeOffset:1===t?0:2,rowOffset:e,latitudeResolution:V});const r=j(-1===t?z:F,X),a=t*Math.PI/2-r,s=.99*(1===t?1:-1),i=X+0;for(let l=1;l<=V;++l){const t=r+a*(l/V),n=Math.cos(t),o=Math.sin(t);for(let r=0;r<=M;r++){const t=r/M,a=xe.sinLonLUT[r],l=xe.cosLonLUT[r]*n*i-U,c=a*n*i-H,u=o*i-Z;me(l,c,u,w);const f=v*e;if(B[f+0]=l,B[f+1]=c,B[f+2]=u,I[f+0]=t,I[f+1]=s,m){const e=1/Math.sqrt(l*l+c*c+u*u);N[f+0]=e*l,N[f+1]=e*c,N[f+2]=e*u}++e}}};D&&t(-1,0),O&&t(1,M)})(),ce(P,u.numVerticesPerSide,J,[0,b-1],[0,b-1],u.wireframe),e.intersectionData=null;for(let a=0;a<4;++a)y(P.outerEdges[a].count===E.edgeResolutions[a]+1)}function L(e){A(e),de(e)}function T(e){B(e),I(e);const t=e.vao,n=e.geometryInfo.vertexAttributes;t?.vertexBuffers?.geometry?.setSubData(n.position.typedBuffer)}function A(e){B(e);for(let t=0;t<4;++t)P(e,t);I(e)}function P(t,r){const i=t.geometryState,l=i.neighborData,c=t.tile,u=c.level,f=c.extent,d=c.ellipsoid.radius,g=l.edgeNeighbours[r],m=l.edgeResolutions[r];if(D){const e=c.surface;if(!g&&e&&!e.updatingRootTiles){const t=O[r],o=c.findNeighborTile(t,(e=>e.isLoaded||e.isLeaf||e.level===c.level));o?(y(!o.isLoaded),y(!o.isLeaf),y(o.level===u)):y(n(e?.rootTiles)||!c.shouldHaveNeighbor(t))}}const x=m;y(e(x));const p=1===r||3===r,b=c.extentInRadians,M=b[0],S=b[2],V=b[1],R=b[3],E=1===r?S:M,L=0===r?R:V,T=g?.neighborTile,A=c.level-(T?.level??c.level),P=x*2**A,B=c.getNeighborEdgeStartVertexIndex(r,T)*x,I=i.samplerData,N=T?.renderData?.geometryState?.samplerData,w=o(g),U=w&&0===A,j=T?.extent,H=w?j:f,Z=H[0],W=H[2],X=H[1],Y=H[3],q=w?T.extentInRadians:b,k=q[0],G=q[2],z=w?B:0,F=w?P:x,J=C(w?T.renderData:t),K=1===r?1:0,Q=0===r?1:0,$=1===r?f[2]:f[0],ee=0===r?f[3]:f[1];let te=K,ne=$,oe=w&&p?1===r?j[0]:j[2]:$,re=E,ae=Q,se=ee,ie=L,le=Math.sin(re),ce=Math.cos(re),ue=Math.cos(ie),fe=Math.sin(ie);const de=(e,t)=>{ae=e,se=X*(1-t)+Y*t,ie=J(t),ue=Math.cos(ie),fe=Math.sin(ie)},ge=(e,t)=>{te=e,ne=Z*(1-t)+W*t,oe=ne,re=k*(1-t)+G*t,le=Math.sin(re),ce=Math.cos(re)},he=p?de:ge,xe=t.geometryInfo,pe=xe.boundingBox,be=xe.vertexAttributes,Se=be.position.typedBuffer,ve=be.uv0.typedBuffer,ye=be.normal.typedBuffer,Oe=xe.outerEdges[r],Ee=x+1,Le=t.localOrigin,Te=Le[0],Ae=Le[1],Pe=Le[2],Be=()=>h(oe,se,N),Ie=()=>h(ne,se,I),Ne=w?U?()=>.5*(Be()+Ie()):Be:Ie,we=c.surface.shadingEnabled;let Ue=z/F;const je=w?j:f,He=w?P:x,Ze=1===r?-1:3===r?1:0,Ce=0===r?-1:2===r?1:0,We=(je[2]-je[0])/He,_e=Ze*We,Xe=Ce*We,Ye=w?T.extentInRadians:c.extentInRadians,qe=Ye[2]-Ye[0],ke=p?Ze*(qe/He):0,Ge=p?0:Ce*(1/He),ze=w?1-Q:Q,Fe=(e,t)=>{const n=h(ne+e*_e,se+e*Xe,t),o=d+n,r=p?re+e*ke:re,s=p?Math.sin(r):le,i=p?Math.cos(r):ce,l=p?ie:J(ze+e*Ge),c=p?fe:Math.sin(l),u=p?ue:Math.cos(l);a(Me,i*u*o,s*u*o,c*o),_()};let Je=Oe.getVertexOffset(1);for(let e=1;e<Ee-1;++e){const t=e/x;if(Ue=(z+e)/F,he(t,Ue),D){y(0!==e||0===t),y(e!==Ee-1||1===t);const n=.001;y(f[0]<=ne&&ne<=f[2]),y(f[1]<=se&&se<=f[3]),y(M-n<=re&&re<=S+n),y(V-n<=ie&&ie<=R+n),y(0<=te&&te<=1),y(0<=ae&&ae<=1)}const n=Ne(),o=d+n,r=ce*ue*o,i=le*ue*o,l=fe*o,c=r-Te,u=i-Ae,g=l-Pe;me(c,u,g,pe);const m=v*Je;Se[m+0]=c,Se[m+1]=u,Se[m+2]=g,ve[m+0]=te,ve[m+1]=ae,we&&(a(Re,0,0,0),a(De,r,i,l),s(Ve,De),T&&Fe(-1,N),T&&!U||Fe(1,I),ye[m+0]=Re[0],ye[m+1]=Re[1],ye[m+2]=Re[2]),++Je}if(we)for(let e=1;e<Ee-1;++e)Oe.getVertexRawNormal(Re,e),Oe.getVertex(De,e),s(Ve,De),Oe.getVertex(Me,e-1),_(),Oe.getVertex(Me,e+1),_(),s(Re,Re),Oe.setVertexRawNormal(e,Re[0],Re[1],Re[2])}function B(e){fe(e,((t,n,o,r)=>U(t,n,o,r,e.tile.extentInRadians,e.tile.ellipsoid.radius)))}function I(e){e.tile.surface.shadingEnabled&&ge(e,((e,t,n,o)=>W(e,t,n,o)))}function N(e,t,n,o,r){const a=C(e),s=e.tile,i=s.extent;y(m(i,n,o,1));const l=(n-i[0])/(i[2]-i[0]),c=(o-i[1])/(i[3]-i[1]),u=s.extentInRadians;w(t,u[0]*(1-l)+u[2]*l,a(c),r,s.ellipsoid.radius)}function w(e,t,n,o,r){const a=Math.cos(n),s=Math.sin(n),i=Math.sin(t),l=Math.cos(t),c=r+o;e[0]=l*a*c,e[1]=i*a*c,e[2]=s*c}function U(e,t,n,o,r,a){const s=r[0===n?1:3];w(e,r[0===t?0:2],s,o,a)}function j(e,t){return Math.PI/2-2*Math.atan(Math.exp(-e/t))}function H(e,t,n,o){return j(e*(1-o)+t*o,n)}function Z(e,t,n){return e*(1-n)+t*n}function C(e){const t=e.tile;if(t.surface.isWebMercator){const e=t.extent,n=t.ellipsoid.radius;return t=>H(e[1],e[3],n,t)}const n=t.extentInRadians;return e=>Z(n[1],n[3],e)}function W(e,t,n,o){N(e,Me,t,n,o),_()}function _(){i(Se,Me,De),l(ve,Se,Ve),l(ye,ve,Se),c(Re,Re,ye)}function X(e,n){const r=e.tile,a=r.extent,s=e.localOrigin,i=e.geometryState,l=r.surface,c=l.isWebMercatorOnPlateeCarree,u=l.shadingEnabled,m=a[0],x=a[1],b=a[2]-m,M=a[3]-x,S=i.clippingArea,y=o(S)?Math.max(0,(S[0]-a[0])/b):0,D=o(S)?Math.max(0,(S[1]-a[1])/M):0,O=o(S)?Math.min(1,(S[2]-a[0])/b):1,V=o(S)?Math.min(1,(S[3]-a[1])/M):1,R=O-y,E=V-D,L=R>0?1/R:1,T=E>0?1/E:1,A=-y*L,P=-D*T,B=i.numVerticesPerSide,I=B-1,N=(B-2)**2,w=i.neighborData.edgeResolutions.reduce(((e,t)=>e+t+1),0),U=p(N+w),j=U.position.typedBuffer,H=U.uv0.typedBuffer,Z=U.normal.typedBuffer,C=e.geometryInfo,W=C.boundingBox;d(W);const _=r.ellipsoid.radius,X=i.samplerData,Y=o(S)?S:pe,q=g(Math.max(a[0],Y[0]),Math.max(a[1],Y[1]),Math.min(a[2],Y[2]),Math.min(a[3],Y[3])),G=s[0],z=s[1],F=s[2],J=te(c,_,n);(()=>{let e=0;for(let o=1;o<=I-1;o++){const r=o/I,a=P+r*T,s=t(x+r*M,q[1],q[3]),i=t(a,0,1),l=J(s)-z,c=b/I;for(let o=1;o<=I-1;o++){const r=o/I,a=A+r*L,f=t(m+r*b,q[0],q[2]),d=t(a,0,1),g=h(f,s,X),x=f*n-G,p=g-F;me(x,l,p,W);const M=v*e;if(j[M+0]=x,j[M+1]=l,j[M+2]=p,H[M+0]=d,H[M+1]=i,u){const e=h(f+c,s,X),t=h(f-c,s,X),n=h(f,s+c,X),o=.25*(t-e),r=.25*(h(f,s-c,X)-n),a=c,i=Math.sqrt(o*o+r*r+a*a);Z[M+0]=o/i,Z[M+1]=r/i,Z[M+2]=a/i}++e}}})(),C.numVerticesPerSide=i.numVerticesPerSide,C.vertexAttributes=U,f(e.geometryInfo.uvOffsetAndScale,y,D,O-y,V-D),ue(e,N),k(e,n),ce(C,i.numVerticesPerSide,[],[0,B-1],[0,B-1],i.wireframe),e.intersectionData=null}function Y(e,t){J(e,t),Q(e,t),de(e)}function q(e,t){k(e,t),de(e)}function k(e,t){J(e,t),G(e,t),Q(e,t)}function G(e,t){const n=e.geometryState.clippingArea,r=e.tile.extent,a=o(n)&&(r[0]<n[0]||r[2]>n[2]||r[1]<n[1]||r[3]>n[3])?F:z;for(let o=0;o<4;++o)a(e,o,t)}function z(t,r,a){const s=t.geometryState.neighborData,i=s.edgeNeighbours,l=t.tile,c=l.level,u=l.surface,f=u.shadingEnabled,d=i[r],g=s.edgeResolutions[r];if(D&&!d&&l&&!u.updatingRootTiles){const e=O[r],t=l.findNeighborTile(e,(e=>e.isLoaded||e.isLeaf||e.level===c));u.updatingRootTiles||(t?(y(!t.isLoaded),y(!t.isLeaf),y(t.level===c)):y(n(u?.rootTiles)||!l.shouldHaveNeighbor(e)))}const m=g;y(e(m));const x=l.extent,p=t.geometryState,b=m+1,M=d,S=t.localOrigin,v=p.samplerData,V=(e,t)=>h(e,t,v),R=(e,t)=>.5*(h(e,t,M.neighborSamplerData)+h(e,t,v)),E=(e,t)=>h(e,t,M.neighborSamplerData),L=M?.neighborTile.level===c,T=L?R:E,A=o(M)?T:V,P=t.geometryInfo,B=P.outerEdges[r],I=te(u.isWebMercatorOnPlateeCarree,l.ellipsoid.radius,a),N=P.boundingBox,w=1===r||3===r,U=1===r?x[2]:x[0],j=0===r?x[3]:x[1],H=1===r?1:0,Z=0===r?1:0,C=(x[2]-x[0])/g,W=M?.neighborSamplerData,_=o(M),X=(e,t)=>oe(_,L,v,W,e,t,r),Y=re(w,!0,C,X),q=re(w,!1,C,X);for(let e=1;e<b-1;++e){const t=e/m,n=w?U:x[0]*(1-t)+x[2]*t,o=w?x[1]*(1-t)+x[3]*t:j,r=w?H:t,s=w?t:Z,i=A(n,o),l=n*a-S[0],c=I(o)-S[1],u=i-S[2];if(me(l,c,u,N),f){const t=Y(n,o,i),a=q(n,o,i),f=C;B.setVertexRawXYZUVN(e,l,c,u,r,s,t,a,f)}else B.setVertexRawXYZUV(e,l,c,u,r,s)}if(f){const e=w?0:1,t=w?1:0;for(let n=1;n<b-1;++n){B.getNormal(Ee,n);const o=B.getVertexZ(n-1)-B.getVertexZ(n+1),r=Ee[0]+.5*e*o,a=Ee[1]+.5*t*o,s=2*C,i=1/Math.sqrt(r*r+a*a+s*s);B.setVertexRawNormal(n,i*r,i*a,i*s)}}}function F(a,s,i){const l=a.geometryState.neighborData,c=l.edgeNeighbours,u=a.tile,f=u.level,d=u.surface,g=d.shadingEnabled,m=c[s],x=l.edgeResolutions[s];if(D&&!m&&u&&!d.updatingRootTiles){const e=O[s],t=u.findNeighborTile(e,(e=>e.isLoaded||e.isLeaf||e.level===f));d.updatingRootTiles||(t?(y(!t.isLoaded),y(!t.isLeaf),y(t.level===f)):y(n(d?.rootTiles)||!u.shouldHaveNeighbor(e)))}const p=x;y(e(p));const b=u.extent,M=a.geometryState,v=r(M.clippingArea,pe),R=a.geometryInfo,E=R.uvOffsetAndScale[0],L=R.uvOffsetAndScale[1],T=E+R.uvOffsetAndScale[2],A=L+R.uvOffsetAndScale[3],P=T>E?1/(T-E):1,B=A>L?1/(A-L):1,I=-E*P,N=-L*B,w=p+1,U=[b[3]>v[3],b[2]>v[2],b[1]<v[1],b[0]<v[0]],j=m,H=M.samplerData,Z=(e,t)=>h(e,t,H),C=j?.neighborTile.level===f,W=(e,t)=>{if(D){const r=o(v)?v:pe;y(n(j.neighborSamplerData)||S(e,t,j.neighborSamplerData)),y(0!==s||V(t,Math.min(b[3],r[3]))),y(1!==s||V(e,Math.min(b[2],r[2]))),y(2!==s||V(t,Math.max(b[1],r[1]))),y(3!==s||V(e,Math.max(b[0],r[0])))}const r=h(e,t,j.neighborSamplerData);return C?.5*(r+h(e,t,H)):r},_=Z,X=o(j)?W:Z,Y=U[s]?_:X,q=R.outerEdges[s],k=R.boundingBox,G=1===s||3===s,z=t(1===s?b[2]:b[0],v[0],v[2]),F=t(0===s?b[3]:b[1],v[1],v[3]),J=1===s?1:0,K=0===s?1:0,Q=a.localOrigin,$=te(d.isWebMercatorOnPlateeCarree,u.ellipsoid.radius,i),ee=(b[2]-b[0])/x,ne=j?.neighborSamplerData,ae=o(j),se=j?.neighborTile.level===f,ie=(e,t)=>oe(ae,se,H,ne,e,t,s),le=re(G,!0,ee,ie),ce=re(G,!1,ee,ie);for(let e=1;e<w-1;++e){const n=e/p,o=G?z:t(b[0]*(1-n)+b[2]*n,v[0],v[2]),r=G?t(b[1]*(1-n)+b[3]*n,v[1],v[3]):F,a=G?J:t(I+n*P,0,1),s=G?t(N+n*B,0,1):K,l=Y(o,r),c=o*i-Q[0],u=$(r)-Q[1],f=l-Q[2];if(me(c,u,f,k),g){const t=le(o,r,l),n=ce(o,r,l),i=ee;q.setVertexRawXYZUVN(e,c,u,f,a,s,t,n,i)}else q.setVertexRawXYZUV(e,c,u,f,a,s)}if(g){const e=G?0:1,t=G?1:0;for(let n=1;n<w-1;++n){q.getNormal(Ee,n);const o=q.getVertexZ(n-1)-q.getVertexZ(n+1),r=Ee[0]+.5*e*o,a=Ee[1]+.5*t*o,s=2*ee,i=1/Math.sqrt(r*r+a*a+s*s);q.setVertexRawNormal(n,i*r,i*a,i*s)}}}function J(e,t){const n=e.tile;o(n.renderData.geometryState.clippingArea)?K(e,t):fe(e,((o,r,a,s)=>ne(o,r,a,s,e.tile.extent,t,te(n.surface.isWebMercatorOnPlateeCarree,n.ellipsoid.radius,t))))}function K(e,n){const a=e.geometryState,s=e.tile,i=s.extent,l=r(a.clippingArea,i),c=e.geometryInfo,u=c.boundingBox,f=c.outerEdges,d=a.neighborData.cornerNeighborData,g=c.uvOffsetAndScale[0],m=c.uvOffsetAndScale[1],x=c.uvOffsetAndScale[2],p=c.uvOffsetAndScale[3],b=x>0?1/x:1,M=p>0?1/p:1,S=-g*b,v=-m*M,y=s.surface.isWebMercatorOnPlateeCarree,D=te(y,y?s.ellipsoid.radius:0,n),O=a.samplerData,V=a.neighborData.edgeNeighbours,R=e.localOrigin,E=(e,r,a,c,f)=>{const g=i[0]*(1-c)+i[2]*c,m=i[1]*(1-f)+i[3]*f,x=t(g,l[0],l[2]),p=t(m,l[1],l[3]),y=[p===i[3],x===i[2],p===i[1],x===i[0]],E=!y[3]&&!y[1]||!y[0]&&!y[2],L=E?y[0]&&o(V[0])?V[0]:y[1]&&o(V[1])?V[1]:y[2]&&o(V[2])?V[2]:y[3]&&o(V[3])?V[3]:null:null,T=E?L?L.neighborTile.level===s.level?.5*(h(x,p,O)+h(x,p,L.neighborSamplerData)):h(x,p,L.neighborSamplerData):h(x,p,O):d[a].elevation,A=x*n-R[0],P=D(p)-R[1],B=T-R[2];me(A,P,B,u);const I=t(S+c*b,0,1),N=t(v+f*M,0,1);e.setVertexRawXYZUV(r,A,P,B,I,N)};for(let t=0;t<4;++t){const e=f[t];E(e,0,0===t?3:1===t?1:2,1===t?1:0,0===t?1:0);const n=2===t?1:3===t?3:0,o=3===t?0:1,r=2===t?0:1;E(e,e.count-1,n,o,r)}}function Q(e,t){e.tile.surface.shadingEnabled&&ge(e,((e,n,o,r)=>ae(se(e,t),n,o,r)))}function $(e,t){return(Math.PI/2-2*Math.atan(Math.exp(-e/t)))*t}function ee(e,t){return e*t}function te(e,t,n){return e?e=>$(e,t):e=>ee(e,n)}function ne(e,t,n,o,r,a,s){const i=0===t?r[0]:r[2],l=0===n?r[1]:r[3],c=o;e[0]=i*a,e[1]=s(l),e[2]=c}function oe(e,t,n,o,r,a,s){return s===r?!e||t?(e,t)=>h(e,t,n):null:s===a?e?(e,t)=>h(e,t,o):null:null}function re(e,t,n,o){if(t!==e)return()=>0;const r=t?3:2,a=t?1:0,s=o(r,a),i=o(a,r),l=(null!=s?1:0)+(null!=i?1:0),c=t?n:0,u=t?0:n;return(e,t,n)=>((null!=s?-(s(e+c,t+u)-n):0)+(null!=i?+(i(e-c,t-u)-n):0))/l}function ae(e,t,n,o){e(Me,t,n,o);const r=Me[0]-De[0],a=Me[1]-De[1],s=Me[2]-De[2];ye[0]=-r*s,ye[1]=-a*s,ye[2]=r*r+a*a,c(Re,Re,ye)}function se(e,t){return e.tile.surface.isWebMercatorOnPlateeCarree?(n,o,r,a)=>le(t,e.tile.ellipsoid.radius,n,o,r,a):(e,n,o,r)=>ie(t,e,n,o,r)}function ie(e,t,n,o,r){t[0]=n*e,t[1]=o*e,t[2]=r}function le(e,t,n,o,r,a){n[0]=o*e,n[1]=(Math.PI/2-2*Math.atan(Math.exp(-r/t)))*t,n[2]=a}function ce(e,t,n,o,r,a){const s=t-1,i=e.vertexAttributes.count,l=2*(Math.min(t-2,o[1])-Math.max(1,o[0]))*(Math.min(t-2,r[1])-Math.max(1,r[0])),c=O.map(((e,n)=>0===n&&r[1]<t-2||1===n&&o[1]<t-2||2===n&&r[0]>1||3===n&&o[0]>1)),u=e.outerEdges.reduce(((e,t,n)=>e+(c[n]?0:s-2+t.count-1)),0),f=n.reduce(((e,t)=>e+s*(2*(t.latitudeResolution-1)+1)),0),d=a?2:1,g=3*(l+u+f)*d,m=new(i>R?Uint32Array:Uint16Array)(g);let h=0;const x=a?(e,t,n)=>{m[h++]=e,m[h++]=t,m[h++]=t,m[h++]=n,m[h++]=n,m[h++]=e,D&&(y(e<i),y(t<i),y(n<i),y(h<=g))}:(e,t,n)=>{m[h++]=e,m[h++]=t,m[h++]=n,D&&(y(e<i),y(t<i),y(n<i),y(h<=g))},p=t-2,b=s-2;y(b>=0);(()=>{for(let e=Math.max(r[0],1)-1;e<Math.min(r[1],t-2)-1;++e)for(let n=Math.max(o[0],1)-1;n<Math.min(o[1],t-2)-1;++n){const t=e*p+n,o=t+1,r=o+p,a=r-1;x(t,o,r),x(r,a,t)}})(),y(h===3*l*d);(()=>{for(let t=0;t<4;++t){const n=h;if(c[t])continue;const o=e.outerEdges[t],r=e.innerEdges[t];let a=0,i=0;const l=o.count,u=r.count;y(u===s-1);const f=s-2+o.count-1;let g=0;const m=1===t||2===t?(e,t,n)=>x(e,t,n):(e,t,n)=>x(e,n,t);for(;a<l-1||i<u-1;){const e=r.getVertexOffset(i),t=o.getVertexOffset(a),n=a<l-1,c=i<u-1,f=n?0+s*(a+.5)/(l-1):0,d=c?1+b*(i+.5)/(u-1):0;if(n&&(!c||f<=d)){++a,D&&y(a<l);m(e,t,o.getVertexOffset(a)),g++}else{++i,D&&y(i<u);m(e,t,r.getVertexOffset(i)),g++}}D&&(y(a===l-1),y(i===u-1),y(g===l+u-2),y(f===g),y(h===n+3*g*d))}})(),y(h===3*(l+u)*d);const M=n=>{let o=e.outerEdges[n.connectedOuterEdgeOffset].offset0;for(let e=0;e<n.latitudeResolution;++e){const r=0===e?n.rowOffset:o+t;for(let t=0;t<s;t++)x(o,o+1,r+t),e<n.latitudeResolution-1&&x(o+1,r+t+1,r+t),++o;o=r}};(()=>{n.forEach(M)})(),y(h===g),e.indices=m,e.indexCount=g}function ue(e,t){const n=e.localOrigin,o=e.geometryInfo,r=e.geometryState.neighborData.edgeResolutions,a=o.numVerticesPerSide-2,s=o.vertexAttributes.position.typedBuffer;let i=t;for(let l=0;l<4;++l){{const e=0===l||2===l,t=(0===l?a-1:0)*a+(1===l?a-1:0),r=(e?0:1)*a+(e?1:0);o.innerEdges[l]=new b(s,n,t,r,a)}{const e=i,t=r[l]+1;o.outerEdges[l]=new b(s,n,e,1,t),i+=t}}}function fe(e,t){const n=e.geometryInfo,o=n.outerEdges,r=e.geometryState.neighborData.cornerNeighborData,a=n.boundingBox,s=e.localOrigin,i=(e,n,o,i,l)=>{t(be,o,i,r[n].elevation);for(let t=0;t<3;++t)be[t]-=s[t];me(be[0],be[1],be[2],a),e.setVertexRawXYZUV(l,be[0],be[1],be[2],o,i)};for(let l=0;l<4;++l){const e=o[l];i(e,0===l?3:1===l?1:2,1===l?1:0,0===l?1:0,0);i(e,2===l?1:3===l?3:0,3===l?0:1,2===l?0:1,e.count-1)}}function de(e){const t=e.vao,n=e.geometryInfo.vertexAttributes;t?.vertexBuffers?.geometry?.setSubData(n.position.typedBuffer)}function ge(e,t){if(!e.tile.surface.shadingEnabled)return;const n=e.geometryState.neighborData.cornerNeighborData,o=e.tile,r=o.extent,i="local"===e.tile.surface.view?.viewingMode;i&&a(Ve,0,0,1);{const l=1,c=(e,n,o,r,a,s)=>{const i=1===s?a.extent[0]:3===s?a.extent[2]:e,c=0===s?a.extent[1]:2===s?a.extent[3]:n,u=i+he[o][0]*r,f=c+he[o][1]*r;y(m(a.extent,u,f,l));const d=a.renderData,g=h(u,f,d.geometryState.samplerData);t(d,u,f,g)},u=(e,t,n)=>e.extent[0===t||1===t?2:0]+n,f=(e,t,n)=>e.extent[0===t||3===t?3:1]+n,d=(e,n,o,r)=>{const a=u(o,r,he[e][0]*n),s=f(o,r,he[e][1]*n);y(m(o.extent,a,s,l));const i=o.renderData,c=h(a,s,i.geometryState.samplerData);t(i,a,s,c)},g=(e,n,o,r,a,s)=>{const i=he[e][0]*n,c=he[e][1]*n,d=u(o,r,i),g=f(o,r,c),x=u(a,s,i),p=f(a,s,c);y(m(o.extent,d,g,l)),y(m(a.extent,x,p,l));const b=o.renderData,M=a.renderData,S=h(d,g,b.geometryState.samplerData),v=h(x,p,M.geometryState.samplerData);t(b,d,g,.5*(S+v))},x=e=>{const t=0===e||1===e?r[2]:r[0],a=0===e||3===e?r[3]:r[1],s=n[e].cornerTiles,i=s.reduce(((e,t)=>Math.min(e,t?.level??1/0)),1/0);for(let n=0;n<4;++n){const e=s[n];Te[n]=e?.level===i?e:null}for(let n=0;n<4;++n){const e=Te[(n+3)%4],r=Te[n];if(null!=e&&e!==o&&e===r){const r=e,s=(n+2)%4,i=r.renderData.geometryState.neighborData.edgeResolutions[s],l=Math.max(i,2**(o.level-r.level)),u=(r.extent[2]-r.extent[0])/l,f=(n+0)%4,d=(n+1)%4;return c(t,a,(n+3)%4,u,r,n),c(t,a,f,u,r,n),c(t,a,d,u,r,n),Re}}{y(Te.some((e=>e?.isLoaded||e===o)));const e=Te.reduce(((e,t)=>t?t.extent[2]-t.extent[0]:e),0);y(e>0);const t=Te.reduce(((e,t)=>Math.max(e,t?.renderData.geometryState.numVerticesPerSide??1)),1);y(t>1);const n=e/t;for(let o=0;o<4;++o){const e=Te[(o+3)%4],t=Te[(o+0)%4];if(!e&&!t)continue;const r=0===o?1:1===o?2:2===o?3:0,a=0===o?2:1===o?3:2===o?0:1;if(e&&t)g(o,n,e,r,t,a);else{d(o,n,e??t,e?r:a)}}}return Re};for(let t=0;t<4;++t){const n=e.geometryInfo.outerEdges[t],o=1===t||2===t?0:n.count-1;n.getVertex(De,o),i||s(Ve,De),a(Re,0,0,0);const r=x(t);s(Le[t],r)}}{const t=(e,t,n,o,r)=>{e.setVertexRawNormal(r,t,n,o)},n=e.geometryInfo.outerEdges;for(let e=0;e<4;++e){const o=n[e];{const n=Le[0===e?3:1===e?1:2];t(o,n[0],n[1],n[2],0)}{const n=Le[2===e?1:3===e?3:0];t(o,n[0],n[1],n[2],o.count-1)}}}}function me(e,t,n,o){e<o[0]?o[0]=e:e>o[3]&&(o[3]=e),t<o[1]?o[1]=t:t>o[4]&&(o[4]=t),n<o[2]?o[2]=n:n>o[5]&&(o[5]=n)}const he=[[0,1],[1,0],[0,-1],[-1,0]],xe=new M,pe=g(-1/0,-1/0,1/0,1/0),be=u(),Me=u(),Se=u(),ve=u(),ye=u(),De=u(),Oe=u(),Ve=u(),Re=u(),Ee=u(),Le=[u(),u(),u(),u()],Te=[null,null,null,null];export{X as createPlanarGlobePatch,E as createSphericalGlobePatch,Y as updateCornerElevationsPlanar,T as updateCornerElevationsSpherical,q as updateEdgesElevationsAndNormalsPlanar,L as updateEdgesElevationsSpherical};
5
+ import{isPowerOfTwo as e,clamp as t}from"../../../core/mathUtils.js";import{isNone as n,isSome as o,unwrapOr as r}from"../../../core/maybe.js";import{s as a,n as s,w as i,f as l,a as c}from"../../../chunks/vec3.js";import{c as u}from"../../../chunks/vec3f64.js";import{s as f}from"../../../chunks/vec4.js";import{empty as d}from"../../../geometry/support/aaBoundingBox.js";import{fromValues as g,containsXYWithMargin as m}from"../../../geometry/support/aaBoundingRect.js";import{sampleElevationOrZero as h}from"./ElevationData.js";import{PatchType as x}from"./interfaces.js";import{acquireTerrainAttributes as p,EdgeDescriptor as b}from"./PatchGeometry.js";import{PatchGeometryLUT as M}from"./PatchGeometryLUT.js";import{isElevationSampleIn as S}from"./PatchRenderData.js";import{GEOMETRY_VERTEX_STRIDE as v}from"./TerrainConst.js";import{internalAssert as y,ENABLE_TERRAIN_INTERNAL_CHECKS as D,neighborEdgeIndices as V,almostEquals as O}from"./terrainUtils.js";const R=65536;function E(e,t){const n=e.tile,{extent:o,extentInRadians:r,surface:i}=n,l=e.localOrigin,u=e.geometryState,g=i.isWebMercator,m=i.shadingEnabled,b=u.numVerticesPerSide,M=b-1,S=(b-2)**2,D=g&&(t===x.HAS_SOUTH_POLE||t===x.HAS_BOTH_POLES),V=g&&(t===x.HAS_NORTH_POLE||t===x.HAS_BOTH_POLES),O=6,R=((D?1:0)+(V?1:0))*O*(M+1),E=u.neighborData,L=E.edgeResolutions.reduce(((e,t)=>e+t+1),0),I=p(S+R+L),A=e.geometryInfo;A.numVerticesPerSide=u.numVerticesPerSide,A.vertexAttributes=I,f(A.uvOffsetAndScale,0,0,1,1);const P=I.position.typedBuffer,B=I.uv0.typedBuffer,N=I.normal.typedBuffer,w=A.boundingBox;d(w);const U=l[0],H=l[1],Z=l[2];xe.update(M,r);const W=u.samplerData,X=n.ellipsoid.radius,Y=C(e),q=b-2,k=o[0],G=o[2],z=o[1],F=o[3];(()=>{if((()=>{let e=0;for(let t=1;t<=q;t++){const n=t/M,o=z*(1-n)+F*n,r=Y(n),a=Math.cos(r),s=Math.sin(r);for(let t=1;t<=q;t++){const r=t/M,i=k*(1-r)+G*r,l=xe.sinLonLUT[t],c=xe.cosLonLUT[t],u=X+h(i,o,W),f=c*a*u-U,d=l*a*u-H,g=s*u-Z;me(f,d,g,w);const m=v*e;P[m+0]=f,P[m+1]=d,P[m+2]=g,B[m+0]=r,B[m+1]=n,++e}}})(),m){(()=>{const t=I.position,n=I.normal;let o=0;const r=e=>{t.getVec(e,Me),_()},i=(e,t)=>{{const n=e/M,o=k*(1-n)+G*n,r=xe.sinLonLUT[e],s=xe.cosLonLUT[e],i=t/M,l=z*(1-i)+F*i,c=Y(i),u=Math.cos(c),f=Math.sin(c),d=X+h(o,l,W);a(Me,s*u*d-U,r*u*d-H,f*d-Z)}_()},l=(e,t,n)=>{e>1&&t>1&&e<q&&t<q?r(o+n):i(e,t)};for(let u=1;u<=q;u++)for(let r=1;r<=q;r++)t.getVec(o,De),c(Ve,De,e.localOrigin),s(Oe,Ve),a(Re,0,0,0),l(r-1,u,-1),l(r+1,u,1),l(r,u-1,-q),l(r,u+1,+q),s(Re,Re),n.setVec(o,Re),++o})()}})(),ue(e,S),T(e);const J=[];(()=>{let e=S+L;const t=(t,n)=>{const o=n*b;me(-U,-H,t*X-Z,w),J.push({connectedRowOffset:o,connectedOuterEdgeOffset:1===t?0:2,rowOffset:e,latitudeResolution:O});const r=j(-1===t?z:F,X),a=t*Math.PI/2-r,s=.99*(1===t?1:-1),i=X+0;for(let l=1;l<=O;++l){const t=r+a*(l/O),n=Math.cos(t),o=Math.sin(t);for(let r=0;r<=M;r++){const t=r/M,a=xe.sinLonLUT[r],l=xe.cosLonLUT[r]*n*i-U,c=a*n*i-H,u=o*i-Z;me(l,c,u,w);const f=v*e;if(P[f+0]=l,P[f+1]=c,P[f+2]=u,B[f+0]=t,B[f+1]=s,m){const e=1/Math.sqrt(l*l+c*c+u*u);N[f+0]=e*l,N[f+1]=e*c,N[f+2]=e*u}++e}}};D&&t(-1,0),V&&t(1,M)})(),ce(A,u.numVerticesPerSide,J,[0,b-1],[0,b-1],u.wireframe),e.intersectionData=null;for(let a=0;a<4;++a)y(A.outerEdges[a].count===E.edgeResolutions[a]+1)}function L(e){T(e),de(e)}function I(e){P(e),B(e);for(let o=0;o<4;++o)A(e,o,!0);const t=e.vao,n=e.geometryInfo.vertexAttributes;t?.vertexBuffers?.geometry?.setSubData(n.position.typedBuffer)}function T(e){P(e);for(let t=0;t<4;++t)A(e,t,!1);B(e)}function A(t,r,i){const l=t.geometryState,c=l.neighborData,u=t.tile,f=u.level,d=u.extent,g=u.ellipsoid.radius,m=c.edgeNeighbours[r],x=c.edgeResolutions[r];if(D){const e=u.surface;if(!m&&e&&!e.updatingRootTiles){const t=V[r],o=u.findNeighborTile(t,(e=>e.isLoaded||e.isLeaf||e.level===u.level));o?(y(!o.isLoaded),y(!o.isLeaf),y(o.level===f)):y(n(e?.rootTiles)||!u.shouldHaveNeighbor(t))}}const p=x;y(e(p));const b=1===r||3===r,M=u.extentInRadians,S=M[0],O=M[2],R=M[1],E=M[3],L=1===r?O:S,I=0===r?E:R,T=m?.neighborTile,A=u.level-(T?.level??u.level),P=p*2**A,B=u.getNeighborEdgeStartVertexIndex(r,T)*p,N=l.samplerData,w=T?.renderData?.geometryState?.samplerData,U=o(m),j=U&&0===A,H=T?.extent,Z=U?H:d,W=Z[0],X=Z[2],Y=Z[1],q=Z[3],k=U?T.extentInRadians:M,G=k[0],z=k[2],F=U?B:0,J=U?P:p,K=C(U?T.renderData:t),Q=1===r?1:0,$=0===r?1:0,ee=1===r?d[2]:d[0],te=0===r?d[3]:d[1];let ne=Q,oe=ee,re=U&&b?1===r?H[0]:H[2]:ee,ae=L,se=$,ie=te,le=I,ce=Math.sin(ae),ue=Math.cos(ae),fe=Math.cos(le),de=Math.sin(le);const ge=(e,t)=>{se=e,ie=Y*(1-t)+q*t,le=K(t),fe=Math.cos(le),de=Math.sin(le)},he=(e,t)=>{ne=e,oe=W*(1-t)+X*t,re=oe,ae=G*(1-t)+z*t,ce=Math.sin(ae),ue=Math.cos(ae)},xe=b?ge:he,pe=t.geometryInfo,be=pe.boundingBox,Se=pe.vertexAttributes,ve=Se.position.typedBuffer,ye=Se.uv0.typedBuffer,Ve=Se.normal.typedBuffer,Ee=pe.outerEdges[r],Le=p+1,Ie=t.localOrigin,Te=Ie[0],Ae=Ie[1],Pe=Ie[2],Be=()=>h(re,ie,w),Ne=()=>h(oe,ie,N),we=U?j?()=>.5*(Be()+Ne()):Be:Ne,Ue=u.surface.shadingEnabled;let je=F/J;const He=U?H:d,Ze=U?P:p,Ce=1===r?-1:3===r?1:0,We=0===r?-1:2===r?1:0,_e=(He[2]-He[0])/Ze,Xe=Ce*_e,Ye=We*_e,qe=U?T.extentInRadians:u.extentInRadians,ke=qe[2]-qe[0],Ge=b?Ce*(ke/Ze):0,ze=b?0:We*(1/Ze),Fe=U?1-$:$,Je=e=>{const t=e?-1:1,n=h((e?re:oe)+t*Xe,ie+t*Ye,e?w:N),o=g+n,r=b?ae+t*Ge:ae,s=b?Math.sin(r):ce,i=b?Math.cos(r):ue,l=b?le:K(Fe+t*ze),c=b?de:Math.sin(l),u=b?fe:Math.cos(l);a(Me,i*u*o,s*u*o,c*o),_()},Ke=Ee.getVertexOffset(0),Qe=i&&Le>3?Le-3:1;for(let e=1;e<Le-1;e+=Qe){const t=e/p;if(je=(F+e)/J,xe(t,je),D){y(0!==e||0===t),y(e!==Le-1||1===t);const n=.001;y(d[0]<=oe&&oe<=d[2]),y(d[1]<=ie&&ie<=d[3]),y(S-n<=ae&&ae<=O+n),y(R-n<=le&&le<=E+n),y(0<=ne&&ne<=1),y(0<=se&&se<=1)}const n=we(),o=g+n,r=ue*fe*o,i=ce*fe*o,l=de*o,c=r-Te,u=i-Ae,f=l-Pe;me(c,u,f,be);const m=v*(Ke+e);ve[m+0]=c,ve[m+1]=u,ve[m+2]=f,ye[m+0]=ne,ye[m+1]=se,Ue&&(a(Re,0,0,0),a(De,r,i,l),s(Oe,De),T&&Je(!0),T&&!j||Je(!1),Ve[m+0]=Re[0],Ve[m+1]=Re[1],Ve[m+2]=Re[2])}if(Ue){const e=U?u.getNeighborEdgeStartVertexIndex(r,T)*p:0,t=!U||0===e,n=U?(Le-1)*2**(u.level-T.level)+1:0;y(!U||0<=e&&e<=n-p);const o=!U||e+Le===n;for(let r=1;r<Le-1;r+=Qe)Ee.getVertexRawNormal(Re,r),Ee.getVertex(De,r),s(Oe,De),(!t||r>1)&&(Ee.getVertex(Me,r-1),_()),(!o||r<Le-2)&&(Ee.getVertex(Me,r+1),_()),s(Re,Re),Ee.setVertexRawNormal(r,Re[0],Re[1],Re[2])}}function P(e){fe(e,((t,n,o,r)=>U(t,n,o,r,e.tile.extentInRadians,e.tile.ellipsoid.radius)))}function B(e){e.tile.surface.shadingEnabled&&ge(e,((e,t,n,o)=>W(e,t,n,o)))}function N(e,t,n,o,r){const a=C(e),s=e.tile,i=s.extent;y(m(i,n,o,1));const l=(n-i[0])/(i[2]-i[0]),c=(o-i[1])/(i[3]-i[1]),u=s.extentInRadians;w(t,u[0]*(1-l)+u[2]*l,a(c),r,s.ellipsoid.radius)}function w(e,t,n,o,r){const a=Math.cos(n),s=Math.sin(n),i=Math.sin(t),l=Math.cos(t),c=r+o;e[0]=l*a*c,e[1]=i*a*c,e[2]=s*c}function U(e,t,n,o,r,a){const s=r[0===n?1:3];w(e,r[0===t?0:2],s,o,a)}function j(e,t){return Math.PI/2-2*Math.atan(Math.exp(-e/t))}function H(e,t,n,o){return j(e*(1-o)+t*o,n)}function Z(e,t,n){return e*(1-n)+t*n}function C(e){const t=e.tile;if(t.surface.isWebMercator){const e=t.extent,n=t.ellipsoid.radius;return t=>H(e[1],e[3],n,t)}const n=t.extentInRadians;return e=>Z(n[1],n[3],e)}function W(e,t,n,o){N(e,Me,t,n,o),_()}function _(){i(Se,Me,De),l(ve,Se,Oe),l(ye,ve,Se),c(Re,Re,ye)}function X(e,n){const r=e.tile,a=r.extent,s=e.localOrigin,i=e.geometryState,l=r.surface,c=l.isWebMercatorOnPlateeCarree,u=l.shadingEnabled,m=a[0],x=a[1],b=a[2]-m,M=a[3]-x,S=i.clippingArea,y=o(S)?Math.max(0,(S[0]-a[0])/b):0,D=o(S)?Math.max(0,(S[1]-a[1])/M):0,V=o(S)?Math.min(1,(S[2]-a[0])/b):1,O=o(S)?Math.min(1,(S[3]-a[1])/M):1,R=V-y,E=O-D,L=R>0?1/R:1,I=E>0?1/E:1,T=-y*L,A=-D*I,P=i.numVerticesPerSide,B=P-1,N=(P-2)**2,w=i.neighborData.edgeResolutions.reduce(((e,t)=>e+t+1),0),U=p(N+w),j=U.position.typedBuffer,H=U.uv0.typedBuffer,Z=U.normal.typedBuffer,C=e.geometryInfo,W=C.boundingBox;d(W);const _=r.ellipsoid.radius,X=i.samplerData,Y=o(S)?S:pe,q=g(Math.max(a[0],Y[0]),Math.max(a[1],Y[1]),Math.min(a[2],Y[2]),Math.min(a[3],Y[3])),G=s[0],z=s[1],F=s[2],J=te(c,_,n);(()=>{let e=0;for(let o=1;o<=B-1;o++){const r=o/B,a=A+r*I,s=t(x+r*M,q[1],q[3]),i=t(a,0,1),l=J(s)-z,c=b/B;for(let o=1;o<=B-1;o++){const r=o/B,a=T+r*L,f=t(m+r*b,q[0],q[2]),d=t(a,0,1),g=h(f,s,X),x=f*n-G,p=g-F;me(x,l,p,W);const M=v*e;if(j[M+0]=x,j[M+1]=l,j[M+2]=p,H[M+0]=d,H[M+1]=i,u){const e=h(f+c,s,X),t=h(f-c,s,X),n=h(f,s+c,X),o=.25*(t-e),r=.25*(h(f,s-c,X)-n),a=c,i=Math.sqrt(o*o+r*r+a*a);Z[M+0]=o/i,Z[M+1]=r/i,Z[M+2]=a/i}++e}}})(),C.numVerticesPerSide=i.numVerticesPerSide,C.vertexAttributes=U,f(e.geometryInfo.uvOffsetAndScale,y,D,V-y,O-D),ue(e,N),k(e,n),ce(C,i.numVerticesPerSide,[],[0,P-1],[0,P-1],i.wireframe),e.intersectionData=null}function Y(e,t){J(e,t),Q(e,t),de(e)}function q(e,t){k(e,t),de(e)}function k(e,t){J(e,t),G(e,t),Q(e,t)}function G(e,t){const n=e.geometryState.clippingArea,r=e.tile.extent,a=o(n)&&(r[0]<n[0]||r[2]>n[2]||r[1]<n[1]||r[3]>n[3])?F:z;for(let o=0;o<4;++o)a(e,o,t)}function z(t,r,a){const s=t.geometryState.neighborData,i=s.edgeNeighbours,l=t.tile,c=l.level,u=l.surface,f=u.shadingEnabled,d=i[r],g=s.edgeResolutions[r];if(D&&!d&&l&&!u.updatingRootTiles){const e=V[r],t=l.findNeighborTile(e,(e=>e.isLoaded||e.isLeaf||e.level===c));u.updatingRootTiles||(t?(y(!t.isLoaded),y(!t.isLeaf),y(t.level===c)):y(n(u?.rootTiles)||!l.shouldHaveNeighbor(e)))}const m=g;y(e(m));const x=l.extent,p=t.geometryState,b=m+1,M=d,S=t.localOrigin,v=p.samplerData,O=(e,t)=>h(e,t,v),R=(e,t)=>.5*(h(e,t,M.neighborSamplerData)+h(e,t,v)),E=(e,t)=>h(e,t,M.neighborSamplerData),L=M?.neighborTile.level===c,I=L?R:E,T=o(M)?I:O,A=t.geometryInfo,P=A.outerEdges[r],B=te(u.isWebMercatorOnPlateeCarree,l.ellipsoid.radius,a),N=A.boundingBox,w=1===r||3===r,U=1===r?x[2]:x[0],j=0===r?x[3]:x[1],H=1===r?1:0,Z=0===r?1:0,C=(x[2]-x[0])/g,W=M?.neighborSamplerData,_=o(M),X=(e,t)=>oe(_,L,v,W,e,t,r),Y=re(w,!0,C,X),q=re(w,!1,C,X);for(let e=1;e<b-1;++e){const t=e/m,n=w?U:x[0]*(1-t)+x[2]*t,o=w?x[1]*(1-t)+x[3]*t:j,r=w?H:t,s=w?t:Z,i=T(n,o),l=n*a-S[0],c=B(o)-S[1],u=i-S[2];if(me(l,c,u,N),f){const t=Y(n,o,i),a=q(n,o,i),f=C;P.setVertexRawXYZUVN(e,l,c,u,r,s,t,a,f)}else P.setVertexRawXYZUV(e,l,c,u,r,s)}if(f){const e=w?0:1,t=w?1:0;for(let n=1;n<b-1;++n){P.getNormal(Ee,n);const o=P.getVertexZ(n-1)-P.getVertexZ(n+1),r=Ee[0]+.5*e*o,a=Ee[1]+.5*t*o,s=2*C,i=1/Math.sqrt(r*r+a*a+s*s);P.setVertexRawNormal(n,i*r,i*a,i*s)}}}function F(a,s,i){const l=a.geometryState.neighborData,c=l.edgeNeighbours,u=a.tile,f=u.level,d=u.surface,g=d.shadingEnabled,m=c[s],x=l.edgeResolutions[s];if(D&&!m&&u&&!d.updatingRootTiles){const e=V[s],t=u.findNeighborTile(e,(e=>e.isLoaded||e.isLeaf||e.level===f));d.updatingRootTiles||(t?(y(!t.isLoaded),y(!t.isLeaf),y(t.level===f)):y(n(d?.rootTiles)||!u.shouldHaveNeighbor(e)))}const p=x;y(e(p));const b=u.extent,M=a.geometryState,v=r(M.clippingArea,pe),R=a.geometryInfo,E=R.uvOffsetAndScale[0],L=R.uvOffsetAndScale[1],I=E+R.uvOffsetAndScale[2],T=L+R.uvOffsetAndScale[3],A=I>E?1/(I-E):1,P=T>L?1/(T-L):1,B=-E*A,N=-L*P,w=p+1,U=[b[3]>v[3],b[2]>v[2],b[1]<v[1],b[0]<v[0]],j=m,H=M.samplerData,Z=(e,t)=>h(e,t,H),C=j?.neighborTile.level===f,W=(e,t)=>{if(D){const r=o(v)?v:pe;y(n(j.neighborSamplerData)||S(e,t,j.neighborSamplerData)),y(0!==s||O(t,Math.min(b[3],r[3]))),y(1!==s||O(e,Math.min(b[2],r[2]))),y(2!==s||O(t,Math.max(b[1],r[1]))),y(3!==s||O(e,Math.max(b[0],r[0])))}const r=h(e,t,j.neighborSamplerData);return C?.5*(r+h(e,t,H)):r},_=Z,X=o(j)?W:Z,Y=U[s]?_:X,q=R.outerEdges[s],k=R.boundingBox,G=1===s||3===s,z=t(1===s?b[2]:b[0],v[0],v[2]),F=t(0===s?b[3]:b[1],v[1],v[3]),J=1===s?1:0,K=0===s?1:0,Q=a.localOrigin,$=te(d.isWebMercatorOnPlateeCarree,u.ellipsoid.radius,i),ee=(b[2]-b[0])/x,ne=j?.neighborSamplerData,ae=o(j),se=j?.neighborTile.level===f,ie=(e,t)=>oe(ae,se,H,ne,e,t,s),le=re(G,!0,ee,ie),ce=re(G,!1,ee,ie);for(let e=1;e<w-1;++e){const n=e/p,o=G?z:t(b[0]*(1-n)+b[2]*n,v[0],v[2]),r=G?t(b[1]*(1-n)+b[3]*n,v[1],v[3]):F,a=G?J:t(B+n*A,0,1),s=G?t(N+n*P,0,1):K,l=Y(o,r),c=o*i-Q[0],u=$(r)-Q[1],f=l-Q[2];if(me(c,u,f,k),g){const t=le(o,r,l),n=ce(o,r,l),i=ee;q.setVertexRawXYZUVN(e,c,u,f,a,s,t,n,i)}else q.setVertexRawXYZUV(e,c,u,f,a,s)}if(g){const e=G?0:1,t=G?1:0;for(let n=1;n<w-1;++n){q.getNormal(Ee,n);const o=q.getVertexZ(n-1)-q.getVertexZ(n+1),r=Ee[0]+.5*e*o,a=Ee[1]+.5*t*o,s=2*ee,i=1/Math.sqrt(r*r+a*a+s*s);q.setVertexRawNormal(n,i*r,i*a,i*s)}}}function J(e,t){const n=e.tile;o(n.renderData.geometryState.clippingArea)?K(e,t):fe(e,((o,r,a,s)=>ne(o,r,a,s,e.tile.extent,t,te(n.surface.isWebMercatorOnPlateeCarree,n.ellipsoid.radius,t))))}function K(e,n){const a=e.geometryState,s=e.tile,i=s.extent,l=r(a.clippingArea,i),c=e.geometryInfo,u=c.boundingBox,f=c.outerEdges,d=a.neighborData.cornerNeighborData,g=c.uvOffsetAndScale[0],m=c.uvOffsetAndScale[1],x=c.uvOffsetAndScale[2],p=c.uvOffsetAndScale[3],b=x>0?1/x:1,M=p>0?1/p:1,S=-g*b,v=-m*M,y=s.surface.isWebMercatorOnPlateeCarree,D=te(y,y?s.ellipsoid.radius:0,n),V=a.samplerData,O=a.neighborData.edgeNeighbours,R=e.localOrigin,E=(e,r,a,c,f)=>{const g=i[0]*(1-c)+i[2]*c,m=i[1]*(1-f)+i[3]*f,x=t(g,l[0],l[2]),p=t(m,l[1],l[3]),y=[p===i[3],x===i[2],p===i[1],x===i[0]],E=!y[3]&&!y[1]||!y[0]&&!y[2],L=E?y[0]&&o(O[0])?O[0]:y[1]&&o(O[1])?O[1]:y[2]&&o(O[2])?O[2]:y[3]&&o(O[3])?O[3]:null:null,I=E?L?L.neighborTile.level===s.level?.5*(h(x,p,V)+h(x,p,L.neighborSamplerData)):h(x,p,L.neighborSamplerData):h(x,p,V):d[a].elevation,T=x*n-R[0],A=D(p)-R[1],P=I-R[2];me(T,A,P,u);const B=t(S+c*b,0,1),N=t(v+f*M,0,1);e.setVertexRawXYZUV(r,T,A,P,B,N)};for(let t=0;t<4;++t){const e=f[t];E(e,0,0===t?3:1===t?1:2,1===t?1:0,0===t?1:0);const n=2===t?1:3===t?3:0,o=3===t?0:1,r=2===t?0:1;E(e,e.count-1,n,o,r)}}function Q(e,t){e.tile.surface.shadingEnabled&&ge(e,((e,n,o,r)=>ae(se(e,t),n,o,r)))}function $(e,t){return(Math.PI/2-2*Math.atan(Math.exp(-e/t)))*t}function ee(e,t){return e*t}function te(e,t,n){return e?e=>$(e,t):e=>ee(e,n)}function ne(e,t,n,o,r,a,s){const i=0===t?r[0]:r[2],l=0===n?r[1]:r[3],c=o;e[0]=i*a,e[1]=s(l),e[2]=c}function oe(e,t,n,o,r,a,s){return s===r?!e||t?(e,t)=>h(e,t,n):null:s===a?e?(e,t)=>h(e,t,o):null:null}function re(e,t,n,o){if(t!==e)return()=>0;const r=t?3:2,a=t?1:0,s=o(r,a),i=o(a,r),l=(null!=s?1:0)+(null!=i?1:0),c=t?n:0,u=t?0:n;return(e,t,n)=>((null!=s?-(s(e+c,t+u)-n):0)+(null!=i?+(i(e-c,t-u)-n):0))/l}function ae(e,t,n,o){e(Me,t,n,o);const r=Me[0]-De[0],a=Me[1]-De[1],s=Me[2]-De[2];ye[0]=-r*s,ye[1]=-a*s,ye[2]=r*r+a*a,c(Re,Re,ye)}function se(e,t){return e.tile.surface.isWebMercatorOnPlateeCarree?(n,o,r,a)=>le(t,e.tile.ellipsoid.radius,n,o,r,a):(e,n,o,r)=>ie(t,e,n,o,r)}function ie(e,t,n,o,r){t[0]=n*e,t[1]=o*e,t[2]=r}function le(e,t,n,o,r,a){n[0]=o*e,n[1]=(Math.PI/2-2*Math.atan(Math.exp(-r/t)))*t,n[2]=a}function ce(e,t,n,o,r,a){const s=t-1,i=e.vertexAttributes.count,l=2*(Math.min(t-2,o[1])-Math.max(1,o[0]))*(Math.min(t-2,r[1])-Math.max(1,r[0])),c=V.map(((e,n)=>0===n&&r[1]<t-2||1===n&&o[1]<t-2||2===n&&r[0]>1||3===n&&o[0]>1)),u=e.outerEdges.reduce(((e,t,n)=>e+(c[n]?0:s-2+t.count-1)),0),f=n.reduce(((e,t)=>e+s*(2*(t.latitudeResolution-1)+1)),0),d=a?2:1,g=3*(l+u+f)*d,m=new(i>R?Uint32Array:Uint16Array)(g);let h=0;const x=a?(e,t,n)=>{m[h++]=e,m[h++]=t,m[h++]=t,m[h++]=n,m[h++]=n,m[h++]=e,D&&(y(e<i),y(t<i),y(n<i),y(h<=g))}:(e,t,n)=>{m[h++]=e,m[h++]=t,m[h++]=n,D&&(y(e<i),y(t<i),y(n<i),y(h<=g))},p=t-2,b=s-2;y(b>=0);(()=>{for(let e=Math.max(r[0],1)-1;e<Math.min(r[1],t-2)-1;++e)for(let n=Math.max(o[0],1)-1;n<Math.min(o[1],t-2)-1;++n){const t=e*p+n,o=t+1,r=o+p,a=r-1;x(t,o,r),x(r,a,t)}})(),y(h===3*l*d);(()=>{for(let t=0;t<4;++t){const n=h;if(c[t])continue;const o=e.outerEdges[t],r=e.innerEdges[t];let a=0,i=0;const l=o.count,u=r.count;y(u===s-1);const f=s-2+o.count-1;let g=0;const m=1===t||2===t?(e,t,n)=>x(e,t,n):(e,t,n)=>x(e,n,t);for(;a<l-1||i<u-1;){const e=r.getVertexOffset(i),t=o.getVertexOffset(a),n=a<l-1,c=i<u-1,f=n?0+s*(a+.5)/(l-1):0,d=c?1+b*(i+.5)/(u-1):0;if(n&&(!c||f<=d)){++a,D&&y(a<l);m(e,t,o.getVertexOffset(a)),g++}else{++i,D&&y(i<u);m(e,t,r.getVertexOffset(i)),g++}}D&&(y(a===l-1),y(i===u-1),y(g===l+u-2),y(f===g),y(h===n+3*g*d))}})(),y(h===3*(l+u)*d);const M=n=>{let o=e.outerEdges[n.connectedOuterEdgeOffset].offset0;for(let e=0;e<n.latitudeResolution;++e){const r=0===e?n.rowOffset:o+t;for(let t=0;t<s;t++)x(o,o+1,r+t),e<n.latitudeResolution-1&&x(o+1,r+t+1,r+t),++o;o=r}};(()=>{n.forEach(M)})(),y(h===g),e.indices=m,e.indexCount=g}function ue(e,t){const n=e.localOrigin,o=e.geometryInfo,r=e.geometryState.neighborData.edgeResolutions,a=o.numVerticesPerSide-2,s=o.vertexAttributes.position.typedBuffer;let i=t;for(let l=0;l<4;++l){{const e=0===l||2===l,t=(0===l?a-1:0)*a+(1===l?a-1:0),r=(e?0:1)*a+(e?1:0);o.innerEdges[l]=new b(s,n,t,r,a)}{const e=i,t=r[l]+1;o.outerEdges[l]=new b(s,n,e,1,t),i+=t}}}function fe(e,t){const n=e.geometryInfo,o=n.outerEdges,r=e.geometryState.neighborData.cornerNeighborData,a=n.boundingBox,s=e.localOrigin,i=(e,n,o,i,l)=>{t(be,o,i,r[n].elevation);for(let t=0;t<3;++t)be[t]-=s[t];me(be[0],be[1],be[2],a),e.setVertexRawXYZUV(l,be[0],be[1],be[2],o,i)};for(let l=0;l<4;++l){const e=o[l];i(e,0===l?3:1===l?1:2,1===l?1:0,0===l?1:0,0);i(e,2===l?1:3===l?3:0,3===l?0:1,2===l?0:1,e.count-1)}}function de(e){const t=e.vao,n=e.geometryInfo.vertexAttributes;t?.vertexBuffers?.geometry?.setSubData(n.position.typedBuffer)}function ge(e,t){if(!e.tile.surface.shadingEnabled)return;const n=e.geometryState.neighborData.cornerNeighborData,o=e.tile,r=o.extent,i="local"===e.tile.surface.view?.viewingMode;i&&a(Oe,0,0,1);{const l=1,c=(e,n,o,r,a,s)=>{const i=1===s?a.extent[0]:3===s?a.extent[2]:e,c=0===s?a.extent[1]:2===s?a.extent[3]:n,u=i+he[o][0]*r,f=c+he[o][1]*r;y(m(a.extent,u,f,l));const d=a.renderData,g=h(u,f,d.geometryState.samplerData);t(d,u,f,g)},u=(e,t,n)=>e.extent[0===t||1===t?2:0]+n,f=(e,t,n)=>e.extent[0===t||3===t?3:1]+n,d=(e,n,o,r)=>{const a=u(o,r,he[e][0]*n),s=f(o,r,he[e][1]*n);y(m(o.extent,a,s,l));const i=o.renderData,c=h(a,s,i.geometryState.samplerData);t(i,a,s,c)},g=(e,n,o,r,a,s)=>{const i=he[e][0]*n,c=he[e][1]*n,d=u(o,r,i),g=f(o,r,c),x=u(a,s,i),p=f(a,s,c);y(m(o.extent,d,g,l)),y(m(a.extent,x,p,l));const b=o.renderData,M=a.renderData,S=h(d,g,b.geometryState.samplerData),v=h(x,p,M.geometryState.samplerData);t(b,d,g,.5*(S+v))},x=e=>{a(Re,0,0,0);const t=0===e||1===e?r[2]:r[0],s=0===e||3===e?r[3]:r[1],i=n[e].cornerTiles,l=i.reduce(((e,t)=>Math.min(e,t?.level??1/0)),1/0);for(let n=0;n<4;++n){const e=i[n];Ie[n]=e?.level===l?e:null}for(let n=0;n<4;++n){const r=Ie[(n+3)%4],a=Ie[n];if(null!=r&&r!==o&&r===a){const a=r,i=a.renderData,l=(n+2)%4,u=o.renderData.geometryState.neighborData.edgeResolutions[n],f=u*2**(o.level-a.level),d=(a.extent[2]-a.extent[0])/f,g=(n+3)%4,m=(n+0)%4,h=(n+1)%4,x=i.geometryInfo.outerEdges[l],p=o.getNeighborEdgeStartVertexIndex(n,a)*u;y(0<=p&&p<f);const b=p+(0===e||1===e&&2===n||3===e&&3===n?u:0);y(0<b&&b<f);const M=0===n||3===n,S=1===b,v=b===x.count-2;!(M&&S||!M&&v)&&c(t,s,g,d,a,n),c(t,s,m,d,a,n);return!(!M&&S||M&&v)&&c(t,s,h,d,a,n),Re}}y(Ie.some((e=>e?.isLoaded||e===o)));const u=Ie.reduce(((e,t)=>t?t.extent[2]-t.extent[0]:e),0);y(u>0);const f=Ie.reduce(((e,t)=>Math.max(e,t?.renderData.geometryState.numVerticesPerSide??1)),1);y(f>1);const m=u/f;for(let n=0;n<4;++n){const e=Ie[(n+3)%4],t=Ie[(n+0)%4];if(!e&&!t)continue;const o=0===n?1:1===n?2:2===n?3:0,r=0===n?2:1===n?3:2===n?0:1;if(e&&t)g(n,m,e,o,t,r);else{d(n,m,e??t,e?o:r)}}return Re};for(let t=0;t<4;++t){const n=e.geometryInfo.outerEdges[t],o=1===t||2===t?0:n.count-1;n.getVertex(De,o),i||s(Oe,De),x(t),s(Le[t],Re)}}{const t=(e,t,n,o,r)=>{e.setVertexRawNormal(r,t,n,o)},n=e.geometryInfo.outerEdges;for(let e=0;e<4;++e){const o=n[e];{const n=Le[0===e?3:1===e?1:2];t(o,n[0],n[1],n[2],0)}{const n=Le[2===e?1:3===e?3:0];t(o,n[0],n[1],n[2],o.count-1)}}}}function me(e,t,n,o){e<o[0]?o[0]=e:e>o[3]&&(o[3]=e),t<o[1]?o[1]=t:t>o[4]&&(o[4]=t),n<o[2]?o[2]=n:n>o[5]&&(o[5]=n)}const he=[[0,1],[1,0],[0,-1],[-1,0]],xe=new M,pe=g(-1/0,-1/0,1/0,1/0),be=u(),Me=u(),Se=u(),ve=u(),ye=u(),De=u(),Ve=u(),Oe=u(),Re=u(),Ee=u(),Le=[u(),u(),u(),u()],Ie=[null,null,null,null];export{X as createPlanarGlobePatch,E as createSphericalGlobePatch,Y as updateCornerElevationsPlanar,I as updateCornerElevationsSpherical,q as updateEdgesElevationsAndNormalsPlanar,L as updateEdgesElevationsSpherical};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{equals as e}from"../../../core/arrayUtils.js";import{isPowerOfTwo as t,lerp as r}from"../../../core/mathUtils.js";import{isSome as i,isNone as o,mapOr as s}from"../../../core/maybe.js";import{i as n,j as a,u as l,b as h,w as d}from"../../../chunks/vec3.js";import{c as g,a as u}from"../../../chunks/vec3f64.js";import{empty as c}from"../../../geometry/support/aaBoundingBox.js";import{containsXY as m}from"../../../geometry/support/aaBoundingRect.js";import{earth as f}from"../../../geometry/support/Ellipsoid.js";import{glLayout as p}from"../support/buffer/glUtil.js";import{sampleElevationOrZero as x}from"./ElevationData.js";import{GeometryState as y}from"./GeometryState.js";import{NeighborIndex as _}from"./interfaces.js";import{LayerClass as v}from"./LayerClass.js";import{PatchGeometry as b,releaseGeometry as D}from"./PatchGeometry.js";import{ENABLE_TERRAIN_INTERNAL_CHECKS as S,internalAssert as T,neighborEdgeIndices as C,oppositeEdge as E,neighborCornerIndices as j,oppositeCorner as L,v32s as R,lij2s as V,eps as G}from"./terrainUtils.js";import{TextureFader as N,ActivationTime as I}from"./TextureFader.js";export{ActivationTime}from"./TextureFader.js";import{isCornerNeighbor as A,isEdgeNeighbor as $}from"./Tile.js";import w from"./TileOverlayData.js";import{fallsWithinLayer as O}from"./tileUtils.js";import{Default3D as P}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import{BufferObject as U}from"../../webgl/BufferObject.js";import{VertexArrayObject as M}from"../../webgl/VertexArrayObject.js";class F{constructor(){this.geometryInfo=new b,this.intersectionData=null,this.geometryState=null,this._textureRef=new N((()=>this.tile.surface.textureFadeDuration)),this.overlay=new w,this._geometryStateChangedSinceLastUpdate=!0,this._hasGeometry=!1,this._numVerticesPerSideChanged=!1,this._samplerDataChanged=!1,this._edgeResolutionChanged=!1,this._edgeNeighborChanged=!1,this._cornerElevationChanged=!1,this._clippingAreaChanged=!1,this._wireframeChanged=!1}get tile(){return this._tile}init(e){this._tile=e,this.clear();const t=this.geometryInfo;t.indices=null,t.vertexAttributes=null,c(t.boundingBox),t.indexCount=0,t.numVerticesPerSide=0,this.intersectionData=null,this.geometryState=new y,this.localOrigin=null,this.overlay.clear()}clear(){this._releaseGeometry(),this.releaseTexture(),this._textureRef.clear()}updateGeometryIfChanged(e,t){const r=this.updateGeometryStateAndPrepareForGeometryGeneration(t);this._hasGeometry=!0;return this.updateNeighborDataAndGeometryIfNeeded(r,e)}updateNeighborDataAndGeometryIfNeeded(e=!1,t=this.vao.context){const r=this._updateNeighborData(),i=e||this._geometryStateChangedSinceLastUpdate||r;if(i&&(this._updateGeometry(t),this._geometryStateChangedSinceLastUpdate=!1),S)for(let o=0;o<4;++o)T(this.geometryInfo.outerEdges[o].count===this.geometryState.neighborData.edgeResolutions[o]+1);return i}_calculateEdgeResolution(e,t){const r=this.tile,s=this.geometryState.numVerticesPerSide-1;if(!r.surface.isGlobal){const t=r.surface.extent;if(i(t)&&(0===e&&r.extent[3]>t[3]||1===e&&r.extent[2]>t[2]||2===e&&r.extent[1]<t[1]||3===e&&r.extent[0]<t[0]))return s}const n=r.level,a=C[e],l=t||r.findNeighborTile(a,(e=>e.isLoaded||e.level===n));if(!l||l.isLeaf&&!l.isLoaded)return T(o(r.surface?.rootTiles)||r.surface.updatingRootTiles||!r.shouldHaveNeighbor(a)),s;if(l.isLoaded){const t=l,r=t.renderData.geometryState,i=n-t.level;if(T(i>=0),0===i){const e=r.numVerticesPerSide-1;return Math.max(e,s)}const o=2**i,a=r.neighborData.edgeResolutions[(e+2)%4]/o;return Math.max(1,a)}T(!l.isLeaf);let h=s;return l.forAllSubtreeOnSide(E(a),(e=>e===r||(e.isLoaded?(h=Math.max(h,2**(e.level-n)),!0):(T(!e.isLeaf),!1)))),h}_updateNeighborData(){const e=this.tile,i=t=>t.isLoaded||t.level===e.level,o=e=>e.isLoaded,s=[null,null,null,null],n=[null,null,null,null];(()=>{for(let t=0;t<4;++t){const r=e.findNeighborTile(C[t],i);s[t]=r,n[t]=r?.isLoaded?r:null}})();const a=[null,null,null,null];if((()=>{for(let t=0;t<4;++t)a[t]=e.findNeighborTile(j[t],o)})(),S){const t=t=>t?.isLoaded||t?.isLeaf||t?.lij[0]===e.lij[0];j.forEach((r=>{const i=e.findNeighborTile(r,t);T(!i||A(e,i,r));const o=i?.findCorner(L(r),(e=>e?.isLoaded||e?.isLeaf));T(!o||A(e,o,r))}))}const l=this.geometryState.neighborData;let h=!1;(()=>{for(let r=0;r<4;++r){const i=l.edgeResolutions[r],o=s[r],n=this._calculateEdgeResolution(r,o);T(t(n)),T(n>=1),l.edgeResolutions[r]=n,i!==n&&(h=!0,this._edgeResolutionChanged=!0,o&&o!==e&&!o.isLoaded&&o.level===e.level&&(l.modifiedEdgeResolutions[r]=!0))}})();(()=>{const t=(t,i)=>{const o=t.reduce(((e,t)=>Math.min(e,t?.level??1/0)),1/0);S&&(T(!t[0]||!t[2]||A(t[0],t[2],_.SOUTH_WEST)),T(!t[1]||!t[3]||A(t[1],t[3],_.NORTH_WEST)));for(let l=0;l<4;++l){const o=t[(l+3)%4],s=t[l];if(o&&o.level<e.level&&o===s){T(!S||o!==e);const t=1==(1&l),s=0===i||1===i&&!t||3===i&&t,n=e.getNeighborEdgeStartVertexIndex(l,o)+(s?1:0),a=2**(e.level-o.level);T(!S||0<=n&&n<=a);const h=n/a,d=t?0===i||1===i?o.extent[0]:o.extent[2]:r(o.extent[0],o.extent[2],h),g=t?r(o.extent[1],o.extent[3],h):0===i||3===i?o.extent[1]:o.extent[3];return x(d,g,o.renderData.geometryState.samplerData)}}let s=0,n=0;for(let e=0;e<4;++e){const r=t[e];if(r&&r.level===o){const t=0===e||1===e,i=0===e||3===e,o=r.extent;n+=x(o[t?0:2],o[i?1:3],r.renderData?.geometryState?.samplerData),s++}}const a=s?n/s:0;return T(null!=a),a},i=l.cornerNeighborData,o=(r,o)=>{const s=i[r],n=s.cornerTiles;for(let t=0;t<4;++t){const r=j[t],i=o[t]?.findCorner(L(r),(t=>t?.isLoaded||t===e));n[t]=i}const a=t(n,r);return s.elevation!==a&&(T(null!=a),s.elevation=a,!0)};for(let r=0;r<4;++r){const t=a[r],i=n[r],s=[t,n[(r+1)%4],e,i],l=s.map(((e,t)=>s[(t+4-r)%4]));o(r,l)&&(this._cornerElevationChanged=!0,h=!0)}})();return(()=>{const t=(t,r)=>{if(!t?.isLoaded||t.lij[0]>e.lij[0])return null;const i=t.renderData.geometryState;return{neighborSamplerData:i.samplerData,neighborEdgeOverlapResolution:i.neighborData.edgeResolutions[r+2],version:i.samplerDataVersion,neighborVerticesPerSide:i.numVerticesPerSide,neighborTile:t}},r=l.edgeNeighbours;for(let i=0;i<4;++i){const o=n[i];o&&(T(o?.isLoaded),T(o?.lij[0]<=e.lij[0]));const s=r[i],a=s?.version,l=t(o,i),d=l?.version??null,g=null!=s!=(null!=l),u=s&&l&&a!==d,c=s&&l&&s?.neighborTile!==l?.neighborTile,m=g||u||c;this._edgeNeighborChanged||(this._edgeNeighborChanged=m),h||(h=m),!m&&a||(r[i]=l)}})(),h}updateEdgeAfterResolutionChange(e){const t=this._calculateEdgeResolution(e),r=this.geometryState.neighborData.edgeResolutions,i=r[e];T((this.geometryState.neighborData.edgeNeighbours[e]?.neighborTile.level??0)<=this.tile.level),t!==i&&(r[e]=t,this._edgeResolutionChanged=!0,this._updateGeometry(this.vao.context))}_updateGeometry(e){this.intersectionData=null;const t=this.tile,r=this._vao,i=this.geometryInfo.vertexAttributes,o=!r||!i||this._wireframeChanged||this._numVerticesPerSideChanged||this._samplerDataChanged||this._clippingAreaChanged||this._edgeResolutionChanged,s=!o&&this._edgeNeighborChanged,n=!s&&this._cornerElevationChanged;this._numVerticesPerSideChanged=!1,this._samplerDataChanged=!1,this._edgeResolutionChanged=!1,this._edgeNeighborChanged=!1,this._cornerElevationChanged=!1,this._clippingAreaChanged=!1,this._wireframeChanged=!1,o?(this._releaseGeometry(),this._createGeometry(e)):s?t.updateEdgeElevations():n?t.updateCornerElevations():console.warn("Update for no reason?")}releaseGeometry(){return this._releaseGeometry()}get hasGeometry(){return this._hasGeometry}ensureTexture(e,t){return i(this._texture)&&this._texture.descriptor.width!==e&&this.releaseTexture(),o(this._texture)&&(this._texture=t(),this.tile.setMemoryDirty()),this._texture}releaseTexture(){i(this._texture)&&(this._texture.release(),this._texture=null,this.tile.setMemoryDirty())}updateGeometryStateAndPrepareForGeometryGeneration(t){const r=this._getElevationInfo(),i=r.samplerData?this.tile.getElevationBasedVerticesPerSide(r.maxTileLevel):this.tile.getDefaultVerticesPerRowOnLevel(),o=Math.max(i,5);let s=this.tile.clippingArea;this.tile.intersectsClippingArea&&!this.tile.isWithinClippingArea||(s=null);const n=this.geometryState;let a=!1;return n.numVerticesPerSide!==o&&(this._numVerticesPerSideChanged=!0,n.numVerticesPerSide=o,n.samplerDataVersion++,a=!0),r.changed&&(this._samplerDataChanged=!0,n.samplerData=r.samplerData,n.samplerDataVersion++,a=!0),e(n.clippingArea,s)||(this._clippingAreaChanged=!0,n.clippingArea=s,a=!0),n.wireframe!==t&&(this._wireframeChanged=!0,n.wireframe=t,a=!0),this._geometryStateChangedSinceLastUpdate||(this._geometryStateChangedSinceLastUpdate=a),this._hasGeometry=!0,a}_createGeometry(e){this.tile.createGeometry();const t=this.geometryInfo.vertexAttributes,r=this.geometryInfo.indices,i=e.gl;this._vao=new M(e,P,{geometry:p(t.layout)},{geometry:U.createVertex(e,i.STATIC_DRAW,t.buffer)},U.createIndex(e,i.STATIC_DRAW,r)),this._hasGeometry=!0}_releaseGeometry(){return this._hasGeometry=!1,!!this._vao&&(this._vao.dispose(),this._vao=null,D(this.geometryInfo),!0)}get vao(){return this._vao}setTextureReference(e,t=I.Immediate){i(e)&&e.texture!==this._texture&&this.releaseTexture(),this._textureRef.push(e,t)}get textureReference(){return this._textureRef.current}get nextTextureReference(){return this._textureRef.next}get textureFadeFactor(){return this._textureRef.fadeFactor}get textureIsFading(){return this._textureRef.isFading}_getElevationInfo(){const e=this.geometryState.samplerData,t=this.tile.layerInfo[v.ELEVATION],r=t.length;let o=new Array(r),s=0,n=0,a=!1;for(let l=0;l<r;l++){const r=t[l];if(i(r.upsampleInfo)){const t=r.upsampleInfo.tile,i=t.layerInfo[v.ELEVATION][l].data,h=i&&i.samplerData;e&&e[s]===h||(a=!0),o[s++]=h,n=Math.max(n,t.lij[0])}else if(r.data){const t=this.tile.surface.layerViewByIndex(l,v.ELEVATION);if(O(this.tile,t.layer,!1)){const t=r.data;e&&e[s]===t.samplerData||(a=!0),o[s++]=t.samplerData,n=this.tile.level}}}return i(e)&&e.length!==s&&(a=!0),s>0?o.length=s:o=null,{changed:a,samplerData:o,maxTileLevel:n}}get estimatedGeometryMemoryUsage(){const e=s(this.intersectionData,0,(e=>e.estimatedMemoryUsage));return this.geometryInfo.indices.byteLength+this.geometryInfo.vertexAttributes.byteLength+e}get textureDescriptor(){return i(this._texture)?this._texture.descriptor:null}get test(){return{hasTexture:null!=this._texture}}checkGeometryWaterproofness(){if(!S)return;const e=this.tile;if(T(e?.isLoaded),!e.isLoaded)return;const r=e.surface.extent;if(i(r)&&!e.intersectsExtent(r))return;const s=C.map(((t,o)=>!!i(r)&&(o<2?-1:1)*(e.extent[3-o]-r[3-o])<0)),c=e.level;C.forEach(((r,p)=>{if(s[p])return;const x=e.findNeighborTile(r,(e=>e.level===c||e?.isLoaded));if(!x){const t=!e.surface.updatingRootTiles&&i(e.surface.rootTiles)&&e.surface.rootTiles.length>0&&e.shouldHaveNeighbor(r);return void T(!t)}const y=c-x.level;if(!x.isLoaded)return T(!x.isLeaf),void T(0===y);T($(e,x,r)),T(y>=0);const v=2**y;if(y<0)return void T(!1);const b=e.renderData.geometryInfo,D=b.outerEdges[p],S=b.numVerticesPerSide-1,C=x.renderData.geometryInfo;if(T(!!C),!C)return;{const t=e.renderData.geometryState.neighborData.edgeNeighbours[p];t&&(T(t.neighborTile===x),T(t.version===x.renderData.geometryState.samplerDataVersion))}const E=C.outerEdges[(p+2)%4];T(D.count-1==(E.count-1)/v);const j=e.extent,L=r===_.NORTH||r===_.SOUTH,G=E.count-1,N=G/2**y,I=D.count-1;if(N<1)return void T(1===I);T(N===I),T(t(N));const A=C.numVerticesPerSide-1;T(y>0||N===Math.max(A,S));const w=e.getNeighborEdgeStartVertexIndex(p,x);T(0<=w&&w<v);const O=w*N;T(0<=O&&O<=G-N);let P=0,U=O;D.getVertex(B,P),D.getVertex(H,P);const M=n(B,H),F=Math.max(q,1e-5*M),k=(p+2)%4;for(let t=0;t<=N;++t){D.getVertex(B,P),E.getVertex(H,U);const s=t/N,c=L?j[0]+s*(j[2]-j[0]):r===_.WEST?j[0]:j[2],y=L?r===_.SOUTH?j[1]:j[3]:j[1]+s*(j[3]-j[1]),v=e.surface.extent;if(o(v)||m(v,c,y)){const t=a(B,H),r=l(B)-f.radius,o=l(H)-f.radius,s=t<F;if(!s){console.log("Tile edge vertex position mismatch: between ",e.lij,": ",p,"[",P,"]"," and ",x.lij,": ",k,"[",U,"]"),i(v)&&console.log(" surface extent= ",v," x,y=",c,",",y);const a=g();h(a,e.renderData.localOrigin,x.renderData.localOrigin),a.length>0&&console.log(" localOrigins:",R(e.renderData.localOrigin)," vs ",R(x.renderData.localOrigin));(()=>{const t=u(B),r=u(H);e.updateEdgeElevations(),x.updateEdgeElevations(),D.getVertex(B,P),E.getVertex(H,U),n(B,t)>0&&console.log(" XXX Tile edge out of date: ",R(t)," vs ",R(B)),n(H,r)>0&&console.log(" XXX Neighbor edge out of date: ",R(r)," vs ",R(H))})(),T(s,`Mismatch in tile ${V(e.lij)} (${P}/${D.count-1}) edge ${p} vs neighbor ${V(x.lij)} (${U}/${E.count-1}) nedge ${k} : ${R(B)} vs ${R(H)} dist=${t} h(t|n|d)=${r}|${o}|${o-r}`)}if(e.surface.shadingEnabled){D.getNormal(W,P),E.getNormal(X,U);const t=a(W,X),r=P<=1||U<=1||P>=D.count-2||U>=E.count-2,i=t<.01||r;if(!i){const r=g();d(r,W,X),T(i,`Mismatch in tile edge normal ${V(e.lij)} (${P}/${D.count-1}) edge ${p} vs neighbor ${V(x.lij)} (${U}/${E.count-1}) nedge ${k} :${R(W)} vs ${R(X)} dist = ${t} : ${R(r)}`)}}}P+=1,U+=1}}))}}const B=g(),H=g(),W=g(),X=g();function k(e,t,r){if(i(r))for(const i of r)if(i){const r=i.x0,o=i.width,s=r+(o-1)/i.dx,n=i.y1,a=n-(o-1)/i.dy;if(e>=r-G&&e<=s+G&&a-G<=t&&t<=n+G)return!0}return!1}const q=1;export{F as PatchRenderData,k as isElevationSampleIn};
5
+ import{equals as e}from"../../../core/arrayUtils.js";import{isPowerOfTwo as t,lerp as r}from"../../../core/mathUtils.js";import{isSome as i,isNone as o,mapOr as s}from"../../../core/maybe.js";import{i as n,j as a,u as l,b as h,n as d,e as g,w as u,z as c}from"../../../chunks/vec3.js";import{c as m,a as f}from"../../../chunks/vec3f64.js";import{empty as p}from"../../../geometry/support/aaBoundingBox.js";import{containsXY as x}from"../../../geometry/support/aaBoundingRect.js";import{earth as y}from"../../../geometry/support/Ellipsoid.js";import{glLayout as _}from"../support/buffer/glUtil.js";import{sampleElevationOrZero as v}from"./ElevationData.js";import{GeometryState as b}from"./GeometryState.js";import{NeighborIndex as D}from"./interfaces.js";import{LayerClass as S}from"./LayerClass.js";import{PatchGeometry as T,releaseGeometry as C}from"./PatchGeometry.js";import{ENABLE_TERRAIN_INTERNAL_CHECKS as E,internalAssert as j,neighborEdgeIndices as L,oppositeEdge as V,neighborCornerIndices as R,oppositeCorner as N,v32s as G,lij2s as I,eps as A}from"./terrainUtils.js";import{TextureFader as $,ActivationTime as w}from"./TextureFader.js";export{ActivationTime}from"./TextureFader.js";import{isCornerNeighbor as O,isEdgeNeighbor as P}from"./Tile.js";import M from"./TileOverlayData.js";import{fallsWithinLayer as U}from"./tileUtils.js";import{Default3D as F}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import{BufferObject as B}from"../../webgl/BufferObject.js";import{VertexArrayObject as H}from"../../webgl/VertexArrayObject.js";class W{constructor(){this.geometryInfo=new T,this.intersectionData=null,this.geometryState=null,this._textureRef=new $((()=>this.tile.surface.textureFadeDuration)),this.overlay=new M,this._geometryStateChangedSinceLastUpdate=!0,this._hasGeometry=!1,this._numVerticesPerSideChanged=!1,this._samplerDataChanged=!1,this._edgeResolutionChanged=!1,this._edgeNeighborChanged=!1,this._cornerChanged=!1,this._clippingAreaChanged=!1,this._wireframeChanged=!1}get tile(){return this._tile}init(e){this._tile=e,this.clear();const t=this.geometryInfo;t.indices=null,t.vertexAttributes=null,p(t.boundingBox),t.indexCount=0,t.numVerticesPerSide=0,this.intersectionData=null,this.geometryState=new b,this.localOrigin=null,this.overlay.clear()}clear(){this._releaseGeometry(),this.releaseTexture(),this._textureRef.clear()}updateGeometryIfChanged(e,t){const r=this.updateGeometryStateAndPrepareForGeometryGeneration(t);this._hasGeometry=!0;return this.updateNeighborDataAndGeometryIfNeeded(r,e)}updateNeighborDataAndGeometryIfNeeded(e=!1,t=this.vao.context){const r=this._updateNeighborData(),i=e||this._geometryStateChangedSinceLastUpdate||r;if(i&&(this._updateGeometry(t),this._geometryStateChangedSinceLastUpdate=!1),E)for(let o=0;o<4;++o)j(this.geometryInfo.outerEdges[o].count===this.geometryState.neighborData.edgeResolutions[o]+1);return i}_calculateEdgeResolution(e,t){const r=this.tile,s=this.geometryState.numVerticesPerSide-1;if(!r.surface.isGlobal){const t=r.surface.extent;if(i(t)&&(0===e&&r.extent[3]>t[3]||1===e&&r.extent[2]>t[2]||2===e&&r.extent[1]<t[1]||3===e&&r.extent[0]<t[0]))return s}const n=r.level,a=L[e],l=t||r.findNeighborTile(a,(e=>e.isLoaded||e.level===n));if(!l||l.isLeaf&&!l.isLoaded)return j(o(r.surface?.rootTiles)||r.surface.updatingRootTiles||!r.shouldHaveNeighbor(a)),s;if(l.isLoaded){const t=l,r=t.renderData.geometryState,i=n-t.level;if(j(i>=0),0===i){const e=r.numVerticesPerSide-1;return Math.max(e,s)}const o=2**i,a=r.neighborData.edgeResolutions[(e+2)%4]/o;return Math.max(1,a)}j(!l.isLeaf);let h=s;return l.forAllSubtreeOnSide(V(a),(e=>e===r||(e.isLoaded?(h=Math.max(h,2**(e.level-n)),!0):(j(!e.isLeaf),!1)))),h}_updateNeighborData(){const e=this.tile,i=t=>t.isLoaded||t.level===e.level,o=e=>e.isLoaded,s=[null,null,null,null],n=[null,null,null,null];(()=>{for(let t=0;t<4;++t){const r=e.findNeighborTile(L[t],i);s[t]=r,n[t]=r?.isLoaded?r:null}})();const a=[null,null,null,null];if((()=>{for(let t=0;t<4;++t)a[t]=e.findNeighborTile(R[t],o)})(),E){const t=t=>t?.isLoaded||t?.isLeaf||t?.lij[0]===e.lij[0];R.forEach((r=>{const i=e.findNeighborTile(r,t);j(!i||O(e,i,r));const o=i?.findCorner(N(r),(e=>e?.isLoaded||e?.isLeaf));j(!o||O(e,o,r))}))}const l=this.geometryState.neighborData;let h=!1;(()=>{for(let r=0;r<4;++r){const i=l.edgeResolutions[r],o=s[r],n=this._calculateEdgeResolution(r,o);j(t(n)),j(n>=1),l.edgeResolutions[r]=n,i!==n&&(h=!0,this._edgeResolutionChanged=!0,o&&o!==e&&!o.isLoaded&&o.level===e.level&&(l.modifiedEdgeResolutions[r]=!0))}})();(()=>{const t=(t,i)=>{const o=t.reduce(((e,t)=>Math.min(e,t?.level??1/0)),1/0);E&&(j(!t[0]||!t[2]||O(t[0],t[2],D.SOUTH_WEST)),j(!t[1]||!t[3]||O(t[1],t[3],D.NORTH_WEST)));for(let l=0;l<4;++l){const o=t[(l+3)%4],s=t[l];if(o&&o.level<e.level&&o===s){j(!E||o!==e);const t=1==(1&l),s=0===i||1===i&&!t||3===i&&t,n=e.getNeighborEdgeStartVertexIndex(l,o)+(s?1:0),a=2**(e.level-o.level);j(!E||0<=n&&n<=a);const h=n/a,d=t?0===i||1===i?o.extent[0]:o.extent[2]:r(o.extent[0],o.extent[2],h),g=t?r(o.extent[1],o.extent[3],h):0===i||3===i?o.extent[1]:o.extent[3];return v(d,g,o.renderData.geometryState.samplerData)}}let s=0,n=0;for(let e=0;e<4;++e){const r=t[e];if(r&&r.level===o){const t=0===e||1===e,i=0===e||3===e,o=r.extent;n+=v(o[t?0:2],o[i?1:3],r.renderData?.geometryState?.samplerData),s++}}const a=s?n/s:0;return j(null!=a),a},i=l.cornerNeighborData,o=(r,o)=>{const s=i[r],n=s.cornerTiles,a=s.cornerTileSamplerVersions;for(let t=0;t<4;++t){const r=R[t],i=o[t]?.findCorner(N(r),(t=>t?.isLoaded||t===e));if(n[t]!==i&&(this._cornerChanged=!0,h=!0,n[t]=i),i){const e=i.renderData.geometryState.samplerDataVersion??-1;e!==a[t]&&(a[t]=e,this._cornerChanged=!0,h=!0)}}const l=t(n,r);return s.elevation!==l&&(j(null!=l),s.elevation=l,!0)};for(let r=0;r<4;++r){const t=a[r],i=n[r],s=[t,n[(r+1)%4],e,i],l=s.map(((e,t)=>s[(t+4-r)%4]));o(r,l)&&(this._cornerChanged=!0,h=!0)}})();return(()=>{const t=(t,r)=>{if(!t?.isLoaded||t.lij[0]>e.lij[0])return null;const i=t.renderData.geometryState;return{neighborSamplerData:i.samplerData,neighborEdgeOverlapResolution:i.neighborData.edgeResolutions[r+2],version:i.samplerDataVersion,neighborVerticesPerSide:i.numVerticesPerSide,neighborTile:t}},r=l.edgeNeighbours;for(let i=0;i<4;++i){const o=n[i];o&&(j(o?.isLoaded),j(o?.lij[0]<=e.lij[0]));const s=r[i],a=s?.version,l=t(o,i),d=l?.version??null,g=null!=s!=(null!=l),u=s&&l&&a!==d,c=s&&l&&s?.neighborTile!==l?.neighborTile,m=g||u||c;this._edgeNeighborChanged||(this._edgeNeighborChanged=m),h||(h=m),!m&&a||(r[i]=l)}})(),h}updateEdgeAfterResolutionChange(e){const t=this._calculateEdgeResolution(e),r=this.geometryState.neighborData.edgeResolutions,i=r[e];j((this.geometryState.neighborData.edgeNeighbours[e]?.neighborTile.level??0)<=this.tile.level),t!==i&&(r[e]=t,this._edgeResolutionChanged=!0,this._updateGeometry(this.vao.context))}_updateGeometry(e){this.intersectionData=null;const t=this.tile,r=this._vao,i=this.geometryInfo.vertexAttributes,o=!r||!i||this._wireframeChanged||this._numVerticesPerSideChanged||this._samplerDataChanged||this._clippingAreaChanged||this._edgeResolutionChanged,s=!o&&this._edgeNeighborChanged,n=!s&&this._cornerChanged;this._numVerticesPerSideChanged=!1,this._samplerDataChanged=!1,this._edgeResolutionChanged=!1,this._edgeNeighborChanged=!1,this._cornerChanged=!1,this._clippingAreaChanged=!1,this._wireframeChanged=!1,o?(this._releaseGeometry(),this._createGeometry(e)):s?t.updateEdgeElevations():n?t.updateCornerElevations():console.warn("Update for no reason?")}releaseGeometry(){return this._releaseGeometry()}get hasGeometry(){return this._hasGeometry}ensureTexture(e,t){return i(this._texture)&&this._texture.descriptor.width!==e&&this.releaseTexture(),o(this._texture)&&(this._texture=t(),this.tile.setMemoryDirty()),this._texture}releaseTexture(){i(this._texture)&&(this._texture.release(),this._texture=null,this.tile.setMemoryDirty())}updateGeometryStateAndPrepareForGeometryGeneration(t){const r=this._getElevationInfo(),i=r.samplerData?this.tile.getElevationBasedVerticesPerSide(r.maxTileLevel):this.tile.getDefaultVerticesPerRowOnLevel(),o=Math.max(i,5);let s=this.tile.clippingArea;this.tile.intersectsClippingArea&&!this.tile.isWithinClippingArea||(s=null);const n=this.geometryState;let a=!1;return n.numVerticesPerSide!==o&&(this._numVerticesPerSideChanged=!0,n.numVerticesPerSide=o,n.samplerDataVersion++,a=!0),r.changed&&(this._samplerDataChanged=!0,n.samplerData=r.samplerData,n.samplerDataVersion++,a=!0),e(n.clippingArea,s)||(this._clippingAreaChanged=!0,n.clippingArea=s,a=!0),n.wireframe!==t&&(this._wireframeChanged=!0,n.wireframe=t,a=!0),this._geometryStateChangedSinceLastUpdate||(this._geometryStateChangedSinceLastUpdate=a),this._hasGeometry=!0,a}_createGeometry(e){this.tile.createGeometry();const t=this.geometryInfo.vertexAttributes,r=this.geometryInfo.indices,i=e.gl;this._vao=new H(e,F,{geometry:_(t.layout)},{geometry:B.createVertex(e,i.STATIC_DRAW,t.buffer)},B.createIndex(e,i.STATIC_DRAW,r)),this._hasGeometry=!0}_releaseGeometry(){return this._hasGeometry=!1,!!this._vao&&(this._vao.dispose(),this._vao=null,C(this.geometryInfo),!0)}get vao(){return this._vao}setTextureReference(e,t=w.Immediate){i(e)&&e.texture!==this._texture&&this.releaseTexture(),this._textureRef.push(e,t)}get textureReference(){return this._textureRef.current}get nextTextureReference(){return this._textureRef.next}get textureFadeFactor(){return this._textureRef.fadeFactor}get textureIsFading(){return this._textureRef.isFading}_getElevationInfo(){const e=this.geometryState.samplerData,t=this.tile.layerInfo[S.ELEVATION],r=t.length;let o=new Array(r),s=0,n=0,a=!1;for(let l=0;l<r;l++){const r=t[l];if(i(r.upsampleInfo)){const t=r.upsampleInfo.tile,i=t.layerInfo[S.ELEVATION][l].data,h=i&&i.samplerData;e&&e[s]===h||(a=!0),o[s++]=h,n=Math.max(n,t.lij[0])}else if(r.data){const t=this.tile.surface.layerViewByIndex(l,S.ELEVATION);if(U(this.tile,t.layer,!1)){const t=r.data;e&&e[s]===t.samplerData||(a=!0),o[s++]=t.samplerData,n=this.tile.level}}}return i(e)&&e.length!==s&&(a=!0),s>0?o.length=s:o=null,{changed:a,samplerData:o,maxTileLevel:n}}get estimatedGeometryMemoryUsage(){const e=s(this.intersectionData,0,(e=>e.estimatedMemoryUsage));return this.geometryInfo.indices.byteLength+this.geometryInfo.vertexAttributes.byteLength+e}get textureDescriptor(){return i(this._texture)?this._texture.descriptor:null}get test(){return{hasTexture:null!=this._texture}}checkGeometryWaterproofness(){if(!E)return;const e=this.tile;if(j(e?.isLoaded),!e.isLoaded)return;const r=e.surface.extent;if(i(r)&&!e.intersectsExtent(r))return;const s=L.map(((t,o)=>!!i(r)&&(o<2?-1:1)*(e.extent[3-o]-r[3-o])<0)),p=e.level;L.forEach(((r,_)=>{if(s[_])return;const v=e.findNeighborTile(r,(e=>e.level===p||e?.isLoaded));if(!v){const t=!e.surface.updatingRootTiles&&i(e.surface.rootTiles)&&e.surface.rootTiles.length>0&&e.shouldHaveNeighbor(r);return void j(!t)}const b=p-v.level;if(!v.isLoaded)return j(!v.isLeaf),void j(0===b);j(P(e,v,r)),j(b>=0);const S=2**b;if(b<0)return void j(!1);const T=e.renderData.geometryInfo,C=T.outerEdges[_],E=T.numVerticesPerSide-1,L=v.renderData.geometryInfo;if(j(!!L),!L)return;{const t=e.renderData.geometryState.neighborData.edgeNeighbours[_];t&&(j(t.neighborTile===v),j(t.version===v.renderData.geometryState.samplerDataVersion))}const V=L.outerEdges[(_+2)%4];j(C.count-1==(V.count-1)/S);const R=e.extent,N=r===D.NORTH||r===D.SOUTH,A=V.count-1,$=A/2**b,w=C.count-1;if($<1)return void j(1===w);j($===w),j(t($));const O=L.numVerticesPerSide-1;j(b>0||$===Math.max(O,E));const M=e.getNeighborEdgeStartVertexIndex(_,v);j(0<=M&&M<S);const U=M*$;j(0<=U&&U<=A-$);let F=0,B=U;C.getVertex(X,F),C.getVertex(k,F);const H=n(X,k),W=Math.max(Y,1e-5*H),Q=(_+2)%4;for(let t=0;t<=$;++t){C.getVertex(X,F),V.getVertex(k,B);const s=t/$,p=N?R[0]+s*(R[2]-R[0]):r===D.WEST?R[0]:R[2],b=N?r===D.SOUTH?R[1]:R[3]:R[1]+s*(R[3]-R[1]),S=e.surface.extent;if(o(S)||x(S,p,b)){const t=a(X,k),r=l(X)-y.radius,o=l(k)-y.radius,s=t<W;if(!s){console.log("Tile edge vertex position mismatch: between ",e.lij,": ",_,"[",F,"]"," and ",v.lij,": ",Q,"[",B,"]"),i(S)&&console.log(" surface extent= ",S," x,y=",p,",",b);const a=m();h(a,e.renderData.localOrigin,v.renderData.localOrigin),a.length>0&&console.log(" localOrigins:",G(e.renderData.localOrigin)," vs ",G(v.renderData.localOrigin));(()=>{const t=f(X),r=f(k);e.updateEdgeElevations(),v.updateEdgeElevations(),C.getVertex(X,F),V.getVertex(k,B),n(X,t)>0&&console.log(" XXX Tile edge out of date: ",G(t)," vs ",G(X)),n(k,r)>0&&console.log(" XXX Neighbor edge out of date: ",G(r)," vs ",G(k))})(),j(s,`Mismatch in tile ${I(e.lij)} (${F}/${C.count-1}) edge ${_} vs neighbor ${I(v.lij)} (${B}/${V.count-1}) nedge ${Q} : ${G(X)} vs ${G(k)} dist=${t} h(t|n|d)=${r}|${o}|${o-r}`)}if(e.surface.shadingEnabled){C.getNormal(z,F),V.getNormal(q,B),d(J,z),d(K,q);const t=g(J,K),r=!1,i=1-t<.01||r||e===v;if(!i){const r=m();u(r,z,q);const o=()=>`Mismatch in tile edge normal ${I(e.lij)} (${F}/${C.count-1}) edge ${_} vs neighbor ${I(v.lij)} (${B}/${V.count-1}) nedge ${Q} :${G(z)} vs ${G(q)} dot = ${t} : ${G(r)}`;console.warn("Mismatch in tile edge normal: ",o());{e.updateEdgeElevations(),v.updateEdgeElevations();const t=m(),r=m();C.getNormal(t,F),V.getNormal(r,B),c(z,t)||console.warn("Missing update in tile normal: ",G(z)," => ",G(t)),c(q,r)||console.warn("Missing update in neighbor normal: ",G(q)," => ",G(r))}j(i,o())}}}F+=1,B+=1}}))}}const X=m(),k=m(),z=m(),q=m(),J=m(),K=m();function Q(e,t,r){if(i(r))for(const i of r)if(i){const r=i.x0,o=i.width,s=r+(o-1)/i.dx,n=i.y1,a=n-(o-1)/i.dy;if(e>=r-A&&e<=s+A&&a-A<=t&&t<=n+A)return!0}return!1}const Y=1;export{W as PatchRenderData,Q as isElevationSampleIn};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../../../chunks/tslib.es6.js";import{RasterColorizerType as r,RasterColorizerStretchType as o}from"../../2d/engine/imagery/enums.js";import{BlendModeTechniqueConfiguration as i}from"./BlendModeTechniqueConfiguration.js";import{R as t}from"../../../chunks/RasterColorizer.glsl.js";import{TileBlendInput as n}from"../webgl-engine/core/shaderLibrary/terrain/TileBlendInput.js";import{a as s}from"../../../chunks/BlendLayers.glsl.js";import{ReloadableShaderModule as l}from"../webgl-engine/core/shaderTechnique/ReloadableShaderModule.js";import{ShaderTechnique as a}from"../webgl-engine/core/shaderTechnique/ShaderTechnique.js";import{parameter as p}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueConfiguration.js";import{Default3D as c}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import{Program as m}from"../webgl-engine/lib/Program.js";import{BlendFactor as d}from"../../webgl/enums.js";import{makePipelineState as u,simpleBlendingParams as g,defaultColorWriteParams as h}from"../../webgl/renderState.js";class b extends a{initializeProgram(e){const r=b.shader.get().build(this.configuration);return new m(e.rctx,r,c)}initializePipeline(){return u({blending:g(d.ONE,d.ONE_MINUS_SRC_ALPHA),colorWrite:h})}}b.shader=new l(t,(()=>import("../webgl-engine/core/shaderLibrary/raster/RasterColorizer.glsl.js")));class y extends i{constructor(){super(...arguments),this.colorizerType=r.Stretch,this.stretchType=o.Noop,this.tileBlendInput=n.LayerOnly,this.baseOpacityMode=s.One,this.applyColormap=!0}}e([p({count:r.COUNT})],y.prototype,"colorizerType",void 0),e([p({count:o.COUNT})],y.prototype,"stretchType",void 0),e([p({count:n.COUNT})],y.prototype,"tileBlendInput",void 0),e([p({count:s.COUNT})],y.prototype,"baseOpacityMode",void 0),e([p()],y.prototype,"applyColormap",void 0);export{b as RasterColorizerTechnique,y as RasterColorizerTechniqueConfiguration};
5
+ import{_ as e}from"../../../chunks/tslib.es6.js";import{RasterColorizerType as r,RasterColorizerStretchType as o}from"../../2d/engine/imagery/enums.js";import{BlendModeTechniqueConfiguration as i}from"./BlendModeTechniqueConfiguration.js";import{R as t}from"../../../chunks/RasterColorizer.glsl.js";import{TileBlendInput as n}from"../webgl-engine/core/shaderLibrary/terrain/TileBlendInput.js";import{a as s}from"../../../chunks/BlendLayers.glsl.js";import{ReloadableShaderModule as l}from"../webgl-engine/core/shaderTechnique/ReloadableShaderModule.js";import{ShaderTechnique as a}from"../webgl-engine/core/shaderTechnique/ShaderTechnique.js";import{parameter as p}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueConfiguration.js";import{Default3D as m}from"../webgl-engine/lib/DefaultVertexAttributeLocations.js";import{Program as c}from"../webgl-engine/lib/Program.js";import{BlendFactor as d}from"../../webgl/enums.js";import{makePipelineState as u,simpleBlendingParams as g,defaultColorWriteParams as h}from"../../webgl/renderState.js";class b extends a{initializeProgram(e){return new c(e.rctx,b.shader.get().build(this.configuration),m)}initializePipeline(){return u({blending:g(d.ONE,d.ONE_MINUS_SRC_ALPHA),colorWrite:h})}}b.shader=new l(t,(()=>import("../webgl-engine/core/shaderLibrary/raster/RasterColorizer.glsl.js")));class y extends i{constructor(){super(...arguments),this.colorizerType=r.Stretch,this.stretchType=o.Noop,this.tileBlendInput=n.LayerOnly,this.baseOpacityMode=s.One,this.applyColormap=!0}}e([p({count:r.COUNT})],y.prototype,"colorizerType",void 0),e([p({count:o.COUNT})],y.prototype,"stretchType",void 0),e([p({count:n.COUNT})],y.prototype,"tileBlendInput",void 0),e([p({count:s.COUNT})],y.prototype,"baseOpacityMode",void 0),e([p()],y.prototype,"applyColormap",void 0);export{b as RasterColorizerTechnique,y as RasterColorizerTechniqueConfiguration};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{clampFloat32 as A,NUMBER_MAX_FLOAT32 as g}from"../../../core/mathUtils.js";import{create as B}from"../../../geometry/support/aaBoundingRect.js";import{TilingScheme as Q}from"./TilingScheme.js";const o=!1,t=64,I=512,e=2.5,C=A(g/10),n=4,r=4,E=A=>A<4?3:r,s=B();Q.WebMercatorAuxiliarySphere.getExtent(0,0,0,s);const T=B([-180,-90,180,90]),a="Cannot extend surface to encompass all layers because it would result in too many root tiles.",u="Surface extent is too large for tile resolution at level 0.",H=8,V="data:image/png;base64,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";export{V as DEFAULT_TILE_BACKGROUND,r as ELEVATION_DESIRED_MAX_UPSCALING_DISTANCE,C as ELEVATION_NODATA_VALUE,T as GEOGRAPHIC_WORLD_EXTENT,H as GEOMETRY_VERTEX_STRIDE,e as MAX_MEMORY_LOD_BIAS,I as MAX_PATCH_TESSELATION,t as MAX_ROOT_TILES,n as PROGRESSIVE_LOADING_MODULO,o as TILE_LOADING_DEBUGLOG,a as TOO_MANY_ROOT_TILES_AFTER_CHANGE_ERROR,u as TOO_MANY_ROOT_TILES_FOR_LAYER_ERROR,s as WEBMERCATOR_WORLD_EXTENT,E as getElevationDesiredResolutionLevel};
5
+ import{clampFloat32 as A,NUMBER_MAX_FLOAT32 as g}from"../../../core/mathUtils.js";import{create as B}from"../../../geometry/support/aaBoundingRect.js";import{TilingScheme as t}from"./TilingScheme.js";const Q=!1,o=64,e=512,n=2.5,I=A(g/10),C=4,r=B();t.WebMercatorAuxiliarySphere.getExtent(0,0,0,r);const s=B([-180,-90,180,90]),E="Cannot extend surface to encompass all layers because it would result in too many root tiles.",a="Surface extent is too large for tile resolution at level 0.",T=8,c="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAA2JJREFUeNrs3d1O20AQgFFvRJInQLQBhHj/h0JVW34El1yQ2F73DVq3jTys55zrqUBbPrErZUSZ+vcOsto4AjK76Lqu1vr8+G3mPzjc3D/+eJj/Bcz/cd75R80fbu79BsAVCAQAAgABgABAACAAEAAIAAQAAgABQPOKfQAy83Ho+HnnHzXv49B4A4AAQAAgABAACAAEAAIAAYAAQAAgABAANM4+AKnZB4ifd/5R8/YB8AYAAYAAQAAgABAACAAEAAIAAYAAQAAgAGicfQBSsw8QP+/8o+btA+ANAAIAAYAAQAAgABAACAAEAAIAAYAAQADQOPsApGYfIH7e+UfN2wfAGwAEAAIAAYAAQAAgABAACAAEAAIAAXA201QdggAggH0AUrMPED8/jsPL03fns/y8fQC8AUAAIAAQAAgABAACAAGAAEAAIAAQAAgAGmcfgNTsA8TP2weImrcPgDcACAAEAAIAAYAAQAAgABAACAAEAAIAAUDj7AOQmn2A+Hn7AFHz9gHwBgABgABAACAAEAAIAAQAAgABgABgNS4cAf9pu9u3O1+m/n2aplKK/0j+TX86/tVP5+eZ3+729gFIfwWyDxA7bx8gat4+ANkJAAGAAEAAIAAQAAgABAACAAGAAEAAIABonn0AUrMPED9vHyBq3j4A3gAgABAACAAEAAIAAYAAQAAgABAA51VrdQgCAAHAsuwDkJp9gPj5vj+9vvx0PsvP2wfAGwAEAAIAAYAAQAAgABAACAAEAAIAAYAAoHH2AUjNPkD8vH2AqHn7AHgDgABAACAAEAAIAAQAAgABgABAACAAEAA0zj4AqdkHiJ+3DxA1bx8AbwAQACQ0DL0AyKuOowBwBYKUSikCIHUBAsAVCAQAAgABgABAALBy9gFIzT5A/Lx9gKj5y6trVyC8AUAAIAAQAAgAVq90Pg5N5gA2AsAVCAQAAgABgABAALB29gFIzT5A/Lx9gKj5q6+3rkB4A4AAQAAgABAACADWzB/IIHsCAsAVCARAlKlWhyAAEAAIABZjH4DU7APEz5+OH2+vT85n+fkvhztXILwBQAAgABAACAAEAGtWigBIHcBGALgCgQBAACAAyPMO9nHosxuHodZx5vB2t691HIdh/nx/Os7/Zsz/fvgXAAAA//8DAF1P1hM2ICMfAAAAAElFTkSuQmCC";let u=4;const H=A=>A<4?3:u,V={setElevationDesiredMaxUpscalingDistance(A){u=A}};export{c as DEFAULT_TILE_BACKGROUND,I as ELEVATION_NODATA_VALUE,s as GEOGRAPHIC_WORLD_EXTENT,T as GEOMETRY_VERTEX_STRIDE,n as MAX_MEMORY_LOD_BIAS,e as MAX_PATCH_TESSELATION,o as MAX_ROOT_TILES,C as PROGRESSIVE_LOADING_MODULO,Q as TILE_LOADING_DEBUGLOG,E as TOO_MANY_ROOT_TILES_AFTER_CHANGE_ERROR,a as TOO_MANY_ROOT_TILES_FOR_LAYER_ERROR,r as WEBMERCATOR_WORLD_EXTENT,H as getElevationDesiredResolutionLevel,V as test};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.25/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../Color.js";import i from"../../../core/Accessor.js";import{isSome as r,disposeMaybe as s,isNone as n}from"../../../core/maybe.js";import a from"../../../core/ObjectPool.js";import{property as o}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as l}from"../../../core/accessorSupport/decorators/subclass.js";import{I as d}from"../../../chunks/mat4f64.js";import{b as h,s as c,e as u}from"../../../chunks/vec3.js";import{Z as p,f as _,c as f}from"../../../chunks/vec3f64.js";import{Z as g,c as m}from"../../../chunks/vec4f64.js";import{create as T,set as b}from"../../../geometry/support/aaBoundingBox.js";import{BufferViewVec3f as R}from"../../../geometry/support/buffer/BufferView.js";import{ViewingMode as y}from"../../ViewingMode.js";import{TextureUpdate as A}from"./interfaces.js";import{LayerClass as O}from"./LayerClass.js";import{OverlaySource as v}from"./Overlay.js";import{overlayRenderOccludedFlag as P}from"./OverlayRenderer.js";import{clearCaches as x}from"./PatchGeometry.js";import{PatchRenderData as C}from"./PatchRenderData.js";import{RenderOrder as E}from"./RenderOrder.js";import{ScaleRangeQueries as D}from"./ScaleRangeQueries.js";import{ENABLE_TERRAIN_INTERNAL_CHECKS as q}from"./terrainUtils.js";import{TileRenderer as S}from"./TileRenderer.js";import{TileUpdate as N}from"./TileUpdate.js";import{IteratorPreorder as w,sortTiles as I,compareTiles as L}from"./tileUtils.js";import{componentMinimalSizeForIntersectionData as G,ComponentIntersectionData as j}from"../webgl-engine/collections/Component/ComponentIntersectionData.js";import{ShaderOutput as F}from"../webgl-engine/core/shaderLibrary/ShaderOutputOptions.js";import{OverlayMode as M}from"../webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{T as U}from"../../../chunks/Terrain.glsl.js";import{TileBlendInput as k}from"../webgl-engine/core/shaderLibrary/terrain/TileBlendInput.js";import{RenderRequestType as H}from"../webgl-engine/lib/basicInterfaces.js";import{createEmptyTexture as B}from"../webgl-engine/lib/glUtil3D.js";import{newIntersectorResult as V}from"../webgl-engine/lib/Intersector.js";import{IntersectorType as z,StoreResults as Q}from"../webgl-engine/lib/IntersectorInterfaces.js";import{RenderOccludedFlag as W}from"../webgl-engine/lib/Material.js";import{RenderPass as Y}from"../webgl-engine/lib/RenderPass.js";import{RenderSlot as X}from"../webgl-engine/lib/RenderSlot.js";import{getSettings as Z}from"../webgl-engine/lib/screenSizePerspectiveUtils.js";import{VertexAttribute as K}from"../webgl-engine/lib/VertexAttribute.js";import{TERRAIN_ID as J,getVerticalOffsetTerrain as $}from"../webgl-engine/lib/verticalOffsetUtils.js";import{DrawParameters as ee}from"../webgl-engine/materials/DrawParameters.js";import{intersectAabbInvDirBefore as te,intersectTriangles as ie}from"../webgl-engine/materials/internal/MaterialUtil.js";import{TerrainTechnique as re}from"../webgl-engine/shaders/TerrainTechnique.js";import{TerrainTechniqueConfiguration as se}from"../webgl-engine/shaders/TerrainTechniqueConfiguration.js";import{ClearBufferBit as ne,PrimitiveType as ae}from"../../webgl/enums.js";const oe=7,le=10,de=T(),he=m();let ce=class extends i{constructor(e){super(e),this.type=z.TERRAIN,this.isGround=!0,this._tileSize=256,this._techniqueConfiguration=new se,this._passParameters=new U,this._rctx=null,this._isTransparent=!1,this._scaleRangeQueries=new D,this._renderDataPool=new a(C),this._patchGroups=new Map,this._patchGroupsDirty=!0,this._tileIterator=new w,this._highestVisibleLODTile=null,this._visible=!0,this._opaque=!0,this._velvetOverground=!0,this._castShadows=!0,this._emptyTex=null,this._tileRenderer=null,this._stencilEnabledLayerExtents=[],this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0,this.needsHighlight=!1,this.renderOccludedFlags=W.Occlude}get _isGlobal(){return this._stage.viewingMode===y.Global}get shadingEnabled(){return this._techniqueConfiguration?.shading}initialize(){const e=[X.OPAQUE_TERRAIN,X.TRANSPARENT_TERRAIN,X.OCCLUDED_TERRAIN];this._stage.addRenderPlugin(e,this)}destroy(){this._stage.removeRenderPlugin(this),x()}get canRender(){return this._visible&&!!this._rootTiles&&!this.renderingDisabled}set renderingDisabled(e){this._set("renderingDisabled",!!e),this.setNeedsRender()}set opaque(e){this._opaque!==e&&(this._opaque=e,this.setNeedsRender())}get opaque(){return this._opaque&&!this._techniqueConfiguration.hasSlicePlane}get needsLinearDepth(){return this._overlayRenderer.hasWater}set isTransparent(e){this._isTransparent!==e&&(this._isTransparent=e,this.setNeedsRender())}get isTransparent(){return this._isTransparent}get renderPatchBorders(){return!!this._techniqueConfiguration.tileBorders}set renderPatchBorders(e){this._techniqueConfiguration.tileBorders!==e&&(this._techniqueConfiguration.tileBorders=e,this.setNeedsRender(),this.notifyChange("renderPatchBorders"))}get cullBackFaces(){return this._techniqueConfiguration.backfaceCullingEnabled}set cullBackFaces(e){this._techniqueConfiguration.backfaceCullingEnabled!==e&&(this._techniqueConfiguration.backfaceCullingEnabled=e,this.notifyChange("cullBackFaces"),this.setNeedsRender())}set renderOrder(e){this._set("renderOrder",e),this.setNeedsRender()}set velvetOverground(e){this._velvetOverground!==e&&(this._velvetOverground=e,this.setNeedsRender())}get layerUid(){return J}get slicePlaneEnabled(){return this._techniqueConfiguration.hasSlicePlane}set slicePlaneEnabled(e){this._techniqueConfiguration.hasSlicePlane!==e&&(this._techniqueConfiguration.hasSlicePlane=e,this.setNeedsRender())}set textureFadingEnabled(e){this._techniqueConfiguration.textureFadingEnabled!==e&&(this._techniqueConfiguration.textureFadingEnabled=e,this.setNeedsRender())}setDebugScreenSizePerspective(e){this._techniqueConfiguration.screenSizePerspective!==e&&(this._techniqueConfiguration.screenSizePerspective=e,this.setNeedsRender())}toggleShading(){this._techniqueConfiguration.shading=!this._techniqueConfiguration.shading,this.setNeedsRender()}setRootTiles(e){this._rootTiles=e,this.setNeedsRender()}setNeedsHighlight(e){this.needsHighlight=e,this.setNeedsRender()}setRenderOccludedOverlay(e){this.renderOccludedFlags=e?P:W.Occlude,this.setNeedsRender()}setStencilEnabledLayerExtents(e){this._stencilEnabledLayerExtents=e,this.setNeedsRender()}setTileSize(e){this._tileSize=e,r(this._tileRenderer)&&(this._tileRenderer.tileSize=e),this.setNeedsRender()}_prepareTileForLoading(e){e.renderData||(e.renderData=this._renderDataPool.acquire(),e.renderData.init(e),e.renderData.localOrigin=this._getLocalOriginOfTile(e))}loadTile(e){this._prepareTileForLoading(e),this.updateTileGeometry(e),this.updateTileTexture(e,N.TEXTURE_FADING)}queryVisibleLevelRange(e,t,i,r){this._scaleRangeQueries.queryVisibleLevelRange(e,t,i,r),this.setNeedsRender()}updateTileTexture(e,t){r(this._tileRenderer)&&(this._tileRenderer.updateTileTexture(e,t===N.TEXTURE_FADING?A.FADING:A.UNFADED),this.setNeedsRender(),e.resetPendingUpdate(t))}updateTileGeometryState(e){this._prepareTileForLoading(e),e.renderData.updateGeometryStateAndPrepareForGeometryGeneration(this.wireframe)}updateTileGeometry(e){for(const t of e.layerInfo[O.ELEVATION])t.pendingUpdates&=~N.GEOMETRY;e.resetPendingUpdate(N.GEOMETRY);e.renderData.updateGeometryIfChanged(this._rctx,this.wireframe)&&this.setNeedsRender()}unloadTile(e){const t=e.renderData;t&&(t.releaseGeometry(),this._renderDataPool.release(t),t.clear(),e.renderData=null,e.setMemoryDirty(),this.setNeedsRender())}_getLocalOriginOfTile(e){const t=le-oe,i=Math.max(0,Math.floor((e.level-t)/oe)*oe);if(this._isGlobal&&0===i)return p;for(;e.parent&&e.level>i;)e=e.parent;return e.centerAtSeaLevel}setVisibility(e){this._visible=e,this.setNeedsRender()}getStats(){return{numTilesRendered:this._numTilesRendered,numTilesCulled:this._numTilesCulled,numOriginsRendered:this._numOriginsRendered}}set wireframe(e){this._get("wireframe")!==e&&(this._set("wireframe",e),this._allTiles.forAll((e=>{e.isLoaded&&(this.updateTileGeometry(e),e.updateNeighborsAfterGeometryChange())})),this.setNeedsRender())}setNeedsRender(e=H.UPDATE){this._patchGroupsDirty=!0,this._context.requestRender(e)}initializeRenderContext(e){this._context=e,this._rctx=e.renderContext.rctx,this._techniqueRepository=e.shaderTechniqueRepository,this._tileRenderer=new S(this._rctx,this._tileSize,this._techniqueRepository),this.updateTileBackground(),this._emptyTex=B(this._rctx)}uninitializeRenderContext(){this._emptyTex=s(this._emptyTex),this._tileRenderer=s(this._tileRenderer)}intersect(e,t,i,s){if(!this._rootTiles||e.options.selectOpaqueTerrainOnly&&e.options.selectionMode&&!this._opaque)return;const a=_e,o=fe;h(a,s,i),c(o,1/a[0],1/a[1],1/a[2]);const l=e.results.min,p=e.results.max,_=e.results.ground,f=e.options.store===Q.MIN,g=!!e.results.ground.target,m=$(e.verticalOffset),T=e.tolerance;let y,A=f&&r(l.dist)?l.dist:1/0;const O=c=>{const g=c.renderData;if(!g?.vao)return;const O=g.geometryInfo;b(de,O.boundingBox);const v=g.localOrigin;r(m)&&(m.localOrigin=v,m.applyToAabb(de));const P=de;if(ge[0]=i[0]-v[0],ge[1]=i[1]-v[1],ge[2]=i[2]-v[2],!te(P,ge,o,T,A))return;const x=(e,t,i)=>{e.set(this.type,c,t,i,d),A=f&&r(l.dist)?l.dist:1/0},C=(o,d)=>{if(r(d)&&o>=0&&(e.options.backfacesTerrain||u(d,a)<0)&&(e.options.invisibleTerrain||!e.options.selectionMode||null==t||t(i,s,o))){if((null==_.dist||o<_.dist)&&x(_,o,d),e.options.isFiltered)return;e.options.store===Q.ALL&&(n(y)?(y=V(e.ray),x(y,o,d),e.results.all.push(y)):o<y.dist&&x(y,o,d)),(null==l.dist||o<l.dist)&&x(l,o,d),e.options.store!==Q.MIN&&(null==p.dist||o>p.dist)&&x(p,o,d)}},E=me;h(E,s,v);const D=O.indices,q=O.vertexAttributes,S={data:q.getField(K.POSITION,R).typedBuffer,size:3,stride:q.stride/4},N=O.indexCount/3;if(n(m)&&N>G){const e=c.renderData;n(e.intersectionData)&&(e.intersectionData=new j(D,0,N,S)),e.intersectionData.intersectRay({r0:ge,r1:E},C)}else ie(ge,E,0,N,D,S,null,m,C)},v=this._rootTiles;if(r(v)){(()=>{const t=this._tileIterator;t.reset(v);const s=e.options.invisibleTerrain;for(;!t.done;){const e=t.next();!(e.visible||s&&e.intersectsClippingArea)||!r(m)&&!e.intersectsRay(i,a,T,A)||g&&this._useStencilForTile(e)?t.skipSubtree():O(e)}})()}}prepareTechnique(e){if(e.bindParameters.slot===X.OCCLUDED_TERRAIN){if(0==(e.renderOccludedMask&P))return null}else{const t=this.opaque?X.OPAQUE_TERRAIN:X.TRANSPARENT_TERRAIN;if(e.bindParameters.slot!==t)return null}switch(e.pass){case Y.MATERIAL:{this._techniqueConfiguration.hasScreenSpaceReflections=e.bindParameters.ssr.enabled,this._techniqueConfiguration.hasCloudsReflections=r(e.bindParameters.clouds.data),this._techniqueConfiguration.receiveShadows=e.bindParameters.shadowMap.ready,this._techniqueConfiguration.receiveAmbientOcclusion=e.bindParameters.ssaoHelper.ready,this._techniqueConfiguration.overlayMode=this._overlayRenderer.isEmpty()?M.Disabled:this._overlayRenderer.hasWater?M.EnabledWithWater:M.Enabled;const t=e.bindParameters.slot===X.OCCLUDED_TERRAIN?v.Occluded:v.ColorAndWater;return this._updateTechnique(F.Color,t===v.Occluded)}case Y.MATERIAL_DEPTH_SHADOWMAP_ALL:case Y.MATERIAL_DEPTH_SHADOWMAP_DEFAULT:return this._castShadows&&1===e.bindParameters.lighting.globalFactor?(this._techniqueConfiguration.receiveShadows=this._techniqueConfiguration.receiveAmbientOcclusion=!1,this._updateTechnique(F.Shadow,!1)):null;case Y.MATERIAL_DEPTH:return this.isTransparent&&this._overlayRenderer.isEmpty()?null:(this._techniqueConfiguration.receiveShadows=this._techniqueConfiguration.receiveAmbientOcclusion=!1,this._updateTechnique(F.Depth,!1));case Y.MATERIAL_NORMAL:return this._techniqueConfiguration.receiveShadows=this._techniqueConfiguration.receiveAmbientOcclusion=!1,this._updateTechnique(F.Normal,!1);case Y.MATERIAL_HIGHLIGHT:return this.needsHighlight?(this._techniqueConfiguration.receiveShadows=this._techniqueConfiguration.receiveAmbientOcclusion=!1,this._updateTechnique(F.Highlight,!1)):null}return null}render(e,t){const i=e.pass,r=1===e.bindParameters.lighting.globalFactor;switch(this._updatePatchGroups(),t.useStencil=!1,i){case Y.MATERIAL:{const i=e.bindParameters.slot===X.OCCLUDED_TERRAIN?v.Occluded:v.ColorAndWater;this._renderMaterialPass(e,t,i);break}case Y.MATERIAL_DEPTH_SHADOWMAP_ALL:case Y.MATERIAL_DEPTH_SHADOWMAP_DEFAULT:this._castShadows&&r&&this._renderAuxiliaryPass(e,t,v.None);break;case Y.MATERIAL_DEPTH:this.isTransparent&&this._overlayRenderer.isEmpty()||this._renderAuxiliaryPass(e,t,v.None);break;case Y.MATERIAL_NORMAL:this._renderAuxiliaryPass(e,t,v.None);break;case Y.MATERIAL_HIGHLIGHT:this.needsHighlight&&(this._renderAuxiliaryPass(e,t,v.Highlight),e.rctx.clearSafe(ne.DEPTH_BUFFER_BIT))}this._scaleRangeQueries.hasPendingQueries()&&this.setNeedsRender()}_renderMaterialPass(e,t,i){const{rctx:r}=e;this._passParameters.overlaySource=i,r.bindTechnique(t,this._passParameters,e.bindParameters),this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0,this._scaleRangeQueries.prepareQueries(),this.opaque?this._renderPatchGroups(e,t,i):e.offscreenRenderingHelper.renderToTargets((()=>this._renderPatchGroups(e,t,i)),e.offscreenRenderingHelper.tmpColor,e.offscreenRenderingHelper.mainDepth,[0,0,0,0]),this._scaleRangeQueries.processQueries()}_renderAuxiliaryPass(e,t,i){const r=e.rctx;this._passParameters.overlaySource=i,r.bindTechnique(t,this._passParameters,e.bindParameters),this._renderPatchGroupsAuxiliary(e,t,i)}updateTileBackground(e=null){if(n(this._tileRenderer))return;const i=this._tileRenderer;let s=null;if(r(e)){const i=t.toUnitRGBA(e);s=_(i[0]||0,i[1]||0,i[2]||0)}i.setBackground(s),this._allTiles.forAll((e=>i.updateTileTexture(e,A.FADING))),this._techniqueConfiguration.tileBlendInput=i.backgroundIsGrid?k.GridComposite:r(i.backgroundColor)?k.ColorComposite:k.LayerOnly,this.setNeedsRender()}_updatePatchGroups(){if(this._patchGroupsDirty){if(this._highestVisibleLODTile=null,this._rebuildPatchGroups(),this.renderOrder!==E.NONE){const e=Array.from(this._patchGroups.values());e.forEach((e=>I(this.renderOrder,e))),e.sort(((e,t)=>L(e[0],t[0],this.renderOrder))),this._patchGroups=new Map(e.map((e=>[e[0].renderData.localOrigin,e])))}this._patchGroupsDirty=!1}}_rebuildPatchGroups(){const e=this._rootTiles;if(!n(e)){e[0]?.surface.checkAllTileWaterproofness(),this._patchGroups.clear();for(const t of e)this._rebuildPatchGroupsForRootTile(t)}}_rebuildPatchGroupsForRootTile(e){const t=this._tileIterator;for(t.resetOne(e);!t.done;){const e=t.next(),i=e.renderData;if(!i||e.visible)if(e.rendered){if(i){const r=this._patchGroups.get(i.localOrigin)||new Array;this._patchGroups.set(i.localOrigin,r),r.push(e),(!this._highestVisibleLODTile||e.vlevel>this._highestVisibleLODTile.vlevel)&&(this._highestVisibleLODTile=e),t.skipSubtree()}}else this._numTilesCulled++;else this._numTilesCulled++,t.skipSubtree()}}_useStencilForTile(e){for(const t of this._stencilEnabledLayerExtents)if(e.intersectsExtent(t))return!0;return!1}_renderPatchGroupsAuxiliary(e,t,i){const r=this._stencilEnabledLayerExtents.length>0;this._patchGroups.forEach((s=>{const n=s[0].renderData.localOrigin;t.program.bindDraw(new ee(n),e.bindParameters,this._passParameters);for(let a=0;a<s.length;a++)this._renderPatch(e,t,s[a],ae.TRIANGLES,r,i)})),e.rctx.bindVAO(null)}_renderPatchGroups(e,t,i){const s=e.rctx,a=e.bindParameters.camera,o=t.program;if(this._techniqueConfiguration.screenSizePerspective&&this.pointsOfInterest){const e=Z(this._stage.viewingMode,this._ellipsoidRadius),t=this.pointsOfInterest.centerOnSurfaceFrequent.distance;e.update({distance:t,fovY:a.fovY})}const l=this._stencilEnabledLayerExtents.length>0,d=i===v.Occluded;d&&(o.bindTexture("tex",this._emptyTex),o.setUniform1f("blend",1),o.setUniform4fv("texOffsetAndScale",g));const h=r(this._tileRenderer)&&r(this._tileRenderer.backgroundColor)?this._tileRenderer.backgroundColor:p;this._techniqueConfiguration.tileBlendInput===k.ColorComposite&&o.setUniform3fv("backgroundColor",h);const c=this.wireframe?ae.LINES:ae.TRIANGLES;this._techniqueConfiguration.textureFadingEnabled&&o.bindTexture("texNext",this._emptyTex),this._patchGroups.forEach((s=>{const a=s[0].renderData.localOrigin;t.program.bindDraw(new ee(a),e.bindParameters,this._passParameters),this._numOriginsRendered++;for(let h=0;h<s.length;h++){const a=s[h],u=a.renderData.textureReference;if(!n(u)){if(!d){this._scaleRangeQueries.scaleQueriesForTile(a),pe(a.renderData.geometryInfo.uvOffsetAndScale,u.offsetAndScale,he),o.setUniform4fv("texOffsetAndScale",he),o.bindTexture("tex",u.texture.texture);const e=a.renderData.textureFadeFactor,t=e<1?a.renderData.nextTextureReference:null;this._techniqueConfiguration.textureFadingEnabled&&r(t)&&e<1?(pe(a.renderData.geometryInfo.uvOffsetAndScale,t.offsetAndScale,he),o.setUniform1f("fadeFactor",e),o.setUniform4fv("nextTexOffsetAndScale",he),o.setUniform3fv("nextTexOpacities",t.opacities),o.bindTexture("texNext",t.texture.texture)):o.setUniform1f("fadeFactor",1),a.renderData.textureIsFading&&this.setNeedsRender(),o.setUniform3fv("textureOpacities",u.opacities)}this._renderPatch(e,t,a,c,l,i),a.renderOrder=this._numTilesRendered,this._numTilesRendered++}}})),s.bindVAO(null)}_renderPatch(e,t,i,r,s,a){const o=i.renderData,l=o.vao,d=l.indexBuffer;if(n(d))return void(q&&console.error("Rendered tile with no indices: ",i.lij," : ",o));const h=t.program;a!==v.None&&this._bindOverlayPatchData(h,o.overlay),s&&(t.useStencil=this._useStencilForTile(i),t.bindPipelineState(e.rctx,e.bindParameters.slot));const c=o.geometryInfo.indexCount;e.rctx.bindVAO(l),h.assertCompatibleVertexAttributeLocations(l),e.rctx.drawElements(r,c,d.indexType,0)}_bindOverlayPatchData(e,t){e.setUniform4fv("overlayTexOffset",t.offsets),e.setUniform4fv("overlayTexScale",t.scales)}_updateTechnique(e,t){return this._techniqueConfiguration.output=e,e===F.Color&&(this._techniqueConfiguration.atmosphere=this._isGlobal&&this._velvetOverground),this._techniqueConfiguration.renderOccluded=t,this._techniqueConfiguration.stencilEnabled=!1,this._shaderTechnique=this._techniqueRepository.releaseAndAcquire(re,this._techniqueConfiguration,this._shaderTechnique),this._shaderTechnique}get test(){return{tileRenderer:this._tileRenderer}}};e([o({constructOnly:!0})],ce.prototype,"_overlayRenderer",void 0),e([o({constructOnly:!0})],ce.prototype,"_stage",void 0),e([o({readOnly:!0})],ce.prototype,"_isGlobal",null),e([o({constructOnly:!0})],ce.prototype,"_allTiles",void 0),e([o({constructOnly:!0})],ce.prototype,"_ellipsoidRadius",void 0),e([o({value:!1})],ce.prototype,"renderingDisabled",null),e([o()],ce.prototype,"renderPatchBorders",null),e([o()],ce.prototype,"cullBackFaces",null),e([o({value:E.FRONT_TO_BACK})],ce.prototype,"renderOrder",null),e([o()],ce.prototype,"wireframe",null),ce=e([l("esri.views.3d.terrain.TerrainRenderer")],ce);const ue=ce;function pe(e,t,i){i[0]=e[0]*t[2]+t[0],i[1]=e[1]*t[3]+t[1],i[2]=e[2]*t[2],i[3]=e[3]*t[3]}const _e=f(),fe=f(),ge=f(),me=f();export{ue as default};
5
+ import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../Color.js";import i from"../../../core/Accessor.js";import{isSome as r,disposeMaybe as s,isNone as n}from"../../../core/maybe.js";import o from"../../../core/ObjectPool.js";import{property as a}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as l}from"../../../core/accessorSupport/decorators/subclass.js";import{I as h}from"../../../chunks/mat4f64.js";import{b as d,s as c,e as u}from"../../../chunks/vec3.js";import{Z as p,f as g,c as _}from"../../../chunks/vec3f64.js";import{Z as f,c as m}from"../../../chunks/vec4f64.js";import{create as b,set as T}from"../../../geometry/support/aaBoundingBox.js";import{BufferViewVec3f as y}from"../../../geometry/support/buffer/BufferView.js";import{ViewingMode as R}from"../../ViewingMode.js";import{TextureUpdate as O}from"./interfaces.js";import{LayerClass as v}from"./LayerClass.js";import{OverlaySource as x}from"./Overlay.js";import{overlayRenderOccludedFlag as C}from"./OverlayRenderer.js";import{clearCaches as D}from"./PatchGeometry.js";import{PatchRenderData as P}from"./PatchRenderData.js";import{RenderOrder as q}from"./RenderOrder.js";import{ScaleRangeQueries as S}from"./ScaleRangeQueries.js";import{ENABLE_TERRAIN_INTERNAL_CHECKS as E}from"./terrainUtils.js";import{TileRenderer as A}from"./TileRenderer.js";import{TileUpdate as w}from"./TileUpdate.js";import{IteratorPreorder as N,sortTiles as G,compareTiles as j}from"./tileUtils.js";import{componentMinimalSizeForIntersectionData as I,ComponentIntersectionData as F}from"../webgl-engine/collections/Component/ComponentIntersectionData.js";import{ShaderOutput as L}from"../webgl-engine/core/shaderLibrary/ShaderOutput.js";import{OverlayMode as U}from"../webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{T as k}from"../../../chunks/Terrain.glsl.js";import{TileBlendInput as B}from"../webgl-engine/core/shaderLibrary/terrain/TileBlendInput.js";import{RenderRequestType as M}from"../webgl-engine/lib/basicInterfaces.js";import{createEmptyTexture as H}from"../webgl-engine/lib/glUtil3D.js";import{newIntersectorResult as V}from"../webgl-engine/lib/Intersector.js";import{IntersectorType as z,StoreResults as Q}from"../webgl-engine/lib/IntersectorInterfaces.js";import{RenderOccludedFlag as W}from"../webgl-engine/lib/Material.js";import{RenderSlot as Y}from"../webgl-engine/lib/RenderSlot.js";import{getSettings as X}from"../webgl-engine/lib/screenSizePerspectiveUtils.js";import{VertexAttribute as Z}from"../webgl-engine/lib/VertexAttribute.js";import{TERRAIN_ID as K,getVerticalOffsetTerrain as J}from"../webgl-engine/lib/verticalOffsetUtils.js";import{DrawParameters as $}from"../webgl-engine/materials/DrawParameters.js";import{intersectAabbInvDirBefore as ee,intersectTriangles as te}from"../webgl-engine/materials/internal/MaterialUtil.js";import{TerrainTechnique as ie}from"../webgl-engine/shaders/TerrainTechnique.js";import{TerrainTechniqueConfiguration as re}from"../webgl-engine/shaders/TerrainTechniqueConfiguration.js";import{ClearBufferBit as se,PrimitiveType as ne}from"../../webgl/enums.js";const oe=7,ae=10,le=b(),he=m();let de=class extends i{constructor(e){super(e),this.type=z.TERRAIN,this.isGround=!0,this._tileSize=256,this._techniqueConfiguration=new re,this._passParameters=new k,this._rctx=null,this._isTransparent=!1,this._scaleRangeQueries=new S,this._renderDataPool=new o(P),this._patchGroups=new Map,this._patchGroupsDirty=!0,this._patchSortingDirty=!0,this._tileIterator=new N,this._highestVisibleLODTile=null,this._visible=!0,this._opaque=!0,this._velvetOverground=!0,this._castShadows=!0,this._emptyTex=null,this._tileRenderer=null,this._stencilEnabledLayerExtents=new Array,this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0,this.needsHighlight=!1,this.renderOccludedFlags=W.Occlude}get _isGlobal(){return this._stage.viewingMode===R.Global}get shadingEnabled(){return this._techniqueConfiguration?.shading}initialize(){const e=[Y.OPAQUE_TERRAIN,Y.TRANSPARENT_TERRAIN,Y.OCCLUDED_TERRAIN];this._stage.addRenderPlugin(e,this)}destroy(){this._stage.removeRenderPlugin(this),D()}get canRender(){return this._visible&&!!this._rootTiles&&!this.renderingDisabled}set renderingDisabled(e){this._set("renderingDisabled",!!e),this.setDirty()}set opaque(e){this._opaque!==e&&(this._opaque=e,this.setNeedsRender())}get opaque(){return this._opaque&&!this._techniqueConfiguration.hasSlicePlane}get needsLinearDepth(){return this._overlayRenderer.hasWater}set isTransparent(e){this._isTransparent!==e&&(this._isTransparent=e,this.setNeedsRender())}get isTransparent(){return this._isTransparent}get renderPatchBorders(){return!!this._techniqueConfiguration.tileBorders}set renderPatchBorders(e){this._techniqueConfiguration.tileBorders!==e&&(this._techniqueConfiguration.tileBorders=e,this.setNeedsRender(),this.notifyChange("renderPatchBorders"))}get cullBackFaces(){return this._techniqueConfiguration.backfaceCullingEnabled}set cullBackFaces(e){this._techniqueConfiguration.backfaceCullingEnabled!==e&&(this._techniqueConfiguration.backfaceCullingEnabled=e,this.notifyChange("cullBackFaces"),this.setNeedsRender())}set renderOrder(e){this._set("renderOrder",e),this._setSortingDirty()}set velvetOverground(e){this._velvetOverground!==e&&(this._velvetOverground=e,this.setNeedsRender())}get layerUid(){return K}get slicePlaneEnabled(){return this._techniqueConfiguration.hasSlicePlane}set slicePlaneEnabled(e){this._techniqueConfiguration.hasSlicePlane!==e&&(this._techniqueConfiguration.hasSlicePlane=e,this.setNeedsRender())}set textureFadingEnabled(e){this._techniqueConfiguration.textureFadingEnabled!==e&&(this._techniqueConfiguration.textureFadingEnabled=e,this.setNeedsRender())}setDebugScreenSizePerspective(e){this._techniqueConfiguration.screenSizePerspective!==e&&(this._techniqueConfiguration.screenSizePerspective=e,this.setNeedsRender())}toggleShading(){this._techniqueConfiguration.shading=!this._techniqueConfiguration.shading,this.setNeedsRender()}setRootTiles(e){this._rootTiles=e,this.setDirty()}setNeedsHighlight(e){this.needsHighlight=e,this.setNeedsRender()}setRenderOccludedOverlay(e){this.renderOccludedFlags=e?C:W.Occlude,this.setNeedsRender()}setStencilEnabledLayerExtents(e){this._stencilEnabledLayerExtents=e,this._setSortingDirty()}setTileSize(e){this._tileSize=e,r(this._tileRenderer)&&(this._tileRenderer.tileSize=e),this.setDirty()}_prepareTileForLoading(e){e.renderData||(e.renderData=this._renderDataPool.acquire(),e.renderData.init(e),e.renderData.localOrigin=this._getLocalOriginOfTile(e))}loadTile(e){this._prepareTileForLoading(e),this.updateTileGeometry(e),this.updateTileTexture(e,w.TEXTURE_FADING)}queryVisibleLevelRange(e,t,i,r){this._scaleRangeQueries.queryVisibleLevelRange(e,t,i,r),this.setNeedsRender()}updateTileTexture(e,t){r(this._tileRenderer)&&(this._tileRenderer.updateTileTexture(e,t===w.TEXTURE_FADING?O.FADING:O.UNFADED),this.setNeedsRender(),e.resetPendingUpdate(t))}updateTileGeometryState(e){this._prepareTileForLoading(e),e.renderData.updateGeometryStateAndPrepareForGeometryGeneration(this.wireframe)}updateTileGeometry(e){for(const t of e.layerInfo[v.ELEVATION])t.pendingUpdates&=~w.GEOMETRY;e.resetPendingUpdate(w.GEOMETRY);e.renderData.updateGeometryIfChanged(this._rctx,this.wireframe)&&this.setDirty()}unloadTile(e){const t=e.renderData;t&&(t.releaseGeometry(),this._renderDataPool.release(t),t.clear(),e.renderData=null,e.setMemoryDirty(),this.setDirty())}_getLocalOriginOfTile(e){const t=ae-oe,i=Math.max(0,Math.floor((e.level-t)/oe)*oe);if(this._isGlobal&&0===i)return p;for(;e.parent&&e.level>i;)e=e.parent;return e.centerAtSeaLevel}setVisibility(e){this._visible=e,this.setDirty()}getStats(){return{numTilesRendered:this._numTilesRendered,numTilesCulled:this._numTilesCulled,numOriginsRendered:this._numOriginsRendered}}set wireframe(e){this._get("wireframe")!==e&&(this._set("wireframe",e),this._allTiles.forAll((e=>{e.isLoaded&&(this.updateTileGeometry(e),e.updateNeighborsAfterGeometryChange())})),this.setNeedsRender())}setDirty(e=M.UPDATE){this._patchGroupsDirty=!0,this._context.requestRender(e)}_setSortingDirty(e=M.UPDATE){this._patchSortingDirty=!0,this._context.requestRender(e)}setNeedsRender(e=M.UPDATE){this._context.requestRender(e)}initializeRenderContext(e){this._context=e,this._rctx=e.renderContext.rctx,this._techniqueRepository=e.shaderTechniqueRepository,this._tileRenderer=new A(this._rctx,this._tileSize,this._techniqueRepository),this.updateTileBackground(),this._emptyTex=H(this._rctx)}uninitializeRenderContext(){this._emptyTex=s(this._emptyTex),this._tileRenderer=s(this._tileRenderer)}intersect(e,t,i,s){if(!this._rootTiles||e.options.selectOpaqueTerrainOnly&&e.options.selectionMode&&!this._opaque)return;const o=pe,a=ge;d(o,s,i),c(a,1/o[0],1/o[1],1/o[2]);const l=e.results.min,p=e.results.max,g=e.results.ground,_=e.options.store===Q.MIN,f=!!e.results.ground.target,m=J(e.verticalOffset),b=e.tolerance;let R,O=_&&r(l.dist)?l.dist:1/0;const v=c=>{const f=c.renderData;if(!f?.vao)return;const v=f.geometryInfo;T(le,v.boundingBox);const x=f.localOrigin;r(m)&&(m.localOrigin=x,m.applyToAabb(le));const C=le;if(_e[0]=i[0]-x[0],_e[1]=i[1]-x[1],_e[2]=i[2]-x[2],!ee(C,_e,a,b,O))return;const D=(e,t,i)=>{e.set(this.type,c,t,i,h),O=_&&r(l.dist)?l.dist:1/0},P=(a,h)=>{if(r(h)&&a>=0&&(e.options.backfacesTerrain||u(h,o)<0)&&(e.options.invisibleTerrain||!e.options.selectionMode||null==t||t(i,s,a))){if((null==g.dist||a<g.dist)&&D(g,a,h),e.options.isFiltered)return;e.options.store===Q.ALL&&(n(R)?(R=V(e.ray),D(R,a,h),e.results.all.push(R)):a<R.dist&&D(R,a,h)),(null==l.dist||a<l.dist)&&D(l,a,h),e.options.store!==Q.MIN&&(null==p.dist||a>p.dist)&&D(p,a,h)}},q=fe;d(q,s,x);const S=v.indices,E=v.vertexAttributes,A={data:E.getField(Z.POSITION,y).typedBuffer,size:3,stride:E.stride/4},w=v.indexCount/3;if(n(m)&&w>I){const e=c.renderData;n(e.intersectionData)&&(e.intersectionData=new F(S,0,w,A)),e.intersectionData.intersectRay({r0:_e,r1:q},P)}else te(_e,q,0,w,S,A,null,m,P)},x=this._rootTiles;if(r(x)){(()=>{const t=this._tileIterator;t.reset(x);const s=e.options.invisibleTerrain;for(;!t.done;){const e=t.next();!(e.visible||s&&e.intersectsClippingArea)||!r(m)&&!e.intersectsRay(i,o,b,O)||f&&this._useStencilForTile(e)?t.skipSubtree():v(e)}})()}}prepareTechnique(e){if(e.bindParameters.slot===Y.OCCLUDED_TERRAIN){if(0==(e.renderOccludedMask&C))return null}else{const t=this.opaque?Y.OPAQUE_TERRAIN:Y.TRANSPARENT_TERRAIN;if(e.bindParameters.slot!==t)return null}switch(e.output){case L.Color:{this._techniqueConfiguration.hasScreenSpaceReflections=e.bindParameters.ssr.enabled,this._techniqueConfiguration.hasCloudsReflections=r(e.bindParameters.clouds.data),this._techniqueConfiguration.receiveShadows=e.bindParameters.shadowMap.ready,this._techniqueConfiguration.receiveAmbientOcclusion=e.bindParameters.ssaoHelper.ready,this._techniqueConfiguration.overlayMode=this._overlayRenderer.isEmpty()?U.Disabled:this._overlayRenderer.hasWater?U.EnabledWithWater:U.Enabled;const t=e.bindParameters.slot===Y.OCCLUDED_TERRAIN?x.Occluded:x.ColorAndWater;return this._updateTechnique(L.Color,t===x.Occluded)}case L.Shadow:case L.ShadowExludeHighlight:return this._castShadows&&1===e.bindParameters.lighting.globalFactor?(this._techniqueConfiguration.receiveShadows=this._techniqueConfiguration.receiveAmbientOcclusion=!1,this._updateTechnique(L.Shadow,!1)):null;case L.Depth:return this.isTransparent&&this._overlayRenderer.isEmpty()?null:(this._techniqueConfiguration.receiveShadows=this._techniqueConfiguration.receiveAmbientOcclusion=!1,this._updateTechnique(L.Depth,!1));case L.Normal:return this._techniqueConfiguration.receiveShadows=this._techniqueConfiguration.receiveAmbientOcclusion=!1,this._updateTechnique(L.Normal,!1);case L.Highlight:return this.needsHighlight?(this._techniqueConfiguration.receiveShadows=this._techniqueConfiguration.receiveAmbientOcclusion=!1,this._updateTechnique(L.Highlight,!1)):null}return null}render(e,t){const i=1===e.bindParameters.lighting.globalFactor;switch(this._updatePatchGroups(),t.useStencil=!1,e.output){case L.Color:{const i=e.bindParameters.slot===Y.OCCLUDED_TERRAIN?x.Occluded:x.ColorAndWater;this._renderMaterialPass(e,t,i);break}case L.Shadow:case L.ShadowExludeHighlight:this._castShadows&&i&&this._renderAuxiliaryPass(e,t,x.None);break;case L.Depth:this.isTransparent&&this._overlayRenderer.isEmpty()||this._renderAuxiliaryPass(e,t,x.None);break;case L.Normal:this._renderAuxiliaryPass(e,t,x.None);break;case L.Highlight:this.needsHighlight&&(this._renderAuxiliaryPass(e,t,x.Highlight),e.rctx.clearSafe(se.DEPTH_BUFFER_BIT))}this._scaleRangeQueries.hasPendingQueries()&&this.setNeedsRender()}_renderMaterialPass(e,t,i){const{rctx:r}=e;this._passParameters.overlaySource=i,r.bindTechnique(t,this._passParameters,e.bindParameters),this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0,this._scaleRangeQueries.prepareQueries(),this.opaque?this._renderPatchGroups(e,t,i):e.offscreenRenderingHelper.renderToTargets((()=>this._renderPatchGroups(e,t,i)),e.offscreenRenderingHelper.tmpColor,e.offscreenRenderingHelper.mainDepth,[0,0,0,0]),this._scaleRangeQueries.processQueries()}_renderAuxiliaryPass(e,t,i){const r=e.rctx;this._passParameters.overlaySource=i,r.bindTechnique(t,this._passParameters,e.bindParameters),this._renderPatchGroupsAuxiliary(e,t,i)}updateTileBackground(e=null){if(n(this._tileRenderer))return;const i=this._tileRenderer;let s=null;if(r(e)){const i=t.toUnitRGBA(e);s=g(i[0]||0,i[1]||0,i[2]||0)}i.setBackground(s),this._allTiles.forAll((e=>i.updateTileTexture(e,O.FADING))),this._techniqueConfiguration.tileBlendInput=i.backgroundIsGrid?B.GridComposite:r(i.backgroundColor)?B.ColorComposite:B.LayerOnly,this.setNeedsRender()}_updatePatchGroups(){if(this._patchGroupsDirty&&(this._highestVisibleLODTile=null,this._rebuildPatchGroups(),this._patchGroupsDirty=!1,this._patchSortingDirty=!0),this._patchSortingDirty&&this.renderOrder!==q.NONE){const e=Array.from(this._patchGroups.values());e.forEach((e=>G(this.renderOrder,e,this._stencilEnabledLayerExtents))),e.sort(((e,t)=>j(e[0],t[0],this.renderOrder))),this._patchGroups=new Map(e.map((e=>[e[0].renderData.localOrigin,e]))),this._patchSortingDirty=!1}}_rebuildPatchGroups(){const e=this._rootTiles;if(!n(e)){e[0]?.surface.checkAllTileWaterproofness(),this._patchGroups.clear();for(const t of e)this._rebuildPatchGroupsForRootTile(t)}}_rebuildPatchGroupsForRootTile(e){const t=this._tileIterator;for(t.resetOne(e);!t.done;){const e=t.next(),i=e.renderData;if(!i||e.visible)if(e.rendered){if(i){const r=this._patchGroups.get(i.localOrigin)||new Array;this._patchGroups.set(i.localOrigin,r),r.push(e),(!this._highestVisibleLODTile||e.vlevel>this._highestVisibleLODTile.vlevel)&&(this._highestVisibleLODTile=e),t.skipSubtree()}}else this._numTilesCulled++;else this._numTilesCulled++,t.skipSubtree()}}_useStencilForTile(e){for(const t of this._stencilEnabledLayerExtents)if(e.intersectsExtent(t))return!0;return!1}_renderPatchGroupsAuxiliary(e,t,i){const r=this._stencilEnabledLayerExtents.length>0;this._patchGroups.forEach((s=>{const n=s[0].renderData.localOrigin;t.program.bindDraw(new $(n),e.bindParameters,this._passParameters);for(let o=0;o<s.length;o++)this._renderPatch(e,t,s[o],ne.TRIANGLES,r,i)})),e.rctx.bindVAO(null)}_renderPatchGroups(e,t,i){const s=e.rctx,o=e.bindParameters.camera,a=t.program;if(this._techniqueConfiguration.screenSizePerspective&&this.pointsOfInterest){const e=X(this._stage.viewingMode,this._ellipsoidRadius),t=this.pointsOfInterest.centerOnSurfaceFrequent.distance;e.update({distance:t,fovY:o.fovY})}const l=this._stencilEnabledLayerExtents.length>0,h=i===x.Occluded;h&&(a.bindTexture("tex",this._emptyTex),a.setUniform1f("blend",1),a.setUniform4fv("texOffsetAndScale",f));const d=r(this._tileRenderer)&&r(this._tileRenderer.backgroundColor)?this._tileRenderer.backgroundColor:p;this._techniqueConfiguration.tileBlendInput===B.ColorComposite&&a.setUniform3fv("backgroundColor",d);const c=this.wireframe?ne.LINES:ne.TRIANGLES;this._techniqueConfiguration.textureFadingEnabled&&a.bindTexture("texNext",this._emptyTex),this._patchGroups.forEach((s=>{const o=s[0].renderData.localOrigin;t.program.bindDraw(new $(o),e.bindParameters,this._passParameters),this._numOriginsRendered++;for(let d=0;d<s.length;d++){const o=s[d],u=o.renderData.textureReference;if(!n(u)){if(!h){this._scaleRangeQueries.scaleQueriesForTile(o),ue(o.renderData.geometryInfo.uvOffsetAndScale,u.offsetAndScale,he),a.setUniform4fv("texOffsetAndScale",he),a.bindTexture("tex",u.texture.texture);const e=o.renderData.textureFadeFactor,t=e<1?o.renderData.nextTextureReference:null;this._techniqueConfiguration.textureFadingEnabled&&r(t)&&e<1?(ue(o.renderData.geometryInfo.uvOffsetAndScale,t.offsetAndScale,he),a.setUniform1f("fadeFactor",e),a.setUniform4fv("nextTexOffsetAndScale",he),a.setUniform3fv("nextTexOpacities",t.opacities),a.bindTexture("texNext",t.texture.texture)):a.setUniform1f("fadeFactor",1),o.renderData.textureIsFading&&this.setNeedsRender(),a.setUniform3fv("textureOpacities",u.opacities)}this._renderPatch(e,t,o,c,l,i),o.renderOrder=this._numTilesRendered,this._numTilesRendered++}}})),s.bindVAO(null)}_renderPatch(e,t,i,r,s,o){const a=i.renderData,l=a.vao,h=l.indexBuffer;if(n(h))return void(E&&console.error("Rendered tile with no indices: ",i.lij," : ",a));const d=t.program;o!==x.None&&this._bindOverlayPatchData(d,a.overlay),s&&(t.useStencil=this._useStencilForTile(i),t.bindPipelineState(e.rctx,e.bindParameters.slot));const c=a.geometryInfo.indexCount;e.rctx.bindVAO(l),d.assertCompatibleVertexAttributeLocations(l),e.rctx.drawElements(r,c,h.indexType,0)}_bindOverlayPatchData(e,t){e.setUniform4fv("overlayTexOffset",t.offsets),e.setUniform4fv("overlayTexScale",t.scales)}_updateTechnique(e,t){return this._techniqueConfiguration.output=e,e===L.Color&&(this._techniqueConfiguration.atmosphere=this._isGlobal&&this._velvetOverground),this._techniqueConfiguration.renderOccluded=t,this._techniqueConfiguration.stencilEnabled=!1,this._shaderTechnique=this._techniqueRepository.releaseAndAcquire(ie,this._techniqueConfiguration,this._shaderTechnique),this._shaderTechnique}get test(){return{tileRenderer:this._tileRenderer}}};e([a({constructOnly:!0})],de.prototype,"_overlayRenderer",void 0),e([a({constructOnly:!0})],de.prototype,"_stage",void 0),e([a({readOnly:!0})],de.prototype,"_isGlobal",null),e([a({constructOnly:!0})],de.prototype,"_allTiles",void 0),e([a({constructOnly:!0})],de.prototype,"_ellipsoidRadius",void 0),e([a({value:!1})],de.prototype,"renderingDisabled",null),e([a()],de.prototype,"renderPatchBorders",null),e([a()],de.prototype,"cullBackFaces",null),e([a({value:q.FRONT_TO_BACK})],de.prototype,"renderOrder",null),e([a()],de.prototype,"wireframe",null),de=e([l("esri.views.3d.terrain.TerrainRenderer")],de);const ce=de;function ue(e,t,i){i[0]=e[0]*t[2]+t[0],i[1]=e[1]*t[3]+t[1],i[2]=e[2]*t[2],i[3]=e[3]*t[3]}const pe=_(),ge=_(),_e=_(),fe=_();export{ce as default};