@itwin/core-frontend 3.0.0-dev.148 → 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.
Files changed (259) hide show
  1. package/lib/cjs/Marker.d.ts +9 -2
  2. package/lib/cjs/Marker.d.ts.map +1 -1
  3. package/lib/cjs/Marker.js +33 -5
  4. package/lib/cjs/Marker.js.map +1 -1
  5. package/lib/cjs/RealityDataSource.js +1 -12
  6. package/lib/cjs/RealityDataSource.js.map +1 -1
  7. package/lib/cjs/render/RenderMemory.d.ts +21 -15
  8. package/lib/cjs/render/RenderMemory.d.ts.map +1 -1
  9. package/lib/cjs/render/RenderMemory.js +21 -15
  10. package/lib/cjs/render/RenderMemory.js.map +1 -1
  11. package/lib/cjs/render/RenderSystem.d.ts +2 -0
  12. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  13. package/lib/cjs/render/RenderSystem.js +2 -0
  14. package/lib/cjs/render/RenderSystem.js.map +1 -1
  15. package/lib/cjs/render/primitives/EdgeParams.d.ts +35 -1
  16. package/lib/cjs/render/primitives/EdgeParams.d.ts.map +1 -1
  17. package/lib/cjs/render/primitives/EdgeParams.js +114 -10
  18. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  19. package/lib/cjs/render/primitives/VertexTable.d.ts +1 -0
  20. package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
  21. package/lib/cjs/render/primitives/VertexTable.js +6 -1
  22. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  23. package/lib/cjs/render/webgl/AttributeMap.js +5 -5
  24. package/lib/cjs/render/webgl/CachedGeometry.d.ts +2 -0
  25. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  26. package/lib/cjs/render/webgl/CachedGeometry.js +14 -13
  27. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  28. package/lib/cjs/render/webgl/DrawCommand.js +2 -2
  29. package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts +51 -0
  30. package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -0
  31. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +90 -0
  32. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -0
  33. package/lib/cjs/render/webgl/InstancedGeometry.d.ts +1 -0
  34. package/lib/cjs/render/webgl/InstancedGeometry.d.ts.map +1 -1
  35. package/lib/cjs/render/webgl/InstancedGeometry.js +1 -0
  36. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  37. package/lib/cjs/render/webgl/Mesh.d.ts +2 -0
  38. package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
  39. package/lib/cjs/render/webgl/Mesh.js +7 -1
  40. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  41. package/lib/cjs/render/webgl/PlanarClassifier.js +1 -1
  42. package/lib/cjs/render/webgl/PlanarGrid.js +2 -2
  43. package/lib/cjs/render/webgl/RealityMesh.js +5 -5
  44. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  45. package/lib/cjs/render/webgl/RenderFlags.d.ts +4 -1
  46. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  47. package/lib/cjs/render/webgl/RenderFlags.js +6 -1
  48. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  49. package/lib/cjs/render/webgl/SceneCompositor.js +6 -6
  50. package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
  51. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +16 -14
  52. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/ShaderBuilder.js +19 -15
  54. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  55. package/lib/cjs/render/webgl/System.d.ts +2 -0
  56. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  57. package/lib/cjs/render/webgl/System.js +2 -0
  58. package/lib/cjs/render/webgl/System.js.map +1 -1
  59. package/lib/cjs/render/webgl/Target.js +1 -1
  60. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  61. package/lib/cjs/render/webgl/Technique.js +72 -57
  62. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  63. package/lib/cjs/render/webgl/TechniqueId.d.ts +29 -28
  64. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  65. package/lib/cjs/render/webgl/TechniqueId.js +7 -7
  66. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  67. package/lib/cjs/render/webgl/glsl/Animation.js +1 -1
  68. package/lib/cjs/render/webgl/glsl/Color.js +1 -1
  69. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  70. package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -7
  71. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  72. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -1
  73. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  74. package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -1
  75. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  76. package/lib/cjs/render/webgl/glsl/Edge.js +132 -14
  77. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  78. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  79. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +13 -10
  80. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  81. package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
  82. package/lib/cjs/render/webgl/glsl/Fragment.js +9 -1
  83. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  84. package/lib/cjs/render/webgl/glsl/LookupTable.d.ts +4 -2
  85. package/lib/cjs/render/webgl/glsl/LookupTable.d.ts.map +1 -1
  86. package/lib/cjs/render/webgl/glsl/LookupTable.js +7 -3
  87. package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
  88. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -2
  89. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  90. package/lib/cjs/render/webgl/glsl/PointCloud.js +2 -2
  91. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  92. package/lib/cjs/render/webgl/glsl/PointString.js +1 -1
  93. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  94. package/lib/cjs/render/webgl/glsl/Polyline.js +1 -1
  95. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  96. package/lib/cjs/render/webgl/glsl/RealityMesh.js +4 -4
  97. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  98. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
  99. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  100. package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -1
  101. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  102. package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -1
  103. package/lib/cjs/render/webgl/glsl/Surface.js +3 -3
  104. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  105. package/lib/cjs/render/webgl/glsl/Vertex.js +1 -1
  106. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  107. package/lib/cjs/render/webgl/glsl/ViewportQuad.js +1 -1
  108. package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
  109. package/lib/cjs/tile/IModelTile.d.ts.map +1 -1
  110. package/lib/cjs/tile/IModelTile.js +1 -0
  111. package/lib/cjs/tile/IModelTile.js.map +1 -1
  112. package/lib/cjs/tile/ImdlReader.d.ts +1 -0
  113. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  114. package/lib/cjs/tile/ImdlReader.js +21 -1
  115. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  116. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  117. package/lib/cjs/tile/PrimaryTileTree.js +4 -3
  118. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  119. package/lib/cjs/tile/TileAdmin.d.ts +9 -0
  120. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  121. package/lib/cjs/tile/TileAdmin.js +18 -13
  122. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  123. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  124. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +4 -3
  125. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  126. package/lib/cjs/webgl.d.ts +1 -0
  127. package/lib/cjs/webgl.d.ts.map +1 -1
  128. package/lib/cjs/webgl.js +1 -0
  129. package/lib/cjs/webgl.js.map +1 -1
  130. package/lib/esm/Marker.d.ts +9 -2
  131. package/lib/esm/Marker.d.ts.map +1 -1
  132. package/lib/esm/Marker.js +34 -6
  133. package/lib/esm/Marker.js.map +1 -1
  134. package/lib/esm/RealityDataSource.js +2 -13
  135. package/lib/esm/RealityDataSource.js.map +1 -1
  136. package/lib/esm/render/RenderMemory.d.ts +21 -15
  137. package/lib/esm/render/RenderMemory.d.ts.map +1 -1
  138. package/lib/esm/render/RenderMemory.js +21 -15
  139. package/lib/esm/render/RenderMemory.js.map +1 -1
  140. package/lib/esm/render/RenderSystem.d.ts +2 -0
  141. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  142. package/lib/esm/render/RenderSystem.js +2 -0
  143. package/lib/esm/render/RenderSystem.js.map +1 -1
  144. package/lib/esm/render/primitives/EdgeParams.d.ts +35 -1
  145. package/lib/esm/render/primitives/EdgeParams.d.ts.map +1 -1
  146. package/lib/esm/render/primitives/EdgeParams.js +114 -10
  147. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  148. package/lib/esm/render/primitives/VertexTable.d.ts +1 -0
  149. package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
  150. package/lib/esm/render/primitives/VertexTable.js +6 -1
  151. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  152. package/lib/esm/render/webgl/AttributeMap.js +5 -5
  153. package/lib/esm/render/webgl/CachedGeometry.d.ts +2 -0
  154. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  155. package/lib/esm/render/webgl/CachedGeometry.js +14 -13
  156. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  157. package/lib/esm/render/webgl/DrawCommand.js +2 -2
  158. package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts +51 -0
  159. package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -0
  160. package/lib/esm/render/webgl/IndexedEdgeGeometry.js +85 -0
  161. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -0
  162. package/lib/esm/render/webgl/InstancedGeometry.d.ts +1 -0
  163. package/lib/esm/render/webgl/InstancedGeometry.d.ts.map +1 -1
  164. package/lib/esm/render/webgl/InstancedGeometry.js +1 -0
  165. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  166. package/lib/esm/render/webgl/Mesh.d.ts +2 -0
  167. package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
  168. package/lib/esm/render/webgl/Mesh.js +7 -1
  169. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  170. package/lib/esm/render/webgl/PlanarClassifier.js +1 -1
  171. package/lib/esm/render/webgl/PlanarGrid.js +2 -2
  172. package/lib/esm/render/webgl/RealityMesh.js +5 -5
  173. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  174. package/lib/esm/render/webgl/RenderFlags.d.ts +4 -1
  175. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  176. package/lib/esm/render/webgl/RenderFlags.js +6 -1
  177. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  178. package/lib/esm/render/webgl/SceneCompositor.js +6 -6
  179. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  180. package/lib/esm/render/webgl/ShaderBuilder.d.ts +16 -14
  181. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  182. package/lib/esm/render/webgl/ShaderBuilder.js +19 -15
  183. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  184. package/lib/esm/render/webgl/System.d.ts +2 -0
  185. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  186. package/lib/esm/render/webgl/System.js +2 -0
  187. package/lib/esm/render/webgl/System.js.map +1 -1
  188. package/lib/esm/render/webgl/Target.js +1 -1
  189. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  190. package/lib/esm/render/webgl/Technique.js +72 -57
  191. package/lib/esm/render/webgl/Technique.js.map +1 -1
  192. package/lib/esm/render/webgl/TechniqueId.d.ts +29 -28
  193. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  194. package/lib/esm/render/webgl/TechniqueId.js +7 -7
  195. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  196. package/lib/esm/render/webgl/glsl/Animation.js +1 -1
  197. package/lib/esm/render/webgl/glsl/Color.js +1 -1
  198. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  199. package/lib/esm/render/webgl/glsl/CopyStencil.js +4 -7
  200. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  201. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +1 -1
  202. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  203. package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -1
  204. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  205. package/lib/esm/render/webgl/glsl/Edge.js +132 -14
  206. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  207. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  208. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +13 -10
  209. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  210. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  211. package/lib/esm/render/webgl/glsl/Fragment.js +9 -1
  212. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  213. package/lib/esm/render/webgl/glsl/LookupTable.d.ts +4 -2
  214. package/lib/esm/render/webgl/glsl/LookupTable.d.ts.map +1 -1
  215. package/lib/esm/render/webgl/glsl/LookupTable.js +7 -3
  216. package/lib/esm/render/webgl/glsl/LookupTable.js.map +1 -1
  217. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -2
  218. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  219. package/lib/esm/render/webgl/glsl/PointCloud.js +2 -2
  220. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  221. package/lib/esm/render/webgl/glsl/PointString.js +1 -1
  222. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  223. package/lib/esm/render/webgl/glsl/Polyline.js +1 -1
  224. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  225. package/lib/esm/render/webgl/glsl/RealityMesh.js +4 -4
  226. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  227. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
  228. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  229. package/lib/esm/render/webgl/glsl/SkyBox.js +1 -1
  230. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  231. package/lib/esm/render/webgl/glsl/SkySphere.js +1 -1
  232. package/lib/esm/render/webgl/glsl/Surface.js +3 -3
  233. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  234. package/lib/esm/render/webgl/glsl/Vertex.js +1 -1
  235. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  236. package/lib/esm/render/webgl/glsl/ViewportQuad.js +1 -1
  237. package/lib/esm/render/webgl/glsl/ViewportQuad.js.map +1 -1
  238. package/lib/esm/tile/IModelTile.d.ts.map +1 -1
  239. package/lib/esm/tile/IModelTile.js +1 -0
  240. package/lib/esm/tile/IModelTile.js.map +1 -1
  241. package/lib/esm/tile/ImdlReader.d.ts +1 -0
  242. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  243. package/lib/esm/tile/ImdlReader.js +21 -1
  244. package/lib/esm/tile/ImdlReader.js.map +1 -1
  245. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  246. package/lib/esm/tile/PrimaryTileTree.js +5 -4
  247. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  248. package/lib/esm/tile/TileAdmin.d.ts +9 -0
  249. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  250. package/lib/esm/tile/TileAdmin.js +19 -14
  251. package/lib/esm/tile/TileAdmin.js.map +1 -1
  252. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  253. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +4 -3
  254. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  255. package/lib/esm/webgl.d.ts +1 -0
  256. package/lib/esm/webgl.d.ts.map +1 -1
  257. package/lib/esm/webgl.js +1 -0
  258. package/lib/esm/webgl.js.map +1 -1
  259. 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(9 /* ComputePosition */, computePosition);
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,0BAAwC,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"]}
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(isSilhouette: boolean, instanced: IsInstanced, isAnimated: IsAnimated): ProgramBuilder;
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;AAGH,OAAO,EAAE,cAAc,EAAoC,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AAChI,OAAO,EAAE,UAAU,EAAE,WAAW,EAAc,MAAM,mBAAmB,CAAC;AAyGxE,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAY/D;AA+CD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAG,cAAc,CAOvH"}
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 decodeEndPointAndQuadIndices = `
22
- g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);
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
- const checkForSilhouetteDiscard = `
33
- vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);
34
- vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);
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(7 /* AdjustContrast */, adjustContrast);
202
+ vert.set(8 /* AdjustContrast */, adjustContrast);
122
203
  }
