@arcgis/core 4.24.0-next.20220511 → 4.24.0-next.20220512
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/assets/components/assets/icon/compactness16.json +1 -0
- package/assets/components/assets/icon/compactness24.json +1 -0
- package/assets/components/assets/icon/compactness32.json +1 -0
- package/assets/components/assets/icon/configure16.json +1 -0
- package/assets/components/assets/icon/configure24.json +1 -0
- package/assets/components/assets/icon/configure32.json +1 -0
- package/assets/components/assets/icon/debugScript16.json +1 -0
- package/assets/components/assets/icon/debugScript24.json +1 -0
- package/assets/components/assets/icon/debugScript32.json +1 -0
- package/assets/components/assets/icon/dissolveFeatures16.json +1 -0
- package/assets/components/assets/icon/dissolveFeatures24.json +1 -0
- package/assets/components/assets/icon/dissolveFeatures32.json +1 -0
- package/assets/components/assets/icon/distanceType16.json +1 -0
- package/assets/components/assets/icon/distanceType24.json +1 -0
- package/assets/components/assets/icon/distanceType32.json +1 -0
- package/assets/components/assets/icon/gridDiamond16.json +1 -0
- package/assets/components/assets/icon/gridDiamond24.json +1 -0
- package/assets/components/assets/icon/gridDiamond32.json +1 -0
- package/assets/components/assets/icon/gridHexagon16.json +1 -0
- package/assets/components/assets/icon/gridHexagon24.json +1 -0
- package/assets/components/assets/icon/gridHexagon32.json +1 -0
- package/assets/components/assets/icon/gridTriangle16.json +1 -0
- package/assets/components/assets/icon/gridTriangle24.json +1 -0
- package/assets/components/assets/icon/gridTriangle32.json +1 -0
- package/assets/components/assets/icon/insets16.json +1 -0
- package/assets/components/assets/icon/insets24.json +1 -0
- package/assets/components/assets/icon/insets32.json +1 -0
- package/assets/components/assets/icon/maximumTerritoryDistance16.json +1 -0
- package/assets/components/assets/icon/maximumTerritoryDistance24.json +1 -0
- package/assets/components/assets/icon/maximumTerritoryDistance32.json +1 -0
- package/assets/components/assets/icon/minDistanceBetweenCenters16.json +1 -0
- package/assets/components/assets/icon/minDistanceBetweenCenters24.json +1 -0
- package/assets/components/assets/icon/minDistanceBetweenCenters32.json +1 -0
- package/assets/components/assets/icon/numberOfTerritories16.json +1 -0
- package/assets/components/assets/icon/numberOfTerritories24.json +1 -0
- package/assets/components/assets/icon/numberOfTerritories32.json +1 -0
- package/assets/components/assets/icon/overlapFeatures16.json +1 -0
- package/assets/components/assets/icon/overlapFeatures24.json +1 -0
- package/assets/components/assets/icon/overlapFeatures32.json +1 -0
- package/assets/components/assets/icon/profileVariables16.json +1 -0
- package/assets/components/assets/icon/profileVariables24.json +1 -0
- package/assets/components/assets/icon/profileVariables32.json +1 -0
- package/assets/components/assets/icon/rasterAnalysis16.json +1 -0
- package/assets/components/assets/icon/rasterAnalysis24.json +1 -0
- package/assets/components/assets/icon/rasterAnalysis32.json +1 -0
- package/assets/components/assets/icon/recurrence16.json +1 -0
- package/assets/components/assets/icon/recurrence24.json +1 -0
- package/assets/components/assets/icon/recurrence32.json +1 -0
- package/assets/components/assets/icon/splitFeatures16.json +1 -0
- package/assets/components/assets/icon/splitFeatures24.json +1 -0
- package/assets/components/assets/icon/splitFeatures32.json +1 -0
- package/assets/components/assets/icon/territoryBufferDistance16.json +1 -0
- package/assets/components/assets/icon/territoryBufferDistance24.json +1 -0
- package/assets/components/assets/icon/territoryBufferDistance32.json +1 -0
- package/assets/components/assets/icon/testData16.json +1 -0
- package/assets/components/assets/icon/testData24.json +1 -0
- package/assets/components/assets/icon/testData32.json +1 -0
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/07eda3e958d29f86b37e.js +1 -0
- package/assets/esri/core/workers/chunks/0ecaa28b8bff1d779d66.js +1 -0
- package/assets/esri/core/workers/chunks/{adae54f116f311d72d97.js → 1aba8c73c62a64e0658c.js} +1 -1
- package/assets/esri/core/workers/chunks/1d109cd048170e2d529a.js +1 -0
- package/assets/esri/core/workers/chunks/366e5c1abd1ab6d3e548.js +1 -0
- package/assets/esri/core/workers/chunks/3e94e35f44aadbb332ff.js +1 -0
- package/assets/esri/core/workers/chunks/46411f32b29a0e783105.js +1 -0
- package/assets/esri/core/workers/chunks/4d1c87e3e0a02efcc082.js +1 -0
- package/assets/esri/core/workers/chunks/{b089058b64db3912478f.js → 5e46e60fab93ad034d3a.js} +1 -1
- package/assets/esri/core/workers/chunks/6281b15009712a5dee3c.js +1 -0
- package/assets/esri/core/workers/chunks/66f627d68dbb0fdb725f.js +1 -0
- package/assets/esri/core/workers/chunks/672da24bbf86718bf48d.js +1 -0
- package/assets/esri/core/workers/chunks/733625d85602127d62cd.js +1 -0
- package/assets/esri/core/workers/chunks/{c51c9b5da855f84b9a48.js → 7391422fc51acb96a25d.js} +1 -1
- package/assets/esri/core/workers/chunks/{f435dc615fdc8917f6ca.js → 7cf3cff7b28ff007dbad.js} +1 -1
- package/assets/esri/core/workers/chunks/7ea06c86adfc827fda08.js +1 -0
- package/assets/esri/core/workers/chunks/{a054a52712a118c6d505.js → 82bc24bdc9c6ebaf58c0.js} +1 -1
- package/assets/esri/core/workers/chunks/8965ab74e03506e3475e.js +1 -0
- package/assets/esri/core/workers/chunks/{5405f478af3563580926.js → 8b497d9c37a8f577a467.js} +1 -1
- package/assets/esri/core/workers/chunks/919d0d8b1c2176760973.js +1 -0
- package/assets/esri/core/workers/chunks/ab2a0480dc2b608deda3.js +1 -0
- package/assets/esri/core/workers/chunks/ab97a35f7a7d5cf1da19.js +2 -0
- package/assets/esri/core/workers/chunks/{dcd0653191cd4a1ccaae.js.LICENSE.txt → ab97a35f7a7d5cf1da19.js.LICENSE.txt} +1 -1
- package/assets/esri/core/workers/chunks/ae554c88e862a5761f2e.js +1 -0
- package/assets/esri/core/workers/chunks/ae5ce55cd1a32525f101.js +1 -0
- package/assets/esri/core/workers/chunks/b597c04a4abb98e29d1c.js +1 -0
- package/assets/esri/core/workers/chunks/{287c484fd40eee643f3a.js → b78c3e9d31c4a562cdf0.js} +1 -1
- package/assets/esri/core/workers/chunks/be4bf1e4cbe2a593f8b3.js +1 -0
- package/assets/esri/core/workers/chunks/{b7572b0921b23aef8b9d.js → c40d9caf5189be2c698e.js} +1 -1
- package/assets/esri/core/workers/chunks/{b28539c5a6bedb71b038.js → d63f736b3560c577a8a4.js} +1 -1
- package/assets/esri/core/workers/chunks/d869dabe937d3b60504e.js +1 -0
- package/assets/esri/core/workers/chunks/dd6c9a114ad38cf622ba.js +1 -0
- package/assets/esri/core/workers/chunks/e6b0f74226b9394bfa7a.js +1 -0
- package/assets/esri/themes/base/widgets/_Editor.scss +3 -2
- 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/views/interactive/tooltip/t9n/Tooltip.json +1 -0
- package/assets/esri/views/interactive/tooltip/t9n/Tooltip_en.json +1 -0
- package/chunks/EdgeShader.glsl.js +3 -4
- package/interfaces.d.ts +463 -30
- package/layers/FeatureLayer.js +1 -1
- package/layers/GeoJSONLayer.js +1 -1
- package/layers/OGCFeatureLayer.js +1 -1
- package/layers/RouteLayer.js +1 -1
- package/layers/SceneLayer.js +1 -1
- package/layers/StreamLayer.js +1 -1
- package/layers/SubtypeGroupLayer.js +1 -1
- package/layers/WFSLayer.js +1 -1
- package/layers/buildingSublayers/BuildingComponentSublayer.js +1 -1
- package/layers/mixins/ArcGISImageService.js +1 -1
- package/layers/save/featureLayerUtils.js +1 -1
- package/layers/support/AggregateField.d.ts +4 -0
- package/layers/support/AggregateField.js +1 -1
- package/layers/support/FeatureReductionBinning.d.ts +4 -0
- package/layers/support/FeatureReductionBinning.js +1 -1
- package/layers/support/OutStatistic.d.ts +4 -0
- package/layers/support/Sublayer.js +1 -1
- package/layers/support/SubtypeSublayer.js +1 -1
- package/layers/support/rasterDatasets/ImageServerRaster.js +1 -1
- package/layers/support/rasterDatasets/wcsCoverageParser.js +1 -1
- package/layers/support/rasterFormats/TiffDecoder.js +1 -1
- package/package.json +3 -3
- package/portal/support/portalItemUtils.js +1 -1
- package/renderers/PieChartRenderer.d.ts +4 -0
- package/renderers/PieChartRenderer.js +5 -0
- package/renderers/Renderer.js +1 -1
- package/renderers/support/AuthoringInfo.js +1 -1
- package/renderers/support/RasterSymbolizer.js +1 -1
- package/renderers/support/clickToleranceUtils.js +1 -1
- package/renderers/support/rasterRendererHelper.js +1 -1
- package/renderers/support/types.js +1 -1
- package/renderers/support/utils.js +1 -1
- package/renderers.js +1 -1
- package/request.js +1 -1
- package/rest/imageService/fetchRasterInfo.js +5 -0
- package/rest/imageService/getCatalogItemRasterInfo.js +5 -0
- package/rest/print.js +1 -1
- package/smartMapping/renderers/color.js +1 -1
- package/smartMapping/renderers/dotDensity.js +1 -1
- package/smartMapping/renderers/heatmap.js +1 -1
- package/smartMapping/renderers/location.js +1 -1
- package/smartMapping/renderers/size.js +1 -1
- package/smartMapping/renderers/type.js +1 -1
- package/support/arcadeUtils.js +1 -1
- package/support/revision.js +1 -1
- package/symbols/cim/CIMSymbolHelper.js +1 -1
- package/symbols/cim/CurveHelper.js +1 -1
- package/symbols/cim/ExpandedCIM.js +1 -1
- package/symbols/cim/cimAnalyzer.js +1 -1
- package/symbols/cim/placements/PlacementInsidePolygon.js +1 -1
- package/views/2d/engine/brushes.js +1 -1
- package/views/2d/engine/vectorTiles/GlyphSource.js +1 -1
- package/views/2d/engine/vectorTiles/style/Filter.js +1 -1
- package/views/2d/engine/vectorTiles/style/StyleRepository.js +1 -1
- package/views/2d/engine/webgl/AttributeStoreView.js +1 -1
- package/views/2d/engine/webgl/Painter.js +1 -1
- package/views/2d/engine/webgl/Utils.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLBrushPieChart.js +5 -0
- package/views/2d/engine/webgl/brushes/WGLGeometryBrush.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLGeometryBrushFill.js +1 -1
- package/views/2d/engine/webgl/brushes/WGLGeometryBrushMarker.js +1 -1
- package/views/2d/engine/webgl/color.js +1 -1
- package/views/2d/engine/webgl/definitions.js +1 -1
- package/views/2d/engine/webgl/enums.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLBaseFillTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLBaseLineTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLDynamicFillTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLFillTemplate.js +1 -1
- package/views/2d/engine/webgl/mesh/templates/WGLMarkerTemplate.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/engine/webgl/techniques/dotDensity/TechniqueDotDensity.js +1 -1
- package/views/2d/engine/webgl/techniques/pieChart/TechniquePieChart.js +5 -0
- package/views/2d/engine/webgl/techniques/utils.js +1 -1
- package/views/2d/engine/webgl/util/Matcher.js +1 -1
- package/views/2d/layers/features/schemaUtils.js +1 -1
- package/views/2d/layers/features/support/AttributeStore.js +1 -1
- package/views/2d/layers/features/tileRenderers/SymbolTileRenderer.js +1 -1
- package/views/2d/layers/features/tileRenderers/support/WGLFeatureView.js +1 -1
- package/views/2d/layers/imagery/ImageryTileView2D.js +1 -1
- package/views/3d/analysis/Dimensioning/DimensioningTool.js +1 -1
- package/views/3d/analysis/Dimensioning/LengthDimensionVisualization.js +1 -1
- package/views/3d/environment/SnowyWeather.d.ts +4 -0
- package/views/3d/layers/I3SMeshView3D.js +1 -1
- package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
- package/views/3d/terrain/TerrainRenderer.js +1 -1
- package/views/3d/terrain/TerrainSurface.js +1 -1
- package/views/3d/terrain/TileRenderer.js +1 -1
- package/views/3d/webgl-engine/collections/Component/ComponentObjectCollection.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/shader/ComponentData.glsl.js +5 -5
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeRenderer.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeShaderTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/lib/edgeRendering/EdgeView.js +1 -1
- package/views/3d/webgl-engine/shaders/sources/edgeRenderer/EdgeUtil.glsl.js +37 -31
- package/views/draw/DrawOperation.js +1 -1
- package/views/interactive/snapping/FeatureSnappingEngine.js +1 -1
- package/views/interactive/snapping/SceneSnappingEngine.js +5 -0
- package/views/interactive/snapping/SnappingManager.js +1 -1
- package/views/interactive/snapping/snappingFactory.js +5 -0
- package/views/interactive/tooltip/content/TooltipContent.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentDrawPoint.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentDrawPolygon.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentDrawPolyline.js +1 -1
- package/views/interactive/tooltip/content/TooltipContentTranslateVertex.js +1 -1
- package/widgets/Editor/workflowUtils.js +1 -1
- package/widgets/Editor.js +1 -1
- package/widgets/Popup/PopupViewModel.js +1 -1
- package/widgets/Popup/actionUtils.js +1 -1
- package/widgets/Sketch/SketchViewModel.js +1 -1
- package/assets/esri/core/workers/chunks/0564f1cfa3d17ff1aad3.js +0 -1
- package/assets/esri/core/workers/chunks/0806d5d706a864542bfb.js +0 -1
- package/assets/esri/core/workers/chunks/52478ee2d2a1354b6900.js +0 -1
- package/assets/esri/core/workers/chunks/5759af97f96f24c40105.js +0 -1
- package/assets/esri/core/workers/chunks/7bc828fbdd54c0b28aac.js +0 -1
- package/assets/esri/core/workers/chunks/875f26ee040f3d75c0db.js +0 -1
- package/assets/esri/core/workers/chunks/88384e7cafbfd2348598.js +0 -1
- package/assets/esri/core/workers/chunks/89acd5f888d6b8df4aad.js +0 -1
- package/assets/esri/core/workers/chunks/9d7533aaeac3b8d145c4.js +0 -1
- package/assets/esri/core/workers/chunks/a3bb600bfcb0282622f1.js +0 -1
- package/assets/esri/core/workers/chunks/b50ae3dc7e43ff452568.js +0 -1
- package/assets/esri/core/workers/chunks/b5b7bcbc19b3430903ee.js +0 -1
- package/assets/esri/core/workers/chunks/b758f3c419edc2306784.js +0 -1
- package/assets/esri/core/workers/chunks/cf47b605c31063e88357.js +0 -1
- package/assets/esri/core/workers/chunks/cfbb332d144e65a4a55d.js +0 -1
- package/assets/esri/core/workers/chunks/db937849b2c1af87b481.js +0 -1
- package/assets/esri/core/workers/chunks/dc3ed59f450283d97a19.js +0 -1
- package/assets/esri/core/workers/chunks/dcd0653191cd4a1ccaae.js +0 -2
- package/assets/esri/core/workers/chunks/dfb6a28039e5d5ce6fd4.js +0 -1
- package/assets/esri/core/workers/chunks/e4fdd1eaf987977d0a51.js +0 -1
- package/assets/esri/core/workers/chunks/f7e0bb11ba3677069c94.js +0 -1
- package/assets/esri/core/workers/chunks/f7f3dde4c8f9c687cc1e.js +0 -1
- package/assets/esri/core/workers/chunks/fc6beaf9466ea3898549.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.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{nextHighestPowerOfTwo as e}from"../../../core/mathUtils.js";import{disposeMaybe as t,releaseMaybe as r,isSome as s,isNone as a}from"../../../core/maybe.js";import{a as o,c as i}from"../../../chunks/vec2.js";import{Z as n}from"../../../chunks/vec2f64.js";import{f as u}from"../../../chunks/vec3f64.js";import{f as c}from"../../../chunks/vec4f64.js";import{isBaseLayer as l}from"../../../layers/support/layerUtils.js";import{ImageWithType as p}from"../support/StreamDataLoader.js";import{BlendLayersPassParameters as h}from"./BlendLayersTechnique.js";import{TextureUpdate as _}from"./interfaces.js";import{LayerClass as m}from"./LayerClass.js";import{isBlendableLayerView as d,isVectorTileLayerView as T,isVectorTileRenderInfo as f,isImageryTileRenderInfo as x,isRasterTileRenderInfo as y,isTextureTileRenderInfo as g}from"./terrainUtils.js";import{ActivationTime as b}from"./TextureFader.js";import{TextureReference as I}from"./TextureReference.js";import{TileCompositor as P}from"./TileCompositor.js";import k from"./TileTexture.js";import{TileUpdate as E}from"./TileUpdate.js";import{LayerBlendMode as w,AlphaBlendMode as D,blendModeFromString as A}from"../webgl-engine/core/shaderLibrary/output/BlendOptions.js";import{createColorTexture as R,createEmptyTexture as L}from"../webgl-engine/lib/glUtil3D.js";import{TextureSamplingMode as M,TextureType as U,PixelFormat as j,PixelType as N,TextureWrapMode as O}from"../../webgl/enums.js";import{Texture as S}from"../../webgl/Texture.js";class F{constructor(e,t,r){this._rctx=e,this.tileSize=t,this._techniqueRepository=r,this._passParameters=new h,this._backgroundIsGrid=!1,this._backgroundTexture=null,this._backgroundColor=null,this._blackTex=null,this._numTexturedLayer=0,this._maxAnisotropy=this._rctx.parameters.maxMaxAnisotropy,this._composition=new P(this._rctx,this._techniqueRepository),this._blackTex=new k(R(this._rctx,[0,0,0,1]))}dispose(){this._composition=t(this._composition),this._backgroundTexture=r(this._backgroundTexture),this._blackTex=r(this._blackTex)}get backgroundIsGrid(){return this._backgroundIsGrid}get backgroundColor(){return this._backgroundColor}updateTileTexture(e,t){if(!e.renderData)return;const r=e.surface,a=r.baseOpacity;this._numTexturedLayer=0;let o=0,i=this.tileSize,n=!1;const u=r.view.state.pixelRatio;let c=!1;const p=e.layerInfo[m.MAP];let h=p.length,_=0;for(;_<p.length;_++){const t=r.layerViewByIndex(_,m.MAP),s=t.fullOpacity;if(B[_]=s,l(t.layer)&&h>=p.length&&(h=_),0===s){p[_].pendingUpdates&=~(E.TEXTURE_NOFADING&E.TEXTURE_FADING);continue}++o;const f=X(e,_
|
|
5
|
+
import{nextHighestPowerOfTwo as e}from"../../../core/mathUtils.js";import{disposeMaybe as t,releaseMaybe as r,isSome as s,isNone as a}from"../../../core/maybe.js";import{a as o,c as i}from"../../../chunks/vec2.js";import{Z as n}from"../../../chunks/vec2f64.js";import{f as u}from"../../../chunks/vec3f64.js";import{f as c}from"../../../chunks/vec4f64.js";import{isBaseLayer as l}from"../../../layers/support/layerUtils.js";import{ImageWithType as p}from"../support/StreamDataLoader.js";import{BlendLayersPassParameters as h}from"./BlendLayersTechnique.js";import{TextureUpdate as _}from"./interfaces.js";import{LayerClass as m}from"./LayerClass.js";import{isBlendableLayerView as d,isVectorTileLayerView as T,isVectorTileRenderInfo as f,isImageryTileRenderInfo as x,isRasterTileRenderInfo as y,isTextureTileRenderInfo as g}from"./terrainUtils.js";import{ActivationTime as b}from"./TextureFader.js";import{TextureReference as I}from"./TextureReference.js";import{TileCompositor as P}from"./TileCompositor.js";import k from"./TileTexture.js";import{TileUpdate as E}from"./TileUpdate.js";import{LayerBlendMode as w,AlphaBlendMode as D,blendModeFromString as A}from"../webgl-engine/core/shaderLibrary/output/BlendOptions.js";import{createColorTexture as R,createEmptyTexture as L}from"../webgl-engine/lib/glUtil3D.js";import{TextureSamplingMode as M,TextureType as U,PixelFormat as j,PixelType as N,TextureWrapMode as O}from"../../webgl/enums.js";import{Texture as S}from"../../webgl/Texture.js";class F{constructor(e,t,r){this._rctx=e,this.tileSize=t,this._techniqueRepository=r,this._passParameters=new h,this._backgroundIsGrid=!1,this._backgroundTexture=null,this._backgroundColor=null,this._blackTex=null,this._numTexturedLayer=0,this._maxAnisotropy=this._rctx.parameters.maxMaxAnisotropy,this._composition=new P(this._rctx,this._techniqueRepository),this._blackTex=new k(R(this._rctx,[0,0,0,1]))}dispose(){this._composition=t(this._composition),this._backgroundTexture=r(this._backgroundTexture),this._blackTex=r(this._blackTex)}get backgroundIsGrid(){return this._backgroundIsGrid}get backgroundColor(){return this._backgroundColor}updateTileTexture(e,t){if(!e.renderData)return;const r=e.surface,a=r.baseOpacity;this._numTexturedLayer=0;let o=0,i=this.tileSize,n=!1;const u=r.view.state.pixelRatio;let c=!1;const p=e.layerInfo[m.MAP];let h=p.length,_=0;for(;_<p.length;_++){const t=r.layerViewByIndex(_,m.MAP),s=t.fullOpacity;if(B[_]=s,l(t.layer)&&h>=p.length&&(h=_),0===s){p[_].pendingUpdates&=~(E.TEXTURE_NOFADING&E.TEXTURE_FADING);continue}++o;const f=X(e,_);if(f){if(p[_].pendingUpdates&=~(E.TEXTURE_NOFADING&E.TEXTURE_FADING),d(t)){const e="normal"!==t.layer.blendMode;C[_]=t.layer.blendMode,e&&(c=e,n=!1)}T(t)?i=Math.max(i,this.tileSize*u):1===a&&1===s&&(t.isOpaque||this._dataToTexture(f)&&f.sourceLayerInfo.data.descriptor.isOpaque)&&(n=!0),++this._numTexturedLayer}}this._composition.cleanupFBOPool(u,p.length),i=G(i);const f=i/this.tileSize,x=_-1;if(0===this._numTexturedLayer)return void this._useBackgroundTexture(e,o);if(1===this._numTexturedLayer&&(n||this._backgroundIsGrid||s(this._backgroundColor))&&this._useLayerTexture(e,x,h,B[x]))return;const y=!n||c;this._composeMapLayers(e,t,x,h,B,C,i,f,y)}_useBackgroundTexture(e,t){let r=b.Immediate;(e.surface.view.layerViewManager.updating||t>0)&&(r=b.Delayed),this._backgroundTexture&&a(e.renderData.textureReference)&&(r=b.Immediate),e.renderData.setTextureReference(s(this._backgroundTexture)?new I(this._backgroundTexture,_.FADING,v,e.surface.baseOpacity,1,1,!1):null,r)}_useLayerTexture(e,t,r,s){const a=t<r,o=a?1:e.surface.baseOpacity,i=a?e.surface.baseOpacity:1,n=X(e,t);return!!this._dataToTexture(n)&&(e.renderData.setTextureReference(new I(n.sourceLayerInfo.data,_.FADING,n,o,s,i,!0)),!0)}_composeMapLayers(e,t,r,a,o,i,u,c,l){this._composition.bindPool(0,u),l&&s(this._backgroundTexture)&&(this._passParameters.texture=this._backgroundTexture.texture,this._passParameters.offset=n,this._passParameters.scale=1,this._passParameters.opacity=1,this._passParameters.blendMode=w.Normal,this._composition.drawRasterData(D.OneMinusSourceAlpha,this._passParameters));const p=e.surface.baseOpacity;let h=!1,_=M.LINEAR_MIPMAP_LINEAR,m=!1;for(let s=r;s>=0;s--){const t=X(e,s);t&&(s<a&&p<1&&!h&&(this._passParameters.texture=this._blackTex.texture,this._passParameters.offset=n,this._passParameters.scale=1,this._passParameters.opacity=p,this._passParameters.blendMode=w.Normal,this._composition.drawRasterData(D.SourceAlpha,this._passParameters),h=!0),0!==o[s]&&(f(t)?(this._passParameters.opacity=o[s],m=this._composition.drawVectorData(this._passParameters,t,c,this.tileSize,u,m)):x(t)?(this._composition.drawImageryTileData(t,o[s]),this._hasNearestInterpolation(t)&&(_=M.NEAREST)):this._dataToTexture(t)&&(this._passParameters.texture=t.sourceLayerInfo.data.texture,this._passParameters.offset=t.offset,this._passParameters.scale=t.scale,this._passParameters.opacity=o[s],this._passParameters.blendMode=A[i[s]],this._composition.drawRasterData(D.OneMinusSourceAlpha,this._passParameters))))}const d=e.renderData.ensureTexture(u,(()=>this._buildTexture(u,_))),T=this._rctx,y=T.bindTexture(d.texture,S.TEXTURE_UNIT_FOR_UPDATES),g=d.descriptor;T.gl.copyTexImage2D(U.TEXTURE_2D,0,g.pixelFormat,0,0,g.width,g.height,0),d.generateMipmap(),T.bindTexture(y,S.TEXTURE_UNIT_FOR_UPDATES),this._composition.releasePool();const b=h?1:p;e.renderData.setTextureReference(new I(d,t,v,b,1,1,!1))}_hasNearestInterpolation(e){const t=e.sourceLayerInfo.data;return!!t.source&&"nearest"===t.interpolation}_dataToTexture(e){return y(e)&&this._rasterDataToTexture(e),g(e)}_rasterDataToTexture(e){const t=e.sourceLayerInfo;t.data=this._buildTexture(t.data),e.tile.setMemoryDirty()}setBackground(e,t){r(this._backgroundTexture),this._backgroundIsGrid=t,e instanceof HTMLImageElement?(this._backgroundTexture=this._buildTexture(e),this._backgroundColor=null):(this._backgroundTexture=new k(R(this._rctx,c(e[0]||0,e[1]||0,e[2]||0,1))),this._backgroundColor=u(e[0]||0,e[1]||0,e[2]||0))}_buildTexture(e,t=M.LINEAR_MIPMAP_LINEAR){if(a(e))return null;const r={target:U.TEXTURE_2D,pixelFormat:j.RGBA,dataType:N.UNSIGNED_BYTE,wrapMode:O.CLAMP_TO_EDGE,samplingMode:t,maxAnisotropy:this._maxAnisotropy,flipped:!0,hasMipmap:!0},s=this._rctx;let o;if("number"==typeof e)r.width=r.height=e,o=new k(new S(s,r));else if(e instanceof p)r.isOpaque=e.isOpaque,o=new k(new S(s,r,e.image)),e.release();else try{o=new k(new S(s,r,e))}catch(n){o=new k(L(s)),console.warn("TileRenderer: failed to execute 'texImage2D', cross-origin image may not be loaded.")}const i=s.bindTexture(o.texture,S.TEXTURE_UNIT_FOR_UPDATES);return o.generateMipmap(),s.bindTexture(i,S.TEXTURE_UNIT_FOR_UPDATES),o}get test(){return{backgroundTexture:this._backgroundTexture}}}function G(t){const r=e(t),s=r*r,a=t*t;if(s===a)return t;const o=r/2;return s-a<a-o*o?r:o}function X(e,t){q.layerIndex=t;const r=e.layerInfo[m.MAP][t];if(s(r.data))return o(q.offset,0,0),q.tile=e,q.scale=1,q.sourceLod=e.lij,q.sourceLayerInfo=r,q;const a=r.upsampleInfo;if(s(a)){const e=a.tile.layerInfo[m.MAP][t];return q.tile=a.tile,i(q.offset,a.offset),q.scale=a.scale,q.sourceLod=a.tile.lij,q.sourceLayerInfo=e,q}return null}const B=new Array,C=new Array,q={tile:null,sourceLayerInfo:null,sourceLod:null,offset:[0,0],scale:1,layerIndex:0},v={offset:[0,0],scale:1};export{F as TileRenderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
5
|
+
import e from"../../../../../core/Logger.js";import{isSome as t,isNone as o,applySome as n,unwrap as r}from"../../../../../core/maybe.js";import i from"../../../../../core/PooledArray.js";import{e as s,t as a}from"../../../../../chunks/mat3.js";import{c}from"../../../../../chunks/mat3f32.js";import{d as m,v as l,t as p}from"../../../../../chunks/vec3.js";import{a as f,c as h}from"../../../../../chunks/vec3f64.js";import{c as u}from"../../../../../chunks/vec4f32.js";import{a as b}from"../../../../../chunks/vec32.js";import{c as g}from"../../../../../chunks/vec33.js";import{ColorMixModeEnum as d,encodeSymbolColor as y}from"../../../layers/support/symbolColorUtils.js";import{clone as C,radius as j}from"../../../support/orientedBoundingBox.js";import{glLayout as x}from"../../../support/buffer/glUtil.js";import{newLayout as v}from"../../../support/buffer/InterleavedLayout.js";import w from"./ComponentData.js";import{State as _,ComponentObject as M}from"./ComponentObject.js";import{isVaryingComponentParameters as S}from"./interface.js";import D from"./IntersectionGeometry.js";import{Renderable as A}from"./Renderable.js";import{RenderGeometry as O}from"./RenderGeometry.js";import{RenderSubmitSystem as P}from"./RenderSubmitSystem.js";import{createVertexBufferLayout as I}from"./SourceGeometry.js";import{ComponentParametersVarying as E,ComponentParametersUniform as R,ComponentParameterSummary as k,ComponentMaterial as B}from"./Material/ComponentMaterial.js";import{encodeElevationOffset as U}from"./Material/shader/ComponentData.glsl.js";import{getVisibility as T,updateVisibilityWithCount as V}from"../../lib/ComponentUtils.js";import{assert as G}from"../../lib/Util.js";import{VertexAttribute as L}from"../../lib/VertexAttribute.js";import{EdgeInputBufferLayout as N}from"../../lib/edgeRendering/bufferLayouts.js";import{extractComponentsEdgeLocationsLayout as H}from"../../lib/edgeRendering/EdgeProcessingWorker.js";import{BufferManager as W}from"../../lib/TextureBackedBuffer/BufferManager.js";import{BufferObject as q}from"../../../../webgl/BufferObject.js";import{Usage as z,PrimitiveType as X}from"../../../../webgl/enums.js";import{VertexArrayObject as Y}from"../../../../webgl/VertexArrayObject.js";const F=e.getLogger("esri.views.3d.webgl-engine.collections.Component.ComponentObjectCollection");class J{constructor(e){this._renderManager=e,this._objects=[new i,new i],this._renderSubmit=new P(this),this._renderManager.register(this._renderSubmit),this._componentBufferManager=new W(e.rctx,2)}dispose(){G(0===this._objects[_.Hidden].length&&0===this._objects[_.Visible].length,"ObjectCollection should be empty upon disposal"),this._componentBufferManager.destroy()}createObject(e){const t=new M;return t.toMapSpace=e.toMapSpace,t.transform=e.transform,t.obb=C(e.obb),t.components=new w(this._componentBufferManager,e.geometry.componentOffsets),t.renderable=this._createRenderable(e,t.components),t.intersectionGeometry=new D(e.geometry.positionData,t.components),this._objects[t.visible].push(t),t}destroyObject(e){const t=e;this._objects[t.visible].removeUnordered(t),t.dispose(),this._notifyDirty()}setObjectVisibility(e,t){const o=e;t!==o.visible&&(this._objects[o.visible].removeUnordered(o),this._objects[t].push(o),o.visible=t,this._notifyDirty())}preSubmit(e){const t=e.camera.eye;this.visibleObjects.forAll((e=>e.renderable.meta.cameraDepthSquared=m(t,e.obb.center)))}getMaterial(e){return e.renderable.material}updateMaterial(e,t){const o=e.renderable.material;t(o),o.dirty&&this._notifyDirty()}setAllComponentVisibilities(e,t){const o=e;o.components.visibility.reset(t),o.components.visibilityDirty(),this._notifyDirty()}forEachVisibleComponent(e,t){return e.components.visibility.forEachComponent(t)}getComponentCount(e){const t=e,o=t.components.visibility.componentCount();return{visible:o,invisible:t.components.count-o}}setComponentData(e,t){const o=e,n=o.renderable.material;if(S(t)){const e=o.components,r=e.materialDataBuffer,i=e.materialDataIndices,s={castShadows:!0,pickable:!0,externalColor:u(),externalColorMixMode:d.Multiply,elevationOffset:0},a=r.textureBuffer,c=new Uint8Array(4),m=new Uint32Array(c.buffer);let l=0,p=0,f=0,h=!1,b=0,g=0;for(let o=0;o<e.count;o++)t(o,s),l+=+(s.externalColor[3]<1),p+=+(s.externalColorMixMode===d.Replace&&1===s.externalColor[3]),f+=+s.castShadows,y(s.externalColor,s.externalColorMixMode,c),c[2]=254&c[2]|+s.castShadows,a.setData(i[o],0,c[0],c[1],c[2],c[3]),h=h||o>0&&(b!==m[0]||g!==s.elevationOffset),b=m[0],g=s.elevationOffset,U(s.elevationOffset,c),a.setData(i[o],1,c[0],c[1],c[2],c[3]),s.pickable!==T(e.pickability,o)&&(e.pickability=V(e.pickability,e.count,o,s.pickable));h?(n.componentParameters=new E,n.componentParameters.castShadows=Q(f,e.count),n.componentParameters.transparent=Q(l,e.count),n.componentParameters.opaqueOverride=Q(p,e.count),n.componentParameters.texture=a,a.updateTexture()):(n.componentParameters=new R,n.componentParameters.castShadows=s.castShadows?k.All:k.None,n.componentParameters.externalColor=s.externalColor,n.componentParameters.externalColorMixMode=s.externalColorMixMode)}else n.componentParameters=new R,n.componentParameters.castShadows=t.castShadows?k.All:k.None,n.componentParameters.externalColor=t.externalColor,n.componentParameters.externalColorMixMode=t.externalColorMixMode;this._notifyDirty()}getComponentAabb(e,t,o){return e.intersectionGeometry.getComponentAabb(t,o)}getComponentObb(e){return e.obb}getObjectTransform(e){return e.transform}getComponentPositions(e,t,o){return e.intersectionGeometry.getComponentPositions(t,o)}intersect(e,o,n,r,i,c){const m=e;t(i)&&(i.localOrigin=m.transform.position);const f=s(Z,m.transform.rotationScale);l($,o,m.transform.position),l(ee,n,m.transform.position),p($,$,f),p(ee,ee,f);const h=a(Z,f);return m.intersectionGeometry.intersect($,ee,r,h,i,c)}addEdges(e,t,o,n){const r=e,{indices:i,positions:s}=r.intersectionGeometry,a=r.components.offsets;return t.addComponentObject(e,r.transform,{center:r.obb.center,radius:j(r.obb)},s,i,a,o,n)}async extractEdgeInformation(e,t,o){const n=e,r=n.components.visibility;if(r.allInvisible())return{buffer:H.createBuffer(0),origin:[0,0,0]};const{indices:i,positions:s}=n.intersectionGeometry,a=n.components.offsets,c=N.createBuffer(s.count);g(c.position,s),b(c.position,c.position,n.transform.rotationScale),this._setComponentIndices(c.componentIndex,i,a);const m=c.count,l=this._computeVisibilityIndices(i,r,a,m);return{origin:f(n.transform.position),buffer:await t.extractComponentsEdgeLocations({indices:l,indicesLength:l.length,skipDeduplicate:!0,data:c,writerSettings:{reducedPrecision:!1,variants:0}},o)}}_setComponentIndices(e,t,o){let n=0;for(let r=0;r<o.length-1;r++){const i=o[r],s=o[r+1];for(let o=i;o<s;o++){const r=t?t[o]:o;e.set(r,n)}n++}}_computeVisibilityIndices(e,t,o,n){if(e&&t.allVisible())return e;let r=0;t.forEachComponentRange(((e,t)=>(r+=o[t]-o[e],!0)));const i=2===e?.BYTES_PER_ELEMENT||n<=65536?new Uint16Array(r):new Uint32Array(r);let s=0;return t.forEachComponentRange(((t,n)=>{const r=o[t],a=o[n];for(let o=r;o<a;o++)i[s++]=e?e[o]:o;return!0})),i}addComponentHighlight(e,t){const n=e.components;o(n.highlightCounts)&&(n.highlightCounts=new Uint32Array(n.count+1));0===n.highlightCounts[t]++&&(n.highlightsDirty(),this._notifyDirty()),n.highlightCounts[n.count]++}removeComponentHighlight(e,t){const n=e.components;if(o(n.highlightCounts))return void F.warn("Removing non-existing highlight.");const r=n.highlightCounts[t],i=n.highlightCounts[n.count];if(0!==r){if(r>1)return n.highlightCounts[t]=r-1,void(n.highlightCounts[n.count]=i-1);n.highlightCounts[t]=0,n.highlightsDirty(),this._notifyDirty(),1===i?n.highlightCounts=null:n.highlightCounts[n.count]=i-1}else F.warn("Removing non-existing highlight.")}clearHighlights(e){const o=e.components;t(o.highlightCounts)&&(o.highlightCounts=null,o.highlightsDirty(),this._notifyDirty())}getObjectGPUMemoryUsage(e){return e.renderable.meta.gpuMemoryEstimate}get visibleObjects(){return this._objects[_.Visible]}_createRenderable(e,o){const i=this._renderManager.rctx,s=e.geometry,a=s.vertices.layoutParameters,c=q.createVertex(i,z.STATIC_DRAW,s.vertices.data),m=n(s.indices,(e=>q.createIndex(i,z.STATIC_DRAW,e))),l=x(I(a)),p=new Uint16Array(s.vertices.count);for(let n=0;n<o.count;n++){const e=o.offsets[n],r=o.offsets[n+1],i=o.materialDataIndices[n];if(t(s.indices))for(let t=e;t<r;t++){p[s.indices[t]]=i}else for(let t=e;t<r;t++)p[t]=i}const f=q.createVertex(i,z.STATIC_DRAW,p.buffer),h=new B(e.transform,e.toMapSpace),u=new Y(i,h.attributeLocations,{data:l,componentIndices:K},{data:c,componentIndices:f},r(m)),b=new O(u,X.TRIANGLES,a,t(m)),g={cameraDepthSquared:.5,gpuMemoryEstimate:c.byteSize+f.byteSize+(t(m)?m.byteSize:0)};return new A(h,b,g)}_notifyDirty(){this._renderManager.notifyDirty()}}const K=x(v().u16(L.COMPONENTINDEX));function Q(e,t){return e===t?k.All:0===e?k.None:k.Some}const Z=c(),$=h(),ee=h();export{J as ComponentObjectCollection};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{neverReached as o}from"../../../../../../../core/compilerUtils.js";import{
|
|
5
|
+
import{neverReached as o}from"../../../../../../../core/compilerUtils.js";import{packFloatRGBA as e}from"../../../../../../../core/floatRGBA.js";import{DecodeSymbolColor as r}from"./DecodeSymbolColor.glsl.js";import{RgbaFloatEncoding as n}from"../../../../core/shaderLibrary/util/RgbaFloatEncoding.glsl.js";import{Float2Uniform as t}from"../../../../core/shaderModules/Float2Uniform.js";import{Float4DrawUniform as l}from"../../../../core/shaderModules/Float4DrawUniform.js";import{IntegerDrawUniform as a}from"../../../../core/shaderModules/IntegerDrawUniform.js";import{glsl as d}from"../../../../core/shaderModules/interfaces.js";import{Texture2DUniform as i}from"../../../../core/shaderModules/Texture2DUniform.js";import{VertexAttribute as c}from"../../../../lib/VertexAttribute.js";var m;!function(o){o[o.Uniform=0]="Uniform",o[o.Varying=1]="Varying",o[o.COUNT=2]="COUNT"}(m||(m={}));const x=429496.7296;function s(o,r){e(o/x*.5+.5,r)}function C(e,r){switch(r.componentData){case m.Varying:return f(e);case m.Uniform:return v(e);case m.COUNT:return;default:o(r.componentData)}}function f(o){const{vertex:e,fragment:l}=o;e.include(n),e.uniforms.add([new i("componentColorTex"),new t("componentColorTexInvDim")]),o.attributes.add(c.COMPONENTINDEX,"float"),o.varyings.add("vExternalColorMixMode","mediump float"),o.varyings.add("vExternalColor","vec4"),o.include(r),e.constants.add("elevationScale","float",2*x),e.code.add(d`vec4 _readComponentColor() {
|
|
6
6
|
float normalizedIndex = (componentIndex * 2.0 + 0.5) * componentColorTexInvDim.x;
|
|
7
7
|
vec2 indexCoord = vec2(
|
|
8
8
|
mod(normalizedIndex, 1.0),
|
|
@@ -27,17 +27,17 @@ int decodedColorMixMode;
|
|
|
27
27
|
vExternalColor = decodeSymbolColor(componentColor, decodedColorMixMode) * 0.003921568627451;
|
|
28
28
|
vExternalColorMixMode = float(decodedColorMixMode) + 0.5;
|
|
29
29
|
return vExternalColor;
|
|
30
|
-
}`),l.code.add(
|
|
30
|
+
}`),l.code.add(d`void readExternalColor(out vec4 externalColor, out int externalColorMixMode) {
|
|
31
31
|
externalColor = vExternalColor;
|
|
32
32
|
externalColorMixMode = int(vExternalColorMixMode);
|
|
33
|
-
}`)}function
|
|
33
|
+
}`)}function v(o){const{vertex:e,fragment:r}=o;e.uniforms.add(new l("externalColor",(o=>o.componentParameters.externalColor))),r.uniforms.add(new a("externalColorMixMode",(o=>o.componentParameters.externalColorMixMode))),o.varyings.add("vExternalColor","vec4"),e.code.add(d`float readElevationOffset() {
|
|
34
34
|
return 0.0;
|
|
35
35
|
}
|
|
36
36
|
vec4 forwardExternalColor(out bool castShadows) {
|
|
37
37
|
vExternalColor = externalColor;
|
|
38
38
|
castShadows = true;
|
|
39
39
|
return externalColor;
|
|
40
|
-
}`),r.code.add(
|
|
40
|
+
}`),r.code.add(d`void readExternalColor(out vec4 color, out int colorMixMode) {
|
|
41
41
|
color = vExternalColor;
|
|
42
42
|
colorMixMode = externalColorMixMode;
|
|
43
|
-
}`)}export{
|
|
43
|
+
}`)}export{C as ComponentData,m as ComponentDataType,x as MAX_ELEVATION_OFFSET,s as encodeElevationOffset};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../chunks/tslib.es6.js";import r from"../../../../core/Accessor.js";import{update as t}from"../../../../core/arrayUtils.js";import s from"../../../../core/Handles.js";import{someMap as i}from"../../../../core/MapUtils.js";import{destroyMaybe as n,disposeMaybe as a,isSome as h,isNone as d,applySome as o,unwrap as _}from"../../../../core/maybe.js";import{watch as l,syncAndInitial as c,initial as p,sync as m}from"../../../../core/reactiveUtils.js";import{Milliseconds as g}from"../../../../core/time.js";import{property as u}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as f}from"../../../../core/accessorSupport/decorators/subclass.js";import{v as T,a as R,m as A}from"../../../../chunks/mat4.js";import{I as E,c as P}from"../../../../chunks/mat4f64.js";import{c as b}from"../../../../chunks/boundedPlane.js";import{MAXIMUM_ANIMATION_LOAD as S,MINIMUM_IDLE_ANIMATION_MS as H}from"../../support/animationUtils.js";import w from"../../support/debugFlags.js";import{RenderPassManager as M}from"../core/renderPasses/RenderPassManager.js";import{HUDTransparentRenderStyle as I}from"../core/shaderLibrary/hud/HUDUniforms.js";import{AntiAliasingMode as x,TransparencyPassType as C,Decorations as L,RenderRequestType as O,StencilBits as D}from"./basicInterfaces.js";import{BoundingInfo as y}from"./BoundingInfo.js";import{ZERO as N,union as v}from"./depthRange.js";import{depthRangeFromScene as U}from"./depthRangeUtils.js";import{createEmptyDepthTexture as F}from"./glUtil3D.js";import{Highlight as j}from"./Highlight.js";import{RenderOccludedFlag as q}from"./Material.js";import{OffscreenRendering as G}from"./OffscreenRendering.js";import{RenderContext as V}from"./RenderContext.js";import{splitRenderGeometryChangeSetByMaterial as B}from"./rendererUtils.js";import{RenderPass as W}from"./RenderPass.js";import{RenderPluginManager as k}from"./RenderPluginManager.js";import{RenderSlot as Q}from"./RenderSlot.js";import{ShadowAccumulator as z}from"./ShadowAccumulator.js";import{ShadowHighlight as X}from"./ShadowHighlight.js";import{ShadowMap as Y,SnapshotSlot as K}from"./ShadowMap.js";import J from"./SliceHelper.js";import{SmaaRenderPass as Z}from"./SmaaRenderPass.js";import{SSAOHelper as $}from"./SSAOHelper.js";import{EdgeView as ee}from"./edgeRendering/EdgeView.js";import{Transparency as re}from"./edgeRendering/interfaces.js";import{MergedRenderer as te}from"../materials/renderers/MergedRenderer.js";import{AlphaMode as se}from"../shaders/CompositingTechniqueConfiguration.js";import{RendererPerformanceInfo as ie,Statistics as ne}from"../statistics/RendererPerformanceInfo.js";import{ClearBufferBit as ae,PixelFormat as he,PixelType as de}from"../../../webgl/enums.js";const oe=.9;let _e=class extends r{constructor(e,r,t,i,n,a,h,d,o){super({}),this._materialRepository=e,this._shaderTechniqueRepository=t,this._rctx=i,this._compositingHelper=n,this._magnifierHelper=a,this._requestRender=h,this._stage=o,this._materialRenderers=new Map,this._needsTransparentPass=!1,this._hasHUDElements=!1,this._hasHighlights=!1,this._hasWater=!1,this._hasOverlayWater=!1,this._content=new Map,this._isRendering=!1,this._fallbackDepthStencilTexture=null,this.performanceInfo=new ie,this._antialiasing=x.SMAA,this._oitEnabled=!1,this._multipassTerrain=!0,this._transparentTerrain=!1,this._hasAnimations=!1,this._animationTimestep=g(0),this._handles=new s,this._renderHiddenTransparentEdges=()=>{},this._oitUsed=!1,this._smaaPass=new Z(this._rctx,t),this._oitEnabled=this._hasOITSupport,this._requestRender(),this._offscreenRendering=new G(this._rctx,this._compositingHelper),this._sliceHelper=new J,this._shadowMap=new Y(this._rctx,o.viewingMode,2),this._ssaoHelper=new $(t,this._rctx,(()=>this._requestRender())),this._highlight=new j(t,this._rctx),this._shadowHighlight=new X(this._rctx,o.viewingMode),this._shadowAccumulator=new z(this._rctx,t,o,(e=>{const r=this.shadowsEnabled;this._shadowMap.enabled=!0,this._ensureCameraBindParameters(e.camera,e.contentCamera),this._renderPlugins.prepareRender(),this._shadowMap.enabled=r}),((e,r,t)=>{e.shadowMap.start(e.camera,r,t),this._renderShadowCascades(W.MATERIAL_DEPTH_SHADOWMAP_ALL,e.shadowMap),e.camera.setGLViewport(this._rctx),this._ensureCameraBindParameters(e.camera,e.contentCamera)}),(()=>this._requestRender())),this._renderContext=new V(this._rctx,this._offscreenRendering,this._shadowMap,this._ssaoHelper,this._sliceHelper),this._renderPlugins=new k({renderContext:this._renderContext,shaderTechniqueRepository:t,textureRep:r,materialRep:this._materialRepository,requestRender:this._requestRender,schedule:d}),this.renderPassManager=new M(this._rctx,this._shaderTechniqueRepository),this._renderPlugins.add(this.renderPassManager.slots(),this.renderPassManager),this._handles.add([l((()=>this._stage.state.camera),(()=>this._requestRender()),c),l((()=>w.EDGES_SHOW_HIDDEN_TRANSPARENT_EDGES),(e=>{this._renderHiddenTransparentEdges=e?()=>this._renderEdges(re.TRANSPARENT):()=>{},this._requestRender()}),p)])}get _bindParameters(){return this._renderContext.bindParameters}get hasWater(){return this._hasWater||this._hasOverlayWater}get hasWaterReflection(){return this.hasWater&&this._waterReflectionEnabled}normalizeCtorArgs(){return{}}dispose(){this._handles.destroy(),this._smaaPass.dispose(),this._materialRenderers.forEach((e=>e.dispose())),this._materialRenderers.clear(),this._edgeView=n(this._edgeView),this._offscreenRendering.dispose(),this._fallbackDepthStencilTexture=a(this._fallbackDepthStencilTexture),this._shadowMap.enabled=!1,this._shadowMap.dispose(),this._ssaoHelper.enabled=!1,this._ssaoHelper.dispose(),this._highlight.dispose(),this._shadowHighlight.dispose(),this._shadowAccumulator.dispose(),y.prune(),this._content.clear()}disposeOffscreenBuffers(){this._offscreenRendering.dispose(),this._shadowMap.dispose(),this._smaaPass.disable(),this._ssaoHelper.disposeOffscreenBuffers()}get updating(){return this._antialiasing===x.SMAA&&this._smaaPass.updating||h(this._edgeView)&&this._edgeView.updating||this._shadowAccumulator.running||!this.isCameraFinal}ensureEdgeView(){return d(this._edgeView)&&(this._edgeView=new ee({rctx:this._rctx,renderSR:this._stage.renderSR,techniqueRepository:this._shaderTechniqueRepository,setNeedsRender:()=>this._requestRender(),schedule:e=>this._stage.resourceController.schedule(e)}),this._handles.add(l((()=>o(this._edgeView,(e=>e.updating))),(()=>this._requestRender()),m)),this._requestRender()),this._edgeView}get edgeView(){return this._edgeView}get isCameraFinal(){return T(this._bindParameters.ssr.reprojectionMatrix,E)}set _reprojectionMatrix(e){t(this._bindParameters.ssr.reprojectionMatrix,e)&&this.notifyChange("isCameraFinal")}get shadowsEnabled(){return!!this._shadowMap?.enabled}setRenderParameters(e){const{_shadowMap:r,_ssaoHelper:t,_bindParameters:s}=this;void 0!==e.screenSpaceReflectionsEnabled&&s.ssr.enabled!==e.screenSpaceReflectionsEnabled&&(s.ssr.enabled=e.screenSpaceReflectionsEnabled,this._requestRender()),void 0!==e.enableFillLights&&s.enableFillLights!==e.enableFillLights&&(s.enableFillLights=e.enableFillLights,this._requestRender()),void 0!==e.shadowMap&&r.enabled!==e.shadowMap&&(r.enabled=e.shadowMap,this._requestRender()),void 0!==e.shadowMapMaxCascades&&r.maxCascades!==e.shadowMapMaxCascades&&(r.maxCascades=e.shadowMapMaxCascades,this._requestRender()),void 0!==e.ssao&&t.enabled!==e.ssao&&(t.enabled=e.ssao,this._requestRender()),e.background&&this._offscreenRendering.background!==e.background&&(this._offscreenRendering.background=e.background,this._requestRender());const i=e.antialiasingEnabled?x.SMAA:x.NONE;void 0!==e.antialiasingEnabled&&this._antialiasing!==i&&(this._antialiasing=i,this._requestRender()),void 0!==e.highQualityTransparency&&this._multipassTerrain!==e.highQualityTransparency&&(this._multipassTerrain=e.highQualityTransparency,this._oitEnabled=e.highQualityTransparency&&this._hasOITSupport,this._requestRender()),void 0!==e.defaultHighlightOptions&&(this._highlight.setDefaultOptions(e.defaultHighlightOptions),this._shadowHighlight.setDefaultOptions(e.defaultHighlightOptions),this._requestRender()),void 0!==e.overlays&&this._bindParameters.overlays!==e.overlays&&(this._bindParameters.overlays=e.overlays,this._requestRender()),void 0!==e.slicePlane&&this._sliceHelper.plane!==e.slicePlane&&(this._sliceHelper.plane=_(e.slicePlane),this._requestRender()),void 0!==e.waterReflectionEnabled&&this._waterReflectionEnabled!==e.waterReflectionEnabled&&(this._waterReflectionEnabled=e.waterReflectionEnabled,this._requestRender()),void 0!==e.enableFillLights&&s.enableFillLights!==e.enableFillLights&&(s.enableFillLights=e.enableFillLights,this._requestRender()),void 0!==e.transparentTerrain&&this._transparentTerrain!==e.transparentTerrain&&(this._transparentTerrain=e.transparentTerrain,this._requestRender()),void 0!==e.hasOverlayWater&&this._hasOverlayWater!==e.hasOverlayWater&&(this._hasOverlayWater=e.hasOverlayWater,this._requestRender()),void 0!==e.shadowCastOptions&&this._shadowAccumulator.setOptions(e.shadowCastOptions)}get hasSlicePlane(){return!!this._sliceHelper.plane}get renderPlugins(){return this._renderPlugins}get _hasOITSupport(){return this._rctx.driverTest.floatBufferBlendWorking}modify(e){this._isRendering&&console.warn("Renderer.modify called while rendering");const{adds:r,removes:t,updates:s}=e;if(0===r.length&&0===t.length&&0===s.length)return;t.forAll((({id:e})=>this._content.delete(e))),r.forAll((e=>this._content.set(e.id,e)));const n=B(e);let a=!1;n.forEach(((e,r)=>{let t=this._materialRenderers.get(r);if(!t){if(!(e.adds.length>0))return;t=new te(this._rctx,this._materialRepository,r),this._materialRenderers.set(r,t)}t.modify(e),t.isEmpty&&(a=!0)})),a&&this._materialRenderers.forEach(((e,r)=>{e.isEmpty&&(this._materialRenderers.delete(r),e.dispose())})),this._hasHighlights=i(this._materialRenderers,(e=>e.hasHighlights)),this._bindParameters.hasOccludees=i(this._materialRenderers,(e=>e.hasOccludees)),this._hasWater=i(this._materialRenderers,(e=>e.hasWater)),this._needsTransparentPass=i(this._materialRenderers,(e=>e.requiresSlot(Q.TRANSPARENT_MATERIAL,W.MATERIAL))),this._hasHUDElements=i(this._materialRenderers,(e=>e.requiresSlot(Q.LINE_CALLOUTS_HUD_DEPTH,W.MATERIAL)||e.requiresSlot(Q.HUD_MATERIAL,W.MATERIAL)||e.requiresSlot(Q.LABEL_MATERIAL,W.MATERIAL))),this._requestRender()}updateAnimation(e){return this._hasAnimations=!1,this._materialRenderers.forEach((r=>this._hasAnimations=r.updateAnimation(e)||this._hasAnimations)),this._hasAnimations=this._renderPlugins.updateAnimation(e)||this._hasAnimations,this._hasAnimations}get animationTimestep(){return this._animationTimestep}updateLightSources(e,r,t){this._bindParameters.lighting.groundLightingFactor=r,this._bindParameters.lighting.globalFactor=t,this._bindParameters.lighting.set(e)}render(e,r,t,s){this._isRendering=!0,this.performanceInfo.prerender(this._rctx),this._bindParameters.transparencyPassType=C.NONE;const i=this._offscreenRendering;i.needLastFrameColorTexture=this.hasWaterReflection,i.advanceCurrentRenderTarget();const n=b(this._sliceHelper.plane);s===L.OFF&&(this._sliceHelper.plane=null),this._rctx.bindFramebuffer(e),r.setGLViewport(this._rctx),this._ensureCameraBindParameters(r,t),this._renderPlugins.prepareRender(),this.performanceInfo.advance(ne.Prepare);const a=this._computeDepthRange(r);this._renderShadowMap(e,r,this._bindParameters.lighting.lightingMainDirection,a),this.performanceInfo.advance(ne.Shadowmap),i.initializeFrame(r),this._ensureBindParameters(r,t),this._renderLinearDepth(),this.performanceInfo.advance(ne.Lineardepth),this._accumulateShadows(a,r,t),this._renderNormal(),this.performanceInfo.advance(ne.Normals),this._ensureBindParametersSSR(),this._ssaoHelper.computeSSAO(this._bindParameters,i.linearDepthTexture,i.normalTexture),this.performanceInfo.advance(ne.SSAO),this._renderContext.pass=W.MATERIAL,i.bindFramebuffer(),this._renderOpaqueGeometry(),this.performanceInfo.advance(ne.Opaque);const o=this._multipassTerrain&&this._transparentTerrain;this._renderTerrainLinearDepth(o),this._setMultipassEnabled(o),this._setTerrainCulling(o),this._renderEdges(re.OPAQUE),this.performanceInfo.advance(ne.OpaqueEdges),this._renderSlot(Q.VOXEL),this._renderHiddenTransparentEdges();const _=this._needsTransparentPass||this._renderPlugins.needsTransparentPass;_&&(this._oitEnabled?this._renderOrderIndependentTransparency((()=>this._renderTransparentGeometry()),!1):this._renderTransparentGeometry()),this.performanceInfo.advance(ne.Transparent),this._renderGeometryLinearDepth(o);const l=this._renderHUDVisibility();o||this._renderInternalSlot(Q.LINE_CALLOUTS),this.performanceInfo.advance(ne.Hudvisibility),this._renderEdges(re.TRANSPARENT,o),this.performanceInfo.advance(ne.TransparentEdges),this._renderTransparentTerrain(),this._transparentTerrain&&l&&(o?this._renderLineCallouts(I.Occluded):i.compositeTransparentTerrainOntoHUDVisibility(this._bindParameters),this._renderHUD(I.Occluded,i.framebuffer),this.performanceInfo.advance(ne.HudOccluded)),this.performanceInfo.advance(ne.TransparentTerrain),this._setTerrainCulling(!1),this._transparentTerrain&&(i.compositeTransparentTerrainOntoMain(this._bindParameters),o&&(this._renderEdges(re.OPAQUE),this.performanceInfo.advance(ne.OpaqueEdges),_&&(this._oitEnabled?this._renderOrderIndependentTransparency((()=>this._renderTransparentGeometry()),!1):this._renderTransparentGeometry()),this.performanceInfo.advance(ne.Transparent),this._renderEdges(re.TRANSPARENT),this.performanceInfo.advance(ne.TransparentEdges))),o&&this._renderLineCallouts(I.NotOccluded),this._setMultipassEnabled(!1),this._shadowAccumulator.render(this._bindParameters),i.renderToTargets((()=>{this._renderInternalSlot(Q.TRANSPARENT_DEPTH_WRITE_DISABLED_MATERIAL),this._renderSlot(Q.POSTPROCESSING_ENVIRONMENT_TRANSPARENT),this._renderSlot(Q.LASERLINES)}),i.currentColorTarget,i.mainDepth),this.performanceInfo.advance(ne.Atmosphere),this._renderPlugins.needsLaserlineWithContrastControl&&i.renderTmpAndCompositeToMain((()=>this._renderSlot(Q.LASERLINES_CONTRAST_CONTROL)),this._bindParameters,se.PremultipliedAlpha),this.performanceInfo.advance(ne.Laserline),this._renderOccluded(),this.performanceInfo.advance(ne.Occluded);const c=s===L.ON&&this._magnifierHelper.enabled,p=c&&d(e)?this._offscreenRendering.getFramebuffer(this._offscreenRendering.tmpColor,this._offscreenRendering.tmpDepth):e;this._rctx.bindFramebuffer(p);const m=this._offscreenRendering.colorTexture;!this._renderAntiAliasing(this._antialiasing,m)&&h(m)&&this._compositingHelper.composite(this._bindParameters,m,se.None),this.performanceInfo.advance(ne.Antialiasing),this._renderHUD(I.NotOccluded,p),this.performanceInfo.advance(ne.HudNotoccluded),this._renderHighlights(p,this._bindParameters),this.performanceInfo.advance(ne.Highlights),c&&this._magnifierHelper.render(this._rctx,this._bindParameters),p!==e&&(this._rctx.bindFramebuffer(e),this._compositingHelper.composite(this._bindParameters,this._offscreenRendering.tmpColorTexture,se.None)),this._disposeOITBuffers(),this._renderContext.lastFrameCamera.copyFrom(this._bindParameters.camera),this._sliceHelper.plane=n,this._isRendering=!1,this.onPostRender&&this.onPostRender(),this.performanceInfo.postrender()}finish(e){if(this._hasAnimations||(this._animationTimestep=g(0)),e===O.BACKGROUND){this._rctx.gl.getError();const e=this.performanceInfo.elapsedTime/S;this._animationTimestep=g(Math.max(this._animationTimestep*oe+e*(1-oe),H))}}readDepthPixels(e,r,t){const s=this._offscreenRendering.bindTarget(this._offscreenRendering.linearDepth,this._offscreenRendering.tmpDepth);if(!this._needsLinearDepth){this._ensureBindParameters(e,e),this._bindParameters.camera.setGLViewport(this._rctx),this._rctx.setClearColor(0,0,0,0);const r=ae.COLOR_BUFFER_BIT|ae.DEPTH_BUFFER_BIT|ae.STENCIL_BUFFER_BIT;this._rctx.clearSafe(r),this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_DEPTH)}s.readPixels(r[0],r[1],r[2],r[3],he.RGBA,de.UNSIGNED_BYTE,t)}readHUDVisibility(e,r,t,s,i){this._offscreenRendering.bindTarget(this._offscreenRendering.hudVisibility).readPixels(e,r,t,s,he.RGBA,de.UNSIGNED_BYTE,i)}readAccumulatedShadow(e,r){return this._shadowAccumulator.readAccumulatedShadow(e,r)}_setMultipassEnabled(e){this._bindParameters.multipassTerrain.enabled=this._bindParameters.multipassGeometry.enabled=e}_setTerrainCulling(e){this._bindParameters.multipassTerrain.cullAboveGround=e}_renderSlot(e){this._bindParameters.slot=e,this._renderPlugins.render()}_renderEdges(e,r=!1){const t=this._edgeView;h(t)&&t.shouldRender()&&this._offscreenRendering.renderTmpAndCompositeToMain((()=>t.render(this._bindParameters,e)),this._bindParameters,se.Alpha,r)}_renderShadowMap(e,r,t,s){const i=this._shadowMap;i.enabled&&(i.start(r,t,s),this._shadowHighlight.updateParameters(r,t),this.needsShadowHighlight?(this._renderShadowCascades(W.MATERIAL_DEPTH_SHADOWMAP_HIGHLIGHT,this._shadowMap,(e=>i.takeCascadeSnapshotTo(e,K.Highlight))),i.clear(),this._renderShadowCascades(W.MATERIAL_DEPTH_SHADOWMAP_DEFAULT,this._shadowMap,(e=>{i.takeCascadeSnapshotTo(e,K.Default),this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_DEPTH_SHADOWMAP_HIGHLIGHT)}))):this._renderShadowCascades(W.MATERIAL_DEPTH_SHADOWMAP_ALL),i.finish(e),r.setGLViewport(this._rctx))}_renderShadowCascades(e,r=this._shadowMap,t=(e=>{})){for(const s of r.getCascades())s.camera.setGLViewport(this._rctx),this._ensureCameraBindParameters(s.camera,s.camera),this._renderGeometryAndTransparentTerrainPass(e),t(s)}get _needsLinearDepth(){return this._ssaoHelper.enabled||this._renderPlugins.needsLinearDepth||this._hasWater&&this._waterReflectionEnabled||this.needsShadowHighlight||this.needsShadowCast}_renderLinearDepth(){this._needsLinearDepth?this._offscreenRendering.renderToTargets((()=>this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_DEPTH)),this._offscreenRendering.linearDepth,this._offscreenRendering.tmpDepth,[0,0,0,0],!0,!0):this._offscreenRendering.disposeTarget(this._offscreenRendering.linearDepth),this._bindParameters.linearDepthTexture=this._offscreenRendering.linearDepthTexture}_renderTerrainLinearDepth(e){if(e){const e=this._renderContext.pass;this._renderContext.pass=W.MATERIAL_DEPTH,this._offscreenRendering.renderToTargets((()=>this._renderTransparentTerrain()),this._offscreenRendering.terrainLinearDepth,this._offscreenRendering.tmpDepth,[-1e10,-1e10,-1e10,1],!0,!0),this._renderContext.pass=e}else this._offscreenRendering.disposeTarget(this._offscreenRendering.terrainLinearDepth);this._bindParameters.multipassTerrain.linearDepthTexture=this._offscreenRendering.terrainLinearDepthTexture}_renderGeometryLinearDepth(e){if(e){const e=this._renderContext.pass;this._offscreenRendering.renderToTargets((()=>this._renderGeometryPass(W.MATERIAL_DEPTH)),this._offscreenRendering.geometryLinearDepth,this._offscreenRendering.tmpDepth,[1,1,1,1],!0,!0),this._renderContext.pass=e}else this._offscreenRendering.disposeTarget(this._offscreenRendering.geometryLinearDepth);this._bindParameters.multipassGeometry.linearDepthTexture=this._offscreenRendering.geometryLinearDepthTexture}get needsNormal(){return this._ssaoHelper.enabled}_renderNormal(){this.needsNormal?this._offscreenRendering.renderToTargets((()=>{this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_NORMAL)}),this._offscreenRendering.normal,this._offscreenRendering.tmpDepth,[0,0,0,0],!0,!0):this._offscreenRendering.disposeTarget(this._offscreenRendering.normal)}get needsDepthRange(){return this._shadowMap.enabled||this.needsShadowCast}_computeDepthRange(e){if(!this.needsDepthRange)return N;const r=U(e,this._content,this._stage.layers);return v(r,this.renderPlugins.queryDepthRange(e)),r.near=Math.max(e.near,r.near),r.far=Math.min(e.far,r.far),r}_renderGeometryAndTransparentTerrainPass(e){this._renderContext.pass=e,this._renderGeometryPass(e),this._renderTransparentTerrain()}_renderGeometryPass(e){this._renderContext.pass=e,this._renderOpaqueGeometry(),this._renderTransparentGeometry()}_renderOpaqueGeometry(){this._renderSlot(Q.INTEGRATED_MESH),this._renderSlot(Q.OPAQUE_TERRAIN),this._renderInternalSlot(Q.OPAQUE_MATERIAL),this._renderSlot(Q.OPAQUE_MATERIAL),this._renderSlot(Q.POSTPROCESSING_ENVIRONMENT_OPAQUE)}_renderTransparentGeometry(){this._renderInternalSlot(Q.TRANSPARENT_MATERIAL),this._renderSlot(Q.TRANSPARENT_MATERIAL)}_renderTransparentTerrain(){this._renderSlot(Q.TRANSPARENT_TERRAIN)}_renderHUDVisibility(){let e=!1;return this._renderContext.offscreenRenderingHelper&&this._renderContext.offscreenRenderingHelper.renderHUDVisibility((()=>{this._bindParameters.hudVisibilityTexture=this._renderContext.offscreenRenderingHelper.hudVisibilityTexture,e=this._renderInternalSlot(Q.OCCLUSION_PIXELS)}),this._multipassTerrain&&this._transparentTerrain),e}_renderLineCallouts(e){this._bindParameters.renderTransparentlyOccludedHUD=e,e===I.Occluded?this._offscreenRendering.renderToTargets((()=>this._renderInternalSlot(Q.LINE_CALLOUTS)),this._offscreenRendering.currentColorTarget,this._offscreenRendering.tmpDepth,void 0,!0,!0):this._renderInternalSlot(Q.LINE_CALLOUTS)}_renderHUD(e,r){this._hasHUDElements&&(this._oitEnabled?(this._renderOrderIndependentTransparency((()=>this._renderHUDElements(e)),!0),this._rctx.bindFramebuffer(r),this._compositingHelper.composite(this._bindParameters,this._offscreenRendering.hudColorTexture,se.PremultipliedAlpha)):e===I.Occluded?this._offscreenRendering.renderToTargets((()=>this._renderHUDElements(I.Occluded)),this._offscreenRendering.currentColorTarget,this._offscreenRendering.tmpDepth,void 0,!0,!0):this._renderHUDElements(e))}_renderHUDElements(e){this._bindParameters.renderTransparentlyOccludedHUD=e,this._renderInternalSlot(Q.LINE_CALLOUTS_HUD_DEPTH),this._renderInternalSlot(Q.HUD_MATERIAL),this._renderInternalSlot(Q.LABEL_MATERIAL)}get needsHighlight(){return this._hasHighlights||this._renderPlugins.needsHighlight}get needsShadowHighlight(){return this._shadowMap.enabled&&this._shadowHighlight.isVisible&&this.needsHighlight}_renderHighlights(e,r){if(!this.needsHighlight)return void this._offscreenRendering.disposeTarget(this._offscreenRendering.highlight);const t=this._highlight,s=this._offscreenRendering.renderToTargets((()=>{this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_HIGHLIGHT),this._rctx.clearSafe(ae.DEPTH_BUFFER_BIT),this._renderHUDElements(I.Both)}),this._offscreenRendering.highlight,this._offscreenRendering.tmpDepth,[0,0,0,0],!0,!0);this._bindParameters.highlightColorTexture=s.colorTexture,this.needsShadowHighlight&&this._shadowHighlight.render(r,e),t.render(this._bindParameters,s,e)}get needsShadowCast(){return this._shadowAccumulator.isAccumulating}_accumulateShadows(e,r,t){this.needsShadowCast&&this._shadowAccumulator.renderAccumulation(this._offscreenRendering.linearDepthTexture,e,r,t)}_renderOrderIndependentTransparency(e,r){const t=t=>{this._bindParameters.transparencyPassType=t,this._offscreenRendering.renderOITPass((()=>e()),t,r)},s=this._renderContext.pass;this._renderContext.pass=W.MATERIAL_ALPHA,t(C.Alpha),this._renderContext.pass=W.MATERIAL,t(C.Color),t(C.FrontFace),this._offscreenRendering.compositeTransparentOntoOpaque(this._bindParameters,r),this._bindParameters.transparencyPassType=C.NONE,this._renderContext.pass=s,this._oitUsed=!0}_disposeOITBuffers(){this._oitUsed||(this._offscreenRendering.disposeTarget(this._offscreenRendering.alphaFloatTarget),this._offscreenRendering.disposeTarget(this._offscreenRendering.colorFloatTarget),this._offscreenRendering.disposeTarget(this._offscreenRendering.frontFaceTarget)),this._oitUsed=!1}_renderOccluded(){let e=0;this._materialRenderers.forEach(((r,t)=>{t&&t.isVisible()&&t.renderOccluded===q.OccludeAndTransparentStencil&&(e|=t.renderOccluded,pe.push(t))}));const r=this._offscreenRendering,t=(t,s,i,n,a)=>{0!=(e&s)&&(r.renderToTargets(i,r.tmpColor,r.mainDepth,[0,0,0,0],n,a),r.compositeOccludedOntoMain(this._bindParameters,t))};0!==pe.length&&(this._renderInternalSlot(Q.OCCLUDER_MATERIAL,pe),t(.5,q.OccludeAndTransparentStencil,(()=>this._renderInternalSlot(Q.TRANSPARENT_OCCLUDER_MATERIAL,pe)),!1,!1),pe.length=0),this._materialRenderers.forEach(((r,t)=>{t&&t.isVisible()&&(t.renderOccluded===q.OccludeAndTransparent||t.renderOccluded===q.Transparent||t.renderOccluded===q.Opaque)&&(e|=t.renderOccluded,ce.push(t))}));const s=this._renderPlugins.renderOccludedFlags;if(e|=s,!e)return;const i=e=>{this._renderContext.renderOccludedMask=e,s>q.Occlude&&this._renderSlot(Q.OCCLUDED_TERRAIN),this._renderInternalSlot(Q.OPAQUE_MATERIAL,ce),this._renderInternalSlot(Q.TRANSPARENT_MATERIAL,ce),this._renderInternalSlot(Q.TRANSPARENT_DEPTH_WRITE_DISABLED_MATERIAL,ce),this._renderContext.resetRenderOccludedMask()};this._renderContext.pass=W.MATERIAL,t(.5,q.OccludeAndTransparent,(()=>i(q.OccludeAndTransparent)),!0,D.OutlineVisualElementMask),t(.5,q.Transparent,(()=>i(q.Transparent)),!0,D.OutlineVisualElementMask),t(1,q.Opaque,(()=>i(q.Opaque)),!0,D.OutlineVisualElementMask),ce.length=0}_renderAntiAliasing(e,r){if(e===x.SMAA){if(this._smaaPass.enable((()=>this._requestRender()))&&h(r))return this._smaaPass.render(r),!0}else this._smaaPass.disable();return!1}_ensureCameraBindParameters(e,r){this._bindParameters.camera=e,this._bindParameters.contentCamera=r}_ensureBindParameters(e,r){this._ensureCameraBindParameters(e,r);const t=this._renderContext.offscreenRenderingHelper;this._bindParameters.hudVisibilityTexture=t.hudVisibilityTexture,this._bindParameters.highlightDepthTexture=t.depthTexture??this._getFallbackDepthTexture()}_ensureBindParametersSSR(){this.hasWaterReflection?(this._renderContext.lastFrameCamera.equals(this._bindParameters.camera)?this._reprojectionMatrix=E:(R(ge,this._bindParameters.camera.viewMatrix),R(me,this._bindParameters.camera.projectionMatrix),A(ue,ge,me),A(ue,this._renderContext.lastFrameCamera.viewMatrix,ue),A(ue,this._renderContext.lastFrameCamera.projectionMatrix,ue),this._reprojectionMatrix=ue),this._bindParameters.ssr.lastFrameColorTexture=this._offscreenRendering.lastFrameColorTexture):this._bindParameters.ssr.lastFrameColorTexture=null,this._bindParameters.ssr.enabled=this.hasWaterReflection}_renderInternalSlot(e,r){let t=!1;return this._bindParameters.slot=e,h(r)?r.forEach((e=>{if(!e.shouldRender(this._renderContext))return;const r=this._materialRenderers.get(e);h(r)&&(t=r.render(this._renderContext.pass,this._bindParameters)||t)})):this._materialRenderers.forEach(((e,r)=>{r.shouldRender(this._renderContext)&&e.render(this._renderContext.pass,this._bindParameters)&&(t=!0)})),t}_getFallbackDepthTexture(){return this._fallbackDepthStencilTexture||(this._fallbackDepthStencilTexture=F(this._rctx)),this._fallbackDepthStencilTexture}get gpuMemoryUsage(){return{offscreen:this._offscreenRendering?.gpuMemoryUsage??0,highlights:(this._highlight?.gpuMemoryUsage??0)+(this._shadowHighlight?.gpuMemoryUsage??0),shadows:this._shadowMap?.gpuMemoryUsage??0,ssao:this._ssaoHelper?.gpuMemoryUsage??0}}get test(){const e=this;return{offscreen:this._offscreenRendering,shadowMap:this._shadowMap,ssao:this._ssaoHelper,highlight:this._highlight,lighting:this._bindParameters.lighting,materialRenderers:this._materialRenderers,shadowAccumulator:this._shadowAccumulator,getFramebufferTexture:r=>{switch(r){case le.Color:return e._offscreenRendering.colorTexture;case le.LinearDepth:return e._offscreenRendering.linearDepthTexture;case le.Normals:return e._offscreenRendering.normalTexture;case le.ShadowMap:return e._shadowMap.depthTexture;case le.HudVisibility:return e._offscreenRendering.hudVisibilityTexture;case le.Highlight:return e._offscreenRendering.highlightTexture}}}}};var le;e([u()],_e.prototype,"_shadowAccumulator",void 0),e([u()],_e.prototype,"_smaaPass",void 0),e([u()],_e.prototype,"_antialiasing",void 0),e([u()],_e.prototype,"_edgeView",void 0),e([u()],_e.prototype,"updating",null),e([u()],_e.prototype,"isCameraFinal",null),_e=e([f("esri.views.3d.webgl-engine.lib.Renderer")],_e),function(e){e[e.Color=0]="Color",e[e.LinearDepth=1]="LinearDepth",e[e.Normals=2]="Normals",e[e.ShadowMap=3]="ShadowMap",e[e.HudVisibility=4]="HudVisibility",e[e.Highlight=5]="Highlight"}(le||(le={}));const ce=[],pe=[],me=P(),ge=P(),ue=P();export{le as FramebufferId,_e as Renderer};
|
|
5
|
+
import{_ as e}from"../../../../chunks/tslib.es6.js";import r from"../../../../core/Accessor.js";import{update as t}from"../../../../core/arrayUtils.js";import s from"../../../../core/Handles.js";import{someMap as i}from"../../../../core/MapUtils.js";import{destroyMaybe as n,disposeMaybe as a,isSome as h,isNone as d,applySome as o,unwrap as _}from"../../../../core/maybe.js";import{watch as l,syncAndInitial as c,initial as p,sync as m}from"../../../../core/reactiveUtils.js";import{Milliseconds as g}from"../../../../core/time.js";import{property as u}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/has.js";import"../../../../core/accessorSupport/ensureType.js";import{subclass as f}from"../../../../core/accessorSupport/decorators/subclass.js";import{v as T,a as R,m as A}from"../../../../chunks/mat4.js";import{I as E,c as P}from"../../../../chunks/mat4f64.js";import{c as b}from"../../../../chunks/boundedPlane.js";import{MAXIMUM_ANIMATION_LOAD as S,MINIMUM_IDLE_ANIMATION_MS as w}from"../../support/animationUtils.js";import H from"../../support/debugFlags.js";import{RenderPassManager as M}from"../core/renderPasses/RenderPassManager.js";import{HUDTransparentRenderStyle as I}from"../core/shaderLibrary/hud/HUDUniforms.js";import{AntiAliasingMode as x,TransparencyPassType as C,Decorations as L,RenderRequestType as O,StencilBits as D}from"./basicInterfaces.js";import{BoundingInfo as y}from"./BoundingInfo.js";import{ZERO as N,union as v}from"./depthRange.js";import{depthRangeFromScene as U}from"./depthRangeUtils.js";import{createEmptyDepthTexture as F}from"./glUtil3D.js";import{Highlight as j}from"./Highlight.js";import{RenderOccludedFlag as q}from"./Material.js";import{OffscreenRendering as G}from"./OffscreenRendering.js";import{RenderContext as V}from"./RenderContext.js";import{splitRenderGeometryChangeSetByMaterial as B}from"./rendererUtils.js";import{RenderPass as W}from"./RenderPass.js";import{RenderPluginManager as k}from"./RenderPluginManager.js";import{RenderSlot as Q}from"./RenderSlot.js";import{ShadowAccumulator as z}from"./ShadowAccumulator.js";import{ShadowHighlight as X}from"./ShadowHighlight.js";import{ShadowMap as Y,SnapshotSlot as K}from"./ShadowMap.js";import J from"./SliceHelper.js";import{SmaaRenderPass as Z}from"./SmaaRenderPass.js";import{SSAOHelper as $}from"./SSAOHelper.js";import{EdgeView as ee}from"./edgeRendering/EdgeView.js";import{Transparency as re}from"./edgeRendering/interfaces.js";import{MergedRenderer as te}from"../materials/renderers/MergedRenderer.js";import{AlphaMode as se}from"../shaders/CompositingTechniqueConfiguration.js";import{RendererPerformanceInfo as ie,Statistics as ne}from"../statistics/RendererPerformanceInfo.js";import{ClearBufferBit as ae,PixelFormat as he,PixelType as de}from"../../../webgl/enums.js";const oe=.9;let _e=class extends r{constructor(e,r,t,i,n,a,h,d,o){super({}),this._materialRepository=e,this._shaderTechniqueRepository=t,this._rctx=i,this._compositingHelper=n,this._magnifierHelper=a,this._requestRender=h,this._stage=o,this._materialRenderers=new Map,this._needsTransparentPass=!1,this._hasHUDElements=!1,this._hasHighlights=!1,this._hasWater=!1,this._hasOverlayWater=!1,this._content=new Map,this._isRendering=!1,this._fallbackDepthStencilTexture=null,this.performanceInfo=new ie,this._antialiasing=x.SMAA,this._oitEnabled=!1,this._multipassTerrain=!0,this._transparentTerrain=!1,this._hasAnimations=!1,this._animationTimestep=g(0),this._handles=new s,this._renderHiddenTransparentEdges=()=>{},this._oitUsed=!1,this._smaaPass=new Z(this._rctx,t),this._oitEnabled=this._hasOITSupport,this._requestRender(),this._offscreenRendering=new G(this._rctx,this._compositingHelper),this._sliceHelper=new J,this._shadowMap=new Y(this._rctx,o.viewingMode,2),this._ssaoHelper=new $(t,this._rctx,(()=>this._requestRender())),this._highlight=new j(t,this._rctx),this._shadowHighlight=new X(this._rctx,o.viewingMode),this._shadowAccumulator=new z(this._rctx,t,o,(e=>{const r=this.shadowsEnabled;this._shadowMap.enabled=!0,this._ensureCameraBindParameters(e.camera,e.contentCamera),this._renderPlugins.prepareRender(),this._shadowMap.enabled=r}),((e,r,t)=>{e.shadowMap.start(e.camera,r,t),this._renderShadowCascades(W.MATERIAL_DEPTH_SHADOWMAP_ALL,e.shadowMap),e.camera.setGLViewport(this._rctx),this._ensureCameraBindParameters(e.camera,e.contentCamera)}),(()=>this._requestRender())),this._renderContext=new V(this._rctx,this._offscreenRendering,this._shadowMap,this._ssaoHelper,this._sliceHelper),this._renderPlugins=new k({renderContext:this._renderContext,shaderTechniqueRepository:t,textureRep:r,materialRep:this._materialRepository,requestRender:this._requestRender,schedule:d}),this.renderPassManager=new M(this._rctx,this._shaderTechniqueRepository),this._renderPlugins.add(this.renderPassManager.slots(),this.renderPassManager),this._handles.add([l((()=>this._stage.state.camera),(()=>this._requestRender()),c),l((()=>H.EDGES_SHOW_HIDDEN_TRANSPARENT_EDGES),(e=>{this._renderHiddenTransparentEdges=e?()=>this._renderEdges(re.TRANSPARENT):()=>{},this._requestRender()}),p)])}get _bindParameters(){return this._renderContext.bindParameters}get hasWater(){return this._hasWater||this._hasOverlayWater}get hasWaterReflection(){return this.hasWater&&this._waterReflectionEnabled}normalizeCtorArgs(){return{}}dispose(){this._handles.destroy(),this._smaaPass.dispose(),this._materialRenderers.forEach((e=>e.dispose())),this._materialRenderers.clear(),this._edgeView=n(this._edgeView),this._offscreenRendering.dispose(),this._fallbackDepthStencilTexture=a(this._fallbackDepthStencilTexture),this._shadowMap.enabled=!1,this._shadowMap.dispose(),this._ssaoHelper.enabled=!1,this._ssaoHelper.dispose(),this._highlight.dispose(),this._shadowHighlight.dispose(),this._shadowAccumulator.dispose(),y.prune(),this._content.clear()}disposeOffscreenBuffers(){this._offscreenRendering.dispose(),this._shadowMap.dispose(),this._smaaPass.disable(),this._ssaoHelper.disposeOffscreenBuffers()}get updating(){return this._antialiasing===x.SMAA&&this._smaaPass.updating||h(this._edgeView)&&this._edgeView.updating||this._shadowAccumulator.running||!this.isCameraFinal}ensureEdgeView(){return d(this._edgeView)&&(this._edgeView=new ee({rctx:this._rctx,renderSR:this._stage.renderSR,viewingMode:this._stage.viewingMode,techniqueRepository:this._shaderTechniqueRepository,setNeedsRender:()=>this._requestRender(),schedule:e=>this._stage.resourceController.schedule(e)}),this._handles.add(l((()=>o(this._edgeView,(e=>e.updating))),(()=>this._requestRender()),m)),this._requestRender()),this._edgeView}get edgeView(){return this._edgeView}get isCameraFinal(){return T(this._bindParameters.ssr.reprojectionMatrix,E)}set _reprojectionMatrix(e){t(this._bindParameters.ssr.reprojectionMatrix,e)&&this.notifyChange("isCameraFinal")}get shadowsEnabled(){return!!this._shadowMap?.enabled}setRenderParameters(e){const{_shadowMap:r,_ssaoHelper:t,_bindParameters:s}=this;void 0!==e.screenSpaceReflectionsEnabled&&s.ssr.enabled!==e.screenSpaceReflectionsEnabled&&(s.ssr.enabled=e.screenSpaceReflectionsEnabled,this._requestRender()),void 0!==e.enableFillLights&&s.enableFillLights!==e.enableFillLights&&(s.enableFillLights=e.enableFillLights,this._requestRender()),void 0!==e.shadowMap&&r.enabled!==e.shadowMap&&(r.enabled=e.shadowMap,this._requestRender()),void 0!==e.shadowMapMaxCascades&&r.maxCascades!==e.shadowMapMaxCascades&&(r.maxCascades=e.shadowMapMaxCascades,this._requestRender()),void 0!==e.ssao&&t.enabled!==e.ssao&&(t.enabled=e.ssao,this._requestRender()),e.background&&this._offscreenRendering.background!==e.background&&(this._offscreenRendering.background=e.background,this._requestRender());const i=e.antialiasingEnabled?x.SMAA:x.NONE;void 0!==e.antialiasingEnabled&&this._antialiasing!==i&&(this._antialiasing=i,this._requestRender()),void 0!==e.highQualityTransparency&&this._multipassTerrain!==e.highQualityTransparency&&(this._multipassTerrain=e.highQualityTransparency,this._oitEnabled=e.highQualityTransparency&&this._hasOITSupport,this._requestRender()),void 0!==e.defaultHighlightOptions&&(this._highlight.setDefaultOptions(e.defaultHighlightOptions),this._shadowHighlight.setDefaultOptions(e.defaultHighlightOptions),this._requestRender()),void 0!==e.overlays&&this._bindParameters.overlays!==e.overlays&&(this._bindParameters.overlays=e.overlays,this._requestRender()),void 0!==e.slicePlane&&this._sliceHelper.plane!==e.slicePlane&&(this._sliceHelper.plane=_(e.slicePlane),this._requestRender()),void 0!==e.waterReflectionEnabled&&this._waterReflectionEnabled!==e.waterReflectionEnabled&&(this._waterReflectionEnabled=e.waterReflectionEnabled,this._requestRender()),void 0!==e.enableFillLights&&s.enableFillLights!==e.enableFillLights&&(s.enableFillLights=e.enableFillLights,this._requestRender()),void 0!==e.transparentTerrain&&this._transparentTerrain!==e.transparentTerrain&&(this._transparentTerrain=e.transparentTerrain,this._requestRender()),void 0!==e.hasOverlayWater&&this._hasOverlayWater!==e.hasOverlayWater&&(this._hasOverlayWater=e.hasOverlayWater,this._requestRender()),void 0!==e.shadowCastOptions&&this._shadowAccumulator.setOptions(e.shadowCastOptions)}get hasSlicePlane(){return!!this._sliceHelper.plane}get renderPlugins(){return this._renderPlugins}get _hasOITSupport(){return this._rctx.driverTest.floatBufferBlendWorking}modify(e){this._isRendering&&console.warn("Renderer.modify called while rendering");const{adds:r,removes:t,updates:s}=e;if(0===r.length&&0===t.length&&0===s.length)return;t.forAll((({id:e})=>this._content.delete(e))),r.forAll((e=>this._content.set(e.id,e)));const n=B(e);let a=!1;n.forEach(((e,r)=>{let t=this._materialRenderers.get(r);if(!t){if(!(e.adds.length>0))return;t=new te(this._rctx,this._materialRepository,r),this._materialRenderers.set(r,t)}t.modify(e),t.isEmpty&&(a=!0)})),a&&this._materialRenderers.forEach(((e,r)=>{e.isEmpty&&(this._materialRenderers.delete(r),e.dispose())})),this._hasHighlights=i(this._materialRenderers,(e=>e.hasHighlights)),this._bindParameters.hasOccludees=i(this._materialRenderers,(e=>e.hasOccludees)),this._hasWater=i(this._materialRenderers,(e=>e.hasWater)),this._needsTransparentPass=i(this._materialRenderers,(e=>e.requiresSlot(Q.TRANSPARENT_MATERIAL,W.MATERIAL))),this._hasHUDElements=i(this._materialRenderers,(e=>e.requiresSlot(Q.LINE_CALLOUTS_HUD_DEPTH,W.MATERIAL)||e.requiresSlot(Q.HUD_MATERIAL,W.MATERIAL)||e.requiresSlot(Q.LABEL_MATERIAL,W.MATERIAL))),this._requestRender()}updateAnimation(e){return this._hasAnimations=!1,this._materialRenderers.forEach((r=>this._hasAnimations=r.updateAnimation(e)||this._hasAnimations)),this._hasAnimations=this._renderPlugins.updateAnimation(e)||this._hasAnimations,this._hasAnimations}get animationTimestep(){return this._animationTimestep}updateLightSources(e,r,t){this._bindParameters.lighting.groundLightingFactor=r,this._bindParameters.lighting.globalFactor=t,this._bindParameters.lighting.set(e)}render(e,r,t,s){this._isRendering=!0,this.performanceInfo.prerender(this._rctx),this._bindParameters.transparencyPassType=C.NONE;const i=this._offscreenRendering;i.needLastFrameColorTexture=this.hasWaterReflection,i.advanceCurrentRenderTarget();const n=b(this._sliceHelper.plane);s===L.OFF&&(this._sliceHelper.plane=null),this._rctx.bindFramebuffer(e),r.setGLViewport(this._rctx),this._ensureCameraBindParameters(r,t),this._renderPlugins.prepareRender(),this.performanceInfo.advance(ne.Prepare);const a=this._computeDepthRange(r);this._renderShadowMap(e,r,this._bindParameters.lighting.lightingMainDirection,a),this.performanceInfo.advance(ne.Shadowmap),i.initializeFrame(r),this._ensureBindParameters(r,t),this._renderLinearDepth(),this.performanceInfo.advance(ne.Lineardepth),this._accumulateShadows(a,r,t),this._renderNormal(),this.performanceInfo.advance(ne.Normals),this._ensureBindParametersSSR(),this._ssaoHelper.computeSSAO(this._bindParameters,i.linearDepthTexture,i.normalTexture),this.performanceInfo.advance(ne.SSAO),this._renderContext.pass=W.MATERIAL,i.bindFramebuffer(),this._renderOpaqueGeometry(),this.performanceInfo.advance(ne.Opaque);const o=this._multipassTerrain&&this._transparentTerrain;this._renderTerrainLinearDepth(o),this._setMultipassEnabled(o),this._setTerrainCulling(o),this._renderEdges(re.OPAQUE),this.performanceInfo.advance(ne.OpaqueEdges),this._renderSlot(Q.VOXEL),this._renderHiddenTransparentEdges();const _=this._needsTransparentPass||this._renderPlugins.needsTransparentPass;_&&(this._oitEnabled?this._renderOrderIndependentTransparency((()=>this._renderTransparentGeometry()),!1):this._renderTransparentGeometry()),this.performanceInfo.advance(ne.Transparent),this._renderGeometryLinearDepth(o);const l=this._renderHUDVisibility();o||this._renderInternalSlot(Q.LINE_CALLOUTS),this.performanceInfo.advance(ne.Hudvisibility),this._renderEdges(re.TRANSPARENT,o),this.performanceInfo.advance(ne.TransparentEdges),this._renderTransparentTerrain(),this._transparentTerrain&&l&&(o?this._renderLineCallouts(I.Occluded):i.compositeTransparentTerrainOntoHUDVisibility(this._bindParameters),this._renderHUD(I.Occluded,i.framebuffer),this.performanceInfo.advance(ne.HudOccluded)),this.performanceInfo.advance(ne.TransparentTerrain),this._setTerrainCulling(!1),this._transparentTerrain&&(i.compositeTransparentTerrainOntoMain(this._bindParameters),o&&(this._renderEdges(re.OPAQUE),this.performanceInfo.advance(ne.OpaqueEdges),_&&(this._oitEnabled?this._renderOrderIndependentTransparency((()=>this._renderTransparentGeometry()),!1):this._renderTransparentGeometry()),this.performanceInfo.advance(ne.Transparent),this._renderEdges(re.TRANSPARENT),this.performanceInfo.advance(ne.TransparentEdges))),o&&this._renderLineCallouts(I.NotOccluded),this._setMultipassEnabled(!1),this._shadowAccumulator.render(this._bindParameters),i.renderToTargets((()=>{this._renderInternalSlot(Q.TRANSPARENT_DEPTH_WRITE_DISABLED_MATERIAL),this._renderSlot(Q.POSTPROCESSING_ENVIRONMENT_TRANSPARENT),this._renderSlot(Q.LASERLINES)}),i.currentColorTarget,i.mainDepth),this.performanceInfo.advance(ne.Atmosphere),this._renderPlugins.needsLaserlineWithContrastControl&&i.renderTmpAndCompositeToMain((()=>this._renderSlot(Q.LASERLINES_CONTRAST_CONTROL)),this._bindParameters,se.PremultipliedAlpha),this.performanceInfo.advance(ne.Laserline),this._renderOccluded(),this.performanceInfo.advance(ne.Occluded);const c=s===L.ON&&this._magnifierHelper.enabled,p=c&&d(e)?this._offscreenRendering.getFramebuffer(this._offscreenRendering.tmpColor,this._offscreenRendering.tmpDepth):e;this._rctx.bindFramebuffer(p);const m=this._offscreenRendering.colorTexture;!this._renderAntiAliasing(this._antialiasing,m)&&h(m)&&this._compositingHelper.composite(this._bindParameters,m,se.None),this.performanceInfo.advance(ne.Antialiasing),this._renderHUD(I.NotOccluded,p),this.performanceInfo.advance(ne.HudNotoccluded),this._renderHighlights(p,this._bindParameters),this.performanceInfo.advance(ne.Highlights),c&&this._magnifierHelper.render(this._rctx,this._bindParameters),p!==e&&(this._rctx.bindFramebuffer(e),this._compositingHelper.composite(this._bindParameters,this._offscreenRendering.tmpColorTexture,se.None)),this._disposeOITBuffers(),this._renderContext.lastFrameCamera.copyFrom(this._bindParameters.camera),this._sliceHelper.plane=n,this._isRendering=!1,this.onPostRender&&this.onPostRender(),this.performanceInfo.postrender()}finish(e){if(this._hasAnimations||(this._animationTimestep=g(0)),e===O.BACKGROUND){this._rctx.gl.getError();const e=this.performanceInfo.elapsedTime/S;this._animationTimestep=g(Math.max(this._animationTimestep*oe+e*(1-oe),w))}}readDepthPixels(e,r,t){const s=this._offscreenRendering.bindTarget(this._offscreenRendering.linearDepth,this._offscreenRendering.tmpDepth);if(!this._needsLinearDepth){this._ensureBindParameters(e,e),this._bindParameters.camera.setGLViewport(this._rctx),this._rctx.setClearColor(0,0,0,0);const r=ae.COLOR_BUFFER_BIT|ae.DEPTH_BUFFER_BIT|ae.STENCIL_BUFFER_BIT;this._rctx.clearSafe(r),this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_DEPTH)}s.readPixels(r[0],r[1],r[2],r[3],he.RGBA,de.UNSIGNED_BYTE,t)}readHUDVisibility(e,r,t,s,i){this._offscreenRendering.bindTarget(this._offscreenRendering.hudVisibility).readPixels(e,r,t,s,he.RGBA,de.UNSIGNED_BYTE,i)}readAccumulatedShadow(e,r){return this._shadowAccumulator.readAccumulatedShadow(e,r)}_setMultipassEnabled(e){this._bindParameters.multipassTerrain.enabled=this._bindParameters.multipassGeometry.enabled=e}_setTerrainCulling(e){this._bindParameters.multipassTerrain.cullAboveGround=e}_renderSlot(e){this._bindParameters.slot=e,this._renderPlugins.render()}_renderEdges(e,r=!1){const t=this._edgeView;h(t)&&t.shouldRender()&&this._offscreenRendering.renderTmpAndCompositeToMain((()=>t.render(this._bindParameters,e)),this._bindParameters,se.Alpha,r)}_renderShadowMap(e,r,t,s){const i=this._shadowMap;i.enabled&&(i.start(r,t,s),this._shadowHighlight.updateParameters(r,t),this.needsShadowHighlight?(this._renderShadowCascades(W.MATERIAL_DEPTH_SHADOWMAP_HIGHLIGHT,this._shadowMap,(e=>i.takeCascadeSnapshotTo(e,K.Highlight))),i.clear(),this._renderShadowCascades(W.MATERIAL_DEPTH_SHADOWMAP_DEFAULT,this._shadowMap,(e=>{i.takeCascadeSnapshotTo(e,K.Default),this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_DEPTH_SHADOWMAP_HIGHLIGHT)}))):this._renderShadowCascades(W.MATERIAL_DEPTH_SHADOWMAP_ALL),i.finish(e),r.setGLViewport(this._rctx))}_renderShadowCascades(e,r=this._shadowMap,t=(e=>{})){for(const s of r.getCascades())s.camera.setGLViewport(this._rctx),this._ensureCameraBindParameters(s.camera,s.camera),this._renderGeometryAndTransparentTerrainPass(e),t(s)}get _needsLinearDepth(){return this._ssaoHelper.enabled||this._renderPlugins.needsLinearDepth||this._hasWater&&this._waterReflectionEnabled||this.needsShadowHighlight||this.needsShadowCast}_renderLinearDepth(){this._needsLinearDepth?this._offscreenRendering.renderToTargets((()=>this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_DEPTH)),this._offscreenRendering.linearDepth,this._offscreenRendering.tmpDepth,[0,0,0,0],!0,!0):this._offscreenRendering.disposeTarget(this._offscreenRendering.linearDepth),this._bindParameters.linearDepthTexture=this._offscreenRendering.linearDepthTexture}_renderTerrainLinearDepth(e){if(e){const e=this._renderContext.pass;this._renderContext.pass=W.MATERIAL_DEPTH,this._offscreenRendering.renderToTargets((()=>this._renderTransparentTerrain()),this._offscreenRendering.terrainLinearDepth,this._offscreenRendering.tmpDepth,[-1e10,-1e10,-1e10,1],!0,!0),this._renderContext.pass=e}else this._offscreenRendering.disposeTarget(this._offscreenRendering.terrainLinearDepth);this._bindParameters.multipassTerrain.linearDepthTexture=this._offscreenRendering.terrainLinearDepthTexture}_renderGeometryLinearDepth(e){if(e){const e=this._renderContext.pass;this._offscreenRendering.renderToTargets((()=>this._renderGeometryPass(W.MATERIAL_DEPTH)),this._offscreenRendering.geometryLinearDepth,this._offscreenRendering.tmpDepth,[1,1,1,1],!0,!0),this._renderContext.pass=e}else this._offscreenRendering.disposeTarget(this._offscreenRendering.geometryLinearDepth);this._bindParameters.multipassGeometry.linearDepthTexture=this._offscreenRendering.geometryLinearDepthTexture}get needsNormal(){return this._ssaoHelper.enabled}_renderNormal(){this.needsNormal?this._offscreenRendering.renderToTargets((()=>{this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_NORMAL)}),this._offscreenRendering.normal,this._offscreenRendering.tmpDepth,[0,0,0,0],!0,!0):this._offscreenRendering.disposeTarget(this._offscreenRendering.normal)}get needsDepthRange(){return this._shadowMap.enabled||this.needsShadowCast}_computeDepthRange(e){if(!this.needsDepthRange)return N;const r=U(e,this._content,this._stage.layers);return v(r,this.renderPlugins.queryDepthRange(e)),r.near=Math.max(e.near,r.near),r.far=Math.min(e.far,r.far),r}_renderGeometryAndTransparentTerrainPass(e){this._renderContext.pass=e,this._renderGeometryPass(e),this._renderTransparentTerrain()}_renderGeometryPass(e){this._renderContext.pass=e,this._renderOpaqueGeometry(),this._renderTransparentGeometry()}_renderOpaqueGeometry(){this._renderSlot(Q.INTEGRATED_MESH),this._renderSlot(Q.OPAQUE_TERRAIN),this._renderInternalSlot(Q.OPAQUE_MATERIAL),this._renderSlot(Q.OPAQUE_MATERIAL),this._renderSlot(Q.POSTPROCESSING_ENVIRONMENT_OPAQUE)}_renderTransparentGeometry(){this._renderInternalSlot(Q.TRANSPARENT_MATERIAL),this._renderSlot(Q.TRANSPARENT_MATERIAL)}_renderTransparentTerrain(){this._renderSlot(Q.TRANSPARENT_TERRAIN)}_renderHUDVisibility(){let e=!1;return this._renderContext.offscreenRenderingHelper&&this._renderContext.offscreenRenderingHelper.renderHUDVisibility((()=>{this._bindParameters.hudVisibilityTexture=this._renderContext.offscreenRenderingHelper.hudVisibilityTexture,e=this._renderInternalSlot(Q.OCCLUSION_PIXELS)}),this._multipassTerrain&&this._transparentTerrain),e}_renderLineCallouts(e){this._bindParameters.renderTransparentlyOccludedHUD=e,e===I.Occluded?this._offscreenRendering.renderToTargets((()=>this._renderInternalSlot(Q.LINE_CALLOUTS)),this._offscreenRendering.currentColorTarget,this._offscreenRendering.tmpDepth,void 0,!0,!0):this._renderInternalSlot(Q.LINE_CALLOUTS)}_renderHUD(e,r){this._hasHUDElements&&(this._oitEnabled?(this._renderOrderIndependentTransparency((()=>this._renderHUDElements(e)),!0),this._rctx.bindFramebuffer(r),this._compositingHelper.composite(this._bindParameters,this._offscreenRendering.hudColorTexture,se.PremultipliedAlpha)):e===I.Occluded?this._offscreenRendering.renderToTargets((()=>this._renderHUDElements(I.Occluded)),this._offscreenRendering.currentColorTarget,this._offscreenRendering.tmpDepth,void 0,!0,!0):this._renderHUDElements(e))}_renderHUDElements(e){this._bindParameters.renderTransparentlyOccludedHUD=e,this._renderInternalSlot(Q.LINE_CALLOUTS_HUD_DEPTH),this._renderInternalSlot(Q.HUD_MATERIAL),this._renderInternalSlot(Q.LABEL_MATERIAL)}get needsHighlight(){return this._hasHighlights||this._renderPlugins.needsHighlight}get needsShadowHighlight(){return this._shadowMap.enabled&&this._shadowHighlight.isVisible&&this.needsHighlight}_renderHighlights(e,r){if(!this.needsHighlight)return void this._offscreenRendering.disposeTarget(this._offscreenRendering.highlight);const t=this._highlight,s=this._offscreenRendering.renderToTargets((()=>{this._renderGeometryAndTransparentTerrainPass(W.MATERIAL_HIGHLIGHT),this._rctx.clearSafe(ae.DEPTH_BUFFER_BIT),this._renderHUDElements(I.Both)}),this._offscreenRendering.highlight,this._offscreenRendering.tmpDepth,[0,0,0,0],!0,!0);this._bindParameters.highlightColorTexture=s.colorTexture,this.needsShadowHighlight&&this._shadowHighlight.render(r,e),t.render(this._bindParameters,s,e)}get needsShadowCast(){return this._shadowAccumulator.isAccumulating}_accumulateShadows(e,r,t){this.needsShadowCast&&this._shadowAccumulator.renderAccumulation(this._offscreenRendering.linearDepthTexture,e,r,t)}_renderOrderIndependentTransparency(e,r){const t=t=>{this._bindParameters.transparencyPassType=t,this._offscreenRendering.renderOITPass((()=>e()),t,r)},s=this._renderContext.pass;this._renderContext.pass=W.MATERIAL_ALPHA,t(C.Alpha),this._renderContext.pass=W.MATERIAL,t(C.Color),t(C.FrontFace),this._offscreenRendering.compositeTransparentOntoOpaque(this._bindParameters,r),this._bindParameters.transparencyPassType=C.NONE,this._renderContext.pass=s,this._oitUsed=!0}_disposeOITBuffers(){this._oitUsed||(this._offscreenRendering.disposeTarget(this._offscreenRendering.alphaFloatTarget),this._offscreenRendering.disposeTarget(this._offscreenRendering.colorFloatTarget),this._offscreenRendering.disposeTarget(this._offscreenRendering.frontFaceTarget)),this._oitUsed=!1}_renderOccluded(){let e=0;this._materialRenderers.forEach(((r,t)=>{t&&t.isVisible()&&t.renderOccluded===q.OccludeAndTransparentStencil&&(e|=t.renderOccluded,pe.push(t))}));const r=this._offscreenRendering,t=(t,s,i,n,a)=>{0!=(e&s)&&(r.renderToTargets(i,r.tmpColor,r.mainDepth,[0,0,0,0],n,a),r.compositeOccludedOntoMain(this._bindParameters,t))};0!==pe.length&&(this._renderInternalSlot(Q.OCCLUDER_MATERIAL,pe),t(.5,q.OccludeAndTransparentStencil,(()=>this._renderInternalSlot(Q.TRANSPARENT_OCCLUDER_MATERIAL,pe)),!1,!1),pe.length=0),this._materialRenderers.forEach(((r,t)=>{t&&t.isVisible()&&(t.renderOccluded===q.OccludeAndTransparent||t.renderOccluded===q.Transparent||t.renderOccluded===q.Opaque)&&(e|=t.renderOccluded,ce.push(t))}));const s=this._renderPlugins.renderOccludedFlags;if(e|=s,!e)return;const i=e=>{this._renderContext.renderOccludedMask=e,s>q.Occlude&&this._renderSlot(Q.OCCLUDED_TERRAIN),this._renderInternalSlot(Q.OPAQUE_MATERIAL,ce),this._renderInternalSlot(Q.TRANSPARENT_MATERIAL,ce),this._renderInternalSlot(Q.TRANSPARENT_DEPTH_WRITE_DISABLED_MATERIAL,ce),this._renderContext.resetRenderOccludedMask()};this._renderContext.pass=W.MATERIAL,t(.5,q.OccludeAndTransparent,(()=>i(q.OccludeAndTransparent)),!0,D.OutlineVisualElementMask),t(.5,q.Transparent,(()=>i(q.Transparent)),!0,D.OutlineVisualElementMask),t(1,q.Opaque,(()=>i(q.Opaque)),!0,D.OutlineVisualElementMask),ce.length=0}_renderAntiAliasing(e,r){if(e===x.SMAA){if(this._smaaPass.enable((()=>this._requestRender()))&&h(r))return this._smaaPass.render(r),!0}else this._smaaPass.disable();return!1}_ensureCameraBindParameters(e,r){this._bindParameters.camera=e,this._bindParameters.contentCamera=r}_ensureBindParameters(e,r){this._ensureCameraBindParameters(e,r);const t=this._renderContext.offscreenRenderingHelper;this._bindParameters.hudVisibilityTexture=t.hudVisibilityTexture,this._bindParameters.highlightDepthTexture=t.depthTexture??this._getFallbackDepthTexture()}_ensureBindParametersSSR(){this.hasWaterReflection?(this._renderContext.lastFrameCamera.equals(this._bindParameters.camera)?this._reprojectionMatrix=E:(R(ge,this._bindParameters.camera.viewMatrix),R(me,this._bindParameters.camera.projectionMatrix),A(ue,ge,me),A(ue,this._renderContext.lastFrameCamera.viewMatrix,ue),A(ue,this._renderContext.lastFrameCamera.projectionMatrix,ue),this._reprojectionMatrix=ue),this._bindParameters.ssr.lastFrameColorTexture=this._offscreenRendering.lastFrameColorTexture):this._bindParameters.ssr.lastFrameColorTexture=null,this._bindParameters.ssr.enabled=this.hasWaterReflection}_renderInternalSlot(e,r){let t=!1;return this._bindParameters.slot=e,h(r)?r.forEach((e=>{if(!e.shouldRender(this._renderContext))return;const r=this._materialRenderers.get(e);h(r)&&(t=r.render(this._renderContext.pass,this._bindParameters)||t)})):this._materialRenderers.forEach(((e,r)=>{r.shouldRender(this._renderContext)&&e.render(this._renderContext.pass,this._bindParameters)&&(t=!0)})),t}_getFallbackDepthTexture(){return this._fallbackDepthStencilTexture||(this._fallbackDepthStencilTexture=F(this._rctx)),this._fallbackDepthStencilTexture}get gpuMemoryUsage(){return{offscreen:this._offscreenRendering?.gpuMemoryUsage??0,highlights:(this._highlight?.gpuMemoryUsage??0)+(this._shadowHighlight?.gpuMemoryUsage??0),shadows:this._shadowMap?.gpuMemoryUsage??0,ssao:this._ssaoHelper?.gpuMemoryUsage??0}}get test(){const e=this;return{offscreen:this._offscreenRendering,shadowMap:this._shadowMap,ssao:this._ssaoHelper,highlight:this._highlight,lighting:this._bindParameters.lighting,materialRenderers:this._materialRenderers,shadowAccumulator:this._shadowAccumulator,getFramebufferTexture:r=>{switch(r){case le.Color:return e._offscreenRendering.colorTexture;case le.LinearDepth:return e._offscreenRendering.linearDepthTexture;case le.Normals:return e._offscreenRendering.normalTexture;case le.ShadowMap:return e._shadowMap.depthTexture;case le.HudVisibility:return e._offscreenRendering.hudVisibilityTexture;case le.Highlight:return e._offscreenRendering.highlightTexture}}}}};var le;e([u()],_e.prototype,"_shadowAccumulator",void 0),e([u()],_e.prototype,"_smaaPass",void 0),e([u()],_e.prototype,"_antialiasing",void 0),e([u()],_e.prototype,"_edgeView",void 0),e([u()],_e.prototype,"updating",null),e([u()],_e.prototype,"isCameraFinal",null),_e=e([f("esri.views.3d.webgl-engine.lib.Renderer")],_e),function(e){e[e.Color=0]="Color",e[e.LinearDepth=1]="LinearDepth",e[e.Normals=2]="Normals",e[e.ShadowMap=3]="ShadowMap",e[e.HudVisibility=4]="HudVisibility",e[e.Highlight=5]="Highlight"}(le||(le={}));const ce=[],pe=[],me=P(),ge=P(),ue=P();export{le as FramebufferId,_e as Renderer};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{releaseMaybe as e,isNone as r}from"../../../../../core/maybe.js";import t from"../../../../../core/PooledArray.js";import{t as s,e as i}from"../../../../../chunks/mat3.js";import{c as n}from"../../../../../chunks/mat3f32.js";import{c as o,s as a}from"../../../../../chunks/vec3.js";import h from"../../../support/debugFlags.js";import{doublePrecisionRequiresObfuscation as l}from"../../core/shaderLibrary/util/DoublePrecision.glsl.js";import{TwoVectorPosition as d}from"../../core/util/TwoVectorPosition.js";import{EdgeDrawParameters as c}from"./EdgeShaderParameters.js";import{EdgeShaderTechnique as u}from"./EdgeShaderTechnique.js";import{EdgeShaderTechniqueConfiguration as m}from"./EdgeShaderTechniqueConfiguration.js";import{Transparency as f}from"./interfaces.js";import{EdgeUtilMode as g}from"../../shaders/sources/edgeRenderer/EdgeUtil.glsl.js";import{PrimitiveType as b}from"../../../../webgl/enums.js";const T=8,_=128,R={type:"uber",hasSlicePlane:!1,strokesTexture:null,legacy:!0};class
|
|
5
|
+
import{releaseMaybe as e,isNone as r}from"../../../../../core/maybe.js";import t from"../../../../../core/PooledArray.js";import{t as s,e as i}from"../../../../../chunks/mat3.js";import{c as n}from"../../../../../chunks/mat3f32.js";import{c as o,s as a}from"../../../../../chunks/vec3.js";import h from"../../../support/debugFlags.js";import{doublePrecisionRequiresObfuscation as l}from"../../core/shaderLibrary/util/DoublePrecision.glsl.js";import{TwoVectorPosition as d}from"../../core/util/TwoVectorPosition.js";import{EdgeDrawParameters as c}from"./EdgeShaderParameters.js";import{EdgeShaderTechnique as u}from"./EdgeShaderTechnique.js";import{EdgeShaderTechniqueConfiguration as m}from"./EdgeShaderTechniqueConfiguration.js";import{Transparency as f}from"./interfaces.js";import{EdgeUtilMode as g}from"../../shaders/sources/edgeRenderer/EdgeUtil.glsl.js";import{PrimitiveType as b}from"../../../../webgl/enums.js";const T=8,_=128,R={type:"uber",hasSlicePlane:!1,strokesTexture:null,legacy:!0,spherical:!0};class p{constructor(){this._value=0}get value(){return this._value}increment(){this._value++}decrement(){this._value--}}const A={solid:g.SOLID,sketch:g.SKETCH,uber:g.MIXED};class P{constructor(e,r,s){this.rctx=e,this.shaderTechniqueRepository=r,this._configuration=new m,this.refCount=new p,this.renderables=new Set,this.sortedRenderables={[f.TRANSPARENT]:{[f.TRANSPARENT]:new t,[f.OPAQUE]:new t},[f.OPAQUE]:{[f.TRANSPARENT]:new t,[f.OPAQUE]:new t}},this._renderablesDirty=!1,this._drawParameters=new c,this._settings={...R,...s},this.key=P.getKey(this._settings.type,this._settings.hasSlicePlane,this._settings.legacy);const i=this._settings.strokesTexture.variants;this.writerSettings={variants:i,reducedPrecision:h.TESTS_DISABLE_OPTIMIZATIONS},this._configuration.legacy=this._settings.legacy,this._configuration.mode=A[this._settings.type],this._configuration.silhouette=!1,this._configuration.antialiasing=!!this.rctx.capabilities.blendMinMax,this._configuration.hasSlicePlane=this._settings.hasSlicePlane,this._configuration.doublePrecisionRequiresObfuscation=l(e),this._configuration.spherical=s.spherical}dispose(){this._technique=e(this._technique)}addRenderable(e){this.renderables.add(e),this._renderablesDirty=!0}removeRenderable(e){this.renderables.delete(e),this._renderablesDirty=!0}setRenderablesDirty(){this._renderablesDirty=!0}forEachRenderable(e,r){this._renderablesDirty&&this._sortRenderables(),this.sortedRenderables[r][f.TRANSPARENT].forAll(e),this.sortedRenderables[r][f.OPAQUE].forAll(e)}updateTechnique(e,r){return this._configuration.hasMultipassTerrain=!!e.multipassTerrain.enabled,this._configuration.cullAboveGround=!!e.multipassTerrain.cullAboveGround,this._configuration.silhouette=r,this._technique=this.shaderTechniqueRepository.releaseAndAcquire(u,this._configuration,this._technique),this._technique}bindRegularEdges(e,r){return this.rctx.bindTechnique(this.updateTechnique(r,!1),e,r)}bindSilhouetteEdges(e,r){return this.rctx.bindTechnique(this.updateTechnique(r,!0),e,r)}renderRegularEdges(e,r,t,s,i){this._render(e,r,r.regular.vao,t,s,i)}renderSilhouetteEdges(e,r,t,s,i){this._render(e,r,r.silhouette.vao,t,s,i)}_render(e,r,t,s,i,n){this._bindDraw(e,r,s,n),this.rctx.bindVAO(t),this.rctx.capabilities.instancing.drawArraysInstanced(b.TRIANGLE_FAN,0,4,i)}_bindDraw(e,r,t,n){if(r.components.buffer.textureBuffer.bind(e,E,S),"origin"in r.transform)e.setUniformMatrix4fv("localView",n),e.setUniformMatrix4fv("model",r.transform.modelMatrix),o(this._drawParameters.slicePlaneLocalOrigin,r.transform.origin.vec3);else{const e=new d(r.transform.position),n=s(N,i(N,r.transform.rotationScale));this._drawParameters.transformWorldFromModelTL=e.low,this._drawParameters.transformWorldFromModelTH=e.high,this._drawParameters.transformWorldFromModelRS=r.transform.rotationScale,this._drawParameters.transformNormalGlobalFromModel=n;const o=t.camera.viewInverseTransposeMatrix;a(this._drawParameters.slicePlaneLocalOrigin,o[3],o[7],o[11])}e.bindDraw(this._drawParameters,t),"uber"!==this._settings.type&&"sketch"!==this._settings.type||this._setSketchUniforms(e)}_setSketchUniforms(e){const t=this._settings.strokesTexture,s=t.texture;r(s)||(e.bindTexture("strokesTexture",s),e.setUniform2f("strokesTextureScale",1/s.descriptor.width,1/s.descriptor.height),e.setUniform1f("strokesLog2Resolution",Math.log2(t.resolution)),e.setUniform1f("strokesNormalizationScale",t.normalizationScale),e.setUniform1f("strokesAmplitude",t.amplitude),e.setUniform1f("strokeVariants",t.variants))}_sortRenderables(){this._renderablesDirty=!1,this.sortedRenderables[f.TRANSPARENT][f.TRANSPARENT].clear(),this.sortedRenderables[f.TRANSPARENT][f.OPAQUE].clear(),this.sortedRenderables[f.OPAQUE][f.TRANSPARENT].clear(),this.sortedRenderables[f.OPAQUE][f.OPAQUE].clear(),this.renderables.forEach((e=>{e.objectTransparency!==f.INVISIBLE&&e.edgeTransparency!==f.INVISIBLE&&this.sortedRenderables[e.objectTransparency][e.edgeTransparency].push(e)}));const e=(e,r)=>"origin"in e.transform&&"origin"in r.transform?e.transform.origin.id<r.transform.origin.id?-1:e.transform.origin.id>r.transform.origin.id?1:0:0;this.sortedRenderables[f.TRANSPARENT][f.TRANSPARENT].sort(e),this.sortedRenderables[f.TRANSPARENT][f.OPAQUE].sort(e),this.sortedRenderables[f.OPAQUE][f.TRANSPARENT].sort(e),this.sortedRenderables[f.OPAQUE][f.OPAQUE].sort(e)}static getKey(e,r,t){return`edges-t:${e}:${r}:${t}`}}const E="componentDataTex",S="componentDataTexInvDim",N=n();export{_ as EXTENSION_LENGTH_OFFSET,P as EdgeRenderer,T as LINE_WIDTH_FRACTION_FACTOR,S as componentDataInvDimName,E as componentDataTexName};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../../chunks/tslib.es6.js";import{parameter as o}from"../../core/shaderTechnique/ShaderTechniqueConfiguration.js";import{DefaultTechniqueConfiguration as i}from"../../materials/DefaultTechniqueConfiguration.js";import{EdgeUtilMode as t}from"../../shaders/sources/edgeRenderer/EdgeUtil.glsl.js";class s extends i{constructor(){super(...arguments),this.mode=t.SOLID,this.hasSlicePlane=!1,this.silhouette=!1,this.legacy=!1,this.antialiasing=!1,this.doublePrecisionRequiresObfuscation=!1,this.hasMultipassTerrain=!1,this.cullAboveGround=!1}}e([o({count:t.COUNT})],s.prototype,"mode",void 0),e([o()],s.prototype,"hasSlicePlane",void 0),e([o()],s.prototype,"silhouette",void 0),e([o()],s.prototype,"legacy",void 0),e([o()],s.prototype,"antialiasing",void 0),e([o()],s.prototype,"doublePrecisionRequiresObfuscation",void 0),e([o()],s.prototype,"hasMultipassTerrain",void 0),e([o()],s.prototype,"cullAboveGround",void 0);export{s as EdgeShaderTechniqueConfiguration};
|
|
5
|
+
import{_ as e}from"../../../../../chunks/tslib.es6.js";import{parameter as o}from"../../core/shaderTechnique/ShaderTechniqueConfiguration.js";import{DefaultTechniqueConfiguration as i}from"../../materials/DefaultTechniqueConfiguration.js";import{EdgeUtilMode as t}from"../../shaders/sources/edgeRenderer/EdgeUtil.glsl.js";class s extends i{constructor(){super(...arguments),this.mode=t.SOLID,this.hasSlicePlane=!1,this.silhouette=!1,this.legacy=!1,this.antialiasing=!1,this.doublePrecisionRequiresObfuscation=!1,this.hasMultipassTerrain=!1,this.cullAboveGround=!1,this.spherical=!1}}e([o({count:t.COUNT})],s.prototype,"mode",void 0),e([o()],s.prototype,"hasSlicePlane",void 0),e([o()],s.prototype,"silhouette",void 0),e([o()],s.prototype,"legacy",void 0),e([o()],s.prototype,"antialiasing",void 0),e([o()],s.prototype,"doublePrecisionRequiresObfuscation",void 0),e([o()],s.prototype,"hasMultipassTerrain",void 0),e([o()],s.prototype,"cullAboveGround",void 0),e([o()],s.prototype,"spherical",void 0);export{s as EdgeShaderTechniqueConfiguration};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{_ as e}from"../../../../../chunks/tslib.es6.js";import t from"../../../../../core/Accessor.js";import{equals as r}from"../../../../../core/arrayUtils.js";import s from"../../../../../core/Logger.js";import{clamp as o}from"../../../../../core/mathUtils.js";import{disposeMaybe as n,destroyMaybe as i,isNone as a,isSome as c}from"../../../../../core/maybe.js";import{property as d}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/has.js";import"../../../../../core/accessorSupport/ensureType.js";import{subclass as l}from"../../../../../core/accessorSupport/decorators/subclass.js";import{f as g,t as m,e as u}from"../../../../../chunks/mat3.js";import{c as h}from"../../../../../chunks/mat3f64.js";import{I as p,c as f}from"../../../../../chunks/mat4f64.js";import{s as b,c as y,v as j,e as O}from"../../../../../chunks/vec3.js";import{c as v}from"../../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as w}from"../../../../../core/support/WatchUpdatingTracking.js";import{g as E,d as R}from"../../../../../chunks/sphere.js";import{c as x}from"../../../../../chunks/vec33.js";import{TwoVectorPosition as T}from"../../core/util/TwoVectorPosition.js";import{GridLocalOriginFactory as _}from"../GridLocalOriginFactory.js";import{applyToModelMatrix as M}from"../localOriginHelper.js";import{LocalOriginManager as C}from"../LocalOriginManager.js";import{Object3D as P}from"../Object3D.js";import{VertexAttribute as S}from"../VertexAttribute.js";import{VertexLayout as D,EdgeShaderAttributeLocations as A,glVertexLayout as k,EdgeInputBufferLayout as I}from"./bufferLayouts.js";import{RegularEdgeBufferWriter as B,SilhouetteEdgeBufferWriter as L}from"./edgeBufferWriters.js";import{EdgeType as U}from"./edgePreprocessing.js";import{EdgeRenderer as V,LINE_WIDTH_FRACTION_FACTOR as N,EXTENSION_LENGTH_OFFSET as H}from"./EdgeRenderer.js";import{EdgePassParameters as z}from"./EdgeShaderParameters.js";import W from"./EdgeWorkerHandle.js";import{Transparency as q}from"./interfaces.js";import{generateStrokesTexture as K}from"./strokes.js";import{determineRendererType as G,determineEdgeTransparency as F,determineObjectTransparency as Q,fillComponenBufferIndices as J,computeEdgeCount as X}from"./util.js";import{BufferManager as Y}from"../TextureBackedBuffer/BufferManager.js";import{BufferObject as Z}from"../../../../webgl/BufferObject.js";import{Usage as $}from"../../../../webgl/enums.js";import{VertexArrayObject as ee}from"../../../../webgl/VertexArrayObject.js";const te=s.getLogger("esri.views.3d.webgl-engine.lib.edgeRendering.EdgeView");let re=class extends t{constructor(e){super(e),this.updatingHandles=new w,this.perObjectData=new Map,this.perObjectDataEvictionCache=new Set,this.renderers=new Map,this.numberOfRenderedEdges={[q.TRANSPARENT]:0,[q.OPAQUE]:0},this.gpuMemoryUsage=0,this.workerAbort=new AbortController,this.tmpModelPosition=v(),this.localOrigins=new C(new _(e.renderSR))}initialize(){this.worker=new W(this.schedule),this.componentColorManager=new Y(this.rctx,2);const e=D.createBuffer(4);for(let t=0;t<4;t++)e.sideness.set(t,0,0===t||3===t?0:1),e.sideness.set(t,1,0===t||1===t?0:1);this.verticesBufferObject=Z.createVertex(this.rctx,$.STATIC_DRAW,e.buffer)}destroy(){this.destroyed||(this.perObjectData.forEach((e=>this._discardObjectEntry(e))),this.perObjectData.clear(),this.strokesTexture=n(this.strokesTexture),this.componentColorManager=i(this.componentColorManager),this.workerAbort.abort(),this.worker.destroy(),this.verticesBufferObject=n(this.verticesBufferObject),this.renderers.clear(),this.updatingHandles.destroy())}get updating(){return this.updatingHandles.updating}get usedMemory(){return this.gpuMemoryUsage}get numberOfRenderedPrimitives(){return this.numberOfRenderedEdges[q.TRANSPARENT]+this.numberOfRenderedEdges[q.OPAQUE]}shouldRender(){return this.renderers.size>0}async addComponentObject(e,t,r,s,o,n,i,a){if(this.hasObject(e))return this.getObjectMemoryUsage(e);let c;const d=new ne(new Promise((e=>c=e)),r.center,r.radius);this.perObjectData.set(e,d);const l=await this.updatingHandles.addPromise(this._addComponentGeometry(t,d,s,o,n,i,a));return this.setNeedsRender(),c(),l}async addOrUpdateObject3D(e,t,r,s){if(this.destroyed)return void te.warn("Attempt to add an object to a destroyed instance");const o=this.perObjectData.get(e);let n;o?.renderables.length>0&&this.perObjectDataEvictionCache.add(o);const i=e.boundingVolumeWorldSpace.bounds,a=new ne(new Promise((e=>n=e)),E(i),R(i));this.perObjectData.set(e,a);const c=new Array;if(r.mergeGeometries&&e.geometries.length>1&&oe(e))c.push(this._addObjectMergedGeometries(e,a,t,r,s));else for(let d=0;d<e.geometries.length;d++){const o=e.geometryRecords[d];if(!o.material.supportsEdges)continue;const n=e.geometries[d];c.push(this._addGeometry(e,a,n,o,t[0],r,s))}await this.updatingHandles.addPromise(Promise.all(c)),this.perObjectDataEvictionCache.delete(a),this._discardObjectEntry(o),this.setNeedsRender(),n()}_discardObjectEntry(e){e&&(e.renderables.length&&(e.renderables.forEach((e=>this._removeRenderable(e))),this.setNeedsRender()),e.loaded=null)}hasObject(e){return this.perObjectData.has(e)}async updateAllComponentOpacities(e,t){const r=t instanceof Array?e=>t[e]:()=>t;(await this.updatingHandles.addPromise(this._getObjectEntry(e))).renderables.forEach((e=>{const t=e.components.meta.length;for(let s=0;s<t;s++){const t=r(s),o=e.components.meta[s],n=o.index;o.material.opacity=t,e.components.buffer.textureBuffer.setDataElement(n,1,3,255*t)}this._updateTransparency(e)})),this.setNeedsRender()}async getObjectMemoryUsage(e){return(await this._getObjectEntry(e)).renderables.reduce(((e,t)=>e+t.statistics.gpuMemoryUsage),0)}async updateAllComponentMaterials(e,t,r,s){const o=e instanceof P,n=!!r.hasSlicePlane,i=G(t),a=V.getKey(i,n,o);(await this.updatingHandles.addPromise(this._getObjectEntry(e))).renderables.forEach((e=>{if(a!==e.rendererKey){const t=this.renderers.get(e.rendererKey),r=this._acquireRenderer(i,n,o);t.removeRenderable(e),t.refCount.decrement(),e.rendererKey=a,r.addRenderable(e)}for(let r=0;r<t.length;r++)e.components.meta[r].material=t[r];s&&this._updateComponentBuffer(e.components),this._updateTransparency(e)})),this.setNeedsRender()}async updateObjectVisibility(e,t){(await this.updatingHandles.addPromise(this._getObjectEntry(e))).renderables.forEach((e=>e.visible=t)),this.setNeedsRender()}removeObject(e){const t=this.perObjectData.get(e);t&&(this.perObjectData.delete(e),this._discardObjectEntry(t))}async _getObjectEntry(e){const t=this.perObjectData.get(e);if(!t)throw"no object";return await t.loaded,t}removeAll(){this.perObjectData.forEach(((e,t)=>this.removeObject(t)))}render(e,t){if(this.numberOfRenderedEdges[t]=0,a(this.componentColorManager))return;this.localOrigins.updateViewMatrices(e.camera.viewMatrix);const r=e.camera.viewInverseTransposeMatrix,s=v(),o=new T;let n=0,i=0;if(this.renderers.forEach((r=>{0===r.refCount.value?(this.renderers.delete(r.key),r.dispose()):r.forEachRenderable((t=>{t.visible&&(n+=t.statistics.averageEdgeLength,i++,t.regular&&r.updateTechnique(e,!1),t.silhouette&&r.updateTechnique(e,!0))}),t)})),this.componentColorManager.garbageCollect(),this.componentColorManager.updateTextures(),0===i)return;const c=40*n/i,d=e.camera.perScreenPixelRatio,l=new z(c,d,t);b(s,r[3],r[7],r[11]),o.set(s),y(l.transformWorldFromViewTH,o.high),y(l.transformWorldFromViewTL,o.low),g(l.transformViewFromCameraRelativeRS,e.camera.viewMatrix),m(ie,l.transformViewFromCameraRelativeRS),u(l.transformNormalViewFromGlobal,ie),l.transformProjFromView=e.camera.projectionMatrix,this._updateObjectCameraDistances(e),this.renderers.forEach((t=>{this._renderRegularEdges(t,e,l),this._renderSilhouetteEdges(t,e,l)}))}_updateTransparency(e){const t=F(e.components.meta),r=Q(e.components.meta);t===e.edgeTransparency&&r===e.objectTransparency||(e.edgeTransparency=t,e.objectTransparency=r,this.renderers.get(e.rendererKey).setRenderablesDirty())}_computeModelTransformWithLocalOrigin(e,t,r){if(e.getCombinedStaticTransformation(t,r),c(t.origin))this.localOrigins.register(t.origin);else{const e=b(this.tmpModelPosition,r[12],r[13],r[14]);t.origin=this.localOrigins.acquire(e)}return M(t.origin.vec3,r),t.origin}_updateComponentBuffer(e){const{meta:t,buffer:r}=e;for(let s=0;s<t.length;s++){const e=t[s].material,n=t[s].index,i=o(Math.round(e.size*N),0,255),a=o(e.extensionLength,-H,255-H)+H,c="solid"===e.type?U.SOLID:U.SKETCH,d=255*e.opacity,l=e.color,g=255*l[0],m=255*l[1],u=255*l[2],h=255*l[3];r.textureBuffer.setData(n,0,g,m,u,h),r.textureBuffer.setData(n,1,i,a,c,d)}}_createComponentBuffers(e){if(a(this.componentColorManager))return null;const t=new Array,r=this.componentColorManager.getBuffer(e.length);for(let o=0;o<e.length;o++){const s=e[o],n=r.acquireIndex();t.push({index:n,material:s})}const s={meta:t,buffer:r};return this._updateComponentBuffer(s),s}_extractEdges(e,t,r,s,o,n=o.length){return this.worker.process({data:t,indices:o,indicesLength:n,writerSettings:e,skipDeduplicate:r},this.workerAbort.signal,s)}_createEdgeResources(e){const t={};if(a(this.verticesBufferObject))return t;if(e.regular.lodInfo.lengths.length>0){const r=new ee(this.rctx,A,{vertices:k,instances:B.glLayout},{vertices:this.verticesBufferObject,instances:Z.createVertex(this.rctx,$.STATIC_DRAW,e.regular.instancesData.buffer)});t.regular={vao:r,lod:e.regular.lodInfo}}if(e.silhouette.lodInfo.lengths.length>0){const r=new ee(this.rctx,A,{vertices:k,instances:L.glLayout},{vertices:this.verticesBufferObject,instances:Z.createVertex(this.rctx,$.STATIC_DRAW,e.silhouette.instancesData.buffer)});t.silhouette={vao:r,lod:e.silhouette.lodInfo}}return t}async _addGeometry(e,t,r,s,o,n,i){const a=r.vertexAttributes.get(S.POSITION),c=r.indices.get(S.POSITION),d=f(),l={position:a,indices:c,modelTransform:d,origin:this._computeModelTransformWithLocalOrigin(e,s,d)};return this._addPositionData(t,l,r.edgeIndicesLength,o,n,i)}async _addPositionData(e,t,r,s,o,n=!1){if(null==e.loaded)return;const i=this._createComponentBuffers([s]);if(a(i)||r<=0)return;const c=this._acquireRenderer(s.type,!!o.hasSlicePlane,!0),{modelTransform:d,origin:l}=t,g=t.indices,m=t.position,u=m.data.length/m.size,h=I.createBuffer(u);for(let a=0;a<u;a++)h.position.set(a,0,m.data[a*m.size+0]),h.position.set(a,1,m.data[a*m.size+1]),h.position.set(a,2,m.data[a*m.size+2]);J(i.meta,[0,h.componentIndex.count],h.componentIndex);const p=await this.updatingHandles.addPromise(this._extractEdges(c.writerSettings,h,!1,n,g,r));if(null==e.loaded)return;const{regular:f,silhouette:b}=this._createEdgeResources(p),y=(f?f.vao.size:0)+(b?b.vao.size:0),j={regular:f,silhouette:b,transform:{modelMatrix:d,origin:l},statistics:{gpuMemoryUsage:y,externalMemoryUsage:!1,averageEdgeLength:p.averageEdgeLength},components:i,visible:!0,edgeTransparency:F(i.meta),objectTransparency:Q(i.meta),distanceToCamera:0,rendererKey:c.key};e.renderables.push(j),c.addRenderable(j),this.gpuMemoryUsage+=y}async _addComponentGeometry(e,t,r,s,o,n,i){if(null==t.loaded)return 0;const c=this._createComponentBuffers(n);if(a(c))return 0;const d=G(n),l=this._acquireRenderer(d,i.hasSlicePlane||!1,!1),g=I.createBuffer(r.count);x(g.position,r),J(c.meta,o,g.componentIndex,s);const m=!0,u=l.writerSettings,h=await this.updatingHandles.addPromise(this._extractEdges(u,g,m,!1,s));if(null==t.loaded)return 0;const{regular:p,silhouette:f}=this._createEdgeResources(h),b=(p?p.vao.size:0)+(f?f.vao.size:0),y={regular:p,silhouette:f,transform:e,statistics:{gpuMemoryUsage:b,externalMemoryUsage:!0,averageEdgeLength:h.averageEdgeLength},components:c,visible:!0,edgeTransparency:F(c.meta),objectTransparency:Q(c.meta),distanceToCamera:0,rendererKey:l.key};return t.renderables.push(y),l.addRenderable(y),b}async _addObjectMergedGeometries(e,t,r,s,o){const n=new Map;let i=0,a=null,c=0;for(let f=0;f<e.geometries.length;f++){const t=e.geometries[f],r=e.geometryRecords[f];if(!r.material.supportsEdges)continue;!a&&r.origin&&(a=r);const s=t.vertexAttributes.get(S.POSITION);c+=s.data.length/s.size,i+=t.edgeIndicesLength}const d=c>=65536?Uint32Array:Uint16Array,l=i?new d(i):null,g=[];let m=0;for(let f=0;f<e.geometries.length;f++){const t=e.geometries[f];if(!e.geometryRecords[f].material.supportsEdges)continue;const r=t.vertexAttributes.get(S.POSITION),s=t.indices.get(S.POSITION);let o=n.get(r.data);if(null==o){o=g.length/3;for(let e=0;e<r.data.length;e+=r.size)g.push(r.data[e+0]),g.push(r.data[e+1]),g.push(r.data[e+2]);n.set(r.data,o)}if(s)for(let e=0;e<t.edgeIndicesLength;e++)l[m++]=o+s[e]}const u=a||e.geometryRecords[0],h=f(),p=this._computeModelTransformWithLocalOrigin(e,u,h);for(let f=0;f<e.geometryRecords.length;f++)e.geometryRecords[f].origin=p;const b={position:{data:g,size:3},indices:l,modelTransform:h,origin:p};await this.updatingHandles.addPromise(this._addPositionData(t,b,l.length,r[0],s,o))}_acquireRenderer(e,t,r){const s=V.getKey(e,t,r);let o=this.renderers.get(s);return a(this.strokesTexture)&&(this.strokesTexture=K(this.rctx)),o||(o=new V(this.rctx,this.techniqueRepository,{type:e,hasSlicePlane:t,strokesTexture:this.strokesTexture,legacy:r}),this.renderers.set(s,o)),o.refCount.increment(),o}_removeRenderable(e){se(e);const t=this.renderers.get(e.rendererKey);if(t){t.removeRenderable(e),t.refCount.decrement(),"origin"in e.transform&&this.localOrigins.release(e.transform.origin),this.gpuMemoryUsage-=e.statistics.externalMemoryUsage?0:e.statistics.gpuMemoryUsage;for(const t of e.components.meta)e.components.buffer.releaseIndex(t.index)}}_updateObjectCameraDistances(e){const t=e.camera.eye,r=e.camera.viewForward,s=v(),o=e=>{const{center:o,radius:n}=e;j(s,o,t);const i=O(s,r),a=i<-n?1/0:i<n?0:i-n;e.renderables.forEach((e=>e.distanceToCamera=a))};this.perObjectData.forEach(o),this.perObjectDataEvictionCache.forEach(o)}_renderRegularEdges(e,t,r){const s=e.bindRegularEdges(r,t),o=r.transparency;e.forEachRenderable((n=>{if(!n.visible||!n.regular)return;const i=X(n.regular.lod.lengths,n.distanceToCamera,r),a="origin"in n.transform?this.localOrigins.getViewMatrix(n.transform.origin):p;e.renderRegularEdges(s,n,t,i,a),this.numberOfRenderedEdges[o]+=i}),o)}_renderSilhouetteEdges(e,t,r){const s=e.bindSilhouetteEdges(r,t),o=r.transparency;e.forEachRenderable((n=>{if(!n.visible||!n.silhouette)return;const i=X(n.silhouette.lod.lengths,n.distanceToCamera,r),a="origin"in n.transform?this.localOrigins.getViewMatrix(n.transform.origin):p;e.renderSilhouetteEdges(s,n,t,i,a),this.numberOfRenderedEdges[o]+=i}),o)}};function se(e){e.regular&&(e.regular.vao.vertexBuffers.instances.dispose(),e.regular.vao.dispose(!1),e.regular.vao=null),e.silhouette&&(e.silhouette.vao.vertexBuffers.instances.dispose(),e.silhouette.vao.dispose(!1),e.silhouette.vao=null)}function oe(e){let t=null,s=null;for(let o=0;o<e.geometries.length;o++){const n=e.geometryRecords[o];if(n.material.supportsEdges){if(t){if(!r(t,n.transformation))return!1}else t=n.transformation;if(!s&&c(n.origin))s=n;else if(c(s?.origin)&&c(n.origin)&&s.origin.id!==n.origin.id)return!1}}return!0}e([d({constructOnly:!0})],re.prototype,"rctx",void 0),e([d({constructOnly:!0})],re.prototype,"renderSR",void 0),e([d({constructOnly:!0})],re.prototype,"techniqueRepository",void 0),e([d({constructOnly:!0})],re.prototype,"setNeedsRender",void 0),e([d({constructOnly:!0})],re.prototype,"schedule",void 0),e([d({readOnly:!0})],re.prototype,"updatingHandles",void 0),e([d({readOnly:!0})],re.prototype,"updating",null),re=e([l("esri.views.3d.webgl-engine.lib.edgeRendering.EdgeView")],re);class ne{constructor(e,t,r){this.center=t,this.radius=r,this.renderables=new Array,this.loaded=e,this.loaded.then((()=>{null!=this.loaded&&(this.loaded=!0)}))}}const ie=h();export{re as EdgeView};
|
|
5
|
+
import{_ as e}from"../../../../../chunks/tslib.es6.js";import t from"../../../../../core/Accessor.js";import{equals as r}from"../../../../../core/arrayUtils.js";import s from"../../../../../core/Logger.js";import{clamp as o}from"../../../../../core/mathUtils.js";import{disposeMaybe as n,destroyMaybe as i,isNone as a,isSome as c}from"../../../../../core/maybe.js";import{createAbortError as d}from"../../../../../core/promiseUtils.js";import{property as l}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/has.js";import"../../../../../core/accessorSupport/ensureType.js";import{subclass as m}from"../../../../../core/accessorSupport/decorators/subclass.js";import{f as g,t as u,e as h}from"../../../../../chunks/mat3.js";import{c as p}from"../../../../../chunks/mat3f64.js";import{I as f,c as b}from"../../../../../chunks/mat4f64.js";import{s as y,c as j,v as O,e as v}from"../../../../../chunks/vec3.js";import{c as w}from"../../../../../chunks/vec3f64.js";import{WatchUpdatingTracking as E}from"../../../../../core/support/WatchUpdatingTracking.js";import{g as R,d as x}from"../../../../../chunks/sphere.js";import{c as T}from"../../../../../chunks/vec33.js";import{ViewingMode as _}from"../../../../ViewingMode.js";import{encodeElevationOffset as M}from"../../collections/Component/Material/shader/ComponentData.glsl.js";import{TwoVectorPosition as C}from"../../core/util/TwoVectorPosition.js";import{GridLocalOriginFactory as D}from"../GridLocalOriginFactory.js";import{applyToModelMatrix as P}from"../localOriginHelper.js";import{LocalOriginManager as S}from"../LocalOriginManager.js";import{Object3D as A}from"../Object3D.js";import{VertexAttribute as k}from"../VertexAttribute.js";import{VertexLayout as B,EdgeShaderAttributeLocations as I,glVertexLayout as U,EdgeInputBufferLayout as L}from"./bufferLayouts.js";import{RegularEdgeBufferWriter as V,SilhouetteEdgeBufferWriter as N}from"./edgeBufferWriters.js";import{EdgeType as H}from"./edgePreprocessing.js";import{EdgeRenderer as z,LINE_WIDTH_FRACTION_FACTOR as W,EXTENSION_LENGTH_OFFSET as q}from"./EdgeRenderer.js";import{EdgePassParameters as G}from"./EdgeShaderParameters.js";import K from"./EdgeWorkerHandle.js";import{Transparency as F}from"./interfaces.js";import{generateStrokesTexture as Q}from"./strokes.js";import{determineRendererType as J,determineEdgeTransparency as X,determineObjectTransparency as Y,fillComponenBufferIndices as Z,computeEdgeCount as $}from"./util.js";import{BufferManager as ee}from"../TextureBackedBuffer/BufferManager.js";import{BufferObject as te}from"../../../../webgl/BufferObject.js";import{Usage as re}from"../../../../webgl/enums.js";import{VertexArrayObject as se}from"../../../../webgl/VertexArrayObject.js";const oe=s.getLogger("esri.views.3d.webgl-engine.lib.edgeRendering.EdgeView");let ne=class extends t{constructor(e){super(e),this.updatingHandles=new E,this.perObjectData=new Map,this.perObjectDataEvictionCache=new Set,this.renderers=new Map,this.numberOfRenderedEdges={[F.TRANSPARENT]:0,[F.OPAQUE]:0},this.gpuMemoryUsage=0,this.workerAbort=new AbortController,this.tmpModelPosition=w(),this.localOrigins=new S(new D(e.renderSR))}initialize(){this.worker=new K(this.schedule),this.componentColorManager=new ee(this.rctx,3);const e=B.createBuffer(4);for(let t=0;t<4;t++)e.sideness.set(t,0,0===t||3===t?0:1),e.sideness.set(t,1,0===t||1===t?0:1);this.verticesBufferObject=te.createVertex(this.rctx,re.STATIC_DRAW,e.buffer)}destroy(){this.destroyed||(this.perObjectData.forEach((e=>this._discardObjectEntry(e))),this.perObjectData.clear(),this.strokesTexture=n(this.strokesTexture),this.componentColorManager=i(this.componentColorManager),this.workerAbort.abort(),this.worker.destroy(),this.verticesBufferObject=n(this.verticesBufferObject),this.renderers.clear(),this.updatingHandles.destroy())}get updating(){return this.updatingHandles.updating}get usedMemory(){return this.gpuMemoryUsage}get numberOfRenderedPrimitives(){return this.numberOfRenderedEdges[F.TRANSPARENT]+this.numberOfRenderedEdges[F.OPAQUE]}shouldRender(){return this.renderers.size>0}async addComponentObject(e,t,r,s,o,n,i,a){if(this.hasObject(e))return this.getObjectMemoryUsage(e);let c;const d=new ce(new Promise((e=>c=e)),r.center,r.radius);this.perObjectData.set(e,d);const l=await this.updatingHandles.addPromise(this._addComponentGeometry(t,d,s,o,n,i,a));return this.setNeedsRender(),c(),l}async addOrUpdateObject3D(e,t,r,s){if(this.destroyed)return void oe.warn("Attempt to add an object to a destroyed instance");const o=this.perObjectData.get(e);let n;o?.renderables.length>0&&this.perObjectDataEvictionCache.add(o);const i=e.boundingVolumeWorldSpace.bounds,a=new ce(new Promise((e=>n=e)),R(i),x(i));this.perObjectData.set(e,a);const c=new Array;if(r.mergeGeometries&&e.geometries.length>1&&ae(e))c.push(this._addObjectMergedGeometries(e,a,t,r,s));else for(let d=0;d<e.geometries.length;d++){const o=e.geometryRecords[d];if(!o.material.supportsEdges)continue;const n=e.geometries[d];c.push(this._addGeometry(e,a,n,o,t[0],r,s))}await this.updatingHandles.addPromise(Promise.all(c)),this.perObjectDataEvictionCache.delete(a),this._discardObjectEntry(o),this.setNeedsRender(),n()}_discardObjectEntry(e){e&&(e.renderables.length&&(e.renderables.forEach((e=>this._removeRenderable(e))),this.setNeedsRender()),e.loaded=null)}hasObject(e){return this.perObjectData.has(e)}async updateAllComponentOpacities(e,t){const r=t instanceof Array?e=>t[e]:()=>t;(await this.updatingHandles.addPromise(this._getObjectEntry(e))).renderables.forEach((e=>{const t=e.components.meta.length;for(let s=0;s<t;s++){const t=r(s),o=e.components.meta[s],n=o.index;o.material.opacity=t,e.components.buffer.textureBuffer.setDataElement(n,1,3,255*t)}this._updateTransparency(e)})),this.setNeedsRender()}async getObjectMemoryUsage(e){return(await this._getObjectEntry(e)).renderables.reduce(((e,t)=>e+t.statistics.gpuMemoryUsage),0)}async updateAllComponentMaterials(e,t,r,s){const o=e instanceof A,n=!!r.hasSlicePlane,i=J(t),a=z.getKey(i,n,o);(await this.updatingHandles.addPromise(this._getObjectEntry(e))).renderables.forEach((e=>{if(a!==e.rendererKey){const t=this.renderers.get(e.rendererKey),r=this._acquireRenderer(i,n,o);t.removeRenderable(e),t.refCount.decrement(),e.rendererKey=a,r.addRenderable(e)}for(let r=0;r<t.length;r++)e.components.meta[r].material=t[r];s&&this._updateComponentBuffer(e.components),this._updateTransparency(e)})),this.setNeedsRender()}async updateAllVerticalOffsets(e,t){(await this.updatingHandles.addPromise(this._getObjectEntry(e))).renderables.forEach((e=>{const r=e.components.meta;for(let s=0;s<r.length;s++)e.components.meta[s].verticalOffset=t?.[s]??0;this._updateComponentBuffer(e.components)})),this.setNeedsRender()}async updateObjectVisibility(e,t){(await this.updatingHandles.addPromise(this._getObjectEntry(e))).renderables.forEach((e=>e.visible=t)),this.setNeedsRender()}removeObject(e){const t=this.perObjectData.get(e);t&&(this.perObjectData.delete(e),this._discardObjectEntry(t))}async _getObjectEntry(e){const t=this.perObjectData.get(e);if(!t)throw"no object";if(await t.loaded,null==t.loaded)throw d();return t}removeAll(){this.perObjectData.forEach(((e,t)=>this.removeObject(t)))}render(e,t){if(this.numberOfRenderedEdges[t]=0,a(this.componentColorManager))return;this.localOrigins.updateViewMatrices(e.camera.viewMatrix);const r=e.camera.viewInverseTransposeMatrix,s=w(),o=new C;let n=0,i=0;if(this.renderers.forEach((r=>{0===r.refCount.value?(this.renderers.delete(r.key),r.dispose()):r.forEachRenderable((t=>{t.visible&&(n+=t.statistics.averageEdgeLength,i++,t.regular&&r.updateTechnique(e,!1),t.silhouette&&r.updateTechnique(e,!0))}),t)})),this.componentColorManager.garbageCollect(),this.componentColorManager.updateTextures(),0===i)return;const c=40*n/i,d=e.camera.perScreenPixelRatio,l=new G(c,d,t);y(s,r[3],r[7],r[11]),o.set(s),j(l.transformWorldFromViewTH,o.high),j(l.transformWorldFromViewTL,o.low),g(l.transformViewFromCameraRelativeRS,e.camera.viewMatrix),u(de,l.transformViewFromCameraRelativeRS),h(l.transformNormalViewFromGlobal,de),l.transformProjFromView=e.camera.projectionMatrix,this._updateObjectCameraDistances(e),this.renderers.forEach((t=>{this._renderRegularEdges(t,e,l),this._renderSilhouetteEdges(t,e,l)}))}_updateTransparency(e){const t=X(e.components.meta),r=Y(e.components.meta);t===e.edgeTransparency&&r===e.objectTransparency||(e.edgeTransparency=t,e.objectTransparency=r,this.renderers.get(e.rendererKey).setRenderablesDirty())}_computeModelTransformWithLocalOrigin(e,t,r){if(e.getCombinedStaticTransformation(t,r),c(t.origin))this.localOrigins.register(t.origin);else{const e=y(this.tmpModelPosition,r[12],r[13],r[14]);t.origin=this.localOrigins.acquire(e)}return P(t.origin.vec3,r),t.origin}_updateComponentBuffer(e){const{meta:t,buffer:r}=e,s=new Uint8Array(4);for(let n=0;n<t.length;n++){const e=t[n].material,i=t[n].index,a=o(Math.round(e.size*W),0,255),c=o(e.extensionLength,-q,255-q)+q,d="solid"===e.type?H.SOLID:H.SKETCH,l=255*e.opacity,m=e.color,g=255*m[0],u=255*m[1],h=255*m[2],p=255*m[3];r.textureBuffer.setData(i,0,g,u,h,p),r.textureBuffer.setData(i,1,a,c,d,l),M(t[n].verticalOffset,s),r.textureBuffer.setData(i,2,s[0],s[1],s[2],s[3])}}_createComponentBuffers(e){if(a(this.componentColorManager))return null;const t=new Array,r=this.componentColorManager.getBuffer(e.length);for(let o=0;o<e.length;o++){const s=e[o],n=r.acquireIndex();t.push({index:n,verticalOffset:0,material:s})}const s={meta:t,buffer:r};return this._updateComponentBuffer(s),s}_extractEdges(e,t,r,s,o,n=o.length){return this.worker.process({data:t,indices:o,indicesLength:n,writerSettings:e,skipDeduplicate:r},this.workerAbort.signal,s)}_createEdgeResources(e){const t={};if(a(this.verticesBufferObject))return t;if(e.regular.lodInfo.lengths.length>0){const r=new se(this.rctx,I,{vertices:U,instances:V.glLayout},{vertices:this.verticesBufferObject,instances:te.createVertex(this.rctx,re.STATIC_DRAW,e.regular.instancesData.buffer)});t.regular={vao:r,lod:e.regular.lodInfo}}if(e.silhouette.lodInfo.lengths.length>0){const r=new se(this.rctx,I,{vertices:U,instances:N.glLayout},{vertices:this.verticesBufferObject,instances:te.createVertex(this.rctx,re.STATIC_DRAW,e.silhouette.instancesData.buffer)});t.silhouette={vao:r,lod:e.silhouette.lodInfo}}return t}async _addGeometry(e,t,r,s,o,n,i){const a=r.vertexAttributes.get(k.POSITION),c=r.indices.get(k.POSITION),d=b(),l={position:a,indices:c,modelTransform:d,origin:this._computeModelTransformWithLocalOrigin(e,s,d)};return this._addPositionData(t,l,r.edgeIndicesLength,o,n,i)}async _addPositionData(e,t,r,s,o,n=!1){if(null==e.loaded)return;const i=this._createComponentBuffers([s]);if(a(i)||r<=0)return;const c=this._acquireRenderer(s.type,!!o.hasSlicePlane,!0),{modelTransform:d,origin:l}=t,m=t.indices,g=t.position,u=g.data.length/g.size,h=L.createBuffer(u);for(let a=0;a<u;a++)h.position.set(a,0,g.data[a*g.size+0]),h.position.set(a,1,g.data[a*g.size+1]),h.position.set(a,2,g.data[a*g.size+2]);Z(i.meta,[0,h.componentIndex.count],h.componentIndex);const p=await this.updatingHandles.addPromise(this._extractEdges(c.writerSettings,h,!1,n,m,r));if(null==e.loaded)return;const{regular:f,silhouette:b}=this._createEdgeResources(p),y=(f?f.vao.size:0)+(b?b.vao.size:0),j={regular:f,silhouette:b,transform:{modelMatrix:d,origin:l},statistics:{gpuMemoryUsage:y,externalMemoryUsage:!1,averageEdgeLength:p.averageEdgeLength},components:i,visible:!0,edgeTransparency:X(i.meta),objectTransparency:Y(i.meta),distanceToCamera:0,rendererKey:c.key};e.renderables.push(j),c.addRenderable(j),this.gpuMemoryUsage+=y}async _addComponentGeometry(e,t,r,s,o,n,i){if(null==t.loaded)return 0;const c=this._createComponentBuffers(n);if(a(c))return 0;const d=J(n),l=this._acquireRenderer(d,i.hasSlicePlane||!1,!1),m=L.createBuffer(r.count);T(m.position,r),Z(c.meta,o,m.componentIndex,s);const g=!0,u=l.writerSettings,h=await this.updatingHandles.addPromise(this._extractEdges(u,m,g,!1,s));if(null==t.loaded)return 0;const{regular:p,silhouette:f}=this._createEdgeResources(h),b=(p?p.vao.size:0)+(f?f.vao.size:0),y={regular:p,silhouette:f,transform:e,statistics:{gpuMemoryUsage:b,externalMemoryUsage:!0,averageEdgeLength:h.averageEdgeLength},components:c,visible:!0,edgeTransparency:X(c.meta),objectTransparency:Y(c.meta),distanceToCamera:0,rendererKey:l.key};return t.renderables.push(y),l.addRenderable(y),b}async _addObjectMergedGeometries(e,t,r,s,o){const n=new Map;let i=0,a=null,c=0;for(let b=0;b<e.geometries.length;b++){const t=e.geometries[b],r=e.geometryRecords[b];if(!r.material.supportsEdges)continue;!a&&r.origin&&(a=r);const s=t.vertexAttributes.get(k.POSITION);c+=s.data.length/s.size,i+=t.edgeIndicesLength}const d=c>=65536?Uint32Array:Uint16Array,l=i?new d(i):null,m=[];let g=0;for(let b=0;b<e.geometries.length;b++){const t=e.geometries[b];if(!e.geometryRecords[b].material.supportsEdges)continue;const r=t.vertexAttributes.get(k.POSITION),s=t.indices.get(k.POSITION);let o=n.get(r.data);if(null==o){o=m.length/3;for(let e=0;e<r.data.length;e+=r.size)m.push(r.data[e+0]),m.push(r.data[e+1]),m.push(r.data[e+2]);n.set(r.data,o)}if(s)for(let e=0;e<t.edgeIndicesLength;e++)l[g++]=o+s[e]}const u=a||e.geometryRecords[0],h=b(),p=this._computeModelTransformWithLocalOrigin(e,u,h);for(let b=0;b<e.geometryRecords.length;b++)e.geometryRecords[b].origin=p;const f={position:{data:m,size:3},indices:l,modelTransform:h,origin:p};await this.updatingHandles.addPromise(this._addPositionData(t,f,l.length,r[0],s,o))}_acquireRenderer(e,t,r){const s=z.getKey(e,t,r);let o=this.renderers.get(s);return a(this.strokesTexture)&&(this.strokesTexture=Q(this.rctx)),o||(o=new z(this.rctx,this.techniqueRepository,{type:e,hasSlicePlane:t,strokesTexture:this.strokesTexture,legacy:r,spherical:this.viewingMode===_.Global}),this.renderers.set(s,o)),o.refCount.increment(),o}_removeRenderable(e){ie(e);const t=this.renderers.get(e.rendererKey);if(t){t.removeRenderable(e),t.refCount.decrement(),"origin"in e.transform&&this.localOrigins.release(e.transform.origin),this.gpuMemoryUsage-=e.statistics.externalMemoryUsage?0:e.statistics.gpuMemoryUsage;for(const t of e.components.meta)e.components.buffer.releaseIndex(t.index)}}_updateObjectCameraDistances(e){const t=e.camera.eye,r=e.camera.viewForward,s=w(),o=e=>{const{center:o,radius:n}=e;O(s,o,t);const i=v(s,r),a=i<-n?1/0:i<n?0:i-n;e.renderables.forEach((e=>e.distanceToCamera=a))};this.perObjectData.forEach(o),this.perObjectDataEvictionCache.forEach(o)}_renderRegularEdges(e,t,r){const s=e.bindRegularEdges(r,t),o=r.transparency;e.forEachRenderable((n=>{if(!n.visible||!n.regular)return;const i=$(n.regular.lod.lengths,n.distanceToCamera,r),a="origin"in n.transform?this.localOrigins.getViewMatrix(n.transform.origin):f;e.renderRegularEdges(s,n,t,i,a),this.numberOfRenderedEdges[o]+=i}),o)}_renderSilhouetteEdges(e,t,r){const s=e.bindSilhouetteEdges(r,t),o=r.transparency;e.forEachRenderable((n=>{if(!n.visible||!n.silhouette)return;const i=$(n.silhouette.lod.lengths,n.distanceToCamera,r),a="origin"in n.transform?this.localOrigins.getViewMatrix(n.transform.origin):f;e.renderSilhouetteEdges(s,n,t,i,a),this.numberOfRenderedEdges[o]+=i}),o)}};function ie(e){e.regular&&(e.regular.vao.vertexBuffers.instances.dispose(),e.regular.vao.dispose(!1),e.regular.vao=null),e.silhouette&&(e.silhouette.vao.vertexBuffers.instances.dispose(),e.silhouette.vao.dispose(!1),e.silhouette.vao=null)}function ae(e){let t=null,s=null;for(let o=0;o<e.geometries.length;o++){const n=e.geometryRecords[o];if(n.material.supportsEdges){if(t){if(!r(t,n.transformation))return!1}else t=n.transformation;if(!s&&c(n.origin))s=n;else if(c(s?.origin)&&c(n.origin)&&s.origin.id!==n.origin.id)return!1}}return!0}e([l({constructOnly:!0})],ne.prototype,"rctx",void 0),e([l({constructOnly:!0})],ne.prototype,"renderSR",void 0),e([l({constructOnly:!0})],ne.prototype,"viewingMode",void 0),e([l({constructOnly:!0})],ne.prototype,"techniqueRepository",void 0),e([l({constructOnly:!0})],ne.prototype,"setNeedsRender",void 0),e([l({constructOnly:!0})],ne.prototype,"schedule",void 0),e([l({readOnly:!0})],ne.prototype,"updatingHandles",void 0),e([l({readOnly:!0})],ne.prototype,"updating",null),ne=e([m("esri.views.3d.webgl-engine.lib.edgeRendering.EdgeView")],ne);class ce{constructor(e,t,r){this.center=t,this.radius=r,this.renderables=new Array,this.loaded=e,this.loaded.then((()=>{null!=this.loaded&&(this.loaded=!0)}))}}const de=p();export{ne as EdgeView};
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
|
|
3
3
|
See https://js.arcgis.com/4.24/esri/copyright.txt for details.
|
|
4
4
|
*/
|
|
5
|
-
import{
|
|
5
|
+
import{MAX_ELEVATION_OFFSET as o}from"../../../collections/Component/Material/shader/ComponentData.glsl.js";import{DoublePrecision as e}from"../../../core/shaderLibrary/util/DoublePrecision.glsl.js";import{RgbaFloatEncoding as r}from"../../../core/shaderLibrary/util/RgbaFloatEncoding.glsl.js";import{Float2Uniform as t}from"../../../core/shaderModules/Float2Uniform.js";import{Float3DrawUniform as a}from"../../../core/shaderModules/Float3DrawUniform.js";import{Float3PassUniform as n}from"../../../core/shaderModules/Float3PassUniform.js";import{FloatPassUniform as l}from"../../../core/shaderModules/FloatPassUniform.js";import{glsl as d}from"../../../core/shaderModules/interfaces.js";import{Matrix3DrawUniform as m}from"../../../core/shaderModules/Matrix3DrawUniform.js";import{Matrix3PassUniform as s}from"../../../core/shaderModules/Matrix3PassUniform.js";import{Matrix4PassUniform as i}from"../../../core/shaderModules/Matrix4PassUniform.js";import{Texture2DUniform as c}from"../../../core/shaderModules/Texture2DUniform.js";import{VertexAttribute as f}from"../../../lib/VertexAttribute.js";function u(u,v){const p=u.vertex;p.include(r),p.uniforms.add(new l("distanceFalloffFactor",(o=>o.distanceFalloffFactor))),p.code.add(d`float distanceBasedPerspectiveFactor(float distance) {
|
|
6
6
|
return clamp(sqrt(distanceFalloffFactor / distance), 0.0, 1.0);
|
|
7
|
-
}`),
|
|
7
|
+
}`),p.uniforms.add(new c("componentDataTex")),p.uniforms.add(new t("componentDataTexInvDim")),u.attributes.add(f.COMPONENTINDEX,"float"),p.constants.add("componentColorFieldOffset","float",0),p.constants.add("componentOtherFieldOffset","float",1),p.constants.add("componentVerticalOffsetFieldOffset","float",2),p.constants.add("componentFieldCount","float",3),p.constants.add("lineWidthFractionFactor","float",8),p.constants.add("extensionLengthOffset","float",128),p.constants.add("componentTexWidth","float",4096),p.constants.add("verticalOffsetScale","float",2*o),p.code.add(d`vec2 _componentTextureCoords(float componentIndex, float fieldOffset) {
|
|
8
8
|
float fieldIndex = componentFieldCount * componentIndex + fieldOffset;
|
|
9
9
|
float rowIndex = floor(fieldIndex / componentTexWidth);
|
|
10
10
|
float colIndex = mod(fieldIndex, componentTexWidth);
|
|
@@ -19,52 +19,58 @@ vec4 color;
|
|
|
19
19
|
float lineWidth;
|
|
20
20
|
float extensionLength;
|
|
21
21
|
float type;
|
|
22
|
+
float verticalOffset;
|
|
22
23
|
};
|
|
23
24
|
ComponentData readComponentData() {
|
|
24
25
|
vec2 colorIndex = _componentTextureCoords(componentIndex, componentColorFieldOffset);
|
|
25
26
|
vec2 otherIndex = _componentTextureCoords(componentIndex, componentOtherFieldOffset);
|
|
27
|
+
vec2 verticalOffsetIndex = _componentTextureCoords(componentIndex, componentVerticalOffsetFieldOffset);
|
|
26
28
|
vec4 colorValue = texture2D(componentDataTex, colorIndex);
|
|
27
29
|
vec4 otherValue = texture2D(componentDataTex, otherIndex);
|
|
30
|
+
float verticalOffset = (rgba2float(texture2D(componentDataTex, verticalOffsetIndex)) - 0.5) * verticalOffsetScale;
|
|
28
31
|
return ComponentData(
|
|
29
32
|
vec4(colorValue.rgb, colorValue.a * otherValue.w),
|
|
30
33
|
otherValue.x * (255.0 / lineWidthFractionFactor),
|
|
31
34
|
otherValue.y * 255.0 - extensionLengthOffset,
|
|
32
|
-
-(otherValue.z * 255.0) + 0.5
|
|
35
|
+
-(otherValue.z * 255.0) + 0.5,
|
|
36
|
+
verticalOffset
|
|
33
37
|
);
|
|
34
|
-
}`),
|
|
38
|
+
}`),v.legacy?p.code.add(d`vec3 _modelToWorldNormal(vec3 normal) {
|
|
35
39
|
return (model * vec4(normal, 0.0)).xyz;
|
|
36
40
|
}
|
|
37
41
|
vec3 _modelToViewNormal(vec3 normal) {
|
|
38
42
|
return (localView * model * vec4(normal, 0.0)).xyz;
|
|
39
|
-
}`):(
|
|
43
|
+
}`):(p.uniforms.add(new m("transformNormalGlobalFromModel",(o=>o.transformNormalGlobalFromModel))),p.code.add(d`vec3 _modelToWorldNormal(vec3 normal) {
|
|
40
44
|
return transformNormalGlobalFromModel * normal;
|
|
41
|
-
}`)),
|
|
45
|
+
}`)),v.silhouette?(u.attributes.add(f.NORMALA,"vec3"),u.attributes.add(f.NORMALB,"vec3"),p.code.add(d`vec3 worldNormal() {
|
|
42
46
|
return _modelToWorldNormal(normalize(normalA + normalB));
|
|
43
|
-
}`)):(
|
|
47
|
+
}`)):(u.attributes.add(f.NORMAL,"vec3"),p.code.add(d`vec3 worldNormal() {
|
|
44
48
|
return _modelToWorldNormal(normal);
|
|
45
|
-
}`)),
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
49
|
+
}`)),v.legacy?p.code.add(d`void worldAndViewFromModelPosition(vec3 modelPos, float verticalOffset, out vec3 worldPos, out vec3 viewPos) {
|
|
50
|
+
worldPos = (model * vec4(modelPos, 1.0)).xyz;
|
|
51
|
+
viewPos = (localView * vec4(worldPos, 1.0)).xyz;
|
|
52
|
+
}`):(p.include(e,v),p.include(e,v),p.uniforms.add([new s("transformViewFromCameraRelativeRS",(o=>o.transformViewFromCameraRelativeRS)),new m("transformWorldFromModelRS",(o=>o.transformWorldFromModelRS)),new a("transformWorldFromModelTL",(o=>o.transformWorldFromModelTL)),new a("transformWorldFromModelTH",(o=>o.transformWorldFromModelTH)),new n("transformWorldFromViewTL",(o=>o.transformWorldFromViewTL)),new n("transformWorldFromViewTH",(o=>o.transformWorldFromViewTH))]),p.code.add(d`
|
|
53
|
+
void worldAndViewFromModelPosition(vec3 modelPos, float verticalOffset, out vec3 worldPos, out vec3 viewPos) {
|
|
54
|
+
vec3 rotatedModelPosition = transformWorldFromModelRS * modelPos;
|
|
55
|
+
|
|
56
|
+
vec3 transformCameraRelativeFromModel = dpAdd(
|
|
57
|
+
transformWorldFromModelTL,
|
|
58
|
+
transformWorldFromModelTH,
|
|
59
|
+
-transformWorldFromViewTL,
|
|
60
|
+
-transformWorldFromViewTH
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
worldPos = transformCameraRelativeFromModel + rotatedModelPosition;
|
|
64
|
+
|
|
65
|
+
if (verticalOffset != 0.0) {
|
|
66
|
+
vec3 vUp = ${v.spherical?d`normalize(transformWorldFromModelTL + rotatedModelPosition);`:d`vec3(0.0, 0.0, 1.0);`}
|
|
67
|
+
worldPos += verticalOffset * vUp;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
viewPos = transformViewFromCameraRelativeRS * worldPos;
|
|
71
|
+
}
|
|
72
|
+
`)),p.uniforms.add(new i("transformProjFromView",((o,e)=>e.camera.projectionMatrix))),p.code.add(d`vec4 projFromViewPosition(vec3 position) {
|
|
67
73
|
return transformProjFromView * vec4(position, 1.0);
|
|
68
|
-
}`)
|
|
74
|
+
}`),p.code.add(d`float calculateExtensionLength(float extensionLength, float lineLength) {
|
|
69
75
|
return extensionLength / (log2(max(1.0, 256.0 / lineLength)) * 0.2 + 1.0);
|
|
70
|
-
}`)}function
|
|
76
|
+
}`)}function v(o){return o.mode===x.SKETCH||o.mode===x.MIXED}function p(o){return o.mode===x.SOLID||o.mode===x.MIXED}var x;!function(o){o[o.SOLID=0]="SOLID",o[o.SKETCH=1]="SKETCH",o[o.MIXED=2]="MIXED",o[o.COUNT=3]="COUNT"}(x||(x={}));export{u as EdgeUtil,x as EdgeUtilMode,v as usesSketchLogic,p as usesSolidLogic};
|