@itwin/core-frontend 5.0.0-dev.99 → 5.1.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +20 -41
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.d.ts +1 -0
- package/lib/cjs/AccuSnap.d.ts.map +1 -1
- package/lib/cjs/AccuSnap.js +69 -1
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CatalogConnection.d.ts +71 -0
- package/lib/cjs/CatalogConnection.d.ts.map +1 -0
- package/lib/cjs/CatalogConnection.js +95 -0
- package/lib/cjs/CatalogConnection.js.map +1 -0
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +5 -2
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts +29 -2
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +14 -0
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/ModelState.d.ts.map +1 -1
- package/lib/cjs/ModelState.js +7 -5
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +2 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +1 -0
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +1 -0
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +1 -0
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +1 -0
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +3 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts +2 -0
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js +7 -0
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.d.ts +0 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.js +11 -20
- package/lib/cjs/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts +9 -0
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +86 -11
- package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts +4 -3
- package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderBuilder.js +3 -3
- package/lib/cjs/internal/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js +2 -2
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.js +20 -8
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.js +2 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.js +31 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Fragment.js +7 -2
- package/lib/cjs/internal/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Surface.js +1 -1
- package/lib/cjs/internal/tile/GraphicsCollector.d.ts +1 -0
- package/lib/cjs/internal/tile/GraphicsCollector.d.ts.map +1 -1
- package/lib/cjs/internal/tile/GraphicsCollector.js +1 -0
- package/lib/cjs/internal/tile/GraphicsCollector.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTile.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTile.js +5 -0
- package/lib/cjs/internal/tile/IModelTile.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.d.ts +4 -1
- package/lib/cjs/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.js +5 -0
- package/lib/cjs/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/ImdlDecoder.d.ts +2 -0
- package/lib/cjs/internal/tile/ImdlDecoder.d.ts.map +1 -1
- package/lib/cjs/internal/tile/ImdlDecoder.js.map +1 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.d.ts +2 -2
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.js +2 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeHandler.d.ts +3 -3
- package/lib/cjs/internal/tile/LayerTileTreeHandler.d.ts.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeHandler.js +3 -2
- package/lib/cjs/internal/tile/LayerTileTreeHandler.js.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeReferenceHandler.d.ts +7 -5
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeReferenceHandler.js +29 -4
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -0
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts +9 -4
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.js +30 -8
- package/lib/cjs/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts +0 -2
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.js +2 -21
- package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/render/Pixel.d.ts +13 -2
- package/lib/cjs/render/Pixel.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.js +20 -8
- package/lib/cjs/render/Pixel.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.d.ts +3 -2
- package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +1 -0
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/internal.d.ts +3 -2
- package/lib/cjs/tile/internal.d.ts.map +1 -1
- package/lib/cjs/tile/internal.js +3 -2
- package/lib/cjs/tile/internal.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -3
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +2 -4
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.d.ts +0 -12
- package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.js +2 -60
- package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts +0 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.js +15 -19
- package/lib/cjs/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/cjs/tools/ViewTool.d.ts +25 -16
- package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ViewTool.js +29 -40
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuDraw.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +21 -42
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.d.ts +1 -0
- package/lib/esm/AccuSnap.d.ts.map +1 -1
- package/lib/esm/AccuSnap.js +69 -1
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts +1 -1
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CatalogConnection.d.ts +71 -0
- package/lib/esm/CatalogConnection.d.ts.map +1 -0
- package/lib/esm/CatalogConnection.js +92 -0
- package/lib/esm/CatalogConnection.js.map +1 -0
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +5 -2
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/HitDetail.d.ts +29 -2
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +14 -0
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IpcApp.d.ts +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/ModelState.d.ts.map +1 -1
- package/lib/esm/ModelState.js +7 -5
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +2 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +1 -0
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +1 -0
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +1 -0
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +1 -0
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts +2 -0
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js +8 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.d.ts +0 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.js +11 -20
- package/lib/esm/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts +9 -0
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +86 -11
- package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts +4 -3
- package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderBuilder.js +3 -3
- package/lib/esm/internal/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.js +2 -2
- package/lib/esm/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SurfaceGeometry.js +20 -8
- package/lib/esm/internal/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.js +2 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.js +31 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Fragment.js +7 -2
- package/lib/esm/internal/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +1 -1
- package/lib/esm/internal/render/webgl/glsl/Surface.js +1 -1
- package/lib/esm/internal/tile/GraphicsCollector.d.ts +1 -0
- package/lib/esm/internal/tile/GraphicsCollector.d.ts.map +1 -1
- package/lib/esm/internal/tile/GraphicsCollector.js +1 -0
- package/lib/esm/internal/tile/GraphicsCollector.js.map +1 -1
- package/lib/esm/internal/tile/IModelTile.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTile.js +6 -1
- package/lib/esm/internal/tile/IModelTile.js.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.d.ts +4 -1
- package/lib/esm/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.js +6 -1
- package/lib/esm/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/ImdlDecoder.d.ts +2 -0
- package/lib/esm/internal/tile/ImdlDecoder.d.ts.map +1 -1
- package/lib/esm/internal/tile/ImdlDecoder.js.map +1 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.d.ts +2 -2
- package/lib/esm/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.js +2 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/esm/{tile → internal/tile}/LayerTileTreeHandler.d.ts +3 -3
- package/lib/esm/internal/tile/LayerTileTreeHandler.d.ts.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeHandler.js +3 -2
- package/lib/esm/internal/tile/LayerTileTreeHandler.js.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeReferenceHandler.d.ts +7 -5
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeReferenceHandler.js +29 -4
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -0
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts +9 -4
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.js +32 -10
- package/lib/esm/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts +0 -2
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.js +2 -21
- package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/render/Pixel.d.ts +13 -2
- package/lib/esm/render/Pixel.d.ts.map +1 -1
- package/lib/esm/render/Pixel.js +20 -8
- package/lib/esm/render/Pixel.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts +3 -2
- package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
- package/lib/esm/tile/ImdlReader.js +1 -0
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/internal.d.ts +3 -2
- package/lib/esm/tile/internal.d.ts.map +1 -1
- package/lib/esm/tile/internal.js +3 -2
- package/lib/esm/tile/internal.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.d.ts +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +3 -4
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +2 -4
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tools/AccuDrawTool.d.ts +0 -12
- package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawTool.js +3 -60
- package/lib/esm/tools/AccuDrawTool.js.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts +0 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.js +16 -20
- package/lib/esm/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/esm/tools/ViewTool.d.ts +25 -16
- package/lib/esm/tools/ViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ViewTool.js +29 -40
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/lib/public/locales/en/CoreTools.json +0 -5
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/public/sprites/SnapPerpendicularPoint.png +0 -0
- package/lib/public/sprites/SnapTangentPoint.png +0 -0
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +16 -16
- package/lib/cjs/tile/LayerTileTreeHandler.d.ts.map +0 -1
- package/lib/cjs/tile/LayerTileTreeHandler.js.map +0 -1
- package/lib/cjs/tile/LayerTileTreeReferenceHandler.d.ts.map +0 -1
- package/lib/cjs/tile/LayerTileTreeReferenceHandler.js.map +0 -1
- package/lib/esm/tile/LayerTileTreeHandler.d.ts.map +0 -1
- package/lib/esm/tile/LayerTileTreeHandler.js.map +0 -1
- package/lib/esm/tile/LayerTileTreeReferenceHandler.d.ts.map +0 -1
- package/lib/esm/tile/LayerTileTreeReferenceHandler.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolarShadowMap.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/SolarShadowMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, dispose } from \"@itwin/core-bentley\";\nimport { ClipUtilities, ConvexClipPlaneSet, Geometry, GrowableXYZArray, Map4d, Matrix3d, Matrix4d, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport {\n Frustum, FrustumPlanes, RenderMode, RenderTexture, SolarShadowSettings, TextureTransparency, ViewFlags,\n} from \"@itwin/core-common\";\nimport { RenderType } from \"@itwin/webgl-compatibility\";\nimport { Tile, TileDrawArgs, TileTreeReference, TileVisibility } from \"../../../tile/internal\";\nimport { SceneContext } from \"../../../ViewContext\";\nimport { RenderGraphic } from \"../../../render/RenderGraphic\";\nimport { RenderMemory } from \"../../../render/RenderMemory\";\nimport { BranchStack } from \"./BranchStack\";\nimport { BatchState } from \"./BatchState\";\nimport { EVSMGeometry } from \"./CachedGeometry\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { FrameBuffer } from \"./FrameBuffer\";\nimport { GL } from \"./GL\";\nimport { RenderCommands } from \"./RenderCommands\";\nimport { RenderPass, TextureUnit } from \"./RenderFlags\";\nimport { RenderState } from \"./RenderState\";\nimport { getDrawParams } from \"./ScratchDrawParams\";\nimport { System } from \"./System\";\nimport { Target } from \"./Target\";\nimport { Texture, TextureHandle } from \"./Texture\";\n\ntype ProcessTiles = (tiles: Tile[]) => void;\n\nfunction createDrawArgs(sceneContext: SceneContext, solarShadowMap: SolarShadowMap, tree: TileTreeReference, frustumPlanes: FrustumPlanes, processTiles: ProcessTiles): TileDrawArgs | undefined {\n class SolarShadowMapDrawArgs extends TileDrawArgs {\n private _useViewportMap?: boolean;\n private readonly _processTiles: ProcessTiles;\n\n constructor(private _mapFrustumPlanes: FrustumPlanes, private _shadowMap: SolarShadowMap, args: TileDrawArgs, process: ProcessTiles) {\n super(args);\n this._processTiles = process;\n }\n\n // The solar shadow projection is parallel - which can cause excessive tile selection if it is along an axis of an unbounded tile\n // tree such as the OSM buildings. Rev limit the selection here.\n public override get maxRealityTreeSelectionCount(): undefined | number { return 500; }\n\n public override processSelectedTiles(tiles: Tile[]): void {\n this._processTiles(tiles);\n }\n\n public override get frustumPlanes(): FrustumPlanes {\n if (true === this._useViewportMap)\n return super.frustumPlanes;\n else\n return this._mapFrustumPlanes;\n }\n\n public override get worldToViewMap(): Map4d {\n if (true === this._useViewportMap)\n return super.worldToViewMap;\n else\n return this._shadowMap.worldToViewMap;\n }\n\n public override drawGraphics(): void {\n const graphics = this.produceGraphics();\n if (graphics)\n this._shadowMap.addGraphic(graphics);\n }\n\n public override getPixelSize(tile: Tile): number {\n // For tiles that are part of the scene, size them based on the viewport frustum so that shadow map uses same resolution tiles as scene\n // - otherwise artifacts like shadow acne may result.\n // For tiles that are NOT part of the scene, size them based on the shadow frustum, not the viewport frustum\n // - otherwise excessive numbers of excessively detailed may be requested for the shadow map.\n if (undefined === this._useViewportMap) {\n this._useViewportMap = true;\n const vis = tile.computeVisibility(this);\n this._useViewportMap = TileVisibility.OutsideFrustum !== vis;\n }\n\n const size = super.getPixelSize(tile);\n this._useViewportMap = undefined;\n return size;\n }\n\n public static create(context: SceneContext, shadowMap: SolarShadowMap, tileTree: TileTreeReference, planes: FrustumPlanes, process: ProcessTiles) {\n const args = tileTree.createDrawArgs(context);\n return undefined !== args ? new SolarShadowMapDrawArgs(planes, shadowMap, args, process) : undefined;\n }\n }\n\n return SolarShadowMapDrawArgs.create(sceneContext, solarShadowMap, tree, frustumPlanes, processTiles);\n}\n\nconst shadowMapWidth = 4096; // size of original depth buffer map\nconst shadowMapHeight = shadowMapWidth; // TBD - Adjust for aspect ratio.\nconst evsmWidth = shadowMapWidth / 2; // EVSM buffer is 1/2 size each direction\nconst evsmHeight = shadowMapHeight / 2;\nconst postProjectionMatrixNpc = Matrix4d.createRowValues(/* Row 1 */ 0, 1, 0, 0, /* Row 2 */ 0, 0, 1, 0, /* Row 3 */ 1, 0, 0, 0, /* Row 4 */ 0, 0, 0, 1);\n\n// Bundles up the disposable, create-once-and-reuse members of a SolarShadowMap.\nclass Bundle implements WebGLDisposable {\n private constructor(\n public readonly depthTexture: Texture,\n public readonly shadowMapTexture: Texture,\n public readonly fbo: FrameBuffer,\n public readonly fboSM: FrameBuffer,\n public readonly evsmGeom: EVSMGeometry,\n public readonly renderCommands: RenderCommands) {\n }\n\n public static create(target: Target, stack: BranchStack, batch: BatchState): Bundle | undefined {\n const depthTextureHandle = System.instance.createDepthBuffer(shadowMapWidth, shadowMapHeight) as TextureHandle;\n if (undefined === depthTextureHandle)\n return undefined;\n\n let pixelDataType = GL.Texture.DataType.Float;\n switch (System.instance.maxRenderType) {\n case RenderType.TextureFloat:\n break;\n case RenderType.TextureHalfFloat:\n pixelDataType = System.instance.context.HALF_FLOAT;\n break;\n /* falls through */\n default:\n return undefined;\n }\n\n const colorTextures: TextureHandle[] = [];\n\n const fbo = FrameBuffer.create(colorTextures, depthTextureHandle);\n if (undefined === fbo)\n return undefined;\n\n // shadowMap texture is 1/4 size the depth texture (and averaged down when converting)\n const shadowMapTextureHandle = TextureHandle.createForAttachment(evsmWidth, evsmHeight, GL.Texture.Format.Rgba, pixelDataType);\n if (undefined === shadowMapTextureHandle)\n return undefined;\n\n const fboSM = FrameBuffer.create([shadowMapTextureHandle]);\n if (undefined === fboSM)\n return undefined;\n\n const depthTexture = new Texture({ ownership: \"external\", type: RenderTexture.Type.TileSection, handle: depthTextureHandle, transparency: TextureTransparency.Opaque });\n const evsmGeom = EVSMGeometry.createGeometry(depthTexture.texture.getHandle()!, shadowMapWidth, shadowMapHeight);\n if (undefined === evsmGeom)\n return undefined;\n\n const shadowMapTexture = new Texture({ type: RenderTexture.Type.Normal, ownership: \"external\", handle: shadowMapTextureHandle, transparency: TextureTransparency.Opaque });\n const renderCommands = new RenderCommands(target, stack, batch);\n return new Bundle(depthTexture, shadowMapTexture, fbo, fboSM, evsmGeom, renderCommands);\n }\n\n public get isDisposed(): boolean {\n return this.depthTexture.isDisposed\n && this.shadowMapTexture.isDisposed\n && this.fbo.isDisposed\n && this.fboSM.isDisposed\n && this.evsmGeom.isDisposed;\n }\n\n public [Symbol.dispose](): void {\n dispose(this.depthTexture);\n dispose(this.shadowMapTexture);\n dispose(this.fbo);\n dispose(this.fboSM);\n dispose(this.evsmGeom);\n }\n}\n\n/** Describes the set of parameters which, when they change, require us to recreate the shadow map. */\nclass ShadowMapParams {\n public readonly direction = new Vector3d();\n public readonly viewFrustum = new Frustum();\n public settings: SolarShadowSettings;\n\n public constructor(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings) {\n direction.clone(this.direction);\n this.viewFrustum.setFrom(viewFrustum);\n this.settings = settings;\n }\n\n public update(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings): void {\n this.settings = settings;\n this.viewFrustum.setFrom(viewFrustum);\n direction.clone(this.direction);\n }\n}\n\nconst defaultSunDirection = Vector3d.create(-1, -1, -1).normalize()!;\nconst scratchFrustum = new Frustum();\nconst scratchFrustumPlanes = FrustumPlanes.createEmpty();\n\nexport class SolarShadowMap implements RenderMemory.Consumer, WebGLDisposable {\n private _bundle?: Bundle;\n private _projectionMatrix = Matrix4d.createIdentity();\n private _graphics: RenderGraphic[] = [];\n private _shadowFrustum = new Frustum();\n private _isReady = false;\n private _isDrawing = false;\n private _enabled = false;\n private _params?: ShadowMapParams;\n private readonly _scratchRange = Range3d.createNull();\n private readonly _scratchTransform = Transform.createIdentity();\n\n private readonly _scratchViewFlags = new ViewFlags();\n private readonly _renderState: RenderState;\n private readonly _noZRenderState: RenderState;\n private readonly _batchState: BatchState;\n private _worldToViewMap = Map4d.createIdentity();\n private readonly _target: Target;\n\n // This exists chiefly for debugging. See ToggleShadowMapTilesTool.\n public onGraphicsChanged?: (graphics: RenderGraphic[]) => void;\n\n private getBundle(target: Target): Bundle | undefined {\n if (undefined === this._bundle) {\n this._bundle = Bundle.create(target, target.uniforms.branch.stack, this._batchState);\n assert(undefined !== this._bundle);\n }\n\n return this._bundle;\n }\n\n public get isReady() { return this._isReady; }\n public get isDrawing() { return this._isDrawing; }\n public get isEnabled() { return this._enabled; }\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\n public get depthTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.depthTexture : undefined; }\n public get shadowMapTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.shadowMapTexture : undefined; }\n public get settings(): SolarShadowSettings | undefined { return undefined !== this._params ? this._params.settings : undefined; }\n public get direction(): Vector3d | undefined { return undefined !== this._params ? this._params.direction : undefined; }\n public get frustum(): Frustum { return this._shadowFrustum; }\n public get worldToViewMap(): Map4d { return this._worldToViewMap; }\n public addGraphic(graphic: RenderGraphic) { this._graphics.push(graphic); }\n\n public constructor(target: Target) {\n this._target = target;\n this._renderState = new RenderState();\n this._renderState.flags.depthMask = true;\n this._renderState.flags.blend = false;\n this._renderState.flags.depthTest = true;\n\n this._noZRenderState = new RenderState();\n this._noZRenderState.flags.depthMask = false;\n\n this._batchState = new BatchState(target.uniforms.branch.stack);\n }\n\n public disable() {\n this._enabled = this._isReady = false;\n this._bundle = dispose(this._bundle);\n this.clearGraphics(true);\n this._target.uniforms.shadow.update();\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n const bundle = this._bundle;\n if (undefined !== bundle)\n stats.addShadowMap(bundle.depthTexture.bytesUsed + bundle.shadowMapTexture.bytesUsed);\n }\n\n public get isDisposed(): boolean { return undefined === this._bundle && 0 === this._graphics.length; }\n\n public [Symbol.dispose]() {\n this._bundle = dispose(this._bundle);\n this.clearGraphics(true);\n }\n\n private clearGraphics(notify: boolean) {\n for (const graphic of this._graphics)\n graphic[Symbol.dispose]();\n\n this._graphics.length = 0;\n if (notify)\n this.notifyGraphicsChanged();\n }\n\n private notifyGraphicsChanged(): void {\n if (undefined !== this.onGraphicsChanged)\n this.onGraphicsChanged(this._graphics);\n }\n\n public update(context: SceneContext | undefined) {\n this._isReady = false;\n this.clearGraphics(false);\n\n if (undefined === context || !context.viewport.view.isSpatialView()) {\n this.disable();\n this.notifyGraphicsChanged();\n return;\n }\n\n const view = context.viewport.view;\n const style = view.getDisplayStyle3d();\n const sunDirection = style.sunDirection ?? defaultSunDirection;\n\n const minimumHorizonDirection = -.01;\n if (sunDirection.z > minimumHorizonDirection) {\n this.notifyGraphicsChanged();\n return;\n }\n\n this._enabled = true;\n const viewFrustum = context.viewingSpace.getFrustum();\n const settings = style.settings.solarShadows;\n if (undefined === this._params)\n this._params = new ShadowMapParams(viewFrustum, sunDirection, settings);\n else\n this._params.update(viewFrustum, sunDirection, settings);\n\n const iModel = view.iModel;\n\n const worldToMapTransform = Transform.createRefs(Point3d.createZero(), Matrix3d.createRigidHeadsUp(this._params.direction.negate()).inverse()!);\n const worldToMap = Matrix4d.createTransform(worldToMapTransform);\n const mapToWorld = worldToMap.createInverse()!;\n\n // Start with entire project.\n const shadowRange = worldToMapTransform.multiplyRange(iModel.projectExtents);\n\n // Limit the map to only displayed models.\n const viewTileRange = Range3d.createNull();\n for (const ref of view.getTileTreeRefs()) {\n if (ref.castsShadows) {\n if (ref.isGlobal) {\n // A shadow-casting tile tree that spans the globe. Limit its range to the viewed extents.\n for (const p3 of viewFrustum.points) {\n const p4 = worldToMap.multiplyPoint3d(p3, 1);\n if (p4.w > 0.0001)\n viewTileRange.extendXYZW(p4.x, p4.y, p4.z, p4.w);\n else\n viewTileRange.high.z = Math.max(1.0, viewTileRange.high.z); // behind eye plane.\n }\n } else {\n ref.accumulateTransformedRange(viewTileRange, worldToMap, undefined);\n }\n }\n }\n\n if (!viewTileRange.isNull)\n viewTileRange.clone(shadowRange);\n\n // Expand shadow range to include both the shadowers and shadowed portion of background map.\n scratchFrustum.initFromRange(shadowRange);\n mapToWorld.multiplyPoint3dArrayQuietNormalize(scratchFrustum.points); // This frustum represents the shadowing geometry. Intersect it with background geometry and expand the range depth to include that intersection.\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\n if (undefined !== backgroundMapGeometry) {\n const backgroundDepthRange = backgroundMapGeometry.getFrustumIntersectionDepthRange(this._shadowFrustum, iModel.projectExtents);\n if (!backgroundDepthRange.isNull)\n shadowRange.low.z = Math.min(shadowRange.low.z, backgroundDepthRange.low);\n }\n\n this._params.viewFrustum.transformBy(worldToMapTransform, scratchFrustum);\n scratchFrustumPlanes.init(scratchFrustum);\n\n const viewIntersectShadowRange = Range3d.createNull();\n const viewClipPlanes = ConvexClipPlaneSet.createPlanes(scratchFrustumPlanes.planes);\n ClipUtilities.announceLoopsOfConvexClipPlaneSetIntersectRange(viewClipPlanes, shadowRange, (points: GrowableXYZArray) => {\n for (const point of points.getPoint3dArray())\n viewIntersectShadowRange.extendPoint(point);\n });\n if (viewIntersectShadowRange.isNull) {\n this.notifyGraphicsChanged();\n return;\n }\n viewIntersectShadowRange.high.z = shadowRange.high.z; // We need to include shadowing geometry that may be outside view (along the solar axis).\n\n this._shadowFrustum.initFromRange(viewIntersectShadowRange);\n mapToWorld.multiplyPoint3dArrayQuietNormalize(this._shadowFrustum.points);\n\n const tileRange = Range3d.createNull();\n scratchFrustumPlanes.init(this._shadowFrustum);\n for (const ref of view.getTileTreeRefs()) {\n if (!ref.castsShadows)\n return;\n\n const drawArgs = createDrawArgs(context, this, ref, scratchFrustumPlanes, (tiles: Tile[]) => {\n for (const tile of tiles)\n tileRange.extendRange(tileToMapTransform.multiplyRange(tile.range, this._scratchRange));\n });\n\n if (undefined === drawArgs)\n return;\n\n const tileToMapTransform = worldToMapTransform.multiplyTransformTransform(drawArgs.location, this._scratchTransform);\n drawArgs.tree.draw(drawArgs);\n }\n\n if (tileRange.isNull) {\n this.clearGraphics(true);\n } else if (this._graphics.length > 0) {\n // Avoid an uninvertible matrix on empty range...\n if (Geometry.isAlmostEqualNumber(shadowRange.low.x, shadowRange.high.x) ||\n Geometry.isAlmostEqualNumber(shadowRange.low.y, shadowRange.high.y) ||\n Geometry.isAlmostEqualNumber(shadowRange.low.z, shadowRange.high.z)) {\n this.clearGraphics(true);\n return;\n }\n\n const frustumMap = this._shadowFrustum.toMap4d();\n if (undefined === frustumMap) {\n this.clearGraphics(true);\n assert(false);\n return;\n }\n\n this._projectionMatrix = frustumMap.transform0.clone();\n\n const worldToNpc = postProjectionMatrixNpc.multiplyMatrixMatrix(this._projectionMatrix);\n const npcToView = Map4d.createBoxMap(Point3d.create(0, 0, 0), Point3d.create(1, 1, 1), Point3d.create(0, 0, 0), Point3d.create(shadowMapWidth, shadowMapHeight, 1))!;\n const npcToWorld = worldToNpc.createInverse();\n if (undefined === npcToWorld) {\n this.clearGraphics(true);\n return;\n }\n\n const worldToNpcMap = Map4d.createRefs(worldToNpc, npcToWorld);\n this._worldToViewMap = npcToView.multiplyMapMap(worldToNpcMap);\n }\n\n this._target.uniforms.shadow.update();\n this.notifyGraphicsChanged();\n }\n\n public draw(target: Target) {\n assert(this.isEnabled);\n\n if (this.isReady || 0 === this._graphics.length)\n return;\n\n const bundle = this.getBundle(target);\n if (undefined === bundle)\n return;\n\n this._isDrawing = true;\n\n const prevState = System.instance.currentRenderState.clone();\n const gl = System.instance.context;\n gl.viewport(0, 0, shadowMapWidth, shadowMapHeight);\n\n // NB: textures and materials are needed because their transparencies affect whether or not a surface casts shadows\n const viewFlags = target.currentViewFlags.copy({\n renderMode: RenderMode.SmoothShade,\n wiremesh: false,\n transparency: false,\n lighting: false,\n shadows: false,\n monochrome: false,\n ambientOcclusion: false,\n visibleEdges: false,\n hiddenEdges: false,\n });\n\n System.instance.applyRenderState(this._renderState);\n const prevPlan = target.plan;\n\n target.changeFrustum(this._shadowFrustum, this._shadowFrustum.getFraction(), true);\n target.uniforms.branch.changeRenderPlan(viewFlags, target.plan.is3d, target.plan.hline);\n\n const renderCommands = bundle.renderCommands;\n renderCommands.reset(target, target.uniforms.branch.stack, this._batchState);\n renderCommands.addGraphics(this._graphics);\n\n System.instance.frameBufferStack.execute(bundle.fbo, true, false, () => {\n System.instance.context.clearDepth(1.0);\n System.instance.context.clear(GL.BufferBit.Depth);\n target.techniques.execute(target, renderCommands.getCommands(RenderPass.OpaquePlanar), RenderPass.PlanarClassification); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.\n target.techniques.execute(target, renderCommands.getCommands(RenderPass.OpaqueGeneral), RenderPass.PlanarClassification); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.\n });\n\n // copy depth buffer to EVSM shadow buffer and average down for AA effect\n gl.viewport(0, 0, evsmWidth, evsmHeight);\n System.instance.frameBufferStack.execute(bundle.fboSM, true, false, () => {\n System.instance.applyRenderState(this._noZRenderState);\n const params = getDrawParams(target, bundle.evsmGeom);\n target.techniques.draw(params);\n });\n\n // mipmap resulting EVSM texture and set filtering options\n System.instance.activateTexture2d(TextureUnit.ShadowMap, bundle.shadowMapTexture.texture.getHandle());\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n System.instance.setMaxAnisotropy(undefined);\n // target.recordPerformanceMetric(\"Compute EVSM\");\n\n this._batchState.reset(); // Reset the batch Ids...\n target.changeRenderPlan(prevPlan);\n\n System.instance.applyRenderState(prevState);\n System.instance.context.viewport(0, 0, target.viewRect.width, target.viewRect.height); // Restore viewport\n this.clearGraphics(false);\n this._isDrawing = false;\n this._isReady = true;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SolarShadowMap.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/SolarShadowMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, dispose } from \"@itwin/core-bentley\";\nimport { ClipUtilities, ConvexClipPlaneSet, Geometry, GrowableXYZArray, Map4d, Matrix3d, Matrix4d, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport {\n Frustum, FrustumPlanes, RenderMode, RenderTexture, SolarShadowSettings, TextureTransparency, ViewFlags,\n} from \"@itwin/core-common\";\nimport { RenderType } from \"@itwin/webgl-compatibility\";\nimport { Tile, TileDrawArgs, TileTreeReference, TileVisibility } from \"../../../tile/internal\";\nimport { SceneContext } from \"../../../ViewContext\";\nimport { RenderGraphic } from \"../../../render/RenderGraphic\";\nimport { RenderMemory } from \"../../../render/RenderMemory\";\nimport { BranchStack } from \"./BranchStack\";\nimport { BatchState } from \"./BatchState\";\nimport { EVSMGeometry } from \"./CachedGeometry\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { FrameBuffer } from \"./FrameBuffer\";\nimport { GL } from \"./GL\";\nimport { RenderCommands } from \"./RenderCommands\";\nimport { RenderPass, TextureUnit } from \"./RenderFlags\";\nimport { RenderState } from \"./RenderState\";\nimport { getDrawParams } from \"./ScratchDrawParams\";\nimport { System } from \"./System\";\nimport { Target } from \"./Target\";\nimport { Texture, TextureHandle } from \"./Texture\";\n\ntype ProcessTiles = (tiles: Tile[]) => void;\n\nfunction createDrawArgs(sceneContext: SceneContext, solarShadowMap: SolarShadowMap, tree: TileTreeReference, frustumPlanes: FrustumPlanes, processTiles: ProcessTiles): TileDrawArgs | undefined {\n class SolarShadowMapDrawArgs extends TileDrawArgs {\n private _useViewportMap?: boolean;\n private readonly _processTiles: ProcessTiles;\n\n constructor(private _mapFrustumPlanes: FrustumPlanes, private _shadowMap: SolarShadowMap, args: TileDrawArgs, process: ProcessTiles) {\n super(args);\n this._processTiles = process;\n }\n\n // The solar shadow projection is parallel - which can cause excessive tile selection if it is along an axis of an unbounded tile\n // tree such as the OSM buildings. Rev limit the selection here.\n public override get maxRealityTreeSelectionCount(): undefined | number { return 500; }\n\n public override processSelectedTiles(tiles: Tile[]): void {\n this._processTiles(tiles);\n }\n\n public override get frustumPlanes(): FrustumPlanes {\n if (true === this._useViewportMap)\n return super.frustumPlanes;\n else\n return this._mapFrustumPlanes;\n }\n\n public override get worldToViewMap(): Map4d {\n if (true === this._useViewportMap)\n return super.worldToViewMap;\n else\n return this._shadowMap.worldToViewMap;\n }\n\n public override drawGraphics(): void {\n const graphics = this.produceGraphics();\n if (graphics)\n this._shadowMap.addGraphic(graphics);\n }\n\n public override getPixelSize(tile: Tile): number {\n // For tiles that are part of the scene, size them based on the viewport frustum so that shadow map uses same resolution tiles as scene\n // - otherwise artifacts like shadow acne may result.\n // For tiles that are NOT part of the scene, size them based on the shadow frustum, not the viewport frustum\n // - otherwise excessive numbers of excessively detailed may be requested for the shadow map.\n if (undefined === this._useViewportMap) {\n this._useViewportMap = true;\n const vis = tile.computeVisibility(this);\n this._useViewportMap = TileVisibility.OutsideFrustum !== vis;\n }\n\n const size = super.getPixelSize(tile);\n this._useViewportMap = undefined;\n return size;\n }\n\n public static create(context: SceneContext, shadowMap: SolarShadowMap, tileTree: TileTreeReference, planes: FrustumPlanes, process: ProcessTiles) {\n const args = tileTree.createDrawArgs(context);\n return undefined !== args ? new SolarShadowMapDrawArgs(planes, shadowMap, args, process) : undefined;\n }\n }\n\n return SolarShadowMapDrawArgs.create(sceneContext, solarShadowMap, tree, frustumPlanes, processTiles);\n}\n\nconst shadowMapWidth = 4096; // size of original depth buffer map\nconst shadowMapHeight = shadowMapWidth; // TBD - Adjust for aspect ratio.\nconst evsmWidth = shadowMapWidth / 2; // EVSM buffer is 1/2 size each direction\nconst evsmHeight = shadowMapHeight / 2;\nconst postProjectionMatrixNpc = Matrix4d.createRowValues(/* Row 1 */ 0, 1, 0, 0, /* Row 2 */ 0, 0, 1, 0, /* Row 3 */ 1, 0, 0, 0, /* Row 4 */ 0, 0, 0, 1);\n\n// Bundles up the disposable, create-once-and-reuse members of a SolarShadowMap.\nclass Bundle implements WebGLDisposable {\n private constructor(\n public readonly depthTexture: Texture,\n public readonly shadowMapTexture: Texture,\n public readonly fbo: FrameBuffer,\n public readonly fboSM: FrameBuffer,\n public readonly evsmGeom: EVSMGeometry,\n public readonly renderCommands: RenderCommands) {\n }\n\n public static create(target: Target, stack: BranchStack, batch: BatchState): Bundle | undefined {\n const depthTextureHandle = System.instance.createDepthBuffer(shadowMapWidth, shadowMapHeight) as TextureHandle;\n if (undefined === depthTextureHandle)\n return undefined;\n\n let pixelDataType = GL.Texture.DataType.Float;\n switch (System.instance.maxRenderType) {\n case RenderType.TextureFloat:\n break;\n case RenderType.TextureHalfFloat:\n pixelDataType = System.instance.context.HALF_FLOAT;\n break;\n /* falls through */\n default:\n return undefined;\n }\n\n const colorTextures: TextureHandle[] = [];\n\n const fbo = FrameBuffer.create(colorTextures, depthTextureHandle);\n if (undefined === fbo)\n return undefined;\n\n // shadowMap texture is 1/4 size the depth texture (and averaged down when converting)\n const shadowMapTextureHandle = TextureHandle.createForAttachment(evsmWidth, evsmHeight, GL.Texture.Format.Rgba, pixelDataType);\n if (undefined === shadowMapTextureHandle)\n return undefined;\n\n const fboSM = FrameBuffer.create([shadowMapTextureHandle]);\n if (undefined === fboSM)\n return undefined;\n\n const depthTexture = new Texture({ ownership: \"external\", type: RenderTexture.Type.TileSection, handle: depthTextureHandle, transparency: TextureTransparency.Opaque });\n const evsmGeom = EVSMGeometry.createGeometry(depthTexture.texture.getHandle()!, shadowMapWidth, shadowMapHeight);\n if (undefined === evsmGeom)\n return undefined;\n\n const shadowMapTexture = new Texture({ type: RenderTexture.Type.Normal, ownership: \"external\", handle: shadowMapTextureHandle, transparency: TextureTransparency.Opaque });\n const renderCommands = new RenderCommands(target, stack, batch);\n return new Bundle(depthTexture, shadowMapTexture, fbo, fboSM, evsmGeom, renderCommands);\n }\n\n public get isDisposed(): boolean {\n return this.depthTexture.isDisposed\n && this.shadowMapTexture.isDisposed\n && this.fbo.isDisposed\n && this.fboSM.isDisposed\n && this.evsmGeom.isDisposed;\n }\n\n public [Symbol.dispose](): void {\n dispose(this.depthTexture);\n dispose(this.shadowMapTexture);\n dispose(this.fbo);\n dispose(this.fboSM);\n dispose(this.evsmGeom);\n }\n}\n\n/** Describes the set of parameters which, when they change, require us to recreate the shadow map. */\nclass ShadowMapParams {\n public readonly direction = new Vector3d();\n public readonly viewFrustum = new Frustum();\n public settings: SolarShadowSettings;\n\n public constructor(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings) {\n direction.clone(this.direction);\n this.viewFrustum.setFrom(viewFrustum);\n this.settings = settings;\n }\n\n public update(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings): void {\n this.settings = settings;\n this.viewFrustum.setFrom(viewFrustum);\n direction.clone(this.direction);\n }\n}\n\nconst defaultSunDirection = Vector3d.create(-1, -1, -1).normalize()!;\nconst scratchFrustum = new Frustum();\nconst scratchFrustumPlanes = FrustumPlanes.createEmpty();\n\nexport class SolarShadowMap implements RenderMemory.Consumer, WebGLDisposable {\n private _bundle?: Bundle;\n private _projectionMatrix = Matrix4d.createIdentity();\n private _graphics: RenderGraphic[] = [];\n private _shadowFrustum = new Frustum();\n private _isReady = false;\n private _isDrawing = false;\n private _enabled = false;\n private _params?: ShadowMapParams;\n private readonly _scratchRange = Range3d.createNull();\n private readonly _scratchTransform = Transform.createIdentity();\n\n private readonly _scratchViewFlags = new ViewFlags();\n private readonly _renderState: RenderState;\n private readonly _noZRenderState: RenderState;\n private readonly _batchState: BatchState;\n private _worldToViewMap = Map4d.createIdentity();\n private readonly _target: Target;\n\n // This exists chiefly for debugging. See ToggleShadowMapTilesTool.\n public onGraphicsChanged?: (graphics: RenderGraphic[]) => void;\n\n private getBundle(target: Target): Bundle | undefined {\n if (undefined === this._bundle) {\n this._bundle = Bundle.create(target, target.uniforms.branch.stack, this._batchState);\n assert(undefined !== this._bundle);\n }\n\n return this._bundle;\n }\n\n public get isReady() { return this._isReady; }\n public get isDrawing() { return this._isDrawing; }\n public get isEnabled() { return this._enabled; }\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\n public get depthTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.depthTexture : undefined; }\n public get shadowMapTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.shadowMapTexture : undefined; }\n public get settings(): SolarShadowSettings | undefined { return undefined !== this._params ? this._params.settings : undefined; }\n public get direction(): Vector3d | undefined { return undefined !== this._params ? this._params.direction : undefined; }\n public get frustum(): Frustum { return this._shadowFrustum; }\n public get worldToViewMap(): Map4d { return this._worldToViewMap; }\n public addGraphic(graphic: RenderGraphic) { this._graphics.push(graphic); }\n\n public constructor(target: Target) {\n this._target = target;\n this._renderState = new RenderState();\n this._renderState.flags.depthMask = true;\n this._renderState.flags.blend = false;\n this._renderState.flags.depthTest = true;\n\n this._noZRenderState = new RenderState();\n this._noZRenderState.flags.depthMask = false;\n\n this._batchState = new BatchState(target.uniforms.branch.stack);\n }\n\n public disable() {\n this._enabled = this._isReady = false;\n this._bundle = dispose(this._bundle);\n this.clearGraphics(true);\n this._target.uniforms.shadow.update();\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n const bundle = this._bundle;\n if (undefined !== bundle)\n stats.addShadowMap(bundle.depthTexture.bytesUsed + bundle.shadowMapTexture.bytesUsed);\n }\n\n public get isDisposed(): boolean { return undefined === this._bundle && 0 === this._graphics.length; }\n\n public [Symbol.dispose]() {\n this._bundle = dispose(this._bundle);\n this.clearGraphics(true);\n }\n\n private clearGraphics(notify: boolean) {\n for (const graphic of this._graphics)\n graphic[Symbol.dispose]();\n\n this._graphics.length = 0;\n if (notify)\n this.notifyGraphicsChanged();\n }\n\n private notifyGraphicsChanged(): void {\n if (undefined !== this.onGraphicsChanged)\n this.onGraphicsChanged(this._graphics);\n }\n\n public update(context: SceneContext | undefined) {\n this._isReady = false;\n this.clearGraphics(false);\n\n if (undefined === context || !context.viewport.view.isSpatialView()) {\n this.disable();\n this.notifyGraphicsChanged();\n return;\n }\n\n const view = context.viewport.view;\n const style = view.getDisplayStyle3d();\n const sunDirection = style.sunDirection ?? defaultSunDirection;\n\n const minimumHorizonDirection = -.01;\n if (sunDirection.z > minimumHorizonDirection) {\n this.notifyGraphicsChanged();\n return;\n }\n\n this._enabled = true;\n const viewFrustum = context.viewingSpace.getFrustum();\n const settings = style.settings.solarShadows;\n if (undefined === this._params)\n this._params = new ShadowMapParams(viewFrustum, sunDirection, settings);\n else\n this._params.update(viewFrustum, sunDirection, settings);\n\n const iModel = view.iModel;\n\n const worldToMapTransform = Transform.createRefs(Point3d.createZero(), Matrix3d.createRigidHeadsUp(this._params.direction.negate()).inverse()!);\n const worldToMap = Matrix4d.createTransform(worldToMapTransform);\n const mapToWorld = worldToMap.createInverse()!;\n\n // Start with entire project.\n const shadowRange = worldToMapTransform.multiplyRange(iModel.projectExtents);\n\n // Limit the map to only displayed models.\n const viewTileRange = Range3d.createNull();\n for (const ref of view.getTileTreeRefs()) {\n if (ref.castsShadows) {\n if (ref.isGlobal) {\n // A shadow-casting tile tree that spans the globe. Limit its range to the viewed extents.\n for (const p3 of viewFrustum.points) {\n const p4 = worldToMap.multiplyPoint3d(p3, 1);\n if (p4.w > 0.0001)\n viewTileRange.extendXYZW(p4.x, p4.y, p4.z, p4.w);\n else\n viewTileRange.high.z = Math.max(1.0, viewTileRange.high.z); // behind eye plane.\n }\n } else {\n ref.accumulateTransformedRange(viewTileRange, worldToMap, undefined);\n }\n }\n }\n\n if (!viewTileRange.isNull)\n viewTileRange.clone(shadowRange);\n\n // Expand shadow range to include both the shadowers and shadowed portion of background map.\n scratchFrustum.initFromRange(shadowRange);\n mapToWorld.multiplyPoint3dArrayQuietNormalize(scratchFrustum.points); // This frustum represents the shadowing geometry. Intersect it with background geometry and expand the range depth to include that intersection.\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\n if (undefined !== backgroundMapGeometry) {\n const backgroundDepthRange = backgroundMapGeometry.getFrustumIntersectionDepthRange(this._shadowFrustum, iModel.projectExtents);\n if (!backgroundDepthRange.isNull)\n shadowRange.low.z = Math.min(shadowRange.low.z, backgroundDepthRange.low);\n }\n\n this._params.viewFrustum.transformBy(worldToMapTransform, scratchFrustum);\n scratchFrustumPlanes.init(scratchFrustum);\n\n const viewIntersectShadowRange = Range3d.createNull();\n const viewClipPlanes = ConvexClipPlaneSet.createPlanes(scratchFrustumPlanes.planes);\n ClipUtilities.announceLoopsOfConvexClipPlaneSetIntersectRange(viewClipPlanes, shadowRange, (points: GrowableXYZArray) => {\n for (const point of points.getPoint3dArray())\n viewIntersectShadowRange.extendPoint(point);\n });\n if (viewIntersectShadowRange.isNull) {\n this.notifyGraphicsChanged();\n return;\n }\n viewIntersectShadowRange.high.z = shadowRange.high.z; // We need to include shadowing geometry that may be outside view (along the solar axis).\n\n this._shadowFrustum.initFromRange(viewIntersectShadowRange);\n mapToWorld.multiplyPoint3dArrayQuietNormalize(this._shadowFrustum.points);\n\n const tileRange = Range3d.createNull();\n scratchFrustumPlanes.init(this._shadowFrustum);\n for (const ref of view.getTileTreeRefs()) {\n if (!ref.castsShadows)\n continue;\n\n const drawArgs = createDrawArgs(context, this, ref, scratchFrustumPlanes, (tiles: Tile[]) => {\n for (const tile of tiles)\n tileRange.extendRange(tileToMapTransform.multiplyRange(tile.range, this._scratchRange));\n });\n\n if (undefined === drawArgs)\n continue;\n\n const tileToMapTransform = worldToMapTransform.multiplyTransformTransform(drawArgs.location, this._scratchTransform);\n drawArgs.tree.draw(drawArgs);\n }\n\n if (tileRange.isNull) {\n this.clearGraphics(true);\n } else if (this._graphics.length > 0) {\n // Avoid an uninvertible matrix on empty range...\n if (Geometry.isAlmostEqualNumber(shadowRange.low.x, shadowRange.high.x) ||\n Geometry.isAlmostEqualNumber(shadowRange.low.y, shadowRange.high.y) ||\n Geometry.isAlmostEqualNumber(shadowRange.low.z, shadowRange.high.z)) {\n this.clearGraphics(true);\n return;\n }\n\n const frustumMap = this._shadowFrustum.toMap4d();\n if (undefined === frustumMap) {\n this.clearGraphics(true);\n assert(false);\n return;\n }\n\n this._projectionMatrix = frustumMap.transform0.clone();\n\n const worldToNpc = postProjectionMatrixNpc.multiplyMatrixMatrix(this._projectionMatrix);\n const npcToView = Map4d.createBoxMap(Point3d.create(0, 0, 0), Point3d.create(1, 1, 1), Point3d.create(0, 0, 0), Point3d.create(shadowMapWidth, shadowMapHeight, 1))!;\n const npcToWorld = worldToNpc.createInverse();\n if (undefined === npcToWorld) {\n this.clearGraphics(true);\n return;\n }\n\n const worldToNpcMap = Map4d.createRefs(worldToNpc, npcToWorld);\n this._worldToViewMap = npcToView.multiplyMapMap(worldToNpcMap);\n }\n\n this._target.uniforms.shadow.update();\n this.notifyGraphicsChanged();\n }\n\n public draw(target: Target) {\n assert(this.isEnabled);\n\n if (this.isReady || 0 === this._graphics.length)\n return;\n\n const bundle = this.getBundle(target);\n if (undefined === bundle)\n return;\n\n this._isDrawing = true;\n\n const prevState = System.instance.currentRenderState.clone();\n const gl = System.instance.context;\n gl.viewport(0, 0, shadowMapWidth, shadowMapHeight);\n\n // NB: textures and materials are needed because their transparencies affect whether or not a surface casts shadows\n const viewFlags = target.currentViewFlags.copy({\n renderMode: RenderMode.SmoothShade,\n wiremesh: false,\n transparency: false,\n lighting: false,\n shadows: false,\n monochrome: false,\n ambientOcclusion: false,\n visibleEdges: false,\n hiddenEdges: false,\n });\n\n System.instance.applyRenderState(this._renderState);\n const prevPlan = target.plan;\n\n target.changeFrustum(this._shadowFrustum, this._shadowFrustum.getFraction(), true);\n target.uniforms.branch.changeRenderPlan(viewFlags, target.plan.is3d, target.plan.hline);\n\n const renderCommands = bundle.renderCommands;\n renderCommands.reset(target, target.uniforms.branch.stack, this._batchState);\n renderCommands.addGraphics(this._graphics);\n\n System.instance.frameBufferStack.execute(bundle.fbo, true, false, () => {\n System.instance.context.clearDepth(1.0);\n System.instance.context.clear(GL.BufferBit.Depth);\n target.techniques.execute(target, renderCommands.getCommands(RenderPass.OpaquePlanar), RenderPass.PlanarClassification); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.\n target.techniques.execute(target, renderCommands.getCommands(RenderPass.OpaqueGeneral), RenderPass.PlanarClassification); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.\n });\n\n // copy depth buffer to EVSM shadow buffer and average down for AA effect\n gl.viewport(0, 0, evsmWidth, evsmHeight);\n System.instance.frameBufferStack.execute(bundle.fboSM, true, false, () => {\n System.instance.applyRenderState(this._noZRenderState);\n const params = getDrawParams(target, bundle.evsmGeom);\n target.techniques.draw(params);\n });\n\n // mipmap resulting EVSM texture and set filtering options\n System.instance.activateTexture2d(TextureUnit.ShadowMap, bundle.shadowMapTexture.texture.getHandle());\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\n System.instance.setMaxAnisotropy(undefined);\n // target.recordPerformanceMetric(\"Compute EVSM\");\n\n this._batchState.reset(); // Reset the batch Ids...\n target.changeRenderPlan(prevPlan);\n\n System.instance.applyRenderState(prevState);\n System.instance.context.viewport(0, 0, target.viewRect.width, target.viewRect.height); // Restore viewport\n this.clearGraphics(false);\n this._isDrawing = false;\n this._isReady = true;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SurfaceGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/SurfaceGeometry.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAmG,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhJ,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAkC,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,WAAW,EAA+B,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAKxE,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAEpD;AAMD,gBAAgB;AAChB,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,SAAgB,WAAW,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAErD,IAAW,UAAU,qBAA4B;WAEnC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS;IAiErF,IAAW,UAAU,IAAI,OAAO,CAG/B;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;IAKhB,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;IAI9D,IAAW,KAAK,YAAmG;IACnH,IAAW,cAAc,YAAwG;IACjI,IAAW,UAAU,YAAgE;IACrF,IAAW,YAAY,YAAgF;IACvG,IAAW,OAAO,YAAgC;IAClD,IAAoB,uBAAuB,YAA2B;IACtE,IAAW,aAAa,YAAuE;IAC/F,IAAW,YAAY,YAAgE;IACvF,IAAoB,uBAAuB,YAE1C;IAED,IAAoB,kBAAkB,YAKrC;IAED,IAAoB,SAAS,SAAmB;IAChD,IAAoB,MAAM,cAAwB;IAClD,IAAoB,YAAY,cAAwB;IAExD,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,wBAAwB,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAmBxE,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK/D,IAAW,WAAW,IAAI,WAAW,CAAgC;IACrE,IAAoB,YAAY,YAAyB;IACzD,IAAoB,gBAAgB,YAAyC;IAC7E,IAAW,WAAW,IAAI,WAAW,CASpC;IAEe,QAAQ,CAAC,MAAM,EAAE,MAAM;IAOvB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAoF7C,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"SurfaceGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/SurfaceGeometry.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAmG,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhJ,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAkC,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,WAAW,EAA+B,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAKxE,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAEpD;AAMD,gBAAgB;AAChB,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,SAAgB,WAAW,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAErD,IAAW,UAAU,qBAA4B;WAEnC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS;IAiErF,IAAW,UAAU,IAAI,OAAO,CAG/B;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;IAKhB,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;IAI9D,IAAW,KAAK,YAAmG;IACnH,IAAW,cAAc,YAAwG;IACjI,IAAW,UAAU,YAAgE;IACrF,IAAW,YAAY,YAAgF;IACvG,IAAW,OAAO,YAAgC;IAClD,IAAoB,uBAAuB,YAA2B;IACtE,IAAW,aAAa,YAAuE;IAC/F,IAAW,YAAY,YAAgE;IACvF,IAAoB,uBAAuB,YAE1C;IAED,IAAoB,kBAAkB,YAKrC;IAED,IAAoB,SAAS,SAAmB;IAChD,IAAoB,MAAM,cAAwB;IAClD,IAAoB,YAAY,cAAwB;IAExD,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,wBAAwB,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAmBxE,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK/D,IAAW,WAAW,IAAI,WAAW,CAAgC;IACrE,IAAoB,YAAY,YAAyB;IACzD,IAAoB,gBAAgB,YAAyC;IAC7E,IAAW,WAAW,IAAI,WAAW,CASpC;IAEe,QAAQ,CAAC,MAAM,EAAE,MAAM;IAOvB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAoF7C,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAiCnD,IAAoB,YAAY,IAAI,YAAY,GAAG,SAAS,CAAmC;IAExF,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO;IAIhD,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO;IAIlD,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAwDhF,OAAO;IAWP,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,cAAc;CAavB"}
|
|
@@ -217,18 +217,30 @@ class SurfaceGeometry extends MeshGeometry_1.MeshGeometry {
|
|
|
217
217
|
return hasAlpha ? "translucent" : opaquePass;
|
|
218
218
|
}
|
|
219
219
|
_wantWoWReversal(target) {
|
|
220
|
+
if (this.isGlyph) {
|
|
221
|
+
// Raster text is always subject to white-on-white reversal.
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
220
224
|
const fillFlags = this.fillFlags;
|
|
221
|
-
if (core_common_1.FillFlags.None !== (fillFlags & core_common_1.FillFlags.Background))
|
|
225
|
+
if (core_common_1.FillFlags.None !== (fillFlags & core_common_1.FillFlags.Background)) {
|
|
222
226
|
return false; // fill color explicitly from background
|
|
223
|
-
|
|
224
|
-
|
|
227
|
+
}
|
|
228
|
+
if (this.wantTextures(target, this.hasTexture)) {
|
|
229
|
+
// Don't invert white pixels of textures.
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
225
232
|
const vf = target.currentViewFlags;
|
|
226
|
-
if (core_common_1.RenderMode.Wireframe === vf.renderMode
|
|
233
|
+
if (core_common_1.RenderMode.Wireframe === vf.renderMode) {
|
|
234
|
+
// Fill displayed even in wireframe?
|
|
235
|
+
return core_common_1.FillFlags.None !== (fillFlags & core_common_1.FillFlags.Always);
|
|
236
|
+
}
|
|
237
|
+
if (vf.visibleEdges) {
|
|
227
238
|
return false; // never invert surfaces when edges are displayed
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
239
|
+
}
|
|
240
|
+
if (this.isLit && wantLighting(vf)) {
|
|
241
|
+
return false; // the lit color won't be pure white anyway.
|
|
242
|
+
}
|
|
243
|
+
return true;
|
|
232
244
|
}
|
|
233
245
|
get materialInfo() { return this.mesh.materialInfo; }
|
|
234
246
|
useTexture(params) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SurfaceGeometry.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/SurfaceGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, dispose } from \"@itwin/core-bentley\";\nimport { CartographicRange, FillFlags, RenderMode, TextureTransparency, ThematicGradientTransparencyMode, ViewFlags } from \"@itwin/core-common\";\nimport { SurfaceType } from \"../../../common/internal/render/SurfaceParams\";\nimport { RenderMemory } from \"../../../render/RenderMemory\";\nimport { AttributeMap } from \"./AttributeMap\";\nimport { ShaderProgramParams } from \"./DrawCommand\";\nimport { GL } from \"./GL\";\nimport { BufferHandle, BufferParameters, BuffersContainer } from \"./AttributeBuffers\";\nimport { MaterialInfo } from \"./Material\";\nimport { Pass, RenderOrder, RenderPass, SurfaceBitIndex } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { Target } from \"./Target\";\nimport { TechniqueId } from \"./TechniqueId\";\nimport { MeshData } from \"./MeshData\";\nimport { MeshGeometry } from \"./MeshGeometry\";\nimport { LayerTextureParams, ProjectedTexture } from \"./MapLayerParams\";\nimport { MeshParams } from \"../../../common/internal/render/MeshParams\";\nimport { MapCartoRectangle, PlanarProjection, PlanarTilePatch } from \"../../../tile/internal\";\nimport { MeshMapLayerGraphicParams } from \"../MeshMapLayerGraphicParams\";\nimport { Vector3d } from \"@itwin/core-geometry\";\n\n/** @internal */\nexport function wantMaterials(vf: ViewFlags): boolean {\n return vf.materials && RenderMode.SmoothShade === vf.renderMode;\n}\n\nfunction wantLighting(vf: ViewFlags) {\n return RenderMode.SmoothShade === vf.renderMode && vf.lighting;\n}\n\n/** @internal */\nexport class SurfaceGeometry extends MeshGeometry {\n private readonly _buffers: BuffersContainer;\n private readonly _indices: BufferHandle;\n public readonly hasTextures: boolean;\n public textureParams: LayerTextureParams | undefined;\n\n public get lutBuffers() { return this._buffers; }\n\n public static create(mesh: MeshData, params: MeshParams): SurfaceGeometry | undefined {\n const indices = params.surface.indices;\n const indexBuffer = BufferHandle.createArrayBuffer(indices.data);\n\n const tile = params.tileData;\n\n const layerClassifiers = tile?.layerClassifiers;\n\n if (!layerClassifiers?.size || !tile || undefined === layerClassifiers) {\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh, undefined) : undefined;\n }\n\n const transformECEF = tile.ecefTransform;\n\n const tileEcefRange = transformECEF.multiplyRange(tile.range);\n const cartographicRange = new CartographicRange(tileEcefRange, transformECEF);\n const boundingBox = cartographicRange.getLongitudeLatitudeBoundingBox();\n const mapCartoRectangle = MapCartoRectangle.fromRadians(\n boundingBox.low.x,\n boundingBox.low.y,\n boundingBox.high.x,\n boundingBox.high.y\n );\n\n const corners = tile.range.corners();\n\n const normal = Vector3d.createCrossProductToPoints(corners[0], corners[1], corners[2])?.normalize();\n if (!normal) {\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh, undefined) : undefined;\n }\n const chordHeight = corners[0].distance(corners[3]) / 2;\n\n const surfacePlanarTilePatch = new PlanarTilePatch(corners, normal, chordHeight);\n const surfaceProjection = new PlanarProjection(surfacePlanarTilePatch);\n\n const meshParams: MeshMapLayerGraphicParams = {\n projection: surfaceProjection,\n tileRectangle: mapCartoRectangle,\n tileId: undefined,\n baseColor: undefined,\n baseTransparent: false,\n layerClassifiers\n };\n\n const layerTextures: ProjectedTexture[] = [];\n\n let sequentialIndex = 0;\n\n layerClassifiers?.forEach((layerClassifier) => {\n layerTextures[sequentialIndex++] = new ProjectedTexture(layerClassifier, meshParams, meshParams.tileRectangle);\n });\n\n let surfaceGeometry;\n\n if (undefined !== indexBuffer) {\n const indexCount = indices.length;\n const hasLayerTextures = layerTextures.length > 0;\n const layerTextureParams = hasLayerTextures ? LayerTextureParams.create(layerTextures) : undefined;\n\n surfaceGeometry = new SurfaceGeometry(indexBuffer, indexCount, mesh, layerTextureParams);\n }\n\n return surfaceGeometry;\n }\n\n public get isDisposed(): boolean {\n return this._buffers.isDisposed\n && this._indices.isDisposed;\n }\n\n public [Symbol.dispose]() {\n dispose(this._buffers);\n dispose(this._indices);\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n stats.addSurface(this._indices.bytesUsed);\n }\n\n public get isLit() { return SurfaceType.Lit === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\n public get isTexturedType() { return SurfaceType.Textured === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\n public get hasTexture() { return this.isTexturedType && undefined !== this.texture; }\n public get hasNormalMap() { return this.isLit && this.isTexturedType && undefined !== this.normalMap; }\n public get isGlyph() { return this.mesh.isGlyph; }\n public override get alwaysRenderTranslucent() { return this.isGlyph; }\n public get isTileSection() { return undefined !== this.texture && this.texture.isTileSection; }\n public get isClassifier() { return SurfaceType.VolumeClassifier === this.surfaceType; }\n public override get supportsThematicDisplay() {\n return !this.isGlyph;\n }\n\n public override get allowColorOverride() {\n // Text background color should not be overridden by feature symbology overrides - otherwise it becomes unreadable...\n // We don't actually know if we have text.\n // We do know that text background color uses blanking fill. So do ImageGraphics, so they're also going to forbid overriding their color.\n return FillFlags.Blanking !== (this.fillFlags & FillFlags.Blanking);\n }\n\n public override get asSurface() { return this; }\n public override get asEdge() { return undefined; }\n public override get asSilhouette() { return undefined; }\n\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\n const system = System.instance;\n\n // If we can't write depth in the fragment shader, use polygonOffset to force blanking regions to draw behind.\n const offset = RenderOrder.BlankingRegion === this.renderOrder && !system.supportsLogZBuffer;\n if (offset) {\n system.context.enable(GL.POLYGON_OFFSET_FILL);\n system.context.polygonOffset(1.0, 1.0);\n }\n\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers;\n bufs.bind();\n system.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\n bufs.unbind();\n\n if (offset)\n system.context.disable(GL.POLYGON_OFFSET_FILL);\n }\n\n public override wantMixMonochromeColor(target: Target): boolean {\n // Text relies on white-on-white reversal.\n return !this.isGlyph && (this.isLitSurface || this.wantTextures(target, this.hasTexture));\n }\n\n public get techniqueId(): TechniqueId { return TechniqueId.Surface; }\n public override get isLitSurface() { return this.isLit; }\n public override get hasBakedLighting() { return this.mesh.hasBakedLighting; }\n public get renderOrder(): RenderOrder {\n if (FillFlags.Behind === (this.fillFlags & FillFlags.Behind))\n return RenderOrder.BlankingRegion;\n\n let order = this.isLit ? RenderOrder.LitSurface : RenderOrder.UnlitSurface;\n if (this.isPlanar)\n order = order | RenderOrder.PlanarBit;\n\n return order;\n }\n\n public override getColor(target: Target) {\n if (FillFlags.Background === (this.fillFlags & FillFlags.Background))\n return target.uniforms.style.backgroundColorInfo;\n else\n return this.colorInfo;\n }\n\n public override getPass(target: Target): Pass {\n // Classifiers have a dedicated pass\n if (this.isClassifier)\n return \"classification\";\n\n let opaquePass: Pass = this.isPlanar ? \"opaque-planar\" : \"opaque\";\n\n // When reading pixels, glyphs are always opaque. Otherwise always transparent (for anti-aliasing).\n if (this.isGlyph)\n return target.isReadPixelsInProgress ? opaquePass : \"translucent\";\n\n const vf = target.currentViewFlags;\n\n // When rendering thematic isolines, we need translucency because they have anti-aliasing.\n const thematic = target.wantThematicDisplay && this.supportsThematicDisplay ? target.uniforms.thematic.thematicDisplay : undefined;\n if (thematic && target.uniforms.thematic.wantIsoLines)\n return \"translucent\";\n\n // In wireframe, unless fill is explicitly enabled for planar region, surface does not draw\n if (RenderMode.Wireframe === vf.renderMode && !this.mesh.isTextureAlwaysDisplayed) {\n const fillFlags = this.fillFlags;\n const showFill = FillFlags.Always === (fillFlags & FillFlags.Always) || (vf.fill && FillFlags.ByView === (fillFlags & FillFlags.ByView));\n if (!showFill)\n return \"none\";\n }\n\n // If transparency disabled by render mode or view flag, always draw opaque.\n if (!vf.transparency || RenderMode.SolidFill === vf.renderMode || RenderMode.HiddenLine === vf.renderMode)\n return opaquePass;\n\n // A gradient texture applied by analysis style always fully determines the transparency of the surface.\n if (this.hasScalarAnimation && undefined !== target.analysisTexture) {\n assert(undefined !== target.analysisStyle?.thematic);\n switch (target.analysisStyle.thematic.thematicSettings.textureTransparency) {\n case TextureTransparency.Translucent:\n return \"translucent\";\n case TextureTransparency.Opaque:\n return opaquePass;\n case TextureTransparency.Mixed:\n return `${opaquePass}-translucent`;\n }\n }\n\n // We have 3 sources of alpha: the material, the texture, and the color.\n // Base alpha comes from the material if it overrides it; otherwise from the color.\n // The texture's alpha is multiplied by the base alpha.\n // So we must draw in the translucent pass if the texture has transparency OR the base alpha is less than 1.\n let hasAlpha = false;\n const mat = wantMaterials(vf) ? this.mesh.materialInfo : undefined;\n if (undefined !== mat && mat.overridesAlpha)\n hasAlpha = mat.hasTranslucency;\n else\n hasAlpha = this.getColor(target).hasTranslucency;\n\n // Thematic gradient can optionally multiply gradient alpha with surface alpha.\n if (thematic && thematic.gradientSettings.transparencyMode === ThematicGradientTransparencyMode.MultiplySurfaceAndGradient) {\n switch (thematic.gradientSettings.textureTransparency) {\n case TextureTransparency.Opaque:\n // This surface's alpha gets multiplied by 1 - gradient colors are all opaque.\n return hasAlpha ? \"translucent\" : opaquePass;\n case TextureTransparency.Translucent:\n // This surface's alpha gets multiplied by < 1 - gradient colors are all translucent.\n return \"translucent\";\n case TextureTransparency.Mixed:\n // The gradient contains a mix of translucent and opaque colors.\n return hasAlpha ? \"translucent\" : `${opaquePass}-translucent`;\n }\n }\n\n if (!hasAlpha) {\n const tex = this.wantTextures(target, true) ? this.texture : undefined;\n switch (tex?.transparency) {\n case TextureTransparency.Translucent:\n hasAlpha = true;\n break;\n case TextureTransparency.Mixed:\n opaquePass = `${opaquePass}-translucent`;\n break;\n }\n }\n\n return hasAlpha ? \"translucent\" : opaquePass;\n }\n\n protected _wantWoWReversal(target: Target): boolean {\n const fillFlags = this.fillFlags;\n if (FillFlags.None !== (fillFlags & FillFlags.Background))\n return false; // fill color explicitly from background\n\n if (FillFlags.None !== (fillFlags & FillFlags.Always))\n return true; // fill displayed even in wireframe\n\n const vf = target.currentViewFlags;\n if (RenderMode.Wireframe === vf.renderMode || vf.visibleEdges)\n return false; // never invert surfaces when edges are displayed\n\n if (this.isLit && wantLighting(vf))\n return false;\n\n // Don't invert white pixels of textures...\n return !this.wantTextures(target, this.hasTexture);\n }\n\n public override get materialInfo(): MaterialInfo | undefined { return this.mesh.materialInfo; }\n\n public useTexture(params: ShaderProgramParams): boolean {\n return this.wantTextures(params.target, this.hasTexture);\n }\n\n public useNormalMap(params: ShaderProgramParams): boolean {\n return this.wantNormalMaps(params.target, this.hasNormalMap);\n }\n\n public computeSurfaceFlags(params: ShaderProgramParams, flags: Int32Array): void {\n const target = params.target;\n const vf = target.currentViewFlags;\n\n const useMaterial = wantMaterials(vf);\n flags[SurfaceBitIndex.IgnoreMaterial] = useMaterial ? 0 : 1;\n flags[SurfaceBitIndex.HasMaterialAtlas] = useMaterial && this.hasMaterialAtlas ? 1 : 0;\n\n flags[SurfaceBitIndex.ApplyLighting] = 0;\n flags[SurfaceBitIndex.HasColorAndNormal] = 0;\n if (this.isLit) {\n flags[SurfaceBitIndex.HasNormals] = 1;\n if (wantLighting(vf))\n flags[SurfaceBitIndex.ApplyLighting] = 1;\n\n // Textured meshes store normal in place of color index.\n // Untextured lit meshes store normal where textured meshes would store UV coords.\n // Tell shader where to find normal.\n if (!this.isTexturedType) {\n flags[SurfaceBitIndex.HasColorAndNormal] = 1;\n }\n } else {\n flags[SurfaceBitIndex.HasNormals] = 0;\n }\n\n flags[SurfaceBitIndex.HasTexture] = this.useTexture(params) ? 1 : 0;\n flags[SurfaceBitIndex.HasNormalMap] = this.useNormalMap(params) ? 1 : 0;\n flags[SurfaceBitIndex.UseConstantLodTextureMapping] = this.mesh.textureUsesConstantLod ? 1 : 0;\n flags[SurfaceBitIndex.UseConstantLodNormalMapMapping] = this.mesh.normalMapUsesConstantLod ? 1 : 0;\n\n // The transparency threshold controls how transparent a surface must be to allow light to pass through; more opaque surfaces cast shadows.\n flags[SurfaceBitIndex.TransparencyThreshold] = params.target.isDrawingShadowMap ? 1 : 0;\n flags[SurfaceBitIndex.BackgroundFill] = 0;\n switch (params.renderPass) {\n // NB: We need this for opaque pass due to SolidFill (must compute transparency, discard below threshold, render opaque at or above threshold)\n case RenderPass.OpaqueLinear:\n case RenderPass.OpaquePlanar:\n case RenderPass.OpaqueGeneral:\n case RenderPass.Translucent:\n case RenderPass.WorldOverlay:\n case RenderPass.OpaqueLayers:\n case RenderPass.TranslucentLayers:\n case RenderPass.OverlayLayers: {\n const mode = vf.renderMode;\n if (!this.isGlyph && (RenderMode.HiddenLine === mode || RenderMode.SolidFill === mode)) {\n flags[SurfaceBitIndex.TransparencyThreshold] = 1;\n if (RenderMode.HiddenLine === mode && FillFlags.Always !== (this.fillFlags & FillFlags.Always)) {\n // fill flags test for text - doesn't render with bg fill in hidden line mode.\n flags[SurfaceBitIndex.BackgroundFill] = 1;\n }\n break;\n }\n }\n }\n }\n\n private constructor(indices: BufferHandle, numIndices: number, mesh: MeshData, textureParams?: LayerTextureParams) {\n super(mesh, numIndices);\n this.textureParams = textureParams;\n this._buffers = BuffersContainer.create();\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Surface, false);\n assert(undefined !== attrPos);\n this._buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\n this._indices = indices;\n this.hasTextures = undefined !== this.textureParams && this.textureParams.params.some((x) => undefined !== x.texture);\n }\n\n private wantTextures(target: Target, surfaceTextureExists: boolean): boolean {\n if (this.hasScalarAnimation && undefined !== target.analysisTexture)\n return true;\n\n if (!surfaceTextureExists)\n return false;\n\n if (this.mesh.isTextureAlwaysDisplayed)\n return true;\n\n if (this.supportsThematicDisplay && target.wantThematicDisplay)\n return false;\n\n const fill = this.fillFlags;\n const flags = target.currentViewFlags;\n\n // ###TODO need to distinguish between gradient fill and actual textures...\n switch (flags.renderMode) {\n case RenderMode.SmoothShade:\n return flags.textures;\n case RenderMode.Wireframe:\n return FillFlags.Always === (fill & FillFlags.Always) || (flags.fill && FillFlags.ByView === (fill & FillFlags.ByView));\n default:\n return FillFlags.Always === (fill & FillFlags.Always);\n }\n }\n\n private wantNormalMaps(target: Target, normalMapExists: boolean): boolean {\n if (!normalMapExists || !target.displayNormalMaps)\n return false;\n\n const flags = target.currentViewFlags;\n\n switch (flags.renderMode) {\n case RenderMode.SmoothShade:\n return flags.textures;\n default:\n return false;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SurfaceGeometry.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/SurfaceGeometry.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAwBH,sCAEC;AAxBD,sDAAsD;AACtD,oDAAgJ;AAChJ,iFAA4E;AAE5E,iDAA8C;AAE9C,6BAA0B;AAC1B,yDAAsF;AAGtF,qCAAkC;AAIlC,iDAA8C;AAC9C,qDAAwE;AAExE,qDAA8F;AAE9F,wDAAgD;AAEhD,gBAAgB;AAChB,SAAgB,aAAa,CAAC,EAAa;IACzC,OAAO,EAAE,CAAC,SAAS,IAAI,wBAAU,CAAC,WAAW,KAAK,EAAE,CAAC,UAAU,CAAC;AAClE,CAAC;AAED,SAAS,YAAY,CAAC,EAAa;IACjC,OAAO,wBAAU,CAAC,WAAW,KAAK,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,QAAQ,CAAC;AACjE,CAAC;AAED,gBAAgB;AAChB,MAAa,eAAgB,SAAQ,2BAAY;IAC9B,QAAQ,CAAmB;IAC3B,QAAQ,CAAe;IACxB,WAAW,CAAU;IAC9B,aAAa,CAAiC;IAErD,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1C,MAAM,CAAC,MAAM,CAAC,IAAc,EAAE,MAAkB;QACrD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QACvC,MAAM,WAAW,GAAG,+BAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEjE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE7B,MAAM,gBAAgB,GAAG,IAAI,EAAE,gBAAgB,CAAC;QAEhD,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;YACvE,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnH,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEzC,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,iBAAiB,GAAG,IAAI,+BAAiB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,iBAAiB,CAAC,+BAA+B,EAAE,CAAC;QACxE,MAAM,iBAAiB,GAAG,4BAAiB,CAAC,WAAW,CACrD,WAAW,CAAC,GAAG,CAAC,CAAC,EACjB,WAAW,CAAC,GAAG,CAAC,CAAC,EACjB,WAAW,CAAC,IAAI,CAAC,CAAC,EAClB,WAAW,CAAC,IAAI,CAAC,CAAC,CACnB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAErC,MAAM,MAAM,GAAG,wBAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACpG,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnH,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAExD,MAAM,sBAAsB,GAAG,IAAI,0BAAe,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACjF,MAAM,iBAAiB,GAAG,IAAI,2BAAgB,CAAC,sBAAsB,CAAC,CAAC;QAEvE,MAAM,UAAU,GAA8B;YAC5C,UAAU,EAAE,iBAAiB;YAC7B,aAAa,EAAE,iBAAiB;YAChC,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,SAAS;YACpB,eAAe,EAAE,KAAK;YACtB,gBAAgB;SACjB,CAAC;QAEF,MAAM,aAAa,GAAuB,EAAE,CAAC;QAE7C,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,gBAAgB,EAAE,OAAO,CAAC,CAAC,eAAe,EAAE,EAAE;YAC5C,aAAa,CAAC,eAAe,EAAE,CAAC,GAAG,IAAI,iCAAgB,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;QAEH,IAAI,eAAe,CAAC;QAEpB,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;YAClC,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YAClD,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,CAAC,CAAC,mCAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEnG,eAAe,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU;eAC1B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAChC,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAEM,iBAAiB,CAAC,KAA8B;QACrD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,IAAW,KAAK,KAAK,OAAO,2BAAW,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,IAAI,2BAAW,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACnH,IAAW,cAAc,KAAK,OAAO,2BAAW,CAAC,QAAQ,KAAK,IAAI,CAAC,WAAW,IAAI,2BAAW,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACjI,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,cAAc,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACrF,IAAW,YAAY,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvG,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,IAAoB,uBAAuB,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,IAAW,aAAa,KAAK,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/F,IAAW,YAAY,KAAK,OAAO,2BAAW,CAAC,gBAAgB,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACvF,IAAoB,uBAAuB;QACzC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,IAAoB,kBAAkB;QACpC,qHAAqH;QACrH,0CAA0C;QAC1C,yIAAyI;QACzI,OAAO,uBAAS,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAS,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED,IAAoB,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAChD,IAAoB,MAAM,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;IAClD,IAAoB,YAAY,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;IAE9C,KAAK,CAAC,YAAoB,EAAE,wBAA2C;QAC/E,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC;QAE/B,8GAA8G;QAC9G,MAAM,MAAM,GAAG,uCAA+B,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAC7F,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAE,CAAC,mBAAmB,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,IAAI,GAAG,wBAAwB,KAAK,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/F,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,CAAC,UAAU,CAAC,OAAE,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,IAAI,MAAM;YACR,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAE,CAAC,mBAAmB,CAAC,CAAC;IACnD,CAAC;IAEe,sBAAsB,CAAC,MAAc;QACnD,0CAA0C;QAC1C,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IAAW,WAAW,KAAkB,mCAA2B,CAAC,CAAC;IACrE,IAAoB,YAAY,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,IAAoB,gBAAgB,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7E,IAAW,WAAW;QACpB,IAAI,uBAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAS,CAAC,MAAM,CAAC;YAC1D,0CAAkC;QAEpC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,gCAAwB,CAAC,iCAAyB,CAAC;QAC3E,IAAI,IAAI,CAAC,QAAQ;YACf,KAAK,GAAG,KAAK,gCAAwB,CAAC;QAExC,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,QAAQ,CAAC,MAAc;QACrC,IAAI,uBAAS,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAS,CAAC,UAAU,CAAC;YAClE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC;;YAEjD,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAEe,OAAO,CAAC,MAAc;QACpC,oCAAoC;QACpC,IAAI,IAAI,CAAC,YAAY;YACnB,OAAO,gBAAgB,CAAC;QAE1B,IAAI,UAAU,GAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;QAElE,mGAAmG;QACnG,IAAI,IAAI,CAAC,OAAO;YACd,OAAO,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;QAEpE,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEnC,0FAA0F;QAC1F,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;QACnI,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY;YACnD,OAAO,aAAa,CAAC;QAEvB,2FAA2F;QAC3F,IAAI,wBAAU,CAAC,SAAS,KAAK,EAAE,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM,QAAQ,GAAG,uBAAS,CAAC,MAAM,KAAK,CAAC,SAAS,GAAG,uBAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,uBAAS,CAAC,MAAM,KAAK,CAAC,SAAS,GAAG,uBAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACzI,IAAI,CAAC,QAAQ;gBACX,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,wBAAU,CAAC,SAAS,KAAK,EAAE,CAAC,UAAU,IAAI,wBAAU,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU;YACvG,OAAO,UAAU,CAAC;QAEpB,wGAAwG;QACxG,IAAI,IAAI,CAAC,kBAAkB,IAAI,SAAS,KAAK,MAAM,CAAC,eAAe,EAAE,CAAC;YACpE,IAAA,qBAAM,EAAC,SAAS,KAAK,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACrD,QAAQ,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;gBAC3E,KAAK,iCAAmB,CAAC,WAAW;oBAClC,OAAO,aAAa,CAAC;gBACvB,KAAK,iCAAmB,CAAC,MAAM;oBAC7B,OAAO,UAAU,CAAC;gBACpB,KAAK,iCAAmB,CAAC,KAAK;oBAC5B,OAAO,GAAG,UAAU,cAAc,CAAC;YACvC,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,mFAAmF;QACnF,uDAAuD;QACvD,4GAA4G;QAC5G,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,IAAI,SAAS,KAAK,GAAG,IAAI,GAAG,CAAC,cAAc;YACzC,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC;;YAE/B,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC;QAEnD,+EAA+E;QAC/E,IAAI,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,KAAK,8CAAgC,CAAC,0BAA0B,EAAE,CAAC;YAC3H,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;gBACtD,KAAK,iCAAmB,CAAC,MAAM;oBAC7B,8EAA8E;oBAC9E,OAAO,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC/C,KAAK,iCAAmB,CAAC,WAAW;oBAClC,qFAAqF;oBACrF,OAAO,aAAa,CAAC;gBACvB,KAAK,iCAAmB,CAAC,KAAK;oBAC5B,gEAAgE;oBAChE,OAAO,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,cAAc,CAAC;YAClE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,QAAQ,GAAG,EAAE,YAAY,EAAE,CAAC;gBAC1B,KAAK,iCAAmB,CAAC,WAAW;oBAClC,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;gBACR,KAAK,iCAAmB,CAAC,KAAK;oBAC5B,UAAU,GAAG,GAAG,UAAU,cAAc,CAAC;oBACzC,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC;IAC/C,CAAC;IAES,gBAAgB,CAAC,MAAc;QACvC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,4DAA4D;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,uBAAS,CAAC,IAAI,KAAK,CAAC,SAAS,GAAG,uBAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC,CAAC,wCAAwC;QACxD,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,yCAAyC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACnC,IAAI,wBAAU,CAAC,SAAS,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC;YAC3C,oCAAoC;YACpC,OAAO,uBAAS,CAAC,IAAI,KAAK,CAAC,SAAS,GAAG,uBAAS,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,CAAC,iDAAiD;QACjE,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC,CAAC,4CAA4C;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAoB,YAAY,KAA+B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAExF,UAAU,CAAC,MAA2B;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAEM,YAAY,CAAC,MAA2B;QAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC;IAEM,mBAAmB,CAAC,MAA2B,EAAE,KAAiB;QACvE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEnC,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACtC,KAAK,wCAAgC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,KAAK,0CAAkC,GAAG,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvF,KAAK,uCAA+B,GAAG,CAAC,CAAC;QACzC,KAAK,2CAAmC,GAAG,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,oCAA4B,GAAG,CAAC,CAAC;YACtC,IAAI,YAAY,CAAC,EAAE,CAAC;gBAClB,KAAK,uCAA+B,GAAG,CAAC,CAAC;YAE3C,wDAAwD;YACxD,kFAAkF;YAClF,oCAAoC;YACpC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,KAAK,2CAAmC,GAAG,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,oCAA4B,GAAG,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,oCAA4B,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,KAAK,sCAA8B,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,KAAK,uDAA8C,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,KAAK,yDAAgD,GAAG,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnG,2IAA2I;QAC3I,KAAK,+CAAuC,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,KAAK,wCAAgC,GAAG,CAAC,CAAC;QAC1C,QAAQ,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1B,8IAA8I;YAC9I,qCAA6B;YAC7B,qCAA6B;YAC7B,sCAA8B;YAC9B,oCAA4B;YAC5B,sCAA6B;YAC7B,qCAA6B;YAC7B,0CAAkC;YAClC,sCAA6B,CAAC,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,wBAAU,CAAC,UAAU,KAAK,IAAI,IAAI,wBAAU,CAAC,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC;oBACvF,KAAK,+CAAuC,GAAG,CAAC,CAAC;oBACjD,IAAI,wBAAU,CAAC,UAAU,KAAK,IAAI,IAAI,uBAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC/F,8EAA8E;wBAC9E,KAAK,wCAAgC,GAAG,CAAC,CAAC;oBAC5C,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAoB,OAAqB,EAAE,UAAkB,EAAE,IAAc,EAAE,aAAkC;QAC/G,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,mCAAgB,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,2BAAY,CAAC,aAAa,CAAC,OAAO,+BAAuB,KAAK,CAAC,CAAC;QAChF,IAAA,qBAAM,EAAC,SAAS,KAAK,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,mCAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/H,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,SAAS,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;IACxH,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,oBAA6B;QAChE,IAAI,IAAI,CAAC,kBAAkB,IAAI,SAAS,KAAK,MAAM,CAAC,eAAe;YACjE,OAAO,IAAI,CAAC;QAEd,IAAI,CAAC,oBAAoB;YACvB,OAAO,KAAK,CAAC;QAEf,IAAI,IAAI,CAAC,IAAI,CAAC,wBAAwB;YACpC,OAAO,IAAI,CAAC;QAEd,IAAI,IAAI,CAAC,uBAAuB,IAAI,MAAM,CAAC,mBAAmB;YAC5D,OAAO,KAAK,CAAC;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEtC,2EAA2E;QAC3E,QAAQ,KAAK,CAAC,UAAU,EAAE,CAAC;YACzB,KAAK,wBAAU,CAAC,WAAW;gBACzB,OAAO,KAAK,CAAC,QAAQ,CAAC;YACxB,KAAK,wBAAU,CAAC,SAAS;gBACvB,OAAO,uBAAS,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,uBAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,uBAAS,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,uBAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1H;gBACE,OAAO,uBAAS,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,uBAAS,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAc,EAAE,eAAwB;QAC7D,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAC/C,OAAO,KAAK,CAAC;QAEf,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEtC,QAAQ,KAAK,CAAC,UAAU,EAAE,CAAC;YACzB,KAAK,wBAAU,CAAC,WAAW;gBACzB,OAAO,KAAK,CAAC,QAAQ,CAAC;YACxB;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;CACF;AArYD,0CAqYC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, dispose } from \"@itwin/core-bentley\";\nimport { CartographicRange, FillFlags, RenderMode, TextureTransparency, ThematicGradientTransparencyMode, ViewFlags } from \"@itwin/core-common\";\nimport { SurfaceType } from \"../../../common/internal/render/SurfaceParams\";\nimport { RenderMemory } from \"../../../render/RenderMemory\";\nimport { AttributeMap } from \"./AttributeMap\";\nimport { ShaderProgramParams } from \"./DrawCommand\";\nimport { GL } from \"./GL\";\nimport { BufferHandle, BufferParameters, BuffersContainer } from \"./AttributeBuffers\";\nimport { MaterialInfo } from \"./Material\";\nimport { Pass, RenderOrder, RenderPass, SurfaceBitIndex } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { Target } from \"./Target\";\nimport { TechniqueId } from \"./TechniqueId\";\nimport { MeshData } from \"./MeshData\";\nimport { MeshGeometry } from \"./MeshGeometry\";\nimport { LayerTextureParams, ProjectedTexture } from \"./MapLayerParams\";\nimport { MeshParams } from \"../../../common/internal/render/MeshParams\";\nimport { MapCartoRectangle, PlanarProjection, PlanarTilePatch } from \"../../../tile/internal\";\nimport { MeshMapLayerGraphicParams } from \"../MeshMapLayerGraphicParams\";\nimport { Vector3d } from \"@itwin/core-geometry\";\n\n/** @internal */\nexport function wantMaterials(vf: ViewFlags): boolean {\n return vf.materials && RenderMode.SmoothShade === vf.renderMode;\n}\n\nfunction wantLighting(vf: ViewFlags) {\n return RenderMode.SmoothShade === vf.renderMode && vf.lighting;\n}\n\n/** @internal */\nexport class SurfaceGeometry extends MeshGeometry {\n private readonly _buffers: BuffersContainer;\n private readonly _indices: BufferHandle;\n public readonly hasTextures: boolean;\n public textureParams: LayerTextureParams | undefined;\n\n public get lutBuffers() { return this._buffers; }\n\n public static create(mesh: MeshData, params: MeshParams): SurfaceGeometry | undefined {\n const indices = params.surface.indices;\n const indexBuffer = BufferHandle.createArrayBuffer(indices.data);\n\n const tile = params.tileData;\n\n const layerClassifiers = tile?.layerClassifiers;\n\n if (!layerClassifiers?.size || !tile || undefined === layerClassifiers) {\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh, undefined) : undefined;\n }\n\n const transformECEF = tile.ecefTransform;\n\n const tileEcefRange = transformECEF.multiplyRange(tile.range);\n const cartographicRange = new CartographicRange(tileEcefRange, transformECEF);\n const boundingBox = cartographicRange.getLongitudeLatitudeBoundingBox();\n const mapCartoRectangle = MapCartoRectangle.fromRadians(\n boundingBox.low.x,\n boundingBox.low.y,\n boundingBox.high.x,\n boundingBox.high.y\n );\n\n const corners = tile.range.corners();\n\n const normal = Vector3d.createCrossProductToPoints(corners[0], corners[1], corners[2])?.normalize();\n if (!normal) {\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh, undefined) : undefined;\n }\n const chordHeight = corners[0].distance(corners[3]) / 2;\n\n const surfacePlanarTilePatch = new PlanarTilePatch(corners, normal, chordHeight);\n const surfaceProjection = new PlanarProjection(surfacePlanarTilePatch);\n\n const meshParams: MeshMapLayerGraphicParams = {\n projection: surfaceProjection,\n tileRectangle: mapCartoRectangle,\n tileId: undefined,\n baseColor: undefined,\n baseTransparent: false,\n layerClassifiers\n };\n\n const layerTextures: ProjectedTexture[] = [];\n\n let sequentialIndex = 0;\n\n layerClassifiers?.forEach((layerClassifier) => {\n layerTextures[sequentialIndex++] = new ProjectedTexture(layerClassifier, meshParams, meshParams.tileRectangle);\n });\n\n let surfaceGeometry;\n\n if (undefined !== indexBuffer) {\n const indexCount = indices.length;\n const hasLayerTextures = layerTextures.length > 0;\n const layerTextureParams = hasLayerTextures ? LayerTextureParams.create(layerTextures) : undefined;\n\n surfaceGeometry = new SurfaceGeometry(indexBuffer, indexCount, mesh, layerTextureParams);\n }\n\n return surfaceGeometry;\n }\n\n public get isDisposed(): boolean {\n return this._buffers.isDisposed\n && this._indices.isDisposed;\n }\n\n public [Symbol.dispose]() {\n dispose(this._buffers);\n dispose(this._indices);\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n stats.addSurface(this._indices.bytesUsed);\n }\n\n public get isLit() { return SurfaceType.Lit === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\n public get isTexturedType() { return SurfaceType.Textured === this.surfaceType || SurfaceType.TexturedLit === this.surfaceType; }\n public get hasTexture() { return this.isTexturedType && undefined !== this.texture; }\n public get hasNormalMap() { return this.isLit && this.isTexturedType && undefined !== this.normalMap; }\n public get isGlyph() { return this.mesh.isGlyph; }\n public override get alwaysRenderTranslucent() { return this.isGlyph; }\n public get isTileSection() { return undefined !== this.texture && this.texture.isTileSection; }\n public get isClassifier() { return SurfaceType.VolumeClassifier === this.surfaceType; }\n public override get supportsThematicDisplay() {\n return !this.isGlyph;\n }\n\n public override get allowColorOverride() {\n // Text background color should not be overridden by feature symbology overrides - otherwise it becomes unreadable...\n // We don't actually know if we have text.\n // We do know that text background color uses blanking fill. So do ImageGraphics, so they're also going to forbid overriding their color.\n return FillFlags.Blanking !== (this.fillFlags & FillFlags.Blanking);\n }\n\n public override get asSurface() { return this; }\n public override get asEdge() { return undefined; }\n public override get asSilhouette() { return undefined; }\n\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\n const system = System.instance;\n\n // If we can't write depth in the fragment shader, use polygonOffset to force blanking regions to draw behind.\n const offset = RenderOrder.BlankingRegion === this.renderOrder && !system.supportsLogZBuffer;\n if (offset) {\n system.context.enable(GL.POLYGON_OFFSET_FILL);\n system.context.polygonOffset(1.0, 1.0);\n }\n\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers;\n bufs.bind();\n system.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\n bufs.unbind();\n\n if (offset)\n system.context.disable(GL.POLYGON_OFFSET_FILL);\n }\n\n public override wantMixMonochromeColor(target: Target): boolean {\n // Text relies on white-on-white reversal.\n return !this.isGlyph && (this.isLitSurface || this.wantTextures(target, this.hasTexture));\n }\n\n public get techniqueId(): TechniqueId { return TechniqueId.Surface; }\n public override get isLitSurface() { return this.isLit; }\n public override get hasBakedLighting() { return this.mesh.hasBakedLighting; }\n public get renderOrder(): RenderOrder {\n if (FillFlags.Behind === (this.fillFlags & FillFlags.Behind))\n return RenderOrder.BlankingRegion;\n\n let order = this.isLit ? RenderOrder.LitSurface : RenderOrder.UnlitSurface;\n if (this.isPlanar)\n order = order | RenderOrder.PlanarBit;\n\n return order;\n }\n\n public override getColor(target: Target) {\n if (FillFlags.Background === (this.fillFlags & FillFlags.Background))\n return target.uniforms.style.backgroundColorInfo;\n else\n return this.colorInfo;\n }\n\n public override getPass(target: Target): Pass {\n // Classifiers have a dedicated pass\n if (this.isClassifier)\n return \"classification\";\n\n let opaquePass: Pass = this.isPlanar ? \"opaque-planar\" : \"opaque\";\n\n // When reading pixels, glyphs are always opaque. Otherwise always transparent (for anti-aliasing).\n if (this.isGlyph)\n return target.isReadPixelsInProgress ? opaquePass : \"translucent\";\n\n const vf = target.currentViewFlags;\n\n // When rendering thematic isolines, we need translucency because they have anti-aliasing.\n const thematic = target.wantThematicDisplay && this.supportsThematicDisplay ? target.uniforms.thematic.thematicDisplay : undefined;\n if (thematic && target.uniforms.thematic.wantIsoLines)\n return \"translucent\";\n\n // In wireframe, unless fill is explicitly enabled for planar region, surface does not draw\n if (RenderMode.Wireframe === vf.renderMode && !this.mesh.isTextureAlwaysDisplayed) {\n const fillFlags = this.fillFlags;\n const showFill = FillFlags.Always === (fillFlags & FillFlags.Always) || (vf.fill && FillFlags.ByView === (fillFlags & FillFlags.ByView));\n if (!showFill)\n return \"none\";\n }\n\n // If transparency disabled by render mode or view flag, always draw opaque.\n if (!vf.transparency || RenderMode.SolidFill === vf.renderMode || RenderMode.HiddenLine === vf.renderMode)\n return opaquePass;\n\n // A gradient texture applied by analysis style always fully determines the transparency of the surface.\n if (this.hasScalarAnimation && undefined !== target.analysisTexture) {\n assert(undefined !== target.analysisStyle?.thematic);\n switch (target.analysisStyle.thematic.thematicSettings.textureTransparency) {\n case TextureTransparency.Translucent:\n return \"translucent\";\n case TextureTransparency.Opaque:\n return opaquePass;\n case TextureTransparency.Mixed:\n return `${opaquePass}-translucent`;\n }\n }\n\n // We have 3 sources of alpha: the material, the texture, and the color.\n // Base alpha comes from the material if it overrides it; otherwise from the color.\n // The texture's alpha is multiplied by the base alpha.\n // So we must draw in the translucent pass if the texture has transparency OR the base alpha is less than 1.\n let hasAlpha = false;\n const mat = wantMaterials(vf) ? this.mesh.materialInfo : undefined;\n if (undefined !== mat && mat.overridesAlpha)\n hasAlpha = mat.hasTranslucency;\n else\n hasAlpha = this.getColor(target).hasTranslucency;\n\n // Thematic gradient can optionally multiply gradient alpha with surface alpha.\n if (thematic && thematic.gradientSettings.transparencyMode === ThematicGradientTransparencyMode.MultiplySurfaceAndGradient) {\n switch (thematic.gradientSettings.textureTransparency) {\n case TextureTransparency.Opaque:\n // This surface's alpha gets multiplied by 1 - gradient colors are all opaque.\n return hasAlpha ? \"translucent\" : opaquePass;\n case TextureTransparency.Translucent:\n // This surface's alpha gets multiplied by < 1 - gradient colors are all translucent.\n return \"translucent\";\n case TextureTransparency.Mixed:\n // The gradient contains a mix of translucent and opaque colors.\n return hasAlpha ? \"translucent\" : `${opaquePass}-translucent`;\n }\n }\n\n if (!hasAlpha) {\n const tex = this.wantTextures(target, true) ? this.texture : undefined;\n switch (tex?.transparency) {\n case TextureTransparency.Translucent:\n hasAlpha = true;\n break;\n case TextureTransparency.Mixed:\n opaquePass = `${opaquePass}-translucent`;\n break;\n }\n }\n\n return hasAlpha ? \"translucent\" : opaquePass;\n }\n\n protected _wantWoWReversal(target: Target): boolean {\n if (this.isGlyph) {\n // Raster text is always subject to white-on-white reversal.\n return true;\n }\n\n const fillFlags = this.fillFlags;\n if (FillFlags.None !== (fillFlags & FillFlags.Background)) {\n return false; // fill color explicitly from background\n }\n\n if (this.wantTextures(target, this.hasTexture)) {\n // Don't invert white pixels of textures.\n return false;\n }\n\n const vf = target.currentViewFlags;\n if (RenderMode.Wireframe === vf.renderMode) {\n // Fill displayed even in wireframe?\n return FillFlags.None !== (fillFlags & FillFlags.Always);\n }\n\n if (vf.visibleEdges) {\n return false; // never invert surfaces when edges are displayed\n }\n\n if (this.isLit && wantLighting(vf)) {\n return false; // the lit color won't be pure white anyway.\n }\n\n return true;\n }\n\n public override get materialInfo(): MaterialInfo | undefined { return this.mesh.materialInfo; }\n\n public useTexture(params: ShaderProgramParams): boolean {\n return this.wantTextures(params.target, this.hasTexture);\n }\n\n public useNormalMap(params: ShaderProgramParams): boolean {\n return this.wantNormalMaps(params.target, this.hasNormalMap);\n }\n\n public computeSurfaceFlags(params: ShaderProgramParams, flags: Int32Array): void {\n const target = params.target;\n const vf = target.currentViewFlags;\n\n const useMaterial = wantMaterials(vf);\n flags[SurfaceBitIndex.IgnoreMaterial] = useMaterial ? 0 : 1;\n flags[SurfaceBitIndex.HasMaterialAtlas] = useMaterial && this.hasMaterialAtlas ? 1 : 0;\n\n flags[SurfaceBitIndex.ApplyLighting] = 0;\n flags[SurfaceBitIndex.HasColorAndNormal] = 0;\n if (this.isLit) {\n flags[SurfaceBitIndex.HasNormals] = 1;\n if (wantLighting(vf))\n flags[SurfaceBitIndex.ApplyLighting] = 1;\n\n // Textured meshes store normal in place of color index.\n // Untextured lit meshes store normal where textured meshes would store UV coords.\n // Tell shader where to find normal.\n if (!this.isTexturedType) {\n flags[SurfaceBitIndex.HasColorAndNormal] = 1;\n }\n } else {\n flags[SurfaceBitIndex.HasNormals] = 0;\n }\n\n flags[SurfaceBitIndex.HasTexture] = this.useTexture(params) ? 1 : 0;\n flags[SurfaceBitIndex.HasNormalMap] = this.useNormalMap(params) ? 1 : 0;\n flags[SurfaceBitIndex.UseConstantLodTextureMapping] = this.mesh.textureUsesConstantLod ? 1 : 0;\n flags[SurfaceBitIndex.UseConstantLodNormalMapMapping] = this.mesh.normalMapUsesConstantLod ? 1 : 0;\n\n // The transparency threshold controls how transparent a surface must be to allow light to pass through; more opaque surfaces cast shadows.\n flags[SurfaceBitIndex.TransparencyThreshold] = params.target.isDrawingShadowMap ? 1 : 0;\n flags[SurfaceBitIndex.BackgroundFill] = 0;\n switch (params.renderPass) {\n // NB: We need this for opaque pass due to SolidFill (must compute transparency, discard below threshold, render opaque at or above threshold)\n case RenderPass.OpaqueLinear:\n case RenderPass.OpaquePlanar:\n case RenderPass.OpaqueGeneral:\n case RenderPass.Translucent:\n case RenderPass.WorldOverlay:\n case RenderPass.OpaqueLayers:\n case RenderPass.TranslucentLayers:\n case RenderPass.OverlayLayers: {\n const mode = vf.renderMode;\n if (!this.isGlyph && (RenderMode.HiddenLine === mode || RenderMode.SolidFill === mode)) {\n flags[SurfaceBitIndex.TransparencyThreshold] = 1;\n if (RenderMode.HiddenLine === mode && FillFlags.Always !== (this.fillFlags & FillFlags.Always)) {\n // fill flags test for text - doesn't render with bg fill in hidden line mode.\n flags[SurfaceBitIndex.BackgroundFill] = 1;\n }\n break;\n }\n }\n }\n }\n\n private constructor(indices: BufferHandle, numIndices: number, mesh: MeshData, textureParams?: LayerTextureParams) {\n super(mesh, numIndices);\n this.textureParams = textureParams;\n this._buffers = BuffersContainer.create();\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Surface, false);\n assert(undefined !== attrPos);\n this._buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\n this._indices = indices;\n this.hasTextures = undefined !== this.textureParams && this.textureParams.params.some((x) => undefined !== x.texture);\n }\n\n private wantTextures(target: Target, surfaceTextureExists: boolean): boolean {\n if (this.hasScalarAnimation && undefined !== target.analysisTexture)\n return true;\n\n if (!surfaceTextureExists)\n return false;\n\n if (this.mesh.isTextureAlwaysDisplayed)\n return true;\n\n if (this.supportsThematicDisplay && target.wantThematicDisplay)\n return false;\n\n const fill = this.fillFlags;\n const flags = target.currentViewFlags;\n\n // ###TODO need to distinguish between gradient fill and actual textures...\n switch (flags.renderMode) {\n case RenderMode.SmoothShade:\n return flags.textures;\n case RenderMode.Wireframe:\n return FillFlags.Always === (fill & FillFlags.Always) || (flags.fill && FillFlags.ByView === (fill & FillFlags.ByView));\n default:\n return FillFlags.Always === (fill & FillFlags.Always);\n }\n }\n\n private wantNormalMaps(target: Target, normalMapExists: boolean): boolean {\n if (!normalMapExists || !target.displayNormalMaps)\n return false;\n\n const flags = target.currentViewFlags;\n\n switch (flags.renderMode) {\n case RenderMode.SmoothShade:\n return flags.textures;\n default:\n return false;\n }\n }\n}\n"]}
|
|
@@ -456,6 +456,6 @@ function addAtmosphericScatteringEffect(builder, isSkyBox, perFragmentCompute) {
|
|
|
456
456
|
});
|
|
457
457
|
}, 3 /* VariablePrecision.High */);
|
|
458
458
|
builder.frag.addFunction(applyHdr);
|
|
459
|
-
builder.frag.set(
|
|
459
|
+
builder.frag.set(24 /* FragmentShaderComponent.ApplyAtmosphericScattering */, applyAtmosphericScattering);
|
|
460
460
|
}
|
|
461
461
|
//# sourceMappingURL=Atmosphere.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClearPickAndColor.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/ClearPickAndColor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ClearPickAndColor.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/ClearPickAndColor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYjD,gBAAgB;AAChB,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAkB7F"}
|
|
@@ -14,6 +14,7 @@ const assignFragData = `
|
|
|
14
14
|
FragColor0 = baseColor;
|
|
15
15
|
FragColor1 = vec4(0.0);
|
|
16
16
|
FragColor2 = vec4(0.0);
|
|
17
|
+
FragColor3 = vec4(0.0);
|
|
17
18
|
`;
|
|
18
19
|
/** @internal */
|
|
19
20
|
function createClearPickAndColorProgram(context) {
|
|
@@ -25,7 +26,7 @@ function createClearPickAndColorProgram(context) {
|
|
|
25
26
|
});
|
|
26
27
|
});
|
|
27
28
|
frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeBaseColor);
|
|
28
|
-
frag.addDrawBuffersExtension(
|
|
29
|
+
frag.addDrawBuffersExtension(4);
|
|
29
30
|
frag.set(18 /* FragmentShaderComponent.AssignFragData */, assignFragData);
|
|
30
31
|
builder.vert.headerComment = "//!V! ClearPickAndColor";
|
|
31
32
|
builder.frag.headerComment = "//!F! ClearPickAndColor";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClearPickAndColor.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/ClearPickAndColor.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;
|
|
1
|
+
{"version":3,"file":"ClearPickAndColor.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/ClearPickAndColor.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AAgBH,wEAkBC;AA9BD,iDAA2D;AAE3D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAE7C,MAAM,cAAc,GAAG;;;;;CAKtB,CAAC;AAEF,gBAAgB;AAChB,SAAgB,8BAA8B,CAAC,OAA+B;IAC5E,MAAM,OAAO,GAAG,IAAA,wCAAyB,EAAC,KAAK,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,WAAW,6BAAqB,CAAC,IAAI,EAAE,EAAE;QACvD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,mDAA2C,gBAAgB,CAAC,CAAC;IAErE,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,kDAAyC,cAAc,CAAC,CAAC;IAEjE,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;IAEvD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\nimport { ShaderProgram } from \"../ShaderProgram\";\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\n\nconst computeBaseColor = \"return u_bgColor;\";\n\nconst assignFragData = `\n FragColor0 = baseColor;\n FragColor1 = vec4(0.0);\n FragColor2 = vec4(0.0);\n FragColor3 = vec4(0.0);\n`;\n\n/** @internal */\nexport function createClearPickAndColorProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(false);\n const frag = builder.frag;\n frag.addUniform(\"u_bgColor\", VariableType.Vec4, (prog) => {\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\n params.target.uniforms.style.bindBackgroundRgba(uniform);\n });\n });\n\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\n\n frag.addDrawBuffersExtension(4);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\n\n builder.vert.headerComment = \"//!V! ClearPickAndColor\";\n builder.frag.headerComment = \"//!F! ClearPickAndColor\";\n\n return builder.buildProgram(context);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Contours.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Contours.ts"],"names":[],"mappings":"AASA,OAAO,EACoB,cAAc,EACxC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Contours.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Contours.ts"],"names":[],"mappings":"AASA,OAAO,EACoB,cAAc,EACxC,MAAM,kBAAkB,CAAC;AA8G1B,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,QA4DvD"}
|
|
@@ -12,6 +12,7 @@ const core_common_1 = require("@itwin/core-common");
|
|
|
12
12
|
const RenderFlags_1 = require("../RenderFlags");
|
|
13
13
|
const FeatureSymbology_1 = require("./FeatureSymbology");
|
|
14
14
|
const Vertex_1 = require("./Vertex");
|
|
15
|
+
const Decode_1 = require("./Decode");
|
|
15
16
|
const computeContourNdx = `
|
|
16
17
|
if (u_contourLUTWidth == 0u)
|
|
17
18
|
return 15.0;
|
|
@@ -39,6 +40,21 @@ vec4 unpackAndNormalize2BytesVec4(vec4 f, bool upper) {
|
|
|
39
40
|
return unpack2BytesVec4(f, upper) / 255.0;
|
|
40
41
|
}
|
|
41
42
|
`;
|
|
43
|
+
const encodeContourLineInfo = `
|
|
44
|
+
void encodeContourLineInfo(int groupIndex, bool isMajor, float interval) {
|
|
45
|
+
// ContourDisplay.maxContourGroups is currently 5. Must change this code if that changes.
|
|
46
|
+
float groupIndexAndType = float(groupIndex + (isMajor ? 16 : 8));
|
|
47
|
+
|
|
48
|
+
// Find nearest multiple of interval to pixel world height.
|
|
49
|
+
float elevation = (v_height >= 0.0 ? floor((v_height + interval / 2.0) / interval) : ceil((v_height - interval / 2.0) / interval)) * interval;
|
|
50
|
+
|
|
51
|
+
// Convert elevation to a fraction of the frustum's world Z extents
|
|
52
|
+
elevation = clamp((elevation - u_worldFrustumZRange.x) / (u_worldFrustumZRange.y - u_worldFrustumZRange.x), 0.0, 1.0);
|
|
53
|
+
|
|
54
|
+
// Encode elevation in RGB and the rest of the info in A
|
|
55
|
+
g_contourLineInfo = vec4(groupIndexAndType * 0.03125, encodeDepthRgb(elevation));
|
|
56
|
+
}
|
|
57
|
+
`;
|
|
42
58
|
const applyContours = `
|
|
43
59
|
int contourNdx = int(v_contourNdx + 0.5);
|
|
44
60
|
if (contourNdx > 14) // 15 => no contours
|
|
@@ -83,8 +99,13 @@ const applyContours = `
|
|
|
83
99
|
uint msk = 1u << uint(offset);
|
|
84
100
|
contourAlpha *= (patterns[(lineCodeWt / 16) & 0xf] & msk) > 0u ? 1.0 : 0.0;
|
|
85
101
|
contourAlpha = min(contourAlpha, 1.0);
|
|
102
|
+
|
|
103
|
+
bool isContourLine = contourAlpha >= 0.5;
|
|
104
|
+
if (isContourLine)
|
|
105
|
+
encodeContourLineInfo(contourNdxC, maj, intervals.r);
|
|
106
|
+
|
|
86
107
|
if (rgbfp.a / 65536.0 < 0.5) { // showGeometry == 0
|
|
87
|
-
if (
|
|
108
|
+
if (!isContourLine)
|
|
88
109
|
discard;
|
|
89
110
|
return vec4(rgbf.rgb, 1.0);
|
|
90
111
|
}
|
|
@@ -124,14 +145,23 @@ float computeWorldHeight(vec4 rawPosition) {
|
|
|
124
145
|
params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);
|
|
125
146
|
});
|
|
126
147
|
});
|
|
148
|
+
builder.frag.addUniform("u_worldFrustumZRange", 3 /* VariableType.Vec2 */, (prog) => {
|
|
149
|
+
prog.addProgramUniform("u_worldFrustumZRange", (uniform, params) => {
|
|
150
|
+
uniform.setUniform2fv(params.target.uniforms.frustum.worldFrustumZRange);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
127
153
|
const contourDefsSize = 8;
|
|
128
154
|
builder.frag.addUniformArray("u_contourDefs", 5 /* VariableType.Vec4 */, contourDefsSize, (prog) => {
|
|
129
155
|
prog.addGraphicUniform("u_contourDefs", (uniform, params) => {
|
|
130
156
|
params.target.uniforms.contours.bindcontourDefs(uniform);
|
|
131
157
|
});
|
|
132
158
|
});
|
|
159
|
+
builder.frag.addGlobal("g_contourLineInfo", 5 /* VariableType.Vec4 */, "vec4(0.0)");
|
|
160
|
+
builder.frag.addFunction(Decode_1.encodeDepthRgb);
|
|
161
|
+
builder.frag.addFunction(encodeContourLineInfo);
|
|
133
162
|
builder.frag.addFunction(unpack2BytesVec4);
|
|
134
163
|
builder.frag.addFunction(unpackAndNormalize2BytesVec4);
|
|
135
164
|
builder.frag.set(11 /* FragmentShaderComponent.ApplyContours */, applyContours);
|
|
165
|
+
builder.frag.set(23 /* FragmentShaderComponent.ComputeContourLineInfo */, "return g_contourLineInfo;");
|
|
136
166
|
}
|
|
137
167
|
//# sourceMappingURL=Contours.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Contours.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Contours.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\nimport { ContourDisplay } from \"@itwin/core-common\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport {\n FragmentShaderComponent, ProgramBuilder, VariableType,\n} from \"../ShaderBuilder\";\nimport { addFeatureIndex } from \"./FeatureSymbology\";\nimport { addInstancedRtcMatrix } from \"./Vertex\";\n\nconst computeContourNdx = `\n if (u_contourLUTWidth == 0u)\n return 15.0;\n uint lutIndex = uint(getFeatureIndex());\n bool odd = bool(lutIndex & 1u);\n lutIndex /= 2u;\n uint byteSel = lutIndex & 0x3u;\n lutIndex /= 4u;\n ivec2 coords = ivec2(lutIndex % u_contourLUTWidth, lutIndex / u_contourLUTWidth);\n uvec4 contourNdx4 = uvec4(texelFetch(u_contourLUT, coords, 0) * 255.0 + 0.5);\n uvec2 contourNdx2 = bool(byteSel & 2u) ? contourNdx4.ba : contourNdx4.rg;\n uint contourNdx = bool(byteSel & 1u) ? contourNdx2.g : contourNdx2.r;\n return float(odd ? contourNdx >> 4u : contourNdx & 0xFu);\n`;\n\nconst unpack2BytesVec4 = `\nvec4 unpack2BytesVec4(vec4 f, bool upper) {\n f = floor(f + 0.5);\n vec4 outUpper = floor(f / 256.0);\n vec4 outLower = floor(f - outUpper * 256.0);\n return upper ? outUpper : outLower;\n}\n`;\n\nconst unpackAndNormalize2BytesVec4 = `\nvec4 unpackAndNormalize2BytesVec4(vec4 f, bool upper) {\n return unpack2BytesVec4(f, upper) / 255.0;\n}\n`;\n\nconst applyContours = `\n int contourNdx = int(v_contourNdx + 0.5);\n if (contourNdx > 14) // 15 => no contours\n return baseColor;\n\n const int maxDefs = ${ContourDisplay.maxContourGroups}; // max number of contour definitions allowed, have to change index arrays if this changes\n int contourNdxC = clamp(contourNdx, 0, maxDefs - 1);\n\n bool even = (contourNdxC & 1) == 0;\n vec4 rgbfp = u_contourDefs[even ? contourNdxC * 3 / 2 : (contourNdxC - 1) * 3 / 2 + 2];\n vec4 intervalsPair = u_contourDefs[(contourNdxC / 2) * 3 + 1];\n // intervals.r => minor interval distance, intervals.g => major index count\n vec2 intervals = even ? intervalsPair.rg : intervalsPair.ba;\n\n float coord = v_height / intervals.r;\n // determine if this is in the vicinity of a major contour line (1/2 an interval either way, which is one limit of drawing width)\n bool maj = (fract((abs(coord) + 0.5) / intervals.g) < (1.0 / intervals.g));\n vec4 rgbf = unpackAndNormalize2BytesVec4(rgbfp, maj);\n // rgbf.a => (4-bit linecode / 4-bit weight) maj/min, where the 4-bit weight is a 3-bit weight value with one fraction bit and a 1.5 offset.\n // This gives a weight range of 1.5 to 9 in 0.5 increments.\n // NB: the showGeometry bit flag is stuck in at bit 16 of this, so the major line code has an extra bit in it that needs to be masked out\n int lineCodeWt = int((rgbf.a * 255.0) + 0.5);\n // first * 0.5 is for fractional part of width, then have to add 1.0 for offset, then another 1.0 for actual width bias\n float lineRadius = (float(lineCodeWt & 0xf) * 0.5 + 2.0) * 0.5;\n\n // abs(fract(coord - 0.5) - 0.5) will produce 0.0 at the contour line, and 0.5 at the mid-point between contour lines\n // fwidth(coord) is sum of absolute diffs in coord in adjacent pixels\n float line = abs(fract(coord - 0.5) - 0.5) / fwidth(coord);\n // If line is 0 (like at contour line), contourAlpha = lineRadius, so will use draw in contour color\n\t// If line >= lineRadius, contourAlpha = 0, so won't show contour\n float contourAlpha = lineRadius - min(line, lineRadius);\n\n // figure out which direction line is going, to know which screen pattern offset to use\n float dx = dFdx(contourAlpha);\n float dy = dFdy(contourAlpha);\n\n const float patLength = 32.0;\n uint patterns[10] = uint[](0xffffffffu, 0x80808080u, 0xf8f8f8f8u, 0xffe0ffe0u, 0xfe10fe10u, 0xe0e0e0e0u, 0xf888f888u, 0xff18ff18u, 0xccccccccu, 0x00000001u);\n\n float offset = trunc((abs(dx) > abs(dy)) ? gl_FragCoord.y : gl_FragCoord.x);\n offset = mod(offset, patLength);\n uint msk = 1u << uint(offset);\n contourAlpha *= (patterns[(lineCodeWt / 16) & 0xf] & msk) > 0u ? 1.0 : 0.0;\n contourAlpha = min(contourAlpha, 1.0);\n if (rgbfp.a / 65536.0 < 0.5) { // showGeometry == 0\n if (contourAlpha < 0.5)\n discard;\n return vec4(rgbf.rgb, 1.0);\n }\n // set contour opaque even if base color is transparent\n float alpha = contourAlpha >= 0.5 ? 1.0 : baseColor.a;\n return vec4(mix(baseColor.rgb, rgbf.rgb, contourAlpha), alpha);\n`;\n\n/** @internal */\nexport function addApplyContours(builder: ProgramBuilder) {\n const modelPos = builder.vert.usesInstancedGeometry ? \"(g_instancedRtcMatrix * rawPosition)\" : \"rawPosition\";\n\n const computeWorldHeight = `\nfloat computeWorldHeight(vec4 rawPosition) {\n float height = (u_modelToWorldC * ${modelPos}).z;\n // TODO: apply ECEF correction to height\n return height;\n}\n`;\n\n addFeatureIndex(builder.vert);\n\n builder.addFunctionComputedVarying(\"v_contourNdx\", VariableType.Float, \"computeContourNdx\", computeContourNdx);\n builder.addFunctionComputedVaryingWithArgs(\"v_height\", VariableType.Float, \"computeWorldHeight(rawPosition)\", computeWorldHeight);\n\n if (builder.vert.usesInstancedGeometry)\n addInstancedRtcMatrix(builder.vert);\n\n builder.vert.addUniform(\"u_contourLUT\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_contourLUT\", (uniform, params) => {\n // set this uniform here so that it won't cause problems (e.g.: loopback) if it does not end up being set by bindContourLUT call\n uniform.setUniform1i(TextureUnit.Contours - TextureUnit.Zero);\n params.target.uniforms.batch.bindContourLUT(uniform);\n });\n });\n\n builder.vert.addUniform(\"u_contourLUTWidth\", VariableType.Uint, (prog) => {\n prog.addGraphicUniform(\"u_contourLUTWidth\", (uniform, params) => {\n params.target.uniforms.batch.bindContourLUTWidth(uniform);\n });\n });\n\n builder.vert.addUniform(\"u_modelToWorldC\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_modelToWorldC\", (uniform, params) => {\n params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);\n });\n });\n\n const contourDefsSize = 8;\n builder.frag.addUniformArray(\"u_contourDefs\", VariableType.Vec4, contourDefsSize, (prog) => {\n prog.addGraphicUniform(\"u_contourDefs\", (uniform, params) => {\n params.target.uniforms.contours.bindcontourDefs(uniform);\n });\n });\n\n builder.frag.addFunction(unpack2BytesVec4);\n builder.frag.addFunction(unpackAndNormalize2BytesVec4);\n builder.frag.set(FragmentShaderComponent.ApplyContours, applyContours);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Contours.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Contours.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\nimport { ContourDisplay } from \"@itwin/core-common\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport {\n FragmentShaderComponent, ProgramBuilder, VariableType,\n} from \"../ShaderBuilder\";\nimport { addFeatureIndex } from \"./FeatureSymbology\";\nimport { addInstancedRtcMatrix } from \"./Vertex\";\nimport { encodeDepthRgb } from \"./Decode\";\n\nconst computeContourNdx = `\n if (u_contourLUTWidth == 0u)\n return 15.0;\n uint lutIndex = uint(getFeatureIndex());\n bool odd = bool(lutIndex & 1u);\n lutIndex /= 2u;\n uint byteSel = lutIndex & 0x3u;\n lutIndex /= 4u;\n ivec2 coords = ivec2(lutIndex % u_contourLUTWidth, lutIndex / u_contourLUTWidth);\n uvec4 contourNdx4 = uvec4(texelFetch(u_contourLUT, coords, 0) * 255.0 + 0.5);\n uvec2 contourNdx2 = bool(byteSel & 2u) ? contourNdx4.ba : contourNdx4.rg;\n uint contourNdx = bool(byteSel & 1u) ? contourNdx2.g : contourNdx2.r;\n return float(odd ? contourNdx >> 4u : contourNdx & 0xFu);\n`;\n\nconst unpack2BytesVec4 = `\nvec4 unpack2BytesVec4(vec4 f, bool upper) {\n f = floor(f + 0.5);\n vec4 outUpper = floor(f / 256.0);\n vec4 outLower = floor(f - outUpper * 256.0);\n return upper ? outUpper : outLower;\n}\n`;\n\nconst unpackAndNormalize2BytesVec4 = `\nvec4 unpackAndNormalize2BytesVec4(vec4 f, bool upper) {\n return unpack2BytesVec4(f, upper) / 255.0;\n}\n`;\n\nconst encodeContourLineInfo = `\n void encodeContourLineInfo(int groupIndex, bool isMajor, float interval) {\n // ContourDisplay.maxContourGroups is currently 5. Must change this code if that changes.\n float groupIndexAndType = float(groupIndex + (isMajor ? 16 : 8));\n\n // Find nearest multiple of interval to pixel world height.\n float elevation = (v_height >= 0.0 ? floor((v_height + interval / 2.0) / interval) : ceil((v_height - interval / 2.0) / interval)) * interval;\n\n // Convert elevation to a fraction of the frustum's world Z extents\n elevation = clamp((elevation - u_worldFrustumZRange.x) / (u_worldFrustumZRange.y - u_worldFrustumZRange.x), 0.0, 1.0);\n\n // Encode elevation in RGB and the rest of the info in A\n g_contourLineInfo = vec4(groupIndexAndType * 0.03125, encodeDepthRgb(elevation));\n }\n`;\n\nconst applyContours = `\n int contourNdx = int(v_contourNdx + 0.5);\n if (contourNdx > 14) // 15 => no contours\n return baseColor;\n\n const int maxDefs = ${ContourDisplay.maxContourGroups}; // max number of contour definitions allowed, have to change index arrays if this changes\n int contourNdxC = clamp(contourNdx, 0, maxDefs - 1);\n\n bool even = (contourNdxC & 1) == 0;\n vec4 rgbfp = u_contourDefs[even ? contourNdxC * 3 / 2 : (contourNdxC - 1) * 3 / 2 + 2];\n vec4 intervalsPair = u_contourDefs[(contourNdxC / 2) * 3 + 1];\n // intervals.r => minor interval distance, intervals.g => major index count\n vec2 intervals = even ? intervalsPair.rg : intervalsPair.ba;\n\n float coord = v_height / intervals.r;\n // determine if this is in the vicinity of a major contour line (1/2 an interval either way, which is one limit of drawing width)\n bool maj = (fract((abs(coord) + 0.5) / intervals.g) < (1.0 / intervals.g));\n vec4 rgbf = unpackAndNormalize2BytesVec4(rgbfp, maj);\n // rgbf.a => (4-bit linecode / 4-bit weight) maj/min, where the 4-bit weight is a 3-bit weight value with one fraction bit and a 1.5 offset.\n // This gives a weight range of 1.5 to 9 in 0.5 increments.\n // NB: the showGeometry bit flag is stuck in at bit 16 of this, so the major line code has an extra bit in it that needs to be masked out\n int lineCodeWt = int((rgbf.a * 255.0) + 0.5);\n // first * 0.5 is for fractional part of width, then have to add 1.0 for offset, then another 1.0 for actual width bias\n float lineRadius = (float(lineCodeWt & 0xf) * 0.5 + 2.0) * 0.5;\n\n // abs(fract(coord - 0.5) - 0.5) will produce 0.0 at the contour line, and 0.5 at the mid-point between contour lines\n // fwidth(coord) is sum of absolute diffs in coord in adjacent pixels\n float line = abs(fract(coord - 0.5) - 0.5) / fwidth(coord);\n // If line is 0 (like at contour line), contourAlpha = lineRadius, so will use draw in contour color\n\t// If line >= lineRadius, contourAlpha = 0, so won't show contour\n float contourAlpha = lineRadius - min(line, lineRadius);\n\n // figure out which direction line is going, to know which screen pattern offset to use\n float dx = dFdx(contourAlpha);\n float dy = dFdy(contourAlpha);\n\n const float patLength = 32.0;\n uint patterns[10] = uint[](0xffffffffu, 0x80808080u, 0xf8f8f8f8u, 0xffe0ffe0u, 0xfe10fe10u, 0xe0e0e0e0u, 0xf888f888u, 0xff18ff18u, 0xccccccccu, 0x00000001u);\n\n float offset = trunc((abs(dx) > abs(dy)) ? gl_FragCoord.y : gl_FragCoord.x);\n offset = mod(offset, patLength);\n uint msk = 1u << uint(offset);\n contourAlpha *= (patterns[(lineCodeWt / 16) & 0xf] & msk) > 0u ? 1.0 : 0.0;\n contourAlpha = min(contourAlpha, 1.0);\n\n bool isContourLine = contourAlpha >= 0.5;\n if (isContourLine)\n encodeContourLineInfo(contourNdxC, maj, intervals.r);\n\n if (rgbfp.a / 65536.0 < 0.5) { // showGeometry == 0\n if (!isContourLine)\n discard;\n return vec4(rgbf.rgb, 1.0);\n }\n // set contour opaque even if base color is transparent\n float alpha = contourAlpha >= 0.5 ? 1.0 : baseColor.a;\n return vec4(mix(baseColor.rgb, rgbf.rgb, contourAlpha), alpha);\n`;\n\n/** @internal */\nexport function addApplyContours(builder: ProgramBuilder) {\n const modelPos = builder.vert.usesInstancedGeometry ? \"(g_instancedRtcMatrix * rawPosition)\" : \"rawPosition\";\n\n const computeWorldHeight = `\nfloat computeWorldHeight(vec4 rawPosition) {\n float height = (u_modelToWorldC * ${modelPos}).z;\n // TODO: apply ECEF correction to height\n return height;\n}\n`;\n\n addFeatureIndex(builder.vert);\n\n builder.addFunctionComputedVarying(\"v_contourNdx\", VariableType.Float, \"computeContourNdx\", computeContourNdx);\n builder.addFunctionComputedVaryingWithArgs(\"v_height\", VariableType.Float, \"computeWorldHeight(rawPosition)\", computeWorldHeight);\n\n if (builder.vert.usesInstancedGeometry)\n addInstancedRtcMatrix(builder.vert);\n\n builder.vert.addUniform(\"u_contourLUT\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_contourLUT\", (uniform, params) => {\n // set this uniform here so that it won't cause problems (e.g.: loopback) if it does not end up being set by bindContourLUT call\n uniform.setUniform1i(TextureUnit.Contours - TextureUnit.Zero);\n params.target.uniforms.batch.bindContourLUT(uniform);\n });\n });\n\n builder.vert.addUniform(\"u_contourLUTWidth\", VariableType.Uint, (prog) => {\n prog.addGraphicUniform(\"u_contourLUTWidth\", (uniform, params) => {\n params.target.uniforms.batch.bindContourLUTWidth(uniform);\n });\n });\n\n builder.vert.addUniform(\"u_modelToWorldC\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_modelToWorldC\", (uniform, params) => {\n params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);\n });\n });\n\n builder.frag.addUniform(\"u_worldFrustumZRange\", VariableType.Vec2, (prog) => {\n prog.addProgramUniform(\"u_worldFrustumZRange\", (uniform, params) => {\n uniform.setUniform2fv(params.target.uniforms.frustum.worldFrustumZRange);\n });\n });\n\n const contourDefsSize = 8;\n builder.frag.addUniformArray(\"u_contourDefs\", VariableType.Vec4, contourDefsSize, (prog) => {\n prog.addGraphicUniform(\"u_contourDefs\", (uniform, params) => {\n params.target.uniforms.contours.bindcontourDefs(uniform);\n });\n });\n\n builder.frag.addGlobal(\"g_contourLineInfo\", VariableType.Vec4, \"vec4(0.0)\");\n builder.frag.addFunction(encodeDepthRgb);\n builder.frag.addFunction(encodeContourLineInfo);\n \n builder.frag.addFunction(unpack2BytesVec4);\n builder.frag.addFunction(unpackAndNormalize2BytesVec4);\n builder.frag.set(FragmentShaderComponent.ApplyContours, applyContours);\n builder.frag.set(FragmentShaderComponent.ComputeContourLineInfo, \"return g_contourLineInfo;\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fragment.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Fragment.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAwD,MAAM,kBAAkB,CAAC;AAI/G,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,QAQ/D;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,QASlE;
|
|
1
|
+
{"version":3,"file":"Fragment.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Fragment.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAwD,MAAM,kBAAkB,CAAC;AAI/G,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,QAQ/D;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,QASlE;AA4CD,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAkCtE;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAazE;AAED,gBAAgB;AAChB,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CASpF;AAED,gBAAgB;AAChB,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAWxD,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,qPAQ9B,CAAC"}
|