@itwin/core-frontend 4.0.0-dev.23 → 4.0.0-dev.28
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 +43 -36
- package/lib/cjs/AccuDraw.js +1 -1
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.js +3 -3
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +9 -11
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/DisplayStyleState.js +8 -12
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/DrawingViewState.js +4 -6
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/EnvironmentDecorations.js +2 -3
- package/lib/cjs/EnvironmentDecorations.js.map +1 -1
- package/lib/cjs/FlashSettings.js +3 -4
- package/lib/cjs/FlashSettings.js.map +1 -1
- package/lib/cjs/GeoServices.js +7 -9
- package/lib/cjs/GeoServices.js.map +1 -1
- package/lib/cjs/IModelApp.js +19 -21
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.js +1 -1
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.js +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +3 -4
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/ModelState.js +2 -3
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.js +4 -7
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NoRenderApp.js +1 -2
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/PlanarClipMaskState.js +1 -1
- package/lib/cjs/PlanarClipMaskState.js.map +1 -1
- package/lib/cjs/RealityDataSourceContextShareImpl.js +2 -4
- package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
- package/lib/cjs/SheetViewState.js +15 -23
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/Tiles.js +2 -2
- 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/ViewCreator2d.js +4 -5
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewCreator3d.js +5 -5
- package/lib/cjs/ViewCreator3d.js.map +1 -1
- package/lib/cjs/ViewState.js +17 -24
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.js +22 -32
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/extension/ExtensionImpl.js +1 -1
- package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +7 -9
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/render/FeatureSymbology.js +1 -2
- package/lib/cjs/render/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/GraphicBuilder.js +7 -9
- package/lib/cjs/render/GraphicBuilder.js.map +1 -1
- package/lib/cjs/render/MockRender.js +1 -2
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/ParticleCollectionBuilder.js +2 -3
- package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/cjs/render/RealityMeshParams.js +7 -10
- package/lib/cjs/render/RealityMeshParams.js.map +1 -1
- package/lib/cjs/render/RenderPlan.js +1 -1
- package/lib/cjs/render/RenderPlan.js.map +1 -1
- package/lib/cjs/render/RenderSystem.js +1 -2
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/VisibleFeature.js +2 -4
- package/lib/cjs/render/VisibleFeature.js.map +1 -1
- package/lib/cjs/render/primitives/AuxChannelTable.js +6 -9
- package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.js +6 -7
- package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
- package/lib/cjs/render/primitives/PolylineParams.js +2 -3
- package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
- package/lib/cjs/render/primitives/VertexKey.js +1 -1
- package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.js +1 -1
- package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTableSplitter.js +6 -8
- package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +9 -11
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +3 -5
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +2 -3
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +9 -10
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/EDL.js +17 -21
- package/lib/cjs/render/webgl/EDL.js.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.js +2 -2
- package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +3 -5
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +1 -1
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +2 -3
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/Mesh.js +7 -10
- package/lib/cjs/render/webgl/Mesh.js.map +1 -1
- package/lib/cjs/render/webgl/MeshData.js +1 -2
- package/lib/cjs/render/webgl/MeshData.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +10 -15
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +5 -8
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RealityModelUniforms.js +3 -4
- package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +7 -8
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +7 -9
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +1 -2
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +1 -2
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/System.js +12 -16
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.js +9 -14
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/TargetGraphics.js +1 -2
- package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/cjs/render/webgl/Texture.js +1 -2
- package/lib/cjs/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/render/webgl/ThematicSensors.js +2 -4
- package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
- package/lib/cjs/render/webgl/VisibleTileFeatures.js +1 -2
- package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.js +6 -9
- package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +1 -2
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Instancing.js +4 -5
- package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +2 -4
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +1 -2
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.js +1 -2
- package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.js +3 -3
- package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/tile/GltfReader.js +61 -75
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/IModelTile.js +2 -3
- package/lib/cjs/tile/IModelTile.js.map +1 -1
- package/lib/cjs/tile/IModelTileRequestChannels.js +6 -11
- package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
- package/lib/cjs/tile/IModelTileTree.js +5 -9
- package/lib/cjs/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +13 -17
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.js +2 -2
- package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/tile/PntsReader.js +4 -5
- package/lib/cjs/tile/PntsReader.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +22 -32
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +12 -19
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTile.js +3 -5
- package/lib/cjs/tile/RealityTile.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/ThreeDTileFormatInterpreter.js +3 -5
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/cjs/tile/Tile.js +1 -1
- package/lib/cjs/tile/Tile.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +22 -27
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +3 -6
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannels.js +1 -1
- package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
- package/lib/cjs/tile/TileTree.js +2 -3
- package/lib/cjs/tile/TileTree.js.map +1 -1
- package/lib/cjs/tile/TiledGraphicsProvider.js +1 -1
- package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +5 -6
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +6 -8
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -8
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapCartoRectangle.js +1 -1
- package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +5 -6
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +11 -14
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -3
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +6 -8
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +13 -18
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +6 -7
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +4 -5
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +17 -25
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/ClipViewTool.js +1 -1
- package/lib/cjs/tools/ClipViewTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTool.js +2 -4
- package/lib/cjs/tools/MeasureTool.js.map +1 -1
- package/lib/cjs/tools/PrimitiveTool.js +2 -3
- package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
- package/lib/cjs/tools/SelectTool.js +1 -2
- package/lib/cjs/tools/SelectTool.js.map +1 -1
- package/lib/cjs/tools/Tool.js +2 -3
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +2 -4
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ViewTool.js +3 -3
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuDraw.js +1 -1
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.js +3 -3
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/BriefcaseConnection.js +9 -11
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/DisplayStyleState.js +8 -12
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/DrawingViewState.js +4 -6
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/EnvironmentDecorations.js +2 -3
- package/lib/esm/EnvironmentDecorations.js.map +1 -1
- package/lib/esm/FlashSettings.js +3 -4
- package/lib/esm/FlashSettings.js.map +1 -1
- package/lib/esm/GeoServices.js +7 -9
- package/lib/esm/GeoServices.js.map +1 -1
- package/lib/esm/IModelApp.js +19 -21
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.js +1 -1
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.js +1 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +3 -4
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/ModelState.js +2 -3
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.js +4 -7
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NoRenderApp.js +1 -2
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/PlanarClipMaskState.js +1 -1
- package/lib/esm/PlanarClipMaskState.js.map +1 -1
- package/lib/esm/RealityDataSourceContextShareImpl.js +2 -4
- package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
- package/lib/esm/SheetViewState.js +15 -23
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/Tiles.js +2 -2
- 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/ViewCreator2d.js +4 -5
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewCreator3d.js +5 -5
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/ViewState.js +17 -24
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.js +22 -32
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/extension/ExtensionImpl.js +1 -1
- package/lib/esm/extension/ExtensionImpl.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +7 -9
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/render/FeatureSymbology.js +1 -2
- package/lib/esm/render/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/GraphicBuilder.js +7 -9
- package/lib/esm/render/GraphicBuilder.js.map +1 -1
- package/lib/esm/render/MockRender.js +1 -2
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/ParticleCollectionBuilder.js +2 -3
- package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/esm/render/RealityMeshParams.js +7 -10
- package/lib/esm/render/RealityMeshParams.js.map +1 -1
- package/lib/esm/render/RenderPlan.js +1 -1
- package/lib/esm/render/RenderPlan.js.map +1 -1
- package/lib/esm/render/RenderSystem.js +1 -2
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/VisibleFeature.js +2 -4
- package/lib/esm/render/VisibleFeature.js.map +1 -1
- package/lib/esm/render/primitives/AuxChannelTable.js +6 -9
- package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.js +6 -7
- package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
- package/lib/esm/render/primitives/PolylineParams.js +2 -3
- package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
- package/lib/esm/render/primitives/VertexKey.js +1 -1
- package/lib/esm/render/primitives/VertexKey.js.map +1 -1
- package/lib/esm/render/primitives/VertexTable.js +1 -1
- package/lib/esm/render/primitives/VertexTable.js.map +1 -1
- package/lib/esm/render/primitives/VertexTableSplitter.js +6 -8
- package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +9 -11
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +3 -5
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.js +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js +2 -3
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +9 -10
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/EDL.js +17 -21
- package/lib/esm/render/webgl/EDL.js.map +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.js +2 -2
- package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +3 -5
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/IndexedEdgeGeometry.js +1 -1
- package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.js +2 -3
- package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/Mesh.js +7 -10
- package/lib/esm/render/webgl/Mesh.js.map +1 -1
- package/lib/esm/render/webgl/MeshData.js +1 -2
- package/lib/esm/render/webgl/MeshData.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +10 -15
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +5 -8
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RealityModelUniforms.js +3 -4
- package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +7 -8
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +7 -9
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +1 -2
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +1 -2
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js +1 -1
- package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/esm/render/webgl/System.js +12 -16
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.js +9 -14
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/TargetGraphics.js +1 -2
- package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
- package/lib/esm/render/webgl/Texture.js +1 -2
- package/lib/esm/render/webgl/Texture.js.map +1 -1
- package/lib/esm/render/webgl/ThematicSensors.js +2 -4
- package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
- package/lib/esm/render/webgl/VisibleTileFeatures.js +1 -2
- package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Animation.js +6 -9
- package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -2
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Instancing.js +4 -5
- package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +2 -4
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +1 -2
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.js +1 -2
- package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.js +3 -3
- package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
- package/lib/esm/tile/GltfReader.js +61 -75
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/IModelTile.js +2 -3
- package/lib/esm/tile/IModelTile.js.map +1 -1
- package/lib/esm/tile/IModelTileRequestChannels.js +6 -11
- package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
- package/lib/esm/tile/IModelTileTree.js +5 -9
- package/lib/esm/tile/IModelTileTree.js.map +1 -1
- package/lib/esm/tile/ImdlReader.js +13 -17
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.js +2 -2
- package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/tile/PntsReader.js +4 -5
- package/lib/esm/tile/PntsReader.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +22 -32
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +12 -19
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTile.js +3 -5
- package/lib/esm/tile/RealityTile.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/ThreeDTileFormatInterpreter.js +3 -5
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/tile/Tile.js +1 -1
- package/lib/esm/tile/Tile.js.map +1 -1
- package/lib/esm/tile/TileAdmin.js +22 -27
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +3 -6
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileRequestChannels.js +1 -1
- package/lib/esm/tile/TileRequestChannels.js.map +1 -1
- package/lib/esm/tile/TileTree.js +2 -3
- package/lib/esm/tile/TileTree.js.map +1 -1
- package/lib/esm/tile/TiledGraphicsProvider.js +1 -1
- package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +5 -6
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +6 -8
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -8
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapCartoRectangle.js +1 -1
- package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +5 -6
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +11 -14
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -3
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +1 -1
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.js +6 -8
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.js +1 -1
- package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +13 -18
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +6 -7
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +4 -5
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +17 -25
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/ClipViewTool.js +1 -1
- package/lib/esm/tools/ClipViewTool.js.map +1 -1
- package/lib/esm/tools/MeasureTool.js +2 -4
- package/lib/esm/tools/MeasureTool.js.map +1 -1
- package/lib/esm/tools/PrimitiveTool.js +2 -3
- package/lib/esm/tools/PrimitiveTool.js.map +1 -1
- package/lib/esm/tools/SelectTool.js +1 -2
- package/lib/esm/tools/SelectTool.js.map +1 -1
- package/lib/esm/tools/Tool.js +2 -3
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +2 -4
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ViewTool.js +3 -3
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/package.json +18 -18
|
@@ -137,7 +137,7 @@ export class SurfaceGeometry extends MeshGeometry {
|
|
|
137
137
|
if (!hasAlpha) {
|
|
138
138
|
// ###TODO handle TextureTransparency.Mixed; remove Texture.hasTranslucency.
|
|
139
139
|
const tex = this.wantTextures(target, true) ? this.texture : undefined;
|
|
140
|
-
switch (tex
|
|
140
|
+
switch (tex?.transparency) {
|
|
141
141
|
case TextureTransparency.Translucent:
|
|
142
142
|
hasAlpha = true;
|
|
143
143
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SurfaceGeometry.js","sourceRoot":"","sources":["../../../../src/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 { FillFlags, RenderMode, TextureTransparency, ViewFlags } from \"@itwin/core-common\";\nimport { SurfaceType } from \"../primitives/SurfaceParams\";\nimport { VertexIndices } from \"../primitives/VertexTable\";\nimport { RenderMemory } from \"../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\";\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\n public get lutBuffers() { return this._buffers; }\n\n public static create(mesh: MeshData, indices: VertexIndices): SurfaceGeometry | undefined {\n const indexBuffer = BufferHandle.createArrayBuffer(indices.data);\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh) : undefined;\n }\n\n public get isDisposed(): boolean {\n return this._buffers.isDisposed\n && this._indices.isDisposed;\n }\n\n public 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 if (target.wantThematicDisplay && this.supportsThematicDisplay && 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 // 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 if (!hasAlpha) {\n // ###TODO handle TextureTransparency.Mixed; remove Texture.hasTranslucency.\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\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) {\n super(mesh, numIndices);\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 }\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/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 { FillFlags, RenderMode, TextureTransparency, ViewFlags } from \"@itwin/core-common\";\nimport { SurfaceType } from \"../primitives/SurfaceParams\";\nimport { VertexIndices } from \"../primitives/VertexTable\";\nimport { RenderMemory } from \"../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\";\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\n public get lutBuffers() { return this._buffers; }\n\n public static create(mesh: MeshData, indices: VertexIndices): SurfaceGeometry | undefined {\n const indexBuffer = BufferHandle.createArrayBuffer(indices.data);\n return undefined !== indexBuffer ? new SurfaceGeometry(indexBuffer, indices.length, mesh) : undefined;\n }\n\n public get isDisposed(): boolean {\n return this._buffers.isDisposed\n && this._indices.isDisposed;\n }\n\n public 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 if (target.wantThematicDisplay && this.supportsThematicDisplay && 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 // 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 if (!hasAlpha) {\n // ###TODO handle TextureTransparency.Mixed; remove Texture.hasTranslucency.\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\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) {\n super(mesh, numIndices);\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 }\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"]}
|
|
@@ -123,10 +123,9 @@ export class IdMap {
|
|
|
123
123
|
if (tex)
|
|
124
124
|
return tex;
|
|
125
125
|
const handle = TextureHandle.createForElement(key, iModel, params.type, format, (_, data) => {
|
|
126
|
-
var _a;
|
|
127
126
|
if (tex) {
|
|
128
127
|
assert(tex instanceof Texture);
|
|
129
|
-
tex.transparency =
|
|
128
|
+
tex.transparency = data.transparency ?? TextureTransparency.Mixed;
|
|
130
129
|
}
|
|
131
130
|
});
|
|
132
131
|
if (!handle)
|
|
@@ -148,9 +147,8 @@ export class IdMap {
|
|
|
148
147
|
return promise;
|
|
149
148
|
}
|
|
150
149
|
async createTextureFromImageSource(args, key) {
|
|
151
|
-
var _a;
|
|
152
150
|
// JPEGs don't support transparency.
|
|
153
|
-
const transparency = ImageSourceFormat.Jpeg === args.source.format ? TextureTransparency.Opaque : (
|
|
151
|
+
const transparency = ImageSourceFormat.Jpeg === args.source.format ? TextureTransparency.Opaque : (args.transparency ?? TextureTransparency.Mixed);
|
|
154
152
|
try {
|
|
155
153
|
const image = await imageElementFromImageSource(args.source);
|
|
156
154
|
if (!IModelApp.hasRenderSystem)
|
|
@@ -247,7 +245,7 @@ export class System extends RenderSystem {
|
|
|
247
245
|
get maxTexSizeAllow() { return this._capabilities.maxTexSizeAllow; }
|
|
248
246
|
get disjointTimerQuery() {
|
|
249
247
|
const ext = this._capabilities.queryExtensionObject("EXT_disjoint_timer_query_webgl2");
|
|
250
|
-
return ext
|
|
248
|
+
return ext ?? this._capabilities.queryExtensionObject("EXT_disjoint_timer_query");
|
|
251
249
|
}
|
|
252
250
|
get isMobile() { return this._capabilities.isMobile; }
|
|
253
251
|
setDrawBuffers(attachments) {
|
|
@@ -282,14 +280,14 @@ export class System extends RenderSystem {
|
|
|
282
280
|
contextAttributes = { ...contextAttributes, ...inputContextAttributes };
|
|
283
281
|
}
|
|
284
282
|
const context = canvas.getContext("webgl2", contextAttributes);
|
|
285
|
-
return context
|
|
283
|
+
return context ?? undefined;
|
|
286
284
|
}
|
|
287
285
|
static create(optionsIn) {
|
|
288
286
|
const options = undefined !== optionsIn ? optionsIn : {};
|
|
289
287
|
const canvas = document.createElement("canvas");
|
|
290
288
|
if (null === canvas)
|
|
291
289
|
throw new IModelError(BentleyStatus.ERROR, "Failed to obtain HTMLCanvasElement");
|
|
292
|
-
const context = this.createContext(canvas, true, optionsIn
|
|
290
|
+
const context = this.createContext(canvas, true, optionsIn?.contextAttributes);
|
|
293
291
|
if (undefined === context)
|
|
294
292
|
throw new IModelError(BentleyStatus.ERROR, "Failed to obtain WebGL context");
|
|
295
293
|
if (!(context instanceof WebGL2RenderingContext))
|
|
@@ -445,7 +443,6 @@ export class System extends RenderSystem {
|
|
|
445
443
|
return material;
|
|
446
444
|
}
|
|
447
445
|
createRenderMaterial(args) {
|
|
448
|
-
var _a, _b, _c;
|
|
449
446
|
if (args.source) {
|
|
450
447
|
const cached = this.findMaterial(args.source.id, args.source.iModel);
|
|
451
448
|
if (cached)
|
|
@@ -454,11 +451,11 @@ export class System extends RenderSystem {
|
|
|
454
451
|
// eslint-disable-next-line deprecation/deprecation
|
|
455
452
|
const params = new RenderMaterial.Params();
|
|
456
453
|
params.alpha = args.alpha;
|
|
457
|
-
if (undefined !==
|
|
454
|
+
if (undefined !== args.diffuse?.weight)
|
|
458
455
|
params.diffuse = args.diffuse.weight;
|
|
459
|
-
params.diffuseColor = getMaterialColor(
|
|
456
|
+
params.diffuseColor = getMaterialColor(args.diffuse?.color);
|
|
460
457
|
if (args.specular) {
|
|
461
|
-
params.specularColor = getMaterialColor(
|
|
458
|
+
params.specularColor = getMaterialColor(args.specular?.color);
|
|
462
459
|
if (undefined !== args.specular.weight)
|
|
463
460
|
params.specular = args.specular.weight;
|
|
464
461
|
if (undefined !== args.specular.exponent)
|
|
@@ -493,12 +490,11 @@ export class System extends RenderSystem {
|
|
|
493
490
|
return owner ? { idMap: this.getIdMap(owner.iModel), key: owner.key } : undefined;
|
|
494
491
|
}
|
|
495
492
|
createTexture(args) {
|
|
496
|
-
var _a, _b;
|
|
497
493
|
const info = this.getTextureCacheInfo(args);
|
|
498
|
-
const existing = info
|
|
494
|
+
const existing = info?.idMap.findTexture(info?.key);
|
|
499
495
|
if (existing)
|
|
500
496
|
return existing;
|
|
501
|
-
const type =
|
|
497
|
+
const type = args.type ?? RenderTexture.Type.Normal;
|
|
502
498
|
const source = args.image.source;
|
|
503
499
|
let handle;
|
|
504
500
|
if (source instanceof ImageBuffer)
|
|
@@ -511,7 +507,7 @@ export class System extends RenderSystem {
|
|
|
511
507
|
assert(false);
|
|
512
508
|
if (!handle)
|
|
513
509
|
return undefined;
|
|
514
|
-
const texture = new Texture({ handle, type, ownership: args.ownership, transparency:
|
|
510
|
+
const texture = new Texture({ handle, type, ownership: args.ownership, transparency: args.image.transparency ?? TextureTransparency.Mixed });
|
|
515
511
|
if (texture && info)
|
|
516
512
|
info.idMap.addTexture(texture, info.key);
|
|
517
513
|
return texture;
|
|
@@ -663,7 +659,7 @@ export class System extends RenderSystem {
|
|
|
663
659
|
}
|
|
664
660
|
// RenderSystemDebugControl
|
|
665
661
|
get debugControl() { return this; }
|
|
666
|
-
get dpiAwareLOD() {
|
|
662
|
+
get dpiAwareLOD() { return this._dpiAwareLOD ?? super.dpiAwareLOD; }
|
|
667
663
|
set dpiAwareLOD(dpiAware) { this._dpiAwareLOD = dpiAware; }
|
|
668
664
|
loseContext() {
|
|
669
665
|
const ext = this._capabilities.queryExtensionObject("WEBGL_lose_context");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"System.js","sourceRoot":"","sources":["../../../../src/render/webgl/System.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, BentleyStatus, Dictionary, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { ColorDef, ElementAlignedBox3d, Frustum, Gradient, ImageBuffer, ImageBufferFormat, ImageSourceFormat, IModelError, PackedFeatureTable, RenderMaterial, RenderTexture, RgbColorProps, TextureMapping, TextureTransparency } from \"@itwin/core-common\";\nimport { ClipVector, Point3d, Transform } from \"@itwin/core-geometry\";\nimport { Capabilities, WebGLContext } from \"@itwin/webgl-compatibility\";\nimport { imageElementFromImageSource } from \"../../ImageUtil\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { MapTileTreeReference, TileTreeReference } from \"../../tile/internal\";\nimport { ViewRect } from \"../../ViewRect\";\nimport { GraphicBranch, GraphicBranchOptions } from \"../GraphicBranch\";\nimport { BatchOptions, CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"../GraphicBuilder\";\nimport { InstancedGraphicParams, PatternGraphicParams } from \"../InstancedGraphicParams\";\nimport { PrimitiveBuilder } from \"../primitives/geometry/GeometryListBuilder\";\nimport { RealityMeshGraphicParams } from \"../RealityMeshGraphicParams\";\nimport { PointCloudArgs } from \"../primitives/PointCloudPrimitive\";\nimport { PointStringParams } from \"../primitives/PointStringParams\";\nimport { PolylineParams } from \"../primitives/PolylineParams\";\nimport { MeshParams } from \"../primitives/VertexTable\";\nimport { RenderClipVolume } from \"../RenderClipVolume\";\nimport { RenderGraphic, RenderGraphicOwner } from \"../RenderGraphic\";\nimport { CreateRenderMaterialArgs } from \"../RenderMaterial\";\nimport { RenderMemory } from \"../RenderMemory\";\nimport { RealityMeshParams } from \"../RealityMeshParams\";\nimport {\n DebugShaderFile, GLTimerResultCallback, PlanarGridProps, RenderAreaPattern, RenderDiagnostics, RenderGeometry, RenderSkyBoxParams, RenderSystem, RenderSystemDebugControl,\n} from \"../RenderSystem\";\nimport { RenderTarget } from \"../RenderTarget\";\nimport { CreateTextureArgs, CreateTextureFromSourceArgs, TextureCacheKey } from \"../RenderTexture\";\nimport { ScreenSpaceEffectBuilder, ScreenSpaceEffectBuilderParams } from \"../ScreenSpaceEffectBuilder\";\nimport { BackgroundMapDrape } from \"./BackgroundMapDrape\";\nimport { SkyBoxQuadsGeometry, SkySphereViewportQuadGeometry } from \"./CachedGeometry\";\nimport { ClipVolume } from \"./ClipVolume\";\nimport { Debug } from \"./Diagnostics\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { DepthBuffer, FrameBufferStack } from \"./FrameBuffer\";\nimport { GL } from \"./GL\";\nimport { GLTimer } from \"./GLTimer\";\nimport { AnimationTransformBranch, Batch, Branch, Graphic, GraphicOwner, GraphicsArray } from \"./Graphic\";\nimport { isInstancedGraphicParams, PatternBuffers } from \"./InstancedGeometry\";\nimport { Layer, LayerContainer } from \"./Layer\";\nimport { LineCode } from \"./LineCode\";\nimport { Material } from \"./Material\";\nimport { MeshGraphic, MeshRenderGeometry } from \"./Mesh\";\nimport { PlanarGridGeometry } from \"./PlanarGrid\";\nimport { PointCloudGeometry } from \"./PointCloud\";\nimport { PointStringGeometry } from \"./PointString\";\nimport { PolylineGeometry } from \"./Polyline\";\nimport { Primitive, SkyCubePrimitive, SkySpherePrimitive } from \"./Primitive\";\nimport { RealityMeshGeometry } from \"./RealityMesh\";\nimport { RenderBufferMultiSample } from \"./RenderBuffer\";\nimport { TextureUnit } from \"./RenderFlags\";\nimport { RenderState } from \"./RenderState\";\nimport { createScreenSpaceEffectBuilder, ScreenSpaceEffects } from \"./ScreenSpaceEffect\";\nimport { OffScreenTarget, OnScreenTarget } from \"./Target\";\nimport { Techniques } from \"./Technique\";\nimport { ExternalTextureLoader, Texture, TextureHandle } from \"./Texture\";\nimport { UniformHandle } from \"./UniformHandle\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** @internal */\nexport const enum ContextState {\n Uninitialized,\n Success,\n Error,\n}\n\n/** Id map holds key value pairs for both materials and textures, useful for caching such objects.\n * @internal\n */\nexport class IdMap implements WebGLDisposable {\n private readonly _iModel: IModelConnection;\n /** Mapping of materials by their key values. */\n public readonly materials = new Map<string, RenderMaterial>();\n /** Mapping of textures by their key values. */\n public readonly textures = new Map<string, RenderTexture>();\n /** Mapping of textures using gradient symbology. */\n public readonly gradients = new Dictionary<Gradient.Symb, RenderTexture>(Gradient.Symb.compareSymb);\n /** Pending promises to create a texture from an ImageSource. This prevents us from decoding the same ImageSource multiple times */\n public readonly texturesFromImageSources = new Map<string, Promise<RenderTexture | undefined>>();\n\n public constructor(iModel: IModelConnection) {\n this._iModel = iModel;\n }\n\n public get isDisposed(): boolean {\n return 0 === this.textures.size && 0 === this.gradients.size;\n }\n\n public dispose() {\n const textureArr = Array.from(this.textures.values());\n const gradientArr = this.gradients.extractArrays().values;\n\n for (const texture of textureArr)\n dispose(texture);\n\n for (const gradient of gradientArr)\n dispose(gradient);\n\n this.textures.clear();\n this.gradients.clear();\n this.materials.clear();\n }\n\n /** Add a material to this IdMap, given that it has a valid key. */\n public addMaterial(material: RenderMaterial) {\n if (material.key)\n this.materials.set(material.key, material);\n }\n\n /** Add a texture to this IdMap, given that it has a valid string key. If specified, it will instead use the key parameter, which could also be a gradient symb. */\n public addTexture(texture: RenderTexture, key?: TextureCacheKey) {\n assert(texture instanceof Texture);\n if (undefined !== key) {\n if (\"string\" === typeof key)\n this.textures.set(key, texture);\n else\n this.addGradient(key, texture);\n } else if (texture.key)\n this.textures.set(texture.key, texture);\n }\n\n /** Add a texture to this IdMap using gradient symbology. */\n public addGradient(gradientSymb: Gradient.Symb, texture: RenderTexture) {\n this.gradients.set(gradientSymb, texture);\n }\n\n /** Find a cached material using its key. If not found, returns undefined. */\n public findMaterial(key: string): RenderMaterial | undefined {\n return this.materials.get(key);\n }\n\n /** Find a cached gradient using the gradient symbology. If not found, returns undefined. */\n public findGradient(symb: Gradient.Symb): RenderTexture | undefined {\n return this.gradients.get(symb);\n }\n\n /** Find or create a new material given material parameters. This will cache the material if its key is valid. */\n // eslint-disable-next-line deprecation/deprecation\n public getMaterial(params: RenderMaterial.Params): RenderMaterial {\n if (!params.key || !Id64.isValidId64(params.key)) // Only cache persistent materials.\n return new Material(params);\n\n let material = this.materials.get(params.key);\n if (!material) {\n material = new Material(params);\n this.materials.set(params.key, material);\n }\n return material;\n }\n\n public findTexture(key?: string | Gradient.Symb): RenderTexture | undefined {\n if (undefined === key)\n return undefined;\n else if (typeof key === \"string\")\n return this.textures.get(key);\n else\n return this.findGradient(key);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public getTextureFromElement(key: Id64String, iModel: IModelConnection, params: RenderTexture.Params, format: ImageSourceFormat): RenderTexture | undefined {\n let tex = this.findTexture(params.key);\n if (tex)\n return tex;\n\n const handle = TextureHandle.createForElement(key, iModel, params.type, format, (_, data) => {\n if (tex) {\n assert(tex instanceof Texture);\n tex.transparency = data.transparency ?? TextureTransparency.Mixed;\n }\n });\n\n if (!handle)\n return undefined;\n\n tex = new Texture({ handle, type: params.type, ownership: { key, iModel }, transparency: TextureTransparency.Opaque });\n this.addTexture(tex);\n return tex;\n }\n\n public async getTextureFromImageSource(args: CreateTextureFromSourceArgs, key: string): Promise<RenderTexture | undefined> {\n const texture = this.findTexture(key);\n if (texture)\n return texture;\n\n // Are we already in the process of decoding this image?\n let promise = this.texturesFromImageSources.get(key);\n if (promise)\n return promise;\n\n promise = this.createTextureFromImageSource(args, key);\n this.texturesFromImageSources.set(key, promise);\n return promise;\n }\n\n public async createTextureFromImageSource(args: CreateTextureFromSourceArgs, key: string): Promise<RenderTexture | undefined> {\n // JPEGs don't support transparency.\n const transparency = ImageSourceFormat.Jpeg === args.source.format ? TextureTransparency.Opaque : (args.transparency ?? TextureTransparency.Mixed);\n try {\n const image = await imageElementFromImageSource(args.source);\n if (!IModelApp.hasRenderSystem)\n return undefined;\n\n return IModelApp.renderSystem.createTexture({\n type: args.type,\n ownership: args.ownership,\n image: {\n source: image,\n transparency,\n },\n });\n } catch {\n return undefined;\n } finally {\n this.texturesFromImageSources.delete(key);\n }\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public getTextureFromCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement, params: RenderTexture.Params): RenderTexture | undefined {\n let tex = this.findTexture(params.key);\n if (tex)\n return tex;\n\n const handle = TextureHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n if (!handle)\n return undefined;\n\n const ownership = params.key ? { key: params.key, iModel: this._iModel } : (params.isOwned ? \"external\" : undefined);\n tex = new Texture({ handle, ownership, type: params.type, transparency: TextureTransparency.Opaque });\n this.addTexture(tex);\n return tex;\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n for (const texture of this.textures.values())\n if (texture instanceof Texture)\n stats.addTexture(texture.bytesUsed);\n\n for (const gradient of this.gradients)\n if (gradient instanceof Texture)\n stats.addTexture(gradient.bytesUsed);\n }\n}\n\nexport type TextureBinding = WebGLTexture | undefined;\n\nconst enum VertexAttribState {\n Disabled = 0,\n Enabled = 1 << 0,\n Instanced = 1 << 2,\n InstancedEnabled = Instanced | Enabled,\n}\n\ninterface TextureCacheInfo {\n idMap: IdMap;\n key: TextureCacheKey;\n}\n\nfunction getMaterialColor(color: ColorDef | RgbColorProps | undefined): ColorDef | undefined {\n if (color instanceof ColorDef)\n return color;\n\n return color ? ColorDef.from(color.r, color.g, color.b) : undefined;\n}\n\n/** @internal */\nexport class System extends RenderSystem implements RenderSystemDebugControl, RenderMemory.Consumer, WebGLDisposable {\n public readonly canvas: HTMLCanvasElement;\n public readonly currentRenderState = new RenderState();\n public readonly context: WebGL2RenderingContext;\n public readonly frameBufferStack = new FrameBufferStack(); // frame buffers are not owned by the system\n private readonly _capabilities: Capabilities;\n public readonly resourceCache: Map<IModelConnection, IdMap>;\n public readonly glTimer: GLTimer;\n private readonly _textureBindings: TextureBinding[] = [];\n private _removeEventListener?: () => void;\n\n // NB: Increase the size of these arrays when the maximum number of attributes used by any one shader increases.\n private readonly _curVertexAttribStates: VertexAttribState[] = [\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n ];\n private readonly _nextVertexAttribStates: VertexAttribState[] = [\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n ];\n\n // The following are initialized immediately after the System is constructed.\n private _lineCodeTexture?: TextureHandle;\n private _noiseTexture?: TextureHandle;\n private _techniques?: Techniques;\n private _screenSpaceEffects?: ScreenSpaceEffects;\n public readonly debugShaderFiles: DebugShaderFile[] = [];\n\n public static get instance() { return IModelApp.renderSystem as System; }\n\n public get isValid(): boolean { return this.canvas !== undefined; }\n public get lineCodeTexture() { return this._lineCodeTexture; }\n public get noiseTexture() { return this._noiseTexture; }\n\n public get techniques() {\n assert(undefined !== this._techniques);\n return this._techniques;\n }\n\n public get screenSpaceEffects() {\n assert(undefined !== this._screenSpaceEffects);\n return this._screenSpaceEffects;\n }\n\n public override get maxTextureSize(): number { return this._capabilities.maxTextureSize; }\n public override get supportsCreateImageBitmap(): boolean { return this._capabilities.supportsCreateImageBitmap; }\n public get maxRenderType() { return this._capabilities.maxRenderType; }\n public get fragDepthDoesNotDisableEarlyZ() { return this._capabilities.driverBugs.fragDepthDoesNotDisableEarlyZ; }\n public get maxAntialiasSamples() { return this._capabilities.maxAntialiasSamples; }\n public get supportsNonPowerOf2Textures() { return this._capabilities.supportsNonPowerOf2Textures; }\n public get maxTexSizeAllow() { return this._capabilities.maxTexSizeAllow; }\n public get disjointTimerQuery() {\n const ext = this._capabilities.queryExtensionObject<any>(\"EXT_disjoint_timer_query_webgl2\");\n return ext ?? this._capabilities.queryExtensionObject<any>(\"EXT_disjoint_timer_query\");\n }\n\n public override get isMobile(): boolean { return this._capabilities.isMobile; }\n\n public setDrawBuffers(attachments: GLenum[]): void {\n this.context.drawBuffers(attachments);\n }\n\n public doIdleWork(): boolean {\n return this.techniques.idleCompileNextShader();\n }\n\n /** Return a Promise which when resolved indicates that all pending external textures have finished loading from the backend. */\n public override async waitForAllExternalTextures(): Promise<void> {\n const extTexLoader = ExternalTextureLoader.instance;\n if (extTexLoader.numActiveRequests < 1 && extTexLoader.numPendingRequests < 1)\n return Promise.resolve();\n const promise = new Promise<void>((resolve: any) => {\n extTexLoader.onTexturesLoaded.addOnce(() => {\n resolve();\n });\n });\n return promise;\n }\n\n public override get hasExternalTextureRequests(): boolean {\n const loader = ExternalTextureLoader.instance;\n return loader.numActiveRequests > 0 || loader.numPendingRequests > 0;\n }\n\n /** Attempt to create a WebGLRenderingContext, returning undefined if unsuccessful. */\n public static createContext(canvas: HTMLCanvasElement, useWebGL2: boolean, inputContextAttributes?: WebGLContextAttributes): WebGLContext | undefined {\n if (!useWebGL2)\n return undefined; // WebGL 2 is required.\n\n let contextAttributes: WebGLContextAttributes = { powerPreference: \"high-performance\" };\n if (undefined !== inputContextAttributes) {\n // NOTE: Order matters with spread operator - if caller wants to override powerPreference, he should be able to.\n contextAttributes = { ...contextAttributes, ...inputContextAttributes };\n }\n\n const context = canvas.getContext(\"webgl2\", contextAttributes);\n return context ?? undefined;\n }\n\n public static create(optionsIn?: RenderSystem.Options): System {\n const options: RenderSystem.Options = undefined !== optionsIn ? optionsIn : {};\n const canvas = document.createElement(\"canvas\");\n if (null === canvas)\n throw new IModelError(BentleyStatus.ERROR, \"Failed to obtain HTMLCanvasElement\");\n\n const context = this.createContext(canvas, true, optionsIn?.contextAttributes);\n if (undefined === context)\n throw new IModelError(BentleyStatus.ERROR, \"Failed to obtain WebGL context\");\n\n if (!(context instanceof WebGL2RenderingContext))\n throw new IModelError(BentleyStatus.ERROR, \"WebGL 2 support is required\");\n\n const capabilities = Capabilities.create(context, options.disabledExtensions);\n if (undefined === capabilities)\n throw new IModelError(BentleyStatus.ERROR, \"Failed to initialize rendering capabilities\");\n\n // set actual gl state to match desired state defaults\n context.depthFunc(GL.DepthFunc.Default); // LessOrEqual\n\n return new this(canvas, context, capabilities, options);\n }\n\n public get isDisposed(): boolean {\n return undefined === this._techniques\n && undefined === this._lineCodeTexture\n && undefined === this._noiseTexture\n && undefined === this._screenSpaceEffects;\n }\n\n // Note: FrameBuffers inside of the FrameBufferStack are not owned by the System, and are only used as a central storage device\n public dispose() {\n this._techniques = dispose(this._techniques);\n this._screenSpaceEffects = dispose(this._screenSpaceEffects);\n this._lineCodeTexture = dispose(this._lineCodeTexture);\n this._noiseTexture = dispose(this._noiseTexture);\n\n // We must attempt to dispose of each idmap in the resourceCache (if idmap is already disposed, has no effect)\n this.resourceCache.forEach((idMap: IdMap) => {\n dispose(idMap);\n });\n\n this.resourceCache.clear();\n if (undefined !== this._removeEventListener) {\n this._removeEventListener();\n this._removeEventListener = undefined;\n }\n }\n\n public override onInitialized(): void {\n this._techniques = Techniques.create(this.context);\n\n const noiseDim = 4;\n const noiseArr = new Uint8Array([152, 235, 94, 173, 219, 215, 115, 176, 73, 205, 43, 201, 10, 81, 205, 198]);\n this._noiseTexture = TextureHandle.createForData(noiseDim, noiseDim, noiseArr, false, GL.Texture.WrapMode.Repeat, GL.Texture.Format.Luminance);\n assert(undefined !== this._noiseTexture, \"System.noiseTexture not created.\");\n\n this._lineCodeTexture = TextureHandle.createForData(LineCode.size, LineCode.count, new Uint8Array(LineCode.lineCodeData), false, GL.Texture.WrapMode.Repeat, GL.Texture.Format.Luminance);\n assert(undefined !== this._lineCodeTexture, \"System.lineCodeTexture not created.\");\n\n this._screenSpaceEffects = new ScreenSpaceEffects();\n }\n\n public createTarget(canvas: HTMLCanvasElement): RenderTarget {\n return new OnScreenTarget(canvas);\n }\n\n public createOffscreenTarget(rect: ViewRect): RenderTarget {\n return new OffScreenTarget(rect);\n }\n\n public createGraphic(options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions): GraphicBuilder {\n return new PrimitiveBuilder(this, options);\n }\n\n public override createPlanarGrid(frustum: Frustum, grid: PlanarGridProps): RenderGraphic | undefined {\n return PlanarGridGeometry.create(frustum, grid, this);\n }\n\n public override createTerrainMesh(params: RealityMeshParams, transform?: Transform, disableTextureDisposal = false): RealityMeshGeometry | undefined {\n return RealityMeshGeometry.createForTerrain(params, transform, disableTextureDisposal);\n }\n\n public override createRealityMeshGraphic(params: RealityMeshGraphicParams, disableTextureDisposal = false): RenderGraphic | undefined {\n return RealityMeshGeometry.createGraphic(this, params, disableTextureDisposal);\n }\n public override createRealityMesh(realityMesh: RealityMeshParams, disableTextureDisposal = false): RenderGraphic | undefined {\n const geom = RealityMeshGeometry.createFromRealityMesh(realityMesh, disableTextureDisposal);\n return geom ? Primitive.create(geom) : undefined;\n }\n\n public override createMeshGeometry(params: MeshParams, viOrigin?: Point3d): MeshRenderGeometry | undefined {\n return MeshRenderGeometry.create(params, viOrigin);\n }\n\n public override createPolylineGeometry(params: PolylineParams, viOrigin?: Point3d): PolylineGeometry | undefined {\n return PolylineGeometry.create(params, viOrigin);\n }\n\n public override createPointStringGeometry(params: PointStringParams, viOrigin?: Point3d): PointStringGeometry | undefined {\n return PointStringGeometry.create(params, viOrigin);\n }\n\n public override createAreaPattern(params: PatternGraphicParams): PatternBuffers | undefined {\n return PatternBuffers.create(params);\n }\n\n public override createRenderGraphic(geometry: RenderGeometry, instances?: InstancedGraphicParams | RenderAreaPattern): RenderGraphic | undefined {\n if (!(geometry instanceof MeshRenderGeometry)) {\n if (geometry instanceof PolylineGeometry || geometry instanceof PointStringGeometry)\n return Primitive.create(geometry, instances);\n\n assert(false, \"Invalid RenderGeometry for System.createRenderGraphic\");\n return undefined;\n }\n\n assert(!instances || instances instanceof PatternBuffers || isInstancedGraphicParams(instances));\n return MeshGraphic.create(geometry, instances);\n }\n\n public override createPointCloud(args: PointCloudArgs): RenderGraphic | undefined {\n return Primitive.create(new PointCloudGeometry(args));\n }\n\n public createGraphicList(primitives: RenderGraphic[]): RenderGraphic {\n return new GraphicsArray(primitives);\n }\n\n public createGraphicBranch(branch: GraphicBranch, transform: Transform, options?: GraphicBranchOptions): RenderGraphic {\n return new Branch(branch, transform, undefined, options);\n }\n\n public override createAnimationTransformNode(graphic: RenderGraphic, nodeId: number): RenderGraphic {\n return new AnimationTransformBranch(graphic, nodeId);\n }\n\n public createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d, options?: BatchOptions): RenderGraphic {\n return new Batch(graphic, features, range, options);\n }\n\n public override createGraphicOwner(owned: RenderGraphic): RenderGraphicOwner {\n return new GraphicOwner(owned as Graphic);\n }\n\n public override createGraphicLayer(graphic: RenderGraphic, layerId: string) {\n return new Layer(graphic as Graphic, layerId);\n }\n\n public override createGraphicLayerContainer(graphic: RenderGraphic, drawAsOverlay: boolean, transparency: number, elevation: number) {\n return new LayerContainer(graphic as Graphic, drawAsOverlay, transparency, elevation);\n }\n\n public override createSkyBox(params: RenderSkyBoxParams): RenderGraphic | undefined {\n if (\"cube\" === params.type)\n return SkyCubePrimitive.create(SkyBoxQuadsGeometry.create(params.texture));\n\n return SkySpherePrimitive.create(SkySphereViewportQuadGeometry.createGeometry(params));\n }\n\n public override createScreenSpaceEffectBuilder(params: ScreenSpaceEffectBuilderParams): ScreenSpaceEffectBuilder {\n return createScreenSpaceEffectBuilder(params);\n }\n\n public applyRenderState(newState: RenderState) {\n newState.apply(this.currentRenderState);\n this.currentRenderState.copyFrom(newState);\n }\n\n public createDepthBuffer(width: number, height: number, numSamples: number = 1): DepthBuffer | undefined {\n // Note: The buffer/texture created here have ownership passed to the caller (system will not dispose of these)\n if (numSamples > 1)\n return RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.DEPTH24_STENCIL8, numSamples);\n else\n return TextureHandle.createForAttachment(width, height, GL.Texture.Format.DepthStencil, this.context.UNSIGNED_INT_24_8);\n }\n\n /** Returns the corresponding IdMap for an IModelConnection. Creates a new one if it doesn't exist. */\n public createIModelMap(imodel: IModelConnection): IdMap {\n let idMap = this.resourceCache.get(imodel);\n if (!idMap) {\n idMap = new IdMap(imodel);\n this.resourceCache.set(imodel, idMap);\n }\n return idMap;\n }\n\n /** Removes an IModelConnection-IdMap pairing from the system's resource cache. */\n private removeIModelMap(imodel: IModelConnection) {\n const idMap = this.resourceCache.get(imodel);\n if (idMap === undefined)\n return;\n dispose(idMap);\n this.resourceCache.delete(imodel);\n }\n\n /** Attempt to create a material for the given iModel using a set of material parameters. */\n // eslint-disable-next-line deprecation/deprecation\n public override createMaterial(params: RenderMaterial.Params, imodel: IModelConnection): RenderMaterial | undefined {\n const idMap = this.getIdMap(imodel);\n const material = idMap.getMaterial(params);\n return material;\n }\n\n public override createRenderMaterial(args: CreateRenderMaterialArgs): RenderMaterial | undefined {\n if (args.source) {\n const cached = this.findMaterial(args.source.id, args.source.iModel);\n if (cached)\n return cached;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n const params = new RenderMaterial.Params();\n params.alpha = args.alpha;\n if (undefined !== args.diffuse?.weight)\n params.diffuse = args.diffuse.weight;\n\n params.diffuseColor = getMaterialColor(args.diffuse?.color);\n\n if (args.specular) {\n params.specularColor = getMaterialColor(args.specular?.color);\n if (undefined !== args.specular.weight)\n params.specular = args.specular.weight;\n\n if (undefined !== args.specular.exponent)\n params.specularExponent = args.specular.exponent;\n }\n\n if (args.textureMapping) {\n params.textureMapping = new TextureMapping(args.textureMapping.texture, new TextureMapping.Params({\n textureMat2x3: args.textureMapping.transform,\n mapMode: args.textureMapping.mode,\n textureWeight: args.textureMapping.weight,\n worldMapping: args.textureMapping.worldMapping,\n }));\n params.textureMapping.normalMapParams = args.textureMapping.normalMapParams;\n }\n\n if (args.source) {\n params.key = args.source.id;\n return this.getIdMap(args.source.iModel).getMaterial(params);\n } else {\n return new Material(params);\n }\n }\n\n /** Using its key, search for an existing material of an open iModel. */\n public override findMaterial(key: string, imodel: IModelConnection): RenderMaterial | undefined {\n const idMap = this.resourceCache.get(imodel);\n if (!idMap)\n return undefined;\n return idMap.findMaterial(key);\n }\n\n private getTextureCacheInfo(args: CreateTextureArgs): TextureCacheInfo | undefined {\n const owner = undefined !== args.ownership && args.ownership !== \"external\" ? args.ownership : undefined;\n return owner ? { idMap: this.getIdMap(owner.iModel), key: owner.key } : undefined;\n }\n\n public override createTexture(args: CreateTextureArgs): RenderTexture | undefined {\n const info = this.getTextureCacheInfo(args);\n const existing = info?.idMap.findTexture(info?.key);\n if (existing)\n return existing;\n\n const type = args.type ?? RenderTexture.Type.Normal;\n const source = args.image.source;\n\n let handle;\n if (source instanceof ImageBuffer)\n handle = TextureHandle.createForImageBuffer(source, type);\n else if (source instanceof ImageBitmap)\n handle = TextureHandle.createForImageBitmap(source, type);\n else if (source instanceof HTMLImageElement)\n handle = TextureHandle.createForImage(source, type);\n else\n assert(false);\n\n if (!handle)\n return undefined;\n\n const texture = new Texture({ handle, type, ownership: args.ownership, transparency: args.image.transparency ?? TextureTransparency.Mixed });\n if (texture && info)\n info.idMap.addTexture(texture, info.key);\n\n return texture;\n }\n\n public override async createTextureFromSource(args: CreateTextureFromSourceArgs): Promise<RenderTexture | undefined> {\n if (typeof args.ownership !== \"object\")\n return super.createTextureFromSource(args);\n\n return this.getIdMap(args.ownership.iModel).getTextureFromImageSource(args, args.ownership.key);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public override createTextureFromElement(id: Id64String, imodel: IModelConnection, params: RenderTexture.Params, format: ImageSourceFormat): RenderTexture | undefined {\n return this.getIdMap(imodel).getTextureFromElement(id, imodel, params, format);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public override createTextureFromCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement, imodel: IModelConnection, params: RenderTexture.Params): RenderTexture | undefined {\n return this.getIdMap(imodel).getTextureFromCubeImages(posX, negX, posY, negY, posZ, negZ, params);\n }\n\n /** Attempt to create a texture using gradient symbology. */\n public override getGradientTexture(symb: Gradient.Symb, iModel?: IModelConnection): RenderTexture | undefined {\n let width = 0x100;\n let height = 0x100;\n if (symb.mode === Gradient.Mode.Thematic) {\n // Pixels in each row are identical, no point in having width > 1.\n width = 1;\n // We want maximum height to minimize bleeding of margin color.\n height = this.maxTextureSize;\n }\n\n const source = symb.produceImage({ width, height, includeThematicMargin: true });\n return this.createTexture({\n image: {\n source,\n transparency: ImageBufferFormat.Rgba === source.format ? TextureTransparency.Mixed : TextureTransparency.Opaque,\n },\n ownership: iModel ? { iModel, key: symb } : undefined,\n type: RenderTexture.Type.Normal,\n });\n }\n\n /** Using its key, search for an existing texture of an open iModel. */\n public override findTexture(key: TextureCacheKey, imodel: IModelConnection): RenderTexture | undefined {\n const idMap = this.resourceCache.get(imodel);\n if (!idMap)\n return undefined;\n\n return idMap.findTexture(key);\n }\n\n public override createClipVolume(clipVector: ClipVector): RenderClipVolume | undefined {\n return ClipVolume.create(clipVector);\n }\n public override createBackgroundMapDrape(drapedTree: TileTreeReference, mapTree: MapTileTreeReference) {\n return BackgroundMapDrape.create(drapedTree, mapTree);\n }\n\n protected constructor(canvas: HTMLCanvasElement, context: WebGL2RenderingContext, capabilities: Capabilities, options: RenderSystem.Options) {\n super(options);\n this.canvas = canvas;\n this.context = context;\n this._capabilities = capabilities;\n this.resourceCache = new Map<IModelConnection, IdMap>();\n this.glTimer = GLTimer.create(this);\n\n // Make this System a subscriber to the the IModelConnection onClose event\n this._removeEventListener = IModelConnection.onClose.addListener((imodel) => this.removeIModelMap(imodel));\n\n canvas.addEventListener(\"webglcontextlost\", async () => RenderSystem.contextLossHandler(), false);\n }\n\n /** Exposed strictly for tests. */\n public getIdMap(imodel: IModelConnection): IdMap {\n const map = this.resourceCache.get(imodel);\n return undefined !== map ? map : this.createIModelMap(imodel);\n }\n\n private bindTexture(unit: TextureUnit, target: GL.Texture.Target, texture: TextureBinding, makeActive: boolean): void {\n const index = unit - TextureUnit.Zero;\n if (this._textureBindings[index] === texture) {\n if (makeActive)\n this.context.activeTexture(unit);\n\n return;\n }\n\n this._textureBindings[index] = texture;\n this.context.activeTexture(unit);\n this.context.bindTexture(target, undefined !== texture ? texture : null);\n }\n\n /** Bind the specified texture to the specified unit. This may *or may not* make the texture *active* */\n public bindTexture2d(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.TwoDee, texture, false); }\n /** Bind the specified texture to the specified unit. This may *or may not* make the texture *active* */\n public bindTextureCubeMap(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.CubeMap, texture, false); }\n /** Bind the specified texture to the specified unit. This *always* makes the texture *active* */\n public activateTexture2d(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.TwoDee, texture, true); }\n /** Bind the specified texture to the specified unit. This *always* makes the texture *active* */\n public activateTextureCubeMap(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.CubeMap, texture, true); }\n\n // Ensure *something* is bound to suppress 'no texture assigned to unit x' warnings.\n public ensureSamplerBound(uniform: UniformHandle, unit: TextureUnit): void {\n this.lineCodeTexture!.bindSampler(uniform, unit);\n }\n\n public override get maxRealityImageryLayers() {\n return 6;\n }\n\n public disposeTexture(texture: WebGLTexture) {\n System.instance.context.deleteTexture(texture);\n for (let i = 0; i < this._textureBindings.length; i++) {\n if (this._textureBindings[i] === texture) {\n this._textureBindings[i] = undefined;\n break;\n }\n }\n }\n\n // System keeps track of current enabled state of vertex attribute arrays.\n // This prevents errors caused by leaving a vertex attrib array enabled after disposing of the buffer bound to it;\n // also prevents unnecessarily 'updating' the enabled state of a vertex attrib array when it hasn't actually changed.\n public enableVertexAttribArray(id: number, instanced: boolean): void {\n assert(id < this._nextVertexAttribStates.length, \"if you add new vertex attributes you must update array length\");\n assert(id < this._curVertexAttribStates.length, \"if you add new vertex attributes you must update array length\");\n\n this._nextVertexAttribStates[id] = instanced ? VertexAttribState.InstancedEnabled : VertexAttribState.Enabled;\n }\n\n public updateVertexAttribArrays(): void {\n const cur = this._curVertexAttribStates;\n const next = this._nextVertexAttribStates;\n const context = this.context;\n\n for (let i = 0; i < next.length; i++) {\n const oldState = cur[i];\n const newState = next[i];\n if (oldState !== newState) {\n // Update the enabled state if it changed.\n const wasEnabled = 0 !== (VertexAttribState.Enabled & oldState);\n const nowEnabled = 0 !== (VertexAttribState.Enabled & newState);\n if (wasEnabled !== nowEnabled) {\n if (nowEnabled) {\n context.enableVertexAttribArray(i);\n } else {\n context.disableVertexAttribArray(i);\n }\n }\n\n // Only update the divisor if the attribute is enabled.\n if (nowEnabled) {\n const wasInstanced = 0 !== (VertexAttribState.Instanced & oldState);\n const nowInstanced = 0 !== (VertexAttribState.Instanced & newState);\n if (wasInstanced !== nowInstanced) {\n this.vertexAttribDivisor(i, nowInstanced ? 1 : 0);\n }\n }\n\n cur[i] = newState;\n }\n\n // Set the attribute back to disabled, but preserve the divisor.\n next[i] &= ~VertexAttribState.Enabled;\n }\n }\n\n public vertexAttribDivisor(index: number, divisor: number) {\n this.context.vertexAttribDivisor(index, divisor);\n }\n\n public drawArrays(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void {\n if (0 !== numInstances) {\n this.context.drawArraysInstanced(type, first, count, numInstances);\n } else {\n this.context.drawArrays(type, first, count);\n }\n }\n\n public invalidateFrameBuffer(attachments: number[]): void {\n this.context.invalidateFramebuffer(this.context.FRAMEBUFFER, attachments);\n }\n\n public override enableDiagnostics(enable: RenderDiagnostics): void {\n Debug.printEnabled = RenderDiagnostics.None !== (enable & RenderDiagnostics.DebugOutput);\n Debug.evaluateEnabled = RenderDiagnostics.None !== (enable & RenderDiagnostics.WebGL);\n }\n\n // RenderSystemDebugControl\n public override get debugControl(): RenderSystemDebugControl { return this; }\n\n private _dpiAwareLOD?: boolean;\n public override get dpiAwareLOD(): boolean { return this._dpiAwareLOD ?? super.dpiAwareLOD; }\n public override set dpiAwareLOD(dpiAware: boolean) { this._dpiAwareLOD = dpiAware; }\n\n public loseContext(): boolean {\n const ext = this._capabilities.queryExtensionObject<WEBGL_lose_context>(\"WEBGL_lose_context\");\n if (undefined === ext)\n return false;\n\n ext.loseContext();\n return true;\n }\n\n public compileAllShaders(): boolean {\n return this.techniques.compileShaders();\n }\n\n public get isGLTimerSupported(): boolean { return this.glTimer.isSupported; }\n public set resultsCallback(callback: GLTimerResultCallback | undefined) {\n this.glTimer.resultsCallback = callback;\n }\n\n public override collectStatistics(stats: RenderMemory.Statistics): void {\n if (undefined !== this._lineCodeTexture)\n stats.addTexture(this._lineCodeTexture.bytesUsed);\n\n if (undefined !== this._noiseTexture)\n stats.addTexture(this._noiseTexture.bytesUsed);\n\n for (const idMap of this.resourceCache.values())\n idMap.collectStatistics(stats);\n }\n\n public setMaxAnisotropy(max: number | undefined): void {\n this._capabilities.setMaxAnisotropy(max, this.context);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"System.js","sourceRoot":"","sources":["../../../../src/render/webgl/System.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, BentleyStatus, Dictionary, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { ColorDef, ElementAlignedBox3d, Frustum, Gradient, ImageBuffer, ImageBufferFormat, ImageSourceFormat, IModelError, PackedFeatureTable, RenderMaterial, RenderTexture, RgbColorProps, TextureMapping, TextureTransparency } from \"@itwin/core-common\";\nimport { ClipVector, Point3d, Transform } from \"@itwin/core-geometry\";\nimport { Capabilities, WebGLContext } from \"@itwin/webgl-compatibility\";\nimport { imageElementFromImageSource } from \"../../ImageUtil\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { MapTileTreeReference, TileTreeReference } from \"../../tile/internal\";\nimport { ViewRect } from \"../../ViewRect\";\nimport { GraphicBranch, GraphicBranchOptions } from \"../GraphicBranch\";\nimport { BatchOptions, CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"../GraphicBuilder\";\nimport { InstancedGraphicParams, PatternGraphicParams } from \"../InstancedGraphicParams\";\nimport { PrimitiveBuilder } from \"../primitives/geometry/GeometryListBuilder\";\nimport { RealityMeshGraphicParams } from \"../RealityMeshGraphicParams\";\nimport { PointCloudArgs } from \"../primitives/PointCloudPrimitive\";\nimport { PointStringParams } from \"../primitives/PointStringParams\";\nimport { PolylineParams } from \"../primitives/PolylineParams\";\nimport { MeshParams } from \"../primitives/VertexTable\";\nimport { RenderClipVolume } from \"../RenderClipVolume\";\nimport { RenderGraphic, RenderGraphicOwner } from \"../RenderGraphic\";\nimport { CreateRenderMaterialArgs } from \"../RenderMaterial\";\nimport { RenderMemory } from \"../RenderMemory\";\nimport { RealityMeshParams } from \"../RealityMeshParams\";\nimport {\n DebugShaderFile, GLTimerResultCallback, PlanarGridProps, RenderAreaPattern, RenderDiagnostics, RenderGeometry, RenderSkyBoxParams, RenderSystem, RenderSystemDebugControl,\n} from \"../RenderSystem\";\nimport { RenderTarget } from \"../RenderTarget\";\nimport { CreateTextureArgs, CreateTextureFromSourceArgs, TextureCacheKey } from \"../RenderTexture\";\nimport { ScreenSpaceEffectBuilder, ScreenSpaceEffectBuilderParams } from \"../ScreenSpaceEffectBuilder\";\nimport { BackgroundMapDrape } from \"./BackgroundMapDrape\";\nimport { SkyBoxQuadsGeometry, SkySphereViewportQuadGeometry } from \"./CachedGeometry\";\nimport { ClipVolume } from \"./ClipVolume\";\nimport { Debug } from \"./Diagnostics\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { DepthBuffer, FrameBufferStack } from \"./FrameBuffer\";\nimport { GL } from \"./GL\";\nimport { GLTimer } from \"./GLTimer\";\nimport { AnimationTransformBranch, Batch, Branch, Graphic, GraphicOwner, GraphicsArray } from \"./Graphic\";\nimport { isInstancedGraphicParams, PatternBuffers } from \"./InstancedGeometry\";\nimport { Layer, LayerContainer } from \"./Layer\";\nimport { LineCode } from \"./LineCode\";\nimport { Material } from \"./Material\";\nimport { MeshGraphic, MeshRenderGeometry } from \"./Mesh\";\nimport { PlanarGridGeometry } from \"./PlanarGrid\";\nimport { PointCloudGeometry } from \"./PointCloud\";\nimport { PointStringGeometry } from \"./PointString\";\nimport { PolylineGeometry } from \"./Polyline\";\nimport { Primitive, SkyCubePrimitive, SkySpherePrimitive } from \"./Primitive\";\nimport { RealityMeshGeometry } from \"./RealityMesh\";\nimport { RenderBufferMultiSample } from \"./RenderBuffer\";\nimport { TextureUnit } from \"./RenderFlags\";\nimport { RenderState } from \"./RenderState\";\nimport { createScreenSpaceEffectBuilder, ScreenSpaceEffects } from \"./ScreenSpaceEffect\";\nimport { OffScreenTarget, OnScreenTarget } from \"./Target\";\nimport { Techniques } from \"./Technique\";\nimport { ExternalTextureLoader, Texture, TextureHandle } from \"./Texture\";\nimport { UniformHandle } from \"./UniformHandle\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** @internal */\nexport const enum ContextState {\n Uninitialized,\n Success,\n Error,\n}\n\n/** Id map holds key value pairs for both materials and textures, useful for caching such objects.\n * @internal\n */\nexport class IdMap implements WebGLDisposable {\n private readonly _iModel: IModelConnection;\n /** Mapping of materials by their key values. */\n public readonly materials = new Map<string, RenderMaterial>();\n /** Mapping of textures by their key values. */\n public readonly textures = new Map<string, RenderTexture>();\n /** Mapping of textures using gradient symbology. */\n public readonly gradients = new Dictionary<Gradient.Symb, RenderTexture>(Gradient.Symb.compareSymb);\n /** Pending promises to create a texture from an ImageSource. This prevents us from decoding the same ImageSource multiple times */\n public readonly texturesFromImageSources = new Map<string, Promise<RenderTexture | undefined>>();\n\n public constructor(iModel: IModelConnection) {\n this._iModel = iModel;\n }\n\n public get isDisposed(): boolean {\n return 0 === this.textures.size && 0 === this.gradients.size;\n }\n\n public dispose() {\n const textureArr = Array.from(this.textures.values());\n const gradientArr = this.gradients.extractArrays().values;\n\n for (const texture of textureArr)\n dispose(texture);\n\n for (const gradient of gradientArr)\n dispose(gradient);\n\n this.textures.clear();\n this.gradients.clear();\n this.materials.clear();\n }\n\n /** Add a material to this IdMap, given that it has a valid key. */\n public addMaterial(material: RenderMaterial) {\n if (material.key)\n this.materials.set(material.key, material);\n }\n\n /** Add a texture to this IdMap, given that it has a valid string key. If specified, it will instead use the key parameter, which could also be a gradient symb. */\n public addTexture(texture: RenderTexture, key?: TextureCacheKey) {\n assert(texture instanceof Texture);\n if (undefined !== key) {\n if (\"string\" === typeof key)\n this.textures.set(key, texture);\n else\n this.addGradient(key, texture);\n } else if (texture.key)\n this.textures.set(texture.key, texture);\n }\n\n /** Add a texture to this IdMap using gradient symbology. */\n public addGradient(gradientSymb: Gradient.Symb, texture: RenderTexture) {\n this.gradients.set(gradientSymb, texture);\n }\n\n /** Find a cached material using its key. If not found, returns undefined. */\n public findMaterial(key: string): RenderMaterial | undefined {\n return this.materials.get(key);\n }\n\n /** Find a cached gradient using the gradient symbology. If not found, returns undefined. */\n public findGradient(symb: Gradient.Symb): RenderTexture | undefined {\n return this.gradients.get(symb);\n }\n\n /** Find or create a new material given material parameters. This will cache the material if its key is valid. */\n // eslint-disable-next-line deprecation/deprecation\n public getMaterial(params: RenderMaterial.Params): RenderMaterial {\n if (!params.key || !Id64.isValidId64(params.key)) // Only cache persistent materials.\n return new Material(params);\n\n let material = this.materials.get(params.key);\n if (!material) {\n material = new Material(params);\n this.materials.set(params.key, material);\n }\n return material;\n }\n\n public findTexture(key?: string | Gradient.Symb): RenderTexture | undefined {\n if (undefined === key)\n return undefined;\n else if (typeof key === \"string\")\n return this.textures.get(key);\n else\n return this.findGradient(key);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public getTextureFromElement(key: Id64String, iModel: IModelConnection, params: RenderTexture.Params, format: ImageSourceFormat): RenderTexture | undefined {\n let tex = this.findTexture(params.key);\n if (tex)\n return tex;\n\n const handle = TextureHandle.createForElement(key, iModel, params.type, format, (_, data) => {\n if (tex) {\n assert(tex instanceof Texture);\n tex.transparency = data.transparency ?? TextureTransparency.Mixed;\n }\n });\n\n if (!handle)\n return undefined;\n\n tex = new Texture({ handle, type: params.type, ownership: { key, iModel }, transparency: TextureTransparency.Opaque });\n this.addTexture(tex);\n return tex;\n }\n\n public async getTextureFromImageSource(args: CreateTextureFromSourceArgs, key: string): Promise<RenderTexture | undefined> {\n const texture = this.findTexture(key);\n if (texture)\n return texture;\n\n // Are we already in the process of decoding this image?\n let promise = this.texturesFromImageSources.get(key);\n if (promise)\n return promise;\n\n promise = this.createTextureFromImageSource(args, key);\n this.texturesFromImageSources.set(key, promise);\n return promise;\n }\n\n public async createTextureFromImageSource(args: CreateTextureFromSourceArgs, key: string): Promise<RenderTexture | undefined> {\n // JPEGs don't support transparency.\n const transparency = ImageSourceFormat.Jpeg === args.source.format ? TextureTransparency.Opaque : (args.transparency ?? TextureTransparency.Mixed);\n try {\n const image = await imageElementFromImageSource(args.source);\n if (!IModelApp.hasRenderSystem)\n return undefined;\n\n return IModelApp.renderSystem.createTexture({\n type: args.type,\n ownership: args.ownership,\n image: {\n source: image,\n transparency,\n },\n });\n } catch {\n return undefined;\n } finally {\n this.texturesFromImageSources.delete(key);\n }\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public getTextureFromCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement, params: RenderTexture.Params): RenderTexture | undefined {\n let tex = this.findTexture(params.key);\n if (tex)\n return tex;\n\n const handle = TextureHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n if (!handle)\n return undefined;\n\n const ownership = params.key ? { key: params.key, iModel: this._iModel } : (params.isOwned ? \"external\" : undefined);\n tex = new Texture({ handle, ownership, type: params.type, transparency: TextureTransparency.Opaque });\n this.addTexture(tex);\n return tex;\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n for (const texture of this.textures.values())\n if (texture instanceof Texture)\n stats.addTexture(texture.bytesUsed);\n\n for (const gradient of this.gradients)\n if (gradient instanceof Texture)\n stats.addTexture(gradient.bytesUsed);\n }\n}\n\nexport type TextureBinding = WebGLTexture | undefined;\n\nconst enum VertexAttribState {\n Disabled = 0,\n Enabled = 1 << 0,\n Instanced = 1 << 2,\n InstancedEnabled = Instanced | Enabled,\n}\n\ninterface TextureCacheInfo {\n idMap: IdMap;\n key: TextureCacheKey;\n}\n\nfunction getMaterialColor(color: ColorDef | RgbColorProps | undefined): ColorDef | undefined {\n if (color instanceof ColorDef)\n return color;\n\n return color ? ColorDef.from(color.r, color.g, color.b) : undefined;\n}\n\n/** @internal */\nexport class System extends RenderSystem implements RenderSystemDebugControl, RenderMemory.Consumer, WebGLDisposable {\n public readonly canvas: HTMLCanvasElement;\n public readonly currentRenderState = new RenderState();\n public readonly context: WebGL2RenderingContext;\n public readonly frameBufferStack = new FrameBufferStack(); // frame buffers are not owned by the system\n private readonly _capabilities: Capabilities;\n public readonly resourceCache: Map<IModelConnection, IdMap>;\n public readonly glTimer: GLTimer;\n private readonly _textureBindings: TextureBinding[] = [];\n private _removeEventListener?: () => void;\n\n // NB: Increase the size of these arrays when the maximum number of attributes used by any one shader increases.\n private readonly _curVertexAttribStates: VertexAttribState[] = [\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n ];\n private readonly _nextVertexAttribStates: VertexAttribState[] = [\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\n ];\n\n // The following are initialized immediately after the System is constructed.\n private _lineCodeTexture?: TextureHandle;\n private _noiseTexture?: TextureHandle;\n private _techniques?: Techniques;\n private _screenSpaceEffects?: ScreenSpaceEffects;\n public readonly debugShaderFiles: DebugShaderFile[] = [];\n\n public static get instance() { return IModelApp.renderSystem as System; }\n\n public get isValid(): boolean { return this.canvas !== undefined; }\n public get lineCodeTexture() { return this._lineCodeTexture; }\n public get noiseTexture() { return this._noiseTexture; }\n\n public get techniques() {\n assert(undefined !== this._techniques);\n return this._techniques;\n }\n\n public get screenSpaceEffects() {\n assert(undefined !== this._screenSpaceEffects);\n return this._screenSpaceEffects;\n }\n\n public override get maxTextureSize(): number { return this._capabilities.maxTextureSize; }\n public override get supportsCreateImageBitmap(): boolean { return this._capabilities.supportsCreateImageBitmap; }\n public get maxRenderType() { return this._capabilities.maxRenderType; }\n public get fragDepthDoesNotDisableEarlyZ() { return this._capabilities.driverBugs.fragDepthDoesNotDisableEarlyZ; }\n public get maxAntialiasSamples() { return this._capabilities.maxAntialiasSamples; }\n public get supportsNonPowerOf2Textures() { return this._capabilities.supportsNonPowerOf2Textures; }\n public get maxTexSizeAllow() { return this._capabilities.maxTexSizeAllow; }\n public get disjointTimerQuery() {\n const ext = this._capabilities.queryExtensionObject<any>(\"EXT_disjoint_timer_query_webgl2\");\n return ext ?? this._capabilities.queryExtensionObject<any>(\"EXT_disjoint_timer_query\");\n }\n\n public override get isMobile(): boolean { return this._capabilities.isMobile; }\n\n public setDrawBuffers(attachments: GLenum[]): void {\n this.context.drawBuffers(attachments);\n }\n\n public doIdleWork(): boolean {\n return this.techniques.idleCompileNextShader();\n }\n\n /** Return a Promise which when resolved indicates that all pending external textures have finished loading from the backend. */\n public override async waitForAllExternalTextures(): Promise<void> {\n const extTexLoader = ExternalTextureLoader.instance;\n if (extTexLoader.numActiveRequests < 1 && extTexLoader.numPendingRequests < 1)\n return Promise.resolve();\n const promise = new Promise<void>((resolve: any) => {\n extTexLoader.onTexturesLoaded.addOnce(() => {\n resolve();\n });\n });\n return promise;\n }\n\n public override get hasExternalTextureRequests(): boolean {\n const loader = ExternalTextureLoader.instance;\n return loader.numActiveRequests > 0 || loader.numPendingRequests > 0;\n }\n\n /** Attempt to create a WebGLRenderingContext, returning undefined if unsuccessful. */\n public static createContext(canvas: HTMLCanvasElement, useWebGL2: boolean, inputContextAttributes?: WebGLContextAttributes): WebGLContext | undefined {\n if (!useWebGL2)\n return undefined; // WebGL 2 is required.\n\n let contextAttributes: WebGLContextAttributes = { powerPreference: \"high-performance\" };\n if (undefined !== inputContextAttributes) {\n // NOTE: Order matters with spread operator - if caller wants to override powerPreference, he should be able to.\n contextAttributes = { ...contextAttributes, ...inputContextAttributes };\n }\n\n const context = canvas.getContext(\"webgl2\", contextAttributes);\n return context ?? undefined;\n }\n\n public static create(optionsIn?: RenderSystem.Options): System {\n const options: RenderSystem.Options = undefined !== optionsIn ? optionsIn : {};\n const canvas = document.createElement(\"canvas\");\n if (null === canvas)\n throw new IModelError(BentleyStatus.ERROR, \"Failed to obtain HTMLCanvasElement\");\n\n const context = this.createContext(canvas, true, optionsIn?.contextAttributes);\n if (undefined === context)\n throw new IModelError(BentleyStatus.ERROR, \"Failed to obtain WebGL context\");\n\n if (!(context instanceof WebGL2RenderingContext))\n throw new IModelError(BentleyStatus.ERROR, \"WebGL 2 support is required\");\n\n const capabilities = Capabilities.create(context, options.disabledExtensions);\n if (undefined === capabilities)\n throw new IModelError(BentleyStatus.ERROR, \"Failed to initialize rendering capabilities\");\n\n // set actual gl state to match desired state defaults\n context.depthFunc(GL.DepthFunc.Default); // LessOrEqual\n\n return new this(canvas, context, capabilities, options);\n }\n\n public get isDisposed(): boolean {\n return undefined === this._techniques\n && undefined === this._lineCodeTexture\n && undefined === this._noiseTexture\n && undefined === this._screenSpaceEffects;\n }\n\n // Note: FrameBuffers inside of the FrameBufferStack are not owned by the System, and are only used as a central storage device\n public dispose() {\n this._techniques = dispose(this._techniques);\n this._screenSpaceEffects = dispose(this._screenSpaceEffects);\n this._lineCodeTexture = dispose(this._lineCodeTexture);\n this._noiseTexture = dispose(this._noiseTexture);\n\n // We must attempt to dispose of each idmap in the resourceCache (if idmap is already disposed, has no effect)\n this.resourceCache.forEach((idMap: IdMap) => {\n dispose(idMap);\n });\n\n this.resourceCache.clear();\n if (undefined !== this._removeEventListener) {\n this._removeEventListener();\n this._removeEventListener = undefined;\n }\n }\n\n public override onInitialized(): void {\n this._techniques = Techniques.create(this.context);\n\n const noiseDim = 4;\n const noiseArr = new Uint8Array([152, 235, 94, 173, 219, 215, 115, 176, 73, 205, 43, 201, 10, 81, 205, 198]);\n this._noiseTexture = TextureHandle.createForData(noiseDim, noiseDim, noiseArr, false, GL.Texture.WrapMode.Repeat, GL.Texture.Format.Luminance);\n assert(undefined !== this._noiseTexture, \"System.noiseTexture not created.\");\n\n this._lineCodeTexture = TextureHandle.createForData(LineCode.size, LineCode.count, new Uint8Array(LineCode.lineCodeData), false, GL.Texture.WrapMode.Repeat, GL.Texture.Format.Luminance);\n assert(undefined !== this._lineCodeTexture, \"System.lineCodeTexture not created.\");\n\n this._screenSpaceEffects = new ScreenSpaceEffects();\n }\n\n public createTarget(canvas: HTMLCanvasElement): RenderTarget {\n return new OnScreenTarget(canvas);\n }\n\n public createOffscreenTarget(rect: ViewRect): RenderTarget {\n return new OffScreenTarget(rect);\n }\n\n public createGraphic(options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions): GraphicBuilder {\n return new PrimitiveBuilder(this, options);\n }\n\n public override createPlanarGrid(frustum: Frustum, grid: PlanarGridProps): RenderGraphic | undefined {\n return PlanarGridGeometry.create(frustum, grid, this);\n }\n\n public override createTerrainMesh(params: RealityMeshParams, transform?: Transform, disableTextureDisposal = false): RealityMeshGeometry | undefined {\n return RealityMeshGeometry.createForTerrain(params, transform, disableTextureDisposal);\n }\n\n public override createRealityMeshGraphic(params: RealityMeshGraphicParams, disableTextureDisposal = false): RenderGraphic | undefined {\n return RealityMeshGeometry.createGraphic(this, params, disableTextureDisposal);\n }\n public override createRealityMesh(realityMesh: RealityMeshParams, disableTextureDisposal = false): RenderGraphic | undefined {\n const geom = RealityMeshGeometry.createFromRealityMesh(realityMesh, disableTextureDisposal);\n return geom ? Primitive.create(geom) : undefined;\n }\n\n public override createMeshGeometry(params: MeshParams, viOrigin?: Point3d): MeshRenderGeometry | undefined {\n return MeshRenderGeometry.create(params, viOrigin);\n }\n\n public override createPolylineGeometry(params: PolylineParams, viOrigin?: Point3d): PolylineGeometry | undefined {\n return PolylineGeometry.create(params, viOrigin);\n }\n\n public override createPointStringGeometry(params: PointStringParams, viOrigin?: Point3d): PointStringGeometry | undefined {\n return PointStringGeometry.create(params, viOrigin);\n }\n\n public override createAreaPattern(params: PatternGraphicParams): PatternBuffers | undefined {\n return PatternBuffers.create(params);\n }\n\n public override createRenderGraphic(geometry: RenderGeometry, instances?: InstancedGraphicParams | RenderAreaPattern): RenderGraphic | undefined {\n if (!(geometry instanceof MeshRenderGeometry)) {\n if (geometry instanceof PolylineGeometry || geometry instanceof PointStringGeometry)\n return Primitive.create(geometry, instances);\n\n assert(false, \"Invalid RenderGeometry for System.createRenderGraphic\");\n return undefined;\n }\n\n assert(!instances || instances instanceof PatternBuffers || isInstancedGraphicParams(instances));\n return MeshGraphic.create(geometry, instances);\n }\n\n public override createPointCloud(args: PointCloudArgs): RenderGraphic | undefined {\n return Primitive.create(new PointCloudGeometry(args));\n }\n\n public createGraphicList(primitives: RenderGraphic[]): RenderGraphic {\n return new GraphicsArray(primitives);\n }\n\n public createGraphicBranch(branch: GraphicBranch, transform: Transform, options?: GraphicBranchOptions): RenderGraphic {\n return new Branch(branch, transform, undefined, options);\n }\n\n public override createAnimationTransformNode(graphic: RenderGraphic, nodeId: number): RenderGraphic {\n return new AnimationTransformBranch(graphic, nodeId);\n }\n\n public createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d, options?: BatchOptions): RenderGraphic {\n return new Batch(graphic, features, range, options);\n }\n\n public override createGraphicOwner(owned: RenderGraphic): RenderGraphicOwner {\n return new GraphicOwner(owned as Graphic);\n }\n\n public override createGraphicLayer(graphic: RenderGraphic, layerId: string) {\n return new Layer(graphic as Graphic, layerId);\n }\n\n public override createGraphicLayerContainer(graphic: RenderGraphic, drawAsOverlay: boolean, transparency: number, elevation: number) {\n return new LayerContainer(graphic as Graphic, drawAsOverlay, transparency, elevation);\n }\n\n public override createSkyBox(params: RenderSkyBoxParams): RenderGraphic | undefined {\n if (\"cube\" === params.type)\n return SkyCubePrimitive.create(SkyBoxQuadsGeometry.create(params.texture));\n\n return SkySpherePrimitive.create(SkySphereViewportQuadGeometry.createGeometry(params));\n }\n\n public override createScreenSpaceEffectBuilder(params: ScreenSpaceEffectBuilderParams): ScreenSpaceEffectBuilder {\n return createScreenSpaceEffectBuilder(params);\n }\n\n public applyRenderState(newState: RenderState) {\n newState.apply(this.currentRenderState);\n this.currentRenderState.copyFrom(newState);\n }\n\n public createDepthBuffer(width: number, height: number, numSamples: number = 1): DepthBuffer | undefined {\n // Note: The buffer/texture created here have ownership passed to the caller (system will not dispose of these)\n if (numSamples > 1)\n return RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.DEPTH24_STENCIL8, numSamples);\n else\n return TextureHandle.createForAttachment(width, height, GL.Texture.Format.DepthStencil, this.context.UNSIGNED_INT_24_8);\n }\n\n /** Returns the corresponding IdMap for an IModelConnection. Creates a new one if it doesn't exist. */\n public createIModelMap(imodel: IModelConnection): IdMap {\n let idMap = this.resourceCache.get(imodel);\n if (!idMap) {\n idMap = new IdMap(imodel);\n this.resourceCache.set(imodel, idMap);\n }\n return idMap;\n }\n\n /** Removes an IModelConnection-IdMap pairing from the system's resource cache. */\n private removeIModelMap(imodel: IModelConnection) {\n const idMap = this.resourceCache.get(imodel);\n if (idMap === undefined)\n return;\n dispose(idMap);\n this.resourceCache.delete(imodel);\n }\n\n /** Attempt to create a material for the given iModel using a set of material parameters. */\n // eslint-disable-next-line deprecation/deprecation\n public override createMaterial(params: RenderMaterial.Params, imodel: IModelConnection): RenderMaterial | undefined {\n const idMap = this.getIdMap(imodel);\n const material = idMap.getMaterial(params);\n return material;\n }\n\n public override createRenderMaterial(args: CreateRenderMaterialArgs): RenderMaterial | undefined {\n if (args.source) {\n const cached = this.findMaterial(args.source.id, args.source.iModel);\n if (cached)\n return cached;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n const params = new RenderMaterial.Params();\n params.alpha = args.alpha;\n if (undefined !== args.diffuse?.weight)\n params.diffuse = args.diffuse.weight;\n\n params.diffuseColor = getMaterialColor(args.diffuse?.color);\n\n if (args.specular) {\n params.specularColor = getMaterialColor(args.specular?.color);\n if (undefined !== args.specular.weight)\n params.specular = args.specular.weight;\n\n if (undefined !== args.specular.exponent)\n params.specularExponent = args.specular.exponent;\n }\n\n if (args.textureMapping) {\n params.textureMapping = new TextureMapping(args.textureMapping.texture, new TextureMapping.Params({\n textureMat2x3: args.textureMapping.transform,\n mapMode: args.textureMapping.mode,\n textureWeight: args.textureMapping.weight,\n worldMapping: args.textureMapping.worldMapping,\n }));\n params.textureMapping.normalMapParams = args.textureMapping.normalMapParams;\n }\n\n if (args.source) {\n params.key = args.source.id;\n return this.getIdMap(args.source.iModel).getMaterial(params);\n } else {\n return new Material(params);\n }\n }\n\n /** Using its key, search for an existing material of an open iModel. */\n public override findMaterial(key: string, imodel: IModelConnection): RenderMaterial | undefined {\n const idMap = this.resourceCache.get(imodel);\n if (!idMap)\n return undefined;\n return idMap.findMaterial(key);\n }\n\n private getTextureCacheInfo(args: CreateTextureArgs): TextureCacheInfo | undefined {\n const owner = undefined !== args.ownership && args.ownership !== \"external\" ? args.ownership : undefined;\n return owner ? { idMap: this.getIdMap(owner.iModel), key: owner.key } : undefined;\n }\n\n public override createTexture(args: CreateTextureArgs): RenderTexture | undefined {\n const info = this.getTextureCacheInfo(args);\n const existing = info?.idMap.findTexture(info?.key);\n if (existing)\n return existing;\n\n const type = args.type ?? RenderTexture.Type.Normal;\n const source = args.image.source;\n\n let handle;\n if (source instanceof ImageBuffer)\n handle = TextureHandle.createForImageBuffer(source, type);\n else if (source instanceof ImageBitmap)\n handle = TextureHandle.createForImageBitmap(source, type);\n else if (source instanceof HTMLImageElement)\n handle = TextureHandle.createForImage(source, type);\n else\n assert(false);\n\n if (!handle)\n return undefined;\n\n const texture = new Texture({ handle, type, ownership: args.ownership, transparency: args.image.transparency ?? TextureTransparency.Mixed });\n if (texture && info)\n info.idMap.addTexture(texture, info.key);\n\n return texture;\n }\n\n public override async createTextureFromSource(args: CreateTextureFromSourceArgs): Promise<RenderTexture | undefined> {\n if (typeof args.ownership !== \"object\")\n return super.createTextureFromSource(args);\n\n return this.getIdMap(args.ownership.iModel).getTextureFromImageSource(args, args.ownership.key);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public override createTextureFromElement(id: Id64String, imodel: IModelConnection, params: RenderTexture.Params, format: ImageSourceFormat): RenderTexture | undefined {\n return this.getIdMap(imodel).getTextureFromElement(id, imodel, params, format);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public override createTextureFromCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement, imodel: IModelConnection, params: RenderTexture.Params): RenderTexture | undefined {\n return this.getIdMap(imodel).getTextureFromCubeImages(posX, negX, posY, negY, posZ, negZ, params);\n }\n\n /** Attempt to create a texture using gradient symbology. */\n public override getGradientTexture(symb: Gradient.Symb, iModel?: IModelConnection): RenderTexture | undefined {\n let width = 0x100;\n let height = 0x100;\n if (symb.mode === Gradient.Mode.Thematic) {\n // Pixels in each row are identical, no point in having width > 1.\n width = 1;\n // We want maximum height to minimize bleeding of margin color.\n height = this.maxTextureSize;\n }\n\n const source = symb.produceImage({ width, height, includeThematicMargin: true });\n return this.createTexture({\n image: {\n source,\n transparency: ImageBufferFormat.Rgba === source.format ? TextureTransparency.Mixed : TextureTransparency.Opaque,\n },\n ownership: iModel ? { iModel, key: symb } : undefined,\n type: RenderTexture.Type.Normal,\n });\n }\n\n /** Using its key, search for an existing texture of an open iModel. */\n public override findTexture(key: TextureCacheKey, imodel: IModelConnection): RenderTexture | undefined {\n const idMap = this.resourceCache.get(imodel);\n if (!idMap)\n return undefined;\n\n return idMap.findTexture(key);\n }\n\n public override createClipVolume(clipVector: ClipVector): RenderClipVolume | undefined {\n return ClipVolume.create(clipVector);\n }\n public override createBackgroundMapDrape(drapedTree: TileTreeReference, mapTree: MapTileTreeReference) {\n return BackgroundMapDrape.create(drapedTree, mapTree);\n }\n\n protected constructor(canvas: HTMLCanvasElement, context: WebGL2RenderingContext, capabilities: Capabilities, options: RenderSystem.Options) {\n super(options);\n this.canvas = canvas;\n this.context = context;\n this._capabilities = capabilities;\n this.resourceCache = new Map<IModelConnection, IdMap>();\n this.glTimer = GLTimer.create(this);\n\n // Make this System a subscriber to the the IModelConnection onClose event\n this._removeEventListener = IModelConnection.onClose.addListener((imodel) => this.removeIModelMap(imodel));\n\n canvas.addEventListener(\"webglcontextlost\", async () => RenderSystem.contextLossHandler(), false);\n }\n\n /** Exposed strictly for tests. */\n public getIdMap(imodel: IModelConnection): IdMap {\n const map = this.resourceCache.get(imodel);\n return undefined !== map ? map : this.createIModelMap(imodel);\n }\n\n private bindTexture(unit: TextureUnit, target: GL.Texture.Target, texture: TextureBinding, makeActive: boolean): void {\n const index = unit - TextureUnit.Zero;\n if (this._textureBindings[index] === texture) {\n if (makeActive)\n this.context.activeTexture(unit);\n\n return;\n }\n\n this._textureBindings[index] = texture;\n this.context.activeTexture(unit);\n this.context.bindTexture(target, undefined !== texture ? texture : null);\n }\n\n /** Bind the specified texture to the specified unit. This may *or may not* make the texture *active* */\n public bindTexture2d(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.TwoDee, texture, false); }\n /** Bind the specified texture to the specified unit. This may *or may not* make the texture *active* */\n public bindTextureCubeMap(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.CubeMap, texture, false); }\n /** Bind the specified texture to the specified unit. This *always* makes the texture *active* */\n public activateTexture2d(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.TwoDee, texture, true); }\n /** Bind the specified texture to the specified unit. This *always* makes the texture *active* */\n public activateTextureCubeMap(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.CubeMap, texture, true); }\n\n // Ensure *something* is bound to suppress 'no texture assigned to unit x' warnings.\n public ensureSamplerBound(uniform: UniformHandle, unit: TextureUnit): void {\n this.lineCodeTexture!.bindSampler(uniform, unit);\n }\n\n public override get maxRealityImageryLayers() {\n return 6;\n }\n\n public disposeTexture(texture: WebGLTexture) {\n System.instance.context.deleteTexture(texture);\n for (let i = 0; i < this._textureBindings.length; i++) {\n if (this._textureBindings[i] === texture) {\n this._textureBindings[i] = undefined;\n break;\n }\n }\n }\n\n // System keeps track of current enabled state of vertex attribute arrays.\n // This prevents errors caused by leaving a vertex attrib array enabled after disposing of the buffer bound to it;\n // also prevents unnecessarily 'updating' the enabled state of a vertex attrib array when it hasn't actually changed.\n public enableVertexAttribArray(id: number, instanced: boolean): void {\n assert(id < this._nextVertexAttribStates.length, \"if you add new vertex attributes you must update array length\");\n assert(id < this._curVertexAttribStates.length, \"if you add new vertex attributes you must update array length\");\n\n this._nextVertexAttribStates[id] = instanced ? VertexAttribState.InstancedEnabled : VertexAttribState.Enabled;\n }\n\n public updateVertexAttribArrays(): void {\n const cur = this._curVertexAttribStates;\n const next = this._nextVertexAttribStates;\n const context = this.context;\n\n for (let i = 0; i < next.length; i++) {\n const oldState = cur[i];\n const newState = next[i];\n if (oldState !== newState) {\n // Update the enabled state if it changed.\n const wasEnabled = 0 !== (VertexAttribState.Enabled & oldState);\n const nowEnabled = 0 !== (VertexAttribState.Enabled & newState);\n if (wasEnabled !== nowEnabled) {\n if (nowEnabled) {\n context.enableVertexAttribArray(i);\n } else {\n context.disableVertexAttribArray(i);\n }\n }\n\n // Only update the divisor if the attribute is enabled.\n if (nowEnabled) {\n const wasInstanced = 0 !== (VertexAttribState.Instanced & oldState);\n const nowInstanced = 0 !== (VertexAttribState.Instanced & newState);\n if (wasInstanced !== nowInstanced) {\n this.vertexAttribDivisor(i, nowInstanced ? 1 : 0);\n }\n }\n\n cur[i] = newState;\n }\n\n // Set the attribute back to disabled, but preserve the divisor.\n next[i] &= ~VertexAttribState.Enabled;\n }\n }\n\n public vertexAttribDivisor(index: number, divisor: number) {\n this.context.vertexAttribDivisor(index, divisor);\n }\n\n public drawArrays(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void {\n if (0 !== numInstances) {\n this.context.drawArraysInstanced(type, first, count, numInstances);\n } else {\n this.context.drawArrays(type, first, count);\n }\n }\n\n public invalidateFrameBuffer(attachments: number[]): void {\n this.context.invalidateFramebuffer(this.context.FRAMEBUFFER, attachments);\n }\n\n public override enableDiagnostics(enable: RenderDiagnostics): void {\n Debug.printEnabled = RenderDiagnostics.None !== (enable & RenderDiagnostics.DebugOutput);\n Debug.evaluateEnabled = RenderDiagnostics.None !== (enable & RenderDiagnostics.WebGL);\n }\n\n // RenderSystemDebugControl\n public override get debugControl(): RenderSystemDebugControl { return this; }\n\n private _dpiAwareLOD?: boolean;\n public override get dpiAwareLOD(): boolean { return this._dpiAwareLOD ?? super.dpiAwareLOD; }\n public override set dpiAwareLOD(dpiAware: boolean) { this._dpiAwareLOD = dpiAware; }\n\n public loseContext(): boolean {\n const ext = this._capabilities.queryExtensionObject<WEBGL_lose_context>(\"WEBGL_lose_context\");\n if (undefined === ext)\n return false;\n\n ext.loseContext();\n return true;\n }\n\n public compileAllShaders(): boolean {\n return this.techniques.compileShaders();\n }\n\n public get isGLTimerSupported(): boolean { return this.glTimer.isSupported; }\n public set resultsCallback(callback: GLTimerResultCallback | undefined) {\n this.glTimer.resultsCallback = callback;\n }\n\n public override collectStatistics(stats: RenderMemory.Statistics): void {\n if (undefined !== this._lineCodeTexture)\n stats.addTexture(this._lineCodeTexture.bytesUsed);\n\n if (undefined !== this._noiseTexture)\n stats.addTexture(this._noiseTexture.bytesUsed);\n\n for (const idMap of this.resourceCache.values())\n idMap.collectStatistics(stats);\n }\n\n public setMaxAnisotropy(max: number | undefined): void {\n this._capabilities.setMaxAnisotropy(max, this.context);\n }\n}\n"]}
|