@itwin/core-frontend 4.10.0-dev.30 → 4.10.0-dev.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/AccuDraw.js +2 -2
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.d.ts.map +1 -1
- package/lib/cjs/AccuSnap.js +7 -2
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/BackgroundMapGeometry.js +3 -3
- package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseTxns.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.d.ts +3 -3
- package/lib/cjs/DrawingViewState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.js +9 -8
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/GraphicalEditingScope.d.ts.map +1 -1
- package/lib/cjs/HitDetail.d.ts +36 -7
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +11 -3
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/LinePlaneIntersect.js +1 -2
- package/lib/cjs/LinePlaneIntersect.js.map +1 -1
- package/lib/cjs/NoRenderApp.d.ts.map +1 -1
- package/lib/cjs/NotificationManager.d.ts +2 -2
- package/lib/cjs/NotificationManager.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.d.ts +3 -3
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +18 -5
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/ViewGlobalLocation.js +9 -9
- package/lib/cjs/ViewGlobalLocation.js.map +1 -1
- package/lib/cjs/ViewState.d.ts +16 -7
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +4 -4
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +1 -0
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/ViewportSync.js +6 -6
- package/lib/cjs/ViewportSync.js.map +1 -1
- package/lib/cjs/common/ImageUtil.js +15 -16
- package/lib/cjs/common/ImageUtil.js.map +1 -1
- package/lib/cjs/common/WorkerProxy.js +1 -2
- package/lib/cjs/common/WorkerProxy.js.map +1 -1
- package/lib/cjs/common/gltf/GltfParser.js +1 -2
- package/lib/cjs/common/gltf/GltfParser.js.map +1 -1
- package/lib/cjs/common/gltf/GltfSchema.js +5 -5
- package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
- package/lib/cjs/common/imdl/CompactEdges.js +1 -2
- package/lib/cjs/common/imdl/CompactEdges.js.map +1 -1
- package/lib/cjs/common/imdl/ImdlModel.js +2 -3
- package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.js +6 -7
- package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/cjs/common/internal/render/EdgeParams.js +2 -3
- package/lib/cjs/common/internal/render/EdgeParams.js.map +1 -1
- package/lib/cjs/common/internal/render/GeometryList.d.ts +1 -1
- package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +3 -3
- package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
- package/lib/cjs/common/internal/render/LineCode.js +1 -2
- package/lib/cjs/common/internal/render/LineCode.js.map +1 -1
- package/lib/cjs/common/internal/render/MeshPrimitives.js +3 -3
- package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
- package/lib/cjs/common/internal/render/PointStringParams.js +1 -2
- package/lib/cjs/common/internal/render/PointStringParams.js.map +1 -1
- package/lib/cjs/common/internal/render/PolylineParams.js +4 -5
- package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -1
- package/lib/cjs/common/internal/render/SurfaceParams.js +3 -3
- package/lib/cjs/common/internal/render/SurfaceParams.js.map +1 -1
- package/lib/cjs/common/internal/render/VertexTable.js +1 -2
- package/lib/cjs/common/internal/render/VertexTable.js.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableBuilder.js +2 -2
- package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
- package/lib/cjs/common/internal/render/VertexTableSplitter.js +4 -4
- package/lib/cjs/common/internal/render/VertexTableSplitter.js.map +1 -1
- package/lib/cjs/extension/providers/ExtensionLoadScript.js +1 -2
- package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +2 -3
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +2 -2
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +3 -3
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.d.ts +3 -1
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js +2 -2
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/GraphicTemplate.js +1 -2
- package/lib/cjs/render/GraphicTemplate.js.map +1 -1
- package/lib/cjs/render/MockRender.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.d.ts +9 -7
- package/lib/cjs/render/Pixel.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.js +20 -5
- package/lib/cjs/render/Pixel.js.map +1 -1
- package/lib/cjs/render/RenderPlan.js +3 -3
- package/lib/cjs/render/RenderPlan.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/UpsampleRealityMeshParams.js +1 -2
- package/lib/cjs/render/UpsampleRealityMeshParams.js.map +1 -1
- package/lib/cjs/render/VisibleFeature.js +1 -2
- package/lib/cjs/render/VisibleFeature.js.map +1 -1
- package/lib/cjs/render/webgl/AttributeBuffers.js +5 -5
- package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +2 -0
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/ClippingProgram.js +2 -2
- package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +3 -3
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.js +2 -2
- package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/cjs/render/webgl/FrustumUniforms.js +2 -2
- package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.d.ts +3 -0
- package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +4 -0
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +2 -2
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/Material.js +2 -2
- package/lib/cjs/render/webgl/Material.js.map +1 -1
- package/lib/cjs/render/webgl/Matrix.js +3 -3
- package/lib/cjs/render/webgl/Matrix.js.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js +2 -2
- package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +7 -4
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ScratchDrawParams.js +2 -3
- package/lib/cjs/render/webgl/ScratchDrawParams.js.map +1 -1
- package/lib/cjs/render/webgl/ScreenSpaceEffect.js +2 -2
- package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
- package/lib/cjs/render/webgl/SurfaceGeometry.js +2 -2
- package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/Sync.js +3 -4
- package/lib/cjs/render/webgl/Sync.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.js +1 -2
- package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
- package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -2
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.js +1 -2
- package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Atmosphere.js +1 -2
- package/lib/cjs/render/webgl/glsl/Atmosphere.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Blur.js +1 -2
- package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +1 -2
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +1 -2
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Clipping.js +2 -2
- package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Color.js +2 -3
- package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Combine3Textures.js +1 -2
- package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CombineTextures.js +1 -2
- package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Common.js +7 -7
- package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Composite.js +1 -2
- package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Contours.js +1 -2
- package/lib/cjs/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyColor.js +1 -2
- package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +1 -2
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -5
- package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Decode.js +2 -2
- package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/EDL.js +4 -5
- package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -2
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.js +2 -3
- package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +15 -15
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Fragment.js +6 -6
- package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Instancing.js +3 -4
- package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Lighting.js +1 -2
- package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -2
- package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/LookupTable.js +1 -2
- package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Monochrome.js +2 -3
- package/lib/cjs/render/webgl/glsl/Monochrome.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js +5 -5
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarGrid.js +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointCloud.js +2 -3
- package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.js +2 -3
- package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.js +6 -6
- package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +5 -5
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RenderPass.js +1 -2
- package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -2
- package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -2
- package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -2
- package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +3 -3
- package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +6 -6
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.js +2 -3
- package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Translucency.js +2 -2
- package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.js +13 -13
- package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Viewport.js +3 -4
- package/lib/cjs/render/webgl/glsl/Viewport.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ViewportQuad.js +1 -2
- package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Wiremesh.js +1 -2
- package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
- package/lib/cjs/request/Request.d.ts.map +1 -1
- package/lib/cjs/request/Request.js +2 -2
- package/lib/cjs/request/Request.js.map +1 -1
- package/lib/cjs/request/utils.js +3 -4
- package/lib/cjs/request/utils.js.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.js +2 -2
- package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/tile/GltfReader.js +4 -4
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/IModelTile.js +2 -2
- package/lib/cjs/tile/IModelTile.js.map +1 -1
- package/lib/cjs/tile/IModelTileTree.js +2 -2
- package/lib/cjs/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/tile/ImdlDecoder.js +1 -2
- package/lib/cjs/tile/ImdlDecoder.js.map +1 -1
- package/lib/cjs/tile/ImdlGraphicsCreator.js +3 -4
- package/lib/cjs/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/cjs/tile/ImdlParser.js +1 -2
- package/lib/cjs/tile/ImdlParser.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +3 -3
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/MeshoptCompression.js +1 -2
- package/lib/cjs/tile/MeshoptCompression.js.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.js +2 -2
- package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/tile/PntsReader.js +1 -2
- package/lib/cjs/tile/PntsReader.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +6 -6
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +2 -2
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RenderGraphicTileTree.js +1 -2
- package/lib/cjs/tile/RenderGraphicTileTree.js.map +1 -1
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/cjs/tile/Tile.js +2 -2
- package/lib/cjs/tile/Tile.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +2 -2
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannel.js +1 -1
- package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
- package/lib/cjs/tile/ViewFlagOverrides.js +1 -2
- package/lib/cjs/tile/ViewFlagOverrides.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +4 -5
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/CoordinatesUtils.js +1 -2
- package/lib/cjs/tile/map/ImageryProviders/CoordinatesUtils.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerTileTreeReference.js +2 -2
- package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +2 -2
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/UrlUtils.js +1 -2
- package/lib/cjs/tile/map/UrlUtils.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tools/ClipViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/Tool.d.ts +1 -1
- package/lib/cjs/tools/Tool.d.ts.map +1 -1
- package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ViewTool.js +2 -2
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/cjs/workers/RegisterWorker.js +1 -2
- package/lib/cjs/workers/RegisterWorker.js.map +1 -1
- package/lib/esm/AccuDraw.js +2 -2
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.d.ts.map +1 -1
- package/lib/esm/AccuSnap.js +7 -2
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseTxns.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.d.ts +3 -3
- package/lib/esm/DrawingViewState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.js +9 -8
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/GraphicalEditingScope.d.ts.map +1 -1
- package/lib/esm/HitDetail.d.ts +36 -7
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +11 -3
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/NoRenderApp.d.ts.map +1 -1
- package/lib/esm/NotificationManager.d.ts +2 -2
- package/lib/esm/NotificationManager.d.ts.map +1 -1
- package/lib/esm/SheetViewState.d.ts +3 -3
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +18 -5
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/ViewState.d.ts +16 -7
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +4 -4
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +1 -0
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/internal/render/GeometryList.d.ts +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.d.ts +3 -1
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/MockRender.d.ts.map +1 -1
- package/lib/esm/render/Pixel.d.ts +9 -7
- package/lib/esm/render/Pixel.d.ts.map +1 -1
- package/lib/esm/render/Pixel.js +20 -5
- package/lib/esm/render/Pixel.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +2 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +2 -0
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.d.ts +3 -0
- package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +4 -0
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +4 -1
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
- package/lib/esm/request/Request.d.ts.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/tile/TileRequestChannel.js +1 -1
- package/lib/esm/tile/TileRequestChannel.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/esm/tools/ClipViewTool.d.ts.map +1 -1
- package/lib/esm/tools/Tool.d.ts +1 -1
- package/lib/esm/tools/Tool.d.ts.map +1 -1
- package/lib/esm/tools/ViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ViewTool.js +2 -2
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EDL.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EDL.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 { EDLCalcBasicGeometry, EDLCalcFullGeometry, EDLFilterGeometry, EDLMixGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// This shader calculates a more basic version of EDL, and only for the original size, so single pass\r\nconst calcBasicEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n discard;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN));\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcBasicProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcBasicEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcBasic\";\r\n builder.frag.headerComment = \"//!F! EDLCalcBasic\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader calculates the full version of EDL, and can be run at full, 1/2 and 1/4 scale\r\nconst calcFullEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n float scale = u_texInfo.z; // 1, 2, 4\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n return color;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN)) / scale;\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcFullProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcFullEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcFull\";\r\n builder.frag.headerComment = \"//!F! EDLCalcFull\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader filters the EDL image, and can be run at 1/2 and 1/4 scale\r\nconst filterEDL = `\r\n // NB: this bilateral filter hardcodes spatialSigma to 2.0 and depthSigma to 0.4, with halfSize = 2\r\n float distCoefs[] = float[] (\r\n 1.0, 0.9692332344763441, 0.8824969025845955, 0.9692332344763441, 0.9394130628134758,\r\n 0.8553453273074225, 0.8824969025845955, 0.8553453273074225, 0.8553453273074225, 0.7788007830714049);\r\n const float depthSigma = 0.4;\r\n vec2 invTexSize = u_texInfo.xy;\r\n\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float wsum = 0.0; // sum of all weights\r\n vec3 csum = vec3(0.0); // sum of all contributions\r\n vec2 coordi = vec2(0.0, 0.0); // ith neighbor position x,y\r\n\r\n for (int c = -2; c <= 2; c++) {\r\n coordi.x = float(c) * invTexSize.x;\r\n int cabs = (c < 0) ? -c : c;\r\n\r\n for (int d = -2; d <= 2; d++) {\r\n coordi.y = float(d) * invTexSize.y;\r\n vec4 ci = TEXTURE(u_colorTexture, v_texCoord + coordi); // neighbor color\r\n\r\n //pixel distance based damping\r\n int dabs = (d < 0) ? -d : d;\r\n float fi = distCoefs[cabs * 3 + dabs];\r\n\r\n //pixel depth difference based damping\r\n float zi = TEXTURE(u_depthTexture, v_texCoord + coordi).r; // neighbor depth\r\n float dz = (depth - zi) / depthSigma;\r\n fi *= exp(-dz * dz / 2.0);\r\n\r\n csum += ci.rgb * fi;\r\n wsum += fi;\r\n }\r\n }\r\n return vec4(csum / wsum, 1.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLFilterProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, filterEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLFilter\";\r\n builder.frag.headerComment = \"//!F! EDLFilter\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader mixes the 3 EDL images into the final image\r\nconst mixEDL = `\r\n vec4 col1 = TEXTURE(u_colorTexture1, v_texCoord);\r\n if (col1.a == 0.0)\r\n discard;\r\n else {\r\n vec3 col2 = TEXTURE(u_colorTexture2, v_texCoord).rgb;\r\n vec3 col4 = TEXTURE(u_colorTexture4, v_texCoord).rgb;\r\n return vec4 ((u_weights.x * col1.rgb + u_weights.y * col2 + u_weights.z * col4) / (u_weights.x + u_weights.y + u_weights.z), 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLMixProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, mixEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_colorTexture1\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture1\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture1, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture2\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture2\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture2, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture4\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture4\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture4, TextureUnit.Two);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_weights\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_weights\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL2(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLMix\";\r\n builder.frag.headerComment = \"//!F! EDLMix\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"EDL.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EDL.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 { EDLCalcBasicGeometry, EDLCalcFullGeometry, EDLFilterGeometry, EDLMixGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// This shader calculates a more basic version of EDL, and only for the original size, so single pass\r\nconst calcBasicEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n discard;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN));\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcBasicProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcBasicEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcBasic\";\r\n builder.frag.headerComment = \"//!F! EDLCalcBasic\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader calculates the full version of EDL, and can be run at full, 1/2 and 1/4 scale\r\nconst calcFullEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n float scale = u_texInfo.z; // 1, 2, 4\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n return color;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN)) / scale;\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcFullProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcFullEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcFull\";\r\n builder.frag.headerComment = \"//!F! EDLCalcFull\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader filters the EDL image, and can be run at 1/2 and 1/4 scale\r\nconst filterEDL = `\r\n // NB: this bilateral filter hardcodes spatialSigma to 2.0 and depthSigma to 0.4, with halfSize = 2\r\n float distCoefs[] = float[] (\r\n 1.0, 0.9692332344763441, 0.8824969025845955, 0.9692332344763441, 0.9394130628134758,\r\n 0.8553453273074225, 0.8824969025845955, 0.8553453273074225, 0.8553453273074225, 0.7788007830714049);\r\n const float depthSigma = 0.4;\r\n vec2 invTexSize = u_texInfo.xy;\r\n\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float wsum = 0.0; // sum of all weights\r\n vec3 csum = vec3(0.0); // sum of all contributions\r\n vec2 coordi = vec2(0.0, 0.0); // ith neighbor position x,y\r\n\r\n for (int c = -2; c <= 2; c++) {\r\n coordi.x = float(c) * invTexSize.x;\r\n int cabs = (c < 0) ? -c : c;\r\n\r\n for (int d = -2; d <= 2; d++) {\r\n coordi.y = float(d) * invTexSize.y;\r\n vec4 ci = TEXTURE(u_colorTexture, v_texCoord + coordi); // neighbor color\r\n\r\n //pixel distance based damping\r\n int dabs = (d < 0) ? -d : d;\r\n float fi = distCoefs[cabs * 3 + dabs];\r\n\r\n //pixel depth difference based damping\r\n float zi = TEXTURE(u_depthTexture, v_texCoord + coordi).r; // neighbor depth\r\n float dz = (depth - zi) / depthSigma;\r\n fi *= exp(-dz * dz / 2.0);\r\n\r\n csum += ci.rgb * fi;\r\n wsum += fi;\r\n }\r\n }\r\n return vec4(csum / wsum, 1.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLFilterProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, filterEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLFilter\";\r\n builder.frag.headerComment = \"//!F! EDLFilter\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader mixes the 3 EDL images into the final image\r\nconst mixEDL = `\r\n vec4 col1 = TEXTURE(u_colorTexture1, v_texCoord);\r\n if (col1.a == 0.0)\r\n discard;\r\n else {\r\n vec3 col2 = TEXTURE(u_colorTexture2, v_texCoord).rgb;\r\n vec3 col4 = TEXTURE(u_colorTexture4, v_texCoord).rgb;\r\n return vec4 ((u_weights.x * col1.rgb + u_weights.y * col2 + u_weights.z * col4) / (u_weights.x + u_weights.y + u_weights.z), 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLMixProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, mixEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_colorTexture1\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture1\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture1, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture2\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture2\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture2, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture4\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture4\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture4, TextureUnit.Two);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_weights\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_weights\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL2(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLMix\";\r\n builder.frag.headerComment = \"//!F! EDLMix\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @module WebGL
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.createEVSMProgram =
|
|
10
|
+
exports.createEVSMProgram = createEVSMProgram;
|
|
11
11
|
const AttributeMap_1 = require("../AttributeMap");
|
|
12
12
|
const RenderFlags_1 = require("../RenderFlags");
|
|
13
13
|
const ShaderBuilder_1 = require("../ShaderBuilder");
|
|
@@ -71,5 +71,4 @@ function createEVSMProgram(context) {
|
|
|
71
71
|
builder.frag.headerComment = "//!F! EVSMFromDepth";
|
|
72
72
|
return builder.buildProgram(context);
|
|
73
73
|
}
|
|
74
|
-
exports.createEVSMProgram = createEVSMProgram;
|
|
75
74
|
//# sourceMappingURL=EVSMFromDepth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EVSMFromDepth.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EVSMFromDepth.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG
|
|
1
|
+
{"version":3,"file":"EVSMFromDepth.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EVSMFromDepth.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AA6CH,8CAgCC;AA3ED,kDAA+C;AAE/C,gDAA6C;AAC7C,oDAAmI;AAEnI,wCAA6C;AAC7C,yCAA6C;AAC7C,6DAAkE;AAElE,mGAAmG;AAEnG,4DAA4D;AAC5D,MAAM,eAAe,GAAG,4CAA4C,CAAC;AACrE,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBnB,CAAC;AAEF,gBAAgB;AAChB,SAAgB,iBAAiB,CAAC,OAA+B;IAC/D,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,iDAAwC,eAAe,CAAC,CAAC;IACjE,OAAO,CAAC,wBAAwB,CAAC,YAAY,6BAAqB,eAAe,CAAC,CAAC;IAEnF,IAAI,CAAC,UAAU,CAAC,gBAAgB,kCAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAwB,CAAC;YAC7C,yBAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,YAAY,6BAAqB,CAAC,IAAI,EAAE,EAAE;QACxD,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAwB,CAAC;YAC7C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,iCAAyB,CAAC;IAE3B,IAAA,oCAAe,EAAC,IAAI,CAAC,CAAC;IAEtB,IAAI,CAAC,WAAW,CAAC,8BAAS,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,mDAA2C,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,kDAAyC,0BAAe,CAAC,CAAC;IAElE,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;IAEnD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC","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 { AttributeMap } from \"../AttributeMap\";\r\nimport { EVSMGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariablePrecision, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { addEvsmExponent, warpDepth } from \"./SolarShadowMapping\";\r\n\r\n// This shader reads the depth texture, converts it to EVSM values, then averages those down 4 to 1\r\n\r\n// Positions are in NDC [-1..1]. Compute UV params in [0..1]\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\nconst computePosition = \"return rawPos;\";\r\n\r\nconst computeEVSM = `\r\n const float sampleWeight = 0.25;\r\n vec4 average = vec4(0.0);\r\n vec2 tc = v_texCoord - u_stepSize * 0.5; // v_texCoord starts in between the 4 texels\r\n\r\n float depth = TEXTURE(u_depthTexture, tc).r;\r\n vec2 vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.x += u_stepSize.x;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.y += u_stepSize.y;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.x -= u_stepSize.x;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n return average;\r\n`;\r\n\r\n/** @internal */\r\nexport function createEVSMProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EVSMGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_stepSize\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_stepSize\", (uniform, params) => {\r\n const geom = params.geometry as EVSMGeometry;\r\n uniform.setUniform2fv(geom.stepSize);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n addEvsmExponent(frag);\r\n\r\n frag.addFunction(warpDepth);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeEVSM);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n builder.vert.headerComment = \"//!V! EVSMFromDepth\";\r\n builder.frag.headerComment = \"//!F! EVSMFromDepth\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* @module WebGL
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
10
|
+
exports.addEdgeContrast = addEdgeContrast;
|
|
11
|
+
exports.createEdgeBuilder = createEdgeBuilder;
|
|
11
12
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
13
|
const AttributeMap_1 = require("../AttributeMap");
|
|
13
14
|
const ShaderBuilder_1 = require("../ShaderBuilder");
|
|
@@ -196,7 +197,6 @@ function addEdgeContrast(vert) {
|
|
|
196
197
|
});
|
|
197
198
|
vert.set(8 /* VertexShaderComponent.AdjustContrast */, adjustContrast);
|
|
198
199
|
}
|
|
199
|
-
exports.addEdgeContrast = addEdgeContrast;
|
|
200
200
|
const edgeLutParams = new Float32Array(4);
|
|
201
201
|
function createBase(type, instanced, isAnimated, positionType) {
|
|
202
202
|
const isInstanced = 1 /* IsInstanced.Yes */ === instanced;
|
|
@@ -279,5 +279,4 @@ function createEdgeBuilder(type, instanced, isAnimated, posType) {
|
|
|
279
279
|
(0, Fragment_1.addWhiteOnWhiteReversal)(builder.frag);
|
|
280
280
|
return builder;
|
|
281
281
|
}
|
|
282
|
-
exports.createEdgeBuilder = createEdgeBuilder;
|
|
283
282
|
//# sourceMappingURL=Edge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Edge.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.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 { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsAnimated, IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { addColor } from \"./Color\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addAdjustWidth, addLineCode } from \"./Polyline\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { addLineWeight, addModelViewMatrix, addNormalMatrix, addProjectionMatrix, addSamplePosition } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderOrder, addRenderOrderConstants } from \"./FeatureSymbology\";\r\n\r\nexport type EdgeBuilderType = \"SegmentEdge\" | \"Silhouette\" | \"IndexedEdge\";\r\n\r\nconst computeOtherPos = `\r\n g_otherPos = samplePosition(g_otherIndex);\r\n`;\r\n\r\nconst decodeEndPointAndQuadIndices = `\r\n g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);\r\n${computeOtherPos}\r\n g_quadIndex = a_endPointAndQuadIndices.w;\r\n`;\r\n\r\nconst animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;\r\n\r\n// a_pos is a 24-bit index into edge lookup table.\r\n// First six bytes of lookup table entry are the pair of 24-bit indices identifying the endpoints of the edge in the vertex table.\r\n// Return the 24-bit index of \"this\" vertex in the vertex table encoded in a vec3.\r\nconst computeIndexedQuantizedPosition = `\r\n g_vertexId = gl_VertexID % 6;\r\n if (g_vertexId == 0)\r\n g_quadIndex = 0.0;\r\n else if (g_vertexId == 2 || g_vertexId == 3)\r\n g_quadIndex = 1.0;\r\n else if (g_vertexId == 1 || g_vertexId == 4)\r\n g_quadIndex = 2.0;\r\n else\r\n g_quadIndex = 3.0;\r\n\r\n // The following formula computes the texel index, but suffers from precision issues for large edge indices, so we must compute using integers instead.\r\n // float edgeBaseIndex = u_edgeParams.z * 1.5 + u_edgeParams.w * 0.25 + (edgeIndex - u_edgeParams.z) * 2.5);\r\n\r\n float fEdgeIndex = decodeUInt24(a_pos);\r\n g_isSilhouette = fEdgeIndex >= u_edgeParams.z;\r\n int edgeIndex = int(fEdgeIndex);\r\n bool isEven = 0 == (edgeIndex & 1);\r\n float edgeBaseIndex;\r\n if (!g_isSilhouette) {\r\n edgeBaseIndex = float(edgeIndex + (edgeIndex / 2));\r\n } else {\r\n // If both pad and edgeIndex produce a remainder (0.5 for each - pad is a multiple of 2), we must add one to the index to account for it.\r\n int shift = isEven ? 0 : 1;\r\n int pad = int(u_edgeParams.w);\r\n if (0 != (pad % 4)) {\r\n isEven = !isEven;\r\n shift = shift + 1;\r\n }\r\n\r\n // s = num segments p = num padding bytes i = edge index\r\n // texel index = 1.5s + .25p + 2.5(i - s) = 1.5s + .25p + 2.5i - 2.5s = 2.5i + .25p - s = i + i + i/2 + p/4 - s\r\n edgeBaseIndex = float(edgeIndex + edgeIndex + edgeIndex / 2 + pad / 4 - int(u_edgeParams.z) + shift / 2);\r\n }\r\n\r\n vec2 tc = compute_edge_coords(floor(edgeBaseIndex));\r\n vec4 s0 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s1 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s2 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n\r\n vec3 i0 = isEven ? s0.xyz : vec3(s0.zw, s1.x);\r\n vec3 i1 = isEven ? vec3(s0.w, s1.xy) : s1.yzw;\r\n g_otherIndexIndex = g_quadIndex < 2.0 ? i1 : i0;\r\n\r\n g_normals = isEven ? vec4(s1.zw, s2.xy) : s2;\r\n\r\n return g_quadIndex < 2.0 ? i0 : i1;\r\n`;\r\n\r\nconst initializeIndexed = `\r\n g_otherIndex = decodeUInt24(g_otherIndexIndex);\r\n${computeOtherPos}\r\n`;\r\n\r\n// IndexedEdgeGeometry.renderOrder returns Edge or PlanarEdge. Adjust if silhouette for output to pick buffers.\r\nconst computeIndexedRenderOrder = `\r\n if (g_isSilhouette)\r\n v_renderOrder = kRenderOrder_Edge == u_renderOrder ? kRenderOrder_Silhouette : kRenderOrder_PlanarSilhouette;\r\n else\r\n v_renderOrder = u_renderOrder;\r\n`;\r\n\r\nconst checkForSilhouetteDiscard = `\r\n if (kFrustumType_Perspective != u_frustum.z) {\r\n float perpTol = 4.75e-6;\r\n return (n0.z * n1.z > perpTol); // orthographic.\r\n } else {\r\n float perpTol = 2.5e-4;\r\n vec4 viewPos = MAT_MV * rawPos; // perspective\r\n vec3 toEye = normalize(viewPos.xyz);\r\n float dot0 = dot(n0, toEye);\r\n float dot1 = dot(n1, toEye);\r\n\r\n if (dot0 * dot1 > perpTol)\r\n return true;\r\n\r\n // Need to discard if either is non-silhouette.\r\n vec4 otherPosition = g_otherPos;\r\n viewPos = MAT_MV * otherPosition;\r\n toEye = normalize(viewPos.xyz);\r\n dot0 = dot(n0, toEye);\r\n dot1 = dot(n1, toEye);\r\n\r\n return dot0 * dot1 > perpTol;\r\n }\r\n`;\r\n\r\nconst checkForSilhouetteDiscardNonIndexed = `\r\n vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst checkForSilhouetteDiscardIndexed = `\r\n if (!g_isSilhouette)\r\n return false;\r\n\r\n vec3 n0 = MAT_NORM * octDecodeNormal(g_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(g_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst computePosition = `\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n vec4 other = g_otherPos;\r\n float miterAdjust = 0.0;\r\n float weight = computeLineWeight();\r\n\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, other, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0) // Clipped out.\r\n return g_windowPos;\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projOther = modelToWindowCoordinates(other, rawPos, otherPos, otherMvPos);\r\n\r\n g_windowDir = projOther.xy - g_windowPos.xy;\r\n\r\n adjustWidth(weight, g_windowDir, g_windowPos.xy);\r\n g_windowDir = normalize(g_windowDir);\r\n\r\n vec2 perp = vec2(-g_windowDir.y, g_windowDir.x);\r\n float perpDist = weight / 2.0;\r\n float alongDist = 0.0;\r\n\r\n perpDist *= sign(0.5 - float(g_quadIndex == 0.0 || g_quadIndex == 3.0)); // negate for index 0 and 3\r\n alongDist += distance(rawPos, other) * float(g_quadIndex >= 2.0); // index 2 and 3 correspond to 'far' endpoint of segment\r\n\r\n pos.x += perp.x * perpDist * 2.0 * pos.w / u_viewport.x;\r\n pos.y += perp.y * perpDist * 2.0 * pos.w / u_viewport.y;\r\n\r\n lineCodeEyePos = .5 * (rawPos + other);\r\n lineCodeDist = alongDist;\r\n\r\n return pos;\r\n`;\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, 0.0\";\r\n\r\nconst adjustContrast = `\r\n float bgi = u_bgIntensity;\r\n if (bgi < 0.0)\r\n return baseColor;\r\n\r\n float s;\r\n float rgbi = baseColor.r * 0.3 + baseColor.g * 0.59 + baseColor.b * 0.11;\r\n if (rgbi > 0.81)\r\n s = bgi > 0.57 ? 0.0 : 0.699;\r\n else if (rgbi > 0.57)\r\n s = bgi > 0.57 ? 0.0 : 1.0;\r\n else\r\n s = bgi < 0.81 ? 1.0 : 0.699;\r\n\r\n return vec4(vec3(s), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEdgeContrast(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_bgIntensity\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_bgIntensity\", (uniform, params) => {\r\n let bgi = -1;\r\n if (params.geometry.isEdge && params.target.currentEdgeSettings.wantContrastingColor(params.target.currentViewFlags.renderMode))\r\n bgi = params.target.uniforms.style.backgroundIntensity;\r\n\r\n uniform.setUniform1f(bgi);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.AdjustContrast, adjustContrast);\r\n}\r\n\r\nconst edgeLutParams = new Float32Array(4);\r\n\r\nfunction createBase(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated, positionType: PositionType): ProgramBuilder {\r\n const isInstanced = IsInstanced.Yes === instanced;\r\n const isSilhouette = \"Silhouette\" === type;\r\n const isIndexed = \"IndexedEdge\" === type;\r\n const techId = isSilhouette ? TechniqueId.SilhouetteEdge : (isIndexed ? TechniqueId.IndexedEdge : TechniqueId.Edge);\r\n const attrMap = AttributeMap.findAttributeMap(techId, isInstanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced: isInstanced });\r\n const vert = builder.vert;\r\n\r\n vert.addGlobal(\"g_otherPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_quadIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addGlobal(\"g_otherIndex\", VariableType.Float);\r\n\r\n addSamplePosition(vert);\r\n\r\n if (isIndexed) {\r\n vert.addGlobal(\"g_vertexId\", VariableType.Int);\r\n vert.addGlobal(\"g_otherIndexIndex\", VariableType.Vec3);\r\n vert.addGlobal(\"g_isSilhouette\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"g_normals\", VariableType.Vec4);\r\n\r\n const initLut = addLookupTable(vert, \"edge\", \"1.0\");\r\n vert.addUniform(\"u_edgeLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeLUT\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edge.edgeLut.texture.bindSampler(uniform, TextureUnit.EdgeLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_edgeParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeParams\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edgeLutParams[0] = edge.edgeLut.texture.width;\r\n edgeLutParams[1] = edge.edgeLut.texture.height;\r\n edgeLutParams[2] = edge.edgeLut.numSegments;\r\n edgeLutParams[3] = edge.edgeLut.silhouettePadding;\r\n uniform.setUniform4fv(edgeLutParams);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, `${initLut}\\n\\n${computeIndexedQuantizedPosition}`);\r\n vert.addInitializer(initializeIndexed);\r\n\r\n addRenderOrder(vert);\r\n addRenderOrderConstants(vert);\r\n builder.addInlineComputedVarying(\"v_renderOrder\", VariableType.Float, computeIndexedRenderOrder);\r\n builder.frag.set(FragmentShaderComponent.OverrideRenderOrder, \"return v_renderOrder;\");\r\n } else {\r\n vert.addInitializer(decodeEndPointAndQuadIndices);\r\n }\r\n\r\n if (isAnimated) {\r\n addAnimation(vert, false);\r\n vert.addInitializer(animateEndPoint);\r\n }\r\n\r\n vert.addGlobal(\"lineCodeEyePos\", VariableType.Vec4);\r\n vert.addGlobal(\"lineCodeDist\", VariableType.Float, \"0.0\");\r\n\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation, and sets g_eyeSpace\r\n addProjectionMatrix(vert);\r\n addLineCode(builder, lineCodeArgs);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addViewport(vert);\r\n addModelViewMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n\r\n if (isSilhouette || isIndexed) {\r\n addNormalMatrix(vert);\r\n addFrustum(builder);\r\n vert.addFunction(octDecodeNormal);\r\n vert.set(VertexShaderComponent.CheckForEarlyDiscard, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createEdgeBuilder(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated, posType: PositionType): ProgramBuilder {\r\n const builder = createBase(type, instanced, isAnimated, posType);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Edge.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.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 { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsAnimated, IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { addColor } from \"./Color\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addAdjustWidth, addLineCode } from \"./Polyline\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { addLineWeight, addModelViewMatrix, addNormalMatrix, addProjectionMatrix, addSamplePosition } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderOrder, addRenderOrderConstants } from \"./FeatureSymbology\";\r\n\r\nexport type EdgeBuilderType = \"SegmentEdge\" | \"Silhouette\" | \"IndexedEdge\";\r\n\r\nconst computeOtherPos = `\r\n g_otherPos = samplePosition(g_otherIndex);\r\n`;\r\n\r\nconst decodeEndPointAndQuadIndices = `\r\n g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);\r\n${computeOtherPos}\r\n g_quadIndex = a_endPointAndQuadIndices.w;\r\n`;\r\n\r\nconst animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;\r\n\r\n// a_pos is a 24-bit index into edge lookup table.\r\n// First six bytes of lookup table entry are the pair of 24-bit indices identifying the endpoints of the edge in the vertex table.\r\n// Return the 24-bit index of \"this\" vertex in the vertex table encoded in a vec3.\r\nconst computeIndexedQuantizedPosition = `\r\n g_vertexId = gl_VertexID % 6;\r\n if (g_vertexId == 0)\r\n g_quadIndex = 0.0;\r\n else if (g_vertexId == 2 || g_vertexId == 3)\r\n g_quadIndex = 1.0;\r\n else if (g_vertexId == 1 || g_vertexId == 4)\r\n g_quadIndex = 2.0;\r\n else\r\n g_quadIndex = 3.0;\r\n\r\n // The following formula computes the texel index, but suffers from precision issues for large edge indices, so we must compute using integers instead.\r\n // float edgeBaseIndex = u_edgeParams.z * 1.5 + u_edgeParams.w * 0.25 + (edgeIndex - u_edgeParams.z) * 2.5);\r\n\r\n float fEdgeIndex = decodeUInt24(a_pos);\r\n g_isSilhouette = fEdgeIndex >= u_edgeParams.z;\r\n int edgeIndex = int(fEdgeIndex);\r\n bool isEven = 0 == (edgeIndex & 1);\r\n float edgeBaseIndex;\r\n if (!g_isSilhouette) {\r\n edgeBaseIndex = float(edgeIndex + (edgeIndex / 2));\r\n } else {\r\n // If both pad and edgeIndex produce a remainder (0.5 for each - pad is a multiple of 2), we must add one to the index to account for it.\r\n int shift = isEven ? 0 : 1;\r\n int pad = int(u_edgeParams.w);\r\n if (0 != (pad % 4)) {\r\n isEven = !isEven;\r\n shift = shift + 1;\r\n }\r\n\r\n // s = num segments p = num padding bytes i = edge index\r\n // texel index = 1.5s + .25p + 2.5(i - s) = 1.5s + .25p + 2.5i - 2.5s = 2.5i + .25p - s = i + i + i/2 + p/4 - s\r\n edgeBaseIndex = float(edgeIndex + edgeIndex + edgeIndex / 2 + pad / 4 - int(u_edgeParams.z) + shift / 2);\r\n }\r\n\r\n vec2 tc = compute_edge_coords(floor(edgeBaseIndex));\r\n vec4 s0 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s1 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s2 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n\r\n vec3 i0 = isEven ? s0.xyz : vec3(s0.zw, s1.x);\r\n vec3 i1 = isEven ? vec3(s0.w, s1.xy) : s1.yzw;\r\n g_otherIndexIndex = g_quadIndex < 2.0 ? i1 : i0;\r\n\r\n g_normals = isEven ? vec4(s1.zw, s2.xy) : s2;\r\n\r\n return g_quadIndex < 2.0 ? i0 : i1;\r\n`;\r\n\r\nconst initializeIndexed = `\r\n g_otherIndex = decodeUInt24(g_otherIndexIndex);\r\n${computeOtherPos}\r\n`;\r\n\r\n// IndexedEdgeGeometry.renderOrder returns Edge or PlanarEdge. Adjust if silhouette for output to pick buffers.\r\nconst computeIndexedRenderOrder = `\r\n if (g_isSilhouette)\r\n v_renderOrder = kRenderOrder_Edge == u_renderOrder ? kRenderOrder_Silhouette : kRenderOrder_PlanarSilhouette;\r\n else\r\n v_renderOrder = u_renderOrder;\r\n`;\r\n\r\nconst checkForSilhouetteDiscard = `\r\n if (kFrustumType_Perspective != u_frustum.z) {\r\n float perpTol = 4.75e-6;\r\n return (n0.z * n1.z > perpTol); // orthographic.\r\n } else {\r\n float perpTol = 2.5e-4;\r\n vec4 viewPos = MAT_MV * rawPos; // perspective\r\n vec3 toEye = normalize(viewPos.xyz);\r\n float dot0 = dot(n0, toEye);\r\n float dot1 = dot(n1, toEye);\r\n\r\n if (dot0 * dot1 > perpTol)\r\n return true;\r\n\r\n // Need to discard if either is non-silhouette.\r\n vec4 otherPosition = g_otherPos;\r\n viewPos = MAT_MV * otherPosition;\r\n toEye = normalize(viewPos.xyz);\r\n dot0 = dot(n0, toEye);\r\n dot1 = dot(n1, toEye);\r\n\r\n return dot0 * dot1 > perpTol;\r\n }\r\n`;\r\n\r\nconst checkForSilhouetteDiscardNonIndexed = `\r\n vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst checkForSilhouetteDiscardIndexed = `\r\n if (!g_isSilhouette)\r\n return false;\r\n\r\n vec3 n0 = MAT_NORM * octDecodeNormal(g_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(g_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst computePosition = `\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n vec4 other = g_otherPos;\r\n float miterAdjust = 0.0;\r\n float weight = computeLineWeight();\r\n\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, other, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0) // Clipped out.\r\n return g_windowPos;\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projOther = modelToWindowCoordinates(other, rawPos, otherPos, otherMvPos);\r\n\r\n g_windowDir = projOther.xy - g_windowPos.xy;\r\n\r\n adjustWidth(weight, g_windowDir, g_windowPos.xy);\r\n g_windowDir = normalize(g_windowDir);\r\n\r\n vec2 perp = vec2(-g_windowDir.y, g_windowDir.x);\r\n float perpDist = weight / 2.0;\r\n float alongDist = 0.0;\r\n\r\n perpDist *= sign(0.5 - float(g_quadIndex == 0.0 || g_quadIndex == 3.0)); // negate for index 0 and 3\r\n alongDist += distance(rawPos, other) * float(g_quadIndex >= 2.0); // index 2 and 3 correspond to 'far' endpoint of segment\r\n\r\n pos.x += perp.x * perpDist * 2.0 * pos.w / u_viewport.x;\r\n pos.y += perp.y * perpDist * 2.0 * pos.w / u_viewport.y;\r\n\r\n lineCodeEyePos = .5 * (rawPos + other);\r\n lineCodeDist = alongDist;\r\n\r\n return pos;\r\n`;\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, 0.0\";\r\n\r\nconst adjustContrast = `\r\n float bgi = u_bgIntensity;\r\n if (bgi < 0.0)\r\n return baseColor;\r\n\r\n float s;\r\n float rgbi = baseColor.r * 0.3 + baseColor.g * 0.59 + baseColor.b * 0.11;\r\n if (rgbi > 0.81)\r\n s = bgi > 0.57 ? 0.0 : 0.699;\r\n else if (rgbi > 0.57)\r\n s = bgi > 0.57 ? 0.0 : 1.0;\r\n else\r\n s = bgi < 0.81 ? 1.0 : 0.699;\r\n\r\n return vec4(vec3(s), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEdgeContrast(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_bgIntensity\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_bgIntensity\", (uniform, params) => {\r\n let bgi = -1;\r\n if (params.geometry.isEdge && params.target.currentEdgeSettings.wantContrastingColor(params.target.currentViewFlags.renderMode))\r\n bgi = params.target.uniforms.style.backgroundIntensity;\r\n\r\n uniform.setUniform1f(bgi);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.AdjustContrast, adjustContrast);\r\n}\r\n\r\nconst edgeLutParams = new Float32Array(4);\r\n\r\nfunction createBase(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated, positionType: PositionType): ProgramBuilder {\r\n const isInstanced = IsInstanced.Yes === instanced;\r\n const isSilhouette = \"Silhouette\" === type;\r\n const isIndexed = \"IndexedEdge\" === type;\r\n const techId = isSilhouette ? TechniqueId.SilhouetteEdge : (isIndexed ? TechniqueId.IndexedEdge : TechniqueId.Edge);\r\n const attrMap = AttributeMap.findAttributeMap(techId, isInstanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced: isInstanced });\r\n const vert = builder.vert;\r\n\r\n vert.addGlobal(\"g_otherPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_quadIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addGlobal(\"g_otherIndex\", VariableType.Float);\r\n\r\n addSamplePosition(vert);\r\n\r\n if (isIndexed) {\r\n vert.addGlobal(\"g_vertexId\", VariableType.Int);\r\n vert.addGlobal(\"g_otherIndexIndex\", VariableType.Vec3);\r\n vert.addGlobal(\"g_isSilhouette\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"g_normals\", VariableType.Vec4);\r\n\r\n const initLut = addLookupTable(vert, \"edge\", \"1.0\");\r\n vert.addUniform(\"u_edgeLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeLUT\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edge.edgeLut.texture.bindSampler(uniform, TextureUnit.EdgeLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_edgeParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeParams\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edgeLutParams[0] = edge.edgeLut.texture.width;\r\n edgeLutParams[1] = edge.edgeLut.texture.height;\r\n edgeLutParams[2] = edge.edgeLut.numSegments;\r\n edgeLutParams[3] = edge.edgeLut.silhouettePadding;\r\n uniform.setUniform4fv(edgeLutParams);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, `${initLut}\\n\\n${computeIndexedQuantizedPosition}`);\r\n vert.addInitializer(initializeIndexed);\r\n\r\n addRenderOrder(vert);\r\n addRenderOrderConstants(vert);\r\n builder.addInlineComputedVarying(\"v_renderOrder\", VariableType.Float, computeIndexedRenderOrder);\r\n builder.frag.set(FragmentShaderComponent.OverrideRenderOrder, \"return v_renderOrder;\");\r\n } else {\r\n vert.addInitializer(decodeEndPointAndQuadIndices);\r\n }\r\n\r\n if (isAnimated) {\r\n addAnimation(vert, false);\r\n vert.addInitializer(animateEndPoint);\r\n }\r\n\r\n vert.addGlobal(\"lineCodeEyePos\", VariableType.Vec4);\r\n vert.addGlobal(\"lineCodeDist\", VariableType.Float, \"0.0\");\r\n\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation, and sets g_eyeSpace\r\n addProjectionMatrix(vert);\r\n addLineCode(builder, lineCodeArgs);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addViewport(vert);\r\n addModelViewMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n\r\n if (isSilhouette || isIndexed) {\r\n addNormalMatrix(vert);\r\n addFrustum(builder);\r\n vert.addFunction(octDecodeNormal);\r\n vert.set(VertexShaderComponent.CheckForEarlyDiscard, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createEdgeBuilder(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated, posType: PositionType): ProgramBuilder {\r\n const builder = createBase(type, instanced, isAnimated, posType);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
|
|
@@ -7,7 +7,21 @@
|
|
|
7
7
|
* @module WebGL
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
10
|
+
exports.mixFeatureColor = exports.readDepthAndOrder = void 0;
|
|
11
|
+
exports.addOvrFlagConstants = addOvrFlagConstants;
|
|
12
|
+
exports.addFeatureIndex = addFeatureIndex;
|
|
13
|
+
exports.addMaxAlpha = addMaxAlpha;
|
|
14
|
+
exports.addSurfaceHiliter = addSurfaceHiliter;
|
|
15
|
+
exports.addHiliter = addHiliter;
|
|
16
|
+
exports.addRenderOrderConstants = addRenderOrderConstants;
|
|
17
|
+
exports.addRenderOrder = addRenderOrder;
|
|
18
|
+
exports.addPixelWidthFactor = addPixelWidthFactor;
|
|
19
|
+
exports.addFeatureId = addFeatureId;
|
|
20
|
+
exports.addSurfaceDiscard = addSurfaceDiscard;
|
|
21
|
+
exports.addClassifierFlash = addClassifierFlash;
|
|
22
|
+
exports.addFeatureSymbology = addFeatureSymbology;
|
|
23
|
+
exports.addUniformHiliter = addUniformHiliter;
|
|
24
|
+
exports.addUniformFeatureSymbology = addUniformFeatureSymbology;
|
|
11
25
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
26
|
const RenderFlags_1 = require("../RenderFlags");
|
|
13
27
|
const Common_1 = require("./Common");
|
|
@@ -35,7 +49,6 @@ function addOvrFlagConstants(builder) {
|
|
|
35
49
|
builder.addBitFlagConstant("kOvrBit_Visibility", 4);
|
|
36
50
|
builder.addBitFlagConstant("kOvrBit_IgnoreMaterial", 5);
|
|
37
51
|
}
|
|
38
|
-
exports.addOvrFlagConstants = addOvrFlagConstants;
|
|
39
52
|
const computeLUTFeatureIndex = `g_featureAndMaterialIndex.xyz`;
|
|
40
53
|
const computeInstanceFeatureIndex = `g_isAreaPattern ? u_patternFeatureId : a_featureId`;
|
|
41
54
|
function computeFeatureIndex(vertex) {
|
|
@@ -101,7 +114,6 @@ function addFeatureIndex(vert) {
|
|
|
101
114
|
vert.addFunction(Decode_1.decodeUint24);
|
|
102
115
|
vert.addFunction(getFeatureIndex(vert));
|
|
103
116
|
}
|
|
104
|
-
exports.addFeatureIndex = addFeatureIndex;
|
|
105
117
|
// Discards vertex if feature is invisible; or rendering opaque during translucent pass or vice-versa
|
|
106
118
|
// (The latter occurs when some translucent feature is overridden to be opaque, or vice-versa)
|
|
107
119
|
const checkVertexDiscard = `
|
|
@@ -232,7 +244,6 @@ function addMaxAlpha(builder) {
|
|
|
232
244
|
const maxAlpha = (255 - minTransparency) / 255;
|
|
233
245
|
builder.addConstant("s_maxAlpha", 2 /* VariableType.Float */, maxAlpha.toString());
|
|
234
246
|
}
|
|
235
|
-
exports.addMaxAlpha = addMaxAlpha;
|
|
236
247
|
/** @internal */
|
|
237
248
|
function addEmphasisFlags(builder) {
|
|
238
249
|
// Must be kept in sync with EmphasisFlags enum.
|
|
@@ -289,7 +300,6 @@ function addSurfaceHiliter(builder, wantWeight = false) {
|
|
|
289
300
|
addHiliter(builder, wantWeight);
|
|
290
301
|
builder.frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeSurfaceHiliteColor);
|
|
291
302
|
}
|
|
292
|
-
exports.addSurfaceHiliter = addSurfaceHiliter;
|
|
293
303
|
/** @internal */
|
|
294
304
|
function addHiliter(builder, wantWeight = false) {
|
|
295
305
|
let opts = 4 /* FeatureSymbologyOptions.HasOverrides */;
|
|
@@ -306,7 +316,6 @@ function addHiliter(builder, wantWeight = false) {
|
|
|
306
316
|
builder.frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeHiliteColor);
|
|
307
317
|
builder.frag.set(17 /* FragmentShaderComponent.AssignFragData */, Fragment_1.assignFragColor);
|
|
308
318
|
}
|
|
309
|
-
exports.addHiliter = addHiliter;
|
|
310
319
|
function addSamplers(frag, testFeatureId) {
|
|
311
320
|
if (testFeatureId) {
|
|
312
321
|
frag.addUniform("u_pickFeatureId", 8 /* VariableType.Sampler2D */, (prog) => {
|
|
@@ -411,7 +420,6 @@ function addRenderOrderConstants(builder) {
|
|
|
411
420
|
builder.addConstant("kRenderOrder_PlanarBit", 2 /* VariableType.Float */, 8 /* RenderOrder.PlanarBit */.toFixed(1));
|
|
412
421
|
builder.addConstant("kRenderOrder_Background", 2 /* VariableType.Float */, 1 /* RenderOrder.Background */.toFixed(1));
|
|
413
422
|
}
|
|
414
|
-
exports.addRenderOrderConstants = addRenderOrderConstants;
|
|
415
423
|
/** @internal */
|
|
416
424
|
function addRenderOrder(builder) {
|
|
417
425
|
builder.addUniform("u_renderOrder", 2 /* VariableType.Float */, (prog) => {
|
|
@@ -421,7 +429,6 @@ function addRenderOrder(builder) {
|
|
|
421
429
|
});
|
|
422
430
|
});
|
|
423
431
|
}
|
|
424
|
-
exports.addRenderOrder = addRenderOrder;
|
|
425
432
|
function addPixelWidthFactor(builder) {
|
|
426
433
|
builder.addUniform("u_pixelWidthFactor", 2 /* VariableType.Float */, (prog) => {
|
|
427
434
|
prog.addGraphicUniform("u_pixelWidthFactor", (uniform, params) => {
|
|
@@ -429,7 +436,6 @@ function addPixelWidthFactor(builder) {
|
|
|
429
436
|
});
|
|
430
437
|
});
|
|
431
438
|
}
|
|
432
|
-
exports.addPixelWidthFactor = addPixelWidthFactor;
|
|
433
439
|
function addBatchId(builder) {
|
|
434
440
|
builder.addUniform("u_batch_id", 5 /* VariableType.Vec4 */, (prog) => {
|
|
435
441
|
prog.addGraphicUniform("u_batch_id", (uniform, params) => {
|
|
@@ -460,7 +466,6 @@ function addFeatureId(builder, computeInFrag) {
|
|
|
460
466
|
frag.addInitializer(computeIdFrag);
|
|
461
467
|
}
|
|
462
468
|
}
|
|
463
|
-
exports.addFeatureId = addFeatureId;
|
|
464
469
|
// Discard vertex if transparency is less than the display style's transparency threshold, IFF the specific bit is set. The bit is set if:
|
|
465
470
|
// - Solid Fill or Hidden Line mode; or
|
|
466
471
|
// - Shaded mode and generating shadow map (sufficiently transparent surfaces receive but do not cast shadows).
|
|
@@ -520,7 +525,6 @@ function addSurfaceDiscard(builder, flags) {
|
|
|
520
525
|
addRenderOrder(frag);
|
|
521
526
|
}
|
|
522
527
|
}
|
|
523
|
-
exports.addSurfaceDiscard = addSurfaceDiscard;
|
|
524
528
|
// bool feature_invisible = false;
|
|
525
529
|
// vec3 feature_rgb; // if not overridden, .r < 0; else rgb color override
|
|
526
530
|
// float feature_alpha // alpha if overridden, else < 0
|
|
@@ -629,7 +633,6 @@ function addClassifierFlash(frag) {
|
|
|
629
633
|
addHiliteSettings(frag, false);
|
|
630
634
|
frag.addFunction(doClassifierFlash);
|
|
631
635
|
}
|
|
632
|
-
exports.addClassifierFlash = addClassifierFlash;
|
|
633
636
|
function addFlashIntensity(frag) {
|
|
634
637
|
frag.addUniform("u_flash_intensity", 2 /* VariableType.Float */, (prog) => {
|
|
635
638
|
prog.addProgramUniform("u_flash_intensity", (uniform, params) => {
|
|
@@ -664,7 +667,6 @@ function addFeatureSymbology(builder, feat, opts) {
|
|
|
664
667
|
vert.set(7 /* VertexShaderComponent.ApplyFeatureColor */, applyFeatureColor);
|
|
665
668
|
addApplyFlash(builder.frag);
|
|
666
669
|
}
|
|
667
|
-
exports.addFeatureSymbology = addFeatureSymbology;
|
|
668
670
|
/** If we're running the hilite shader for a uniform feature, it follows that the feature must be hilited.
|
|
669
671
|
* So the hilite shader simply needs to output '1' for every fragment.
|
|
670
672
|
* @internal
|
|
@@ -680,7 +682,6 @@ function addUniformHiliter(builder) {
|
|
|
680
682
|
builder.frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeHiliteColor);
|
|
681
683
|
builder.frag.set(17 /* FragmentShaderComponent.AssignFragData */, Fragment_1.assignFragColor);
|
|
682
684
|
}
|
|
683
|
-
exports.addUniformHiliter = addUniformHiliter;
|
|
684
685
|
/** For a uniform feature table, the feature ID output to pick buffers is equal to the batch ID.
|
|
685
686
|
* The following symbology overrides are supported:
|
|
686
687
|
* - Visibility - implcitly, because if the feature is invisible its geometry will never be drawn.
|
|
@@ -727,5 +728,4 @@ function addUniformFeatureSymbology(builder, addFeatureColor) {
|
|
|
727
728
|
builder.vert.addGlobal("feature_viewIndependentTransparency", 0 /* VariableType.Boolean */, "false");
|
|
728
729
|
addApplyFlash(builder.frag);
|
|
729
730
|
}
|
|
730
|
-
exports.addUniformFeatureSymbology = addUniformFeatureSymbology;
|
|
731
731
|
//# sourceMappingURL=FeatureSymbology.js.map
|