@itwin/core-frontend 4.10.0-dev.9 → 5.0.0-dev.0
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 +23 -1
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +0 -2
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.d.ts.map +1 -1
- package/lib/cjs/AccuSnap.js +17 -8
- 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/BingLocation.js +1 -1
- package/lib/cjs/BingLocation.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts +0 -1
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +2 -3
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/BriefcaseTxns.d.ts.map +1 -1
- package/lib/cjs/ChangeFlags.d.ts +1 -1
- package/lib/cjs/ChangeFlags.d.ts.map +1 -1
- package/lib/cjs/ChangeFlags.js.map +1 -1
- package/lib/cjs/CheckpointConnection.js +1 -1
- package/lib/cjs/CheckpointConnection.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +6 -6
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/DrawingViewState.d.ts +8 -6
- package/lib/cjs/DrawingViewState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.js +20 -10
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/EnvironmentDecorations.js +1 -1
- package/lib/cjs/EnvironmentDecorations.js.map +1 -1
- package/lib/cjs/GraphicalEditingScope.d.ts.map +1 -1
- package/lib/cjs/HitDetail.d.ts +37 -5
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +12 -2
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +1 -2
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +1 -0
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +9 -8
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js +8 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/LinePlaneIntersect.js +1 -2
- package/lib/cjs/LinePlaneIntersect.js.map +1 -1
- package/lib/cjs/ModelState.d.ts +0 -8
- package/lib/cjs/ModelState.d.ts.map +1 -1
- package/lib/cjs/ModelState.js +0 -8
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +1 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.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/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +1 -2
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
- package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -1
- package/lib/cjs/RealityDataSourceContextShareImpl.js +2 -3
- package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts +4 -11
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +18 -12
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts +0 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +1 -2
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/SubCategoriesCache.js +1 -1
- package/lib/cjs/SubCategoriesCache.js.map +1 -1
- package/lib/cjs/TentativePoint.js +1 -1
- package/lib/cjs/TentativePoint.js.map +1 -1
- package/lib/cjs/ViewCreator3d.js +1 -1
- package/lib/cjs/ViewCreator3d.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 +14 -1
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +4 -2
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/ViewingSpace.d.ts.map +1 -1
- package/lib/cjs/ViewingSpace.js +3 -0
- package/lib/cjs/ViewingSpace.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +2 -4
- 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.d.ts +8 -4
- package/lib/cjs/common/WorkerProxy.d.ts.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 +7 -8
- package/lib/cjs/common/gltf/GltfParser.js.map +1 -1
- package/lib/cjs/common/gltf/GltfSchema.d.ts +1 -1
- package/lib/cjs/common/gltf/GltfSchema.d.ts.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/ImdlSchema.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.js +10 -12
- package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/cjs/common/internal/render/DisplayParams.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/MeshBuilder.js.map +1 -1
- package/lib/cjs/common/internal/render/MeshBuilderMap.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/OvrFlags.d.ts +4 -2
- package/lib/cjs/common/internal/render/OvrFlags.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/OvrFlags.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.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/VertexTable.js +4 -7
- 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/common/render/InstancedGraphicParams.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/BaseUnitFormattingSettingsProvider.js +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.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/LocalUnitFormatProvider.js +2 -2
- package/lib/cjs/quantity-formatting/LocalUnitFormatProvider.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 +12 -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 +14 -4
- package/lib/cjs/render/Pixel.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.js +22 -5
- package/lib/cjs/render/Pixel.js.map +1 -1
- package/lib/cjs/render/RealityMeshGraphicParams.d.ts +1 -0
- package/lib/cjs/render/RealityMeshGraphicParams.d.ts.map +1 -1
- package/lib/cjs/render/RealityMeshGraphicParams.js.map +1 -1
- package/lib/cjs/render/RenderMemory.d.ts +2 -0
- package/lib/cjs/render/RenderMemory.d.ts.map +1 -1
- package/lib/cjs/render/RenderMemory.js +2 -0
- package/lib/cjs/render/RenderMemory.js.map +1 -1
- package/lib/cjs/render/RenderPlan.d.ts +2 -1
- package/lib/cjs/render/RenderPlan.d.ts.map +1 -1
- package/lib/cjs/render/RenderPlan.js +5 -3
- package/lib/cjs/render/RenderPlan.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +1 -1
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +8 -9
- package/lib/cjs/render/RenderSystem.js.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/BatchUniforms.d.ts +4 -0
- package/lib/cjs/render/webgl/BatchUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BatchUniforms.js +18 -0
- package/lib/cjs/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +9 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +6 -0
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/BranchUniforms.d.ts +1 -0
- package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchUniforms.js +14 -1
- package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.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/ContourUniforms.d.ts +22 -0
- package/lib/cjs/render/webgl/ContourUniforms.d.ts.map +1 -0
- package/lib/cjs/render/webgl/ContourUniforms.js +98 -0
- package/lib/cjs/render/webgl/ContourUniforms.js.map +1 -0
- package/lib/cjs/render/webgl/Contours.d.ts +34 -0
- package/lib/cjs/render/webgl/Contours.d.ts.map +1 -0
- package/lib/cjs/render/webgl/Contours.js +127 -0
- package/lib/cjs/render/webgl/Contours.js.map +1 -0
- package/lib/cjs/render/webgl/DrawCommand.js +3 -3
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/EdgeSettings.js +1 -1
- package/lib/cjs/render/webgl/EdgeSettings.js.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.d.ts +1 -0
- package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.js +48 -51
- 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/GL.d.ts +2 -1
- package/lib/cjs/render/webgl/GL.d.ts.map +1 -1
- package/lib/cjs/render/webgl/GL.js +1 -0
- package/lib/cjs/render/webgl/GL.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.d.ts +12 -0
- package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +31 -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 +4 -4
- 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/RealityMesh.js +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts +2 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js +4 -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 +19 -7
- 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/ShaderBuilder.d.ts +15 -13
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +18 -10
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderProgram.js +26 -0
- package/lib/cjs/render/webgl/ShaderProgram.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/System.js +7 -7
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Target.js +2 -1
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/TargetUniforms.d.ts +2 -0
- package/lib/cjs/render/webgl/TargetUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TargetUniforms.js +2 -0
- package/lib/cjs/render/webgl/TargetUniforms.js.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/Texture.js +2 -2
- package/lib/cjs/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +2 -3
- 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 +2 -3
- package/lib/cjs/render/webgl/glsl/Atmosphere.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Blur.js +2 -3
- package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -3
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -3
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Clipping.js +3 -3
- 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 +2 -3
- package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CombineTextures.js +2 -3
- 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 +2 -3
- package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Contours.d.ts +4 -0
- package/lib/cjs/render/webgl/glsl/Contours.d.ts.map +1 -0
- package/lib/cjs/render/webgl/glsl/Contours.js +137 -0
- package/lib/cjs/render/webgl/glsl/Contours.js.map +1 -0
- package/lib/cjs/render/webgl/glsl/CopyColor.js +2 -3
- package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +2 -3
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.js +9 -10
- 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 +8 -9
- package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +2 -3
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.js +3 -4
- package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts +2 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +35 -28
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Fragment.js +15 -15
- 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 +2 -3
- 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 +9 -9
- 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 +3 -4
- 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 +8 -8
- 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 +2 -3
- package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.js +2 -3
- package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkySphere.js +2 -3
- package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +4 -4
- package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +11 -9
- 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 +3 -3
- 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 +2 -3
- 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 +3 -3
- package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/tile/ContextShareProvider.js +2 -2
- package/lib/cjs/tile/ContextShareProvider.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +1 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +18 -16
- 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 +7 -8
- 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.d.ts.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.d.ts.map +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.js +3 -4
- package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/tile/PntsReader.js +2 -3
- 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 +12 -12
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +3 -4
- 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/RealityTileLoader.js +1 -1
- package/lib/cjs/tile/RealityTileLoader.js.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 +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.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +3 -4
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.d.ts +4 -0
- package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +2 -0
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileRequest.js +1 -1
- package/lib/cjs/tile/TileRequest.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/TileStorage.js +1 -1
- package/lib/cjs/tile/TileStorage.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +2 -0
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +3 -0
- package/lib/cjs/tile/TileTreeReference.js.map +1 -1
- package/lib/cjs/tile/ViewFlagOverrides.js +1 -2
- package/lib/cjs/tile/ViewFlagOverrides.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +0 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/BingElevation.js +3 -3
- package/lib/cjs/tile/map/BingElevation.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +7 -8
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +4 -5
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.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/FeatureGraphicsRenderer.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/FeatureGraphicsRenderer.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.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/MapTile.js +1 -1
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.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/MapTilingScheme.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTilingScheme.js +4 -0
- package/lib/cjs/tile/map/MapTilingScheme.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/MeasureTool.js +2 -2
- package/lib/cjs/tools/MeasureTool.js.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.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +0 -2
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.d.ts.map +1 -1
- package/lib/esm/AccuSnap.js +17 -8
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/BingLocation.js +1 -1
- package/lib/esm/BingLocation.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts +0 -1
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js +2 -3
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/BriefcaseTxns.d.ts.map +1 -1
- package/lib/esm/ChangeFlags.d.ts +1 -1
- package/lib/esm/ChangeFlags.d.ts.map +1 -1
- package/lib/esm/ChangeFlags.js.map +1 -1
- package/lib/esm/CheckpointConnection.js +1 -1
- package/lib/esm/CheckpointConnection.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +6 -6
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/DrawingViewState.d.ts +8 -6
- package/lib/esm/DrawingViewState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.js +20 -10
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/EnvironmentDecorations.js +1 -1
- package/lib/esm/EnvironmentDecorations.js.map +1 -1
- package/lib/esm/GraphicalEditingScope.d.ts.map +1 -1
- package/lib/esm/HitDetail.d.ts +37 -5
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +12 -2
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +1 -2
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +1 -0
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +9 -8
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js +8 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/ModelState.d.ts +0 -8
- package/lib/esm/ModelState.d.ts.map +1 -1
- package/lib/esm/ModelState.js +0 -8
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +1 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js.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/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +1 -2
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
- package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -1
- package/lib/esm/RealityDataSourceContextShareImpl.js +2 -3
- package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts +4 -11
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +18 -12
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts +0 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +1 -2
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/SubCategoriesCache.js +1 -1
- package/lib/esm/SubCategoriesCache.js.map +1 -1
- package/lib/esm/TentativePoint.js +1 -1
- package/lib/esm/TentativePoint.js.map +1 -1
- package/lib/esm/ViewCreator3d.js +1 -1
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/ViewState.d.ts +14 -1
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +4 -2
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/ViewingSpace.d.ts.map +1 -1
- package/lib/esm/ViewingSpace.js +3 -0
- package/lib/esm/ViewingSpace.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +2 -4
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/WorkerProxy.d.ts +8 -4
- package/lib/esm/common/WorkerProxy.d.ts.map +1 -1
- package/lib/esm/common/WorkerProxy.js.map +1 -1
- package/lib/esm/common/gltf/GltfParser.js +6 -6
- package/lib/esm/common/gltf/GltfParser.js.map +1 -1
- package/lib/esm/common/gltf/GltfSchema.d.ts +1 -1
- package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
- package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
- package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
- package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.js +4 -5
- package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/esm/common/internal/render/DisplayParams.js.map +1 -1
- package/lib/esm/common/internal/render/GeometryList.d.ts +1 -1
- package/lib/esm/common/internal/render/MeshBuilder.js.map +1 -1
- package/lib/esm/common/internal/render/MeshBuilderMap.js.map +1 -1
- package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
- package/lib/esm/common/internal/render/OvrFlags.d.ts +4 -2
- package/lib/esm/common/internal/render/OvrFlags.d.ts.map +1 -1
- package/lib/esm/common/internal/render/OvrFlags.js.map +1 -1
- package/lib/esm/common/internal/render/VertexTable.d.ts.map +1 -1
- package/lib/esm/common/internal/render/VertexTable.js +3 -5
- package/lib/esm/common/internal/render/VertexTable.js.map +1 -1
- package/lib/esm/common/render/InstancedGraphicParams.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/LocalUnitFormatProvider.js +2 -2
- package/lib/esm/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.d.ts +12 -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 +14 -4
- package/lib/esm/render/Pixel.d.ts.map +1 -1
- package/lib/esm/render/Pixel.js +22 -5
- package/lib/esm/render/Pixel.js.map +1 -1
- package/lib/esm/render/RealityMeshGraphicParams.d.ts +1 -0
- package/lib/esm/render/RealityMeshGraphicParams.d.ts.map +1 -1
- package/lib/esm/render/RealityMeshGraphicParams.js.map +1 -1
- package/lib/esm/render/RenderMemory.d.ts +2 -0
- package/lib/esm/render/RenderMemory.d.ts.map +1 -1
- package/lib/esm/render/RenderMemory.js +2 -0
- package/lib/esm/render/RenderMemory.js.map +1 -1
- package/lib/esm/render/RenderPlan.d.ts +2 -1
- package/lib/esm/render/RenderPlan.d.ts.map +1 -1
- package/lib/esm/render/RenderPlan.js +2 -0
- package/lib/esm/render/RenderPlan.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +1 -1
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +8 -9
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/webgl/BatchUniforms.d.ts +4 -0
- package/lib/esm/render/webgl/BatchUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/BatchUniforms.js +18 -0
- package/lib/esm/render/webgl/BatchUniforms.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +9 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +6 -0
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/BranchUniforms.d.ts +1 -0
- package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchUniforms.js +14 -1
- package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/ContourUniforms.d.ts +22 -0
- package/lib/esm/render/webgl/ContourUniforms.d.ts.map +1 -0
- package/lib/esm/render/webgl/ContourUniforms.js +94 -0
- package/lib/esm/render/webgl/ContourUniforms.js.map +1 -0
- package/lib/esm/render/webgl/Contours.d.ts +34 -0
- package/lib/esm/render/webgl/Contours.d.ts.map +1 -0
- package/lib/esm/render/webgl/Contours.js +123 -0
- package/lib/esm/render/webgl/Contours.js.map +1 -0
- package/lib/esm/render/webgl/EdgeSettings.js +1 -1
- package/lib/esm/render/webgl/EdgeSettings.js.map +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.d.ts +1 -0
- package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.js +46 -49
- package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
- package/lib/esm/render/webgl/GL.d.ts +2 -1
- package/lib/esm/render/webgl/GL.d.ts.map +1 -1
- package/lib/esm/render/webgl/GL.js +1 -0
- package/lib/esm/render/webgl/GL.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.d.ts +12 -0
- package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +31 -0
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/Material.js +2 -2
- package/lib/esm/render/webgl/Material.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +1 -1
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts +2 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.js +2 -0
- package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +16 -4
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +15 -13
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +18 -10
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderProgram.js +26 -0
- package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +7 -7
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/render/webgl/Target.js +2 -1
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/TargetUniforms.d.ts +2 -0
- package/lib/esm/render/webgl/TargetUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/TargetUniforms.js +2 -0
- package/lib/esm/render/webgl/TargetUniforms.js.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/render/webgl/Texture.js +2 -2
- package/lib/esm/render/webgl/Texture.js.map +1 -1
- package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
- package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
- package/lib/esm/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/esm/render/webgl/glsl/Blur.js +1 -1
- package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +1 -1
- package/lib/esm/render/webgl/glsl/ClearTranslucent.js +1 -1
- package/lib/esm/render/webgl/glsl/Clipping.js +1 -1
- package/lib/esm/render/webgl/glsl/Combine3Textures.js +1 -1
- package/lib/esm/render/webgl/glsl/CombineTextures.js +1 -1
- package/lib/esm/render/webgl/glsl/Composite.js +1 -1
- package/lib/esm/render/webgl/glsl/Contours.d.ts +4 -0
- package/lib/esm/render/webgl/glsl/Contours.d.ts.map +1 -0
- package/lib/esm/render/webgl/glsl/Contours.js +134 -0
- package/lib/esm/render/webgl/glsl/Contours.js.map +1 -0
- package/lib/esm/render/webgl/glsl/CopyColor.js +1 -1
- package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +1 -1
- package/lib/esm/render/webgl/glsl/CopyStencil.js +5 -5
- package/lib/esm/render/webgl/glsl/EDL.js +4 -4
- package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +1 -1
- package/lib/esm/render/webgl/glsl/Edge.js +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts +2 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +21 -15
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Fragment.js +9 -9
- package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js +4 -4
- package/lib/esm/render/webgl/glsl/PointCloud.js +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -3
- package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
- package/lib/esm/render/webgl/glsl/SkyBox.js +1 -1
- package/lib/esm/render/webgl/glsl/SkySphere.js +1 -1
- package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +5 -3
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Translucency.js +1 -1
- package/lib/esm/render/webgl/glsl/Wiremesh.js +1 -1
- package/lib/esm/request/Request.d.ts.map +1 -1
- package/lib/esm/request/Request.js.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.js +1 -1
- package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
- package/lib/esm/tile/ContextShareProvider.js +2 -2
- package/lib/esm/tile/ContextShareProvider.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +1 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +14 -12
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/ImdlGraphicsCreator.js +4 -4
- package/lib/esm/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
- package/lib/esm/tile/OrbitGtTileTree.js +1 -2
- package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/tile/PntsReader.js +1 -1
- package/lib/esm/tile/PntsReader.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +6 -6
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +1 -2
- package/lib/esm/tile/RealityModelTileTree.js.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/RealityTileLoader.js +1 -1
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
- package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +1 -2
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.d.ts +4 -0
- package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +2 -0
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileRequest.js +1 -1
- package/lib/esm/tile/TileRequest.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/TileStorage.js +1 -1
- package/lib/esm/tile/TileStorage.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +2 -0
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +3 -0
- package/lib/esm/tile/TileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +0 -1
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/BingElevation.js +3 -3
- package/lib/esm/tile/map/BingElevation.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +3 -3
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +4 -5
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/FeatureGraphicsRenderer.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/FeatureGraphicsRenderer.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.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/MapTile.js +1 -1
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.js +1 -1
- package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTilingScheme.js +4 -0
- package/lib/esm/tile/map/MapTilingScheme.js.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/MeasureTool.js +2 -2
- package/lib/esm/tools/MeasureTool.js.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 +30 -36
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG
|
|
1
|
+
{"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.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 { AttributeMap } from \"../AttributeMap\";\r\nimport { SkyBoxQuadsGeometry } from \"../CachedGeometry\";\r\nimport { Matrix3 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture } from \"../Texture\";\r\n\r\nconst computeBaseColor = `return vec4(0, 0, 0, 0);`;\r\nconst assignFragData = `FragColor = TEXTURE_CUBE(s_cube, v_texDir);`;\r\nconst computePosition = `vec3 pos = u_rot * vec3(rawPos.x, rawPos.z, -rawPos.y); return pos.xyzz;`; // rawPos swizzling accounts for iModel rotation.\r\nconst computeTexDir = `v_texDir = rawPosition.xyz;`;\r\n\r\nconst scratchRotMatrix = new Matrix3();\r\n\r\n/** @internal */\r\nexport function createSkyBoxProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const prog = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n prog.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n prog.frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n prog.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.vert.addUniform(\"u_rot\", VariableType.Mat3, (prg) => {\r\n prg.addGraphicUniform(\"u_rot\", (uniform, params) => {\r\n const rot = params.target.uniforms.frustum.viewMatrix.matrix;\r\n const mat3 = scratchRotMatrix;\r\n mat3.m00 = -rot.at(0, 0);\r\n mat3.m01 = -rot.at(0, 1);\r\n mat3.m02 = -rot.at(0, 2);\r\n mat3.m10 = -rot.at(1, 0);\r\n mat3.m11 = -rot.at(1, 1);\r\n mat3.m12 = -rot.at(1, 2);\r\n mat3.m20 = rot.at(2, 0);\r\n mat3.m21 = rot.at(2, 1);\r\n mat3.m22 = rot.at(2, 2);\r\n uniform.setMatrix3(mat3);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"s_cube\", VariableType.SamplerCube, (prg) => {\r\n prg.addGraphicUniform(\"s_cube\", (uniform, params) => {\r\n const geom = params.geometry as SkyBoxQuadsGeometry;\r\n (geom.cube as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n prog.addInlineComputedVarying(\"v_texDir\", VariableType.Vec3, computeTexDir);\r\n\r\n prog.vert.headerComment = \"//!V! SkyBox\";\r\n prog.frag.headerComment = \"//!F! SkyBox\";\r\n\r\n return prog.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.createSkySphereBuilder =
|
|
10
|
+
exports.createSkySphereBuilder = createSkySphereBuilder;
|
|
11
11
|
const core_geometry_1 = require("@itwin/core-geometry");
|
|
12
12
|
const core_common_1 = require("@itwin/core-common");
|
|
13
13
|
const AttributeMap_1 = require("../AttributeMap");
|
|
@@ -214,7 +214,7 @@ function createSkySphereBuilder(isGradient, flags) {
|
|
|
214
214
|
uniform.setUniform3fv(params.target.uniforms.frustum.frustum); // { near, far, type }
|
|
215
215
|
});
|
|
216
216
|
});
|
|
217
|
-
frag.set(
|
|
217
|
+
frag.set(17 /* FragmentShaderComponent.AssignFragData */, Fragment_1.assignFragColor);
|
|
218
218
|
if (flags.enableAtmosphere) {
|
|
219
219
|
frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeSkySphereColorAtmosphere);
|
|
220
220
|
(0, Atmosphere_1.addAtmosphericScatteringEffect)(builder, true, true);
|
|
@@ -264,5 +264,4 @@ function createSkySphereBuilder(isGradient, flags) {
|
|
|
264
264
|
}
|
|
265
265
|
return builder;
|
|
266
266
|
}
|
|
267
|
-
exports.createSkySphereBuilder = createSkySphereBuilder;
|
|
268
267
|
//# sourceMappingURL=SkySphere.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkySphere.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.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 { Angle, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkySphereViewportQuadGeometry } from \"../CachedGeometry\";\r\nimport { fromSumOf, FrustumUniformType } from \"../FrustumUniforms\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderType, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\r\nimport { TechniqueFlags } from \"../TechniqueFlags\";\r\n\r\nconst computeGradientValue = `\r\n // For the gradient sky it's good enough to calculate these in the vertex shader.\r\n vec3 eyeToVert = a_worldPos - u_worldEye;\r\n float radius = sqrt(eyeToVert.x * eyeToVert.x + eyeToVert.y * eyeToVert.y);\r\n float zValue = eyeToVert.z - radius * u_zOffset;\r\n float d = atan(zValue, radius);\r\n if (u_skyParams.x < 0.0) { // 2-color gradient\r\n d = 0.5 - d / 3.14159265359;\r\n return vec4(d, 0.0, 0.0, 0.0);\r\n }\r\n d = d / 1.570796326795;\r\n return vec4(d, 1.0 - (d - horizonSize) / (1.0 - horizonSize), 1.0 - (-d - horizonSize) / (1.0 - horizonSize), (d + horizonSize) / (horizonSize * 2.0));\r\n`;\r\n\r\nconst computeSkySphereColorGradient = `\r\n if (u_skyParams.x < 0.0) // 2-color\r\n return vec4(mix(u_zenithColor, u_nadirColor, v_gradientValue.x), 1.0);\r\n\r\n if (v_gradientValue.x > horizonSize) // above horizon\r\n return vec4(mix(u_zenithColor, u_skyColor, pow(v_gradientValue.y, u_skyParams.y)), 1.0);\r\n else if (v_gradientValue.x < -horizonSize) // below horizon\r\n return vec4(mix(u_nadirColor, u_groundColor, pow(v_gradientValue.z, u_skyParams.z)), 1.0);\r\n\r\n return vec4(mix(u_groundColor, u_skyColor, v_gradientValue.w), 1.0);\r\n`;\r\n\r\nconst computeSkySphereColorAtmosphere = `\r\n return vec4(0.0, 0.0, 0.0, 1.0);\r\n`;\r\n\r\nconst computeEyeToVert = \"v_eyeToVert = a_worldPos - u_worldEye;\";\r\n\r\nconst computeSkySphereColorTexture = `\r\n // For the texture we must calculate these per pixel. Alternatively we could use a finer mesh.\r\n float radius = sqrt(v_eyeToVert.x * v_eyeToVert.x + v_eyeToVert.y * v_eyeToVert.y);\r\n float zValue = v_eyeToVert.z - radius * u_zOffset;\r\n float u = 0.25 - (atan(v_eyeToVert.y, v_eyeToVert.x) + u_rotation) / 6.28318530718;\r\n float v = 0.5 - atan(zValue, radius) / 3.14159265359;\r\n if (u < 0.0)\r\n u += 1.0;\r\n if (v < 0.0)\r\n v += 1.0;\r\n return TEXTURE(s_skyTxtr, vec2(u, v));\r\n`;\r\n\r\n/**\r\n * Eye Space for the SkySphere is unique because the ViewportQuad is already aligned with the view.\r\n * For this reason, the modelView matrix is not useful in calculating eyeSpace.\r\n * Instead, we can calculate the eyeSpace coordinates via the frustum values directly.\r\n */\r\nconst computeEyeSpace = `\r\nvec3 computeEyeSpace(vec4 rawPos) {\r\n vec3 pos01 = rawPos.xyz * 0.5 + 0.5;\r\n\r\n float top = u_frustumPlanes.x;\r\n float bottom = u_frustumPlanes.y;\r\n float left = u_frustumPlanes.z;\r\n float right = u_frustumPlanes.w;\r\n\r\n return vec3(\r\n mix(left, right, pos01.x),\r\n mix(bottom, top, pos01.y),\r\n -u_frustum.x\r\n );\r\n}`;\r\n\r\nconst scratch3Floats = new Float32Array(3);\r\nconst scratchVec3 = new Vector3d();\r\nconst scratchPoint3 = new Point3d();\r\n\r\n/** @internal */\r\nfunction modulateColor(colorIn: Float32Array, t: number, colorOut: Float32Array): void {\r\n const b = 1.0 - t;\r\n colorOut[0] = colorIn[0] * b;\r\n colorOut[1] = colorIn[1] * b;\r\n colorOut[2] = colorIn[2] * b;\r\n}\r\n\r\n/** @internal */\r\nfunction addGradientUniforms(builder: ProgramBuilder): void {\r\n builder.vert.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n builder.vert.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_zenithColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_zenithColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.zenithColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.zenithColor);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_skyColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.skyColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.skyColor);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_groundColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_groundColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.zenithColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.groundColor);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(\"u_nadirColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_nadirColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.nadirColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.nadirColor);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nfunction addTextureUniforms(builder: ProgramBuilder): void {\r\n builder.frag.addUniform(\"s_skyTxtr\", VariableType.Sampler2D, (shader) => {\r\n shader.addGraphicUniform(\"s_skyTxtr\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n if (undefined !== geom.skyTexture)\r\n (geom.skyTexture as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n else\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.FeatureSymbology);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_rotation\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_rotation\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.rotation);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function createSkySphereBuilder(isGradient: boolean, flags: TechniqueFlags): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(isGradient ? TechniqueId.SkySphereGradient : TechniqueId.SkySphereTexture, false);\r\n const builder = createViewportQuadBuilder(false, attrMap);\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n\r\n vert.addFunction(computeEyeSpace);\r\n builder.addInlineComputedVarying(\"v_eyeSpace\", VariableType.Vec3, \"v_eyeSpace = computeEyeSpace(rawPosition);\");\r\n\r\n vert.addUniform(\"u_frustumPlanes\", VariableType.Vec4, (prg) => {\r\n prg.addGraphicUniform(\"u_frustumPlanes\", (uniform, params) => {\r\n uniform.setUniform4fv(params.target.uniforms.frustum.planes); // { top, bottom, left, right }\r\n });\r\n });\r\n vert.addUniform(\"u_frustum\", VariableType.Vec3, (prg) => {\r\n prg.addGraphicUniform(\"u_frustum\", (uniform, params) => {\r\n uniform.setUniform3fv(params.target.uniforms.frustum.frustum); // { near, far, type }\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n if (flags.enableAtmosphere) {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorAtmosphere);\r\n addAtmosphericScatteringEffect(builder, true, true);\r\n return builder;\r\n }\r\n\r\n builder.vert.addUniform(\"u_worldEye\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_worldEye\", (uniform, params) => {\r\n const frustum = params.target.planFrustum;\r\n if (FrustumUniformType.Perspective === params.target.uniforms.frustum.type) {\r\n // compute eye point from frustum.\r\n const farLowerLeft = frustum.getCorner(Npc.LeftBottomRear);\r\n const nearLowerLeft = frustum.getCorner(Npc.LeftBottomFront);\r\n const scale = 1.0 / (1.0 - params.target.planFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, scratchVec3);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, scratchPoint3);\r\n scratch3Floats[0] = cameraPosition.x;\r\n scratch3Floats[1] = cameraPosition.y;\r\n scratch3Floats[2] = cameraPosition.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else {\r\n const delta = Vector3d.createStartEnd(frustum.getCorner(Npc.LeftBottomRear), frustum.getCorner(Npc.LeftBottomFront), scratchVec3);\r\n const pseudoCameraHalfAngle = 22.5;\r\n const diagonal = frustum.getCorner(Npc.LeftBottomRear).distance(frustum.getCorner(Npc.RightTopRear));\r\n const focalLength = diagonal / (2 * Math.atan(pseudoCameraHalfAngle * Angle.radiansPerDegree));\r\n let zScale = focalLength / delta.magnitude();\r\n if (zScale < 1.000001)\r\n zScale = 1.000001; // prevent worldEye front being on or inside the frustum front plane\r\n const worldEye = Point3d.createAdd3Scaled(frustum.getCorner(Npc.LeftBottomRear), .5, frustum.getCorner(Npc.RightTopRear), .5, delta, zScale, scratchPoint3);\r\n scratch3Floats[0] = worldEye.x;\r\n scratch3Floats[1] = worldEye.y;\r\n scratch3Floats[2] = worldEye.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n }\r\n });\r\n });\r\n\r\n if (isGradient) {\r\n addGradientUniforms(builder);\r\n builder.addGlobal(\"horizonSize\", VariableType.Float, ShaderType.Both, \"0.0015\", true);\r\n builder.addFunctionComputedVarying(\"v_gradientValue\", VariableType.Vec4, \"computeGradientValue\", computeGradientValue);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorGradient);\r\n } else {\r\n addTextureUniforms(builder);\r\n builder.addInlineComputedVarying(\"v_eyeToVert\", VariableType.Vec3, computeEyeToVert);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorTexture);\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SkySphere.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.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 { Angle, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkySphereViewportQuadGeometry } from \"../CachedGeometry\";\r\nimport { fromSumOf, FrustumUniformType } from \"../FrustumUniforms\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderType, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\r\nimport { TechniqueFlags } from \"../TechniqueFlags\";\r\n\r\nconst computeGradientValue = `\r\n // For the gradient sky it's good enough to calculate these in the vertex shader.\r\n vec3 eyeToVert = a_worldPos - u_worldEye;\r\n float radius = sqrt(eyeToVert.x * eyeToVert.x + eyeToVert.y * eyeToVert.y);\r\n float zValue = eyeToVert.z - radius * u_zOffset;\r\n float d = atan(zValue, radius);\r\n if (u_skyParams.x < 0.0) { // 2-color gradient\r\n d = 0.5 - d / 3.14159265359;\r\n return vec4(d, 0.0, 0.0, 0.0);\r\n }\r\n d = d / 1.570796326795;\r\n return vec4(d, 1.0 - (d - horizonSize) / (1.0 - horizonSize), 1.0 - (-d - horizonSize) / (1.0 - horizonSize), (d + horizonSize) / (horizonSize * 2.0));\r\n`;\r\n\r\nconst computeSkySphereColorGradient = `\r\n if (u_skyParams.x < 0.0) // 2-color\r\n return vec4(mix(u_zenithColor, u_nadirColor, v_gradientValue.x), 1.0);\r\n\r\n if (v_gradientValue.x > horizonSize) // above horizon\r\n return vec4(mix(u_zenithColor, u_skyColor, pow(v_gradientValue.y, u_skyParams.y)), 1.0);\r\n else if (v_gradientValue.x < -horizonSize) // below horizon\r\n return vec4(mix(u_nadirColor, u_groundColor, pow(v_gradientValue.z, u_skyParams.z)), 1.0);\r\n\r\n return vec4(mix(u_groundColor, u_skyColor, v_gradientValue.w), 1.0);\r\n`;\r\n\r\nconst computeSkySphereColorAtmosphere = `\r\n return vec4(0.0, 0.0, 0.0, 1.0);\r\n`;\r\n\r\nconst computeEyeToVert = \"v_eyeToVert = a_worldPos - u_worldEye;\";\r\n\r\nconst computeSkySphereColorTexture = `\r\n // For the texture we must calculate these per pixel. Alternatively we could use a finer mesh.\r\n float radius = sqrt(v_eyeToVert.x * v_eyeToVert.x + v_eyeToVert.y * v_eyeToVert.y);\r\n float zValue = v_eyeToVert.z - radius * u_zOffset;\r\n float u = 0.25 - (atan(v_eyeToVert.y, v_eyeToVert.x) + u_rotation) / 6.28318530718;\r\n float v = 0.5 - atan(zValue, radius) / 3.14159265359;\r\n if (u < 0.0)\r\n u += 1.0;\r\n if (v < 0.0)\r\n v += 1.0;\r\n return TEXTURE(s_skyTxtr, vec2(u, v));\r\n`;\r\n\r\n/**\r\n * Eye Space for the SkySphere is unique because the ViewportQuad is already aligned with the view.\r\n * For this reason, the modelView matrix is not useful in calculating eyeSpace.\r\n * Instead, we can calculate the eyeSpace coordinates via the frustum values directly.\r\n */\r\nconst computeEyeSpace = `\r\nvec3 computeEyeSpace(vec4 rawPos) {\r\n vec3 pos01 = rawPos.xyz * 0.5 + 0.5;\r\n\r\n float top = u_frustumPlanes.x;\r\n float bottom = u_frustumPlanes.y;\r\n float left = u_frustumPlanes.z;\r\n float right = u_frustumPlanes.w;\r\n\r\n return vec3(\r\n mix(left, right, pos01.x),\r\n mix(bottom, top, pos01.y),\r\n -u_frustum.x\r\n );\r\n}`;\r\n\r\nconst scratch3Floats = new Float32Array(3);\r\nconst scratchVec3 = new Vector3d();\r\nconst scratchPoint3 = new Point3d();\r\n\r\n/** @internal */\r\nfunction modulateColor(colorIn: Float32Array, t: number, colorOut: Float32Array): void {\r\n const b = 1.0 - t;\r\n colorOut[0] = colorIn[0] * b;\r\n colorOut[1] = colorIn[1] * b;\r\n colorOut[2] = colorIn[2] * b;\r\n}\r\n\r\n/** @internal */\r\nfunction addGradientUniforms(builder: ProgramBuilder): void {\r\n builder.vert.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n builder.vert.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_zenithColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_zenithColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.zenithColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.zenithColor);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_skyColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.skyColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.skyColor);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_groundColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_groundColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.zenithColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.groundColor);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(\"u_nadirColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_nadirColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.nadirColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.nadirColor);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nfunction addTextureUniforms(builder: ProgramBuilder): void {\r\n builder.frag.addUniform(\"s_skyTxtr\", VariableType.Sampler2D, (shader) => {\r\n shader.addGraphicUniform(\"s_skyTxtr\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n if (undefined !== geom.skyTexture)\r\n (geom.skyTexture as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n else\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.FeatureSymbology);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_rotation\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_rotation\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.rotation);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function createSkySphereBuilder(isGradient: boolean, flags: TechniqueFlags): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(isGradient ? TechniqueId.SkySphereGradient : TechniqueId.SkySphereTexture, false);\r\n const builder = createViewportQuadBuilder(false, attrMap);\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n\r\n vert.addFunction(computeEyeSpace);\r\n builder.addInlineComputedVarying(\"v_eyeSpace\", VariableType.Vec3, \"v_eyeSpace = computeEyeSpace(rawPosition);\");\r\n\r\n vert.addUniform(\"u_frustumPlanes\", VariableType.Vec4, (prg) => {\r\n prg.addGraphicUniform(\"u_frustumPlanes\", (uniform, params) => {\r\n uniform.setUniform4fv(params.target.uniforms.frustum.planes); // { top, bottom, left, right }\r\n });\r\n });\r\n vert.addUniform(\"u_frustum\", VariableType.Vec3, (prg) => {\r\n prg.addGraphicUniform(\"u_frustum\", (uniform, params) => {\r\n uniform.setUniform3fv(params.target.uniforms.frustum.frustum); // { near, far, type }\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n if (flags.enableAtmosphere) {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorAtmosphere);\r\n addAtmosphericScatteringEffect(builder, true, true);\r\n return builder;\r\n }\r\n\r\n builder.vert.addUniform(\"u_worldEye\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_worldEye\", (uniform, params) => {\r\n const frustum = params.target.planFrustum;\r\n if (FrustumUniformType.Perspective === params.target.uniforms.frustum.type) {\r\n // compute eye point from frustum.\r\n const farLowerLeft = frustum.getCorner(Npc.LeftBottomRear);\r\n const nearLowerLeft = frustum.getCorner(Npc.LeftBottomFront);\r\n const scale = 1.0 / (1.0 - params.target.planFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, scratchVec3);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, scratchPoint3);\r\n scratch3Floats[0] = cameraPosition.x;\r\n scratch3Floats[1] = cameraPosition.y;\r\n scratch3Floats[2] = cameraPosition.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else {\r\n const delta = Vector3d.createStartEnd(frustum.getCorner(Npc.LeftBottomRear), frustum.getCorner(Npc.LeftBottomFront), scratchVec3);\r\n const pseudoCameraHalfAngle = 22.5;\r\n const diagonal = frustum.getCorner(Npc.LeftBottomRear).distance(frustum.getCorner(Npc.RightTopRear));\r\n const focalLength = diagonal / (2 * Math.atan(pseudoCameraHalfAngle * Angle.radiansPerDegree));\r\n let zScale = focalLength / delta.magnitude();\r\n if (zScale < 1.000001)\r\n zScale = 1.000001; // prevent worldEye front being on or inside the frustum front plane\r\n const worldEye = Point3d.createAdd3Scaled(frustum.getCorner(Npc.LeftBottomRear), .5, frustum.getCorner(Npc.RightTopRear), .5, delta, zScale, scratchPoint3);\r\n scratch3Floats[0] = worldEye.x;\r\n scratch3Floats[1] = worldEye.y;\r\n scratch3Floats[2] = worldEye.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n }\r\n });\r\n });\r\n\r\n if (isGradient) {\r\n addGradientUniforms(builder);\r\n builder.addGlobal(\"horizonSize\", VariableType.Float, ShaderType.Both, \"0.0015\", true);\r\n builder.addFunctionComputedVarying(\"v_gradientValue\", VariableType.Vec4, \"computeGradientValue\", computeGradientValue);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorGradient);\r\n } else {\r\n addTextureUniforms(builder);\r\n builder.addInlineComputedVarying(\"v_eyeToVert\", VariableType.Vec3, computeEyeToVert);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorTexture);\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.warpDepth = void 0;
|
|
4
|
+
exports.addEvsmExponent = addEvsmExponent;
|
|
5
|
+
exports.addSolarShadowMap = addSolarShadowMap;
|
|
4
6
|
/*---------------------------------------------------------------------------------------------
|
|
5
7
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
6
8
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -82,7 +84,6 @@ function addEvsmExponent(frag) {
|
|
|
82
84
|
});
|
|
83
85
|
});
|
|
84
86
|
}
|
|
85
|
-
exports.addEvsmExponent = addEvsmExponent;
|
|
86
87
|
/** @internal */
|
|
87
88
|
function addSolarShadowMap(builder, toTerrain = false) {
|
|
88
89
|
const frag = builder.frag;
|
|
@@ -124,7 +125,6 @@ function addSolarShadowMap(builder, toTerrain = false) {
|
|
|
124
125
|
frag.addFunction(exports.warpDepth);
|
|
125
126
|
frag.addFunction(chebyshevUpperBound);
|
|
126
127
|
frag.addFunction(shadowMapEVSM);
|
|
127
|
-
frag.set(
|
|
128
|
+
frag.set(14 /* FragmentShaderComponent.ApplySolarShadowMap */, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);
|
|
128
129
|
}
|
|
129
|
-
exports.addSolarShadowMap = addSolarShadowMap;
|
|
130
130
|
//# sourceMappingURL=SolarShadowMapping.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolarShadowMapping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SolarShadowMapping.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"SolarShadowMapping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SolarShadowMapping.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\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { addInstancedRtcMatrix } from \"./Vertex\";\r\n\r\nconst computeShadowPos = `\r\n vec4 shadowProj = u_shadowProj * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\nconst computeInstancedShadowPos = `\r\n vec4 shadowProj = u_shadowProj * g_instancedRtcMatrix * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\n\r\n// for 32-bit float, max exponent should be 44.36, for 16-bit should be 5.545\r\nconst evsm32Exp = 42.0;\r\nconst evsm16Exp = 5.545;\r\n\r\nexport const warpDepth = `\r\n// Applies exponential warp to shadow map depth, input depth should be in [0, 1]\r\nvec2 warpDepth(float depth, float exponent) {\r\n depth = 2.0 * depth - 1.0; // Rescale depth into [-1, 1]\r\n float pos = exp( exponent * depth);\r\n float neg = -exp(-exponent * depth);\r\n return vec2(pos, neg);\r\n}\r\n`;\r\n\r\nconst chebyshevUpperBound = `\r\nfloat chebyshevUpperBound(vec2 moments, float mean, float minVariance) {\r\n float variance = moments.y - (moments.x * moments.x);\r\n variance = max(variance, minVariance);\r\n\r\n // Compute probabilistic upper bound\r\n float d = mean - moments.x;\r\n float pMax = variance / (variance + (d * d));\r\n\r\n return (mean <= moments.x ? 1.0 : pMax); // One-tailed Chebyshev\r\n}\r\n`;\r\n\r\nconst shadowMapEVSM = `\r\nfloat shadowMapEVSM(vec3 shadowPos) {\r\n vec2 warpedDepth = warpDepth(shadowPos.z, u_evsmExponent);\r\n vec4 occluder = TEXTURE(s_shadowSampler, shadowPos.xy/* * 0.5*/); // shadow texture is 1/2 size (both dirs)\r\n\r\n // Derivative of warping at depth\r\n vec2 depthScale = kVSMBias * 0.01 * u_evsmExponent * warpedDepth;\r\n vec2 minVariance = depthScale * depthScale;\r\n\r\n float posContrib = chebyshevUpperBound(occluder.xz, warpedDepth.x, minVariance.x);\r\n float negContrib = chebyshevUpperBound(occluder.yw, warpedDepth.y, minVariance.y);\r\n return min(posContrib, negContrib);\r\n}\r\n`;\r\n\r\nconst applySolarShadowMap = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n float visible = (u_surfaceFlags[kSurfaceBitIndex_HasNormals] && (dot(g_normal, u_sunDir) < 0.0)) ? 0.0 : shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\nconst applySolarShadowMapTerrain = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n\r\n float visible = shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEvsmExponent(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_evsmExponent\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_evsmExponent\", (uniform) => {\r\n uniform.setUniform1f((RenderType.TextureFloat === System.instance.maxRenderType) ? evsm32Exp : evsm16Exp);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addSolarShadowMap(builder: ProgramBuilder, toTerrain = false) {\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n frag.addUniform(\"s_shadowSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_shadowSampler\", (uniform, params) => {\r\n const shadowMap = params.target.solarShadowMap;\r\n assert(undefined !== shadowMap.shadowMapTexture);\r\n shadowMap.shadowMapTexture.texture.bindSampler(uniform, TextureUnit.ShadowMap);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_shadowParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowParams\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindColorAndBias(uniform);\r\n });\r\n });\r\n\r\n if (!toTerrain) {\r\n frag.addUniform(\"u_sunDir\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_sunDir\", (uniform, params) => {\r\n params.target.uniforms.bindSunDirection(uniform);\r\n });\r\n });\r\n }\r\n\r\n vert.addUniform(\"u_shadowProj\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowProj\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n\r\n addEvsmExponent(frag);\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n builder.addInlineComputedVarying(\"v_shadowPos\", VariableType.Vec3, vert.usesInstancedGeometry ? computeInstancedShadowPos : computeShadowPos);\r\n /* This is the EVSM bias value, which makes tradeoffs in shadow quality. Normally it should be set to 0.1.\r\n Lower values can introduce shadows where they should not be, including shadow acne. Higher values can cause Peter\r\n Panning effect and light bleeding. Tested 0.01 and 1.0, woth more focus on 0.1 to 0.5 inclusive, chose 0.2 for a\r\n while (on 9/13/19) then after having shadow tiles match view tile resolution for ones in view, retested and went\r\n back to 0.1 (on 11/5/19). */\r\n frag.addGlobal(\"kVSMBias\", VariableType.Float, \"0.1\", true);\r\n frag.addFunction(warpDepth);\r\n frag.addFunction(chebyshevUpperBound);\r\n frag.addFunction(shadowMapEVSM);\r\n frag.set(FragmentShaderComponent.ApplySolarShadowMap, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAC2C,cAAc,EAC/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACQ,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,YAAY,EAAE,cAAc,EAC3G,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAC2C,cAAc,EAC/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACQ,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,YAAY,EAAE,cAAc,EAC3G,MAAM,mBAAmB,CAAC;AAmR3B,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAc5H;AAsED,gBAAgB;AAChB,eAAO,MAAM,eAAe,+SAW3B,CAAC;AAgHF,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,QAoBhH;AAyCD,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,QAsDzI;AAED,eAAO,MAAM,wBAAwB,mWAQpC,CAAC;AA2BF,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA6G1E;AAED,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,cAAc,QAgB3E"}
|
|
@@ -7,7 +7,12 @@
|
|
|
7
7
|
* @module WebGL
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
10
|
+
exports.discardClassifiedByAlpha = exports.octDecodeNormal = void 0;
|
|
11
|
+
exports.createSurfaceHiliter = createSurfaceHiliter;
|
|
12
|
+
exports.addSurfaceFlags = addSurfaceFlags;
|
|
13
|
+
exports.addTexture = addTexture;
|
|
14
|
+
exports.createSurfaceBuilder = createSurfaceBuilder;
|
|
15
|
+
exports.addClassificationTranslucencyDiscard = addClassificationTranslucencyDiscard;
|
|
11
16
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
17
|
const AttributeMap_1 = require("../AttributeMap");
|
|
13
18
|
const Material_1 = require("../Material");
|
|
@@ -32,6 +37,7 @@ const Vertex_1 = require("./Vertex");
|
|
|
32
37
|
const SurfaceGeometry_1 = require("../SurfaceGeometry");
|
|
33
38
|
const Wiremesh_1 = require("./Wiremesh");
|
|
34
39
|
const core_common_1 = require("@itwin/core-common");
|
|
40
|
+
const Contours_1 = require("./Contours");
|
|
35
41
|
const constantLodTextureLookup = `
|
|
36
42
|
vec4 constantLodTextureLookup(sampler2D textureSampler) {
|
|
37
43
|
float logDepth = log2(v_uvCustom.z);
|
|
@@ -259,14 +265,13 @@ function createSurfaceHiliter(instanced, classified, posType) {
|
|
|
259
265
|
if (classified) {
|
|
260
266
|
(0, PlanarClassification_1.addHilitePlanarClassifier)(builder);
|
|
261
267
|
builder.vert.addGlobal("feature_ignore_material", 0 /* VariableType.Boolean */, "false");
|
|
262
|
-
builder.frag.set(
|
|
268
|
+
builder.frag.set(17 /* FragmentShaderComponent.AssignFragData */, Fragment_1.assignFragColor);
|
|
263
269
|
}
|
|
264
270
|
else {
|
|
265
271
|
(0, FeatureSymbology_1.addSurfaceHiliter)(builder);
|
|
266
272
|
}
|
|
267
273
|
return builder;
|
|
268
274
|
}
|
|
269
|
-
exports.createSurfaceHiliter = createSurfaceHiliter;
|
|
270
275
|
const isSurfaceBitSet = `
|
|
271
276
|
bool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }
|
|
272
277
|
`;
|
|
@@ -456,7 +461,6 @@ function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor) {
|
|
|
456
461
|
});
|
|
457
462
|
});
|
|
458
463
|
}
|
|
459
|
-
exports.addSurfaceFlags = addSurfaceFlags;
|
|
460
464
|
function addNormal(builder, animated) {
|
|
461
465
|
(0, Vertex_1.addNormalMatrix)(builder.vert);
|
|
462
466
|
const quantized = "quantized" === builder.vert.positionType;
|
|
@@ -482,12 +486,12 @@ function addNormal(builder, animated) {
|
|
|
482
486
|
});
|
|
483
487
|
});
|
|
484
488
|
finalizeNormal += finalizeNormalPostlude;
|
|
485
|
-
builder.frag.set(
|
|
489
|
+
builder.frag.set(23 /* FragmentShaderComponent.FinalizeNormal */, finalizeNormal);
|
|
486
490
|
// Set to true to colorize surfaces based on normals (in world space).
|
|
487
491
|
// You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.
|
|
488
492
|
const debugNormals = false;
|
|
489
493
|
if (debugNormals) {
|
|
490
|
-
builder.frag.set(
|
|
494
|
+
builder.frag.set(16 /* FragmentShaderComponent.ApplyDebugColor */, "return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);");
|
|
491
495
|
builder.addInlineComputedVarying("v_normal", 4 /* VariableType.Vec3 */, "v_normal = computeSurfaceNormal();");
|
|
492
496
|
}
|
|
493
497
|
}
|
|
@@ -547,7 +551,6 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite) {
|
|
|
547
551
|
});
|
|
548
552
|
}
|
|
549
553
|
}
|
|
550
|
-
exports.addTexture = addTexture;
|
|
551
554
|
exports.discardClassifiedByAlpha = `
|
|
552
555
|
if (u_no_classifier_discard)
|
|
553
556
|
return false;
|
|
@@ -624,6 +627,7 @@ function createSurfaceBuilder(flags) {
|
|
|
624
627
|
builder.frag.addFunction(getSurfaceColor);
|
|
625
628
|
(0, Lighting_1.addLighting)(builder);
|
|
626
629
|
(0, Fragment_1.addWhiteOnWhiteReversal)(builder.frag);
|
|
630
|
+
(0, Contours_1.addApplyContours)(builder);
|
|
627
631
|
if (flags.isTranslucent) {
|
|
628
632
|
(0, Translucency_1.addTranslucency)(builder);
|
|
629
633
|
}
|
|
@@ -674,7 +678,6 @@ function createSurfaceBuilder(flags) {
|
|
|
674
678
|
(0, Wiremesh_1.addWiremesh)(builder);
|
|
675
679
|
return builder;
|
|
676
680
|
}
|
|
677
|
-
exports.createSurfaceBuilder = createSurfaceBuilder;
|
|
678
681
|
function addClassificationTranslucencyDiscard(builder) {
|
|
679
682
|
// 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.
|
|
680
683
|
// Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.
|
|
@@ -690,5 +693,4 @@ function addClassificationTranslucencyDiscard(builder) {
|
|
|
690
693
|
});
|
|
691
694
|
builder.frag.set(5 /* FragmentShaderComponent.DiscardByAlpha */, exports.discardClassifiedByAlpha);
|
|
692
695
|
}
|
|
693
|
-
exports.addClassificationTranslucencyDiscard = addClassificationTranslucencyDiscard;
|
|
694
696
|
//# sourceMappingURL=Surface.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../src/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\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);\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 const 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\n\r\n/** @internal */\r\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud: boolean, isHilite: 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\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);\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\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/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\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);\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 const 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\n\r\n/** @internal */\r\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud: boolean, isHilite: 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\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);\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\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"]}
|