@itwin/core-frontend 3.0.0-dev.152 → 3.0.0-dev.153
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/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/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":"CopyStencil.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.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 { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from \"@itwin/core-common\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { BoundaryType, ScreenPointsGeometry, SingleTexturedViewportQuadGeometry, VolumeClassifierGeometry } from \"../CachedGeometry\";\r\nimport { FloatRgb, FloatRgba } from \"../FloatRGBA\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { unquantizeVertexPosition } from \"./Vertex\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computehiliteColor = \"return vec4(u_hilite_color.rgb, 1.0);\";\r\n\r\nconst computeSetBlendColor = \"return u_blend_color;\";\r\n\r\nconst computeBlendTextureColor = \"return TEXTURE(u_blendTexture, v_texCoord);\";\r\n\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\n\r\nconst checkDiscardBackgroundByZ = `\r\n if (u_boundaryType == kBoundaryType_Out)\r\n return TEXTURE(u_depthTexture, v_texCoord).r == 1.0;\r\n return false;\r\n`;\r\n\r\nconst depthFromTexture = \"return TEXTURE(u_depthTexture, v_texCoord).r;\";\r\n\r\nconst computePosition = `\r\n gl_PointSize = 1.0; // Need to set the point size since we are drawing points with this.\r\n float z = TEXTURE(u_depthTexture, (rawPos.xy + 1.0) * 0.5).r * 2.0 - 1.0;\r\n return vec4(rawPos.x, rawPos.y, z, 1.0);\r\n`;\r\n\r\nconst unquantizeVertexPosition2d = `\r\nvec4 unquantizeVertexPosition(vec2 pos, vec3 origin, vec3 scale) { return unquantizePosition(vec3(pos.x, pos.y, 0.0), origin, scale); }\r\n`;\r\n\r\nconst scratchColor = FloatRgba.fromColorDef(ColorDef.white);\r\n\r\n/** @internal */\r\nfunction addBoundaryTypeConstants(builder: ShaderBuilder): void {\r\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\r\n builder.addConstant(\"kBoundaryType_Out\", VariableType.Int, \"0\");\r\n builder.addConstant(\"kBoundaryType_In\", VariableType.Int, \"1\");\r\n builder.addConstant(\"kBoundaryType_Selected\", VariableType.Int, \"2\");\r\n}\r\n\r\n/** @internal */\r\nfunction setScratchColor(display: number, hilite: FloatRgb, hAlpha: number): void {\r\n switch (display) {\r\n case SpatialClassifierOutsideDisplay.Dimmed:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.3);\r\n break;\r\n case SpatialClassifierOutsideDisplay.Off:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.8);\r\n break;\r\n case SpatialClassifierOutsideDisplay.On:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n break;\r\n default: // Hilite or ByElementColor (though ByElementColor should never use this shader)\r\n scratchColor.set(hilite.red, hilite.green, hilite.blue, hAlpha);\r\n break;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassColorUsingStencilProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(false);\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computehiliteColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_hilite_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite_color\", (uniform, params) => {\r\n const useLighting = params.geometry.getFlashMode(params);\r\n if (useLighting) {\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n scratchColor.set(hiliteColor.red, hiliteColor.green, hiliteColor.blue, 1.0);\r\n } else\r\n scratchColor.set(1.0, 1.0, 1.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassColorUsingStencil\";\r\n builder.frag.headerComment = \"//!F! VolClassColorUsingStencil\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (!System.instance.capabilities.isWebGL2)\r\n frag.addExtension(\"GL_EXT_frag_depth\");\r\n frag.set(FragmentShaderComponent.FinalizeDepth, depthFromTexture);\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZ\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZ\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZUsingPointsProgram(context: WebGLContext): ShaderProgram {\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.VolClassCopyZ, false);\r\n const builder = new ProgramBuilder(attrMap);\r\n\r\n const vert = builder.vert;\r\n vert.replaceFunction(unquantizeVertexPosition, unquantizeVertexPosition2d);\r\n vert.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as ScreenPointsGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.zTexture, TextureUnit.Zero);\r\n });\r\n });\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZUsingPoints\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZUsingPoints\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassSetBlendProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n addBoundaryTypeConstants(frag);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkDiscardBackgroundByZ);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_boundaryType\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_boundaryType\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n uniform.setUniform1i(geom.boundaryType);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;\r\n switch (geom.boundaryType) {\r\n case BoundaryType.Outside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.outside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Inside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.inside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Selected:\r\n // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);\r\n setScratchColor(SpatialClassifierInsideDisplay.Hilite, hiliteColor, hiliteAlpha); // option for how to display selected classifiers has been removed, always just hilite\r\n break;\r\n }\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassSetBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassSetBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassBlendProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlendTextureColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blendTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_blendTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CopyStencil.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.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 { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from \"@itwin/core-common\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { BoundaryType, ScreenPointsGeometry, SingleTexturedViewportQuadGeometry, VolumeClassifierGeometry } from \"../CachedGeometry\";\r\nimport { FloatRgb, FloatRgba } from \"../FloatRGBA\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computehiliteColor = \"return vec4(u_hilite_color.rgb, 1.0);\";\r\n\r\nconst computeSetBlendColor = \"return u_blend_color;\";\r\n\r\nconst computeBlendTextureColor = \"return TEXTURE(u_blendTexture, v_texCoord);\";\r\n\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\n\r\nconst checkDiscardBackgroundByZ = `\r\n if (u_boundaryType == kBoundaryType_Out)\r\n return TEXTURE(u_depthTexture, v_texCoord).r == 1.0;\r\n return false;\r\n`;\r\n\r\nconst depthFromTexture = \"return TEXTURE(u_depthTexture, v_texCoord).r;\";\r\n\r\nconst computePosition = `\r\n gl_PointSize = 1.0; // Need to set the point size since we are drawing points with this.\r\n float z = TEXTURE(u_depthTexture, (rawPos.xy + 1.0) * 0.5).r * 2.0 - 1.0;\r\n return vec4(rawPos.x, rawPos.y, z, 1.0);\r\n`;\r\n\r\nconst computeQuantizedPosition2d = `return vec3(a_pos.x, a_pos.y, 0.0);`;\r\n\r\nconst scratchColor = FloatRgba.fromColorDef(ColorDef.white);\r\n\r\n/** @internal */\r\nfunction addBoundaryTypeConstants(builder: ShaderBuilder): void {\r\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\r\n builder.addConstant(\"kBoundaryType_Out\", VariableType.Int, \"0\");\r\n builder.addConstant(\"kBoundaryType_In\", VariableType.Int, \"1\");\r\n builder.addConstant(\"kBoundaryType_Selected\", VariableType.Int, \"2\");\r\n}\r\n\r\n/** @internal */\r\nfunction setScratchColor(display: number, hilite: FloatRgb, hAlpha: number): void {\r\n switch (display) {\r\n case SpatialClassifierOutsideDisplay.Dimmed:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.3);\r\n break;\r\n case SpatialClassifierOutsideDisplay.Off:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.8);\r\n break;\r\n case SpatialClassifierOutsideDisplay.On:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n break;\r\n default: // Hilite or ByElementColor (though ByElementColor should never use this shader)\r\n scratchColor.set(hilite.red, hilite.green, hilite.blue, hAlpha);\r\n break;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassColorUsingStencilProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(false);\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computehiliteColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_hilite_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite_color\", (uniform, params) => {\r\n const useLighting = params.geometry.getFlashMode(params);\r\n if (useLighting) {\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n scratchColor.set(hiliteColor.red, hiliteColor.green, hiliteColor.blue, 1.0);\r\n } else\r\n scratchColor.set(1.0, 1.0, 1.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassColorUsingStencil\";\r\n builder.frag.headerComment = \"//!F! VolClassColorUsingStencil\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (!System.instance.capabilities.isWebGL2)\r\n frag.addExtension(\"GL_EXT_frag_depth\");\r\n frag.set(FragmentShaderComponent.FinalizeDepth, depthFromTexture);\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZ\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZ\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZUsingPointsProgram(context: WebGLContext): ShaderProgram {\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.VolClassCopyZ, false);\r\n const builder = new ProgramBuilder(attrMap);\r\n\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, computeQuantizedPosition2d);\r\n vert.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as ScreenPointsGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.zTexture, TextureUnit.Zero);\r\n });\r\n });\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZUsingPoints\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZUsingPoints\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassSetBlendProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n addBoundaryTypeConstants(frag);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkDiscardBackgroundByZ);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_boundaryType\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_boundaryType\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n uniform.setUniform1i(geom.boundaryType);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;\r\n switch (geom.boundaryType) {\r\n case BoundaryType.Outside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.outside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Inside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.inside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Selected:\r\n // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);\r\n setScratchColor(SpatialClassifierInsideDisplay.Hilite, hiliteColor, hiliteAlpha); // option for how to display selected classifiers has been removed, always just hilite\r\n break;\r\n }\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassSetBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassSetBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassBlendProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlendTextureColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blendTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_blendTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
@@ -49,7 +49,7 @@ function createEVSMProgram(context) {
|
|
|
49
49
|
const builder = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(undefined, false));
|
|
50
50
|
const vert = builder.vert;
|
|
51
51
|
const frag = builder.frag;
|
|
52
|
-
vert.set(
|
|
52
|
+
vert.set(10 /* ComputePosition */, computePosition);
|
|
53
53
|
builder.addInlineComputedVarying("v_texCoord", 3 /* Vec2 */, computeTexCoord);
|
|
54
54
|
frag.addUniform("u_depthTexture", 8 /* Sampler2D */, (prog) => {
|
|
55
55
|
prog.addGraphicUniform("u_depthTexture", (uniform, params) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EVSMFromDepth.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EVSMFromDepth.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,kDAA+C;AAE/C,gDAA6C;AAC7C,oDAAmI;AAEnI,wCAA6C;AAC7C,yCAA6C;AAC7C,6DAAkE;AAElE,mGAAmG;AAEnG,4DAA4D;AAC5D,MAAM,eAAe,GAAG,4CAA4C,CAAC;AACrE,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBnB,CAAC;AAEF,gBAAgB;AAChB,SAAgB,iBAAiB,CAAC,OAAqB;IACrD,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"EVSMFromDepth.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EVSMFromDepth.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,kDAA+C;AAE/C,gDAA6C;AAC7C,oDAAmI;AAEnI,wCAA6C;AAC7C,yCAA6C;AAC7C,6DAAkE;AAElE,mGAAmG;AAEnG,4DAA4D;AAC5D,MAAM,eAAe,GAAG,4CAA4C,CAAC;AACrE,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBnB,CAAC;AAEF,gBAAgB;AAChB,SAAgB,iBAAiB,CAAC,OAAqB;IACrD,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAAwC,eAAe,CAAC,CAAC;IACjE,OAAO,CAAC,wBAAwB,CAAC,YAAY,gBAAqB,eAAe,CAAC,CAAC;IAEnF,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAwB,CAAC;YAC7C,yBAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,YAAY,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACxD,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAwB,CAAC;YAC7C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,eAAyB,CAAC;IAE3B,IAAA,oCAAe,EAAC,IAAI,CAAC,CAAC;IAEtB,IAAI,CAAC,WAAW,CAAC,8BAAS,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,2BAA2C,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,0BAAyC,0BAAe,CAAC,CAAC;IAElE,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;IAEnD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAhCD,8CAgCC","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 { AttributeMap } from \"../AttributeMap\";\r\nimport { EVSMGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariablePrecision, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { addEvsmExponent, warpDepth } from \"./SolarShadowMapping\";\r\n\r\n// This shader reads the depth texture, converts it to EVSM values, then averages those down 4 to 1\r\n\r\n// Positions are in NDC [-1..1]. Compute UV params in [0..1]\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\nconst computePosition = \"return rawPos;\";\r\n\r\nconst computeEVSM = `\r\n const float sampleWeight = 0.25;\r\n vec4 average = vec4(0.0);\r\n vec2 tc = v_texCoord - u_stepSize * 0.5; // v_texCoord starts in between the 4 texels\r\n\r\n float depth = TEXTURE(u_depthTexture, tc).r;\r\n vec2 vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.x += u_stepSize.x;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.y += u_stepSize.y;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.x -= u_stepSize.x;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n return average;\r\n`;\r\n\r\n/** @internal */\r\nexport function createEVSMProgram(context: WebGLContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EVSMGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_stepSize\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_stepSize\", (uniform, params) => {\r\n const geom = params.geometry as EVSMGeometry;\r\n uniform.setUniform2fv(geom.stepSize);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n addEvsmExponent(frag);\r\n\r\n frag.addFunction(warpDepth);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeEVSM);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n builder.vert.headerComment = \"//!V! EVSMFromDepth\";\r\n builder.frag.headerComment = \"//!F! EVSMFromDepth\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { ProgramBuilder, VertexShaderBuilder } from "../ShaderBuilder";
|
|
5
5
|
import { IsAnimated, IsInstanced } from "../TechniqueFlags";
|
|
6
|
+
export declare type EdgeBuilderType = "SegmentEdge" | "Silhouette" | "IndexedEdge";
|
|
6
7
|
/** @internal */
|
|
7
8
|
export declare function addEdgeContrast(vert: VertexShaderBuilder): void;
|
|
8
9
|
/** @internal */
|
|
9
|
-
export declare function createEdgeBuilder(
|
|
10
|
+
export declare function createEdgeBuilder(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder;
|
|
10
11
|
//# sourceMappingURL=Edge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Edge.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"Edge.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAoC,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AACzJ,OAAO,EAAE,UAAU,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAcxE,oBAAY,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AAoL3E,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAY/D;AAyFD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,cAAc,CAOvH"}
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.createEdgeBuilder = exports.addEdgeContrast = void 0;
|
|
11
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
11
12
|
const AttributeMap_1 = require("../AttributeMap");
|
|
12
13
|
const ShaderBuilder_1 = require("../ShaderBuilder");
|
|
14
|
+
const RenderFlags_1 = require("../RenderFlags");
|
|
13
15
|
const Animation_1 = require("./Animation");
|
|
14
16
|
const Color_1 = require("./Color");
|
|
15
17
|
const Common_1 = require("./Common");
|
|
@@ -18,21 +20,87 @@ const Polyline_1 = require("./Polyline");
|
|
|
18
20
|
const Surface_1 = require("./Surface");
|
|
19
21
|
const Vertex_1 = require("./Vertex");
|
|
20
22
|
const Viewport_1 = require("./Viewport");
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
+
const LookupTable_1 = require("./LookupTable");
|
|
24
|
+
const FeatureSymbology_1 = require("./FeatureSymbology");
|
|
25
|
+
const computeOtherPos = `
|
|
23
26
|
vec2 tc = computeLUTCoords(g_otherIndex, u_vertParams.xy, g_vert_center, u_vertParams.z);
|
|
24
27
|
vec4 enc1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
|
|
25
28
|
tc.x += g_vert_stepX;
|
|
26
29
|
vec4 enc2 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
|
|
27
30
|
vec3 qpos = vec3(decodeUInt16(enc1.xy), decodeUInt16(enc1.zw), decodeUInt16(enc2.xy));
|
|
28
31
|
g_otherPos = unquantizePosition(qpos, u_qOrigin, u_qScale);
|
|
32
|
+
`;
|
|
33
|
+
const decodeEndPointAndQuadIndices = `
|
|
34
|
+
g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);
|
|
35
|
+
${computeOtherPos}
|
|
29
36
|
g_quadIndex = a_endPointAndQuadIndices.w;
|
|
30
37
|
`;
|
|
31
38
|
const animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
// a_pos is a 24-bit index into edge lookup table.
|
|
40
|
+
// First six bytes of lookup table entry are the pair of 24-bit indices identifying the endpoints of the edge in the vertex table.
|
|
41
|
+
// Return the 24-bit index of "this" vertex in the vertex table encoded in a vec3.
|
|
42
|
+
const computeIndexedQuantizedPosition = `
|
|
43
|
+
g_vertexId = gl_VertexID % 6;
|
|
44
|
+
if (g_vertexId == 0)
|
|
45
|
+
g_quadIndex = 0.0;
|
|
46
|
+
else if (g_vertexId == 2 || g_vertexId == 3)
|
|
47
|
+
g_quadIndex = 1.0;
|
|
48
|
+
else if (g_vertexId == 1 || g_vertexId == 4)
|
|
49
|
+
g_quadIndex = 2.0;
|
|
50
|
+
else
|
|
51
|
+
g_quadIndex = 3.0;
|
|
52
|
+
|
|
53
|
+
// The following formula computes the texel index, but suffers from precision issues for large edge indices, so we must compute using integers instead.
|
|
54
|
+
// float edgeBaseIndex = u_edgeParams.z * 1.5 + u_edgeParams.w * 0.25 + (edgeIndex - u_edgeParams.z) * 2.5);
|
|
55
|
+
|
|
56
|
+
float fEdgeIndex = decodeUInt24(a_pos);
|
|
57
|
+
g_isSilhouette = fEdgeIndex >= u_edgeParams.z;
|
|
58
|
+
int edgeIndex = int(fEdgeIndex);
|
|
59
|
+
bool isEven = 0 == (edgeIndex & 1);
|
|
60
|
+
float edgeBaseIndex;
|
|
61
|
+
if (!g_isSilhouette) {
|
|
62
|
+
edgeBaseIndex = float(edgeIndex + (edgeIndex / 2));
|
|
63
|
+
} else {
|
|
64
|
+
// If both pad and edgeIndex produce a remainder (0.5 for each - pad is a multiple of 2), we must add one to the index to account for it.
|
|
65
|
+
int shift = isEven ? 0 : 1;
|
|
66
|
+
int pad = int(u_edgeParams.w);
|
|
67
|
+
if (0 != (pad % 4)) {
|
|
68
|
+
isEven = !isEven;
|
|
69
|
+
shift = shift + 1;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// s = num segments p = num padding bytes i = edge index
|
|
73
|
+
// texel index = 1.5s + .25p + 2.5(i - s) = 1.5s + .25p + 2.5i - 2.5s = 2.5i + .25p - s = i + i + i/2 + p/4 - s
|
|
74
|
+
edgeBaseIndex = float(edgeIndex + edgeIndex + edgeIndex / 2 + pad / 4 - int(u_edgeParams.z) + shift / 2);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
vec2 tc = compute_edge_coords(floor(edgeBaseIndex));
|
|
78
|
+
vec4 s0 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);
|
|
79
|
+
tc.x += g_edge_stepX;
|
|
80
|
+
vec4 s1 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);
|
|
81
|
+
tc.x += g_edge_stepX;
|
|
82
|
+
vec4 s2 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);
|
|
35
83
|
|
|
84
|
+
vec3 i0 = isEven ? s0.xyz : vec3(s0.zw, s1.x);
|
|
85
|
+
vec3 i1 = isEven ? vec3(s0.w, s1.xy) : s1.yzw;
|
|
86
|
+
g_otherIndexIndex = g_quadIndex < 2.0 ? i1 : i0;
|
|
87
|
+
|
|
88
|
+
g_normals = isEven ? vec4(s1.zw, s2.xy) : s2;
|
|
89
|
+
|
|
90
|
+
return g_quadIndex < 2.0 ? i0 : i1;
|
|
91
|
+
`;
|
|
92
|
+
const initializeIndexed = `
|
|
93
|
+
g_otherIndex = decodeUInt24(g_otherIndexIndex);
|
|
94
|
+
${computeOtherPos}
|
|
95
|
+
`;
|
|
96
|
+
// IndexedEdgeGeometry.renderOrder returns Edge or PlanarEdge. Adjust if silhouette for output to pick buffers.
|
|
97
|
+
const computeIndexedRenderOrder = `
|
|
98
|
+
if (g_isSilhouette)
|
|
99
|
+
v_renderOrder = kRenderOrder_Edge == u_renderOrder ? kRenderOrder_Silhouette : kRenderOrder_PlanarSilhouette;
|
|
100
|
+
else
|
|
101
|
+
v_renderOrder = u_renderOrder;
|
|
102
|
+
`;
|
|
103
|
+
const checkForSilhouetteDiscard = `
|
|
36
104
|
if (kFrustumType_Perspective != u_frustum.z) {
|
|
37
105
|
float perpTol = 4.75e-6;
|
|
38
106
|
return (n0.z * n1.z > perpTol); // orthographic.
|
|
@@ -56,6 +124,19 @@ const checkForSilhouetteDiscard = `
|
|
|
56
124
|
return dot0 * dot1 > perpTol;
|
|
57
125
|
}
|
|
58
126
|
`;
|
|
127
|
+
const checkForSilhouetteDiscardNonIndexed = `
|
|
128
|
+
vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);
|
|
129
|
+
vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);
|
|
130
|
+
${checkForSilhouetteDiscard}
|
|
131
|
+
`;
|
|
132
|
+
const checkForSilhouetteDiscardIndexed = `
|
|
133
|
+
if (!g_isSilhouette)
|
|
134
|
+
return false;
|
|
135
|
+
|
|
136
|
+
vec3 n0 = MAT_NORM * octDecodeNormal(g_normals.xy);
|
|
137
|
+
vec3 n1 = MAT_NORM * octDecodeNormal(g_normals.zw);
|
|
138
|
+
${checkForSilhouetteDiscard}
|
|
139
|
+
`;
|
|
59
140
|
const computePosition = `
|
|
60
141
|
v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false
|
|
61
142
|
vec4 other = g_otherPos;
|
|
@@ -118,12 +199,16 @@ function addEdgeContrast(vert) {
|
|
|
118
199
|
uniform.setUniform1f(bgi);
|
|
119
200
|
});
|
|
120
201
|
});
|
|
121
|
-
vert.set(
|
|
202
|
+
vert.set(8 /* AdjustContrast */, adjustContrast);
|
|
122
203
|
}
|
|
123
204
|
exports.addEdgeContrast = addEdgeContrast;
|
|
124
|
-
|
|
205
|
+
const edgeLutParams = new Float32Array(4);
|
|
206
|
+
function createBase(type, instanced, isAnimated) {
|
|
125
207
|
const isInstanced = 1 /* Yes */ === instanced;
|
|
126
|
-
const
|
|
208
|
+
const isSilhouette = "Silhouette" === type;
|
|
209
|
+
const isIndexed = "IndexedEdge" === type;
|
|
210
|
+
const techId = isSilhouette ? 5 /* SilhouetteEdge */ : (isIndexed ? 6 /* IndexedEdge */ : 4 /* Edge */);
|
|
211
|
+
const attrMap = AttributeMap_1.AttributeMap.findAttributeMap(techId, isInstanced);
|
|
127
212
|
const builder = new ShaderBuilder_1.ProgramBuilder(attrMap, isInstanced ? 3 /* InstancedVertexTable */ : 1 /* VertexTable */);
|
|
128
213
|
const vert = builder.vert;
|
|
129
214
|
vert.addGlobal("g_otherPos", 5 /* Vec4 */);
|
|
@@ -131,7 +216,40 @@ function createBase(isSilhouette, instanced, isAnimated) {
|
|
|
131
216
|
vert.addGlobal("g_windowPos", 5 /* Vec4 */);
|
|
132
217
|
vert.addGlobal("g_windowDir", 3 /* Vec2 */);
|
|
133
218
|
vert.addGlobal("g_otherIndex", 2 /* Float */);
|
|
134
|
-
|
|
219
|
+
if (isIndexed) {
|
|
220
|
+
vert.addGlobal("g_vertexId", 1 /* Int */);
|
|
221
|
+
vert.addGlobal("g_otherIndexIndex", 4 /* Vec3 */);
|
|
222
|
+
vert.addGlobal("g_isSilhouette", 0 /* Boolean */, "false");
|
|
223
|
+
vert.addGlobal("g_normals", 5 /* Vec4 */);
|
|
224
|
+
const initLut = (0, LookupTable_1.addLookupTable)(vert, "edge", "1.0");
|
|
225
|
+
vert.addUniform("u_edgeLUT", 8 /* Sampler2D */, (prog) => {
|
|
226
|
+
prog.addGraphicUniform("u_edgeLUT", (uniform, params) => {
|
|
227
|
+
const edge = params.geometry.asIndexedEdge;
|
|
228
|
+
(0, core_bentley_1.assert)(undefined !== edge);
|
|
229
|
+
edge.edgeLut.texture.bindSampler(uniform, RenderFlags_1.TextureUnit.EdgeLUT);
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
vert.addUniform("u_edgeParams", 5 /* Vec4 */, (prog) => {
|
|
233
|
+
prog.addGraphicUniform("u_edgeParams", (uniform, params) => {
|
|
234
|
+
const edge = params.geometry.asIndexedEdge;
|
|
235
|
+
(0, core_bentley_1.assert)(undefined !== edge);
|
|
236
|
+
edgeLutParams[0] = edge.edgeLut.texture.width;
|
|
237
|
+
edgeLutParams[1] = edge.edgeLut.texture.height;
|
|
238
|
+
edgeLutParams[2] = edge.edgeLut.numSegments;
|
|
239
|
+
edgeLutParams[3] = edge.edgeLut.silhouettePadding;
|
|
240
|
+
uniform.setUniform4fv(edgeLutParams);
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
vert.set(0 /* ComputeQuantizedPosition */, `${initLut}\n\n${computeIndexedQuantizedPosition}`);
|
|
244
|
+
vert.addInitializer(initializeIndexed);
|
|
245
|
+
(0, FeatureSymbology_1.addRenderOrder)(vert);
|
|
246
|
+
(0, FeatureSymbology_1.addRenderOrderConstants)(vert);
|
|
247
|
+
builder.addInlineComputedVarying("v_renderOrder", 2 /* Float */, computeIndexedRenderOrder);
|
|
248
|
+
builder.frag.set(20 /* OverrideRenderOrder */, "return v_renderOrder;");
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
vert.addInitializer(decodeEndPointAndQuadIndices);
|
|
252
|
+
}
|
|
135
253
|
if (isAnimated) {
|
|
136
254
|
(0, Animation_1.addAnimation)(vert, false, 0 /* No */);
|
|
137
255
|
vert.addInitializer(animateEndPoint);
|
|
@@ -142,23 +260,23 @@ function createBase(isSilhouette, instanced, isAnimated) {
|
|
|
142
260
|
(0, Vertex_1.addProjectionMatrix)(vert);
|
|
143
261
|
(0, Polyline_1.addLineCode)(builder, lineCodeArgs);
|
|
144
262
|
builder.addVarying("v_eyeSpace", 4 /* Vec3 */);
|
|
145
|
-
vert.set(
|
|
263
|
+
vert.set(10 /* ComputePosition */, computePosition);
|
|
146
264
|
builder.addVarying("v_lnInfo", 5 /* Vec4 */);
|
|
147
265
|
(0, Polyline_1.addAdjustWidth)(vert);
|
|
148
266
|
(0, Viewport_1.addViewport)(vert);
|
|
149
267
|
(0, Vertex_1.addModelViewMatrix)(vert);
|
|
150
268
|
(0, Vertex_1.addLineWeight)(vert);
|
|
151
|
-
if (isSilhouette) {
|
|
269
|
+
if (isSilhouette || isIndexed) {
|
|
152
270
|
(0, Vertex_1.addNormalMatrix)(vert, instanced);
|
|
153
271
|
(0, Common_1.addFrustum)(builder);
|
|
154
|
-
vert.set(1 /* CheckForEarlyDiscard */, checkForSilhouetteDiscard);
|
|
155
272
|
vert.addFunction(Surface_1.octDecodeNormal);
|
|
273
|
+
vert.set(2 /* CheckForEarlyDiscard */, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);
|
|
156
274
|
}
|
|
157
275
|
return builder;
|
|
158
276
|
}
|
|
159
277
|
/** @internal */
|
|
160
|
-
function createEdgeBuilder(
|
|
161
|
-
const builder = createBase(
|
|
278
|
+
function createEdgeBuilder(type, instanced, isAnimated) {
|
|
279
|
+
const builder = createBase(type, instanced, isAnimated);
|
|
162
280
|
(0, Common_1.addShaderFlags)(builder);
|
|
163
281
|
(0, Color_1.addColor)(builder);
|
|
164
282
|
addEdgeContrast(builder.vert);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Edge.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { ProgramBuilder, ShaderBuilderFlags, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsAnimated, IsInstanced, IsThematic } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { addColor } from \"./Color\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addAdjustWidth, addLineCode } from \"./Polyline\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { addLineWeight, addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\n\r\nconst decodeEndPointAndQuadIndices = `\r\n g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);\r\n vec2 tc = computeLUTCoords(g_otherIndex, u_vertParams.xy, g_vert_center, u_vertParams.z);\r\n vec4 enc1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 enc2 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(enc1.xy), decodeUInt16(enc1.zw), decodeUInt16(enc2.xy));\r\n g_otherPos = unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n g_quadIndex = a_endPointAndQuadIndices.w;\r\n`;\r\nconst animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;\r\n\r\nconst checkForSilhouetteDiscard = `\r\n vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);\r\n\r\n if (kFrustumType_Perspective != u_frustum.z) {\r\n float perpTol = 4.75e-6;\r\n return (n0.z * n1.z > perpTol); // orthographic.\r\n } else {\r\n float perpTol = 2.5e-4;\r\n vec4 viewPos = MAT_MV * rawPos; // perspective\r\n vec3 toEye = normalize(viewPos.xyz);\r\n float dot0 = dot(n0, toEye);\r\n float dot1 = dot(n1, toEye);\r\n\r\n if (dot0 * dot1 > perpTol)\r\n return true;\r\n\r\n // Need to discard if either is non-silhouette.\r\n vec4 otherPosition = g_otherPos;\r\n viewPos = MAT_MV * otherPosition;\r\n toEye = normalize(viewPos.xyz);\r\n dot0 = dot(n0, toEye);\r\n dot1 = dot(n1, toEye);\r\n\r\n return dot0 * dot1 > perpTol;\r\n }\r\n`;\r\n\r\nconst computePosition = `\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n vec4 other = g_otherPos;\r\n float miterAdjust = 0.0;\r\n float weight = computeLineWeight();\r\n\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, other, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0) // Clipped out.\r\n return g_windowPos;\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projOther = modelToWindowCoordinates(other, rawPos, otherPos, otherMvPos);\r\n\r\n g_windowDir = projOther.xy - g_windowPos.xy;\r\n\r\n adjustWidth(weight, g_windowDir, g_windowPos.xy);\r\n g_windowDir = normalize(g_windowDir);\r\n\r\n vec2 perp = vec2(-g_windowDir.y, g_windowDir.x);\r\n float perpDist = weight / 2.0;\r\n float alongDist = 0.0;\r\n\r\n perpDist *= sign(0.5 - float(g_quadIndex == 0.0 || g_quadIndex == 3.0)); // negate for index 0 and 3\r\n alongDist += distance(rawPos, other) * float(g_quadIndex >= 2.0); // index 2 and 3 correspond to 'far' endpoint of segment\r\n\r\n pos.x += perp.x * perpDist * 2.0 * pos.w / u_viewport.x;\r\n pos.y += perp.y * perpDist * 2.0 * pos.w / u_viewport.y;\r\n\r\n lineCodeEyePos = .5 * (rawPos + other);\r\n lineCodeDist = alongDist;\r\n\r\n return pos;\r\n`;\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, 0.0\";\r\n\r\nconst adjustContrast = `\r\n float bgi = u_bgIntensity;\r\n if (bgi < 0.0)\r\n return baseColor;\r\n\r\n float s;\r\n float rgbi = baseColor.r * 0.3 + baseColor.g * 0.59 + baseColor.b * 0.11;\r\n if (rgbi > 0.81)\r\n s = bgi > 0.57 ? 0.0 : 0.699;\r\n else if (rgbi > 0.57)\r\n s = bgi > 0.57 ? 0.0 : 1.0;\r\n else\r\n s = bgi < 0.81 ? 1.0 : 0.699;\r\n\r\n return vec4(vec3(s), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEdgeContrast(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_bgIntensity\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_bgIntensity\", (uniform, params) => {\r\n let bgi = -1;\r\n if (params.geometry.isEdge && params.target.currentEdgeSettings.wantContrastingColor(params.target.currentViewFlags.renderMode))\r\n bgi = params.target.uniforms.style.backgroundIntensity;\r\n\r\n uniform.setUniform1f(bgi);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.AdjustContrast, adjustContrast);\r\n}\r\n\r\nfunction createBase(isSilhouette: boolean, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder {\r\n const isInstanced = IsInstanced.Yes === instanced;\r\n const attrMap = AttributeMap.findAttributeMap(isSilhouette ? TechniqueId.SilhouetteEdge : TechniqueId.Edge, isInstanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, isInstanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n const vert = builder.vert;\r\n\r\n vert.addGlobal(\"g_otherPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_quadIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addGlobal(\"g_otherIndex\", VariableType.Float);\r\n\r\n vert.addInitializer(decodeEndPointAndQuadIndices);\r\n if (isAnimated) {\r\n addAnimation(vert, false, IsThematic.No);\r\n vert.addInitializer(animateEndPoint);\r\n }\r\n\r\n vert.addGlobal(\"lineCodeEyePos\", VariableType.Vec4);\r\n vert.addGlobal(\"lineCodeDist\", VariableType.Float, \"0.0\");\r\n\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation, and sets g_eyeSpace\r\n addProjectionMatrix(vert);\r\n addLineCode(builder, lineCodeArgs);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addViewport(vert);\r\n addModelViewMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n\r\n if (isSilhouette) {\r\n addNormalMatrix(vert, instanced);\r\n addFrustum(builder);\r\n vert.set(VertexShaderComponent.CheckForEarlyDiscard, checkForSilhouetteDiscard);\r\n vert.addFunction(octDecodeNormal);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createEdgeBuilder(isSilhouette: boolean, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder {\r\n const builder = createBase(isSilhouette, instanced, isAnimated);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Edge.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilderFlags, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsAnimated, IsInstanced, IsThematic } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { addColor } from \"./Color\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addAdjustWidth, addLineCode } from \"./Polyline\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { addLineWeight, addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderOrder, addRenderOrderConstants } from \"./FeatureSymbology\";\r\n\r\nexport type EdgeBuilderType = \"SegmentEdge\" | \"Silhouette\" | \"IndexedEdge\";\r\n\r\nconst computeOtherPos = `\r\n vec2 tc = computeLUTCoords(g_otherIndex, u_vertParams.xy, g_vert_center, u_vertParams.z);\r\n vec4 enc1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 enc2 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(enc1.xy), decodeUInt16(enc1.zw), decodeUInt16(enc2.xy));\r\n g_otherPos = unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n`;\r\n\r\nconst decodeEndPointAndQuadIndices = `\r\n g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);\r\n${computeOtherPos}\r\n g_quadIndex = a_endPointAndQuadIndices.w;\r\n`;\r\n\r\nconst animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;\r\n\r\n// a_pos is a 24-bit index into edge lookup table.\r\n// First six bytes of lookup table entry are the pair of 24-bit indices identifying the endpoints of the edge in the vertex table.\r\n// Return the 24-bit index of \"this\" vertex in the vertex table encoded in a vec3.\r\nconst computeIndexedQuantizedPosition = `\r\n g_vertexId = gl_VertexID % 6;\r\n if (g_vertexId == 0)\r\n g_quadIndex = 0.0;\r\n else if (g_vertexId == 2 || g_vertexId == 3)\r\n g_quadIndex = 1.0;\r\n else if (g_vertexId == 1 || g_vertexId == 4)\r\n g_quadIndex = 2.0;\r\n else\r\n g_quadIndex = 3.0;\r\n\r\n // The following formula computes the texel index, but suffers from precision issues for large edge indices, so we must compute using integers instead.\r\n // float edgeBaseIndex = u_edgeParams.z * 1.5 + u_edgeParams.w * 0.25 + (edgeIndex - u_edgeParams.z) * 2.5);\r\n\r\n float fEdgeIndex = decodeUInt24(a_pos);\r\n g_isSilhouette = fEdgeIndex >= u_edgeParams.z;\r\n int edgeIndex = int(fEdgeIndex);\r\n bool isEven = 0 == (edgeIndex & 1);\r\n float edgeBaseIndex;\r\n if (!g_isSilhouette) {\r\n edgeBaseIndex = float(edgeIndex + (edgeIndex / 2));\r\n } else {\r\n // If both pad and edgeIndex produce a remainder (0.5 for each - pad is a multiple of 2), we must add one to the index to account for it.\r\n int shift = isEven ? 0 : 1;\r\n int pad = int(u_edgeParams.w);\r\n if (0 != (pad % 4)) {\r\n isEven = !isEven;\r\n shift = shift + 1;\r\n }\r\n\r\n // s = num segments p = num padding bytes i = edge index\r\n // texel index = 1.5s + .25p + 2.5(i - s) = 1.5s + .25p + 2.5i - 2.5s = 2.5i + .25p - s = i + i + i/2 + p/4 - s\r\n edgeBaseIndex = float(edgeIndex + edgeIndex + edgeIndex / 2 + pad / 4 - int(u_edgeParams.z) + shift / 2);\r\n }\r\n\r\n vec2 tc = compute_edge_coords(floor(edgeBaseIndex));\r\n vec4 s0 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s1 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s2 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n\r\n vec3 i0 = isEven ? s0.xyz : vec3(s0.zw, s1.x);\r\n vec3 i1 = isEven ? vec3(s0.w, s1.xy) : s1.yzw;\r\n g_otherIndexIndex = g_quadIndex < 2.0 ? i1 : i0;\r\n\r\n g_normals = isEven ? vec4(s1.zw, s2.xy) : s2;\r\n\r\n return g_quadIndex < 2.0 ? i0 : i1;\r\n`;\r\n\r\nconst initializeIndexed = `\r\n g_otherIndex = decodeUInt24(g_otherIndexIndex);\r\n${computeOtherPos}\r\n`;\r\n\r\n// IndexedEdgeGeometry.renderOrder returns Edge or PlanarEdge. Adjust if silhouette for output to pick buffers.\r\nconst computeIndexedRenderOrder = `\r\n if (g_isSilhouette)\r\n v_renderOrder = kRenderOrder_Edge == u_renderOrder ? kRenderOrder_Silhouette : kRenderOrder_PlanarSilhouette;\r\n else\r\n v_renderOrder = u_renderOrder;\r\n`;\r\n\r\nconst checkForSilhouetteDiscard = `\r\n if (kFrustumType_Perspective != u_frustum.z) {\r\n float perpTol = 4.75e-6;\r\n return (n0.z * n1.z > perpTol); // orthographic.\r\n } else {\r\n float perpTol = 2.5e-4;\r\n vec4 viewPos = MAT_MV * rawPos; // perspective\r\n vec3 toEye = normalize(viewPos.xyz);\r\n float dot0 = dot(n0, toEye);\r\n float dot1 = dot(n1, toEye);\r\n\r\n if (dot0 * dot1 > perpTol)\r\n return true;\r\n\r\n // Need to discard if either is non-silhouette.\r\n vec4 otherPosition = g_otherPos;\r\n viewPos = MAT_MV * otherPosition;\r\n toEye = normalize(viewPos.xyz);\r\n dot0 = dot(n0, toEye);\r\n dot1 = dot(n1, toEye);\r\n\r\n return dot0 * dot1 > perpTol;\r\n }\r\n`;\r\n\r\nconst checkForSilhouetteDiscardNonIndexed = `\r\n vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst checkForSilhouetteDiscardIndexed = `\r\n if (!g_isSilhouette)\r\n return false;\r\n\r\n vec3 n0 = MAT_NORM * octDecodeNormal(g_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(g_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst computePosition = `\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n vec4 other = g_otherPos;\r\n float miterAdjust = 0.0;\r\n float weight = computeLineWeight();\r\n\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, other, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0) // Clipped out.\r\n return g_windowPos;\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projOther = modelToWindowCoordinates(other, rawPos, otherPos, otherMvPos);\r\n\r\n g_windowDir = projOther.xy - g_windowPos.xy;\r\n\r\n adjustWidth(weight, g_windowDir, g_windowPos.xy);\r\n g_windowDir = normalize(g_windowDir);\r\n\r\n vec2 perp = vec2(-g_windowDir.y, g_windowDir.x);\r\n float perpDist = weight / 2.0;\r\n float alongDist = 0.0;\r\n\r\n perpDist *= sign(0.5 - float(g_quadIndex == 0.0 || g_quadIndex == 3.0)); // negate for index 0 and 3\r\n alongDist += distance(rawPos, other) * float(g_quadIndex >= 2.0); // index 2 and 3 correspond to 'far' endpoint of segment\r\n\r\n pos.x += perp.x * perpDist * 2.0 * pos.w / u_viewport.x;\r\n pos.y += perp.y * perpDist * 2.0 * pos.w / u_viewport.y;\r\n\r\n lineCodeEyePos = .5 * (rawPos + other);\r\n lineCodeDist = alongDist;\r\n\r\n return pos;\r\n`;\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, 0.0\";\r\n\r\nconst adjustContrast = `\r\n float bgi = u_bgIntensity;\r\n if (bgi < 0.0)\r\n return baseColor;\r\n\r\n float s;\r\n float rgbi = baseColor.r * 0.3 + baseColor.g * 0.59 + baseColor.b * 0.11;\r\n if (rgbi > 0.81)\r\n s = bgi > 0.57 ? 0.0 : 0.699;\r\n else if (rgbi > 0.57)\r\n s = bgi > 0.57 ? 0.0 : 1.0;\r\n else\r\n s = bgi < 0.81 ? 1.0 : 0.699;\r\n\r\n return vec4(vec3(s), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEdgeContrast(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_bgIntensity\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_bgIntensity\", (uniform, params) => {\r\n let bgi = -1;\r\n if (params.geometry.isEdge && params.target.currentEdgeSettings.wantContrastingColor(params.target.currentViewFlags.renderMode))\r\n bgi = params.target.uniforms.style.backgroundIntensity;\r\n\r\n uniform.setUniform1f(bgi);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.AdjustContrast, adjustContrast);\r\n}\r\n\r\nconst edgeLutParams = new Float32Array(4);\r\n\r\nfunction createBase(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder {\r\n const isInstanced = IsInstanced.Yes === instanced;\r\n const isSilhouette = \"Silhouette\" === type;\r\n const isIndexed = \"IndexedEdge\" === type;\r\n const techId = isSilhouette ? TechniqueId.SilhouetteEdge : (isIndexed ? TechniqueId.IndexedEdge : TechniqueId.Edge);\r\n const attrMap = AttributeMap.findAttributeMap(techId, isInstanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, isInstanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n const vert = builder.vert;\r\n\r\n vert.addGlobal(\"g_otherPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_quadIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addGlobal(\"g_otherIndex\", VariableType.Float);\r\n\r\n if (isIndexed) {\r\n vert.addGlobal(\"g_vertexId\", VariableType.Int);\r\n vert.addGlobal(\"g_otherIndexIndex\", VariableType.Vec3);\r\n vert.addGlobal(\"g_isSilhouette\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"g_normals\", VariableType.Vec4);\r\n\r\n const initLut = addLookupTable(vert, \"edge\", \"1.0\");\r\n vert.addUniform(\"u_edgeLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeLUT\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edge.edgeLut.texture.bindSampler(uniform, TextureUnit.EdgeLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_edgeParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeParams\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edgeLutParams[0] = edge.edgeLut.texture.width;\r\n edgeLutParams[1] = edge.edgeLut.texture.height;\r\n edgeLutParams[2] = edge.edgeLut.numSegments;\r\n edgeLutParams[3] = edge.edgeLut.silhouettePadding;\r\n uniform.setUniform4fv(edgeLutParams);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, `${initLut}\\n\\n${computeIndexedQuantizedPosition}`);\r\n vert.addInitializer(initializeIndexed);\r\n\r\n addRenderOrder(vert);\r\n addRenderOrderConstants(vert);\r\n builder.addInlineComputedVarying(\"v_renderOrder\", VariableType.Float, computeIndexedRenderOrder);\r\n builder.frag.set(FragmentShaderComponent.OverrideRenderOrder, \"return v_renderOrder;\");\r\n } else {\r\n vert.addInitializer(decodeEndPointAndQuadIndices);\r\n }\r\n\r\n if (isAnimated) {\r\n addAnimation(vert, false, IsThematic.No);\r\n vert.addInitializer(animateEndPoint);\r\n }\r\n\r\n vert.addGlobal(\"lineCodeEyePos\", VariableType.Vec4);\r\n vert.addGlobal(\"lineCodeDist\", VariableType.Float, \"0.0\");\r\n\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation, and sets g_eyeSpace\r\n addProjectionMatrix(vert);\r\n addLineCode(builder, lineCodeArgs);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addViewport(vert);\r\n addModelViewMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n\r\n if (isSilhouette || isIndexed) {\r\n addNormalMatrix(vert, instanced);\r\n addFrustum(builder);\r\n vert.addFunction(octDecodeNormal);\r\n vert.set(VertexShaderComponent.CheckForEarlyDiscard, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createEdgeBuilder(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder {\r\n const builder = createBase(type, instanced, isAnimated);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAmPD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA4DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAmPD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA4DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;AAwBD,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,QAiB3E;AASD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,QA4D/E;AA4DD,eAAO,MAAM,eAAe,sOAIzB,CAAC;AAwCJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAIpE;AAoBD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAoBnH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAG/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CA0ClG"}
|
|
@@ -173,7 +173,7 @@ function addCommon(builder, mode, opts, wantGlobalOvrFlags = true) {
|
|
|
173
173
|
if (!haveOverrides) {
|
|
174
174
|
// For pick output we must compute g_featureIndex...
|
|
175
175
|
if (1 /* Pick */ === mode)
|
|
176
|
-
vert.set(
|
|
176
|
+
vert.set(3 /* ComputeFeatureOverrides */, computeFeatureIndex(vert));
|
|
177
177
|
return true;
|
|
178
178
|
}
|
|
179
179
|
const wantWeight = 0 /* None */ !== (opts & 1 /* Weight */);
|
|
@@ -238,7 +238,7 @@ function addCommon(builder, mode, opts, wantGlobalOvrFlags = true) {
|
|
|
238
238
|
(0, RenderPass_1.addRenderPass)(vert);
|
|
239
239
|
(0, Vertex_1.addAlpha)(vert);
|
|
240
240
|
addTransparencyDiscardFlags(vert);
|
|
241
|
-
vert.set(
|
|
241
|
+
vert.set(9 /* CheckForDiscard */, checkVertexDiscard);
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
return true;
|
|
@@ -314,8 +314,8 @@ function addHiliter(builder, wantWeight = false) {
|
|
|
314
314
|
return;
|
|
315
315
|
builder.addVarying("v_feature_hilited", 2 /* Float */);
|
|
316
316
|
addEmphasisFlags(builder.vert);
|
|
317
|
-
builder.vert.set(
|
|
318
|
-
builder.vert.set(
|
|
317
|
+
builder.vert.set(3 /* ComputeFeatureOverrides */, wantWeight ? computeHiliteOverridesWithWeight : computeHiliteOverrides);
|
|
318
|
+
builder.vert.set(9 /* CheckForDiscard */, checkVertexHiliteDiscard);
|
|
319
319
|
addEmphasisFlags(builder.frag);
|
|
320
320
|
(0, Common_1.addExtractNthBit)(builder.frag);
|
|
321
321
|
builder.frag.set(1 /* ComputeBaseColor */, computeHiliteColor);
|
|
@@ -414,7 +414,10 @@ const checkForEarlySurfaceDiscardWithFeatureID = `
|
|
|
414
414
|
function addRenderOrderConstants(builder) {
|
|
415
415
|
builder.addConstant("kRenderOrder_BlankingRegion", 2 /* Float */, 2 /* BlankingRegion */.toFixed(1));
|
|
416
416
|
builder.addConstant("kRenderOrder_Linear", 2 /* Float */, 5 /* Linear */.toFixed(1));
|
|
417
|
+
builder.addConstant("kRenderOrder_Edge", 2 /* Float */, 6 /* Edge */.toFixed(1));
|
|
418
|
+
builder.addConstant("kRenderOrder_PlanarEdge", 2 /* Float */, 14 /* PlanarEdge */.toFixed(1));
|
|
417
419
|
builder.addConstant("kRenderOrder_Silhouette", 2 /* Float */, 7 /* Silhouette */.toFixed(1));
|
|
420
|
+
builder.addConstant("kRenderOrder_PlanarSilhouette", 2 /* Float */, 15 /* PlanarSilhouette */.toFixed(1));
|
|
418
421
|
builder.addConstant("kRenderOrder_UnlitSurface", 2 /* Float */, 3 /* UnlitSurface */.toFixed(1));
|
|
419
422
|
builder.addConstant("kRenderOrder_LitSurface", 2 /* Float */, 4 /* LitSurface */.toFixed(1));
|
|
420
423
|
builder.addConstant("kRenderOrder_PlanarUnlitSurface", 2 /* Float */, 11 /* PlanarUnlitSurface */.toFixed(1));
|
|
@@ -485,7 +488,7 @@ function addSurfaceDiscard(builder, flags) {
|
|
|
485
488
|
const computeIdInFrag = !flags.isTranslucent && 0 !== flags.isClassified && 2 /* Overrides */ === feat;
|
|
486
489
|
const frag = builder.frag;
|
|
487
490
|
const vert = builder.vert;
|
|
488
|
-
vert.set(
|
|
491
|
+
vert.set(11 /* CheckForLateDiscard */, isBelowTransparencyThreshold);
|
|
489
492
|
vert.addUniform("u_transparencyThreshold", 2 /* Float */, (prog) => {
|
|
490
493
|
prog.addGraphicUniform("u_transparencyThreshold", (uniform, params) => {
|
|
491
494
|
uniform.setUniform1f(params.target.currentTransparencyThreshold);
|
|
@@ -662,8 +665,8 @@ function addFeatureSymbology(builder, feat, opts) {
|
|
|
662
665
|
vert.addGlobal("feature_viewIndependentTransparency", 0 /* Boolean */, "false");
|
|
663
666
|
addEmphasisFlags(vert);
|
|
664
667
|
vert.addGlobal("use_material", 0 /* Boolean */, "true");
|
|
665
|
-
vert.set(
|
|
666
|
-
vert.set(
|
|
668
|
+
vert.set(3 /* ComputeFeatureOverrides */, computeFeatureOverrides);
|
|
669
|
+
vert.set(7 /* ApplyFeatureColor */, applyFeatureColor);
|
|
667
670
|
addApplyFlash(builder.frag);
|
|
668
671
|
}
|
|
669
672
|
exports.addFeatureSymbology = addFeatureSymbology;
|
|
@@ -703,15 +706,15 @@ function addUniformFeatureSymbology(builder, addFeatureColor) {
|
|
|
703
706
|
params.target.uniforms.batch.bindUniformTransparencyOverride(uniform);
|
|
704
707
|
});
|
|
705
708
|
});
|
|
706
|
-
builder.vert.set(
|
|
709
|
+
builder.vert.set(7 /* ApplyFeatureColor */, applyFeatureColor);
|
|
707
710
|
(0, Vertex_1.addAlpha)(builder.vert);
|
|
708
711
|
addMaxAlpha(builder.vert);
|
|
709
712
|
(0, RenderPass_1.addRenderPass)(builder.vert);
|
|
710
713
|
addTransparencyDiscardFlags(builder.vert);
|
|
711
|
-
builder.vert.set(
|
|
714
|
+
builder.vert.set(9 /* CheckForDiscard */, checkVertexDiscard);
|
|
712
715
|
}
|
|
713
716
|
else {
|
|
714
|
-
builder.vert.set(
|
|
717
|
+
builder.vert.set(9 /* CheckForDiscard */, "return feature_invisible;");
|
|
715
718
|
}
|
|
716
719
|
// Non-Locatable... Discard if picking
|
|
717
720
|
builder.vert.addUniform("feature_invisible", 0 /* Boolean */, (prog) => {
|