123
204
  exports.addEdgeContrast = addEdgeContrast;
124
- function createBase(isSilhouette, instanced, isAnimated) {
205
+ const edgeLutParams = new Float32Array(4);
206
+ function createBase(type, instanced, isAnimated) {
125
207
  const isInstanced = 1 /* Yes */ === instanced;
126
- const attrMap = AttributeMap_1.AttributeMap.findAttributeMap(isSilhouette ? 5 /* SilhouetteEdge */ : 4 /* Edge */, isInstanced);
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
- vert.addInitializer(decodeEndPointAndQuadIndices);
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(9 /* ComputePosition */, computePosition);
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(isSilhouette, instanced, isAnimated) {
161
- const builder = createBase(isSilhouette, instanced, isAnimated);
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,QAU7D;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"}
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(2 /* ComputeFeatureOverrides */, computeFeatureIndex(vert));
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(8 /* CheckForDiscard */, checkVertexDiscard);
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(2 /* ComputeFeatureOverrides */, wantWeight ? computeHiliteOverridesWithWeight : computeHiliteOverrides);
318
- builder.vert.set(8 /* CheckForDiscard */, checkVertexHiliteDiscard);
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(10 /* CheckForLateDiscard */, isBelowTransparencyThreshold);
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(2 /* ComputeFeatureOverrides */, computeFeatureOverrides);
666
- vert.set(6 /* ApplyFeatureColor */, applyFeatureColor);
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(6 /* ApplyFeatureColor */, applyFeatureColor);
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(8 /* CheckForDiscard */, checkVertexDiscard);
714
+ builder.vert.set(9 /* CheckForDiscard */, checkVertexDiscard);
712
715
  }
713
716
  else {
714
- builder.vert.set(8 /* CheckForDiscard */, "return feature_invisible;");
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) => {