@itwin/core-frontend 3.6.0-dev.8 → 4.0.0-dev.2
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 +35 -1
- package/LICENSE.md +1 -1
- package/lib/cjs/AccuDraw.js +1 -1
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts +23 -3
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +11 -3
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CheckpointConnection.js +1 -1
- package/lib/cjs/CheckpointConnection.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts +2 -2
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +12 -4
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +3 -3
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +2 -2
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +4 -6
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +6 -7
- package/lib/cjs/IModelConnection.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 +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +8 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +10 -6
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NoRenderApp.d.ts.map +1 -1
- package/lib/cjs/NoRenderApp.js +3 -0
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts +4 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +19 -5
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/Tiles.d.ts +4 -0
- package/lib/cjs/Tiles.d.ts.map +1 -1
- package/lib/cjs/Tiles.js +11 -0
- package/lib/cjs/Tiles.js.map +1 -1
- package/lib/cjs/ViewContext.js +1 -1
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewManager.d.ts.map +1 -1
- package/lib/cjs/ViewManager.js +2 -3
- package/lib/cjs/ViewManager.js.map +1 -1
- package/lib/cjs/ViewState.d.ts +4 -5
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +0 -1
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +53 -4
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +82 -34
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/extension/ExtensionImpl.js +2 -2
- package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
- package/lib/cjs/extension/ExtensionRuntime.js +3 -0
- package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
- package/lib/cjs/render/GraphicBranch.d.ts +3 -0
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/GraphicBuilder.d.ts +1 -1
- package/lib/cjs/render/GraphicBuilder.js +1 -1
- package/lib/cjs/render/GraphicBuilder.js.map +1 -1
- package/lib/cjs/render/MockRender.d.ts.map +1 -1
- package/lib/cjs/render/MockRender.js +3 -0
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/RealityMeshParams.d.ts +3 -4
- package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/render/RealityMeshParams.js +9 -5
- package/lib/cjs/render/RealityMeshParams.js.map +1 -1
- package/lib/cjs/render/RenderMaterial.d.ts +1 -1
- package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
- package/lib/cjs/render/RenderMaterial.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +4 -4
- package/lib/cjs/render/RenderSystem.js +4 -4
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/RenderTarget.d.ts +1 -1
- package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
- package/lib/cjs/render/RenderTarget.js +1 -1
- package/lib/cjs/render/RenderTarget.js.map +1 -1
- package/lib/cjs/render/VisibleFeature.d.ts +5 -5
- package/lib/cjs/render/VisibleFeature.js.map +1 -1
- package/lib/cjs/render/primitives/DisplayParams.d.ts.map +1 -1
- package/lib/cjs/render/primitives/DisplayParams.js +2 -1
- package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js +3 -3
- package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +3 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +5 -0
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
- package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
- package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +6 -4
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/EDL.d.ts +40 -0
- package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
- package/lib/cjs/render/webgl/EDL.js +264 -0
- package/lib/cjs/render/webgl/EDL.js.map +1 -0
- package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
- package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
- package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
- package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
- package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/Layer.js +2 -2
- package/lib/cjs/render/webgl/LayerCommands.js +2 -2
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +9 -8
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
- package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.js +2 -0
- package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +8 -3
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
- package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
- package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +46 -38
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts +19 -17
- package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js +8 -6
- package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts +6 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +195 -76
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +3 -3
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
- package/lib/cjs/render/webgl/Target.js +7 -7
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +18 -3
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
- package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
- package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
- package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
- package/lib/cjs/render/webgl/UniformHandle.js +1 -2
- package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
- package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
- package/lib/cjs/render/webgl/glsl/EDL.d.ts +14 -0
- package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
- package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
- package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
- package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
- package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/tile/BatchedTileIdMap.js +1 -1
- package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
- package/lib/cjs/tile/DynamicIModelTile.js +1 -1
- package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +4 -2
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/IModelTile.js +1 -1
- package/lib/cjs/tile/IModelTile.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.d.ts +6 -0
- package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +20 -7
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.d.ts +14 -1
- package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.js +30 -11
- package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts +4 -3
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +61 -53
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +2 -2
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +9 -4
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +15 -7
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +1 -1
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +3 -0
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +3 -0
- package/lib/cjs/tile/TileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts +14 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +57 -27
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +26 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +54 -4
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +3 -2
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +12 -2
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +16 -4
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +2 -0
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +5 -0
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +33 -14
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +42 -3
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +126 -9
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +26 -0
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +2 -2
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +2 -2
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/esm/AccuDraw.js +1 -1
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts +23 -3
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js +11 -3
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CheckpointConnection.js +1 -1
- package/lib/esm/CheckpointConnection.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +2 -2
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +12 -4
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +3 -3
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +2 -2
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +4 -6
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +6 -7
- package/lib/esm/IModelConnection.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 +1 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +8 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +10 -6
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NoRenderApp.d.ts.map +1 -1
- package/lib/esm/NoRenderApp.js +3 -0
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts +4 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +19 -5
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/Tiles.d.ts +4 -0
- package/lib/esm/Tiles.d.ts.map +1 -1
- package/lib/esm/Tiles.js +11 -0
- package/lib/esm/Tiles.js.map +1 -1
- package/lib/esm/ViewContext.js +1 -1
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewManager.d.ts.map +1 -1
- package/lib/esm/ViewManager.js +2 -3
- package/lib/esm/ViewManager.js.map +1 -1
- package/lib/esm/ViewState.d.ts +4 -5
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +0 -1
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +53 -4
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +83 -35
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/extension/ExtensionImpl.js +2 -2
- package/lib/esm/extension/ExtensionImpl.js.map +1 -1
- package/lib/esm/extension/ExtensionRuntime.js +5 -2
- package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
- package/lib/esm/render/GraphicBranch.d.ts +3 -0
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/GraphicBuilder.d.ts +1 -1
- package/lib/esm/render/GraphicBuilder.js +1 -1
- package/lib/esm/render/GraphicBuilder.js.map +1 -1
- package/lib/esm/render/MockRender.d.ts.map +1 -1
- package/lib/esm/render/MockRender.js +3 -0
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/RealityMeshParams.d.ts +3 -4
- package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
- package/lib/esm/render/RealityMeshParams.js +10 -6
- package/lib/esm/render/RealityMeshParams.js.map +1 -1
- package/lib/esm/render/RenderMaterial.d.ts +1 -1
- package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
- package/lib/esm/render/RenderMaterial.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +4 -4
- package/lib/esm/render/RenderSystem.js +4 -4
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/RenderTarget.d.ts +1 -1
- package/lib/esm/render/RenderTarget.d.ts.map +1 -1
- package/lib/esm/render/RenderTarget.js +1 -1
- package/lib/esm/render/RenderTarget.js.map +1 -1
- package/lib/esm/render/VisibleFeature.d.ts +5 -5
- package/lib/esm/render/VisibleFeature.js.map +1 -1
- package/lib/esm/render/primitives/DisplayParams.d.ts.map +1 -1
- package/lib/esm/render/primitives/DisplayParams.js +2 -1
- package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js +3 -3
- package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +3 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +5 -0
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
- package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.js +69 -0
- package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +6 -4
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/EDL.d.ts +40 -0
- package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
- package/lib/esm/render/webgl/EDL.js +260 -0
- package/lib/esm/render/webgl/EDL.js.map +1 -0
- package/lib/esm/render/webgl/EdgeSettings.js +2 -2
- package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
- package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
- package/lib/esm/render/webgl/FrameBuffer.js +9 -0
- package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
- package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/render/webgl/Layer.js +2 -2
- package/lib/esm/render/webgl/LayerCommands.js +2 -2
- package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +9 -8
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
- package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/esm/render/webgl/PointCloud.js +2 -0
- package/lib/esm/render/webgl/PointCloud.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +8 -3
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
- package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
- package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts +2 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +46 -38
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts +19 -17
- package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.js +8 -6
- package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts +6 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +194 -77
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +3 -3
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
- package/lib/esm/render/webgl/Target.js +7 -7
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
- package/lib/esm/render/webgl/Technique.js +18 -3
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
- package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
- package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
- package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
- package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
- package/lib/esm/render/webgl/UniformHandle.js +1 -2
- package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
- package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
- package/lib/esm/render/webgl/glsl/EDL.d.ts +14 -0
- package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
- package/lib/esm/render/webgl/glsl/EDL.js +253 -0
- package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
- package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
- package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/tile/BatchedTileIdMap.js +1 -1
- package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
- package/lib/esm/tile/DynamicIModelTile.js +1 -1
- package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +4 -2
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/IModelTile.js +1 -1
- package/lib/esm/tile/IModelTile.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts +6 -0
- package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
- package/lib/esm/tile/ImdlReader.js +20 -7
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.d.ts +14 -1
- package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.js +30 -12
- package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts +4 -3
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +62 -54
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +2 -2
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +5 -0
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +9 -4
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +15 -7
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +1 -1
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +3 -0
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +3 -0
- package/lib/esm/tile/TileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts +14 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +57 -27
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +26 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +53 -4
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +3 -2
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +12 -2
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +16 -4
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +3 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +2 -0
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +5 -0
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +33 -14
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +42 -3
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +126 -9
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +26 -0
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
- package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +2 -2
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.js +2 -2
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/public/locales/en/iModelJs.json +2 -2
- package/package.json +20 -21
|
@@ -174,7 +174,7 @@ class ShadowMapParams {
|
|
|
174
174
|
}
|
|
175
175
|
const defaultSunDirection = core_geometry_1.Vector3d.create(-1, -1, -1).normalize();
|
|
176
176
|
const scratchFrustum = new core_common_1.Frustum();
|
|
177
|
-
const scratchFrustumPlanes =
|
|
177
|
+
const scratchFrustumPlanes = core_common_1.FrustumPlanes.createEmpty();
|
|
178
178
|
class SolarShadowMap {
|
|
179
179
|
constructor(target) {
|
|
180
180
|
this._projectionMatrix = core_geometry_1.Matrix4d.createIdentity();
|
|
@@ -394,8 +394,8 @@ class SolarShadowMap {
|
|
|
394
394
|
System_1.System.instance.frameBufferStack.execute(bundle.fbo, true, false, () => {
|
|
395
395
|
System_1.System.instance.context.clearDepth(1.0);
|
|
396
396
|
System_1.System.instance.context.clear(GL_1.GL.BufferBit.Depth);
|
|
397
|
-
target.techniques.execute(target, renderCommands.getCommands(3 /* OpaquePlanar */),
|
|
398
|
-
target.techniques.execute(target, renderCommands.getCommands(
|
|
397
|
+
target.techniques.execute(target, renderCommands.getCommands(3 /* OpaquePlanar */), 19 /* PlanarClassification */); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.
|
|
398
|
+
target.techniques.execute(target, renderCommands.getCommands(5 /* OpaqueGeneral */), 19 /* PlanarClassification */); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.
|
|
399
399
|
});
|
|
400
400
|
// copy depth buffer to EVSM shadow buffer and average down for AA effect
|
|
401
401
|
gl.viewport(0, 0, evsmWidth, evsmHeight);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolarShadowMap.js","sourceRoot":"","sources":["../../../../src/render/webgl/SolarShadowMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { ClipUtilities, ConvexClipPlaneSet, Geometry, GrowableXYZArray, Map4d, Matrix3d, Matrix4d, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n Frustum, FrustumPlanes, RenderMode, RenderTexture, SolarShadowSettings, TextureTransparency, ViewFlags,\r\n} from \"@itwin/core-common\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { Tile, TileDrawArgs, TileTreeReference, TileVisibility } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { EVSMGeometry } from \"./CachedGeometry\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass, TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { Texture, TextureHandle } from \"./Texture\";\r\n\r\ntype ProcessTiles = (tiles: Tile[]) => void;\r\n\r\nfunction createDrawArgs(sceneContext: SceneContext, solarShadowMap: SolarShadowMap, tree: TileTreeReference, frustumPlanes: FrustumPlanes, processTiles: ProcessTiles): TileDrawArgs | undefined {\r\n class SolarShadowMapDrawArgs extends TileDrawArgs {\r\n private _useViewportMap?: boolean;\r\n private readonly _processTiles: ProcessTiles;\r\n\r\n constructor(private _mapFrustumPlanes: FrustumPlanes, private _shadowMap: SolarShadowMap, args: TileDrawArgs, process: ProcessTiles) {\r\n super(args);\r\n this._processTiles = process;\r\n }\r\n\r\n // The solar shadow projection is parallel - which can cause excessive tile selection if it is along an axis of an unbounded tile\r\n // tree such as the OSM buildings. Rev limit the selection here.\r\n public override get maxRealityTreeSelectionCount(): undefined | number { return 500; }\r\n\r\n public override processSelectedTiles(tiles: Tile[]): void {\r\n this._processTiles(tiles);\r\n }\r\n\r\n public override get frustumPlanes(): FrustumPlanes {\r\n if (true === this._useViewportMap)\r\n return super.frustumPlanes;\r\n else\r\n return this._mapFrustumPlanes;\r\n }\r\n\r\n public override get worldToViewMap(): Map4d {\r\n if (true === this._useViewportMap)\r\n return super.worldToViewMap;\r\n else\r\n return this._shadowMap.worldToViewMap;\r\n }\r\n\r\n public override drawGraphics(): void {\r\n const graphics = this.produceGraphics();\r\n if (graphics)\r\n this._shadowMap.addGraphic(graphics);\r\n }\r\n\r\n public override getPixelSize(tile: Tile): number {\r\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\r\n // - otherwise artifacts like shadow acne may result.\r\n // For tiles that are NOT part of the scene, size them based on the shadow frustum, not the viewport frustum\r\n // - otherwise excessive numbers of excessively detailed may be requested for the shadow map.\r\n if (undefined === this._useViewportMap) {\r\n this._useViewportMap = true;\r\n const vis = tile.computeVisibility(this);\r\n this._useViewportMap = TileVisibility.OutsideFrustum !== vis;\r\n }\r\n\r\n const size = super.getPixelSize(tile);\r\n this._useViewportMap = undefined;\r\n return size;\r\n }\r\n\r\n public static create(context: SceneContext, shadowMap: SolarShadowMap, tileTree: TileTreeReference, planes: FrustumPlanes, process: ProcessTiles) {\r\n const args = tileTree.createDrawArgs(context);\r\n return undefined !== args ? new SolarShadowMapDrawArgs(planes, shadowMap, args, process) : undefined;\r\n }\r\n }\r\n\r\n return SolarShadowMapDrawArgs.create(sceneContext, solarShadowMap, tree, frustumPlanes, processTiles);\r\n}\r\n\r\nconst shadowMapWidth = 4096; // size of original depth buffer map\r\nconst shadowMapHeight = shadowMapWidth; // TBD - Adjust for aspect ratio.\r\nconst evsmWidth = shadowMapWidth / 2; // EVSM buffer is 1/2 size each direction\r\nconst evsmHeight = shadowMapHeight / 2;\r\nconst postProjectionMatrixNpc = Matrix4d.createRowValues(/* Row 1 */ 0, 1, 0, 0, /* Row 1 */ 0, 0, 1, 0, /* Row 3 */ 1, 0, 0, 0, /* Row 4 */ 0, 0, 0, 1);\r\n\r\n// Bundles up the disposable, create-once-and-reuse members of a SolarShadowMap.\r\nclass Bundle implements WebGLDisposable {\r\n private constructor(\r\n public readonly depthTexture: Texture,\r\n public readonly shadowMapTexture: Texture,\r\n public readonly fbo: FrameBuffer,\r\n public readonly fboSM: FrameBuffer,\r\n public readonly evsmGeom: EVSMGeometry,\r\n public readonly renderCommands: RenderCommands) {\r\n }\r\n\r\n public static create(target: Target, stack: BranchStack, batch: BatchState): Bundle | undefined {\r\n const depthTextureHandle = System.instance.createDepthBuffer(shadowMapWidth, shadowMapHeight) as TextureHandle;\r\n if (undefined === depthTextureHandle)\r\n return undefined;\r\n\r\n let pixelDataType = GL.Texture.DataType.Float;\r\n switch (System.instance.capabilities.maxRenderType) {\r\n case RenderType.TextureFloat:\r\n break;\r\n case RenderType.TextureHalfFloat:\r\n if (System.instance.capabilities.isWebGL2) {\r\n pixelDataType = (System.instance.context as WebGL2RenderingContext).HALF_FLOAT;\r\n break;\r\n } else {\r\n const exthf = System.instance.capabilities.queryExtensionObject<OES_texture_half_float>(\"OES_texture_half_float\");\r\n if (undefined !== exthf) {\r\n pixelDataType = exthf.HALF_FLOAT_OES;\r\n break;\r\n }\r\n }\r\n /* falls through */\r\n default:\r\n return undefined;\r\n }\r\n\r\n const colorTextures: TextureHandle[] = [];\r\n\r\n // Check if the system can render to a depth texture without a renderable color texture bound as well.\r\n // If it cannot, add a renderable color texture to the framebuffer.\r\n // MacOS Safari exhibited this behavior, which necessitated this code path.\r\n if (!System.instance.capabilities.canRenderDepthWithoutColor) {\r\n const colTex = TextureHandle.createForAttachment(shadowMapWidth, shadowMapHeight, GL.Texture.Format.Rgba, pixelDataType);\r\n if (undefined === colTex)\r\n return undefined;\r\n colorTextures.push(colTex);\r\n }\r\n\r\n const fbo = FrameBuffer.create(colorTextures, depthTextureHandle);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n // shadowMap texture is 1/4 size the depth texture (and averaged down when converting)\r\n const shadowMapTextureHandle = TextureHandle.createForAttachment(evsmWidth, evsmHeight, GL.Texture.Format.Rgba, pixelDataType);\r\n if (undefined === shadowMapTextureHandle)\r\n return undefined;\r\n\r\n const fboSM = FrameBuffer.create([shadowMapTextureHandle]);\r\n if (undefined === fboSM)\r\n return undefined;\r\n\r\n const depthTexture = new Texture({ ownership: \"external\", type: RenderTexture.Type.TileSection, handle: depthTextureHandle, transparency: TextureTransparency.Opaque });\r\n const evsmGeom = EVSMGeometry.createGeometry(depthTexture.texture.getHandle()!, shadowMapWidth, shadowMapHeight);\r\n if (undefined === evsmGeom)\r\n return undefined;\r\n\r\n const shadowMapTexture = new Texture({ type: RenderTexture.Type.Normal, ownership: \"external\", handle: shadowMapTextureHandle, transparency: TextureTransparency.Opaque });\r\n const renderCommands = new RenderCommands(target, stack, batch);\r\n return new Bundle(depthTexture, shadowMapTexture, fbo, fboSM, evsmGeom, renderCommands);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this.depthTexture.isDisposed\r\n && this.shadowMapTexture.isDisposed\r\n && this.fbo.isDisposed\r\n && this.fboSM.isDisposed\r\n && this.evsmGeom.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.depthTexture);\r\n dispose(this.shadowMapTexture);\r\n dispose(this.fbo);\r\n dispose(this.fboSM);\r\n dispose(this.evsmGeom);\r\n }\r\n}\r\n\r\n/** Describes the set of parameters which, when they change, require us to recreate the shadow map. */\r\nclass ShadowMapParams {\r\n public readonly direction = new Vector3d();\r\n public readonly viewFrustum = new Frustum();\r\n public settings: SolarShadowSettings;\r\n\r\n public constructor(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings) {\r\n direction.clone(this.direction);\r\n this.viewFrustum.setFrom(viewFrustum);\r\n this.settings = settings;\r\n }\r\n\r\n public update(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings): void {\r\n this.settings = settings;\r\n this.viewFrustum.setFrom(viewFrustum);\r\n direction.clone(this.direction);\r\n }\r\n}\r\n\r\nconst defaultSunDirection = Vector3d.create(-1, -1, -1).normalize()!;\r\nconst scratchFrustum = new Frustum();\r\nconst scratchFrustumPlanes = new FrustumPlanes();\r\n\r\nexport class SolarShadowMap implements RenderMemory.Consumer, WebGLDisposable {\r\n private _bundle?: Bundle;\r\n private _projectionMatrix = Matrix4d.createIdentity();\r\n private _graphics: RenderGraphic[] = [];\r\n private _shadowFrustum = new Frustum();\r\n private _isReady = false;\r\n private _isDrawing = false;\r\n private _enabled = false;\r\n private _params?: ShadowMapParams;\r\n private readonly _scratchRange = Range3d.createNull();\r\n private readonly _scratchTransform = Transform.createIdentity();\r\n\r\n private readonly _scratchViewFlags = new ViewFlags();\r\n private readonly _renderState: RenderState;\r\n private readonly _noZRenderState: RenderState;\r\n private readonly _batchState: BatchState;\r\n private _worldToViewMap = Map4d.createIdentity();\r\n private readonly _target: Target;\r\n\r\n // This exists chiefly for debugging. See ToggleShadowMapTilesTool.\r\n public onGraphicsChanged?: (graphics: RenderGraphic[]) => void;\r\n\r\n private getBundle(target: Target): Bundle | undefined {\r\n if (undefined === this._bundle) {\r\n this._bundle = Bundle.create(target, target.uniforms.branch.stack, this._batchState);\r\n assert(undefined !== this._bundle);\r\n }\r\n\r\n return this._bundle;\r\n }\r\n\r\n public get isReady() { return this._isReady; }\r\n public get isDrawing() { return this._isDrawing; }\r\n public get isEnabled() { return this._enabled; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n public get depthTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.depthTexture : undefined; }\r\n public get shadowMapTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.shadowMapTexture : undefined; }\r\n public get settings(): SolarShadowSettings | undefined { return undefined !== this._params ? this._params.settings : undefined; }\r\n public get direction(): Vector3d | undefined { return undefined !== this._params ? this._params.direction : undefined; }\r\n public get frustum(): Frustum { return this._shadowFrustum; }\r\n public get worldToViewMap(): Map4d { return this._worldToViewMap; }\r\n public addGraphic(graphic: RenderGraphic) { this._graphics.push(graphic); }\r\n\r\n public constructor(target: Target) {\r\n this._target = target;\r\n this._renderState = new RenderState();\r\n this._renderState.flags.depthMask = true;\r\n this._renderState.flags.blend = false;\r\n this._renderState.flags.depthTest = true;\r\n\r\n this._noZRenderState = new RenderState();\r\n this._noZRenderState.flags.depthMask = false;\r\n\r\n this._batchState = new BatchState(target.uniforms.branch.stack);\r\n }\r\n\r\n public disable() {\r\n this._enabled = this._isReady = false;\r\n this._bundle = dispose(this._bundle);\r\n this.clearGraphics(true);\r\n this._target.uniforms.shadow.update();\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n const bundle = this._bundle;\r\n if (undefined !== bundle)\r\n stats.addShadowMap(bundle.depthTexture.bytesUsed + bundle.shadowMapTexture.bytesUsed);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._bundle && 0 === this._graphics.length; }\r\n\r\n public dispose() {\r\n this._bundle = dispose(this._bundle);\r\n this.clearGraphics(true);\r\n }\r\n\r\n private clearGraphics(notify: boolean) {\r\n for (const graphic of this._graphics)\r\n graphic.dispose();\r\n\r\n this._graphics.length = 0;\r\n if (notify)\r\n this.notifyGraphicsChanged();\r\n }\r\n\r\n private notifyGraphicsChanged(): void {\r\n if (undefined !== this.onGraphicsChanged)\r\n this.onGraphicsChanged(this._graphics);\r\n }\r\n\r\n public update(context: SceneContext | undefined) {\r\n this._isReady = false;\r\n this.clearGraphics(false);\r\n\r\n if (undefined === context || !context.viewport.view.isSpatialView()) {\r\n this.disable();\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n\r\n const view = context.viewport.view;\r\n const style = view.getDisplayStyle3d();\r\n const sunDirection = style.sunDirection ?? defaultSunDirection;\r\n\r\n const minimumHorizonDirection = -.01;\r\n if (sunDirection.z > minimumHorizonDirection) {\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n\r\n this._enabled = true;\r\n const viewFrustum = context.viewingSpace.getFrustum();\r\n const settings = style.settings.solarShadows;\r\n if (undefined === this._params)\r\n this._params = new ShadowMapParams(viewFrustum, sunDirection, settings);\r\n else\r\n this._params.update(viewFrustum, sunDirection, settings);\r\n\r\n const iModel = view.iModel;\r\n\r\n const worldToMapTransform = Transform.createRefs(Point3d.createZero(), Matrix3d.createRigidHeadsUp(this._params.direction.negate()).inverse()!);\r\n const worldToMap = Matrix4d.createTransform(worldToMapTransform);\r\n const mapToWorld = worldToMap.createInverse()!;\r\n\r\n // Start with entire project.\r\n const shadowRange = worldToMapTransform.multiplyRange(iModel.projectExtents);\r\n\r\n // Limit the map to only displayed models.\r\n const viewTileRange = Range3d.createNull();\r\n view.forEachTileTreeRef((ref) => {\r\n if (ref.castsShadows) {\r\n if (ref.isGlobal) {\r\n // A shadow-casting tile tree that spans the globe. Limit its range to the viewed extents.\r\n for (const p3 of viewFrustum.points) {\r\n const p4 = worldToMap.multiplyPoint3d(p3, 1);\r\n if (p4.w > 0.0001)\r\n viewTileRange.extendXYZW(p4.x, p4.y, p4.z, p4.w);\r\n else\r\n viewTileRange.high.z = Math.max(1.0, viewTileRange.high.z); // behind eye plane.\r\n }\r\n } else {\r\n ref.accumulateTransformedRange(viewTileRange, worldToMap, undefined);\r\n }\r\n }\r\n });\r\n\r\n if (!viewTileRange.isNull)\r\n viewTileRange.clone(shadowRange);\r\n\r\n // Expand shadow range to include both the shadowers and shadowed portion of background map.\r\n scratchFrustum.initFromRange(shadowRange);\r\n mapToWorld.multiplyPoint3dArrayQuietNormalize(scratchFrustum.points); // This frustum represents the shadwowing geometry. Intersect it with background geometry and expand the range depth to include that intersection.\r\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\r\n if (undefined !== backgroundMapGeometry) {\r\n const backgroundDepthRange = backgroundMapGeometry.getFrustumIntersectionDepthRange(this._shadowFrustum, iModel.projectExtents);\r\n if (!backgroundDepthRange.isNull)\r\n shadowRange.low.z = Math.min(shadowRange.low.z, backgroundDepthRange.low);\r\n }\r\n\r\n this._params.viewFrustum.transformBy(worldToMapTransform, scratchFrustum);\r\n scratchFrustumPlanes.init(scratchFrustum);\r\n\r\n const viewIntersectShadowRange = Range3d.createNull();\r\n const viewClipPlanes = ConvexClipPlaneSet.createPlanes(scratchFrustumPlanes.planes!);\r\n ClipUtilities.announceLoopsOfConvexClipPlaneSetIntersectRange(viewClipPlanes, shadowRange, (points: GrowableXYZArray) => {\r\n for (const point of points.getPoint3dArray())\r\n viewIntersectShadowRange.extendPoint(point);\r\n });\r\n if (viewIntersectShadowRange.isNull) {\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n viewIntersectShadowRange.high.z = shadowRange.high.z; // We need to include shadowing geometry that may be outside view (along the solar axis).\r\n\r\n this._shadowFrustum.initFromRange(viewIntersectShadowRange);\r\n mapToWorld.multiplyPoint3dArrayQuietNormalize(this._shadowFrustum.points);\r\n\r\n const tileRange = Range3d.createNull();\r\n scratchFrustumPlanes.init(this._shadowFrustum);\r\n view.forEachTileTreeRef(((ref) => {\r\n if (!ref.castsShadows)\r\n return;\r\n\r\n const drawArgs = createDrawArgs(context, this, ref, scratchFrustumPlanes, (tiles: Tile[]) => {\r\n for (const tile of tiles)\r\n tileRange.extendRange(tileToMapTransform.multiplyRange(tile.range, this._scratchRange));\r\n });\r\n\r\n if (undefined === drawArgs)\r\n return;\r\n\r\n const tileToMapTransform = worldToMapTransform.multiplyTransformTransform(drawArgs.location, this._scratchTransform);\r\n drawArgs.tree.draw(drawArgs);\r\n }));\r\n\r\n if (tileRange.isNull) {\r\n this.clearGraphics(true);\r\n } else if (this._graphics.length > 0) {\r\n // Avoid an uninvertible matrix on empty range...\r\n if (Geometry.isAlmostEqualNumber(shadowRange.low.x, shadowRange.high.x) ||\r\n Geometry.isAlmostEqualNumber(shadowRange.low.y, shadowRange.high.y) ||\r\n Geometry.isAlmostEqualNumber(shadowRange.low.z, shadowRange.high.z)) {\r\n this.clearGraphics(true);\r\n return;\r\n }\r\n\r\n const frustumMap = this._shadowFrustum.toMap4d();\r\n if (undefined === frustumMap) {\r\n this.clearGraphics(true);\r\n assert(false);\r\n return;\r\n }\r\n\r\n this._projectionMatrix = frustumMap.transform0.clone();\r\n\r\n const worldToNpc = postProjectionMatrixNpc.multiplyMatrixMatrix(this._projectionMatrix);\r\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))!;\r\n const npcToWorld = worldToNpc.createInverse();\r\n if (undefined === npcToWorld) {\r\n this.clearGraphics(true);\r\n return;\r\n }\r\n\r\n const worldToNpcMap = Map4d.createRefs(worldToNpc, npcToWorld);\r\n this._worldToViewMap = npcToView.multiplyMapMap(worldToNpcMap);\r\n }\r\n\r\n this._target.uniforms.shadow.update();\r\n this.notifyGraphicsChanged();\r\n }\r\n\r\n public draw(target: Target) {\r\n assert(this.isEnabled);\r\n\r\n if (this.isReady || 0 === this._graphics.length)\r\n return;\r\n\r\n const bundle = this.getBundle(target);\r\n if (undefined === bundle)\r\n return;\r\n\r\n this._isDrawing = true;\r\n\r\n const prevState = System.instance.currentRenderState.clone();\r\n const gl = System.instance.context;\r\n gl.viewport(0, 0, shadowMapWidth, shadowMapHeight);\r\n\r\n // NB: textures and materials are needed because their transparencies affect whether or not a surface casts shadows\r\n const viewFlags = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n System.instance.applyRenderState(this._renderState);\r\n const prevPlan = target.plan;\r\n\r\n target.changeFrustum(this._shadowFrustum, this._shadowFrustum.getFraction(), true);\r\n target.uniforms.branch.changeRenderPlan(viewFlags, target.plan.is3d, target.plan.hline);\r\n\r\n const renderCommands = bundle.renderCommands;\r\n renderCommands.reset(target, target.uniforms.branch.stack, this._batchState);\r\n renderCommands.addGraphics(this._graphics);\r\n\r\n System.instance.frameBufferStack.execute(bundle.fbo, true, false, () => {\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\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.\r\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.\r\n });\r\n\r\n // copy depth buffer to EVSM shadow buffer and average down for AA effect\r\n gl.viewport(0, 0, evsmWidth, evsmHeight);\r\n System.instance.frameBufferStack.execute(bundle.fboSM, true, false, () => {\r\n System.instance.applyRenderState(this._noZRenderState);\r\n const params = getDrawParams(target, bundle.evsmGeom);\r\n target.techniques.draw(params);\r\n });\r\n\r\n // mipmap resulting EVSM texture and set filtering options\r\n System.instance.activateTexture2d(TextureUnit.ShadowMap, bundle.shadowMapTexture.texture.getHandle());\r\n gl.generateMipmap(gl.TEXTURE_2D);\r\n const fullFloat = System.instance.capabilities.maxRenderType === RenderType.TextureFloat;\r\n if (fullFloat && System.instance.capabilities.supportsTextureFloatLinear || !fullFloat && System.instance.capabilities.supportsTextureHalfFloatLinear) {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n }\r\n\r\n System.instance.setMaxAnisotropy(undefined);\r\n // target.recordPerformanceMetric(\"Compute EVSM\");\r\n\r\n this._batchState.reset(); // Reset the batch Ids...\r\n target.changeRenderPlan(prevPlan);\r\n\r\n System.instance.applyRenderState(prevState);\r\n System.instance.context.viewport(0, 0, target.viewRect.width, target.viewRect.height); // Restore viewport\r\n this.clearGraphics(false);\r\n this._isDrawing = false;\r\n this._isReady = true;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SolarShadowMap.js","sourceRoot":"","sources":["../../../../src/render/webgl/SolarShadowMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { ClipUtilities, ConvexClipPlaneSet, Geometry, GrowableXYZArray, Map4d, Matrix3d, Matrix4d, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n Frustum, FrustumPlanes, RenderMode, RenderTexture, SolarShadowSettings, TextureTransparency, ViewFlags,\r\n} from \"@itwin/core-common\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { Tile, TileDrawArgs, TileTreeReference, TileVisibility } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { EVSMGeometry } from \"./CachedGeometry\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass, TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { Texture, TextureHandle } from \"./Texture\";\r\n\r\ntype ProcessTiles = (tiles: Tile[]) => void;\r\n\r\nfunction createDrawArgs(sceneContext: SceneContext, solarShadowMap: SolarShadowMap, tree: TileTreeReference, frustumPlanes: FrustumPlanes, processTiles: ProcessTiles): TileDrawArgs | undefined {\r\n class SolarShadowMapDrawArgs extends TileDrawArgs {\r\n private _useViewportMap?: boolean;\r\n private readonly _processTiles: ProcessTiles;\r\n\r\n constructor(private _mapFrustumPlanes: FrustumPlanes, private _shadowMap: SolarShadowMap, args: TileDrawArgs, process: ProcessTiles) {\r\n super(args);\r\n this._processTiles = process;\r\n }\r\n\r\n // The solar shadow projection is parallel - which can cause excessive tile selection if it is along an axis of an unbounded tile\r\n // tree such as the OSM buildings. Rev limit the selection here.\r\n public override get maxRealityTreeSelectionCount(): undefined | number { return 500; }\r\n\r\n public override processSelectedTiles(tiles: Tile[]): void {\r\n this._processTiles(tiles);\r\n }\r\n\r\n public override get frustumPlanes(): FrustumPlanes {\r\n if (true === this._useViewportMap)\r\n return super.frustumPlanes;\r\n else\r\n return this._mapFrustumPlanes;\r\n }\r\n\r\n public override get worldToViewMap(): Map4d {\r\n if (true === this._useViewportMap)\r\n return super.worldToViewMap;\r\n else\r\n return this._shadowMap.worldToViewMap;\r\n }\r\n\r\n public override drawGraphics(): void {\r\n const graphics = this.produceGraphics();\r\n if (graphics)\r\n this._shadowMap.addGraphic(graphics);\r\n }\r\n\r\n public override getPixelSize(tile: Tile): number {\r\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\r\n // - otherwise artifacts like shadow acne may result.\r\n // For tiles that are NOT part of the scene, size them based on the shadow frustum, not the viewport frustum\r\n // - otherwise excessive numbers of excessively detailed may be requested for the shadow map.\r\n if (undefined === this._useViewportMap) {\r\n this._useViewportMap = true;\r\n const vis = tile.computeVisibility(this);\r\n this._useViewportMap = TileVisibility.OutsideFrustum !== vis;\r\n }\r\n\r\n const size = super.getPixelSize(tile);\r\n this._useViewportMap = undefined;\r\n return size;\r\n }\r\n\r\n public static create(context: SceneContext, shadowMap: SolarShadowMap, tileTree: TileTreeReference, planes: FrustumPlanes, process: ProcessTiles) {\r\n const args = tileTree.createDrawArgs(context);\r\n return undefined !== args ? new SolarShadowMapDrawArgs(planes, shadowMap, args, process) : undefined;\r\n }\r\n }\r\n\r\n return SolarShadowMapDrawArgs.create(sceneContext, solarShadowMap, tree, frustumPlanes, processTiles);\r\n}\r\n\r\nconst shadowMapWidth = 4096; // size of original depth buffer map\r\nconst shadowMapHeight = shadowMapWidth; // TBD - Adjust for aspect ratio.\r\nconst evsmWidth = shadowMapWidth / 2; // EVSM buffer is 1/2 size each direction\r\nconst evsmHeight = shadowMapHeight / 2;\r\nconst postProjectionMatrixNpc = Matrix4d.createRowValues(/* Row 1 */ 0, 1, 0, 0, /* Row 1 */ 0, 0, 1, 0, /* Row 3 */ 1, 0, 0, 0, /* Row 4 */ 0, 0, 0, 1);\r\n\r\n// Bundles up the disposable, create-once-and-reuse members of a SolarShadowMap.\r\nclass Bundle implements WebGLDisposable {\r\n private constructor(\r\n public readonly depthTexture: Texture,\r\n public readonly shadowMapTexture: Texture,\r\n public readonly fbo: FrameBuffer,\r\n public readonly fboSM: FrameBuffer,\r\n public readonly evsmGeom: EVSMGeometry,\r\n public readonly renderCommands: RenderCommands) {\r\n }\r\n\r\n public static create(target: Target, stack: BranchStack, batch: BatchState): Bundle | undefined {\r\n const depthTextureHandle = System.instance.createDepthBuffer(shadowMapWidth, shadowMapHeight) as TextureHandle;\r\n if (undefined === depthTextureHandle)\r\n return undefined;\r\n\r\n let pixelDataType = GL.Texture.DataType.Float;\r\n switch (System.instance.capabilities.maxRenderType) {\r\n case RenderType.TextureFloat:\r\n break;\r\n case RenderType.TextureHalfFloat:\r\n if (System.instance.capabilities.isWebGL2) {\r\n pixelDataType = (System.instance.context as WebGL2RenderingContext).HALF_FLOAT;\r\n break;\r\n } else {\r\n const exthf = System.instance.capabilities.queryExtensionObject<OES_texture_half_float>(\"OES_texture_half_float\");\r\n if (undefined !== exthf) {\r\n pixelDataType = exthf.HALF_FLOAT_OES;\r\n break;\r\n }\r\n }\r\n /* falls through */\r\n default:\r\n return undefined;\r\n }\r\n\r\n const colorTextures: TextureHandle[] = [];\r\n\r\n // Check if the system can render to a depth texture without a renderable color texture bound as well.\r\n // If it cannot, add a renderable color texture to the framebuffer.\r\n // MacOS Safari exhibited this behavior, which necessitated this code path.\r\n if (!System.instance.capabilities.canRenderDepthWithoutColor) {\r\n const colTex = TextureHandle.createForAttachment(shadowMapWidth, shadowMapHeight, GL.Texture.Format.Rgba, pixelDataType);\r\n if (undefined === colTex)\r\n return undefined;\r\n colorTextures.push(colTex);\r\n }\r\n\r\n const fbo = FrameBuffer.create(colorTextures, depthTextureHandle);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n // shadowMap texture is 1/4 size the depth texture (and averaged down when converting)\r\n const shadowMapTextureHandle = TextureHandle.createForAttachment(evsmWidth, evsmHeight, GL.Texture.Format.Rgba, pixelDataType);\r\n if (undefined === shadowMapTextureHandle)\r\n return undefined;\r\n\r\n const fboSM = FrameBuffer.create([shadowMapTextureHandle]);\r\n if (undefined === fboSM)\r\n return undefined;\r\n\r\n const depthTexture = new Texture({ ownership: \"external\", type: RenderTexture.Type.TileSection, handle: depthTextureHandle, transparency: TextureTransparency.Opaque });\r\n const evsmGeom = EVSMGeometry.createGeometry(depthTexture.texture.getHandle()!, shadowMapWidth, shadowMapHeight);\r\n if (undefined === evsmGeom)\r\n return undefined;\r\n\r\n const shadowMapTexture = new Texture({ type: RenderTexture.Type.Normal, ownership: \"external\", handle: shadowMapTextureHandle, transparency: TextureTransparency.Opaque });\r\n const renderCommands = new RenderCommands(target, stack, batch);\r\n return new Bundle(depthTexture, shadowMapTexture, fbo, fboSM, evsmGeom, renderCommands);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this.depthTexture.isDisposed\r\n && this.shadowMapTexture.isDisposed\r\n && this.fbo.isDisposed\r\n && this.fboSM.isDisposed\r\n && this.evsmGeom.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.depthTexture);\r\n dispose(this.shadowMapTexture);\r\n dispose(this.fbo);\r\n dispose(this.fboSM);\r\n dispose(this.evsmGeom);\r\n }\r\n}\r\n\r\n/** Describes the set of parameters which, when they change, require us to recreate the shadow map. */\r\nclass ShadowMapParams {\r\n public readonly direction = new Vector3d();\r\n public readonly viewFrustum = new Frustum();\r\n public settings: SolarShadowSettings;\r\n\r\n public constructor(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings) {\r\n direction.clone(this.direction);\r\n this.viewFrustum.setFrom(viewFrustum);\r\n this.settings = settings;\r\n }\r\n\r\n public update(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings): void {\r\n this.settings = settings;\r\n this.viewFrustum.setFrom(viewFrustum);\r\n direction.clone(this.direction);\r\n }\r\n}\r\n\r\nconst defaultSunDirection = Vector3d.create(-1, -1, -1).normalize()!;\r\nconst scratchFrustum = new Frustum();\r\nconst scratchFrustumPlanes = FrustumPlanes.createEmpty();\r\n\r\nexport class SolarShadowMap implements RenderMemory.Consumer, WebGLDisposable {\r\n private _bundle?: Bundle;\r\n private _projectionMatrix = Matrix4d.createIdentity();\r\n private _graphics: RenderGraphic[] = [];\r\n private _shadowFrustum = new Frustum();\r\n private _isReady = false;\r\n private _isDrawing = false;\r\n private _enabled = false;\r\n private _params?: ShadowMapParams;\r\n private readonly _scratchRange = Range3d.createNull();\r\n private readonly _scratchTransform = Transform.createIdentity();\r\n\r\n private readonly _scratchViewFlags = new ViewFlags();\r\n private readonly _renderState: RenderState;\r\n private readonly _noZRenderState: RenderState;\r\n private readonly _batchState: BatchState;\r\n private _worldToViewMap = Map4d.createIdentity();\r\n private readonly _target: Target;\r\n\r\n // This exists chiefly for debugging. See ToggleShadowMapTilesTool.\r\n public onGraphicsChanged?: (graphics: RenderGraphic[]) => void;\r\n\r\n private getBundle(target: Target): Bundle | undefined {\r\n if (undefined === this._bundle) {\r\n this._bundle = Bundle.create(target, target.uniforms.branch.stack, this._batchState);\r\n assert(undefined !== this._bundle);\r\n }\r\n\r\n return this._bundle;\r\n }\r\n\r\n public get isReady() { return this._isReady; }\r\n public get isDrawing() { return this._isDrawing; }\r\n public get isEnabled() { return this._enabled; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n public get depthTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.depthTexture : undefined; }\r\n public get shadowMapTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.shadowMapTexture : undefined; }\r\n public get settings(): SolarShadowSettings | undefined { return undefined !== this._params ? this._params.settings : undefined; }\r\n public get direction(): Vector3d | undefined { return undefined !== this._params ? this._params.direction : undefined; }\r\n public get frustum(): Frustum { return this._shadowFrustum; }\r\n public get worldToViewMap(): Map4d { return this._worldToViewMap; }\r\n public addGraphic(graphic: RenderGraphic) { this._graphics.push(graphic); }\r\n\r\n public constructor(target: Target) {\r\n this._target = target;\r\n this._renderState = new RenderState();\r\n this._renderState.flags.depthMask = true;\r\n this._renderState.flags.blend = false;\r\n this._renderState.flags.depthTest = true;\r\n\r\n this._noZRenderState = new RenderState();\r\n this._noZRenderState.flags.depthMask = false;\r\n\r\n this._batchState = new BatchState(target.uniforms.branch.stack);\r\n }\r\n\r\n public disable() {\r\n this._enabled = this._isReady = false;\r\n this._bundle = dispose(this._bundle);\r\n this.clearGraphics(true);\r\n this._target.uniforms.shadow.update();\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n const bundle = this._bundle;\r\n if (undefined !== bundle)\r\n stats.addShadowMap(bundle.depthTexture.bytesUsed + bundle.shadowMapTexture.bytesUsed);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._bundle && 0 === this._graphics.length; }\r\n\r\n public dispose() {\r\n this._bundle = dispose(this._bundle);\r\n this.clearGraphics(true);\r\n }\r\n\r\n private clearGraphics(notify: boolean) {\r\n for (const graphic of this._graphics)\r\n graphic.dispose();\r\n\r\n this._graphics.length = 0;\r\n if (notify)\r\n this.notifyGraphicsChanged();\r\n }\r\n\r\n private notifyGraphicsChanged(): void {\r\n if (undefined !== this.onGraphicsChanged)\r\n this.onGraphicsChanged(this._graphics);\r\n }\r\n\r\n public update(context: SceneContext | undefined) {\r\n this._isReady = false;\r\n this.clearGraphics(false);\r\n\r\n if (undefined === context || !context.viewport.view.isSpatialView()) {\r\n this.disable();\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n\r\n const view = context.viewport.view;\r\n const style = view.getDisplayStyle3d();\r\n const sunDirection = style.sunDirection ?? defaultSunDirection;\r\n\r\n const minimumHorizonDirection = -.01;\r\n if (sunDirection.z > minimumHorizonDirection) {\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n\r\n this._enabled = true;\r\n const viewFrustum = context.viewingSpace.getFrustum();\r\n const settings = style.settings.solarShadows;\r\n if (undefined === this._params)\r\n this._params = new ShadowMapParams(viewFrustum, sunDirection, settings);\r\n else\r\n this._params.update(viewFrustum, sunDirection, settings);\r\n\r\n const iModel = view.iModel;\r\n\r\n const worldToMapTransform = Transform.createRefs(Point3d.createZero(), Matrix3d.createRigidHeadsUp(this._params.direction.negate()).inverse()!);\r\n const worldToMap = Matrix4d.createTransform(worldToMapTransform);\r\n const mapToWorld = worldToMap.createInverse()!;\r\n\r\n // Start with entire project.\r\n const shadowRange = worldToMapTransform.multiplyRange(iModel.projectExtents);\r\n\r\n // Limit the map to only displayed models.\r\n const viewTileRange = Range3d.createNull();\r\n view.forEachTileTreeRef((ref) => {\r\n if (ref.castsShadows) {\r\n if (ref.isGlobal) {\r\n // A shadow-casting tile tree that spans the globe. Limit its range to the viewed extents.\r\n for (const p3 of viewFrustum.points) {\r\n const p4 = worldToMap.multiplyPoint3d(p3, 1);\r\n if (p4.w > 0.0001)\r\n viewTileRange.extendXYZW(p4.x, p4.y, p4.z, p4.w);\r\n else\r\n viewTileRange.high.z = Math.max(1.0, viewTileRange.high.z); // behind eye plane.\r\n }\r\n } else {\r\n ref.accumulateTransformedRange(viewTileRange, worldToMap, undefined);\r\n }\r\n }\r\n });\r\n\r\n if (!viewTileRange.isNull)\r\n viewTileRange.clone(shadowRange);\r\n\r\n // Expand shadow range to include both the shadowers and shadowed portion of background map.\r\n scratchFrustum.initFromRange(shadowRange);\r\n mapToWorld.multiplyPoint3dArrayQuietNormalize(scratchFrustum.points); // This frustum represents the shadwowing geometry. Intersect it with background geometry and expand the range depth to include that intersection.\r\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\r\n if (undefined !== backgroundMapGeometry) {\r\n const backgroundDepthRange = backgroundMapGeometry.getFrustumIntersectionDepthRange(this._shadowFrustum, iModel.projectExtents);\r\n if (!backgroundDepthRange.isNull)\r\n shadowRange.low.z = Math.min(shadowRange.low.z, backgroundDepthRange.low);\r\n }\r\n\r\n this._params.viewFrustum.transformBy(worldToMapTransform, scratchFrustum);\r\n scratchFrustumPlanes.init(scratchFrustum);\r\n\r\n const viewIntersectShadowRange = Range3d.createNull();\r\n const viewClipPlanes = ConvexClipPlaneSet.createPlanes(scratchFrustumPlanes.planes);\r\n ClipUtilities.announceLoopsOfConvexClipPlaneSetIntersectRange(viewClipPlanes, shadowRange, (points: GrowableXYZArray) => {\r\n for (const point of points.getPoint3dArray())\r\n viewIntersectShadowRange.extendPoint(point);\r\n });\r\n if (viewIntersectShadowRange.isNull) {\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n viewIntersectShadowRange.high.z = shadowRange.high.z; // We need to include shadowing geometry that may be outside view (along the solar axis).\r\n\r\n this._shadowFrustum.initFromRange(viewIntersectShadowRange);\r\n mapToWorld.multiplyPoint3dArrayQuietNormalize(this._shadowFrustum.points);\r\n\r\n const tileRange = Range3d.createNull();\r\n scratchFrustumPlanes.init(this._shadowFrustum);\r\n view.forEachTileTreeRef(((ref) => {\r\n if (!ref.castsShadows)\r\n return;\r\n\r\n const drawArgs = createDrawArgs(context, this, ref, scratchFrustumPlanes, (tiles: Tile[]) => {\r\n for (const tile of tiles)\r\n tileRange.extendRange(tileToMapTransform.multiplyRange(tile.range, this._scratchRange));\r\n });\r\n\r\n if (undefined === drawArgs)\r\n return;\r\n\r\n const tileToMapTransform = worldToMapTransform.multiplyTransformTransform(drawArgs.location, this._scratchTransform);\r\n drawArgs.tree.draw(drawArgs);\r\n }));\r\n\r\n if (tileRange.isNull) {\r\n this.clearGraphics(true);\r\n } else if (this._graphics.length > 0) {\r\n // Avoid an uninvertible matrix on empty range...\r\n if (Geometry.isAlmostEqualNumber(shadowRange.low.x, shadowRange.high.x) ||\r\n Geometry.isAlmostEqualNumber(shadowRange.low.y, shadowRange.high.y) ||\r\n Geometry.isAlmostEqualNumber(shadowRange.low.z, shadowRange.high.z)) {\r\n this.clearGraphics(true);\r\n return;\r\n }\r\n\r\n const frustumMap = this._shadowFrustum.toMap4d();\r\n if (undefined === frustumMap) {\r\n this.clearGraphics(true);\r\n assert(false);\r\n return;\r\n }\r\n\r\n this._projectionMatrix = frustumMap.transform0.clone();\r\n\r\n const worldToNpc = postProjectionMatrixNpc.multiplyMatrixMatrix(this._projectionMatrix);\r\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))!;\r\n const npcToWorld = worldToNpc.createInverse();\r\n if (undefined === npcToWorld) {\r\n this.clearGraphics(true);\r\n return;\r\n }\r\n\r\n const worldToNpcMap = Map4d.createRefs(worldToNpc, npcToWorld);\r\n this._worldToViewMap = npcToView.multiplyMapMap(worldToNpcMap);\r\n }\r\n\r\n this._target.uniforms.shadow.update();\r\n this.notifyGraphicsChanged();\r\n }\r\n\r\n public draw(target: Target) {\r\n assert(this.isEnabled);\r\n\r\n if (this.isReady || 0 === this._graphics.length)\r\n return;\r\n\r\n const bundle = this.getBundle(target);\r\n if (undefined === bundle)\r\n return;\r\n\r\n this._isDrawing = true;\r\n\r\n const prevState = System.instance.currentRenderState.clone();\r\n const gl = System.instance.context;\r\n gl.viewport(0, 0, shadowMapWidth, shadowMapHeight);\r\n\r\n // NB: textures and materials are needed because their transparencies affect whether or not a surface casts shadows\r\n const viewFlags = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n System.instance.applyRenderState(this._renderState);\r\n const prevPlan = target.plan;\r\n\r\n target.changeFrustum(this._shadowFrustum, this._shadowFrustum.getFraction(), true);\r\n target.uniforms.branch.changeRenderPlan(viewFlags, target.plan.is3d, target.plan.hline);\r\n\r\n const renderCommands = bundle.renderCommands;\r\n renderCommands.reset(target, target.uniforms.branch.stack, this._batchState);\r\n renderCommands.addGraphics(this._graphics);\r\n\r\n System.instance.frameBufferStack.execute(bundle.fbo, true, false, () => {\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\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.\r\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.\r\n });\r\n\r\n // copy depth buffer to EVSM shadow buffer and average down for AA effect\r\n gl.viewport(0, 0, evsmWidth, evsmHeight);\r\n System.instance.frameBufferStack.execute(bundle.fboSM, true, false, () => {\r\n System.instance.applyRenderState(this._noZRenderState);\r\n const params = getDrawParams(target, bundle.evsmGeom);\r\n target.techniques.draw(params);\r\n });\r\n\r\n // mipmap resulting EVSM texture and set filtering options\r\n System.instance.activateTexture2d(TextureUnit.ShadowMap, bundle.shadowMapTexture.texture.getHandle());\r\n gl.generateMipmap(gl.TEXTURE_2D);\r\n const fullFloat = System.instance.capabilities.maxRenderType === RenderType.TextureFloat;\r\n if (fullFloat && System.instance.capabilities.supportsTextureFloatLinear || !fullFloat && System.instance.capabilities.supportsTextureHalfFloatLinear) {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n }\r\n\r\n System.instance.setMaxAnisotropy(undefined);\r\n // target.recordPerformanceMetric(\"Compute EVSM\");\r\n\r\n this._batchState.reset(); // Reset the batch Ids...\r\n target.changeRenderPlan(prevPlan);\r\n\r\n System.instance.applyRenderState(prevState);\r\n System.instance.context.viewport(0, 0, target.viewRect.width, target.viewRect.height); // Restore viewport\r\n this.clearGraphics(false);\r\n this._isDrawing = false;\r\n this._isReady = true;\r\n }\r\n}\r\n"]}
|
|
@@ -204,12 +204,12 @@ class SurfaceGeometry extends MeshGeometry_1.MeshGeometry {
|
|
|
204
204
|
// NB: We need this for opaque pass due to SolidFill (must compute transparency, discard below threshold, render opaque at or above threshold)
|
|
205
205
|
case 2 /* OpaqueLinear */:
|
|
206
206
|
case 3 /* OpaquePlanar */:
|
|
207
|
-
case
|
|
208
|
-
case
|
|
209
|
-
case
|
|
207
|
+
case 5 /* OpaqueGeneral */:
|
|
208
|
+
case 8 /* Translucent */:
|
|
209
|
+
case 12 /* WorldOverlay */:
|
|
210
210
|
case 1 /* OpaqueLayers */:
|
|
211
|
-
case
|
|
212
|
-
case
|
|
211
|
+
case 7 /* TranslucentLayers */:
|
|
212
|
+
case 11 /* OverlayLayers */: {
|
|
213
213
|
const mode = vf.renderMode;
|
|
214
214
|
if (!this.isGlyph && (core_common_1.RenderMode.HiddenLine === mode || core_common_1.RenderMode.SolidFill === mode)) {
|
|
215
215
|
flags[4 /* TransparencyThreshold */] = 1;
|
|
@@ -471,7 +471,7 @@ class Target extends RenderTarget_1.RenderTarget {
|
|
|
471
471
|
get frameStatsCollector() { return this._frameStatsCollector; }
|
|
472
472
|
assignFrameStatsCollector(collector) { this._frameStatsCollector = collector; }
|
|
473
473
|
paintScene(sceneMilSecElapsed) {
|
|
474
|
-
var _a;
|
|
474
|
+
var _a, _b;
|
|
475
475
|
if (!this._dcAssigned)
|
|
476
476
|
return;
|
|
477
477
|
this._frameStatsCollector.beginTime("totalFrameTime");
|
|
@@ -486,7 +486,7 @@ class Target extends RenderTarget_1.RenderTarget {
|
|
|
486
486
|
// Set this to true to visualize the output of readPixels()...useful for debugging pick.
|
|
487
487
|
if (this.drawForReadPixels) {
|
|
488
488
|
this.beginReadPixels(Pixel_1.Pixel.Selector.Feature);
|
|
489
|
-
this.compositor.drawForReadPixels(this._renderCommands, this.graphics.overlays, (_a = this.graphics.decorations) === null || _a === void 0 ? void 0 : _a.worldOverlay);
|
|
489
|
+
this.compositor.drawForReadPixels(this._renderCommands, this.graphics.overlays, (_a = this.graphics.decorations) === null || _a === void 0 ? void 0 : _a.worldOverlay, (_b = this.graphics.decorations) === null || _b === void 0 ? void 0 : _b.viewOverlay);
|
|
490
490
|
this.endReadPixels();
|
|
491
491
|
}
|
|
492
492
|
else {
|
|
@@ -515,10 +515,10 @@ class Target extends RenderTarget_1.RenderTarget {
|
|
|
515
515
|
this._frameStatsCollector.beginTime("overlaysTime");
|
|
516
516
|
this.beginPerfMetricRecord("Overlay Draws");
|
|
517
517
|
this.beginPerfMetricRecord("World Overlays");
|
|
518
|
-
this.drawPass(
|
|
518
|
+
this.drawPass(12 /* WorldOverlay */);
|
|
519
519
|
this.endPerfMetricRecord();
|
|
520
520
|
this.beginPerfMetricRecord("View Overlays");
|
|
521
|
-
this.drawPass(
|
|
521
|
+
this.drawPass(13 /* ViewOverlay */);
|
|
522
522
|
this.endPerfMetricRecord();
|
|
523
523
|
this.endPerfMetricRecord(); // End "Overlay Draws"
|
|
524
524
|
this._frameStatsCollector.endTime("overlaysTime");
|
|
@@ -544,7 +544,7 @@ class Target extends RenderTarget_1.RenderTarget {
|
|
|
544
544
|
}
|
|
545
545
|
getRenderState(pass) {
|
|
546
546
|
// the other passes are handled by SceneCompositor
|
|
547
|
-
(0, core_bentley_1.assert)(
|
|
547
|
+
(0, core_bentley_1.assert)(13 /* ViewOverlay */ === pass || 12 /* WorldOverlay */ === pass);
|
|
548
548
|
return this._overlayRenderState;
|
|
549
549
|
}
|
|
550
550
|
assignDC() {
|
|
@@ -672,7 +672,7 @@ class Target extends RenderTarget_1.RenderTarget {
|
|
|
672
672
|
this._isReadPixelsInProgress = false;
|
|
673
673
|
}
|
|
674
674
|
readPixelsFromFbo(rect, selector) {
|
|
675
|
-
var _a;
|
|
675
|
+
var _a, _b;
|
|
676
676
|
// Create a culling frustum based on the input rect. We can't do this if a screen-space effect is going to move pixels around.
|
|
677
677
|
let rectFrust;
|
|
678
678
|
if (!this.renderSystem.screenSpaceEffects.shouldApply(this)) {
|
|
@@ -703,7 +703,7 @@ class Target extends RenderTarget_1.RenderTarget {
|
|
|
703
703
|
}
|
|
704
704
|
this.beginReadPixels(selector, rectFrust);
|
|
705
705
|
// Draw the scene
|
|
706
|
-
this.compositor.drawForReadPixels(this._renderCommands, this.graphics.overlays, (_a = this.graphics.decorations) === null || _a === void 0 ? void 0 : _a.worldOverlay);
|
|
706
|
+
this.compositor.drawForReadPixels(this._renderCommands, this.graphics.overlays, (_a = this.graphics.decorations) === null || _a === void 0 ? void 0 : _a.worldOverlay, (_b = this.graphics.decorations) === null || _b === void 0 ? void 0 : _b.viewOverlay);
|
|
707
707
|
if (this.performanceMetrics && !this.performanceMetrics.gatherCurPerformanceMetrics) { // Only collect readPixels data if in disp-perf-test-app
|
|
708
708
|
this.performanceMetrics.endOperation(); // End the 'CPU Total Time' operation
|
|
709
709
|
if (this.performanceMetrics.gatherGlFinish && !this.renderSystem.isGLTimerSupported) {
|