@itwin/core-frontend 5.2.0-dev.3 → 5.2.0-dev.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -1
- 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 +5 -1
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +4 -0
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +156 -14
- 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.d.ts +3 -0
- package/lib/cjs/PlanarClipMaskState.d.ts.map +1 -1
- package/lib/cjs/PlanarClipMaskState.js +8 -4
- package/lib/cjs/PlanarClipMaskState.js.map +1 -1
- package/lib/cjs/RealityDataSource.d.ts.map +1 -1
- package/lib/cjs/RealityDataSource.js +5 -1
- package/lib/cjs/RealityDataSource.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/ViewContext.d.ts +10 -1
- package/lib/cjs/ViewContext.d.ts.map +1 -1
- package/lib/cjs/ViewContext.js +12 -1
- package/lib/cjs/ViewContext.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 +7 -7
- 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/cross-package.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +2 -1
- package/lib/cjs/internal/cross-package.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 +3 -3
- package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.d.ts +4 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/BatchUniforms.js +16 -5
- 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.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FeatureOverrides.js +14 -14
- 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/Graphic.d.ts +3 -3
- package/lib/cjs/internal/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/Graphic.js +7 -7
- package/lib/cjs/internal/render/webgl/Graphic.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 +1 -0
- package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/PlanarClassifier.js +27 -11
- 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/RenderCommands.d.ts +2 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.js +3 -1
- package/lib/cjs/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +118 -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 +12 -9
- 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/VisibleTileFeatures.js +1 -1
- package/lib/cjs/internal/render/webgl/VisibleTileFeatures.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/DynamicIModelTile.js +1 -0
- package/lib/cjs/internal/tile/DynamicIModelTile.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/PrimaryTileTree.d.ts +2 -0
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.js +17 -12
- package/lib/cjs/internal/tile/PrimaryTileTree.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 +69 -17
- 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/cjs/tools/ToolAdmin.d.ts +5 -0
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +9 -0
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/workers/ImdlParser/webpack.config.js +8 -0
- 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 +7 -3
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +4 -0
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +158 -16
- 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.d.ts +3 -0
- package/lib/esm/PlanarClipMaskState.d.ts.map +1 -1
- package/lib/esm/PlanarClipMaskState.js +8 -4
- package/lib/esm/PlanarClipMaskState.js.map +1 -1
- package/lib/esm/RealityDataSource.d.ts.map +1 -1
- package/lib/esm/RealityDataSource.js +5 -1
- package/lib/esm/RealityDataSource.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/ViewContext.d.ts +10 -1
- package/lib/esm/ViewContext.d.ts.map +1 -1
- package/lib/esm/ViewContext.js +12 -1
- package/lib/esm/ViewContext.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 +7 -7
- 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/cross-package.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/render/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 +4 -4
- package/lib/esm/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.d.ts +4 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/BatchUniforms.js +16 -5
- 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.d.ts +3 -3
- package/lib/esm/internal/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FeatureOverrides.js +15 -15
- 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/Graphic.d.ts +3 -3
- package/lib/esm/internal/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/Graphic.js +7 -7
- package/lib/esm/internal/render/webgl/Graphic.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 +1 -0
- package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/PlanarClassifier.js +28 -12
- 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/RenderCommands.d.ts +2 -1
- package/lib/esm/internal/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/RenderCommands.js +3 -1
- package/lib/esm/internal/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +119 -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 +13 -10
- 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/VisibleTileFeatures.js +1 -1
- package/lib/esm/internal/render/webgl/VisibleTileFeatures.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/DynamicIModelTile.js +1 -0
- package/lib/esm/internal/tile/DynamicIModelTile.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/PrimaryTileTree.d.ts +2 -0
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.js +16 -12
- package/lib/esm/internal/tile/PrimaryTileTree.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 +70 -18
- 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/esm/tools/ToolAdmin.d.ts +5 -0
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +9 -0
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/workers/ImdlParser/webpack.config.js +8 -0
- package/lib/public/images/GoogleMaps_Logo_Gray.svg +50 -0
- package/lib/public/images/GoogleMaps_Logo_WithDarkOutline.svg +78 -0
- package/lib/public/images/GoogleMaps_Logo_WithLightOutline.svg +78 -0
- package/lib/public/locales/en/iModelJs.json +1 -1
- package/lib/public/scripts/draco_decoder.wasm +0 -0
- package/lib/public/scripts/draco_encoder.js +52 -0
- package/lib/public/scripts/draco_wasm_wrapper.js +117 -0
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +25 -23
- package/lib/public/images/google_on_non_white.png +0 -0
- package/lib/public/images/google_on_non_white_hdpi.png +0 -0
- package/lib/public/images/google_on_white.png +0 -0
- package/lib/public/images/google_on_white_hdpi.png +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\nimport { applyTexture, overrideFeatureId, testInside } from \"./MaplayerDraping\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nexport const finalizeNormal = `\r\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addColorOverrideMix(frag: ShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n const textureCount = System.instance.maxRealityImageryLayers;\r\n const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture(true));\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n if (flags.enableAtmosphere)\r\n addAtmosphericScatteringEffect(builder, false, false);\r\n\r\n return builder;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, expectDefined } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\nimport { applyTexture, overrideFeatureId, testInside } from \"./MaplayerDraping\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nexport const finalizeNormal = `\r\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(expectDefined(params.geometry.asRealityMesh).hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(expectDefined(params.target.uniforms.frustum.viewMatrix.inverse()), scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(expectDefined(textureParam.getTerrainMatrix()));\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addColorOverrideMix(frag: ShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n const textureCount = System.instance.maxRealityImageryLayers;\r\n const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture(true));\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n if (flags.enableAtmosphere)\r\n addAtmosphericScatteringEffect(builder, false, false);\r\n\r\n return builder;\r\n}\r\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 { AttributeMap } from "../AttributeMap";
|
|
10
10
|
import { Material } from "../Material";
|
|
11
11
|
import { Pass, TextureUnit } from "../RenderFlags";
|
|
@@ -508,7 +508,7 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
508
508
|
builder.vert.addUniform("u_qTexCoordParams", 5 /* VariableType.Vec4 */, (prog) => {
|
|
509
509
|
prog.addGraphicUniform("u_qTexCoordParams", (uniform, params) => {
|
|
510
510
|
const surfGeom = params.geometry.asSurface;
|
|
511
|
-
if (surfGeom
|
|
511
|
+
if (surfGeom?.useTexture(params.programParams) || (surfGeom?.useNormalMap(params.programParams) && !isPointCloud)) {
|
|
512
512
|
const uvQParams = surfGeom.lut.uvQParams;
|
|
513
513
|
if (undefined !== uvQParams) {
|
|
514
514
|
uniform.setUniform4fv(uvQParams);
|
|
@@ -523,7 +523,7 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
523
523
|
if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures
|
|
524
524
|
params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);
|
|
525
525
|
}
|
|
526
|
-
else if (surfGeom
|
|
526
|
+
else if (surfGeom?.useTexture(params.programParams)) {
|
|
527
527
|
const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? params.target.analysisTexture : surfGeom.texture;
|
|
528
528
|
assert(undefined !== texture);
|
|
529
529
|
texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);
|
|
@@ -537,7 +537,7 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
537
537
|
builder.frag.addUniform("s_normalMap", 8 /* VariableType.Sampler2D */, (prog) => {
|
|
538
538
|
prog.addGraphicUniform("s_normalMap", (uniform, params) => {
|
|
539
539
|
const surfGeom = params.geometry.asSurface;
|
|
540
|
-
if (surfGeom
|
|
540
|
+
if (surfGeom?.useNormalMap(params.programParams)) {
|
|
541
541
|
const normalMap = surfGeom.normalMap;
|
|
542
542
|
assert(undefined !== normalMap);
|
|
543
543
|
normalMap.texture.bindSampler(uniform, TextureUnit.NormalMap);
|
|
@@ -551,7 +551,7 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
551
551
|
if (isMaplayer) {
|
|
552
552
|
builder.frag.addUniform("u_texturesPresent", 0 /* VariableType.Boolean */, (program) => {
|
|
553
553
|
program.addGraphicUniform("u_texturesPresent", (uniform, params) => {
|
|
554
|
-
uniform.setUniform1i(params.geometry.asSurface
|
|
554
|
+
uniform.setUniform1i(params.geometry.asSurface?.hasTextures ? 1 : 0);
|
|
555
555
|
});
|
|
556
556
|
});
|
|
557
557
|
const textureUnits = [
|
|
@@ -568,7 +568,7 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
568
568
|
prog.addGraphicUniform(textureLabel, (uniform, params) => {
|
|
569
569
|
const textureUnit = textureUnits[i];
|
|
570
570
|
const mesh = params.geometry.asSurface;
|
|
571
|
-
const drapeTexture = mesh
|
|
571
|
+
const drapeTexture = mesh?.textureParams ? mesh.textureParams.params[i].texture : undefined;
|
|
572
572
|
if (drapeTexture !== undefined) {
|
|
573
573
|
const texture = drapeTexture;
|
|
574
574
|
texture.texture.bindSampler(uniform, textureUnit);
|
|
@@ -583,23 +583,23 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
|
|
|
583
583
|
builder.frag.addUniform(matrixLabel, 7 /* VariableType.Mat4 */, (prog) => {
|
|
584
584
|
prog.addGraphicUniform(matrixLabel, (uniform, params) => {
|
|
585
585
|
const mesh = params.geometry.asSurface;
|
|
586
|
-
const textureParam = mesh
|
|
586
|
+
const textureParam = mesh?.textureParams?.params[i];
|
|
587
587
|
if (undefined !== textureParam) {
|
|
588
588
|
const projectionMatrix = textureParam.getProjectionMatrix();
|
|
589
589
|
if (projectionMatrix) {
|
|
590
|
-
const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse(), scratchMatrix4d1);
|
|
590
|
+
const eyeToModel = Matrix4d.createTransform(expectDefined(params.target.uniforms.frustum.viewMatrix.inverse()), scratchMatrix4d1);
|
|
591
591
|
const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);
|
|
592
592
|
uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));
|
|
593
593
|
}
|
|
594
594
|
else
|
|
595
|
-
uniform.setMatrix4(textureParam.getTerrainMatrix());
|
|
595
|
+
uniform.setMatrix4(expectDefined(textureParam.getTerrainMatrix()));
|
|
596
596
|
}
|
|
597
597
|
});
|
|
598
598
|
});
|
|
599
599
|
builder.frag.addUniform(paramsLabel, 7 /* VariableType.Mat4 */, (prog) => {
|
|
600
600
|
prog.addGraphicUniform(paramsLabel, (uniform, params) => {
|
|
601
601
|
const mesh = params.geometry.asSurface;
|
|
602
|
-
const textureParam = mesh
|
|
602
|
+
const textureParam = mesh?.textureParams?.params[i];
|
|
603
603
|
if (undefined !== textureParam) {
|
|
604
604
|
uniform.setMatrix4(textureParam.getParams(scratchMatrix));
|
|
605
605
|
}
|
|
@@ -675,7 +675,7 @@ export function createSurfaceBuilder(flags) {
|
|
|
675
675
|
builder.frag.addUniform("u_applyGlyphTex", 0 /* VariableType.Boolean */, (prog) => {
|
|
676
676
|
prog.addGraphicUniform("u_applyGlyphTex", (uniform, params) => {
|
|
677
677
|
const surfGeom = params.geometry.asSurface;
|
|
678
|
-
uniform.setUniform1i(surfGeom
|
|
678
|
+
uniform.setUniform1i(surfGeom?.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);
|
|
679
679
|
});
|
|
680
680
|
});
|
|
681
681
|
// Fragment and Vertex
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Material } from \"../Material\";\r\nimport { Pass, SurfaceBitIndex, SurfaceFlags, TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport {\r\n FeatureMode, IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, PositionType, TechniqueFlags,\r\n} from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { unpackFloat } from \"./Clipping\";\r\nimport { addColor } from \"./Color\";\r\nimport { addChooseVec2WithBitFlagsFunction, addChooseVec3WithBitFlagFunction, addExtractNthBit, addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addUnpackAndNormalize2Bytes, decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport {\r\n addFeatureSymbology, addMaxAlpha, addRenderOrder, addRenderOrderConstants, addSurfaceDiscard, addSurfaceHiliter, FeatureSymbologyOptions,\r\n} from \"./FeatureSymbology\";\r\nimport {\r\n addAltPickBufferOutputs, addFragColorWithPreMultipliedAlpha, addPickBufferOutputs, addWhiteOnWhiteReversal, assignFragColor,\r\n} from \"./Fragment\";\r\nimport { addLighting } from \"./Lighting\";\r\nimport { addSurfaceMonochrome } from \"./Monochrome\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier, addOverrideClassifierColor } from \"./PlanarClassification\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { wantMaterials } from \"../SurfaceGeometry\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { addApplyContours } from \"./Contours\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { addApplySurfaceDraping } from \"./MaplayerDraping\";\r\n\r\nconst constantLodTextureLookup = `\r\nvec4 constantLodTextureLookup(sampler2D textureSampler) {\r\n float logDepth = log2(v_uvCustom.z);\r\n float f = fract(logDepth);\r\n float p = floor(logDepth);\r\n // When p changes, both tc1 and tc2 jumped by a power of 2 at that transition (and f goes from ~1 to 0).\r\n // This caused a line to show up with incorrect tex coords, we believe due to a problem with the derivative\r\n // that is auto calculated on the tex coords for the mip-map. The below approach attempts to \"smooth\"\r\n // the transition of the coord in use at the transition by only changing the coord that is not in use\r\n // (but by 2 powers of 2) and switching the mix selector to account for it. It does this by using whether\r\n // p is odd or even to select which way it is going, so it alternates at the boundaries. This fixes the\r\n // line problem.\r\n float p1, p2;\r\n if (0u == (uint(p) & 1u)) { // p is even\r\n p1 = p;\r\n p2 = p + 1.0;\r\n } else { // p is odd\r\n p1 = p + 1.0;\r\n p2 = p;\r\n f = 1.0 - f;\r\n }\r\n\r\n vec2 tc1 = v_uvCustom.xy / clamp(pow(2.0, p1), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;\r\n vec2 tc2 = v_uvCustom.xy / clamp(pow(2.0, p2), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;\r\n return mix(TEXTURE(textureSampler, tc1), TEXTURE(textureSampler, tc2), f);\r\n}\r\n`;\r\n\r\n// NB: Textures do not contain pre-multiplied alpha.\r\nconst sampleSurfaceTexture = `\r\nvec4 sampleSurfaceTexture() {\r\n vec4 clr;\r\n if (!isSurfaceBitSet(kSurfaceBit_HasTexture))\r\n clr = vec4(1.0, 1.0, 1.0, 1.0);\r\n else if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodTextureMapping])\r\n clr = constantLodTextureLookup(s_texture);\r\n else\r\n clr = TEXTURE(s_texture, v_texCoord);\r\n return clr;\r\n}\r\n`;\r\n\r\nconst applyMaterialColor = `\r\n float useMatColor = float(use_material);\r\n vec3 rgb = mix(baseColor.rgb, mat_rgb.rgb, useMatColor * mat_rgb.a);\r\n float a = mix(baseColor.a, mat_alpha.x, useMatColor * mat_alpha.y);\r\n return vec4(rgb, a);\r\n`;\r\n\r\n// if this is a raster glyph, the sampled color has already been modified - do not modify further.\r\n// Mix diffuse color with texel based on texture weight.\r\n// Replace with diffuse RGB if RGB overridden.\r\n// Replace with diffuse alpha if alpha overridden.\r\n// Multiply texel alpha with diffuse alpha if specified.\r\nconst applyTextureWeight = `\r\n bool applyTexture = !u_applyGlyphTex && isSurfaceBitSet(kSurfaceBit_HasTexture);\r\n float textureWeight = applyTexture ? mat_texture_weight : 0.0;\r\n vec3 rgb = mix(baseColor.rgb, g_surfaceTexel.rgb, textureWeight);\r\n rgb = chooseVec3WithBitFlag(rgb, baseColor.rgb, surfaceFlags, kSurfaceBit_OverrideRgb);\r\n\r\n float a = applyTexture ? baseColor.a * g_surfaceTexel.a : baseColor.a;\r\n\r\n return vec4(rgb, a);\r\n`;\r\n\r\nconst decodeFragMaterialParams = `\r\nvoid decodeMaterialParams(vec4 params) {\r\n mat_weights = unpackAndNormalize2Bytes(params.x);\r\n\r\n vec2 texAndSpecR = unpackAndNormalize2Bytes(params.y);\r\n mat_texture_weight = texAndSpecR.x;\r\n\r\n vec2 specGB = unpackAndNormalize2Bytes(params.z);\r\n mat_specular = vec4(texAndSpecR.y, specGB, params.w);\r\n}\r\n`;\r\n\r\nconst decodeMaterialColor = `\r\nvoid decodeMaterialColor(vec4 rgba) {\r\n mat_rgb = vec4(rgba.rgb, float(rgba.r >= 0.0));\r\n mat_alpha = vec2(rgba.a, float(rgba.a >= 0.0));\r\n}\r\n`;\r\n\r\n// defaults: (0x6699, 0xffff, 0xffff, 13.5)\r\nconst computeMaterialParams = `\r\n const vec4 defaults = vec4(26265.0, 65535.0, 65535.0, 13.5);\r\n return use_material ? g_materialParams : defaults;\r\n`;\r\n\r\n// The 8-bit material index is stored with the 24-bit feature index, in the high byte.\r\nconst readMaterialAtlas = `\r\nvoid readMaterialAtlas() {\r\n float materialAtlasStart = u_vertParams.z * u_vertParams.w + u_numColors;\r\n float materialIndex = g_featureAndMaterialIndex.w * 4.0 + materialAtlasStart;\r\n\r\n vec2 tc = computeLUTCoords(materialIndex, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 rgba = TEXTURE(u_vertLUT, tc);\r\n\r\n tc = computeLUTCoords(materialIndex + 1.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 weightsAndFlags = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n\r\n tc = computeLUTCoords(materialIndex + 2.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec3 specularRgb = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5).rgb;\r\n\r\n tc = computeLUTCoords(materialIndex + 3.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 packedSpecularExponent = TEXTURE(u_vertLUT, tc);\r\n\r\n float flags = weightsAndFlags.w;\r\n mat_rgb = vec4(rgba.rgb, float(flags == 1.0 || flags == 3.0));\r\n mat_alpha = vec2(rgba.a, float(flags == 2.0 || flags == 3.0));\r\n\r\n float specularExponent = unpackFloat(packedSpecularExponent);\r\n g_materialParams.x = weightsAndFlags.y + weightsAndFlags.z * 256.0;\r\n g_materialParams.y = 255.0 + specularRgb.r * 256.0;\r\n g_materialParams.z = specularRgb.g + specularRgb.b * 256.0;\r\n g_materialParams.w = specularExponent;\r\n}\r\n`;\r\n\r\nconst computeMaterial = `\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasMaterialAtlas]) {\r\n readMaterialAtlas();\r\n } else {\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n }\r\n`;\r\n\r\nconst computeMaterialInstanced = `\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n`;\r\n\r\nfunction addMaterial(builder: ProgramBuilder, instanced: boolean): void {\r\n const frag = builder.frag;\r\n assert(undefined !== frag.find(\"v_surfaceFlags\"));\r\n\r\n frag.addGlobal(\"mat_texture_weight\", VariableType.Float);\r\n frag.addGlobal(\"mat_weights\", VariableType.Vec2); // diffuse, specular\r\n frag.addGlobal(\"mat_specular\", VariableType.Vec4); // rgb, exponent\r\n\r\n addUnpackAndNormalize2Bytes(frag);\r\n frag.addFunction(decodeFragMaterialParams);\r\n frag.addInitializer(\"decodeMaterialParams(v_materialParams);\");\r\n\r\n addChooseVec3WithBitFlagFunction(frag);\r\n frag.set(FragmentShaderComponent.ApplyMaterialOverrides, applyTextureWeight);\r\n\r\n const vert = builder.vert;\r\n vert.addGlobal(\"mat_rgb\", VariableType.Vec4); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"mat_alpha\", VariableType.Vec2); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"use_material\", VariableType.Boolean);\r\n vert.addInitializer(\"use_material = !u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial];\");\r\n\r\n // Uniform material\r\n vert.addFunction(decodeMaterialColor);\r\n vert.addUniform(\"u_materialColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialColor\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.rgba);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_materialParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialParams\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.fragUniforms);\r\n });\r\n });\r\n\r\n if (!instanced) {\r\n // Material atlas\r\n vert.addFunction(unpackFloat);\r\n vert.addFunction(readMaterialAtlas);\r\n vert.addUniform(\"u_numColors\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_numColors\", (uniform, params) => {\r\n const info = params.geometry.materialInfo;\r\n const numColors = undefined !== info && info.isAtlas ? info.vertexTableOffset : 0;\r\n uniform.setUniform1f(numColors);\r\n });\r\n });\r\n }\r\n vert.addGlobal(\"g_materialParams\", VariableType.Vec4);\r\n vert.set(VertexShaderComponent.ComputeMaterial, instanced ? computeMaterialInstanced : computeMaterial);\r\n vert.set(VertexShaderComponent.ApplyMaterialColor, applyMaterialColor);\r\n builder.addFunctionComputedVarying(\"v_materialParams\", VariableType.Vec4, \"computeMaterialParams\", computeMaterialParams);\r\n}\r\n\r\nconst computePositionPrelude = `\r\n vec4 pos = MAT_MV * rawPos;\r\n`;\r\n\r\n// We used to use gl.polygonOffset() for blanking regions, but that doesn't work with logarithmic depth buffer which overwrites the\r\n// computed Z. Instead we must manually offset in vertex shader. We do this even if log depth is not enabled/supported.\r\n// NOTE: If log depth is *not* supported, then the hilite surface vertex shaders previously would still include this logic, but the\r\n// fragment shaders would not use v_eyeSpace. Some Ubuntu 20.04 graphics drivers cleverly and correctly optimized out the varying and the uniform,\r\n// causing an exception when gl.getProgramLocation() failed. So, omit this bit in that case.\r\nconst adjustEyeSpace = `\r\n v_eyeSpace = pos.xyz;\r\n const float blankingRegionOffset = 2.0 / 65536.0;\r\n if (kRenderOrder_BlankingRegion == u_renderOrder)\r\n v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);\r\n`;\r\n\r\nconst computeConstantLodUvCustom = `\r\n vec2 worldpos = (u_modelToWorld * vec4(rawPos.xyz, 0.0)).xy;\r\n v_uvCustom = vec3((u_constantLodVParams.xy + worldpos) * vec2(1.0, -1.0), kFrustumType_Perspective == u_frustum.z ? -v_eyeSpace.z : u_constantLodVParams.z);\r\n`;\r\n\r\nconst computePositionPostlude = `\r\n return u_proj * pos;\r\n`;\r\n\r\nfunction createCommon(isInstanced: IsInstanced, animated: IsAnimated, shadowable: IsShadowable, isHiliter: boolean, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Surface, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n const vert = builder.vert;\r\n\r\n if (animated)\r\n addAnimation(vert, true);\r\n\r\n if (shadowable)\r\n addSolarShadowMap(builder);\r\n\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n\r\n let computePosition = computePositionPrelude;\r\n if (!isHiliter || System.instance.supportsLogZBuffer) {\r\n addFrustum(builder);\r\n addRenderOrder(builder.vert);\r\n addRenderOrderConstants(builder.vert);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n computePosition += adjustEyeSpace;\r\n }\r\n if (!isHiliter)\r\n computePosition += computeConstantLodUvCustom;\r\n computePosition += computePositionPostlude;\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceHiliter(instanced: IsInstanced, classified: IsClassified, posType: PositionType): ProgramBuilder {\r\n const builder = createCommon(instanced, IsAnimated.No, IsShadowable.No, true, posType);\r\n\r\n addSurfaceFlags(builder, true, false);\r\n addTexture(builder, IsAnimated.No, IsThematic.No, false, true, false);\r\n if (classified) {\r\n addHilitePlanarClassifier(builder);\r\n builder.vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n } else {\r\n addSurfaceHiliter(builder);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\nconst isSurfaceBitSet = `\r\nbool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }\r\n`;\r\n\r\n/** @internal */\r\nfunction addSurfaceFlagsLookup(builder: ShaderBuilder) {\r\n builder.addConstant(\"kSurfaceBitIndex_HasTexture\", VariableType.Int, SurfaceBitIndex.HasTexture.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_ApplyLighting\", VariableType.Int, SurfaceBitIndex.ApplyLighting.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormals\", VariableType.Int, SurfaceBitIndex.HasNormals.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_IgnoreMaterial\", VariableType.Int, SurfaceBitIndex.IgnoreMaterial.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_TransparencyThreshold\", VariableType.Int, SurfaceBitIndex.TransparencyThreshold.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_BackgroundFill\", VariableType.Int, SurfaceBitIndex.BackgroundFill.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasColorAndNormal\", VariableType.Int, SurfaceBitIndex.HasColorAndNormal.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_OverrideRgb\", VariableType.Int, SurfaceBitIndex.OverrideRgb.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormalMap\", VariableType.Int, SurfaceBitIndex.HasNormalMap.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasMaterialAtlas\", VariableType.Int, SurfaceBitIndex.HasMaterialAtlas.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_UseConstantLodTextureMapping\", VariableType.Int, SurfaceBitIndex.UseConstantLodTextureMapping.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_UseConstantLodNormalMapMapping\", VariableType.Int, SurfaceBitIndex.UseConstantLodNormalMapMapping.toString());\r\n\r\n // Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus\r\n // used differently there & so require different constants. Unused constants are commented out.\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasTexture\", SurfaceBitIndex.HasTexture);\r\n builder.addBitFlagConstant(\"kSurfaceBit_IgnoreMaterial\", SurfaceBitIndex.IgnoreMaterial);\r\n builder.addBitFlagConstant(\"kSurfaceBit_OverrideRgb\", SurfaceBitIndex.OverrideRgb);\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasNormalMap\", SurfaceBitIndex.HasNormalMap);\r\n\r\n // Only need masks for flags modified in vertex shader\r\n const suffix = \"u\";\r\n const type = VariableType.Uint;\r\n builder.addConstant(\"kSurfaceMask_HasTexture\", type, SurfaceFlags.HasTexture.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_IgnoreMaterial\", type, SurfaceFlags.IgnoreMaterial.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_OverrideRgb\", type, SurfaceFlags.OverrideRgb.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_HasNormalMap\", type, SurfaceFlags.HasNormalMap.toString() + suffix);\r\n\r\n addExtractNthBit(builder);\r\n builder.addFunction(isSurfaceBitSet);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Uint);\r\n}\r\n\r\nconst initSurfaceFlags = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0u;\r\n`;\r\n\r\nconst computeBaseSurfaceFlags = `\r\n if (feature_ignore_material) {\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasTexture])\r\n surfaceFlags -= kSurfaceMask_HasTexture;\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasNormalMap])\r\n surfaceFlags -= kSurfaceMask_HasNormalMap;\r\n\r\n surfaceFlags += kSurfaceMask_IgnoreMaterial;\r\n }\r\n`;\r\n\r\n// Textured surfaces (including raster glyphs) always *multiply* the sampled alpha by the alpha override.\r\nconst computeColorSurfaceFlags = `\r\n if (feature_rgb.r >= 0.0)\r\n surfaceFlags += kSurfaceMask_OverrideRgb;\r\n`;\r\n\r\nconst returnSurfaceFlags = \" return float(surfaceFlags);\\n\";\r\n\r\nconst computeSurfaceFlags = computeBaseSurfaceFlags;\r\nconst computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;\r\n\r\n/** @internal */\r\nexport const octDecodeNormal = `\r\nvec3 octDecodeNormal(vec2 e) {\r\n e = e / 255.0 * 2.0 - 1.0;\r\n vec3 n = vec3(e.x, e.y, 1.0 - abs(e.x) - abs(e.y));\r\n if (n.z < 0.0) {\r\n vec2 signNotZero = vec2(n.x >= 0.0 ? 1.0 : -1.0, n.y >= 0.0 ? 1.0 : -1.0);\r\n n.xy = (1.0 - abs(n.yx)) * signNotZero;\r\n }\r\n\r\n return normalize(n);\r\n}\r\n`;\r\n\r\nfunction getComputeNormal(quantized: boolean): string {\r\n const a = quantized ? \"g_vertLutData3.xy\" : \"g_vertLutData4.zw\";\r\n const b = quantized ? \"g_vertLutData1.zw\" : \"g_vertLutData5.xy\";\r\n return `\r\n if (!u_surfaceFlags[kSurfaceBitIndex_HasNormals])\r\n return vec3(0.0);\r\n\r\n vec2 normal = (u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal]) ? ${a} : ${b};\r\n return normalize(MAT_NORM * octDecodeNormal(normal));\r\n`;\r\n}\r\n\r\nconst finalizeNormalPrelude = `\r\n vec3 normal = normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst finalizeNormalNormalMap = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasNormalMap)) {\r\n // Modify the normal with the normal map texture.\r\n // First calculate the tangent.\r\n vec3 dp1 = dFdx(v_eyeSpace);\r\n vec3 dp2 = dFdy(v_eyeSpace);\r\n vec2 duv1 = dFdx(v_texCoord);\r\n vec2 duv2 = dFdy(v_texCoord);\r\n vec3 tangent = normalize(duv2.y * dp1 - duv1.y * dp2);\r\n tangent = normalize (tangent - normal * dot (normal, tangent)); // re-orthogonalize with normal\r\n bool flip = (duv1.x * duv2.y - duv2.x * duv1.y) < 0.0;\r\n if (flip)\r\n tangent = -tangent;\r\n vec3 biTangent = cross (normal, tangent);\r\n if (flip)\r\n biTangent = -biTangent;\r\n vec3 normM;\r\n if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodNormalMapMapping])\r\n normM = constantLodTextureLookup(s_normalMap).xyz;\r\n else\r\n normM = TEXTURE(s_normalMap, v_texCoord).xyz;\r\n if (length (normM) > 0.0001) { // check for empty normal texture\r\n normM = (normM - 0.5) * 2.0;\r\n normM = normalize (normM);\r\n normM.x *= abs(u_normalMapScale);\r\n normM.y *= u_normalMapScale;\r\n normM = normalize (normM);\r\n normal = normalize (normM.x * tangent + normM.y * biTangent + normM.z * normal);\r\n }\r\n }\r\n`;\r\n\r\nconst finalizeNormalPostlude = `\r\n return normal;\r\n`;\r\n\r\nfunction getComputeAnimatedNormal(quantized: boolean): string {\r\n return `\r\n if (u_animNormalParams.x >= 0.0)\r\n return normalize(MAT_NORM * computeAnimationNormal(u_animNormalParams.x, u_animNormalParams.y, u_animNormalParams.z));\r\n\r\n ${getComputeNormal(quantized)}`;\r\n}\r\n\r\nconst applyBackgroundColor = `\r\n return u_surfaceFlags[kSurfaceBitIndex_BackgroundFill] ? vec4(u_bgColor.rgb, baseColor.a) : baseColor;\r\n`;\r\n\r\nfunction getComputeTexCoord(quantized: boolean): string {\r\n const vertData = quantized ? \"g_vertLutData3\" : \"g_vertLutData4\";\r\n return `\r\n vec4 rgba = ${vertData};\r\n vec2 qcoords = vec2(decodeUInt16(rgba.xy), decodeUInt16(rgba.zw));\r\n return chooseVec2With2BitFlags(vec2(0.0), unquantize2d(qcoords, u_qTexCoordParams), surfaceFlags, kSurfaceBit_HasTexture, kSurfaceBit_HasNormalMap);\r\n`;\r\n}\r\n\r\nfunction getComputeAnimatedTexCoord(quantized: boolean): string {\r\n return `\r\n if (u_animScalarQParams.x >= 0.0)\r\n return computeAnimationParam(u_animScalarParams.x, u_animScalarParams.y, u_animScalarParams.z, u_animScalarQParams.x, u_animScalarQParams.y);\r\n\r\n ${getComputeTexCoord(quantized)}\r\n`;\r\n}\r\n\r\nconst getSurfaceColor = `\r\nvec4 getSurfaceColor() { return v_color; }\r\n`;\r\n\r\n// If we have texture weight < 1.0 we must compute the element/material color first then mix with texture color\r\n// in ApplyMaterialOverrides(). Do the sample once, here, and store in a global variable for possible later use.\r\n// If a glyph texture, must mix getSurfaceColor() with texture color so texture color alpha is applied 100% and\r\n// surface color rgb is scaled by texture color rgb (latter is full white originally but stretched via mipmapping).\r\nconst computeBaseColor = `\r\n g_surfaceTexel = sampleSurfaceTexture();\r\n vec4 surfaceColor = getSurfaceColor();\r\n\r\n if (!u_applyGlyphTex)\r\n return surfaceColor;\r\n\r\n // Compute color for raster glyph.\r\n const vec3 white = vec3(1.0);\r\n const vec3 epsilon = vec3(0.0001);\r\n vec3 almostWhite = white - epsilon;\r\n\r\n // set to black if almost white and reverse white-on-white is on\r\n bvec3 isAlmostWhite = greaterThan(surfaceColor.rgb, almostWhite);\r\n surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);\r\n return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a * surfaceColor.a);\r\n`;\r\n\r\nconst surfaceFlagArray = new Int32Array(SurfaceBitIndex.Count);\r\n\r\n/** @internal */\r\nexport function addSurfaceFlags(builder: ProgramBuilder, withFeatureOverrides: boolean, withFeatureColor: boolean) {\r\n addSurfaceFlagsLookup(builder.vert);\r\n addSurfaceFlagsLookup(builder.frag);\r\n\r\n let compute = initSurfaceFlags;\r\n if (withFeatureOverrides)\r\n compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\\n`;\r\n compute += returnSurfaceFlags;\r\n builder.addFunctionComputedVarying(\"v_surfaceFlags\", VariableType.Float, \"computeSurfaceFlags\", compute);\r\n\r\n builder.frag.addInitializer(\"surfaceFlags = uint(floor(v_surfaceFlags + 0.5));\");\r\n\r\n builder.addUniformArray(\"u_surfaceFlags\", VariableType.Boolean, SurfaceBitIndex.Count, (prog) => {\r\n prog.addGraphicUniform(\"u_surfaceFlags\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asSurface);\r\n const mesh = params.geometry.asSurface;\r\n mesh.computeSurfaceFlags(params.programParams, surfaceFlagArray);\r\n uniform.setUniform1iv(surfaceFlagArray);\r\n });\r\n });\r\n}\r\n\r\nfunction addNormal(builder: ProgramBuilder, animated: IsAnimated) {\r\n addNormalMatrix(builder.vert);\r\n\r\n const quantized = \"quantized\" === builder.vert.positionType;\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addFunction(\"vec3 computeSurfaceNormal()\", getComputeNormal(quantized));\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", animated ? getComputeAnimatedNormal(quantized) : \"return computeSurfaceNormal();\");\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n let finalizeNormal = finalizeNormalPrelude;\r\n\r\n finalizeNormal += finalizeNormalNormalMap;\r\n builder.frag.addFunction(constantLodTextureLookup);\r\n builder.frag.addUniform(\"u_normalMapScale\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_normalMapScale\", (uniform, params) => {\r\n if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas) {\r\n const normalMapParams = params.geometry.materialInfo.textureMapping?.normalMapParams;\r\n if (undefined !== normalMapParams) {\r\n let normalMapScale = 1.0;\r\n normalMapScale = normalMapParams.scale ?? 1.0;\r\n if (normalMapParams.greenUp)\r\n normalMapScale = -normalMapScale;\r\n uniform.setUniform1f(normalMapScale);\r\n }\r\n }\r\n });\r\n });\r\n\r\n finalizeNormal += finalizeNormalPostlude;\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n\r\n // Set to true to colorize surfaces based on normals (in world space).\r\n // You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.\r\n const debugNormals = false;\r\n if (debugNormals) {\r\n builder.frag.set(FragmentShaderComponent.ApplyDebugColor, \"return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);\");\r\n builder.addInlineComputedVarying(\"v_normal\", VariableType.Vec3, \"v_normal = computeSurfaceNormal();\");\r\n }\r\n}\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n/** @internal */\r\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud: boolean, isHilite: boolean, isMaplayer:boolean) {\r\n if (isThematic) {\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));\r\n }\r\n\r\n // Point clouds do not need to compute texture coordinates since the only texture they use is the thematic gradient.\r\n // Surfaces now need texture coordinates even for thematic in case they have a normal map.\r\n if (!isPointCloud) {\r\n builder.vert.addFunction(unquantize2d);\r\n addChooseVec2WithBitFlagsFunction(builder.vert);\r\n const quantized = \"quantized\" === builder.vert.positionType;\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", animated ? getComputeAnimatedTexCoord(quantized) : getComputeTexCoord(quantized));\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (surfGeom.useTexture(params.programParams) || (surfGeom.useNormalMap(params.programParams) && !isPointCloud)) {\r\n const uvQParams = surfGeom.lut.uvQParams;\r\n if (undefined !== uvQParams) {\r\n uniform.setUniform4fv(uvQParams);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures\r\n params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);\r\n } else if (surfGeom.useTexture(params.programParams)) {\r\n const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? (params.target.analysisTexture as Texture) : surfGeom.texture;\r\n assert(undefined !== texture);\r\n texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.SurfaceTexture);\r\n }\r\n });\r\n });\r\n\r\n if (!isHilite && !isPointCloud) {\r\n builder.frag.addUniform(\"s_normalMap\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_normalMap\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (surfGeom.useNormalMap(params.programParams)) {\r\n const normalMap = surfGeom.normalMap;\r\n assert(undefined !== normalMap);\r\n normalMap.texture.bindSampler(uniform, TextureUnit.NormalMap);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.NormalMap);\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (isMaplayer) {\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asSurface!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n const textureUnits = [\r\n TextureUnit.SurfaceDraping0,\r\n TextureUnit.SurfaceDraping1,\r\n TextureUnit.SurfaceDraping2,\r\n TextureUnit.SurfaceDraping3,\r\n TextureUnit.SurfaceDraping4,\r\n TextureUnit.SurfaceDraping5,\r\n ];\r\n\r\n for (let i = 0; i < textureUnits.length; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnit = textureUnits[i];\r\n const mesh = params.geometry.asSurface!;\r\n const drapeTexture = mesh.textureParams ? mesh.textureParams.params[i].texture : undefined;\r\n if (drapeTexture !== undefined) {\r\n const texture = drapeTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnit);\r\n params.context\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, textureUnit);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const mesh = params.geometry.asSurface!;\r\n const textureParam = mesh.textureParams?.params[i];\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const mesh = params.geometry.asSurface!;\r\n const textureParam = mesh.textureParams?.params[i];\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n}\r\n\r\nexport const discardClassifiedByAlpha = `\r\n if (u_no_classifier_discard)\r\n return false;\r\n\r\n bool hasAlpha = alpha <= s_maxAlpha;\r\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\r\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\r\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\r\n`;\r\n\r\nconst discardByAlphaCutoff = `\r\n float cutoff = abs(u_alphaCutoff);\r\n if (kRenderPass_Translucent == u_renderPass)\r\n return u_alphaCutoff > 0.0 && alpha >= cutoff;\r\n else\r\n return alpha < cutoff;\r\n`;\r\n\r\nfunction addTransparencyDiscard(frag: FragmentShaderBuilder): void {\r\n addRenderPass(frag);\r\n frag.addUniform(\"u_alphaCutoff\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_alphaCutoff\", (uniform, params) => {\r\n // This cutoff is used to discard pixels based on the alpha value sampled from the surface texture.\r\n // During readPixels, or when transparency is disabled, only discard 100% opaque pixels.\r\n // Otherwise, if the geometry draws in both opaque and translucent passes, use DisplayParams.minTransparency to filter pixels into appropriate pass to produce appropriate blending.\r\n // Negative cutoff applies only during opaque pass; positive cutoff applies during opaque and translucent passes.\r\n const pass = params.geometry.getPass(params.target);\r\n const cutoff = (!Pass.rendersOpaqueAndTranslucent(pass) || params.target.isReadPixelsInProgress || !params.target.currentViewFlags.transparency) ? -1 / 255 : 241 / 255;\r\n uniform.setUniform1f(cutoff);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.DiscardByAlpha, discardByAlphaCutoff);\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, false, flags.positionType);\r\n addShaderFlags(builder);\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n }\r\n\r\n if (flags.isThematic) {\r\n addThematicDisplay(builder);\r\n } else {\r\n builder.vert.addUniform(\"u_modelToWorld\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_modelToWorld\", (uniform, params) => {\r\n if (undefined !== params.geometry.asSurface?.mesh.constantLodVParams)\r\n params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n addSurfaceFlags(builder, FeatureMode.Overrides === feat, true);\r\n addSurfaceDiscard(builder, flags);\r\n addNormal(builder, flags.isAnimated);\r\n\r\n // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).\r\n builder.frag.set(FragmentShaderComponent.FinalizeBaseColor, applyBackgroundColor);\r\n builder.frag.addUniform(\"u_bgColor\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\r\n params.target.uniforms.style.bindBackgroundRgb(uniform);\r\n });\r\n });\r\n\r\n addTexture(builder, flags.isAnimated, flags.isThematic, false, false, true);\r\n\r\n builder.frag.addUniform(\"u_applyGlyphTex\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_applyGlyphTex\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n uniform.setUniform1i(surfGeom.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);\r\n });\r\n });\r\n\r\n // Fragment and Vertex\r\n addColor(builder);\r\n\r\n // Fragment\r\n builder.frag.addFunction(getSurfaceColor);\r\n addLighting(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n addApplyContours(builder);\r\n addApplySurfaceDraping(builder.frag);\r\n\r\n if (flags.isTranslucent) {\r\n addTranslucency(builder);\r\n } else {\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(builder.frag);\r\n } else {\r\n if (!flags.isClassified)\r\n addOverrideClassifierColor(builder, flags.isThematic);\r\n else\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isEdgeTestNeeded || flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n builder.addVarying(\"v_uvCustom\", VariableType.Vec3);\r\n\r\n builder.vert.addUniform(\"u_constantLodVParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_constantLodVParams\", (uniform, params) => {\r\n const vParams = params.geometry.asSurface?.mesh.constantLodVParams;\r\n if (undefined !== vParams) {\r\n vParams[2] = params.target.planFrustum.points[Npc.LeftTopRear].distance(params.target.planFrustum.points[Npc.RightTopRear]);\r\n uniform.setUniform3fv(vParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_constantLodFParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_constantLodFParams\", (uniform, params) => {\r\n const fParams = params.geometry.asSurface?.mesh.constantLodFParams;\r\n if (undefined !== fParams)\r\n uniform.setUniform3fv(fParams);\r\n });\r\n });\r\n builder.frag.addFunction(constantLodTextureLookup);\r\n builder.frag.addFunction(sampleSurfaceTexture);\r\n\r\n builder.frag.addGlobal(\"g_surfaceTexel\", VariableType.Vec4);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, (flags.isThematic === IsThematic.No) ? computeBaseColor : \"return getSurfaceColor();\");\r\n\r\n if (flags.isClassified)\r\n addClassificationTranslucencyDiscard(builder);\r\n else\r\n addTransparencyDiscard(builder.frag);\r\n\r\n addSurfaceMonochrome(builder.frag);\r\n addMaterial(builder, flags.isInstanced === IsInstanced.Yes);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\nexport function addClassificationTranslucencyDiscard(builder: ProgramBuilder) {\r\n // For unclassified geometry, we need to render in both the translucent and opaque passes if any feature transparency overrides are applied that would change the default render pass used.\r\n // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.\r\n // For classified geometry, the transparency comes from the classifier geometry (when using Display.ElementColor), so even if there are no feature overrides, we may need to draw in both passes.\r\n // Since the transparency is not known until the fragment shader, we must perform the discard there instead.\r\n addMaxAlpha(builder.frag);\r\n addRenderPass(builder.frag);\r\n\r\n // Do not discard transparent classified geometry if we're trying to do a pick...\r\n builder.frag.addUniform(\"u_no_classifier_discard\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_no_classifier_discard\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardClassifiedByAlpha);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, expectDefined } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Material } from \"../Material\";\r\nimport { Pass, SurfaceBitIndex, SurfaceFlags, TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport {\r\n FeatureMode, IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, PositionType, TechniqueFlags,\r\n} from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { unpackFloat } from \"./Clipping\";\r\nimport { addColor } from \"./Color\";\r\nimport { addChooseVec2WithBitFlagsFunction, addChooseVec3WithBitFlagFunction, addExtractNthBit, addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addUnpackAndNormalize2Bytes, decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport {\r\n addFeatureSymbology, addMaxAlpha, addRenderOrder, addRenderOrderConstants, addSurfaceDiscard, addSurfaceHiliter, FeatureSymbologyOptions,\r\n} from \"./FeatureSymbology\";\r\nimport {\r\n addAltPickBufferOutputs, addFragColorWithPreMultipliedAlpha, addPickBufferOutputs, addWhiteOnWhiteReversal, assignFragColor,\r\n} from \"./Fragment\";\r\nimport { addLighting } from \"./Lighting\";\r\nimport { addSurfaceMonochrome } from \"./Monochrome\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier, addOverrideClassifierColor } from \"./PlanarClassification\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { wantMaterials } from \"../SurfaceGeometry\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { addApplyContours } from \"./Contours\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { addApplySurfaceDraping } from \"./MaplayerDraping\";\r\n\r\nconst constantLodTextureLookup = `\r\nvec4 constantLodTextureLookup(sampler2D textureSampler) {\r\n float logDepth = log2(v_uvCustom.z);\r\n float f = fract(logDepth);\r\n float p = floor(logDepth);\r\n // When p changes, both tc1 and tc2 jumped by a power of 2 at that transition (and f goes from ~1 to 0).\r\n // This caused a line to show up with incorrect tex coords, we believe due to a problem with the derivative\r\n // that is auto calculated on the tex coords for the mip-map. The below approach attempts to \"smooth\"\r\n // the transition of the coord in use at the transition by only changing the coord that is not in use\r\n // (but by 2 powers of 2) and switching the mix selector to account for it. It does this by using whether\r\n // p is odd or even to select which way it is going, so it alternates at the boundaries. This fixes the\r\n // line problem.\r\n float p1, p2;\r\n if (0u == (uint(p) & 1u)) { // p is even\r\n p1 = p;\r\n p2 = p + 1.0;\r\n } else { // p is odd\r\n p1 = p + 1.0;\r\n p2 = p;\r\n f = 1.0 - f;\r\n }\r\n\r\n vec2 tc1 = v_uvCustom.xy / clamp(pow(2.0, p1), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;\r\n vec2 tc2 = v_uvCustom.xy / clamp(pow(2.0, p2), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;\r\n return mix(TEXTURE(textureSampler, tc1), TEXTURE(textureSampler, tc2), f);\r\n}\r\n`;\r\n\r\n// NB: Textures do not contain pre-multiplied alpha.\r\nconst sampleSurfaceTexture = `\r\nvec4 sampleSurfaceTexture() {\r\n vec4 clr;\r\n if (!isSurfaceBitSet(kSurfaceBit_HasTexture))\r\n clr = vec4(1.0, 1.0, 1.0, 1.0);\r\n else if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodTextureMapping])\r\n clr = constantLodTextureLookup(s_texture);\r\n else\r\n clr = TEXTURE(s_texture, v_texCoord);\r\n return clr;\r\n}\r\n`;\r\n\r\nconst applyMaterialColor = `\r\n float useMatColor = float(use_material);\r\n vec3 rgb = mix(baseColor.rgb, mat_rgb.rgb, useMatColor * mat_rgb.a);\r\n float a = mix(baseColor.a, mat_alpha.x, useMatColor * mat_alpha.y);\r\n return vec4(rgb, a);\r\n`;\r\n\r\n// if this is a raster glyph, the sampled color has already been modified - do not modify further.\r\n// Mix diffuse color with texel based on texture weight.\r\n// Replace with diffuse RGB if RGB overridden.\r\n// Replace with diffuse alpha if alpha overridden.\r\n// Multiply texel alpha with diffuse alpha if specified.\r\nconst applyTextureWeight = `\r\n bool applyTexture = !u_applyGlyphTex && isSurfaceBitSet(kSurfaceBit_HasTexture);\r\n float textureWeight = applyTexture ? mat_texture_weight : 0.0;\r\n vec3 rgb = mix(baseColor.rgb, g_surfaceTexel.rgb, textureWeight);\r\n rgb = chooseVec3WithBitFlag(rgb, baseColor.rgb, surfaceFlags, kSurfaceBit_OverrideRgb);\r\n\r\n float a = applyTexture ? baseColor.a * g_surfaceTexel.a : baseColor.a;\r\n\r\n return vec4(rgb, a);\r\n`;\r\n\r\nconst decodeFragMaterialParams = `\r\nvoid decodeMaterialParams(vec4 params) {\r\n mat_weights = unpackAndNormalize2Bytes(params.x);\r\n\r\n vec2 texAndSpecR = unpackAndNormalize2Bytes(params.y);\r\n mat_texture_weight = texAndSpecR.x;\r\n\r\n vec2 specGB = unpackAndNormalize2Bytes(params.z);\r\n mat_specular = vec4(texAndSpecR.y, specGB, params.w);\r\n}\r\n`;\r\n\r\nconst decodeMaterialColor = `\r\nvoid decodeMaterialColor(vec4 rgba) {\r\n mat_rgb = vec4(rgba.rgb, float(rgba.r >= 0.0));\r\n mat_alpha = vec2(rgba.a, float(rgba.a >= 0.0));\r\n}\r\n`;\r\n\r\n// defaults: (0x6699, 0xffff, 0xffff, 13.5)\r\nconst computeMaterialParams = `\r\n const vec4 defaults = vec4(26265.0, 65535.0, 65535.0, 13.5);\r\n return use_material ? g_materialParams : defaults;\r\n`;\r\n\r\n// The 8-bit material index is stored with the 24-bit feature index, in the high byte.\r\nconst readMaterialAtlas = `\r\nvoid readMaterialAtlas() {\r\n float materialAtlasStart = u_vertParams.z * u_vertParams.w + u_numColors;\r\n float materialIndex = g_featureAndMaterialIndex.w * 4.0 + materialAtlasStart;\r\n\r\n vec2 tc = computeLUTCoords(materialIndex, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 rgba = TEXTURE(u_vertLUT, tc);\r\n\r\n tc = computeLUTCoords(materialIndex + 1.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 weightsAndFlags = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n\r\n tc = computeLUTCoords(materialIndex + 2.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec3 specularRgb = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5).rgb;\r\n\r\n tc = computeLUTCoords(materialIndex + 3.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 packedSpecularExponent = TEXTURE(u_vertLUT, tc);\r\n\r\n float flags = weightsAndFlags.w;\r\n mat_rgb = vec4(rgba.rgb, float(flags == 1.0 || flags == 3.0));\r\n mat_alpha = vec2(rgba.a, float(flags == 2.0 || flags == 3.0));\r\n\r\n float specularExponent = unpackFloat(packedSpecularExponent);\r\n g_materialParams.x = weightsAndFlags.y + weightsAndFlags.z * 256.0;\r\n g_materialParams.y = 255.0 + specularRgb.r * 256.0;\r\n g_materialParams.z = specularRgb.g + specularRgb.b * 256.0;\r\n g_materialParams.w = specularExponent;\r\n}\r\n`;\r\n\r\nconst computeMaterial = `\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasMaterialAtlas]) {\r\n readMaterialAtlas();\r\n } else {\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n }\r\n`;\r\n\r\nconst computeMaterialInstanced = `\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n`;\r\n\r\nfunction addMaterial(builder: ProgramBuilder, instanced: boolean): void {\r\n const frag = builder.frag;\r\n assert(undefined !== frag.find(\"v_surfaceFlags\"));\r\n\r\n frag.addGlobal(\"mat_texture_weight\", VariableType.Float);\r\n frag.addGlobal(\"mat_weights\", VariableType.Vec2); // diffuse, specular\r\n frag.addGlobal(\"mat_specular\", VariableType.Vec4); // rgb, exponent\r\n\r\n addUnpackAndNormalize2Bytes(frag);\r\n frag.addFunction(decodeFragMaterialParams);\r\n frag.addInitializer(\"decodeMaterialParams(v_materialParams);\");\r\n\r\n addChooseVec3WithBitFlagFunction(frag);\r\n frag.set(FragmentShaderComponent.ApplyMaterialOverrides, applyTextureWeight);\r\n\r\n const vert = builder.vert;\r\n vert.addGlobal(\"mat_rgb\", VariableType.Vec4); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"mat_alpha\", VariableType.Vec2); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"use_material\", VariableType.Boolean);\r\n vert.addInitializer(\"use_material = !u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial];\");\r\n\r\n // Uniform material\r\n vert.addFunction(decodeMaterialColor);\r\n vert.addUniform(\"u_materialColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialColor\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.rgba);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_materialParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialParams\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.fragUniforms);\r\n });\r\n });\r\n\r\n if (!instanced) {\r\n // Material atlas\r\n vert.addFunction(unpackFloat);\r\n vert.addFunction(readMaterialAtlas);\r\n vert.addUniform(\"u_numColors\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_numColors\", (uniform, params) => {\r\n const info = params.geometry.materialInfo;\r\n const numColors = undefined !== info && info.isAtlas ? info.vertexTableOffset : 0;\r\n uniform.setUniform1f(numColors);\r\n });\r\n });\r\n }\r\n vert.addGlobal(\"g_materialParams\", VariableType.Vec4);\r\n vert.set(VertexShaderComponent.ComputeMaterial, instanced ? computeMaterialInstanced : computeMaterial);\r\n vert.set(VertexShaderComponent.ApplyMaterialColor, applyMaterialColor);\r\n builder.addFunctionComputedVarying(\"v_materialParams\", VariableType.Vec4, \"computeMaterialParams\", computeMaterialParams);\r\n}\r\n\r\nconst computePositionPrelude = `\r\n vec4 pos = MAT_MV * rawPos;\r\n`;\r\n\r\n// We used to use gl.polygonOffset() for blanking regions, but that doesn't work with logarithmic depth buffer which overwrites the\r\n// computed Z. Instead we must manually offset in vertex shader. We do this even if log depth is not enabled/supported.\r\n// NOTE: If log depth is *not* supported, then the hilite surface vertex shaders previously would still include this logic, but the\r\n// fragment shaders would not use v_eyeSpace. Some Ubuntu 20.04 graphics drivers cleverly and correctly optimized out the varying and the uniform,\r\n// causing an exception when gl.getProgramLocation() failed. So, omit this bit in that case.\r\nconst adjustEyeSpace = `\r\n v_eyeSpace = pos.xyz;\r\n const float blankingRegionOffset = 2.0 / 65536.0;\r\n if (kRenderOrder_BlankingRegion == u_renderOrder)\r\n v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);\r\n`;\r\n\r\nconst computeConstantLodUvCustom = `\r\n vec2 worldpos = (u_modelToWorld * vec4(rawPos.xyz, 0.0)).xy;\r\n v_uvCustom = vec3((u_constantLodVParams.xy + worldpos) * vec2(1.0, -1.0), kFrustumType_Perspective == u_frustum.z ? -v_eyeSpace.z : u_constantLodVParams.z);\r\n`;\r\n\r\nconst computePositionPostlude = `\r\n return u_proj * pos;\r\n`;\r\n\r\nfunction createCommon(isInstanced: IsInstanced, animated: IsAnimated, shadowable: IsShadowable, isHiliter: boolean, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Surface, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n const vert = builder.vert;\r\n\r\n if (animated)\r\n addAnimation(vert, true);\r\n\r\n if (shadowable)\r\n addSolarShadowMap(builder);\r\n\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n\r\n let computePosition = computePositionPrelude;\r\n if (!isHiliter || System.instance.supportsLogZBuffer) {\r\n addFrustum(builder);\r\n addRenderOrder(builder.vert);\r\n addRenderOrderConstants(builder.vert);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n computePosition += adjustEyeSpace;\r\n }\r\n if (!isHiliter)\r\n computePosition += computeConstantLodUvCustom;\r\n computePosition += computePositionPostlude;\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceHiliter(instanced: IsInstanced, classified: IsClassified, posType: PositionType): ProgramBuilder {\r\n const builder = createCommon(instanced, IsAnimated.No, IsShadowable.No, true, posType);\r\n\r\n addSurfaceFlags(builder, true, false);\r\n addTexture(builder, IsAnimated.No, IsThematic.No, false, true, false);\r\n if (classified) {\r\n addHilitePlanarClassifier(builder);\r\n builder.vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n } else {\r\n addSurfaceHiliter(builder);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\nconst isSurfaceBitSet = `\r\nbool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }\r\n`;\r\n\r\n/** @internal */\r\nfunction addSurfaceFlagsLookup(builder: ShaderBuilder) {\r\n builder.addConstant(\"kSurfaceBitIndex_HasTexture\", VariableType.Int, SurfaceBitIndex.HasTexture.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_ApplyLighting\", VariableType.Int, SurfaceBitIndex.ApplyLighting.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormals\", VariableType.Int, SurfaceBitIndex.HasNormals.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_IgnoreMaterial\", VariableType.Int, SurfaceBitIndex.IgnoreMaterial.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_TransparencyThreshold\", VariableType.Int, SurfaceBitIndex.TransparencyThreshold.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_BackgroundFill\", VariableType.Int, SurfaceBitIndex.BackgroundFill.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasColorAndNormal\", VariableType.Int, SurfaceBitIndex.HasColorAndNormal.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_OverrideRgb\", VariableType.Int, SurfaceBitIndex.OverrideRgb.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormalMap\", VariableType.Int, SurfaceBitIndex.HasNormalMap.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasMaterialAtlas\", VariableType.Int, SurfaceBitIndex.HasMaterialAtlas.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_UseConstantLodTextureMapping\", VariableType.Int, SurfaceBitIndex.UseConstantLodTextureMapping.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_UseConstantLodNormalMapMapping\", VariableType.Int, SurfaceBitIndex.UseConstantLodNormalMapMapping.toString());\r\n\r\n // Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus\r\n // used differently there & so require different constants. Unused constants are commented out.\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasTexture\", SurfaceBitIndex.HasTexture);\r\n builder.addBitFlagConstant(\"kSurfaceBit_IgnoreMaterial\", SurfaceBitIndex.IgnoreMaterial);\r\n builder.addBitFlagConstant(\"kSurfaceBit_OverrideRgb\", SurfaceBitIndex.OverrideRgb);\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasNormalMap\", SurfaceBitIndex.HasNormalMap);\r\n\r\n // Only need masks for flags modified in vertex shader\r\n const suffix = \"u\";\r\n const type = VariableType.Uint;\r\n builder.addConstant(\"kSurfaceMask_HasTexture\", type, SurfaceFlags.HasTexture.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_IgnoreMaterial\", type, SurfaceFlags.IgnoreMaterial.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_OverrideRgb\", type, SurfaceFlags.OverrideRgb.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_HasNormalMap\", type, SurfaceFlags.HasNormalMap.toString() + suffix);\r\n\r\n addExtractNthBit(builder);\r\n builder.addFunction(isSurfaceBitSet);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Uint);\r\n}\r\n\r\nconst initSurfaceFlags = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0u;\r\n`;\r\n\r\nconst computeBaseSurfaceFlags = `\r\n if (feature_ignore_material) {\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasTexture])\r\n surfaceFlags -= kSurfaceMask_HasTexture;\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasNormalMap])\r\n surfaceFlags -= kSurfaceMask_HasNormalMap;\r\n\r\n surfaceFlags += kSurfaceMask_IgnoreMaterial;\r\n }\r\n`;\r\n\r\n// Textured surfaces (including raster glyphs) always *multiply* the sampled alpha by the alpha override.\r\nconst computeColorSurfaceFlags = `\r\n if (feature_rgb.r >= 0.0)\r\n surfaceFlags += kSurfaceMask_OverrideRgb;\r\n`;\r\n\r\nconst returnSurfaceFlags = \" return float(surfaceFlags);\\n\";\r\n\r\nconst computeSurfaceFlags = computeBaseSurfaceFlags;\r\nconst computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;\r\n\r\n/** @internal */\r\nexport const octDecodeNormal = `\r\nvec3 octDecodeNormal(vec2 e) {\r\n e = e / 255.0 * 2.0 - 1.0;\r\n vec3 n = vec3(e.x, e.y, 1.0 - abs(e.x) - abs(e.y));\r\n if (n.z < 0.0) {\r\n vec2 signNotZero = vec2(n.x >= 0.0 ? 1.0 : -1.0, n.y >= 0.0 ? 1.0 : -1.0);\r\n n.xy = (1.0 - abs(n.yx)) * signNotZero;\r\n }\r\n\r\n return normalize(n);\r\n}\r\n`;\r\n\r\nfunction getComputeNormal(quantized: boolean): string {\r\n const a = quantized ? \"g_vertLutData3.xy\" : \"g_vertLutData4.zw\";\r\n const b = quantized ? \"g_vertLutData1.zw\" : \"g_vertLutData5.xy\";\r\n return `\r\n if (!u_surfaceFlags[kSurfaceBitIndex_HasNormals])\r\n return vec3(0.0);\r\n\r\n vec2 normal = (u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal]) ? ${a} : ${b};\r\n return normalize(MAT_NORM * octDecodeNormal(normal));\r\n`;\r\n}\r\n\r\nconst finalizeNormalPrelude = `\r\n vec3 normal = normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst finalizeNormalNormalMap = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasNormalMap)) {\r\n // Modify the normal with the normal map texture.\r\n // First calculate the tangent.\r\n vec3 dp1 = dFdx(v_eyeSpace);\r\n vec3 dp2 = dFdy(v_eyeSpace);\r\n vec2 duv1 = dFdx(v_texCoord);\r\n vec2 duv2 = dFdy(v_texCoord);\r\n vec3 tangent = normalize(duv2.y * dp1 - duv1.y * dp2);\r\n tangent = normalize (tangent - normal * dot (normal, tangent)); // re-orthogonalize with normal\r\n bool flip = (duv1.x * duv2.y - duv2.x * duv1.y) < 0.0;\r\n if (flip)\r\n tangent = -tangent;\r\n vec3 biTangent = cross (normal, tangent);\r\n if (flip)\r\n biTangent = -biTangent;\r\n vec3 normM;\r\n if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodNormalMapMapping])\r\n normM = constantLodTextureLookup(s_normalMap).xyz;\r\n else\r\n normM = TEXTURE(s_normalMap, v_texCoord).xyz;\r\n if (length (normM) > 0.0001) { // check for empty normal texture\r\n normM = (normM - 0.5) * 2.0;\r\n normM = normalize (normM);\r\n normM.x *= abs(u_normalMapScale);\r\n normM.y *= u_normalMapScale;\r\n normM = normalize (normM);\r\n normal = normalize (normM.x * tangent + normM.y * biTangent + normM.z * normal);\r\n }\r\n }\r\n`;\r\n\r\nconst finalizeNormalPostlude = `\r\n return normal;\r\n`;\r\n\r\nfunction getComputeAnimatedNormal(quantized: boolean): string {\r\n return `\r\n if (u_animNormalParams.x >= 0.0)\r\n return normalize(MAT_NORM * computeAnimationNormal(u_animNormalParams.x, u_animNormalParams.y, u_animNormalParams.z));\r\n\r\n ${getComputeNormal(quantized)}`;\r\n}\r\n\r\nconst applyBackgroundColor = `\r\n return u_surfaceFlags[kSurfaceBitIndex_BackgroundFill] ? vec4(u_bgColor.rgb, baseColor.a) : baseColor;\r\n`;\r\n\r\nfunction getComputeTexCoord(quantized: boolean): string {\r\n const vertData = quantized ? \"g_vertLutData3\" : \"g_vertLutData4\";\r\n return `\r\n vec4 rgba = ${vertData};\r\n vec2 qcoords = vec2(decodeUInt16(rgba.xy), decodeUInt16(rgba.zw));\r\n return chooseVec2With2BitFlags(vec2(0.0), unquantize2d(qcoords, u_qTexCoordParams), surfaceFlags, kSurfaceBit_HasTexture, kSurfaceBit_HasNormalMap);\r\n`;\r\n}\r\n\r\nfunction getComputeAnimatedTexCoord(quantized: boolean): string {\r\n return `\r\n if (u_animScalarQParams.x >= 0.0)\r\n return computeAnimationParam(u_animScalarParams.x, u_animScalarParams.y, u_animScalarParams.z, u_animScalarQParams.x, u_animScalarQParams.y);\r\n\r\n ${getComputeTexCoord(quantized)}\r\n`;\r\n}\r\n\r\nconst getSurfaceColor = `\r\nvec4 getSurfaceColor() { return v_color; }\r\n`;\r\n\r\n// If we have texture weight < 1.0 we must compute the element/material color first then mix with texture color\r\n// in ApplyMaterialOverrides(). Do the sample once, here, and store in a global variable for possible later use.\r\n// If a glyph texture, must mix getSurfaceColor() with texture color so texture color alpha is applied 100% and\r\n// surface color rgb is scaled by texture color rgb (latter is full white originally but stretched via mipmapping).\r\nconst computeBaseColor = `\r\n g_surfaceTexel = sampleSurfaceTexture();\r\n vec4 surfaceColor = getSurfaceColor();\r\n\r\n if (!u_applyGlyphTex)\r\n return surfaceColor;\r\n\r\n // Compute color for raster glyph.\r\n const vec3 white = vec3(1.0);\r\n const vec3 epsilon = vec3(0.0001);\r\n vec3 almostWhite = white - epsilon;\r\n\r\n // set to black if almost white and reverse white-on-white is on\r\n bvec3 isAlmostWhite = greaterThan(surfaceColor.rgb, almostWhite);\r\n surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);\r\n return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a * surfaceColor.a);\r\n`;\r\n\r\nconst surfaceFlagArray = new Int32Array(SurfaceBitIndex.Count);\r\n\r\n/** @internal */\r\nexport function addSurfaceFlags(builder: ProgramBuilder, withFeatureOverrides: boolean, withFeatureColor: boolean) {\r\n addSurfaceFlagsLookup(builder.vert);\r\n addSurfaceFlagsLookup(builder.frag);\r\n\r\n let compute = initSurfaceFlags;\r\n if (withFeatureOverrides)\r\n compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\\n`;\r\n compute += returnSurfaceFlags;\r\n builder.addFunctionComputedVarying(\"v_surfaceFlags\", VariableType.Float, \"computeSurfaceFlags\", compute);\r\n\r\n builder.frag.addInitializer(\"surfaceFlags = uint(floor(v_surfaceFlags + 0.5));\");\r\n\r\n builder.addUniformArray(\"u_surfaceFlags\", VariableType.Boolean, SurfaceBitIndex.Count, (prog) => {\r\n prog.addGraphicUniform(\"u_surfaceFlags\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asSurface);\r\n const mesh = params.geometry.asSurface;\r\n mesh.computeSurfaceFlags(params.programParams, surfaceFlagArray);\r\n uniform.setUniform1iv(surfaceFlagArray);\r\n });\r\n });\r\n}\r\n\r\nfunction addNormal(builder: ProgramBuilder, animated: IsAnimated) {\r\n addNormalMatrix(builder.vert);\r\n\r\n const quantized = \"quantized\" === builder.vert.positionType;\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addFunction(\"vec3 computeSurfaceNormal()\", getComputeNormal(quantized));\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", animated ? getComputeAnimatedNormal(quantized) : \"return computeSurfaceNormal();\");\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n let finalizeNormal = finalizeNormalPrelude;\r\n\r\n finalizeNormal += finalizeNormalNormalMap;\r\n builder.frag.addFunction(constantLodTextureLookup);\r\n builder.frag.addUniform(\"u_normalMapScale\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_normalMapScale\", (uniform, params) => {\r\n if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas) {\r\n const normalMapParams = params.geometry.materialInfo.textureMapping?.normalMapParams;\r\n if (undefined !== normalMapParams) {\r\n let normalMapScale = 1.0;\r\n normalMapScale = normalMapParams.scale ?? 1.0;\r\n if (normalMapParams.greenUp)\r\n normalMapScale = -normalMapScale;\r\n uniform.setUniform1f(normalMapScale);\r\n }\r\n }\r\n });\r\n });\r\n\r\n finalizeNormal += finalizeNormalPostlude;\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n\r\n // Set to true to colorize surfaces based on normals (in world space).\r\n // You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.\r\n const debugNormals = false;\r\n if (debugNormals) {\r\n builder.frag.set(FragmentShaderComponent.ApplyDebugColor, \"return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);\");\r\n builder.addInlineComputedVarying(\"v_normal\", VariableType.Vec3, \"v_normal = computeSurfaceNormal();\");\r\n }\r\n}\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n/** @internal */\r\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud: boolean, isHilite: boolean, isMaplayer:boolean) {\r\n if (isThematic) {\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));\r\n }\r\n\r\n // Point clouds do not need to compute texture coordinates since the only texture they use is the thematic gradient.\r\n // Surfaces now need texture coordinates even for thematic in case they have a normal map.\r\n if (!isPointCloud) {\r\n builder.vert.addFunction(unquantize2d);\r\n addChooseVec2WithBitFlagsFunction(builder.vert);\r\n const quantized = \"quantized\" === builder.vert.positionType;\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", animated ? getComputeAnimatedTexCoord(quantized) : getComputeTexCoord(quantized));\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface;\r\n if (surfGeom?.useTexture(params.programParams) || (surfGeom?.useNormalMap(params.programParams) && !isPointCloud)) {\r\n const uvQParams = surfGeom.lut.uvQParams;\r\n if (undefined !== uvQParams) {\r\n uniform.setUniform4fv(uvQParams);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface;\r\n if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures\r\n params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);\r\n } else if (surfGeom?.useTexture(params.programParams)) {\r\n const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? (params.target.analysisTexture as Texture) : surfGeom.texture;\r\n assert(undefined !== texture);\r\n texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.SurfaceTexture);\r\n }\r\n });\r\n });\r\n\r\n if (!isHilite && !isPointCloud) {\r\n builder.frag.addUniform(\"s_normalMap\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_normalMap\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface;\r\n if (surfGeom?.useNormalMap(params.programParams)) {\r\n const normalMap = surfGeom.normalMap;\r\n assert(undefined !== normalMap);\r\n normalMap.texture.bindSampler(uniform, TextureUnit.NormalMap);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.NormalMap);\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (isMaplayer) {\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asSurface?.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n const textureUnits = [\r\n TextureUnit.SurfaceDraping0,\r\n TextureUnit.SurfaceDraping1,\r\n TextureUnit.SurfaceDraping2,\r\n TextureUnit.SurfaceDraping3,\r\n TextureUnit.SurfaceDraping4,\r\n TextureUnit.SurfaceDraping5,\r\n ];\r\n\r\n for (let i = 0; i < textureUnits.length; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnit = textureUnits[i];\r\n const mesh = params.geometry.asSurface;\r\n const drapeTexture = mesh?.textureParams ? mesh.textureParams.params[i].texture : undefined;\r\n if (drapeTexture !== undefined) {\r\n const texture = drapeTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnit);\r\n params.context\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, textureUnit);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const mesh = params.geometry.asSurface;\r\n const textureParam = mesh?.textureParams?.params[i];\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(expectDefined(params.target.uniforms.frustum.viewMatrix.inverse()), scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(expectDefined(textureParam.getTerrainMatrix()));\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const mesh = params.geometry.asSurface;\r\n const textureParam = mesh?.textureParams?.params[i];\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n}\r\n\r\nexport const discardClassifiedByAlpha = `\r\n if (u_no_classifier_discard)\r\n return false;\r\n\r\n bool hasAlpha = alpha <= s_maxAlpha;\r\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\r\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\r\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\r\n`;\r\n\r\nconst discardByAlphaCutoff = `\r\n float cutoff = abs(u_alphaCutoff);\r\n if (kRenderPass_Translucent == u_renderPass)\r\n return u_alphaCutoff > 0.0 && alpha >= cutoff;\r\n else\r\n return alpha < cutoff;\r\n`;\r\n\r\nfunction addTransparencyDiscard(frag: FragmentShaderBuilder): void {\r\n addRenderPass(frag);\r\n frag.addUniform(\"u_alphaCutoff\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_alphaCutoff\", (uniform, params) => {\r\n // This cutoff is used to discard pixels based on the alpha value sampled from the surface texture.\r\n // During readPixels, or when transparency is disabled, only discard 100% opaque pixels.\r\n // Otherwise, if the geometry draws in both opaque and translucent passes, use DisplayParams.minTransparency to filter pixels into appropriate pass to produce appropriate blending.\r\n // Negative cutoff applies only during opaque pass; positive cutoff applies during opaque and translucent passes.\r\n const pass = params.geometry.getPass(params.target);\r\n const cutoff = (!Pass.rendersOpaqueAndTranslucent(pass) || params.target.isReadPixelsInProgress || !params.target.currentViewFlags.transparency) ? -1 / 255 : 241 / 255;\r\n uniform.setUniform1f(cutoff);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.DiscardByAlpha, discardByAlphaCutoff);\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, false, flags.positionType);\r\n addShaderFlags(builder);\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n }\r\n\r\n if (flags.isThematic) {\r\n addThematicDisplay(builder);\r\n } else {\r\n builder.vert.addUniform(\"u_modelToWorld\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_modelToWorld\", (uniform, params) => {\r\n if (undefined !== params.geometry.asSurface?.mesh.constantLodVParams)\r\n params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n addSurfaceFlags(builder, FeatureMode.Overrides === feat, true);\r\n addSurfaceDiscard(builder, flags);\r\n addNormal(builder, flags.isAnimated);\r\n\r\n // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).\r\n builder.frag.set(FragmentShaderComponent.FinalizeBaseColor, applyBackgroundColor);\r\n builder.frag.addUniform(\"u_bgColor\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\r\n params.target.uniforms.style.bindBackgroundRgb(uniform);\r\n });\r\n });\r\n\r\n addTexture(builder, flags.isAnimated, flags.isThematic, false, false, true);\r\n\r\n builder.frag.addUniform(\"u_applyGlyphTex\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_applyGlyphTex\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface;\r\n uniform.setUniform1i(surfGeom?.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);\r\n });\r\n });\r\n\r\n // Fragment and Vertex\r\n addColor(builder);\r\n\r\n // Fragment\r\n builder.frag.addFunction(getSurfaceColor);\r\n addLighting(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n addApplyContours(builder);\r\n addApplySurfaceDraping(builder.frag);\r\n\r\n if (flags.isTranslucent) {\r\n addTranslucency(builder);\r\n } else {\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(builder.frag);\r\n } else {\r\n if (!flags.isClassified)\r\n addOverrideClassifierColor(builder, flags.isThematic);\r\n else\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isEdgeTestNeeded || flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n builder.addVarying(\"v_uvCustom\", VariableType.Vec3);\r\n\r\n builder.vert.addUniform(\"u_constantLodVParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_constantLodVParams\", (uniform, params) => {\r\n const vParams = params.geometry.asSurface?.mesh.constantLodVParams;\r\n if (undefined !== vParams) {\r\n vParams[2] = params.target.planFrustum.points[Npc.LeftTopRear].distance(params.target.planFrustum.points[Npc.RightTopRear]);\r\n uniform.setUniform3fv(vParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_constantLodFParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_constantLodFParams\", (uniform, params) => {\r\n const fParams = params.geometry.asSurface?.mesh.constantLodFParams;\r\n if (undefined !== fParams)\r\n uniform.setUniform3fv(fParams);\r\n });\r\n });\r\n builder.frag.addFunction(constantLodTextureLookup);\r\n builder.frag.addFunction(sampleSurfaceTexture);\r\n\r\n builder.frag.addGlobal(\"g_surfaceTexel\", VariableType.Vec4);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, (flags.isThematic === IsThematic.No) ? computeBaseColor : \"return getSurfaceColor();\");\r\n\r\n if (flags.isClassified)\r\n addClassificationTranslucencyDiscard(builder);\r\n else\r\n addTransparencyDiscard(builder.frag);\r\n\r\n addSurfaceMonochrome(builder.frag);\r\n addMaterial(builder, flags.isInstanced === IsInstanced.Yes);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\nexport function addClassificationTranslucencyDiscard(builder: ProgramBuilder) {\r\n // For unclassified geometry, we need to render in both the translucent and opaque passes if any feature transparency overrides are applied that would change the default render pass used.\r\n // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.\r\n // For classified geometry, the transparency comes from the classifier geometry (when using Display.ElementColor), so even if there are no feature overrides, we may need to draw in both passes.\r\n // Since the transparency is not known until the fragment shader, we must perform the discard there instead.\r\n addMaxAlpha(builder.frag);\r\n addRenderPass(builder.frag);\r\n\r\n // Do not discard transparent classified geometry if we're trying to do a pick...\r\n builder.frag.addUniform(\"u_no_classifier_discard\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_no_classifier_discard\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardClassifiedByAlpha);\r\n}\r\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 { Matrix4 } from "../Matrix";
|
|
10
10
|
import { Pass, TextureUnit } from "../RenderFlags";
|
|
11
11
|
import { decodeUint16, decodeUint24 } from "./Decode";
|
|
@@ -109,7 +109,7 @@ export function addInstancedRtcMatrix(vert) {
|
|
|
109
109
|
assert(undefined !== vert.find("g_modelMatrixRTC")); // set up in VertexShaderBuilder constructor...
|
|
110
110
|
vert.addUniform("u_instanced_rtc", 7 /* VariableType.Mat4 */, (prog) => {
|
|
111
111
|
prog.addGraphicUniform("u_instanced_rtc", (uniform, params) => {
|
|
112
|
-
const modelt = params.geometry.asInstanced.getRtcOnlyTransform();
|
|
112
|
+
const modelt = expectDefined(params.geometry.asInstanced).getRtcOnlyTransform();
|
|
113
113
|
uniform.setMatrix4(Matrix4.fromTransform(modelt));
|
|
114
114
|
});
|
|
115
115
|
});
|
|
@@ -191,7 +191,7 @@ function addPositionFromLUT(vert) {
|
|
|
191
191
|
vert.addFunction(unquantized ? computeUnquantizedPosition : computeVertexPositionFromLUT);
|
|
192
192
|
vert.addUniform("u_vertLUT", 8 /* VariableType.Sampler2D */, (prog) => {
|
|
193
193
|
prog.addGraphicUniform("u_vertLUT", (uniform, params) => {
|
|
194
|
-
(params.geometry.asLUT).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);
|
|
194
|
+
expectDefined(params.geometry.asLUT).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);
|
|
195
195
|
});
|
|
196
196
|
});
|
|
197
197
|
vert.addUniform("u_vertParams", 5 /* VariableType.Vec4 */, (prog) => {
|