@arcgis/core 6.0.0-next.37 → 6.0.0-next.39

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 (248) hide show
  1. package/analysis/DimensionAnalysis.js +1 -1
  2. package/analysis/DimensionSimpleStyle.js +1 -1
  3. package/analysis/LengthDimension.js +1 -1
  4. package/analysis/LineOfSightAnalysis.js +1 -1
  5. package/analysis/LineOfSightAnalysisTarget.js +1 -1
  6. package/analysis/Viewshed.js +1 -1
  7. package/analysis/ViewshedAnalysis.js +1 -1
  8. package/assets/esri/core/workers/RemoteClient.js +1 -1
  9. package/assets/esri/core/workers/chunks/02940f7ddaf98e69521e.js +1 -0
  10. package/assets/esri/core/workers/chunks/{9503eedfdda55fc5adab.js → 091ec4fe83038f3558f4.js} +1 -1
  11. package/assets/esri/core/workers/chunks/{322b22a5d54e404bebd5.js → 0c893837f67829757df7.js} +1 -1
  12. package/assets/esri/core/workers/chunks/123541f79be7adff0818.js +1 -0
  13. package/assets/esri/core/workers/chunks/{155861fbd0e5fc2db80c.js → 1a91443970d64a59521d.js} +1 -1
  14. package/assets/esri/core/workers/chunks/1e37337f47f45d6d8005.js +1 -0
  15. package/assets/esri/core/workers/chunks/{4e5405134d079bdf9b7a.js → 1f76f6dcdae9f55389cb.js} +1 -1
  16. package/assets/esri/core/workers/chunks/396299c22994c502e41c.js +1 -0
  17. package/assets/esri/core/workers/chunks/{03daf6f235c6edef6268.js → 398ec098fffe6abceedd.js} +1 -1
  18. package/assets/esri/core/workers/chunks/3b32a24488b3068f0cb7.js +1 -0
  19. package/assets/esri/core/workers/chunks/3b5e9e0b180dc10491ec.js +1 -0
  20. package/assets/esri/core/workers/chunks/46edd6c9ed6701e6b975.js +1 -0
  21. package/assets/esri/core/workers/chunks/{8b0d5551978ab0aac0d1.js → 520f499d79fa71f262c7.js} +1 -1
  22. package/assets/esri/core/workers/chunks/5473409fee59db80f87d.js +1 -0
  23. package/assets/esri/core/workers/chunks/553a8bf5bc5c56d1bcaf.js +1 -0
  24. package/assets/esri/core/workers/chunks/{2211ff0a1f1ae8100231.js → 585ae43c7bcb86a26762.js} +1 -1
  25. package/assets/esri/core/workers/chunks/58716a3a6106a1b0fb9d.js +1 -0
  26. package/assets/esri/core/workers/chunks/{aa6ee2aa4ff6e6d41efb.js → 5882f349f3771868e67f.js} +1 -1
  27. package/assets/esri/core/workers/chunks/{1b17f5f720f6cf3f6d73.js → 5be386b3af867b19ff39.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{ea81f9d71b0842a4be26.js → 5e48898cebb6dbaf09b5.js} +1 -1
  29. package/assets/esri/core/workers/chunks/{139e753d95cfc9470e74.js → 6a65fc1a2931230fe994.js} +1 -1
  30. package/assets/esri/core/workers/chunks/{3e406043a374ee17475b.js → 6f2e7e663229b223b4df.js} +1 -1
  31. package/assets/esri/core/workers/chunks/76e80381fa6d1e084796.js +1 -0
  32. package/assets/esri/core/workers/chunks/{3b380e64566a6cce59e2.js → 7e0ed6e8f7b77e43f628.js} +1 -1
  33. package/assets/esri/core/workers/chunks/8c3779de09291170497f.js +1 -0
  34. package/assets/esri/core/workers/chunks/8e391b5b82429f39791e.js +1 -0
  35. package/assets/esri/core/workers/chunks/947f3a1cad976bba9738.js +1 -0
  36. package/assets/esri/core/workers/chunks/{59a1b637d2c107504a04.js → 966204d6dedc8149c3e9.js} +1 -1
  37. package/assets/esri/core/workers/chunks/ac107079342251a984dd.js +1 -0
  38. package/assets/esri/core/workers/chunks/{572aec57593a08b8045b.js → b15a8d4322f3b7819d2f.js} +1 -1
  39. package/assets/esri/core/workers/chunks/{552c36b40e5a5ec117fb.js → b472c0a21ae29e653f7d.js} +1 -1
  40. package/assets/esri/core/workers/chunks/bdd76a0b6c14e7fb6984.js +1 -0
  41. package/assets/esri/core/workers/chunks/{f372f4eb5527238c46f5.js → c31830ee897d5a7f2582.js} +1 -1
  42. package/assets/esri/core/workers/chunks/c48d97c38e821be17dc5.js +1 -0
  43. package/assets/esri/core/workers/chunks/{0a508e25ec05363e1f04.js → c7ad62f54d2abe1d17a0.js} +1 -1
  44. package/assets/esri/core/workers/chunks/cb1642ea8b66231cbfb5.js +1 -0
  45. package/assets/esri/core/workers/chunks/cf21b217b13770757cb8.js +1 -0
  46. package/assets/esri/core/workers/chunks/d42a4f47843e075c56a8.js +1 -0
  47. package/assets/esri/core/workers/chunks/e2430bc3a1edeb5c3266.js +1 -0
  48. package/assets/esri/core/workers/chunks/e9457a67befc61e11095.js +1 -0
  49. package/assets/esri/core/workers/chunks/f06ef153e106b26a6748.js +1 -0
  50. package/assets/esri/core/workers/chunks/faae3c43048b42341536.js +1 -0
  51. package/assets/esri/core/workers/chunks/fd967a9f3cf0e2890dbb.js +1 -0
  52. package/chunks/h.js +2 -0
  53. package/chunks/projector.js +2 -0
  54. package/config.js +1 -1
  55. package/core/sanitizerUtils.js +1 -1
  56. package/form/FormTemplate.js +1 -1
  57. package/form/elements/Element.js +1 -1
  58. package/form/elements/FieldElement.js +1 -1
  59. package/geometry/ellipsoidUtils.js +4 -4
  60. package/geometry/support/frustumPlanes.js +1 -1
  61. package/geometry/support/plane.js +1 -1
  62. package/geometry/support/triangle.js +1 -1
  63. package/kernel.js +1 -1
  64. package/layers/GraphicsLayer.js +1 -1
  65. package/layers/Lyr3DWasmPerSceneView.js +1 -1
  66. package/layers/geospatialPDF/geospatialPDFParserUtils.js +1 -1
  67. package/layers/geospatialPDF/support/datumUtils.js +2 -0
  68. package/layers/geospatialPDF/support/ellipsoidUtils.js +2 -0
  69. package/layers/geospatialPDF/support/geographicProjectionUtils.js +2 -0
  70. package/layers/geospatialPDF/support/parameterUtils.js +2 -0
  71. package/layers/geospatialPDF/support/projectedProjectionUtils.js +3 -0
  72. package/layers/geospatialPDF/support/projectionToSpatialReference.js +2 -0
  73. package/layers/geospatialPDF/support/statePlaneUtils.js +2 -0
  74. package/layers/geospatialPDF/support/unitUtils.js +2 -0
  75. package/layers/geospatialPDF/support/validateProjectionUtils.js +2 -0
  76. package/layers/graphics/sources/support/clientSideDefaults.js +2 -2
  77. package/layers/knowledgeGraph/KnowledgeGraphSublayer.js +1 -1
  78. package/layers/ogc/ogcFeatureUtils.js +1 -1
  79. package/layers/save/imageryUtils.js +1 -1
  80. package/layers/save/mediaLayerUtils.js +1 -1
  81. package/layers/save/streamLayerUtils.js +1 -1
  82. package/layers/support/ControlPoint.js +1 -1
  83. package/layers/support/ControlPointsGeoreference.js +1 -1
  84. package/layers/support/DimensionalDefinition.js +1 -1
  85. package/layers/support/LabelClass.js +1 -1
  86. package/layers/support/LabelExpressionInfo.js +1 -1
  87. package/layers/support/MediaElementBase.js +1 -1
  88. package/layers/support/MosaicRule.js +1 -1
  89. package/layers/support/MultidimensionalSubset.js +1 -1
  90. package/layers/support/RasterBandInfo.js +1 -1
  91. package/layers/support/RasterFunction.js +1 -1
  92. package/layers/support/RasterFunctionTemplate.js +1 -1
  93. package/layers/support/RasterInfo.js +1 -1
  94. package/layers/support/RasterSensorInfo.js +1 -1
  95. package/layers/support/RasterStorageInfo.js +1 -1
  96. package/layers/support/VideoElement.js +1 -1
  97. package/layers/support/layersLoader.js +1 -1
  98. package/legend/ActiveLayerInfo.d.ts +5 -1
  99. package/legend/ActiveLayerInfo.js +1 -1
  100. package/libs/maquette-advanced-projector/projector.js +1 -1
  101. package/linkChart/LayoutSettings.js +1 -1
  102. package/linkChart/RootedLayoutSettings.js +1 -1
  103. package/package.json +2 -2
  104. package/renderers/FlowRenderer.js +1 -1
  105. package/renderers/RasterColormapRenderer.js +1 -1
  106. package/renderers/RasterShadedReliefRenderer.js +1 -1
  107. package/renderers/RasterStretchRenderer.js +1 -1
  108. package/renderers/VectorFieldRenderer.js +1 -1
  109. package/renderers/support/ColormapInfo.js +1 -1
  110. package/renderers/support/RasterPresetRenderer.js +1 -1
  111. package/renderers/support/rasterRendererHelper.js +1 -1
  112. package/rest/knowledgeGraph/GraphApplyEdits.js +1 -1
  113. package/rest/support/BaseImageMeasureParameters.js +1 -1
  114. package/rest/support/BaseImageMeasureResult.js +1 -1
  115. package/rest/support/FindImagesParameters.js +1 -1
  116. package/rest/support/FindImagesResult.js +1 -1
  117. package/rest/support/ImageAngleParameters.js +1 -1
  118. package/rest/support/ImageAngleResult.js +1 -1
  119. package/rest/support/ImageAreaParameters.js +1 -1
  120. package/rest/support/ImageAreaResult.js +1 -1
  121. package/rest/support/ImageBoundaryParameters.js +1 -1
  122. package/rest/support/ImageBoundaryResult.js +1 -1
  123. package/rest/support/ImageDistanceParameters.js +1 -1
  124. package/rest/support/ImageDistanceResult.js +1 -1
  125. package/rest/support/ImageGPSInfoParameters.js +1 -1
  126. package/rest/support/ImageGPSInfoResult.js +1 -1
  127. package/rest/support/ImageHeightParameters.js +1 -1
  128. package/rest/support/ImageHeightResult.js +1 -1
  129. package/rest/support/ImageHistogramParameters.js +1 -1
  130. package/rest/support/ImageIdentifyParameters.js +1 -1
  131. package/rest/support/ImageIdentifyResult.js +1 -1
  132. package/rest/support/ImagePixelLocationParameters.js +1 -1
  133. package/rest/support/ImagePixelLocationResult.js +1 -1
  134. package/rest/support/ImagePointParameters.js +1 -1
  135. package/rest/support/ImagePointResult.js +1 -1
  136. package/rest/support/ImageSample.js +1 -1
  137. package/rest/support/ImageSampleParameters.js +1 -1
  138. package/rest/support/ImageSampleResult.js +1 -1
  139. package/rest/support/ImageToMapMultirayParameters.js +1 -1
  140. package/rest/support/ImageToMapParameters.js +1 -1
  141. package/rest/support/ImageUrlParameters.js +1 -1
  142. package/rest/support/ImageUrlResult.js +1 -1
  143. package/rest/support/ImageVolumeParameters.js +1 -1
  144. package/rest/support/ImageVolumeResult.js +1 -1
  145. package/rest/support/MapToImageParameters.js +1 -1
  146. package/rest/support/MeasureAreaFromImageResult.js +1 -1
  147. package/rest/support/MeasureFromImageParameters.js +1 -1
  148. package/rest/support/MeasureLengthFromImageResult.js +1 -1
  149. package/symbols/support/cimSymbolUtils.js +1 -1
  150. package/symbols/support/renderUtils.js +1 -1
  151. package/views/2d/ViewState.d.ts +3 -3
  152. package/views/2d/ViewState.js +1 -1
  153. package/views/2d/ViewStateManager.js +1 -1
  154. package/views/2d/engine/vectorTiles/decluttering/CollisionJob.js +1 -1
  155. package/views/2d/engine/vectorTiles/style/geoJSONVectorTileUtils.js +1 -1
  156. package/views/2d/engine/webgl/collisions/LabelMetric.js +1 -1
  157. package/views/2d/engine/webgl/collisions/LabelStore.js +1 -1
  158. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AAnimatedShader.js +1 -1
  159. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerShader.js +1 -1
  160. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  161. package/views/2d/engine/webgl/shaderGraph/techniques/markers/MarkerShader.js +1 -1
  162. package/views/2d/engine/webgl/shaderGraph/techniques/shaders/AFeatureShader.js +1 -1
  163. package/views/2d/engine/webgl/shaderGraph/techniques/shaders/FillShader.js +1 -1
  164. package/views/2d/engine/webgl/shaderGraph/techniques/shaders/LineShader.js +1 -1
  165. package/views/2d/engine/webgl/shaderGraph/techniques/shaders/OutlineFillShader.js +1 -1
  166. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextShader.js +1 -1
  167. package/views/2d/engine/webgl/util/IntervalMatcher.js +1 -1
  168. package/views/3d/FocusAreasView.js +1 -1
  169. package/views/3d/GroundView3D.js +1 -1
  170. package/views/3d/layers/GaussianSplatLayerView3D.js +1 -1
  171. package/views/3d/layers/graphics/Graphics3DSymbol.js +1 -1
  172. package/views/3d/layers/i3s/I3SBinaryReader.js +1 -1
  173. package/views/3d/state/ConstraintsManager.js +1 -1
  174. package/views/3d/state/ViewState.js +1 -1
  175. package/views/3d/state/ViewStateManager.js +1 -1
  176. package/views/3d/support/gaussianSplatting/GaussianSplatFadeHelper.js +1 -1
  177. package/views/3d/support/gaussianSplatting/GaussianTileLifecycle.js +2 -0
  178. package/views/3d/terrain/OverlayManager.js +1 -1
  179. package/views/3d/terrain/OverlayRenderer.js +1 -1
  180. package/views/3d/terrain/TerrainRenderer.js +1 -1
  181. package/views/3d/terrain/TerrainSurface.js +1 -1
  182. package/views/3d/terrain/Tile.js +1 -1
  183. package/views/3d/terrain/tileUtils.js +1 -1
  184. package/views/3d/webgl-engine/core/shaderLibrary/shading/readShadow.glsl.js +1 -1
  185. package/views/3d/webgl-engine/effects/WeatherFader.js +1 -1
  186. package/views/3d/webgl-engine/effects/debug/RenderNodeVisualizerNode.js +19 -9
  187. package/views/3d/webgl-engine/effects/highlight/Highlight.js +1 -1
  188. package/views/3d/webgl-engine/lib/GeometryUtil.js +1 -1
  189. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  190. package/views/3d/webgl-engine/lib/geometryDataUtils.js +1 -1
  191. package/views/3d/webgl-engine/lib/screenPolygonOverlapUtils.js +1 -1
  192. package/views/3d/webgl-engine/lib/screenPolygonTriangleIntersections.js +1 -1
  193. package/views/3d/webgl-engine/materials/HUDMaterial.js +1 -1
  194. package/views/3d/webgl-engine/materials/HUDMaterialBaseInstance.js +1 -1
  195. package/views/3d/webgl-engine/materials/LineMarkerMaterial.js +1 -1
  196. package/views/3d/webgl-engine/materials/internal/bufferWriterUtils.js +1 -1
  197. package/views/3d/webgl-engine/materials/internal/lineMarkerBufferUtils.js +1 -1
  198. package/views/3d/webgl-engine/shaders/DefaultMaterialTechnique.js +1 -1
  199. package/views/3d/webgl-engine/shaders/HUDMaterialTechnique.js +1 -1
  200. package/views/3d/webgl-engine/shaders/LineMarkerTechnique.js +1 -1
  201. package/views/3d/webgl-engine/shaders/hudMaterialLayouts.js +2 -0
  202. package/views/3d/webgl-engine/shaders/lineMarkerLayouts.js +2 -0
  203. package/views/overlay/LineOverlayItem.js +1 -1
  204. package/views/overlay/TextOverlayItem.js +1 -1
  205. package/views/overlay/ViewOverlay.js +1 -1
  206. package/views/support/GroundElevationSampler.js +1 -1
  207. package/views/support/HighlightOptions.d.ts +2 -2
  208. package/views/support/HighlightOptions.js +1 -1
  209. package/views/webgl/Util.js +1 -1
  210. package/views/webgl/textureUtils.js +1 -1
  211. package/widgets/FeatureTable/Grid/Grid.js +1 -1
  212. package/widgets/Legend/styles/support/univariateUtils.js +1 -1
  213. package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
  214. package/widgets/OrientedImageryViewer.js +1 -1
  215. package/assets/esri/core/workers/chunks/01f55004d64309f8538b.js +0 -1
  216. package/assets/esri/core/workers/chunks/0d99bfb75dcb9fa29080.js +0 -1
  217. package/assets/esri/core/workers/chunks/144bad0c2415c345736a.js +0 -1
  218. package/assets/esri/core/workers/chunks/165ca7a97b611c8f26c4.js +0 -1
  219. package/assets/esri/core/workers/chunks/1989410a618865f02dec.js +0 -1
  220. package/assets/esri/core/workers/chunks/2f9072563194026e320e.js +0 -1
  221. package/assets/esri/core/workers/chunks/338d800d4efcc91cead1.js +0 -1
  222. package/assets/esri/core/workers/chunks/3415531224f8494d79ca.js +0 -1
  223. package/assets/esri/core/workers/chunks/59a88dd53f8806bbec06.js +0 -1
  224. package/assets/esri/core/workers/chunks/5aeb5e18514644fe2cf9.js +0 -1
  225. package/assets/esri/core/workers/chunks/6edc13a426e00bb93a9b.js +0 -1
  226. package/assets/esri/core/workers/chunks/7862abd24fb5c3b12e6b.js +0 -1
  227. package/assets/esri/core/workers/chunks/8a3dfe997712dc2ddead.js +0 -1
  228. package/assets/esri/core/workers/chunks/8f82a0a6747f673a2a7e.js +0 -1
  229. package/assets/esri/core/workers/chunks/934e1f2153e6fad6ed23.js +0 -1
  230. package/assets/esri/core/workers/chunks/b25a05c58b0fd0f6ac60.js +0 -1
  231. package/assets/esri/core/workers/chunks/c7adb7b77721c75891f4.js +0 -1
  232. package/assets/esri/core/workers/chunks/cd55cad81accf51d2989.js +0 -1
  233. package/assets/esri/core/workers/chunks/ce324dde6d7daea33638.js +0 -1
  234. package/assets/esri/core/workers/chunks/d3412518a7b518860fbb.js +0 -1
  235. package/assets/esri/core/workers/chunks/dac69c0047488fdf986d.js +0 -1
  236. package/assets/esri/core/workers/chunks/dba5f44c4e4a3f075df2.js +0 -1
  237. package/assets/esri/core/workers/chunks/e67ea2f1714e5abeae44.js +0 -1
  238. package/assets/esri/core/workers/chunks/eed4b90494a54f8b337b.js +0 -1
  239. package/assets/esri/core/workers/chunks/f10c883eb26330e3421c.js +0 -1
  240. package/layers/geospatialPDF/projectionToWKTUtils.js +0 -3
  241. package/libs/maquette/cache.js +0 -2
  242. package/libs/maquette/dom.js +0 -2
  243. package/libs/maquette/h.js +0 -2
  244. package/libs/maquette/index.js +0 -2
  245. package/libs/maquette/mapping.js +0 -2
  246. package/libs/maquette/projection.js +0 -2
  247. package/libs/maquette/projector.js +0 -2
  248. package/libs/maquette/utilities/window-performance-projector-logger.js +0 -2
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import e from"../../../../core/Error.js";import{clone as t}from"../../../../core/lang.js";import n from"../../../../core/Logger.js";import{isInt16Array as r,minInt16 as i,isInt32Array as a,minInt32 as o,nativeArrayMaxSize as s}from"../../../../core/typedArrayUtil.js";import{compactUCharArray as c}from"../../../../geometry/support/UCharArray.js";import{compactUShortArray as l}from"../../../../geometry/support/UShortArray.js";import{decodeRGB as u,decodeIntensity as d}from"./LEPCC.js";const f=()=>n.getLogger(`esri.views.3d.layers.i3s.I3SBinaryReader`);function p(t,n,r){let i=``,a=0;for(;a<r;){let o=t[n+a];if(o<128)i+=String.fromCharCode(o),a++;else if(o>=192&&o<224){if(a+1>=r)throw new e(`utf8-decode-error`,`UTF-8 Decode failed. Two byte character was truncated.`);let s=t[n+a+1],c=(o&31)<<6|s&63;i+=String.fromCharCode(c),a+=2}else if(o>=224&&o<240){if(a+2>=r)throw new e(`utf8-decode-error`,`UTF-8 Decode failed. Multi byte character was truncated.`);let s=t[n+a+1],c=t[n+a+2],l=(o&15)<<12|(s&63)<<6|c&63;i+=String.fromCharCode(l),a+=3}else if(o>=240&&o<248){if(a+3>=r)throw new e(`utf8-decode-error`,`UTF-8 Decode failed. Multi byte character was truncated.`);let s=t[n+a+1],c=t[n+a+2],l=t[n+a+3],u=(o&7)<<18|(s&63)<<12|(c&63)<<6|l&63;if(u>=65536){let e=(u-65536>>10)+55296,t=(u&1023)+56320;i+=String.fromCharCode(e,t)}else i+=String.fromCharCode(u);a+=4}else throw new e(`utf8-decode-error`,`UTF-8 Decode failed. Invalid multi byte sequence.`)}return i}function m(e,t){let n={byteOffset:0,byteCount:0,fields:Object.create(null)},r=0;for(let i=0;i<t.length;i++){let a=t[i],o=a.valueType||a.type,s=j[o];n.fields[a.property]=s(e,r),r+=A[o].BYTES_PER_ELEMENT}return n.byteCount=r,n}function h(e,t,n){return g(e,t,n).map(e=>{let t=e?Date.parse(e):null;return t!=null&&!Number.isNaN(t)?t:null})}function g(t,n,r){let i=[],a,o=0,s=0;for(;s<t;s+=1){if(a=n[s],a>0){if(i.push(p(r,o,a-1)),r[o+a-1]!==0)throw new e(`string-array-error`,`Invalid string array: missing null termination.`)}else i.push(null);o+=a}return i}function _(e,t){let n=A[t.valueType];return new n(e,t.byteOffset,t.count*t.valuesPerElement)}function v(e,t){let n=_(e,t);if(n.length>=s)return n;let r=[];return n.forEach((e,t)=>r.push(y(n,t))),r}function y(e,t){if(!e)return null;let n=e[t];return r(e)?n===i?null:n:a(e)?n===o?null:n:n===n?n:null}function b(e,t){return new Uint8Array(e,t.byteOffset,t.byteCount)}function x(n,r,i){let a=r.header==null?{byteOffset:0,byteCount:0,fields:{count:i}}:m(n,r.header),o={header:a,byteOffset:a.byteCount,byteCount:0,entries:Object.create(null)},s=a.byteCount;for(let n=0;n<r.ordering.length;n++){let i=r.ordering[n],c=t(r[i]);if(c.count=a.fields.count??0,c.valueType===`String`){if(c.byteOffset=s,c.byteCount=a.fields[i+`ByteCount`],c.encoding!==`UTF-8`)throw new e(`unsupported-encoding`,`Unsupported String encoding.`,{encoding:c.encoding});if(c.timeEncoding&&c.timeEncoding!==`ECMA_ISO8601`)throw new e(`unsupported-time-encoding`,`Unsupported time encoding.`,{timeEncoding:c.timeEncoding})}else if(M(c.valueType)){let e=N(c.valueType);s+=s%e===0?0:e-s%e,c.byteOffset=s,c.byteCount=e*c.valuesPerElement*c.count}else throw new e(`unsupported-value-type`,`Unsupported binary valueType`,{valueType:c.valueType});s+=c.byteCount??0,o.entries[i]=c}return o.byteCount=s-o.byteOffset,o}function S(t,n,r){if(n!==t&&f().error(`Invalid ${r} buffer size\n expected: ${t}, actual: ${n})`),n<t)throw new e(`buffer-too-small`,`Binary buffer is too small`,{expectedSize:t,actualSize:n})}function C(e){return{isDraco:!1,isLegacy:!1,color:e.color!=null,normal:e.normal!=null,uv0:e.uv0!=null,uvRegion:e.uvRegion!=null,featureIndex:e.faceRange!=null&&e.featureId!=null}}function w(e,t){let n=m(e,t&&t.header),r=n.byteCount,i={isDraco:!1,header:n,byteOffset:n.byteCount,byteCount:0,vertexAttributes:{}},a=n.fields,o=a.vertexCount==null?a.count:a.vertexCount;for(let e of t.ordering){if(!t.vertexAttributes[e])continue;let n={...t.vertexAttributes[e],byteOffset:r,count:o},a=O[e]||`_`+e;i.vertexAttributes[a]=n,r+=N(n.valueType)*n.valuesPerElement*o}let s=a.faceCount;if(t.faces&&s){i.faces={};for(let e of t.ordering){if(!t.faces[e])continue;let n={...t.faces[e],byteOffset:r,count:s};i.faces[e]=n,r+=N(n.valueType)*n.valuesPerElement*s}}let c=a.featureCount;if(t.featureAttributes&&t.featureAttributeOrder&&c){i.featureAttributes={};for(let e of t.featureAttributeOrder){if(!t.featureAttributes[e])continue;let n={...t.featureAttributes[e],byteOffset:r,count:c};i.featureAttributes[e]=n;let a=n.valueType===`UInt64`?8:N(n.valueType);r+=a*n.valuesPerElement*c}}return S(r,e.byteLength,`geometry`),i.byteCount=r-i.byteOffset,i}function T(e,t){return e&&e.compressedAttributes&&e.compressedAttributes.encoding===`draco`?D(e.compressedAttributes.attributes):e?C(e):E(t)}function E(e){let t={isDraco:!1,isLegacy:!0,color:!1,normal:!1,uv0:!1,uvRegion:!1,featureIndex:!1};for(let n of e.ordering)if(e.vertexAttributes[n])switch(n){case`position`:break;case`normal`:t.normal=!0;break;case`color`:t.color=!0;break;case`uv0`:t.uv0=!0;break;case`region`:t.uvRegion=!0}return e.featureAttributes&&e.featureAttributeOrder&&(t.featureIndex=!0),t}function D(e){let t={isDraco:!0,isLegacy:!1,color:!1,normal:!1,uv0:!1,uvRegion:!1,featureIndex:!1};for(let n of e)switch(n){case`position`:break;case`normal`:t.normal=!0;break;case`uv0`:t.uv0=!0;break;case`color`:t.color=!0;break;case`uv-region`:t.uvRegion=!0;break;case`feature-index`:t.featureIndex=!0}return t}const O={position:`position`,normal:`normal`,color:`color`,uv0:`uv0`,region:`uvRegion`};function k(t,n,r,i=!1){if(t.encoding===`lepcc-rgb`)return i?u(n):c(u(n));if(t.encoding===`lepcc-intensity`)return i?d(n):l(d(n));if(t.encoding!=null&&t.encoding!==``)throw new e(`unknown-attribute-storage-info-encoding`,`Unknown Attribute Storage Info Encoding`);t[`attributeByteCounts `]&&!t.attributeByteCounts&&(f().warn(`Warning: Trailing space in 'attributeByteCounts '.`),t.attributeByteCounts=t[`attributeByteCounts `]),t.ordering[0]===`ObjectIds`&&t.hasOwnProperty(`objectIds`)&&(f().warn(`Warning: Case error in objectIds`),t.ordering[0]=`objectIds`);let a=x(n,t,r);S(a.byteOffset+a.byteCount,n.byteLength,`attribute`);let o=a.entries.attributeValues||a.entries.objectIds;if(o){if(o.valueType===`String`){let e=a.entries.attributeByteCounts,t=_(n,e),r=b(n,o);return o.timeEncoding?h(e.count,t,r):g(e.count,t,r)}return i?_(n,o):v(n,o)}throw new e(`bad-attribute-storage-info`,`Bad attributeStorageInfo specification.`)}const A={Float32:Float32Array,Float64:Float64Array,UInt8:Uint8Array,Int8:Int8Array,UInt16:Uint16Array,Int16:Int16Array,UInt32:Uint32Array,Int32:Int32Array},j={Float32:(e,t)=>new DataView(e,0).getFloat32(t,!0),Float64:(e,t)=>new DataView(e,0).getFloat64(t,!0),UInt8:(e,t)=>new DataView(e,0).getUint8(t),Int8:(e,t)=>new DataView(e,0).getInt8(t),UInt16:(e,t)=>new DataView(e,0).getUint16(t,!0),Int16:(e,t)=>new DataView(e,0).getInt16(t,!0),UInt32:(e,t)=>new DataView(e,0).getUint32(t,!0),Int32:(e,t)=>new DataView(e,0).getInt32(t,!0)};function M(e){return A.hasOwnProperty(e)}function N(e){return M(e)?A[e].BYTES_PER_ELEMENT:0}export{x as createAttributeDataIndex,T as createGeometryDescriptor,D as createGeometryDescriptorForDraco,C as createGeometryDescriptorFromDefinition,E as createGeometryDescriptorFromSchema,w as createGeometryIndexFromSchema,b as createRawView,_ as createTypedView,N as getBytesPerValue,y as getCachedAttributeValue,M as isValueType,k as readBinaryAttribute,h as readDateStringArray,m as readHeader,g as readStringArray,j as valueType2ArrayBufferReader,A as valueType2TypedArrayClassMap};
2
+ import e from"../../../../core/Error.js";import{clone as t}from"../../../../core/lang.js";import n from"../../../../core/Logger.js";import{nativeArrayMaxSize as r,isInt16Array as i,minInt16 as a,isInt32Array as o,minInt32 as s}from"../../../../core/typedArrayUtil.js";import{compactUCharArray as c}from"../../../../geometry/support/UCharArray.js";import{compactUShortArray as l}from"../../../../geometry/support/UShortArray.js";import{decodeRGB as u,decodeIntensity as d}from"./LEPCC.js";const f=()=>n.getLogger(`esri.views.3d.layers.i3s.I3SBinaryReader`);function p(t,n,r){let i=``,a=0;for(;a<r;){let o=t[n+a];if(o<128)i+=String.fromCharCode(o),a++;else if(o>=192&&o<224){if(a+1>=r)throw new e(`utf8-decode-error`,`UTF-8 Decode failed. Two byte character was truncated.`);let s=t[n+a+1],c=(o&31)<<6|s&63;i+=String.fromCharCode(c),a+=2}else if(o>=224&&o<240){if(a+2>=r)throw new e(`utf8-decode-error`,`UTF-8 Decode failed. Multi byte character was truncated.`);let s=t[n+a+1],c=t[n+a+2],l=(o&15)<<12|(s&63)<<6|c&63;i+=String.fromCharCode(l),a+=3}else if(o>=240&&o<248){if(a+3>=r)throw new e(`utf8-decode-error`,`UTF-8 Decode failed. Multi byte character was truncated.`);let s=t[n+a+1],c=t[n+a+2],l=t[n+a+3],u=(o&7)<<18|(s&63)<<12|(c&63)<<6|l&63;if(u>=65536){let e=(u-65536>>10)+55296,t=(u&1023)+56320;i+=String.fromCharCode(e,t)}else i+=String.fromCharCode(u);a+=4}else throw new e(`utf8-decode-error`,`UTF-8 Decode failed. Invalid multi byte sequence.`)}return i}function m(e,t){let n={byteOffset:0,byteCount:0,fields:Object.create(null)},r=0;for(let i=0;i<t.length;i++){let a=t[i],o=a.valueType||a.type,s=j[o];n.fields[a.property]=s(e,r),r+=A[o].BYTES_PER_ELEMENT}return n.byteCount=r,n}function h(e,t,n){return g(e,t,n).map(e=>{let t=e?Date.parse(e):null;return t!=null&&!Number.isNaN(t)?t:null})}function g(t,n,r){let i=[],a,o=0,s=0;for(;s<t;s+=1){if(a=n[s],a>0){if(i.push(p(r,o,a-1)),r[o+a-1]!==0)throw new e(`string-array-error`,`Invalid string array: missing null termination.`)}else i.push(null);o+=a}return i}function _(e,t){let n=A[t.valueType];return new n(e,t.byteOffset,t.count*t.valuesPerElement)}function v(e,t){let n=_(e,t);if(n.length>=r)return n;let i=[];return n.forEach((e,t)=>i.push(y(n,t))),i}function y(e,t){if(!e)return null;let n=e[t];return i(e)?n===a?null:n:o(e)?n===s?null:n:n===n?n:null}function b(e,t){return new Uint8Array(e,t.byteOffset,t.byteCount)}function x(n,r,i){let a=r.header==null?{byteOffset:0,byteCount:0,fields:{count:i}}:m(n,r.header),o={header:a,byteOffset:a.byteCount,byteCount:0,entries:Object.create(null)},s=a.byteCount;for(let n=0;n<r.ordering.length;n++){let i=r.ordering[n],c=t(r[i]);if(c.count=a.fields.count??0,c.valueType===`String`){if(c.byteOffset=s,c.byteCount=a.fields[i+`ByteCount`],c.encoding!==`UTF-8`)throw new e(`unsupported-encoding`,`Unsupported String encoding.`,{encoding:c.encoding});if(c.timeEncoding&&c.timeEncoding!==`ECMA_ISO8601`)throw new e(`unsupported-time-encoding`,`Unsupported time encoding.`,{timeEncoding:c.timeEncoding})}else if(M(c.valueType)){let e=N(c.valueType);s+=s%e===0?0:e-s%e,c.byteOffset=s,c.byteCount=e*c.valuesPerElement*c.count}else throw new e(`unsupported-value-type`,`Unsupported binary valueType`,{valueType:c.valueType});s+=c.byteCount??0,o.entries[i]=c}return o.byteCount=s-o.byteOffset,o}function S(t,n,r){if(n!==t&&f().error(`Invalid ${r} buffer size\n expected: ${t}, actual: ${n})`),n<t)throw new e(`buffer-too-small`,`Binary buffer is too small`,{expectedSize:t,actualSize:n})}function C(e){return{isDraco:!1,isLegacy:!1,color:e.color!=null,normal:e.normal!=null,uv0:e.uv0!=null,uvRegion:e.uvRegion!=null,featureIndex:e.faceRange!=null&&e.featureId!=null}}function w(e,t){let n=m(e,t&&t.header),r=n.byteCount,i={isDraco:!1,header:n,byteOffset:n.byteCount,byteCount:0,vertexAttributes:{}},a=n.fields,o=a.vertexCount==null?a.count:a.vertexCount;for(let e of t.ordering){if(!t.vertexAttributes[e])continue;let n={...t.vertexAttributes[e],byteOffset:r,count:o},a=O[e]||`_`+e;i.vertexAttributes[a]=n,r+=N(n.valueType)*n.valuesPerElement*o}let s=a.faceCount;if(t.faces&&s){i.faces={};for(let e of t.ordering){if(!t.faces[e])continue;let n={...t.faces[e],byteOffset:r,count:s};i.faces[e]=n,r+=N(n.valueType)*n.valuesPerElement*s}}let c=a.featureCount;if(t.featureAttributes&&t.featureAttributeOrder&&c){i.featureAttributes={};for(let e of t.featureAttributeOrder){if(!t.featureAttributes[e])continue;let n={...t.featureAttributes[e],byteOffset:r,count:c};i.featureAttributes[e]=n;let a=n.valueType===`UInt64`?8:N(n.valueType);r+=a*n.valuesPerElement*c}}return S(r,e.byteLength,`geometry`),i.byteCount=r-i.byteOffset,i}function T(e,t){return e&&e.compressedAttributes&&e.compressedAttributes.encoding===`draco`?D(e.compressedAttributes.attributes):e?C(e):E(t)}function E(e){let t={isDraco:!1,isLegacy:!0,color:!1,normal:!1,uv0:!1,uvRegion:!1,featureIndex:!1};for(let n of e.ordering)if(e.vertexAttributes[n])switch(n){case`position`:break;case`normal`:t.normal=!0;break;case`color`:t.color=!0;break;case`uv0`:t.uv0=!0;break;case`region`:t.uvRegion=!0}return e.featureAttributes&&e.featureAttributeOrder&&(t.featureIndex=!0),t}function D(e){let t={isDraco:!0,isLegacy:!1,color:!1,normal:!1,uv0:!1,uvRegion:!1,featureIndex:!1};for(let n of e)switch(n){case`position`:break;case`normal`:t.normal=!0;break;case`uv0`:t.uv0=!0;break;case`color`:t.color=!0;break;case`uv-region`:t.uvRegion=!0;break;case`feature-index`:t.featureIndex=!0}return t}const O={position:`position`,normal:`normal`,color:`color`,uv0:`uv0`,region:`uvRegion`};function k(t,n,r,i=!1){if(t.encoding===`lepcc-rgb`)return i?u(n):c(u(n));if(t.encoding===`lepcc-intensity`)return i?d(n):l(d(n));if(t.encoding!=null&&t.encoding!==``)throw new e(`unknown-attribute-storage-info-encoding`,`Unknown Attribute Storage Info Encoding`);t[`attributeByteCounts `]&&!t.attributeByteCounts&&(f().warn(`Warning: Trailing space in 'attributeByteCounts '.`),t.attributeByteCounts=t[`attributeByteCounts `]),t.ordering[0]===`ObjectIds`&&t.hasOwnProperty(`objectIds`)&&(f().warn(`Warning: Case error in objectIds`),t.ordering[0]=`objectIds`);let a=x(n,t,r);S(a.byteOffset+a.byteCount,n.byteLength,`attribute`);let o=a.entries.attributeValues||a.entries.objectIds;if(o){if(o.valueType===`String`){let e=a.entries.attributeByteCounts,t=_(n,e),r=b(n,o);return o.timeEncoding?h(e.count,t,r):g(e.count,t,r)}return i?_(n,o):v(n,o)}throw new e(`bad-attribute-storage-info`,`Bad attributeStorageInfo specification.`)}const A={Float32:Float32Array,Float64:Float64Array,UInt8:Uint8Array,Int8:Int8Array,UInt16:Uint16Array,Int16:Int16Array,UInt32:Uint32Array,Int32:Int32Array},j={Float32:(e,t)=>new DataView(e,0).getFloat32(t,!0),Float64:(e,t)=>new DataView(e,0).getFloat64(t,!0),UInt8:(e,t)=>new DataView(e,0).getUint8(t),Int8:(e,t)=>new DataView(e,0).getInt8(t),UInt16:(e,t)=>new DataView(e,0).getUint16(t,!0),Int16:(e,t)=>new DataView(e,0).getInt16(t,!0),UInt32:(e,t)=>new DataView(e,0).getUint32(t,!0),Int32:(e,t)=>new DataView(e,0).getInt32(t,!0)};function M(e){return A.hasOwnProperty(e)}function N(e){return M(e)?A[e].BYTES_PER_ELEMENT:0}export{x as createAttributeDataIndex,T as createGeometryDescriptor,D as createGeometryDescriptorForDraco,C as createGeometryDescriptorFromDefinition,E as createGeometryDescriptorFromSchema,w as createGeometryIndexFromSchema,b as createRawView,_ as createTypedView,N as getBytesPerValue,y as getCachedAttributeValue,M as isValueType,k as readBinaryAttribute,h as readDateStringArray,m as readHeader,g as readStringArray,j as valueType2ArrayBufferReader,A as valueType2TypedArrayClassMap};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import{deg2rad as n,rad2deg as r}from"../../../core/mathUtils.js";import{watch as i,sync as a,initial as o}from"../../../core/reactiveUtils.js";import{property as s,subclass as c}from"../../../core/accessorSupport/decorators.js";import{applyAll as l}from"../camera/constraintUtils.js";import{surfaceElevationBelowRenderLocation as u}from"../camera/intersectionUtils.js";import{ConstraintOptions as d}from"../camera/constraintUtils/ConstraintOptions.js";import{createNearFarHeuristic as f}from"./NearFarHeuristic.js";import{SurfaceCollisionConstraint as p}from"./SurfaceCollisionConstraint.js";let m=class extends t{constructor(e){super(e),this.nearFarHeuristic=f(e.view.state.viewingMode,e.view.groundView,e.view.renderCoordsHelper.spatialReference)}initialize(){let e=()=>this._updateNearFar();this.addHandles([i(()=>[this.view.constraints.clipDistance.near,this.view.constraints.clipDistance.far],()=>this._clipDistanceNearFarChanged()),this.view.state.events.on(`before-camera-change`,({camera:e,sceneDepthRange:t})=>this._updateCameraNearFar(e,t)),i(()=>this.view.constraints.clipDistance.mode,e),i(()=>this.view.navigation.mode,e,a),i(()=>this.view.stage.renderer.sceneDepthRange.value,e,a),i(()=>this.view.renderDataExtent,e,a),i(()=>this.view.groundView.visibleElevationRange,e,a),i(()=>[this.view.constraints.altitude.min,this.view.constraints.altitude.max],()=>this._updateAltitude(),a),i(()=>this.view.constraints.tilt.max,()=>this._updateTiltMax(),a),i(()=>this.view.constraints.tilt.mode,()=>this._updateTilt(),a),i(()=>this.view.state?.camera,()=>this._updateTiltAutoMax(),a),i(()=>[this.view.map?.ground?.navigationConstraint?.type,this.view.state.constraints.collision.enabled],()=>this._updateCollision(),a)]),this.view.state.isLocal&&this.addHandles(i(()=>this.view.renderDataExtent,e=>this._updateLocalSurfaceDistance(e),o)),this._updateNearFar(),this.view.state.viewingMode!==2&&this._updateAltitude(),this._updateTilt(),this._updateCollision(),this._set(`surfaceCollisionConstraint`,new p({view:this.view}))}destroy(){this.surfaceCollisionConstraint&&(this.surfaceCollisionConstraint.destroy(),this._set(`surfaceCollisionConstraint`,null))}_clipDistanceNearFarChanged(){let e=this.view.constraints.clipDistance;e.mode!==`auto`&&this.view.state.updateCamera(t=>h(t,e))}_updateNearFar(){this.view.state.updateCamera(e=>this._updateCameraNearFar(e))}_updateCameraNearFar(e,t){let n=this.view.constraints.clipDistance;n.mode===`manual`?h(e,n):this._updateCameraNearFarAuto(e,n,t)}_updateCameraNearFarAuto(e,t,n=this.view.stage.renderer.sceneDepthRange.value){if(this.view.navigation.mode.type===`ground`)e.near=this.view.navigation.mode.nearOverride,e.far=this.view.navigation.mode.farOverride;else{let t=u(this.view,e.eye),r=this.nearFarHeuristic.compute(e,this.view.renderDataExtent,n,t);e.near=r.near,e.far=r.far}t&&t.autoUpdate(e.near,e.far)}_updateCollision(){let e=this.view.map?.ground?.navigationConstraint?.type,t=!e||e===`stay-above`,n=this.view.state.constraints.collision;t!==n.enabled&&(n.enabled=t,t&&this._reapplyConstraints(8),this.view.constraints.tilt.mode===`auto`&&this._updateTiltAuto())}_updateAltitude(){let e=this.view.constraints.altitude;this.view.state.viewingMode===1?this.view.state.constraints.altitude={min:e.min,max:e.max}:this.view.state.constraints.altitude=null,this._reapplyConstraints()}_updateTiltMax(){let e=this.view.constraints.tilt;e.mode!==`auto`&&(this._updateTiltManual(e),this._reapplyConstraints())}_updateTilt(){let e=this.view.constraints.tilt;e.mode===`manual`?this._updateTiltManual(e):this._updateTiltAuto(),this._reapplyConstraints()}_updateTiltManual(e){let t=this.view.state.constraints;t.tilt=t.createConstantMaxTilt(n(e.max))}_updateTiltAuto(){let e=this.view.state.constraints;e.tilt=e.createDefaultTilt(),this._updateTiltAutoMax()}_updateTiltAutoMax(){let e=this.view.constraints.tilt;if(e.mode!==`auto`)return;let t=this.view.state.constraints;if(t.tilt){let n=t.tilt(this.view.state.camera.distance).max;e.autoUpdate(r(n))}}_updateLocalSurfaceDistance(e){if(e==null)return;let t=Math.max(e.width,e.height);if(t<=0)return;e.zmax!=null&&e.zmin!=null&&(t=Math.max(t,e.zmax-e.zmin));let n=this.view.state,r=3*t/Math.atan(n.camera.fov/2);r!==n.constraints.distance&&(n.constraints.distance=r)}_reapplyConstraints(e=15){this.view.state.updateCamera(t=>{let n=t.clone();l(this.view,t,new d(e,0,null),t,n),this.surfaceCollisionConstraint?.setSourceCamera(n)})}};e([s({constructOnly:!0})],m.prototype,`view`,void 0),e([s({readOnly:!0})],m.prototype,`surfaceCollisionConstraint`,void 0),m=e([c(`esri.views.3d.state.ConstraintsManager`)],m);function h(e,t){t&&(e.near=t.near,e.far=t.far)}export{m as ConstraintsManager};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import{deg2rad as n,rad2deg as r}from"../../../core/mathUtils.js";import{watch as i,sync as a,initial as o}from"../../../core/reactiveUtils.js";import{property as s,subclass as c}from"../../../core/accessorSupport/decorators.js";import{applyAll as l}from"../camera/constraintUtils.js";import{surfaceElevationBelowRenderLocation as u}from"../camera/intersectionUtils.js";import{ConstraintOptions as d}from"../camera/constraintUtils/ConstraintOptions.js";import{createNearFarHeuristic as f}from"./NearFarHeuristic.js";import{SurfaceCollisionConstraint as p}from"./SurfaceCollisionConstraint.js";let m=class extends t{constructor(e){super(e),this.nearFarHeuristic=f(e.view.state.viewingMode,e.view.groundView,e.view.renderCoordsHelper.spatialReference)}initialize(){let e=()=>this._updateNearFar();this.addHandles([i(()=>[this.view.constraints.clipDistance.near,this.view.constraints.clipDistance.far],()=>this._clipDistanceNearFarChanged()),this.view.state.events.on(`before-camera-change`,({camera:e,sceneDepthRange:t})=>this._updateCameraNearFar(e,t)),i(()=>this.view.constraints.clipDistance.mode,e),i(()=>this.view.navigation.mode,e,a),i(()=>this.view.stage.renderer.sceneDepthRange.value,e,a),i(()=>this.view.renderDataExtent,e,a),i(()=>this.view.groundView.visibleElevationRange,e,a),i(()=>[this.view.constraints.altitude.min,this.view.constraints.altitude.max],()=>this._updateAltitude(),a),i(()=>this.view.constraints.tilt.max,()=>this._updateTiltMax(),a),i(()=>this.view.constraints.tilt.mode,()=>this._updateTilt(),a),i(()=>this.view.state?.camera,()=>this._updateTiltAutoMax(),a),i(()=>[this.view.map?.ground?.navigationConstraint?.type,this.view.state.constraints.collision.enabled],()=>this._updateCollision(),a)]),this.view.state.isLocal&&this.addHandles(i(()=>this.view.renderDataExtent,e=>this._updateLocalSurfaceDistance(e),o)),this._updateNearFar(),this.view.state.viewingMode!==2&&this._updateAltitude(),this._updateTilt(),this._updateCollision(),this._set(`surfaceCollisionConstraint`,new p({view:this.view}))}destroy(){this.surfaceCollisionConstraint&&(this.surfaceCollisionConstraint.destroy(),this._set(`surfaceCollisionConstraint`,null))}_clipDistanceNearFarChanged(){let e=this.view.constraints.clipDistance;e.mode!==`auto`&&this.view.state.updateCamera(t=>h(t,e))}_updateNearFar(){let{state:e}=this.view;e.updateCamera(e=>this._updateCameraNearFar(e)),e.updateContentCameraIfPresent()}_updateCameraNearFar(e,t){let n=this.view.constraints.clipDistance;n.mode===`manual`?h(e,n):this._updateCameraNearFarAuto(e,n,t)}_updateCameraNearFarAuto(e,t,n=this.view.stage.renderer.sceneDepthRange.value){if(this.view.navigation.mode.type===`ground`)e.near=this.view.navigation.mode.nearOverride,e.far=this.view.navigation.mode.farOverride;else{let t=u(this.view,e.eye),r=this.nearFarHeuristic.compute(e,this.view.renderDataExtent,n,t);e.near=r.near,e.far=r.far}t&&t.autoUpdate(e.near,e.far)}_updateCollision(){let e=this.view.map?.ground?.navigationConstraint?.type,t=!e||e===`stay-above`,n=this.view.state.constraints.collision;t!==n.enabled&&(n.enabled=t,t&&this._reapplyConstraints(8),this.view.constraints.tilt.mode===`auto`&&this._updateTiltAuto())}_updateAltitude(){let e=this.view.constraints.altitude;this.view.state.viewingMode===1?this.view.state.constraints.altitude={min:e.min,max:e.max}:this.view.state.constraints.altitude=null,this._reapplyConstraints()}_updateTiltMax(){let e=this.view.constraints.tilt;e.mode!==`auto`&&(this._updateTiltManual(e),this._reapplyConstraints())}_updateTilt(){let e=this.view.constraints.tilt;e.mode===`manual`?this._updateTiltManual(e):this._updateTiltAuto(),this._reapplyConstraints()}_updateTiltManual(e){let t=this.view.state.constraints;t.tilt=t.createConstantMaxTilt(n(e.max))}_updateTiltAuto(){let e=this.view.state.constraints;e.tilt=e.createDefaultTilt(),this._updateTiltAutoMax()}_updateTiltAutoMax(){let e=this.view.constraints.tilt;if(e.mode!==`auto`)return;let t=this.view.state.constraints;if(t.tilt){let n=t.tilt(this.view.state.camera.distance).max;e.autoUpdate(r(n))}}_updateLocalSurfaceDistance(e){if(e==null)return;let t=Math.max(e.width,e.height);if(t<=0)return;e.zmax!=null&&e.zmin!=null&&(t=Math.max(t,e.zmax-e.zmin));let n=this.view.state,r=3*t/Math.atan(n.camera.fov/2);r!==n.constraints.distance&&(n.constraints.distance=r)}_reapplyConstraints(e=15){this.view.state.updateCamera(t=>{let n=t.clone();l(this.view,t,new d(e,0,null),t,n),this.surfaceCollisionConstraint?.setSourceCamera(n)})}};e([s({constructOnly:!0})],m.prototype,`view`,void 0),e([s({readOnly:!0})],m.prototype,`surfaceCollisionConstraint`,void 0),m=e([c(`esri.views.3d.state.ConstraintsManager`)],m);function h(e,t){t&&(e.near=t.near,e.far=t.far)}export{m as ConstraintsManager};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{prefersReducedMotion as t}from"../../../core/a11yUtils.js";import n from"../../../core/Accessor.js";import{EventEmitter as r}from"../../../core/Evented.js";import{destroyMaybe as i}from"../../../core/maybe.js";import{when as a}from"../../../core/reactiveUtils.js";import{property as o,subclass as s}from"../../../core/accessorSupport/decorators.js";import{afterDispatch as c}from"../../../core/accessorSupport/watch.js";import{fromValues as l}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as u}from"../../../geometry/ellipsoidUtils.js";import d from"../../ViewAnimation.js";import{viewingModeFromString as f}from"../../ViewingMode.js";import{applySurfaceCollisionConstraint as p}from"../camera/constraintUtils/surfaceCollision.js";import{Constraints as m}from"./Constraints.js";import{HUDOccludedFragmentOpacity as h,labelVisibleConfiguration as g,labelAdaptiveConfiguration as _,iconVisibleConfiguration as v,iconAdaptiveConfiguration as y}from"./HUDOccludedFragmentOpacity.js";import{AnimationController as b}from"./controllers/AnimationController.js";import x from"../webgl/RenderCamera.js";import{DepthRange as S}from"../webgl-engine/lib/DepthRange.js";import{maximumHighlights as C}from"../../support/HighlightDefaults.js";import{PropertiesPool as w}from"../../support/PropertiesPool.js";let T=class extends n{constructor(e){super(e),this._propertiesPool=new w({camera:()=>new x},this),this._lastSeenCameraProjectionValues=new x,this.mode=0,this._cssCamera=new x,this._camera=new x,this.rasterPixelRatio=1,this.contentPixelRatio=1,this.constraints=new m({state:this}),this.events=new r,this.occludedFragmentOpacity=[null,null,null,null],this.fading=!1,this._cameraChanged=!1,this._updateQueue=[],this._processingUpdates=!1}reset(){this.cameraController=null,this._propertiesPool.destroy(),this._propertiesPool=new w({camera:()=>new x},this)}destroy(){this.cameraController=null,this._propertiesPool=i(this._propertiesPool)}createInitialCamera(){if(this.viewingMode===1){let e=u(this.spatialReference).radius;this.camera=new x({eye:l(e*4,0,0),center:l(e,0,0),up:l(0,0,1)})}else this.camera=new x({eye:l(0,0,100),center:l(0,0,0),up:l(0,1,0)})}get animation(){return this.cameraController instanceof b&&this.cameraController.viewAnimation!=null?this.cameraController.viewAnimation:null}get cssCamera(){let e=this._cssCamera.copyFrom(this.camera),{height:t,width:n,pixelRatio:r}=this.camera;return e.pixelRatio=1,e.height=Math.round(t/r),e.width=Math.round(n/r),e}get camera(){return this._camera}set camera(e){e!==O&&O.copyFrom(e),O.computeUp(this.viewingMode),this.events.emit(`before-camera-change`,{camera:O});let t=this._camera;if(D(this._lastSeenCameraProjectionValues,O)&&(this._lastSeenCameraProjectionValues.copyFrom(O),this.events.emit(`camera-projection-changed`,this._lastSeenCameraProjectionValues)),!t.equals(O)&&(this._camera=this._propertiesPool.get(`camera`).copyFrom(O),this._cameraChanged=!t.almostEquals(O),this._cameraChanged)){let e=c(()=>{this._cameraChanged=!1,e.remove()})}}get pixelRatio(){return this.camera.pixelRatio}get alignPixelEnabled(){return this.pixelRatio===this.rasterPixelRatio&&this.mode===2}get updating(){return this.mode!==2}get contentCamera(){return this._contentCamera??this.camera}set contentCamera(e){if(e==null){this._contentCamera=null;return}let t=e.clone();this.events.emit(`before-camera-change`,{camera:t,sceneDepthRange:S.Infinite}),this._contentCamera=t}get fixedContentCamera(){return this._contentCamera!=null}get isGlobal(){return this.viewingMode===1}get isLocal(){return this.viewingMode===2}get viewingMode(){return f(this.view.viewingMode)}get spatialReference(){return this.view.spatialReference}ensureOccludedFragmentOpacity(e,t){let n=t===`visible`,r=(n?2:0)+ +!!e,i=e?n?g:_:n?v:y,a=()=>this.view.stage?.renderView.requestRender(2);return this.occludedFragmentOpacity[r]??=new h({configuration:i,requestRender:a}),this.occludedFragmentOpacity[r]}get highlights(){let e=this.view.highlights.items.slice(0,C);for(let t=0;t<e.length;){let n=e[t],r=e.findIndex(e=>e.name===n.name);r>=0&&t>r?e.splice(t,1):++t}return e}get highlightOrderMap(){return new Map(this.highlights.map(({name:e},t)=>[e,t]))}get animationsEnabled(){return this.view.animationsEnabled&&!t()}get navigating(){return!!this.cameraController?.isInteractive}get stationary(){return!this._cameraChanged&&!this.navigating}get cameraController(){return this._get(`cameraController`)}set cameraController(e){this.stopActiveCameraController()?(this.removeHandles(k),this.cameraController?.destroy(),e&&(this.addHandles(a(()=>e.state===4||e.state===3,()=>{this.updateCamera(t=>{e.onControllerEnd(t),this.view.stateManager?.setCollisionSourceCamera(t),p(this.view,null,t,1)}),this.cameraController===e&&(this._set(`cameraController`,null),e.destroy())},{sync:!0,once:!0}),k),e.onControllerStart(this.camera),this.view.stateManager?.setCollisionSourceCamera(this.camera)),this._set(`cameraController`,e)):e&&(e.state=1)}switchCameraController(e){this.cameraController=e}stopActiveCameraController(){return!this.cameraController||this.cameraController.stopController()}updateCamera(e){this._updateQueue.push(e),this._processUpdateQueue()}_processUpdateQueue(){if(this._updateQueue.length===0||this._processingUpdates)return;this._processingUpdates=!0;let e=this._updateQueue.shift();O.copyFrom(this.camera),e(O),this.camera=O,this._processingUpdates=!1,this._processUpdateQueue()}static cleanupViewstate(){O=new x}};e([o({constructOnly:!0})],T.prototype,`view`,void 0),e([o()],T.prototype,`mode`,void 0),e([o({readOnly:!0,type:d})],T.prototype,`animation`,null),e([o({type:x})],T.prototype,`cssCamera`,null),e([o()],T.prototype,`_cssCamera`,void 0),e([o({type:x})],T.prototype,`camera`,null),e([o()],T.prototype,`_camera`,void 0),e([o({readOnly:!0})],T.prototype,`pixelRatio`,null),e([o()],T.prototype,`rasterPixelRatio`,void 0),e([o()],T.prototype,`contentPixelRatio`,void 0),e([o({readOnly:!0})],T.prototype,`alignPixelEnabled`,null),e([o({readOnly:!0})],T.prototype,`updating`,null),e([o({})],T.prototype,`_contentCamera`,void 0),e([o({type:x})],T.prototype,`contentCamera`,null),e([o({readOnly:!0})],T.prototype,`fixedContentCamera`,null),e([o({readOnly:!0})],T.prototype,`events`,void 0),e([o({readOnly:!0})],T.prototype,`isGlobal`,null),e([o({readOnly:!0})],T.prototype,`isLocal`,null),e([o({readOnly:!0})],T.prototype,`viewingMode`,null),e([o()],T.prototype,`occludedFragmentOpacity`,void 0),e([o({readOnly:!0})],T.prototype,`highlights`,null),e([o({readOnly:!0})],T.prototype,`highlightOrderMap`,null),e([o({readOnly:!0})],T.prototype,`navigating`,null),e([o()],T.prototype,`fading`,void 0),e([o({readOnly:!0})],T.prototype,`stationary`,null),e([o()],T.prototype,`_cameraChanged`,void 0),e([o()],T.prototype,`cameraController`,null),T=e([s(`esri.views.3d.state.ViewState`)],T);const E=T;function D(e,t){return e.fov!==t.fov||e.fullViewport[0]!==t.fullViewport[0]||e.fullViewport[1]!==t.fullViewport[1]||e.fullViewport[2]!==t.fullViewport[2]||e.fullViewport[3]!==t.fullViewport[3]||e.padding[0]!==t.padding[0]||e.padding[1]!==t.padding[1]||e.padding[2]!==t.padding[2]||e.padding[3]!==t.padding[3]}let O=new x;const k=`ViewStateHandles`;export{E as default};
2
+ import{__decorate as e}from"tslib";import{prefersReducedMotion as t}from"../../../core/a11yUtils.js";import n from"../../../core/Accessor.js";import{EventEmitter as r}from"../../../core/Evented.js";import{destroyMaybe as i}from"../../../core/maybe.js";import{when as a}from"../../../core/reactiveUtils.js";import{property as o,subclass as s}from"../../../core/accessorSupport/decorators.js";import{afterDispatch as c}from"../../../core/accessorSupport/watch.js";import{fromValues as l}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as u}from"../../../geometry/ellipsoidUtils.js";import d from"../../ViewAnimation.js";import{viewingModeFromString as f}from"../../ViewingMode.js";import{applySurfaceCollisionConstraint as p}from"../camera/constraintUtils/surfaceCollision.js";import{Constraints as m}from"./Constraints.js";import{HUDOccludedFragmentOpacity as h,labelVisibleConfiguration as g,labelAdaptiveConfiguration as _,iconVisibleConfiguration as v,iconAdaptiveConfiguration as y}from"./HUDOccludedFragmentOpacity.js";import{AnimationController as b}from"./controllers/AnimationController.js";import x from"../webgl/RenderCamera.js";import{DepthRange as S}from"../webgl-engine/lib/DepthRange.js";import{maximumHighlights as C}from"../../support/HighlightDefaults.js";import{PropertiesPool as w}from"../../support/PropertiesPool.js";let T=class extends n{constructor(e){super(e),this._propertiesPool=new w({camera:()=>new x},this),this._lastSeenCameraProjectionValues=new x,this.mode=0,this._cssCamera=new x,this._camera=new x,this.rasterPixelRatio=1,this.contentPixelRatio=1,this.constraints=new m({state:this}),this.events=new r,this.occludedFragmentOpacity=[null,null,null,null],this.fading=!1,this._cameraChanged=!1,this._updateQueue=[],this._processingUpdates=!1}reset(){this.cameraController=null,this._propertiesPool.destroy(),this._propertiesPool=new w({camera:()=>new x},this)}destroy(){this.cameraController=null,this._propertiesPool=i(this._propertiesPool)}createInitialCamera(){if(this.viewingMode===1){let e=u(this.spatialReference).radius;this.camera=new x({eye:l(e*4,0,0),center:l(e,0,0),up:l(0,0,1)})}else this.camera=new x({eye:l(0,0,100),center:l(0,0,0),up:l(0,1,0)})}get animation(){return this.cameraController instanceof b&&this.cameraController.viewAnimation!=null?this.cameraController.viewAnimation:null}get cssCamera(){let e=this._cssCamera.copyFrom(this.camera),{height:t,width:n,pixelRatio:r}=this.camera;return e.pixelRatio=1,e.height=Math.round(t/r),e.width=Math.round(n/r),e}get camera(){return this._camera}set camera(e){e!==O&&O.copyFrom(e),O.computeUp(this.viewingMode),this.events.emit(`before-camera-change`,{camera:O});let t=this._camera;if(D(this._lastSeenCameraProjectionValues,O)&&(this._lastSeenCameraProjectionValues.copyFrom(O),this.events.emit(`camera-projection-changed`,this._lastSeenCameraProjectionValues)),!t.equals(O)&&(this._camera=this._propertiesPool.get(`camera`).copyFrom(O),this._cameraChanged=!t.almostEquals(O),this._cameraChanged)){let e=c(()=>{this._cameraChanged=!1,e.remove()})}}get pixelRatio(){return this.camera.pixelRatio}get alignPixelEnabled(){return this.pixelRatio===this.rasterPixelRatio&&this.mode===2}get updating(){return this.mode!==2}get contentCamera(){return this._contentCamera??this.camera}set contentCamera(e){if(e==null){this._contentCamera=null;return}let t=e.clone();this.events.emit(`before-camera-change`,{camera:t,sceneDepthRange:S.Infinite}),this._contentCamera?.equals(t)||(this._contentCamera=t)}get fixedContentCamera(){return this._contentCamera!=null}get isGlobal(){return this.viewingMode===1}get isLocal(){return this.viewingMode===2}get viewingMode(){return f(this.view.viewingMode)}get spatialReference(){return this.view.spatialReference}ensureOccludedFragmentOpacity(e,t){let n=t===`visible`,r=(n?2:0)+ +!!e,i=e?n?g:_:n?v:y,a=()=>this.view.stage?.renderView.requestRender(2);return this.occludedFragmentOpacity[r]??=new h({configuration:i,requestRender:a}),this.occludedFragmentOpacity[r]}get highlights(){let e=this.view.highlights.items.slice(0,C);for(let t=0;t<e.length;){let n=e[t],r=e.findIndex(e=>e.name===n.name);r>=0&&t>r?e.splice(t,1):++t}return e}get highlightOrderMap(){return new Map(this.highlights.map(({name:e},t)=>[e,t]))}get animationsEnabled(){return this.view.animationsEnabled&&!t()}get navigating(){return!!this.cameraController?.isInteractive}get stationary(){return!this._cameraChanged&&!this.navigating}get cameraController(){return this._get(`cameraController`)}set cameraController(e){this.stopActiveCameraController()?(this.removeHandles(k),this.cameraController?.destroy(),e&&(this.addHandles(a(()=>e.state===4||e.state===3,()=>{this.updateCamera(t=>{e.onControllerEnd(t),this.view.stateManager?.setCollisionSourceCamera(t),p(this.view,null,t,1)}),this.cameraController===e&&(this._set(`cameraController`,null),e.destroy())},{sync:!0,once:!0}),k),e.onControllerStart(this.camera),this.view.stateManager?.setCollisionSourceCamera(this.camera)),this._set(`cameraController`,e)):e&&(e.state=1)}switchCameraController(e){this.cameraController=e}stopActiveCameraController(){return!this.cameraController||this.cameraController.stopController()}updateContentCameraIfPresent(){this._contentCamera&&(this.contentCamera=this._contentCamera)}updateCamera(e){this._updateQueue.push(e),this._processUpdateQueue()}_processUpdateQueue(){if(this._updateQueue.length===0||this._processingUpdates)return;this._processingUpdates=!0;let e=this._updateQueue.shift();O.copyFrom(this.camera),e(O),this.camera=O,this._processingUpdates=!1,this._processUpdateQueue()}static cleanupViewstate(){O=new x}};e([o({constructOnly:!0})],T.prototype,`view`,void 0),e([o()],T.prototype,`mode`,void 0),e([o({readOnly:!0,type:d})],T.prototype,`animation`,null),e([o({type:x})],T.prototype,`cssCamera`,null),e([o()],T.prototype,`_cssCamera`,void 0),e([o({type:x})],T.prototype,`camera`,null),e([o()],T.prototype,`_camera`,void 0),e([o({readOnly:!0})],T.prototype,`pixelRatio`,null),e([o()],T.prototype,`rasterPixelRatio`,void 0),e([o()],T.prototype,`contentPixelRatio`,void 0),e([o({readOnly:!0})],T.prototype,`alignPixelEnabled`,null),e([o({readOnly:!0})],T.prototype,`updating`,null),e([o({})],T.prototype,`_contentCamera`,void 0),e([o({type:x})],T.prototype,`contentCamera`,null),e([o({readOnly:!0})],T.prototype,`fixedContentCamera`,null),e([o({readOnly:!0})],T.prototype,`events`,void 0),e([o({readOnly:!0})],T.prototype,`isGlobal`,null),e([o({readOnly:!0})],T.prototype,`isLocal`,null),e([o({readOnly:!0})],T.prototype,`viewingMode`,null),e([o()],T.prototype,`occludedFragmentOpacity`,void 0),e([o({readOnly:!0})],T.prototype,`highlights`,null),e([o({readOnly:!0})],T.prototype,`highlightOrderMap`,null),e([o({readOnly:!0})],T.prototype,`navigating`,null),e([o()],T.prototype,`fading`,void 0),e([o({readOnly:!0})],T.prototype,`stationary`,null),e([o()],T.prototype,`_cameraChanged`,void 0),e([o()],T.prototype,`cameraController`,null),T=e([s(`esri.views.3d.state.ViewState`)],T);const E=T;function D(e,t){return e.fov!==t.fov||e.fullViewport[0]!==t.fullViewport[0]||e.fullViewport[1]!==t.fullViewport[1]||e.fullViewport[2]!==t.fullViewport[2]||e.fullViewport[3]!==t.fullViewport[3]||e.padding[0]!==t.padding[0]||e.padding[1]!==t.padding[1]||e.padding[2]!==t.padding[2]||e.padding[3]!==t.padding[3]}let O=new x;const k=`ViewStateHandles`;export{E as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../Camera.js";import n from"../../../Viewpoint.js";import r from"../../../core/Accessor.js";import i from"../../../core/Logger.js";import{destroyMaybe as a}from"../../../core/maybe.js";import{on as o,watch as s,sync as c,when as l}from"../../../core/reactiveUtils.js";import{addFrameTask as u}from"../../../core/scheduling.js";import{createScreenPoint as d}from"../../../core/screenUtils.js";import{Milliseconds as f}from"../../../core/time.js";import{property as p,subclass as ee}from"../../../core/accessorSupport/decorators.js";import{runUntracked as m}from"../../../core/accessorSupport/tracking.js";import{squaredDistance as h}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{fromArray as g}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{set as _}from"../../../core/libs/gl-matrix-2/math/vec4.js";import{create as v}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import y from"../../../geometry/Extent.js";import b from"../../../geometry/Point.js";import x from"../../../geometry/Polygon.js";import{isLoadedOrLoadFor as S,requiresLoad as te}from"../../../geometry/projectionUtils.js";import{fromRenderCamera as C,toRenderCamera as w}from"../webgl.js";import{applyAll as T}from"../camera/constraintUtils.js";import{cameraOnContentAlongViewDirection as E,surfaceElevationBelowRenderLocation as D}from"../camera/intersectionUtils.js";import{ConstraintsManager as O}from"./ConstraintsManager.js";import{Frustum as k}from"./Frustum.js";import{GoToOperation as A}from"./GoToOperation.js";import{toArea as j,toExtent as M,applyTiltAdjustToScale as N,scaleToZoom as P,fromExtentSync as F,getObserverForPointAtDistanceSync as I,viewScaleToCameraDistance as L,zoomToScale as R}from"../support/cameraUtils.js";import{fromCamera as z,toCameraSync as ne}from"../support/viewpointUtils.js";import B from"../webgl/RenderCamera.js";import{PropertiesPool as V}from"../../support/PropertiesPool.js";import{ensureAttachmentMaxSize as H}from"../../webgl/FramebufferObject.js";let U=class extends r{constructor(e){super(e),this.ready=!1,this._windowDevicePixelRatio=1,this._devicePixelRatioOverride=null,this._idleTimeout=$,this.test={viewStateManager:this,contentCameraResetState:new Map,setDevicePixelRatio:e=>this._devicePixelRatioOverride=e,getDevicePixelRatioOverride:()=>this._devicePixelRatioOverride,renderState:null,get maximumPixelRatio(){return this.viewStateManager.view.qualitySettings.maximumPixelRatio},get updatingIgnoreRenderState(){return this.renderState!=null},get idleTimeoutEnabled(){return this.viewStateManager._idleTimeout>0},set idleTimeoutEnabled(e){this.viewStateManager._idleTimeout=e?$:0}},this._propertiesPool=new V({frustum:()=>new k(null)},this),this._cameraSetByUser=!1,this._gotoOperation=null,this._cameraChangeTime=0,this._tmpCanvasSize=new W}initialize(){this._cameraChangeTime=performance.now(),this.addHandles([o(()=>this.view.state.events,`before-camera-change`,({camera:e})=>e&&this._updateElevation(e)),s(()=>this.view.state?.camera,(e,t)=>this._cameraChangedHandler(e,t),c)]),l(()=>this.view.state?.camera,e=>this._updateElevation(e),{once:!0,sync:!0}),this.addHandles([u({prepare:e=>this._prepareFrame(e.time)}),s(()=>this.view.state.cameraController,()=>{this._cameraSetByUser=!0,this.removeHandles(Z)}),o(()=>this.view.state.events,`camera-projection-changed`,()=>this.notifyChange(`scale`))])}destroy(){this.exit(),this._propertiesPool=a(this._propertiesPool)}get camera(){let e=this._get(`camera`);if(!this.ready)return e;let{view:t}=this,n=t.state.camera;return m(()=>{let r=C(t,n,J);return r&&e&&r.equals(e)?e:r.clone()})}set camera(e){if(this._updatePropertyBeforeReady(`camera`,e))return;this.view.elevationProvider.enableCache(!0);let t=w(this.view,e);t?this.setStateCamera(t,{applyConstraints:!1})||i.getLogger(this).warnOnce(`#camera=`,`There is a currently active camera controller that has priority.`):i.getLogger(this).error(`#camera=`,`Invalid camera`,e),this.view.elevationProvider.enableCache(!1)}get contentCamera(){let e=this._get(`contentCamera`);if(!this.ready)return e;let{view:t}=this,n=t.state.contentCamera;return m(()=>{let r=C(t,n,J);return r&&e&&r.equals(e)?e:r.clone()})}set contentCamera(e){if(this._updatePropertyBeforeReady(`contentCamera`,e))return;let t=w(this.view,e);t==null?this.view.state.contentCamera=null:this.view.state.contentCamera=t}installContentCameraReset(e){if(this.removeHandles(Q),this.test.contentCameraResetState.clear(),!this.view.state.fixedContentCamera)return!1;let t=this.zoom,n=this.view.state.camera.distance**2,r=g(this.view.state.camera.center),i=e.sticky?this.contentCamera.clone():null;return this.addHandles([s(()=>this.contentCamera,()=>{e.sticky||(this.removeHandles(Q),this.test.contentCameraResetState.clear())}),s(()=>this.zoom,e=>{e!==void 0&&t!==void 0&&(this.test.contentCameraResetState.set(`view.zoom`,Math.abs(e-t)/2),Math.abs(e-t)>2?this.contentCamera=null:this.view.state.fixedContentCamera||(this.contentCamera=i))}),s(()=>this.view.state.camera,e=>{let t=h(r,e.center);this.test.contentCameraResetState.set(`camera.center`,t/n),t>n?this.contentCamera=null:this.view.state.fixedContentCamera||(this.contentCamera=i)})],Q),!0}get center(){return this.ready?this.view.pointsOfInterest.centerOnContent.location:this._get(`center`)}set center(e){this._updatePropertyBeforeReady(`center`,e)||(e?this.isCompatible(e)?this.setStateCamera(this._centerToCamera(e),{applyConstraints:!0})?this.view.pointsOfInterest.centerOnContent.runTask():i.getLogger(this).error(`#center=`,`Invalid center`,e):i.getLogger(this).error(`#center=`,`Center has an incompatible spatial reference (center: `+(e.spatialReference?e.spatialReference.wkid:`none`)+`, view: `+this.view.spatialReference?.wkid+`)`,e):i.getLogger(this).error(`#center=`,`Center may not be null or undefined`))}get visibleArea(){if(!this.ready){let e=this._get(`extent`);return e?x.fromExtent(e):null}return j(this.view,this.view.pointsOfInterest.focus.renderLocation)}get extent(){if(!this.ready)return this._get(`extent`);let e=this.view;return M(e,e.state.camera,e.pointsOfInterest.centerOnContent.renderLocation)??this._get(`extent`)}set extent(e){this._updatePropertyBeforeReady(`extent`,e)||(e?this.isCompatible(e)?this.setStateCamera(this._extentToCamera(e),{applyConstraints:!0})||i.getLogger(this).error(`#extent=`,`Invalid extent`,e):i.getLogger(this).error(`#extent=`,`Extent has an incompatible spatial reference (extent: `+(e.spatialReference?e.spatialReference.wkid:`none`)+`, view: `+this.view.spatialReference?.wkid+`)`,e):i.getLogger(this).error(`#extent=`,`Extent may not be null or undefined`))}get frustum(){let e=this._propertiesPool.get(`frustum`);return e.renderCoordsHelper=this.view.renderCoordsHelper,e.update(this.view.state.camera),e}get constraintsManager(){return this._constraintsManager}get _initialViewpoint(){let e=this.view.map;return e&&`initialViewProperties`in e?e.initialViewProperties?.viewpoint:void 0}get hasInitialView(){return!!this._initialViewpoint}get scale(){if(!this.ready)return this._get(`scale`);let e=this.view.basemapTerrain.tilingScheme,t=this.view.pointsOfInterest.cameraOnSurface.scale;return!e||!t?this._get(`scale`):N(this.view,t,this.view.state.contentCamera,e)}set scale(e){this._updatePropertyBeforeReady(`scale`,e)||this.setStateCamera(this._scaleToCamera(e),{applyConstraints:!0})||i.getLogger(this).error(`#scale=`,`Invalid scale`,e)}get padding(){if(!this.ready)return this._get(`padding`);let e=this.view.state.camera,t=e.padding,n=e.pixelRatio,r=this._get(`padding`),i=Math.round(t[0]/n),a=Math.round(t[1]/n),o=Math.round(t[2]/n),s=Math.round(t[3]/n);return r!=null&&r.top===i&&r.right===a&&r.bottom===o&&r.left===s?r:{top:i,right:a,bottom:o,left:s}}set padding(e){this._updatePropertyBeforeReady(`padding`,e)||(this._paddingToArray(e,this.view.state.camera.pixelRatio,X),this.view.state.updateCamera(e=>e.padding=X))}_paddingToArray(e,t,n){e?_(n,e.top||0,e.right||0,e.bottom||0,e.left||0):_(n,0,0,0,0);for(let e=0;e<4;e++)n[e]=Math.round(n[e]*t)}get screenCenter(){let e=this.padding;return d((this.view.width-(e.left+e.right))/2+e.left,(this.view.height-(e.top+e.bottom))/2+e.top)}get viewpoint(){return this.ready?z(this.view,this.camera):this._get(`viewpoint`)}set viewpoint(e){if(!this._updatePropertyBeforeReady(`viewpoint`,e)){if(!e)i.getLogger(this).error(`#viewpoint=`,`Viewpoint may not be null or undefined`);else if(this.isCompatible(e))this.setStateCamera(this._viewpointToCamera(e),{applyConstraints:!e.camera})||i.getLogger(this).error(`#viewpoint=`,`Invalid viewpoint`,e);else{let t=e.camera==null?e.targetGeometry:e.camera.position,n=t!=null&&t.spatialReference;i.getLogger(this).error(`#viewpoint=`,`Viewpoint has an incompatible spatial reference (viewpoint: `+(n?n.wkid:`none`)+`, view: `+this.view.spatialReference?.wkid+`)`,e)}}}get zoom(){return this.ready?P(this.view,this.scale):this._get(`zoom`)}set zoom(e){this._updatePropertyBeforeReady(`zoom`,e)||e===void 0||this.setStateCamera(this._zoomToCamera(e),{applyConstraints:!0})||i.getLogger(this).error(`#zoom=`,`Invalid zoom`,e)}_computeCanvasSize(e){if(this._devicePixelRatioOverride){this.view.state.contentPixelRatio=this._devicePixelRatioOverride,e.width=Math.round(this.view.surface.clientWidth*this._devicePixelRatioOverride),e.height=Math.round(this.view.surface.clientHeight*this._devicePixelRatioOverride),e.pixelRatio=this._devicePixelRatioOverride,e.pixelScale=1;return}let t=Math.min(this._windowDevicePixelRatio,this.view.qualitySettings.maximumPixelRatio),n=(this._useDevicePixelResolution()?this._windowDevicePixelRatio:t)*this.view.resolutionScale;e.width=Math.round(this.view.surface.clientWidth*n),e.height=Math.round(this.view.surface.clientHeight*n);let r=this.view.stage.renderView.renderingContext?.parameters.maxTextureSize;r&&H(e,r),e.pixelRatio=e.width>0?.5*(e.width/this.view.surface.clientWidth)+.5*(e.height/this.view.surface.clientHeight):n,e.pixelScale=this._windowDevicePixelRatio/e.pixelRatio,this.view.state&&(this.view.state.contentPixelRatio=Math.min(this._windowDevicePixelRatio,this.view.qualitySettings.maximumPixelRatio))}get _rasterPixelRatio(){return this._devicePixelRatioOverride==null?this._useDevicePixelResolution(2)?this._windowDevicePixelRatio:Math.min(this._windowDevicePixelRatio,this.view.qualitySettings.maximumPixelRatio):this._devicePixelRatioOverride}_useDevicePixelResolution(e){return this.view?.stage?.renderer.isFeatureEnabled(8,e)??!1}preinit(e){return!(this._isOverridden(`center`)&&!S(this.center.spatialReference,e)||this._isOverridden(`camera`)&&!S(this.camera.position.spatialReference,e)||this._isOverridden(`extent`)&&!S(this.extent.spatialReference,e)||this._isOverridden(`viewpoint`)&&(!S(this.viewpoint.targetGeometry?.spatialReference,e)||!S(this.viewpoint.camera?.position?.spatialReference,e)))}init(){this._constraintsManager=new O({view:this.view}),this._prepareFrame(f(0));let e=this._getInitialProperties();this._cameraSetByUser=!1,this._set(`ready`,!0);for(let t of e)this.set(t.name,t.value);if(!this._cameraSetByUser){let e=this._initialViewpoint||this.view.initialExtent;e&&this.isCompatible(e)?this._setInitialView(e):this.view.state.viewingMode===2&&this.addHandles(l(()=>this.view.groundView.ready,()=>{this.removeHandles(Z),this._setInitialView(this.view.dataExtent)},{once:!0,initial:!0}),Z)}}exit(){this._cancelGoToOperation(),this.ready&&(this._override(`padding`,this.padding),this._set(`ready`,!1),this._clearOverride(`hasInitialView`),this._cameraSetByUser=!1,this.removeHandles(Z),this._constraintsManager=a(this._constraintsManager))}async goTo(e,t){return t={animate:this.view.state.animationsEnabled,...t},this._gotoOperation!=null&&this._gotoOperation.abort(t.animate),this._gotoOperation=new A(e,t,this.view),this.view.resourceController.scheduler.stopFrame(),this._gotoOperation.promise}debugSetCameraOnContent(){this.setStateCamera(E(this.view),{applyConstraints:!1})}step(e){let t=this.view.state?.cameraController;t?.stepController&&this.view.state.updateCamera(n=>t.stepController(e,n))}_cancelGoToOperation(){this._gotoOperation!=null&&(this._gotoOperation.abort(),this._gotoOperation=null)}_getInitialProperties(){let e=new Set,t=[];for(let{propertyName:n,overrides:r}of K){let i=e.has(n),a=this._isOverridden(n);!i&&a&&t.push({name:n,value:this._get(n)}),this._clearOverride(n),(i||a)&&r.forEach(t=>e.add(t))}return t}_setInitialView(e){if(e==null||this._cameraSetByUser)return;if(e instanceof t){this.setStateCamera(w(this.view,e),{applyConstraints:!1});return}if(e instanceof n){if(e.targetGeometry instanceof y){let t=F(this.view,e.targetGeometry,0,.5,0);t!=null&&this.setStateCamera(w(this.view,t),{applyConstraints:!0});return}let t={applyConstraints:!e.camera},n=this._viewpointToCamera(e);this.setStateCamera(n,t);return}let r=F(this.view,e,0,.5,0);r!=null&&this.setStateCamera(w(this.view,r),{applyConstraints:!0})}_updatePropertyBeforeReady(e,t){return!this.ready&&(this._override(e,t),t&&G.has(e)&&this._override(`hasInitialView`,!0),!0)}isCompatible(e){return e==null?!1:e instanceof n?e.camera?this.isCompatible(e.camera):this.isCompatible(e.targetGeometry):e instanceof t?this.isCompatible(e.position):e.spatialReference&&!te(e.spatialReference,this.view.spatialReference)}_getPreservingHeadingTilt(e=q){return this._cameraSetByUser?(e.heading=this.camera.heading,e.tilt=this.camera.tilt):(e.heading=0,e.tilt=.5),e}_centerPointAtDistanceToCamera(e,t,n=Y){let{heading:r,tilt:i}=this._getPreservingHeadingTilt(),a=I(this.view,r,i,e,t,1);return a==null?null:(n.copyFrom(this.view.state.camera),n.eye=a.eye,n.center=a.center,n.up=a.up,n)}_centerToCamera(e){let t;if(e.hasZ)t=this.view.state.camera.distance;else{let{centerOnContent:e}=this.view.pointsOfInterest;e.runTask(),t=e.distance}return this._centerPointAtDistanceToCamera(e,t)}_extentToCamera(e){let{heading:t,tilt:n}=this._getPreservingHeadingTilt(),r=F(this.view,e,t,n,1,J);return r?w(this.view,r):null}_scaleToCamera(e){if(e==null)return null;let t=this.view,n=t.pointsOfInterest.centerOnContent;n.runTask();let r=n.renderLocation,i=t.pointsOfInterest.cameraOnSurface.renderLocation,a=L(t,e,r,i);return this._centerPointAtDistanceToCamera(r,a)}_zoomToCamera(e){return this._scaleToCamera(R(this.view,e))}_viewpointToCamera(e){return w(this.view,ne(this.view,e))}setStateCamera(e,t){return e==null||!this.view.state.stopActiveCameraController()?!1:(this._cameraSetByUser=!0,t.doNotCancelGoToOperation||this._cancelGoToOperation(),this.view.state.updateCamera(n=>{t.positionAndOrientationOnly?(n.eye=e.eye,n.center=e.center,n.up=e.up,n.fov=e.fov):n.copyFrom(e),t.applyConstraints&&T(this.view,n),this.setCollisionSourceCamera(n)}),!0)}setCollisionSourceCamera(e){this._constraintsManager?.surfaceCollisionConstraint.setSourceCamera(e)}_prepareFrame(e){let{surface:t,canvas:n,stage:r}=this.view;if(!t||!n||!r||r.destroyed||r.destroying)return;this._windowDevicePixelRatio=window.devicePixelRatio;let i=this._tmpCanvasSize;if(this._computeCanvasSize(i),i.width!==0&&i.height!==0&&((n.width!==i.width||n.height!==i.height)&&(n.width=i.width,n.height=i.height),this.view.state)){let t=this.view.state.camera;(t.fullWidth!==i.width||t.fullHeight!==i.height||t.pixelRatio!==i.pixelRatio)&&(Y.copyFrom(t),Y.pixelRatio!==i.pixelRatio&&(this._paddingToArray(this.padding,i.pixelRatio,X),Y.padding=X),Y.fullWidth=i.width,Y.fullHeight=i.height,Y.pixelRatio=i.pixelRatio,Y.pixelScale=i.pixelScale,this.view.state.camera=Y),this._updateState(),this.view.state.occludedFragmentOpacity.forEach(t=>t?.update(this.view,this.view.state.mode,e))}}_updateElevation(e){e.relativeElevation=this.view.renderCoordsHelper.getAltitude(e.eye)-(this.view.groundView?.spatialReference?D(this.view,e.eye):0)}_updateState(){this.test.renderState==null?this.view.animation?this.view.state.mode=0:this.view.interacting?this.view.state.mode=1:(this.view.state.mode===0&&(this._cameraChangeTime=0),performance.now()-this._cameraChangeTime<this._idleTimeout?this.view.state.mode=1:this.view.state.mode=2):this.view.state.mode=this.test.renderState,this.view.state.rasterPixelRatio=this._rasterPixelRatio}_cameraChangedHandler(e,t){e&&t&&e.almostEquals(t)||(this._cameraChangeTime=performance.now(),this._updateState())}};e([p({type:t})],U.prototype,`camera`,null),e([p({type:t})],U.prototype,`contentCamera`,null),e([p({type:b})],U.prototype,`center`,null),e([p()],U.prototype,`visibleArea`,null),e([p({type:y})],U.prototype,`extent`,null),e([p({readOnly:!0})],U.prototype,`frustum`,null),e([p()],U.prototype,`_constraintsManager`,void 0),e([p({readOnly:!0})],U.prototype,`constraintsManager`,null),e([p()],U.prototype,`_initialViewpoint`,null),e([p({readOnly:!0})],U.prototype,`hasInitialView`,null),e([p({readOnly:!0,type:Boolean})],U.prototype,`ready`,void 0),e([p({type:Number})],U.prototype,`scale`,null),e([p()],U.prototype,`padding`,null),e([p({readOnly:!0})],U.prototype,`screenCenter`,null),e([p({constructOnly:!0})],U.prototype,`view`,void 0),e([p({type:n})],U.prototype,`viewpoint`,null),e([p({type:Number})],U.prototype,`zoom`,null),e([p({readOnly:!0})],U.prototype,`_rasterPixelRatio`,null),e([p({readOnly:!0})],U.prototype,`_useDevicePixelResolution`,null),e([p()],U.prototype,`_windowDevicePixelRatio`,void 0),e([p()],U.prototype,`_devicePixelRatioOverride`,void 0),U=e([ee(`esri.views.3d.state.ViewStateManager`)],U);class W{constructor(){this.width=0,this.height=0,this.pixelRatio=1,this.pixelScale=1}}const G=new Set([`camera`,`viewpoint`,`extent`,`scale`,`center`,`zoom`]),K=[{propertyName:`camera`,overrides:[`viewpoint`]},{propertyName:`viewpoint`,overrides:[`extent`]},{propertyName:`extent`,overrides:[`center`,`scale`]},{propertyName:`center`,overrides:[]},{propertyName:`scale`,overrides:[`zoom`]},{propertyName:`zoom`,overrides:[]},{propertyName:`padding`,overrides:[]}],q={heading:0,tilt:0};let J=new t,Y=new B;const X=v(),Z=`pending-initial-view`,Q=`content-camera-reset`,$=300,re=100;function ie(){J=new t,Y=new B}export{U as ViewStateManager,ie as cleanupViewStateManager,re as interactingTimeout};
2
+ import{__decorate as e}from"tslib";import t from"../../../Camera.js";import n from"../../../Viewpoint.js";import r from"../../../core/Accessor.js";import i from"../../../core/Logger.js";import{destroyMaybe as a}from"../../../core/maybe.js";import{on as o,watch as s,sync as c,when as l}from"../../../core/reactiveUtils.js";import{addFrameTask as ee}from"../../../core/scheduling.js";import{createScreenPoint as u}from"../../../core/screenUtils.js";import{Milliseconds as d}from"../../../core/time.js";import{property as f,subclass as p}from"../../../core/accessorSupport/decorators.js";import{runUntracked as m}from"../../../core/accessorSupport/tracking.js";import{squaredDistance as h}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{fromArray as te}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{set as g}from"../../../core/libs/gl-matrix-2/math/vec4.js";import{create as _}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import v from"../../../geometry/Extent.js";import y from"../../../geometry/Point.js";import ne from"../../../geometry/Polygon.js";import{isLoadedOrLoadFor as b,requiresLoad as x}from"../../../geometry/projectionUtils.js";import{fromRenderCamera as S,toRenderCamera as C}from"../webgl.js";import{applyAll as w}from"../camera/constraintUtils.js";import{eyeWithinExtent as T,cameraOnContentAlongViewDirection as E,surfaceElevationBelowRenderLocation as D}from"../camera/intersectionUtils.js";import{ConstraintsManager as O}from"./ConstraintsManager.js";import{Frustum as k}from"./Frustum.js";import{GoToOperation as A}from"./GoToOperation.js";import{toArea as j,toExtent as M,applyTiltAdjustToScale as N,scaleToZoom as P,fromExtentSync as F,getObserverForPointAtDistanceSync as I,viewScaleToCameraDistance as L,zoomToScale as R}from"../support/cameraUtils.js";import{fromCamera as z,toCameraSync as re}from"../support/viewpointUtils.js";import B from"../webgl/RenderCamera.js";import{PropertiesPool as V}from"../../support/PropertiesPool.js";import{ensureAttachmentMaxSize as H}from"../../webgl/FramebufferObject.js";let U=class extends r{constructor(e){super(e),this.ready=!1,this._windowDevicePixelRatio=1,this._devicePixelRatioOverride=null,this._idleTimeout=$,this.test={viewStateManager:this,contentCameraResetState:new Map,setDevicePixelRatio:e=>this._devicePixelRatioOverride=e,getDevicePixelRatioOverride:()=>this._devicePixelRatioOverride,renderState:null,get maximumPixelRatio(){return this.viewStateManager.view.qualitySettings.maximumPixelRatio},get updatingIgnoreRenderState(){return this.renderState!=null},get idleTimeoutEnabled(){return this.viewStateManager._idleTimeout>0},set idleTimeoutEnabled(e){this.viewStateManager._idleTimeout=e?$:0}},this._propertiesPool=new V({frustum:()=>new k(null)},this),this._cameraSetByUser=!1,this._gotoOperation=null,this._cameraChangeTime=0,this._tmpCanvasSize=new W}initialize(){this._cameraChangeTime=performance.now(),this.addHandles([o(()=>this.view.state.events,`before-camera-change`,({camera:e})=>e&&this._updateElevation(e)),s(()=>this.view.state?.camera,(e,t)=>this._cameraChangedHandler(e,t),c),o(()=>this.view.elevationProvider,`elevation-change`,e=>{if(e.context!==`ground`)return;let{state:t}=this.view;T(this.view,t.camera,e.extent,e.spatialReference)&&t.updateCamera(e=>this._updateElevation(e)),t.fixedContentCamera&&T(this.view,t.contentCamera,e.extent,e.spatialReference)&&t.updateContentCameraIfPresent()})]),l(()=>this.view.state?.camera,e=>this._updateElevation(e),{once:!0,sync:!0}),this.addHandles([ee({prepare:e=>this._prepareFrame(e.time)}),s(()=>this.view.state.cameraController,()=>{this._cameraSetByUser=!0,this.removeHandles(Z)}),o(()=>this.view.state.events,`camera-projection-changed`,()=>this.notifyChange(`scale`))])}destroy(){this.exit(),this._propertiesPool=a(this._propertiesPool)}get camera(){let e=this._get(`camera`);if(!this.ready)return e;let{view:t}=this,n=t.state.camera;return m(()=>{let r=S(t,n,J);return r&&e&&r.equals(e)?e:r.clone()})}set camera(e){if(this._updatePropertyBeforeReady(`camera`,e))return;this.view.elevationProvider.enableCache(!0);let t=C(this.view,e);t?this.setStateCamera(t,{applyConstraints:!1})||i.getLogger(this).warnOnce(`#camera=`,`There is a currently active camera controller that has priority.`):i.getLogger(this).error(`#camera=`,`Invalid camera`,e),this.view.elevationProvider.enableCache(!1)}get contentCamera(){let e=this._get(`contentCamera`);if(!this.ready)return e;let{view:t}=this,n=t.state.contentCamera;return m(()=>{let r=S(t,n,J);return r&&e&&r.equals(e)?e:r.clone()})}set contentCamera(e){if(this._updatePropertyBeforeReady(`contentCamera`,e))return;let t=C(this.view,e);t==null?this.view.state.contentCamera=null:this.view.state.contentCamera=t}installContentCameraReset(e){if(this.removeHandles(Q),this.test.contentCameraResetState.clear(),!this.view.state.fixedContentCamera)return!1;let t=this.zoom,n=this.view.state.camera.distance**2,r=te(this.view.state.camera.center),i=e.sticky?this.contentCamera.clone():null;return this.addHandles([s(()=>this.contentCamera,()=>{e.sticky||(this.removeHandles(Q),this.test.contentCameraResetState.clear())}),s(()=>this.zoom,e=>{e!==void 0&&t!==void 0&&(this.test.contentCameraResetState.set(`view.zoom`,Math.abs(e-t)/2),Math.abs(e-t)>2?this.contentCamera=null:this.view.state.fixedContentCamera||(this.contentCamera=i))}),s(()=>this.view.state.camera,e=>{let t=h(r,e.center);this.test.contentCameraResetState.set(`camera.center`,t/n),t>n?this.contentCamera=null:this.view.state.fixedContentCamera||(this.contentCamera=i)})],Q),!0}get center(){return this.ready?this.view.pointsOfInterest.centerOnContent.location:this._get(`center`)}set center(e){this._updatePropertyBeforeReady(`center`,e)||(e?this.isCompatible(e)?this.setStateCamera(this._centerToCamera(e),{applyConstraints:!0})?this.view.pointsOfInterest.centerOnContent.runTask():i.getLogger(this).error(`#center=`,`Invalid center`,e):i.getLogger(this).error(`#center=`,`Center has an incompatible spatial reference (center: `+(e.spatialReference?e.spatialReference.wkid:`none`)+`, view: `+this.view.spatialReference?.wkid+`)`,e):i.getLogger(this).error(`#center=`,`Center may not be null or undefined`))}get visibleArea(){if(!this.ready){let e=this._get(`extent`);return e?ne.fromExtent(e):null}return j(this.view,this.view.pointsOfInterest.focus.renderLocation)}get extent(){if(!this.ready)return this._get(`extent`);let e=this.view;return M(e,e.state.camera,e.pointsOfInterest.centerOnContent.renderLocation)??this._get(`extent`)}set extent(e){this._updatePropertyBeforeReady(`extent`,e)||(e?this.isCompatible(e)?this.setStateCamera(this._extentToCamera(e),{applyConstraints:!0})||i.getLogger(this).error(`#extent=`,`Invalid extent`,e):i.getLogger(this).error(`#extent=`,`Extent has an incompatible spatial reference (extent: `+(e.spatialReference?e.spatialReference.wkid:`none`)+`, view: `+this.view.spatialReference?.wkid+`)`,e):i.getLogger(this).error(`#extent=`,`Extent may not be null or undefined`))}get frustum(){let e=this._propertiesPool.get(`frustum`);return e.renderCoordsHelper=this.view.renderCoordsHelper,e.update(this.view.state.camera),e}get constraintsManager(){return this._constraintsManager}get _initialViewpoint(){let e=this.view.map;return e&&`initialViewProperties`in e?e.initialViewProperties?.viewpoint:void 0}get hasInitialView(){return!!this._initialViewpoint}get scale(){if(!this.ready)return this._get(`scale`);let e=this.view.basemapTerrain.tilingScheme,t=this.view.pointsOfInterest.cameraOnSurface.scale;return!e||!t?this._get(`scale`):N(this.view,t,this.view.state.contentCamera,e)}set scale(e){this._updatePropertyBeforeReady(`scale`,e)||this.setStateCamera(this._scaleToCamera(e),{applyConstraints:!0})||i.getLogger(this).error(`#scale=`,`Invalid scale`,e)}get padding(){if(!this.ready)return this._get(`padding`);let e=this.view.state.camera,t=e.padding,n=e.pixelRatio,r=this._get(`padding`),i=Math.round(t[0]/n),a=Math.round(t[1]/n),o=Math.round(t[2]/n),s=Math.round(t[3]/n);return r!=null&&r.top===i&&r.right===a&&r.bottom===o&&r.left===s?r:{top:i,right:a,bottom:o,left:s}}set padding(e){this._updatePropertyBeforeReady(`padding`,e)||(this._paddingToArray(e,this.view.state.camera.pixelRatio,X),this.view.state.updateCamera(e=>e.padding=X))}_paddingToArray(e,t,n){e?g(n,e.top||0,e.right||0,e.bottom||0,e.left||0):g(n,0,0,0,0);for(let e=0;e<4;e++)n[e]=Math.round(n[e]*t)}get screenCenter(){let e=this.padding;return u((this.view.width-(e.left+e.right))/2+e.left,(this.view.height-(e.top+e.bottom))/2+e.top)}get viewpoint(){return this.ready?z(this.view,this.camera):this._get(`viewpoint`)}set viewpoint(e){if(!this._updatePropertyBeforeReady(`viewpoint`,e)){if(!e)i.getLogger(this).error(`#viewpoint=`,`Viewpoint may not be null or undefined`);else if(this.isCompatible(e))this.setStateCamera(this._viewpointToCamera(e),{applyConstraints:!e.camera})||i.getLogger(this).error(`#viewpoint=`,`Invalid viewpoint`,e);else{let t=e.camera==null?e.targetGeometry:e.camera.position,n=t!=null&&t.spatialReference;i.getLogger(this).error(`#viewpoint=`,`Viewpoint has an incompatible spatial reference (viewpoint: `+(n?n.wkid:`none`)+`, view: `+this.view.spatialReference?.wkid+`)`,e)}}}get zoom(){return this.ready?P(this.view,this.scale):this._get(`zoom`)}set zoom(e){this._updatePropertyBeforeReady(`zoom`,e)||e===void 0||this.setStateCamera(this._zoomToCamera(e),{applyConstraints:!0})||i.getLogger(this).error(`#zoom=`,`Invalid zoom`,e)}_computeCanvasSize(e){if(this._devicePixelRatioOverride){this.view.state.contentPixelRatio=this._devicePixelRatioOverride,e.width=Math.round(this.view.surface.clientWidth*this._devicePixelRatioOverride),e.height=Math.round(this.view.surface.clientHeight*this._devicePixelRatioOverride),e.pixelRatio=this._devicePixelRatioOverride,e.pixelScale=1;return}let t=Math.min(this._windowDevicePixelRatio,this.view.qualitySettings.maximumPixelRatio),n=(this._useDevicePixelResolution()?this._windowDevicePixelRatio:t)*this.view.resolutionScale;e.width=Math.round(this.view.surface.clientWidth*n),e.height=Math.round(this.view.surface.clientHeight*n);let r=this.view.stage.renderView.renderingContext?.parameters.maxTextureSize;r&&H(e,r),e.pixelRatio=e.width>0?.5*(e.width/this.view.surface.clientWidth)+.5*(e.height/this.view.surface.clientHeight):n,e.pixelScale=this._windowDevicePixelRatio/e.pixelRatio,this.view.state&&(this.view.state.contentPixelRatio=Math.min(this._windowDevicePixelRatio,this.view.qualitySettings.maximumPixelRatio))}get _rasterPixelRatio(){return this._devicePixelRatioOverride==null?this._useDevicePixelResolution(2)?this._windowDevicePixelRatio:Math.min(this._windowDevicePixelRatio,this.view.qualitySettings.maximumPixelRatio):this._devicePixelRatioOverride}_useDevicePixelResolution(e){return this.view?.stage?.renderer.isFeatureEnabled(8,e)??!1}preinit(e){return!(this._isOverridden(`center`)&&!b(this.center.spatialReference,e)||this._isOverridden(`camera`)&&!b(this.camera.position.spatialReference,e)||this._isOverridden(`extent`)&&!b(this.extent.spatialReference,e)||this._isOverridden(`viewpoint`)&&(!b(this.viewpoint.targetGeometry?.spatialReference,e)||!b(this.viewpoint.camera?.position?.spatialReference,e)))}init(){this._constraintsManager=new O({view:this.view}),this._prepareFrame(d(0));let e=this._getInitialProperties();this._cameraSetByUser=!1,this._set(`ready`,!0);for(let t of e)this.set(t.name,t.value);if(!this._cameraSetByUser){let e=this._initialViewpoint||this.view.initialExtent;e&&this.isCompatible(e)?this._setInitialView(e):this.view.state.viewingMode===2&&this.addHandles(l(()=>this.view.groundView.ready,()=>{this.removeHandles(Z),this._setInitialView(this.view.dataExtent)},{once:!0,initial:!0}),Z)}}exit(){this._cancelGoToOperation(),this.ready&&(this._override(`padding`,this.padding),this._set(`ready`,!1),this._clearOverride(`hasInitialView`),this._cameraSetByUser=!1,this.removeHandles(Z),this._constraintsManager=a(this._constraintsManager))}async goTo(e,t){return t={animate:this.view.state.animationsEnabled,...t},this._gotoOperation!=null&&this._gotoOperation.abort(t.animate),this._gotoOperation=new A(e,t,this.view),this.view.resourceController.scheduler.stopFrame(),this._gotoOperation.promise}debugSetCameraOnContent(){this.setStateCamera(E(this.view),{applyConstraints:!1})}step(e){let t=this.view.state?.cameraController;t?.stepController&&this.view.state.updateCamera(n=>t.stepController(e,n))}_cancelGoToOperation(){this._gotoOperation!=null&&(this._gotoOperation.abort(),this._gotoOperation=null)}_getInitialProperties(){let e=new Set,t=[];for(let{propertyName:n,overrides:r}of K){let i=e.has(n),a=this._isOverridden(n);!i&&a&&t.push({name:n,value:this._get(n)}),this._clearOverride(n),(i||a)&&r.forEach(t=>e.add(t))}return t}_setInitialView(e){if(e==null||this._cameraSetByUser)return;if(e instanceof t){this.setStateCamera(C(this.view,e),{applyConstraints:!1});return}if(e instanceof n){if(e.targetGeometry instanceof v){let t=F(this.view,e.targetGeometry,0,.5,0);t!=null&&this.setStateCamera(C(this.view,t),{applyConstraints:!0});return}let t={applyConstraints:!e.camera},n=this._viewpointToCamera(e);this.setStateCamera(n,t);return}let r=F(this.view,e,0,.5,0);r!=null&&this.setStateCamera(C(this.view,r),{applyConstraints:!0})}_updatePropertyBeforeReady(e,t){return!this.ready&&(this._override(e,t),t&&G.has(e)&&this._override(`hasInitialView`,!0),!0)}isCompatible(e){return e==null?!1:e instanceof n?e.camera?this.isCompatible(e.camera):this.isCompatible(e.targetGeometry):e instanceof t?this.isCompatible(e.position):e.spatialReference&&!x(e.spatialReference,this.view.spatialReference)}_getPreservingHeadingTilt(e=q){return this._cameraSetByUser?(e.heading=this.camera.heading,e.tilt=this.camera.tilt):(e.heading=0,e.tilt=.5),e}_centerPointAtDistanceToCamera(e,t,n=Y){let{heading:r,tilt:i}=this._getPreservingHeadingTilt(),a=I(this.view,r,i,e,t,1);return a==null?null:(n.copyFrom(this.view.state.camera),n.eye=a.eye,n.center=a.center,n.up=a.up,n)}_centerToCamera(e){let t;if(e.hasZ)t=this.view.state.camera.distance;else{let{centerOnContent:e}=this.view.pointsOfInterest;e.runTask(),t=e.distance}return this._centerPointAtDistanceToCamera(e,t)}_extentToCamera(e){let{heading:t,tilt:n}=this._getPreservingHeadingTilt(),r=F(this.view,e,t,n,1,J);return r?C(this.view,r):null}_scaleToCamera(e){if(e==null)return null;let t=this.view,n=t.pointsOfInterest.centerOnContent;n.runTask();let r=n.renderLocation,i=t.pointsOfInterest.cameraOnSurface.renderLocation,a=L(t,e,r,i);return this._centerPointAtDistanceToCamera(r,a)}_zoomToCamera(e){return this._scaleToCamera(R(this.view,e))}_viewpointToCamera(e){return C(this.view,re(this.view,e))}setStateCamera(e,t){return e==null||!this.view.state.stopActiveCameraController()?!1:(this._cameraSetByUser=!0,t.doNotCancelGoToOperation||this._cancelGoToOperation(),this.view.state.updateCamera(n=>{t.positionAndOrientationOnly?(n.eye=e.eye,n.center=e.center,n.up=e.up,n.fov=e.fov):n.copyFrom(e),t.applyConstraints&&w(this.view,n),this.setCollisionSourceCamera(n)}),!0)}setCollisionSourceCamera(e){this._constraintsManager?.surfaceCollisionConstraint.setSourceCamera(e)}_prepareFrame(e){let{surface:t,canvas:n,stage:r}=this.view;if(!t||!n||!r||r.destroyed||r.destroying)return;this._windowDevicePixelRatio=window.devicePixelRatio;let i=this._tmpCanvasSize;if(this._computeCanvasSize(i),i.width!==0&&i.height!==0&&((n.width!==i.width||n.height!==i.height)&&(n.width=i.width,n.height=i.height),this.view.state)){let t=this.view.state.camera;(t.fullWidth!==i.width||t.fullHeight!==i.height||t.pixelRatio!==i.pixelRatio)&&(Y.copyFrom(t),Y.pixelRatio!==i.pixelRatio&&(this._paddingToArray(this.padding,i.pixelRatio,X),Y.padding=X),Y.fullWidth=i.width,Y.fullHeight=i.height,Y.pixelRatio=i.pixelRatio,Y.pixelScale=i.pixelScale,this.view.state.camera=Y),this._updateState(),this.view.state.occludedFragmentOpacity.forEach(t=>t?.update(this.view,this.view.state.mode,e))}}_updateElevation(e){e.relativeElevation=this.view.renderCoordsHelper.getAltitude(e.eye)-(this.view.groundView?.spatialReference?D(this.view,e.eye):0)}_updateState(){this.test.renderState==null?this.view.animation?this.view.state.mode=0:this.view.interacting?this.view.state.mode=1:(this.view.state.mode===0&&(this._cameraChangeTime=0),performance.now()-this._cameraChangeTime<this._idleTimeout?this.view.state.mode=1:this.view.state.mode=2):this.view.state.mode=this.test.renderState,this.view.state.rasterPixelRatio=this._rasterPixelRatio}_cameraChangedHandler(e,t){e&&t&&e.almostEquals(t)||(this._cameraChangeTime=performance.now(),this._updateState())}};e([f({type:t})],U.prototype,`camera`,null),e([f({type:t})],U.prototype,`contentCamera`,null),e([f({type:y})],U.prototype,`center`,null),e([f()],U.prototype,`visibleArea`,null),e([f({type:v})],U.prototype,`extent`,null),e([f({readOnly:!0})],U.prototype,`frustum`,null),e([f()],U.prototype,`_constraintsManager`,void 0),e([f({readOnly:!0})],U.prototype,`constraintsManager`,null),e([f()],U.prototype,`_initialViewpoint`,null),e([f({readOnly:!0})],U.prototype,`hasInitialView`,null),e([f({readOnly:!0,type:Boolean})],U.prototype,`ready`,void 0),e([f({type:Number})],U.prototype,`scale`,null),e([f()],U.prototype,`padding`,null),e([f({readOnly:!0})],U.prototype,`screenCenter`,null),e([f({constructOnly:!0})],U.prototype,`view`,void 0),e([f({type:n})],U.prototype,`viewpoint`,null),e([f({type:Number})],U.prototype,`zoom`,null),e([f({readOnly:!0})],U.prototype,`_rasterPixelRatio`,null),e([f({readOnly:!0})],U.prototype,`_useDevicePixelResolution`,null),e([f()],U.prototype,`_windowDevicePixelRatio`,void 0),e([f()],U.prototype,`_devicePixelRatioOverride`,void 0),U=e([p(`esri.views.3d.state.ViewStateManager`)],U);class W{constructor(){this.width=0,this.height=0,this.pixelRatio=1,this.pixelScale=1}}const G=new Set([`camera`,`viewpoint`,`extent`,`scale`,`center`,`zoom`]),K=[{propertyName:`camera`,overrides:[`viewpoint`]},{propertyName:`viewpoint`,overrides:[`extent`]},{propertyName:`extent`,overrides:[`center`,`scale`]},{propertyName:`center`,overrides:[]},{propertyName:`scale`,overrides:[`zoom`]},{propertyName:`zoom`,overrides:[]},{propertyName:`padding`,overrides:[]}],q={heading:0,tilt:0};let J=new t,Y=new B;const X=_(),Z=`pending-initial-view`,Q=`content-camera-reset`,$=300,ie=100;function ae(){J=new t,Y=new B}export{U as ViewStateManager,ae as cleanupViewStateManager,ie as interactingTimeout};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{signal as e}from"../../../../core/signal.js";import{Milliseconds as t}from"../../../../core/time.js";import{getGaussianSplatAlphaCutoffValue as n}from"../../webgl-engine/shaders/GaussianSplatTechniqueConfiguration.js";class r{static{this.fadeInEase=e=>e*(2-e)}static{this.fadeOutEase=e=>e*e}static{this.inverseFadeInEase=e=>1-Math.sqrt(1-e)}static{this.inverseFadeOutEase=e=>Math.sqrt(1-e)}static{this.minimumFadeDuration=t(80)}static{this.resetFadeDurationInterval=t(1e3)}constructor(n){this._view=n,this._numFadingTiles=e(0),this._tmpFullyFadedOutTiles=[],this._visibilityUpdatePending=!1,this._previousNumFadingTiles=0,this._lastStoppedFading=t(0),this._currentFadeDuration=this.baseFadeDuration}get numFadingTiles(){return this._numFadingTiles.value}updateForFrame(e){if(e!==this._lastUpdatedFrameStart){if(this._lastUpdatedFrameStart=e,this.numFadingTiles===0)this._previousFrameStart=null;else{let n=t(this._previousFrameStart==null?0:e-this._previousFrameStart);this.updateAllTileFading(n),this._previousFrameStart=e}this._view.updateFadingTexture()}}fadeTile(e,t,n){let r=this._getTargetOpacity(t);if(e.fadeDirection=t,!this.fadingEnabled){this._instantTileFading(e,r);return}let i=e.opacityModifier;if(i!==r){let r=this._getFadeProgressFromOpacity(i,t);this._startTileFading(e,r,n)}else this._stopTileFading(e)}updateAllTileFading(e){let t=this._tmpFullyFadedOutTiles;t.length=0,this._view.tileHandles.forEach(n=>{this._updateTileFading(n,e)&&t.push(n)}),t.length>0&&(this._view.notifyTileObbsChanged(t),this._visibilityUpdatePending=!0),this._numFadingTiles.value===0&&this._visibilityUpdatePending&&(this._visibilityUpdatePending=!1,this._view.updateActiveTileVisibility()),this._numFadingTiles.value>0&&this._view.view.stage?.renderView.requestRender(2)}onFadeDurationChanged(e){e===0&&this.numFadingTiles>0&&this._instantlyFullyFadeAllTiles()}isTileFadingOut(e){return e.fadeProgress!=null&&e.fadeDirection===1}onTileDiscarded(e){e.fadeProgress!=null&&(this._numFadingTiles.value--,this._numFadingTiles.value===0&&(this._lastStoppedFading=t(performance.now())))}updateFadeDuration(){if(this.numFadingTiles&&this.numFadingTiles>=this._previousNumFadingTiles){let e=this._currentFadeDuration*.95;this._currentFadeDuration=t(Math.max(e,r.minimumFadeDuration))}else this.numFadingTiles===0&&performance.now()-this._lastStoppedFading>r.resetFadeDurationInterval&&(this._currentFadeDuration=this.baseFadeDuration);return this._previousNumFadingTiles=this.numFadingTiles,this._currentFadeDuration}get updating(){return this._numFadingTiles.value>0}get baseFadeDuration(){return this._view.view.qualitySettings.fadeDuration}get fadingEnabled(){return this.baseFadeDuration!==0}_startTileFading(e,t,n){e.fadeProgress??this._numFadingTiles.value++,e.fadeDuration=n,e.fadeProgress=t}_stopTileFading(e){e.fadeProgress!=null&&(e.fadeDirection===1&&this._onTileFullyFadedOut(e),this._numFadingTiles.value--,this._numFadingTiles.value===0&&(this._lastStoppedFading=t(performance.now())),e.fadeDuration=null,e.fadeProgress=null)}_updateTileFading(e,t){let{fadeProgress:n,fadeDirection:i}=e;if(n==null)return!1;let a=this._fadeDirectionToSign(i),o=e.fadeDuration,s=this._getTargetOpacity(i),c=t/Math.abs(o||1),l=Math.min(n+c,1),u=s-a*(1-(i===0?r.fadeInEase:r.fadeOutEase)(l)),d=l===1||this._tileReachedFadeOutCutoff(e,u);if(e.opacityModifier=d?s:u,d){let t=i===1;return this._stopTileFading(e),this._updateOpacityModifier(e),t}return e.fadeProgress=l,this._updateOpacityModifier(e),!1}_updateOpacityModifier(e){for(let t=0;t<e.pageIds.length;t++){let n=e.pageIds[t];this._view.data.fadingTexture.updateBuffer(e.opacityModifier,n)}}_tileReachedFadeOutCutoff(e,t){if(e.fadeDirection!==1)return!1;let r=n(this._view.view.qualitySettings.gaussianSplat.minimumOpacity);return t*e.maxGaussianOpacity<=r}_instantTileFading(e,t){e.fadeDuration=null,e.fadeProgress=null,e.opacityModifier=t,this._updateOpacityModifier(e),e.fadeDirection===1&&this._onTileFullyFadedOut(e)}_instantlyFullyFadeAllTiles(){let e=this._tmpFullyFadedOutTiles;e.length=0,this._view.tileHandles.forEach(t=>{if(t.fadeProgress!=null){let n=t.fadeDirection===1;this._instantTileFading(t,this._getTargetOpacity(t.fadeDirection)),n&&e.push(t)}});let t=e.length>0;t&&(this._visibilityUpdatePending=!0),this._numFadingTiles.value=0,this._visibilityUpdatePending&&(this._visibilityUpdatePending=!1,this._view.updateActiveTileVisibility()),t&&this._view.notifyTileObbsChanged(e)}_onTileFullyFadedOut(e){e.lifecycleState=0,this._view.moveTileToCache(e)}_fadeDirectionToSign(e){return e===0?1:-1}_getTargetOpacity(e){return+(e===0)}_getFadeProgressFromOpacity(e,t){let n=Math.max(0,Math.min(e,1));return t===0?r.inverseFadeInEase(n):r.inverseFadeOutEase(n)}}export{r as GaussianSplatFadeHelper};
2
+ import{signal as e}from"../../../../core/signal.js";import{Milliseconds as t}from"../../../../core/time.js";import{getGaussianSplatAlphaCutoffValue as n}from"../../webgl-engine/shaders/GaussianSplatTechniqueConfiguration.js";class r{static{this.fadeInEase=e=>e*(2-e)}static{this.fadeOutEase=e=>e*e}static{this.inverseFadeInEase=e=>1-Math.sqrt(1-e)}static{this.inverseFadeOutEase=e=>Math.sqrt(1-e)}static{this.minimumFadeDuration=t(80)}static{this.resetFadeDurationInterval=t(1e3)}constructor(n,r){this._view=n,this._onTileFullyFadedOut=r,this._numFadingTiles=e(0),this._tmpFullyFadedOutTiles=[],this._visibilityUpdatePending=!1,this._previousNumFadingTiles=0,this._lastStoppedFading=t(0),this._currentFadeDuration=this.baseFadeDuration}get numFadingTiles(){return this._numFadingTiles.value}updateForFrame(e){if(e!==this._lastUpdatedFrameStart){if(this._lastUpdatedFrameStart=e,this.numFadingTiles===0)this._previousFrameStart=null;else{let n=t(this._previousFrameStart==null?0:e-this._previousFrameStart);this.updateAllTileFading(n),this._previousFrameStart=e}this._view.updateFadingTexture()}}fadeTile(e,t,n){let r=this._getTargetOpacity(t);if(e.fadeDirection=t,!this.fadingEnabled){this._instantTileFading(e,r);return}let i=e.opacityModifier;if(i!==r){let r=this._getFadeProgressFromOpacity(i,t);this._startTileFading(e,r,n)}else this._stopTileFading(e)}updateAllTileFading(e){let t=this._tmpFullyFadedOutTiles;t.length=0,this._view.tileHandles.forEach(n=>{this._updateTileFading(n,e)&&t.push(n)}),t.length>0&&(this._view.notifyTileObbsChanged(t),this._visibilityUpdatePending=!0),this._numFadingTiles.value===0&&this._visibilityUpdatePending&&(this._visibilityUpdatePending=!1,this._view.updateActiveTileVisibility()),this._numFadingTiles.value>0&&this._view.view.stage?.renderView.requestRender(2)}onFadeDurationChanged(e){e===0&&this.numFadingTiles>0&&this._instantlyFullyFadeAllTiles()}isTileFadingOut(e){return e.fadeProgress!=null&&e.fadeDirection===1}onTileDiscarded(e){e.fadeProgress!=null&&(this._numFadingTiles.value--,this._numFadingTiles.value===0&&(this._lastStoppedFading=t(performance.now())))}updateFadeDuration(){if(this.numFadingTiles&&this.numFadingTiles>=this._previousNumFadingTiles){let e=this._currentFadeDuration*.95;this._currentFadeDuration=t(Math.max(e,r.minimumFadeDuration))}else this.numFadingTiles===0&&performance.now()-this._lastStoppedFading>r.resetFadeDurationInterval&&(this._currentFadeDuration=this.baseFadeDuration);return this._previousNumFadingTiles=this.numFadingTiles,this._currentFadeDuration}get updating(){return this._numFadingTiles.value>0}get baseFadeDuration(){return this._view.view.qualitySettings.fadeDuration}get fadingEnabled(){return this.baseFadeDuration!==0}_startTileFading(e,t,n){e.fadeProgress??this._numFadingTiles.value++,e.fadeDuration=n,e.fadeProgress=t}_stopTileFading(e){e.fadeProgress!=null&&(e.fadeDirection===1&&this._onTileFullyFadedOut(e),this._numFadingTiles.value--,this._numFadingTiles.value===0&&(this._lastStoppedFading=t(performance.now())),e.fadeDuration=null,e.fadeProgress=null)}_updateTileFading(e,t){let{fadeProgress:n,fadeDirection:i}=e;if(n==null)return!1;let a=this._fadeDirectionToSign(i),o=e.fadeDuration,s=this._getTargetOpacity(i),c=t/Math.abs(o||1),l=Math.min(n+c,1),u=s-a*(1-(i===0?r.fadeInEase:r.fadeOutEase)(l)),d=l===1||this._tileReachedFadeOutCutoff(e,u);if(e.opacityModifier=d?s:u,d){let t=i===1;return this._stopTileFading(e),this._updateOpacityModifier(e),t}return e.fadeProgress=l,this._updateOpacityModifier(e),!1}_updateOpacityModifier(e){for(let t=0;t<e.pageIds.length;t++){let n=e.pageIds[t];this._view.data.fadingTexture.updateBuffer(e.opacityModifier,n)}}_tileReachedFadeOutCutoff(e,t){if(e.fadeDirection!==1)return!1;let r=n(this._view.view.qualitySettings.gaussianSplat.minimumOpacity);return t*e.maxGaussianOpacity<=r}_instantTileFading(e,t){e.fadeDuration=null,e.fadeProgress=null,e.opacityModifier=t,this._updateOpacityModifier(e),e.fadeDirection===1&&this._onTileFullyFadedOut(e)}_instantlyFullyFadeAllTiles(){let e=this._tmpFullyFadedOutTiles;e.length=0,this._view.tileHandles.forEach(t=>{if(t.fadeProgress!=null){let n=t.fadeDirection===1;this._instantTileFading(t,this._getTargetOpacity(t.fadeDirection)),n&&e.push(t)}});let t=e.length>0;t&&(this._visibilityUpdatePending=!0),this._numFadingTiles.value=0,this._visibilityUpdatePending&&(this._visibilityUpdatePending=!1,this._view.updateActiveTileVisibility()),t&&this._view.notifyTileObbsChanged(e)}_fadeDirectionToSign(e){return e===0?1:-1}_getTargetOpacity(e){return+(e===0)}_getFadeProgressFromOpacity(e,t){let n=Math.max(0,Math.min(e,1));return t===0?r.inverseFadeInEase(n):r.inverseFadeOutEase(n)}}export{r as GaussianSplatFadeHelper};
@@ -0,0 +1,2 @@
1
+ /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
+ import{Milliseconds as e}from"../../../../core/time.js";class t{constructor(t){this._view=t,this._visibilityChange=0,this._tileFadeInsAwaitingInitialSort=new Set,this._pendingTileFadeOuts=new Map,this._pendingFadeDuration=e(0),this._tmpTilesWithChangedVisibility=[]}get visibilityChange(){return this._visibilityChange}get pendingIncomingTileCount(){return this._tileFadeInsAwaitingInitialSort.size}get pendingOutgoingTileCount(){return this._pendingTileFadeOuts.size}freeTile(e){this._tileFadeInsAwaitingInitialSort.delete(e),this._pendingTileFadeOuts.delete(e);let t=!1,n=this._view.tileHandles.get(e);if(n){let r=!1;for(let t of this._pendingTileFadeOuts.values())t.incomingTileHandles.has(e)&&(t.visibilityChange=this._visibilityChange+1,r=!0);r&&(this._visibilityChange++,t=!0);let i=n.lifecycleState!==0;i&&(t=!0,this._view.fadeHelper.onTileDiscarded(n)),this._view.releaseTile(n,i)}t&&this._view.updateActiveTileVisibility()}setVisibility(e,t,r){let i=this._view.fadeHelper.updateFadeDuration(),a=new n(this._visibilityChange+1),o=new Set;for(let n=0;n<r;n++){let r=this._view.tileHandles.get(e[n]);if(!r)continue;let s=t[n]?this._prepareTileFadeIn(r,i):this._prepareTileFadeOut(r,a);t[n]&&a.incomingTileHandles.add(r.handle),s&&o.add(r.handle)}if(o.size!==0){if(this._visibilityChange++,this._pendingFadeDuration=i,this._updatePendingTileHandoffs(o,a),a.incomingTileHandles.size===0)for(let e of this._tileFadeInsAwaitingInitialSort)a.incomingTileHandles.add(e);this._view.updateActiveTileVisibility()}}onSortComplete(e,t){let n=this._tmpTilesWithChangedVisibility;n.length=0,this._triggerFadeIns(e,n);let r=this._triggerFadeOuts(t,n);n.length>0&&this._view.notifyTileObbsChanged(n),r&&this._view.updateActiveTileVisibility()}onTileFullyFadedOut(e){e.lifecycleState=0,this._view.cacheTile(e)}_updatePendingTileHandoffs(e,t){for(let n of new Set(this._pendingTileFadeOuts.values())){if(n===t)continue;let r=!1;for(let i of e)n.incomingTileHandles.has(i)&&(r=!0,t.incomingTileHandles.size>0&&n.incomingTileHandles.delete(i));if(r){n.visibilityChange=t.visibilityChange;for(let e of t.incomingTileHandles)n.incomingTileHandles.add(e)}}}_prepareTileFadeIn(e,t){let n=this._pendingTileFadeOuts.delete(e.handle);return e.lifecycleState===2?(this._view.fadeHelper.fadeTile(e,0,t),!1):this._tileFadeInsAwaitingInitialSort.has(e.handle)?n:(e.lifecycleState===0&&this._view.activateTile(e),e.lifecycleState=1,this._tileFadeInsAwaitingInitialSort.add(e.handle),!0)}_prepareTileFadeOut(e,t){let n=this._tileFadeInsAwaitingInitialSort.delete(e.handle);return n&&e.lifecycleState===1&&(this._view.cacheTile(e),e.lifecycleState=0),e.lifecycleState===2?this._pendingTileFadeOuts.has(e.handle)?n:(this._pendingTileFadeOuts.set(e.handle,t),!0):n}_triggerFadeIns(e,t){for(let n of e)this._view.tileHandles.get(n.handle)===n&&this._tileFadeInsAwaitingInitialSort.delete(n.handle)&&(n.lifecycleState=2,t.push(n),this._view.fadeHelper.fadeTile(n,0,this._pendingFadeDuration))}_triggerFadeOuts(t,n){let r=!1;for(let e of this._pendingTileFadeOuts.values())if(t>=e.visibilityChange){r=!0;break}if(!r)return!1;let i=this._pendingFadeDuration,a=this._pendingFadeDuration;for(let t of this._view.tileHandles.values()){let{fadeDirection:n,fadeDuration:r,fadeProgress:o}=t;if(n!==0||r==null||o==null)continue;let s=r*(1-o);i=e(Math.max(i,s)),a=e(Math.max(a,r))}let o=!1;for(let[e,r]of this._pendingTileFadeOuts){if(t<r.visibilityChange)continue;this._pendingTileFadeOuts.delete(e);let s=this._view.tileHandles.get(e);if(s){let e=s.lifecycleState===2,t=s.opacityModifier===1?i:a;this._view.fadeHelper.fadeTile(s,1,t),e&&s.lifecycleState===0&&(n.push(s),o=!0)}}return o}}class n{constructor(e){this.visibilityChange=e,this.incomingTileHandles=new Set}}export{t as GaussianTileLifecycle};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import{cyclicalPI as n}from"../../../core/Cyclical.js";import"../../../core/has.js";import{clamp as r,deg2rad as i}from"../../../core/mathUtils.js";import{destroyMaybe as a}from"../../../core/maybe.js";import{watch as o,sync as s,when as c}from"../../../core/reactiveUtils.js";import{property as l,subclass as u}from"../../../core/accessorSupport/decorators.js";import{subtract as d}from"../../../core/libs/gl-matrix-2/math/vec2.js";import{add as f,subtract as p,copy as m,distance as h}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{create as g}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{transformMat4 as _,scale as ee,add as te}from"../../../core/libs/gl-matrix-2/math/vec4.js";import{fromValues as v,create as y}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{getReferenceEllipsoid as b}from"../../../geometry/ellipsoidUtils.js";import{projectVectorToVector as x}from"../../../geometry/projection/projectVectorToVector.js";import{create as S,width as C,center as w,copy as T,intersection as E,contains as ne,offset as D}from"../../../geometry/support/aaBoundingRect.js";import{createSpatialReferenceCyclical as O}from"../../../geometry/support/normalizeUtils.js";import{create as k,wrap as A}from"../../../geometry/support/ray.js";import{Sphere as j}from"../../../geometry/support/sphere.js";import{angleAroundAxis as M}from"../../../geometry/support/vector.js";import{y2lat as re}from"../../../geometry/support/webMercatorUtils.js";import{viewAngle as ie}from"../state/utils/viewUtils.js";import{debugFlags as N}from"../support/debugFlags.js";import{DebugPoint as ae}from"../support/debugUtils.js";import{getPlanarDistanceToGroundRatio as P}from"../support/planarDistanceToGroundRatio.js";import{OverlayRenderer as F}from"./OverlayRenderer.js";import{Intersector as I}from"../webgl-engine/lib/Intersector.js";import{fromValues as L}from"../webgl-engine/lib/LocalOriginFactory.js";import{SortedRenderGeometryRenderer as R}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{applyTextureResizeModulo as z,ensureTextureSize as B}from"../webgl-engine/lib/textureUtils.js";import{removeLoadedShaderModules as V}from"../webgl-engine/parts/renderUtils.js";import{TaskPriority as H,noBudget as U}from"../../support/Scheduler.js";import{Yield as W}from"../../support/Yield.js";const G=1.3,K=[[-.1,-2,3.9,2],[-.1,-3.9,3.9,.1],[-2,-3.9,2,.1],[-3.9,-3.9,.1,.1],[-3.9,-2,.1,2],[-3.9,-.1,.1,3.9],[-2,-.1,2,3.9],[-.1,-.1,3.9,3.9]];let q,J=class extends t{constructor(e){super(e),this._renderSR=null,this._overlaySREqualsRenderSR=!0,this._drapeSources=new Set,this._drapeTargets=new Set,this._placementDirty=!1,this._contentUpdated=!1,this._drawTexturesDirty=!1,this._drawTexturesAnimateDirty=!1,this._latestOriginId=0,this.groundView=e.view.groundView}initialize(){let{view:e}=this;this.renderer=new F({parent:this}),e.stage.renderer.plugins.add(this.renderer);let t=()=>this.requestRender();this._groundIntersector=new I(e.state.viewingMode),this._groundIntersector.options.backfacesTerrain=!0,this._groundIntersector.options.invisibleTerrain=!0,this._groundIntersector.options.hud=!1,this.addHandles([o(()=>this.renderer.hasHighlights,t),this.renderer.events.on(`has-water`,()=>e.stage?.renderer.updateHasFlags()),this.renderer.events.on(`content-changed`,t),o(()=>e.state.camera.pixelRatio,t),o(()=>e.state.alignPixelEnabled,t),this.renderer.events.on(`textures-disposed`,()=>this.groundView.requestRender(1)),o(()=>[e.pointsOfInterest?.renderPointOfView,e.pointsOfInterest?.centerOnSurfaceFrequent?.location],()=>this.setPlacementDirty()),o(()=>[e.state?.pixelRatio,e.state?.contentPixelRatio],()=>this.setPlacementDirty(),s),c(()=>e.groundAndIMSurface,e=>e.on(`elevation-change`,()=>this.setPlacementDirty())),e.on(`resize`,()=>this.setPlacementDirty()),e.resourceController.scheduler.registerTask(H.OVERLAY,this)]),e.stage.renderer.overlay=this}destroy(){this.view?.stage&&(this.view.stage.renderer.plugins.remove(this.renderer),this.view.stage.renderer.overlay=null,a(this.renderer)),q&&=(q.hide(),null),this.renderer=null}get spatialReference(){return this._spatialReference}set spatialReference(e){this._spatialReference=e,this.renderer.longitudeCyclical=null;let t=this.view.renderSpatialReference;e!=null&&t!=null?(this._renderSR=t,this._overlaySREqualsRenderSR=e.equals(this._renderSR),this._isSpherical&&(this.renderer.longitudeCyclical=O(e))):this.renderer.disposeOverlays()}get readyToRun(){return this._placementDirty&&(this._drapeSources.size>0||this.view.graphics.length>0||N.OVERLAY_DRAW_DEBUG_TEXTURE)&&!!this._spatialReference&&!(this.terrainSurface.enabled&&this.terrainSurface.freeze)&&this.groundView.ready}get _isSpherical(){return this.view.state.isGlobal}get mapUnitsToPlanarDistanceRatio(){return this._spatialReference!=null&&this._spatialReference.isGeographic&&this._isSpherical?b(this._spatialReference).metersPerDegree:1}getPlanarDistanceToGroundRatio(e){return this._spatialReference==null?1:P(this._spatialReference,this._isSpherical,e)}get _overlayStretch(){return G/this.view.resolutionScale}get longitudeCyclical(){return this.renderer.longitudeCyclical}get updating(){return this.readyToRun||!!this.renderer?.updating||this._contentUpdated}render(e){return this._contentUpdated=!1,this.renderer.time=e,this.renderer.processSyncDrapeSources(),this.renderer.precompileShaders(this.view.state)?this._drawOverlays():null}get hasOverlays(){return this.renderer.hasOverlays}registerDrapeSource(e,t){this._drapeSources.add(e),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources),this.renderer.registerDrapeSource(e,t),this._updateDrapeSourceExtent(e),this._setContentDirty(),this.notifyChange(`readyToRun`)}registerGeometryDrapeSource(e){let t=new R({stage:this.view.stage,drapeSource:e,rendererContext:this.renderer});return this.registerDrapeSource(e,t),t}_updateDrapeSourceExtent(e){this.renderer.overlays.length===2&&e.setDrapingExtent!=null&&this._spatialReference!=null&&e.setDrapingExtent(this.renderer.overlays,this._spatialReference)}unregisterDrapeSource(e){this._drapeSources.has(e)&&(this._drapeSources.delete(e),this.renderer.removeDrapeSourceRenderer(e),this.renderer.ensureDrapeSources(this._drapeSources),this._setContentDirty(),this.notifyChange(`readyToRun`))}registerDrapeTarget(e){this._drapeTargets.add(e),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources)}unregisterDrapeTarget(e){this._drapeTargets.delete(e),this.renderer.ensureDrapeTargets(this._drapeTargets)}_setContentDirty(){this.setPlacementDirty(),this.requestRender()}setPlacementDirty(){this._placementDirty=!0}runTask(e){return this.updateOverlays(e,this.view.state.contentCamera,1)}updateOverlays(e,t,n){if(!this._spatialReference||!this.view.pointsOfInterest?.centerOnSurfaceFrequent)return W;let r=this._computeOverlayHeight(t);this._computeOverlayExtents(t,r,Z),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources),this.renderer.overlayStretch=Z.stretch;let i=this._updateOverlay(0,Z.inner,r,1*Z.pixelRatioAdjustment,Z.mapUnitsPerPixel),a=C(Z.inner)/C(Z.outer),o=this._updateOverlay(1,Z.outer,r,a*Z.pixelRatioAdjustment,Z.mapUnitsPerPixel);(i===1||o===1)&&(this._drapeSources.forEach(e=>this._updateDrapeSourceExtent(e)),this.groundView.updateOverlayParameters(),this.groundView.requestRender(n)),(i!==0||o!==0)&&this.requestRender(),this._placementDirty=!1,e.madeProgress()}_computeOverlayHeight(e){let t=this.view.state.contentPixelRatio*this.view.resolutionScale,n=e.fullWidth/e.pixelRatio*t,r=e.fullHeight/e.pixelRatio*t,i=Math.ceil(Math.max(n,r)*1.5),{maxPreferredTexturePixels:a,maxTextureSize:o}=this.view.stage.renderView.renderingContext.parameters,s=o*.5;return z(B({width:i,height:i},{maxPreferredTexturePixels:a*2,maxTextureSize:s})[1],s)}get overlays(){return this.renderer.overlays}_updateOverlay(e,t,n,r,i){if(this.renderer.overlays.length===0)return 0;let a=this.renderer.overlays[e],o=a.mapUnitsPerPixel;if(a.mapUnitsPerPixel=i,a.pixelRatio=r,oe(t,a.extent)&&n===a.resolution)return o===i?0:2;a.setExtent(t),a.resolution=n;let s=w(a.extent);return a.renderLocalOrigin=L(s[0],s[1],0,`OV_${this._latestOriginId++}`),1}overlayPixelSizeInMapUnits(e,t){if(this.renderer.overlays.length===0)return t();let n=this.renderer.overlays[0],r=this.renderer.overlays[1],i=this._pointIsInExtent(e,n.extent)?n:r;return(i.extent[2]-i.extent[0])/i.resolution}reloadShaders(){V(),this.requestRender(),this.runTask(U)}requestRender(e=1){this.renderer.hasOverlays?(e===1?(this._contentUpdated=!0,this._drawTexturesDirty=!0):this._drawTexturesAnimateDirty=!0,this.view.stage.renderView.requestRender(e)):this.setPlacementDirty()}_intersectGroundFromView(e,t,n,r,i){let a=this.view.sceneIntersectionHelper.getCenterRayWithSubpixelOffset(e,le,t,n);if(a==null)return!1;let o=a.origin,s=f(X,a.origin,a.direction);this._groundIntersector.reset(o,s,e),this._groundIntersector.intersect([]),this.view.groundAndIMSurface.intersect(this._groundIntersector,null,o,s);let c=this._groundIntersector.results.min;return c.getIntersectionPoint(i)&&c.withinDistance(r)}_findHorizonBasedPointOfInterest(e,t){let i=.5,a=.55,o=this.view.renderCoordsHelper.getAltitude(e.eye),s=this.view.pointsOfInterest.centerOnSurfaceFrequent,c=1e-5,l=r(s.estimatedSurfaceAltitude,e.aboveGround?-1/0:o+c,e.aboveGround?o-c:1/0),u=e.aboveGround;if(this.view.viewingMode===`global`){let t=X;$.radius=b(this.view.spatialReference).radius+l,$.closestPointOnSilhouette(A(e.eye,e.viewForward),t),p(t,t,e.eye);let r=n.normalize(M(e.viewForward,t,e.viewRight))/e.fovY+.5,o=r<=0||r>=1?.5:a;i=u?o*r:r+o*(1-r)}else{let t=Math.PI*.5-Math.acos(-e.viewForward[2]),n=v(0,Math.tan(t),1,0),o=_(n,n,e.projectionMatrix)[1],s=r(.5+.5*o,0,1);i=s===1||s===0?.5:u?s*a:1-(1-s)*a}return this._intersectGroundFromView(e,.5,i,s.distance,t)}_computeOverlayExtents(e,t,n){let{view:r}=this,a=r.pointsOfInterest.centerOnSurfaceFrequent.renderLocation,o=g();this._findHorizonBasedPointOfInterest(e,o)||m(o,a);let s=this._renderSR;N.OVERLAY_SHOW_CENTER?(q??=new ae(r.graphics,`red`),q.show(o,s)):q?.hide();let c=Math.max(.1,h(e.eye,o)),l=ie(r.renderCoordsHelper,a,e.eye),u=this._spatialReference;this._overlaySREqualsRenderSR||x(o,s,o,u);let f=this._isSpherical,p=this.groundView.groundExtent,_=!f&&u?.isGeographic,v=_&&u?1/b(u).metersPerDegree:1,y=r.state.contentPixelRatio,S=e.computeScreenPixelSizeAtDistance(c)/y*v;n.mapUnitsPerPixel=_?S:S/this.mapUnitsToPlanarDistanceRatio,n.stretch=this._overlayStretch;let w=t*S/2*n.stretch,D=!1,O=_?90:1/0;f&&p&&u&&(u.isWebMercator?(w/=Math.cos(re(o[1])),O=p[3]):(D=!0,w/=b(u).metersPerDegree,O=90),w>=O&&(w=O,o[1]=0,u.isWebMercator&&(o[0]=0)));let k=1;D&&(k=1/Math.max(.2,Math.cos(Math.abs(i(o[1])))),w*k>180&&(k=180/w),n.mapUnitsPerPixel*=k);let A=Math.log(2)/12;w=Math.exp(Math.round(Math.log(w)/A)*A);let j=w*k,M=.5*t/(32*j),P=.5*t/(32*w);o[0]=Math.round(o[0]*M)/M,o[1]=Math.round(o[1]*P)/P;let F=n.inner;F[0]=o[0]-j,F[1]=o[1]-w,F[2]=o[0]+j,F[3]=o[1]+w,f&&this._shiftExtentToFitBounds(F,1/0,O);let I=n.outer;if(p&&6*j>C(p))T(I,p);else if(Math.PI/2-Math.abs(l-Math.PI/2)<=.25*Math.PI)I[0]=F[0]-j,I[1]=F[1]-w,I[2]=F[2]+j,I[3]=F[3]+w;else{x(e.eye,s,X,u),d(Y,o,X);let t=-Math.atan2(Y[1],Y[0])+Math.PI*.125;t<0&&(t+=2*Math.PI);let n=Math.floor(t/(Math.PI*.25));ee(Y,K[n],w*2),Y[0]*=k,Y[2]*=k,te(I,F,Y)}if(f&&this.longitudeCyclical)I[0]=this.longitudeCyclical.clamp(I[0]),I[2]=this.longitudeCyclical.clamp(I[2]),I[1]=Math.max(I[1],-O),I[3]=Math.min(I[3],O);else{let e=E(F,p,Q),t=E(I,p,ce);ne(e,t)&&(I[2]=I[0],I[3]=I[1])}let L=Math.abs(F[2]-F[0])/t;n.mapUnitsPerPixel=Math.max(n.mapUnitsPerPixel,L),n.pixelRatioAdjustment=n.mapUnitsPerPixel/L}_drawOverlays(e=this.view.state){if(!this._drawTexturesDirty&&!this._drawTexturesAnimateDirty)return this.renderer;let t=!this._drawTexturesDirty&&this._drawTexturesAnimateDirty?0:1;this._drawTexturesDirty=this._drawTexturesAnimateDirty=!1;let n=this.renderer.computeValidity();return this.renderer.releaseRenderTargets(t),this.renderer.drawOverlays(e,t),n!==this.renderer.computeValidity()&&(this.groundView.updateOverlayParameters(),this.groundView.requestRender(1)),this.groundView.requestRender(t),t===1&&this.terrainSurface.requestUpdate(),this.renderer}_pointIsInExtent(e,t){if(this.longitudeCyclical)return this.longitudeCyclical.contains(t[0],t[2],e.x)&&e.y>=t[1]&&e.y<=t[3];let n=e.x,r=e.y;return n>t[0]&&n<t[2]&&r>t[1]&&r<t[3]}_shiftExtentToFitBounds(e,t,n){let r=0,i=0;e[0]<-t?r=e[0]+t:e[2]>t&&(r=t-e[2]),e[1]<-n?i=e[1]+n:e[3]>n&&(i=n-e[3]),D(e,r,i)}get test(){}};e([l()],J.prototype,`_spatialReference`,void 0),e([l({readOnly:!0})],J.prototype,`readyToRun`,null),e([l()],J.prototype,`_placementDirty`,void 0),e([l()],J.prototype,`_contentUpdated`,void 0),e([l()],J.prototype,`_isSpherical`,null),e([l()],J.prototype,`mapUnitsToPlanarDistanceRatio`,null),e([l()],J.prototype,`renderer`,void 0),e([l({constructOnly:!0})],J.prototype,`view`,void 0),e([l({constructOnly:!0})],J.prototype,`groundView`,void 0),e([l({constructOnly:!0})],J.prototype,`terrainSurface`,void 0),e([l()],J.prototype,`updating`,null),J=e([u(`esri.views.3d.terrain.OverlayManager`)],J);function oe(e,t){let n=N.ENABLE_OPTIMIZATIONS?1e-5*Math.max(e[2]-e[0],e[3]-e[1],t[2]-t[0],t[3]-t[1]):0;return Math.abs(t[0]-e[0])<=n&&Math.abs(t[1]-e[1])<=n&&Math.abs(t[2]-e[2])<=n&&Math.abs(t[3]-e[3])<=n}class se{constructor(){this.inner=S(),this.outer=S(),this.mapUnitsPerPixel=0,this.pixelRatioAdjustment=1,this.stretch=G}}const Y=y(),X=g(),Z=new se,Q=S(),ce=S(),le=k(),$=new j;export{J as OverlayManager};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Accessor.js";import{cyclicalPI as n}from"../../../core/Cyclical.js";import"../../../core/has.js";import{clamp as r,deg2rad as i}from"../../../core/mathUtils.js";import{destroyMaybe as a}from"../../../core/maybe.js";import{watch as o,sync as s,on as c}from"../../../core/reactiveUtils.js";import{property as l,subclass as u}from"../../../core/accessorSupport/decorators.js";import{subtract as d}from"../../../core/libs/gl-matrix-2/math/vec2.js";import{add as f,subtract as p,copy as m,distance as h}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{create as g}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{transformMat4 as _,scale as ee,add as te}from"../../../core/libs/gl-matrix-2/math/vec4.js";import{fromValues as v,create as y}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{getReferenceEllipsoid as b}from"../../../geometry/ellipsoidUtils.js";import{projectVectorToVector as x}from"../../../geometry/projection/projectVectorToVector.js";import{create as S,width as C,center as w,copy as T,intersection as E,contains as ne,offset as D}from"../../../geometry/support/aaBoundingRect.js";import{createSpatialReferenceCyclical as O}from"../../../geometry/support/normalizeUtils.js";import{create as k,wrap as A}from"../../../geometry/support/ray.js";import{Sphere as j}from"../../../geometry/support/sphere.js";import{angleAroundAxis as M}from"../../../geometry/support/vector.js";import{y2lat as re}from"../../../geometry/support/webMercatorUtils.js";import{viewAngle as ie}from"../state/utils/viewUtils.js";import{debugFlags as N}from"../support/debugFlags.js";import{DebugPoint as ae}from"../support/debugUtils.js";import{getPlanarDistanceToGroundRatio as P}from"../support/planarDistanceToGroundRatio.js";import{OverlayRenderer as F}from"./OverlayRenderer.js";import{Intersector as I}from"../webgl-engine/lib/Intersector.js";import{fromValues as L}from"../webgl-engine/lib/LocalOriginFactory.js";import{SortedRenderGeometryRenderer as R}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{applyTextureResizeModulo as z,ensureTextureSize as B}from"../webgl-engine/lib/textureUtils.js";import{removeLoadedShaderModules as V}from"../webgl-engine/parts/renderUtils.js";import{TaskPriority as H,noBudget as U}from"../../support/Scheduler.js";import{Yield as W}from"../../support/Yield.js";const G=1.3,K=[[-.1,-2,3.9,2],[-.1,-3.9,3.9,.1],[-2,-3.9,2,.1],[-3.9,-3.9,.1,.1],[-3.9,-2,.1,2],[-3.9,-.1,.1,3.9],[-2,-.1,2,3.9],[-.1,-.1,3.9,3.9]];let q,J=class extends t{constructor(e){super(e),this._renderSR=null,this._overlaySREqualsRenderSR=!0,this._drapeSources=new Set,this._drapeTargets=new Set,this._placementDirty=!1,this._contentUpdated=!1,this._drawTexturesDirty=!1,this._drawTexturesAnimateDirty=!1,this._latestOriginId=0,this.groundView=e.view.groundView}initialize(){let{view:e}=this;this.renderer=new F({parent:this}),e.stage.renderer.plugins.add(this.renderer);let t=()=>this.requestRender();this._groundIntersector=new I(e.state.viewingMode),this._groundIntersector.options.backfacesTerrain=!0,this._groundIntersector.options.invisibleTerrain=!0,this._groundIntersector.options.hud=!1,this.addHandles([o(()=>this.renderer.hasHighlights,t),this.renderer.events.on(`has-water`,()=>e.stage?.renderer.updateHasFlags()),this.renderer.events.on(`content-changed`,t),o(()=>e.state.camera.pixelRatio,t),o(()=>e.state.alignPixelEnabled,t),this.renderer.events.on(`textures-disposed`,()=>this.groundView.requestRender(1)),o(()=>[e.pointsOfInterest?.renderPointOfView,e.pointsOfInterest?.centerOnSurfaceFrequent?.location],()=>this.setPlacementDirty()),o(()=>[e.state?.pixelRatio,e.state?.contentPixelRatio],()=>this.setPlacementDirty(),s),c(()=>e.groundAndIMSurface,`elevation-change`,()=>this.setPlacementDirty()),e.on(`resize`,()=>this.setPlacementDirty()),e.resourceController.scheduler.registerTask(H.OVERLAY,this)]),e.stage.renderer.overlay=this}destroy(){this.view?.stage&&(this.view.stage.renderer.plugins.remove(this.renderer),this.view.stage.renderer.overlay=null,a(this.renderer)),q&&=(q.hide(),null),this.renderer=null}get spatialReference(){return this._spatialReference}set spatialReference(e){this._spatialReference=e,this.renderer.longitudeCyclical=null;let t=this.view.renderSpatialReference;e!=null&&t!=null?(this._renderSR=t,this._overlaySREqualsRenderSR=e.equals(this._renderSR),this._isSpherical&&(this.renderer.longitudeCyclical=O(e))):this.renderer.disposeOverlays()}get readyToRun(){return this._placementDirty&&(this._drapeSources.size>0||this.view.graphics.length>0||N.OVERLAY_DRAW_DEBUG_TEXTURE)&&!!this._spatialReference&&!(this.terrainSurface.enabled&&this.terrainSurface.freeze)&&this.groundView.ready}get _isSpherical(){return this.view.state.isGlobal}get mapUnitsToPlanarDistanceRatio(){return this._spatialReference!=null&&this._spatialReference.isGeographic&&this._isSpherical?b(this._spatialReference).metersPerDegree:1}getPlanarDistanceToGroundRatio(e){return this._spatialReference==null?1:P(this._spatialReference,this._isSpherical,e)}get _overlayStretch(){return G/this.view.resolutionScale}get longitudeCyclical(){return this.renderer.longitudeCyclical}get updating(){return this.readyToRun||!!this.renderer?.updating||this._contentUpdated}render(e){return this._contentUpdated=!1,this.renderer.time=e,this.renderer.processSyncDrapeSources(),this.renderer.precompileShaders(this.view.state)?this._drawOverlays():null}get hasOverlays(){return this.renderer.hasOverlays}registerDrapeSource(e,t){this._drapeSources.add(e),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources),this.renderer.registerDrapeSource(e,t),this._updateDrapeSourceExtent(e),this._setContentDirty(),this.notifyChange(`readyToRun`)}registerGeometryDrapeSource(e){let t=new R({stage:this.view.stage,drapeSource:e,rendererContext:this.renderer});return this.registerDrapeSource(e,t),t}_updateDrapeSourceExtent(e){this.renderer.overlays.length===2&&e.setDrapingExtent!=null&&this._spatialReference!=null&&e.setDrapingExtent(this.renderer.overlays,this._spatialReference)}unregisterDrapeSource(e){this._drapeSources.has(e)&&(this._drapeSources.delete(e),this.renderer.removeDrapeSourceRenderer(e),this.renderer.ensureDrapeSources(this._drapeSources),this._setContentDirty(),this.notifyChange(`readyToRun`))}registerDrapeTarget(e){this._drapeTargets.add(e),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources)}unregisterDrapeTarget(e){this._drapeTargets.delete(e),this.renderer.ensureDrapeTargets(this._drapeTargets)}_setContentDirty(){this.setPlacementDirty(),this.requestRender()}setPlacementDirty(){this._placementDirty=!0}runTask(e){return this.updateOverlays(e,this.view.state.contentCamera,1)}updateOverlays(e,t,n){if(!this._spatialReference||!this.view.pointsOfInterest?.centerOnSurfaceFrequent)return W;let r=this._computeOverlayHeight(t);this._computeOverlayExtents(t,r,Z),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources),this.renderer.overlayStretch=Z.stretch;let i=this._updateOverlay(0,Z.inner,r,1*Z.pixelRatioAdjustment,Z.mapUnitsPerPixel),a=C(Z.inner)/C(Z.outer),o=this._updateOverlay(1,Z.outer,r,a*Z.pixelRatioAdjustment,Z.mapUnitsPerPixel);(i===1||o===1)&&(this._drapeSources.forEach(e=>this._updateDrapeSourceExtent(e)),this.groundView.updateOverlayParameters(),this.groundView.requestRender(n)),(i!==0||o!==0)&&this.requestRender(),this._placementDirty=!1,e.madeProgress()}_computeOverlayHeight(e){let t=this.view.state.contentPixelRatio*this.view.resolutionScale,n=e.fullWidth/e.pixelRatio*t,r=e.fullHeight/e.pixelRatio*t,i=Math.ceil(Math.max(n,r)*1.5),{maxPreferredTexturePixels:a,maxTextureSize:o}=this.view.stage.renderView.renderingContext.parameters,s=o*.5;return z(B({width:i,height:i},{maxPreferredTexturePixels:a*2,maxTextureSize:s})[1],s)}get overlays(){return this.renderer.overlays}_updateOverlay(e,t,n,r,i){if(this.renderer.overlays.length===0)return 0;let a=this.renderer.overlays[e],o=a.mapUnitsPerPixel;if(a.mapUnitsPerPixel=i,a.pixelRatio=r,oe(t,a.extent)&&n===a.resolution)return o===i?0:2;a.setExtent(t),a.resolution=n;let s=w(a.extent);return a.renderLocalOrigin=L(s[0],s[1],0,`OV_${this._latestOriginId++}`),1}overlayPixelSizeInMapUnits(e,t){if(this.renderer.overlays.length===0)return t();let n=this.renderer.overlays[0],r=this.renderer.overlays[1],i=this._pointIsInExtent(e,n.extent)?n:r;return(i.extent[2]-i.extent[0])/i.resolution}reloadShaders(){V(),this.requestRender(),this.runTask(U)}requestRender(e=1){this.renderer.hasOverlays?(e===1?(this._contentUpdated=!0,this._drawTexturesDirty=!0):this._drawTexturesAnimateDirty=!0,this.view.stage.renderView.requestRender(e)):this.setPlacementDirty()}_intersectGroundFromView(e,t,n,r,i){let a=this.view.sceneIntersectionHelper.getCenterRayWithSubpixelOffset(e,le,t,n);if(a==null)return!1;let o=a.origin,s=f(X,a.origin,a.direction);this._groundIntersector.reset(o,s,e),this._groundIntersector.intersect([]),this.view.groundAndIMSurface.intersect(this._groundIntersector,null,o,s);let c=this._groundIntersector.results.min;return c.getIntersectionPoint(i)&&c.withinDistance(r)}_findHorizonBasedPointOfInterest(e,t){let i=.5,a=.55,o=this.view.renderCoordsHelper.getAltitude(e.eye),s=this.view.pointsOfInterest.centerOnSurfaceFrequent,c=1e-5,l=r(s.estimatedSurfaceAltitude,e.aboveGround?-1/0:o+c,e.aboveGround?o-c:1/0),u=e.aboveGround;if(this.view.viewingMode===`global`){let t=X;$.radius=b(this.view.spatialReference).radius+l,$.closestPointOnSilhouette(A(e.eye,e.viewForward),t),p(t,t,e.eye);let r=n.normalize(M(e.viewForward,t,e.viewRight))/e.fovY+.5,o=r<=0||r>=1?.5:a;i=u?o*r:r+o*(1-r)}else{let t=Math.PI*.5-Math.acos(-e.viewForward[2]),n=v(0,Math.tan(t),1,0),o=_(n,n,e.projectionMatrix)[1],s=r(.5+.5*o,0,1);i=s===1||s===0?.5:u?s*a:1-(1-s)*a}return this._intersectGroundFromView(e,.5,i,s.distance,t)}_computeOverlayExtents(e,t,n){let{view:r}=this,a=r.pointsOfInterest.centerOnSurfaceFrequent.renderLocation,o=g();this._findHorizonBasedPointOfInterest(e,o)||m(o,a);let s=this._renderSR;N.OVERLAY_SHOW_CENTER?(q??=new ae(r.graphics,`red`),q.show(o,s)):q?.hide();let c=Math.max(.1,h(e.eye,o)),l=ie(r.renderCoordsHelper,a,e.eye),u=this._spatialReference;this._overlaySREqualsRenderSR||x(o,s,o,u);let f=this._isSpherical,p=this.groundView.groundExtent,_=!f&&u?.isGeographic,v=_&&u?1/b(u).metersPerDegree:1,y=r.state.contentPixelRatio,S=e.computeScreenPixelSizeAtDistance(c)/y*v;n.mapUnitsPerPixel=_?S:S/this.mapUnitsToPlanarDistanceRatio,n.stretch=this._overlayStretch;let w=t*S/2*n.stretch,D=!1,O=_?90:1/0;f&&p&&u&&(u.isWebMercator?(w/=Math.cos(re(o[1])),O=p[3]):(D=!0,w/=b(u).metersPerDegree,O=90),w>=O&&(w=O,o[1]=0,u.isWebMercator&&(o[0]=0)));let k=1;D&&(k=1/Math.max(.2,Math.cos(Math.abs(i(o[1])))),w*k>180&&(k=180/w),n.mapUnitsPerPixel*=k);let A=Math.log(2)/12;w=Math.exp(Math.round(Math.log(w)/A)*A);let j=w*k,M=.5*t/(32*j),P=.5*t/(32*w);o[0]=Math.round(o[0]*M)/M,o[1]=Math.round(o[1]*P)/P;let F=n.inner;F[0]=o[0]-j,F[1]=o[1]-w,F[2]=o[0]+j,F[3]=o[1]+w,f&&this._shiftExtentToFitBounds(F,1/0,O);let I=n.outer;if(p&&6*j>C(p))T(I,p);else if(Math.PI/2-Math.abs(l-Math.PI/2)<=.25*Math.PI)I[0]=F[0]-j,I[1]=F[1]-w,I[2]=F[2]+j,I[3]=F[3]+w;else{x(e.eye,s,X,u),d(Y,o,X);let t=-Math.atan2(Y[1],Y[0])+Math.PI*.125;t<0&&(t+=2*Math.PI);let n=Math.floor(t/(Math.PI*.25));ee(Y,K[n],w*2),Y[0]*=k,Y[2]*=k,te(I,F,Y)}if(f&&this.longitudeCyclical)I[0]=this.longitudeCyclical.clamp(I[0]),I[2]=this.longitudeCyclical.clamp(I[2]),I[1]=Math.max(I[1],-O),I[3]=Math.min(I[3],O);else{let e=E(F,p,Q),t=E(I,p,ce);ne(e,t)&&(I[2]=I[0],I[3]=I[1])}let L=Math.abs(F[2]-F[0])/t;n.mapUnitsPerPixel=Math.max(n.mapUnitsPerPixel,L),n.pixelRatioAdjustment=n.mapUnitsPerPixel/L}_drawOverlays(e=this.view.state){if(!this._drawTexturesDirty&&!this._drawTexturesAnimateDirty)return this.renderer;let t=!this._drawTexturesDirty&&this._drawTexturesAnimateDirty?0:1;this._drawTexturesDirty=this._drawTexturesAnimateDirty=!1;let n=this.renderer.computeValidity();return this.renderer.releaseRenderTargets(t),this.renderer.drawOverlays(e,t),n!==this.renderer.computeValidity()&&(this.groundView.updateOverlayParameters(),this.groundView.requestRender(1)),this.groundView.requestRender(t),t===1&&this.terrainSurface.requestUpdate(),this.renderer}_pointIsInExtent(e,t){if(this.longitudeCyclical)return this.longitudeCyclical.contains(t[0],t[2],e.x)&&e.y>=t[1]&&e.y<=t[3];let n=e.x,r=e.y;return n>t[0]&&n<t[2]&&r>t[1]&&r<t[3]}_shiftExtentToFitBounds(e,t,n){let r=0,i=0;e[0]<-t?r=e[0]+t:e[2]>t&&(r=t-e[2]),e[1]<-n?i=e[1]+n:e[3]>n&&(i=n-e[3]),D(e,r,i)}get test(){}};e([l()],J.prototype,`_spatialReference`,void 0),e([l({readOnly:!0})],J.prototype,`readyToRun`,null),e([l()],J.prototype,`_placementDirty`,void 0),e([l()],J.prototype,`_contentUpdated`,void 0),e([l()],J.prototype,`_isSpherical`,null),e([l()],J.prototype,`mapUnitsToPlanarDistanceRatio`,null),e([l()],J.prototype,`renderer`,void 0),e([l({constructOnly:!0})],J.prototype,`view`,void 0),e([l({constructOnly:!0})],J.prototype,`groundView`,void 0),e([l({constructOnly:!0})],J.prototype,`terrainSurface`,void 0),e([l()],J.prototype,`updating`,null),J=e([u(`esri.views.3d.terrain.OverlayManager`)],J);function oe(e,t){let n=N.ENABLE_OPTIMIZATIONS?1e-5*Math.max(e[2]-e[0],e[3]-e[1],t[2]-t[0],t[3]-t[1]):0;return Math.abs(t[0]-e[0])<=n&&Math.abs(t[1]-e[1])<=n&&Math.abs(t[2]-e[2])<=n&&Math.abs(t[3]-e[3])<=n}class se{constructor(){this.inner=S(),this.outer=S(),this.mapUnitsPerPixel=0,this.pixelRatioAdjustment=1,this.stretch=G}}const Y=y(),X=g(),Z=new se,Q=S(),ce=S(),le=k(),$=new j;export{J as OverlayManager};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{unique as t}from"../../../core/arrayUtils.js";import{EventEmitter as n}from"../../../core/Evented.js";import"../../../core/has.js";import{someMap as r,everyMap as i}from"../../../core/MapUtils.js";import{disposeMaybe as a}from"../../../core/maybe.js";import o from"../../../core/PooledArray.js";import{watch as s,syncAndInitial as c,on as l,initial as u}from"../../../core/reactiveUtils.js";import{someSet as d}from"../../../core/SetUtils.js";import{property as f,subclass as p}from"../../../core/accessorSupport/decorators.js";import{ortho as m,fromTranslation as h}from"../../../core/libs/gl-matrix-2/math/mat4.js";import{set as g}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{ones as _}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{debugFlags as v}from"../support/debugFlags.js";import{Overlay as y}from"./Overlay.js";import{OverlayRenderTargets as b}from"./OverlayRenderTargets.js";import x from"../webgl/RenderCamera.js";import{SyncRenderPlugin as S}from"../webgl-engine/effects/RenderPlugin.js";import{trackHighlightOptions as C,renderHighlightBuffer as w}from"../webgl-engine/effects/highlight/Highlight.js";import{GLMaterialRepository as T}from"../webgl-engine/lib/GLMaterialRepository.js";import{GridLocalOriginFactory as E}from"../webgl-engine/lib/GridLocalOriginFactory.js";import{RenderContext as D,defaultRenderOccludedMask as O}from"../webgl-engine/lib/RenderContext.js";import{ShadowMap as k}from"../webgl-engine/lib/ShadowMap.js";import{T as A}from"../../../chunks/Texture.glsl.js";import{TextureTechnique as j}from"../webgl-engine/lib/TextureTechnique.js";import{TextureTechniqueConfiguration as M}from"../webgl-engine/lib/TextureTechniqueConfiguration.js";import{AmbientLight as N}from"../webgl-engine/lighting/Lightsources.js";import{O as P}from"../../../chunks/OverlayCompositing.glsl.js";import{OverlayCompositingTechnique as F}from"../webgl-engine/shaders/OverlayCompositingTechnique.js";import{TaskPriority as I}from"../../support/Scheduler.js";import{Texture as L}from"../../webgl/Texture.js";import{TextureDescriptor as R}from"../../webgl/TextureDescriptor.js";let z=class extends S{constructor(e){super(e),this._overlays=null,this._renderTargets=null,this._overlayParameters=new P,this.hasHighlights=!1,this.renderOccludedFlags=1,this._hasWater=!1,this._renderers=new Map,this._sortedDrapeSourceRenderersDirty=!1,this._sortedRenderers=new o,this._passParameters=new A,this._screenToMapUnitsRatio=1,this._localOriginFactory=null,this.unloadedMemory=0,this.ignoresMemoryFactor=!1,this._camera=new x,this.events=new n,this.longitudeCyclical=null,this.produces=new Map([[18,e=>e!==10||this.hasHighlights],[19,()=>this._hasWater]]),this._hasTargetWithoutRasterImage=!1,this._hasDrapedFeatureSource=!1,this._hasDrapedRasterSource=!1,this._hasDrapedFlowSource=!1;let{state:t,stage:r}=e.parent.view,i=r.renderer.fboCache,a=r.renderView.renderingContext,s=r.renderView.techniques;this._renderContext=new D(a,new k(i,t.viewingMode),s)}initialize(){let e=this._view,t=e.stage.renderView.waterTextures;this.addHandles([s(()=>t.updating,()=>this.events.emit(`content-changed`),c),s(()=>this._spatialReference,e=>this._localOriginFactory=new E(e),c),l(()=>e.allLayerViews,`after-changes`,()=>this._sortedDrapeSourceRenderersDirty=!0),s(()=>C(e.state.highlights),()=>this._sortedDrapeSourceRenderersDirty=!0,u),s(()=>e.state.highlights,e=>{this._bindParameters.highlights=e},u),e.resourceController.scheduler.registerTask(I.OVERLAY_RENDERER,this)]);let n=this._camera;n.near=1,n.far=1e4,n.relativeElevation=null,this._bindParameters.slot=18,this._bindParameters.camera=n,this._bindParameters.updateLighting(new N(_()),0,0,0)}destroy(){this._renderers.forEach(e=>e.destroy()),this._renderers.clear(),this._passParameters.texture=a(this._passParameters.texture),this.disposeOverlays(),this._renderContext.destroy(),this._sortedRenderers.prune()}get _bindParameters(){return this._renderContext.bind}get _rctx(){return this._stage.renderView.renderingContext}get _view(){return this.parent.view}get _stage(){return this.parent.view.stage}get _spatialReference(){return this.parent.spatialReference}get _techniques(){return this._stage.renderView.techniques}get rctx(){return this._rctx}get materials(){return this._pluginContext.materials}get screenToMapUnitsRatio(){return this._screenToMapUnitsRatio}get mapUnitsToGroundRatio(){return this.parent.mapUnitsToPlanarDistanceRatio*this._bindParameters.planarDistanceToGroundRatio}get localOriginFactory(){return this._localOriginFactory}set overlayStretch(e){this._bindParameters.overlayStretch=e}get overlayStretch(){return this._bindParameters.overlayStretch}set time(e){this._renderContext.time=e}get pluginContext(){return this._pluginContext}initializeRenderContext(e){let t=new T(this._view.stage.renderView.textures,this._techniques,()=>{this._onMaterialOrContentChanged(),this.events.emit(`content-changed`),this.notifyChange(`updating`),this.notifyChange(`isEmpty`)},()=>this.events.emit(`content-changed`));this._pluginContext={...e,materials:t},this._techniques.precompile(F)}uninitializeRenderContext(){}acquireTechniques(){return[]}render(){}get updating(){return this._sortedDrapeSourceRenderersDirty||r(this._renderers,e=>e.updating||e.canCompact)}get hasOverlays(){return this._overlays!=null&&this._renderTargets!=null}getMaterialRenderer(e){for(let t of this._renderers.values()){let n=t.getMaterialRenderer(e);if(n)return n}return null}get layers(){return this._sortedDrapeSourceRenderersDirty&&this._updateSortedDrapeSourceRenderers(),t(this._sortedRenderers.map(e=>e.drapeSource.layer).filter(e=>!!e))}registerDrapeSource(e,t){this._renderers.get(e)?.destroy(),this._renderers.set(e,t),this._sortedDrapeSourceRenderersDirty=!0,`fullOpacity`in e&&this.addHandles(s(()=>e.fullOpacity,()=>this.events.emit(`content-changed`)),e)}removeDrapeSourceRenderer(e){if(e==null)return;let t=this._renderers.get(e);t!=null&&(this._sortedDrapeSourceRenderersDirty=!0,this._renderers.delete(e),this.removeHandles(e),t.destroy())}computeValidity(){return this._renderTargets?.computeValidity()??0}releaseRenderTargets(e){this._renderTargets?.dispose(e)}get overlays(){return this._overlays??[]}ensureDrapeTargets(e){this._hasTargetWithoutRasterImage=this._overlays?d(e,e=>e.drapeTargetType===1):!1}ensureDrapeSources(e){this._overlays?(this._hasDrapedFeatureSource=d(e,e=>e.drapeSourceType===1),this._hasDrapedRasterSource=d(e,e=>e.drapeSourceType===0),this._hasDrapedFlowSource=d(e,e=>e.drapeSourceType===2)):this._hasDrapedFeatureSource=this._hasDrapedRasterSource=this._hasDrapedFlowSource=!1}get _needsColorWithoutRasterImage(){return this._hasDrapedRasterSource&&this._hasDrapedFeatureSource&&this._hasTargetWithoutRasterImage}ensureOverlays(e,t){this._overlays??=(this._renderTargets=new b(this._stage.renderer.fboCache),[new y,new y]),this.ensureDrapeTargets(e),this.ensureDrapeSources(t)}disposeOverlays(){this._overlays=null,this._renderTargets?.dispose(1),this._renderTargets=null,this.events.emit(`textures-disposed`)}_useOverlayColorInsteadOfColorNoRasterImage(e){return e===1&&!this._needsColorWithoutRasterImage&&(this._hasDrapedFeatureSource||this._hasDrapedRasterSource)}getTexture(e){let t=this._useOverlayColorInsteadOfColorNoRasterImage(e);return this._renderTargets?.getTexture(t?0:e)}get readyToRun(){return this.updating}runTask(e){this._processDrapeSources(()=>!0,e)}_onMaterialOrContentChanged(){this.renderOccludedFlags=r(this._renderers,e=>e.hasOccluders)?H:1}_processDrapeSources(e,t){let n=!1;for(let[r,i]of this._renderers){if(t?.done)break;(r.destroyed||e(r))&&i.commitChanges()&&(n=!0,t?.madeProgress())}this._sortedDrapeSourceRenderersDirty&&(this._sortedDrapeSourceRenderersDirty=!1,n=!0,this._updateSortedDrapeSourceRenderers(),t?.madeProgress()),t&&this.compact(t),n&&(this._overlays!=null&&this._renderers.size===0&&this.disposeOverlays(),this.notifyChange(`updating`),this.notifyChange(`isEmpty`),this._onMaterialOrContentChanged(),this.hasHighlights=r(this._renderers,e=>e.hasHighlights),this.events.emit(`content-changed`))}compact(e){let t=!1;for(let n of this._renderers.values()){if(e.done)break;t=n.compact(e)||t}return t&&this.notifyChange(`updating`),t}hasHighlight(e){return r(this._renderers,t=>t.hasHighlight(e))}processSyncDrapeSources(){this._processDrapeSources(e=>e.updatePolicy===1)}get isEmpty(){return!v.OVERLAY_DRAW_DEBUG_TEXTURE&&i(this._renderers,e=>e.isEmpty)}get hasWater(){let e=r(this._renderers,({hasWater:e})=>e);return e!==this._hasWater&&(this._hasWater=e,this.events.emit(`has-water`)),this._hasWater}renders(e){if(v.OVERLAY_DRAW_DEBUG_TEXTURE&&e!==4&&e!==2)return!0;if(!this._overlays)return!1;let t=this._overlays[0];for(let e of this._overlays)e.setupGeometryViews(this.longitudeCyclical);if(!t.hasSomeSizedView())return!1;let n=this._setOutput(this._renderTargets?.targets.find(t=>t.content===e)?.output??0),r=this._bindParameters,i=r.highlightMixTexture;r.output===10&&(r.highlightMixTexture=r.highlights.length>1?this._rctx.emptyTexture:null),++this._techniques.precompiling;let a=this._sortedRenderers.some(({renderer:e})=>e.precompile(this._renderContext));return--this._techniques.precompiling,r.highlightMixTexture=i,this._setOutput(n),a}_setOutput(e){let t=this._bindParameters.output;return this._bindParameters.output=e,this._bindParameters.slot=e===4?19:18,t}get mode(){return this.isEmpty?0:this.hasWater&&this.renders(3)?2:+!!this._renderTargets?.getTexture(0)}updateAnimation(e){let t=!1;return this._renderers.forEach(n=>t=n.updateAnimation(e)||t),t&&this.parent.requestRender(0),t}updateDrapeSourceOrder(){this._sortedDrapeSourceRenderersDirty=!0}precompileShaders(e){if(!this._overlays||!this._renderTargets)return!1;let t=this._bindParameters;t.alignPixelEnabled=e.alignPixelEnabled,++this._techniques.precompiling;for(let e of this._renderTargets.targets){if(e.content===1&&!this._needsColorWithoutRasterImage)continue;let{output:n}=e;this._setOutput(n),n===10&&(t.highlightMixTexture=t.highlights.length>1?this._rctx.emptyTexture:null);let r=this._renderContext.renderOccludedMask;e.content===4&&(this._renderContext.renderOccludedMask=H),this._sortedRenderers.forAll(({drapeSource:t,renderer:n})=>{e.content===1&&t.drapeSourceType===0||e.content===4&&n.hasOnlyOccluders||n.precompile(this._renderContext)}),this._renderContext.renderOccludedMask=r,t.highlightMixTexture=null}return--this._techniques.precompiling,!0}drawOverlays(e,t){if(!this._overlays||!this._renderTargets)return;for(let e of this._overlays)e.setupGeometryViews(this.longitudeCyclical);this._bindParameters.alignPixelEnabled=e.alignPixelEnabled;let n=this.allSourcesOccluders;for(let e of this._renderTargets.targets){if(!(e.content===0&&this._hasDrapedFlowSource)&&!e.handleRenderRequest(t)||e.content===1&&!this._needsColorWithoutRasterImage||e.content===4&&n)continue;let r=this._drawTarget(0,e),i=this._drawTarget(1,e);(r||i)&&e.fbo.generateMipMap()}}_drawTarget(e,t){let n=this._overlays[e],r=n.canvasGeometries;if(r.numViews===0)return!1;let i=this._view.state.contentPixelRatio;this._screenToMapUnitsRatio=i*n.mapUnitsPerPixel/this._bindParameters.overlayStretch;let{output:a,content:o}=t;if(this.isEmpty||a===4&&!this.hasWater||!n.hasSomeSizedView())return!1;let{_rctx:s,_camera:c,_renderContext:l,_bindParameters:u}=this;if(c.pixelRatio=n.pixelRatio*i,this._setOutput(a),u.screenToMapUnitsRatio=this._screenToMapUnitsRatio,u.screenToPlanarDistanceRatio=this._screenToMapUnitsRatio*this.parent.mapUnitsToPlanarDistanceRatio,o===4&&(l.renderOccludedMask=H),!this.renders(o))return l.renderOccludedMask=O,!1;let{resolution:d}=n,f=e===0,p=f?0:d;if(s.setViewport(p,0,d,d),this._bindTargetFBO(t),f&&(a===10?s.gl.clearBufferuiv(s.gl.COLOR,0,[0,0,0,0]):(s.setClearColor(0,0,0,0),s.clear(16384))),v.OVERLAY_DRAW_DEBUG_TEXTURE&&o!==4&&o!==2){this._techniques.precompile(j,U);let t=this._techniques.get(j,U);for(let i=0;i<r.numViews;i++)this._setViewParameters(r.extents[i],n),this._ensureDebugPatternResources(n.resolution,V[e]),s.bindTechnique(t,u,this._passParameters),s.screen.draw()}if(a===10){let{fboCache:n}=this._stage.renderer,r=this._resolution;this._bindTargetFBO(t),w(s,n,r,r,u,()=>this._renderAllGeometry(e,t),p)}else this._renderAllGeometry(e,t);return s.bindFramebuffer(null),l.renderOccludedMask=O,!0}get allSourcesOccluders(){return i(this._renderers,e=>e.hasOnlyOccluders)}_renderAllGeometry(e,t){let n=this._overlays[e],r=n.canvasGeometries;this._sortedRenderers.forAll(({drapeSource:i,renderer:a})=>{if(t.content===1&&i.drapeSourceType===0)return;let{fullOpacity:o}=i,s=o!=null&&o<1&&t.output===0&&this._bindTemporaryFBO();for(let e=0;e<r.numViews;e++)this._setViewParameters(r.extents[e],n),a.render(this._renderContext);if(s){this._bindTargetFBO(t),this._overlayParameters.texture=s.getTexture(),this._overlayParameters.opacity=o,this._overlayParameters.overlayIndex=e;let n=this._techniques.get(F);this._rctx.bindTechnique(n,this._bindParameters,this._overlayParameters),this._rctx.screen.draw(),s.release()}})}_bindTargetFBO(e){let t=this._resolution,n=2*t;e.fbo.ensureFramebuffer(n,t),e.fbo.bind(this._rctx)}_bindTemporaryFBO(){let e=this._resolution,t=2*e,n=this._stage.renderer.fboCache,r=n.acquire(t,e,`overlay tmp`);return n.rctx.bindFramebuffer(r.fbo),n.rctx.clear(16384),r}get _resolution(){return this._overlays?.[0].resolution??0}notifyContentChanged(){this.events.emit(`content-changed`)}intersectRay(e,t,n,r){this._sortedDrapeSourceRenderersDirty&&this._updateSortedDrapeSourceRenderers();let i=0;for(let{renderer:a}of this._sortedRenderers)i=a.intersectRay?.(e,t,n,r,i)??i}*intersectScreenPolygon(e,t,n){this._sortedDrapeSourceRenderersDirty&&this._updateSortedDrapeSourceRenderers();let r=0;for(let{renderer:i}of this._sortedRenderers)r=yield*i.intersectScreenPolygon(e,t,n,r)}_updateSortedDrapeSourceRenderers(){if(this._sortedRenderers.clear(),this._renderers.size===0)return;let e=this._view.map.allLayers.map(e=>e.uid),t=e.length;this._renderers.forEach((n,r)=>{let i=e.indexOf(r.layer?.uid),a=i>=0,o=r.renderGroup??+!a,s=r.drapeSourcePriorityOffset??0,c=t*o+(a?i:0)+s;this._sortedRenderers.push(new B(r,n,c))}),this._sortedRenderers.sort((e,t)=>e.index-t.index)}_setViewParameters(e,t){let n=this._camera;n.viewport=[0,0,t.resolution,t.resolution],this._bindParameters.planarDistanceToGroundRatio=this.parent.getPlanarDistanceToGroundRatio((e[1]+e[3])*.5),m(n.projectionMatrix,0,e[2]-e[0],0,e[3]-e[1],n.near,n.far),h(n.viewMatrix,[-e[0],-e[1],0])}_ensureDebugPatternResources(e,t){if(g(this._passParameters.color,t[0],t[1],t[2]),this._passParameters.texture)return;let n=new Uint8Array(e*e*4),r=0;for(let t=0;t<e;t++)for(let i=0;i<e;i++){let a=Math.floor(i/10),o=Math.floor(t/10);a<2||o<2||a*10>e-20||o*10>e-20?(n[r++]=255,n[r++]=255,n[r++]=255,n[r++]=255):(n[r++]=255,n[r++]=255,n[r++]=255,a&1&&o&1?n[r++]=i&1^t&1?0:255:n[r++]=a&1^o&1?0:128)}let i=new R(e);i.samplingMode=9728,this._passParameters.texture=new L(this._rctx,i,n)}get test(){}};e([f()],z.prototype,`hasHighlights`,void 0),e([f()],z.prototype,`renderOccludedFlags`,void 0),e([f()],z.prototype,`_sortedDrapeSourceRenderersDirty`,void 0),e([f({constructOnly:!0})],z.prototype,`parent`,void 0),e([f({readOnly:!0})],z.prototype,`_techniques`,null),e([f({type:Boolean,readOnly:!0})],z.prototype,`updating`,null),e([f()],z.prototype,`isEmpty`,null),z=e([p(`esri.views.3d.terrain.OverlayRenderer`)],z);class B{constructor(e,t,n){this.drapeSource=e,this.renderer=t,this.index=n}}const V=[[1,.5,.5],[.5,.5,1]],H=4,U=new M;U.hasAlpha=!0;export{z as OverlayRenderer,H as overlayRenderOccludedFlag};
2
+ import{__decorate as e}from"tslib";import{unique as t}from"../../../core/arrayUtils.js";import{EventEmitter as n}from"../../../core/Evented.js";import"../../../core/has.js";import{someMap as r,everyMap as i}from"../../../core/MapUtils.js";import{disposeMaybe as a}from"../../../core/maybe.js";import o from"../../../core/PooledArray.js";import{watch as s,syncAndInitial as c,on as l,initial as u}from"../../../core/reactiveUtils.js";import{someSet as d}from"../../../core/SetUtils.js";import{property as f,subclass as p}from"../../../core/accessorSupport/decorators.js";import{ortho as m,fromTranslation as h}from"../../../core/libs/gl-matrix-2/math/mat4.js";import{set as g}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{ones as _}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{debugFlags as v}from"../support/debugFlags.js";import{Overlay as y}from"./Overlay.js";import{OverlayRenderTargets as b}from"./OverlayRenderTargets.js";import x from"../webgl/RenderCamera.js";import{SyncRenderPlugin as S}from"../webgl-engine/effects/RenderPlugin.js";import{renderHighlightBuffer as C}from"../webgl-engine/effects/highlight/Highlight.js";import{GLMaterialRepository as w}from"../webgl-engine/lib/GLMaterialRepository.js";import{GridLocalOriginFactory as T}from"../webgl-engine/lib/GridLocalOriginFactory.js";import{RenderContext as E,defaultRenderOccludedMask as D}from"../webgl-engine/lib/RenderContext.js";import{ShadowMap as O}from"../webgl-engine/lib/ShadowMap.js";import{T as k}from"../../../chunks/Texture.glsl.js";import{TextureTechnique as A}from"../webgl-engine/lib/TextureTechnique.js";import{TextureTechniqueConfiguration as j}from"../webgl-engine/lib/TextureTechniqueConfiguration.js";import{AmbientLight as M}from"../webgl-engine/lighting/Lightsources.js";import{O as N}from"../../../chunks/OverlayCompositing.glsl.js";import{OverlayCompositingTechnique as P}from"../webgl-engine/shaders/OverlayCompositingTechnique.js";import{TaskPriority as F}from"../../support/Scheduler.js";import{Texture as I}from"../../webgl/Texture.js";import{TextureDescriptor as L}from"../../webgl/TextureDescriptor.js";let R=class extends S{constructor(e){super(e),this._overlays=null,this._renderTargets=null,this._overlayParameters=new N,this.hasHighlights=!1,this.renderOccludedFlags=1,this._hasWater=!1,this._renderers=new Map,this._sortedDrapeSourceRenderersDirty=!1,this._sortedRenderers=new o,this._passParameters=new k,this._screenToMapUnitsRatio=1,this._localOriginFactory=null,this.unloadedMemory=0,this.ignoresMemoryFactor=!1,this._camera=new x,this.events=new n,this.longitudeCyclical=null,this.produces=new Map([[18,e=>e!==10||this.hasHighlights],[19,()=>this._hasWater]]),this._hasTargetWithoutRasterImage=!1,this._hasDrapedFeatureSource=!1,this._hasDrapedRasterSource=!1,this._hasDrapedFlowSource=!1;let{state:t,stage:r}=e.parent.view,i=r.renderer.fboCache,a=r.renderView.renderingContext,s=r.renderView.techniques;this._renderContext=new E(a,new O(i,t.viewingMode),s)}initialize(){let e=this._view,t=e.stage.renderView.waterTextures;this.addHandles([s(()=>t.updating,()=>this.events.emit(`content-changed`),c),s(()=>this._spatialReference,e=>this._localOriginFactory=new T(e),c),l(()=>e.allLayerViews,`after-changes`,()=>this._sortedDrapeSourceRenderersDirty=!0),s(()=>this._highlightsString,()=>this._sortedDrapeSourceRenderersDirty=!0,u),s(()=>e.state.highlights,e=>this._bindParameters.highlights=e,u),e.resourceController.scheduler.registerTask(F.OVERLAY_RENDERER,this)]);let n=this._camera;n.near=1,n.far=1e4,n.relativeElevation=null,this._bindParameters.slot=18,this._bindParameters.camera=n,this._bindParameters.updateLighting(new M(_()),0,0,0)}destroy(){this._renderers.forEach(e=>e.destroy()),this._renderers.clear(),this._passParameters.texture=a(this._passParameters.texture),this.disposeOverlays(),this._renderContext.destroy(),this._sortedRenderers.prune()}get _bindParameters(){return this._renderContext.bind}get _rctx(){return this._stage.renderView.renderingContext}get _view(){return this.parent.view}get _stage(){return this.parent.view.stage}get _spatialReference(){return this.parent.spatialReference}get _techniques(){return this._stage.renderView.techniques}get rctx(){return this._rctx}get materials(){return this._pluginContext.materials}get screenToMapUnitsRatio(){return this._screenToMapUnitsRatio}get mapUnitsToGroundRatio(){return this.parent.mapUnitsToPlanarDistanceRatio*this._bindParameters.planarDistanceToGroundRatio}get localOriginFactory(){return this._localOriginFactory}set overlayStretch(e){this._bindParameters.overlayStretch=e}get overlayStretch(){return this._bindParameters.overlayStretch}get _highlightsString(){return JSON.stringify(this._view.state.highlights.reduce((e,t)=>e+`:`+JSON.stringify(t.toJSON()),``))}set time(e){this._renderContext.time=e}get pluginContext(){return this._pluginContext}initializeRenderContext(e){let t=new w(this._view.stage.renderView.textures,this._techniques,()=>{this._onMaterialOrContentChanged(),this.events.emit(`content-changed`),this.notifyChange(`updating`),this.notifyChange(`isEmpty`)},()=>this.events.emit(`content-changed`));this._pluginContext={...e,materials:t},this._techniques.precompile(P)}uninitializeRenderContext(){}acquireTechniques(){return[]}render(){}get updating(){return this._sortedDrapeSourceRenderersDirty||r(this._renderers,e=>e.updating||e.canCompact)}get hasOverlays(){return this._overlays!=null&&this._renderTargets!=null}getMaterialRenderer(e){for(let t of this._renderers.values()){let n=t.getMaterialRenderer(e);if(n)return n}return null}get layers(){return this._sortedDrapeSourceRenderersDirty&&this._updateSortedDrapeSourceRenderers(),t(this._sortedRenderers.map(e=>e.drapeSource.layer).filter(e=>!!e))}registerDrapeSource(e,t){this._renderers.get(e)?.destroy(),this._renderers.set(e,t),this._sortedDrapeSourceRenderersDirty=!0,`fullOpacity`in e&&this.addHandles(s(()=>e.fullOpacity,()=>this.events.emit(`content-changed`)),e)}removeDrapeSourceRenderer(e){if(e==null)return;let t=this._renderers.get(e);t!=null&&(this._sortedDrapeSourceRenderersDirty=!0,this._renderers.delete(e),this.removeHandles(e),t.destroy())}computeValidity(){return this._renderTargets?.computeValidity()??0}releaseRenderTargets(e){this._renderTargets?.dispose(e)}get overlays(){return this._overlays??[]}ensureDrapeTargets(e){this._hasTargetWithoutRasterImage=this._overlays?d(e,e=>e.drapeTargetType===1):!1}ensureDrapeSources(e){this._overlays?(this._hasDrapedFeatureSource=d(e,e=>e.drapeSourceType===1),this._hasDrapedRasterSource=d(e,e=>e.drapeSourceType===0),this._hasDrapedFlowSource=d(e,e=>e.drapeSourceType===2)):this._hasDrapedFeatureSource=this._hasDrapedRasterSource=this._hasDrapedFlowSource=!1}get _needsColorWithoutRasterImage(){return this._hasDrapedRasterSource&&this._hasDrapedFeatureSource&&this._hasTargetWithoutRasterImage}ensureOverlays(e,t){this._overlays??=(this._renderTargets=new b(this._stage.renderer.fboCache),[new y,new y]),this.ensureDrapeTargets(e),this.ensureDrapeSources(t)}disposeOverlays(){this._overlays=null,this._renderTargets?.dispose(1),this._renderTargets=null,this.events.emit(`textures-disposed`)}_useOverlayColorInsteadOfColorNoRasterImage(e){return e===1&&!this._needsColorWithoutRasterImage&&(this._hasDrapedFeatureSource||this._hasDrapedRasterSource)}getTexture(e){let t=this._useOverlayColorInsteadOfColorNoRasterImage(e);return this._renderTargets?.getTexture(t?0:e)}get readyToRun(){return this.updating}runTask(e){this._processDrapeSources(()=>!0,e)}_onMaterialOrContentChanged(){this.renderOccludedFlags=r(this._renderers,e=>e.hasOccluders)?V:1}_processDrapeSources(e,t){let n=!1;for(let[r,i]of this._renderers){if(t?.done)break;(r.destroyed||e(r))&&i.commitChanges()&&(n=!0,t?.madeProgress())}this._sortedDrapeSourceRenderersDirty&&(this._sortedDrapeSourceRenderersDirty=!1,n=!0,this._updateSortedDrapeSourceRenderers(),t?.madeProgress()),t&&this.compact(t),n&&(this._overlays!=null&&this._renderers.size===0&&this.disposeOverlays(),this.notifyChange(`updating`),this.notifyChange(`isEmpty`),this._onMaterialOrContentChanged(),this.hasHighlights=r(this._renderers,e=>e.hasHighlights),this.events.emit(`content-changed`))}compact(e){let t=!1;for(let n of this._renderers.values()){if(e.done)break;t=n.compact(e)||t}return t&&this.notifyChange(`updating`),t}hasHighlight(e){return r(this._renderers,t=>t.hasHighlight(e))}processSyncDrapeSources(){this._processDrapeSources(e=>e.updatePolicy===1)}get isEmpty(){return!v.OVERLAY_DRAW_DEBUG_TEXTURE&&i(this._renderers,e=>e.isEmpty)}get hasWater(){let e=r(this._renderers,({hasWater:e})=>e);return e!==this._hasWater&&(this._hasWater=e,this.events.emit(`has-water`)),this._hasWater}renders(e){if(v.OVERLAY_DRAW_DEBUG_TEXTURE&&e!==4&&e!==2)return!0;if(!this._overlays)return!1;let t=this._overlays[0];for(let e of this._overlays)e.setupGeometryViews(this.longitudeCyclical);if(!t.hasSomeSizedView())return!1;let n=this._setOutput(this._renderTargets?.targets.find(t=>t.content===e)?.output??0),r=this._bindParameters,i=r.highlightMixTexture;r.output===10&&(r.highlightMixTexture=r.highlights.length>1?this._rctx.emptyTexture:null),++this._techniques.precompiling;let a=this._sortedRenderers.some(({renderer:e})=>e.precompile(this._renderContext));return--this._techniques.precompiling,r.highlightMixTexture=i,this._setOutput(n),a}_setOutput(e){let t=this._bindParameters.output;return this._bindParameters.output=e,this._bindParameters.slot=e===4?19:18,t}get mode(){return this.isEmpty?0:this.hasWater&&this.renders(3)?2:+!!this._renderTargets?.getTexture(0)}updateAnimation(e){let t=!1;return this._renderers.forEach(n=>t=n.updateAnimation(e)||t),t&&this.parent.requestRender(0),t}updateDrapeSourceOrder(){this._sortedDrapeSourceRenderersDirty=!0}precompileShaders(e){if(!this._overlays||!this._renderTargets)return!1;let t=this._bindParameters;t.alignPixelEnabled=e.alignPixelEnabled,++this._techniques.precompiling;for(let e of this._renderTargets.targets){if(e.content===1&&!this._needsColorWithoutRasterImage)continue;let{output:n}=e;this._setOutput(n),n===10&&(t.highlightMixTexture=t.highlights.length>1?this._rctx.emptyTexture:null);let r=this._renderContext.renderOccludedMask;e.content===4&&(this._renderContext.renderOccludedMask=V),this._sortedRenderers.forAll(({drapeSource:t,renderer:n})=>{e.content===1&&t.drapeSourceType===0||e.content===4&&n.hasOnlyOccluders||n.precompile(this._renderContext)}),this._renderContext.renderOccludedMask=r,t.highlightMixTexture=null}return--this._techniques.precompiling,!0}drawOverlays(e,t){if(!this._overlays||!this._renderTargets)return;for(let e of this._overlays)e.setupGeometryViews(this.longitudeCyclical);this._bindParameters.alignPixelEnabled=e.alignPixelEnabled;let n=this.allSourcesOccluders;for(let e of this._renderTargets.targets){if(!(e.content===0&&this._hasDrapedFlowSource)&&!e.handleRenderRequest(t)||e.content===1&&!this._needsColorWithoutRasterImage||e.content===4&&n)continue;let r=this._drawTarget(0,e),i=this._drawTarget(1,e);(r||i)&&e.fbo.generateMipMap()}}_drawTarget(e,t){let n=this._overlays[e],r=n.canvasGeometries;if(r.numViews===0)return!1;let i=this._view.state.contentPixelRatio;this._screenToMapUnitsRatio=i*n.mapUnitsPerPixel/this._bindParameters.overlayStretch;let{output:a,content:o}=t;if(this.isEmpty||a===4&&!this.hasWater||!n.hasSomeSizedView())return!1;let{_rctx:s,_camera:c,_renderContext:l,_bindParameters:u}=this;if(c.pixelRatio=n.pixelRatio*i,this._setOutput(a),u.screenToMapUnitsRatio=this._screenToMapUnitsRatio,u.screenToPlanarDistanceRatio=this._screenToMapUnitsRatio*this.parent.mapUnitsToPlanarDistanceRatio,o===4&&(l.renderOccludedMask=V),!this.renders(o))return l.renderOccludedMask=D,!1;let{resolution:d}=n,f=e===0,p=f?0:d;if(s.setViewport(p,0,d,d),this._bindTargetFBO(t),f&&(a===10?s.gl.clearBufferuiv(s.gl.COLOR,0,[0,0,0,0]):(s.setClearColor(0,0,0,0),s.clear(16384))),v.OVERLAY_DRAW_DEBUG_TEXTURE&&o!==4&&o!==2){this._techniques.precompile(A,H);let t=this._techniques.get(A,H);for(let i=0;i<r.numViews;i++)this._setViewParameters(r.extents[i],n),this._ensureDebugPatternResources(n.resolution,B[e]),s.bindTechnique(t,u,this._passParameters),s.screen.draw()}if(a===10){let{fboCache:n}=this._stage.renderer,r=this._resolution;this._bindTargetFBO(t),C(s,n,r,r,u,()=>this._renderAllGeometry(e,t),p)}else this._renderAllGeometry(e,t);return s.bindFramebuffer(null),l.renderOccludedMask=D,!0}get allSourcesOccluders(){return i(this._renderers,e=>e.hasOnlyOccluders)}_renderAllGeometry(e,t){let n=this._overlays[e],r=n.canvasGeometries;this._sortedRenderers.forAll(({drapeSource:i,renderer:a})=>{if(t.content===1&&i.drapeSourceType===0)return;let{fullOpacity:o}=i,s=o!=null&&o<1&&t.output===0&&this._bindTemporaryFBO();for(let e=0;e<r.numViews;e++)this._setViewParameters(r.extents[e],n),a.render(this._renderContext);if(s){this._bindTargetFBO(t),this._overlayParameters.texture=s.getTexture(),this._overlayParameters.opacity=o,this._overlayParameters.overlayIndex=e;let n=this._techniques.get(P);this._rctx.bindTechnique(n,this._bindParameters,this._overlayParameters),this._rctx.screen.draw(),s.release()}})}_bindTargetFBO(e){let t=this._resolution,n=2*t;e.fbo.ensureFramebuffer(n,t),e.fbo.bind(this._rctx)}_bindTemporaryFBO(){let e=this._resolution,t=2*e,n=this._stage.renderer.fboCache,r=n.acquire(t,e,`overlay tmp`);return n.rctx.bindFramebuffer(r.fbo),n.rctx.clear(16384),r}get _resolution(){return this._overlays?.[0].resolution??0}notifyContentChanged(){this.events.emit(`content-changed`)}intersectRay(e,t,n,r){this._sortedDrapeSourceRenderersDirty&&this._updateSortedDrapeSourceRenderers();let i=0;for(let{renderer:a}of this._sortedRenderers)i=a.intersectRay?.(e,t,n,r,i)??i}*intersectScreenPolygon(e,t,n){this._sortedDrapeSourceRenderersDirty&&this._updateSortedDrapeSourceRenderers();let r=0;for(let{renderer:i}of this._sortedRenderers)r=yield*i.intersectScreenPolygon(e,t,n,r)}_updateSortedDrapeSourceRenderers(){if(this._sortedRenderers.clear(),this._renderers.size===0)return;let e=this._view.map.allLayers.map(e=>e.uid),t=e.length;this._renderers.forEach((n,r)=>{let i=e.indexOf(r.layer?.uid),a=i>=0,o=r.renderGroup??+!a,s=r.drapeSourcePriorityOffset??0,c=t*o+(a?i:0)+s;this._sortedRenderers.push(new z(r,n,c))}),this._sortedRenderers.sort((e,t)=>e.index-t.index)}_setViewParameters(e,t){let n=this._camera;n.viewport=[0,0,t.resolution,t.resolution],this._bindParameters.planarDistanceToGroundRatio=this.parent.getPlanarDistanceToGroundRatio((e[1]+e[3])*.5),m(n.projectionMatrix,0,e[2]-e[0],0,e[3]-e[1],n.near,n.far),h(n.viewMatrix,[-e[0],-e[1],0])}_ensureDebugPatternResources(e,t){if(g(this._passParameters.color,t[0],t[1],t[2]),this._passParameters.texture)return;let n=new Uint8Array(e*e*4),r=0;for(let t=0;t<e;t++)for(let i=0;i<e;i++){let a=Math.floor(i/10),o=Math.floor(t/10);a<2||o<2||a*10>e-20||o*10>e-20?(n[r++]=255,n[r++]=255,n[r++]=255,n[r++]=255):(n[r++]=255,n[r++]=255,n[r++]=255,a&1&&o&1?n[r++]=i&1^t&1?0:255:n[r++]=a&1^o&1?0:128)}let i=new L(e);i.samplingMode=9728,this._passParameters.texture=new I(this._rctx,i,n)}get test(){}};e([f()],R.prototype,`hasHighlights`,void 0),e([f()],R.prototype,`renderOccludedFlags`,void 0),e([f()],R.prototype,`_sortedDrapeSourceRenderersDirty`,void 0),e([f({constructOnly:!0})],R.prototype,`parent`,void 0),e([f({readOnly:!0})],R.prototype,`_techniques`,null),e([f()],R.prototype,`_highlightsString`,null),e([f({type:Boolean,readOnly:!0})],R.prototype,`updating`,null),e([f()],R.prototype,`isEmpty`,null),R=e([p(`esri.views.3d.terrain.OverlayRenderer`)],R);class z{constructor(e,t,n){this.drapeSource=e,this.renderer=t,this.index=n}}const B=[[1,.5,.5],[.5,.5,1]],V=4,H=new j;H.hasAlpha=!0;export{R as OverlayRenderer,V as overlayRenderOccludedFlag};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import has from"../../../core/has.js";import{disposeMaybe as t}from"../../../core/maybe.js";import{MemCachePool as n}from"../../../core/MemCachePool.js";import r from"../../../core/ObjectPool.js";import{watch as i,sync as a}from"../../../core/reactiveUtils.js";import{property as o,subclass as s}from"../../../core/accessorSupport/decorators.js";import{subtract as c,set as l,dot as u}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{ZEROS as d,fromValues as f,create as p}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromValues as m,ZEROS as h}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{create as g,set as _}from"../../../geometry/support/aaBoundingBox.js";import{BufferViewVec3f as v}from"../../../geometry/support/buffer/BufferView.js";import{overlayRenderOccludedFlag as y}from"./OverlayRenderer.js";import{PatchRenderData as b}from"./PatchRenderData.js";import{TerrainAttributesCache as x}from"./TerrainAttributesCache.js";import{enableTerrainInternalChecks as S}from"./terrainUtils.js";import{TileRenderer as C}from"./TileRenderer.js";import{IteratorPreorder as w,fallsWithinLayerView as T,usesStencil as E,sortTiles as D,compareTiles as O}from"./tileUtils.js";import{getOverlayContentForOutputTerrain as k}from"../webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{SyncRenderPlugin as A}from"../webgl-engine/effects/RenderPlugin.js";import{Vertices as j}from"../webgl-engine/lib/Attribute.js";import{IntersectorResultRay as M}from"../webgl-engine/lib/IntersectorResult.js";import{intersectAabbInvDirBefore as N,MeshIntersectionOptions as P,intersectTriangles as F}from"../webgl-engine/lib/RayIntersections.js";import{TriangleIntersectionData as I}from"../webgl-engine/lib/TriangleIntersectionData.js";import{terrainId as L,getVerticalOffsetTerrain as R}from"../webgl-engine/lib/verticalOffsetUtils.js";import{DrawParameters as z}from"../webgl-engine/materials/DrawParameters.js";import{hasShadowHighlights as B}from"../webgl-engine/shaders/ReceiveShadowsConfiguration.js";import{T as V}from"../../../chunks/Terrain.glsl.js";import{TerrainTechnique as H}from"../webgl-engine/shaders/TerrainTechnique.js";import{TerrainTechniqueConfiguration as U}from"../webgl-engine/shaders/TerrainTechniqueConfiguration.js";import{PrimitiveType as W}from"../../webgl/enums.js";const G=g();let K=class extends A{get visibleTiles(){return Array.from(this._visiblePatchesByOrigin.values()).flat()}get _isGlobal(){return this._view.stage.viewingMode===1}get _techniques(){return this._context.techniques}get _rctx(){return this._context.renderContext.rctx}get renderOccludedFlags(){return this._overlayRenderer.renderOccludedFlags}constructor(e,t,i,a,o){super({}),this._surface=e,this._overlayRenderer=t,this._allTiles=i,this._compressionTracker=a,this.type=7,this.isGround=!0,this._passParameters=new V,this._drawParameters=new z,this._renderDataPool=new r(()=>new b),this._visiblePatchesByOrigin=new Map,this._allPatchesByOrigin=new Map,this._patchesByOriginDirty=!0,this._patchSortingDirty=!0,this._tileIterator=new w,this._castShadows=!1,this._inViewshed=!1,this._cutFillEnabled=!1,this._tileRenderer=null,this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0,this.produces=new Map([[1,()=>this._desiredSlot===1],[7,()=>this._desiredSlot===7],[9,()=>this._produces()&&this.renderOccludedFlags===y]]),this._tileSize=256,this._configuration=new U(e.isGlobal),this._tileTextureCache=new n((e,t)=>o.newCache(e,t),`TileTexture`),this.tileGeometryCache=new x(o)}normalizeCtorArgs(){return{}}initialize(){this.addHandles(i(()=>this._overlayRenderer.renderOccludedFlags,()=>this.requestRender(),a))}destroy(){this._tileTextureCache.destroy(),this.tileGeometryCache.destroy(),this._allTiles.prune(),this._tileRenderer=null}_produces(){return this.visible&&!!this._rootTiles&&!this.renderingDisabled}set renderingDisabled(e){this._set(`renderingDisabled`,!!e),this.setDirty()}set visible(e){this._set(`visible`,!!e),this.setDirty()}updateHeading(e){this._tileRenderer?.updateHeading(e)}set transparency(e){this._configuration.transparencyMode!==e&&(this._configuration.transparencyMode=e,this.requestRender())}get transparency(){return this._configuration.transparencyMode}get renderPatchBorders(){return this._configuration.tileBorders}set renderPatchBorders(e){this._configuration.tileBorders!==e&&(this._configuration.tileBorders=e,this.requestRender(),this.notifyChange(`renderPatchBorders`))}get layerViewUid(){return L}get slicePlaneEnabled(){return this._configuration.hasSlicePlane}set slicePlaneEnabled(e){this._configuration.hasSlicePlane!==e&&(this._configuration.hasSlicePlane=e,this.requestRender())}set textureFadingEnabled(e){this._configuration.textureFadingEnabled!==e&&(this._configuration.textureFadingEnabled=e,this.requestRender())}set pbrMode(e){this._configuration.pbrMode!==e&&(this._configuration.pbrMode=e,this.requestRender())}setRootTiles(e){this._rootTiles=e,this.setDirty()}setStencilEnabledLayerExtents(e){this._stencilEnabledLayerExtents=e,this._setSortingDirty()}set tileSize(e){this._tileSize=e,this._tileRenderer!=null&&(this._tileRenderer.tileSize=e),this.setDirty()}get tileSize(){return this._tileSize}_ensureRenderData(e){e.renderData||(e.renderData=this._renderDataPool.acquire(),e.renderData.init(e,this._getLocalOriginOfTile(e)))}loadTile(e){this._ensureRenderData(e),this.updateTileGeometryState(e),this.reuseTextureFromParent(e)||this.updateTileTexture(e,32)}reuseTextureFromParent(e){let{parent:t}=e;if(!this._canReuseTextureFromParent(t,e))return!1;let n=m(e.lij[2]&1?.5:0,e.lij[1]&1?0:.5,.5,.5);return t.renderData?.reuseTexture(e.renderData,n)??!1}_canReuseTextureFromParent(e,t){if(!e)return!1;let{layerInfo:n,surface:r}=t;for(let i=0;i<n[1].length;i++){let n=r.layerViewByIndex(i,1);if(T(e,n)!==T(t,n))return!1}return!0}updateTileTexture(e,t){if(this._tileRenderer!=null){let n=t===32?0:2;if(!this._tileRenderer.updateTileTexture(e,n))return e.updateRenderData(1,n),!1;this.requestRender(),e.resetPendingUpdate(t)}return!0}updateTileGeometryState(e){for(let t of e.layerInfo[0])t.pendingUpdates&=-9;e.resetPendingUpdate(8);let t=e.renderData.updateGeometryState();return this._surface.updateElevationSources(e),t&&this.setDirty(),t}updateGeometryIfNeeded(e){e.loaded&&e.renderData.updateGeometryIfNeeded(this._rctx)}unloadTile(e){let t=e.renderData;t&&(t.releaseGeometry(),this._renderDataPool.release(t),t.clear(),e.renderData=null,e.setMemoryDirty(),this.setDirty())}_getLocalOriginOfTile(e){let t=Math.max(0,Math.floor((e.level-3)/7)*7);if(this._isGlobal&&t===0)return d;for(;e.parent&&e.level>t;)e=e.parent;return e.centerAtSeaLevel}getStats(){return{numTilesRendered:this._numTilesRendered,numTilesCulled:this._numTilesCulled,numOriginsRendered:this._numOriginsRendered}}set wireframe(e){this._get(`wireframe`)!==e&&(this._set(`wireframe`,e),this.requestRender())}setDirty(e=1){this._patchesByOriginDirty=!0,this._context.requestRender(e)}_setSortingDirty(e=1){this._patchSortingDirty=!0,this._context.requestRender(e)}requestRender(e=1){this._context.requestRender(e)}initializeRenderContext(e){this._context=e,this._tileRenderer=new C(this._surface,this._rctx,this._tileSize,this._techniques,this._tileTextureCache,this._compressionTracker),this.updateTileBackground()}uninitializeRenderContext(){this._tileRenderer=t(this._tileRenderer)}intersectRay(e,t,n,r){let i=this._rootTiles;if(!i||e.options.selectOpaqueTerrainOnly&&e.options.selectionMode&&this.transparency!==0)return;let a=q,o=J;c(a,r,n),l(o,1/a[0],1/a[1],1/a[2]);let s=e.results.min,d=e.results.max,f=e.results.ground,p=e.options.store===0,m=!!e.results.ground.target,h=R(e.verticalOffset),g=e.tolerance,y,b=p&&s.distance!=null?s.distance:1/0,x=e.options,S=x.normalRequired||!x.backfacesTerrain,C=new P(g,!1,S),w=i=>{let l=i.renderData;if(!l?.vao)return;let m=l.geometry;_(G,m.boundingBox);let w=l.localOrigin;if(h!=null&&(h.localOrigin=w,h.applyToAabb(G)),Y[0]=n[0]-w[0],Y[1]=n[1]-w[1],Y[2]=n[2]-w[2],!N(G,Y,o,g,b))return;let T=(e,t,n,r)=>{e.set(this.type,i,t,n,r),b=p&&s.renderDistance!=null?s.renderDistance:1/0},E=(i,o,c)=>{(!S||c!=null)&&o>=0&&(x.backfacesTerrain||u(c,a)<0)&&(x.invisibleTerrain||!x.selectionMode||t==null||t(n,r,o))&&((f.renderDistance==null||o<f.renderDistance)&&T(f,i,o,c),x.isFiltered||(x.store===2&&(y==null?(y=new M(e.ray),T(y,i,o,c),e.results.all.push(y)):o<y.renderDistance&&T(y,i,o,c)),(s.renderDistance==null||o<s.renderDistance)&&T(s,i,o,c),x.store!==0&&(d.renderDistance==null||o>d.renderDistance)&&T(d,i,o,c)))},D=X;c(D,r,w);let{indices:O,indexCount:k}=m,A=m.vertexAttributes,P=A.getField(`position`,v),L=new j(P.typedBuffer,3,A.stride/4),R=k/3;!h&&R>200?(l.intersectionData??=new I(O,R,L),l.intersectionData.intersectRay(Y,D,C,E)):F(Y,D,0,R,(e,t)=>P.getVec(O[t],e),h,C,E)},T=this._tileIterator;T.reset(i);let D=e.options.invisibleTerrain;for(let e=T.next();e;e=T.next())(e.visible||D&&e.intersectsClippingArea)&&(h!=null||e.intersectsRay(n,a,g,b))&&(!m||!E(e,this._stencilEnabledLayerExtents))?w(e):T.skipSubtree()}processScaleRangeQueries(e,t){if(!t.done&&e)for(this._updatePatchGroups();e.updating&&!t.done;){e.prepare();for(let t of this._visiblePatchesByOrigin.values())for(let n of t)n.renderData?.textureReference!=null&&e.queriesForTile(n);e.process(),t.madeProgress()}}get _view(){return this._surface.view}get _desiredSlot(){if(!this._produces())return null;switch(this.transparency){case 0:return 1;case 1:case 2:return 7;case 3:case 4:return null}}acquireTechniques(e){let{shadowMap:t,viewshedEnabled:n,cutFillComputationEnabled:r,slot:i,hasEmission:a,useFloatBlend:o}=e.bind,s=!!has(`enable-feature:terrain-shadows`)&&t.enabled;if(s!==this._castShadows&&(this._castShadows=s,this._patchesByOriginDirty=!0),this._inViewshed!==n&&(this._inViewshed=n,this._patchesByOriginDirty=!0),this._cutFillEnabled!==r&&(this._cutFillEnabled=r,this._patchesByOriginDirty=!0),this.transparency===3)return null;if(i===9){if((e.renderOccludedMask&y)===0)return null}else if(i!==this._desiredSlot)return null;let c=this._configuration;switch(c.receiveGlobalIllumination=c.screenSpaceReflections=c.cloudReflections=c.receiveShadows=c.hasShadowHighlights=c.receiveAmbientOcclusion=c.renderOccluded=c.hasHighlightMixTexture=!1,c.hasEmission=a,c.overlayMode=this._overlayRenderer.mode,c.useFloatBlend=o.value,e.output){case 0:case 1:case 2:{let n=e.bind;c.screenSpaceReflections=n.hasScreenSpaceReflections,c.cloudReflections=n.clouds.data!=null;let r=i===9;return c.receiveShadows=t.ready&&!r,c.hasShadowHighlights=B(c,e.bind),c.renderOccluded=r,c.receiveAmbientOcclusion=!r&&n.ssao!=null,c.receiveGlobalIllumination=!r&&n.globalIlluminationEnabled,this._acquireTechnique(e.output)}case 5:case 7:return this._castShadows?this._acquireTechnique(5):null;case 8:return this._inViewshed?this._acquireTechnique(8):null;case 9:return this._cutFillEnabled?this._acquireTechnique(9):null;case 3:case 4:case 11:return this._acquireTechnique(e.output);case 10:return c.hasHighlightMixTexture=e.bind.highlightMixTexture!=null,this._overlayRenderer.hasHighlights?this._acquireTechnique(10):null}return null}render(e,t){switch(this._updatePatchGroups(),this._passParameters.useStencil=!1,this._passParameters.overlayContent=k(e.output,e.bind),e.output){case 0:case 1:case 2:return this._renderMaterialPass(e,t);case 3:case 4:case 11:return this._renderAuxiliaryPass(e,t,this._visiblePatchesByOrigin);case 10:{let n=e.bind.highlight?.name;n&&this._overlayRenderer.hasHighlights&&this._overlayRenderer.renders(2)&&this._overlayRenderer.hasHighlight(n)&&this._renderAuxiliaryPass(e,t,this._visiblePatchesByOrigin);break}case 5:case 7:case 8:case 9:return this._renderAuxiliaryPass(e,t,this._allPatchesByOrigin)}}updateTileBackground(e){if(this._tileRenderer==null)return;let t=this._tileRenderer,n;if(e!=null){let t=e.toUnitRGBA();n=f(t[0]||0,t[1]||0,t[2]||0)}t.setBackground(n),this._allTiles.forAll(e=>{t.updateTileTexture(e,0)||e.updateRenderData(1,0)}),this._configuration.tileBlendInput=t.backgroundIsGrid?2:t.backgroundColor==null?0:1,this.requestRender()}_updatePatchGroups(){if(this._patchesByOriginDirty&&(this._rebuildPatchGroups(),this._patchesByOriginDirty=!1,this._patchSortingDirty=!0),this._patchSortingDirty){let e=Array.from(this._visiblePatchesByOrigin.values()),t=this._stencilEnabledLayerExtents;for(let n of e)D(n,t);e.sort((e,t)=>O(e[0],t[0])),this._visiblePatchesByOrigin=new Map(e.map(e=>[e[0].renderData.localOrigin,e])),this.notifyChange(`visibleTiles`),this._patchSortingDirty=!1}}_rebuildPatchGroups(){let e=this._rootTiles;if(e!=null){e[0]?.surface.checkAllTilesWaterproofness(`render-patch-groups`),this._visiblePatchesByOrigin.clear(),this._allPatchesByOrigin.clear();for(let t of e)this._rebuildPatchGroupsForRootTile(t)}}_rebuildPatchGroupsForRootTile(e){let t=this._tileIterator;for(t.resetOne(e);!t.done;){let e=t.next(),n=e.renderData;if(!n){this._numTilesCulled++;continue}let r=n.localOrigin;if(this._castShadows||this._inViewshed||this._cutFillEnabled){let t=this._allPatchesByOrigin.get(r);t||(t=[],this._allPatchesByOrigin.set(r,t)),t.push(e)}if(!e.visible){this._numTilesCulled++,t.skipSubtree();continue}let i=this._visiblePatchesByOrigin.get(r);i||(i=[],this._visiblePatchesByOrigin.set(r,i)),i.push(e),t.skipSubtree()}}_renderAuxiliaryPass(e,t,n){let{rctx:r,bind:i}=e;r.bindTechnique(t,i,this._passParameters);let a=!!this._stencilEnabledLayerExtents?.length;n.forEach(n=>{this._drawParameters.origin=n[0].renderData.localOrigin,t.program.bindDraw(i,this._passParameters,this._drawParameters);for(let r=0;r<n.length;r++)this._renderPatch(e,t,n[r],W.TRIANGLES,a,this._passParameters.overlayContent===null)}),r.bindVAO(null)}_renderMaterialPass(e,t){let{rctx:n,bind:r}=e,i=n.bindTechnique(t,r,this._passParameters);this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0;let a=r.slot===9;a&&(i.bindTexture(`tex`,n.emptyTexture),i.setUniform3fv(`textureOpacities`,d),i.setUniform4fv(`texOffsetAndScale`,h));let o=this._tileRenderer?.backgroundColor==null?d:this._tileRenderer.backgroundColor;this._configuration.tileBlendInput===1&&i.setUniform3fv(`backgroundColor`,o);let s=!!this._stencilEnabledLayerExtents?.length,c=this.wireframe?W.LINES:W.TRIANGLES;this._configuration.textureFadingEnabled&&i.bindTexture(`texNext`,n.emptyTexture);for(let n of this._visiblePatchesByOrigin.values()){this._drawParameters.origin=n[0].renderData.localOrigin,t.program.bindDraw(r,this._passParameters,this._drawParameters),this._numOriginsRendered++;for(let r of n){let n=r.renderData,o=n.textureReference;if(o!=null){if(!a){i.setUniform4fv(`texOffsetAndScale`,o.offsetAndScale),i.bindTexture(`tex`,o.texture.texture);let e=n.textureFadeFactor,t=e<1?n.nextTextureReference:null;this._configuration.textureFadingEnabled&&t&&e<1?(i.setUniform1f(`fadeFactor`,e),i.setUniform4fv(`nextTexOffsetAndScale`,t.offsetAndScale),i.setUniform3fv(`nextTexOpacities`,t.opacities),i.bindTexture(`texNext`,t.texture.texture)):i.setUniform1f(`fadeFactor`,1),n.textureIsFading&&this.requestRender(2),i.setUniform3fv(`textureOpacities`,o.opacities)}this._renderPatch(e,t,r,c,s),r.renderOrder=this._numTilesRendered,this._numTilesRendered++}}}n.bindVAO(null)}_renderPatch(e,t,n,r,i,a=!1){let o=n.renderData,s=o.vao,c=s?.indexBuffer;if(!s||c==null){S&&console.error(`Rendered tile with no indices: `,n.lij,` : `,o);return}let l=t.program;!a&&!this._overlayRenderer.isEmpty&&this._bindOverlayPatchData(l,o.overlay);let{rctx:u,bind:d}=e;i&&(this._passParameters.useStencil=E(n,this._stencilEnabledLayerExtents),u.setPipelineState(t.getPipeline(d,this._passParameters)));let f=o.geometry.indexCount;u.bindVAO(s),l.assertCompatibleVertexAttributeLocations(s),u.drawElements(r,f,c.indexType,0)}_bindOverlayPatchData(e,t){e.setUniform4fv(`overlayTexOffset`,t.offsets),e.setUniform4fv(`overlayTexScale`,t.scales)}_acquireTechnique(e){return this._configuration.output=e,this._techniques.get(H,this._configuration)}get test(){}hasHighlight(e){return this._overlayRenderer.hasHighlight(e)}};e([o({readOnly:!0})],K.prototype,`visibleTiles`,null),e([o({readOnly:!0})],K.prototype,`_isGlobal`,null),e([o()],K.prototype,`renderOccludedFlags`,null),e([o({value:!1})],K.prototype,`renderingDisabled`,null),e([o({value:!0})],K.prototype,`visible`,null),e([o()],K.prototype,`renderPatchBorders`,null),e([o()],K.prototype,`wireframe`,null),K=e([s(`esri.views.3d.terrain.TerrainRenderer`)],K);const q=p(),J=p(),Y=p(),X=p();export{K as TerrainRenderer};
2
+ import{__decorate as e}from"tslib";import has from"../../../core/has.js";import{disposeMaybe as t}from"../../../core/maybe.js";import{MemCachePool as n}from"../../../core/MemCachePool.js";import r from"../../../core/ObjectPool.js";import{watch as i,sync as a}from"../../../core/reactiveUtils.js";import{property as o,subclass as s}from"../../../core/accessorSupport/decorators.js";import{subtract as c,set as l,dot as u}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{ZEROS as d,fromValues as f,create as p}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromValues as m,ZEROS as h}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{create as g,set as _}from"../../../geometry/support/aaBoundingBox.js";import{BufferViewVec3f as v}from"../../../geometry/support/buffer/BufferView.js";import{overlayRenderOccludedFlag as y}from"./OverlayRenderer.js";import{PatchRenderData as b}from"./PatchRenderData.js";import{TerrainAttributesCache as x}from"./TerrainAttributesCache.js";import{enableTerrainInternalChecks as S}from"./terrainUtils.js";import{TileRenderer as C}from"./TileRenderer.js";import{IteratorPreorder as w,fallsWithinLayerView as T,usesStencil as E,sortTiles as D,compareTiles as O}from"./tileUtils.js";import{getOverlayContentForOutputTerrain as k}from"../webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{SyncRenderPlugin as A}from"../webgl-engine/effects/RenderPlugin.js";import{Vertices as j}from"../webgl-engine/lib/Attribute.js";import{IntersectorResultRay as M}from"../webgl-engine/lib/IntersectorResult.js";import{intersectAabbInvDirBefore as N,MeshIntersectionOptions as P,intersectTriangles as F}from"../webgl-engine/lib/RayIntersections.js";import{TriangleIntersectionData as I}from"../webgl-engine/lib/TriangleIntersectionData.js";import{terrainId as L,getVerticalOffsetTerrain as R}from"../webgl-engine/lib/verticalOffsetUtils.js";import{DrawParameters as z}from"../webgl-engine/materials/DrawParameters.js";import{hasShadowHighlights as B}from"../webgl-engine/shaders/ReceiveShadowsConfiguration.js";import{T as V}from"../../../chunks/Terrain.glsl.js";import{TerrainTechnique as H}from"../webgl-engine/shaders/TerrainTechnique.js";import{TerrainTechniqueConfiguration as U}from"../webgl-engine/shaders/TerrainTechniqueConfiguration.js";import{PrimitiveType as W}from"../../webgl/enums.js";const G=g();let K=class extends A{get visibleTiles(){return Array.from(this._visiblePatchesByOrigin.values()).flat()}get _isGlobal(){return this._view.stage.viewingMode===1}get _techniques(){return this._context.techniques}get _rctx(){return this._context.renderContext.rctx}get renderOccludedFlags(){return this._overlayRenderer.renderOccludedFlags}constructor(e,t,i,a,o){super({}),this._surface=e,this._overlayRenderer=t,this._allTiles=i,this._compressionTracker=a,this.type=7,this.isGround=!0,this._passParameters=new V,this._drawParameters=new z,this._renderDataPool=new r(()=>new b),this._visiblePatchesByOrigin=new Map,this._allPatchesByOrigin=new Map,this._patchesByOriginDirty=!0,this._patchSortingDirty=!0,this._tileIterator=new w,this._castShadows=!1,this._inViewshed=!1,this._cutFillEnabled=!1,this._tileRenderer=null,this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0,this.produces=new Map([[1,()=>this._desiredSlot===1],[7,()=>this._desiredSlot===7],[9,()=>this._produces()&&this.renderOccludedFlags===y]]),this._tileSize=256,this._configuration=new U(e.isGlobal),this._tileTextureCache=new n((e,t)=>o.newCache(e,t),`TileTexture`),this.tileGeometryCache=new x(o)}normalizeCtorArgs(){return{}}initialize(){this.addHandles(i(()=>this._overlayRenderer.renderOccludedFlags,()=>this.requestRender(),a))}destroy(){this._tileTextureCache.destroy(),this.tileGeometryCache.destroy(),this._allTiles.prune(),this._tileRenderer=null}_produces(){return this.visible&&!!this._rootTiles&&!this.renderingDisabled}set renderingDisabled(e){this._set(`renderingDisabled`,!!e),this.setDirty()}set visible(e){this._set(`visible`,!!e),this.setDirty()}updateHeading(e){this._tileRenderer?.updateHeading(e)}set transparency(e){this._configuration.transparencyMode!==e&&(this._configuration.transparencyMode=e,this.requestRender())}get transparency(){return this._configuration.transparencyMode}get renderPatchBorders(){return this._configuration.tileBorders}set renderPatchBorders(e){this._configuration.tileBorders!==e&&(this._configuration.tileBorders=e,this.requestRender(),this.notifyChange(`renderPatchBorders`))}get layerViewUid(){return L}get slicePlaneEnabled(){return this._configuration.hasSlicePlane}set slicePlaneEnabled(e){this._configuration.hasSlicePlane!==e&&(this._configuration.hasSlicePlane=e,this.requestRender())}set textureFadingEnabled(e){this._configuration.textureFadingEnabled!==e&&(this._configuration.textureFadingEnabled=e,this.requestRender())}set pbrMode(e){this._configuration.pbrMode!==e&&(this._configuration.pbrMode=e,this.requestRender())}setRootTiles(e){this._rootTiles=e,this.setDirty()}setStencilEnabledLayerExtents(e){this._stencilEnabledLayerExtents=e,this._setSortingDirty()}set tileSize(e){this._tileSize=e,this._tileRenderer!=null&&(this._tileRenderer.tileSize=e),this.setDirty()}get tileSize(){return this._tileSize}_ensureRenderData(e){e.renderData||(e.renderData=this._renderDataPool.acquire(),e.renderData.init(e,this._getLocalOriginOfTile(e)),e.surface.tileElevationRangeChanged(e))}loadTile(e){this._ensureRenderData(e),this.updateTileGeometryState(e),this.reuseTextureFromParent(e)||this.updateTileTexture(e,32)}reuseTextureFromParent(e){let{parent:t}=e;if(!this._canReuseTextureFromParent(t,e))return!1;let n=m(e.lij[2]&1?.5:0,e.lij[1]&1?0:.5,.5,.5);return t.renderData?.reuseTexture(e.renderData,n)??!1}_canReuseTextureFromParent(e,t){if(!e)return!1;let{layerInfo:n,surface:r}=t;for(let i=0;i<n[1].length;i++){let n=r.layerViewByIndex(i,1);if(T(e,n)!==T(t,n))return!1}return!0}updateTileTexture(e,t){if(this._tileRenderer!=null){let n=t===32?0:2;if(!this._tileRenderer.updateTileTexture(e,n))return e.updateRenderData(1,n),!1;this.requestRender(),e.resetPendingUpdate(t)}return!0}updateTileGeometryState(e){for(let t of e.layerInfo[0])t.pendingUpdates&=-9;e.resetPendingUpdate(8);let t=e.renderData.updateGeometryState();return this._surface.updateElevationSources(e),t&&this.setDirty(),t}updateGeometryIfNeeded(e){e.loaded&&e.renderData.updateGeometryIfNeeded(this._rctx)}unloadTile(e){let t=e.renderData;t&&(t.releaseGeometry(),this._renderDataPool.release(t),t.clear(),e.renderData=null,e.surface.tileElevationRangeChanged(e,e.elevationBoundsMin,e.elevationBoundsMax),e.setMemoryDirty(),this.setDirty())}_getLocalOriginOfTile(e){let t=Math.max(0,Math.floor((e.level-3)/7)*7);if(this._isGlobal&&t===0)return d;for(;e.parent&&e.level>t;)e=e.parent;return e.centerAtSeaLevel}getStats(){return{numTilesRendered:this._numTilesRendered,numTilesCulled:this._numTilesCulled,numOriginsRendered:this._numOriginsRendered}}set wireframe(e){this._get(`wireframe`)!==e&&(this._set(`wireframe`,e),this.requestRender())}setDirty(e=1){this._patchesByOriginDirty=!0,this._context.requestRender(e)}_setSortingDirty(e=1){this._patchSortingDirty=!0,this._context.requestRender(e)}requestRender(e=1){this._context.requestRender(e)}initializeRenderContext(e){this._context=e,this._tileRenderer=new C(this._surface,this._rctx,this._tileSize,this._techniques,this._tileTextureCache,this._compressionTracker),this.updateTileBackground()}uninitializeRenderContext(){this._tileRenderer=t(this._tileRenderer)}intersectRay(e,t,n,r){let i=this._rootTiles;if(!i||e.options.selectOpaqueTerrainOnly&&e.options.selectionMode&&this.transparency!==0)return;let a=q,o=J;c(a,r,n),l(o,1/a[0],1/a[1],1/a[2]);let s=e.results.min,d=e.results.max,f=e.results.ground,p=e.options.store===0,m=!!e.results.ground.target,h=R(e.verticalOffset),g=e.tolerance,y,b=p&&s.distance!=null?s.distance:1/0,x=e.options,S=x.normalRequired||!x.backfacesTerrain,C=new P(g,!1,S),w=i=>{let l=i.renderData;if(!l?.vao)return;let m=l.geometry;_(G,m.boundingBox);let w=l.localOrigin;if(h!=null&&(h.localOrigin=w,h.applyToAabb(G)),Y[0]=n[0]-w[0],Y[1]=n[1]-w[1],Y[2]=n[2]-w[2],!N(G,Y,o,g,b))return;let T=(e,t,n,r)=>{e.set(this.type,i,t,n,r),b=p&&s.renderDistance!=null?s.renderDistance:1/0},E=(i,o,c)=>{(!S||c!=null)&&o>=0&&(x.backfacesTerrain||u(c,a)<0)&&(x.invisibleTerrain||!x.selectionMode||t==null||t(n,r,o))&&((f.renderDistance==null||o<f.renderDistance)&&T(f,i,o,c),x.isFiltered||(x.store===2&&(y==null?(y=new M(e.ray),T(y,i,o,c),e.results.all.push(y)):o<y.renderDistance&&T(y,i,o,c)),(s.renderDistance==null||o<s.renderDistance)&&T(s,i,o,c),x.store!==0&&(d.renderDistance==null||o>d.renderDistance)&&T(d,i,o,c)))},D=X;c(D,r,w);let{indices:O,indexCount:k}=m,A=m.vertexAttributes,P=A.getField(`position`,v),L=new j(P.typedBuffer,3,A.stride/4),R=k/3;!h&&R>200?(l.intersectionData??=new I(O,R,L),l.intersectionData.intersectRay(Y,D,C,E)):F(Y,D,0,R,(e,t)=>P.getVec(O[t],e),h,C,E)},T=this._tileIterator;T.reset(i);let D=e.options.invisibleTerrain;for(let e=T.next();e;e=T.next())(e.visible||D&&e.intersectsClippingArea)&&(h!=null||e.intersectsRay(n,a,g,b))&&(!m||!E(e,this._stencilEnabledLayerExtents))?w(e):T.skipSubtree()}processScaleRangeQueries(e,t){if(!t.done&&e)for(this._updatePatchGroups();e.updating&&!t.done;){e.prepare();for(let t of this._visiblePatchesByOrigin.values())for(let n of t)n.renderData?.textureReference!=null&&e.queriesForTile(n);e.process(),t.madeProgress()}}get _view(){return this._surface.view}get _desiredSlot(){if(!this._produces())return null;switch(this.transparency){case 0:return 1;case 1:case 2:return 7;case 3:case 4:return null}}acquireTechniques(e){let{shadowMap:t,viewshedEnabled:n,cutFillComputationEnabled:r,slot:i,hasEmission:a,useFloatBlend:o}=e.bind,s=!!has(`enable-feature:terrain-shadows`)&&t.enabled;if(s!==this._castShadows&&(this._castShadows=s,this._patchesByOriginDirty=!0),this._inViewshed!==n&&(this._inViewshed=n,this._patchesByOriginDirty=!0),this._cutFillEnabled!==r&&(this._cutFillEnabled=r,this._patchesByOriginDirty=!0),this.transparency===3)return null;if(i===9){if((e.renderOccludedMask&y)===0)return null}else if(i!==this._desiredSlot)return null;let c=this._configuration;switch(c.receiveGlobalIllumination=c.screenSpaceReflections=c.cloudReflections=c.receiveShadows=c.hasShadowHighlights=c.receiveAmbientOcclusion=c.renderOccluded=c.hasHighlightMixTexture=!1,c.hasEmission=a,c.overlayMode=this._overlayRenderer.mode,c.useFloatBlend=o.value,e.output){case 0:case 1:case 2:{let n=e.bind;c.screenSpaceReflections=n.hasScreenSpaceReflections,c.cloudReflections=n.clouds.data!=null;let r=i===9;return c.receiveShadows=t.ready&&!r,c.hasShadowHighlights=B(c,e.bind),c.renderOccluded=r,c.receiveAmbientOcclusion=!r&&n.ssao!=null,c.receiveGlobalIllumination=!r&&n.globalIlluminationEnabled,this._acquireTechnique(e.output)}case 5:case 7:return this._castShadows?this._acquireTechnique(5):null;case 8:return this._inViewshed?this._acquireTechnique(8):null;case 9:return this._cutFillEnabled?this._acquireTechnique(9):null;case 3:case 4:case 11:return this._acquireTechnique(e.output);case 10:return c.hasHighlightMixTexture=e.bind.highlightMixTexture!=null,this._overlayRenderer.hasHighlights?this._acquireTechnique(10):null}return null}render(e,t){switch(this._updatePatchGroups(),this._passParameters.useStencil=!1,this._passParameters.overlayContent=k(e.output,e.bind),e.output){case 0:case 1:case 2:return this._renderMaterialPass(e,t);case 3:case 4:case 11:return this._renderAuxiliaryPass(e,t,this._visiblePatchesByOrigin);case 10:{let n=e.bind.highlight?.name;n&&this._overlayRenderer.hasHighlights&&this._overlayRenderer.renders(2)&&this._overlayRenderer.hasHighlight(n)&&this._renderAuxiliaryPass(e,t,this._visiblePatchesByOrigin);break}case 5:case 7:case 8:case 9:return this._renderAuxiliaryPass(e,t,this._allPatchesByOrigin)}}updateTileBackground(e){if(this._tileRenderer==null)return;let t=this._tileRenderer,n;if(e!=null){let t=e.toUnitRGBA();n=f(t[0]||0,t[1]||0,t[2]||0)}t.setBackground(n),this._allTiles.forAll(e=>{t.updateTileTexture(e,0)||e.updateRenderData(1,0)}),this._configuration.tileBlendInput=t.backgroundIsGrid?2:t.backgroundColor==null?0:1,this.requestRender()}_updatePatchGroups(){if(this._patchesByOriginDirty&&(this._rebuildPatchGroups(),this._patchesByOriginDirty=!1,this._patchSortingDirty=!0),this._patchSortingDirty){let e=Array.from(this._visiblePatchesByOrigin.values()),t=this._stencilEnabledLayerExtents;for(let n of e)D(n,t);e.sort((e,t)=>O(e[0],t[0])),this._visiblePatchesByOrigin=new Map(e.map(e=>[e[0].renderData.localOrigin,e])),this.notifyChange(`visibleTiles`),this._patchSortingDirty=!1}}_rebuildPatchGroups(){let e=this._rootTiles;if(e!=null){e[0]?.surface.checkAllTilesWaterproofness(`render-patch-groups`),this._visiblePatchesByOrigin.clear(),this._allPatchesByOrigin.clear();for(let t of e)this._rebuildPatchGroupsForRootTile(t)}}_rebuildPatchGroupsForRootTile(e){let t=this._tileIterator;for(t.resetOne(e);!t.done;){let e=t.next(),n=e.renderData;if(!n){this._numTilesCulled++;continue}let r=n.localOrigin;if(this._castShadows||this._inViewshed||this._cutFillEnabled){let t=this._allPatchesByOrigin.get(r);t||(t=[],this._allPatchesByOrigin.set(r,t)),t.push(e)}if(!e.visible){this._numTilesCulled++,t.skipSubtree();continue}let i=this._visiblePatchesByOrigin.get(r);i||(i=[],this._visiblePatchesByOrigin.set(r,i)),i.push(e),t.skipSubtree()}}_renderAuxiliaryPass(e,t,n){let{rctx:r,bind:i}=e;r.bindTechnique(t,i,this._passParameters);let a=!!this._stencilEnabledLayerExtents?.length;n.forEach(n=>{this._drawParameters.origin=n[0].renderData.localOrigin,t.program.bindDraw(i,this._passParameters,this._drawParameters);for(let r=0;r<n.length;r++)this._renderPatch(e,t,n[r],W.TRIANGLES,a,this._passParameters.overlayContent===null)}),r.bindVAO(null)}_renderMaterialPass(e,t){let{rctx:n,bind:r}=e,i=n.bindTechnique(t,r,this._passParameters);this._numTilesRendered=0,this._numTilesCulled=0,this._numOriginsRendered=0;let a=r.slot===9;a&&(i.bindTexture(`tex`,n.emptyTexture),i.setUniform3fv(`textureOpacities`,d),i.setUniform4fv(`texOffsetAndScale`,h));let o=this._tileRenderer?.backgroundColor==null?d:this._tileRenderer.backgroundColor;this._configuration.tileBlendInput===1&&i.setUniform3fv(`backgroundColor`,o);let s=!!this._stencilEnabledLayerExtents?.length,c=this.wireframe?W.LINES:W.TRIANGLES;this._configuration.textureFadingEnabled&&i.bindTexture(`texNext`,n.emptyTexture);for(let n of this._visiblePatchesByOrigin.values()){this._drawParameters.origin=n[0].renderData.localOrigin,t.program.bindDraw(r,this._passParameters,this._drawParameters),this._numOriginsRendered++;for(let r of n){let n=r.renderData,o=n.textureReference;if(o!=null){if(!a){i.setUniform4fv(`texOffsetAndScale`,o.offsetAndScale),i.bindTexture(`tex`,o.texture.texture);let e=n.textureFadeFactor,t=e<1?n.nextTextureReference:null;this._configuration.textureFadingEnabled&&t&&e<1?(i.setUniform1f(`fadeFactor`,e),i.setUniform4fv(`nextTexOffsetAndScale`,t.offsetAndScale),i.setUniform3fv(`nextTexOpacities`,t.opacities),i.bindTexture(`texNext`,t.texture.texture)):i.setUniform1f(`fadeFactor`,1),n.textureIsFading&&this.requestRender(2),i.setUniform3fv(`textureOpacities`,o.opacities)}this._renderPatch(e,t,r,c,s),r.renderOrder=this._numTilesRendered,this._numTilesRendered++}}}n.bindVAO(null)}_renderPatch(e,t,n,r,i,a=!1){let o=n.renderData,s=o.vao,c=s?.indexBuffer;if(!s||c==null){S&&console.error(`Rendered tile with no indices: `,n.lij,` : `,o);return}let l=t.program;!a&&!this._overlayRenderer.isEmpty&&this._bindOverlayPatchData(l,o.overlay);let{rctx:u,bind:d}=e;i&&(this._passParameters.useStencil=E(n,this._stencilEnabledLayerExtents),u.setPipelineState(t.getPipeline(d,this._passParameters)));let f=o.geometry.indexCount;u.bindVAO(s),l.assertCompatibleVertexAttributeLocations(s),u.drawElements(r,f,c.indexType,0)}_bindOverlayPatchData(e,t){e.setUniform4fv(`overlayTexOffset`,t.offsets),e.setUniform4fv(`overlayTexScale`,t.scales)}_acquireTechnique(e){return this._configuration.output=e,this._techniques.get(H,this._configuration)}get test(){}hasHighlight(e){return this._overlayRenderer.hasHighlight(e)}};e([o({readOnly:!0})],K.prototype,`visibleTiles`,null),e([o({readOnly:!0})],K.prototype,`_isGlobal`,null),e([o()],K.prototype,`renderOccludedFlags`,null),e([o({value:!1})],K.prototype,`renderingDisabled`,null),e([o({value:!0})],K.prototype,`visible`,null),e([o()],K.prototype,`renderPatchBorders`,null),e([o()],K.prototype,`wireframe`,null),K=e([s(`esri.views.3d.terrain.TerrainRenderer`)],K);const q=p(),J=p(),Y=p(),X=p();export{K as TerrainRenderer};