@itwin/core-frontend 3.0.0-dev.149 → 3.0.0-dev.154
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/Marker.d.ts +9 -2
- package/lib/cjs/Marker.d.ts.map +1 -1
- package/lib/cjs/Marker.js +33 -5
- package/lib/cjs/Marker.js.map +1 -1
- package/lib/cjs/RealityDataSource.js +1 -12
- package/lib/cjs/RealityDataSource.js.map +1 -1
- package/lib/cjs/render/RenderMemory.d.ts +21 -15
- package/lib/cjs/render/RenderMemory.d.ts.map +1 -1
- package/lib/cjs/render/RenderMemory.js +21 -15
- package/lib/cjs/render/RenderMemory.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +2 -0
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +2 -0
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.d.ts +35 -1
- package/lib/cjs/render/primitives/EdgeParams.d.ts.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.js +114 -10
- package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.d.ts +1 -0
- package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.js +6 -1
- package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
- package/lib/cjs/render/webgl/AttributeMap.js +5 -5
- package/lib/cjs/render/webgl/CachedGeometry.d.ts +2 -0
- package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.js +14 -13
- package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +2 -2
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts +51 -0
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -0
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +90 -0
- package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -0
- package/lib/cjs/render/webgl/InstancedGeometry.d.ts +1 -0
- package/lib/cjs/render/webgl/InstancedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +1 -0
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/Mesh.d.ts +2 -0
- package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Mesh.js +7 -1
- package/lib/cjs/render/webgl/Mesh.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +1 -1
- package/lib/cjs/render/webgl/PlanarGrid.js +2 -2
- package/lib/cjs/render/webgl/RealityMesh.js +5 -5
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts +4 -1
- package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderFlags.js +6 -1
- package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +6 -6
- package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts +16 -14
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +19 -15
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +2 -0
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +2 -0
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.js +1 -1
- package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +72 -57
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.d.ts +29 -28
- package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueId.js +7 -7
- package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.js +1 -1
- package/lib/cjs/render/webgl/glsl/Color.js +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -7
- package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -1
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -1
- package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.js +132 -14
- package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +13 -10
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Fragment.js +9 -1
- package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/LookupTable.d.ts +4 -2
- package/lib/cjs/render/webgl/glsl/LookupTable.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/LookupTable.js +7 -3
- package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -2
- package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointCloud.js +2 -2
- package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.js +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.js +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +4 -4
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
- package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +3 -3
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.js +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ViewportQuad.js +1 -1
- package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
- package/lib/cjs/tile/IModelTile.d.ts.map +1 -1
- package/lib/cjs/tile/IModelTile.js +1 -0
- package/lib/cjs/tile/IModelTile.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.d.ts +1 -0
- package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +21 -1
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +4 -3
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.d.ts +9 -0
- package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +18 -13
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +4 -3
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/webgl.d.ts +1 -0
- package/lib/cjs/webgl.d.ts.map +1 -1
- package/lib/cjs/webgl.js +1 -0
- package/lib/cjs/webgl.js.map +1 -1
- package/lib/esm/Marker.d.ts +9 -2
- package/lib/esm/Marker.d.ts.map +1 -1
- package/lib/esm/Marker.js +34 -6
- package/lib/esm/Marker.js.map +1 -1
- package/lib/esm/RealityDataSource.js +2 -13
- package/lib/esm/RealityDataSource.js.map +1 -1
- package/lib/esm/render/RenderMemory.d.ts +21 -15
- package/lib/esm/render/RenderMemory.d.ts.map +1 -1
- package/lib/esm/render/RenderMemory.js +21 -15
- package/lib/esm/render/RenderMemory.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +2 -0
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +2 -0
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.d.ts +35 -1
- package/lib/esm/render/primitives/EdgeParams.d.ts.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.js +114 -10
- package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
- package/lib/esm/render/primitives/VertexTable.d.ts +1 -0
- package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
- package/lib/esm/render/primitives/VertexTable.js +6 -1
- package/lib/esm/render/primitives/VertexTable.js.map +1 -1
- package/lib/esm/render/webgl/AttributeMap.js +5 -5
- package/lib/esm/render/webgl/CachedGeometry.d.ts +2 -0
- package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.js +14 -13
- package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +2 -2
- package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts +51 -0
- package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -0
- package/lib/esm/render/webgl/IndexedEdgeGeometry.js +85 -0
- package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -0
- package/lib/esm/render/webgl/InstancedGeometry.d.ts +1 -0
- package/lib/esm/render/webgl/InstancedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.js +1 -0
- package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/Mesh.d.ts +2 -0
- package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/Mesh.js +7 -1
- package/lib/esm/render/webgl/Mesh.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +1 -1
- package/lib/esm/render/webgl/PlanarGrid.js +2 -2
- package/lib/esm/render/webgl/RealityMesh.js +5 -5
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts +4 -1
- package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderFlags.js +6 -1
- package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +6 -6
- package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +16 -14
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +19 -15
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +2 -0
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +2 -0
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.js +1 -1
- package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
- package/lib/esm/render/webgl/Technique.js +72 -57
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueId.d.ts +29 -28
- package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
- package/lib/esm/render/webgl/TechniqueId.js +7 -7
- package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Animation.js +1 -1
- package/lib/esm/render/webgl/glsl/Color.js +1 -1
- package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyStencil.js +4 -7
- package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
- package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +1 -1
- package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -1
- package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.js +132 -14
- package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +13 -10
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Fragment.js +9 -1
- package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/esm/render/webgl/glsl/LookupTable.d.ts +4 -2
- package/lib/esm/render/webgl/glsl/LookupTable.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/LookupTable.js +7 -3
- package/lib/esm/render/webgl/glsl/LookupTable.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -2
- package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PointCloud.js +2 -2
- package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PointString.js +1 -1
- package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Polyline.js +1 -1
- package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +4 -4
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
- package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
- package/lib/esm/render/webgl/glsl/SkyBox.js +1 -1
- package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
- package/lib/esm/render/webgl/glsl/SkySphere.js +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +3 -3
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.js +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/render/webgl/glsl/ViewportQuad.js +1 -1
- package/lib/esm/render/webgl/glsl/ViewportQuad.js.map +1 -1
- package/lib/esm/tile/IModelTile.d.ts.map +1 -1
- package/lib/esm/tile/IModelTile.js +1 -0
- package/lib/esm/tile/IModelTile.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts +1 -0
- package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
- package/lib/esm/tile/ImdlReader.js +21 -1
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +5 -4
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/TileAdmin.d.ts +9 -0
- package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +19 -14
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +4 -3
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/webgl.d.ts +1 -0
- package/lib/esm/webgl.d.ts.map +1 -1
- package/lib/esm/webgl.js +1 -0
- package/lib/esm/webgl.js.map +1 -1
- package/package.json +22 -22
|
@@ -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, RenderOrder, TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariablePrecision, VariableType, VertexShaderBuilder,\r\n VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\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, addFeatureAndMaterialLookup, 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\n// Returns true if the specified flag is not globally overridden and is set in flags\r\nconst nthFeatureBitSet = `\r\nbool nthFeatureBitSet(float flags, float n) {\r\n return !nthBitSet(u_globalOvrFlags, n) && nthBitSet(flags, n);\r\n}\r\n`;\r\nconst nthFeatureBitSet2 = `\r\nbool nthFeatureBitSet(float flags, uint n) {\r\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n);\r\n}\r\n`;\r\n\r\n// Returns 1.0 if the specified flag is not globally overridden and is set in flags\r\nconst extractNthFeatureBit = `\r\nfloat extractNthFeatureBit(float flags, float n) {\r\n return !nthBitSet(u_globalOvrFlags, n) && nthBitSet(flags, n) ? 1.0 : 0.0;\r\n}\r\n`;\r\nconst extractNthFeatureBit2 = `\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 if (vert.usesVertexTable && !vert.usesInstancedGeometry)\r\n addFeatureAndMaterialLookup(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 // During readPixels() we force transparency off. Make sure to ignore a Branch that turns it back on.\r\n let flags = 0;\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 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 let bitmapType;\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addFunction(nthFeatureBitSet2);\r\n vert.addFunction(extractNthFeatureBit2);\r\n bitmapType = VariableType.Uint;\r\n } else {\r\n vert.addFunction(nthFeatureBitSet);\r\n vert.addFunction(extractNthFeatureBit);\r\n bitmapType = VariableType.Float;\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 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_Silhouette\", VariableType.Float, RenderOrder.Silhouette.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\nfunction 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.set(FragmentShaderComponent.ComputeBaseColor, `return vec4(1.0, 0.0, 0.0, 0.0);`);\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 { OvrFlags, RenderOrder, TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariablePrecision, VariableType, VertexShaderBuilder,\r\n VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\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, addFeatureAndMaterialLookup, 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\n// Returns true if the specified flag is not globally overridden and is set in flags\r\nconst nthFeatureBitSet = `\r\nbool nthFeatureBitSet(float flags, float n) {\r\n return !nthBitSet(u_globalOvrFlags, n) && nthBitSet(flags, n);\r\n}\r\n`;\r\nconst nthFeatureBitSet2 = `\r\nbool nthFeatureBitSet(float flags, uint n) {\r\n return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n);\r\n}\r\n`;\r\n\r\n// Returns 1.0 if the specified flag is not globally overridden and is set in flags\r\nconst extractNthFeatureBit = `\r\nfloat extractNthFeatureBit(float flags, float n) {\r\n return !nthBitSet(u_globalOvrFlags, n) && nthBitSet(flags, n) ? 1.0 : 0.0;\r\n}\r\n`;\r\nconst extractNthFeatureBit2 = `\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 if (vert.usesVertexTable && !vert.usesInstancedGeometry)\r\n addFeatureAndMaterialLookup(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 // During readPixels() we force transparency off. Make sure to ignore a Branch that turns it back on.\r\n let flags = 0;\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 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 let bitmapType;\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addFunction(nthFeatureBitSet2);\r\n vert.addFunction(extractNthFeatureBit2);\r\n bitmapType = VariableType.Uint;\r\n } else {\r\n vert.addFunction(nthFeatureBitSet);\r\n vert.addFunction(extractNthFeatureBit);\r\n bitmapType = VariableType.Float;\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 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\nfunction 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.set(FragmentShaderComponent.ComputeBaseColor, `return vec4(1.0, 0.0, 0.0, 0.0);`);\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fragment.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Fragment.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAwD,MAAM,kBAAkB,CAAC;AAK/G,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,QAQ/D;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,QASlE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,QAM/D;AAkDD,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"Fragment.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Fragment.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAwD,MAAM,kBAAkB,CAAC;AAK/G,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,QAQ/D;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,QASlE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,QAM/D;AAkDD,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAmCtE;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAkBzE;AAED,gBAAgB;AAChB,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CASpF;AAED,gBAAgB;AAChB,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAWxD,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,qPAQ9B,CAAC"}
|
|
@@ -64,7 +64,7 @@ const computePickBufferOutputs = `${multiplyAlpha}
|
|
|
64
64
|
ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);
|
|
65
65
|
vec4 output1 = vec4(feature_id_i) / 255.0;
|
|
66
66
|
float linearDepth = computeLinearDepth(v_eyeSpace.z);
|
|
67
|
-
vec4 output2 = vec4(
|
|
67
|
+
vec4 output2 = vec4(renderOrder * 0.0625, encodeDepthRgb(linearDepth)); // near=1, far=0
|
|
68
68
|
`;
|
|
69
69
|
const computeAltPickBufferOutputs = `${multiplyAlpha}
|
|
70
70
|
vec4 output0 = baseColor;
|
|
@@ -90,6 +90,14 @@ export function addPickBufferOutputs(frag) {
|
|
|
90
90
|
frag.addFunction(encodeDepthRgb);
|
|
91
91
|
frag.addFunction(computeLinearDepth);
|
|
92
92
|
const prelude = new SourceBuilder();
|
|
93
|
+
const overrideOrder = frag.get(20 /* OverrideRenderOrder */);
|
|
94
|
+
if (overrideOrder) {
|
|
95
|
+
frag.addFunction("float overrideRenderOrder(float currentOrder)", overrideOrder);
|
|
96
|
+
prelude.addline(" float renderOrder = overrideRenderOrder(u_renderOrder);");
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
prelude.addline(" float renderOrder = u_renderOrder;");
|
|
100
|
+
}
|
|
93
101
|
prelude.add(computePickBufferOutputs);
|
|
94
102
|
const overrideColor = frag.get(19 /* OverrideColor */);
|
|
95
103
|
if (undefined !== overrideColor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fragment.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Fragment.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 { FragmentShaderBuilder, FragmentShaderComponent, SourceBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { encodeDepthRgb } from \"./Decode\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\n\r\n/** @internal */\r\nexport function addWindowToTexCoords(frag: FragmentShaderBuilder) {\r\n const windowCoordsToTexCoords = `\\nvec2 windowCoordsToTexCoords(vec2 wc) { return wc * u_invScreenSize; }\\n`;\r\n frag.addFunction(windowCoordsToTexCoords);\r\n frag.addUniform(\"u_invScreenSize\", VariableType.Vec2, (prog) => {\r\n prog.addProgramUniform(\"u_invScreenSize\", (uniform, params) => {\r\n params.target.uniforms.viewRect.bindInverseDimensions(uniform);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addWhiteOnWhiteReversal(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_reverseWhiteOnWhite\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_reverseWhiteOnWhite\", (uniform, params) => {\r\n const wantWoW = params.target.uniforms.style.wantWoWReversal;\r\n const doReversal = (wantWoW && params.geometry.wantWoWReversal(params.programParams)) ? 1 : 0;\r\n uniform.setUniform1i(doReversal);\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ReverseWhiteOnWhite, reverseWhiteOnWhite);\r\n}\r\n\r\n/** For techniques which by default use MRT, on devices which don't support MRT we fall back to\r\n * multi-pass rendering. The same shader is used each pass, with a uniform supplied indicating\r\n * which value to output to gl_FragColor. It's specified as an index - the same one that would be\r\n * used to index into gl_FragData[] in MRT context.\r\n * @internal\r\n */\r\nexport function addRenderTargetIndex(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_renderTargetIndex\", VariableType.Int, (prog) => {\r\n prog.addProgramUniform(\"u_renderTargetIndex\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.compositor.currentRenderTargetIndex);\r\n });\r\n });\r\n}\r\n\r\nconst reverseWhiteOnWhite = `\r\n const vec3 white = vec3(1.0);\r\n const vec3 epsilon = vec3(0.0001);\r\n vec3 color = baseColor.rgb;\r\n vec3 delta = (color + epsilon) - white;\r\n vec4 wowColor = vec4(baseColor.rgb * vec3(float(delta.x <= 0.0 || delta.y <= 0.0 || delta.z <= 0.0)), baseColor.a); // set to black if almost white\r\n return u_reverseWhiteOnWhite ? wowColor : baseColor;\r\n`;\r\n\r\nconst multiplyAlpha = `\r\n if (u_renderPass >= kRenderPass_OpaqueLinear && u_renderPass <= kRenderPass_OpaqueGeneral)\r\n baseColor.a = 1.0;\r\n else\r\n baseColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\r\n`;\r\n\r\nconst computePickBufferOutputs = `${multiplyAlpha}\r\n vec4 output0 = baseColor;\r\n\r\n // Fix interpolation errors despite all vertices sending exact same feature_id...\r\n ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);\r\n vec4 output1 = vec4(feature_id_i) / 255.0;\r\n float linearDepth = computeLinearDepth(v_eyeSpace.z);\r\n vec4 output2 = vec4(u_renderOrder * 0.0625, encodeDepthRgb(linearDepth)); // near=1, far=0\r\n`;\r\n\r\nconst computeAltPickBufferOutputs = `${multiplyAlpha}\r\n vec4 output0 = baseColor;\r\n vec4 output1 = vec4(0.0);\r\n vec4 output2 = vec4(0.0);\r\n`;\r\n\r\nconst assignPickBufferOutputsMRT = `\r\n FragColor0 = output0;\r\n FragColor1 = output1;\r\n FragColor2 = output2;\r\n`;\r\n\r\nconst assignPickBufferOutputsMP = `\r\n if (0 == u_renderTargetIndex)\r\n FragColor = output0;\r\n else if (1 == u_renderTargetIndex)\r\n FragColor = output1;\r\n else\r\n FragColor = output2;\r\n`;\r\nconst reassignFeatureId = \" output1 = overrideFeatureId(output1);\";\r\n\r\n/** @internal */\r\nexport function addPickBufferOutputs(frag: FragmentShaderBuilder): void {\r\n frag.addFunction(encodeDepthRgb);\r\n frag.addFunction(computeLinearDepth);\r\n\r\n const prelude = new SourceBuilder();\r\n prelude.add(computePickBufferOutputs);\r\n\r\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\r\n if (undefined !== overrideColor) {\r\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\r\n prelude.addline(\" output0 = overrideColor(output0);\");\r\n }\r\n\r\n const overrideFeatureId = frag.get(FragmentShaderComponent.OverrideFeatureId);\r\n if (undefined !== overrideFeatureId) {\r\n frag.addFunction(\"vec4 overrideFeatureId(vec4 currentId)\", overrideFeatureId);\r\n prelude.addline(reassignFeatureId);\r\n }\r\n\r\n addRenderPass(frag);\r\n if (System.instance.capabilities.supportsMRTPickShaders) {\r\n frag.addDrawBuffersExtension(3);\r\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMRT);\r\n } else {\r\n addRenderTargetIndex(frag);\r\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMP);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addAltPickBufferOutputs(frag: FragmentShaderBuilder): void {\r\n const prelude = new SourceBuilder();\r\n prelude.add(computeAltPickBufferOutputs);\r\n\r\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\r\n if (undefined !== overrideColor) {\r\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\r\n prelude.addline(\" output0 = overrideColor(output0);\");\r\n }\r\n\r\n addRenderPass(frag);\r\n if (System.instance.capabilities.supportsMRTPickShaders) {\r\n frag.addDrawBuffersExtension(3);\r\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMRT);\r\n } else {\r\n addRenderTargetIndex(frag);\r\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMP);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addFragColorWithPreMultipliedAlpha(frag: FragmentShaderBuilder): void {\r\n addRenderPass(frag);\r\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\r\n if (undefined === overrideColor) {\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColorWithPreMultipliedAlpha);\r\n } else {\r\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, overrideAndAssignFragColorWithPreMultipliedAlpha);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const assignFragColor = \"FragColor = baseColor;\";\r\n\r\nconst assignFragColorWithPreMultipliedAlpha = `${multiplyAlpha}\r\n FragColor = baseColor;\r\n`;\r\n\r\nconst overrideAndAssignFragColorWithPreMultipliedAlpha = `${multiplyAlpha}\r\n vec4 fragColor = overrideColor(baseColor);\r\n FragColor = fragColor;\r\n`;\r\n\r\n/** @internal */\r\nexport const computeLinearDepth = `\r\nfloat computeLinearDepth(float eyeSpaceZ) {\r\n float eyeZ = -eyeSpaceZ;\r\n float near = u_frustum.x, far = u_frustum.y;\r\n float depthRange = far - near;\r\n float linearDepth = (eyeZ - near) / depthRange;\r\n return 1.0 - linearDepth;\r\n}\r\n`;\r\n"]}
|
|
1
|
+
{"version":3,"file":"Fragment.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Fragment.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 { FragmentShaderBuilder, FragmentShaderComponent, SourceBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { encodeDepthRgb } from \"./Decode\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\n\r\n/** @internal */\r\nexport function addWindowToTexCoords(frag: FragmentShaderBuilder) {\r\n const windowCoordsToTexCoords = `\\nvec2 windowCoordsToTexCoords(vec2 wc) { return wc * u_invScreenSize; }\\n`;\r\n frag.addFunction(windowCoordsToTexCoords);\r\n frag.addUniform(\"u_invScreenSize\", VariableType.Vec2, (prog) => {\r\n prog.addProgramUniform(\"u_invScreenSize\", (uniform, params) => {\r\n params.target.uniforms.viewRect.bindInverseDimensions(uniform);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addWhiteOnWhiteReversal(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_reverseWhiteOnWhite\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_reverseWhiteOnWhite\", (uniform, params) => {\r\n const wantWoW = params.target.uniforms.style.wantWoWReversal;\r\n const doReversal = (wantWoW && params.geometry.wantWoWReversal(params.programParams)) ? 1 : 0;\r\n uniform.setUniform1i(doReversal);\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ReverseWhiteOnWhite, reverseWhiteOnWhite);\r\n}\r\n\r\n/** For techniques which by default use MRT, on devices which don't support MRT we fall back to\r\n * multi-pass rendering. The same shader is used each pass, with a uniform supplied indicating\r\n * which value to output to gl_FragColor. It's specified as an index - the same one that would be\r\n * used to index into gl_FragData[] in MRT context.\r\n * @internal\r\n */\r\nexport function addRenderTargetIndex(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_renderTargetIndex\", VariableType.Int, (prog) => {\r\n prog.addProgramUniform(\"u_renderTargetIndex\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.compositor.currentRenderTargetIndex);\r\n });\r\n });\r\n}\r\n\r\nconst reverseWhiteOnWhite = `\r\n const vec3 white = vec3(1.0);\r\n const vec3 epsilon = vec3(0.0001);\r\n vec3 color = baseColor.rgb;\r\n vec3 delta = (color + epsilon) - white;\r\n vec4 wowColor = vec4(baseColor.rgb * vec3(float(delta.x <= 0.0 || delta.y <= 0.0 || delta.z <= 0.0)), baseColor.a); // set to black if almost white\r\n return u_reverseWhiteOnWhite ? wowColor : baseColor;\r\n`;\r\n\r\nconst multiplyAlpha = `\r\n if (u_renderPass >= kRenderPass_OpaqueLinear && u_renderPass <= kRenderPass_OpaqueGeneral)\r\n baseColor.a = 1.0;\r\n else\r\n baseColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\r\n`;\r\n\r\nconst computePickBufferOutputs = `${multiplyAlpha}\r\n vec4 output0 = baseColor;\r\n\r\n // Fix interpolation errors despite all vertices sending exact same feature_id...\r\n ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);\r\n vec4 output1 = vec4(feature_id_i) / 255.0;\r\n float linearDepth = computeLinearDepth(v_eyeSpace.z);\r\n vec4 output2 = vec4(renderOrder * 0.0625, encodeDepthRgb(linearDepth)); // near=1, far=0\r\n`;\r\n\r\nconst computeAltPickBufferOutputs = `${multiplyAlpha}\r\n vec4 output0 = baseColor;\r\n vec4 output1 = vec4(0.0);\r\n vec4 output2 = vec4(0.0);\r\n`;\r\n\r\nconst assignPickBufferOutputsMRT = `\r\n FragColor0 = output0;\r\n FragColor1 = output1;\r\n FragColor2 = output2;\r\n`;\r\n\r\nconst assignPickBufferOutputsMP = `\r\n if (0 == u_renderTargetIndex)\r\n FragColor = output0;\r\n else if (1 == u_renderTargetIndex)\r\n FragColor = output1;\r\n else\r\n FragColor = output2;\r\n`;\r\nconst reassignFeatureId = \" output1 = overrideFeatureId(output1);\";\r\n\r\n/** @internal */\r\nexport function addPickBufferOutputs(frag: FragmentShaderBuilder): void {\r\n frag.addFunction(encodeDepthRgb);\r\n frag.addFunction(computeLinearDepth);\r\n\r\n const prelude = new SourceBuilder();\r\n const overrideOrder = frag.get(FragmentShaderComponent.OverrideRenderOrder);\r\n if (overrideOrder) {\r\n frag.addFunction(\"float overrideRenderOrder(float currentOrder)\", overrideOrder);\r\n prelude.addline(\" float renderOrder = overrideRenderOrder(u_renderOrder);\");\r\n } else {\r\n prelude.addline(\" float renderOrder = u_renderOrder;\");\r\n }\r\n\r\n prelude.add(computePickBufferOutputs);\r\n\r\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\r\n if (undefined !== overrideColor) {\r\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\r\n prelude.addline(\" output0 = overrideColor(output0);\");\r\n }\r\n\r\n const overrideFeatureId = frag.get(FragmentShaderComponent.OverrideFeatureId);\r\n if (undefined !== overrideFeatureId) {\r\n frag.addFunction(\"vec4 overrideFeatureId(vec4 currentId)\", overrideFeatureId);\r\n prelude.addline(reassignFeatureId);\r\n }\r\n\r\n addRenderPass(frag);\r\n if (System.instance.capabilities.supportsMRTPickShaders) {\r\n frag.addDrawBuffersExtension(3);\r\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMRT);\r\n } else {\r\n addRenderTargetIndex(frag);\r\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMP);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addAltPickBufferOutputs(frag: FragmentShaderBuilder): void {\r\n const prelude = new SourceBuilder();\r\n prelude.add(computeAltPickBufferOutputs);\r\n\r\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\r\n if (undefined !== overrideColor) {\r\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\r\n prelude.addline(\" output0 = overrideColor(output0);\");\r\n }\r\n\r\n addRenderPass(frag);\r\n if (System.instance.capabilities.supportsMRTPickShaders) {\r\n frag.addDrawBuffersExtension(3);\r\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMRT);\r\n } else {\r\n addRenderTargetIndex(frag);\r\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMP);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addFragColorWithPreMultipliedAlpha(frag: FragmentShaderBuilder): void {\r\n addRenderPass(frag);\r\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\r\n if (undefined === overrideColor) {\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColorWithPreMultipliedAlpha);\r\n } else {\r\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, overrideAndAssignFragColorWithPreMultipliedAlpha);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const assignFragColor = \"FragColor = baseColor;\";\r\n\r\nconst assignFragColorWithPreMultipliedAlpha = `${multiplyAlpha}\r\n FragColor = baseColor;\r\n`;\r\n\r\nconst overrideAndAssignFragColorWithPreMultipliedAlpha = `${multiplyAlpha}\r\n vec4 fragColor = overrideColor(baseColor);\r\n FragColor = fragColor;\r\n`;\r\n\r\n/** @internal */\r\nexport const computeLinearDepth = `\r\nfloat computeLinearDepth(float eyeSpaceZ) {\r\n float eyeZ = -eyeSpaceZ;\r\n float near = u_frustum.x, far = u_frustum.y;\r\n float depthRange = far - near;\r\n float linearDepth = (eyeZ - near) / depthRange;\r\n return 1.0 - linearDepth;\r\n}\r\n`;\r\n"]}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* @module WebGL
|
|
3
3
|
*/
|
|
4
4
|
import { VertexShaderBuilder } from "../ShaderBuilder";
|
|
5
|
-
/**
|
|
6
|
-
|
|
5
|
+
/** Add support for a lookup table to the vertex shader. Returns the code used to initialize the global variables.
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare function addLookupTable(sb: VertexShaderBuilder, lutName: string, mult?: string, addInitializer?: boolean): string;
|
|
7
9
|
//# sourceMappingURL=LookupTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LookupTable.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/LookupTable.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAgB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA2BrE
|
|
1
|
+
{"version":3,"file":"LookupTable.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/LookupTable.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAgB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA2BrE;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAc,EAAE,cAAc,UAAO,GAAG,MAAM,CAyB5H"}
|
|
@@ -27,8 +27,10 @@ const initializerTemplate = `
|
|
|
27
27
|
float {LUTSTEPY} = 1.0 / {LUTPARAMS}.y;
|
|
28
28
|
{LUTCENTER} = vec2(0.5*{LUTSTEPX}, 0.5*{LUTSTEPY});
|
|
29
29
|
`;
|
|
30
|
-
/**
|
|
31
|
-
|
|
30
|
+
/** Add support for a lookup table to the vertex shader. Returns the code used to initialize the global variables.
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export function addLookupTable(sb, lutName, mult = "1.0", addInitializer = true) {
|
|
32
34
|
sb.addFunction(computeLUTCoords);
|
|
33
35
|
const lutStepX = `g_${lutName}_stepX`;
|
|
34
36
|
const lutStepY = `${lutName}_stepY`;
|
|
@@ -41,10 +43,12 @@ export function addLookupTable(sb, lutName, mult = "1.0") {
|
|
|
41
43
|
initializerSpecific = initializerSpecific.replace(/{LUTSTEPY}/g, lutStepY);
|
|
42
44
|
initializerSpecific = initializerSpecific.replace(/{LUTCENTER}/g, lutCenter);
|
|
43
45
|
initializerSpecific = initializerSpecific.replace(/{LUTPARAMS}/g, lutParams);
|
|
44
|
-
|
|
46
|
+
if (addInitializer)
|
|
47
|
+
sb.addInitializer(initializerSpecific);
|
|
45
48
|
let computeCoordsSpecific = computeCoordsTemplate;
|
|
46
49
|
computeCoordsSpecific = computeCoordsSpecific.replace(/{LUTNAME}/g, lutName);
|
|
47
50
|
computeCoordsSpecific = computeCoordsSpecific.replace(/{MULT}/g, mult);
|
|
48
51
|
sb.addFunction(computeCoordsSpecific);
|
|
52
|
+
return initializerSpecific;
|
|
49
53
|
}
|
|
50
54
|
//# sourceMappingURL=LookupTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LookupTable.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/LookupTable.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAWxB,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;CAI7B,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;CAI3B,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"LookupTable.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/LookupTable.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAWxB,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;CAI7B,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;CAI3B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAAuB,EAAE,OAAe,EAAE,OAAe,KAAK,EAAE,cAAc,GAAG,IAAI;IAClH,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAG,KAAK,OAAO,QAAQ,CAAC;IACtC,MAAM,QAAQ,GAAG,GAAG,OAAO,QAAQ,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,OAAO,SAAS,CAAC;IACxC,MAAM,SAAS,GAAG,KAAK,OAAO,QAAQ,CAAC;IAEvC,EAAE,CAAC,SAAS,CAAC,QAAQ,gBAAqB,CAAC;IAC3C,EAAE,CAAC,SAAS,CAAC,SAAS,eAAoB,CAAC;IAE3C,IAAI,mBAAmB,GAAG,mBAAmB,CAAC;IAC9C,mBAAmB,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC3E,mBAAmB,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC3E,mBAAmB,GAAG,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC7E,mBAAmB,GAAG,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC7E,IAAI,cAAc;QAChB,EAAE,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAEzC,IAAI,qBAAqB,GAAG,qBAAqB,CAAC;IAClD,qBAAqB,GAAG,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7E,qBAAqB,GAAG,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvE,EAAE,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAEtC,OAAO,mBAAmB,CAAC;AAC7B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\r\n\r\nconst computeLUTCoords = `\r\nvec2 computeLUTCoords(float index, vec2 dimensions, vec2 center, float mult) {\r\n float baseIndex = index*mult;\r\n\r\n // Fix precision issues wherein mod(x,y) => y instead of 0 when x is multiple of y...\r\n float epsilon = 0.5 / dimensions.x;\r\n float yId = floor(baseIndex / dimensions.x + epsilon);\r\n float xId = baseIndex - dimensions.x * yId; // replaces mod()...\r\n\r\n return center + vec2(xId/dimensions.x, yId/dimensions.y);\r\n}\r\n`;\r\n\r\nconst computeCoordsTemplate = `\r\nvec2 compute_{LUTNAME}_coords(float index) {\r\n return computeLUTCoords(index, u_{LUTNAME}Params.xy, g_{LUTNAME}_center, {MULT});\r\n}\r\n`;\r\n\r\nconst initializerTemplate = `\r\n {LUTSTEPX} = 1.0 / {LUTPARAMS}.x;\r\n float {LUTSTEPY} = 1.0 / {LUTPARAMS}.y;\r\n {LUTCENTER} = vec2(0.5*{LUTSTEPX}, 0.5*{LUTSTEPY});\r\n`;\r\n\r\n/** Add support for a lookup table to the vertex shader. Returns the code used to initialize the global variables.\r\n * @internal\r\n */\r\nexport function addLookupTable(sb: VertexShaderBuilder, lutName: string, mult: string = \"1.0\", addInitializer = true): string {\r\n sb.addFunction(computeLUTCoords);\r\n\r\n const lutStepX = `g_${lutName}_stepX`;\r\n const lutStepY = `${lutName}_stepY`;\r\n const lutCenter = `g_${lutName}_center`;\r\n const lutParams = `u_${lutName}Params`;\r\n\r\n sb.addGlobal(lutStepX, VariableType.Float);\r\n sb.addGlobal(lutCenter, VariableType.Vec2);\r\n\r\n let initializerSpecific = initializerTemplate;\r\n initializerSpecific = initializerSpecific.replace(/{LUTSTEPX}/g, lutStepX);\r\n initializerSpecific = initializerSpecific.replace(/{LUTSTEPY}/g, lutStepY);\r\n initializerSpecific = initializerSpecific.replace(/{LUTCENTER}/g, lutCenter);\r\n initializerSpecific = initializerSpecific.replace(/{LUTPARAMS}/g, lutParams);\r\n if (addInitializer)\r\n sb.addInitializer(initializerSpecific);\r\n\r\n let computeCoordsSpecific = computeCoordsTemplate;\r\n computeCoordsSpecific = computeCoordsSpecific.replace(/{LUTNAME}/g, lutName);\r\n computeCoordsSpecific = computeCoordsSpecific.replace(/{MULT}/g, mult);\r\n sb.addFunction(computeCoordsSpecific);\r\n\r\n return initializerSpecific;\r\n}\r\n"]}
|
|
@@ -45,10 +45,10 @@ const fwidth2dWhenNotAvailable = `\nvec2 screenSpaceDeriv(vec2 screenXY) { retur
|
|
|
45
45
|
const defaultTransparency = new PlanarGridTransparency();
|
|
46
46
|
/** @internal */
|
|
47
47
|
export default function createPlanarGridProgram(context) {
|
|
48
|
-
const builder = new ProgramBuilder(AttributeMap.findAttributeMap(
|
|
48
|
+
const builder = new ProgramBuilder(AttributeMap.findAttributeMap(8 /* PlanarGrid */, false));
|
|
49
49
|
const vert = builder.vert;
|
|
50
50
|
const frag = builder.frag;
|
|
51
|
-
vert.set(
|
|
51
|
+
vert.set(10 /* ComputePosition */, computePosition);
|
|
52
52
|
addModelViewProjectionMatrix(vert);
|
|
53
53
|
addShaderFlags(builder);
|
|
54
54
|
addTranslucency(builder);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanarGrid.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PlanarGrid.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAA2B,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAEhH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,eAAe,GAAG,8CAA8C,CAAC;AACvE,MAAM,eAAe,GAAG,oDAAoD,CAAC;AAE7E,MAAM,gBAAgB,GAAG;;;;;;;;CAQxB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;CAcpB,CAAC;AAEF,MAAM,qBAAqB,GAAI,uEAAuE,CAAC;AACvG,MAAM,wBAAwB,GAAI,uEAAuE,CAAC;AAE1G,MAAM,mBAAmB,GAAG,IAAI,sBAAsB,EAAE,CAAC;AACzD,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,OAAqB;IACnE,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,gBAAgB,qBAAyB,KAAK,CAAC,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"PlanarGrid.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PlanarGrid.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 { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { PlanarGridTransparency } from \"../../RenderSystem\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addLogDepth } from \"./LogarithmicDepthBuffer\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\n\r\nconst computeBaseColor = `\r\n // u_gridProps - x = gridsPerRef, y - planeAlpha, z = line alpha, w = ref alpha.\r\n vec4 color = vec4(u_gridColor, u_gridProps.y);\r\n float refsPerGrid = u_gridProps.x;\r\n if (0.0 == refsPerGrid || !drawGridLine(color, 1.0 / refsPerGrid, u_gridProps.w - color.a))\r\n drawGridLine(color, 1.0, u_gridProps.z - color.a);\r\n\r\n return color;\r\n`;\r\n\r\nconst drawGridLine = `\r\n bool drawGridLine(inout vec4 color, float mult, float alphaScale) {\r\n vec2 scaledTexCoord = v_texCoord * mult;\r\n vec2 deriv = mult * screenSpaceDeriv(v_texCoord);\r\n if (deriv.x != 0.0 && deriv.y != 0.0) {\r\n vec2 grid = abs(fract(mult * v_texCoord - 0.5) - 0.5) / deriv;\r\n float line = min(grid.x, grid.y);\r\n if (line < 1.0) {\r\n color.a += alphaScale * (1.0 - min(line, 1.0)) / max(1.0, length(deriv));\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n`;\r\n\r\nconst fwidth2dWhenAvailable = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return fwidth(screenXY); }\\n`;\r\nconst fwidth2dWhenNotAvailable = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return vec2(0.25, 0.25); }\\n`;\r\n\r\nconst defaultTransparency = new PlanarGridTransparency();\r\n/** @internal */\r\nexport default function createPlanarGridProgram(context: WebGLContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PlanarGrid, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n addShaderFlags(builder);\r\n\r\n addTranslucency(builder);\r\n if (System.instance.capabilities.isWebGL2) {\r\n frag.addFunction(fwidth2dWhenAvailable);\r\n } else if (System.instance.capabilities.supportsStandardDerivatives) {\r\n frag.addExtension(\"GL_OES_standard_derivatives\");\r\n frag.addFunction(fwidth2dWhenAvailable);\r\n } else {\r\n frag.addFunction(fwidth2dWhenNotAvailable);\r\n }\r\n\r\n if (System.instance.supportsLogZBuffer)\r\n addLogDepth(builder);\r\n\r\n frag.addFunction(drawGridLine);\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n vert.headerComment = `//!V! PlanarGrid`;\r\n frag.headerComment = `//!F! PlanarGrid`;\r\n\r\n vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n uniform.setUniform4fv(planarGrid.uvParams.params);\r\n });\r\n });\r\n frag.addUniform(\"u_gridColor\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_gridColor\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n const color = planarGrid.props.color.colors;\r\n uniform.setUniform3fv([color.r / 255, color.g / 255, color.b / 255]);\r\n });\r\n });\r\n frag.addUniform(\"u_gridProps\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_gridProps\", (uniform, params) => {\r\n const planarGridProps = params.geometry.asPlanarGrid!.props;\r\n const transparency = planarGridProps.transparency ? planarGridProps.transparency : defaultTransparency;\r\n uniform.setUniform4fv([planarGridProps.gridsPerRef, 1.0 - transparency.planeTransparency, 1.0 - transparency.lineTransparency, 1.0 - transparency.refTransparency]);\r\n });\r\n });\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n"]}
|
|
@@ -36,7 +36,7 @@ function createBuilder() {
|
|
|
36
36
|
const vert = builder.vert;
|
|
37
37
|
addLineWeight(vert);
|
|
38
38
|
addViewportTransformation(vert);
|
|
39
|
-
vert.set(
|
|
39
|
+
vert.set(10 /* ComputePosition */, computePosition);
|
|
40
40
|
addModelViewProjectionMatrix(vert);
|
|
41
41
|
return builder;
|
|
42
42
|
}
|
|
@@ -45,7 +45,7 @@ const scratchPointCloudParams = new Float32Array(2);
|
|
|
45
45
|
export function createPointCloudBuilder(classified, featureMode, thematic) {
|
|
46
46
|
const builder = createBuilder();
|
|
47
47
|
builder.addVarying("v_color", 5 /* Vec4 */);
|
|
48
|
-
builder.vert.set(
|
|
48
|
+
builder.vert.set(5 /* ComputeBaseColor */, computeColor);
|
|
49
49
|
const frag = builder.frag;
|
|
50
50
|
frag.set(1 /* ComputeBaseColor */, computeBaseColor);
|
|
51
51
|
frag.set(0 /* CheckForEarlyDiscard */, roundPointDiscard);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointCloud.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PointCloud.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAA2B,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAGhH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACzH,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,YAAY,GAAG,yGAAyG,CAAC;AAC/H,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,MAAM,iBAAiB,GAAG;;;CAGzB,CAAC;AAEF,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AAE/D,MAAM,eAAe,GAAG;;;;;;;;;;CAUvB,CAAC;AAEF,SAAS,aAAa;IACpB,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,gBAAgB,qBAAyB,KAAK,CAAC,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"PointCloud.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PointCloud.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAA2B,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAGhH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACzH,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,YAAY,GAAG,yGAAyG,CAAC;AAC/H,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,MAAM,iBAAiB,GAAG;;;CAGzB,CAAC;AAEF,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AAE/D,MAAM,eAAe,GAAG;;;;;;;;;;CAUvB,CAAC;AAEF,SAAS,aAAa;IACpB,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,gBAAgB,qBAAyB,KAAK,CAAC,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,2BAAwC,eAAe,CAAC,CAAC;IACjE,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAEnC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,uBAAuB,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AACpD,gBAAgB;AAChB,MAAM,UAAU,uBAAuB,CAAC,UAAwB,EAAE,WAAwB,EAAE,QAAoB;IAC9G,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,OAAO,CAAC,UAAU,CAAC,SAAS,eAAoB,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,GAAG,2BAAyC,YAAY,CAAC,CAAC;IAEvE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC,GAAG,+BAA+C,iBAAiB,CAAC,CAAC;IAC1E,IAAI,UAAU,EAAE;QACd,wBAAwB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,GAAG,0BAA0C,yBAAyB,CAAC,CAAC;QAErF,IAAI,iBAAqB,WAAW;YAClC,0BAA0B,CAAC,OAAO,CAAC,CAAC;KACvC;IAED,IAAI,gBAAmB,QAAQ,EAAE;QAC/B,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClC,UAAU,CAAC,OAAO,2BAAiC,IAAI,CAAC,CAAC;KAC1D;IAED,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACxE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAa,CAAC;YACjD,uBAAuB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAM,uCAAuC;YACxG,uBAAuB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC;YACzD,OAAO,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,uBAAuB,CAAC,UAAwB;IAC9D,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,UAAU;QACZ,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { FeatureMode, IsAnimated, IsClassified, IsThematic } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addUniformHiliter } from \"./FeatureSymbology\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addLineWeight, addModelViewProjectionMatrix } from \"./Vertex\";\r\nimport { addViewportTransformation } from \"./Viewport\";\r\nimport { addThematicDisplay } from \"./Thematic\";\r\nimport { addTexture } from \"./Surface\";\r\n\r\nconst computeColor = \"return (u_pointCloudParams.x == 1.0) ? vec4(a_color.z, a_color.y, a_color.x, 1.0) : vec4(a_color, 1.0);\";\r\nconst computeBaseColor = \"return v_color;\";\r\n\r\nconst roundPointDiscard = `\r\n vec2 pointXY = (2.0 * gl_PointCoord - 1.0);\r\n return dot(pointXY, pointXY) > 1.0;\r\n`;\r\n\r\nconst checkForClassifiedDiscard = \"return baseColor.a == 0.0;\";\r\n\r\nconst computePosition = `\r\n gl_PointSize = 1.0;\r\n vec4 pos = MAT_MVP * rawPos;\r\n\r\n if (u_lineWeight < 0.0 && pos.w > 0.0) {\r\n mat4 toView = u_viewportTransformation * MAT_MVP;\r\n float scale = length(toView[0].xyz);\r\n gl_PointSize = clamp (- u_lineWeight * scale / pos.w, 2.0, 20.0);\r\n }\r\n return pos;\r\n`;\r\n\r\nfunction createBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PointCloud, false));\r\n const vert = builder.vert;\r\n addLineWeight(vert);\r\n addViewportTransformation(vert);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n return builder;\r\n}\r\n\r\nconst scratchPointCloudParams = new Float32Array(2);\r\n/** @internal */\r\nexport function createPointCloudBuilder(classified: IsClassified, featureMode: FeatureMode, thematic: IsThematic): ProgramBuilder {\r\n const builder = createBuilder();\r\n\r\n builder.addVarying(\"v_color\", VariableType.Vec4);\r\n builder.vert.set(VertexShaderComponent.ComputeBaseColor, computeColor);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, roundPointDiscard);\r\n if (classified) {\r\n addColorPlanarClassifier(builder, false, thematic);\r\n builder.frag.set(FragmentShaderComponent.CheckForDiscard, checkForClassifiedDiscard);\r\n\r\n if (FeatureMode.None !== featureMode)\r\n addFeaturePlanarClassifier(builder);\r\n }\r\n\r\n if (IsThematic.Yes === thematic) {\r\n addThematicDisplay(builder, true);\r\n addTexture(builder, IsAnimated.No, IsThematic.Yes, true);\r\n }\r\n\r\n builder.vert.addUniform(\"u_pointCloudParams\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudParams\", (uniform, params) => {\r\n const pointCloud = params.geometry.asPointCloud!;\r\n scratchPointCloudParams[0] = pointCloud.colorIsBgr ? 1 : 0; // Volume classifier, by element color.\r\n scratchPointCloudParams[1] = pointCloud.minimumPointSize;\r\n uniform.setUniform2fv(scratchPointCloudParams);\r\n });\r\n });\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointCloudHiliter(classified: IsClassified): ProgramBuilder {\r\n const builder = createBuilder();\r\n addUniformHiliter(builder);\r\n if (classified)\r\n addHilitePlanarClassifier(builder, false);\r\n\r\n return builder;\r\n}\r\n"]}
|
|
@@ -32,7 +32,7 @@ function createBase(instanced) {
|
|
|
32
32
|
const attrMap = AttributeMap.findAttributeMap(3 /* PointString */, 1 /* Yes */ === instanced);
|
|
33
33
|
const builder = new ProgramBuilder(attrMap, instanced ? 3 /* InstancedVertexTable */ : 1 /* VertexTable */);
|
|
34
34
|
const vert = builder.vert;
|
|
35
|
-
vert.set(
|
|
35
|
+
vert.set(10 /* ComputePosition */, computePosition);
|
|
36
36
|
addModelViewProjectionMatrix(vert);
|
|
37
37
|
addLineWeight(vert);
|
|
38
38
|
builder.addInlineComputedVarying("v_roundCorners", 2 /* Float */, computeRoundCorners);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointString.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PointString.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAA2B,cAAc,EAA2D,MAAM,kBAAkB,CAAC;AAGpI,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAEvE,MAAM,eAAe,GAAG;;;;;CAKvB,CAAC;AAEF,uFAAuF;AACvF,4GAA4G;AAC5G,2EAA2E;AAC3E,6BAA6B;AAC7B,MAAM,YAAY,GAAG;;;;CAIpB,CAAC;AAEF,MAAM,mBAAmB,GAAG,oDAAoD,CAAC;AAEjF,SAAS,UAAU,CAAC,SAAsB;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,sBAA0B,gBAAoB,SAAS,CAAC,CAAC;IAEtG,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,8BAAyC,CAAC,oBAA+B,CAAC,CAAC;IAClI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"PointString.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PointString.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAA2B,cAAc,EAA2D,MAAM,kBAAkB,CAAC;AAGpI,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAEvE,MAAM,eAAe,GAAG;;;;;CAKvB,CAAC;AAEF,uFAAuF;AACvF,4GAA4G;AAC5G,2EAA2E;AAC3E,6BAA6B;AAC7B,MAAM,YAAY,GAAG;;;;CAIpB,CAAC;AAEF,MAAM,mBAAmB,GAAG,oDAAoD,CAAC;AAEjF,SAAS,UAAU,CAAC,SAAsB;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,sBAA0B,gBAAoB,SAAS,CAAC,CAAC;IAEtG,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,8BAAyC,CAAC,oBAA+B,CAAC,CAAC;IAClI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,2BAAwC,eAAe,CAAC,CAAC;IACjE,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAEnC,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,OAAO,CAAC,wBAAwB,CAAC,gBAAgB,iBAAsB,mBAAmB,CAAC,CAAC;IAC5F,OAAO,CAAC,IAAI,CAAC,GAAG,+BAA+C,YAAY,CAAC,CAAC;IAE7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,wBAAwB,CAAC,SAAsB;IAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,wBAAwB,CAAC,SAAsB;IAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilderFlags, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsInstanced } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addShaderFlags } from \"./Common\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addLineWeight, addModelViewProjectionMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = `\r\n float lineWeight = computeLineWeight();\r\n lineWeight += 0.5 * float(lineWeight > 4.0); // fudge factor for rounding fat points...\r\n gl_PointSize = lineWeight;\r\n return MAT_MVP * rawPos;\r\n`;\r\n\r\n// gl_PointSize specifies coordinates of this fragment within the point in range [0,1].\r\n// This should be the most precise of the many approaches we've tried, but it still yields some asymmetry...\r\n// Discarding if it meets radius precisely seems to reduce that slightly...\r\n// ###TODO try point sprites?\r\nconst roundCorners = `\r\n const vec2 center = vec2(0.5, 0.5);\r\n vec2 vt = gl_PointCoord - center;\r\n return dot(vt, vt) * v_roundCorners >= 0.25; // meets or exceeds radius of circle\r\n`;\r\n\r\nconst computeRoundCorners = \" v_roundCorners = gl_PointSize > 4.0 ? 1.0 : 0.0;\";\r\n\r\nfunction createBase(instanced: IsInstanced): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.PointString, IsInstanced.Yes === instanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, instanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n builder.addInlineComputedVarying(\"v_roundCorners\", VariableType.Float, computeRoundCorners);\r\n builder.frag.set(FragmentShaderComponent.CheckForEarlyDiscard, roundCorners);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointStringHiliter(instanced: IsInstanced): ProgramBuilder {\r\n const builder = createBase(instanced);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointStringBuilder(instanced: IsInstanced): ProgramBuilder {\r\n const builder = createBase(instanced);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
|
|
@@ -175,7 +175,7 @@ function addCommon(prog) {
|
|
|
175
175
|
addLineWeight(vert);
|
|
176
176
|
vert.addGlobal("miterAdjust", 2 /* Float */, "0.0");
|
|
177
177
|
prog.addVarying("v_eyeSpace", 4 /* Vec3 */);
|
|
178
|
-
vert.set(
|
|
178
|
+
vert.set(10 /* ComputePosition */, computePosition);
|
|
179
179
|
prog.addVarying("v_lnInfo", 5 /* Vec4 */);
|
|
180
180
|
addAdjustWidth(vert);
|
|
181
181
|
vert.addFunction(decodePosition);
|