@itwin/core-frontend 4.10.0-dev.2 → 4.10.0-dev.22
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 +33 -1
- package/lib/cjs/AccuSnap.d.ts.map +1 -1
- package/lib/cjs/AccuSnap.js +9 -5
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +5 -1
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/ElementLocateManager.d.ts +7 -1
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +34 -10
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts +4 -0
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +3 -0
- package/lib/cjs/HitDetail.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 +2 -1
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/NoRenderApp.d.ts +1 -0
- package/lib/cjs/NoRenderApp.d.ts.map +1 -1
- package/lib/cjs/NoRenderApp.js +1 -0
- package/lib/cjs/NoRenderApp.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts +0 -1
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +0 -1
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +25 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +20 -12
- package/lib/cjs/Viewport.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.map +1 -1
- package/lib/cjs/common/imdl/ImdlModel.d.ts +3 -8
- package/lib/cjs/common/imdl/ImdlModel.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
- package/lib/cjs/common/internal/Symbols.d.ts +7 -0
- package/lib/cjs/common/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/common/internal/Symbols.js +8 -1
- package/lib/cjs/common/internal/Symbols.js.map +1 -1
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.d.ts +15 -0
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -0
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js +95 -0
- package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -0
- package/lib/cjs/common/internal/render/LineCode.d.ts +9 -0
- package/lib/cjs/common/internal/render/LineCode.d.ts.map +1 -0
- package/lib/cjs/common/internal/render/LineCode.js +31 -0
- package/lib/cjs/common/internal/render/LineCode.js.map +1 -0
- package/lib/cjs/common/internal/render/OvrFlags.d.ts +27 -0
- package/lib/cjs/common/internal/render/OvrFlags.d.ts.map +1 -0
- package/lib/cjs/common/internal/render/OvrFlags.js +10 -0
- package/lib/cjs/common/internal/render/OvrFlags.js.map +1 -0
- package/lib/cjs/common/internal/render/VertexTable.d.ts.map +1 -1
- package/lib/cjs/common/internal/render/VertexTable.js +3 -5
- package/lib/cjs/common/internal/render/VertexTable.js.map +1 -1
- package/lib/cjs/common/render/InstancedGraphicParams.d.ts +25 -1
- package/lib/cjs/common/render/InstancedGraphicParams.d.ts.map +1 -1
- package/lib/cjs/common/render/InstancedGraphicParams.js +59 -0
- package/lib/cjs/common/render/InstancedGraphicParams.js.map +1 -1
- package/lib/cjs/common/render/RenderInstancesParams.d.ts +76 -0
- package/lib/cjs/common/render/RenderInstancesParams.d.ts.map +1 -0
- package/lib/cjs/common/render/RenderInstancesParams.js +33 -0
- package/lib/cjs/common/render/RenderInstancesParams.js.map +1 -0
- package/lib/cjs/common.d.ts +1 -0
- package/lib/cjs/common.d.ts.map +1 -1
- package/lib/cjs/common.js +1 -0
- package/lib/cjs/common.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +1 -0
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +1 -0
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/internal/render/PrimitiveBuilder.d.ts +4 -1
- package/lib/cjs/internal/render/PrimitiveBuilder.d.ts.map +1 -1
- package/lib/cjs/internal/render/PrimitiveBuilder.js +82 -35
- package/lib/cjs/internal/render/PrimitiveBuilder.js.map +1 -1
- package/lib/cjs/internal/render/RenderGeometry.d.ts +20 -0
- package/lib/cjs/internal/render/RenderGeometry.d.ts.map +1 -0
- package/lib/cjs/internal/render/RenderGeometry.js +10 -0
- package/lib/cjs/internal/render/RenderGeometry.js.map +1 -0
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.d.ts +24 -0
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.d.ts.map +1 -0
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +69 -0
- package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -0
- package/lib/cjs/render/GraphicBranch.d.ts +10 -1
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/GraphicBuilder.d.ts +17 -3
- package/lib/cjs/render/GraphicBuilder.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBuilder.js +7 -1
- package/lib/cjs/render/GraphicBuilder.js.map +1 -1
- package/lib/cjs/render/GraphicTemplate.d.ts +76 -0
- package/lib/cjs/render/GraphicTemplate.d.ts.map +1 -0
- package/lib/cjs/render/GraphicTemplate.js +41 -0
- package/lib/cjs/render/GraphicTemplate.js.map +1 -0
- package/lib/cjs/render/MockRender.d.ts +12 -2
- package/lib/cjs/render/MockRender.d.ts.map +1 -1
- package/lib/cjs/render/MockRender.js +19 -5
- package/lib/cjs/render/MockRender.js.map +1 -1
- package/lib/cjs/render/Pixel.d.ts +6 -0
- package/lib/cjs/render/Pixel.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.js +2 -0
- 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 +2 -0
- package/lib/cjs/render/RenderPlan.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +59 -11
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +44 -6
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/RenderTarget.d.ts +1 -1
- package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
- package/lib/cjs/render/RenderTarget.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 +7 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +4 -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/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/EdgeSettings.d.ts +2 -1
- package/lib/cjs/render/webgl/EdgeSettings.d.ts.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 +2 -0
- package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/cjs/render/webgl/FeatureOverrides.js +83 -69
- package/lib/cjs/render/webgl/FeatureOverrides.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 +9 -0
- package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +27 -0
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.d.ts +40 -10
- package/lib/cjs/render/webgl/InstancedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +99 -31
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/LineCode.d.ts.map +1 -1
- package/lib/cjs/render/webgl/LineCode.js +2 -14
- package/lib/cjs/render/webgl/LineCode.js.map +1 -1
- package/lib/cjs/render/webgl/Mesh.d.ts +9 -4
- package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Mesh.js +18 -16
- package/lib/cjs/render/webgl/Mesh.js.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.d.ts +5 -1
- package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PointCloud.js +7 -2
- package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
- package/lib/cjs/render/webgl/PointString.d.ts +5 -1
- package/lib/cjs/render/webgl/PointString.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PointString.js +8 -3
- package/lib/cjs/render/webgl/PointString.js.map +1 -1
- package/lib/cjs/render/webgl/Polyline.d.ts +5 -1
- package/lib/cjs/render/webgl/Polyline.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Polyline.js +7 -2
- package/lib/cjs/render/webgl/Polyline.js.map +1 -1
- package/lib/cjs/render/webgl/Primitive.d.ts +1 -3
- package/lib/cjs/render/webgl/Primitive.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Primitive.js +1 -6
- package/lib/cjs/render/webgl/Primitive.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts +5 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +7 -1
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts +2 -19
- package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js +2 -0
- 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 +12 -3
- package/lib/cjs/render/webgl/SceneCompositor.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/System.d.ts +11 -5
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +81 -13
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.d.ts +6 -2
- package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Target.js +24 -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/Texture.d.ts +2 -1
- package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Texture.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
- package/lib/cjs/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/cjs/render/webgl/glsl/Blur.js +1 -1
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +1 -1
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +1 -1
- package/lib/cjs/render/webgl/glsl/Clipping.js +1 -1
- package/lib/cjs/render/webgl/glsl/Combine3Textures.js +1 -1
- package/lib/cjs/render/webgl/glsl/CombineTextures.js +1 -1
- package/lib/cjs/render/webgl/glsl/Composite.js +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 +138 -0
- package/lib/cjs/render/webgl/glsl/Contours.js.map +1 -0
- package/lib/cjs/render/webgl/glsl/CopyColor.js +1 -1
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.js +5 -5
- package/lib/cjs/render/webgl/glsl/EDL.js +4 -4
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.js +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 +28 -15
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Fragment.js +9 -9
- package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js +4 -4
- package/lib/cjs/render/webgl/glsl/PointCloud.js +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +3 -3
- package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -1
- package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -1
- package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +5 -3
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Translucency.js +1 -1
- package/lib/cjs/render/webgl/glsl/Wiremesh.js +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +27 -7
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +84 -68
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/ImdlGraphicsCreator.d.ts +4 -1
- package/lib/cjs/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlGraphicsCreator.js +32 -22
- package/lib/cjs/tile/ImdlGraphicsCreator.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/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/map/MapTile.js +1 -1
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/esm/AccuSnap.d.ts.map +1 -1
- package/lib/esm/AccuSnap.js +9 -5
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +5 -1
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/ElementLocateManager.d.ts +7 -1
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +34 -10
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/HitDetail.d.ts +4 -0
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +3 -0
- package/lib/esm/HitDetail.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 +2 -1
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/NoRenderApp.d.ts +1 -0
- package/lib/esm/NoRenderApp.d.ts.map +1 -1
- package/lib/esm/NoRenderApp.js +1 -0
- package/lib/esm/NoRenderApp.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts +0 -1
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +0 -1
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +25 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +20 -12
- 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/imdl/ImdlModel.d.ts +3 -8
- package/lib/esm/common/imdl/ImdlModel.d.ts.map +1 -1
- package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
- package/lib/esm/common/internal/Symbols.d.ts +7 -0
- package/lib/esm/common/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/common/internal/Symbols.js +7 -0
- package/lib/esm/common/internal/Symbols.js.map +1 -1
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.d.ts +15 -0
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -0
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js +91 -0
- package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -0
- package/lib/esm/common/internal/render/LineCode.d.ts +9 -0
- package/lib/esm/common/internal/render/LineCode.d.ts.map +1 -0
- package/lib/esm/common/internal/render/LineCode.js +27 -0
- package/lib/esm/common/internal/render/LineCode.js.map +1 -0
- package/lib/esm/common/internal/render/OvrFlags.d.ts +27 -0
- package/lib/esm/common/internal/render/OvrFlags.d.ts.map +1 -0
- package/lib/esm/common/internal/render/OvrFlags.js +9 -0
- package/lib/esm/common/internal/render/OvrFlags.js.map +1 -0
- 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.d.ts +25 -1
- package/lib/esm/common/render/InstancedGraphicParams.d.ts.map +1 -1
- package/lib/esm/common/render/InstancedGraphicParams.js +58 -1
- package/lib/esm/common/render/InstancedGraphicParams.js.map +1 -1
- package/lib/esm/common/render/RenderInstancesParams.d.ts +76 -0
- package/lib/esm/common/render/RenderInstancesParams.d.ts.map +1 -0
- package/lib/esm/common/render/RenderInstancesParams.js +30 -0
- package/lib/esm/common/render/RenderInstancesParams.js.map +1 -0
- package/lib/esm/common.d.ts +1 -0
- package/lib/esm/common.d.ts.map +1 -1
- package/lib/esm/common.js +1 -0
- package/lib/esm/common.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +1 -0
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +1 -0
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/internal/render/PrimitiveBuilder.d.ts +4 -1
- package/lib/esm/internal/render/PrimitiveBuilder.d.ts.map +1 -1
- package/lib/esm/internal/render/PrimitiveBuilder.js +82 -35
- package/lib/esm/internal/render/PrimitiveBuilder.js.map +1 -1
- package/lib/esm/internal/render/RenderGeometry.d.ts +20 -0
- package/lib/esm/internal/render/RenderGeometry.d.ts.map +1 -0
- package/lib/esm/internal/render/RenderGeometry.js +9 -0
- package/lib/esm/internal/render/RenderGeometry.js.map +1 -0
- package/lib/esm/internal/render/RenderInstancesParamsImpl.d.ts +24 -0
- package/lib/esm/internal/render/RenderInstancesParamsImpl.d.ts.map +1 -0
- package/lib/esm/internal/render/RenderInstancesParamsImpl.js +64 -0
- package/lib/esm/internal/render/RenderInstancesParamsImpl.js.map +1 -0
- package/lib/esm/render/GraphicBranch.d.ts +10 -1
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/GraphicBuilder.d.ts +17 -3
- package/lib/esm/render/GraphicBuilder.d.ts.map +1 -1
- package/lib/esm/render/GraphicBuilder.js +7 -1
- package/lib/esm/render/GraphicBuilder.js.map +1 -1
- package/lib/esm/render/GraphicTemplate.d.ts +76 -0
- package/lib/esm/render/GraphicTemplate.d.ts.map +1 -0
- package/lib/esm/render/GraphicTemplate.js +37 -0
- package/lib/esm/render/GraphicTemplate.js.map +1 -0
- package/lib/esm/render/MockRender.d.ts +12 -2
- package/lib/esm/render/MockRender.d.ts.map +1 -1
- package/lib/esm/render/MockRender.js +19 -5
- package/lib/esm/render/MockRender.js.map +1 -1
- package/lib/esm/render/Pixel.d.ts +6 -0
- package/lib/esm/render/Pixel.d.ts.map +1 -1
- package/lib/esm/render/Pixel.js +2 -0
- 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 +59 -11
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +46 -8
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/RenderTarget.d.ts +1 -1
- package/lib/esm/render/RenderTarget.d.ts.map +1 -1
- package/lib/esm/render/RenderTarget.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 +7 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +4 -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/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.d.ts +2 -1
- package/lib/esm/render/webgl/EdgeSettings.d.ts.map +1 -1
- 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 +2 -0
- package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
- package/lib/esm/render/webgl/FeatureOverrides.js +83 -69
- 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 +9 -0
- package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +27 -0
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.d.ts +40 -10
- package/lib/esm/render/webgl/InstancedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.js +97 -30
- package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/LineCode.d.ts.map +1 -1
- package/lib/esm/render/webgl/LineCode.js +2 -14
- package/lib/esm/render/webgl/LineCode.js.map +1 -1
- package/lib/esm/render/webgl/Mesh.d.ts +9 -4
- package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/Mesh.js +19 -17
- package/lib/esm/render/webgl/Mesh.js.map +1 -1
- package/lib/esm/render/webgl/PointCloud.d.ts +5 -1
- package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
- package/lib/esm/render/webgl/PointCloud.js +7 -2
- package/lib/esm/render/webgl/PointCloud.js.map +1 -1
- package/lib/esm/render/webgl/PointString.d.ts +5 -1
- package/lib/esm/render/webgl/PointString.d.ts.map +1 -1
- package/lib/esm/render/webgl/PointString.js +8 -3
- package/lib/esm/render/webgl/PointString.js.map +1 -1
- package/lib/esm/render/webgl/Polyline.d.ts +5 -1
- package/lib/esm/render/webgl/Polyline.d.ts.map +1 -1
- package/lib/esm/render/webgl/Polyline.js +7 -2
- package/lib/esm/render/webgl/Polyline.js.map +1 -1
- package/lib/esm/render/webgl/Primitive.d.ts +1 -3
- package/lib/esm/render/webgl/Primitive.d.ts.map +1 -1
- package/lib/esm/render/webgl/Primitive.js +2 -7
- package/lib/esm/render/webgl/Primitive.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts +5 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +7 -1
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts +2 -19
- 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 +12 -3
- 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 +11 -5
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +82 -14
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.d.ts +6 -2
- package/lib/esm/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/render/webgl/Target.js +24 -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/Texture.d.ts +2 -1
- package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
- package/lib/esm/render/webgl/Texture.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 +27 -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/tile/GltfReader.d.ts +27 -7
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +82 -67
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/ImdlGraphicsCreator.d.ts +4 -1
- package/lib/esm/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/esm/tile/ImdlGraphicsCreator.js +31 -22
- package/lib/esm/tile/ImdlGraphicsCreator.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/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/MapTile.js +1 -1
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureSymbology.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.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 { OvrFlags, Pass, RenderOrder, TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariablePrecision, VariableType, VertexShaderBuilder,\r\n VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { FeatureMode, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { addExtractNthBit, addEyeSpace, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, decodeUint24 } from \"./Decode\";\r\nimport { addWindowToTexCoords, assignFragColor, computeLinearDepth } from \"./Fragment\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addAlpha, addLineWeight, replaceLineCode, replaceLineWeight } from \"./Vertex\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport const enum FeatureSymbologyOptions {\r\n None = 0,\r\n Weight = 1 << 0,\r\n LineCode = 1 << 1,\r\n HasOverrides = 1 << 2,\r\n Color = 1 << 3,\r\n Alpha = 1 << 4,\r\n\r\n Surface = HasOverrides | Color | Alpha,\r\n Point = HasOverrides | Color | Weight | Alpha,\r\n Linear = HasOverrides | Color | Weight | LineCode | Alpha,\r\n}\r\n\r\n/** @internal */\r\nexport function addOvrFlagConstants(builder: ShaderBuilder): void {\r\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\r\n builder.addBitFlagConstant(\"kOvrBit_Visibility\", 0);\r\n builder.addBitFlagConstant(\"kOvrBit_Rgb\", 1);\r\n builder.addBitFlagConstant(\"kOvrBit_Alpha\", 2);\r\n builder.addBitFlagConstant(\"kOvrBit_IgnoreMaterial\", 3);\r\n builder.addBitFlagConstant(\"kOvrBit_Flashed\", 4);\r\n builder.addBitFlagConstant(\"kOvrBit_NonLocatable\", 5);\r\n builder.addBitFlagConstant(\"kOvrBit_LineCode\", 6);\r\n builder.addBitFlagConstant(\"kOvrBit_Weight\", 7);\r\n\r\n // NB: We treat the 16-bit flags as 2 bytes - so subtract 8 from each of these bit indices.\r\n builder.addBitFlagConstant(\"kOvrBit_Hilited\", 0);\r\n builder.addBitFlagConstant(\"kOvrBit_Emphasized\", 1);\r\n builder.addBitFlagConstant(\"kOvrBit_ViewIndependentTransparency\", 2);\r\n}\r\n\r\nconst computeLUTFeatureIndex = `g_featureAndMaterialIndex.xyz`;\r\nconst computeInstanceFeatureIndex = `g_isAreaPattern ? u_patternFeatureId : a_featureId`;\r\nfunction computeFeatureIndex(vertex: VertexShaderBuilder): string {\r\n if (vertex.usesInstancedGeometry) {\r\n vertex.addUniform(\"u_patternFeatureId\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_patternFeatureId\", (uniform, params) => {\r\n const id = params.geometry.asInstanced?.patternFeatureId;\r\n assert(undefined !== id);\r\n if (id)\r\n uniform.setUniform3fv(id);\r\n });\r\n });\r\n\r\n return `g_featureIndex = ${computeInstanceFeatureIndex};`;\r\n }\r\n\r\n return vertex.usesVertexTable ? `g_featureIndex = ${computeLUTFeatureIndex};` : \"\";\r\n}\r\nfunction getFeatureIndex(vertex: VertexShaderBuilder): string {\r\n return `\r\nfloat getFeatureIndex() {\r\n ${computeFeatureIndex(vertex)}\r\n return decodeUInt24(g_featureIndex);\r\n}\r\n`;\r\n}\r\n\r\nconst nthFeatureBitSet = `\r\nbool nthFeatureBitSet(float flags, uint n) {\r\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n);\r\n}\r\n`;\r\n\r\nconst extractNthFeatureBit = `\r\nfloat extractNthFeatureBit(float flags, uint n) {\r\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n) ? 1.0 : 0.0;\r\n}\r\n`;\r\n\r\nconst computeFeatureTextureCoords = `\r\nvec2 computeFeatureTextureCoords() { return compute_feature_coords(getFeatureIndex()); }\r\n`;\r\n\r\nconst getFirstFeatureRgba = `\r\nvec4 getFirstFeatureRgba() {\r\n feature_texCoord = computeFeatureTextureCoords();\r\n return TEXTURE(u_featureLUT, feature_texCoord);\r\n}\r\n`;\r\n\r\nconst getSecondFeatureRgba = `\r\nvec4 getSecondFeatureRgba() {\r\n vec2 coord = feature_texCoord;\r\n coord.x += g_feature_stepX;\r\n return TEXTURE(u_featureLUT, coord);\r\n}\r\n`;\r\n\r\nconst computeLineWeight = `\r\nfloat computeLineWeight() {\r\n return linear_feature_overrides.x > 0.5 ? linear_feature_overrides.y : g_lineWeight;\r\n}\r\n`;\r\n\r\nconst computeLineCode = `\r\nfloat computeLineCode() {\r\n return linear_feature_overrides.z > 0.5 ? linear_feature_overrides.w : g_lineCode;\r\n}\r\n`;\r\n\r\nfunction addFeatureIndex(vert: VertexShaderBuilder): void {\r\n vert.addGlobal(\"g_featureIndex\", VariableType.Vec3);\r\n\r\n vert.addFunction(decodeUint24);\r\n vert.addFunction(getFeatureIndex(vert));\r\n}\r\n\r\n// Discards vertex if feature is invisible; or rendering opaque during translucent pass or vice-versa\r\n// (The latter occurs when some translucent feature is overridden to be opaque, or vice-versa)\r\nconst checkVertexDiscard = `\r\n if (feature_invisible)\r\n return true;\r\n\r\n bool hasAlpha = 1.0 == u_hasAlpha;\r\n if (feature_alpha > 0.0)\r\n hasAlpha = feature_alpha <= s_maxAlpha;\r\n\r\n int discardFlags = u_transparencyDiscardFlags;\r\n bool discardViewIndependentDuringOpaque = discardFlags >= 4;\r\n if (discardViewIndependentDuringOpaque)\r\n discardFlags = discardFlags - 4;\r\n\r\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\r\n bool discardTranslucentDuringOpaquePass = 1 == discardFlags || 3 == discardFlags || (feature_viewIndependentTransparency && discardViewIndependentDuringOpaque);\r\n if (isOpaquePass && !discardTranslucentDuringOpaquePass)\r\n return false;\r\n\r\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\r\n bool discardOpaqueDuringTranslucentPass = 2 == discardFlags || 3 == discardFlags;\r\n if (isTranslucentPass && !discardOpaqueDuringTranslucentPass)\r\n return false;\r\n\r\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\r\n`;\r\n\r\nfunction addTransparencyDiscardFlags(vert: VertexShaderBuilder) {\r\n // Even when transparency view flag is off, we need to allow features to override transparency, because it\r\n // is used when applying transparency threshold. However, we need to ensure we don't DISCARD transparent stuff during\r\n // opaque pass if transparency is off (see checkVertexDiscard). Especially important for transparency threshold and readPixels().\r\n // Also, if we override raster text to be opaque we must still draw it in the translucent pass.\r\n // Finally, if the transparency override is view-independent (i.e., ignores view flags and render mode) we want to discard it during opaque pass\r\n // unless we're reading pixels.\r\n // So we have a bit field:\r\n // 1: discard translucent during opaque.\r\n // 2: discard opaque during translucent.\r\n // 4: discard view-independent translucent during opaque.\r\n vert.addUniform(\"u_transparencyDiscardFlags\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_transparencyDiscardFlags\", (uniform, params) => {\r\n let flags = 0;\r\n\r\n // Textured surfaces may render in both passes. If so, it's up to fragment shader to handle discard.\r\n const pass = params.geometry.getPass(params.target);\r\n if (!Pass.rendersOpaqueAndTranslucent(pass)) {\r\n // During readPixels() we force transparency off. Make sure to ignore a Branch that turns it back on.\r\n if (!params.target.isReadPixelsInProgress)\r\n flags = params.target.currentViewFlags.transparency ? 1 : 4;\r\n\r\n if (!params.geometry.alwaysRenderTranslucent)\r\n flags += 2;\r\n }\r\n\r\n uniform.setUniform1i(flags);\r\n });\r\n });\r\n}\r\n\r\nfunction addCommon(builder: ProgramBuilder, mode: FeatureMode, opts: FeatureSymbologyOptions, wantGlobalOvrFlags = true): boolean {\r\n if (FeatureMode.None === mode)\r\n return false;\r\n\r\n const vert = builder.vert;\r\n addFeatureIndex(vert);\r\n\r\n const haveOverrides = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.HasOverrides);\r\n if (!haveOverrides) {\r\n // For pick output we must compute g_featureIndex...\r\n if (FeatureMode.Pick === mode)\r\n vert.set(VertexShaderComponent.ComputeFeatureOverrides, computeFeatureIndex(vert));\r\n\r\n return true;\r\n }\r\n\r\n const wantWeight = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Weight);\r\n const wantLineCode = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.LineCode);\r\n const wantColor = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Color);\r\n const wantAlpha = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Alpha);\r\n assert(wantColor || !wantAlpha);\r\n\r\n addExtractNthBit(vert);\r\n addOvrFlagConstants(vert);\r\n\r\n vert.addGlobal(\"linear_feature_overrides\", VariableType.Vec4, \"vec4(0.0)\");\r\n vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\r\n\r\n if (wantWeight || wantLineCode) {\r\n if (wantLineCode)\r\n replaceLineCode(vert, computeLineCode);\r\n\r\n if (wantWeight) {\r\n replaceLineWeight(vert, computeLineWeight);\r\n }\r\n }\r\n\r\n if (wantGlobalOvrFlags) {\r\n const bitmapType = VariableType.Uint;\r\n vert.addFunction(nthFeatureBitSet);\r\n vert.addFunction(extractNthFeatureBit);\r\n\r\n vert.addUniform(\"u_globalOvrFlags\", bitmapType, (prog) => {\r\n prog.addGraphicUniform(\"u_globalOvrFlags\", (uniform, params) => {\r\n let flags = 0.0;\r\n if (params.geometry.isEdge) {\r\n const settings = params.target.currentEdgeSettings;\r\n flags = settings.computeOvrFlags(params.renderPass, params.target.currentViewFlags);\r\n }\r\n\r\n if (!params.geometry.allowColorOverride)\r\n flags |= OvrFlags.Rgba;\r\n\r\n uniform.setUniformBitflags(flags);\r\n });\r\n });\r\n }\r\n\r\n addLookupTable(vert, \"feature\", \"2.0\");\r\n vert.addGlobal(\"feature_texCoord\", VariableType.Vec2);\r\n vert.addFunction(computeFeatureTextureCoords);\r\n vert.addFunction(getFirstFeatureRgba);\r\n\r\n vert.addUniform(\"u_featureLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_featureLUT\", (uniform, params) => {\r\n params.target.uniforms.batch.bindLUT(uniform);\r\n });\r\n });\r\n vert.addUniform(\"u_featureParams\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_featureParams\", (uniform, params) => {\r\n params.target.uniforms.batch.bindLUTParams(uniform);\r\n });\r\n });\r\n\r\n if (wantColor) {\r\n vert.addFunction(getSecondFeatureRgba);\r\n if (wantAlpha) {\r\n addMaxAlpha(vert);\r\n addRenderPass(vert);\r\n addAlpha(vert);\r\n addTransparencyDiscardFlags(vert);\r\n\r\n vert.set(VertexShaderComponent.CheckForDiscard, checkVertexDiscard);\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function addMaxAlpha(builder: ShaderBuilder): void {\r\n const minTransparency = 15.0; // NB: See DisplayParams.getMinTransparency() - this must match!\r\n const maxAlpha = (255 - minTransparency) / 255;\r\n builder.addConstant(\"s_maxAlpha\", VariableType.Float, maxAlpha.toString());\r\n}\r\n\r\n/** @internal */\r\nfunction addEmphasisFlags(builder: ShaderBuilder): void {\r\n // Must be kept in sync with EmphasisFlags enum.\r\n builder.addBitFlagConstant(\"kEmphBit_Hilite\", 0);\r\n builder.addBitFlagConstant(\"kEmphBit_Emphasize\", 1);\r\n builder.addBitFlagConstant(\"kEmphBit_Flash\", 2);\r\n builder.addBitFlagConstant(\"kEmphBit_NonLocatable\", 3);\r\n builder.addConstant(\"kEmphFlag_Hilite\", VariableType.Float, \"1.0\");\r\n builder.addConstant(\"kEmphFlag_Emphasize\", VariableType.Float, \"2.0\");\r\n builder.addConstant(\"kEmphFlag_Flash\", VariableType.Float, \"4.0\");\r\n builder.addConstant(\"kEmphFlag_NonLocatable\", VariableType.Float, \"8.0\");\r\n}\r\n\r\nfunction addHiliteSettings(frag: FragmentShaderBuilder, wantFlashMode: boolean): void {\r\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindFeatureSettings(uniform);\r\n });\r\n });\r\n\r\n if (wantFlashMode) {\r\n frag.addUniform(\"u_flash_mode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_flash_mode\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.getFlashMode(params));\r\n });\r\n });\r\n }\r\n}\r\n\r\n// If feature is not hilited, discard it.\r\nconst checkVertexHiliteDiscard = \"return 0.0 == v_feature_hilited;\";\r\n\r\n// The result is a mask in which each pixel's r=1 if hilited and g=1 if emphasized (and not hilited).\r\nconst computeHiliteColor = `\r\n float flags = floor(v_feature_hilited + 0.5);\r\n float hilited = extractNthBit(flags, kEmphBit_Hilite);\r\n float emphasized = extractNthBit(flags, kEmphBit_Emphasize);\r\n return vec4(hilited, emphasized, 0.0, 0.0);\r\n`;\r\n\r\nconst computeSurfaceHiliteColor = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasTexture) && TEXTURE(s_texture, v_texCoord).a <= 0.15)\r\n return vec4(0.0);\r\n${computeHiliteColor}`;\r\n\r\nconst computeHiliteOverrides = `\r\n vec4 value = getFirstFeatureRgba();\r\n float emphFlags = value.g * 256.0;\r\n v_feature_hilited = kEmphFlag_Hilite * extractNthBit(emphFlags, kOvrBit_Hilited) + kEmphFlag_Emphasize * extractNthBit(emphFlags, kOvrBit_Emphasized);\r\n`;\r\n\r\nconst computeHiliteOverridesWithWeight = `${computeHiliteOverrides}\r\n float flags = value.r * 256.0;\r\n linear_feature_overrides = vec4(nthFeatureBitSet(flags, kOvrBit_Weight),\r\n value.a * 256.0,\r\n nthFeatureBitSet(flags, kOvrBit_LineCode),\r\n value.b * 256.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function addSurfaceHiliter(builder: ProgramBuilder, wantWeight: boolean = false): void {\r\n addHiliter(builder, wantWeight);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeSurfaceHiliteColor);\r\n}\r\n\r\n/** @internal */\r\nexport function addHiliter(builder: ProgramBuilder, wantWeight: boolean = false): void {\r\n let opts = FeatureSymbologyOptions.HasOverrides;\r\n if (wantWeight)\r\n opts |= FeatureSymbologyOptions.Weight; // hiliter never needs line code or color...\r\n\r\n if (!addCommon(builder, FeatureMode.Overrides, opts, wantWeight))\r\n return;\r\n\r\n builder.addVarying(\"v_feature_hilited\", VariableType.Float);\r\n\r\n addEmphasisFlags(builder.vert);\r\n builder.vert.set(VertexShaderComponent.ComputeFeatureOverrides, wantWeight ? computeHiliteOverridesWithWeight : computeHiliteOverrides);\r\n builder.vert.set(VertexShaderComponent.CheckForDiscard, checkVertexHiliteDiscard);\r\n\r\n addEmphasisFlags(builder.frag);\r\n addExtractNthBit(builder.frag);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteColor);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n}\r\n\r\nfunction addSamplers(frag: FragmentShaderBuilder, testFeatureId: boolean) {\r\n if (testFeatureId) {\r\n frag.addUniform(\"u_pickFeatureId\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_pickFeatureId\", (uniform, params) => {\r\n params.target.compositor.featureIds.bindSampler(uniform, TextureUnit.PickFeatureId);\r\n });\r\n }, VariablePrecision.High);\r\n }\r\n\r\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\r\n params.target.compositor.depthAndOrder.bindSampler(uniform, TextureUnit.PickDepthAndOrder);\r\n });\r\n }, VariablePrecision.High);\r\n}\r\n\r\n/** @internal */\r\nexport const readDepthAndOrder = `\r\nvec2 readDepthAndOrder(vec2 tc) {\r\n vec4 pdo = TEXTURE(u_pickDepthAndOrder, tc);\r\n float order = floor(pdo.x * 16.0 + 0.5);\r\n return vec2(order, decodeDepthRgb(pdo.yzw));\r\n}\r\n`;\r\n\r\nconst checkForEarlySurfaceDiscard = `\r\n float factor = float(u_renderPass <= kRenderPass_Translucent); // never discard during specific passes\r\n float term = 0.0;\r\n\r\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\n vec2 depthAndOrder = readDepthAndOrder(tc);\r\n\r\n float surfaceDepth = computeLinearDepth(v_eyeSpace.z);\r\n term += float(depthAndOrder.x > u_renderOrder && abs(depthAndOrder.y - surfaceDepth) < 4.0e-5);\r\n return factor * term > 0.0;\r\n`;\r\n\r\nconst checkForEarlySurfaceDiscardWithFeatureID = `\r\n // No normals => unlt => reality model => no edges.\r\n if (u_renderPass > kRenderPass_Translucent || u_renderPass == kRenderPass_Layers || !u_surfaceFlags[kSurfaceBitIndex_HasNormals])\r\n return false;\r\n\r\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\n vec2 depthAndOrder = readDepthAndOrder(tc);\r\n\r\n if (depthAndOrder.x <= u_renderOrder)\r\n return false;\r\n\r\n // Calculate depthTolerance for letting edges show through their own surfaces\r\n float perspectiveFrustum = step(kFrustumType_Perspective, u_frustum.z);\r\n vec4 eyeDirAndWidthFactor = mix(vec4(0.0, 0.0, 1.0, u_pixelWidthFactor), vec4(normalize(-v_eyeSpace.xyz), -v_eyeSpace.z * u_pixelWidthFactor), perspectiveFrustum);\r\n vec3 eyeDir = eyeDirAndWidthFactor.xyz;\r\n float dtWidthFactor = eyeDirAndWidthFactor.w;\r\n\r\n // Compute depth tolerance based on angle of triangle to screen\r\n float isSilhouette = float(depthAndOrder.x == kRenderOrder_Silhouette);\r\n float dSq = dot(eyeDir, v_n);\r\n dSq *= 0.5 + 0.4 * (1.0 - isSilhouette);\r\n dSq = dSq * dSq;\r\n dSq = max(dSq, 0.0001);\r\n dSq = min(dSq, 0.999);\r\n\r\n float depthTolerance = dtWidthFactor * v_lineWeight * sqrt((1.0 - dSq) / dSq);\r\n depthTolerance *= 1.0 + .333 * isSilhouette;\r\n\r\n // Make sure stuff behind camera doesn't get pushed in front of it\r\n depthTolerance = max(depthTolerance, 0.0);\r\n\r\n // Convert depthTolerance from eye space to linear depth\r\n depthTolerance /= (u_frustum.y - u_frustum.x);\r\n\r\n float surfaceDepth = computeLinearDepth(v_eyeSpace.z);\r\n float depthDelta = abs(depthAndOrder.y - surfaceDepth);\r\n if (depthDelta > depthTolerance)\r\n return false;\r\n\r\n // Does pick buffer contain same feature?\r\n vec4 featId = TEXTURE(u_pickFeatureId, tc);\r\n\r\n // Converting to ints to test since varying floats can be interpolated incorrectly\r\n ivec4 featId_i = ivec4(featId * 255.0 + 0.5);\r\n ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);\r\n if (featId_i == feature_id_i)\r\n return true;\r\n\r\n // In 2d, display priority controls draw order of different elements.\r\n if (!u_checkInterElementDiscard)\r\n return false;\r\n\r\n // Use a tighter tolerance for two different elements since we're only fighting roundoff error.\r\n return depthDelta <= 4.0e-5;\r\n`;\r\n\r\n// This only adds the constants that are actually used in shader code.\r\nexport function addRenderOrderConstants(builder: ShaderBuilder) {\r\n builder.addConstant(\"kRenderOrder_BlankingRegion\", VariableType.Float, RenderOrder.BlankingRegion.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_Linear\", VariableType.Float, RenderOrder.Linear.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_Edge\", VariableType.Float, RenderOrder.Edge.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarEdge\", VariableType.Float, RenderOrder.PlanarEdge.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_Silhouette\", VariableType.Float, RenderOrder.Silhouette.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarSilhouette\", VariableType.Float, RenderOrder.PlanarSilhouette.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_UnlitSurface\", VariableType.Float, RenderOrder.UnlitSurface.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_LitSurface\", VariableType.Float, RenderOrder.LitSurface.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarUnlitSurface\", VariableType.Float, RenderOrder.PlanarUnlitSurface.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarLitSurface\", VariableType.Float, RenderOrder.PlanarLitSurface.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarBit\", VariableType.Float, RenderOrder.PlanarBit.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_Background\", VariableType.Float, RenderOrder.Background.toFixed(1));\r\n}\r\n\r\n/** @internal */\r\nexport function addRenderOrder(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_renderOrder\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_renderOrder\", (uniform, params) => {\r\n const order = params.target.drawingBackgroundForReadPixels ? RenderOrder.Background : params.geometry.renderOrder;\r\n uniform.setUniform1f(order);\r\n });\r\n });\r\n}\r\n\r\nexport function addPixelWidthFactor(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_pixelWidthFactor\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_pixelWidthFactor\", (uniform, params) => {\r\n params.target.uniforms.bindPixelWidthFactor(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction addBatchId(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_batch_id\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_batch_id\", (uniform, params) => {\r\n params.target.uniforms.batch.bindBatchId(uniform);\r\n });\r\n }, VariablePrecision.High);\r\n}\r\n\r\nconst computeIdVert = `v_feature_id = addUInt32s(u_batch_id, vec4(g_featureIndex, 0.0)) / 255.0;`;\r\nconst computeIdFrag = `\r\n vec4 featureIndex = vec4(floor(v_feature_index + 0.5), 0.0);\r\n feature_id = addUInt32s(u_batch_id, featureIndex) / 255.0;\r\n`;\r\n\r\n/** @internal */\r\nexport function addFeatureId(builder: ProgramBuilder, computeInFrag: boolean) {\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n frag.addGlobal(\"feature_id\", VariableType.Vec4);\r\n if (!computeInFrag) {\r\n vert.addFunction(addUInt32s);\r\n addBatchId(vert);\r\n builder.addInlineComputedVarying(\"v_feature_id\", VariableType.Vec4, computeIdVert);\r\n\r\n frag.addInitializer(\"feature_id = v_feature_id;\");\r\n } else {\r\n frag.addFunction(addUInt32s);\r\n builder.addInlineComputedVarying(\"v_feature_index\", VariableType.Vec3, \"v_feature_index = g_featureIndex;\");\r\n\r\n addBatchId(frag);\r\n frag.addInitializer(computeIdFrag);\r\n }\r\n}\r\n\r\n// Discard vertex if transparency is less than the display style's transparency threshold, IFF the specific bit is set. The bit is set if:\r\n// - Solid Fill or Hidden Line mode; or\r\n// - Shaded mode and generating shadow map (sufficiently transparent surfaces receive but do not cast shadows).\r\nconst isBelowTransparencyThreshold = `\r\n return v_color.a < u_transparencyThreshold && u_surfaceFlags[kSurfaceBitIndex_TransparencyThreshold];\r\n`;\r\n\r\n/** @internal */\r\nexport function addSurfaceDiscard(builder: ProgramBuilder, flags: TechniqueFlags) {\r\n const feat = flags.featureMode;\r\n const isEdgeTestNeeded = flags.isEdgeTestNeeded;\r\n const isClassified = flags.isClassified;\r\n const computeIdInFrag = !flags.isTranslucent && 0 !== flags.isClassified && FeatureMode.Overrides === feat;\r\n\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n vert.set(VertexShaderComponent.CheckForLateDiscard, isBelowTransparencyThreshold);\r\n vert.addUniform(\"u_transparencyThreshold\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_transparencyThreshold\", (uniform, params) => {\r\n uniform.setUniform1f(params.target.currentTransparencyThreshold);\r\n });\r\n });\r\n\r\n if (isEdgeTestNeeded) {\r\n addWindowToTexCoords(frag);\r\n\r\n if (!flags.isHilite)\r\n addEyeSpace(builder);\r\n\r\n if (FeatureMode.None === feat) {\r\n addSamplers(frag, false);\r\n frag.addFunction(computeLinearDepth);\r\n frag.addFunction(decodeDepthRgb);\r\n frag.addFunction(readDepthAndOrder);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscard);\r\n } else {\r\n frag.addUniform(\"u_checkInterElementDiscard\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_checkInterElementDiscard\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.uniforms.branch.top.is3d ? 1 : 0);\r\n });\r\n });\r\n\r\n addFeatureIndex(vert);\r\n addLineWeight(vert);\r\n\r\n addSamplers(frag, true);\r\n addRenderOrderConstants(frag);\r\n addPixelWidthFactor(frag);\r\n frag.addFunction(computeLinearDepth);\r\n frag.addFunction(decodeDepthRgb);\r\n frag.addFunction(readDepthAndOrder);\r\n\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscardWithFeatureID);\r\n\r\n builder.addInlineComputedVarying(\"v_lineWeight\", VariableType.Float, \"v_lineWeight = computeLineWeight();\");\r\n addFeatureId(builder, computeIdInFrag);\r\n }\r\n\r\n addRenderOrder(frag);\r\n addRenderPass(frag);\r\n } else if (isClassified && FeatureMode.None !== feat) {\r\n addFeatureIndex(vert);\r\n addFeatureId(builder, computeIdInFrag);\r\n\r\n if (!flags.isTranslucent)\r\n addRenderOrder(frag);\r\n }\r\n}\r\n\r\n// bool feature_invisible = false;\r\n// vec3 feature_rgb; // if not overridden, .r < 0; else rgb color override\r\n// float feature_alpha // alpha if overridden, else < 0\r\n// varying float v_feature_emphasis // bitmask - see kEmph_* constants\r\n// vec4 linear_feature_overrides; // x: weight overridden y: weight z: line code overridden w: line code\r\nconst computeFeatureOverrides = `\r\n feature_rgb = vec3(-1.0);\r\n feature_alpha = -1.0;\r\n vec4 value = getFirstFeatureRgba();\r\n\r\n float emphFlags = value.y * 256.0;\r\n v_feature_emphasis = kEmphFlag_Hilite * extractNthBit(emphFlags, kOvrBit_Hilited) + kEmphFlag_Emphasize * extractNthBit(emphFlags, kOvrBit_Emphasized);\r\n\r\n float flags = value.x * 256.0;\r\n if (0.0 == flags)\r\n return; // nothing overridden for this feature\r\n\r\n bool nonLocatable = (u_shaderFlags[kShaderBit_IgnoreNonLocatable] ? nthFeatureBitSet(flags, kOvrBit_NonLocatable) : false);\r\n v_feature_emphasis += kEmphFlag_NonLocatable * float(nthFeatureBitSet(flags, kOvrBit_NonLocatable));\r\n bool invisible = nthFeatureBitSet(flags, kOvrBit_Visibility);\r\n feature_invisible = invisible || nonLocatable;\r\n if (feature_invisible)\r\n return;\r\n\r\n bool rgbOverridden = nthFeatureBitSet(flags, kOvrBit_Rgb);\r\n bool alphaOverridden = nthFeatureBitSet(flags, kOvrBit_Alpha);\r\n if (alphaOverridden || rgbOverridden) {\r\n vec4 rgba = getSecondFeatureRgba();\r\n if (rgbOverridden)\r\n feature_rgb = rgba.rgb;\r\n\r\n if (alphaOverridden) {\r\n feature_alpha = rgba.a;\r\n feature_viewIndependentTransparency = nthFeatureBitSet(emphFlags, kOvrBit_ViewIndependentTransparency);\r\n }\r\n }\r\n\r\n linear_feature_overrides = vec4(nthFeatureBitSet(flags, kOvrBit_Weight),\r\n value.w * 256.0,\r\n nthFeatureBitSet(flags, kOvrBit_LineCode),\r\n value.z * 256.0);\r\n\r\n feature_ignore_material = nthFeatureBitSet(flags, kOvrBit_IgnoreMaterial);\r\n use_material = use_material && !feature_ignore_material;\r\n\r\n v_feature_emphasis += kEmphFlag_Flash * extractNthFeatureBit(flags, kOvrBit_Flashed);\r\n`;\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst applyFeatureColor = `\r\n vec3 rgb = mix(baseColor.rgb, feature_rgb.rgb, step(0.0, feature_rgb.r));\r\n float alpha = mix(baseColor.a, feature_alpha, step(0.0, feature_alpha));\r\n return vec4(rgb, alpha);\r\n`;\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature, else mix based on u_overrrideColorMix.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nexport const mixFeatureColor = `\r\n vec3 rgb = mix(baseColor.rgb, mix(baseColor.rgb, feature_rgb.rgb, u_overrideColorMix), step(0.0, feature_rgb.r));\r\n float alpha = mix(baseColor.a, feature_alpha, step(0.0, feature_alpha));\r\n return vec4(rgb, alpha);\r\n `;\r\n\r\nconst applyFlash = `\r\n float flashHilite = floor(v_feature_emphasis + 0.5);\r\n return doApplyFlash(flashHilite, baseColor);\r\n`;\r\n\r\nconst doApplyFlash = `\r\nvec4 doApplyFlash(float flags, vec4 baseColor) {\r\n bool isFlashed = nthBitSet(flags, kEmphBit_Flash);\r\n bool isHilited = nthBitSet(flags, kEmphBit_Hilite);\r\n bool isEmphasized = !isHilited && nthBitSet(flags, kEmphBit_Emphasize);\r\n vec3 hiliteRgb = isEmphasized ? u_hilite_settings[1] : u_hilite_settings[0];\r\n\r\n isHilited = isEmphasized || isHilited;\r\n float hiliteRatio = isHilited ? (isEmphasized ? u_hilite_settings[2][1] : u_hilite_settings[2][0]) : 0.0;\r\n baseColor.rgb = mix(baseColor.rgb, hiliteRgb, hiliteRatio);\r\n\r\n const float maxBrighten = 0.2;\r\n float brighten = isFlashed ? u_flash_intensity * maxBrighten : 0.0;\r\n vec3 brightRgb = baseColor.rgb + brighten;\r\n\r\n const float maxTween = 0.75;\r\n float hiliteFraction = isFlashed ? u_flash_intensity * maxTween : 0.0;\r\n vec3 tweenRgb = baseColor.rgb * (1.0 - hiliteFraction);\r\n tweenRgb += u_hilite_settings[0] * hiliteFraction;\r\n\r\n return vec4(mix(tweenRgb, brightRgb, u_flash_mode), baseColor.a);\r\n}\r\n`;\r\n\r\nconst doClassifierFlash = `\r\nvec4 applyClassifierFlash(vec4 baseColor) {\r\n const float maxBrighten = 0.2;\r\n float brighten = u_flash_intensity * maxBrighten;\r\n vec3 brightRgb = baseColor.rgb + brighten;\r\n return vec4(brightRgb, baseColor.a);\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addClassifierFlash(frag: FragmentShaderBuilder): void {\r\n addFlashIntensity(frag);\r\n addHiliteSettings(frag, false);\r\n frag.addFunction(doClassifierFlash);\r\n}\r\n\r\nfunction addFlashIntensity(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_flash_intensity\", VariableType.Float, (prog) => {\r\n prog.addProgramUniform(\"u_flash_intensity\", (uniform, params) => {\r\n uniform.setUniform1f(params.target.flashIntensity);\r\n });\r\n });\r\n}\r\n\r\nfunction addApplyFlash(frag: FragmentShaderBuilder) {\r\n addHiliteSettings(frag, true);\r\n addEmphasisFlags(frag);\r\n\r\n addExtractNthBit(frag);\r\n frag.addFunction(doApplyFlash);\r\n frag.set(FragmentShaderComponent.ApplyFlash, applyFlash);\r\n addFlashIntensity(frag);\r\n}\r\n\r\n/** @internal */\r\nexport function addFeatureSymbology(builder: ProgramBuilder, feat: FeatureMode, opts: FeatureSymbologyOptions): void {\r\n if (!addCommon(builder, feat, opts) || FeatureSymbologyOptions.None === opts)\r\n return;\r\n\r\n assert((FeatureSymbologyOptions.HasOverrides | FeatureSymbologyOptions.Color) === (opts & (FeatureSymbologyOptions.HasOverrides | FeatureSymbologyOptions.Color)));\r\n\r\n builder.addGlobal(\"feature_rgb\", VariableType.Vec3);\r\n builder.addGlobal(\"feature_alpha\", VariableType.Float);\r\n builder.addVarying(\"v_feature_emphasis\", VariableType.Float);\r\n\r\n const vert = builder.vert;\r\n vert.addGlobal(\"feature_invisible\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"feature_viewIndependentTransparency\", VariableType.Boolean, \"false\");\r\n\r\n addEmphasisFlags(vert);\r\n vert.addGlobal(\"use_material\", VariableType.Boolean, \"true\");\r\n vert.set(VertexShaderComponent.ComputeFeatureOverrides, computeFeatureOverrides);\r\n vert.set(VertexShaderComponent.ApplyFeatureColor, applyFeatureColor);\r\n\r\n addApplyFlash(builder.frag);\r\n}\r\n\r\n/** If we're running the hilite shader for a uniform feature, it follows that the feature must be hilited.\r\n * So the hilite shader simply needs to output '1' for every fragment.\r\n * @internal\r\n */\r\nexport function addUniformHiliter(builder: ProgramBuilder): void {\r\n builder.frag.addUniform(\"v_feature_hilited\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"v_feature_hilited\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformSymbologyFlags(uniform);\r\n });\r\n });\r\n\r\n addEmphasisFlags(builder.frag);\r\n addExtractNthBit(builder.frag);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteColor);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n}\r\n\r\n/** For a uniform feature table, the feature ID output to pick buffers is equal to the batch ID.\r\n * The following symbology overrides are supported:\r\n * - Visibility - implcitly, because if the feature is invisible its geometry will never be drawn.\r\n * - Flash\r\n * - Hilite\r\n * - Color and Transparency- only for point clouds currently which set addFeatureColor to true.\r\n * This shader could be simplified, but want to share code with the non-uniform versions...hence uniforms/globals with \"v_\" prefix typically used for varyings on no prefix...\r\n * @internal\r\n */\r\nexport function addUniformFeatureSymbology(builder: ProgramBuilder, addFeatureColor: boolean): void {\r\n builder.vert.addGlobal(\"g_featureIndex\", VariableType.Vec3, \"vec3(0.0)\", true);\r\n\r\n builder.frag.addUniform(\"v_feature_emphasis\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"v_feature_emphasis\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformSymbologyFlags(uniform);\r\n });\r\n });\r\n\r\n if (addFeatureColor) {\r\n builder.vert.addUniform(\"feature_rgb\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"feature_rgb\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformColorOverride(uniform);\r\n });\r\n });\r\n\r\n builder.vert.addUniform(\"feature_alpha\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"feature_alpha\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformTransparencyOverride(uniform);\r\n });\r\n });\r\n\r\n builder.vert.set(VertexShaderComponent.ApplyFeatureColor, applyFeatureColor);\r\n addAlpha(builder.vert);\r\n addMaxAlpha(builder.vert);\r\n addRenderPass(builder.vert);\r\n addTransparencyDiscardFlags(builder.vert);\r\n builder.vert.set(VertexShaderComponent.CheckForDiscard, checkVertexDiscard);\r\n } else {\r\n builder.vert.set(VertexShaderComponent.CheckForDiscard, \"return feature_invisible;\");\r\n }\r\n\r\n // Non-Locatable... Discard if picking\r\n builder.vert.addUniform(\"feature_invisible\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"feature_invisible\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformNonLocatable(uniform, params.target.drawNonLocatable);\r\n });\r\n });\r\n\r\n builder.vert.addGlobal(\"feature_viewIndependentTransparency\", VariableType.Boolean, \"false\");\r\n\r\n addApplyFlash(builder.frag);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"FeatureSymbology.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.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 { Pass, RenderOrder, TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariablePrecision, VariableType, VertexShaderBuilder,\r\n VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { FeatureMode, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { addExtractNthBit, addEyeSpace, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, decodeUint24 } from \"./Decode\";\r\nimport { addWindowToTexCoords, assignFragColor, computeLinearDepth } from \"./Fragment\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addAlpha, addLineWeight, replaceLineCode, replaceLineWeight } from \"./Vertex\";\r\nimport { OvrFlags } from \"../../../common/internal/render/OvrFlags\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport const enum FeatureSymbologyOptions {\r\n None = 0,\r\n Weight = 1 << 0,\r\n LineCode = 1 << 1,\r\n HasOverrides = 1 << 2,\r\n Color = 1 << 3,\r\n Alpha = 1 << 4,\r\n\r\n Surface = HasOverrides | Color | Alpha,\r\n Point = HasOverrides | Color | Weight | Alpha,\r\n Linear = HasOverrides | Color | Weight | LineCode | Alpha,\r\n}\r\n\r\n/** @internal */\r\nexport function addOvrFlagConstants(builder: ShaderBuilder): void {\r\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\r\n builder.addBitFlagConstant(\"kOvrBit_LineRgb\", 0);\r\n builder.addBitFlagConstant(\"kOvrBit_Rgb\", 1);\r\n builder.addBitFlagConstant(\"kOvrBit_Alpha\", 2);\r\n builder.addBitFlagConstant(\"kOvrBit_LineAlpha\", 3);\r\n builder.addBitFlagConstant(\"kOvrBit_Flashed\", 4);\r\n builder.addBitFlagConstant(\"kOvrBit_NonLocatable\", 5);\r\n builder.addBitFlagConstant(\"kOvrBit_LineCode\", 6);\r\n builder.addBitFlagConstant(\"kOvrBit_Weight\", 7);\r\n\r\n // NB: We treat the 16-bit flags as 2 bytes - so subtract 8 from each of these bit indices.\r\n builder.addBitFlagConstant(\"kOvrBit_Hilited\", 0);\r\n builder.addBitFlagConstant(\"kOvrBit_Emphasized\", 1);\r\n builder.addBitFlagConstant(\"kOvrBit_ViewIndependentTransparency\", 2);\r\n builder.addBitFlagConstant(\"kOvrBit_InvisibleDuringPick\", 3);\r\n builder.addBitFlagConstant(\"kOvrBit_Visibility\", 4);\r\n builder.addBitFlagConstant(\"kOvrBit_IgnoreMaterial\", 5);\r\n}\r\n\r\nconst computeLUTFeatureIndex = `g_featureAndMaterialIndex.xyz`;\r\nconst computeInstanceFeatureIndex = `g_isAreaPattern ? u_patternFeatureId : a_featureId`;\r\nfunction computeFeatureIndex(vertex: VertexShaderBuilder): string {\r\n if (vertex.usesInstancedGeometry) {\r\n vertex.addUniform(\"u_patternFeatureId\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_patternFeatureId\", (uniform, params) => {\r\n const id = params.geometry.asInstanced?.patternFeatureId;\r\n assert(undefined !== id);\r\n if (id)\r\n uniform.setUniform3fv(id);\r\n });\r\n });\r\n\r\n return `g_featureIndex = ${computeInstanceFeatureIndex};`;\r\n }\r\n\r\n return vertex.usesVertexTable ? `g_featureIndex = ${computeLUTFeatureIndex};` : \"\";\r\n}\r\nfunction getFeatureIndex(vertex: VertexShaderBuilder): string {\r\n return `\r\nfloat getFeatureIndex() {\r\n ${computeFeatureIndex(vertex)}\r\n return decodeUInt24(g_featureIndex);\r\n}\r\n`;\r\n}\r\n\r\nconst nthFeatureBitSet = `\r\nbool nthFeatureBitSet(float flags, uint n) {\r\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n);\r\n}\r\n`;\r\n\r\nconst extractNthFeatureBit = `\r\nfloat extractNthFeatureBit(float flags, uint n) {\r\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n) ? 1.0 : 0.0;\r\n}\r\n`;\r\n\r\nconst computeFeatureTextureCoords = `\r\nvec2 computeFeatureTextureCoords() { return compute_feature_coords(getFeatureIndex()); }\r\n`;\r\n\r\nconst getFirstFeatureRgba = `\r\nvec4 getFirstFeatureRgba() {\r\n feature_texCoord = computeFeatureTextureCoords();\r\n return TEXTURE(u_featureLUT, feature_texCoord);\r\n}\r\n`;\r\n\r\nconst getSecondFeatureRgba = `\r\nvec4 getSecondFeatureRgba(bool isLinear) {\r\n vec2 coord = feature_texCoord;\r\n coord.x += g_feature_stepX * (isLinear ? 2.0 : 1.0);\r\n return TEXTURE(u_featureLUT, coord);\r\n}\r\n`;\r\n\r\nconst computeLineWeight = `\r\nfloat computeLineWeight() {\r\n return linear_feature_overrides.x > 0.5 ? linear_feature_overrides.y : g_lineWeight;\r\n}\r\n`;\r\n\r\nconst computeLineCode = `\r\nfloat computeLineCode() {\r\n return linear_feature_overrides.z > 0.5 ? linear_feature_overrides.w : g_lineCode;\r\n}\r\n`;\r\n\r\nexport function addFeatureIndex(vert: VertexShaderBuilder): void {\r\n vert.addGlobal(\"g_featureIndex\", VariableType.Vec3);\r\n\r\n vert.addFunction(decodeUint24);\r\n vert.addFunction(getFeatureIndex(vert));\r\n}\r\n\r\n// Discards vertex if feature is invisible; or rendering opaque during translucent pass or vice-versa\r\n// (The latter occurs when some translucent feature is overridden to be opaque, or vice-versa)\r\nconst checkVertexDiscard = `\r\n if (feature_invisible)\r\n return true;\r\n\r\n bool hasAlpha = 1.0 == u_hasAlpha;\r\n if (feature_alpha > 0.0)\r\n hasAlpha = feature_alpha <= s_maxAlpha;\r\n\r\n int discardFlags = u_transparencyDiscardFlags;\r\n bool discardViewIndependentDuringOpaque = discardFlags >= 4;\r\n if (discardViewIndependentDuringOpaque)\r\n discardFlags = discardFlags - 4;\r\n\r\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\r\n bool discardTranslucentDuringOpaquePass = 1 == discardFlags || 3 == discardFlags || (feature_viewIndependentTransparency && discardViewIndependentDuringOpaque);\r\n if (isOpaquePass && !discardTranslucentDuringOpaquePass)\r\n return false;\r\n\r\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\r\n bool discardOpaqueDuringTranslucentPass = 2 == discardFlags || 3 == discardFlags;\r\n if (isTranslucentPass && !discardOpaqueDuringTranslucentPass)\r\n return false;\r\n\r\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\r\n`;\r\n\r\nfunction addTransparencyDiscardFlags(vert: VertexShaderBuilder) {\r\n // Even when transparency view flag is off, we need to allow features to override transparency, because it\r\n // is used when applying transparency threshold. However, we need to ensure we don't DISCARD transparent stuff during\r\n // opaque pass if transparency is off (see checkVertexDiscard). Especially important for transparency threshold and readPixels().\r\n // Also, if we override raster text to be opaque we must still draw it in the translucent pass.\r\n // Finally, if the transparency override is view-independent (i.e., ignores view flags and render mode) we want to discard it during opaque pass\r\n // unless we're reading pixels.\r\n // So we have a bit field:\r\n // 1: discard translucent during opaque.\r\n // 2: discard opaque during translucent.\r\n // 4: discard view-independent translucent during opaque.\r\n vert.addUniform(\"u_transparencyDiscardFlags\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_transparencyDiscardFlags\", (uniform, params) => {\r\n let flags = 0;\r\n\r\n // Textured surfaces may render in both passes. If so, it's up to fragment shader to handle discard.\r\n const pass = params.geometry.getPass(params.target);\r\n if (!Pass.rendersOpaqueAndTranslucent(pass)) {\r\n // During readPixels() we force transparency off. Make sure to ignore a Branch that turns it back on.\r\n if (!params.target.isReadPixelsInProgress)\r\n flags = params.target.currentViewFlags.transparency ? 1 : 4;\r\n\r\n if (!params.geometry.alwaysRenderTranslucent)\r\n flags += 2;\r\n }\r\n\r\n uniform.setUniform1i(flags);\r\n });\r\n });\r\n}\r\n\r\nfunction addCommon(builder: ProgramBuilder, mode: FeatureMode, opts: FeatureSymbologyOptions, wantGlobalOvrFlags = true): boolean {\r\n if (FeatureMode.None === mode)\r\n return false;\r\n\r\n const vert = builder.vert;\r\n addFeatureIndex(vert);\r\n\r\n const haveOverrides = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.HasOverrides);\r\n if (!haveOverrides) {\r\n // For pick output we must compute g_featureIndex...\r\n if (FeatureMode.Pick === mode)\r\n vert.set(VertexShaderComponent.ComputeFeatureOverrides, computeFeatureIndex(vert));\r\n\r\n return true;\r\n }\r\n\r\n const wantWeight = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Weight);\r\n const wantLineCode = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.LineCode);\r\n const wantColor = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Color);\r\n const wantAlpha = FeatureSymbologyOptions.None !== (opts & FeatureSymbologyOptions.Alpha);\r\n assert(wantColor || !wantAlpha);\r\n\r\n addExtractNthBit(vert);\r\n addOvrFlagConstants(vert);\r\n\r\n vert.addGlobal(\"linear_feature_overrides\", VariableType.Vec4, \"vec4(0.0)\");\r\n vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\r\n\r\n if (wantWeight || wantLineCode) {\r\n if (wantLineCode)\r\n replaceLineCode(vert, computeLineCode);\r\n\r\n if (wantWeight) {\r\n replaceLineWeight(vert, computeLineWeight);\r\n }\r\n }\r\n\r\n if (wantGlobalOvrFlags) {\r\n const bitmapType = VariableType.Uint;\r\n vert.addFunction(nthFeatureBitSet);\r\n vert.addFunction(extractNthFeatureBit);\r\n\r\n vert.addUniform(\"u_globalOvrFlags\", bitmapType, (prog) => {\r\n prog.addGraphicUniform(\"u_globalOvrFlags\", (uniform, params) => {\r\n let flags = 0.0;\r\n if (params.geometry.isEdge) {\r\n const settings = params.target.currentEdgeSettings;\r\n flags = settings.computeOvrFlags(params.renderPass, params.target.currentViewFlags);\r\n }\r\n\r\n if (!params.geometry.allowColorOverride)\r\n flags |= OvrFlags.Rgba;\r\n\r\n uniform.setUniformBitflags(flags);\r\n });\r\n });\r\n }\r\n\r\n addLookupTable(vert, \"feature\", \"3.0\");\r\n vert.addGlobal(\"feature_texCoord\", VariableType.Vec2);\r\n vert.addFunction(computeFeatureTextureCoords);\r\n vert.addFunction(getFirstFeatureRgba);\r\n\r\n vert.addUniform(\"u_featureLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_featureLUT\", (uniform, params) => {\r\n params.target.uniforms.batch.bindLUT(uniform);\r\n });\r\n });\r\n vert.addUniform(\"u_featureParams\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_featureParams\", (uniform, params) => {\r\n params.target.uniforms.batch.bindLUTParams(uniform);\r\n });\r\n });\r\n\r\n if (wantColor) {\r\n vert.addFunction(getSecondFeatureRgba);\r\n if (wantAlpha) {\r\n addMaxAlpha(vert);\r\n addRenderPass(vert);\r\n addAlpha(vert);\r\n addTransparencyDiscardFlags(vert);\r\n\r\n vert.set(VertexShaderComponent.CheckForDiscard, checkVertexDiscard);\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function addMaxAlpha(builder: ShaderBuilder): void {\r\n const minTransparency = 15.0; // NB: See DisplayParams.getMinTransparency() - this must match!\r\n const maxAlpha = (255 - minTransparency) / 255;\r\n builder.addConstant(\"s_maxAlpha\", VariableType.Float, maxAlpha.toString());\r\n}\r\n\r\n/** @internal */\r\nfunction addEmphasisFlags(builder: ShaderBuilder): void {\r\n // Must be kept in sync with EmphasisFlags enum.\r\n builder.addBitFlagConstant(\"kEmphBit_Hilite\", 0);\r\n builder.addBitFlagConstant(\"kEmphBit_Emphasize\", 1);\r\n builder.addBitFlagConstant(\"kEmphBit_Flash\", 2);\r\n builder.addBitFlagConstant(\"kEmphBit_NonLocatable\", 3);\r\n builder.addConstant(\"kEmphFlag_Hilite\", VariableType.Float, \"1.0\");\r\n builder.addConstant(\"kEmphFlag_Emphasize\", VariableType.Float, \"2.0\");\r\n builder.addConstant(\"kEmphFlag_Flash\", VariableType.Float, \"4.0\");\r\n builder.addConstant(\"kEmphFlag_NonLocatable\", VariableType.Float, \"8.0\");\r\n}\r\n\r\nfunction addHiliteSettings(frag: FragmentShaderBuilder, wantFlashMode: boolean): void {\r\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindFeatureSettings(uniform);\r\n });\r\n });\r\n\r\n if (wantFlashMode) {\r\n frag.addUniform(\"u_flash_mode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_flash_mode\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.getFlashMode(params));\r\n });\r\n });\r\n }\r\n}\r\n\r\n// If feature is not hilited, discard it.\r\nconst checkVertexHiliteDiscard = \"return 0.0 == v_feature_hilited;\";\r\n\r\n// The result is a mask in which each pixel's r=1 if hilited and g=1 if emphasized (and not hilited).\r\nconst computeHiliteColor = `\r\n float flags = floor(v_feature_hilited + 0.5);\r\n float hilited = extractNthBit(flags, kEmphBit_Hilite);\r\n float emphasized = extractNthBit(flags, kEmphBit_Emphasize);\r\n return vec4(hilited, emphasized, 0.0, 0.0);\r\n`;\r\n\r\nconst computeSurfaceHiliteColor = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasTexture) && TEXTURE(s_texture, v_texCoord).a <= 0.15)\r\n return vec4(0.0);\r\n${computeHiliteColor}`;\r\n\r\nconst computeHiliteOverrides = `\r\n vec4 value = getFirstFeatureRgba();\r\n float emphFlags = value.g * 256.0;\r\n v_feature_hilited = kEmphFlag_Hilite * extractNthBit(emphFlags, kOvrBit_Hilited) + kEmphFlag_Emphasize * extractNthBit(emphFlags, kOvrBit_Emphasized);\r\n`;\r\n\r\nconst computeHiliteOverridesWithWeight = `${computeHiliteOverrides}\r\n float flags = value.r * 256.0;\r\n linear_feature_overrides = vec4(nthFeatureBitSet(flags, kOvrBit_Weight),\r\n value.a * 256.0,\r\n nthFeatureBitSet(flags, kOvrBit_LineCode),\r\n value.b * 256.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function addSurfaceHiliter(builder: ProgramBuilder, wantWeight: boolean = false): void {\r\n addHiliter(builder, wantWeight);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeSurfaceHiliteColor);\r\n}\r\n\r\n/** @internal */\r\nexport function addHiliter(builder: ProgramBuilder, wantWeight: boolean = false): void {\r\n let opts = FeatureSymbologyOptions.HasOverrides;\r\n if (wantWeight)\r\n opts |= FeatureSymbologyOptions.Weight; // hiliter never needs line code or color...\r\n\r\n if (!addCommon(builder, FeatureMode.Overrides, opts, wantWeight))\r\n return;\r\n\r\n builder.addVarying(\"v_feature_hilited\", VariableType.Float);\r\n\r\n addEmphasisFlags(builder.vert);\r\n builder.vert.set(VertexShaderComponent.ComputeFeatureOverrides, wantWeight ? computeHiliteOverridesWithWeight : computeHiliteOverrides);\r\n builder.vert.set(VertexShaderComponent.CheckForDiscard, checkVertexHiliteDiscard);\r\n\r\n addEmphasisFlags(builder.frag);\r\n addExtractNthBit(builder.frag);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteColor);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n}\r\n\r\nfunction addSamplers(frag: FragmentShaderBuilder, testFeatureId: boolean) {\r\n if (testFeatureId) {\r\n frag.addUniform(\"u_pickFeatureId\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_pickFeatureId\", (uniform, params) => {\r\n params.target.compositor.featureIds.bindSampler(uniform, TextureUnit.PickFeatureId);\r\n });\r\n }, VariablePrecision.High);\r\n }\r\n\r\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\r\n params.target.compositor.depthAndOrder.bindSampler(uniform, TextureUnit.PickDepthAndOrder);\r\n });\r\n }, VariablePrecision.High);\r\n}\r\n\r\n/** @internal */\r\nexport const readDepthAndOrder = `\r\nvec2 readDepthAndOrder(vec2 tc) {\r\n vec4 pdo = TEXTURE(u_pickDepthAndOrder, tc);\r\n float order = floor(pdo.x * 16.0 + 0.5);\r\n return vec2(order, decodeDepthRgb(pdo.yzw));\r\n}\r\n`;\r\n\r\nconst checkForEarlySurfaceDiscard = `\r\n float factor = float(u_renderPass <= kRenderPass_Translucent); // never discard during specific passes\r\n float term = 0.0;\r\n\r\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\n vec2 depthAndOrder = readDepthAndOrder(tc);\r\n\r\n float surfaceDepth = computeLinearDepth(v_eyeSpace.z);\r\n term += float(depthAndOrder.x > u_renderOrder && abs(depthAndOrder.y - surfaceDepth) < 4.0e-5);\r\n return factor * term > 0.0;\r\n`;\r\n\r\nconst checkForEarlySurfaceDiscardWithFeatureID = `\r\n // No normals => unlt => reality model => no edges.\r\n if (u_renderPass > kRenderPass_Translucent || u_renderPass == kRenderPass_Layers || !u_surfaceFlags[kSurfaceBitIndex_HasNormals])\r\n return false;\r\n\r\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\n vec2 depthAndOrder = readDepthAndOrder(tc);\r\n\r\n if (depthAndOrder.x <= u_renderOrder)\r\n return false;\r\n\r\n // Calculate depthTolerance for letting edges show through their own surfaces\r\n float perspectiveFrustum = step(kFrustumType_Perspective, u_frustum.z);\r\n vec4 eyeDirAndWidthFactor = mix(vec4(0.0, 0.0, 1.0, u_pixelWidthFactor), vec4(normalize(-v_eyeSpace.xyz), -v_eyeSpace.z * u_pixelWidthFactor), perspectiveFrustum);\r\n vec3 eyeDir = eyeDirAndWidthFactor.xyz;\r\n float dtWidthFactor = eyeDirAndWidthFactor.w;\r\n\r\n // Compute depth tolerance based on angle of triangle to screen\r\n float isSilhouette = float(depthAndOrder.x == kRenderOrder_Silhouette);\r\n float dSq = dot(eyeDir, v_n);\r\n dSq *= 0.5 + 0.4 * (1.0 - isSilhouette);\r\n dSq = dSq * dSq;\r\n dSq = max(dSq, 0.0001);\r\n dSq = min(dSq, 0.999);\r\n\r\n float depthTolerance = dtWidthFactor * v_lineWeight * sqrt((1.0 - dSq) / dSq);\r\n depthTolerance *= 1.0 + .333 * isSilhouette;\r\n\r\n // Make sure stuff behind camera doesn't get pushed in front of it\r\n depthTolerance = max(depthTolerance, 0.0);\r\n\r\n // Convert depthTolerance from eye space to linear depth\r\n depthTolerance /= (u_frustum.y - u_frustum.x);\r\n\r\n float surfaceDepth = computeLinearDepth(v_eyeSpace.z);\r\n float depthDelta = abs(depthAndOrder.y - surfaceDepth);\r\n if (depthDelta > depthTolerance)\r\n return false;\r\n\r\n // Does pick buffer contain same feature?\r\n vec4 featId = TEXTURE(u_pickFeatureId, tc);\r\n\r\n // Converting to ints to test since varying floats can be interpolated incorrectly\r\n ivec4 featId_i = ivec4(featId * 255.0 + 0.5);\r\n ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);\r\n if (featId_i == feature_id_i)\r\n return true;\r\n\r\n // In 2d, display priority controls draw order of different elements.\r\n if (!u_checkInterElementDiscard)\r\n return false;\r\n\r\n // Use a tighter tolerance for two different elements since we're only fighting roundoff error.\r\n return depthDelta <= 4.0e-5;\r\n`;\r\n\r\n// This only adds the constants that are actually used in shader code.\r\nexport function addRenderOrderConstants(builder: ShaderBuilder) {\r\n builder.addConstant(\"kRenderOrder_BlankingRegion\", VariableType.Float, RenderOrder.BlankingRegion.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_Linear\", VariableType.Float, RenderOrder.Linear.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarLinear\", VariableType.Float, RenderOrder.PlanarLinear.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_Edge\", VariableType.Float, RenderOrder.Edge.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarEdge\", VariableType.Float, RenderOrder.PlanarEdge.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_Silhouette\", VariableType.Float, RenderOrder.Silhouette.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarSilhouette\", VariableType.Float, RenderOrder.PlanarSilhouette.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_UnlitSurface\", VariableType.Float, RenderOrder.UnlitSurface.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_LitSurface\", VariableType.Float, RenderOrder.LitSurface.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarUnlitSurface\", VariableType.Float, RenderOrder.PlanarUnlitSurface.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarLitSurface\", VariableType.Float, RenderOrder.PlanarLitSurface.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_PlanarBit\", VariableType.Float, RenderOrder.PlanarBit.toFixed(1));\r\n builder.addConstant(\"kRenderOrder_Background\", VariableType.Float, RenderOrder.Background.toFixed(1));\r\n}\r\n\r\n/** @internal */\r\nexport function addRenderOrder(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_renderOrder\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_renderOrder\", (uniform, params) => {\r\n const order = params.target.drawingBackgroundForReadPixels ? RenderOrder.Background : params.geometry.renderOrder;\r\n uniform.setUniform1f(order);\r\n });\r\n });\r\n}\r\n\r\nexport function addPixelWidthFactor(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_pixelWidthFactor\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_pixelWidthFactor\", (uniform, params) => {\r\n params.target.uniforms.bindPixelWidthFactor(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction addBatchId(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_batch_id\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_batch_id\", (uniform, params) => {\r\n params.target.uniforms.batch.bindBatchId(uniform);\r\n });\r\n }, VariablePrecision.High);\r\n}\r\n\r\nconst computeIdVert = `v_feature_id = addUInt32s(u_batch_id, vec4(g_featureIndex, 0.0)) / 255.0;`;\r\nconst computeIdFrag = `\r\n vec4 featureIndex = vec4(floor(v_feature_index + 0.5), 0.0);\r\n feature_id = addUInt32s(u_batch_id, featureIndex) / 255.0;\r\n`;\r\n\r\n/** @internal */\r\nexport function addFeatureId(builder: ProgramBuilder, computeInFrag: boolean) {\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n frag.addGlobal(\"feature_id\", VariableType.Vec4);\r\n if (!computeInFrag) {\r\n vert.addFunction(addUInt32s);\r\n addBatchId(vert);\r\n builder.addInlineComputedVarying(\"v_feature_id\", VariableType.Vec4, computeIdVert);\r\n\r\n frag.addInitializer(\"feature_id = v_feature_id;\");\r\n } else {\r\n frag.addFunction(addUInt32s);\r\n builder.addInlineComputedVarying(\"v_feature_index\", VariableType.Vec3, \"v_feature_index = g_featureIndex;\");\r\n\r\n addBatchId(frag);\r\n frag.addInitializer(computeIdFrag);\r\n }\r\n}\r\n\r\n// Discard vertex if transparency is less than the display style's transparency threshold, IFF the specific bit is set. The bit is set if:\r\n// - Solid Fill or Hidden Line mode; or\r\n// - Shaded mode and generating shadow map (sufficiently transparent surfaces receive but do not cast shadows).\r\nconst isBelowTransparencyThreshold = `\r\n return v_color.a < u_transparencyThreshold && u_surfaceFlags[kSurfaceBitIndex_TransparencyThreshold];\r\n`;\r\n\r\n/** @internal */\r\nexport function addSurfaceDiscard(builder: ProgramBuilder, flags: TechniqueFlags) {\r\n const feat = flags.featureMode;\r\n const isEdgeTestNeeded = flags.isEdgeTestNeeded;\r\n const isClassified = flags.isClassified;\r\n const computeIdInFrag = !flags.isTranslucent && 0 !== flags.isClassified && FeatureMode.Overrides === feat;\r\n\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n vert.set(VertexShaderComponent.CheckForLateDiscard, isBelowTransparencyThreshold);\r\n vert.addUniform(\"u_transparencyThreshold\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_transparencyThreshold\", (uniform, params) => {\r\n uniform.setUniform1f(params.target.currentTransparencyThreshold);\r\n });\r\n });\r\n\r\n if (isEdgeTestNeeded) {\r\n addWindowToTexCoords(frag);\r\n\r\n if (!flags.isHilite)\r\n addEyeSpace(builder);\r\n\r\n if (FeatureMode.None === feat) {\r\n addSamplers(frag, false);\r\n frag.addFunction(computeLinearDepth);\r\n frag.addFunction(decodeDepthRgb);\r\n frag.addFunction(readDepthAndOrder);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscard);\r\n } else {\r\n frag.addUniform(\"u_checkInterElementDiscard\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_checkInterElementDiscard\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.uniforms.branch.top.is3d ? 1 : 0);\r\n });\r\n });\r\n\r\n addFeatureIndex(vert);\r\n addLineWeight(vert);\r\n\r\n addSamplers(frag, true);\r\n addRenderOrderConstants(frag);\r\n addPixelWidthFactor(frag);\r\n frag.addFunction(computeLinearDepth);\r\n frag.addFunction(decodeDepthRgb);\r\n frag.addFunction(readDepthAndOrder);\r\n\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkForEarlySurfaceDiscardWithFeatureID);\r\n\r\n builder.addInlineComputedVarying(\"v_lineWeight\", VariableType.Float, \"v_lineWeight = computeLineWeight();\");\r\n addFeatureId(builder, computeIdInFrag);\r\n }\r\n\r\n addRenderOrder(frag);\r\n addRenderPass(frag);\r\n } else if (isClassified && FeatureMode.None !== feat) {\r\n addFeatureIndex(vert);\r\n addFeatureId(builder, computeIdInFrag);\r\n\r\n if (!flags.isTranslucent)\r\n addRenderOrder(frag);\r\n }\r\n}\r\n\r\n// bool feature_invisible = false;\r\n// vec3 feature_rgb; // if not overridden, .r < 0; else rgb color override\r\n// float feature_alpha // alpha if overridden, else < 0\r\n// varying float v_feature_emphasis // bitmask - see kEmph_* constants\r\n// vec4 linear_feature_overrides; // x: weight overridden y: weight z: line code overridden w: line code\r\nconst computeFeatureOverrides = `\r\n feature_rgb = vec3(-1.0);\r\n feature_alpha = -1.0;\r\n vec4 value = getFirstFeatureRgba();\r\n\r\n float emphFlags = value.y * 256.0;\r\n if (nthFeatureBitSet(emphFlags, kOvrBit_InvisibleDuringPick)) {\r\n feature_invisible = true;\r\n return;\r\n }\r\n \r\n v_feature_emphasis = kEmphFlag_Hilite * extractNthBit(emphFlags, kOvrBit_Hilited) + kEmphFlag_Emphasize * extractNthBit(emphFlags, kOvrBit_Emphasized);\r\n\r\n float flags = value.x * 256.0;\r\n if (0.0 == flags && 0.0 == emphFlags)\r\n return; // nothing overridden for this feature\r\n\r\n bool nonLocatable = (u_shaderFlags[kShaderBit_IgnoreNonLocatable] ? nthFeatureBitSet(flags, kOvrBit_NonLocatable) : false);\r\n v_feature_emphasis += kEmphFlag_NonLocatable * float(nthFeatureBitSet(flags, kOvrBit_NonLocatable));\r\n bool invisible = nthFeatureBitSet(emphFlags, kOvrBit_Visibility);\r\n feature_invisible = invisible || nonLocatable;\r\n if (feature_invisible)\r\n return;\r\n\r\n bool isLinear = u_renderOrder == kRenderOrder_Linear || u_renderOrder == kRenderOrder_PlanarLinear || u_renderOrder == kRenderOrder_PlanarEdge;\r\n bool rgbOverridden = isLinear ? nthFeatureBitSet(flags, kOvrBit_LineRgb) : nthFeatureBitSet(flags, kOvrBit_Rgb);\r\n bool alphaOverridden = isLinear ? nthFeatureBitSet(flags, kOvrBit_LineAlpha) : nthFeatureBitSet(flags, kOvrBit_Alpha);\r\n if (alphaOverridden || rgbOverridden) {\r\n vec4 rgba = getSecondFeatureRgba(isLinear);\r\n if (rgbOverridden)\r\n feature_rgb = rgba.rgb;\r\n\r\n if (alphaOverridden) {\r\n feature_alpha = rgba.a;\r\n feature_viewIndependentTransparency = nthFeatureBitSet(emphFlags, kOvrBit_ViewIndependentTransparency);\r\n }\r\n }\r\n\r\n linear_feature_overrides = vec4(nthFeatureBitSet(flags, kOvrBit_Weight),\r\n value.w * 256.0,\r\n nthFeatureBitSet(flags, kOvrBit_LineCode),\r\n value.z * 256.0);\r\n\r\n feature_ignore_material = nthFeatureBitSet(emphFlags, kOvrBit_IgnoreMaterial);\r\n use_material = use_material && !feature_ignore_material;\r\n\r\n v_feature_emphasis += kEmphFlag_Flash * extractNthFeatureBit(flags, kOvrBit_Flashed);\r\n`;\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst applyFeatureColor = `\r\n vec3 rgb = mix(baseColor.rgb, feature_rgb.rgb, step(0.0, feature_rgb.r));\r\n float alpha = mix(baseColor.a, feature_alpha, step(0.0, feature_alpha));\r\n return vec4(rgb, alpha);\r\n`;\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature, else mix based on u_overrrideColorMix.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nexport const mixFeatureColor = `\r\n vec3 rgb = mix(baseColor.rgb, mix(baseColor.rgb, feature_rgb.rgb, u_overrideColorMix), step(0.0, feature_rgb.r));\r\n float alpha = mix(baseColor.a, feature_alpha, step(0.0, feature_alpha));\r\n return vec4(rgb, alpha);\r\n `;\r\n\r\nconst applyFlash = `\r\n float flashHilite = floor(v_feature_emphasis + 0.5);\r\n return doApplyFlash(flashHilite, baseColor);\r\n`;\r\n\r\nconst doApplyFlash = `\r\nvec4 doApplyFlash(float flags, vec4 baseColor) {\r\n bool isFlashed = nthBitSet(flags, kEmphBit_Flash);\r\n bool isHilited = nthBitSet(flags, kEmphBit_Hilite);\r\n bool isEmphasized = !isHilited && nthBitSet(flags, kEmphBit_Emphasize);\r\n vec3 hiliteRgb = isEmphasized ? u_hilite_settings[1] : u_hilite_settings[0];\r\n\r\n isHilited = isEmphasized || isHilited;\r\n float hiliteRatio = isHilited ? (isEmphasized ? u_hilite_settings[2][1] : u_hilite_settings[2][0]) : 0.0;\r\n baseColor.rgb = mix(baseColor.rgb, hiliteRgb, hiliteRatio);\r\n\r\n const float maxBrighten = 0.2;\r\n float brighten = isFlashed ? u_flash_intensity * maxBrighten : 0.0;\r\n vec3 brightRgb = baseColor.rgb + brighten;\r\n\r\n const float maxTween = 0.75;\r\n float hiliteFraction = isFlashed ? u_flash_intensity * maxTween : 0.0;\r\n vec3 tweenRgb = baseColor.rgb * (1.0 - hiliteFraction);\r\n tweenRgb += u_hilite_settings[0] * hiliteFraction;\r\n\r\n return vec4(mix(tweenRgb, brightRgb, u_flash_mode), baseColor.a);\r\n}\r\n`;\r\n\r\nconst doClassifierFlash = `\r\nvec4 applyClassifierFlash(vec4 baseColor) {\r\n const float maxBrighten = 0.2;\r\n float brighten = u_flash_intensity * maxBrighten;\r\n vec3 brightRgb = baseColor.rgb + brighten;\r\n return vec4(brightRgb, baseColor.a);\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addClassifierFlash(frag: FragmentShaderBuilder): void {\r\n addFlashIntensity(frag);\r\n addHiliteSettings(frag, false);\r\n frag.addFunction(doClassifierFlash);\r\n}\r\n\r\nfunction addFlashIntensity(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_flash_intensity\", VariableType.Float, (prog) => {\r\n prog.addProgramUniform(\"u_flash_intensity\", (uniform, params) => {\r\n uniform.setUniform1f(params.target.flashIntensity);\r\n });\r\n });\r\n}\r\n\r\nfunction addApplyFlash(frag: FragmentShaderBuilder) {\r\n addHiliteSettings(frag, true);\r\n addEmphasisFlags(frag);\r\n\r\n addExtractNthBit(frag);\r\n frag.addFunction(doApplyFlash);\r\n frag.set(FragmentShaderComponent.ApplyFlash, applyFlash);\r\n addFlashIntensity(frag);\r\n}\r\n\r\n/** @internal */\r\nexport function addFeatureSymbology(builder: ProgramBuilder, feat: FeatureMode, opts: FeatureSymbologyOptions): void {\r\n if (!addCommon(builder, feat, opts) || FeatureSymbologyOptions.None === opts)\r\n return;\r\n\r\n assert((FeatureSymbologyOptions.HasOverrides | FeatureSymbologyOptions.Color) === (opts & (FeatureSymbologyOptions.HasOverrides | FeatureSymbologyOptions.Color)));\r\n\r\n builder.addGlobal(\"feature_rgb\", VariableType.Vec3);\r\n builder.addGlobal(\"feature_alpha\", VariableType.Float);\r\n builder.addVarying(\"v_feature_emphasis\", VariableType.Float);\r\n\r\n const vert = builder.vert;\r\n vert.addGlobal(\"feature_invisible\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"feature_viewIndependentTransparency\", VariableType.Boolean, \"false\");\r\n\r\n addEmphasisFlags(vert);\r\n vert.addGlobal(\"use_material\", VariableType.Boolean, \"true\");\r\n addRenderOrder(vert);\r\n addRenderOrderConstants(vert);\r\n vert.set(VertexShaderComponent.ComputeFeatureOverrides, computeFeatureOverrides);\r\n vert.set(VertexShaderComponent.ApplyFeatureColor, applyFeatureColor);\r\n\r\n addApplyFlash(builder.frag);\r\n}\r\n\r\n/** If we're running the hilite shader for a uniform feature, it follows that the feature must be hilited.\r\n * So the hilite shader simply needs to output '1' for every fragment.\r\n * @internal\r\n */\r\nexport function addUniformHiliter(builder: ProgramBuilder): void {\r\n builder.frag.addUniform(\"v_feature_hilited\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"v_feature_hilited\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformSymbologyFlags(uniform);\r\n });\r\n });\r\n\r\n addEmphasisFlags(builder.frag);\r\n addExtractNthBit(builder.frag);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteColor);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n}\r\n\r\n/** For a uniform feature table, the feature ID output to pick buffers is equal to the batch ID.\r\n * The following symbology overrides are supported:\r\n * - Visibility - implcitly, because if the feature is invisible its geometry will never be drawn.\r\n * - Flash\r\n * - Hilite\r\n * - Color and Transparency- only for point clouds currently which set addFeatureColor to true.\r\n * This shader could be simplified, but want to share code with the non-uniform versions...hence uniforms/globals with \"v_\" prefix typically used for varyings on no prefix...\r\n * @internal\r\n */\r\nexport function addUniformFeatureSymbology(builder: ProgramBuilder, addFeatureColor: boolean): void {\r\n builder.vert.addGlobal(\"g_featureIndex\", VariableType.Vec3, \"vec3(0.0)\", true);\r\n\r\n builder.frag.addUniform(\"v_feature_emphasis\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"v_feature_emphasis\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformSymbologyFlags(uniform);\r\n });\r\n });\r\n\r\n if (addFeatureColor) {\r\n builder.vert.addUniform(\"feature_rgb\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"feature_rgb\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformColorOverride(uniform);\r\n });\r\n });\r\n\r\n builder.vert.addUniform(\"feature_alpha\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"feature_alpha\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformTransparencyOverride(uniform);\r\n });\r\n });\r\n\r\n builder.vert.set(VertexShaderComponent.ApplyFeatureColor, applyFeatureColor);\r\n addAlpha(builder.vert);\r\n addMaxAlpha(builder.vert);\r\n addRenderPass(builder.vert);\r\n addTransparencyDiscardFlags(builder.vert);\r\n builder.vert.set(VertexShaderComponent.CheckForDiscard, checkVertexDiscard);\r\n } else {\r\n builder.vert.set(VertexShaderComponent.CheckForDiscard, \"return feature_invisible;\");\r\n }\r\n\r\n // Non-Locatable... Discard if picking\r\n builder.vert.addUniform(\"feature_invisible\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"feature_invisible\", (uniform, params) => {\r\n params.target.uniforms.batch.bindUniformNonLocatable(uniform, params.target.drawNonLocatable);\r\n });\r\n });\r\n\r\n builder.vert.addGlobal(\"feature_viewIndependentTransparency\", VariableType.Boolean, \"false\");\r\n\r\n addApplyFlash(builder.frag);\r\n}\r\n"]}
|
|
@@ -73,7 +73,7 @@ function addPickBufferOutputs(frag) {
|
|
|
73
73
|
frag.addFunction(Decode_1.encodeDepthRgb);
|
|
74
74
|
frag.addFunction(exports.computeLinearDepth);
|
|
75
75
|
const prelude = new ShaderBuilder_1.SourceBuilder();
|
|
76
|
-
const overrideOrder = frag.get(
|
|
76
|
+
const overrideOrder = frag.get(21 /* FragmentShaderComponent.OverrideRenderOrder */);
|
|
77
77
|
if (overrideOrder) {
|
|
78
78
|
frag.addFunction("float overrideRenderOrder(float currentOrder)", overrideOrder);
|
|
79
79
|
prelude.addline(" float renderOrder = overrideRenderOrder(u_renderOrder);");
|
|
@@ -82,45 +82,45 @@ function addPickBufferOutputs(frag) {
|
|
|
82
82
|
prelude.addline(" float renderOrder = u_renderOrder;");
|
|
83
83
|
}
|
|
84
84
|
prelude.add(computePickBufferOutputs);
|
|
85
|
-
const overrideColor = frag.get(
|
|
85
|
+
const overrideColor = frag.get(20 /* FragmentShaderComponent.OverrideColor */);
|
|
86
86
|
if (undefined !== overrideColor) {
|
|
87
87
|
frag.addFunction("vec4 overrideColor(vec4 currentColor)", overrideColor);
|
|
88
88
|
prelude.addline(" output0 = overrideColor(output0);");
|
|
89
89
|
}
|
|
90
|
-
const overrideFeatureId = frag.get(
|
|
90
|
+
const overrideFeatureId = frag.get(18 /* FragmentShaderComponent.OverrideFeatureId */);
|
|
91
91
|
if (undefined !== overrideFeatureId) {
|
|
92
92
|
frag.addFunction("vec4 overrideFeatureId(vec4 currentId)", overrideFeatureId);
|
|
93
93
|
prelude.addline(reassignFeatureId);
|
|
94
94
|
}
|
|
95
95
|
(0, RenderPass_1.addRenderPass)(frag);
|
|
96
96
|
frag.addDrawBuffersExtension(3);
|
|
97
|
-
frag.set(
|
|
97
|
+
frag.set(17 /* FragmentShaderComponent.AssignFragData */, prelude.source + assignPickBufferOutputsMRT);
|
|
98
98
|
}
|
|
99
99
|
exports.addPickBufferOutputs = addPickBufferOutputs;
|
|
100
100
|
/** @internal */
|
|
101
101
|
function addAltPickBufferOutputs(frag) {
|
|
102
102
|
const prelude = new ShaderBuilder_1.SourceBuilder();
|
|
103
103
|
prelude.add(computeAltPickBufferOutputs);
|
|
104
|
-
const overrideColor = frag.get(
|
|
104
|
+
const overrideColor = frag.get(20 /* FragmentShaderComponent.OverrideColor */);
|
|
105
105
|
if (undefined !== overrideColor) {
|
|
106
106
|
frag.addFunction("vec4 overrideColor(vec4 currentColor)", overrideColor);
|
|
107
107
|
prelude.addline(" output0 = overrideColor(output0);");
|
|
108
108
|
}
|
|
109
109
|
(0, RenderPass_1.addRenderPass)(frag);
|
|
110
110
|
frag.addDrawBuffersExtension(3);
|
|
111
|
-
frag.set(
|
|
111
|
+
frag.set(17 /* FragmentShaderComponent.AssignFragData */, prelude.source + assignPickBufferOutputsMRT);
|
|
112
112
|
}
|
|
113
113
|
exports.addAltPickBufferOutputs = addAltPickBufferOutputs;
|
|
114
114
|
/** @internal */
|
|
115
115
|
function addFragColorWithPreMultipliedAlpha(frag) {
|
|
116
116
|
(0, RenderPass_1.addRenderPass)(frag);
|
|
117
|
-
const overrideColor = frag.get(
|
|
117
|
+
const overrideColor = frag.get(20 /* FragmentShaderComponent.OverrideColor */);
|
|
118
118
|
if (undefined === overrideColor) {
|
|
119
|
-
frag.set(
|
|
119
|
+
frag.set(17 /* FragmentShaderComponent.AssignFragData */, assignFragColorWithPreMultipliedAlpha);
|
|
120
120
|
}
|
|
121
121
|
else {
|
|
122
122
|
frag.addFunction("vec4 overrideColor(vec4 currentColor)", overrideColor);
|
|
123
|
-
frag.set(
|
|
123
|
+
frag.set(17 /* FragmentShaderComponent.AssignFragData */, overrideAndAssignFragColorWithPreMultipliedAlpha);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
exports.addFragColorWithPreMultipliedAlpha = addFragColorWithPreMultipliedAlpha;
|
|
@@ -25,7 +25,7 @@ function addLogDepth(builder) {
|
|
|
25
25
|
uniform.setUniform2fv(params.target.uniforms.frustum.logZ);
|
|
26
26
|
});
|
|
27
27
|
});
|
|
28
|
-
frag.set(
|
|
28
|
+
frag.set(19 /* FragmentShaderComponent.FinalizeDepth */, finalizeDepth);
|
|
29
29
|
}
|
|
30
30
|
exports.addLogDepth = addLogDepth;
|
|
31
31
|
//# sourceMappingURL=LogarithmicDepthBuffer.js.map
|
|
@@ -275,7 +275,7 @@ function addColorPlanarClassifier(builder, translucent, isThematic) {
|
|
|
275
275
|
frag.addFunction(exports.volClassOpaqueColor);
|
|
276
276
|
}
|
|
277
277
|
(0, Common_1.addShaderFlags)(builder);
|
|
278
|
-
frag.set(
|
|
278
|
+
frag.set(13 /* FragmentShaderComponent.ApplyPlanarClassifier */, (isThematic === 0 /* IsThematic.No */) ? applyPlanarClassificationColor : applyPlanarClassificationColorForThematic);
|
|
279
279
|
}
|
|
280
280
|
exports.addColorPlanarClassifier = addColorPlanarClassifier;
|
|
281
281
|
/** @internal */
|
|
@@ -294,7 +294,7 @@ function addFeaturePlanarClassifier(builder) {
|
|
|
294
294
|
uniform.setUniform4fv(scratchBatchBaseComponents);
|
|
295
295
|
});
|
|
296
296
|
});
|
|
297
|
-
frag.set(
|
|
297
|
+
frag.set(18 /* FragmentShaderComponent.OverrideFeatureId */, overrideFeatureId);
|
|
298
298
|
frag.addFunction(Common_1.addUInt32s);
|
|
299
299
|
}
|
|
300
300
|
exports.addFeaturePlanarClassifier = addFeaturePlanarClassifier;
|
|
@@ -385,9 +385,9 @@ function addOverrideClassifierColor(builder, isThematic) {
|
|
|
385
385
|
const haveOverrides = undefined !== builder.frag.find("v_feature_emphasis");
|
|
386
386
|
builder.frag.addFunction(haveOverrides ? encodeNonLocatableWithFeatures : encodeNonLocatable);
|
|
387
387
|
if (isThematic === 0 /* IsThematic.No */)
|
|
388
|
-
builder.frag.set(
|
|
388
|
+
builder.frag.set(20 /* FragmentShaderComponent.OverrideColor */, haveOverrides ? overrideClassifierWithFeatures : overrideClassifierForClip);
|
|
389
389
|
else
|
|
390
|
-
builder.frag.set(
|
|
390
|
+
builder.frag.set(20 /* FragmentShaderComponent.OverrideColor */, haveOverrides ? overrideClassifierWithFeaturesForThematic : overrideClassifierForClipForThematic);
|
|
391
391
|
}
|
|
392
392
|
exports.addOverrideClassifierColor = addOverrideClassifierColor;
|
|
393
393
|
//# sourceMappingURL=PlanarClassification.js.map
|
|
@@ -102,7 +102,7 @@ function createPointCloudHiliter(classified) {
|
|
|
102
102
|
const builder = createBuilder();
|
|
103
103
|
if (classified) {
|
|
104
104
|
(0, PlanarClassification_1.addHilitePlanarClassifier)(builder, false);
|
|
105
|
-
builder.frag.set(
|
|
105
|
+
builder.frag.set(17 /* FragmentShaderComponent.AssignFragData */, Fragment_1.assignFragColor);
|
|
106
106
|
}
|
|
107
107
|
else {
|
|
108
108
|
(0, FeatureSymbology_1.addUniformHiliter)(builder);
|
|
@@ -223,7 +223,7 @@ function addThematicToRealityMesh(builder, gradientTextureUnit) {
|
|
|
223
223
|
builder.vert.addGlobal("g_hillshadeIndex", 2 /* VariableType.Float */);
|
|
224
224
|
builder.addFunctionComputedVarying("v_n", 4 /* VariableType.Vec3 */, "computeLightingNormal", computeNormal);
|
|
225
225
|
builder.frag.addGlobal("g_normal", 4 /* VariableType.Vec3 */);
|
|
226
|
-
builder.frag.set(
|
|
226
|
+
builder.frag.set(23 /* FragmentShaderComponent.FinalizeNormal */, exports.finalizeNormal);
|
|
227
227
|
(0, Thematic_1.addThematicDisplay)(builder, false, true);
|
|
228
228
|
builder.addInlineComputedVarying("v_thematicIndex", 2 /* VariableType.Float */, (0, Thematic_1.getComputeThematicIndex)(builder.vert.usesInstancedGeometry, false, false));
|
|
229
229
|
builder.vert.addUniform("u_worldToViewN", 6 /* VariableType.Mat3 */, (prog) => {
|
|
@@ -251,7 +251,7 @@ function createRealityMeshHiliterBuilder() {
|
|
|
251
251
|
const vert = builder.vert;
|
|
252
252
|
vert.set(10 /* VertexShaderComponent.ComputePosition */, computePosition);
|
|
253
253
|
(0, Vertex_1.addModelViewProjectionMatrix)(vert);
|
|
254
|
-
builder.frag.set(
|
|
254
|
+
builder.frag.set(17 /* FragmentShaderComponent.AssignFragData */, Fragment_1.assignFragColor);
|
|
255
255
|
return builder;
|
|
256
256
|
}
|
|
257
257
|
/** @internal */
|
|
@@ -279,7 +279,7 @@ function createRealityMeshBuilder(flags) {
|
|
|
279
279
|
const frag = builder.frag;
|
|
280
280
|
frag.addGlobal("featureIncrement", 2 /* VariableType.Float */, "0.0");
|
|
281
281
|
frag.addGlobal("classifierId", 5 /* VariableType.Vec4 */);
|
|
282
|
-
frag.set(
|
|
282
|
+
frag.set(18 /* FragmentShaderComponent.OverrideFeatureId */, overrideFeatureId);
|
|
283
283
|
const textureCount = System_1.System.instance.maxRealityImageryLayers;
|
|
284
284
|
const gradientTextureUnit = RenderFlags_1.TextureUnit.RealityMeshThematicGradient;
|
|
285
285
|
const feat = flags.featureMode;
|
|
@@ -41,7 +41,7 @@ function createScreenSpaceEffectProgramBuilder(params) {
|
|
|
41
41
|
texture.bindSampler(uniform, RenderFlags_1.TextureUnit.Zero);
|
|
42
42
|
});
|
|
43
43
|
});
|
|
44
|
-
builder.frag.set(
|
|
44
|
+
builder.frag.set(17 /* FragmentShaderComponent.AssignFragData */, Fragment_1.assignFragColor);
|
|
45
45
|
if (!params.source.sampleSourcePixel) {
|
|
46
46
|
builder.frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeBaseColor);
|
|
47
47
|
}
|
|
@@ -21,7 +21,7 @@ const scratchRotMatrix = new Matrix_1.Matrix3();
|
|
|
21
21
|
function createSkyBoxProgram(context) {
|
|
22
22
|
const prog = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(undefined, false));
|
|
23
23
|
prog.frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeBaseColor);
|
|
24
|
-
prog.frag.set(
|
|
24
|
+
prog.frag.set(17 /* FragmentShaderComponent.AssignFragData */, assignFragData);
|
|
25
25
|
prog.vert.set(10 /* VertexShaderComponent.ComputePosition */, computePosition);
|
|
26
26
|
prog.vert.addUniform("u_rot", 6 /* VariableType.Mat3 */, (prg) => {
|
|
27
27
|
prg.addGraphicUniform("u_rot", (uniform, params) => {
|
|
@@ -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);
|
|
@@ -124,7 +124,7 @@ function addSolarShadowMap(builder, toTerrain = false) {
|
|
|
124
124
|
frag.addFunction(exports.warpDepth);
|
|
125
125
|
frag.addFunction(chebyshevUpperBound);
|
|
126
126
|
frag.addFunction(shadowMapEVSM);
|
|
127
|
-
frag.set(
|
|
127
|
+
frag.set(14 /* FragmentShaderComponent.ApplySolarShadowMap */, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);
|
|
128
128
|
}
|
|
129
129
|
exports.addSolarShadowMap = addSolarShadowMap;
|
|
130
130
|
//# sourceMappingURL=SolarShadowMapping.js.map
|
|
@@ -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"}
|
|
@@ -32,6 +32,7 @@ const Vertex_1 = require("./Vertex");
|
|
|
32
32
|
const SurfaceGeometry_1 = require("../SurfaceGeometry");
|
|
33
33
|
const Wiremesh_1 = require("./Wiremesh");
|
|
34
34
|
const core_common_1 = require("@itwin/core-common");
|
|
35
|
+
const Contours_1 = require("./Contours");
|
|
35
36
|
const constantLodTextureLookup = `
|
|
36
37
|
vec4 constantLodTextureLookup(sampler2D textureSampler) {
|
|
37
38
|
float logDepth = log2(v_uvCustom.z);
|
|
@@ -259,7 +260,7 @@ function createSurfaceHiliter(instanced, classified, posType) {
|
|
|
259
260
|
if (classified) {
|
|
260
261
|
(0, PlanarClassification_1.addHilitePlanarClassifier)(builder);
|
|
261
262
|
builder.vert.addGlobal("feature_ignore_material", 0 /* VariableType.Boolean */, "false");
|
|
262
|
-
builder.frag.set(
|
|
263
|
+
builder.frag.set(17 /* FragmentShaderComponent.AssignFragData */, Fragment_1.assignFragColor);
|
|
263
264
|
}
|
|
264
265
|
else {
|
|
265
266
|
(0, FeatureSymbology_1.addSurfaceHiliter)(builder);
|
|
@@ -482,12 +483,12 @@ function addNormal(builder, animated) {
|
|
|
482
483
|
});
|
|
483
484
|
});
|
|
484
485
|
finalizeNormal += finalizeNormalPostlude;
|
|
485
|
-
builder.frag.set(
|
|
486
|
+
builder.frag.set(23 /* FragmentShaderComponent.FinalizeNormal */, finalizeNormal);
|
|
486
487
|
// Set to true to colorize surfaces based on normals (in world space).
|
|
487
488
|
// You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.
|
|
488
489
|
const debugNormals = false;
|
|
489
490
|
if (debugNormals) {
|
|
490
|
-
builder.frag.set(
|
|
491
|
+
builder.frag.set(16 /* FragmentShaderComponent.ApplyDebugColor */, "return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);");
|
|
491
492
|
builder.addInlineComputedVarying("v_normal", 4 /* VariableType.Vec3 */, "v_normal = computeSurfaceNormal();");
|
|
492
493
|
}
|
|
493
494
|
}
|
|
@@ -624,6 +625,7 @@ function createSurfaceBuilder(flags) {
|
|
|
624
625
|
builder.frag.addFunction(getSurfaceColor);
|
|
625
626
|
(0, Lighting_1.addLighting)(builder);
|
|
626
627
|
(0, Fragment_1.addWhiteOnWhiteReversal)(builder.frag);
|
|
628
|
+
(0, Contours_1.addApplyContours)(builder);
|
|
627
629
|
if (flags.isTranslucent) {
|
|
628
630
|
(0, Translucency_1.addTranslucency)(builder);
|
|
629
631
|
}
|