@itwin/core-frontend 5.2.0-dev.5 → 5.2.0-dev.7
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/lib/cjs/BackgroundMapGeometry.js +13 -13
- package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +2 -2
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CheckpointConnection.d.ts.map +1 -1
- package/lib/cjs/CheckpointConnection.js +3 -3
- package/lib/cjs/CheckpointConnection.js.map +1 -1
- package/lib/cjs/ContextRealityModelState.js.map +1 -1
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +7 -6
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/EmphasizeElements.d.ts.map +1 -1
- package/lib/cjs/EmphasizeElements.js +3 -1
- package/lib/cjs/EmphasizeElements.js.map +1 -1
- package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -1
- package/lib/cjs/EnvironmentDecorations.js +4 -0
- package/lib/cjs/EnvironmentDecorations.js.map +1 -1
- package/lib/cjs/FrustumAnimator.d.ts.map +1 -1
- package/lib/cjs/FrustumAnimator.js +3 -2
- package/lib/cjs/FrustumAnimator.js.map +1 -1
- package/lib/cjs/GlobeAnimator.d.ts.map +1 -1
- package/lib/cjs/GlobeAnimator.js +7 -6
- package/lib/cjs/GlobeAnimator.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +12 -7
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +2 -1
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +8 -9
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LinePlaneIntersect.d.ts.map +1 -1
- package/lib/cjs/LinePlaneIntersect.js +2 -0
- package/lib/cjs/LinePlaneIntersect.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +2 -1
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/Marker.d.ts.map +1 -1
- package/lib/cjs/Marker.js +4 -3
- package/lib/cjs/Marker.js.map +1 -1
- package/lib/cjs/ModelState.d.ts.map +1 -1
- package/lib/cjs/ModelState.js +2 -2
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +5 -4
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NativeAppLogger.d.ts.map +1 -1
- package/lib/cjs/NativeAppLogger.js +1 -0
- package/lib/cjs/NativeAppLogger.js.map +1 -1
- package/lib/cjs/PlanarClipMaskState.js +3 -3
- package/lib/cjs/PlanarClipMaskState.js.map +1 -1
- package/lib/cjs/SelectionSet.d.ts.map +1 -1
- package/lib/cjs/SelectionSet.js +1 -0
- package/lib/cjs/SelectionSet.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +5 -5
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +1 -1
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/Sprites.js +2 -2
- package/lib/cjs/Sprites.js.map +1 -1
- package/lib/cjs/TentativePoint.d.ts.map +1 -1
- package/lib/cjs/TentativePoint.js +10 -9
- package/lib/cjs/TentativePoint.js.map +1 -1
- package/lib/cjs/ViewCreator2d.js +1 -1
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewCreator3d.js +1 -1
- package/lib/cjs/ViewCreator3d.js.map +1 -1
- package/lib/cjs/ViewPose.d.ts.map +1 -1
- package/lib/cjs/ViewPose.js +4 -1
- package/lib/cjs/ViewPose.js.map +1 -1
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +17 -12
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/ViewingSpace.d.ts.map +1 -1
- package/lib/cjs/ViewingSpace.js +2 -0
- package/lib/cjs/ViewingSpace.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +17 -10
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/ImageUtil.d.ts.map +1 -1
- package/lib/cjs/common/ImageUtil.js +2 -1
- package/lib/cjs/common/ImageUtil.js.map +1 -1
- package/lib/cjs/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/GeometryAccumulator.js +4 -3
- package/lib/cjs/common/internal/render/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
- package/lib/cjs/common/internal/render/MeshBuilder.js +1 -1
- package/lib/cjs/common/internal/render/MeshBuilder.js.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableBuilder.js +16 -7
- package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
- package/lib/cjs/extension/ExtensionAdmin.js +2 -2
- package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
- package/lib/cjs/internal/GoogleMapsDecorator.js +1 -1
- package/lib/cjs/internal/GoogleMapsDecorator.js.map +1 -1
- package/lib/cjs/internal/ScriptUtils.js +1 -0
- package/lib/cjs/internal/ScriptUtils.js.map +1 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.js +2 -1
- package/lib/cjs/internal/render/UpsampleRealityMeshParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js +7 -2
- package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeBuffers.js +5 -3
- package/lib/cjs/internal/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeMap.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/AttributeMap.js +2 -0
- package/lib/cjs/internal/render/webgl/AttributeMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js +2 -2
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.js +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchState.js +2 -1
- package/lib/cjs/internal/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BranchUniforms.js +2 -2
- package/lib/cjs/internal/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/CachedGeometry.js +2 -2
- package/lib/cjs/internal/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ClipStack.js +1 -1
- package/lib/cjs/internal/render/webgl/ClipStack.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ColorInfo.js +1 -1
- package/lib/cjs/internal/render/webgl/ColorInfo.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Contours.js +3 -3
- package/lib/cjs/internal/render/webgl/Contours.js.map +1 -1
- package/lib/cjs/internal/render/webgl/EDL.js +18 -18
- package/lib/cjs/internal/render/webgl/EDL.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js +4 -4
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrameBuffer.js +3 -3
- package/lib/cjs/internal/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js +2 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/GLTimer.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/GLTimer.js +2 -0
- package/lib/cjs/internal/render/webgl/GLTimer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.js +2 -2
- package/lib/cjs/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MeshData.js +2 -2
- package/lib/cjs/internal/render/webgl/MeshData.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PerformanceMetrics.js +1 -1
- package/lib/cjs/internal/render/webgl/PerformanceMetrics.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js +7 -7
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarGrid.js +1 -1
- package/lib/cjs/internal/render/webgl/PlanarGrid.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js +6 -5
- package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/internal/render/webgl/PointCloud.js +1 -1
- package/lib/cjs/internal/render/webgl/PointCloud.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RealityMesh.js +1 -1
- package/lib/cjs/internal/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderBuffer.js +2 -2
- package/lib/cjs/internal/render/webgl/RenderBuffer.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +115 -85
- package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.js +11 -10
- package/lib/cjs/internal/render/webgl/ScratchDrawParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js +3 -3
- package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderProgram.js +3 -3
- package/lib/cjs/internal/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.js +2 -1
- package/lib/cjs/internal/render/webgl/ShadowUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js +6 -4
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/System.js +1 -1
- package/lib/cjs/internal/render/webgl/System.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Target.js +10 -7
- package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
- package/lib/cjs/internal/render/webgl/Texture.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Texture.js +10 -8
- package/lib/cjs/internal/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Animation.js +4 -2
- package/lib/cjs/internal/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.js +2 -1
- package/lib/cjs/internal/render/webgl/glsl/Color.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Composite.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js +3 -2
- package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js +3 -3
- package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js +4 -3
- package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +8 -8
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Surface.js +10 -10
- package/lib/cjs/internal/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Vertex.js +2 -2
- package/lib/cjs/internal/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/internal/tile/B3dmReader.d.ts.map +1 -1
- package/lib/cjs/internal/tile/B3dmReader.js +1 -1
- package/lib/cjs/internal/tile/B3dmReader.js.map +1 -1
- package/lib/cjs/internal/tile/FetchCloudStorage.js +1 -1
- package/lib/cjs/internal/tile/FetchCloudStorage.js.map +1 -1
- package/lib/cjs/internal/tile/LRUTileList.d.ts.map +1 -1
- package/lib/cjs/internal/tile/LRUTileList.js +4 -0
- package/lib/cjs/internal/tile/LRUTileList.js.map +1 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
- package/lib/cjs/internal/tile/OPCFormatInterpreter.js +4 -4
- package/lib/cjs/internal/tile/OPCFormatInterpreter.js.map +1 -1
- package/lib/cjs/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/OrbitGtTileTree.js +2 -2
- package/lib/cjs/internal/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.js +3 -3
- package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityTileLoader.js +3 -0
- package/lib/cjs/internal/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js +3 -3
- package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/cjs/internal/tile/TileUserSet.d.ts.map +1 -1
- package/lib/cjs/internal/tile/TileUserSet.js +4 -0
- package/lib/cjs/internal/tile/TileUserSet.js.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGISTileMap.js +1 -1
- package/lib/cjs/internal/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ArcGisUtilities.js +4 -0
- package/lib/cjs/internal/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
- package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/MapTileAvailability.js +5 -2
- package/lib/cjs/internal/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js +3 -2
- package/lib/cjs/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/properties/FormattedQuantityDescription.d.ts.map +1 -1
- package/lib/cjs/properties/FormattedQuantityDescription.js +2 -0
- package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +5 -3
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +5 -2
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +54 -16
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTile.js +2 -2
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +5 -5
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +2 -1
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +9 -1
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +10 -8
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +8 -7
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js +2 -1
- package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/cjs/tools/Tool.js +1 -1
- package/lib/cjs/tools/Tool.js.map +1 -1
- package/lib/esm/BackgroundMapGeometry.js +14 -14
- package/lib/esm/BackgroundMapGeometry.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js +2 -2
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CheckpointConnection.d.ts.map +1 -1
- package/lib/esm/CheckpointConnection.js +4 -4
- package/lib/esm/CheckpointConnection.js.map +1 -1
- package/lib/esm/ContextRealityModelState.js.map +1 -1
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +8 -7
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/EmphasizeElements.d.ts.map +1 -1
- package/lib/esm/EmphasizeElements.js +3 -1
- package/lib/esm/EmphasizeElements.js.map +1 -1
- package/lib/esm/EnvironmentDecorations.d.ts.map +1 -1
- package/lib/esm/EnvironmentDecorations.js +4 -0
- package/lib/esm/EnvironmentDecorations.js.map +1 -1
- package/lib/esm/FrustumAnimator.d.ts.map +1 -1
- package/lib/esm/FrustumAnimator.js +3 -2
- package/lib/esm/FrustumAnimator.js.map +1 -1
- package/lib/esm/GlobeAnimator.d.ts.map +1 -1
- package/lib/esm/GlobeAnimator.js +7 -6
- package/lib/esm/GlobeAnimator.js.map +1 -1
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +12 -7
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +4 -3
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +9 -10
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +2 -2
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/LinePlaneIntersect.d.ts.map +1 -1
- package/lib/esm/LinePlaneIntersect.js +2 -0
- package/lib/esm/LinePlaneIntersect.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +2 -1
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/Marker.d.ts.map +1 -1
- package/lib/esm/Marker.js +5 -4
- package/lib/esm/Marker.js.map +1 -1
- package/lib/esm/ModelState.d.ts.map +1 -1
- package/lib/esm/ModelState.js +3 -3
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +5 -4
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NativeAppLogger.d.ts.map +1 -1
- package/lib/esm/NativeAppLogger.js +1 -0
- package/lib/esm/NativeAppLogger.js.map +1 -1
- package/lib/esm/PlanarClipMaskState.js +3 -3
- package/lib/esm/PlanarClipMaskState.js.map +1 -1
- package/lib/esm/SelectionSet.d.ts.map +1 -1
- package/lib/esm/SelectionSet.js +2 -1
- package/lib/esm/SelectionSet.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +6 -6
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +2 -2
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/Sprites.js +2 -2
- package/lib/esm/Sprites.js.map +1 -1
- package/lib/esm/TentativePoint.d.ts.map +1 -1
- package/lib/esm/TentativePoint.js +10 -9
- package/lib/esm/TentativePoint.js.map +1 -1
- package/lib/esm/ViewCreator2d.js +1 -1
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewCreator3d.js +1 -1
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/ViewPose.d.ts.map +1 -1
- package/lib/esm/ViewPose.js +4 -1
- package/lib/esm/ViewPose.js.map +1 -1
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +18 -13
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/ViewingSpace.d.ts.map +1 -1
- package/lib/esm/ViewingSpace.js +2 -0
- package/lib/esm/ViewingSpace.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +18 -11
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/ImageUtil.d.ts.map +1 -1
- package/lib/esm/common/ImageUtil.js +2 -1
- package/lib/esm/common/ImageUtil.js.map +1 -1
- package/lib/esm/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
- package/lib/esm/common/internal/render/GeometryAccumulator.js +4 -3
- package/lib/esm/common/internal/render/GeometryAccumulator.js.map +1 -1
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
- package/lib/esm/common/internal/render/MeshBuilder.js +2 -2
- package/lib/esm/common/internal/render/MeshBuilder.js.map +1 -1
- package/lib/esm/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
- package/lib/esm/common/internal/render/VertexTableBuilder.js +17 -8
- package/lib/esm/common/internal/render/VertexTableBuilder.js.map +1 -1
- package/lib/esm/extension/ExtensionAdmin.js +2 -2
- package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
- package/lib/esm/internal/GoogleMapsDecorator.js +1 -1
- package/lib/esm/internal/GoogleMapsDecorator.js.map +1 -1
- package/lib/esm/internal/ScriptUtils.js +1 -0
- package/lib/esm/internal/ScriptUtils.js.map +1 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.js +2 -1
- package/lib/esm/internal/render/UpsampleRealityMeshParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.js +7 -2
- package/lib/esm/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeBuffers.js +5 -3
- package/lib/esm/internal/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeMap.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/AttributeMap.js +2 -0
- package/lib/esm/internal/render/webgl/AttributeMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.js +3 -3
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.js +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BranchState.js +2 -1
- package/lib/esm/internal/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/internal/render/webgl/BranchUniforms.js +3 -3
- package/lib/esm/internal/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/CachedGeometry.js +3 -3
- package/lib/esm/internal/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/internal/render/webgl/ClipStack.js +1 -1
- package/lib/esm/internal/render/webgl/ClipStack.js.map +1 -1
- package/lib/esm/internal/render/webgl/ColorInfo.js +2 -2
- package/lib/esm/internal/render/webgl/ColorInfo.js.map +1 -1
- package/lib/esm/internal/render/webgl/Contours.js +4 -4
- package/lib/esm/internal/render/webgl/Contours.js.map +1 -1
- package/lib/esm/internal/render/webgl/EDL.js +19 -19
- package/lib/esm/internal/render/webgl/EDL.js.map +1 -1
- package/lib/esm/internal/render/webgl/FeatureOverrides.js +5 -5
- package/lib/esm/internal/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrameBuffer.js +4 -4
- package/lib/esm/internal/render/webgl/FrameBuffer.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js +2 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/GLTimer.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/GLTimer.js +2 -0
- package/lib/esm/internal/render/webgl/GLTimer.js.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.js +3 -3
- package/lib/esm/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/MeshData.js +3 -3
- package/lib/esm/internal/render/webgl/MeshData.js.map +1 -1
- package/lib/esm/internal/render/webgl/PerformanceMetrics.js +1 -1
- package/lib/esm/internal/render/webgl/PerformanceMetrics.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.js +8 -8
- package/lib/esm/internal/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarGrid.js +2 -2
- package/lib/esm/internal/render/webgl/PlanarGrid.js.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.js +6 -5
- package/lib/esm/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/internal/render/webgl/PointCloud.js +2 -2
- package/lib/esm/internal/render/webgl/PointCloud.js.map +1 -1
- package/lib/esm/internal/render/webgl/RealityMesh.js +2 -2
- package/lib/esm/internal/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/internal/render/webgl/RenderBuffer.js +3 -3
- package/lib/esm/internal/render/webgl/RenderBuffer.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +116 -86
- package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ScratchDrawParams.js +11 -10
- package/lib/esm/internal/render/webgl/ScratchDrawParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js +4 -4
- package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderProgram.js +4 -4
- package/lib/esm/internal/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.js +2 -1
- package/lib/esm/internal/render/webgl/ShadowUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.js +7 -5
- package/lib/esm/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/System.js +2 -2
- package/lib/esm/internal/render/webgl/System.js.map +1 -1
- package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Target.js +11 -8
- package/lib/esm/internal/render/webgl/Target.js.map +1 -1
- package/lib/esm/internal/render/webgl/Texture.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Texture.js +11 -9
- package/lib/esm/internal/render/webgl/Texture.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Animation.js +5 -3
- package/lib/esm/internal/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Color.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Color.js +2 -1
- package/lib/esm/internal/render/webgl/glsl/Color.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Composite.js +2 -2
- package/lib/esm/internal/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.js +3 -2
- package/lib/esm/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js +4 -4
- package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js +4 -3
- package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +9 -9
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Surface.js +11 -11
- package/lib/esm/internal/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Vertex.js +3 -3
- package/lib/esm/internal/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/internal/tile/B3dmReader.d.ts.map +1 -1
- package/lib/esm/internal/tile/B3dmReader.js +2 -2
- package/lib/esm/internal/tile/B3dmReader.js.map +1 -1
- package/lib/esm/internal/tile/FetchCloudStorage.js +1 -1
- package/lib/esm/internal/tile/FetchCloudStorage.js.map +1 -1
- package/lib/esm/internal/tile/LRUTileList.d.ts.map +1 -1
- package/lib/esm/internal/tile/LRUTileList.js +4 -0
- package/lib/esm/internal/tile/LRUTileList.js.map +1 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
- package/lib/esm/internal/tile/OPCFormatInterpreter.js +5 -5
- package/lib/esm/internal/tile/OPCFormatInterpreter.js.map +1 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/OrbitGtTileTree.js +3 -3
- package/lib/esm/internal/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.js +4 -4
- package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityTileLoader.js +3 -0
- package/lib/esm/internal/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js +4 -4
- package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/internal/tile/TileUserSet.d.ts.map +1 -1
- package/lib/esm/internal/tile/TileUserSet.js +4 -0
- package/lib/esm/internal/tile/TileUserSet.js.map +1 -1
- package/lib/esm/internal/tile/map/ArcGISTileMap.js +1 -1
- package/lib/esm/internal/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ArcGisUtilities.js +4 -0
- package/lib/esm/internal/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js +3 -3
- package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -2
- package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/MapTileAvailability.js +6 -3
- package/lib/esm/internal/tile/map/MapTileAvailability.js.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/WmtsCapabilities.js +3 -2
- package/lib/esm/internal/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/properties/FormattedQuantityDescription.d.ts.map +1 -1
- package/lib/esm/properties/FormattedQuantityDescription.js +2 -0
- package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +5 -3
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +5 -2
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +55 -17
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts.map +1 -1
- package/lib/esm/tile/RealityTile.js +3 -3
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +6 -6
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +2 -1
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +2 -2
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +2 -2
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +10 -2
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +11 -9
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +9 -8
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js +2 -1
- package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
- package/lib/esm/tools/Tool.js +2 -2
- package/lib/esm/tools/Tool.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +20 -20
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module WebGL
|
|
7
7
|
*/
|
|
8
|
-
import { assert, BeEvent, dispose } from "@itwin/core-bentley";
|
|
8
|
+
import { assert, BeEvent, dispose, expectDefined, expectNotNull } from "@itwin/core-bentley";
|
|
9
9
|
import { ImageBuffer, ImageBufferFormat, ImageSource, isPowerOfTwo, nextHighestPowerOfTwo, RenderTexture, TextureTransparency, } from "@itwin/core-common";
|
|
10
10
|
import { getImageSourceMimeType, imageBufferToPngDataUrl, imageElementFromImageSource, openImageDataUrlInNewWindow } from "../../../common/ImageUtil";
|
|
11
11
|
import { IModelApp } from "../../../IModelApp";
|
|
@@ -28,7 +28,7 @@ function computeBytesUsed(width, height, format, dataType) {
|
|
|
28
28
|
/** Associate texture data with a WebGLTexture from a canvas, image, OR a bitmap. */
|
|
29
29
|
function loadTexture2DImageData(handle, params, bytes, source) {
|
|
30
30
|
handle.bytesUsed = undefined !== bytes ? bytes.byteLength : computeBytesUsed(params.width, params.height, params.format, params.dataType);
|
|
31
|
-
const tex = handle.getHandle();
|
|
31
|
+
const tex = expectDefined(handle.getHandle());
|
|
32
32
|
const gl = System.instance.context;
|
|
33
33
|
// Use tightly packed data
|
|
34
34
|
gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
|
|
@@ -76,7 +76,7 @@ function loadTextureFromBytes(handle, params, bytes) {
|
|
|
76
76
|
/** Associate cube texture data with a WebGLTexture from an image. */
|
|
77
77
|
function loadTextureCubeImageData(handle, params, images) {
|
|
78
78
|
handle.bytesUsed = computeBytesUsed(params.dim * 6, params.dim, params.format, params.dataType);
|
|
79
|
-
const tex = handle.getHandle();
|
|
79
|
+
const tex = expectDefined(handle.getHandle());
|
|
80
80
|
const gl = System.instance.context;
|
|
81
81
|
// Use tightly packed data
|
|
82
82
|
gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
|
|
@@ -187,7 +187,7 @@ class Texture2DCreateParams {
|
|
|
187
187
|
const canvas = document.createElement("canvas");
|
|
188
188
|
canvas.width = targetWidth;
|
|
189
189
|
canvas.height = targetHeight;
|
|
190
|
-
const context = canvas.getContext("2d");
|
|
190
|
+
const context = expectNotNull(canvas.getContext("2d"));
|
|
191
191
|
context.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
192
192
|
element = canvas;
|
|
193
193
|
}
|
|
@@ -219,7 +219,7 @@ class Texture2DCreateParams {
|
|
|
219
219
|
const canvas = document.createElement("canvas");
|
|
220
220
|
canvas.width = targetWidth;
|
|
221
221
|
canvas.height = targetHeight;
|
|
222
|
-
const context = canvas.getContext("2d");
|
|
222
|
+
const context = expectNotNull(canvas.getContext("2d"));
|
|
223
223
|
context.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
224
224
|
source = canvas;
|
|
225
225
|
}
|
|
@@ -282,7 +282,7 @@ export class TextureHandle {
|
|
|
282
282
|
get isDisposed() { return this._glTexture === undefined; }
|
|
283
283
|
[Symbol.dispose]() {
|
|
284
284
|
if (!this.isDisposed) {
|
|
285
|
-
System.instance.disposeTexture(this._glTexture);
|
|
285
|
+
System.instance.disposeTexture(expectDefined(this._glTexture));
|
|
286
286
|
this._glTexture = undefined;
|
|
287
287
|
this.bytesUsed = 0;
|
|
288
288
|
}
|
|
@@ -322,7 +322,7 @@ export class TextureHandle {
|
|
|
322
322
|
const gl = System.instance.context;
|
|
323
323
|
const fbo = gl.createFramebuffer();
|
|
324
324
|
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
|
|
325
|
-
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.getHandle(), 0);
|
|
325
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, expectDefined(this.getHandle()), 0);
|
|
326
326
|
if (gl.FRAMEBUFFER_COMPLETE === gl.checkFramebufferStatus(gl.FRAMEBUFFER)) {
|
|
327
327
|
const w = this.width;
|
|
328
328
|
const h = this.height;
|
|
@@ -330,7 +330,7 @@ export class TextureHandle {
|
|
|
330
330
|
gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
|
|
331
331
|
const buffer = ImageBuffer.create(pixels, ImageBufferFormat.Rgba, w);
|
|
332
332
|
const url = imageBufferToPngDataUrl(buffer, false);
|
|
333
|
-
openImageDataUrlInNewWindow(url, "Classifiers");
|
|
333
|
+
openImageDataUrlInNewWindow(expectDefined(url), "Classifiers");
|
|
334
334
|
}
|
|
335
335
|
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
336
336
|
gl.deleteFramebuffer(fbo);
|
|
@@ -384,7 +384,7 @@ export class Texture2DHandle extends TextureHandle {
|
|
|
384
384
|
/** Replace the 2D texture contents. */
|
|
385
385
|
replaceTextureData(data) {
|
|
386
386
|
assert((GL.Texture.DataType.Float === this._dataType) === (data instanceof Float32Array));
|
|
387
|
-
const tex = this.getHandle();
|
|
387
|
+
const tex = expectDefined(this.getHandle());
|
|
388
388
|
if (undefined === tex)
|
|
389
389
|
return false;
|
|
390
390
|
const gl = System.instance.context;
|
|
@@ -467,6 +467,8 @@ export class ExternalTextureLoader {
|
|
|
467
467
|
async _nextRequest(prevReq) {
|
|
468
468
|
this._activeRequests.splice(this._activeRequests.indexOf(prevReq), 1);
|
|
469
469
|
if (this._activeRequests.length < this._maxActiveRequests && this._pendingRequests.length > 0) {
|
|
470
|
+
// length is verified to be > 0, so shift will not return undefined
|
|
471
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
470
472
|
const req = this._pendingRequests.shift();
|
|
471
473
|
await this._activateRequest(req);
|
|
472
474
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Texture.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/Texture.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, BeEvent, dispose, Id64String } from \"@itwin/core-bentley\";\nimport {\n ImageBuffer, ImageBufferFormat, ImageSource, ImageSourceFormat, isPowerOfTwo, nextHighestPowerOfTwo, RenderTexture, TextureData, TextureTransparency,\n} from \"@itwin/core-common\";\nimport { getImageSourceMimeType, imageBufferToPngDataUrl, imageElementFromImageSource, openImageDataUrlInNewWindow } from \"../../../common/ImageUtil\";\nimport { IModelConnection } from \"../../../IModelConnection\";\nimport { IModelApp } from \"../../../IModelApp\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { GL } from \"./GL\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { TextureUnit } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { TextureOwnership } from \"../../../render/CreateTextureArgs\";\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\n\n/** @internal */\nexport type Texture2DData = Uint8Array | Float32Array;\n\nfunction computeBytesUsed(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType): number {\n const bytesPerComponent = GL.Texture.DataType.UnsignedByte === dataType ? 1 : 4;\n let componentsPerPixel = 1;\n switch (format) {\n case GL.Texture.Format.Rgb:\n componentsPerPixel = 3;\n break;\n case GL.Texture.Format.Rgba:\n componentsPerPixel = 4;\n break;\n }\n\n return width * height * componentsPerPixel * bytesPerComponent;\n}\n\n/** Associate texture data with a WebGLTexture from a canvas, image, OR a bitmap. */\nfunction loadTexture2DImageData(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData, source?: TexImageSource): void {\n handle.bytesUsed = undefined !== bytes ? bytes.byteLength : computeBytesUsed(params.width, params.height, params.format, params.dataType);\n\n const tex = handle.getHandle()!;\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n\n // Figure out the internal format. For all but WebGL2 float/half-float datatypes it is just same as format.\n // TODO: probably need to just support internal format types in Texture2DCreateParams.\n let internalFormat = params.format;\n const context2 = System.instance.context;\n if (GL.Texture.Format.Rgba === params.format) {\n if (GL.Texture.DataType.Float === params.dataType)\n internalFormat = context2.RGBA32F;\n else if (context2.HALF_FLOAT === params.dataType)\n internalFormat = context2.RGBA16F;\n } else if (GL.Texture.Format.DepthStencil === params.format)\n internalFormat = context2.DEPTH24_STENCIL8;\n\n // send the texture data\n if (undefined !== source) {\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.format, params.dataType, source);\n } else {\n const pixelData = undefined !== bytes ? bytes : null;\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.width, params.height, 0, params.format, params.dataType, pixelData);\n }\n\n if (params.useMipMaps) {\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n } else {\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n }\n if (params.anisotropicFilter) {\n System.instance.setMaxAnisotropy(params.anisotropicFilter);\n }\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, params.wrapMode);\n\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n}\n\nfunction loadTextureFromBytes(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData): void {\n loadTexture2DImageData(handle, params, bytes);\n}\n\n/** Associate cube texture data with a WebGLTexture from an image. */\nfunction loadTextureCubeImageData(handle: TextureHandle, params: TextureCubeCreateParams, images: TexImageSource[]): void {\n handle.bytesUsed = computeBytesUsed(params.dim * 6, params.dim, params.format, params.dataType);\n\n const tex = handle.getHandle()!;\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTextureCubeMap(TextureUnit.Zero, tex);\n\n const cubeTargets: number[] = [GL.Texture.Target.CubeMapPositiveX, GL.Texture.Target.CubeMapNegativeX, GL.Texture.Target.CubeMapPositiveY, GL.Texture.Target.CubeMapNegativeY, GL.Texture.Target.CubeMapPositiveZ, GL.Texture.Target.CubeMapNegativeZ];\n\n for (let i = 0; i < 6; i++) {\n gl.texImage2D(cubeTargets[i], 0, params.format, params.format, params.dataType, images[i]);\n }\n\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_T, params.wrapMode);\n // gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_R, params.wrapMode); // Unavailable in GLES2\n\n System.instance.bindTextureCubeMap(TextureUnit.Zero, undefined);\n}\n\ntype TextureFlag = true | undefined;\ntype TextureAnisotropicFilter = number | undefined;\ntype Load2DImageData = (handle: TextureHandle, params: Texture2DCreateParams) => void;\ntype LoadCubeImageData = (handle: TextureHandle, params: TextureCubeCreateParams) => void;\n\ninterface TextureImageProperties {\n wrapMode: GL.Texture.WrapMode;\n useMipMaps: TextureFlag;\n interpolate: TextureFlag;\n format: GL.Texture.Format;\n anisotropicFilter: TextureAnisotropicFilter;\n}\n\n/** @internal */\nexport interface TextureParams {\n type: RenderTexture.Type;\n ownership?: TextureOwnership;\n transparency: TextureTransparency;\n handle: TextureHandle;\n}\n\n/** Wrapper class for a WebGL texture handle and parameters specific to an individual texture.\n * @internal\n */\nexport class Texture extends RenderTexture implements WebGLDisposable {\n public readonly texture: TextureHandle;\n public readonly ownership?: TextureOwnership;\n public transparency: TextureTransparency;\n\n public get bytesUsed(): number { return this.texture.bytesUsed; }\n public get hasOwner(): boolean { return undefined !== this.ownership; }\n public get key(): string | undefined {\n return typeof this.ownership !== \"string\" && typeof this.ownership?.key === \"string\" ? this.ownership.key : undefined;\n }\n\n public constructor(params: TextureParams) {\n super(params.type);\n this.ownership = params.ownership;\n this.texture = params.handle;\n this.transparency = params.handle.format === GL.Texture.Format.Rgba ? params.transparency : TextureTransparency.Opaque;\n }\n\n public get isDisposed(): boolean { return this.texture.isDisposed; }\n\n /** Free this object in the WebGL wrapper. */\n public dispose() {\n dispose(this.texture);\n }\n}\n\nfunction getDataType(data: Texture2DData): GL.Texture.DataType {\n return data instanceof Float32Array ? GL.Texture.DataType.Float : GL.Texture.DataType.UnsignedByte;\n}\n\n/** Parameters used internally to define how to create a texture for use with WebGL. */\nclass Texture2DCreateParams {\n private constructor(\n public width: number,\n public height: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: Load2DImageData,\n public useMipMaps?: TextureFlag,\n public interpolate?: TextureFlag,\n public anisotropicFilter?: TextureAnisotropicFilter,\n public dataBytes?: Uint8Array) { }\n\n public static createForData(width: number, height: number, data: Texture2DData, preserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n const bytes = (preserveData && data instanceof Uint8Array) ? data : undefined;\n return new Texture2DCreateParams(width, height, format, getDataType(data), wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, data), undefined, undefined, undefined, bytes);\n }\n\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n if (ImageBufferFormat.Rgb === image.format)\n props.format = GL.Texture.Format.Rgb;\n\n return new Texture2DCreateParams(image.width, image.height, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, image.data), props.useMipMaps, props.interpolate);\n }\n\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return new Texture2DCreateParams(width, height, format, dataType, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params), undefined, undefined);\n }\n\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.naturalWidth;\n let targetHeight = image.naturalHeight;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // Cap texture dimensions to system WebGL capabilities\n const maxTexSize = System.instance.maxTextureSize;\n targetWidth = Math.min(targetWidth, maxTexSize);\n targetHeight = Math.min(targetHeight, maxTexSize);\n\n let element: TexImageSource = image;\n if (targetWidth !== image.naturalWidth || targetHeight !== image.naturalHeight) {\n // Resize so dimensions are powers-of-two\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n element = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, element), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.width;\n let targetHeight = image.height;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // If we have to resize, use a canvas\n let source: TexImageSource = image;\n if (image.width !== targetWidth || image.height !== targetHeight) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n source = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, source), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n private static getImageProperties(type: RenderTexture.Type): TextureImageProperties {\n const isSky = RenderTexture.Type.SkyBox === type;\n const isTile = RenderTexture.Type.TileSection === type;\n const isThematic = RenderTexture.Type.ThematicGradient === type;\n const isFilteredTile = RenderTexture.Type.FilteredTileSection === type;\n const maxAnisotropicFilterLevel = 16;\n\n const wrapMode = RenderTexture.Type.Normal === type ? GL.Texture.WrapMode.Repeat : GL.Texture.WrapMode.ClampToEdge;\n const useMipMaps: TextureFlag = (!isSky && !isTile && !isFilteredTile && !isThematic) ? true : undefined;\n const interpolate: TextureFlag = isThematic ? undefined : true;\n const anisotropicFilter = isFilteredTile ? maxAnisotropicFilterLevel : undefined;\n\n // Always use RGBA. RGB is much slower and almost certainly does not actually save any GPU memory.\n const format = GL.Texture.Format.Rgba;\n\n return { format, wrapMode, useMipMaps, interpolate, anisotropicFilter };\n }\n\n public static readonly placeholderParams = new Texture2DCreateParams(1, 1, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (_tex: TextureHandle, _params: Texture2DCreateParams) => undefined);\n}\n\nclass TextureCubeCreateParams {\n private constructor(\n public dim: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: LoadCubeImageData) { }\n\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement): TextureCubeCreateParams | undefined {\n const targetDim = posX.naturalWidth;\n\n if (posX.naturalHeight !== targetDim) // Cube texture dimensions must match (width must equal height)\n return undefined;\n\n const images: HTMLImageElement[] = [posX, negX, posY, negY, posZ, negZ];\n\n for (let i = 1; i < images.length; i++) { // Dimensions of all six sides must match each other\n if (images[i].naturalWidth !== targetDim || images[i].naturalHeight !== targetDim)\n return undefined;\n }\n\n return new TextureCubeCreateParams(targetDim, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: TextureCubeCreateParams) => loadTextureCubeImageData(tex, params, images));\n }\n}\n\n/** Wraps a WebGLTextureHandle\n * @internal\n */\nexport abstract class TextureHandle implements WebGLDisposable {\n protected _glTexture?: WebGLTexture;\n protected _bytesUsed = 0;\n\n public abstract get width(): number;\n public abstract get height(): number;\n public abstract get format(): GL.Texture.Format;\n public abstract get dataType(): GL.Texture.DataType;\n public abstract get dataBytes(): Uint8Array | undefined;\n public get bytesUsed(): number { return this._bytesUsed; }\n public set bytesUsed(bytesUsed: number) {\n // assert(0 === this.bytesUsed);\n this._bytesUsed = bytesUsed;\n }\n\n /** Get the WebGLTexture for this TextureHandle. */\n public getHandle(): WebGLTexture | undefined { return this._glTexture; }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public abstract bind(_texUnit: TextureUnit): boolean;\n\n /** Bind this texture to a uniform sampler. */\n public abstract bindSampler(_uniform: UniformHandle, _unit: TextureUnit): void;\n\n public get isDisposed(): boolean { return this._glTexture === undefined; }\n\n public [Symbol.dispose]() {\n if (!this.isDisposed) {\n System.instance.disposeTexture(this._glTexture!);\n this._glTexture = undefined;\n this.bytesUsed = 0;\n }\n }\n\n /** Create a 2D texture for use as a color attachment for rendering */\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return Texture2DHandle.createForAttachment(width, height, format, dataType);\n }\n\n /** Create a 2D texture to hold non-image data */\n public static createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return Texture2DHandle.createForData(width, height, data, wantPreserveData, wrapMode, format);\n }\n\n /** Create a 2D texture from a bitmap */\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBuffer(image, type);\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return Texture2DHandle.createForImage(image, type);\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBitmap(image, type);\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n return TextureCubeHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n }\n\n public static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n return Texture2DHandle.createForElement(id, imodel, type, format, onLoaded);\n }\n\n protected constructor(glTexture: WebGLTexture) {\n this._glTexture = glTexture;\n }\n\n /** For debugging purposes, open a new window containing this texture as an image. */\n public showDebugImage(): void {\n const gl = System.instance.context;\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.getHandle()!, 0);\n if (gl.FRAMEBUFFER_COMPLETE === gl.checkFramebufferStatus(gl.FRAMEBUFFER)) {\n const w = this.width;\n const h = this.height;\n const pixels = new Uint8Array(w * h * 4);\n gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n const buffer = ImageBuffer.create(pixels, ImageBufferFormat.Rgba, w);\n const url = imageBufferToPngDataUrl(buffer, false);\n openImageDataUrlInNewWindow(url!, \"Classifiers\");\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.deleteFramebuffer(fbo);\n }\n}\n\n/** @internal */\nexport class Texture2DHandle extends TextureHandle {\n private _width: number;\n private _height: number;\n private _format: GL.Texture.Format;\n private _dataType: GL.Texture.DataType;\n private _dataBytes?: Uint8Array;\n\n public get width(): number { return this._width; }\n public get height(): number { return this._height; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return this._dataBytes; }\n\n /** Bind specified texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTexture2d(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n Texture2DHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n Texture2DHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n /** Update the 2D texture contents. */\n public update(updater: Texture2DDataUpdater): boolean {\n if (0 === this.width || 0 === this.height || undefined === this._dataBytes || 0 === this._dataBytes.length) {\n assert(false);\n return false;\n }\n\n if (!updater.modified)\n return false;\n\n return this.replaceTextureData(this._dataBytes);\n }\n\n /** Replace the 2D texture contents. */\n public replaceTextureData(data: Texture2DData): boolean {\n assert((GL.Texture.DataType.Float === this._dataType) === (data instanceof Float32Array));\n\n const tex = this.getHandle()!;\n if (undefined === tex)\n return false;\n\n const gl = System.instance.context;\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Go through System to ensure we don't interfere with currently-bound textures!\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.width, this.height, this._format, this._dataType, data);\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n\n return true;\n }\n\n private static create(params: Texture2DCreateParams): Texture2DHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new Texture2DHandle(glTex, params) : undefined;\n }\n\n /** Create a texture for use as a color attachment for rendering */\n public static override createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return this.create(Texture2DCreateParams.createForAttachment(width, height, format, dataType));\n }\n\n /** Create a texture to hold non-image data */\n public static override createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return this.create(Texture2DCreateParams.createForData(width, height, data, wantPreserveData, wrapMode, format));\n }\n\n /** Create a texture from a bitmap */\n public static override createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n if (RenderTexture.Type.TileSection !== type && RenderTexture.Type.ThematicGradient !== type)\n assert(isPowerOfTwo(image.width) && isPowerOfTwo(image.height), \"###TODO: Resize image dimensions to powers-of-two if necessary\");\n\n return this.create(Texture2DCreateParams.createForImageBuffer(image, type));\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static override createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImage(image, type));\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static override createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImageBitmap(image, type));\n }\n\n private static _placeHolderTextureData = new Uint8Array([128, 128, 128, 255]);\n\n public static override createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n // set a placeholder texture while we wait for the external texture to load\n const handle = this.createForData(1, 1, this._placeHolderTextureData, undefined, undefined, GL.Texture.Format.Rgba);\n\n if (undefined === handle)\n return undefined;\n\n // kick off loading the texture from the backend\n ExternalTextureLoader.instance.loadTexture(handle, id, imodel, type, format, onLoaded);\n\n return handle;\n }\n\n public reload(params: Texture2DCreateParams) {\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n\n private constructor(glTexture: WebGLTexture, params: Texture2DCreateParams) {\n super(glTexture);\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport type ExternalTextureLoadCallback = (req: ExternalTextureRequest, data: TextureData) => void;\n\n/** @internal */\nexport interface ExternalTextureRequest {\n handle: Texture2DHandle;\n name: Id64String;\n imodel: IModelConnection;\n type: RenderTexture.Type;\n format: ImageSourceFormat;\n onLoaded?: ExternalTextureLoadCallback;\n}\n\n/** @internal */\ninterface TextureConvertRequest {\n req: ExternalTextureRequest;\n texData: TextureData;\n}\n\n/** @internal */\nexport class ExternalTextureLoader { /* currently exported for tests only */\n public static readonly instance = new ExternalTextureLoader(2);\n public readonly onTexturesLoaded = new BeEvent<() => void>();\n private readonly _maxActiveRequests: number;\n private _activeRequests: Array<ExternalTextureRequest> = [];\n private _pendingRequests: Array<ExternalTextureRequest> = [];\n private _convertRequests: Array<TextureConvertRequest> = [];\n private _convertPending = false;\n\n public get numActiveRequests() { return this._activeRequests.length; }\n public get numPendingRequests() { return this._pendingRequests.length; }\n public get maxActiveRequests() { return this._maxActiveRequests; }\n\n private constructor(maxActiveRequests: number) {\n this._maxActiveRequests = maxActiveRequests;\n }\n\n private async _nextRequest(prevReq: ExternalTextureRequest) {\n this._activeRequests.splice(this._activeRequests.indexOf(prevReq), 1);\n if (this._activeRequests.length < this._maxActiveRequests && this._pendingRequests.length > 0) {\n const req = this._pendingRequests.shift()!;\n await this._activateRequest(req);\n }\n if (this._activeRequests.length < 1 && this._pendingRequests.length < 1)\n this.onTexturesLoaded.raiseEvent();\n }\n\n private async _activateRequest(req: ExternalTextureRequest) {\n if (req.imodel.isClosed)\n return;\n\n this._activeRequests.push(req);\n\n try {\n if (!req.imodel.isClosed) {\n const maxTextureSize = System.instance.maxTexSizeAllow;\n const texData = await req.imodel.queryTextureData({ name: req.name, maxTextureSize });\n if (undefined !== texData) {\n const cnvReq = { req, texData };\n this._convertRequests.push(cnvReq);\n // _convertPending is used to prevent overlapping calls to _convertTexture (from overlapping calls to _activateRequest)\n // it has been put on the list, so if it doesn't get converted here it will get converted by the loop that is converting the current one\n do {\n if (!this._convertPending)\n await this._convertTexture();\n } while (!this._convertPending && this._convertRequests.length > 0);\n if (!req.imodel.isClosed) {\n IModelApp.tileAdmin.invalidateAllScenes();\n if (undefined !== req.onLoaded)\n req.onLoaded(req, texData);\n }\n }\n }\n } catch { }\n\n return this._nextRequest(req);\n }\n\n private async _convertTexture(): Promise<void> {\n this._convertPending = true;\n try {\n const cnvReq = this._convertRequests.shift();\n if (undefined !== cnvReq) {\n const imageSource = new ImageSource(cnvReq.texData.bytes, cnvReq.texData.format);\n if (System.instance.supportsCreateImageBitmap) {\n const blob = new Blob([imageSource.data], { type: getImageSourceMimeType(imageSource.format) });\n const image = await createImageBitmap(blob, 0, 0, cnvReq.texData.width, cnvReq.texData.height);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImageBitmap(image, cnvReq.req.type));\n }\n } else {\n const image = await imageElementFromImageSource(imageSource);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImage(image, cnvReq.req.type));\n }\n }\n }\n } catch { }\n this._convertPending = false;\n }\n\n private _requestExists(reqToCheck: ExternalTextureRequest) {\n for (const r of this._activeRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n for (const r of this._pendingRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n return false;\n }\n\n public loadTexture(handle: Texture2DHandle, name: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded?: ExternalTextureLoadCallback) {\n const req = { handle, name, imodel, type, format, onLoaded };\n if (this._requestExists(req))\n return;\n\n if (this._activeRequests.length + 1 > this._maxActiveRequests) {\n this._pendingRequests.push(req);\n } else\n this._activateRequest(req); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n}\n\n/** @internal */\nexport class TextureCubeHandle extends TextureHandle {\n private _dim: number; // Cubemap texture height and width must match. This must be the same for each of the six faces.\n private _format: GL.Texture.Format; // Format must be the same for each of the six faces.\n private _dataType: GL.Texture.DataType; // Type must be the same for each of the six faces.\n\n public get width(): number { return this._dim; }\n public get height(): number { return this._dim; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return undefined; }\n\n /** Bind specified cubemap texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTextureCubeMap(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n TextureCubeHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n TextureCubeHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n private static create(params: TextureCubeCreateParams): TextureHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new TextureCubeHandle(glTex, params) : undefined;\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static override createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n const params = TextureCubeCreateParams.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n return params !== undefined ? this.create(params) : undefined;\n }\n\n private constructor(glTexture: WebGLTexture, params: TextureCubeCreateParams) {\n super(glTexture);\n this._dim = params.dim;\n this._format = params.format;\n this._dataType = params.dataType;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport class Texture2DDataUpdater {\n public data: Uint8Array;\n public modified: boolean = false;\n\n public constructor(data: Uint8Array) { this.data = data; }\n\n public setByteAtIndex(index: number, byte: number) {\n assert(index < this.data.length);\n if (byte !== this.data[index]) {\n this.data[index] = byte;\n this.modified = true;\n }\n }\n\n public setOvrFlagsAtIndex(index: number, value: OvrFlags) {\n assert(index < this.data.length - 1);\n assert(value < 0xffff);\n this.setByteAtIndex(index, value & 0xff);\n this.setByteAtIndex(index + 1, (value & 0xff00) >> 8);\n }\n\n public getByteAtIndex(index: number): number {\n assert(index < this.data.length);\n return this.data[index];\n }\n\n public getOvrFlagsAtIndex(index: number): OvrFlags {\n const lo = this.getByteAtIndex(index);\n const hi = this.getByteAtIndex(index + 1);\n return lo | (hi << 8);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Texture.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/Texture.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, BeEvent, dispose, expectDefined, expectNotNull, Id64String } from \"@itwin/core-bentley\";\nimport {\n ImageBuffer, ImageBufferFormat, ImageSource, ImageSourceFormat, isPowerOfTwo, nextHighestPowerOfTwo, RenderTexture, TextureData, TextureTransparency,\n} from \"@itwin/core-common\";\nimport { getImageSourceMimeType, imageBufferToPngDataUrl, imageElementFromImageSource, openImageDataUrlInNewWindow } from \"../../../common/ImageUtil\";\nimport { IModelConnection } from \"../../../IModelConnection\";\nimport { IModelApp } from \"../../../IModelApp\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { GL } from \"./GL\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { TextureUnit } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { TextureOwnership } from \"../../../render/CreateTextureArgs\";\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\n\n/** @internal */\nexport type Texture2DData = Uint8Array | Float32Array;\n\nfunction computeBytesUsed(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType): number {\n const bytesPerComponent = GL.Texture.DataType.UnsignedByte === dataType ? 1 : 4;\n let componentsPerPixel = 1;\n switch (format) {\n case GL.Texture.Format.Rgb:\n componentsPerPixel = 3;\n break;\n case GL.Texture.Format.Rgba:\n componentsPerPixel = 4;\n break;\n }\n\n return width * height * componentsPerPixel * bytesPerComponent;\n}\n\n/** Associate texture data with a WebGLTexture from a canvas, image, OR a bitmap. */\nfunction loadTexture2DImageData(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData, source?: TexImageSource): void {\n handle.bytesUsed = undefined !== bytes ? bytes.byteLength : computeBytesUsed(params.width, params.height, params.format, params.dataType);\n\n const tex = expectDefined(handle.getHandle());\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n\n // Figure out the internal format. For all but WebGL2 float/half-float datatypes it is just same as format.\n // TODO: probably need to just support internal format types in Texture2DCreateParams.\n let internalFormat = params.format;\n const context2 = System.instance.context;\n if (GL.Texture.Format.Rgba === params.format) {\n if (GL.Texture.DataType.Float === params.dataType)\n internalFormat = context2.RGBA32F;\n else if (context2.HALF_FLOAT === params.dataType)\n internalFormat = context2.RGBA16F;\n } else if (GL.Texture.Format.DepthStencil === params.format)\n internalFormat = context2.DEPTH24_STENCIL8;\n\n // send the texture data\n if (undefined !== source) {\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.format, params.dataType, source);\n } else {\n const pixelData = undefined !== bytes ? bytes : null;\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.width, params.height, 0, params.format, params.dataType, pixelData);\n }\n\n if (params.useMipMaps) {\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n } else {\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n }\n if (params.anisotropicFilter) {\n System.instance.setMaxAnisotropy(params.anisotropicFilter);\n }\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, params.wrapMode);\n\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n}\n\nfunction loadTextureFromBytes(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData): void {\n loadTexture2DImageData(handle, params, bytes);\n}\n\n/** Associate cube texture data with a WebGLTexture from an image. */\nfunction loadTextureCubeImageData(handle: TextureHandle, params: TextureCubeCreateParams, images: TexImageSource[]): void {\n handle.bytesUsed = computeBytesUsed(params.dim * 6, params.dim, params.format, params.dataType);\n\n const tex = expectDefined(handle.getHandle());\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTextureCubeMap(TextureUnit.Zero, tex);\n\n const cubeTargets: number[] = [GL.Texture.Target.CubeMapPositiveX, GL.Texture.Target.CubeMapNegativeX, GL.Texture.Target.CubeMapPositiveY, GL.Texture.Target.CubeMapNegativeY, GL.Texture.Target.CubeMapPositiveZ, GL.Texture.Target.CubeMapNegativeZ];\n\n for (let i = 0; i < 6; i++) {\n gl.texImage2D(cubeTargets[i], 0, params.format, params.format, params.dataType, images[i]);\n }\n\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_T, params.wrapMode);\n // gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_R, params.wrapMode); // Unavailable in GLES2\n\n System.instance.bindTextureCubeMap(TextureUnit.Zero, undefined);\n}\n\ntype TextureFlag = true | undefined;\ntype TextureAnisotropicFilter = number | undefined;\ntype Load2DImageData = (handle: TextureHandle, params: Texture2DCreateParams) => void;\ntype LoadCubeImageData = (handle: TextureHandle, params: TextureCubeCreateParams) => void;\n\ninterface TextureImageProperties {\n wrapMode: GL.Texture.WrapMode;\n useMipMaps: TextureFlag;\n interpolate: TextureFlag;\n format: GL.Texture.Format;\n anisotropicFilter: TextureAnisotropicFilter;\n}\n\n/** @internal */\nexport interface TextureParams {\n type: RenderTexture.Type;\n ownership?: TextureOwnership;\n transparency: TextureTransparency;\n handle: TextureHandle;\n}\n\n/** Wrapper class for a WebGL texture handle and parameters specific to an individual texture.\n * @internal\n */\nexport class Texture extends RenderTexture implements WebGLDisposable {\n public readonly texture: TextureHandle;\n public readonly ownership?: TextureOwnership;\n public transparency: TextureTransparency;\n\n public get bytesUsed(): number { return this.texture.bytesUsed; }\n public get hasOwner(): boolean { return undefined !== this.ownership; }\n public get key(): string | undefined {\n return typeof this.ownership !== \"string\" && typeof this.ownership?.key === \"string\" ? this.ownership.key : undefined;\n }\n\n public constructor(params: TextureParams) {\n super(params.type);\n this.ownership = params.ownership;\n this.texture = params.handle;\n this.transparency = params.handle.format === GL.Texture.Format.Rgba ? params.transparency : TextureTransparency.Opaque;\n }\n\n public get isDisposed(): boolean { return this.texture.isDisposed; }\n\n /** Free this object in the WebGL wrapper. */\n public dispose() {\n dispose(this.texture);\n }\n}\n\nfunction getDataType(data: Texture2DData): GL.Texture.DataType {\n return data instanceof Float32Array ? GL.Texture.DataType.Float : GL.Texture.DataType.UnsignedByte;\n}\n\n/** Parameters used internally to define how to create a texture for use with WebGL. */\nclass Texture2DCreateParams {\n private constructor(\n public width: number,\n public height: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: Load2DImageData,\n public useMipMaps?: TextureFlag,\n public interpolate?: TextureFlag,\n public anisotropicFilter?: TextureAnisotropicFilter,\n public dataBytes?: Uint8Array) { }\n\n public static createForData(width: number, height: number, data: Texture2DData, preserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n const bytes = (preserveData && data instanceof Uint8Array) ? data : undefined;\n return new Texture2DCreateParams(width, height, format, getDataType(data), wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, data), undefined, undefined, undefined, bytes);\n }\n\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n if (ImageBufferFormat.Rgb === image.format)\n props.format = GL.Texture.Format.Rgb;\n\n return new Texture2DCreateParams(image.width, image.height, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, image.data), props.useMipMaps, props.interpolate);\n }\n\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return new Texture2DCreateParams(width, height, format, dataType, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params), undefined, undefined);\n }\n\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.naturalWidth;\n let targetHeight = image.naturalHeight;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // Cap texture dimensions to system WebGL capabilities\n const maxTexSize = System.instance.maxTextureSize;\n targetWidth = Math.min(targetWidth, maxTexSize);\n targetHeight = Math.min(targetHeight, maxTexSize);\n\n let element: TexImageSource = image;\n if (targetWidth !== image.naturalWidth || targetHeight !== image.naturalHeight) {\n // Resize so dimensions are powers-of-two\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n\n const context = expectNotNull(canvas.getContext(\"2d\"));\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n element = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, element), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.width;\n let targetHeight = image.height;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // If we have to resize, use a canvas\n let source: TexImageSource = image;\n if (image.width !== targetWidth || image.height !== targetHeight) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n const context = expectNotNull(canvas.getContext(\"2d\"));\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n source = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, source), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n private static getImageProperties(type: RenderTexture.Type): TextureImageProperties {\n const isSky = RenderTexture.Type.SkyBox === type;\n const isTile = RenderTexture.Type.TileSection === type;\n const isThematic = RenderTexture.Type.ThematicGradient === type;\n const isFilteredTile = RenderTexture.Type.FilteredTileSection === type;\n const maxAnisotropicFilterLevel = 16;\n\n const wrapMode = RenderTexture.Type.Normal === type ? GL.Texture.WrapMode.Repeat : GL.Texture.WrapMode.ClampToEdge;\n const useMipMaps: TextureFlag = (!isSky && !isTile && !isFilteredTile && !isThematic) ? true : undefined;\n const interpolate: TextureFlag = isThematic ? undefined : true;\n const anisotropicFilter = isFilteredTile ? maxAnisotropicFilterLevel : undefined;\n\n // Always use RGBA. RGB is much slower and almost certainly does not actually save any GPU memory.\n const format = GL.Texture.Format.Rgba;\n\n return { format, wrapMode, useMipMaps, interpolate, anisotropicFilter };\n }\n\n public static readonly placeholderParams = new Texture2DCreateParams(1, 1, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (_tex: TextureHandle, _params: Texture2DCreateParams) => undefined);\n}\n\nclass TextureCubeCreateParams {\n private constructor(\n public dim: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: LoadCubeImageData) { }\n\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement): TextureCubeCreateParams | undefined {\n const targetDim = posX.naturalWidth;\n\n if (posX.naturalHeight !== targetDim) // Cube texture dimensions must match (width must equal height)\n return undefined;\n\n const images: HTMLImageElement[] = [posX, negX, posY, negY, posZ, negZ];\n\n for (let i = 1; i < images.length; i++) { // Dimensions of all six sides must match each other\n if (images[i].naturalWidth !== targetDim || images[i].naturalHeight !== targetDim)\n return undefined;\n }\n\n return new TextureCubeCreateParams(targetDim, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: TextureCubeCreateParams) => loadTextureCubeImageData(tex, params, images));\n }\n}\n\n/** Wraps a WebGLTextureHandle\n * @internal\n */\nexport abstract class TextureHandle implements WebGLDisposable {\n protected _glTexture?: WebGLTexture;\n protected _bytesUsed = 0;\n\n public abstract get width(): number;\n public abstract get height(): number;\n public abstract get format(): GL.Texture.Format;\n public abstract get dataType(): GL.Texture.DataType;\n public abstract get dataBytes(): Uint8Array | undefined;\n public get bytesUsed(): number { return this._bytesUsed; }\n public set bytesUsed(bytesUsed: number) {\n // assert(0 === this.bytesUsed);\n this._bytesUsed = bytesUsed;\n }\n\n /** Get the WebGLTexture for this TextureHandle. */\n public getHandle(): WebGLTexture | undefined { return this._glTexture; }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public abstract bind(_texUnit: TextureUnit): boolean;\n\n /** Bind this texture to a uniform sampler. */\n public abstract bindSampler(_uniform: UniformHandle, _unit: TextureUnit): void;\n\n public get isDisposed(): boolean { return this._glTexture === undefined; }\n\n public [Symbol.dispose]() {\n if (!this.isDisposed) {\n System.instance.disposeTexture(expectDefined(this._glTexture));\n this._glTexture = undefined;\n this.bytesUsed = 0;\n }\n }\n\n /** Create a 2D texture for use as a color attachment for rendering */\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return Texture2DHandle.createForAttachment(width, height, format, dataType);\n }\n\n /** Create a 2D texture to hold non-image data */\n public static createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return Texture2DHandle.createForData(width, height, data, wantPreserveData, wrapMode, format);\n }\n\n /** Create a 2D texture from a bitmap */\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBuffer(image, type);\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return Texture2DHandle.createForImage(image, type);\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBitmap(image, type);\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n return TextureCubeHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n }\n\n public static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n return Texture2DHandle.createForElement(id, imodel, type, format, onLoaded);\n }\n\n protected constructor(glTexture: WebGLTexture) {\n this._glTexture = glTexture;\n }\n\n /** For debugging purposes, open a new window containing this texture as an image. */\n public showDebugImage(): void {\n const gl = System.instance.context;\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, expectDefined(this.getHandle()), 0);\n if (gl.FRAMEBUFFER_COMPLETE === gl.checkFramebufferStatus(gl.FRAMEBUFFER)) {\n const w = this.width;\n const h = this.height;\n const pixels = new Uint8Array(w * h * 4);\n gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n const buffer = ImageBuffer.create(pixels, ImageBufferFormat.Rgba, w);\n const url = imageBufferToPngDataUrl(buffer, false);\n openImageDataUrlInNewWindow(expectDefined(url), \"Classifiers\");\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.deleteFramebuffer(fbo);\n }\n}\n\n/** @internal */\nexport class Texture2DHandle extends TextureHandle {\n private _width: number;\n private _height: number;\n private _format: GL.Texture.Format;\n private _dataType: GL.Texture.DataType;\n private _dataBytes?: Uint8Array;\n\n public get width(): number { return this._width; }\n public get height(): number { return this._height; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return this._dataBytes; }\n\n /** Bind specified texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTexture2d(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n Texture2DHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n Texture2DHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n /** Update the 2D texture contents. */\n public update(updater: Texture2DDataUpdater): boolean {\n if (0 === this.width || 0 === this.height || undefined === this._dataBytes || 0 === this._dataBytes.length) {\n assert(false);\n return false;\n }\n\n if (!updater.modified)\n return false;\n\n return this.replaceTextureData(this._dataBytes);\n }\n\n /** Replace the 2D texture contents. */\n public replaceTextureData(data: Texture2DData): boolean {\n assert((GL.Texture.DataType.Float === this._dataType) === (data instanceof Float32Array));\n\n const tex = expectDefined(this.getHandle());\n if (undefined === tex)\n return false;\n\n const gl = System.instance.context;\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Go through System to ensure we don't interfere with currently-bound textures!\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.width, this.height, this._format, this._dataType, data);\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n\n return true;\n }\n\n private static create(params: Texture2DCreateParams): Texture2DHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new Texture2DHandle(glTex, params) : undefined;\n }\n\n /** Create a texture for use as a color attachment for rendering */\n public static override createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return this.create(Texture2DCreateParams.createForAttachment(width, height, format, dataType));\n }\n\n /** Create a texture to hold non-image data */\n public static override createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return this.create(Texture2DCreateParams.createForData(width, height, data, wantPreserveData, wrapMode, format));\n }\n\n /** Create a texture from a bitmap */\n public static override createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n if (RenderTexture.Type.TileSection !== type && RenderTexture.Type.ThematicGradient !== type)\n assert(isPowerOfTwo(image.width) && isPowerOfTwo(image.height), \"###TODO: Resize image dimensions to powers-of-two if necessary\");\n\n return this.create(Texture2DCreateParams.createForImageBuffer(image, type));\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static override createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImage(image, type));\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static override createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImageBitmap(image, type));\n }\n\n private static _placeHolderTextureData = new Uint8Array([128, 128, 128, 255]);\n\n public static override createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n // set a placeholder texture while we wait for the external texture to load\n const handle = this.createForData(1, 1, this._placeHolderTextureData, undefined, undefined, GL.Texture.Format.Rgba);\n\n if (undefined === handle)\n return undefined;\n\n // kick off loading the texture from the backend\n ExternalTextureLoader.instance.loadTexture(handle, id, imodel, type, format, onLoaded);\n\n return handle;\n }\n\n public reload(params: Texture2DCreateParams) {\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n\n private constructor(glTexture: WebGLTexture, params: Texture2DCreateParams) {\n super(glTexture);\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport type ExternalTextureLoadCallback = (req: ExternalTextureRequest, data: TextureData) => void;\n\n/** @internal */\nexport interface ExternalTextureRequest {\n handle: Texture2DHandle;\n name: Id64String;\n imodel: IModelConnection;\n type: RenderTexture.Type;\n format: ImageSourceFormat;\n onLoaded?: ExternalTextureLoadCallback;\n}\n\n/** @internal */\ninterface TextureConvertRequest {\n req: ExternalTextureRequest;\n texData: TextureData;\n}\n\n/** @internal */\nexport class ExternalTextureLoader { /* currently exported for tests only */\n public static readonly instance = new ExternalTextureLoader(2);\n public readonly onTexturesLoaded = new BeEvent<() => void>();\n private readonly _maxActiveRequests: number;\n private _activeRequests: Array<ExternalTextureRequest> = [];\n private _pendingRequests: Array<ExternalTextureRequest> = [];\n private _convertRequests: Array<TextureConvertRequest> = [];\n private _convertPending = false;\n\n public get numActiveRequests() { return this._activeRequests.length; }\n public get numPendingRequests() { return this._pendingRequests.length; }\n public get maxActiveRequests() { return this._maxActiveRequests; }\n\n private constructor(maxActiveRequests: number) {\n this._maxActiveRequests = maxActiveRequests;\n }\n\n private async _nextRequest(prevReq: ExternalTextureRequest) {\n this._activeRequests.splice(this._activeRequests.indexOf(prevReq), 1);\n if (this._activeRequests.length < this._maxActiveRequests && this._pendingRequests.length > 0) {\n // length is verified to be > 0, so shift will not return undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const req = this._pendingRequests.shift()!;\n await this._activateRequest(req);\n }\n if (this._activeRequests.length < 1 && this._pendingRequests.length < 1)\n this.onTexturesLoaded.raiseEvent();\n }\n\n private async _activateRequest(req: ExternalTextureRequest) {\n if (req.imodel.isClosed)\n return;\n\n this._activeRequests.push(req);\n\n try {\n if (!req.imodel.isClosed) {\n const maxTextureSize = System.instance.maxTexSizeAllow;\n const texData = await req.imodel.queryTextureData({ name: req.name, maxTextureSize });\n if (undefined !== texData) {\n const cnvReq = { req, texData };\n this._convertRequests.push(cnvReq);\n // _convertPending is used to prevent overlapping calls to _convertTexture (from overlapping calls to _activateRequest)\n // it has been put on the list, so if it doesn't get converted here it will get converted by the loop that is converting the current one\n do {\n if (!this._convertPending)\n await this._convertTexture();\n } while (!this._convertPending && this._convertRequests.length > 0);\n if (!req.imodel.isClosed) {\n IModelApp.tileAdmin.invalidateAllScenes();\n if (undefined !== req.onLoaded)\n req.onLoaded(req, texData);\n }\n }\n }\n } catch { }\n\n return this._nextRequest(req);\n }\n\n private async _convertTexture(): Promise<void> {\n this._convertPending = true;\n try {\n const cnvReq = this._convertRequests.shift();\n if (undefined !== cnvReq) {\n const imageSource = new ImageSource(cnvReq.texData.bytes, cnvReq.texData.format);\n if (System.instance.supportsCreateImageBitmap) {\n const blob = new Blob([imageSource.data], { type: getImageSourceMimeType(imageSource.format) });\n const image = await createImageBitmap(blob, 0, 0, cnvReq.texData.width, cnvReq.texData.height);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImageBitmap(image, cnvReq.req.type));\n }\n } else {\n const image = await imageElementFromImageSource(imageSource);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImage(image, cnvReq.req.type));\n }\n }\n }\n } catch { }\n this._convertPending = false;\n }\n\n private _requestExists(reqToCheck: ExternalTextureRequest) {\n for (const r of this._activeRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n for (const r of this._pendingRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n return false;\n }\n\n public loadTexture(handle: Texture2DHandle, name: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded?: ExternalTextureLoadCallback) {\n const req = { handle, name, imodel, type, format, onLoaded };\n if (this._requestExists(req))\n return;\n\n if (this._activeRequests.length + 1 > this._maxActiveRequests) {\n this._pendingRequests.push(req);\n } else\n this._activateRequest(req); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n}\n\n/** @internal */\nexport class TextureCubeHandle extends TextureHandle {\n private _dim: number; // Cubemap texture height and width must match. This must be the same for each of the six faces.\n private _format: GL.Texture.Format; // Format must be the same for each of the six faces.\n private _dataType: GL.Texture.DataType; // Type must be the same for each of the six faces.\n\n public get width(): number { return this._dim; }\n public get height(): number { return this._dim; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return undefined; }\n\n /** Bind specified cubemap texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTextureCubeMap(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n TextureCubeHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n TextureCubeHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n private static create(params: TextureCubeCreateParams): TextureHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new TextureCubeHandle(glTex, params) : undefined;\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static override createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n const params = TextureCubeCreateParams.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n return params !== undefined ? this.create(params) : undefined;\n }\n\n private constructor(glTexture: WebGLTexture, params: TextureCubeCreateParams) {\n super(glTexture);\n this._dim = params.dim;\n this._format = params.format;\n this._dataType = params.dataType;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport class Texture2DDataUpdater {\n public data: Uint8Array;\n public modified: boolean = false;\n\n public constructor(data: Uint8Array) { this.data = data; }\n\n public setByteAtIndex(index: number, byte: number) {\n assert(index < this.data.length);\n if (byte !== this.data[index]) {\n this.data[index] = byte;\n this.modified = true;\n }\n }\n\n public setOvrFlagsAtIndex(index: number, value: OvrFlags) {\n assert(index < this.data.length - 1);\n assert(value < 0xffff);\n this.setByteAtIndex(index, value & 0xff);\n this.setByteAtIndex(index + 1, (value & 0xff00) >> 8);\n }\n\n public getByteAtIndex(index: number): number {\n assert(index < this.data.length);\n return this.data[index];\n }\n\n public getOvrFlagsAtIndex(index: number): OvrFlags {\n const lo = this.getByteAtIndex(index);\n const hi = this.getByteAtIndex(index + 1);\n return lo | (hi << 8);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Animation.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Animation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAgB,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Animation.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Animation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAgB,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AA6K5F,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAsHhF"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module WebGL
|
|
7
7
|
*/
|
|
8
|
-
import { assert } from "@itwin/core-bentley";
|
|
8
|
+
import { assert, expectDefined } from "@itwin/core-bentley";
|
|
9
9
|
import { ThematicGradientSettings } from "@itwin/core-common";
|
|
10
10
|
import { TextureUnit } from "../RenderFlags";
|
|
11
11
|
import { octDecodeNormal } from "./Surface";
|
|
@@ -116,6 +116,8 @@ const scratchAnimParams = [
|
|
|
116
116
|
new Float32Array(3), // index0, index1, fraction
|
|
117
117
|
];
|
|
118
118
|
function getAnimParams(size, initialValue) {
|
|
119
|
+
// Elements 2 and 3 are guaranteed to be defined.
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
119
121
|
const array = scratchAnimParams[size];
|
|
120
122
|
if (undefined !== initialValue)
|
|
121
123
|
for (let i = 0; i < array.length; i++)
|
|
@@ -165,14 +167,14 @@ export function addAnimation(vert, isSurface) {
|
|
|
165
167
|
vert.addFunction(unquantizePosition);
|
|
166
168
|
vert.addUniform("u_animLUT", 8 /* VariableType.Sampler2D */, (prog) => {
|
|
167
169
|
prog.addGraphicUniform("u_animLUT", (uniform, params) => {
|
|
168
|
-
const channels = (params.geometry.asLUT
|
|
170
|
+
const channels = expectDefined(params.geometry.asLUT?.lut.auxChannels);
|
|
169
171
|
assert(undefined !== channels);
|
|
170
172
|
channels.texture.bindSampler(uniform, TextureUnit.AuxChannelLUT);
|
|
171
173
|
});
|
|
172
174
|
});
|
|
173
175
|
vert.addUniform("u_animLUTParams", 4 /* VariableType.Vec3 */, (prog) => {
|
|
174
176
|
prog.addGraphicUniform("u_animLUTParams", (uniform, params) => {
|
|
175
|
-
const geom = params.geometry.asLUT;
|
|
177
|
+
const geom = expectDefined(params.geometry.asLUT);
|
|
176
178
|
assert(undefined !== geom && undefined !== geom.lut.auxChannels);
|
|
177
179
|
const tex = geom.lut.auxChannels.texture;
|
|
178
180
|
const array = getAnimParams(3);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Animation.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Animation.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 } from \"@itwin/core-bentley\";\nimport { AnalysisStyleDisplacement, AnalysisStyleThematic, ThematicGradientSettings } from \"@itwin/core-common\";\nimport { DrawParams } from \"../DrawCommand\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport { VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\nimport { octDecodeNormal } from \"./Surface\";\nimport { unquantizePosition } from \"./Vertex\";\nimport { AuxChannel, AuxDisplacementChannel, AuxParamChannel } from \"../../../../common/internal/render/AuxChannelTable\";\n\nconst initialize = `\n g_anim_step = vec2(1.0) / u_animLUTParams.xy;\n g_anim_center = g_anim_step * 0.5;\n`;\n\n// The vertex index is an integer in [0..numVertices].\n// The frame index is an integer in [0..numBytesPerVertex/2].\n// Therefore each frame index points at 2 bytes within the texture.\n// The third component of the return value is 0.0 if the input index points to the first 2 bytes of the texel, or 1.0 if pointing to the second 2 bytes\nconst computeAnimLUTCoords = `\nvec3 computeAnimLUTCoords(float vertIndex, float frameIndex) {\n // float baseIndex = (vertIndex * 2.0) + frameIndex;\n float baseIndex = (vertIndex * u_animLUTParams.z) + frameIndex;\n float halfIndex = baseIndex * 0.5;\n float index = floor(halfIndex);\n\n float epsilon = 0.5 / u_animLUTParams.x;\n float yId = floor(index / u_animLUTParams.x + epsilon);\n float xId = index - u_animLUTParams.x * yId;\n\n vec2 texCoord = g_anim_center + vec2(xId / u_animLUTParams.x, yId / u_animLUTParams.y);\n return vec3(texCoord, 2.0 * (halfIndex - index));\n}\n`;\n\n// Sample 2 bytes at the specified index.\nconst sampleAnimVec2 = `\nvec2 sampleAnimVec2(float vertIndex, float frameIndex) {\n vec3 tc = computeAnimLUTCoords(vertIndex, frameIndex);\n vec4 texel = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\n return texel.xy * (1.0 - tc.z) + texel.zw * tc.z;\n}\n`;\n\n// Position is quantized to 6 bytes (2 bytes per component). So we always must sample two adjacent texels. We discard two bytes based on whether the index is even or odd.\nconst computeAnimationFrameDisplacement = `\nvec3 computeAnimationFrameDisplacement(float vertIndex, float frameIndex, vec3 origin, vec3 scale) {\n vec3 tc = computeAnimLUTCoords(vertIndex, frameIndex);\n vec4 enc1 = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\n tc.x += g_anim_step.x;\n vec4 enc2 = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\n\n vec2 ex = enc1.xy * (1.0 - tc.z) + enc1.zw * tc.z;\n vec2 ey = enc1.zw * (1.0 - tc.z) + enc2.xy * tc.z;\n vec2 ez = enc2.xy * (1.0 - tc.z) + enc2.zw * tc.z;\n\n vec3 qpos = vec3(decodeUInt16(ex), decodeUInt16(ey), decodeUInt16(ez));\n return unquantizePosition(qpos, origin, scale).xyz;\n}\n`;\n\nconst computeAnimationDisplacement = `\nvec3 computeAnimationDisplacement(float vertIndex, float frameIndex0, float frameIndex1, float fraction, vec3 origin, vec3 scale) {\n if (frameIndex0 < 0.0)\n return vec3(0.0, 0.0, 0.0);\n\n vec3 displacement = computeAnimationFrameDisplacement(vertIndex, frameIndex0, origin, scale);\n if (fraction > 0.0) {\n vec3 displacement1 = computeAnimationFrameDisplacement(vertIndex, frameIndex1, origin, scale);\n displacement += fraction * (displacement1 - displacement);\n }\n\n return displacement;\n}\n`;\n\nconst adjustRawPosition = `\n rawPos.xyz += computeAnimationDisplacement(g_vertexLUTIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);\n return rawPos;\n`;\n\nconst computeAnimationFrameNormal = `\nvec3 computeAnimationFrameNormal(float frameIndex) {\n vec2 enc = sampleAnimVec2(g_vertexLUTIndex, frameIndex);\n return octDecodeNormal(enc);\n}\n`;\n\nconst computeAnimationNormal = `\nvec3 computeAnimationNormal(float frameIndex0, float frameIndex1, float fraction) {\n vec3 normal = computeAnimationFrameNormal(frameIndex0);\n if (fraction > 0.0) {\n vec3 normal1 = computeAnimationFrameNormal(frameIndex1);\n normal += fraction * (normal1 - normal);\n }\n\n return normal;\n}\n`;\n\nconst computeAnimationFrameParam = `\nfloat computeAnimationFrameParam(float frameIndex, float origin, float scale) {\n vec2 enc = sampleAnimVec2(g_vertexLUTIndex, frameIndex);\n return clamp((origin + scale * decodeUInt16(enc)), 0.0, 1.0);\n}\n`;\n\nconst computeAnimationParam = `\nvec2 computeAnimationParam(float frameIndex0, float frameIndex1, float fraction, float origin, float scale) {\n float param = computeAnimationFrameParam(frameIndex0, origin, scale);\n if (fraction > 0.0) {\n float param1 = computeAnimationFrameParam(frameIndex1, origin, scale);\n param += fraction * (param1 - param);\n }\n\n return vec2(.5, param);\n}\n`;\n\nconst scratchAnimParams = [\n undefined,\n undefined,\n new Float32Array(2), // origin, scale\n new Float32Array(3), // index0, index1, fraction\n];\n\nfunction getAnimParams(size: 2 | 3, initialValue?: number): Float32Array {\n const array = scratchAnimParams[size]!;\n if (undefined !== initialValue)\n for (let i = 0; i < array.length; i++)\n array[i] = initialValue;\n\n return array;\n}\n\nfunction getDisplacementChannel(params: DrawParams): { channel: AuxDisplacementChannel, displacement: AnalysisStyleDisplacement } | undefined {\n const displacement = params.target.analysisStyle?.displacement;\n if (!displacement)\n return undefined;\n\n const channel = params.geometry.asLUT?.lut.auxChannels?.displacements?.get(displacement.channelName);\n return channel ? { channel, displacement } : undefined;\n}\n\nfunction getNormalChannel(params: DrawParams): AuxChannel | undefined {\n const channelName = params.target.analysisStyle?.normalChannelName;\n if (undefined === channelName)\n return undefined;\n\n return params.geometry.asLUT?.lut.auxChannels?.normals?.get(channelName);\n}\n\nfunction getScalarChannel(params: DrawParams): { channel: AuxParamChannel, scalar: AnalysisStyleThematic } | undefined {\n const scalar = params.target.analysisStyle?.thematic;\n if (!scalar)\n return undefined;\n\n const channel = params.geometry.asMesh?.lut.auxChannels?.params?.get(scalar.channelName);\n return channel ? { channel, scalar } : undefined;\n}\n\nfunction computeAnimParams(params: Float32Array, channel: AuxChannel, fraction: number): void {\n const { inputs, indices } = channel;\n const inputValue = fraction * inputs[inputs.length - 1];\n for (let i = 0; i < inputs.length - 1; i++) {\n if (inputValue >= inputs[i] && inputValue < inputs[i + 1]) {\n params[0] = indices[i];\n params[1] = indices[i + 1];\n params[2] = inputValue - inputs[i] / (inputs[i + 1] - inputs[i]);\n return;\n }\n }\n params[0] = params[1] = indices[inputs.length - 1];\n params[2] = 0.0;\n}\n\n/** @internal */\nexport function addAnimation(vert: VertexShaderBuilder, isSurface: boolean): void {\n // Lookup table\n vert.addGlobal(\"g_anim_step\", VariableType.Vec2);\n vert.addGlobal(\"g_anim_center\", VariableType.Vec2);\n vert.addInitializer(initialize);\n vert.addFunction(unquantizePosition);\n\n vert.addUniform(\"u_animLUT\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_animLUT\", (uniform, params) => {\n const channels = (params.geometry.asLUT!).lut.auxChannels!;\n assert(undefined !== channels);\n channels.texture.bindSampler(uniform, TextureUnit.AuxChannelLUT);\n });\n });\n\n vert.addUniform(\"u_animLUTParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_animLUTParams\", (uniform, params) => {\n const geom = params.geometry.asLUT!;\n assert(undefined !== geom && undefined !== geom.lut.auxChannels);\n const tex = geom.lut.auxChannels.texture;\n const array = getAnimParams(3);\n array[0] = tex.width;\n array[1] = tex.height;\n array[2] = geom.lut.auxChannels.numBytesPerVertex / 2;\n uniform.setUniform3fv(array);\n });\n });\n\n vert.addFunction(computeAnimLUTCoords);\n vert.addFunction(sampleAnimVec2);\n\n // Displacement\n vert.addFunction(computeAnimationFrameDisplacement);\n vert.addFunction(computeAnimationDisplacement);\n vert.set(VertexShaderComponent.AdjustRawPosition, adjustRawPosition);\n\n vert.addUniform(\"u_animDispParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_animDispParams\", (uniform, params) => {\n const animParams = getAnimParams(3, 0.0);\n const disp = getDisplacementChannel(params);\n if (undefined !== disp)\n computeAnimParams(animParams, disp.channel, params.target.analysisFraction);\n\n uniform.setUniform3fv(animParams);\n });\n });\n vert.addUniform(\"u_qAnimDispScale\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_qAnimDispScale\", (uniform, params) => {\n const animParams = getAnimParams(3, 0.0);\n const disp = getDisplacementChannel(params);\n if (undefined !== disp)\n for (let i = 0; i < 3; i++)\n animParams[i] = disp.channel.qScale[i] * disp.displacement.scale;\n\n uniform.setUniform3fv(animParams);\n });\n });\n vert.addUniform(\"u_qAnimDispOrigin\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_qAnimDispOrigin\", (uniform, params) => {\n const animParams = getAnimParams(3, 0.0);\n const disp = getDisplacementChannel(params);\n if (undefined !== disp)\n for (let i = 0; i < 3; i++)\n animParams[i] = disp.channel.qOrigin[i] * disp.displacement.scale;\n\n uniform.setUniform3fv(animParams);\n });\n });\n\n // Normal and param\n if (isSurface) {\n vert.addFunction(octDecodeNormal);\n vert.addFunction(computeAnimationFrameNormal);\n vert.addFunction(computeAnimationNormal);\n\n vert.addFunction(computeAnimationFrameParam);\n vert.addFunction(computeAnimationParam);\n\n vert.addUniform(\"u_animNormalParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_animNormalParams\", (uniform, params) => {\n const animParams = getAnimParams(3, -1.0);\n const channel = getNormalChannel(params);\n if (undefined !== channel)\n computeAnimParams(animParams, channel, params.target.analysisFraction);\n\n uniform.setUniform3fv(animParams);\n });\n });\n\n vert.addUniform(\"u_animScalarParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_animScalarParams\", (uniform, params) => {\n const scalars = getScalarChannel(params);\n const animParams = getAnimParams(3, -1.0);\n if (scalars)\n computeAnimParams(animParams, scalars.channel, params.target.analysisFraction);\n\n uniform.setUniform3fv(animParams);\n });\n });\n\n vert.addUniform(\"u_animScalarQParams\", VariableType.Vec2, (prog) => {\n prog.addGraphicUniform(\"u_animScalarQParams\", (uniform, params) => {\n const scalars = getScalarChannel(params);\n const animParams = getAnimParams(2, 1.0);\n if (scalars) {\n const range = scalars.scalar.range;\n let rangeScale = range.high - range.low;\n if (rangeScale === 0)\n rangeScale = 1;\n\n animParams[0] = ThematicGradientSettings.margin + (scalars.channel.qOrigin - range.low) / rangeScale;\n animParams[1] = ThematicGradientSettings.contentRange * scalars.channel.qScale / rangeScale;\n }\n\n uniform.setUniform2fv(animParams);\n });\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Animation.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Animation.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, expectDefined } from \"@itwin/core-bentley\";\nimport { AnalysisStyleDisplacement, AnalysisStyleThematic, ThematicGradientSettings } from \"@itwin/core-common\";\nimport { DrawParams } from \"../DrawCommand\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport { VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\nimport { octDecodeNormal } from \"./Surface\";\nimport { unquantizePosition } from \"./Vertex\";\nimport { AuxChannel, AuxDisplacementChannel, AuxParamChannel } from \"../../../../common/internal/render/AuxChannelTable\";\n\nconst initialize = `\n g_anim_step = vec2(1.0) / u_animLUTParams.xy;\n g_anim_center = g_anim_step * 0.5;\n`;\n\n// The vertex index is an integer in [0..numVertices].\n// The frame index is an integer in [0..numBytesPerVertex/2].\n// Therefore each frame index points at 2 bytes within the texture.\n// The third component of the return value is 0.0 if the input index points to the first 2 bytes of the texel, or 1.0 if pointing to the second 2 bytes\nconst computeAnimLUTCoords = `\nvec3 computeAnimLUTCoords(float vertIndex, float frameIndex) {\n // float baseIndex = (vertIndex * 2.0) + frameIndex;\n float baseIndex = (vertIndex * u_animLUTParams.z) + frameIndex;\n float halfIndex = baseIndex * 0.5;\n float index = floor(halfIndex);\n\n float epsilon = 0.5 / u_animLUTParams.x;\n float yId = floor(index / u_animLUTParams.x + epsilon);\n float xId = index - u_animLUTParams.x * yId;\n\n vec2 texCoord = g_anim_center + vec2(xId / u_animLUTParams.x, yId / u_animLUTParams.y);\n return vec3(texCoord, 2.0 * (halfIndex - index));\n}\n`;\n\n// Sample 2 bytes at the specified index.\nconst sampleAnimVec2 = `\nvec2 sampleAnimVec2(float vertIndex, float frameIndex) {\n vec3 tc = computeAnimLUTCoords(vertIndex, frameIndex);\n vec4 texel = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\n return texel.xy * (1.0 - tc.z) + texel.zw * tc.z;\n}\n`;\n\n// Position is quantized to 6 bytes (2 bytes per component). So we always must sample two adjacent texels. We discard two bytes based on whether the index is even or odd.\nconst computeAnimationFrameDisplacement = `\nvec3 computeAnimationFrameDisplacement(float vertIndex, float frameIndex, vec3 origin, vec3 scale) {\n vec3 tc = computeAnimLUTCoords(vertIndex, frameIndex);\n vec4 enc1 = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\n tc.x += g_anim_step.x;\n vec4 enc2 = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\n\n vec2 ex = enc1.xy * (1.0 - tc.z) + enc1.zw * tc.z;\n vec2 ey = enc1.zw * (1.0 - tc.z) + enc2.xy * tc.z;\n vec2 ez = enc2.xy * (1.0 - tc.z) + enc2.zw * tc.z;\n\n vec3 qpos = vec3(decodeUInt16(ex), decodeUInt16(ey), decodeUInt16(ez));\n return unquantizePosition(qpos, origin, scale).xyz;\n}\n`;\n\nconst computeAnimationDisplacement = `\nvec3 computeAnimationDisplacement(float vertIndex, float frameIndex0, float frameIndex1, float fraction, vec3 origin, vec3 scale) {\n if (frameIndex0 < 0.0)\n return vec3(0.0, 0.0, 0.0);\n\n vec3 displacement = computeAnimationFrameDisplacement(vertIndex, frameIndex0, origin, scale);\n if (fraction > 0.0) {\n vec3 displacement1 = computeAnimationFrameDisplacement(vertIndex, frameIndex1, origin, scale);\n displacement += fraction * (displacement1 - displacement);\n }\n\n return displacement;\n}\n`;\n\nconst adjustRawPosition = `\n rawPos.xyz += computeAnimationDisplacement(g_vertexLUTIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);\n return rawPos;\n`;\n\nconst computeAnimationFrameNormal = `\nvec3 computeAnimationFrameNormal(float frameIndex) {\n vec2 enc = sampleAnimVec2(g_vertexLUTIndex, frameIndex);\n return octDecodeNormal(enc);\n}\n`;\n\nconst computeAnimationNormal = `\nvec3 computeAnimationNormal(float frameIndex0, float frameIndex1, float fraction) {\n vec3 normal = computeAnimationFrameNormal(frameIndex0);\n if (fraction > 0.0) {\n vec3 normal1 = computeAnimationFrameNormal(frameIndex1);\n normal += fraction * (normal1 - normal);\n }\n\n return normal;\n}\n`;\n\nconst computeAnimationFrameParam = `\nfloat computeAnimationFrameParam(float frameIndex, float origin, float scale) {\n vec2 enc = sampleAnimVec2(g_vertexLUTIndex, frameIndex);\n return clamp((origin + scale * decodeUInt16(enc)), 0.0, 1.0);\n}\n`;\n\nconst computeAnimationParam = `\nvec2 computeAnimationParam(float frameIndex0, float frameIndex1, float fraction, float origin, float scale) {\n float param = computeAnimationFrameParam(frameIndex0, origin, scale);\n if (fraction > 0.0) {\n float param1 = computeAnimationFrameParam(frameIndex1, origin, scale);\n param += fraction * (param1 - param);\n }\n\n return vec2(.5, param);\n}\n`;\n\nconst scratchAnimParams = [\n undefined,\n undefined,\n new Float32Array(2), // origin, scale\n new Float32Array(3), // index0, index1, fraction\n];\n\nfunction getAnimParams(size: 2 | 3, initialValue?: number): Float32Array {\n // Elements 2 and 3 are guaranteed to be defined.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const array = scratchAnimParams[size]!;\n if (undefined !== initialValue)\n for (let i = 0; i < array.length; i++)\n array[i] = initialValue;\n\n return array;\n}\n\nfunction getDisplacementChannel(params: DrawParams): { channel: AuxDisplacementChannel, displacement: AnalysisStyleDisplacement } | undefined {\n const displacement = params.target.analysisStyle?.displacement;\n if (!displacement)\n return undefined;\n\n const channel = params.geometry.asLUT?.lut.auxChannels?.displacements?.get(displacement.channelName);\n return channel ? { channel, displacement } : undefined;\n}\n\nfunction getNormalChannel(params: DrawParams): AuxChannel | undefined {\n const channelName = params.target.analysisStyle?.normalChannelName;\n if (undefined === channelName)\n return undefined;\n\n return params.geometry.asLUT?.lut.auxChannels?.normals?.get(channelName);\n}\n\nfunction getScalarChannel(params: DrawParams): { channel: AuxParamChannel, scalar: AnalysisStyleThematic } | undefined {\n const scalar = params.target.analysisStyle?.thematic;\n if (!scalar)\n return undefined;\n\n const channel = params.geometry.asMesh?.lut.auxChannels?.params?.get(scalar.channelName);\n return channel ? { channel, scalar } : undefined;\n}\n\nfunction computeAnimParams(params: Float32Array, channel: AuxChannel, fraction: number): void {\n const { inputs, indices } = channel;\n const inputValue = fraction * inputs[inputs.length - 1];\n for (let i = 0; i < inputs.length - 1; i++) {\n if (inputValue >= inputs[i] && inputValue < inputs[i + 1]) {\n params[0] = indices[i];\n params[1] = indices[i + 1];\n params[2] = inputValue - inputs[i] / (inputs[i + 1] - inputs[i]);\n return;\n }\n }\n params[0] = params[1] = indices[inputs.length - 1];\n params[2] = 0.0;\n}\n\n/** @internal */\nexport function addAnimation(vert: VertexShaderBuilder, isSurface: boolean): void {\n // Lookup table\n vert.addGlobal(\"g_anim_step\", VariableType.Vec2);\n vert.addGlobal(\"g_anim_center\", VariableType.Vec2);\n vert.addInitializer(initialize);\n vert.addFunction(unquantizePosition);\n\n vert.addUniform(\"u_animLUT\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_animLUT\", (uniform, params) => {\n const channels = expectDefined(params.geometry.asLUT?.lut.auxChannels);\n assert(undefined !== channels);\n channels.texture.bindSampler(uniform, TextureUnit.AuxChannelLUT);\n });\n });\n\n vert.addUniform(\"u_animLUTParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_animLUTParams\", (uniform, params) => {\n const geom = expectDefined(params.geometry.asLUT);\n assert(undefined !== geom && undefined !== geom.lut.auxChannels);\n const tex = geom.lut.auxChannels.texture;\n const array = getAnimParams(3);\n array[0] = tex.width;\n array[1] = tex.height;\n array[2] = geom.lut.auxChannels.numBytesPerVertex / 2;\n uniform.setUniform3fv(array);\n });\n });\n\n vert.addFunction(computeAnimLUTCoords);\n vert.addFunction(sampleAnimVec2);\n\n // Displacement\n vert.addFunction(computeAnimationFrameDisplacement);\n vert.addFunction(computeAnimationDisplacement);\n vert.set(VertexShaderComponent.AdjustRawPosition, adjustRawPosition);\n\n vert.addUniform(\"u_animDispParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_animDispParams\", (uniform, params) => {\n const animParams = getAnimParams(3, 0.0);\n const disp = getDisplacementChannel(params);\n if (undefined !== disp)\n computeAnimParams(animParams, disp.channel, params.target.analysisFraction);\n\n uniform.setUniform3fv(animParams);\n });\n });\n vert.addUniform(\"u_qAnimDispScale\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_qAnimDispScale\", (uniform, params) => {\n const animParams = getAnimParams(3, 0.0);\n const disp = getDisplacementChannel(params);\n if (undefined !== disp)\n for (let i = 0; i < 3; i++)\n animParams[i] = disp.channel.qScale[i] * disp.displacement.scale;\n\n uniform.setUniform3fv(animParams);\n });\n });\n vert.addUniform(\"u_qAnimDispOrigin\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_qAnimDispOrigin\", (uniform, params) => {\n const animParams = getAnimParams(3, 0.0);\n const disp = getDisplacementChannel(params);\n if (undefined !== disp)\n for (let i = 0; i < 3; i++)\n animParams[i] = disp.channel.qOrigin[i] * disp.displacement.scale;\n\n uniform.setUniform3fv(animParams);\n });\n });\n\n // Normal and param\n if (isSurface) {\n vert.addFunction(octDecodeNormal);\n vert.addFunction(computeAnimationFrameNormal);\n vert.addFunction(computeAnimationNormal);\n\n vert.addFunction(computeAnimationFrameParam);\n vert.addFunction(computeAnimationParam);\n\n vert.addUniform(\"u_animNormalParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_animNormalParams\", (uniform, params) => {\n const animParams = getAnimParams(3, -1.0);\n const channel = getNormalChannel(params);\n if (undefined !== channel)\n computeAnimParams(animParams, channel, params.target.analysisFraction);\n\n uniform.setUniform3fv(animParams);\n });\n });\n\n vert.addUniform(\"u_animScalarParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_animScalarParams\", (uniform, params) => {\n const scalars = getScalarChannel(params);\n const animParams = getAnimParams(3, -1.0);\n if (scalars)\n computeAnimParams(animParams, scalars.channel, params.target.analysisFraction);\n\n uniform.setUniform3fv(animParams);\n });\n });\n\n vert.addUniform(\"u_animScalarQParams\", VariableType.Vec2, (prog) => {\n prog.addGraphicUniform(\"u_animScalarQParams\", (uniform, params) => {\n const scalars = getScalarChannel(params);\n const animParams = getAnimParams(2, 1.0);\n if (scalars) {\n const range = scalars.scalar.range;\n let rangeScale = range.high - range.low;\n if (rangeScale === 0)\n rangeScale = 1;\n\n animParams[0] = ThematicGradientSettings.margin + (scalars.channel.qOrigin - range.low) / rangeScale;\n animParams[1] = ThematicGradientSettings.contentRange * scalars.channel.qScale / rangeScale;\n }\n\n uniform.setUniform2fv(animParams);\n });\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Color.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Color.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAA2B,cAAc,EAA4D,MAAM,kBAAkB,CAAC;AAwCrI,gBAAgB;AAChB,wBAAgB,QAAQ,CAAC,OAAO,EAAE,cAAc,QAW/C;AAED,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAIjF"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module Rendering
|
|
7
7
|
*/
|
|
8
|
+
import { expectDefined } from "@itwin/core-bentley";
|
|
8
9
|
import { addInstanceColor } from "./Instancing";
|
|
9
10
|
// Vertex
|
|
10
11
|
// Color table is appended to vertex data. Compute the index of the vertex one-past-the-end of the vertex data
|
|
@@ -43,7 +44,7 @@ const computeBaseColor = "return v_color;";
|
|
|
43
44
|
export function addColor(builder) {
|
|
44
45
|
builder.vert.addUniform("u_color", 5 /* VariableType.Vec4 */, (prog) => {
|
|
45
46
|
prog.addGraphicUniform("u_color", (uniform, params) => {
|
|
46
|
-
const lutGeom = params.geometry.asLUT;
|
|
47
|
+
const lutGeom = expectDefined(params.geometry.asLUT);
|
|
47
48
|
const color = lutGeom.getColor(params.target);
|
|
48
49
|
if (color.isUniform) {
|
|
49
50
|
color.uniform.bind(uniform);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Color.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Color.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;
|
|
1
|
+
{"version":3,"file":"Color.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Color.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,SAAS;AACT,8GAA8G;AAC9G,iEAAiE;AACjE,SAAS,sBAAsB,CAAC,SAAkB;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACvE,OAAO;;oCAE2B,QAAQ;;;;;CAK3C,CAAC;AACF,CAAC;AAED,MAAM,WAAW,GAAG;;CAEnB,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;CAG1B,CAAC;AAEF,SAAS,eAAe,CAAC,IAAyB;IAChD,MAAM,SAAS,GAAG,WAAW,KAAK,IAAI,CAAC,YAAY,CAAC;IACpD,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,GAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,kBAAkB,GAAG,WAAW,EAAE,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,WAAW,EAAE,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,WAAW;AACX,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,gBAAgB;AAChB,MAAM,UAAU,QAAQ,CAAC,OAAuB;IAC9C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,6BAAqB,CAAC,IAAI,EAAE,EAAE;QAC7D,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,OAAuB,EAAE,iBAAyB;IAChF,OAAO,CAAC,UAAU,CAAC,SAAS,4BAAoB,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,GAAG,iDAAyC,iBAAiB,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,GAAG,mDAA2C,gBAAgB,CAAC,CAAC;AAC/E,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { expectDefined } from \"@itwin/core-bentley\";\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\nimport { addInstanceColor } from \"./Instancing\";\n\n// Vertex\n// Color table is appended to vertex data. Compute the index of the vertex one-past-the-end of the vertex data\n// NB: Color in color table has pre-multiplied alpha - revert it.\nfunction getComputeElementColor(quantized: boolean): string {\n const vertData = quantized ? \"g_vertLutData1.zw\" : \"g_vertLutData4.xy\";\n return `\n float colorTableStart = u_vertParams.z * u_vertParams.w; // num rgba per-vertex times num vertices\n float colorIndex = decodeUInt16(${vertData});\n vec2 tc = computeLUTCoords(colorTableStart+colorIndex, u_vertParams.xy, g_vert_center, 1.0);\n vec4 lutColor = TEXTURE(u_vertLUT, tc);\n lutColor.rgb /= max(0.0001, lutColor.a);\n vec4 color = (u_shaderFlags[kShaderBit_NonUniformColor] ? lutColor : u_color);\n`;\n}\n\nconst returnColor = `\n return color;\n`;\n\nconst applyInstanceColor = `\n color.rgb = mix(color.rgb, a_instanceRgba.rgb / 255.0, u_applyInstanceColor * extractInstanceBit(kOvrBit_Rgb));\n color.a = mix(color.a, a_instanceRgba.a / 255.0, u_applyInstanceColor * extractInstanceBit(kOvrBit_Alpha));\n`;\n\nfunction getComputeColor(vert: VertexShaderBuilder): string {\n const quantized = \"quantized\" === vert.positionType;\n if (vert.usesInstancedGeometry) {\n addInstanceColor(vert);\n return `${getComputeElementColor(quantized)}${applyInstanceColor}${returnColor}`;\n } else {\n return `${getComputeElementColor(quantized)}${returnColor}`;\n }\n}\n\n// Fragment\nconst computeBaseColor = \"return v_color;\";\n\n/** @internal */\nexport function addColor(builder: ProgramBuilder) {\n builder.vert.addUniform(\"u_color\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_color\", (uniform, params) => {\n const lutGeom = expectDefined(params.geometry.asLUT);\n const color = lutGeom.getColor(params.target);\n if (color.isUniform) {\n color.uniform.bind(uniform);\n }\n });\n });\n addVaryingColor(builder, getComputeColor(builder.vert));\n}\n\n/** @internal */\nexport function addVaryingColor(builder: ProgramBuilder, computeVertexBase: string) {\n builder.addVarying(\"v_color\", VariableType.Vec4);\n builder.vert.set(VertexShaderComponent.ComputeBaseColor, computeVertexBase);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\n}\n"]}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module WebGL
|
|
7
7
|
*/
|
|
8
|
-
import { assert } from "@itwin/core-bentley";
|
|
8
|
+
import { assert, expectDefined } from "@itwin/core-bentley";
|
|
9
9
|
import { TextureUnit } from "../RenderFlags";
|
|
10
10
|
import { Texture2DHandle } from "../Texture";
|
|
11
11
|
import { addWindowToTexCoords, assignFragColor } from "./Fragment";
|
|
@@ -158,7 +158,7 @@ export function createCompositeProgram(flags, context) {
|
|
|
158
158
|
if (wantOcclusion) {
|
|
159
159
|
frag.addUniform("u_occlusion", 8 /* VariableType.Sampler2D */, (prog) => {
|
|
160
160
|
prog.addGraphicUniform("u_occlusion", (uniform, params) => {
|
|
161
|
-
Texture2DHandle.bindSampler(uniform, params.geometry.occlusion, TextureUnit.Four);
|
|
161
|
+
Texture2DHandle.bindSampler(uniform, expectDefined(params.geometry.occlusion), TextureUnit.Four);
|
|
162
162
|
});
|
|
163
163
|
});
|
|
164
164
|
if (!wantHilite && !wantTranslucent)
|