@arcgis/core 4.28.0-next.20230621 → 4.28.0-next.20230623
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.
- package/Basemap.js +1 -1
- package/arcade/ArcadeModuleResolver.js +1 -1
- package/arcade/Feature.js +1 -1
- package/arcade/arcadeCompiler.js +1 -1
- package/arcade/arcadeTimeUtils.js +1 -1
- package/arcade/featureset/actions/GroupBy.js +1 -1
- package/arcade/featureset/sources/FeatureLayerDynamic.js +1 -1
- package/arcade/featureset/support/sqlUtils.js +1 -1
- package/arcade/functions/date.js +1 -1
- package/arcade/functions/geomasync.js +1 -1
- package/arcade/functions/geometry.js +1 -1
- package/arcade/functions/geomsync.js +1 -1
- package/arcade/functions/string.js +1 -1
- package/arcade/languageUtils.js +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/0380e9f61b6f3ca85139.js +1 -0
- package/assets/esri/core/workers/chunks/0bd95f46a0a9005a19f9.js +1 -0
- package/assets/esri/core/workers/chunks/0c621046b7211cdde980.js +1 -0
- package/assets/esri/core/workers/chunks/0e0267739728e5413f1d.js +1 -0
- package/assets/esri/core/workers/chunks/{39079bcfd35ed73c4e34.js → 156e801a3262f0ac79c0.js} +1 -1
- package/assets/esri/core/workers/chunks/19b4f02fb2392d964582.js +1 -0
- package/assets/esri/core/workers/chunks/1ae75f5282e983f6d768.js +1 -0
- package/assets/esri/core/workers/chunks/2179b3e9e532ca8ef982.js +1 -0
- package/assets/esri/core/workers/chunks/21aaa7fa0e5482670010.js +1 -0
- package/assets/esri/core/workers/chunks/26212a08ea383547335b.js +1 -0
- package/assets/esri/core/workers/chunks/{2420ec029236ab31d908.js → 2882a55a971af1f7858b.js} +1 -1
- package/assets/esri/core/workers/chunks/294285f2822c101326ec.js +1 -0
- package/assets/esri/core/workers/chunks/29f9a380610e4fd98a7c.js +1 -0
- package/assets/esri/core/workers/chunks/303238fc2fcdbb277981.js +1 -0
- package/assets/esri/core/workers/chunks/{3db8ae98799c752afe60.js → 34958516e604d487c625.js} +1 -1
- package/assets/esri/core/workers/chunks/3bee743f4c9370045a5d.js +1 -0
- package/assets/esri/core/workers/chunks/{8e08968505483dc58e00.js → 40ee4e0a5000a08c3abd.js} +1 -1
- package/assets/esri/core/workers/chunks/4128e45e17c9e5280e11.js +1 -0
- package/assets/esri/core/workers/chunks/4f88c4d1d2103843aca8.js +1 -0
- package/assets/esri/core/workers/chunks/505792ce8cbbddd2e815.js +1 -0
- package/assets/esri/core/workers/chunks/{3d42fa4ab5f8632d690a.js → 5237b3938be0d4bc6045.js} +1 -1
- package/assets/esri/core/workers/chunks/{57077e608f20d3a931e8.js → 570e94f4fbefc856d303.js} +1 -1
- package/assets/esri/core/workers/chunks/{4b235d1b6a72773cd4f4.js → 57bb8516fa998a0fba78.js} +1 -1
- package/assets/esri/core/workers/chunks/57bf3ff01d738cedc292.js +1 -0
- package/assets/esri/core/workers/chunks/{1e9e68312cd865358260.js → 60486acc5dacf73f851a.js} +1 -1
- package/assets/esri/core/workers/chunks/6208f2dfa9dfd3bca000.js +1 -0
- package/assets/esri/core/workers/chunks/64008bde5d3ffd9f2499.js +1 -0
- package/assets/esri/core/workers/chunks/69f51a7768bf51c9e346.js +1 -0
- package/assets/esri/core/workers/chunks/719f741a0e45c3e694ba.js +1 -0
- package/assets/esri/core/workers/chunks/{cfe379a78a983373b3ac.js → 7304f45f5622a68253e4.js} +1 -1
- package/assets/esri/core/workers/chunks/733b70d6e5c466a67e9c.js +1 -0
- package/assets/esri/core/workers/chunks/7694521b44681d52b713.js +1 -0
- package/assets/esri/core/workers/chunks/840fd05ceaa038c476d6.js +1 -0
- package/assets/esri/core/workers/chunks/89f7fd2ab92aa14fe0c0.js +1 -0
- package/assets/esri/core/workers/chunks/8a6f29f2ebd59783bb1b.js +1 -0
- package/assets/esri/core/workers/chunks/9d487b7817ccf5bceff6.js +1 -0
- package/assets/esri/core/workers/chunks/{42b6315e21c4c1345ba5.js → 9f5337a80963e0b3c009.js} +1 -1
- package/assets/esri/core/workers/chunks/a0face18b3ea567999ef.js +1 -0
- package/assets/esri/core/workers/chunks/b773c8854e98384ac8ac.js +1 -0
- package/assets/esri/core/workers/chunks/{fb44d872b9dbadcf8ccf.js → b9ef05c22bc3e395bcb3.js} +1 -1
- package/assets/esri/core/workers/chunks/bc5e34200776cfc83d5b.js +1 -0
- package/assets/esri/core/workers/chunks/{cfc3dcca2b69d20d5375.js → c0b9cc091efd5db827de.js} +1 -1
- package/assets/esri/core/workers/chunks/c9f5e949830196ad9458.js +1 -0
- package/assets/esri/core/workers/chunks/{036301f545aba2b8e485.js → cc15e28a99694120556d.js} +1 -1
- package/assets/esri/core/workers/chunks/ce7f575a6c2053c7ca17.js +1 -0
- package/assets/esri/core/workers/chunks/ce9c99cee3d1a3963e7c.js +1 -0
- package/assets/esri/core/workers/chunks/cf9a87b53ea74bae6a37.js +1 -0
- package/assets/esri/core/workers/chunks/d16850b98a53ade0de10.js +1 -0
- package/assets/esri/core/workers/chunks/d24f7ef6eca8c91b90b4.js +1 -0
- package/assets/esri/core/workers/chunks/dbd86e4b7983873cbe7c.js +1 -0
- package/assets/esri/core/workers/chunks/{3c3f65913006b84b2289.js → de20572d334abd4a7d82.js} +1 -1
- package/assets/esri/core/workers/chunks/e009e7f074a572894f48.js +1 -0
- package/assets/esri/core/workers/chunks/{cb004c492e22c50f9bfa.js → f3eb89cff63e00f036c6.js} +1 -1
- package/assets/esri/core/workers/chunks/{b2a423d9ce8bb784267c.js → f53f20c7100092823487.js} +1 -1
- package/assets/esri/core/workers/chunks/f6040205c50e2795a1a0.js +1 -0
- package/assets/esri/core/workers/chunks/{915734255a79bff3ef0f.js → fcd54e9e64c2864f183c.js} +1 -1
- package/assets/esri/t9n/common.json +1 -1
- package/assets/esri/t9n/common_en.json +1 -1
- package/assets/esri/themes/base/_core.scss +6 -2
- package/assets/esri/themes/base/_mixins.scss +0 -147
- package/assets/esri/themes/base/widgets/_AreaMeasurement2D.scss +0 -8
- package/assets/esri/themes/base/widgets/_AreaMeasurement3D.scss +0 -8
- package/assets/esri/themes/base/widgets/_DirectLineMeasurement3D.scss +0 -1
- package/assets/esri/themes/base/widgets/_DistanceMeasurement2D.scss +0 -1
- package/assets/esri/themes/base/widgets/_MeasurementWidgetContent.scss +67 -0
- package/assets/esri/themes/base/widgets/_Slice.scss +17 -54
- package/assets/esri/themes/base/widgets/_UnitSelect.scss +14 -0
- package/assets/esri/themes/dark/main.css +1 -1
- package/assets/esri/themes/light/main.css +1 -1
- package/assets/esri/themes/light/view.css +1 -1
- package/assets/esri/widgets/AreaMeasurement2D/t9n/AreaMeasurement2D.json +1 -1
- package/assets/esri/widgets/AreaMeasurement2D/t9n/AreaMeasurement2D_en.json +1 -1
- package/assets/esri/widgets/AreaMeasurement3D/t9n/AreaMeasurement3D.json +1 -1
- package/assets/esri/widgets/AreaMeasurement3D/t9n/AreaMeasurement3D_en.json +1 -1
- package/assets/esri/widgets/DirectLineMeasurement3D/t9n/DirectLineMeasurement3D.json +1 -1
- package/assets/esri/widgets/DirectLineMeasurement3D/t9n/DirectLineMeasurement3D_en.json +1 -1
- package/assets/esri/widgets/DistanceMeasurement2D/t9n/DistanceMeasurement2D.json +1 -1
- package/assets/esri/widgets/DistanceMeasurement2D/t9n/DistanceMeasurement2D_en.json +1 -1
- package/chunks/HUDMaterial.glsl.js +39 -39
- package/chunks/HighlightBlur.glsl.js +2 -2
- package/chunks/ShadowHighlight.glsl.js +1 -1
- package/chunks/arcade.js +1 -1
- package/chunks/languageUtils.js +1 -1
- package/core/HandleOwner.js +1 -1
- package/core/promiseUtils.js +1 -1
- package/core/support/{WatchUpdatingTracking.js → UpdatingHandles.js} +1 -1
- package/core/workers/workerFactory.js +1 -1
- package/geometry/projection.js +1 -1
- package/interfaces.d.ts +270 -5
- package/kernel.js +1 -1
- package/layers/Layer.js +1 -1
- package/layers/LinkChartLayer.d.ts +4 -0
- package/layers/LinkChartLayer.js +1 -1
- package/layers/graphics/controllers/FeatureTileController3D.js +1 -1
- package/layers/mixins/PortalLayer.js +1 -1
- package/layers/support/TileInfoTilemapCache.js +1 -1
- package/package.json +1 -1
- package/support/revision.js +1 -1
- package/symbols/cim/cimAnalyzer.js +1 -1
- package/views/2d/layers/features/controllers/FeatureController2D.js +1 -1
- package/views/2d/layers/features/sources/DataTileSource.js +1 -1
- package/views/2d/layers/features/support/AttributeStore.js +1 -1
- package/views/2d/layers/imagery/BaseImageryTileSubView2D.js +1 -1
- package/views/2d/layers/imagery/ImageryTileView2D.js +1 -1
- package/views/3d/analysis/Dimension/LengthDimensionSubTool.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightTool.js +1 -1
- package/views/3d/analysis/LineOfSight/LineOfSightVisualization.js +1 -1
- package/views/3d/environment/ChapmanAtmosphere.js +1 -1
- package/views/3d/environment/CloudsGenerator.js +1 -1
- package/views/3d/environment/EnvironmentRenderer.js +1 -1
- package/views/3d/environment/Precipitation.js +1 -1
- package/views/3d/environment/SceneViewEnvironmentManager.js +1 -1
- package/views/3d/environment/Stars.js +1 -1
- package/views/3d/interactive/editingTools/moveGraphic/GraphicMoveTool.js +1 -1
- package/views/3d/interactive/editingTools/reshapeGraphic/ReshapeOperation.js +1 -1
- package/views/3d/interactive/editingTools/transformGraphic/GraphicTransformTool.js +1 -1
- package/views/3d/interactive/measurementTools/areaMeasurement3D/AreaMeasurement3DTool.js +1 -1
- package/views/3d/interactive/measurementTools/directLineMeasurement3D/DirectLineMeasurement3DTool.js +1 -1
- package/views/3d/interactive/visualElements/PointVisualElement.js +1 -1
- package/views/3d/layers/I3SMeshView3D.js +1 -1
- package/views/3d/layers/ImageryTileLayerView3D.js +1 -1
- package/views/3d/layers/graphics/Graphics3DExtrudeSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DFeatureProcessor.js +1 -1
- package/views/3d/layers/graphics/Graphics3DIconSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DLineCalloutSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DLineSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DObjectSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DPathSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DPolygonFillSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DScaleVisibility.js +1 -1
- package/views/3d/layers/graphics/Graphics3DSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DTextSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/Graphics3DWaterSymbolLayer.js +1 -1
- package/views/3d/layers/graphics/GraphicsProcessor.js +1 -1
- package/views/3d/layers/graphics/Labeler.js +1 -1
- package/views/3d/layers/graphics/labelPlacement.js +1 -1
- package/views/3d/layers/support/FeatureTileTree3DDebugger.js +1 -1
- package/views/3d/layers/support/FeatureVisibilityFilter.js +1 -1
- package/views/3d/layers/support/HeatmapFeatureProcessor.js +1 -1
- package/views/3d/state/ViewState.js +1 -1
- package/views/3d/state/ViewStateManager.js +1 -1
- package/views/3d/support/DisplayQualityProfile.js +1 -1
- package/views/3d/support/MemoryController.js +1 -1
- package/views/3d/support/SceneViewPerformanceInfo.js +1 -1
- package/views/3d/support/cameraUtils.js +1 -1
- package/views/3d/support/viewpointUtils.js +1 -1
- package/views/3d/terrain/OverlayFramebufferObject.js +1 -1
- package/views/3d/terrain/OverlayManager.js +1 -1
- package/views/3d/terrain/OverlayRenderer.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/webgl-engine/Stage.js +1 -1
- package/views/3d/webgl-engine/core/FBOCache.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/hud/HUDOcclusionPass.glsl.js +6 -7
- package/views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlight.glsl.js +1 -1
- package/views/3d/webgl-engine/lib/Highlight.js +1 -1
- package/views/3d/webgl-engine/lib/OffscreenRendering.js +1 -1
- package/views/3d/webgl-engine/lib/RenderPluginManager.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/SSAOHelper.js +1 -1
- package/views/3d/webgl-engine/lib/SmaaRenderPass.js +1 -1
- package/views/3d/webgl-engine/lib/SortedRenderGeometryRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeView.js +1 -1
- package/views/3d/webgl-engine/materials/renderers/MergedRenderer.js +1 -1
- package/views/LayerViewManager.js +1 -1
- package/views/ToolViewManager.js +1 -1
- package/views/draw/DrawOperation.js +1 -1
- package/views/draw/PointDrawAction.js +1 -1
- package/views/interactive/snapping/FeatureSnappingEngine.js +1 -1
- package/views/interactive/snapping/featureSources/FeatureServiceSnappingSource.js +1 -1
- package/views/interactive/snapping/featureSources/GraphicsSnappingSource.js +1 -1
- package/views/interactive/snapping/featureSources/I3SSnappingSource.js +1 -1
- package/views/interactive/snapping/featureSources/featureServiceSource/FeatureServiceSnappingSourceWorker.js +1 -1
- package/views/interactive/snapping/featureSources/featureServiceSource/FeatureServiceSnappingSourceWorkerHandle.js +1 -1
- package/views/interactive/snapping/featureSources/featureServiceSource/FeatureServiceTiledFetcher.js +1 -1
- package/views/layers/LayerView.js +1 -1
- package/views/overlay/ViewOverlay.js +1 -1
- package/views/webgl/Texture.js +1 -1
- package/widgets/AreaMeasurement2D.js +1 -1
- package/widgets/AreaMeasurement3D.js +1 -1
- package/widgets/DirectLineMeasurement3D.js +1 -1
- package/widgets/DistanceMeasurement2D.js +1 -1
- package/widgets/Editor/EditorViewModel.js +1 -1
- package/widgets/Editor/Workflow.js +1 -1
- package/widgets/FeatureForm/FeatureFormViewModel.js +1 -1
- package/widgets/FeatureForm/FieldInput.js +1 -1
- package/widgets/FeatureForm/FormExpressionArcadeExecutor.js +1 -1
- package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
- package/widgets/OrientedImageryViewer.js +1 -1
- package/widgets/Slice.js +1 -1
- package/widgets/UtilityNetworkValidateTopology/UtilityNetworkValidateTopologyViewModel.js +1 -1
- package/widgets/support/MeasurementWidgetContent.js +5 -0
- package/widgets/support/UnitSelect.js +5 -0
- package/assets/esri/core/workers/chunks/0254165377538522c830.js +0 -1
- package/assets/esri/core/workers/chunks/07f16ea775b39a1a4a7b.js +0 -1
- package/assets/esri/core/workers/chunks/170c72126d10b1fdb2b0.js +0 -1
- package/assets/esri/core/workers/chunks/1bbc868d2430103951eb.js +0 -1
- package/assets/esri/core/workers/chunks/1d2ef88a8d028adef102.js +0 -1
- package/assets/esri/core/workers/chunks/2ef70c9b2484a11b7435.js +0 -1
- package/assets/esri/core/workers/chunks/39ae4b9b766f674bc6f2.js +0 -1
- package/assets/esri/core/workers/chunks/3b3d676b609c47a77164.js +0 -1
- package/assets/esri/core/workers/chunks/3d9a8cb638cf9b8ca4b3.js +0 -1
- package/assets/esri/core/workers/chunks/42f3421740a5479559dc.js +0 -1
- package/assets/esri/core/workers/chunks/45629ff775e77234b227.js +0 -1
- package/assets/esri/core/workers/chunks/52315f93a6f0ad59bd90.js +0 -1
- package/assets/esri/core/workers/chunks/5bb96e602d7cecbecf54.js +0 -1
- package/assets/esri/core/workers/chunks/63322229183f1d4eaa70.js +0 -1
- package/assets/esri/core/workers/chunks/642510b0371311ff8e16.js +0 -1
- package/assets/esri/core/workers/chunks/6995ace1d25d67c98d0e.js +0 -1
- package/assets/esri/core/workers/chunks/7e4013f8c31c9a9438c6.js +0 -1
- package/assets/esri/core/workers/chunks/82939ead43848a13f765.js +0 -1
- package/assets/esri/core/workers/chunks/8b6b963230df56850580.js +0 -1
- package/assets/esri/core/workers/chunks/95ff92d7caa34664d58f.js +0 -1
- package/assets/esri/core/workers/chunks/9e570cd4a48c30c83ae6.js +0 -1
- package/assets/esri/core/workers/chunks/a9e9297267614c4c4f3b.js +0 -1
- package/assets/esri/core/workers/chunks/b052463ffb7cb32306dc.js +0 -1
- package/assets/esri/core/workers/chunks/b31974524932e638df8c.js +0 -1
- package/assets/esri/core/workers/chunks/b75b4b132dbd9cb9d372.js +0 -1
- package/assets/esri/core/workers/chunks/c1dfbda75abc748a6ca4.js +0 -1
- package/assets/esri/core/workers/chunks/c8702e53a8ad6cf6ab85.js +0 -1
- package/assets/esri/core/workers/chunks/c90416e7bf29eb1d4536.js +0 -1
- package/assets/esri/core/workers/chunks/cad7a2092ea7f51dbd8b.js +0 -1
- package/assets/esri/core/workers/chunks/d0e2b42dca51711f2c6f.js +0 -1
- package/assets/esri/core/workers/chunks/d2a127f7bb0e2ba14a13.js +0 -1
- package/assets/esri/core/workers/chunks/df96824a6f76bad1370c.js +0 -1
- package/assets/esri/core/workers/chunks/e097f41bbfac00250477.js +0 -1
- package/assets/esri/core/workers/chunks/e3243d120a23a9b48392.js +0 -1
- package/assets/esri/core/workers/chunks/e55f80b774e090a0aa04.js +0 -1
- package/assets/esri/core/workers/chunks/e668c7e2e61aae6ca6e0.js +0 -1
- package/assets/esri/core/workers/chunks/ef900614353505afb210.js +0 -1
- package/assets/esri/core/workers/chunks/f0299d93a95f40ea7cf7.js +0 -1
- package/assets/esri/core/workers/chunks/f23b95d7e51a144ad065.js +0 -1
- package/assets/esri/core/workers/chunks/f263e73a25fae4beffae.js +0 -1
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.28/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import e from"../../../Camera.js";import"../../../geometry.js";import t from"../../../Graphic.js";import n from"../../../Viewpoint.js";import{result as r}from"../../../core/asyncUtils.js";import"../../../core/has.js";import{cyclicalDegrees as a}from"../../../core/Cyclical.js";import o from"../../../core/Error.js";import{eachAlways as i}from"../../../core/promiseUtils.js";import{f as s,t as c}from"../../../chunks/mat3.js";import{c as l}from"../../../chunks/mat3f64.js";import{c as m}from"../../../chunks/mat4f64.js";import{g as u,a as f,i as p,c as g,b as h,s as y,t as d}from"../../../chunks/vec3.js";import{c as x}from"../../../chunks/vec3f64.js";import{projectVectorToPoint as w,projectPointToVector as v,projectBuffer as b,computeTranslationToOriginAndRotation as j,projectVectorToVector as R}from"../../../geometry/projection.js";import{create as G,empty as z,center as S,toRect as B,isPoint as k,expandWithVec3 as M,expandWithAABB as A,width as F,height as T,depth as E}from"../../../geometry/support/aaBoundingBox.js";import{create as U,isPoint as Z}from"../../../geometry/support/aaBoundingRect.js";import{intersectsPoint as D}from"../../../geometry/support/frustum.js";import{getResolutionInMetersForScale as O}from"../../../geometry/support/scaleUtils.js";import{project as C,canProject as P}from"../../../geometry/support/webMercatorUtils.js";import{cameraOnContentAlongViewDirection as I}from"../camera/intersectionUtils.js";import{internalToExternal as J,OrientationMode as K,scaleToDistance as L,fromCenterDistance as N,fromExtent as V,externalToInternal as W,computeScale as Y,AsyncContext as $,distanceToScale as q,fromCenterScale as X,directionToHeadingTilt as _,zoomToScale as H}from"./cameraUtils.js";import{getElevationAtPoint as Q}from"./ElevationProvider.js";import ee from"../../../geometry/Point.js";import te from"../../../geometry/SpatialReference.js";import ne from"../../../geometry/Extent.js";import re from"../../../geometry/Geometry.js";const ae=.66;function oe(e){return 360-a.normalize(e)}function ie(e){return a.normalize(360-e)}function se(e){return null!=e&&e.resolver&&e.resolver.reject(),null}function ce(e,t){return null!=e&&e.resolver&&e.resolver.resolve(t),t}function le(e,t,n,r=null){if(!t)return se(r);const a=e.spatialReference||te.WGS84;if(null!=t.camera){const e=C(t.camera.position,a);if(null==e)return se(r);const n=t.camera.clone();return n.position=e.clone(),ce(r,n)}if(null==t.targetGeometry)return se(r);const o=t.get("targetGeometry.spatialReference");if(o&&!P(o,a))return se(r);const i=J(e,e.state.camera);let s=K.ADJUST;if(null!=t.rotation&&(i.heading=oe(t.rotation),s=K.LOCKED),null!=n&&(i.tilt=n),"point"===t.targetGeometry.type){const n=t.targetGeometry;let a;const o=t.targetGeometry.clone();return a=null!=t.scale?L(e,t.scale,n.latitude):e.state.camera.distance,N(e,o,a,i,s,r)}const c=t.targetGeometry.extent;return c?V(e,c,i.heading,i.tilt,s,r):se(r)}function me(e,t,r=null){return null==r&&(r=new n),he(e,null,t.clone(),r)}async function ue(t,r,a){const i=ke(t,r);if(!i)throw new o("viewpointutils-create:no-target","Missing target for creating viewpoint");const s=new e({fov:t.camera.fov}),c=new n({camera:s});if(i.target instanceof n){return Me(await we(t,i.target,i,a,c))}if(i.target instanceof e)return Me(ve(t,i.target,c));const l=null!=i.scale||null!=i.zoom;if(i.target instanceof ne){const e=i.target.xmin===i.target.xmax||i.target.ymin===i.target.ymax;return Me(l||e?await je(t,i,i.target.center,s,a,c):await ze(t,i,i.target,s,a,c))}const m={boundingBox:z(),hasZ:!1,screenSpaceObjects:[]},u=l?pe(t,i):void 0;if(await xe(t,i.target,u,m),isFinite(m.boundingBox[0])){let e;if(S(m.boundingBox,Fe),Ie.x=Fe[0],Ie.y=Fe[1],Ie.z=Fe[2],Ie.spatialReference=t.spatialReference,isFinite(Ie.z)&&m.hasZ?e=k(m.boundingBox):(Ie.z=void 0,e=Z(B(m.boundingBox,Ze))),l||e)return Me(await je(t,i,Ie,s,a,c));const n=Ae(t,m.screenSpaceObjects);return Me(await Be(t,i,Ie,m.boundingBox,n,s,a,c))}return i.position?Me(Re(t,i,s,c)):Me(await Ge(t,i,s,a,c))}function fe(e,t){return null==t.scale&&null!=t.zoom?H(e,t.zoom):t.scale}function pe(e,t){const n=fe(e,t);return n?O(n):void 0}function ge(e,t){let n=!1;return null!=t.heading?(e.heading=t.heading,n=!0):null!=t.rotation&&(e.heading=oe(t.rotation),n=!0),null!=t.tilt&&(e.tilt=t.tilt,n=!0),null!=t.fov&&(e.fov=t.fov),n}function he(e,t,n,r){const a=e.spatialReference||te.WGS84;return null==(t=null!=t?t:W(e,n))||(r.targetGeometry=w(t.center,e.renderSpatialReference,a),r.scale=Y(e,t),r.rotation=ie(n.heading),r.camera=n),r}function ye(e,t,n){const r=()=>new o("viewpointutils:invalid-geometry","The target is missing a valid geometry");if(!t)throw r();if(!P(t.spatialReference,e.spatialReference))throw new o("viewpointutils:incompatible-spatialreference",`Spatial reference (${t.spatialReference?t.spatialReference.wkid:"unknown"}) is incompatible with the view (${e.spatialReference?.wkid})`,{geometry:t});const a=[];if(!t.hasZ&&e.basemapTerrain){let n;switch(t.type){case"point":n=t;break;case"multipoint":case"polyline":n=t.extent?.center;break;case"mesh":n=t.origin;break;case"extent":n=t.center;break;case"polygon":n=t.centroid}n&&null!=e.basemapTerrain.spatialReference&&P(n,e.basemapTerrain.spatialReference)&&e.elevationProvider?Fe[2]=Q(e.elevationProvider,n)??0:Fe[2]=0}(0,Je[t.type])(t,(e=>{a.push(e[0],e[1],e[2])}),Fe);const i=a.length/3;if(0===i)throw r();const s=new Array(a.length);if(b(a,t.spatialReference,0,s,e.spatialReference,0,i)){t.hasZ&&(n.hasZ=!0);for(let e=0;e<s.length;e+=3)t.hasZ?(Fe[0]=s[e],Fe[1]=s[e+1],Fe[2]=s[e+2]):(Fe[0]=s[e],Fe[1]=s[e+1]),M(n.boundingBox,Fe)}}async function de(e,t,n,a){const o=await r(e.whenViewForGraphic(t));if(!1===o.ok||null==o.value||!("whenGraphicBounds"in o.value))return void ye(e,t.geometry,a);const i=o.value,s=await r(i.whenGraphicBounds(t,{minDemResolution:n}));if(!1===s.ok)return void ye(e,t.geometry,a);const{screenSpaceObjects:c,boundingBox:l}=s.value;A(a.boundingBox,l),c&&c.forEach((e=>{a.screenSpaceObjects.push(e)})),isFinite(l[2])&&(a.hasZ=!0)}async function xe(e,n,r,a){if(Array.isArray(n)&&2===n.length){const t=n[0],r=n[1];if("number"==typeof t&&"number"==typeof r)return Ie.x=t,Ie.y=r,Ie.z=void 0,Ie.spatialReference=e.spatialReference?.isGeographic?e.spatialReference:te.WGS84,void ye(e,Ie,a)}n&&"map"in n&&"function"==typeof n.map?await i(n.map((t=>xe(e,t,r,a)))):n instanceof re?ye(e,n,a):n instanceof t&&await de(e,n,r,a)}async function we(e,t,n,r,a){if(null!=t.camera)return ve(e,t.camera,a);a.scale=t.scale,a.rotation=t.rotation,a.targetGeometry=null!=t.targetGeometry?t.targetGeometry.clone():null,a.camera=null,null!=n.heading?a.rotation=ie(n.heading):null!=n.rotation&&(a.rotation=n.rotation);const o=fe(e,n);null!=o&&(a.scale=o);const i=new $(r);return le(e,a,n.tilt,i),a.camera=await i.resolver.promise,a}function ve(e,t,n){const r=e.spatialReference,a=C(t.position,r);return null==a?null:((t=t.clone()).fov=e.camera.fov,t.position=a,he(e,null,t,n))}function be(e,t,n,r,a,o){const i=e.renderSpatialReference;return v(n,Oe,i),v(t,Ce,i),o.targetGeometry=new ee(t),a.position=new ee(n),h(De,Ce,Oe),_(e,Oe,De,r.up,a),o.scale=q(e,p(Oe,Ce),o.targetGeometry.latitude),o.rotation=ie(a.heading),o.camera=a,o}async function je(e,t,n,r,a,i){if(null==n)throw new o("createfromcenter","invalid point");i.targetGeometry=n.clone();const s=I(e);if(t.position)return be(e,i.targetGeometry,t.position,s,r,i);if(t.zoomFactor){const r=s.distance/t.zoomFactor,a=u(Fe,s.viewForward,-r);s.eye=f(Fe,s.center,a),i.scale=q(e,r,n.latitude)}J(e,s,r);const c=ge(r,t)?K.LOCKED:K.ADJUST;if(!t.zoomFactor){const o=fe(e,t);null==o?(v(n,Fe,e.renderSpatialReference),D(s.frustum,Fe)?i.scale=q(e,p(s.eye,Fe),n.latitude):i.scale=Y(e,s)):i.scale=o;const l=new $(a);X(e,i.targetGeometry,i.scale,r,c,l),i.camera=await l.resolver.promise}return i}function Re(e,t,n,r){const a=I(e);return g(De,a.viewForward),_(e,a.eye,De,a.up,Pe),n.position=new ee(t.position),n.heading=null!=t.heading?t.heading:Pe.heading,n.tilt=null!=t.tilt?t.tilt:Pe.tilt,he(e,null,n,r)}async function Ge(e,t,n,r,a){const o=I(e);return je(e,t,w(o.center,e.renderSpatialReference,e.spatialReference),n,r,a)}async function ze(e,t,n,r,a,o){o.targetGeometry=n.clone();const i=I(e);J(e,i,r);const s=ge(r,t)?K.LOCKED:K.ADJUST,c=new $(a);return V(e,n,r.heading,r.tilt,s,c),o.camera=await c.resolver.promise,o}function Se(e,t,n,r,a){let o=0;null!=n.z?o=n.z:e.basemapTerrain&&e.elevationProvider&&(o=Q(e.elevationProvider,n)),y(Fe,n.x,n.y,o),j(e.spatialReference,Fe,Te,e.renderSpatialReference),s(Ee,Te),c(Ee,Ee),z(Ue);const i=[[0,1,2],[3,1,2],[0,4,2],[3,4,2],[0,1,5],[3,1,5],[0,4,5],[3,4,5]];for(let s=0;s<i.length;s++){const t=i[s];let n=r[t[2]];isFinite(n)||(n=o),y(Fe,r[t[0]],r[t[1]],n),R(Fe,e.spatialReference,Fe,e.renderSpatialReference),M(Ue,d(Fe,Fe,Ee))}const l=F(Ue),m=T(Ue),u=E(Ue),f=1/Math.tan(t.fovX/2),p=1/Math.tan(t.fovY/2),g=.5*Math.sqrt(l*l+u*u)*Math.max(p,f)+.5*m,h=.5*m*p+.5*Math.max(l,u);return Math.max(g,h)/a}async function Be(e,t,n,r,a,o,i,s){s.targetGeometry=n.clone();const c=I(e),l=Se(e,c,n,r,a);J(e,c,o);const m=ge(o,t)?K.LOCKED:K.ADJUST;s.scale=q(e,l,s.targetGeometry.latitude);const u=new $(i);return X(e,s.targetGeometry,s.scale,o,m,u),s.camera=await u.resolver.promise,s}function ke(e,t){if(!t||!e.spatialReference)return null;const n={target:void 0};return"declaredClass"in t||Array.isArray(t)?n.target=t:(Object.assign(n,t),t.center&&!n.target&&(n.target=t.center)),n}function Me(e){return e&&null!=e.camera&&(e.rotation=ie(e.camera.heading)),e}function Ae(e,t){const n=ae;if(!t.length)return n;let r=Number.NEGATIVE_INFINITY;for(let a=0;a<t.length;a++){const e=t[a].screenSpaceBoundingRect;r=Math.max(r,Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2]),Math.abs(e[3]))}return n-r/Math.min(e.width,e.height)*2}const Fe=x(),Te=m(),Ee=l(),Ue=G(),Ze=U(),De=x(),Oe=x(),Ce=x(),Pe={heading:0,tilt:0},Ie=new ee,Je={point(e,t,n){n[0]=e.x,n[1]=e.y,null!=e.z&&(n[2]=e.z),t(n)},polygon(e,t,n){const r=e.hasZ;for(let a=0;a<e.rings.length;a++){const o=e.rings[a];for(let e=0;e<o.length;e++)n[0]=o[e][0],n[1]=o[e][1],r&&(n[2]=o[e][2]),t(n)}},polyline(e,t,n){const r=e.hasZ;for(let a=0;a<e.paths.length;a++){const o=e.paths[a];for(let e=0;e<o.length;e++)n[0]=o[e][0],n[1]=o[e][1],r&&(n[2]=o[e][2]),t(n)}},multipoint(e,t,n){const r=e.points,a=e.hasZ;for(let o=0;o<r.length;o++)n[0]=r[o][0],n[1]=r[o][1],a&&(n[2]=r[o][2]),t(n)},extent(e,t,n){null!=e.zmin&&null!=e.zmax?(t(y(n,e.xmin,e.ymin,e.zmin)),t(y(n,e.xmax,e.ymin,e.zmin)),t(y(n,e.xmin,e.ymax,e.zmin)),t(y(n,e.xmax,e.ymax,e.zmin)),t(y(n,e.xmin,e.ymin,e.zmax)),t(y(n,e.xmax,e.ymin,e.zmax)),t(y(n,e.xmin,e.ymax,e.zmax)),t(y(n,e.xmax,e.ymax,e.zmax))):(t(y(n,e.xmin,e.ymin,n[2])),t(y(n,e.xmax,e.ymin,n[2])),t(y(n,e.xmin,e.ymax,n[2])),t(y(n,e.xmax,e.ymax,n[2])))},mesh(e,t,n){const r=e.vertexAttributes&&e.vertexAttributes.position;if(r)for(let a=0;a<r.length;a+=3)t(y(n,r[a],r[a+1],r[a+2]))}};export{ue as create,me as fromCamera,ie as headingToRotation,oe as rotationToHeading,le as toCamera};
|
|
5
|
+
import e from"../../../Camera.js";import"../../../geometry.js";import t from"../../../Graphic.js";import n from"../../../Viewpoint.js";import{result as a}from"../../../core/asyncUtils.js";import"../../../core/has.js";import{cyclicalDegrees as r}from"../../../core/Cyclical.js";import o from"../../../core/Error.js";import{eachAlways as i}from"../../../core/promiseUtils.js";import{f as s,t as c}from"../../../chunks/mat3.js";import{c as l}from"../../../chunks/mat3f64.js";import{c as m}from"../../../chunks/mat4f64.js";import{g as u,a as f,i as p,c as g,b as h,s as y,t as d}from"../../../chunks/vec3.js";import{c as w}from"../../../chunks/vec3f64.js";import{projectWithZConversion as x,project as v,projectVectorToPoint as j,projectPointToVectorWithEngine as b,computeTranslationToOriginAndRotation as R,projectVectorToVector as G}from"../../../geometry/projection.js";import{create as z,empty as S,center as B,toRect as M,isPoint as Z,expandWithVec3 as A,expandWithAABB as k,width as F,height as E,depth as T}from"../../../geometry/support/aaBoundingBox.js";import{create as D,isPoint as O}from"../../../geometry/support/aaBoundingRect.js";import{intersectsPoint as U}from"../../../geometry/support/frustum.js";import{getResolutionInMetersForScale as C}from"../../../geometry/support/scaleUtils.js";import{cameraOnContentAlongViewDirection as P}from"../camera/intersectionUtils.js";import{isAsyncContext as I,internalToExternal as J,OrientationMode as K,fromExtent as L,scaleToDistance as N,fromCenterDistance as V,externalToInternal as W,computeScale as Y,AsyncContext as q,distanceToScale as X,fromCenterScale as _,directionToHeadingTilt as H,zoomToScale as Q}from"./cameraUtils.js";import{getElevationAtPoint as $}from"./ElevationProvider.js";import ee from"../../../geometry/Point.js";import te from"../../../geometry/SpatialReference.js";import ne from"../../../geometry/Extent.js";import ae from"../../../geometry/Geometry.js";import re from"../../../geometry/Multipoint.js";const oe=.66;function ie(e){return 360-r.normalize(e)}function se(e){return r.normalize(360-e)}function ce(e){return null!=e&&e.resolver&&e.resolver.reject(),null}function le(e,t){return null!=e&&e.resolver&&e.resolver.resolve(t),t}function me(e,t,n,a=null){if(!t)return ce(a);const r=e.spatialReference||te.WGS84;if(null!=t.camera){const e=t.camera,n=e.position;if(I(a))return x(n,r,a).then((t=>{const n=e.clone();n.position=t.clone(),a.resolver.resolve(n)})),null;let o;try{o=v(n,r)}catch(c){return ce(a)}const i=e.clone();return i.position=o.clone(),le(a,i)}if(null==t.targetGeometry)return ce(a);const o=J(e,e.state.camera);let i=K.ADJUST;if(null!=t.rotation&&(o.heading=ie(t.rotation),i=K.LOCKED),null!=n&&(o.tilt=n),"point"===t.targetGeometry.type)return I(a)?(ue(e,t,t.targetGeometry,o,i,a),null):fe(e,t,t.targetGeometry,o,i);const s=t.targetGeometry.extent;return s?L(e,s,o.heading,o.tilt,i,a):ce(a)}async function ue(e,t,n,a,r,o){const i=e.spatialReference,s=await x(n.clone(),i,o),c=null!=t.scale?N(e,t.scale,s.latitude):e.state.camera.distance;V(e,s,c,a,r,o)}function fe(e,t,n,a,r){const o=e.spatialReference;let i;try{i=v(n.clone(),o)}catch(c){return null}const s=null!=t.scale?N(e,t.scale,i.latitude):e.state.camera.distance;return V(e,i,s,a,r)}function pe(e,t,a=null){return null==a&&(a=new n),we(e,null,t.clone(),a)}async function ge(t,a,r){const i=ke(t,a);if(!i)throw new o("viewpointutils-create:no-target","Missing target for creating viewpoint");const s=new e({fov:t.camera.fov}),c=new n({camera:s});if(i.target instanceof n){return Fe(await be(t,i.target,i,r,c))}if(i.target instanceof e)return Fe(await Re(t,i.target,r,c));const l=null!=i.scale||null!=i.zoom;if(i.target instanceof ne){const e=i.target.xmin===i.target.xmax||i.target.ymin===i.target.ymax;return Fe(l||e?await ze(t,i,i.target.center,s,r,c):await Me(t,i,i.target,s,r,c))}const m={boundingBox:S(),hasZ:!1,screenSpaceObjects:[]},u=l?ye(t,i):void 0;if(await je(t,i.target,u,m,r),isFinite(m.boundingBox[0])){let e;if(B(m.boundingBox,Te),Le.x=Te[0],Le.y=Te[1],Le.z=Te[2],Le.spatialReference=t.spatialReference,isFinite(Le.z)&&m.hasZ?e=Z(m.boundingBox):(Le.z=void 0,e=O(M(m.boundingBox,Ce))),l||e)return Fe(await ze(t,i,Le,s,r,c));const n=Ee(t,m.screenSpaceObjects);return Fe(await Ae(t,i,Le,m.boundingBox,n,s,r,c))}return i.position?Fe(await Se(t,i,s,c,r)):Fe(await Be(t,i,s,r,c))}function he(e,t){return null==t.scale&&null!=t.zoom?Q(e,t.zoom):t.scale}function ye(e,t){const n=he(e,t);return n?C(n):void 0}function de(e,t){let n=!1;return null!=t.heading?(e.heading=t.heading,n=!0):null!=t.rotation&&(e.heading=ie(t.rotation),n=!0),null!=t.tilt&&(e.tilt=t.tilt,n=!0),null!=t.fov&&(e.fov=t.fov),n}function we(e,t,n,a){const r=e.spatialReference||te.WGS84;return null==(t=null!=t?t:W(e,n))||(a.targetGeometry=j(t.center,e.renderSpatialReference,r),a.scale=Y(e,t),a.rotation=se(n.heading),a.camera=n),a}async function xe(e,t,n,a){const r=()=>new o("viewpointutils:invalid-geometry","The target is missing a valid geometry");if(!t)throw r();const i=t.spatialReference,s=e.spatialReference,c=e.basemapTerrain.spatialReference;if(!t.hasZ&&e.basemapTerrain){let n;switch(t.type){case"point":n=t;break;case"multipoint":case"polyline":n=t.extent?.center;break;case"mesh":n=t.origin;break;case"extent":n=t.center;break;case"polygon":n=t.centroid}null!=n&&null!=c&&null!=e.elevationProvider?(n=await x(n,c,{signal:a}),Te[2]=$(e.elevationProvider,n)??0):Te[2]=0}const l=Ne[t.type],m=new Array;if(l(t,t.hasZ?e=>{m.push([e[0],e[1],e[2]])}:e=>{m.push([e[0],e[1]])},Te),0===m.length)throw r();const u=await x(new re({spatialReference:i,hasZ:t.hasZ,hasM:!1,points:m}),s,{signal:a});if(t.hasZ&&(n.hasZ=!0),t.hasZ)for(const[o,f,p]of u.points)Te[0]=o,Te[1]=f,Te[2]=p,A(n.boundingBox,Te);else for(const[o,f]of u.points)Te[0]=o,Te[1]=f,A(n.boundingBox,Te)}async function ve(e,t,n,r,o){const i=await a(e.whenViewForGraphic(t));if(!1===i.ok||null==i.value||!("whenGraphicBounds"in i.value))return void await xe(e,t.geometry,r,o);const s=i.value,c=await a(s.whenGraphicBounds(t,{minDemResolution:n}));if(!1===c.ok)return void await xe(e,t.geometry,r,o);const{screenSpaceObjects:l,boundingBox:m}=c.value;k(r.boundingBox,m),l&&l.forEach((e=>{r.screenSpaceObjects.push(e)})),isFinite(m[2])&&(r.hasZ=!0)}async function je(e,n,a,r,o){if(Array.isArray(n)&&2===n.length){const t=n[0],a=n[1];if("number"==typeof t&&"number"==typeof a)return Le.x=t,Le.y=a,Le.z=void 0,Le.spatialReference=e.spatialReference?.isGeographic?e.spatialReference:te.WGS84,void await xe(e,Le,r,o)}n&&"map"in n&&"function"==typeof n.map?await i(n.map((t=>je(e,t,a,r,o)))):n instanceof ae?await xe(e,n,r,o):n instanceof t&&await ve(e,n,a,r,o)}async function be(e,t,n,a,r){if(null!=t.camera)return Re(e,t.camera,a,r);r.scale=t.scale,r.rotation=t.rotation,r.targetGeometry=null!=t.targetGeometry?t.targetGeometry.clone():null,r.camera=null,null!=n.heading?r.rotation=se(n.heading):null!=n.rotation&&(r.rotation=n.rotation);const o=he(e,n);null!=o&&(r.scale=o);const i=new q(a);return me(e,r,n.tilt,i),r.camera=await i.resolver.promise,r}async function Re(e,t,n,a){const r=e.spatialReference,o=await x(t.position,r,{signal:n});return(t=t.clone()).fov=e.camera.fov,t.position=o,we(e,null,t,a)}async function Ge(e,t,n,a,r,o,i){const s=e.renderSpatialReference;return await b(t,Je,s,0,{signal:i}),await b(n,Ie,s,0,{signal:i}),o.targetGeometry=new ee(t),r.position=new ee(n),h(Pe,Je,Ie),H(e,Ie,Pe,a.up,r),o.scale=X(e,p(Ie,Je),o.targetGeometry.latitude),o.rotation=se(r.heading),o.camera=r,o}async function ze(e,t,n,a,r,i){if(null==n)throw new o("createfromcenter","invalid point");i.targetGeometry=n.clone();const s=P(e);if(t.position)return Ge(e,i.targetGeometry,t.position,s,a,i,r);if(t.zoomFactor){const a=s.distance/t.zoomFactor,r=u(Te,s.viewForward,-a);s.eye=f(Te,s.center,r),i.scale=X(e,a,n.latitude)}J(e,s,a);const c=de(a,t)?K.LOCKED:K.ADJUST;if(!t.zoomFactor){const o=he(e,t);if(null==o){const{renderSpatialReference:t}=e;await b(n,Te,t,0,{signal:r}),U(s.frustum,Te)?i.scale=X(e,p(s.eye,Te),n.latitude):i.scale=Y(e,s)}else i.scale=o;const l=new q(r);_(e,i.targetGeometry,i.scale,a,c,l),i.camera=await l.resolver.promise}return i}async function Se(e,t,n,a,r){const o=P(e);g(Pe,o.viewForward),H(e,o.eye,Pe,o.up,Ke);const i=e.spatialReference,{position:s}=t;if(s){const e=await x(s,i,{signal:r});n.position=e}else n.position=new ee;return n.heading=null!=t.heading?t.heading:Ke.heading,n.tilt=null!=t.tilt?t.tilt:Ke.tilt,we(e,null,n,a)}async function Be(e,t,n,a,r){const o=P(e),{spatialReference:i,renderSpatialReference:s}=e;return ze(e,t,j(o.center,s,i),n,a,r)}async function Me(e,t,n,a,r,o){o.targetGeometry=n.clone();const i=P(e);J(e,i,a);const s=de(a,t)?K.LOCKED:K.ADJUST,c=new q(r);return L(e,n,a.heading,a.tilt,s,c),o.camera=await c.resolver.promise,o}function Ze(e,t,n,a,r){let o=0;null!=n.z?o=n.z:e.basemapTerrain&&e.elevationProvider&&(o=$(e.elevationProvider,n)),y(Te,n.x,n.y,o),R(e.spatialReference,Te,De,e.renderSpatialReference),s(Oe,De),c(Oe,Oe),S(Ue);const i=[[0,1,2],[3,1,2],[0,4,2],[3,4,2],[0,1,5],[3,1,5],[0,4,5],[3,4,5]];for(let s=0;s<i.length;s++){const t=i[s];let n=a[t[2]];isFinite(n)||(n=o),y(Te,a[t[0]],a[t[1]],n),G(Te,e.spatialReference,Te,e.renderSpatialReference),A(Ue,d(Te,Te,Oe))}const l=F(Ue),m=E(Ue),u=T(Ue),f=1/Math.tan(t.fovX/2),p=1/Math.tan(t.fovY/2),g=.5*Math.sqrt(l*l+u*u)*Math.max(p,f)+.5*m,h=.5*m*p+.5*Math.max(l,u);return Math.max(g,h)/r}async function Ae(e,t,n,a,r,o,i,s){s.targetGeometry=n.clone();const c=P(e),l=Ze(e,c,n,a,r);J(e,c,o);const m=de(o,t)?K.LOCKED:K.ADJUST;s.scale=X(e,l,s.targetGeometry.latitude);const u=new q(i);return _(e,s.targetGeometry,s.scale,o,m,u),s.camera=await u.resolver.promise,s}function ke(e,t){if(!t||!e.spatialReference)return null;const n={target:void 0};return"declaredClass"in t||Array.isArray(t)?n.target=t:(Object.assign(n,t),t.center&&!n.target&&(n.target=t.center)),n}function Fe(e){return e&&null!=e.camera&&(e.rotation=se(e.camera.heading)),e}function Ee(e,t){const n=oe;if(!t.length)return n;let a=Number.NEGATIVE_INFINITY;for(let r=0;r<t.length;r++){const e=t[r].screenSpaceBoundingRect;a=Math.max(a,Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2]),Math.abs(e[3]))}return n-a/Math.min(e.width,e.height)*2}const Te=w(),De=m(),Oe=l(),Ue=z(),Ce=D(),Pe=w(),Ie=w(),Je=w(),Ke={heading:0,tilt:0},Le=new ee,Ne={point(e,t,n){n[0]=e.x,n[1]=e.y,null!=e.z&&(n[2]=e.z),t(n)},polygon(e,t,n){const a=e.hasZ;for(let r=0;r<e.rings.length;r++){const o=e.rings[r];for(let e=0;e<o.length;e++)n[0]=o[e][0],n[1]=o[e][1],a&&(n[2]=o[e][2]),t(n)}},polyline(e,t,n){const a=e.hasZ;for(let r=0;r<e.paths.length;r++){const o=e.paths[r];for(let e=0;e<o.length;e++)n[0]=o[e][0],n[1]=o[e][1],a&&(n[2]=o[e][2]),t(n)}},multipoint(e,t,n){const a=e.points,r=e.hasZ;for(let o=0;o<a.length;o++)n[0]=a[o][0],n[1]=a[o][1],r&&(n[2]=a[o][2]),t(n)},extent(e,t,n){null!=e.zmin&&null!=e.zmax?(t(y(n,e.xmin,e.ymin,e.zmin)),t(y(n,e.xmax,e.ymin,e.zmin)),t(y(n,e.xmin,e.ymax,e.zmin)),t(y(n,e.xmax,e.ymax,e.zmin)),t(y(n,e.xmin,e.ymin,e.zmax)),t(y(n,e.xmax,e.ymin,e.zmax)),t(y(n,e.xmin,e.ymax,e.zmax)),t(y(n,e.xmax,e.ymax,e.zmax))):(t(y(n,e.xmin,e.ymin,n[2])),t(y(n,e.xmax,e.ymin,n[2])),t(y(n,e.xmin,e.ymax,n[2])),t(y(n,e.xmax,e.ymax,n[2])))},mesh(e,t,n){const a=e.vertexAttributes&&e.vertexAttributes.position;if(a)for(let r=0;r<a.length;r+=3)t(y(n,a[r],a[r+1],a[r+2]))}};export{ge as create,pe as fromCamera,se as headingToRotation,ie as rotationToHeading,me as toCamera};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.28/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{releaseMaybe as e}from"../../../core/maybe.js";import{ColorFormat as h}from"../webgl-engine/core/FBOCache.js";class t{constructor(e,h){this._fbos=e,this._hasMipmap=h}get valid(){return null!=this._handle}dispose(){this._handle=e(this._handle)}getTexture(){return this._handle?.colorTexture}bind(t,i,s){this._handle&&this._handle.fbo.width===i&&this._handle.fbo.height===s||(e(this._handle),this._handle=this._fbos.acquire(this._hasMipmap?h.
|
|
5
|
+
import{releaseMaybe as e}from"../../../core/maybe.js";import{ColorFormat as h}from"../webgl-engine/core/FBOCache.js";class t{constructor(e,h){this._fbos=e,this._hasMipmap=h}get valid(){return null!=this._handle}dispose(){this._handle=e(this._handle)}getTexture(){return this._handle?.colorTexture}bind(t,i,s){this._handle&&this._handle.fbo.width===i&&this._handle.fbo.height===s||(e(this._handle),this._handle=this._fbos.acquire(this._hasMipmap?h.RGBA_MIPMAP:h.RGBA,i,s)),t.bindFramebuffer(this._handle?.fbo)}generateMipMap(){this._hasMipmap&&this._handle?.colorTexture?.generateMipmap()}get gpuMemoryUsage(){return this._handle?.memoryUsage??0}}export{t as OverlayFramebufferObject};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.28/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import{Cyclical as r,cyclicalPI as s}from"../../../core/Cyclical.js";import has from"../../../core/has.js";import{clamp as i,deg2rad as a}from"../../../core/mathUtils.js";import{watch as n,sync as o}from"../../../core/reactiveUtils.js";import{Milliseconds as l}from"../../../core/time.js";import{property as h}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import{subclass as c}from"../../../core/accessorSupport/decorators/subclass.js";import{c as d}from"../../../chunks/vec2.js";import{a as u,b as p,z as _,c as m,i as y}from"../../../chunks/vec3.js";import{c as g}from"../../../chunks/vec3f64.js";import{t as v,b as f,a as R}from"../../../chunks/vec4.js";import{c as O,f as w}from"../../../chunks/vec4f64.js";import{getReferenceEllipsoid as T}from"../../../geometry/ellipsoidUtils.js";import{projectVectorToVector as x}from"../../../geometry/projection.js";import{create as D,width as S,copy as E,center as P,height as M,intersection as C,contains as I,intersects as U,offset as b}from"../../../geometry/support/aaBoundingRect.js";import{create as j,wrap as N}from"../../../geometry/support/ray.js";import{b as A,e as G,t as L}from"../../../chunks/sphere.js";import{angleAroundAxis as V}from"../../../geometry/support/vector.js";import{y2lat as k}from"../../../geometry/support/webMercatorUtils.js";import{viewAngle as q}from"../state/utils/viewUtils.js";import B from"../support/debugFlags.js";import{PointGraphics as F}from"../support/debugUtils.js";import{OverlayIndex as H}from"./interfaces.js";import{OverlayStretch as z}from"./Overlay.js";import{OverlayRenderer as W}from"./OverlayRenderer.js";import{RenderRequestType as Y}from"../webgl-engine/lib/basicInterfaces.js";import{newIntersector as X}from"../webgl-engine/lib/Intersector.js";import{fromValues as K}from"../webgl-engine/lib/LocalOriginFactory.js";import{UpdateParameters as Z}from"../webgl-engine/lib/Material.js";import{SortedRenderGeometryRenderer as J}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{applyTextureResizeModulo as Q}from"../webgl-engine/lib/textureUtils.js";import{removeLoadedShaderModules as $}from"../webgl-engine/parts/requireUtils.js";import{TaskPriority as ee,noBudget as te,Task as re}from"../../support/Scheduler.js";const se=[[-.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 ie,ae=class extends t{get running(){return this._placementDirty&&(this._drapeSources.size>0||this.view.graphics.length>0||B.OVERLAY_DRAW_DEBUG_TEXTURE)&&!!this._spatialReference&&!this.suspended&&this.surface.ready}get _isSpherical(){return this.view.state.isGlobal}get _worldToPCSRatio(){return null!=this._spatialReference&&this._spatialReference.isGeographic&&!this.view.state.isLocal?T(this._spatialReference).metersPerDegree:1}get suspended(){return this.surface.suspended}get updating(){return this.running||this.renderer.updating||this._contentUpdated}get hasHighlights(){return this.renderer.hasHighlights}get rendersOccluded(){return this.renderer.rendersOccluded}constructor(e){super(e),this._spatialReference=null,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._longitudeCyclical=null,this._latestOriginId=0,this._maxResolution=has("esri-mobile")?2048:4096,this._animationTimeLast=0,this._removeRenderOverlay=()=>{}}initialize(){const e=this.view;this.renderer=new W({view:e,worldToPCSRatio:this._worldToPCSRatio,spatialReference:this._spatialReference});const t=()=>this.setDrawTexturesDirty();this._groundIntersector=X(this.view.state.viewingMode),this._groundIntersector.options.backfacesTerrain=!0,this._groundIntersector.options.invisibleTerrain=!0,this._groundIntersector.options.hud=!1,this.addHandles([this.renderer.events.on("has-highlights",(()=>{t(),this.notifyChange("hasHighlights")})),this.renderer.events.on("has-water",(t=>e._stage?.renderer.setParameters({hasOverlayWater:t}))),this.renderer.events.on("renders-occluded",(()=>{t(),this.notifyChange("rendersOccluded")})),this.renderer.events.on("content-changed",t),n((()=>e.state.camera.pixelRatio),t),n((()=>e.state.alignPixelEnabled),t),this.renderer.events.on("textures-disposed",(()=>this.updateOverlayResult())),n((()=>[e.pointsOfInterest?.renderPointOfView,e.pointsOfInterest?.centerOnSurfaceFrequent?.location]),(()=>this.setPlacementDirty())),n((()=>[e.state?.pixelRatio,e.state?.contentPixelRatio]),(()=>this.setPlacementDirty()),o),this.surface.on("elevation-change",(()=>this.setPlacementDirty())),e.on("resize",(()=>this.setPlacementDirty())),e.resourceController.scheduler.registerTask(ee.OVERLAY,this),e._stage.renderView.events.on("force-camera-for-screenshot",(e=>{this._updateOverlays(te,e.camera,Y.BACKGROUND),this.renderer.hasOverlays&&this._drawOverlays(this.renderer.overlays,Y.BACKGROUND,e)}))]);let r=e=>this._renderOverlay(e);this._removeRenderOverlay=()=>r=()=>{},e._stage?.renderer.setParameters({renderOverlay:e=>r(e)})}_renderOverlay(e){this._contentUpdated=!1;const t=this.renderer;t.processSyncDrapeSources(),t.hasOverlays&&(this._dispatchAnimationUpdate(e),this._drawOverlays(t.overlays,Y.UPDATE,this.view.state))}destroy(){this._removeRenderOverlay(),this.view?._stage?.renderer.setParameters({renderOverlay:()=>{}}),null!=ie&&(ie.hide(),ie=null)}get hasOverlays(){return this.renderer.hasOverlays}setSpatialReference(e){this._spatialReference=e,this.renderer.spatialReference=e,this._longitudeCyclical=null;const t=this.view.renderSpatialReference;null!=e&&null!=t?(this._renderSR=t,this._overlaySREqualsRenderSR=e.equals(this._renderSR),this._isSpherical&&(this._longitudeCyclical=e.isWebMercator?new r(-20037508.342787,20037508.342787):new r(-180,180),this.renderer.longitudeCyclical=this._longitudeCyclical),this.renderer&&(this.renderer.worldToPCSRatio=this._worldToPCSRatio)):this.renderer.disposeOverlays()}get gpuMemoryUsage(){return this.renderer.gpuMemoryUsage}registerDrapeSource(e,t,r){this._drapeSources.add(e),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources);const s=this.renderer.createDrapeSourceRenderer(e,t,r);return this._updateDrapeSourceExtent(e),this._setContentDirty(),this.notifyChange("running"),s}registerGeometryDrapeSource(e){return this.registerDrapeSource(e,J)}_updateDrapeSourceExtent(e){2===this.renderer.overlays.length&&null!=e.setDrapingExtent&&null!=this._spatialReference&&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("running"))}registerDrapeTarget(e){this._drapeTargets.add(e),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources)}updateOverlayResult(){this.view._stage?.renderer.setParameters({overlays:this.renderer.overlays})}unregisterDrapeTarget(e){this._drapeTargets.delete(e),this.renderer.ensureDrapeTargets(this._drapeTargets)}_setContentDirty(){this.setPlacementDirty(),this.setDrawTexturesDirty()}setPlacementDirty(){this._placementDirty=!0}runTask(e){return this._updateOverlays(e,this.view.state.contentCamera,Y.UPDATE)}_updateOverlays(e,t,r){if(!this._spatialReference)return re.YIELD;const s=this._computeOverlayResolution(t);this._computeOverlayExtents(t,s,he);const i=S(he.inner)/S(he.outer);this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources);const a=this._updateOverlay(H.INNER,he.inner,s,1*he.pixelRatioAdjustment,he.mapUnitsPerPixel),n=this._updateOverlay(H.OUTER,he.outer,s,i*he.pixelRatioAdjustment,he.mapUnitsPerPixel);a!==pe.EXTENT&&n!==pe.EXTENT||(this._drapeSources.forEach((e=>this._updateDrapeSourceExtent(e))),this.surface.updateTileOverlayParams(r)),a===pe.NONE&&n===pe.NONE||this.setDrawTexturesDirty(),this._placementDirty=!1,e.madeProgress()}_computeOverlayResolution(e){const t=this.view.state.contentPixelRatio,r=e.fullWidth/e.pixelRatio*t,s=e.fullHeight/e.pixelRatio*t,i=Math.ceil(1.5*Math.max(r,s));return Math.min(Q(i),this._maxResolution)}_updateOverlay(e,t,r,s,i){if(0===this.renderer.overlays.length)return pe.NONE;const a=this.renderer.overlays[e],n=a.mapUnitsPerPixel;if(a.mapUnitsPerPixel=i,a.pixelRatio=s,ne(t,a.extent)&&r===a.resolution)return n===i?pe.NONE:pe.RERENDER_ONLY;E(a.extent,t),a.resolution=r;const o=P(a.extent);return a.renderLocalOrigin=K(o[0],o[1],0,"OV_"+this._latestOriginId++),pe.EXTENT}setTileParameters(e){const t=e.renderData.overlay;if(this.renderer.overlays.length>0){const r=this.renderer.overlays[H.INNER],s=this.renderer.overlays[H.OUTER],i=e.extent;this._rectInsideRect(r.extent,i)||this._rectanglesOverlap(i,r.extent)||this._rectanglesOverlap(i,s.extent)?(this._setTileOverlayData(i,H.INNER,t),this._setTileOverlayData(i,H.OUTER,t)):(this._clearTileOverlayData(H.INNER,t),this._clearTileOverlayData(H.OUTER,t))}else this._clearTileOverlayData(H.INNER,t),this._clearTileOverlayData(H.OUTER,t)}overlayPixelSizeInMapUnits(e){if(0===this.renderer.overlays.length)return 0;const t=this.renderer.overlays[H.INNER],r=this.renderer.overlays[H.OUTER],s=this._pointIsInExtent(e,t.extent)?t:r;return(s.extent[2]-s.extent[0])/s.resolution}_setTileOverlayData(e,t,r){if(0===this.renderer.overlays.length)return;const s=this.renderer.overlays[t].extent,i=S(s),a=M(s);let n=e[0];if(this._longitudeCyclical){n=this._longitudeCyclical.minimalMonotonic(s[0],n);const t=this._longitudeCyclical.minimalMonotonic(s[0],e[2]);n>t&&(n=t-(e[2]-e[0]))}r.setScale(t,S(e)/i,M(e)/a),r.setOffset(t,(n-s[0])/i,(e[1]-s[1])/a)}_clearTileOverlayData(e,t){t.setScale(e,-1,-1),t.setOffset(e,-1,-1)}async reloadShaders(){$(),await this.renderer.reloadShaders(),this.setDrawTexturesDirty(),this.runTask(te)}_dispatchAnimationUpdate(e){const t=l(e-this._animationTimeLast);if(t>=this.surface.view._stage.renderer.animationTimestep||null!=this.view.state.forcedAnimationTime||this._drawTexturesDirty||this._drawTexturesAnimateDirty){const r=l(t/this.surface.view._stage.renderer.animationTimeDilation),s=new Z(this.view.state.camera,r,this.view.state.forcedAnimationTime);this.renderer.updateAnimation(s)&&(this._drawTexturesAnimateDirty=!0),this._animationTimeLast=e}}setDrawTexturesDirty(){this.renderer.hasOverlays?(this._contentUpdated=!0,this._drawTexturesDirty=!0,this.view._stage.renderView.requestRender()):this.setPlacementDirty()}_intersectGroundFromView(e,t,r,s){const i=this.view.sceneIntersectionHelper.getCenterRayWithSubpixelOffset(e,ue,t,r);if(null==i)return!1;const a=i.origin,n=u(le,i.origin,i.direction);return this._groundIntersector.reset(a,n,e),this._groundIntersector.intersect([]),this.view.basemapTerrain.intersect(this._groundIntersector,null,a,n),this._groundIntersector.results.min.getIntersectionPoint(s)}_findHorizonBasedPointOfInterest(e,t){let r=.5;const a=.55,n=this.view.renderCoordsHelper.getAltitude(e.eye),o=this.view.pointsOfInterest.centerOnSurfaceFrequent,l=1e-5,h=i(o.estimatedSurfaceAltitude,e.aboveGround?-1/0:n+l,e.aboveGround?n-l:1/0),c=e.aboveGround;if("global"===this.view.viewingMode){const t=le;A(G(L,T(this.view.spatialReference).radius+h),N(e.eye,e.viewForward),t),p(t,t,e.eye);const i=s.normalize(V(e.viewForward,t,e.viewRight))/e.fovY+.5,n=i<=0||i>=1?.5:a;r=c?n*i:i+n*(1-i)}else{const t=.5*Math.PI-Math.acos(-e.viewForward[2]),s=Math.tan(t),n=w(0,s,1,0),o=v(n,n,e.projectionMatrix)[1],l=i(.5+.5*o,0,1);r=1===l||0===l?.5:c?l*a:1-(1-l)*a}return!!this._intersectGroundFromView(e,.5,r,t)&&_(t,e.eye)<o.distance*o.distance}_computeOverlayExtents(e,t,r){const s=this.view.pointsOfInterest.centerOnSurfaceFrequent.renderLocation,i=g();this._findHorizonBasedPointOfInterest(e,i)||m(i,s),B.OVERLAY_SHOW_CENTER?(null==ie&&(ie=new F(this.view.graphics,"red")),ie.show(i,this._renderSR)):null!=ie&&ie.hide();const n=Math.max(.1,y(e.eye,i)),o=q(this.view.renderCoordsHelper,s,e.eye);this._overlaySREqualsRenderSR||x(i,this._renderSR,i,this._spatialReference);const l=this.surface.extent,h=!this._isSpherical&&null!=this._spatialReference&&this._spatialReference.isGeographic,c=h&&null!=this._spatialReference?1/T(this._spatialReference).metersPerDegree:1,u=this.view.state.contentPixelRatio,p=e.perScreenPixelRatio/u*n*c;r.mapUnitsPerPixel=p/this._worldToPCSRatio;let _=t*p/2*z,v=!1,O=h?90:1/0;this._isSpherical&&null!=l&&null!=this._spatialReference&&(this._spatialReference.isWebMercator?(_/=Math.cos(k(i[1])),O=l[3]):(v=!0,_/=T(this._spatialReference).metersPerDegree,O=90),_>=O&&(_=O,i[1]=0,this._spatialReference.isWebMercator&&(i[0]=0)));let w=1;v&&(w=1/Math.max(.2,Math.cos(Math.abs(a(i[1])))),_*w>180&&(w=180/_),r.mapUnitsPerPixel*=w);const D=Math.log(2)/12;_=Math.exp(Math.round(Math.log(_)/D)*D);const P=_*w,M=32,U=.5*t/(M*P),b=.5*t/(M*_);i[0]=Math.round(i[0]*U)/U,i[1]=Math.round(i[1]*b)/b;const j=r.inner;j[0]=i[0]-P,j[1]=i[1]-_,j[2]=i[0]+P,j[3]=i[1]+_,this._isSpherical&&this._shiftExtentToFitBounds(j,1/0,O);const N=r.outer;if(6*P>S(l))E(N,l);else{if(Math.PI/2-Math.abs(o-Math.PI/2)<=.25*Math.PI)N[0]=j[0]-P,N[1]=j[1]-_,N[2]=j[2]+P,N[3]=j[3]+_;else{x(e.eye,this._renderSR,le,this._spatialReference),d(oe,i,le);let t=-Math.atan2(oe[1],oe[0])+.125*Math.PI;t<0&&(t+=2*Math.PI);const r=Math.floor(t/(.25*Math.PI));f(oe,se[r],2*_),oe[0]*=w,oe[2]*=w,R(N,j,oe)}}if(this._isSpherical)N[0]=this._longitudeCyclical.clamp(N[0]),N[2]=this._longitudeCyclical.clamp(N[2]),N[1]=Math.max(N[1],-O),N[3]=Math.min(N[3],O);else{const e=C(j,l,ce),t=C(N,l,de);I(e,t)&&(N[2]=N[0],N[3]=N[1])}const A=Math.abs(j[2]-j[0])/t;r.mapUnitsPerPixel=Math.max(r.mapUnitsPerPixel,A),r.pixelRatioAdjustment=r.mapUnitsPerPixel/A}_drawOverlays(e,t,r){if(0===e.length||!this._drawTexturesDirty&&!this._drawTexturesAnimateDirty)return;const s=this._drawTexturesDirty;this._drawTexturesDirty=!1,this._drawTexturesAnimateDirty=!1;const i=this.renderer.computeValidity();this.renderer.releaseRenderTargets(),this._drawOverlay(e[H.INNER],r),this._drawOverlay(e[H.OUTER],r);i!==this.renderer.computeValidity()&&this.surface.updateTileOverlayParams(Y.UPDATE),this.updateOverlayResult(),s?(this.surface.requestRender(t),t===Y.UPDATE&&this.surface.requestUpdate()):this.surface.requestRender(Y.BACKGROUND)}_drawOverlay(e,t){this._longitudeCyclical?e.setupGeometryViewsCyclical(this._longitudeCyclical):e.setupGeometryViewsDirect(),e.draw(this.renderer,t)}_rectanglesOverlap(e,t){return null!=e&&(this._longitudeCyclical?(this._longitudeCyclical.contains(t[0],t[2],e[0])||this._longitudeCyclical.contains(t[0],t[2],e[2])||this._longitudeCyclical.contains(e[0],e[2],t[0]))&&!(e[1]>t[3]||e[3]<t[1]):U(e,t))}_rectInsideRect(e,t){return null!=t&&(this._longitudeCyclical?this._longitudeCyclical.contains(e[0],e[2],t[0])&&this._longitudeCyclical.contains(e[0],e[2],t[2])&&t[1]>e[1]&&t[3]<e[3]:I(e,t))}_pointIsInExtent(e,t){if(this._longitudeCyclical)return this._longitudeCyclical.contains(t[0],t[2],e.x)&&e.y>=t[1]&&e.y<=t[3];const r=e.x,s=e.y;return r>t[0]&&r<t[2]&&s>t[1]&&s<t[3]}_shiftExtentToFitBounds(e,t,r){let s=0,i=0;e[0]<-t?s=e[0]+t:e[2]>t&&(s=t-e[2]),e[1]<-r?i=e[1]+r:e[3]>r&&(i=r-e[3]),b(e,s,i)}get test(){return{renderer:this.renderer,update:()=>this.runTask(te)}}};function ne(e,t){const r=1e-5,s=B.TESTS_DISABLE_OPTIMIZATIONS?0:r*Math.max(e[2]-e[0],e[3]-e[1],t[2]-t[0],t[3]-t[1]);return Math.abs(t[0]-e[0])<=s&&Math.abs(t[1]-e[1])<=s&&Math.abs(t[2]-e[2])<=s&&Math.abs(t[3]-e[3])<=s}e([h()],ae.prototype,"_spatialReference",void 0),e([h({readOnly:!0})],ae.prototype,"running",null),e([h()],ae.prototype,"_placementDirty",void 0),e([h()],ae.prototype,"_contentUpdated",void 0),e([h()],ae.prototype,"_isSpherical",null),e([h()],ae.prototype,"_worldToPCSRatio",null),e([h({autoDestroy:!0})],ae.prototype,"renderer",void 0),e([h({constructOnly:!0})],ae.prototype,"view",void 0),e([h({constructOnly:!0})],ae.prototype,"surface",void 0),e([h()],ae.prototype,"suspended",null),e([h()],ae.prototype,"updating",null),e([h({type:Boolean})],ae.prototype,"hasHighlights",null),e([h({type:Boolean})],ae.prototype,"rendersOccluded",null),ae=e([c("esri.views.3d.terrain.OverlayManager")],ae);const oe=O(),le=g(),he={inner:D(),outer:D(),mapUnitsPerPixel:0,pixelRatioAdjustment:1},ce=D(),de=D(),ue=j();var pe;!function(e){e[e.NONE=0]="NONE",e[e.EXTENT=1]="EXTENT",e[e.RERENDER_ONLY=2]="RERENDER_ONLY"}(pe||(pe={}));export{ae as OverlayManager};
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import{Cyclical as r,cyclicalPI as s}from"../../../core/Cyclical.js";import has from"../../../core/has.js";import{clamp as i,deg2rad as a}from"../../../core/mathUtils.js";import{watch as n,sync as o}from"../../../core/reactiveUtils.js";import{Milliseconds as l}from"../../../core/time.js";import{property as h}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import{subclass as c}from"../../../core/accessorSupport/decorators/subclass.js";import{c as d}from"../../../chunks/vec2.js";import{a as u,b as p,z as _,c as m,i as y}from"../../../chunks/vec3.js";import{c as g}from"../../../chunks/vec3f64.js";import{t as v,b as f,a as R}from"../../../chunks/vec4.js";import{c as O,f as w}from"../../../chunks/vec4f64.js";import{getReferenceEllipsoid as T}from"../../../geometry/ellipsoidUtils.js";import{projectVectorToVector as x}from"../../../geometry/projection.js";import{create as D,width as S,copy as E,center as P,height as M,intersection as C,contains as I,intersects as U,offset as b}from"../../../geometry/support/aaBoundingRect.js";import{create as j,wrap as N}from"../../../geometry/support/ray.js";import{b as A,e as G,t as L}from"../../../chunks/sphere.js";import{angleAroundAxis as V}from"../../../geometry/support/vector.js";import{y2lat as k}from"../../../geometry/support/webMercatorUtils.js";import{viewAngle as q}from"../state/utils/viewUtils.js";import B from"../support/debugFlags.js";import{PointGraphics as F}from"../support/debugUtils.js";import{OverlayIndex as H}from"./interfaces.js";import{OverlayStretch as z}from"./Overlay.js";import{OverlayRenderer as W}from"./OverlayRenderer.js";import{RenderRequestType as Y}from"../webgl-engine/lib/basicInterfaces.js";import{newIntersector as X}from"../webgl-engine/lib/Intersector.js";import{fromValues as K}from"../webgl-engine/lib/LocalOriginFactory.js";import{UpdateParameters as Z}from"../webgl-engine/lib/Material.js";import{SortedRenderGeometryRenderer as J}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{applyTextureResizeModulo as Q}from"../webgl-engine/lib/textureUtils.js";import{removeLoadedShaderModules as $}from"../webgl-engine/parts/requireUtils.js";import{TaskPriority as ee,noBudget as te,Task as re}from"../../support/Scheduler.js";const se=[[-.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 ie,ae=class extends t{get running(){return this._placementDirty&&(this._drapeSources.size>0||this.view.graphics.length>0||B.OVERLAY_DRAW_DEBUG_TEXTURE)&&!!this._spatialReference&&!this.suspended&&this.surface.ready}get _isSpherical(){return this.view.state.isGlobal}get _worldToPCSRatio(){return null!=this._spatialReference&&this._spatialReference.isGeographic&&!this.view.state.isLocal?T(this._spatialReference).metersPerDegree:1}get suspended(){return this.surface.suspended}get updating(){return this.running||this.renderer.updating||this._contentUpdated}get hasHighlights(){return this.renderer.hasHighlights}get rendersOccluded(){return this.renderer.rendersOccluded}constructor(e){super(e),this._spatialReference=null,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._longitudeCyclical=null,this._latestOriginId=0,this._maxResolution=has("esri-mobile")?2048:4096,this._animationTimeLast=0,this._removeRenderOverlay=()=>{}}initialize(){const e=this.view;this.renderer=new W({view:e,worldToPCSRatio:this._worldToPCSRatio,spatialReference:this._spatialReference});const t=()=>this.setDrawTexturesDirty();this._groundIntersector=X(this.view.state.viewingMode),this._groundIntersector.options.backfacesTerrain=!0,this._groundIntersector.options.invisibleTerrain=!0,this._groundIntersector.options.hud=!1,this.addHandles([this.renderer.events.on("has-highlights",(()=>{t(),this.notifyChange("hasHighlights")})),this.renderer.events.on("has-water",(t=>e._stage?.renderer.setParameters({hasOverlayWater:t}))),this.renderer.events.on("renders-occluded",(()=>{t(),this.notifyChange("rendersOccluded")})),this.renderer.events.on("content-changed",t),n((()=>e.state.camera.pixelRatio),t),n((()=>e.state.alignPixelEnabled),t),this.renderer.events.on("textures-disposed",(()=>this.updateOverlayResult())),n((()=>[e.pointsOfInterest?.renderPointOfView,e.pointsOfInterest?.centerOnSurfaceFrequent?.location]),(()=>this.setPlacementDirty())),n((()=>[e.state?.pixelRatio,e.state?.contentPixelRatio]),(()=>this.setPlacementDirty()),o),this.surface.on("elevation-change",(()=>this.setPlacementDirty())),e.on("resize",(()=>this.setPlacementDirty())),e.resourceController.scheduler.registerTask(ee.OVERLAY,this),e._stage.renderView.events.on("force-camera-for-screenshot",(e=>{this._updateOverlays(te,e.camera,Y.BACKGROUND),this.renderer.hasOverlays&&this._drawOverlays(this.renderer.overlays,Y.BACKGROUND,e)}))]);let r=e=>this._renderOverlay(e);this._removeRenderOverlay=()=>r=()=>{},e._stage?.renderer.setParameters({renderOverlay:e=>r(e)})}_renderOverlay(e){this._contentUpdated=!1;const t=this.renderer;t.processSyncDrapeSources(),t.hasOverlays&&(this._dispatchAnimationUpdate(e),this._drawOverlays(t.overlays,Y.UPDATE,this.view.state))}destroy(){this._removeRenderOverlay(),this.view?._stage?.renderer.setParameters({renderOverlay:()=>{}}),null!=ie&&(ie.hide(),ie=null)}get hasOverlays(){return this.renderer.hasOverlays}setSpatialReference(e){this._spatialReference=e,this.renderer.spatialReference=e,this._longitudeCyclical=null;const t=this.view.renderSpatialReference;null!=e&&null!=t?(this._renderSR=t,this._overlaySREqualsRenderSR=e.equals(this._renderSR),this._isSpherical&&(this._longitudeCyclical=e.isWebMercator?new r(-20037508.342787,20037508.342787):new r(-180,180),this.renderer.longitudeCyclical=this._longitudeCyclical),this.renderer&&(this.renderer.worldToPCSRatio=this._worldToPCSRatio)):this.renderer.disposeOverlays()}get usedMemory(){return this.renderer.usedMemory}registerDrapeSource(e,t,r){this._drapeSources.add(e),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources);const s=this.renderer.createDrapeSourceRenderer(e,t,r);return this._updateDrapeSourceExtent(e),this._setContentDirty(),this.notifyChange("running"),s}registerGeometryDrapeSource(e){return this.registerDrapeSource(e,J)}_updateDrapeSourceExtent(e){2===this.renderer.overlays.length&&null!=e.setDrapingExtent&&null!=this._spatialReference&&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("running"))}registerDrapeTarget(e){this._drapeTargets.add(e),this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources)}updateOverlayResult(){this.view._stage?.renderer.setParameters({overlays:this.renderer.overlays})}unregisterDrapeTarget(e){this._drapeTargets.delete(e),this.renderer.ensureDrapeTargets(this._drapeTargets)}_setContentDirty(){this.setPlacementDirty(),this.setDrawTexturesDirty()}setPlacementDirty(){this._placementDirty=!0}runTask(e){return this._updateOverlays(e,this.view.state.contentCamera,Y.UPDATE)}_updateOverlays(e,t,r){if(!this._spatialReference)return re.YIELD;const s=this._computeOverlayResolution(t);this._computeOverlayExtents(t,s,he);const i=S(he.inner)/S(he.outer);this.renderer.ensureOverlays(this._drapeTargets,this._drapeSources);const a=this._updateOverlay(H.INNER,he.inner,s,1*he.pixelRatioAdjustment,he.mapUnitsPerPixel),n=this._updateOverlay(H.OUTER,he.outer,s,i*he.pixelRatioAdjustment,he.mapUnitsPerPixel);a!==pe.EXTENT&&n!==pe.EXTENT||(this._drapeSources.forEach((e=>this._updateDrapeSourceExtent(e))),this.surface.updateTileOverlayParams(r)),a===pe.NONE&&n===pe.NONE||this.setDrawTexturesDirty(),this._placementDirty=!1,e.madeProgress()}_computeOverlayResolution(e){const t=this.view.state.contentPixelRatio,r=e.fullWidth/e.pixelRatio*t,s=e.fullHeight/e.pixelRatio*t,i=Math.ceil(1.5*Math.max(r,s));return Math.min(Q(i),this._maxResolution)}_updateOverlay(e,t,r,s,i){if(0===this.renderer.overlays.length)return pe.NONE;const a=this.renderer.overlays[e],n=a.mapUnitsPerPixel;if(a.mapUnitsPerPixel=i,a.pixelRatio=s,ne(t,a.extent)&&r===a.resolution)return n===i?pe.NONE:pe.RERENDER_ONLY;E(a.extent,t),a.resolution=r;const o=P(a.extent);return a.renderLocalOrigin=K(o[0],o[1],0,"OV_"+this._latestOriginId++),pe.EXTENT}setTileParameters(e){const t=e.renderData.overlay;if(this.renderer.overlays.length>0){const r=this.renderer.overlays[H.INNER],s=this.renderer.overlays[H.OUTER],i=e.extent;this._rectInsideRect(r.extent,i)||this._rectanglesOverlap(i,r.extent)||this._rectanglesOverlap(i,s.extent)?(this._setTileOverlayData(i,H.INNER,t),this._setTileOverlayData(i,H.OUTER,t)):(this._clearTileOverlayData(H.INNER,t),this._clearTileOverlayData(H.OUTER,t))}else this._clearTileOverlayData(H.INNER,t),this._clearTileOverlayData(H.OUTER,t)}overlayPixelSizeInMapUnits(e){if(0===this.renderer.overlays.length)return 0;const t=this.renderer.overlays[H.INNER],r=this.renderer.overlays[H.OUTER],s=this._pointIsInExtent(e,t.extent)?t:r;return(s.extent[2]-s.extent[0])/s.resolution}_setTileOverlayData(e,t,r){if(0===this.renderer.overlays.length)return;const s=this.renderer.overlays[t].extent,i=S(s),a=M(s);let n=e[0];if(this._longitudeCyclical){n=this._longitudeCyclical.minimalMonotonic(s[0],n);const t=this._longitudeCyclical.minimalMonotonic(s[0],e[2]);n>t&&(n=t-(e[2]-e[0]))}r.setScale(t,S(e)/i,M(e)/a),r.setOffset(t,(n-s[0])/i,(e[1]-s[1])/a)}_clearTileOverlayData(e,t){t.setScale(e,-1,-1),t.setOffset(e,-1,-1)}async reloadShaders(){$(),await this.renderer.reloadShaders(),this.setDrawTexturesDirty(),this.runTask(te)}_dispatchAnimationUpdate(e){const t=l(e-this._animationTimeLast);if(t>=this.surface.view._stage.renderer.animationTimestep||null!=this.view.state.forcedAnimationTime||this._drawTexturesDirty||this._drawTexturesAnimateDirty){const r=l(t/this.surface.view._stage.renderer.animationTimeDilation),s=new Z(this.view.state.camera,r,this.view.state.forcedAnimationTime);this.renderer.updateAnimation(s)&&(this._drawTexturesAnimateDirty=!0),this._animationTimeLast=e}}setDrawTexturesDirty(){this.renderer.hasOverlays?(this._contentUpdated=!0,this._drawTexturesDirty=!0,this.view._stage.renderView.requestRender()):this.setPlacementDirty()}_intersectGroundFromView(e,t,r,s){const i=this.view.sceneIntersectionHelper.getCenterRayWithSubpixelOffset(e,ue,t,r);if(null==i)return!1;const a=i.origin,n=u(le,i.origin,i.direction);return this._groundIntersector.reset(a,n,e),this._groundIntersector.intersect([]),this.view.basemapTerrain.intersect(this._groundIntersector,null,a,n),this._groundIntersector.results.min.getIntersectionPoint(s)}_findHorizonBasedPointOfInterest(e,t){let r=.5;const a=.55,n=this.view.renderCoordsHelper.getAltitude(e.eye),o=this.view.pointsOfInterest.centerOnSurfaceFrequent,l=1e-5,h=i(o.estimatedSurfaceAltitude,e.aboveGround?-1/0:n+l,e.aboveGround?n-l:1/0),c=e.aboveGround;if("global"===this.view.viewingMode){const t=le;A(G(L,T(this.view.spatialReference).radius+h),N(e.eye,e.viewForward),t),p(t,t,e.eye);const i=s.normalize(V(e.viewForward,t,e.viewRight))/e.fovY+.5,n=i<=0||i>=1?.5:a;r=c?n*i:i+n*(1-i)}else{const t=.5*Math.PI-Math.acos(-e.viewForward[2]),s=Math.tan(t),n=w(0,s,1,0),o=v(n,n,e.projectionMatrix)[1],l=i(.5+.5*o,0,1);r=1===l||0===l?.5:c?l*a:1-(1-l)*a}return!!this._intersectGroundFromView(e,.5,r,t)&&_(t,e.eye)<o.distance*o.distance}_computeOverlayExtents(e,t,r){const s=this.view.pointsOfInterest.centerOnSurfaceFrequent.renderLocation,i=g();this._findHorizonBasedPointOfInterest(e,i)||m(i,s),B.OVERLAY_SHOW_CENTER?(null==ie&&(ie=new F(this.view.graphics,"red")),ie.show(i,this._renderSR)):null!=ie&&ie.hide();const n=Math.max(.1,y(e.eye,i)),o=q(this.view.renderCoordsHelper,s,e.eye);this._overlaySREqualsRenderSR||x(i,this._renderSR,i,this._spatialReference);const l=this.surface.extent,h=!this._isSpherical&&null!=this._spatialReference&&this._spatialReference.isGeographic,c=h&&null!=this._spatialReference?1/T(this._spatialReference).metersPerDegree:1,u=this.view.state.contentPixelRatio,p=e.perScreenPixelRatio/u*n*c;r.mapUnitsPerPixel=p/this._worldToPCSRatio;let _=t*p/2*z,v=!1,O=h?90:1/0;this._isSpherical&&null!=l&&null!=this._spatialReference&&(this._spatialReference.isWebMercator?(_/=Math.cos(k(i[1])),O=l[3]):(v=!0,_/=T(this._spatialReference).metersPerDegree,O=90),_>=O&&(_=O,i[1]=0,this._spatialReference.isWebMercator&&(i[0]=0)));let w=1;v&&(w=1/Math.max(.2,Math.cos(Math.abs(a(i[1])))),_*w>180&&(w=180/_),r.mapUnitsPerPixel*=w);const D=Math.log(2)/12;_=Math.exp(Math.round(Math.log(_)/D)*D);const P=_*w,M=32,U=.5*t/(M*P),b=.5*t/(M*_);i[0]=Math.round(i[0]*U)/U,i[1]=Math.round(i[1]*b)/b;const j=r.inner;j[0]=i[0]-P,j[1]=i[1]-_,j[2]=i[0]+P,j[3]=i[1]+_,this._isSpherical&&this._shiftExtentToFitBounds(j,1/0,O);const N=r.outer;if(6*P>S(l))E(N,l);else{if(Math.PI/2-Math.abs(o-Math.PI/2)<=.25*Math.PI)N[0]=j[0]-P,N[1]=j[1]-_,N[2]=j[2]+P,N[3]=j[3]+_;else{x(e.eye,this._renderSR,le,this._spatialReference),d(oe,i,le);let t=-Math.atan2(oe[1],oe[0])+.125*Math.PI;t<0&&(t+=2*Math.PI);const r=Math.floor(t/(.25*Math.PI));f(oe,se[r],2*_),oe[0]*=w,oe[2]*=w,R(N,j,oe)}}if(this._isSpherical)N[0]=this._longitudeCyclical.clamp(N[0]),N[2]=this._longitudeCyclical.clamp(N[2]),N[1]=Math.max(N[1],-O),N[3]=Math.min(N[3],O);else{const e=C(j,l,ce),t=C(N,l,de);I(e,t)&&(N[2]=N[0],N[3]=N[1])}const A=Math.abs(j[2]-j[0])/t;r.mapUnitsPerPixel=Math.max(r.mapUnitsPerPixel,A),r.pixelRatioAdjustment=r.mapUnitsPerPixel/A}_drawOverlays(e,t,r){if(0===e.length||!this._drawTexturesDirty&&!this._drawTexturesAnimateDirty)return;const s=this._drawTexturesDirty;this._drawTexturesDirty=!1,this._drawTexturesAnimateDirty=!1;const i=this.renderer.computeValidity();this.renderer.releaseRenderTargets(),this._drawOverlay(e[H.INNER],r),this._drawOverlay(e[H.OUTER],r);i!==this.renderer.computeValidity()&&this.surface.updateTileOverlayParams(Y.UPDATE),this.updateOverlayResult(),s?(this.surface.requestRender(t),t===Y.UPDATE&&this.surface.requestUpdate()):this.surface.requestRender(Y.BACKGROUND)}_drawOverlay(e,t){this._longitudeCyclical?e.setupGeometryViewsCyclical(this._longitudeCyclical):e.setupGeometryViewsDirect(),e.draw(this.renderer,t)}_rectanglesOverlap(e,t){return null!=e&&(this._longitudeCyclical?(this._longitudeCyclical.contains(t[0],t[2],e[0])||this._longitudeCyclical.contains(t[0],t[2],e[2])||this._longitudeCyclical.contains(e[0],e[2],t[0]))&&!(e[1]>t[3]||e[3]<t[1]):U(e,t))}_rectInsideRect(e,t){return null!=t&&(this._longitudeCyclical?this._longitudeCyclical.contains(e[0],e[2],t[0])&&this._longitudeCyclical.contains(e[0],e[2],t[2])&&t[1]>e[1]&&t[3]<e[3]:I(e,t))}_pointIsInExtent(e,t){if(this._longitudeCyclical)return this._longitudeCyclical.contains(t[0],t[2],e.x)&&e.y>=t[1]&&e.y<=t[3];const r=e.x,s=e.y;return r>t[0]&&r<t[2]&&s>t[1]&&s<t[3]}_shiftExtentToFitBounds(e,t,r){let s=0,i=0;e[0]<-t?s=e[0]+t:e[2]>t&&(s=t-e[2]),e[1]<-r?i=e[1]+r:e[3]>r&&(i=r-e[3]),b(e,s,i)}get test(){return{renderer:this.renderer,update:()=>this.runTask(te)}}};function ne(e,t){const r=1e-5,s=B.TESTS_DISABLE_OPTIMIZATIONS?0:r*Math.max(e[2]-e[0],e[3]-e[1],t[2]-t[0],t[3]-t[1]);return Math.abs(t[0]-e[0])<=s&&Math.abs(t[1]-e[1])<=s&&Math.abs(t[2]-e[2])<=s&&Math.abs(t[3]-e[3])<=s}e([h()],ae.prototype,"_spatialReference",void 0),e([h({readOnly:!0})],ae.prototype,"running",null),e([h()],ae.prototype,"_placementDirty",void 0),e([h()],ae.prototype,"_contentUpdated",void 0),e([h()],ae.prototype,"_isSpherical",null),e([h()],ae.prototype,"_worldToPCSRatio",null),e([h({autoDestroy:!0})],ae.prototype,"renderer",void 0),e([h({constructOnly:!0})],ae.prototype,"view",void 0),e([h({constructOnly:!0})],ae.prototype,"surface",void 0),e([h()],ae.prototype,"suspended",null),e([h()],ae.prototype,"updating",null),e([h({type:Boolean})],ae.prototype,"hasHighlights",null),e([h({type:Boolean})],ae.prototype,"rendersOccluded",null),ae=e([c("esri.views.3d.terrain.OverlayManager")],ae);const oe=O(),le=g(),he={inner:D(),outer:D(),mapUnitsPerPixel:0,pixelRatioAdjustment:1},ce=D(),de=D(),ue=j();var pe;!function(e){e[e.NONE=0]="NONE",e[e.EXTENT=1]="EXTENT",e[e.RERENDER_ONLY=2]="RERENDER_ONLY"}(pe||(pe={}));export{ae as OverlayManager};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.28/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Accessor.js";import t from"../../../core/Evented.js";import{someMap as s}from"../../../core/MapUtils.js";import{releaseMaybe as i,disposeMaybe as o,destroyMaybe as a}from"../../../core/maybe.js";import n from"../../../core/PooledArray.js";import{watch as h,syncAndInitial as d,on as l}from"../../../core/reactiveUtils.js";import{someSet as c}from"../../../core/SetUtils.js";import{property as u}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import{subclass as p}from"../../../core/accessorSupport/decorators/subclass.js";import{x as m,f as _}from"../../../chunks/mat4.js";import{s as g}from"../../../chunks/vec3.js";import{f as y}from"../../../chunks/vec3f64.js";import{ViewingMode as R}from"../../ViewingMode.js";import{DrapeTargetType as f,DrapeSourceType as T,DrapedRenderGroup as w}from"../layers/interfaces.js";import b from"../support/debugFlags.js";import{OverlayIndex as v,RenderTargetType as x}from"./interfaces.js";import{Overlay as S,OverlayStretch as D}from"./Overlay.js";import{OverlayRenderTarget as O}from"./OverlayRenderTarget.js";import{ColorFormat as P}from"../webgl-engine/core/FBOCache.js";import{ShaderOutput as j}from"../webgl-engine/core/shaderLibrary/ShaderOutput.js";import{T as E}from"../../../chunks/TextureOnly.glsl.js";import{ShaderTechniqueRepository as C}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueRepository.js";import{Camera as A}from"../webgl-engine/lib/Camera.js";import{GLMaterialRepository as q}from"../webgl-engine/lib/GLMaterialRepository.js";import{createEmptyDepthTexture as V,createQuadVAO as M}from"../webgl-engine/lib/glUtil3D.js";import{GridLocalOriginFactory as W}from"../webgl-engine/lib/GridLocalOriginFactory.js";import{RenderOccludedFlag as H}from"../webgl-engine/lib/Material.js";import{OverlayRenderContext as L}from"../webgl-engine/lib/RenderContext.js";import{RenderSlot as F}from"../webgl-engine/lib/RenderSlot.js";import{ShadowMap as U}from"../webgl-engine/lib/ShadowMap.js";import{SortedRenderGeometryRenderer as I}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{SSAOHelper as k}from"../webgl-engine/lib/SSAOHelper.js";import{TextureTechnique as N}from"../webgl-engine/lib/TextureTechnique.js";import{TextureTechniqueConfiguration as G}from"../webgl-engine/lib/TextureTechniqueConfiguration.js";import{TransparencyPassType as B}from"../webgl-engine/lib/TransparencyPassType.js";import{UpdatePolicy as z}from"../webgl-engine/lib/UpdatePolicy.js";import{AmbientLight as Y}from"../webgl-engine/lighting/Lightsources.js";import{TaskPriority as X,noBudget as J}from"../../support/Scheduler.js";import{ClearBufferBit as K,PrimitiveType as Q,TextureSamplingMode as Z}from"../../webgl/enums.js";import{Texture as $}from"../../webgl/Texture.js";import{TextureDescriptor as ee}from"../../webgl/TextureDescriptor.js";import{vertexCount as re}from"../../webgl/Util.js";let te=class extends r{get _bindParameters(){return this._renderContext.bindParameters}get _rctx(){return this.view._stage.renderView.renderingContext}get rctx(){return this._rctx}get materialRepository(){return this._materialRepository}get screenToWorldRatio(){return this._screenToWorldRatio}get localOriginFactory(){return this._localOriginFactory}constructor(e){super(e),this._overlays=null,this._overlayRenderTarget=null,this._hasHighlights=!1,this._rendersOccluded=!1,this._hasWater=!1,this._renderers=new Map,this._sortedDrapeSourceRenderersDirty=!1,this._sortedRenderers=new n,this._passParameters=new E,this._materialRepository=null,this._screenToWorldRatio=1,this._localOriginFactory=null,this._camera=new A,this.worldToPCSRatio=1,this.events=new t,this.longitudeCyclical=null}initialize(){const e=this.view._stage.renderer.fboCache,r=this.view._stage.renderView,{waterTextureRepository:t,stippleTextureRepository:s,markerTextureRepository:i}=r;this._shaderTechniqueRepository=new C({rctx:this._rctx,viewingMode:R.Local,stippleTextureRepository:s,markerTextureRepository:i,waterTextureRepository:t}),this._renderContext=new L(this._rctx,new U(e,this.view.state.viewingMode),new k(this.view,e,this._shaderTechniqueRepository,(()=>{}))),this.addHandles([h((()=>t.updating),(()=>this.events.emit("content-changed")),d),h((()=>this.spatialReference),(e=>this._localOriginFactory=new W(e)),d),l((()=>this.view.allLayerViews),"after-changes",(()=>this._sortedDrapeSourceRenderersDirty=!0))]),this._materialRepository=new q(r.textureRepository,this._shaderTechniqueRepository,(e=>{(e.renderOccluded&ae)>0!==this._rendersOccluded&&this._updateRendersOccluded(),this.events.emit("content-changed"),this.notifyChange("updating"),this.notifyChange("isEmpty")}),(()=>this.events.emit("content-changed"))),this._bindParameters.slot=F.DRAPED_MATERIAL,this._bindParameters.mainDepth=V(this._rctx),this._camera.near=1,this._camera.far=1e4,this._camera.relativeElevation=null,this._bindParameters.camera=this._camera,this._bindParameters.transparencyPassType=B.NONE,this._bindParameters.newLighting.noonFactor=0,this._bindParameters.newLighting.globalFactor=0,this._bindParameters.newLighting.set([new Y(y(1,1,1))]),this.addHandles(this.view.resourceController.scheduler.registerTask(X.STAGE,this))}destroy(){this._renderers.forEach((e=>e.destroy())),this._renderers.clear(),this._debugTextureTechnique=i(this._debugTextureTechnique),this._passParameters.texture=o(this._passParameters.texture),this._bindParameters.mainDepth=o(this._bindParameters.mainDepth),this._shaderTechniqueRepository=a(this._shaderTechniqueRepository),this._quadVAO=o(this._quadVAO),this.disposeOverlays()}get updating(){return this._sortedDrapeSourceRenderersDirty||s(this._renderers,(e=>e.updating))}get hasOverlays(){return null!=this._overlays&&null!=this._overlayRenderTarget}get gpuMemoryUsage(){return null!=this._overlayRenderTarget?this._overlayRenderTarget.gpuMemoryUsage:0}createGeometryDrapeSourceRenderer(e){return this.createDrapeSourceRenderer(e,I)}createDrapeSourceRenderer(e,r,t){const s=this._renderers.get(e);null!=s&&s.destroy();const i=new r({...t,rendererContext:this,drapeSource:e});return this._renderers.set(e,i),this._sortedDrapeSourceRenderersDirty=!0,"fullOpacity"in e&&this.addHandles(h((()=>e.fullOpacity),(()=>this.events.emit("content-changed"))),e),i}removeDrapeSourceRenderer(e){if(null==e)return;const r=this._renderers.get(e);null!=r&&(this._sortedDrapeSourceRenderersDirty=!0,this._renderers.delete(e),this.removeHandles(e),r.destroy())}computeValidity(){return this._overlayRenderTarget?.computeValidity()??0}releaseRenderTargets(){this._overlayRenderTarget?.dispose()}get overlays(){return this._overlays??[]}ensureDrapeTargets(e){null!=this._overlays&&this._overlays.forEach((r=>r.hasTargetWithoutRasterImage=c(e,(e=>e.drapeTargetType===f.WithoutRasterImage))))}ensureDrapeSources(e){null!=this._overlays&&this._overlays.forEach((r=>{r.hasDrapedFeatureSource=c(e,(e=>e.drapeSourceType===T.Features)),r.hasDrapedRasterSource=c(e,(e=>e.drapeSourceType===T.RasterImage))}))}ensureOverlays(e,r){null==this._overlays&&(this._overlayRenderTarget=new O(this.view._stage.renderer.fboCache),this._overlays=[new S(v.INNER,this._overlayRenderTarget),new S(v.OUTER,this._overlayRenderTarget)]),this.ensureDrapeTargets(e),this.ensureDrapeSources(r)}disposeOverlays(){this._overlays=null,this._overlayRenderTarget=o(this._overlayRenderTarget),this.events.emit("textures-disposed")}get running(){return this.updating}runTask(e){this._processDrapeSources(e,(()=>!0))}_processDrapeSources(e,r){let t=!1;for(const[s,i]of this._renderers){if(e.done)break;(s.destroyed||r(s))&&(i.commitChanges()&&(t=!0,e.madeProgress()))}this._sortedDrapeSourceRenderersDirty&&(this._sortedDrapeSourceRenderersDirty=!1,t=!0,this._updateSortedDrapeSourceRenderers()),t&&(null!=this._overlays&&0===this._renderers.size&&this.disposeOverlays(),this.notifyChange("updating"),this.notifyChange("isEmpty"),this.events.emit("content-changed"),this._updateHasHighlights(),this._updateRendersOccluded(),this._updateHasWater())}processSyncDrapeSources(){this._processDrapeSources(J,(e=>e.updatePolicy===z.SYNC))}get isEmpty(){return!b.OVERLAY_DRAW_DEBUG_TEXTURE&&!s(this._renderers,(e=>!e.isEmpty))}get hasHighlights(){return this._hasHighlights}get hasWater(){return this._hasWater}get rendersOccluded(){return this._rendersOccluded}updateAnimation(e){let r=!1;return this._renderers.forEach((t=>r=t.updateAnimation(e)||r)),r}updateDrapeSourceOrder(){this._sortedDrapeSourceRenderersDirty=!0}drawTarget(e,r,t){const s=e.canvasGeometries;if(0===s.numViews)return;const{alignPixelEnabled:i,contentPixelRatio:o}=t;this._screenToWorldRatio=o*e.mapUnitsPerPixel/D;const a=r.output;if(this.isEmpty||a===j.Highlight&&!this.hasHighlights||a===j.Normal&&!this.hasWater||!e.hasSomeSizedView())return;const n=this._rctx;this._camera.pixelRatio=e.pixelRatio*o,this._renderContext.output=a,this._bindParameters.alignPixelEnabled=i,this._bindParameters.screenToWorldRatio=this._screenToWorldRatio,this._bindParameters.screenToPCSRatio=this._screenToWorldRatio*this.worldToPCSRatio,this._bindParameters.slot=a===j.Normal?F.DRAPED_WATER:F.DRAPED_MATERIAL,e.applyViewport(this._rctx);const h=2*e.resolution,d=e.resolution,l=r.fbo;if(l.bind(n,h,d),e.index===v.INNER&&(n.setClearColor(0,0,0,0),n.clearSafe(K.COLOR_BUFFER_BIT)),r.type===x.Occluded&&(this._renderContext.renderOccludedMask=ae),b.OVERLAY_DRAW_DEBUG_TEXTURE&&r.type!==x.Occluded)for(let c=0;c<s.numViews;c++)this._setViewParameters(s.extents[c],e),this._drawDebugTexture(e.resolution,ie[e.index]);this._sortedRenderers.forAll((({drapeSource:t,renderer:i})=>{if(r.type===x.ColorNoRasterImage&&t.drapeSourceType===T.RasterImage)return;const{fullOpacity:o}=t,c=null!=o&&o<1&&a===j.Color?this.bindTemporaryFramebuffer(h,d):null;for(let r=0;r<s.numViews;r++)this._setViewParameters(s.extents[r],e),i.render(this._renderContext);c&&(l.bind(n,h,d),this.view._stage.renderView.compositingHelper.compositeOverlay(this._renderContext.bindParameters,c.colorTexture,o,e.index),c.release())})),n.bindFramebuffer(null),l.generateMipMap(),this._renderContext.resetRenderOccludedMask()}bindTemporaryFramebuffer(e,r){const t=this.view._stage.renderer.fboCache,s=t.acquire(P.RGBA_CLAMPED,e,r);return t.rctx.bindFramebuffer(s.fbo),t.rctx.clearSafe(K.COLOR_BUFFER_BIT),s}async reloadShaders(){await this._shaderTechniqueRepository.reloadAll()}notifyContentChanged(){this.events.emit("content-changed")}intersect(e,r,t,s){let i=0;for(const o of this._renderers.values())i=o.intersect?.(e,r,t,s,i)??i}_updateSortedDrapeSourceRenderers(){if(this._sortedRenderers.clear(),0===this._renderers.size)return;const e=this.view.map.allLayers;this._renderers.forEach(((r,t)=>{const s=e.indexOf(t.layer),i=s>=0,o=this._renderers.size*(t.renderGroup??(i?w.MapLayer:w.ViewLayer))+(i?s:0);this._sortedRenderers.push(new se(t,r,o))})),this._sortedRenderers.sort(((e,r)=>e.index-r.index))}_setViewParameters(e,r){const t=this._camera;t.viewport=[0,0,r.resolution,r.resolution],m(t.projectionMatrix,0,e[2]-e[0],0,e[3]-e[1],t.near,t.far),_(t.viewMatrix,[-e[0],-e[1],0])}_updateHasWater(){const e=s(this._renderers,(e=>e.hasWater));e!==this._hasWater&&(this._hasWater=e,this.events.emit("has-water",e))}_updateHasHighlights(){const e=s(this._renderers,(e=>e.hasHighlights));e!==this._hasHighlights&&(this._hasHighlights=e,this.events.emit("has-highlights",e))}_updateRendersOccluded(){const e=s(this._renderers,(e=>e.rendersOccluded));e!==this._rendersOccluded&&(this._rendersOccluded=e,this.events.emit("renders-occluded",e))}_drawDebugTexture(e,r){this._ensureDebugPatternResources(e,r);const t=this._rctx;t.bindTechnique(this._debugTextureTechnique,this._passParameters,null),t.bindVAO(this._quadVAO),t.drawArrays(Q.TRIANGLE_STRIP,0,re(this._quadVAO,"geometry"))}_ensureDebugPatternResources(e,r){if(g(this._passParameters.color,r[0],r[1],r[2]),this._passParameters.texture)return;const t=new Uint8Array(e*e*4);let s=0;for(let a=0;a<e;a++)for(let r=0;r<e;r++){const i=Math.floor(r/10),o=Math.floor(a/10);i<2||o<2||10*i>e-20||10*o>e-20?(t[s++]=255,t[s++]=255,t[s++]=255,t[s++]=255):(t[s++]=255,t[s++]=255,t[s++]=255,t[s++]=1&i&&1&o?1&r^1&a?0:255:1&i^1&o?0:128)}const i=new ee(e);i.samplingMode=Z.NEAREST,this._passParameters.texture=new $(this._rctx,i,t);const o=new G;o.hasAlpha=!0,this._debugTextureTechnique=this._shaderTechniqueRepository.acquire(N,o),this._quadVAO=M(this._rctx)}get test(){return{drapedRenderers:Array.from(this._renderers.values()),getDrapeSourceRenderer:e=>this._renderers.get(e)}}};e([u()],te.prototype,"_sortedDrapeSourceRenderersDirty",void 0),e([u({autoDestroy:!0})],te.prototype,"_shaderTechniqueRepository",void 0),e([u({constructOnly:!0})],te.prototype,"view",void 0),e([u()],te.prototype,"worldToPCSRatio",void 0),e([u()],te.prototype,"spatialReference",void 0),e([u({type:Boolean,readOnly:!0})],te.prototype,"updating",null),e([u()],te.prototype,"isEmpty",null),te=e([p("esri.views.3d.terrain.OverlayRenderer")],te);class se{constructor(e,r,t){this.drapeSource=e,this.renderer=r,this.index=t}}const ie=[[1,.5,.5],[.5,.5,1]],oe=-2,ae=H.OccludeAndTransparent;export{oe as DRAPED_Z,te as OverlayRenderer,ae as overlayRenderOccludedFlag};
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import r from"../../../core/Accessor.js";import t from"../../../core/Evented.js";import{someMap as s}from"../../../core/MapUtils.js";import{releaseMaybe as i,disposeMaybe as o,destroyMaybe as a}from"../../../core/maybe.js";import n from"../../../core/PooledArray.js";import{watch as h,syncAndInitial as d,on as l}from"../../../core/reactiveUtils.js";import{someSet as c}from"../../../core/SetUtils.js";import{property as u}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import{subclass as p}from"../../../core/accessorSupport/decorators/subclass.js";import{x as m,f as _}from"../../../chunks/mat4.js";import{s as g}from"../../../chunks/vec3.js";import{f as y}from"../../../chunks/vec3f64.js";import{ViewingMode as R}from"../../ViewingMode.js";import{DrapeTargetType as f,DrapeSourceType as T,DrapedRenderGroup as w}from"../layers/interfaces.js";import b from"../support/debugFlags.js";import{OverlayIndex as v,RenderTargetType as x}from"./interfaces.js";import{Overlay as S,OverlayStretch as D}from"./Overlay.js";import{OverlayRenderTarget as O}from"./OverlayRenderTarget.js";import{ColorFormat as j}from"../webgl-engine/core/FBOCache.js";import{ShaderOutput as P}from"../webgl-engine/core/shaderLibrary/ShaderOutput.js";import{T as E}from"../../../chunks/TextureOnly.glsl.js";import{ShaderTechniqueRepository as C}from"../webgl-engine/core/shaderTechnique/ShaderTechniqueRepository.js";import{Camera as A}from"../webgl-engine/lib/Camera.js";import{GLMaterialRepository as q}from"../webgl-engine/lib/GLMaterialRepository.js";import{createEmptyDepthTexture as V,createQuadVAO as M}from"../webgl-engine/lib/glUtil3D.js";import{GridLocalOriginFactory as W}from"../webgl-engine/lib/GridLocalOriginFactory.js";import{RenderOccludedFlag as H}from"../webgl-engine/lib/Material.js";import{OverlayRenderContext as F}from"../webgl-engine/lib/RenderContext.js";import{RenderSlot as L}from"../webgl-engine/lib/RenderSlot.js";import{ShadowMap as U}from"../webgl-engine/lib/ShadowMap.js";import{SortedRenderGeometryRenderer as I}from"../webgl-engine/lib/SortedRenderGeometryRenderer.js";import{SSAOHelper as k}from"../webgl-engine/lib/SSAOHelper.js";import{TextureTechnique as N}from"../webgl-engine/lib/TextureTechnique.js";import{TextureTechniqueConfiguration as G}from"../webgl-engine/lib/TextureTechniqueConfiguration.js";import{TransparencyPassType as B}from"../webgl-engine/lib/TransparencyPassType.js";import{UpdatePolicy as z}from"../webgl-engine/lib/UpdatePolicy.js";import{AmbientLight as Y}from"../webgl-engine/lighting/Lightsources.js";import{TaskPriority as X,noBudget as J}from"../../support/Scheduler.js";import{ClearBufferBit as K,PrimitiveType as Q,TextureSamplingMode as Z}from"../../webgl/enums.js";import{Texture as $}from"../../webgl/Texture.js";import{TextureDescriptor as ee}from"../../webgl/TextureDescriptor.js";import{vertexCount as re}from"../../webgl/Util.js";let te=class extends r{get _bindParameters(){return this._renderContext.bindParameters}get _rctx(){return this.view._stage.renderView.renderingContext}get rctx(){return this._rctx}get materialRepository(){return this._materialRepository}get screenToWorldRatio(){return this._screenToWorldRatio}get localOriginFactory(){return this._localOriginFactory}constructor(e){super(e),this._overlays=null,this._overlayRenderTarget=null,this._hasHighlights=!1,this._rendersOccluded=!1,this._hasWater=!1,this._renderers=new Map,this._sortedDrapeSourceRenderersDirty=!1,this._sortedRenderers=new n,this._passParameters=new E,this._materialRepository=null,this._screenToWorldRatio=1,this._localOriginFactory=null,this._camera=new A,this.worldToPCSRatio=1,this.events=new t,this.longitudeCyclical=null}initialize(){const e=this.view._stage.renderer.fboCache,r=this.view._stage.renderView,{waterTextureRepository:t,stippleTextureRepository:s,markerTextureRepository:i}=r;this._shaderTechniqueRepository=new C({rctx:this._rctx,viewingMode:R.Local,stippleTextureRepository:s,markerTextureRepository:i,waterTextureRepository:t}),this._renderContext=new F(this._rctx,new U(e,this.view.state.viewingMode),new k(this.view,e,this._shaderTechniqueRepository,(()=>{}))),this.addHandles([h((()=>t.updating),(()=>this.events.emit("content-changed")),d),h((()=>this.spatialReference),(e=>this._localOriginFactory=new W(e)),d),l((()=>this.view.allLayerViews),"after-changes",(()=>this._sortedDrapeSourceRenderersDirty=!0))]),this._materialRepository=new q(r.textureRepository,this._shaderTechniqueRepository,(e=>{(e.renderOccluded&ae)>0!==this._rendersOccluded&&this._updateRendersOccluded(),this.events.emit("content-changed"),this.notifyChange("updating"),this.notifyChange("isEmpty")}),(()=>this.events.emit("content-changed"))),this._bindParameters.slot=L.DRAPED_MATERIAL,this._bindParameters.mainDepth=V(this._rctx),this._camera.near=1,this._camera.far=1e4,this._camera.relativeElevation=null,this._bindParameters.camera=this._camera,this._bindParameters.transparencyPassType=B.NONE,this._bindParameters.newLighting.noonFactor=0,this._bindParameters.newLighting.globalFactor=0,this._bindParameters.newLighting.set([new Y(y(1,1,1))]),this.addHandles(this.view.resourceController.scheduler.registerTask(X.STAGE,this))}destroy(){this._renderers.forEach((e=>e.destroy())),this._renderers.clear(),this._debugTextureTechnique=i(this._debugTextureTechnique),this._passParameters.texture=o(this._passParameters.texture),this._bindParameters.mainDepth=o(this._bindParameters.mainDepth),this._shaderTechniqueRepository=a(this._shaderTechniqueRepository),this._quadVAO=o(this._quadVAO),this.disposeOverlays()}get updating(){return this._sortedDrapeSourceRenderersDirty||s(this._renderers,(e=>e.updating))}get hasOverlays(){return null!=this._overlays&&null!=this._overlayRenderTarget}get usedMemory(){return(this._overlayRenderTarget?.gpuMemoryUsage??0)+Array.from(this._renderers.values()).reduce(((e,r)=>e+r.usedMemory),0)}createGeometryDrapeSourceRenderer(e){return this.createDrapeSourceRenderer(e,I)}createDrapeSourceRenderer(e,r,t){const s=this._renderers.get(e);null!=s&&s.destroy();const i=new r({...t,rendererContext:this,drapeSource:e});return this._renderers.set(e,i),this._sortedDrapeSourceRenderersDirty=!0,"fullOpacity"in e&&this.addHandles(h((()=>e.fullOpacity),(()=>this.events.emit("content-changed"))),e),i}removeDrapeSourceRenderer(e){if(null==e)return;const r=this._renderers.get(e);null!=r&&(this._sortedDrapeSourceRenderersDirty=!0,this._renderers.delete(e),this.removeHandles(e),r.destroy())}computeValidity(){return this._overlayRenderTarget?.computeValidity()??0}releaseRenderTargets(){this._overlayRenderTarget?.dispose()}get overlays(){return this._overlays??[]}ensureDrapeTargets(e){null!=this._overlays&&this._overlays.forEach((r=>r.hasTargetWithoutRasterImage=c(e,(e=>e.drapeTargetType===f.WithoutRasterImage))))}ensureDrapeSources(e){null!=this._overlays&&this._overlays.forEach((r=>{r.hasDrapedFeatureSource=c(e,(e=>e.drapeSourceType===T.Features)),r.hasDrapedRasterSource=c(e,(e=>e.drapeSourceType===T.RasterImage))}))}ensureOverlays(e,r){null==this._overlays&&(this._overlayRenderTarget=new O(this.view._stage.renderer.fboCache),this._overlays=[new S(v.INNER,this._overlayRenderTarget),new S(v.OUTER,this._overlayRenderTarget)]),this.ensureDrapeTargets(e),this.ensureDrapeSources(r)}disposeOverlays(){this._overlays=null,this._overlayRenderTarget=o(this._overlayRenderTarget),this.events.emit("textures-disposed")}get running(){return this.updating}runTask(e){this._processDrapeSources(e,(()=>!0))}_processDrapeSources(e,r){let t=!1;for(const[s,i]of this._renderers){if(e.done)break;(s.destroyed||r(s))&&(i.commitChanges()&&(t=!0,e.madeProgress()))}this._sortedDrapeSourceRenderersDirty&&(this._sortedDrapeSourceRenderersDirty=!1,t=!0,this._updateSortedDrapeSourceRenderers()),t&&(null!=this._overlays&&0===this._renderers.size&&this.disposeOverlays(),this.notifyChange("updating"),this.notifyChange("isEmpty"),this.events.emit("content-changed"),this._updateHasHighlights(),this._updateRendersOccluded(),this._updateHasWater())}processSyncDrapeSources(){this._processDrapeSources(J,(e=>e.updatePolicy===z.SYNC))}get isEmpty(){return!b.OVERLAY_DRAW_DEBUG_TEXTURE&&!s(this._renderers,(e=>!e.isEmpty))}get hasHighlights(){return this._hasHighlights}get hasWater(){return this._hasWater}get rendersOccluded(){return this._rendersOccluded}updateAnimation(e){let r=!1;return this._renderers.forEach((t=>r=t.updateAnimation(e)||r)),r}updateDrapeSourceOrder(){this._sortedDrapeSourceRenderersDirty=!0}drawTarget(e,r,t){const s=e.canvasGeometries;if(0===s.numViews)return;const{alignPixelEnabled:i,contentPixelRatio:o}=t;this._screenToWorldRatio=o*e.mapUnitsPerPixel/D;const a=r.output;if(this.isEmpty||a===P.Highlight&&!this.hasHighlights||a===P.Normal&&!this.hasWater||!e.hasSomeSizedView())return;const n=this._rctx;this._camera.pixelRatio=e.pixelRatio*o,this._renderContext.output=a,this._bindParameters.alignPixelEnabled=i,this._bindParameters.screenToWorldRatio=this._screenToWorldRatio,this._bindParameters.screenToPCSRatio=this._screenToWorldRatio*this.worldToPCSRatio,this._bindParameters.slot=a===P.Normal?L.DRAPED_WATER:L.DRAPED_MATERIAL,e.applyViewport(this._rctx);const h=2*e.resolution,d=e.resolution,l=r.fbo;if(l.bind(n,h,d),e.index===v.INNER&&(n.setClearColor(0,0,0,0),n.clearSafe(K.COLOR_BUFFER_BIT)),r.type===x.Occluded&&(this._renderContext.renderOccludedMask=ae),b.OVERLAY_DRAW_DEBUG_TEXTURE&&r.type!==x.Occluded)for(let c=0;c<s.numViews;c++)this._setViewParameters(s.extents[c],e),this._drawDebugTexture(e.resolution,ie[e.index]);this._sortedRenderers.forAll((({drapeSource:t,renderer:i})=>{if(r.type===x.ColorNoRasterImage&&t.drapeSourceType===T.RasterImage)return;const{fullOpacity:o}=t,c=null!=o&&o<1&&a===P.Color?this.bindTemporaryFramebuffer(h,d):null;for(let r=0;r<s.numViews;r++)this._setViewParameters(s.extents[r],e),i.render(this._renderContext);c&&(l.bind(n,h,d),this.view._stage.renderView.compositingHelper.compositeOverlay(this._renderContext.bindParameters,c.colorTexture,o,e.index),c.release())})),n.bindFramebuffer(null),l.generateMipMap(),this._renderContext.resetRenderOccludedMask()}bindTemporaryFramebuffer(e,r){const t=this.view._stage.renderer.fboCache,s=t.acquire(j.RGBA,e,r);return t.rctx.bindFramebuffer(s.fbo),t.rctx.clearSafe(K.COLOR_BUFFER_BIT),s}async reloadShaders(){await this._shaderTechniqueRepository.reloadAll()}notifyContentChanged(){this.events.emit("content-changed")}intersect(e,r,t,s){let i=0;for(const o of this._renderers.values())i=o.intersect?.(e,r,t,s,i)??i}_updateSortedDrapeSourceRenderers(){if(this._sortedRenderers.clear(),0===this._renderers.size)return;const e=this.view.map.allLayers;this._renderers.forEach(((r,t)=>{const s=e.indexOf(t.layer),i=s>=0,o=this._renderers.size*(t.renderGroup??(i?w.MapLayer:w.ViewLayer))+(i?s:0);this._sortedRenderers.push(new se(t,r,o))})),this._sortedRenderers.sort(((e,r)=>e.index-r.index))}_setViewParameters(e,r){const t=this._camera;t.viewport=[0,0,r.resolution,r.resolution],m(t.projectionMatrix,0,e[2]-e[0],0,e[3]-e[1],t.near,t.far),_(t.viewMatrix,[-e[0],-e[1],0])}_updateHasWater(){const e=s(this._renderers,(e=>e.hasWater));e!==this._hasWater&&(this._hasWater=e,this.events.emit("has-water",e))}_updateHasHighlights(){const e=s(this._renderers,(e=>e.hasHighlights));e!==this._hasHighlights&&(this._hasHighlights=e,this.events.emit("has-highlights",e))}_updateRendersOccluded(){const e=s(this._renderers,(e=>e.rendersOccluded));e!==this._rendersOccluded&&(this._rendersOccluded=e,this.events.emit("renders-occluded",e))}_drawDebugTexture(e,r){this._ensureDebugPatternResources(e,r);const t=this._rctx;t.bindTechnique(this._debugTextureTechnique,this._passParameters,null),t.bindVAO(this._quadVAO),t.drawArrays(Q.TRIANGLE_STRIP,0,re(this._quadVAO,"geometry"))}_ensureDebugPatternResources(e,r){if(g(this._passParameters.color,r[0],r[1],r[2]),this._passParameters.texture)return;const t=new Uint8Array(e*e*4);let s=0;for(let a=0;a<e;a++)for(let r=0;r<e;r++){const i=Math.floor(r/10),o=Math.floor(a/10);i<2||o<2||10*i>e-20||10*o>e-20?(t[s++]=255,t[s++]=255,t[s++]=255,t[s++]=255):(t[s++]=255,t[s++]=255,t[s++]=255,t[s++]=1&i&&1&o?1&r^1&a?0:255:1&i^1&o?0:128)}const i=new ee(e);i.samplingMode=Z.NEAREST,this._passParameters.texture=new $(this._rctx,i,t);const o=new G;o.hasAlpha=!0,this._debugTextureTechnique=this._shaderTechniqueRepository.acquire(N,o),this._quadVAO=M(this._rctx)}get test(){return{drapedRenderers:Array.from(this._renderers.values()),getDrapeSourceRenderer:e=>this._renderers.get(e)}}};e([u()],te.prototype,"_sortedDrapeSourceRenderersDirty",void 0),e([u({autoDestroy:!0})],te.prototype,"_shaderTechniqueRepository",void 0),e([u({constructOnly:!0})],te.prototype,"view",void 0),e([u()],te.prototype,"worldToPCSRatio",void 0),e([u()],te.prototype,"spatialReference",void 0),e([u({type:Boolean,readOnly:!0})],te.prototype,"updating",null),e([u()],te.prototype,"isEmpty",null),te=e([p("esri.views.3d.terrain.OverlayRenderer")],te);class se{constructor(e,r,t){this.drapeSource=e,this.renderer=r,this.index=t}}const ie=[[1,.5,.5],[.5,.5,1]],oe=-2,ae=H.OccludeAndTransparent;export{oe as DRAPED_Z,te as OverlayRenderer,ae as overlayRenderOccludedFlag};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.28/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../Color.js";import i from"../../../core/Accessor.js";import{difference as r}from"../../../core/arrayUtils.js";import s from"../../../core/CollectionFlattener.js";import a from"../../../core/Evented.js";import n from"../../../core/Logger.js";import{clamp as l}from"../../../core/mathUtils.js";import{releaseMaybe as o,destroyMaybe as h}from"../../../core/maybe.js";import d from"../../../core/ObjectPool.js";import p from"../../../core/PooledArray.js";import{throwIfAborted as u,isAbortError as c,isAborted as _,createAbortError as g}from"../../../core/promiseUtils.js";import{watch as m,syncAndInitial as T,sync as y,initial as f}from"../../../core/reactiveUtils.js";import{property as v}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/has.js";import{subclass as w}from"../../../core/accessorSupport/decorators/subclass.js";import{m as E}from"../../../chunks/mat4.js";import{c as S}from"../../../chunks/mat4f64.js";import{c as L}from"../../../chunks/vec3.js";import{c as D}from"../../../chunks/vec3f64.js";import{c as P}from"../../../chunks/vec4f64.js";import{WatchUpdatingTracking as b}from"../../../core/support/WatchUpdatingTracking.js";import{getReferenceEllipsoid as U}from"../../../geometry/ellipsoidUtils.js";import{projectVectorToVector as x,projectPointToVector as R}from"../../../geometry/projection.js";import C from"../../../geometry/SpatialReference.js";import{create as M,equals as j,intersection as A,empty as I,expand as O,intersectsSphere as V}from"../../../geometry/support/aaBoundingRect.js";import{create as k,copy as B}from"../../../geometry/support/frustum.js";import{isPlateCarree as N}from"../../../geometry/support/spatialReferenceUtils.js";import{isRefreshableLayer as F}from"../../../layers/mixins/RefreshableLayer.js";import{ElevationQueryTileCache as q}from"../../../layers/support/ElevationQueryTileCache.js";import{ElevationTileData as G}from"../../../layers/support/ElevationTileData.js";import{isBaseLayer as W}from"../../../layers/support/layerUtils.js";import{acquireDecoder as H}from"../../../layers/support/LercDecoder.js";import{printAllocations as Q}from"../../2d/engine/vectorTiles/VectorTile.js";import{directionToHeadingTilt as z}from"../support/cameraUtils.js";import X from"../support/debugFlags.js";import{toBoundingRect as Y}from"../support/extentUtils.js";import{ClientType as $}from"../support/index.js";import{updatingProgress as K}from"../support/updatingProperties.js";import{ElevationBounds as J}from"./ElevationBounds.js";import{ElevationData as Z,sampleElevation as ee}from"./ElevationData.js";import{create as te}from"./ExtentHelper.js";import{LODSnapping as ie,TextureUpdate as re}from"./interfaces.js";import{LayerClass as se,LayerClasses as ae}from"./LayerClass.js";import{OverlayManager as ne}from"./OverlayManager.js";import{PlanarPatch as le}from"./PlanarPatch.js";import{RenderOrder as oe}from"./RenderOrder.js";import{ScaleRangeQueries as he}from"./ScaleRangeQueries.js";import{SphericalPatch as de}from"./SphericalPatch.js";import{SplitLimits as pe}from"./SplitLimits.js";import{MAX_ROOT_TILES as ue,TOO_MANY_ROOT_TILES_AFTER_CHANGE_ERROR as ce,TOO_MANY_ROOT_TILES_FOR_LAYER_ERROR as _e,MAX_MEMORY_LOD_BIAS as ge,ELEVATION_NODATA_VALUE as me}from"./TerrainConst.js";import{TerrainRenderer as Te,TransparencyMode as ye}from"./TerrainRenderer.js";import fe from"./TerrainSurfacePerformanceInfo.js";import{weakAssert as ve,internalAssert as we,oppositeEdge as Ee,isSurfaceLayerView as Se,isGroupLayerView as Le,isMapTileLayerView as De,isBlendableLayerView as Pe,isElevationLayerView as be,isVectorTileLayerView as Ue,useFetchTileForLayer as xe,isImageryTileLayerView as Re,isTileLayerView as Ce,releaseTileData as Me,neighborCornerIndices as je,oppositeCorner as Ae,neighborEdgeIndices as Ie,ENABLE_TERRAIN_INTERNAL_CHECKS as Oe,ENABLE_WATERPROOFNESS_TESTS as Ve,enableTerrainInternalChecks as ke,enableTerrainWaterproofnessChecks as Be}from"./terrainUtils.js";import{Tile as Ne}from"./Tile.js";import{printAllocations as Fe}from"./TilePerLayerInfo.js";import{TileUpdate as qe}from"./TileUpdate.js";import{IteratorPreorder as Ge,IteratorPostorder as We,compareTilesByLij as He,hasLoadableSiblings as Qe,sortTilesByPOI as ze,sortTiles as Xe}from"./tileUtils.js";import{TilingSchemeLogic as Ye}from"./TilingSchemeLogic.js";import{UpsampleInfo as $e}from"./UpsampleInfo.js";import{isCompositeBlendMode as Ke,blendModeFromString as Je}from"../webgl-engine/core/shaderLibrary/output/BlendOptions.js";import{PBRMode as Ze}from"../webgl-engine/core/shaderLibrary/shading/PhysicallyBasedRenderingParameters.glsl.js";import{RenderRequestType as et}from"../webgl-engine/lib/basicInterfaces.js";import{RenderState as tt}from"../../support/RenderState.js";import{ImmediateTask as it,TaskPriority as rt,noBudget as st}from"../../support/Scheduler.js";let at=class extends(a.EventedMixin(i)){constructor(e){super(e),this._scaleRangeQueries=new he,this._iteratorPool=new d(Ge,(e=>e.remove=()=>this._iteratorPool.release(e))),this._postorderIterator=new We,this._hasPendingUpdates=!1,this._pendingUpdates=0,this._asyncWorkItems=0,this._allTilesDirty=!0,this._allTilesSorted=!0,this._visibleCached=!1,this._usedMemory=null,this._performanceInfo=new fe,this._viewChanged=!1,this._inFrameTask=!1,this._viewChangeUpdateDirty=!1,this._eyePosRenderSR=D(),this._eyePosSurfaceSR=D(),this._splitLimits=new pe,this._frustum=k(),this._viewProjectionMatrix=S(),this._layerViews=[new Array,new Array],this._layerIndexByUid=[new Map,new Map],this._basemapLayerViewHandles=new Map,this._watchUpdatingTracking=new b,this._frameTask=it,this._allTiles=new p,this._upsampleInfoPool=new d($e),this._rootTilesExtent=M(),this.updatingProgress=.5,this._maxNumUpdating=1,this.maxTextureScale=1.2,this._spatialReference=C.WebMercator,this.visibleElevationBounds=new J(1/0,-1/0),this.rootTileElevationBounds=new J(1/0,-1/0),this._updatingRootTiles=!1,this._pendingTilesForElevationUpdateEvent=new Set,this._pendingTilesToUpdate=new Set,this.totalGeometryUpdates=0,this.totalTileUpdates=0,this.oneBatchPerFrameTask=!0,this._layerViewsDirty=!1,this.unloadedMemory=0,this.ignoresMemoryFactor=!1,this._isWebMercator=!1,this._isWebMercatorOnPlateeCarree=!1,this.overlayManager=new ne({...e,surface:this}),this._isGlobal=!e.view?.state?.isLocal}initialize(){this._lercDecoder=H(this.view.resourceController),this._tilePool=this.view.state.isLocal?new d(le):new d(de);const e=this.view.resourceController.memoryController;this._upsampleMapCache=e.newCache("terrain-upsample",(e=>e.unloadMapData())),this._elevationQueryCache=new q(e.newCache("elevation-query")),this.addHandles([m((()=>this.overlayManager.hasHighlights),(e=>this._renderer.setNeedsHighlight(e))),m((()=>this.overlayManager.rendersOccluded),(e=>this._renderer.setRenderOccludedOverlay(e))),m((()=>this.overlayManager.renderer.isEmpty),(()=>this._evaluateTransparency()))],"overlayManager"),this._renderer=new Te({_overlayRenderer:this.overlayManager.renderer,_ellipsoidRadius:U(this.view.spatialReference).radius,_stage:this.view._stage,_allTiles:this._allTiles}),this.addHandles([m((()=>this.baseOpacity),(()=>{this._handleLayerViewChanges(),this._updateTileTextures(this._evaluateTransparency()?re.UNFADED:re.IMMEDIATE)}),T),m((()=>this.hasCompositeBlendMode),(()=>this._updateTileTextures(this._evaluateTransparency()?re.UNFADED:re.IMMEDIATE)),T),m((()=>this.renderingDisabled),(()=>this.view?._stage?.renderer.setParameters({terrainRenderingEnabled:!this.renderingDisabled})),y),m((()=>this.backgroundColor),(e=>{this._handleLayerViewChanges(),this._renderer.updateTileBackground(e)}),T),m((()=>this.snapLevel),(()=>this._viewChanged=!0),y),m((()=>this.view.pointsOfInterest),(e=>{this._renderer.pointsOfInterest=e,this._watchUpdatingTracking.removeAll(),e&&this._watchUpdatingTracking.add((()=>e.focus.renderLocation),(()=>this._allTilesSorted=!1))})),m((()=>X.TERRAIN_TILE_TREE_SHOW_TILES),(e=>{e&&!this._treeDebugger?import("../layers/support/TerrainTileTree3DDebugger.js").then((({TerrainTileTree3DDebugger:e})=>{!this._treeDebugger&&X.TERRAIN_TILE_TREE_SHOW_TILES&&(this._treeDebugger=new e({view:this.view}))})):e||(this._treeDebugger=h(this._treeDebugger))}),f)]);const{spatialReference:t}=this.view;this._extentHelper=te(this.viewingMode,{layers:this.view.map.allLayers,layerViews:this.view.allLayerViews,viewSpatialReference:t});const i=new s({getCollections:()=>this.view?.defaultsFromMap?.mapCollections?.map((({layers:e})=>e)),getChildrenFunction:e=>e&&"layers"in e?e.layers:null}),r=new Ye({layers:i,extentHelper:this._extentHelper,viewingMode:this.viewingMode,viewSpatialReference:t});this._set("tilingSchemeLogic",r),this._updateTilingScheme(),this._elevationDataRequester=this.view.resourceController.createStreamDataRequester($.ELEVATION),this._mapDataRequester=this.view.resourceController.createStreamDataRequester($.BASEMAP);const a=this.view.resourceController.scheduler;this._frameTask=a.registerTask(rt.TERRAIN_SURFACE,this),this.addHandles([m((()=>this._extentHelper.stencilEnabledExtents),(e=>this._renderer.setStencilEnabledLayerExtents(e)),f),m((()=>this.tilingSchemeLogic.tilingScheme),(()=>this._updateTilingScheme()),y),m((()=>this.extent),(()=>this._updateRootTiles()),f),this.view.on("resize",(()=>this._viewChangeUpdate())),m((()=>{const e=this.view,t=e.state;return[this._lodBias,this.lodSnapping,e.resourceController?.memoryController?.memoryFactor,t.camera,t.contentCamera,t.fixedContentCamera]}),(()=>this._viewChangeUpdate()),T),m((()=>this.view.qualitySettings?.tiledSurface?.textureFadeDuration),(e=>this._renderer.textureFadingEnabled=e>0),f),m((()=>this.view.qualitySettings?.physicallyBasedRenderingEnabled),(e=>this._renderer.pbrMode=e?Ze.Terrain:Ze.Disabled),f),m((()=>this._userClippingExtent),(()=>this._updateClippingExtent()),y)]),this.addHandles(this.view.allLayerViews.on("after-changes",(()=>this._layerViewsDirty=!0))),this._layerViewsDirty=!0,this._handleLayerViewChanges()}destroy(){this._frameTask.remove(),this._watchUpdatingTracking.destroy(),this._lercDecoder=o(this._lercDecoder),this._removeAllTiles(),this._upsampleMapCache=h(this._upsampleMapCache),this._elevationQueryCache=h(this._elevationQueryCache),this._set("tilingSchemeLogic",h(this.tilingSchemeLogic)),this._basemapLayerViewHandles.forEach(((e,t)=>this._unregisterTiledLayerView(t))),this._elevationDataRequester=null,this._mapDataRequester=null,this._set("overlayManager",h(this.overlayManager)),this._tilePool=h(this._tilePool),Ne.prune(),this._treeDebugger=h(this._treeDebugger),this._renderer=h(this._renderer),this._iteratorPool=h(this._iteratorPool),this._set("view",null),this._extentHelper=h(this._extentHelper),this._upsampleInfoPool=h(this._upsampleInfoPool),Q(),Fe()}get renderer(){return this._renderer}get frustum(){return this._frustum}get snapLevel(){if(this.lodSnapping===ie.ON){const e=this.view,t=this.tilingScheme,i=e.pointsOfInterest?.cameraOnSurface?.scale;if(t&&i){const r=e.state.contentCamera;let s=z(e,r.eye,r.viewForward,r.up).tilt;s>90&&(s=180-s);const a=2*(s/90)**2,n=t.levelAtScale(i)-a,l=Math.min(n,this._splitLimits.maxLod||1/0);return l<=0?null:l}}return null}get lodSnapping(){return this.view.qualitySettings.tiledSurface.reduceTileLevelDifferences?ie.ON:ie.OFF}get upsampleInfoPool(){return this._upsampleInfoPool}get upsampleMapCache(){return this._upsampleMapCache}get elevationQueryCache(){return this._elevationQueryCache}get mapTileRequester(){return this._mapDataRequester}get _userClippingExtent(){const{spatialReference:e}=this,{clippingArea:t}=this.view;if(null==t||null==e)return null;const i=M(),r=Y(t,i,e)?i:null,s=this._get("extent");return j(r,s)?s:r}get rootTilesExtent(){return this._rootTilesExtent}get extent(){const e=A(this.groundExtent,this._userClippingExtent,M()),t=this._get("extent");return j(e,t)?t:e}get groundExtent(){return null!=this._tilingSchemeExtent?this._tilingSchemeExtent:this._rootTilesExtent}get _tilingSchemeExtent(){return this.tilingSchemeLogic?.extent}get updating(){return this._hasPendingUpdates||(this._maxNumUpdating=1),!!((this.running||this._watchUpdatingTracking?.updating||this._asyncWorkItems>0)&&this.ready&&!this.suspended||this.overlayManager?.updating)}get running(){return(this._hasPendingUpdates||this._viewChanged||this._allTilesDirty||!this._allTilesSorted||this._layerViewsDirty||this._scaleRangeQueries.updating||this._frameTask.updating)&&this.ready&&!this.suspended}get updatingProgressValue(){return this._maxNumUpdating=Math.max(this._pendingUpdates,this._maxNumUpdating),1-this._pendingUpdates/this._maxNumUpdating}get baseOpacity(){return this.view?.map?.ground?.opacity??1}set baseOpacity(e){this.view.map.ground.opacity=e}get viewingMode(){return this.view.state.viewingMode}get ready(){return null!=this._rootTiles}set renderOrder(e){this._renderer.renderOrder=e,this._set("renderOrder",e)}get rootTiles(){return this._rootTiles}get spatialReference(){return this.tilingScheme?.spatialReference??null}get backgroundColor(){return this.view?.map?.ground?.surfaceColor}set backgroundColor(e){this.view.map.ground.surfaceColor=e}set slicePlaneEnabled(e){this._renderer.slicePlaneEnabled=e,this._set("slicePlaneEnabled",e),this._evaluateTransparency()}get tilingSchemeLocked(){return this.tilingSchemeLogic?.tilingSchemeLocked??!1}get wireframe(){return this._renderer?.wireframe}set wireframe(e){e!==this._renderer.wireframe&&(this._renderer.wireframe=e,this._updateAllTileGeometries())}set _visible(e){e!==this._visibleCached&&(this._visibleCached=e,this._renderer.setVisibility(e),this.suspended=!e)}get opaque(){return this._renderer.transparency===ye.Opaque}set suspended(e){this._set("suspended",e),this._viewChangeUpdate()}get textureFadeDuration(){return this.view.qualitySettings.tiledSurface.textureFadeDuration??0}intersect(e,t,i,r){this._renderer.intersect(e,t,i,r)}getElevation(e,t,i,r){const s=this._rootTiles;if(null==s||!s.length)return null;if(0===s[0].layerInfo[se.ELEVATION].length)return null;const a=dt;if(a[0]=e,a[1]=t,a[2]=i,!x(a,r,a,this._spatialReference))return n.getLogger(this).error("TerrainSurface.getElevation(): could not project given point to tiling scheme coordinate system"),null;return mt(s,a[0],a[1])}getElevations(e,t,i){const r=this._rootTiles,s=r?r[0].layerInfo[se.ELEVATION].length:0;if(null!=r&&r.length&&0!==s)for(let a=0;a<t;++a){const t=3*a;i(a,mt(r,e[t],e[t+1]))}else for(let a=0;a<t;++a)i(a,null)}getScale(e){if(!this.tilingScheme)return null;if(!R(e,dt,this.spatialReference))return n.getLogger(this).error("TerrainSurface.getScale(): could not project given point to tiling scheme coordinate system"),null;const t=this._rootTiles;if(null!=t)for(const i of t)if(i?.containsPoint(dt)){let e=i;for(;e.children[0]&&!e.rendered;){const t=e.children[0].extent;let i=0;dt[0]>t[2]&&(i+=1),dt[1]<t[1]&&(i+=2),e=e.children[i]}return this._getLodBiasCorrectedScale(e.level)}return 1/0}getSphereElevationBounds(e,t){if(dt[0]=e[0],dt[1]=e[1],dt[2]=e[2],dt[3]=e[3],!x(dt,t,dt,this.tilingScheme?.spatialReference))return n.getLogger(this).error("TerrainSurface.getSphereElevationBounds(): could not project given point to tiling scheme coordinate system"),null;let i=1/0,r=-1/0;const s=e=>{if(e&&V(e.extent,dt))if(e.isLeaf||e.rendered)i=Math.min(i,e.elevationBounds[0]),r=Math.max(r,e.elevationBounds[1]);else for(const t of e.children)s(t)},a=this._rootTiles;if(null!=a)for(const n of a)s(n);return{min:i,max:r}}getSphereScale(e,t){if(!this.tilingScheme)return null;if(!R(e,dt,this.spatialReference))return n.getLogger(this).error("TerrainSurface.getSphereScale(): could not project given point to tiling scheme coordinate system"),null;dt[3]=t;let i=null;const r=e=>{if(e&&V(e.extent,dt)){const t=e.children;if(t[0]&&!e.rendered)for(const e of t)r(e);else{const t=this._getLodBiasCorrectedScale(e.level);i=null==i?t:Math.min(i,t)}}},s=this._rootTiles;if(null!=s)for(const a of s)r(a);return i}queryVisibleScaleRange(e,t,i,r){const s=t?this.tilingScheme.levelAtScale(t):0,a=i?this.tilingScheme.levelAtScale(i):1/0,n=this._lodBias;this._scaleRangeQueries.queryVisibleLevelRange(e,s+n,a+n,r)}_evaluateTransparency(){const e=this.baseOpacity,t=this.overlayManager.renderer.isEmpty,i=this._renderer.transparency,r=this._allSurfaceLayersTransparent()?t?ye.Empty:ye.TransparentWithDraped:e>=1&&!this.hasCompositeBlendMode&&!this._renderer.slicePlaneEnabled?ye.Opaque:ye.Semitransparent,s=i!==r;return s&&(this._renderer.transparency=r,this.view?._stage?.renderer.setParameters({terrainTransparency:this._renderer.transparency})),s}_updateTilingScheme(){const e=this.tilingSchemeLogic.tilingScheme;if(!(e!==this.tilingScheme))return;ve(!!e,"tiling scheme cannot be reset to undefined"),this._isGlobal=!this.view?.state?.isLocal,this.tilingScheme&&this._removeAllTiles();const t=e?.spatialReference??C.WebMercator;this._spatialReference=t,this._isWebMercator=!!t?.isWebMercator,this._isWebMercatorOnPlateeCarree=this._isWebMercator&&N(this.view?.renderSpatialReference),this._set("tilingScheme",e),this._updateClippingExtent(),e&&(this._updateTiledLayers(),this._renderer.setTileSize(e.pixelSize),this.overlayManager.setSpatialReference(e.spatialReference),this._updateRootTiles())}_acquireTile(e,t,i,r){const s=this._tilePool.acquire();return ut[0]=e,ut[1]=t,ut[2]=i,s.init(ut,r,this),s}get updatingRootTiles(){return this._updatingRootTiles}_updateRootTiles(){const{extent:e,tilingScheme:t}=this;if(!t)return;const i=pt;let s=t.rootTilesInExtent(e,i,5*ue);if(null!=this._rootTiles){if(s.length>ue)return void n.getLogger(this).warn(ce);const e=this._rootTiles.map((e=>e.lij)),t=r(e,s,lt);if(this._updatingRootTiles=!0,t.removed.length>0||t.added.length>0){const e=this._rootTiles.filter((e=>!(t.removed.findIndex((t=>lt(t,e.lij)))>-1)||(this._purgeTile(e),!1)));t.added.forEach((t=>e.push(this._newRootTile(t)))),this._setRootTiles(e)}}else this._updatingRootTiles=!0,s.length>ue&&(n.getLogger(this).warn(_e),s=t.rootTilesInExtent(e,i,ue)),this._setRootTiles(s.map((e=>this._newRootTile(e))));j(i,this._rootTilesExtent)||(this._rootTilesExtent=M(i)),this._visible=!0,this._viewChangeUpdate(),this.overlayManager.setPlacementDirty(),this.notifyChange("ready"),this._updateAllTileGeometries(),this._updatingRootTiles=!1,this.checkAllTilesWaterproofness()}_updateAllTileGeometries(){const e=this._allTiles.filter((e=>e.isLoaded&&e.intersectsClippingArea));e.forEach((e=>this._renderer.updateTileGeometryState(e))),e.forEach((e=>e.renderData.updateNeighborData())),this._updateTilesGeometries(e),this._pendingTilesToUpdate.clear()}_updateTilesGeometries(e){if(0===e.length)return;e.sort(He);const t=this.renderer;e.forEach((e=>t.updateGeometryIfNeeded(e))),e.forEach((e=>this._pendingTilesForElevationUpdateEvent.add(e)))}_shouldSplit(e){return e.shouldSplit(this._splitLimits,this._eyePosRenderSR,this.snapLevel)===qe.SPLIT}_newRootTile(e){const t=this._acquireTile(0,e[1],e[2],null);return this._shouldSplit(t)&&t.setPendingUpdate(qe.SPLIT),this._loadTile(t),this._markTileToUpdate(t),this._updateRootTileElevationBounds(),t}_setRootTiles(e){if(this._rootTiles=e,this._allTiles.clear(),null!=e){const t=this._iteratorPool.acquire();for(t.reset(e);!t.done;)this._allTiles.push(t.next());t.remove()}this._renderer.setRootTiles(this._rootTiles),this._updateTilesVisibility(e)}_runViewChangeUpdateIfDirty(){this._viewChangeUpdateDirty&&(this._viewChangeUpdateDirty=!1,this._viewChangeUpdate())}_viewChangeUpdate(){this.view&&!this.suspended&&this.tilingScheme&&this._visibleCached&&(this._inFrameTask?this._viewChangeUpdateDirty=!0:(this._viewChangeUpdateDirty=!1,this._updateViewDependentParameters(),this._updateTilesVisibility(this._rootTiles)))}_updateClippingStatus(e){e.updateClippingStatus(this.extent)&&e.resetPendingUpdate(qe.GEOMETRY)&&this._updateTileGeometryState(e)}_updateTilesVisibility(e){if(null==e)return;const t=Qe(e),i=this.visibleElevationBounds;let r=t?i.min:1/0,s=t?i.max:-1/0;const a=this.extent,n=this._viewProjectionMatrix;this.setTileTreeDirty();const l=this._iteratorPool.acquire();for(l.reset(e);!l.done;){const e=l.next();e.updateClippingStatus(a)&&e.resetPendingUpdate(qe.GEOMETRY)&&this._updateTileGeometryState(e),e.setPendingUpdate(qe.RENDERDATA),e.computeVisibility(),e.updateScreenDepth(n),e.renderData&&(r=Math.min(e.elevationBounds[0],r),s=Math.max(e.elevationBounds[1],s))}l.remove(),this._viewChanged=!0,this._allTilesDirty=!0,this._batchUpdatePendingTileGeometries(),isFinite(r)&&isFinite(s)&&(i.min!==r||i.max!==s)&&(this.visibleElevationBounds=new J(r,s))}_updateRootTileElevationBounds(){let e=1/0,t=-1/0;const i=this._rootTiles;null!=i&&i.forEach((({elevationBounds:i})=>{e=Math.min(e,i[0]),t=Math.max(t,i[1])}));const r=this.rootTileElevationBounds;r.min===e&&r.max===t||(this.rootTileElevationBounds=new J(e,t))}_updateViewDependentParameters(){const{camera:e,contentCamera:t}=this.view.state,i=Math.tan(.5*t.fovX),r=Math.tan(.5*t.fovY),s=this.tilingScheme.pixelSize,a=2**-this._lodBias*e.pixelRatio;this._splitLimits.aboveGround=e.aboveGround,this._splitLimits.fovX=i,this._splitLimits.fovY=r,this._splitLimits.relativeWidthLimit=s/e.width*this.maxTextureScale*a,this._splitLimits.relativeHeightLimit=s/e.height*this.maxTextureScale*a,this._splitLimits.maxLod=this.tilingScheme.getMaxLod(),this._splitLimits.angledSplitBias=this.view.qualitySettings.tiledSurface.angledSplitBias,this.view.state.fixedContentCamera?(null==this._splitLimits.frustum&&(this._splitLimits.frustum=k()),B(this._splitLimits.frustum,t.frustum)):this._splitLimits.frustum=null,B(this._frustum,e.frustum),E(this._viewProjectionMatrix,t.projectionMatrix,t.viewMatrix),L(this._eyePosRenderSR,t.eye),x(e.eye,this.view.renderSpatialReference,this._eyePosSurfaceSR,this.spatialReference)}_updateRenderData(e){e.rendered&&!e.shouldLoad&&(ot(e)?this._loadChildren(e):ht(e)&&this._loadParent(e))}_updateTileGeometryState(e){e.updateVisibility();this._renderer.updateTileGeometryState(e)&&this._markTileToUpdate(e),this._usedMemory=null}_markAllTileNeighborsForGeometryUpdate(e){const t=this._pendingTilesToUpdate;e.forEachLoadedNeighbor((e=>{t.add(e)}))}_updateTileTexture(e,t){const i=e.resetPendingUpdate(qe.TEXTURE_FADING)?qe.TEXTURE_FADING:!!e.resetPendingUpdate(qe.TEXTURE_NOFADING)&&qe.TEXTURE_NOFADING;i&&(this._renderer.updateTileTexture(e,i),this._usedMemory=null,t.madeProgress())}_emitElevationUpdateEventForTiles(){const e=_t.extent;I(e),this._pendingTilesForElevationUpdateEvent.forEach((t=>O(e,t.extent,e))),this._pendingTilesForElevationUpdateEvent.clear(),_t.spatialReference=this.spatialReference,this.emit("elevation-change",_t)}runTask(e){this._handleLayerViewChanges(e),this._frameTask.processQueue(e),this.renderer.processScaleRangeQueries(this._scaleRangeQueries,e),this._inFrameTask=!0,this._pendingUpdates=0,this._hasPendingUpdates=!1,this._updateAllTilesStatus(e),this._sortTiles(e);const t=!this.view.state.fixedContentCamera;this._mergeAndSplit(e,t),this._updateElevation(e),this._updateTextures(e),t||this._mergeAndSplit(e,!0),this._inFrameTask=!1,this._runViewChangeUpdateIfDirty(),this._batchUpdatePendingTileGeometries(),this._emitElevationUpdateEventForTiles(),e.done&&e.hasProgressed&&this.requestUpdate(),this.notifyChange("updatingProgressValue")}_updateAllTilesStatus(e){if(!this._viewChanged||!this._rootTiles||e.done)return;this._viewChanged=!1;const t=this._iteratorPool.acquire();t.reset(this._rootTiles);const i=this.snapLevel,r=this._splitLimits,s=this._eyePosRenderSR;for(;!t.done;){const e=t.next(),a=e.shouldSplit(r,s,i);if(a!==qe.SPLIT){if(e.resetPendingUpdate(qe.SPLIT)&&e.updateAgentSuspension(),a===qe.ELEVATION&&e.updateAgents(se.ELEVATION),t.skipSubtree(),!e.isLeaf){e.setPendingUpdate(qe.MERGE),e.resetPendingUpdate(qe.SPLIT);const t=this._iteratorPool.acquire();t.resetOne(e);const i=this._viewProjectionMatrix;for(let e=t.next();!t.done;e=t.next())this._updateClippingStatus(e),e.updateVisibility(),e.updateScreenDepth(i);t.remove()}}else e.resetPendingUpdate(qe.MERGE),e.isLeaf&&(e.setPendingUpdate(qe.SPLIT),t.skipSubtree()),e.rendered&&e.setPendingUpdate(qe.RENDERDATA)}t.remove(),this.requestUpdate(),(this.shortBatches||!this.oneBatchPerFrameTask)&&this._batchUpdatePendingTileGeometries(),e.madeProgress()}_sortTiles(e){e.done||this._allTilesSorted||(ze(this._allTiles,this.view.pointsOfInterest.focus.renderLocation),this._allTilesSorted=!0,this._treeDebugger&&this._treeDebugger.update(),e.madeProgress())}_markTileToUpdate(e){we(e.isLoaded),e.intersectsClippingArea&&(this._pendingTilesToUpdate.add(e),this._markAllTileNeighborsForGeometryUpdate(e))}_batchUpdatePendingTileGeometries(){const e=this._pendingTilesToUpdate;if(0===e.size)return;const t=Array.from(this._pendingTilesToUpdate.keys()).filter((e=>e.isLoaded&&e.intersectsClippingArea)),i=(i,r)=>{!r?.isLoaded||!r.intersectsClippingArea||r.level<i.level||e.has(r)||(e.add(r),t.push(r),r.renderData.updateNeighborData())};t.sort(He);const r=t.length;for(let s=0;s<r;++s){const r=t[s];we(r.isLoaded),we(r.intersectsClippingArea);const a=r.renderData;a.updateNeighborData();const n=a._dirtyEdgeResolutions,l=a.geometryState.neighborData.cornerPeerNeighbors,o=e=>{const t=je[e];i(r,l[e]?.findCorner(Ae(t),(e=>e.isLoaded)))};for(let t=0;t<4;++t)if(n&1<<t){const s=a.geometryState.neighborData.edgePeerNeighbors[t];s&&s?.level>=r.level&&s.forAllSubtreeOnSide(Ee(Ie[t]),(t=>!(!t.isLoaded||!t.intersectsClippingArea)&&(we(e.has(t)||He(r,t)<0),i(r,t),!0))),o((t+1)%4),o(t)}}e.clear(),this._updateTilesGeometries(t),Oe&&Ve&&this.checkAllTilesWaterproofness()}_mergeAndSplit(e,t){if(this.suspended||e.done||!this._allTilesDirty)return;this._allTilesDirty=!1,this.requestUpdate();let i=!1;const r=this.view.state.fixedContentCamera;let s=!1;for(;!e.done;){s=!0;let a=!1;const n=!this._allTiles.some((s=>{if(!i&&!r&&!s.visible)return e.done;let n=s;if(s.resetPendingUpdate(qe.MERGE)){if(!t)return s.setPendingUpdate(qe.MERGE),e.done;for(;n.parent?.resetPendingUpdate(qe.MERGE);)n=n.parent;this._mergeTile(n),a=!0,e.madeProgress()}else s.resetPendingUpdate(qe.SPLIT)&&(this._splitTile(s),a=!0,e.madeProgress());return!e.done&&n===s&&s.resetPendingUpdate(qe.RENDERDATA)&&(this._updateRenderData(s),e.madeProgress()),e.done}));if(a&&(this._allTilesSorted=!1,this._allTilesDirty=!0),n){if(!i){i=!0;continue}if(!a)break}else this._allTilesDirty=!0}s?e.madeProgress():this._allTilesDirty=!0,!this.oneBatchPerFrameTask&&this._batchUpdatePendingTileGeometries(),this._sortTiles(e)}_updateElevation(e){e.done||(this._allTiles.some((t=>(t.resetPendingUpdate(qe.GEOMETRY)&&(this._updateTileGeometryState(t),this._updateTileTexture(t,e),this.shortBatches&&this._batchUpdatePendingTileGeometries(),e.madeProgress()),e.done))),!this.oneBatchPerFrameTask&&this._batchUpdatePendingTileGeometries())}_updateTextures(e){e.done||this._allTiles.some((t=>(this._updateTileTexture(t,e),e.done)))}_updateClippingExtent(){this.spatialReference&&(this.updateTileOverlayParams(et.UPDATE),this.overlayManager.setPlacementDirty(),this._updateRootTiles())}get _lodBias(){const e=this.view.resourceController.memoryController.memoryFactor;return this.view.qualitySettings.tiledSurface.lodBias-(1-e)*ge}_getLodBiasCorrectedScale(e){const t=this.tilingScheme.levels,i=l(e-this._lodBias,0,t.length-1),r=i-Math.floor(i);return t[Math.floor(i)].scale*(1-r)+t[Math.ceil(i)].scale*r}_removeAllTiles(){null!=this._rootTiles&&(this._rootTiles.forEach((e=>this._purgeTile(e))),this._setRootTiles(null),this.notifyChange("ready")),this._allTiles.clear(),this._visible=!1}_purgeDescendantTiles(e){if(!e.children[0])return!1;let t=!1;for(let i=0;i<4;++i)t=this._purgeTile(e.children[i])||t;return e.unsetChildren(),t}_purgeTile(e){const t=this._purgeDescendantTiles(e)||e.rendered;return this._allTiles.removeUnordered(e),this._unloadTile(e),this._tilePool.release(e),t}_unloadTile(e){this._pendingTilesToUpdate.delete(e),this._pendingTilesForElevationUpdateEvent.delete(e),e.unload(this._renderer)}_splitTile(e){ve(e.isLeaf,"tile that is already split should not be split again!");const t=e.level+1,i=2*e.lij[1],r=2*e.lij[2];e.setChildren(this._createTile(t,i,r,e),this._createTile(t,i,r+1,e),this._createTile(t,i+1,r,e),this._createTile(t,i+1,r+1,e)),e.setPendingUpdate(qe.RENDERDATA),e.updateAgentSuspension(),this._allTiles.pushArray(e.children),this._allTilesDirty=!0,++this._performanceInfo.numSplit}_emitTileScaleChange(e,t=e.level){gt.spatialReference=this.spatialReference,gt.extent=e.extent,gt.scale=this._getLodBiasCorrectedScale(t),this.emit("scale-change",gt)}_createTile(e,t,i,r){ve(!!r,"_createTile sanity check");const s=this._acquireTile(e,t,i,r);return s.updateClippingStatus(this.extent),s.updateScreenDepth(this._viewProjectionMatrix),this._shouldSplit(s)&&s.setPendingUpdate(qe.SPLIT),s}get shortBatches(){return this.view.state.mode!==tt.IDLE}_mergeTile(e){ve(!e.hasPendingUpdate(qe.SPLIT),"_mergeTile sanity check"),this._purgeDescendantTiles(e)&&(ve(!e.renderData,"_mergeTile sanity check"),this._loadTile(e),this._markTileToUpdate(e),this._emitTileScaleChange(e),this.shortBatches&&this._batchUpdatePendingTileGeometries()),this._allTilesDirty=!0,++this._performanceInfo.numMerged}_loadChildren(e){ve(e.rendered,"parent should be rendered"),this._unloadTile(e);const t=e.children;t.forEach((e=>this._loadTile(e))),t.forEach((e=>this._pendingTilesToUpdate.add(e))),this._markAllTileNeighborsForGeometryUpdate(e),this._emitTileScaleChange(e,e.level+1),this.shortBatches&&this._batchUpdatePendingTileGeometries()}_loadParent(e){const t=e.parent;this._unloadChildren(t),this._loadTile(t),this._markTileToUpdate(t),this._emitTileScaleChange(t,t.level),this.shortBatches&&this._batchUpdatePendingTileGeometries()}_unloadChildren(e){const t=e.children;if(t[0])for(let i=0;i<4;++i){const e=t[i];this._unloadChildren(e),this._unloadTile(e)}}_loadTile(e){e.load(),e.setPendingUpdate(qe.RENDERDATA),this.requestUpdate(),this._allTilesDirty=!0,this.overlayManager&&this.overlayManager.hasOverlays&&this.overlayManager.setTileParameters(e)}_elevationDataArrived(e,t,i){const r=new Z(e.lij,e.extent,i);e.dataArrived(t,se.ELEVATION,r);const s=[e],a=e.level,n=this._iteratorPool.acquire();for(n.reset(s);!n.done;){const e=n.next();e.findElevationBoundsForLayer(t,a),e.computeElevationBounds()}0===a&&this._updateRootTileElevationBounds(),n.remove(),this._updateTilesVisibility(s)}_handleLayerViewChanges(e=st){if(!this._layerViewsDirty)return;this._layerViewsDirty=!1;let t=!1;const i=new Set;let r=-1;for(const s of this.view.allLayerViews.items)if(i.add(s.uid),Se(s)||Le(s))if(this._basemapLayerViewHandles.has(s.uid)&&!Le(s)){const e=this._layerClassFromLayerView(s),i=this._getLayerIdxByUID(e,s.uid);null!=i&&((i<r||null==r)&&(t=!0),r=i)}else this._registerTiledLayerView(s),s.layer.loaded&&(t=!0);this._basemapLayerViewHandles.forEach(((e,r)=>{i.has(r)||(this._unregisterTiledLayerView(r),t=!0)})),t&&this._updateTiledLayers(),this.hasCompositeBlendMode=this._hasCompositeBlendMode(),this._evaluateTransparency(),e.madeProgress()}_allSurfaceLayersTransparent(){let e=0===this.view.map?.ground?.opacity;for(const t of this.view.allLayerViews.items)if(De(t)&&!W(t.layer)&&0!==t.fullOpacity)return e=!1,e;return e}_hasCompositeBlendMode(){for(const e of this.view.allLayerViews.items)if((Pe(e)||Le(e))&&Ke(Je[e.layer.blendMode]))return!0;return!1}_layerClassFromLayerView(e){return be(e)?se.ELEVATION:se.MAP}_registerTiledLayerView(e){const t=[];if((Pe(e)||Le(e))&&t.push(m((()=>e.layer.blendMode),(()=>{this.hasCompositeBlendMode=this._hasCompositeBlendMode(),this._updateTileTextures(re.UNFADED)}))),!Le(e)){const i=this._layerClassFromLayerView(e);t.push(m((()=>e.suspended),(()=>this._updateTiledLayers()))),t.push(m((()=>e.fullOpacity),(()=>this._updateTileTextures(re.UNFADED)))),t.push(m((()=>"effectiveScaleRange"in e.layer?e.layer.effectiveScaleRange:null),(()=>this._restartAllAgents(i)))),t.push(e.on("data-changed",(()=>{const t=this._getLayerIdxByUID(i,e.uid);null!=t&&this._invalidateLayerData(t,i)})))}this._unregisterTiledLayerView(e.uid),this._basemapLayerViewHandles.set(e.uid,t)}_unregisterTiledLayerView(e){const t=this._basemapLayerViewHandles.get(e);if(t){for(const e of t)e.remove();this._basemapLayerViewHandles.delete(e)}}_updateTiledLayers(){if(!this.tilingScheme||this.view.suspended)return;const e=this.view.allLayerViews,t=[[],[]];let i=null;e.forEach((e=>{if(!e.layer||e.suspended||!Se(e)||!e.fullExtent)return;const r=this._layerClassFromLayerView(e);if(r===se.MAP){const t=e.displayLevelRange.maxLevel;t!==1/0&&(null===i||t>i)&&(i=t)}t[r].push(e)}));for(const r of ae){const e=this._layerViews[r],i=t[r];i.reverse();const s=i.length;let a=e.length!==s;const n=new Array(s),l=new Array(e.length);this._layerIndexByUid[r].clear();for(let t=0;t<s;t++){const s=i[t].uid;this._layerIndexByUid[r].set(s,t);const o=e.indexOf(i[t]);n[t]=o,t!==o&&(a=!0),o>-1&&(l[o]=t)}if(a){const e=this._postorderIterator;for(e.reset(this._rootTiles);!e.done;)e.next().modifyLayers(l,n,r);this._layerViews[r]=i,this._restartAllAgents(r),this._updateTilesVisibility(this._rootTiles)}}this.tilingScheme.ensureMaxLod(i)&&this._viewChangeUpdate()}_restartAllAgents(e){const t=this._postorderIterator;for(t.reset(this._rootTiles);!t.done;){const i=t.next();i.restartAgents(e),e===se.ELEVATION&&i.computeElevationBounds()}this._updateRootTileElevationBounds()}layerViewByIndex(e,t){return this._layerViews[t][e]}numLayers(e){return this._layerViews[e].length}_updateTileTextures(e){this._allTiles.forAll((t=>{t.updateAgents(se.MAP),e===re.IMMEDIATE?this.renderer.updateTileTexture(t,qe.TEXTURE_NOFADING):t.updateRenderData(se.MAP,e)})),this._evaluateTransparency()}_invalidateLayerData(e,t){this._allTiles.forAll((i=>i.removeLayerAgent(e,t))),this._allTiles.forAll((i=>i.invalidateLayerData(e,t)))}setTileTreeDirty(){this._allTilesDirty=!0}requestRender(e=et.UPDATE){this.renderer.setNeedsRender(e)}requestUpdate(){1==++this._pendingUpdates&&(this._hasPendingUpdates=!0)}requestTileData(e,t,i,r){const s=this.layerViewByIndex(t,i),a=s.layer;return!a.tilemapCache||Ue(s)?this._requestTileData(e,i,s,r):(++this._asyncWorkItems,a.tilemapCache.fetchAvailability(e.lij[0],e.lij[1],e.lij[2],{...r,timeout:6e3}).then((()=>--this._asyncWorkItems)).catch((t=>{throw--this._asyncWorkItems,u(r),c(t)||this._dataMissing(e,i,s,{notInTilemap:!0}),t})).then((()=>this._frameTask.schedule((()=>this._requestTileData(e,i,s,r)),r.signal))))}_requestTileData(e,t,i,r){return t===se.ELEVATION?be(i)?this._requestElevationTileData(e,i,r):Promise.reject():De(i)?this._requestMapTileData(e,i,r):Promise.reject()}_requestElevationTileData(e,t,i){++this._asyncWorkItems;const r=r=>{if(_(i))return;const s=this._layerIndexByUid[se.ELEVATION].get(t.uid);null!=s?(this._usedMemory=null,this.requestUpdate(),this._elevationDataArrived(e,s,r)):n.getLogger(this).warn("TerrainSurface: received data from unknown layer %d %s",se.ELEVATION,e.lij.toString())},s=i=>{c(i)||(this._dataMissing(e,se.ELEVATION,t,i),this.requestUpdate())};if(xe(t.layer))return t.layer.fetchTile(e.lij[0],e.lij[1],e.lij[2],{noDataValue:me,signal:i.signal}).then((e=>{if(!_(i))return this._frameTask.schedule((()=>r(e)),i.signal,s);n.getLogger(this).warnOnce("A call to fetchTile resolved even though the request was aborted. fetchTile should not resolve if options.signal.aborted is true.")}),s).finally((()=>{--this._asyncWorkItems}));const a=t.getTileUrl(e.lij[0],e.lij[1],e.lij[2]);return this._elevationDataRequester.request(a,"binary",i).then((e=>this._lercDecoder.decode(e,{noDataValue:me},i.signal))).then((e=>{e?r(new G(e)):s(new Error("LERC decoding failed"))}),s).finally((()=>{--this._asyncWorkItems}))}_requestMapTileData(e,t,i){++this._asyncWorkItems;const r=(r,s)=>{--this._asyncWorkItems,Me(s),_(i)||(this._dataMissing(e,se.MAP,t,r),this.requestUpdate())},s=e=>t=>r(t,e),a=r=>this._frameTask.schedule((()=>{--this._asyncWorkItems,this.requestUpdate(),_(i)?Me(r):this._mapTileDataArrived(e,t,r)}),i.signal,s(r)).catch(s(r)),l=(e,t=null)=>this._frameTask.schedule((()=>r(e,t)));if(Ue(t)){const r=t.schemaHelper.getLevelRowColumn(e.lij);return t.fetchTile(r[0],r[1],r[2],i).then(a,l)}if(Re(t))return t.fetchTile(e.lij[0],e.lij[1],e.lij[2],i).then(a,l);if(Ce(t)&&xe(t.layer))return t.layer.fetchTile(e.lij[0],e.lij[1],e.lij[2],i).then((e=>{if(_(i))return n.getLogger(this).warnOnce("A call to fetchTile resolved even though the request was aborted. fetchTile should not resolve if options.signal.aborted is true."),void l(g());a(e)}),l);let o=t.getTileUrl(e.lij[0],e.lij[1],e.lij[2]);F(t.layer)&&t.layer.refreshTimestamp&&(o+=`${o.includes("?")?"&":"?"}_ts=${t.layer.refreshTimestamp}`);const h=t.hasMixedImageFormats?"image+type":"image";return this._mapDataRequester.request(o,h,i).then(a,l)}_mapTileDataArrived(e,t,i){const r=this._getLayerIdxByUID(se.MAP,t.uid);null!=r?e.dataArrived(r,se.MAP,i):(Me(i),n.getLogger(this).warn("TerrainSurface: received data from unknown layer"))}_getLayerIdxByUID(e,t){return this._layerIndexByUid[e].get(t)}_dataMissing(e,t,i,r){const s=this._getLayerIdxByUID(t,i.uid);null!=s?e.dataMissing(s,t,r):n.getLogger(this).warn("TerrainSurface: received data from unknown layer")}updateTileOverlayParams(e){this._rootTiles&&this.overlayManager&&(this._allTiles.forAll((e=>{e.renderData&&this.overlayManager.setTileParameters(e)})),this._renderer.setNeedsRender(e))}get performanceInfo(){const e=this._performanceInfo;return e.numNodes=this._allTiles.length,e.numLeaves=e.numVisible=e.numRendered=e.numLoadedPerLevel.length=e.numRenderedPerLevel.length=0,this._allTiles.forAll((t=>{t.isLeaf&&e.numLeaves++;const i=t.level;t.renderData&&(e.numLoadedPerLevel[i]=(e.numLoadedPerLevel[i]||0)+1),t.visible&&(e.numVisible++,t.rendered&&(e.numRenderedPerLevel[i]=(e.numRenderedPerLevel[i]||0)+1,e.numRendered++))})),e}get usedMemory(){return this.tilingScheme?(null==this._usedMemory&&(this._usedMemory=this._recalculateUsedMemory()),null!=this._usedMemory?this._usedMemory:0):0}_recalculateUsedMemory(){return this.tilingScheme?Math.round(this._allTiles.reduce(((e,t)=>e+t.usedMemory),0)):null}getUsedMemoryForLayerView(e){let t=this.overlayManager.gpuMemoryUsage;const i=this._layerClassFromLayerView(e),r=this._getLayerIdxByUID(i,e.uid);return null!=r&&this._allTiles.forAll((e=>t+=e.getUsedMemoryForLayer(i,r))),t}getTile(e){if(null==e||null==this._rootTiles)return null;const t=e.split("/").map((e=>+e));if(0===t[0])return this._rootTiles.find((e=>e.lij[1]===t[1]&&e.lij[2]===t[2]));const i=2**t[0],r=Math.floor(t[1]/i),s=Math.floor(t[2]/i);let a;if(this._rootTiles.some((e=>e.lij[1]===r&&e.lij[2]===s&&(a=e,!0))),a){let e=1<<t[0]-1;for(;a.lij[0]<t[0];){let i=t[1]&e?2:0;if((t[2]&e)>0&&i++,!a.children[i])return null;a=a.children[i],e>>=1}return ve(a.lij[0]===t[0]&&a.lij[1]===t[1]&&a.lij[2]===t[2],"not the right tile?"),a}return null}get renderPatchBorders(){return this._renderer.renderPatchBorders}set renderPatchBorders(e){this._renderer.renderPatchBorders=e}get visualizeNormals(){return this._renderer.visualizeNormals}set visualizeNormals(e){this._renderer.visualizeNormals=e}get renderingDisabled(){return this._renderer.renderingDisabled}set renderingDisabled(e){this._renderer.renderingDisabled=e}get test(){const e=this;return{renderer:e._renderer,lercDecoder:e._lercDecoder,forceReload:()=>{null!=e._rootTiles&&e._rootTiles.length>0&&(e._mergeTile(e._rootTiles[0]),e._viewChangeUpdate())},getTiles:()=>e._allTiles.toArray(),getRenderedTiles(){ct.clear(),e._allTiles.forAll((e=>{e.visible&&e.rendered&&ct.push(e)}));const t=ct.toArray();return Xe(e.renderOrder,t),t},lockTilingScheme(t,i){e._extentHelper.defaultTiledLayersExtent=i,e.tilingSchemeLogic.test.lockTilingScheme(t)}}}checkAllTilesWaterproofness(){if(!Ve)return;const e=this._rootTiles;if(null==e)return;const t=e=>e?.renderData?.geometry?.indices?.length>0,i=(e,i)=>{t(e)&&console.error("Tile[",e.lij,"] has geometry although parent[",i.lij,"] has geom")},r=e=>{if(e.intersectsClippingArea)if(e.renderData&&!e.renderData.geometryState&&console.error("Tile[",e.lij,"] has renderData but not geometryState"),e.renderData&&!e.renderData.geometry&&console.error("Tile[",e.lij,"] has renderData but not geometryInfo"),!e.renderData?.geometry||(e.renderData.geometry.indices?.length??0)>0||console.error("Tile[",e.lij,"] has renderData but no indices - geometryInfo: ",e.renderData.geometry),t(e)){e.checkGeometryWaterproofness();for(const t of e.children)i(t,e)}else if(e.isLeaf)console.error("Tile[",e.lij,"] has no geometry and no children, from root to leaf");else for(const t of e.children)r(t)},s=e=>{const t=e.parent?.visible??!0,i=e.visible;e.computeVisibility();const r=e.visible;if(i!==r&&t&&console.error(" Tile[",e.lij,"] has out of date visibility: ",i," instead of ",r),!e.isLeaf)for(const a of e.children)s(a)};for(const a of e)r(a),s(a)}get isGlobal(){return this._isGlobal}get isWebMercator(){return this._isWebMercator}get isWebMercatorOnPlateeCarree(){return this._isWebMercatorOnPlateeCarree}isEastEndWrap(e){return this.isGlobal&&e[2]===this.lijEastEnd(e[0])-1}isWestEndWrap(e){return this.isGlobal&&0===e[2]}lijEastEnd(e){return 2**(e+(null!=this.spatialReference&&this.spatialReference.isGeographic?1:0))}wrapEastWest(e){const t=this.lijEastEnd(e[0]),i=e[2];if(0<=i&&i<t)return e;if(!this.isGlobal)return null;const r=(i+(i<0?t:0))%t;return[e[0],e[1],r]}enableInternalChecks(e){ke(e)}enableWaterproofnessChecks(e){Be(e)}};e([v()],at.prototype,"_renderer",void 0),e([v({constructOnly:!0})],at.prototype,"_scaleRangeQueries",void 0),e([v({constructOnly:!0})],at.prototype,"view",void 0),e([v({constructOnly:!0})],at.prototype,"overlayManager",void 0),e([v()],at.prototype,"_hasPendingUpdates",void 0),e([v()],at.prototype,"_asyncWorkItems",void 0),e([v()],at.prototype,"_allTilesDirty",void 0),e([v()],at.prototype,"_allTilesSorted",void 0),e([v()],at.prototype,"_viewChanged",void 0),e([v()],at.prototype,"_splitLimits",void 0),e([v({readOnly:!0})],at.prototype,"_watchUpdatingTracking",void 0),e([v()],at.prototype,"_frameTask",void 0),e([v({readOnly:!0})],at.prototype,"snapLevel",null),e([v({readOnly:!0})],at.prototype,"lodSnapping",null),e([v()],at.prototype,"_userClippingExtent",null),e([v()],at.prototype,"_rootTilesExtent",void 0),e([v({readOnly:!0})],at.prototype,"extent",null),e([v({readOnly:!0})],at.prototype,"groundExtent",null),e([v({readOnly:!0})],at.prototype,"_tilingSchemeExtent",null),e([v({readOnly:!0})],at.prototype,"updating",null),e([v({readOnly:!0})],at.prototype,"running",null),e([v(K)],at.prototype,"updatingProgress",void 0),e([v({readOnly:!0})],at.prototype,"updatingProgressValue",null),e([v()],at.prototype,"_maxNumUpdating",void 0),e([v()],at.prototype,"baseOpacity",null),e([v()],at.prototype,"hasCompositeBlendMode",void 0),e([v({readOnly:!0})],at.prototype,"viewingMode",null),e([v()],at.prototype,"maxTextureScale",void 0),e([v({readOnly:!0})],at.prototype,"ready",null),e([v({value:oe.FRONT_TO_BACK})],at.prototype,"renderOrder",null),e([v({readOnly:!0})],at.prototype,"rootTiles",null),e([v()],at.prototype,"_rootTiles",void 0),e([v({readOnly:!0})],at.prototype,"spatialReference",null),e([v({type:t})],at.prototype,"backgroundColor",null),e([v({value:!1})],at.prototype,"slicePlaneEnabled",null),e([v({readOnly:!0})],at.prototype,"tilingScheme",void 0),e([v({readOnly:!0})],at.prototype,"tilingSchemeLocked",null),e([v({readOnly:!0})],at.prototype,"tilingSchemeLogic",void 0),e([v()],at.prototype,"wireframe",null),e([v({value:!1})],at.prototype,"suspended",null),e([v()],at.prototype,"textureFadeDuration",null),e([v()],at.prototype,"visibleElevationBounds",void 0),e([v()],at.prototype,"rootTileElevationBounds",void 0),e([v()],at.prototype,"_layerViewsDirty",void 0),e([v()],at.prototype,"renderPatchBorders",null),e([v()],at.prototype,"visualizeNormals",null),e([v()],at.prototype,"renderingDisabled",null),at=e([w("esri.views.3d.terrain.TerrainSurface")],at);const nt=at;function lt(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function ot(e){const t=e.children;if(!t[0])return!1;for(const i of t)if(i.shouldLoad)return!0;for(const i of t)if(ot(i))return!0;return!1}function ht(e){return e.isLeaf&&(e.parent?.shouldLoad??!1)}const dt=P(),pt=M(),ut=[0,0,0],ct=new p,_t={spatialReference:null,extent:M(),context:"ground"},gt={spatialReference:null,extent:null,scale:0};function mt(e,t,i){for(const r of e){if(!r.containsPointXY(t,i))continue;let e=r;for(;e&&!e.renderData;){const r=(t>e.extentMidX?1:0)+(i<e.extentMidY?2:0);e=e.children[r]}const s=e?.renderData?.geometryState.samplerData??null;return ee(t,i,s)}return null}export{nt as default};
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../Color.js";import i from"../../../core/Accessor.js";import{difference as r}from"../../../core/arrayUtils.js";import s from"../../../core/CollectionFlattener.js";import a from"../../../core/Evented.js";import n from"../../../core/Logger.js";import{clamp as l}from"../../../core/mathUtils.js";import{releaseMaybe as o,destroyMaybe as h}from"../../../core/maybe.js";import d from"../../../core/ObjectPool.js";import p from"../../../core/PooledArray.js";import{throwIfAborted as u,isAbortError as c,isAborted as _,createAbortError as g}from"../../../core/promiseUtils.js";import{watch as m,syncAndInitial as T,sync as y,initial as f}from"../../../core/reactiveUtils.js";import{property as v}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/has.js";import{subclass as w}from"../../../core/accessorSupport/decorators/subclass.js";import{m as E}from"../../../chunks/mat4.js";import{c as S}from"../../../chunks/mat4f64.js";import{c as L}from"../../../chunks/vec3.js";import{c as D}from"../../../chunks/vec3f64.js";import{c as P}from"../../../chunks/vec4f64.js";import{UpdatingHandles as b}from"../../../core/support/UpdatingHandles.js";import{getReferenceEllipsoid as U}from"../../../geometry/ellipsoidUtils.js";import{projectVectorToVector as x,projectPointToVector as R}from"../../../geometry/projection.js";import C from"../../../geometry/SpatialReference.js";import{create as M,equals as j,intersection as A,empty as I,expand as O,intersectsSphere as V}from"../../../geometry/support/aaBoundingRect.js";import{create as k,copy as B}from"../../../geometry/support/frustum.js";import{isPlateCarree as N}from"../../../geometry/support/spatialReferenceUtils.js";import{isRefreshableLayer as F}from"../../../layers/mixins/RefreshableLayer.js";import{ElevationQueryTileCache as q}from"../../../layers/support/ElevationQueryTileCache.js";import{ElevationTileData as G}from"../../../layers/support/ElevationTileData.js";import{isBaseLayer as W}from"../../../layers/support/layerUtils.js";import{acquireDecoder as H}from"../../../layers/support/LercDecoder.js";import{printAllocations as Q}from"../../2d/engine/vectorTiles/VectorTile.js";import{directionToHeadingTilt as z}from"../support/cameraUtils.js";import X from"../support/debugFlags.js";import{toBoundingRect as Y}from"../support/extentUtils.js";import{ClientType as $}from"../support/index.js";import{updatingProgress as K}from"../support/updatingProperties.js";import{ElevationBounds as J}from"./ElevationBounds.js";import{ElevationData as Z,sampleElevation as ee}from"./ElevationData.js";import{create as te}from"./ExtentHelper.js";import{LODSnapping as ie,TextureUpdate as re}from"./interfaces.js";import{LayerClass as se,LayerClasses as ae}from"./LayerClass.js";import{OverlayManager as ne}from"./OverlayManager.js";import{PlanarPatch as le}from"./PlanarPatch.js";import{RenderOrder as oe}from"./RenderOrder.js";import{ScaleRangeQueries as he}from"./ScaleRangeQueries.js";import{SphericalPatch as de}from"./SphericalPatch.js";import{SplitLimits as pe}from"./SplitLimits.js";import{MAX_ROOT_TILES as ue,TOO_MANY_ROOT_TILES_AFTER_CHANGE_ERROR as ce,TOO_MANY_ROOT_TILES_FOR_LAYER_ERROR as _e,MAX_MEMORY_LOD_BIAS as ge,ELEVATION_NODATA_VALUE as me}from"./TerrainConst.js";import{TerrainRenderer as Te,TransparencyMode as ye}from"./TerrainRenderer.js";import fe from"./TerrainSurfacePerformanceInfo.js";import{weakAssert as ve,internalAssert as we,oppositeEdge as Ee,isSurfaceLayerView as Se,isGroupLayerView as Le,isMapTileLayerView as De,isBlendableLayerView as Pe,isElevationLayerView as be,isVectorTileLayerView as Ue,useFetchTileForLayer as xe,isImageryTileLayerView as Re,isTileLayerView as Ce,releaseTileData as Me,neighborCornerIndices as je,oppositeCorner as Ae,neighborEdgeIndices as Ie,ENABLE_TERRAIN_INTERNAL_CHECKS as Oe,ENABLE_WATERPROOFNESS_TESTS as Ve,enableTerrainInternalChecks as ke,enableTerrainWaterproofnessChecks as Be}from"./terrainUtils.js";import{Tile as Ne}from"./Tile.js";import{printAllocations as Fe}from"./TilePerLayerInfo.js";import{TileUpdate as qe}from"./TileUpdate.js";import{IteratorPreorder as Ge,IteratorPostorder as We,compareTilesByLij as He,hasLoadableSiblings as Qe,sortTilesByPOI as ze,sortTiles as Xe}from"./tileUtils.js";import{TilingSchemeLogic as Ye}from"./TilingSchemeLogic.js";import{UpsampleInfo as $e}from"./UpsampleInfo.js";import{isCompositeBlendMode as Ke,blendModeFromString as Je}from"../webgl-engine/core/shaderLibrary/output/BlendOptions.js";import{PBRMode as Ze}from"../webgl-engine/core/shaderLibrary/shading/PhysicallyBasedRenderingParameters.glsl.js";import{RenderRequestType as et}from"../webgl-engine/lib/basicInterfaces.js";import{RenderState as tt}from"../../support/RenderState.js";import{ImmediateTask as it,TaskPriority as rt,noBudget as st}from"../../support/Scheduler.js";let at=class extends(a.EventedMixin(i)){constructor(e){super(e),this._scaleRangeQueries=new he,this._iteratorPool=new d(Ge,(e=>e.remove=()=>this._iteratorPool.release(e))),this._postorderIterator=new We,this._hasPendingUpdates=!1,this._pendingUpdates=0,this._asyncWorkItems=0,this._allTilesDirty=!0,this._allTilesSorted=!0,this._visibleCached=!1,this._usedMemory=null,this._performanceInfo=new fe,this._viewChanged=!1,this._inFrameTask=!1,this._viewChangeUpdateDirty=!1,this._eyePosRenderSR=D(),this._eyePosSurfaceSR=D(),this._splitLimits=new pe,this._frustum=k(),this._viewProjectionMatrix=S(),this._layerViews=[new Array,new Array],this._layerIndexByUid=[new Map,new Map],this._basemapLayerViewHandles=new Map,this._watchUpdatingTracking=new b,this._frameTask=it,this._allTiles=new p,this._upsampleInfoPool=new d($e),this._rootTilesExtent=M(),this.updatingProgress=.5,this._maxNumUpdating=1,this.maxTextureScale=1.2,this._spatialReference=C.WebMercator,this.visibleElevationBounds=new J(1/0,-1/0),this.rootTileElevationBounds=new J(1/0,-1/0),this._updatingRootTiles=!1,this._pendingTilesForElevationUpdateEvent=new Set,this._pendingTilesToUpdate=new Set,this.totalGeometryUpdates=0,this.totalTileUpdates=0,this.oneBatchPerFrameTask=!0,this._layerViewsDirty=!1,this.unloadedMemory=0,this.ignoresMemoryFactor=!1,this._isWebMercator=!1,this._isWebMercatorOnPlateeCarree=!1,this.overlayManager=new ne({...e,surface:this}),this._isGlobal=!e.view?.state?.isLocal}initialize(){this._lercDecoder=H(this.view.resourceController),this._tilePool=this.view.state.isLocal?new d(le):new d(de);const e=this.view.resourceController.memoryController;this._upsampleMapCache=e.newCache("terrain-upsample",(e=>e.unloadMapData())),this._elevationQueryCache=new q(e.newCache("elevation-query")),this.addHandles([m((()=>this.overlayManager.hasHighlights),(e=>this._renderer.setNeedsHighlight(e))),m((()=>this.overlayManager.rendersOccluded),(e=>this._renderer.setRenderOccludedOverlay(e))),m((()=>this.overlayManager.renderer.isEmpty),(()=>this._evaluateTransparency()))],"overlayManager"),this._renderer=new Te({_overlayRenderer:this.overlayManager.renderer,_ellipsoidRadius:U(this.view.spatialReference).radius,_stage:this.view._stage,_allTiles:this._allTiles}),this.addHandles([m((()=>this.baseOpacity),(()=>{this._handleLayerViewChanges(),this._updateTileTextures(this._evaluateTransparency()?re.UNFADED:re.IMMEDIATE)}),T),m((()=>this.hasCompositeBlendMode),(()=>this._updateTileTextures(this._evaluateTransparency()?re.UNFADED:re.IMMEDIATE)),T),m((()=>this.renderingDisabled),(()=>this.view?._stage?.renderer.setParameters({terrainRenderingEnabled:!this.renderingDisabled})),y),m((()=>this.backgroundColor),(e=>{this._handleLayerViewChanges(),this._renderer.updateTileBackground(e)}),T),m((()=>this.snapLevel),(()=>this._viewChanged=!0),y),m((()=>this.view.pointsOfInterest),(e=>{this._renderer.pointsOfInterest=e,this._watchUpdatingTracking.removeAll(),e&&this._watchUpdatingTracking.add((()=>e.focus.renderLocation),(()=>this._allTilesSorted=!1))})),m((()=>X.TERRAIN_TILE_TREE_SHOW_TILES),(e=>{e&&!this._treeDebugger?import("../layers/support/TerrainTileTree3DDebugger.js").then((({TerrainTileTree3DDebugger:e})=>{!this._treeDebugger&&X.TERRAIN_TILE_TREE_SHOW_TILES&&(this._treeDebugger=new e({view:this.view}))})):e||(this._treeDebugger=h(this._treeDebugger))}),f)]);const{spatialReference:t}=this.view;this._extentHelper=te(this.viewingMode,{layers:this.view.map.allLayers,layerViews:this.view.allLayerViews,viewSpatialReference:t});const i=new s({getCollections:()=>this.view?.defaultsFromMap?.mapCollections?.map((({layers:e})=>e)),getChildrenFunction:e=>e&&"layers"in e?e.layers:null}),r=new Ye({layers:i,extentHelper:this._extentHelper,viewingMode:this.viewingMode,viewSpatialReference:t});this._set("tilingSchemeLogic",r),this._updateTilingScheme(),this._elevationDataRequester=this.view.resourceController.createStreamDataRequester($.ELEVATION),this._mapDataRequester=this.view.resourceController.createStreamDataRequester($.BASEMAP);const a=this.view.resourceController.scheduler;this._frameTask=a.registerTask(rt.TERRAIN_SURFACE,this),this.addHandles([m((()=>this._extentHelper.stencilEnabledExtents),(e=>this._renderer.setStencilEnabledLayerExtents(e)),f),m((()=>this.tilingSchemeLogic.tilingScheme),(()=>this._updateTilingScheme()),y),m((()=>this.extent),(()=>this._updateRootTiles()),f),this.view.on("resize",(()=>this._viewChangeUpdate())),m((()=>{const e=this.view,t=e.state;return[this._lodBias,this.lodSnapping,e.resourceController?.memoryController?.memoryFactor,t.camera,t.contentCamera,t.fixedContentCamera]}),(()=>this._viewChangeUpdate()),T),m((()=>this.view.qualitySettings?.tiledSurface?.textureFadeDuration),(e=>this._renderer.textureFadingEnabled=e>0),f),m((()=>this.view.qualitySettings?.physicallyBasedRenderingEnabled),(e=>this._renderer.pbrMode=e?Ze.Terrain:Ze.Disabled),f),m((()=>this._userClippingExtent),(()=>this._updateClippingExtent()),y)]),this.addHandles(this.view.allLayerViews.on("after-changes",(()=>this._layerViewsDirty=!0))),this._layerViewsDirty=!0,this._handleLayerViewChanges()}destroy(){this._frameTask.remove(),this._watchUpdatingTracking.destroy(),this._lercDecoder=o(this._lercDecoder),this._removeAllTiles(),this._upsampleMapCache=h(this._upsampleMapCache),this._elevationQueryCache=h(this._elevationQueryCache),this._set("tilingSchemeLogic",h(this.tilingSchemeLogic)),this._basemapLayerViewHandles.forEach(((e,t)=>this._unregisterTiledLayerView(t))),this._elevationDataRequester=null,this._mapDataRequester=null,this._set("overlayManager",h(this.overlayManager)),this._tilePool=h(this._tilePool),Ne.prune(),this._treeDebugger=h(this._treeDebugger),this._renderer=h(this._renderer),this._iteratorPool=h(this._iteratorPool),this._set("view",null),this._extentHelper=h(this._extentHelper),this._upsampleInfoPool=h(this._upsampleInfoPool),Q(),Fe()}get renderer(){return this._renderer}get frustum(){return this._frustum}get snapLevel(){if(this.lodSnapping===ie.ON){const e=this.view,t=this.tilingScheme,i=e.pointsOfInterest?.cameraOnSurface?.scale;if(t&&i){const r=e.state.contentCamera;let s=z(e,r.eye,r.viewForward,r.up).tilt;s>90&&(s=180-s);const a=2*(s/90)**2,n=t.levelAtScale(i)-a,l=Math.min(n,this._splitLimits.maxLod||1/0);return l<=0?null:l}}return null}get lodSnapping(){return this.view.qualitySettings.tiledSurface.reduceTileLevelDifferences?ie.ON:ie.OFF}get upsampleInfoPool(){return this._upsampleInfoPool}get upsampleMapCache(){return this._upsampleMapCache}get elevationQueryCache(){return this._elevationQueryCache}get mapTileRequester(){return this._mapDataRequester}get _userClippingExtent(){const{spatialReference:e}=this,{clippingArea:t}=this.view;if(null==t||null==e)return null;const i=M(),r=Y(t,i,e)?i:null,s=this._get("extent");return j(r,s)?s:r}get rootTilesExtent(){return this._rootTilesExtent}get extent(){const e=A(this.groundExtent,this._userClippingExtent,M()),t=this._get("extent");return j(e,t)?t:e}get groundExtent(){return null!=this._tilingSchemeExtent?this._tilingSchemeExtent:this._rootTilesExtent}get _tilingSchemeExtent(){return this.tilingSchemeLogic?.extent}get updating(){return this._hasPendingUpdates||(this._maxNumUpdating=1),!!((this.running||this._watchUpdatingTracking?.updating||this._asyncWorkItems>0)&&this.ready&&!this.suspended||this.overlayManager?.updating)}get running(){return(this._hasPendingUpdates||this._viewChanged||this._allTilesDirty||!this._allTilesSorted||this._layerViewsDirty||this._scaleRangeQueries.updating||this._frameTask.updating)&&this.ready&&!this.suspended}get updatingProgressValue(){return this._maxNumUpdating=Math.max(this._pendingUpdates,this._maxNumUpdating),1-this._pendingUpdates/this._maxNumUpdating}get baseOpacity(){return this.view?.map?.ground?.opacity??1}set baseOpacity(e){this.view.map.ground.opacity=e}get viewingMode(){return this.view.state.viewingMode}get ready(){return null!=this._rootTiles}set renderOrder(e){this._renderer.renderOrder=e,this._set("renderOrder",e)}get rootTiles(){return this._rootTiles}get spatialReference(){return this.tilingScheme?.spatialReference??null}get backgroundColor(){return this.view?.map?.ground?.surfaceColor}set backgroundColor(e){this.view.map.ground.surfaceColor=e}set slicePlaneEnabled(e){this._renderer.slicePlaneEnabled=e,this._set("slicePlaneEnabled",e),this._evaluateTransparency()}get tilingSchemeLocked(){return this.tilingSchemeLogic?.tilingSchemeLocked??!1}get wireframe(){return this._renderer?.wireframe}set wireframe(e){e!==this._renderer.wireframe&&(this._renderer.wireframe=e,this._updateAllTileGeometries())}set _visible(e){e!==this._visibleCached&&(this._visibleCached=e,this._renderer.setVisibility(e),this.suspended=!e)}get opaque(){return this._renderer.transparency===ye.Opaque}set suspended(e){this._set("suspended",e),this._viewChangeUpdate()}get textureFadeDuration(){return this.view.qualitySettings.tiledSurface.textureFadeDuration??0}intersect(e,t,i,r){this._renderer.intersect(e,t,i,r)}getElevation(e,t,i,r){const s=this._rootTiles;if(null==s||!s.length)return null;if(0===s[0].layerInfo[se.ELEVATION].length)return null;const a=dt;if(a[0]=e,a[1]=t,a[2]=i,!x(a,r,a,this._spatialReference))return n.getLogger(this).error("TerrainSurface.getElevation(): could not project given point to tiling scheme coordinate system"),null;return mt(s,a[0],a[1])}getElevations(e,t,i){const r=this._rootTiles,s=r?r[0].layerInfo[se.ELEVATION].length:0;if(null!=r&&r.length&&0!==s)for(let a=0;a<t;++a){const t=3*a;i(a,mt(r,e[t],e[t+1]))}else for(let a=0;a<t;++a)i(a,null)}getScale(e){if(!this.tilingScheme)return null;if(!R(e,dt,this.spatialReference))return n.getLogger(this).error("TerrainSurface.getScale(): could not project given point to tiling scheme coordinate system"),null;const t=this._rootTiles;if(null!=t)for(const i of t)if(i?.containsPoint(dt)){let e=i;for(;e.children[0]&&!e.rendered;){const t=e.children[0].extent;let i=0;dt[0]>t[2]&&(i+=1),dt[1]<t[1]&&(i+=2),e=e.children[i]}return this._getLodBiasCorrectedScale(e.level)}return 1/0}getSphereElevationBounds(e,t){if(dt[0]=e[0],dt[1]=e[1],dt[2]=e[2],dt[3]=e[3],!x(dt,t,dt,this.tilingScheme?.spatialReference))return n.getLogger(this).error("TerrainSurface.getSphereElevationBounds(): could not project given point to tiling scheme coordinate system"),null;let i=1/0,r=-1/0;const s=e=>{if(e&&V(e.extent,dt))if(e.isLeaf||e.rendered)i=Math.min(i,e.elevationBounds[0]),r=Math.max(r,e.elevationBounds[1]);else for(const t of e.children)s(t)},a=this._rootTiles;if(null!=a)for(const n of a)s(n);return{min:i,max:r}}getSphereScale(e,t){if(!this.tilingScheme)return null;if(!R(e,dt,this.spatialReference))return n.getLogger(this).error("TerrainSurface.getSphereScale(): could not project given point to tiling scheme coordinate system"),null;dt[3]=t;let i=null;const r=e=>{if(e&&V(e.extent,dt)){const t=e.children;if(t[0]&&!e.rendered)for(const e of t)r(e);else{const t=this._getLodBiasCorrectedScale(e.level);i=null==i?t:Math.min(i,t)}}},s=this._rootTiles;if(null!=s)for(const a of s)r(a);return i}queryVisibleScaleRange(e,t,i,r){const s=t?this.tilingScheme.levelAtScale(t):0,a=i?this.tilingScheme.levelAtScale(i):1/0,n=this._lodBias;this._scaleRangeQueries.queryVisibleLevelRange(e,s+n,a+n,r)}_evaluateTransparency(){const e=this.baseOpacity,t=this.overlayManager.renderer.isEmpty,i=this._renderer.transparency,r=this._allSurfaceLayersTransparent()?t?ye.Empty:ye.TransparentWithDraped:e>=1&&!this.hasCompositeBlendMode&&!this._renderer.slicePlaneEnabled?ye.Opaque:ye.Semitransparent,s=i!==r;return s&&(this._renderer.transparency=r,this.view?._stage?.renderer.setParameters({terrainTransparency:this._renderer.transparency})),s}_updateTilingScheme(){const e=this.tilingSchemeLogic.tilingScheme;if(!(e!==this.tilingScheme))return;ve(!!e,"tiling scheme cannot be reset to undefined"),this._isGlobal=!this.view?.state?.isLocal,this.tilingScheme&&this._removeAllTiles();const t=e?.spatialReference??C.WebMercator;this._spatialReference=t,this._isWebMercator=!!t?.isWebMercator,this._isWebMercatorOnPlateeCarree=this._isWebMercator&&N(this.view?.renderSpatialReference),this._set("tilingScheme",e),this._updateClippingExtent(),e&&(this._updateTiledLayers(),this._renderer.setTileSize(e.pixelSize),this.overlayManager.setSpatialReference(e.spatialReference),this._updateRootTiles())}_acquireTile(e,t,i,r){const s=this._tilePool.acquire();return ut[0]=e,ut[1]=t,ut[2]=i,s.init(ut,r,this),s}get updatingRootTiles(){return this._updatingRootTiles}_updateRootTiles(){const{extent:e,tilingScheme:t}=this;if(!t)return;const i=pt;let s=t.rootTilesInExtent(e,i,5*ue);if(null!=this._rootTiles){if(s.length>ue)return void n.getLogger(this).warn(ce);const e=this._rootTiles.map((e=>e.lij)),t=r(e,s,lt);if(this._updatingRootTiles=!0,t.removed.length>0||t.added.length>0){const e=this._rootTiles.filter((e=>!(t.removed.findIndex((t=>lt(t,e.lij)))>-1)||(this._purgeTile(e),!1)));t.added.forEach((t=>e.push(this._newRootTile(t)))),this._setRootTiles(e)}}else this._updatingRootTiles=!0,s.length>ue&&(n.getLogger(this).warn(_e),s=t.rootTilesInExtent(e,i,ue)),this._setRootTiles(s.map((e=>this._newRootTile(e))));j(i,this._rootTilesExtent)||(this._rootTilesExtent=M(i)),this._visible=!0,this._viewChangeUpdate(),this.overlayManager.setPlacementDirty(),this.notifyChange("ready"),this._updateAllTileGeometries(),this._updatingRootTiles=!1,this.checkAllTilesWaterproofness()}_updateAllTileGeometries(){const e=this._allTiles.filter((e=>e.isLoaded&&e.intersectsClippingArea));e.forEach((e=>this._renderer.updateTileGeometryState(e))),e.forEach((e=>e.renderData.updateNeighborData())),this._updateTilesGeometries(e),this._pendingTilesToUpdate.clear()}_updateTilesGeometries(e){if(0===e.length)return;e.sort(He);const t=this.renderer;e.forEach((e=>t.updateGeometryIfNeeded(e))),e.forEach((e=>this._pendingTilesForElevationUpdateEvent.add(e)))}_shouldSplit(e){return e.shouldSplit(this._splitLimits,this._eyePosRenderSR,this.snapLevel)===qe.SPLIT}_newRootTile(e){const t=this._acquireTile(0,e[1],e[2],null);return this._shouldSplit(t)&&t.setPendingUpdate(qe.SPLIT),this._loadTile(t),this._markTileToUpdate(t),this._updateRootTileElevationBounds(),t}_setRootTiles(e){if(this._rootTiles=e,this._allTiles.clear(),null!=e){const t=this._iteratorPool.acquire();for(t.reset(e);!t.done;)this._allTiles.push(t.next());t.remove()}this._renderer.setRootTiles(this._rootTiles),this._updateTilesVisibility(e)}_runViewChangeUpdateIfDirty(){this._viewChangeUpdateDirty&&(this._viewChangeUpdateDirty=!1,this._viewChangeUpdate())}_viewChangeUpdate(){this.view&&!this.suspended&&this.tilingScheme&&this._visibleCached&&(this._inFrameTask?this._viewChangeUpdateDirty=!0:(this._viewChangeUpdateDirty=!1,this._updateViewDependentParameters(),this._updateTilesVisibility(this._rootTiles)))}_updateClippingStatus(e){e.updateClippingStatus(this.extent)&&e.resetPendingUpdate(qe.GEOMETRY)&&this._updateTileGeometryState(e)}_updateTilesVisibility(e){if(null==e)return;const t=Qe(e),i=this.visibleElevationBounds;let r=t?i.min:1/0,s=t?i.max:-1/0;const a=this.extent,n=this._viewProjectionMatrix;this.setTileTreeDirty();const l=this._iteratorPool.acquire();for(l.reset(e);!l.done;){const e=l.next();e.updateClippingStatus(a)&&e.resetPendingUpdate(qe.GEOMETRY)&&this._updateTileGeometryState(e),e.setPendingUpdate(qe.RENDERDATA),e.computeVisibility(),e.updateScreenDepth(n),e.renderData&&(r=Math.min(e.elevationBounds[0],r),s=Math.max(e.elevationBounds[1],s))}l.remove(),this._viewChanged=!0,this._allTilesDirty=!0,this._batchUpdatePendingTileGeometries(),isFinite(r)&&isFinite(s)&&(i.min!==r||i.max!==s)&&(this.visibleElevationBounds=new J(r,s))}_updateRootTileElevationBounds(){let e=1/0,t=-1/0;const i=this._rootTiles;null!=i&&i.forEach((({elevationBounds:i})=>{e=Math.min(e,i[0]),t=Math.max(t,i[1])}));const r=this.rootTileElevationBounds;r.min===e&&r.max===t||(this.rootTileElevationBounds=new J(e,t))}_updateViewDependentParameters(){const{camera:e,contentCamera:t}=this.view.state,i=Math.tan(.5*t.fovX),r=Math.tan(.5*t.fovY),s=this.tilingScheme.pixelSize,a=2**-this._lodBias*e.pixelRatio;this._splitLimits.aboveGround=e.aboveGround,this._splitLimits.fovX=i,this._splitLimits.fovY=r,this._splitLimits.relativeWidthLimit=s/e.width*this.maxTextureScale*a,this._splitLimits.relativeHeightLimit=s/e.height*this.maxTextureScale*a,this._splitLimits.maxLod=this.tilingScheme.getMaxLod(),this._splitLimits.angledSplitBias=this.view.qualitySettings.tiledSurface.angledSplitBias,this.view.state.fixedContentCamera?(null==this._splitLimits.frustum&&(this._splitLimits.frustum=k()),B(this._splitLimits.frustum,t.frustum)):this._splitLimits.frustum=null,B(this._frustum,e.frustum),E(this._viewProjectionMatrix,t.projectionMatrix,t.viewMatrix),L(this._eyePosRenderSR,t.eye),x(e.eye,this.view.renderSpatialReference,this._eyePosSurfaceSR,this.spatialReference)}_updateRenderData(e){e.rendered&&!e.shouldLoad&&(ot(e)?this._loadChildren(e):ht(e)&&this._loadParent(e))}_updateTileGeometryState(e){e.updateVisibility();this._renderer.updateTileGeometryState(e)&&this._markTileToUpdate(e),this._usedMemory=null}_markAllTileNeighborsForGeometryUpdate(e){const t=this._pendingTilesToUpdate;e.forEachLoadedNeighbor((e=>{t.add(e)}))}_updateTileTexture(e,t){const i=e.resetPendingUpdate(qe.TEXTURE_FADING)?qe.TEXTURE_FADING:!!e.resetPendingUpdate(qe.TEXTURE_NOFADING)&&qe.TEXTURE_NOFADING;i&&(this._renderer.updateTileTexture(e,i),this._usedMemory=null,t.madeProgress())}_emitElevationUpdateEventForTiles(){const e=_t.extent;I(e),this._pendingTilesForElevationUpdateEvent.forEach((t=>O(e,t.extent,e))),this._pendingTilesForElevationUpdateEvent.clear(),_t.spatialReference=this.spatialReference,this.emit("elevation-change",_t)}runTask(e){this._handleLayerViewChanges(e),this._frameTask.processQueue(e),this.renderer.processScaleRangeQueries(this._scaleRangeQueries,e),this._inFrameTask=!0,this._pendingUpdates=0,this._hasPendingUpdates=!1,this._updateAllTilesStatus(e),this._sortTiles(e);const t=!this.view.state.fixedContentCamera;this._mergeAndSplit(e,t),this._updateElevation(e),this._updateTextures(e),t||this._mergeAndSplit(e,!0),this._inFrameTask=!1,this._runViewChangeUpdateIfDirty(),this._batchUpdatePendingTileGeometries(),this._emitElevationUpdateEventForTiles(),e.done&&e.hasProgressed&&this.requestUpdate(),this.notifyChange("updatingProgressValue")}_updateAllTilesStatus(e){if(!this._viewChanged||!this._rootTiles||e.done)return;this._viewChanged=!1;const t=this._iteratorPool.acquire();t.reset(this._rootTiles);const i=this.snapLevel,r=this._splitLimits,s=this._eyePosRenderSR;for(;!t.done;){const e=t.next(),a=e.shouldSplit(r,s,i);if(a!==qe.SPLIT){if(e.resetPendingUpdate(qe.SPLIT)&&e.updateAgentSuspension(),a===qe.ELEVATION&&e.updateAgents(se.ELEVATION),t.skipSubtree(),!e.isLeaf){e.setPendingUpdate(qe.MERGE),e.resetPendingUpdate(qe.SPLIT);const t=this._iteratorPool.acquire();t.resetOne(e);const i=this._viewProjectionMatrix;for(let e=t.next();!t.done;e=t.next())this._updateClippingStatus(e),e.updateVisibility(),e.updateScreenDepth(i);t.remove()}}else e.resetPendingUpdate(qe.MERGE),e.isLeaf&&(e.setPendingUpdate(qe.SPLIT),t.skipSubtree()),e.rendered&&e.setPendingUpdate(qe.RENDERDATA)}t.remove(),this.requestUpdate(),(this.shortBatches||!this.oneBatchPerFrameTask)&&this._batchUpdatePendingTileGeometries(),e.madeProgress()}_sortTiles(e){e.done||this._allTilesSorted||(ze(this._allTiles,this.view.pointsOfInterest.focus.renderLocation),this._allTilesSorted=!0,this._treeDebugger&&this._treeDebugger.update(),e.madeProgress())}_markTileToUpdate(e){we(e.isLoaded),e.intersectsClippingArea&&(this._pendingTilesToUpdate.add(e),this._markAllTileNeighborsForGeometryUpdate(e))}_batchUpdatePendingTileGeometries(){const e=this._pendingTilesToUpdate;if(0===e.size)return;const t=Array.from(this._pendingTilesToUpdate.keys()).filter((e=>e.isLoaded&&e.intersectsClippingArea)),i=(i,r)=>{!r?.isLoaded||!r.intersectsClippingArea||r.level<i.level||e.has(r)||(e.add(r),t.push(r),r.renderData.updateNeighborData())};t.sort(He);const r=t.length;for(let s=0;s<r;++s){const r=t[s];we(r.isLoaded),we(r.intersectsClippingArea);const a=r.renderData;a.updateNeighborData();const n=a._dirtyEdgeResolutions,l=a.geometryState.neighborData.cornerPeerNeighbors,o=e=>{const t=je[e];i(r,l[e]?.findCorner(Ae(t),(e=>e.isLoaded)))};for(let t=0;t<4;++t)if(n&1<<t){const s=a.geometryState.neighborData.edgePeerNeighbors[t];s&&s?.level>=r.level&&s.forAllSubtreeOnSide(Ee(Ie[t]),(t=>!(!t.isLoaded||!t.intersectsClippingArea)&&(we(e.has(t)||He(r,t)<0),i(r,t),!0))),o((t+1)%4),o(t)}}e.clear(),this._updateTilesGeometries(t),Oe&&Ve&&this.checkAllTilesWaterproofness()}_mergeAndSplit(e,t){if(this.suspended||e.done||!this._allTilesDirty)return;this._allTilesDirty=!1,this.requestUpdate();let i=!1;const r=this.view.state.fixedContentCamera;let s=!1;for(;!e.done;){s=!0;let a=!1;const n=!this._allTiles.some((s=>{if(!i&&!r&&!s.visible)return e.done;let n=s;if(s.resetPendingUpdate(qe.MERGE)){if(!t)return s.setPendingUpdate(qe.MERGE),e.done;for(;n.parent?.resetPendingUpdate(qe.MERGE);)n=n.parent;this._mergeTile(n),a=!0,e.madeProgress()}else s.resetPendingUpdate(qe.SPLIT)&&(this._splitTile(s),a=!0,e.madeProgress());return!e.done&&n===s&&s.resetPendingUpdate(qe.RENDERDATA)&&(this._updateRenderData(s),e.madeProgress()),e.done}));if(a&&(this._allTilesSorted=!1,this._allTilesDirty=!0),n){if(!i){i=!0;continue}if(!a)break}else this._allTilesDirty=!0}s?e.madeProgress():this._allTilesDirty=!0,!this.oneBatchPerFrameTask&&this._batchUpdatePendingTileGeometries(),this._sortTiles(e)}_updateElevation(e){e.done||(this._allTiles.some((t=>(t.resetPendingUpdate(qe.GEOMETRY)&&(this._updateTileGeometryState(t),this._updateTileTexture(t,e),this.shortBatches&&this._batchUpdatePendingTileGeometries(),e.madeProgress()),e.done))),!this.oneBatchPerFrameTask&&this._batchUpdatePendingTileGeometries())}_updateTextures(e){e.done||this._allTiles.some((t=>(this._updateTileTexture(t,e),e.done)))}_updateClippingExtent(){this.spatialReference&&(this.updateTileOverlayParams(et.UPDATE),this.overlayManager.setPlacementDirty(),this._updateRootTiles())}get _lodBias(){const e=this.view.resourceController.memoryController.memoryFactor;return this.view.qualitySettings.tiledSurface.lodBias-(1-e)*ge}_getLodBiasCorrectedScale(e){const t=this.tilingScheme.levels,i=l(e-this._lodBias,0,t.length-1),r=i-Math.floor(i);return t[Math.floor(i)].scale*(1-r)+t[Math.ceil(i)].scale*r}_removeAllTiles(){null!=this._rootTiles&&(this._rootTiles.forEach((e=>this._purgeTile(e))),this._setRootTiles(null),this.notifyChange("ready")),this._allTiles.clear(),this._visible=!1}_purgeDescendantTiles(e){if(!e.children[0])return!1;let t=!1;for(let i=0;i<4;++i)t=this._purgeTile(e.children[i])||t;return e.unsetChildren(),t}_purgeTile(e){const t=this._purgeDescendantTiles(e)||e.rendered;return this._allTiles.removeUnordered(e),this._unloadTile(e),this._tilePool.release(e),t}_unloadTile(e){this._pendingTilesToUpdate.delete(e),this._pendingTilesForElevationUpdateEvent.delete(e),e.unload(this._renderer)}_splitTile(e){ve(e.isLeaf,"tile that is already split should not be split again!");const t=e.level+1,i=2*e.lij[1],r=2*e.lij[2];e.setChildren(this._createTile(t,i,r,e),this._createTile(t,i,r+1,e),this._createTile(t,i+1,r,e),this._createTile(t,i+1,r+1,e)),e.setPendingUpdate(qe.RENDERDATA),e.updateAgentSuspension(),this._allTiles.pushArray(e.children),this._allTilesDirty=!0,++this._performanceInfo.numSplit}_emitTileScaleChange(e,t=e.level){gt.spatialReference=this.spatialReference,gt.extent=e.extent,gt.scale=this._getLodBiasCorrectedScale(t),this.emit("scale-change",gt)}_createTile(e,t,i,r){ve(!!r,"_createTile sanity check");const s=this._acquireTile(e,t,i,r);return s.updateClippingStatus(this.extent),s.updateScreenDepth(this._viewProjectionMatrix),this._shouldSplit(s)&&s.setPendingUpdate(qe.SPLIT),s}get shortBatches(){return this.view.state.mode!==tt.IDLE}_mergeTile(e){ve(!e.hasPendingUpdate(qe.SPLIT),"_mergeTile sanity check"),this._purgeDescendantTiles(e)&&(ve(!e.renderData,"_mergeTile sanity check"),this._loadTile(e),this._markTileToUpdate(e),this._emitTileScaleChange(e),this.shortBatches&&this._batchUpdatePendingTileGeometries()),this._allTilesDirty=!0,++this._performanceInfo.numMerged}_loadChildren(e){ve(e.rendered,"parent should be rendered"),this._unloadTile(e);const t=e.children;t.forEach((e=>this._loadTile(e))),t.forEach((e=>this._pendingTilesToUpdate.add(e))),this._markAllTileNeighborsForGeometryUpdate(e),this._emitTileScaleChange(e,e.level+1),this.shortBatches&&this._batchUpdatePendingTileGeometries()}_loadParent(e){const t=e.parent;this._unloadChildren(t),this._loadTile(t),this._markTileToUpdate(t),this._emitTileScaleChange(t,t.level),this.shortBatches&&this._batchUpdatePendingTileGeometries()}_unloadChildren(e){const t=e.children;if(t[0])for(let i=0;i<4;++i){const e=t[i];this._unloadChildren(e),this._unloadTile(e)}}_loadTile(e){e.load(),e.setPendingUpdate(qe.RENDERDATA),this.requestUpdate(),this._allTilesDirty=!0,this.overlayManager&&this.overlayManager.hasOverlays&&this.overlayManager.setTileParameters(e)}_elevationDataArrived(e,t,i){const r=new Z(e.lij,e.extent,i);e.dataArrived(t,se.ELEVATION,r);const s=[e],a=e.level,n=this._iteratorPool.acquire();for(n.reset(s);!n.done;){const e=n.next();e.findElevationBoundsForLayer(t,a),e.computeElevationBounds()}0===a&&this._updateRootTileElevationBounds(),n.remove(),this._updateTilesVisibility(s)}_handleLayerViewChanges(e=st){if(!this._layerViewsDirty)return;this._layerViewsDirty=!1;let t=!1;const i=new Set;let r=-1;for(const s of this.view.allLayerViews.items)if(i.add(s.uid),Se(s)||Le(s))if(this._basemapLayerViewHandles.has(s.uid)&&!Le(s)){const e=this._layerClassFromLayerView(s),i=this._getLayerIdxByUID(e,s.uid);null!=i&&((i<r||null==r)&&(t=!0),r=i)}else this._registerTiledLayerView(s),s.layer.loaded&&(t=!0);this._basemapLayerViewHandles.forEach(((e,r)=>{i.has(r)||(this._unregisterTiledLayerView(r),t=!0)})),t&&this._updateTiledLayers(),this.hasCompositeBlendMode=this._hasCompositeBlendMode(),this._evaluateTransparency(),e.madeProgress()}_allSurfaceLayersTransparent(){let e=0===this.view.map?.ground?.opacity;for(const t of this.view.allLayerViews.items)if(De(t)&&!W(t.layer)&&0!==t.fullOpacity)return e=!1,e;return e}_hasCompositeBlendMode(){for(const e of this.view.allLayerViews.items)if((Pe(e)||Le(e))&&Ke(Je[e.layer.blendMode]))return!0;return!1}_layerClassFromLayerView(e){return be(e)?se.ELEVATION:se.MAP}_registerTiledLayerView(e){const t=[];if((Pe(e)||Le(e))&&t.push(m((()=>e.layer.blendMode),(()=>{this.hasCompositeBlendMode=this._hasCompositeBlendMode(),this._updateTileTextures(re.UNFADED)}))),!Le(e)){const i=this._layerClassFromLayerView(e);t.push(m((()=>e.suspended),(()=>this._updateTiledLayers()))),t.push(m((()=>e.fullOpacity),(()=>this._updateTileTextures(re.UNFADED)))),t.push(m((()=>"effectiveScaleRange"in e.layer?e.layer.effectiveScaleRange:null),(()=>this._restartAllAgents(i)))),t.push(e.on("data-changed",(()=>{const t=this._getLayerIdxByUID(i,e.uid);null!=t&&this._invalidateLayerData(t,i)})))}this._unregisterTiledLayerView(e.uid),this._basemapLayerViewHandles.set(e.uid,t)}_unregisterTiledLayerView(e){const t=this._basemapLayerViewHandles.get(e);if(t){for(const e of t)e.remove();this._basemapLayerViewHandles.delete(e)}}_updateTiledLayers(){if(!this.tilingScheme||this.view.suspended)return;const e=this.view.allLayerViews,t=[[],[]];let i=null;e.forEach((e=>{if(!e.layer||e.suspended||!Se(e)||!e.fullExtent)return;const r=this._layerClassFromLayerView(e);if(r===se.MAP){const t=e.displayLevelRange.maxLevel;t!==1/0&&(null===i||t>i)&&(i=t)}t[r].push(e)}));for(const r of ae){const e=this._layerViews[r],i=t[r];i.reverse();const s=i.length;let a=e.length!==s;const n=new Array(s),l=new Array(e.length);this._layerIndexByUid[r].clear();for(let t=0;t<s;t++){const s=i[t].uid;this._layerIndexByUid[r].set(s,t);const o=e.indexOf(i[t]);n[t]=o,t!==o&&(a=!0),o>-1&&(l[o]=t)}if(a){const e=this._postorderIterator;for(e.reset(this._rootTiles);!e.done;)e.next().modifyLayers(l,n,r);this._layerViews[r]=i,this._restartAllAgents(r),this._updateTilesVisibility(this._rootTiles)}}this.tilingScheme.ensureMaxLod(i)&&this._viewChangeUpdate()}_restartAllAgents(e){const t=this._postorderIterator;for(t.reset(this._rootTiles);!t.done;){const i=t.next();i.restartAgents(e),e===se.ELEVATION&&i.computeElevationBounds()}this._updateRootTileElevationBounds()}layerViewByIndex(e,t){return this._layerViews[t][e]}numLayers(e){return this._layerViews[e].length}_updateTileTextures(e){this._allTiles.forAll((t=>{t.updateAgents(se.MAP),e===re.IMMEDIATE?this.renderer.updateTileTexture(t,qe.TEXTURE_NOFADING):t.updateRenderData(se.MAP,e)})),this._evaluateTransparency()}_invalidateLayerData(e,t){this._allTiles.forAll((i=>i.removeLayerAgent(e,t))),this._allTiles.forAll((i=>i.invalidateLayerData(e,t)))}setTileTreeDirty(){this._allTilesDirty=!0}requestRender(e=et.UPDATE){this.renderer.setNeedsRender(e)}requestUpdate(){1==++this._pendingUpdates&&(this._hasPendingUpdates=!0)}requestTileData(e,t,i,r){const s=this.layerViewByIndex(t,i),a=s.layer;return!a.tilemapCache||Ue(s)?this._requestTileData(e,i,s,r):(++this._asyncWorkItems,a.tilemapCache.fetchAvailability(e.lij[0],e.lij[1],e.lij[2],{...r,timeout:6e3}).then((()=>--this._asyncWorkItems)).catch((t=>{throw--this._asyncWorkItems,u(r),c(t)||this._dataMissing(e,i,s,{notInTilemap:!0}),t})).then((()=>this._frameTask.schedule((()=>this._requestTileData(e,i,s,r)),r.signal))))}_requestTileData(e,t,i,r){return t===se.ELEVATION?be(i)?this._requestElevationTileData(e,i,r):Promise.reject():De(i)?this._requestMapTileData(e,i,r):Promise.reject()}_requestElevationTileData(e,t,i){++this._asyncWorkItems;const r=r=>{if(_(i))return;const s=this._layerIndexByUid[se.ELEVATION].get(t.uid);null!=s?(this._usedMemory=null,this.requestUpdate(),this._elevationDataArrived(e,s,r)):n.getLogger(this).warn("TerrainSurface: received data from unknown layer %d %s",se.ELEVATION,e.lij.toString())},s=i=>{c(i)||(this._dataMissing(e,se.ELEVATION,t,i),this.requestUpdate())};if(xe(t.layer))return t.layer.fetchTile(e.lij[0],e.lij[1],e.lij[2],{noDataValue:me,signal:i.signal}).then((e=>{if(!_(i))return this._frameTask.schedule((()=>r(e)),i.signal,s);n.getLogger(this).warnOnce("A call to fetchTile resolved even though the request was aborted. fetchTile should not resolve if options.signal.aborted is true.")}),s).finally((()=>{--this._asyncWorkItems}));const a=t.getTileUrl(e.lij[0],e.lij[1],e.lij[2]);return this._elevationDataRequester.request(a,"binary",i).then((e=>this._lercDecoder.decode(e,{noDataValue:me},i.signal))).then((e=>{e?r(new G(e)):s(new Error("LERC decoding failed"))}),s).finally((()=>{--this._asyncWorkItems}))}_requestMapTileData(e,t,i){++this._asyncWorkItems;const r=(r,s)=>{--this._asyncWorkItems,Me(s),_(i)||(this._dataMissing(e,se.MAP,t,r),this.requestUpdate())},s=e=>t=>r(t,e),a=r=>this._frameTask.schedule((()=>{--this._asyncWorkItems,this.requestUpdate(),_(i)?Me(r):this._mapTileDataArrived(e,t,r)}),i.signal,s(r)).catch(s(r)),l=(e,t=null)=>this._frameTask.schedule((()=>r(e,t)));if(Ue(t)){const r=t.schemaHelper.getLevelRowColumn(e.lij);return t.fetchTile(r[0],r[1],r[2],i).then(a,l)}if(Re(t))return t.fetchTile(e.lij[0],e.lij[1],e.lij[2],i).then(a,l);if(Ce(t)&&xe(t.layer))return t.layer.fetchTile(e.lij[0],e.lij[1],e.lij[2],i).then((e=>{if(_(i))return n.getLogger(this).warnOnce("A call to fetchTile resolved even though the request was aborted. fetchTile should not resolve if options.signal.aborted is true."),void l(g());a(e)}),l);let o=t.getTileUrl(e.lij[0],e.lij[1],e.lij[2]);F(t.layer)&&t.layer.refreshTimestamp&&(o+=`${o.includes("?")?"&":"?"}_ts=${t.layer.refreshTimestamp}`);const h=t.hasMixedImageFormats?"image+type":"image";return this._mapDataRequester.request(o,h,i).then(a,l)}_mapTileDataArrived(e,t,i){const r=this._getLayerIdxByUID(se.MAP,t.uid);null!=r?e.dataArrived(r,se.MAP,i):(Me(i),n.getLogger(this).warn("TerrainSurface: received data from unknown layer"))}_getLayerIdxByUID(e,t){return this._layerIndexByUid[e].get(t)}_dataMissing(e,t,i,r){const s=this._getLayerIdxByUID(t,i.uid);null!=s?e.dataMissing(s,t,r):n.getLogger(this).warn("TerrainSurface: received data from unknown layer")}updateTileOverlayParams(e){this._rootTiles&&this.overlayManager&&(this._allTiles.forAll((e=>{e.renderData&&this.overlayManager.setTileParameters(e)})),this._renderer.setNeedsRender(e))}get performanceInfo(){const e=this._performanceInfo;return e.numNodes=this._allTiles.length,e.numLeaves=e.numVisible=e.numRendered=e.numLoadedPerLevel.length=e.numRenderedPerLevel.length=0,this._allTiles.forAll((t=>{t.isLeaf&&e.numLeaves++;const i=t.level;t.renderData&&(e.numLoadedPerLevel[i]=(e.numLoadedPerLevel[i]||0)+1),t.visible&&(e.numVisible++,t.rendered&&(e.numRenderedPerLevel[i]=(e.numRenderedPerLevel[i]||0)+1,e.numRendered++))})),e}get usedMemory(){return this.tilingScheme?(null==this._usedMemory&&(this._usedMemory=this._recalculateUsedMemory()),null!=this._usedMemory?this._usedMemory:0):0}_recalculateUsedMemory(){return this.tilingScheme?Math.round(this._allTiles.reduce(((e,t)=>e+t.usedMemory),this.overlayManager.usedMemory)):null}getUsedMemoryForLayerView(e){let t=0;const i=this._layerClassFromLayerView(e),r=this._getLayerIdxByUID(i,e.uid);return null!=r&&this._allTiles.forAll((e=>t+=e.getUsedMemoryForLayer(i,r))),t}getTile(e){if(null==e||null==this._rootTiles)return null;const t=e.split("/").map((e=>+e));if(0===t[0])return this._rootTiles.find((e=>e.lij[1]===t[1]&&e.lij[2]===t[2]));const i=2**t[0],r=Math.floor(t[1]/i),s=Math.floor(t[2]/i);let a;if(this._rootTiles.some((e=>e.lij[1]===r&&e.lij[2]===s&&(a=e,!0))),a){let e=1<<t[0]-1;for(;a.lij[0]<t[0];){let i=t[1]&e?2:0;if((t[2]&e)>0&&i++,!a.children[i])return null;a=a.children[i],e>>=1}return ve(a.lij[0]===t[0]&&a.lij[1]===t[1]&&a.lij[2]===t[2],"not the right tile?"),a}return null}get renderPatchBorders(){return this._renderer.renderPatchBorders}set renderPatchBorders(e){this._renderer.renderPatchBorders=e}get visualizeNormals(){return this._renderer.visualizeNormals}set visualizeNormals(e){this._renderer.visualizeNormals=e}get renderingDisabled(){return this._renderer.renderingDisabled}set renderingDisabled(e){this._renderer.renderingDisabled=e}get test(){const e=this;return{renderer:e._renderer,lercDecoder:e._lercDecoder,forceReload:()=>{null!=e._rootTiles&&e._rootTiles.length>0&&(e._mergeTile(e._rootTiles[0]),e._viewChangeUpdate())},getTiles:()=>e._allTiles.toArray(),getRenderedTiles(){ct.clear(),e._allTiles.forAll((e=>{e.visible&&e.rendered&&ct.push(e)}));const t=ct.toArray();return Xe(e.renderOrder,t),t},lockTilingScheme(t,i){e._extentHelper.defaultTiledLayersExtent=i,e.tilingSchemeLogic.test.lockTilingScheme(t)}}}checkAllTilesWaterproofness(){if(!Ve)return;const e=this._rootTiles;if(null==e)return;const t=e=>e?.renderData?.geometry?.indices?.length>0,i=(e,i)=>{t(e)&&console.error("Tile[",e.lij,"] has geometry although parent[",i.lij,"] has geom")},r=e=>{if(e.intersectsClippingArea)if(e.renderData&&!e.renderData.geometryState&&console.error("Tile[",e.lij,"] has renderData but not geometryState"),e.renderData&&!e.renderData.geometry&&console.error("Tile[",e.lij,"] has renderData but not geometryInfo"),!e.renderData?.geometry||(e.renderData.geometry.indices?.length??0)>0||console.error("Tile[",e.lij,"] has renderData but no indices - geometryInfo: ",e.renderData.geometry),t(e)){e.checkGeometryWaterproofness();for(const t of e.children)i(t,e)}else if(e.isLeaf)console.error("Tile[",e.lij,"] has no geometry and no children, from root to leaf");else for(const t of e.children)r(t)},s=e=>{const t=e.parent?.visible??!0,i=e.visible;e.computeVisibility();const r=e.visible;if(i!==r&&t&&console.error(" Tile[",e.lij,"] has out of date visibility: ",i," instead of ",r),!e.isLeaf)for(const a of e.children)s(a)};for(const a of e)r(a),s(a)}get isGlobal(){return this._isGlobal}get isWebMercator(){return this._isWebMercator}get isWebMercatorOnPlateeCarree(){return this._isWebMercatorOnPlateeCarree}isEastEndWrap(e){return this.isGlobal&&e[2]===this.lijEastEnd(e[0])-1}isWestEndWrap(e){return this.isGlobal&&0===e[2]}lijEastEnd(e){return 2**(e+(null!=this.spatialReference&&this.spatialReference.isGeographic?1:0))}wrapEastWest(e){const t=this.lijEastEnd(e[0]),i=e[2];if(0<=i&&i<t)return e;if(!this.isGlobal)return null;const r=(i+(i<0?t:0))%t;return[e[0],e[1],r]}enableInternalChecks(e){ke(e)}enableWaterproofnessChecks(e){Be(e)}};e([v()],at.prototype,"_renderer",void 0),e([v({constructOnly:!0})],at.prototype,"_scaleRangeQueries",void 0),e([v({constructOnly:!0})],at.prototype,"view",void 0),e([v({constructOnly:!0})],at.prototype,"overlayManager",void 0),e([v()],at.prototype,"_hasPendingUpdates",void 0),e([v()],at.prototype,"_asyncWorkItems",void 0),e([v()],at.prototype,"_allTilesDirty",void 0),e([v()],at.prototype,"_allTilesSorted",void 0),e([v()],at.prototype,"_viewChanged",void 0),e([v()],at.prototype,"_splitLimits",void 0),e([v({readOnly:!0})],at.prototype,"_watchUpdatingTracking",void 0),e([v()],at.prototype,"_frameTask",void 0),e([v({readOnly:!0})],at.prototype,"snapLevel",null),e([v({readOnly:!0})],at.prototype,"lodSnapping",null),e([v()],at.prototype,"_userClippingExtent",null),e([v()],at.prototype,"_rootTilesExtent",void 0),e([v({readOnly:!0})],at.prototype,"extent",null),e([v({readOnly:!0})],at.prototype,"groundExtent",null),e([v({readOnly:!0})],at.prototype,"_tilingSchemeExtent",null),e([v({readOnly:!0})],at.prototype,"updating",null),e([v({readOnly:!0})],at.prototype,"running",null),e([v(K)],at.prototype,"updatingProgress",void 0),e([v({readOnly:!0})],at.prototype,"updatingProgressValue",null),e([v()],at.prototype,"_maxNumUpdating",void 0),e([v()],at.prototype,"baseOpacity",null),e([v()],at.prototype,"hasCompositeBlendMode",void 0),e([v({readOnly:!0})],at.prototype,"viewingMode",null),e([v()],at.prototype,"maxTextureScale",void 0),e([v({readOnly:!0})],at.prototype,"ready",null),e([v({value:oe.FRONT_TO_BACK})],at.prototype,"renderOrder",null),e([v({readOnly:!0})],at.prototype,"rootTiles",null),e([v()],at.prototype,"_rootTiles",void 0),e([v({readOnly:!0})],at.prototype,"spatialReference",null),e([v({type:t})],at.prototype,"backgroundColor",null),e([v({value:!1})],at.prototype,"slicePlaneEnabled",null),e([v({readOnly:!0})],at.prototype,"tilingScheme",void 0),e([v({readOnly:!0})],at.prototype,"tilingSchemeLocked",null),e([v({readOnly:!0})],at.prototype,"tilingSchemeLogic",void 0),e([v()],at.prototype,"wireframe",null),e([v({value:!1})],at.prototype,"suspended",null),e([v()],at.prototype,"textureFadeDuration",null),e([v()],at.prototype,"visibleElevationBounds",void 0),e([v()],at.prototype,"rootTileElevationBounds",void 0),e([v()],at.prototype,"_layerViewsDirty",void 0),e([v()],at.prototype,"renderPatchBorders",null),e([v()],at.prototype,"visualizeNormals",null),e([v()],at.prototype,"renderingDisabled",null),at=e([w("esri.views.3d.terrain.TerrainSurface")],at);const nt=at;function lt(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function ot(e){const t=e.children;if(!t[0])return!1;for(const i of t)if(i.shouldLoad)return!0;for(const i of t)if(ot(i))return!0;return!1}function ht(e){return e.isLeaf&&(e.parent?.shouldLoad??!1)}const dt=P(),pt=M(),ut=[0,0,0],ct=new p,_t={spatialReference:null,extent:M(),context:"ground"},gt={spatialReference:null,extent:null,scale:0};function mt(e,t,i){for(const r of e){if(!r.containsPointXY(t,i))continue;let e=r;for(;e&&!e.renderData;){const r=(t>e.extentMidX?1:0)+(i<e.extentMidY?2:0);e=e.children[r]}const s=e?.renderData?.geometryState.samplerData??null;return ee(t,i,s)}return null}export{nt as default};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.28/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../chunks/tslib.es6.js";import
|
|
5
|
+
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import r from"../../../core/PooledArray.js";import{isPromiseLike as s}from"../../../core/promiseUtils.js";import{property as i}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import{subclass as n}from"../../../core/accessorSupport/decorators/subclass.js";import{isIntersectionHandler as o}from"../state/helpers/SceneIntersectionHelper.js";import{ChangeSet as d}from"./lib/ChangeSet.js";import{UpdatePolicy as a}from"./lib/UpdatePolicy.js";import{isWebGLLayer as h}from"./lib/WebGLLayer.js";import{Model as l}from"./parts/Model.js";import{RenderView as y}from"./parts/RenderView.js";import{TaskPriority as c,noBudget as m}from"../../support/Scheduler.js";let u=class extends t{constructor(e){super(e),this._model=new l,this._layers=new r,this._asyncChangeSet=new d,this._syncChangeSet=new d,this._layerSyncSet=new Set}initialize(){this._set("renderView",new y(this)),this._frameTask=this.view.resourceController.scheduler.registerTask(c.STAGE,this),this.addHandles(this._frameTask)}destroy(){this.removeAllHandles()}get viewingMode(){return this.view.state.viewingMode}get updating(){return this.running||this.renderView.updating||this._frameTask.updating}get renderer(){return this.renderView?.renderer}add(e){this._model.add(e),h(e)&&this._addLayer(e),this.renderView.requestRender()}remove(e){null==e||this.destroyed||(this._model.remove(e),h(e)&&this._removeLayer(e),this.renderView.requestRender())}addMany(e){null!=e&&(this._model.addMany(e),this.renderView.requestRender())}removeMany(e){null!=e&&(this._model?.removeMany(e),this.renderView?.requestRender())}async load(e,t){null!=e&&(Array.isArray(e)||(e=[e]),await Promise.all(e.filter((e=>null==e.glTexture)).map((e=>this.schedule((()=>this._model.has(e)?e.load(this.renderView.renderingContext):null))),t)))}loadImmediate(e){return e.load(this.renderView.renderingContext)}forEachOfType(e,t){this._model.forEachOfType(e,t)}handleEvent(e,t){this.destroyed||(this._model.dirtySet[e](t),this.renderView.requestRender())}get running(){return this._model.dirtySet.dirty||!this._asyncChangeSet.empty}runTask(e){this._frameTask.processQueue(e),this._commit(e)}_commit(e){const t=this._model.dirtySet;this._asyncChangeSet.empty||e.done||(this.renderer.modify(this._asyncChangeSet,e),this.renderView.requestRender(),e.madeProgress()),this._layers.forAll((r=>{if(e.done)return;const s=this._layerSyncSet.has(r.id)||r.updatePolicy===a.SYNC,i=s?this._syncChangeSet:this._asyncChangeSet;t.commitLayer(r.id,i),this._layerSyncSet.delete(r.id),i.empty||(this.renderer.modify(i,s?m:e),this.renderView.requestRender(),e.madeProgress())})),this._syncChangeSet.empty||(this.renderer.modify(this._syncChangeSet,m),this.renderView.requestRender(),e.madeProgress()),this._layers.forAll((r=>{e.done||this._layerSyncSet.has(r.id)||r.updatePolicy!==a.ASYNC||(t.commitLayer(r.id,this._asyncChangeSet),this._asyncChangeSet.empty||(this.renderer.modify(this._asyncChangeSet,e),this.renderView.requestRender(),e.madeProgress()))})),this._layerSyncSet.clear(),this.notifyChange("running")}commitSyncLayers(){const e=this._model.dirtySet;this._layers.forAll((t=>{(this._layerSyncSet.has(t.id)||t.updatePolicy===a.SYNC)&&(e.commitLayer(t.id,this._syncChangeSet),this._layerSyncSet.delete(t.id))}));for(const t of this._layerSyncSet)e.commitLayer(t,this._syncChangeSet);this._layerSyncSet.clear(),this._syncChangeSet.empty||(this.renderer.modify(this._syncChangeSet,m),this.renderView.requestRender())}_commitLayer(e){this._model.dirtySet.commitLayer(e.id,this._syncChangeSet),this._layerSyncSet.delete(e.id),this._syncChangeSet.empty||(this.renderer.modify(this._syncChangeSet,m),this.renderView.requestRender())}schedule(e,t){return this._frameTask.schedule(e,t)}reschedule(e,t){return this._frameTask.reschedule(e,t)}syncLayer(e){this._layerSyncSet.add(e),this.renderView.requestRender()}getObject(e){return this._model.getObject(e)}get layers(){return this._layers}_addLayer(e){this._layers.includes(e)||this._layers.push(e)}_removeLayer(e){this._commitLayer(e),null!=this._layers.removeUnordered(e)&&(this._model.dirtySet.getResidentRenderGeometries(e.id,this._syncChangeSet.removes),this.renderer.modify(this._syncChangeSet,m))}addRenderPlugin(e,t,r){const i=this.renderer.renderPlugins.add(e,t,r),n=()=>{o(t)&&this.view.sceneIntersectionHelper.addIntersectionHandler(t)};if(s(i))return i.then(n);n()}removeRenderPlugin(e){this.destroyed||(o(e)&&this.view.sceneIntersectionHelper.removeIntersectionHandler(e),this.renderer.renderPlugins.remove(e))}get performanceInfo(){return this._model.getStats()}get test(){const e=this;return{getCount:t=>e._model.test.content.filter((e=>e.type===t)).length,model:e._model}}};u.DebugSettings={endFrameContentValidation:!1},e([i({constructOnly:!0})],u.prototype,"view",void 0),e([i({constructOnly:!0})],u.prototype,"options",void 0),e([i({readOnly:!0})],u.prototype,"viewingMode",null),e([i({constructOnly:!0})],u.prototype,"container",void 0),e([i({readOnly:!0})],u.prototype,"updating",null),e([i({constructOnly:!0})],u.prototype,"_model",void 0),e([i({autoDestroy:!0})],u.prototype,"renderView",void 0),e([i({readOnly:!0})],u.prototype,"renderer",null),e([i({readOnly:!0})],u.prototype,"running",null),u=e([n("esri.views.3d.webgl-engine.Stage")],u);export{u as Stage};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.28/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{releaseMaybe as e}from"../../../../core/maybe.js";import{MemCachePool as t}from"../../../../core/MemCachePool.js";import{PixelFormat as r,SizedPixelFormat as a,TextureWrapMode as
|
|
5
|
+
import{releaseMaybe as e}from"../../../../core/maybe.js";import{MemCachePool as t}from"../../../../core/MemCachePool.js";import{PixelFormat as r,SizedPixelFormat as a,TextureWrapMode as o,PixelType as s,TextureSamplingMode as h,RenderbufferFormat as i}from"../../../webgl/enums.js";import{FramebufferObject as c}from"../../../webgl/FramebufferObject.js";import{Renderbuffer as n}from"../../../webgl/Renderbuffer.js";import{RenderbufferDescriptor as p}from"../../../webgl/RenderbufferDescriptor.js";import{Texture as _}from"../../../webgl/Texture.js";import{TextureDescriptor as d}from"../../../webgl/TextureDescriptor.js";class l{constructor(e){this.rctx=e,this._peakMemoryUsage=0,this._allocatedMemory=new Set,this._cache=new t(e.newCache,"FBOCache"),this._depthCache=new t(e.newCache,"DepthTextureCache")}destroy(){this._cache.destroy(),this._depthCache.destroy()}resetPeakMemoryUsage(){this._peakMemoryUsage=0,this._allocatedMemory.clear()}get peakMemoryUsage(){return this._peakMemoryUsage}acquire(e,t,r){const a=T(e,t,r),o=this._cache.pop(a);if(o)return this.rctx.unbindTexture(o.fbo.colorTexture),this._trackHandle(o);const s=new m(new c(this.rctx,{...A[e],width:t,height:r}),(()=>{this._allocatedMemory.delete(s),s.releaseDepth(),this._cache.put(a,s)}),(e=>(s.releaseDepth(),s.depth=this._acquireDepth(e,s.fbo.width,s.fbo.height),s.fbo.attachDepthStencil(s.depth.attachment),s)));return this.rctx.unbindTexture(s.fbo.colorTexture),this._trackHandle(s)}acquireDepth(e,t,r){return this._acquireDepth(e,t,r)}_acquireDepth(e,t,r){const a=T(e,t,r),o=this._depthCache.pop(a);if(o)return this._trackHandle(o);const s=e===y.DEPTH_STENCIL_TEXTURE?new u(new _(this.rctx,{...b[e],width:t,height:r}),(()=>{this._allocatedMemory.delete(s),this._depthCache.put(a,s)})):new u(new n(this.rctx,{...b[e],width:t,height:r}),(()=>{this._allocatedMemory.delete(s),this._depthCache.put(a,s)}));return this._trackHandle(s)}_trackHandle(e){return this._allocatedMemory.add(e),this._peakMemoryUsage=Math.max(this._peakMemoryUsage,Array.from(this._allocatedMemory.values()).reduce(((e,t)=>e+("colorTexture"in t?t.colorTexture?.gpuMemoryUsage??0:t.memoryUsage)),0)),e}}class m{constructor(e,t,r){this.fbo=e,this.release=t,this.acquireDepth=r}dispose(){this.fbo.dispose()}releaseDepth(){this.fbo.detachDepthStencilTexture(),this.fbo.detachDepthStencilBuffer(),this.depth=e(this.depth)}detachDepth(){const e=this.depth;return this.depth=void 0,this.fbo.detachDepthStencilTexture(),this.fbo.detachDepthStencilBuffer(),e}attachDepth(e){return this.releaseDepth(),e&&(this.fbo.attachDepthStencil(e.attachment),this.depth=e),this}get colorTexture(){return this.fbo?.colorTexture}get memoryUsage(){return this.fbo.gpuMemoryUsage}}class u{constructor(e,t){this.attachment=e,this.release=t}dispose(){this.attachment.dispose()}get memoryUsage(){return this.attachment.gpuMemoryUsage}}function T(e,t,r){return`${e}x${t}x${r}`}var E;!function(e){e[e.RG=0]="RG",e[e.RGBA4=1]="RGBA4",e[e.RGBA=2]="RGBA",e[e.RGBA_MIPMAP=3]="RGBA_MIPMAP",e[e.R16F=4]="R16F",e[e.RGBA16F=5]="RGBA16F"}(E||(E={}));const M=new d;M.pixelFormat=r.RG,M.internalFormat=a.RG8,M.wrapMode=o.CLAMP_TO_EDGE;const R=new d;R.internalFormat=a.RGBA4,R.dataType=s.UNSIGNED_SHORT_4_4_4_4,R.wrapMode=o.CLAMP_TO_EDGE;const f=new d;f.wrapMode=o.CLAMP_TO_EDGE;const D=new d;D.wrapMode=o.CLAMP_TO_EDGE,D.samplingMode=h.LINEAR_MIPMAP_LINEAR,D.hasMipmap=!0,D.maxAnisotropy=8;const g=new d;g.pixelFormat=r.RED,g.dataType=s.HALF_FLOAT,g.internalFormat=a.R16F,g.samplingMode=h.NEAREST;const w=new d;w.dataType=s.HALF_FLOAT,w.internalFormat=a.RGBA16F,w.samplingMode=h.NEAREST;const A={[E.RG]:M,[E.RGBA4]:R,[E.RGBA]:f,[E.RGBA_MIPMAP]:D,[E.R16F]:g,[E.RGBA16F]:w};var y;!function(e){e[e.DEPTH_STENCIL_TEXTURE=0]="DEPTH_STENCIL_TEXTURE",e[e.DEPTH16_BUFFER=1]="DEPTH16_BUFFER"}(y||(y={}));const x=new d;x.pixelFormat=r.DEPTH_STENCIL,x.dataType=s.UNSIGNED_INT_24_8,x.samplingMode=h.NEAREST,x.wrapMode=o.CLAMP_TO_EDGE;const b={[y.DEPTH_STENCIL_TEXTURE]:x,[y.DEPTH16_BUFFER]:new p(i.DEPTH_COMPONENT16,4)};export{E as ColorFormat,y as DepthFormat,l as FBOCache};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.28/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{AlignPixel as e}from"./AlignPixel.glsl.js";import{ReadLinearDepth as
|
|
5
|
+
import{AlignPixel as e}from"./AlignPixel.glsl.js";import{ReadLinearDepth as r}from"../output/ReadLinearDepth.glsl.js";import{multipassGeometryTest as t}from"../shading/MultipassGeometryTest.glsl.js";import{Float2PassUniform as o}from"../../shaderModules/Float2PassUniform.js";import{glsl as a}from"../../shaderModules/interfaces.js";import{Texture2DPassUniform as i}from"../../shaderModules/Texture2DPassUniform.js";function n(n,s){const{vertex:p,fragment:l}=n;p.include(e),s.multipassEnabled&&(p.include(t),n.varyings.add("depth","float")),p.code.add(a`
|
|
6
6
|
void main(void) {
|
|
7
7
|
vec4 posProjCenter;
|
|
8
8
|
if (dot(position, position) > 0.0) {
|
|
@@ -12,7 +12,7 @@ import{AlignPixel as e}from"./AlignPixel.glsl.js";import{ReadLinearDepth as t}fr
|
|
|
12
12
|
vec4 posProj = projectPositionHUD(projectAux);
|
|
13
13
|
posProjCenter = alignToPixelCenter(posProj, viewport.zw);
|
|
14
14
|
|
|
15
|
-
${s.multipassEnabled?
|
|
15
|
+
${s.multipassEnabled?a`
|
|
16
16
|
// Don't draw vertices behind geometry
|
|
17
17
|
if(geometryDepthTest(.5 + .5 * posProjCenter.xy / posProjCenter.w, projectAux.posView.z)){
|
|
18
18
|
posProjCenter = vec4(1e038, 1e038, 1e038, 1.0);
|
|
@@ -33,17 +33,16 @@ import{AlignPixel as e}from"./AlignPixel.glsl.js";import{ReadLinearDepth as t}fr
|
|
|
33
33
|
gl_Position = posProjCenter;
|
|
34
34
|
gl_PointSize = 1.0;
|
|
35
35
|
}
|
|
36
|
-
`),s.multipassEnabled&&(l.include(
|
|
36
|
+
`),s.multipassEnabled&&(l.include(r),l.uniforms.add(new i("terrainDepthTexture",((e,r)=>r.multipassTerrain.linearDepth?.colorTexture)),new o("nearFar",((e,r)=>r.camera.nearFar)))),l.code.add(a`
|
|
37
37
|
void main() {
|
|
38
38
|
fragColor = vec4(1);
|
|
39
|
-
${s.multipassEnabled?
|
|
39
|
+
${s.multipassEnabled?a`
|
|
40
40
|
// Read the rgba data from the texture linear depth
|
|
41
41
|
vec4 terrainDepthData = texelFetch(terrainDepthTexture, ivec2(gl_FragCoord.xy), 0);
|
|
42
|
-
|
|
43
42
|
float terrainDepth = linearDepthFromRGBA(terrainDepthData, nearFar);
|
|
44
43
|
|
|
45
|
-
// If HUD vertex is behind terrain and the terrain depth is not the
|
|
46
|
-
//
|
|
44
|
+
// If HUD vertex is behind terrain and the terrain depth is not the clear value (e.g. we are not looking
|
|
45
|
+
// at the sky), mark the HUD vertex as occluded by transparent terrain
|
|
47
46
|
if(depth < terrainDepth && terrainDepthData != vec4(0,0,0,1)){
|
|
48
47
|
fragColor.g = 0.5;
|
|
49
48
|
}`:""}
|