@itwin/core-frontend 3.0.0-dev.149 → 3.0.0-dev.154

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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":"Polyline.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Polyline.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 { TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilderFlags, VariableType, VertexShaderBuilder, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { IsInstanced } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addEdgeContrast } from \"./Edge\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addLineCode as addLineCodeUniform, addLineWeight, addModelViewMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\n\r\nconst checkForDiscard = \"return discardByLineCode;\";\r\n\r\nconst applyLineCode = `\r\n if (v_texc.x >= 0.0) { // v_texc = (-1,-1) for solid lines - don't bother with any of this\r\n vec4 texColor = TEXTURE(u_lineCodeTexture, v_texc);\r\n discardByLineCode = (0.0 == texColor.r);\r\n }\r\n\r\n if (v_lnInfo.w > 0.5) { // line needs pixel trimming\r\n // calculate pixel distance from pixel center to expected line center, opposite dir from major\r\n vec2 dxy = gl_FragCoord.xy - v_lnInfo.xy;\r\n if (v_lnInfo.w < 1.5) // not x-major\r\n dxy = dxy.yx;\r\n\r\n float dist = v_lnInfo.z * dxy.x - dxy.y;\r\n float distA = abs(dist);\r\n if (distA > 0.5 || (distA == 0.5 && dist < 0.0))\r\n discardByLineCode = true; // borrow this flag to force discard\r\n }\r\n\r\n return baseColor;\r\n`;\r\n\r\nconst computeTextureCoord = `\r\nvec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust) {\r\n vec2 texc;\r\n float lineCode = computeLineCode();\r\n if (0.0 == lineCode) {\r\n // Solid line - tell frag shader not to bother.\r\n texc = vec2(-1.0, -1.0);\r\n } else {\r\n const float imagesPerPixel = 1.0/32.0;\r\n const float textureCoordinateBase = 8192.0; // Temp workardound for clipping problem in perspective views (negative values don't seem to interpolate correctly).\r\n\r\n if (abs(windowDir.x) > abs(windowDir.y))\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.x + adjust * windowDir.x);\r\n else\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.y + adjust * windowDir.y);\r\n\r\n const float numLineCodes = 16.0; // NB: Actually only 10, but texture is 16px tall because it needs to be a power of 2.\r\n const float rowsPerCode = 1.0;\r\n const float numRows = numLineCodes*rowsPerCode;\r\n const float centerY = 0.5/numRows;\r\n const float stepY = rowsPerCode/numRows;\r\n texc.y = stepY * lineCode + centerY;\r\n }\r\n\r\n return texc;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const adjustWidth = `\r\nvoid adjustWidth(inout float width, vec2 d2, vec2 org) {\r\n if (u_aaSamples > 1) {\r\n if (width < 5.0)\r\n width += (5.0 - width) * 0.125;\r\n return;\r\n }\r\n\r\n // calculate slope based width adjustment for non-AA lines, widths 1 to 4\r\n vec2 d2A = abs(d2);\r\n const float s_myFltEpsilon = 0.0001; // limit test resolution to 4 digits in case 24 bit (s16e7) is used in hardware\r\n if (d2A.y > s_myFltEpsilon && width < 4.5) {\r\n float len = length(d2A);\r\n float tan = d2A.x / d2A.y;\r\n\r\n if (width < 1.5) { // width 1\r\n if (tan <= 1.0)\r\n width = d2A.y;\r\n else\r\n width = d2A.x;\r\n // width 1 requires additional adjustment plus trimming in frag shader using v_lnInfo\r\n width *= 1.01;\r\n v_lnInfo.xy = org;\r\n v_lnInfo.w = 1.0; // set flag to do trimming\r\n // set slope in v_lnInfo.z\r\n if (d2A.x - d2A.y > s_myFltEpsilon) {\r\n v_lnInfo.z = d2.y / d2.x;\r\n v_lnInfo.w += 2.0; // add in x-major flag\r\n } else\r\n v_lnInfo.z = d2.x / d2.y;\r\n\r\n } else if (width < 2.5) { // width 2\r\n if (tan <= 0.5)\r\n width = 2.0 * d2A.y;\r\n else\r\n width = (d2A.y + 2.0 * d2A.x);\r\n\r\n } else if (width < 3.5) { // width 3\r\n if (tan <= 1.0)\r\n width = (3.0 * d2A.y + d2A.x);\r\n else\r\n width = (d2A.y + 3.0 * d2A.x);\r\n\r\n } else { // if (width < 4.5) // width 4\r\n if (tan <= 0.5)\r\n width = (4.0 * d2A.y + d2A.x);\r\n else if (tan <= 2.0)\r\n width = (3.0 * d2A.y + 3.0 * d2A.x);\r\n else\r\n width = (d2A.y + 4.0 * d2A.x);\r\n }\r\n width /= len;\r\n }\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addAdjustWidth(vert: VertexShaderBuilder) {\r\n vert.addUniform(\"u_aaSamples\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_aaSamples\", (attr, params) => {\r\n const numSamples = System.instance.frameBufferStack.currentFbMultisampled ? params.target.compositor.antialiasSamples : 1;\r\n attr.setUniform1i(numSamples);\r\n });\r\n });\r\n vert.addFunction(adjustWidth);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCodeTexture(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_lineCodeTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_lineCodeTexture\", (uniform) => {\r\n const lct = System.instance.lineCodeTexture;\r\n assert(undefined !== lct);\r\n if (undefined !== lct)\r\n lct.bindSampler(uniform, TextureUnit.LineCode);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(prog: ProgramBuilder, args: string) {\r\n const vert = prog.vert;\r\n const frag = prog.frag;\r\n\r\n addLineCodeUniform(vert);\r\n\r\n const funcCall: string = `computeLineCodeTextureCoords(${args})`;\r\n\r\n prog.addFunctionComputedVaryingWithArgs(\"v_texc\", VariableType.Vec2, funcCall, computeTextureCoord);\r\n\r\n addFrustum(prog);\r\n addLineCodeTexture(prog.frag);\r\n\r\n frag.set(FragmentShaderComponent.FinalizeBaseColor, applyLineCode);\r\n frag.set(FragmentShaderComponent.CheckForDiscard, checkForDiscard);\r\n frag.addGlobal(\"discardByLineCode\", VariableType.Boolean, \"false\");\r\n}\r\n\r\nfunction polylineAddLineCode(prog: ProgramBuilder) {\r\n addLineCode(prog, lineCodeArgs);\r\n addModelViewMatrix(prog.vert);\r\n}\r\n\r\nfunction addCommon(prog: ProgramBuilder) {\r\n const vert = prog.vert;\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n addViewport(vert);\r\n\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_prevPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_nextPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addInitializer(decodeAdjacentPositions);\r\n\r\n vert.addFunction(unquantize2d);\r\n\r\n addLineWeight(vert);\r\n\r\n vert.addGlobal(\"miterAdjust\", VariableType.Float, \"0.0\");\r\n prog.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n vert.addFunction(decodePosition);\r\n}\r\n\r\nconst decodePosition = `\r\nvec4 decodePosition(vec3 baseIndex) {\r\n float index = decodeUInt24(baseIndex);\r\n vec2 tc = compute_vert_coords(index);\r\n vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n}\r\n`;\r\n\r\nconst decodeAdjacentPositions = `\r\n g_prevPos = decodePosition(a_prevIndex);\r\n g_nextPos = decodePosition(a_nextIndex);\r\n`;\r\n\r\nconst computePosition = `\r\n const float kNone = 0.0,\r\n kSquare = 1.0*3.0,\r\n kMiter = 2.0*3.0,\r\n kMiterInsideOnly = 3.0*3.0,\r\n kJointBase = 4.0*3.0,\r\n kNegatePerp = 8.0*3.0,\r\n kNegateAlong = 16.0*3.0,\r\n kNoneAdjWt = 32.0*3.0;\r\n\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n\r\n vec4 next = g_nextPos;\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, next, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0)\r\n return g_windowPos;\r\n\r\n float param = a_param;\r\n float weight = computeLineWeight();\r\n float scale = 1.0, directionScale = 1.0;\r\n\r\n if (param >= kNoneAdjWt)\r\n param -= kNoneAdjWt;\r\n\r\n if (param >= kNegateAlong) {\r\n directionScale = -directionScale;\r\n param -= kNegateAlong;\r\n }\r\n\r\n if (param >= kNegatePerp) {\r\n scale = -1.0;\r\n param -= kNegatePerp;\r\n }\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projNext = modelToWindowCoordinates(next, rawPos, otherPos, otherMvPos);\r\n g_windowDir = projNext.xy - g_windowPos.xy;\r\n\r\n if (param < kJointBase) {\r\n vec2 dir = (directionScale > 0.0) ? g_windowDir : -g_windowDir;\r\n vec2 pos = (directionScale > 0.0) ? g_windowPos.xy : projNext.xy;\r\n adjustWidth(weight, dir, pos);\r\n }\r\n\r\n if (kNone != param) {\r\n vec2 delta = vec2(0.0);\r\n vec4 prev = g_prevPos;\r\n vec4 projPrev = modelToWindowCoordinates(prev, rawPos, otherPos, otherMvPos);\r\n vec2 prevDir = g_windowPos.xy - projPrev.xy;\r\n float thisLength = sqrt(g_windowDir.x * g_windowDir.x + g_windowDir.y * g_windowDir.y);\r\n const float s_minNormalizeLength = 1.0E-5; // avoid normalizing zero length vectors.\r\n float dist = weight / 2.0;\r\n\r\n if (thisLength > s_minNormalizeLength) {\r\n g_windowDir /= thisLength;\r\n\r\n float prevLength = sqrt(prevDir.x * prevDir.x + prevDir.y * prevDir.y);\r\n\r\n if (prevLength > s_minNormalizeLength) {\r\n prevDir /= prevLength;\r\n const float s_minParallelDot= -.9999, s_maxParallelDot = .9999;\r\n float prevNextDot = dot(prevDir, g_windowDir);\r\n\r\n if (prevNextDot < s_minParallelDot || prevNextDot > s_maxParallelDot) // No miter if parallel or antiparallel.\r\n param = kSquare;\r\n } else\r\n param = kSquare;\r\n } else {\r\n g_windowDir = -normalize(prevDir);\r\n param = kSquare;\r\n }\r\n\r\n vec2 perp = scale * vec2(-g_windowDir.y, g_windowDir.x);\r\n\r\n if (param == kSquare) {\r\n delta = perp;\r\n } else {\r\n vec2 bisector = normalize(prevDir - g_windowDir);\r\n float dotP = dot (bisector, perp);\r\n\r\n if (dotP != 0.0) { // Should never occur - but avoid divide by zero.\r\n const float maxMiter = 3.0;\r\n float miterDistance = 1.0/dotP;\r\n\r\n if (param == kMiter) { // Straight miter.\r\n delta = (abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else if (param == kMiterInsideOnly) { // Miter at inside, square at outside (to make room for joint).\r\n delta = (dotP > 0.0 || abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else {\r\n const float jointTriangleCount = 3.0;\r\n float ratio = (param - kJointBase) / jointTriangleCount; // 3 triangles per half-joint as defined in Graphics.cpp\r\n delta = normalize((1.0 - ratio) * bisector + (dotP < 0.0 ? -ratio : ratio) * perp); // Miter/Straight combination.\r\n }\r\n }\r\n }\r\n\r\n miterAdjust = dot(g_windowDir, delta) * dist; // Not actually used for hilite shader but meh.\r\n pos.x += dist * delta.x * 2.0 * pos.w / u_viewport.x;\r\n pos.y += dist * delta.y * 2.0 * pos.w / u_viewport.y;\r\n }\r\n\r\n return pos;\r\n`;\r\n\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, miterAdjust\";\r\n\r\n/** @internal */\r\nexport function createPolylineBuilder(instanced: IsInstanced): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.Polyline, IsInstanced.Yes === instanced), instanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n addShaderFlags(builder);\r\n\r\n addCommon(builder);\r\n\r\n polylineAddLineCode(builder);\r\n\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineHiliter(instanced: IsInstanced): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.Polyline, IsInstanced.Yes === instanced), instanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n addCommon(builder);\r\n addFrustum(builder);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Polyline.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 { TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilderFlags, VariableType, VertexShaderBuilder, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { IsInstanced } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addEdgeContrast } from \"./Edge\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addLineCode as addLineCodeUniform, addLineWeight, addModelViewMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\n\r\nconst checkForDiscard = \"return discardByLineCode;\";\r\n\r\nconst applyLineCode = `\r\n if (v_texc.x >= 0.0) { // v_texc = (-1,-1) for solid lines - don't bother with any of this\r\n vec4 texColor = TEXTURE(u_lineCodeTexture, v_texc);\r\n discardByLineCode = (0.0 == texColor.r);\r\n }\r\n\r\n if (v_lnInfo.w > 0.5) { // line needs pixel trimming\r\n // calculate pixel distance from pixel center to expected line center, opposite dir from major\r\n vec2 dxy = gl_FragCoord.xy - v_lnInfo.xy;\r\n if (v_lnInfo.w < 1.5) // not x-major\r\n dxy = dxy.yx;\r\n\r\n float dist = v_lnInfo.z * dxy.x - dxy.y;\r\n float distA = abs(dist);\r\n if (distA > 0.5 || (distA == 0.5 && dist < 0.0))\r\n discardByLineCode = true; // borrow this flag to force discard\r\n }\r\n\r\n return baseColor;\r\n`;\r\n\r\nconst computeTextureCoord = `\r\nvec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust) {\r\n vec2 texc;\r\n float lineCode = computeLineCode();\r\n if (0.0 == lineCode) {\r\n // Solid line - tell frag shader not to bother.\r\n texc = vec2(-1.0, -1.0);\r\n } else {\r\n const float imagesPerPixel = 1.0/32.0;\r\n const float textureCoordinateBase = 8192.0; // Temp workardound for clipping problem in perspective views (negative values don't seem to interpolate correctly).\r\n\r\n if (abs(windowDir.x) > abs(windowDir.y))\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.x + adjust * windowDir.x);\r\n else\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.y + adjust * windowDir.y);\r\n\r\n const float numLineCodes = 16.0; // NB: Actually only 10, but texture is 16px tall because it needs to be a power of 2.\r\n const float rowsPerCode = 1.0;\r\n const float numRows = numLineCodes*rowsPerCode;\r\n const float centerY = 0.5/numRows;\r\n const float stepY = rowsPerCode/numRows;\r\n texc.y = stepY * lineCode + centerY;\r\n }\r\n\r\n return texc;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const adjustWidth = `\r\nvoid adjustWidth(inout float width, vec2 d2, vec2 org) {\r\n if (u_aaSamples > 1) {\r\n if (width < 5.0)\r\n width += (5.0 - width) * 0.125;\r\n return;\r\n }\r\n\r\n // calculate slope based width adjustment for non-AA lines, widths 1 to 4\r\n vec2 d2A = abs(d2);\r\n const float s_myFltEpsilon = 0.0001; // limit test resolution to 4 digits in case 24 bit (s16e7) is used in hardware\r\n if (d2A.y > s_myFltEpsilon && width < 4.5) {\r\n float len = length(d2A);\r\n float tan = d2A.x / d2A.y;\r\n\r\n if (width < 1.5) { // width 1\r\n if (tan <= 1.0)\r\n width = d2A.y;\r\n else\r\n width = d2A.x;\r\n // width 1 requires additional adjustment plus trimming in frag shader using v_lnInfo\r\n width *= 1.01;\r\n v_lnInfo.xy = org;\r\n v_lnInfo.w = 1.0; // set flag to do trimming\r\n // set slope in v_lnInfo.z\r\n if (d2A.x - d2A.y > s_myFltEpsilon) {\r\n v_lnInfo.z = d2.y / d2.x;\r\n v_lnInfo.w += 2.0; // add in x-major flag\r\n } else\r\n v_lnInfo.z = d2.x / d2.y;\r\n\r\n } else if (width < 2.5) { // width 2\r\n if (tan <= 0.5)\r\n width = 2.0 * d2A.y;\r\n else\r\n width = (d2A.y + 2.0 * d2A.x);\r\n\r\n } else if (width < 3.5) { // width 3\r\n if (tan <= 1.0)\r\n width = (3.0 * d2A.y + d2A.x);\r\n else\r\n width = (d2A.y + 3.0 * d2A.x);\r\n\r\n } else { // if (width < 4.5) // width 4\r\n if (tan <= 0.5)\r\n width = (4.0 * d2A.y + d2A.x);\r\n else if (tan <= 2.0)\r\n width = (3.0 * d2A.y + 3.0 * d2A.x);\r\n else\r\n width = (d2A.y + 4.0 * d2A.x);\r\n }\r\n width /= len;\r\n }\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addAdjustWidth(vert: VertexShaderBuilder) {\r\n vert.addUniform(\"u_aaSamples\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_aaSamples\", (attr, params) => {\r\n const numSamples = System.instance.frameBufferStack.currentFbMultisampled ? params.target.compositor.antialiasSamples : 1;\r\n attr.setUniform1i(numSamples);\r\n });\r\n });\r\n vert.addFunction(adjustWidth);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCodeTexture(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_lineCodeTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_lineCodeTexture\", (uniform) => {\r\n const lct = System.instance.lineCodeTexture;\r\n assert(undefined !== lct);\r\n if (undefined !== lct)\r\n lct.bindSampler(uniform, TextureUnit.LineCode);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(prog: ProgramBuilder, args: string) {\r\n const vert = prog.vert;\r\n const frag = prog.frag;\r\n\r\n addLineCodeUniform(vert);\r\n\r\n const funcCall: string = `computeLineCodeTextureCoords(${args})`;\r\n\r\n prog.addFunctionComputedVaryingWithArgs(\"v_texc\", VariableType.Vec2, funcCall, computeTextureCoord);\r\n\r\n addFrustum(prog);\r\n addLineCodeTexture(prog.frag);\r\n\r\n frag.set(FragmentShaderComponent.FinalizeBaseColor, applyLineCode);\r\n frag.set(FragmentShaderComponent.CheckForDiscard, checkForDiscard);\r\n frag.addGlobal(\"discardByLineCode\", VariableType.Boolean, \"false\");\r\n}\r\n\r\nfunction polylineAddLineCode(prog: ProgramBuilder) {\r\n addLineCode(prog, lineCodeArgs);\r\n addModelViewMatrix(prog.vert);\r\n}\r\n\r\nfunction addCommon(prog: ProgramBuilder) {\r\n const vert = prog.vert;\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n addViewport(vert);\r\n\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_prevPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_nextPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addInitializer(decodeAdjacentPositions);\r\n\r\n vert.addFunction(unquantize2d);\r\n\r\n addLineWeight(vert);\r\n\r\n vert.addGlobal(\"miterAdjust\", VariableType.Float, \"0.0\");\r\n prog.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n vert.addFunction(decodePosition);\r\n}\r\n\r\nconst decodePosition = `\r\nvec4 decodePosition(vec3 baseIndex) {\r\n float index = decodeUInt24(baseIndex);\r\n vec2 tc = compute_vert_coords(index);\r\n vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n}\r\n`;\r\n\r\nconst decodeAdjacentPositions = `\r\n g_prevPos = decodePosition(a_prevIndex);\r\n g_nextPos = decodePosition(a_nextIndex);\r\n`;\r\n\r\nconst computePosition = `\r\n const float kNone = 0.0,\r\n kSquare = 1.0*3.0,\r\n kMiter = 2.0*3.0,\r\n kMiterInsideOnly = 3.0*3.0,\r\n kJointBase = 4.0*3.0,\r\n kNegatePerp = 8.0*3.0,\r\n kNegateAlong = 16.0*3.0,\r\n kNoneAdjWt = 32.0*3.0;\r\n\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n\r\n vec4 next = g_nextPos;\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, next, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0)\r\n return g_windowPos;\r\n\r\n float param = a_param;\r\n float weight = computeLineWeight();\r\n float scale = 1.0, directionScale = 1.0;\r\n\r\n if (param >= kNoneAdjWt)\r\n param -= kNoneAdjWt;\r\n\r\n if (param >= kNegateAlong) {\r\n directionScale = -directionScale;\r\n param -= kNegateAlong;\r\n }\r\n\r\n if (param >= kNegatePerp) {\r\n scale = -1.0;\r\n param -= kNegatePerp;\r\n }\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projNext = modelToWindowCoordinates(next, rawPos, otherPos, otherMvPos);\r\n g_windowDir = projNext.xy - g_windowPos.xy;\r\n\r\n if (param < kJointBase) {\r\n vec2 dir = (directionScale > 0.0) ? g_windowDir : -g_windowDir;\r\n vec2 pos = (directionScale > 0.0) ? g_windowPos.xy : projNext.xy;\r\n adjustWidth(weight, dir, pos);\r\n }\r\n\r\n if (kNone != param) {\r\n vec2 delta = vec2(0.0);\r\n vec4 prev = g_prevPos;\r\n vec4 projPrev = modelToWindowCoordinates(prev, rawPos, otherPos, otherMvPos);\r\n vec2 prevDir = g_windowPos.xy - projPrev.xy;\r\n float thisLength = sqrt(g_windowDir.x * g_windowDir.x + g_windowDir.y * g_windowDir.y);\r\n const float s_minNormalizeLength = 1.0E-5; // avoid normalizing zero length vectors.\r\n float dist = weight / 2.0;\r\n\r\n if (thisLength > s_minNormalizeLength) {\r\n g_windowDir /= thisLength;\r\n\r\n float prevLength = sqrt(prevDir.x * prevDir.x + prevDir.y * prevDir.y);\r\n\r\n if (prevLength > s_minNormalizeLength) {\r\n prevDir /= prevLength;\r\n const float s_minParallelDot= -.9999, s_maxParallelDot = .9999;\r\n float prevNextDot = dot(prevDir, g_windowDir);\r\n\r\n if (prevNextDot < s_minParallelDot || prevNextDot > s_maxParallelDot) // No miter if parallel or antiparallel.\r\n param = kSquare;\r\n } else\r\n param = kSquare;\r\n } else {\r\n g_windowDir = -normalize(prevDir);\r\n param = kSquare;\r\n }\r\n\r\n vec2 perp = scale * vec2(-g_windowDir.y, g_windowDir.x);\r\n\r\n if (param == kSquare) {\r\n delta = perp;\r\n } else {\r\n vec2 bisector = normalize(prevDir - g_windowDir);\r\n float dotP = dot (bisector, perp);\r\n\r\n if (dotP != 0.0) { // Should never occur - but avoid divide by zero.\r\n const float maxMiter = 3.0;\r\n float miterDistance = 1.0/dotP;\r\n\r\n if (param == kMiter) { // Straight miter.\r\n delta = (abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else if (param == kMiterInsideOnly) { // Miter at inside, square at outside (to make room for joint).\r\n delta = (dotP > 0.0 || abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else {\r\n const float jointTriangleCount = 3.0;\r\n float ratio = (param - kJointBase) / jointTriangleCount; // 3 triangles per half-joint as defined in Graphics.cpp\r\n delta = normalize((1.0 - ratio) * bisector + (dotP < 0.0 ? -ratio : ratio) * perp); // Miter/Straight combination.\r\n }\r\n }\r\n }\r\n\r\n miterAdjust = dot(g_windowDir, delta) * dist; // Not actually used for hilite shader but meh.\r\n pos.x += dist * delta.x * 2.0 * pos.w / u_viewport.x;\r\n pos.y += dist * delta.y * 2.0 * pos.w / u_viewport.y;\r\n }\r\n\r\n return pos;\r\n`;\r\n\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, miterAdjust\";\r\n\r\n/** @internal */\r\nexport function createPolylineBuilder(instanced: IsInstanced): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.Polyline, IsInstanced.Yes === instanced), instanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n addShaderFlags(builder);\r\n\r\n addCommon(builder);\r\n\r\n polylineAddLineCode(builder);\r\n\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineHiliter(instanced: IsInstanced): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.Polyline, IsInstanced.Yes === instanced), instanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n addCommon(builder);\r\n addFrustum(builder);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n"]}
@@ -155,9 +155,9 @@ function addColorOverrideMix(frag) {
155
155
  });
156
156
  }
157
157
  function createRealityMeshHiliterBuilder() {
158
- const builder = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(6 /* RealityMesh */, false));
158
+ const builder = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(7 /* RealityMesh */, false));
159
159
  const vert = builder.vert;
160
- vert.set(9 /* ComputePosition */, computePosition);
160
+ vert.set(10 /* ComputePosition */, computePosition);
161
161
  (0, Vertex_1.addModelViewProjectionMatrix)(vert);
162
162
  builder.frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
163
163
  return builder;
@@ -178,9 +178,9 @@ function createRealityMeshHiliter() {
178
178
  exports.createRealityMeshHiliter = createRealityMeshHiliter;
179
179
  /** @internal */
180
180
  function createRealityMeshBuilder(flags) {
181
- const builder = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(6 /* RealityMesh */, false));
181
+ const builder = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(7 /* RealityMesh */, false));
182
182
  const vert = builder.vert;
183
- vert.set(9 /* ComputePosition */, computePosition);
183
+ vert.set(10 /* ComputePosition */, computePosition);
184
184
  (0, Vertex_1.addModelViewProjectionMatrix)(vert);
185
185
  if (flags.isShadowable === 1 /* Yes */)
186
186
  (0, SolarShadowMapping_1.addSolarShadowMap)(builder, true);
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.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 { ColorDef } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params) {\r\n vec4 texTransform = params[0].xyzw;\r\n vec4 texClip = params[1].xyzw;\r\n float layerAlpha = params[2].x;\r\n vec2 uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x >= texClip[0] && uv.x <= texClip[2] && uv.y >= texClip[1] && uv.y <= texClip[3]) {\r\n uv.y = 1.0 - uv.y;\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texCol.rgb;\r\n if (texCol.a > 0.1)\r\n featureIncrement = params[2].y;\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst overrideFeatureId = \"return addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0;\";\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n const textureCount = params.geometry.asRealityMesh!.textureParams?.textures.length;\r\n uniform.setUniform1i(textureCount ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.textures[i] : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texTransform${i}`;\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParams = realityMesh.textureParams;\r\n assert(undefined !== textureParams);\r\n if (undefined !== textureParams) {\r\n uniform.setMatrix4(textureParams.matrices[i]);\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texTransform${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent)\r\n return u_baseColor;\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\nfunction addColorOverrideMix(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asRealityMesh!.overrideColorMix);\r\n });\r\n });\r\n\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport default function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n frag.addFunction(addUInt32s);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.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 { ColorDef } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params) {\r\n vec4 texTransform = params[0].xyzw;\r\n vec4 texClip = params[1].xyzw;\r\n float layerAlpha = params[2].x;\r\n vec2 uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x >= texClip[0] && uv.x <= texClip[2] && uv.y >= texClip[1] && uv.y <= texClip[3]) {\r\n uv.y = 1.0 - uv.y;\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texCol.rgb;\r\n if (texCol.a > 0.1)\r\n featureIncrement = params[2].y;\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst overrideFeatureId = \"return addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0;\";\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n const textureCount = params.geometry.asRealityMesh!.textureParams?.textures.length;\r\n uniform.setUniform1i(textureCount ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.textures[i] : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texTransform${i}`;\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParams = realityMesh.textureParams;\r\n assert(undefined !== textureParams);\r\n if (undefined !== textureParams) {\r\n uniform.setMatrix4(textureParams.matrices[i]);\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texTransform${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent)\r\n return u_baseColor;\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\nfunction addColorOverrideMix(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asRealityMesh!.overrideColorMix);\r\n });\r\n });\r\n\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport default function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n frag.addFunction(addUInt32s);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
@@ -31,7 +31,7 @@ function createScreenSpaceEffectProgramBuilder(params) {
31
31
  if (params.textureCoordFromPosition)
32
32
  builder.vert.addFunction(textureCoordFromPosition);
33
33
  builder.vert.addFunction(params.source.vertex);
34
- builder.vert.set(9 /* ComputePosition */, computePosition);
34
+ builder.vert.set(10 /* ComputePosition */, computePosition);
35
35
  if (params.source.sampleSourcePixel)
36
36
  builder.frag.addFunction("vec4 sampleSourcePixel()", params.source.sampleSourcePixel);
37
37
  builder.frag.addFunction(params.source.fragment);
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenSpaceEffect.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ScreenSpaceEffect.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,gDAA6C;AAC7C,kDAA+C;AAC/C,oDAAgH;AAChH,yCAA6C;AAE7C,MAAM,eAAe,GAAG;;;CAGvB,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;;CAIhC,CAAC;AAEF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,MAAM,yBAAyB,GAAG;;CAEjC,CAAC;AAEF,gBAAgB;AAChB,SAAgB,qCAAqC,CAAC,MAAsC;IAC1F,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpF,IAAI,MAAM,CAAC,wBAAwB;QACjC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAErD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,0BAAwC,eAAe,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB;QACjC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAExF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,UAAU,CAAC,WAAW,qBAA0B,CAAC,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,GAAG,0BAAyC,0BAAe,CAAC,CAAC;IAE1E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACpC,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;KAC9E;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2C,yBAAyB,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,mBAAwB,CAAC,IAAI,EAAE,EAAE;YACxE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;gBAChE,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAlCD,sFAkCC","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 { ScreenSpaceEffectBuilderParams } from \"../../ScreenSpaceEffectBuilder\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { assignFragColor } from \"./Fragment\";\r\n\r\nconst computePosition = `\r\n effectMain(rawPos);\r\n return rawPos;\r\n`;\r\n\r\nconst textureCoordFromPosition = `\r\n vec2 textureCoordFromPosition(vec4 pos) {\r\n return (pos.xy + 1.0) * 0.5;\r\n }\r\n`;\r\n\r\nconst computeBaseColor = \" return effectMain();\";\r\n\r\nconst computeBaseColorWithShift = `\r\n return u_readingPixels ? sampleSourcePixel() : effectMain();\r\n`;\r\n\r\n/** @internal */\r\nexport function createScreenSpaceEffectProgramBuilder(params: ScreenSpaceEffectBuilderParams): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n if (params.textureCoordFromPosition)\r\n builder.vert.addFunction(textureCoordFromPosition);\r\n\r\n builder.vert.addFunction(params.source.vertex);\r\n builder.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n if (params.source.sampleSourcePixel)\r\n builder.frag.addFunction(\"vec4 sampleSourcePixel()\", params.source.sampleSourcePixel);\r\n\r\n builder.frag.addFunction(params.source.fragment);\r\n builder.addUniform(\"u_diffuse\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_diffuse\", (uniform, progParams) => {\r\n const texture = progParams.target.compositor.screenSpaceEffectFbo.getColor(0);\r\n texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n if (!params.source.sampleSourcePixel) {\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n } else {\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColorWithShift);\r\n builder.frag.addUniform(\"u_readingPixels\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_readingPixels\", (uniform, progParams) => {\r\n uniform.setUniform1i(progParams.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"ScreenSpaceEffect.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ScreenSpaceEffect.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,gDAA6C;AAC7C,kDAA+C;AAC/C,oDAAgH;AAChH,yCAA6C;AAE7C,MAAM,eAAe,GAAG;;;CAGvB,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;;CAIhC,CAAC;AAEF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,MAAM,yBAAyB,GAAG;;CAEjC,CAAC;AAEF,gBAAgB;AAChB,SAAgB,qCAAqC,CAAC,MAAsC;IAC1F,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpF,IAAI,MAAM,CAAC,wBAAwB;QACjC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAErD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,2BAAwC,eAAe,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB;QACjC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAExF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,UAAU,CAAC,WAAW,qBAA0B,CAAC,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,GAAG,0BAAyC,0BAAe,CAAC,CAAC;IAE1E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACpC,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;KAC9E;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2C,yBAAyB,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,mBAAwB,CAAC,IAAI,EAAE,EAAE;YACxE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;gBAChE,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAlCD,sFAkCC","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 { ScreenSpaceEffectBuilderParams } from \"../../ScreenSpaceEffectBuilder\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { assignFragColor } from \"./Fragment\";\r\n\r\nconst computePosition = `\r\n effectMain(rawPos);\r\n return rawPos;\r\n`;\r\n\r\nconst textureCoordFromPosition = `\r\n vec2 textureCoordFromPosition(vec4 pos) {\r\n return (pos.xy + 1.0) * 0.5;\r\n }\r\n`;\r\n\r\nconst computeBaseColor = \" return effectMain();\";\r\n\r\nconst computeBaseColorWithShift = `\r\n return u_readingPixels ? sampleSourcePixel() : effectMain();\r\n`;\r\n\r\n/** @internal */\r\nexport function createScreenSpaceEffectProgramBuilder(params: ScreenSpaceEffectBuilderParams): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n if (params.textureCoordFromPosition)\r\n builder.vert.addFunction(textureCoordFromPosition);\r\n\r\n builder.vert.addFunction(params.source.vertex);\r\n builder.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n if (params.source.sampleSourcePixel)\r\n builder.frag.addFunction(\"vec4 sampleSourcePixel()\", params.source.sampleSourcePixel);\r\n\r\n builder.frag.addFunction(params.source.fragment);\r\n builder.addUniform(\"u_diffuse\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_diffuse\", (uniform, progParams) => {\r\n const texture = progParams.target.compositor.screenSpaceEffectFbo.getColor(0);\r\n texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n if (!params.source.sampleSourcePixel) {\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n } else {\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColorWithShift);\r\n builder.frag.addUniform(\"u_readingPixels\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_readingPixels\", (uniform, progParams) => {\r\n uniform.setUniform1i(progParams.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
@@ -22,7 +22,7 @@ function createSkyBoxProgram(context) {
22
22
  const prog = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(undefined, false));
23
23
  prog.frag.set(1 /* ComputeBaseColor */, computeBaseColor);
24
24
  prog.frag.set(16 /* AssignFragData */, assignFragData);
25
- prog.vert.set(9 /* ComputePosition */, computePosition);
25
+ prog.vert.set(10 /* ComputePosition */, computePosition);
26
26
  prog.vert.addUniform("u_rot", 6 /* Mat3 */, (prg) => {
27
27
  prg.addGraphicUniform("u_rot", (uniform, params) => {
28
28
  const rot = params.target.uniforms.frustum.viewMatrix.matrix;
@@ -1 +1 @@
1
- {"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkyBoxQuadsGeometry } from \"../CachedGeometry\";\r\nimport { Matrix3 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture } from \"../Texture\";\r\n\r\nconst computeBaseColor = `return vec4(0, 0, 0, 0);`;\r\nconst assignFragData = `FragColor = TEXTURE_CUBE(s_cube, v_texDir);`;\r\nconst computePosition = `vec3 pos = u_rot * vec3(rawPos.x, rawPos.z, -rawPos.y); return pos.xyzz;`; // rawPos swizzling accounts for iModel rotation.\r\nconst computeTexDir = `v_texDir = rawPosition.xyz;`;\r\n\r\nconst scratchRotMatrix = new Matrix3();\r\n\r\n/** @internal */\r\nexport function createSkyBoxProgram(context: WebGLContext): ShaderProgram {\r\n const prog = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n prog.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n prog.frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n prog.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.vert.addUniform(\"u_rot\", VariableType.Mat3, (prg) => {\r\n prg.addGraphicUniform(\"u_rot\", (uniform, params) => {\r\n const rot = params.target.uniforms.frustum.viewMatrix.matrix;\r\n const mat3 = scratchRotMatrix;\r\n mat3.m00 = -rot.at(0, 0); mat3.m01 = -rot.at(0, 1); mat3.m02 = -rot.at(0, 2);\r\n mat3.m10 = -rot.at(1, 0); mat3.m11 = -rot.at(1, 1); mat3.m12 = -rot.at(1, 2);\r\n mat3.m20 = rot.at(2, 0); mat3.m21 = rot.at(2, 1); mat3.m22 = rot.at(2, 2);\r\n uniform.setMatrix3(mat3);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"s_cube\", VariableType.SamplerCube, (prg) => {\r\n prg.addGraphicUniform(\"s_cube\", (uniform, params) => {\r\n const geom = params.geometry as SkyBoxQuadsGeometry;\r\n (geom.cube as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n prog.addInlineComputedVarying(\"v_texDir\", VariableType.Vec3, computeTexDir);\r\n\r\n prog.vert.headerComment = \"//!V! SkyBox\";\r\n prog.frag.headerComment = \"//!F! SkyBox\";\r\n\r\n return prog.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkyBoxQuadsGeometry } from \"../CachedGeometry\";\r\nimport { Matrix3 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture } from \"../Texture\";\r\n\r\nconst computeBaseColor = `return vec4(0, 0, 0, 0);`;\r\nconst assignFragData = `FragColor = TEXTURE_CUBE(s_cube, v_texDir);`;\r\nconst computePosition = `vec3 pos = u_rot * vec3(rawPos.x, rawPos.z, -rawPos.y); return pos.xyzz;`; // rawPos swizzling accounts for iModel rotation.\r\nconst computeTexDir = `v_texDir = rawPosition.xyz;`;\r\n\r\nconst scratchRotMatrix = new Matrix3();\r\n\r\n/** @internal */\r\nexport function createSkyBoxProgram(context: WebGLContext): ShaderProgram {\r\n const prog = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n prog.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n prog.frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n prog.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.vert.addUniform(\"u_rot\", VariableType.Mat3, (prg) => {\r\n prg.addGraphicUniform(\"u_rot\", (uniform, params) => {\r\n const rot = params.target.uniforms.frustum.viewMatrix.matrix;\r\n const mat3 = scratchRotMatrix;\r\n mat3.m00 = -rot.at(0, 0); mat3.m01 = -rot.at(0, 1); mat3.m02 = -rot.at(0, 2);\r\n mat3.m10 = -rot.at(1, 0); mat3.m11 = -rot.at(1, 1); mat3.m12 = -rot.at(1, 2);\r\n mat3.m20 = rot.at(2, 0); mat3.m21 = rot.at(2, 1); mat3.m22 = rot.at(2, 2);\r\n uniform.setMatrix3(mat3);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"s_cube\", VariableType.SamplerCube, (prg) => {\r\n prg.addGraphicUniform(\"s_cube\", (uniform, params) => {\r\n const geom = params.geometry as SkyBoxQuadsGeometry;\r\n (geom.cube as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n prog.addInlineComputedVarying(\"v_texDir\", VariableType.Vec3, computeTexDir);\r\n\r\n prog.vert.headerComment = \"//!V! SkyBox\";\r\n prog.frag.headerComment = \"//!F! SkyBox\";\r\n\r\n return prog.buildProgram(context);\r\n}\r\n"]}
@@ -65,7 +65,7 @@ function modulateColor(colorIn, t, colorOut) {
65
65
  }
66
66
  /** @internal */
67
67
  function createSkySphereProgram(context, isGradient) {
68
- const attrMap = AttributeMap_1.AttributeMap.findAttributeMap(isGradient ? 23 /* SkySphereGradient */ : 24 /* SkySphereTexture */, false);
68
+ const attrMap = AttributeMap_1.AttributeMap.findAttributeMap(isGradient ? 24 /* SkySphereGradient */ : 25 /* SkySphereTexture */, false);
69
69
  const builder = (0, ViewportQuad_1.createViewportQuadBuilder)(false, attrMap);
70
70
  if (isGradient) {
71
71
  builder.addFunctionComputedVarying("v_gradientValue", 5 /* Vec4 */, "computeGradientValue", computeGradientValue);
@@ -164,8 +164,8 @@ function addMaterial(builder) {
164
164
  });
165
165
  });
166
166
  vert.addGlobal("g_materialParams", 5 /* Vec4 */);
167
- vert.set(3 /* ComputeMaterial */, computeMaterial);
168
- vert.set(5 /* ApplyMaterialColor */, applyMaterialColor);
167
+ vert.set(4 /* ComputeMaterial */, computeMaterial);
168
+ vert.set(6 /* ApplyMaterialColor */, applyMaterialColor);
169
169
  builder.addFunctionComputedVarying("v_materialParams", 5 /* Vec4 */, "computeMaterialParams", computeMaterialParams);
170
170
  }
171
171
  const computePositionPrelude = `
@@ -206,7 +206,7 @@ function createCommon(instanced, animated, shadowable, isThematic, isHiliter) {
206
206
  builder.addVarying("v_eyeSpace", 4 /* Vec3 */);
207
207
  computePosition = computePositionPrelude + adjustEyeSpace + computePositionPostlude;
208
208
  }
209
- vert.set(9 /* ComputePosition */, computePosition);
209
+ vert.set(10 /* ComputePosition */, computePosition);
210
210
  return builder;
211
211
  }
212
212
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Material } from \"../Material\";\r\nimport { SurfaceBitIndex, SurfaceFlags, TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, ShaderBuilderFlags, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { unpackFloat } from \"./Clipping\";\r\nimport { addColor } from \"./Color\";\r\nimport { addChooseWithBitFlagFunctions, addExtractNthBit, addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addUnpackAndNormalize2Bytes, decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport {\r\n addFeatureSymbology, addMaxAlpha, addRenderOrder, addRenderOrderConstants, addSurfaceDiscard, addSurfaceHiliter, FeatureSymbologyOptions,\r\n} from \"./FeatureSymbology\";\r\nimport {\r\n addAltPickBufferOutputs, addFragColorWithPreMultipliedAlpha, addPickBufferOutputs, addWhiteOnWhiteReversal, assignFragColor,\r\n} from \"./Fragment\";\r\nimport { addLighting } from \"./Lighting\";\r\nimport { addSurfaceMonochrome } from \"./Monochrome\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier, addOverrideClassifierColor } from \"./PlanarClassification\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addFeatureAndMaterialLookup, addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { wantMaterials } from \"../SurfaceGeometry\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\n// NB: Textures do not contain pre-multiplied alpha.\r\nconst sampleSurfaceTexture = `\r\nvec4 sampleSurfaceTexture() {\r\n return TEXTURE(s_texture, v_texCoord);\r\n}\r\n`;\r\n\r\nconst applyMaterialColor = `\r\n float useMatColor = float(use_material);\r\n vec3 rgb = mix(baseColor.rgb, mat_rgb.rgb, useMatColor * mat_rgb.a);\r\n float a = mix(baseColor.a, mat_alpha.x, useMatColor * mat_alpha.y);\r\n return vec4(rgb, a);\r\n`;\r\n\r\n// if this is a raster glyph, the sampled color has already been modified - do not modify further.\r\n// Mix diffuse color with texel based on texture weight.\r\n// Replace with diffuse RGB if RGB overridden.\r\n// Replace with diffuse alpha if alpha overridden.\r\n// Multiply texel alpha with diffuse alpha if specified.\r\nconst applyTextureWeight = `\r\n bool applyTexture = !u_applyGlyphTex && isSurfaceBitSet(kSurfaceBit_HasTexture);\r\n float textureWeight = applyTexture ? mat_texture_weight : 0.0;\r\n vec3 rgb = mix(baseColor.rgb, g_surfaceTexel.rgb, textureWeight);\r\n rgb = chooseVec3WithBitFlag(rgb, baseColor.rgb, surfaceFlags, kSurfaceBit_OverrideRgb);\r\n\r\n float a = applyTexture ? baseColor.a * g_surfaceTexel.a : baseColor.a;\r\n\r\n return vec4(rgb, a);\r\n`;\r\n\r\nconst decodeFragMaterialParams = `\r\nvoid decodeMaterialParams(vec4 params) {\r\n mat_weights = unpackAndNormalize2Bytes(params.x);\r\n\r\n vec2 texAndSpecR = unpackAndNormalize2Bytes(params.y);\r\n mat_texture_weight = texAndSpecR.x;\r\n\r\n vec2 specGB = unpackAndNormalize2Bytes(params.z);\r\n mat_specular = vec4(texAndSpecR.y, specGB, params.w);\r\n}\r\n`;\r\n\r\nconst decodeMaterialColor = `\r\nvoid decodeMaterialColor(vec4 rgba) {\r\n mat_rgb = vec4(rgba.rgb, float(rgba.r >= 0.0));\r\n mat_alpha = vec2(rgba.a, float(rgba.a >= 0.0));\r\n}\r\n`;\r\n\r\n// defaults: (0x6699, 0xffff, 0xffff, 13.5)\r\nconst computeMaterialParams = `\r\n const vec4 defaults = vec4(26265.0, 65535.0, 65535.0, 13.5);\r\n return use_material ? g_materialParams : defaults;\r\n`;\r\n\r\n// The 8-bit material index is stored with the 24-bit feature index, in the high byte.\r\nconst readMaterialAtlas = `\r\nvoid readMaterialAtlas() {\r\n float materialAtlasStart = u_vertParams.z * u_vertParams.w + u_numColors;\r\n float materialIndex = g_featureAndMaterialIndex.w * 4.0 + materialAtlasStart;\r\n\r\n vec2 tc = computeLUTCoords(materialIndex, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 rgba = TEXTURE(u_vertLUT, tc);\r\n\r\n tc = computeLUTCoords(materialIndex + 1.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 weightsAndFlags = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n\r\n tc = computeLUTCoords(materialIndex + 2.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec3 specularRgb = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5).rgb;\r\n\r\n tc = computeLUTCoords(materialIndex + 3.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 packedSpecularExponent = TEXTURE(u_vertLUT, tc);\r\n\r\n float flags = weightsAndFlags.w;\r\n mat_rgb = vec4(rgba.rgb, float(flags == 1.0 || flags == 3.0));\r\n mat_alpha = vec2(rgba.a, float(flags == 2.0 || flags == 3.0));\r\n\r\n float specularExponent = unpackFloat(packedSpecularExponent);\r\n g_materialParams.x = weightsAndFlags.y + weightsAndFlags.z * 256.0;\r\n g_materialParams.y = 255.0 + specularRgb.r * 256.0;\r\n g_materialParams.z = specularRgb.g + specularRgb.b * 256.0;\r\n g_materialParams.w = specularExponent;\r\n}\r\n`;\r\n\r\nconst computeMaterial = `\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasMaterialAtlas]) {\r\n readMaterialAtlas();\r\n } else {\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n }\r\n`;\r\n\r\nfunction addMaterial(builder: ProgramBuilder): void {\r\n const frag = builder.frag;\r\n assert(undefined !== frag.find(\"v_surfaceFlags\"));\r\n\r\n frag.addGlobal(\"mat_texture_weight\", VariableType.Float);\r\n frag.addGlobal(\"mat_weights\", VariableType.Vec2); // diffuse, specular\r\n frag.addGlobal(\"mat_specular\", VariableType.Vec4); // rgb, exponent\r\n\r\n addUnpackAndNormalize2Bytes(frag);\r\n frag.addFunction(decodeFragMaterialParams);\r\n frag.addInitializer(\"decodeMaterialParams(v_materialParams);\");\r\n\r\n addChooseWithBitFlagFunctions(frag);\r\n frag.set(FragmentShaderComponent.ApplyMaterialOverrides, applyTextureWeight);\r\n\r\n const vert = builder.vert;\r\n vert.addGlobal(\"mat_rgb\", VariableType.Vec4); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"mat_alpha\", VariableType.Vec2); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"use_material\", VariableType.Boolean);\r\n if (System.instance.capabilities.isWebGL2)\r\n vert.addInitializer(\"use_material = (0u == (surfaceFlags & kSurfaceBit_IgnoreMaterial));\");\r\n else\r\n vert.addInitializer(\"use_material = !nthBitSet(surfaceFlags, kSurfaceBit_IgnoreMaterial);\");\r\n\r\n // Uniform material\r\n vert.addFunction(decodeMaterialColor);\r\n vert.addUniform(\"u_materialColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialColor\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.rgba);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_materialParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialParams\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.fragUniforms);\r\n });\r\n });\r\n\r\n // Material atlas\r\n addFeatureAndMaterialLookup(vert);\r\n vert.addFunction(unpackFloat);\r\n vert.addFunction(readMaterialAtlas);\r\n vert.addUniform(\"u_numColors\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_numColors\", (uniform, params) => {\r\n const info = params.geometry.materialInfo;\r\n const numColors = undefined !== info && info.isAtlas ? info.vertexTableOffset : 0;\r\n uniform.setUniform1f(numColors);\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_materialParams\", VariableType.Vec4);\r\n vert.set(VertexShaderComponent.ComputeMaterial, computeMaterial);\r\n vert.set(VertexShaderComponent.ApplyMaterialColor, applyMaterialColor);\r\n builder.addFunctionComputedVarying(\"v_materialParams\", VariableType.Vec4, \"computeMaterialParams\", computeMaterialParams);\r\n}\r\n\r\nconst computePositionPrelude = `\r\n vec4 pos = MAT_MV * rawPos;\r\n`;\r\n\r\n// We used to use gl.polygonOffset() for blanking regions, but that doesn't work with logarithmic depth buffer which overwrites the\r\n// computed Z. Instead we must manually offset in vertex shader. We do this even if log depth is not enabled/supported.\r\n// NOTE: If log depth is *not* supported, then the hilite surface vertex shaders previously would still include this logic, but the\r\n// fragment shaders would not use v_eyeSpace. Some Ubuntu 20.04 graphics drivers cleverly and correctly optimized out the varying and the uniform,\r\n// causing an exception when gl.getProgramLocation() failed. So, omit this bit in that case.\r\nconst adjustEyeSpace = `\r\n v_eyeSpace = pos.xyz;\r\n const float blankingRegionOffset = 2.0 / 65536.0;\r\n if (kRenderOrder_BlankingRegion == u_renderOrder)\r\n v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);\r\n`;\r\n\r\nconst computePositionPostlude = `\r\n return u_proj * pos;\r\n`;\r\n\r\nfunction createCommon(instanced: IsInstanced, animated: IsAnimated, shadowable: IsShadowable, isThematic: IsThematic, isHiliter: boolean): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Surface, IsInstanced.Yes === instanced);\r\n const builder = new ProgramBuilder(attrMap, instanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n const vert = builder.vert;\r\n\r\n if (animated)\r\n addAnimation(vert, true, isThematic);\r\n\r\n if (shadowable)\r\n addSolarShadowMap(builder);\r\n\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n\r\n let computePosition;\r\n if (isHiliter && !System.instance.supportsLogZBuffer) {\r\n computePosition = computePositionPrelude + computePositionPostlude;\r\n } else {\r\n addFrustum(builder);\r\n addRenderOrder(builder.vert);\r\n addRenderOrderConstants(builder.vert);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n computePosition = computePositionPrelude + adjustEyeSpace + computePositionPostlude;\r\n }\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceHiliter(instanced: IsInstanced, classified: IsClassified): ProgramBuilder {\r\n const builder = createCommon(instanced, IsAnimated.No, IsShadowable.No, IsThematic.No, true);\r\n\r\n addSurfaceFlags(builder, true, false);\r\n addTexture(builder, IsAnimated.No, IsThematic.No);\r\n if (classified) {\r\n addHilitePlanarClassifier(builder);\r\n builder.vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n } else {\r\n addSurfaceHiliter(builder);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\nconst isSurfaceBitSet = `\r\nbool isSurfaceBitSet(float flag) { return nthBitSet(surfaceFlags, flag); }\r\n`;\r\nconst isSurfaceBitSet2 = `\r\nbool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }\r\n`;\r\n\r\n/** @internal */\r\nfunction addSurfaceFlagsLookup(builder: ShaderBuilder) {\r\n builder.addConstant(\"kSurfaceBitIndex_HasTexture\", VariableType.Int, SurfaceBitIndex.HasTexture.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_ApplyLighting\", VariableType.Int, SurfaceBitIndex.ApplyLighting.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormals\", VariableType.Int, SurfaceBitIndex.HasNormals.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_IgnoreMaterial\", VariableType.Int, SurfaceBitIndex.IgnoreMaterial.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_TransparencyThreshold\", VariableType.Int, SurfaceBitIndex.TransparencyThreshold.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_BackgroundFill\", VariableType.Int, SurfaceBitIndex.BackgroundFill.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasColorAndNormal\", VariableType.Int, SurfaceBitIndex.HasColorAndNormal.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_OverrideRgb\", VariableType.Int, SurfaceBitIndex.OverrideRgb.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_NoFaceFront\", VariableType.Int, SurfaceBitIndex.NoFaceFront.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasMaterialAtlas\", VariableType.Int, SurfaceBitIndex.HasMaterialAtlas.toString());\r\n\r\n // Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus\r\n // used differently there & so require different constants. Unused constants are commented out.\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasTexture\", SurfaceBitIndex.HasTexture);\r\n builder.addBitFlagConstant(\"kSurfaceBit_IgnoreMaterial\", SurfaceBitIndex.IgnoreMaterial);\r\n builder.addBitFlagConstant(\"kSurfaceBit_OverrideRgb\", SurfaceBitIndex.OverrideRgb);\r\n\r\n // Only need masks for flags modified in vertex shader\r\n const suffix = System.instance.capabilities.isWebGL2 ? \"u\" : \".0\";\r\n const type = System.instance.capabilities.isWebGL2 ? VariableType.Uint : VariableType.Float;\r\n builder.addConstant(\"kSurfaceMask_HasTexture\", type, SurfaceFlags.HasTexture.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_IgnoreMaterial\", type, SurfaceFlags.IgnoreMaterial.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_OverrideRgb\", type, SurfaceFlags.OverrideRgb.toString() + suffix);\r\n\r\n addExtractNthBit(builder);\r\n if (System.instance.capabilities.isWebGL2) {\r\n builder.addFunction(isSurfaceBitSet2);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Uint);\r\n } else {\r\n builder.addFunction(isSurfaceBitSet);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Float);\r\n }\r\n}\r\n\r\nconst initSurfaceFlags = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0.0;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0.0;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0.0;\r\n`;\r\nconst initSurfaceFlags2 = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;\r\n`;\r\n\r\nconst computeBaseSurfaceFlags = `\r\n bool hasTexture = u_surfaceFlags[kSurfaceBitIndex_HasTexture];\r\n if (feature_ignore_material) {\r\n if (hasTexture) {\r\n hasTexture = false;\r\n surfaceFlags -= kSurfaceMask_HasTexture;\r\n }\r\n\r\n surfaceFlags += kSurfaceMask_IgnoreMaterial;\r\n }\r\n`;\r\n\r\n// Textured surfaces (including raster glyphs) always *multiply* the sampled alpha by the alpha override.\r\nconst computeColorSurfaceFlags = `\r\n if (feature_rgb.r >= 0.0)\r\n surfaceFlags += kSurfaceMask_OverrideRgb;\r\n`;\r\n\r\nconst returnSurfaceFlags = \" return surfaceFlags;\\n\";\r\nconst returnSurfaceFlags2 = \" return float(surfaceFlags);\\n\";\r\n\r\nconst computeSurfaceFlags = computeBaseSurfaceFlags;\r\nconst computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;\r\n\r\n/** @internal */\r\nexport const octDecodeNormal = `\r\nvec3 octDecodeNormal(vec2 e) {\r\n e = e / 255.0 * 2.0 - 1.0;\r\n vec3 n = vec3(e.x, e.y, 1.0 - abs(e.x) - abs(e.y));\r\n if (n.z < 0.0) {\r\n vec2 signNotZero = vec2(n.x >= 0.0 ? 1.0 : -1.0, n.y >= 0.0 ? 1.0 : -1.0);\r\n n.xy = (1.0 - abs(n.yx)) * signNotZero;\r\n }\r\n\r\n return normalize(n);\r\n}\r\n`;\r\n\r\nconst computeNormal = `\r\n vec2 tc = g_vertexBaseCoords;\r\n tc.x += 3.0 * g_vert_stepX;\r\n vec4 enc = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec2 normal = u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal] ? enc.xy : g_vertexData2;\r\n return u_surfaceFlags[kSurfaceBitIndex_HasNormals] ? normalize(MAT_NORM * octDecodeNormal(normal)) : vec3(0.0);\r\n`;\r\n\r\nconst computeAnimatedNormal = `\r\n if (u_animNormalParams.x >= 0.0)\r\n return normalize(MAT_NORM * computeAnimationNormal(u_animNormalParams.x, u_animNormalParams.y, u_animNormalParams.z));\r\n${computeNormal}`;\r\n\r\nconst applyBackgroundColor = `\r\n return u_surfaceFlags[kSurfaceBitIndex_BackgroundFill] ? vec4(u_bgColor.rgb, baseColor.a) : baseColor;\r\n`;\r\n\r\nconst computeTexCoord = `\r\n vec2 tc = g_vertexBaseCoords;\r\n tc.x += 3.0 * g_vert_stepX;\r\n vec4 rgba = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec2 qcoords = vec2(decodeUInt16(rgba.xy), decodeUInt16(rgba.zw));\r\n return chooseVec2WithBitFlag(vec2(0.0), unquantize2d(qcoords, u_qTexCoordParams), surfaceFlags, kSurfaceBit_HasTexture);\r\n`;\r\nconst computeAnimatedTexCoord = `\r\n if (u_animScalarQParams.x >= 0.0)\r\n return computeAnimationParam(u_animScalarParams.x, u_animScalarParams.y, u_animScalarParams.z, u_animScalarQParams.x, u_animScalarQParams.y);\r\n${computeTexCoord}`;\r\nconst getSurfaceColor = `\r\nvec4 getSurfaceColor() { return v_color; }\r\n`;\r\n\r\n// If we have texture weight < 1.0 we must compute the element/material color first then mix with texture color\r\n// in ApplyMaterialOverrides(). Do the sample once, here, and store in a global variable for possible later use.\r\n// If a glyph texture, must mix getSurfaceColor() with texture color so texture color alpha is applied 100% and\r\n// surface color rgb is scaled by texture color rgb (latter is full white originally but stretched via mipmapping).\r\nconst computeBaseColor = `\r\n g_surfaceTexel = sampleSurfaceTexture();\r\n vec4 surfaceColor = getSurfaceColor();\r\n\r\n if (!u_applyGlyphTex)\r\n return surfaceColor;\r\n\r\n // Compute color for raster glyph.\r\n const vec3 white = vec3(1.0);\r\n const vec3 epsilon = vec3(0.0001);\r\n const vec3 almostWhite = white - epsilon;\r\n\r\n // set to black if almost white and reverse white-on-white is on\r\n bvec3 isAlmostWhite = greaterThan(surfaceColor.rgb, almostWhite);\r\n surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);\r\n return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a);\r\n`;\r\n\r\nconst surfaceFlagArray = new Int32Array(SurfaceBitIndex.Count);\r\n\r\n/** @internal */\r\nexport function addSurfaceFlags(builder: ProgramBuilder, withFeatureOverrides: boolean, withFeatureColor: boolean) {\r\n addSurfaceFlagsLookup(builder.vert);\r\n addSurfaceFlagsLookup(builder.frag);\r\n\r\n let compute = (System.instance.capabilities.isWebGL2 ? initSurfaceFlags2 : initSurfaceFlags);\r\n if (withFeatureOverrides)\r\n compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\\n`;\r\n compute += (System.instance.capabilities.isWebGL2 ? returnSurfaceFlags2 : returnSurfaceFlags);\r\n builder.addFunctionComputedVarying(\"v_surfaceFlags\", VariableType.Float, \"computeSurfaceFlags\", compute);\r\n\r\n if (System.instance.capabilities.isWebGL2)\r\n builder.frag.addInitializer(\"surfaceFlags = uint(floor(v_surfaceFlags + 0.5));\");\r\n else\r\n builder.frag.addInitializer(\"surfaceFlags = floor(v_surfaceFlags + 0.5);\");\r\n\r\n builder.addUniformArray(\"u_surfaceFlags\", VariableType.Boolean, SurfaceBitIndex.Count, (prog) => {\r\n prog.addGraphicUniform(\"u_surfaceFlags\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asSurface);\r\n const mesh = params.geometry.asSurface;\r\n mesh.computeSurfaceFlags(params.programParams, surfaceFlagArray);\r\n uniform.setUniform1iv(surfaceFlagArray);\r\n });\r\n });\r\n}\r\n\r\nfunction addNormal(builder: ProgramBuilder, instanced: IsInstanced, animated: IsAnimated) {\r\n addNormalMatrix(builder.vert, instanced);\r\n\r\n builder.vert.addFunction(octDecodeNormal);\r\n addChooseWithBitFlagFunctions(builder.vert);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", animated ? computeAnimatedNormal : computeNormal);\r\n\r\n // Set to true to colorize surfaces based on normals (in world space).\r\n // You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.\r\n const debugNormals = false;\r\n if (debugNormals) {\r\n builder.frag.set(FragmentShaderComponent.ApplyDebugColor, \"return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);\");\r\n builder.addFunctionComputedVarying(\"v_normal\", VariableType.Vec3, \"computeDebugNormal\", `\r\n vec2 tc = g_vertexBaseCoords;\r\n tc.x += 3.0 * g_vert_stepX;\r\n vec4 enc = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec2 normal = u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal] ? enc.xy : g_vertexData2;\r\n return u_surfaceFlags[kSurfaceBitIndex_HasNormals] ? normalize(octDecodeNormal(normal)) : vec3(0.0);\r\n `);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud = false) {\r\n if (isThematic) {\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));\r\n } else {\r\n builder.vert.addFunction(unquantize2d);\r\n addChooseWithBitFlagFunctions(builder.vert);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", animated ? computeAnimatedTexCoord : computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (surfGeom.useTexture(params.programParams)) {\r\n const uvQParams = surfGeom.lut.uvQParams;\r\n if (undefined !== uvQParams) {\r\n uniform.setUniform4fv(uvQParams);\r\n }\r\n }\r\n });\r\n });\r\n builder.frag.addFunction(sampleSurfaceTexture);\r\n }\r\n\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures\r\n params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);\r\n } else if (surfGeom.useTexture(params.programParams)) {\r\n const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? (params.target.analysisTexture as Texture) : surfGeom.texture;\r\n assert(undefined !== texture);\r\n texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.SurfaceTexture);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport const discardClassifiedByAlpha = `\r\n if (u_no_classifier_discard)\r\n return false;\r\n\r\n bool hasAlpha = alpha <= s_maxAlpha;\r\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\r\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\r\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\r\n`;\r\n\r\n// Target.readPixels() renders everything in opaque pass. It turns off textures for normal surfaces but keeps them for things like 3d view attachment tiles.\r\n// We want to discard fully-transparent pixels of those things during readPixels() so that we don't locate the attachment unless the cursor is over a\r\n// non-transparent pixel of it.\r\nconst discardTransparentTexel = `return isSurfaceBitSet(kSurfaceBit_HasTexture) && alpha < (1.0 / 255.0);`;\r\n\r\n/** @internal */\r\nexport function createSurfaceBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, flags.isThematic, false);\r\n addShaderFlags(builder);\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n }\r\n\r\n if (flags.isThematic) {\r\n addThematicDisplay(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n addSurfaceFlags(builder, FeatureMode.Overrides === feat, true);\r\n addSurfaceDiscard(builder, flags);\r\n addNormal(builder, flags.isInstanced, flags.isAnimated);\r\n\r\n // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).\r\n addChooseWithBitFlagFunctions(builder.frag);\r\n builder.frag.set(FragmentShaderComponent.FinalizeBaseColor, applyBackgroundColor);\r\n builder.frag.addUniform(\"u_bgColor\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\r\n params.target.uniforms.style.bindBackgroundRgb(uniform);\r\n });\r\n });\r\n\r\n addTexture(builder, flags.isAnimated, flags.isThematic);\r\n\r\n builder.frag.addUniform(\"u_applyGlyphTex\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_applyGlyphTex\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n uniform.setUniform1i(surfGeom.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);\r\n });\r\n });\r\n\r\n // Fragment and Vertex\r\n addColor(builder);\r\n\r\n // Fragment\r\n builder.frag.addFunction(getSurfaceColor);\r\n addLighting(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n if (flags.isTranslucent) {\r\n addTranslucency(builder);\r\n } else {\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(builder.frag);\r\n } else {\r\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardTransparentTexel);\r\n if (!flags.isClassified)\r\n addOverrideClassifierColor(builder, flags.isThematic);\r\n else\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isEdgeTestNeeded || flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n builder.frag.addGlobal(\"g_surfaceTexel\", VariableType.Vec4);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, (flags.isThematic === IsThematic.No) ? computeBaseColor : \"return getSurfaceColor();\");\r\n\r\n if (flags.isClassified)\r\n addClassificationTranslucencyDiscard(builder);\r\n\r\n addSurfaceMonochrome(builder.frag);\r\n addMaterial(builder);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\nexport function addClassificationTranslucencyDiscard(builder: ProgramBuilder) {\r\n // For unclassified geometry, we need to render in both the translucent and opaque passes if any feature transparency overrides are applied that would change the default render pass used.\r\n // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.\r\n // For classified geometry, the transparency comes from the classifier geometry (when using Display.ElementColor), so even if there are no feature overrides, we may need to draw in both passes.\r\n // Since the transparency is not known until the fragment shader, we must perform the discard there instead.\r\n addMaxAlpha(builder.frag);\r\n addRenderPass(builder.frag);\r\n\r\n // Do not discard transparent classified geometry if we're trying to do a pick...\r\n builder.frag.addUniform(\"u_no_classifier_discard\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_no_classifier_discard\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardClassifiedByAlpha);\r\n}\r\n"]}
1
+ {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Material } from \"../Material\";\r\nimport { SurfaceBitIndex, SurfaceFlags, TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, ShaderBuilderFlags, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { unpackFloat } from \"./Clipping\";\r\nimport { addColor } from \"./Color\";\r\nimport { addChooseWithBitFlagFunctions, addExtractNthBit, addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addUnpackAndNormalize2Bytes, decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport {\r\n addFeatureSymbology, addMaxAlpha, addRenderOrder, addRenderOrderConstants, addSurfaceDiscard, addSurfaceHiliter, FeatureSymbologyOptions,\r\n} from \"./FeatureSymbology\";\r\nimport {\r\n addAltPickBufferOutputs, addFragColorWithPreMultipliedAlpha, addPickBufferOutputs, addWhiteOnWhiteReversal, assignFragColor,\r\n} from \"./Fragment\";\r\nimport { addLighting } from \"./Lighting\";\r\nimport { addSurfaceMonochrome } from \"./Monochrome\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier, addOverrideClassifierColor } from \"./PlanarClassification\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addFeatureAndMaterialLookup, addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { wantMaterials } from \"../SurfaceGeometry\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\n// NB: Textures do not contain pre-multiplied alpha.\r\nconst sampleSurfaceTexture = `\r\nvec4 sampleSurfaceTexture() {\r\n return TEXTURE(s_texture, v_texCoord);\r\n}\r\n`;\r\n\r\nconst applyMaterialColor = `\r\n float useMatColor = float(use_material);\r\n vec3 rgb = mix(baseColor.rgb, mat_rgb.rgb, useMatColor * mat_rgb.a);\r\n float a = mix(baseColor.a, mat_alpha.x, useMatColor * mat_alpha.y);\r\n return vec4(rgb, a);\r\n`;\r\n\r\n// if this is a raster glyph, the sampled color has already been modified - do not modify further.\r\n// Mix diffuse color with texel based on texture weight.\r\n// Replace with diffuse RGB if RGB overridden.\r\n// Replace with diffuse alpha if alpha overridden.\r\n// Multiply texel alpha with diffuse alpha if specified.\r\nconst applyTextureWeight = `\r\n bool applyTexture = !u_applyGlyphTex && isSurfaceBitSet(kSurfaceBit_HasTexture);\r\n float textureWeight = applyTexture ? mat_texture_weight : 0.0;\r\n vec3 rgb = mix(baseColor.rgb, g_surfaceTexel.rgb, textureWeight);\r\n rgb = chooseVec3WithBitFlag(rgb, baseColor.rgb, surfaceFlags, kSurfaceBit_OverrideRgb);\r\n\r\n float a = applyTexture ? baseColor.a * g_surfaceTexel.a : baseColor.a;\r\n\r\n return vec4(rgb, a);\r\n`;\r\n\r\nconst decodeFragMaterialParams = `\r\nvoid decodeMaterialParams(vec4 params) {\r\n mat_weights = unpackAndNormalize2Bytes(params.x);\r\n\r\n vec2 texAndSpecR = unpackAndNormalize2Bytes(params.y);\r\n mat_texture_weight = texAndSpecR.x;\r\n\r\n vec2 specGB = unpackAndNormalize2Bytes(params.z);\r\n mat_specular = vec4(texAndSpecR.y, specGB, params.w);\r\n}\r\n`;\r\n\r\nconst decodeMaterialColor = `\r\nvoid decodeMaterialColor(vec4 rgba) {\r\n mat_rgb = vec4(rgba.rgb, float(rgba.r >= 0.0));\r\n mat_alpha = vec2(rgba.a, float(rgba.a >= 0.0));\r\n}\r\n`;\r\n\r\n// defaults: (0x6699, 0xffff, 0xffff, 13.5)\r\nconst computeMaterialParams = `\r\n const vec4 defaults = vec4(26265.0, 65535.0, 65535.0, 13.5);\r\n return use_material ? g_materialParams : defaults;\r\n`;\r\n\r\n// The 8-bit material index is stored with the 24-bit feature index, in the high byte.\r\nconst readMaterialAtlas = `\r\nvoid readMaterialAtlas() {\r\n float materialAtlasStart = u_vertParams.z * u_vertParams.w + u_numColors;\r\n float materialIndex = g_featureAndMaterialIndex.w * 4.0 + materialAtlasStart;\r\n\r\n vec2 tc = computeLUTCoords(materialIndex, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 rgba = TEXTURE(u_vertLUT, tc);\r\n\r\n tc = computeLUTCoords(materialIndex + 1.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 weightsAndFlags = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n\r\n tc = computeLUTCoords(materialIndex + 2.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec3 specularRgb = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5).rgb;\r\n\r\n tc = computeLUTCoords(materialIndex + 3.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 packedSpecularExponent = TEXTURE(u_vertLUT, tc);\r\n\r\n float flags = weightsAndFlags.w;\r\n mat_rgb = vec4(rgba.rgb, float(flags == 1.0 || flags == 3.0));\r\n mat_alpha = vec2(rgba.a, float(flags == 2.0 || flags == 3.0));\r\n\r\n float specularExponent = unpackFloat(packedSpecularExponent);\r\n g_materialParams.x = weightsAndFlags.y + weightsAndFlags.z * 256.0;\r\n g_materialParams.y = 255.0 + specularRgb.r * 256.0;\r\n g_materialParams.z = specularRgb.g + specularRgb.b * 256.0;\r\n g_materialParams.w = specularExponent;\r\n}\r\n`;\r\n\r\nconst computeMaterial = `\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasMaterialAtlas]) {\r\n readMaterialAtlas();\r\n } else {\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n }\r\n`;\r\n\r\nfunction addMaterial(builder: ProgramBuilder): void {\r\n const frag = builder.frag;\r\n assert(undefined !== frag.find(\"v_surfaceFlags\"));\r\n\r\n frag.addGlobal(\"mat_texture_weight\", VariableType.Float);\r\n frag.addGlobal(\"mat_weights\", VariableType.Vec2); // diffuse, specular\r\n frag.addGlobal(\"mat_specular\", VariableType.Vec4); // rgb, exponent\r\n\r\n addUnpackAndNormalize2Bytes(frag);\r\n frag.addFunction(decodeFragMaterialParams);\r\n frag.addInitializer(\"decodeMaterialParams(v_materialParams);\");\r\n\r\n addChooseWithBitFlagFunctions(frag);\r\n frag.set(FragmentShaderComponent.ApplyMaterialOverrides, applyTextureWeight);\r\n\r\n const vert = builder.vert;\r\n vert.addGlobal(\"mat_rgb\", VariableType.Vec4); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"mat_alpha\", VariableType.Vec2); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"use_material\", VariableType.Boolean);\r\n if (System.instance.capabilities.isWebGL2)\r\n vert.addInitializer(\"use_material = (0u == (surfaceFlags & kSurfaceBit_IgnoreMaterial));\");\r\n else\r\n vert.addInitializer(\"use_material = !nthBitSet(surfaceFlags, kSurfaceBit_IgnoreMaterial);\");\r\n\r\n // Uniform material\r\n vert.addFunction(decodeMaterialColor);\r\n vert.addUniform(\"u_materialColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialColor\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.rgba);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_materialParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialParams\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.fragUniforms);\r\n });\r\n });\r\n\r\n // Material atlas\r\n addFeatureAndMaterialLookup(vert);\r\n vert.addFunction(unpackFloat);\r\n vert.addFunction(readMaterialAtlas);\r\n vert.addUniform(\"u_numColors\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_numColors\", (uniform, params) => {\r\n const info = params.geometry.materialInfo;\r\n const numColors = undefined !== info && info.isAtlas ? info.vertexTableOffset : 0;\r\n uniform.setUniform1f(numColors);\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_materialParams\", VariableType.Vec4);\r\n vert.set(VertexShaderComponent.ComputeMaterial, computeMaterial);\r\n vert.set(VertexShaderComponent.ApplyMaterialColor, applyMaterialColor);\r\n builder.addFunctionComputedVarying(\"v_materialParams\", VariableType.Vec4, \"computeMaterialParams\", computeMaterialParams);\r\n}\r\n\r\nconst computePositionPrelude = `\r\n vec4 pos = MAT_MV * rawPos;\r\n`;\r\n\r\n// We used to use gl.polygonOffset() for blanking regions, but that doesn't work with logarithmic depth buffer which overwrites the\r\n// computed Z. Instead we must manually offset in vertex shader. We do this even if log depth is not enabled/supported.\r\n// NOTE: If log depth is *not* supported, then the hilite surface vertex shaders previously would still include this logic, but the\r\n// fragment shaders would not use v_eyeSpace. Some Ubuntu 20.04 graphics drivers cleverly and correctly optimized out the varying and the uniform,\r\n// causing an exception when gl.getProgramLocation() failed. So, omit this bit in that case.\r\nconst adjustEyeSpace = `\r\n v_eyeSpace = pos.xyz;\r\n const float blankingRegionOffset = 2.0 / 65536.0;\r\n if (kRenderOrder_BlankingRegion == u_renderOrder)\r\n v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);\r\n`;\r\n\r\nconst computePositionPostlude = `\r\n return u_proj * pos;\r\n`;\r\n\r\nfunction createCommon(instanced: IsInstanced, animated: IsAnimated, shadowable: IsShadowable, isThematic: IsThematic, isHiliter: boolean): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Surface, IsInstanced.Yes === instanced);\r\n const builder = new ProgramBuilder(attrMap, instanced ? ShaderBuilderFlags.InstancedVertexTable : ShaderBuilderFlags.VertexTable);\r\n const vert = builder.vert;\r\n\r\n if (animated)\r\n addAnimation(vert, true, isThematic);\r\n\r\n if (shadowable)\r\n addSolarShadowMap(builder);\r\n\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n\r\n let computePosition;\r\n if (isHiliter && !System.instance.supportsLogZBuffer) {\r\n computePosition = computePositionPrelude + computePositionPostlude;\r\n } else {\r\n addFrustum(builder);\r\n addRenderOrder(builder.vert);\r\n addRenderOrderConstants(builder.vert);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n computePosition = computePositionPrelude + adjustEyeSpace + computePositionPostlude;\r\n }\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceHiliter(instanced: IsInstanced, classified: IsClassified): ProgramBuilder {\r\n const builder = createCommon(instanced, IsAnimated.No, IsShadowable.No, IsThematic.No, true);\r\n\r\n addSurfaceFlags(builder, true, false);\r\n addTexture(builder, IsAnimated.No, IsThematic.No);\r\n if (classified) {\r\n addHilitePlanarClassifier(builder);\r\n builder.vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n } else {\r\n addSurfaceHiliter(builder);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\nconst isSurfaceBitSet = `\r\nbool isSurfaceBitSet(float flag) { return nthBitSet(surfaceFlags, flag); }\r\n`;\r\nconst isSurfaceBitSet2 = `\r\nbool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }\r\n`;\r\n\r\n/** @internal */\r\nfunction addSurfaceFlagsLookup(builder: ShaderBuilder) {\r\n builder.addConstant(\"kSurfaceBitIndex_HasTexture\", VariableType.Int, SurfaceBitIndex.HasTexture.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_ApplyLighting\", VariableType.Int, SurfaceBitIndex.ApplyLighting.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormals\", VariableType.Int, SurfaceBitIndex.HasNormals.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_IgnoreMaterial\", VariableType.Int, SurfaceBitIndex.IgnoreMaterial.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_TransparencyThreshold\", VariableType.Int, SurfaceBitIndex.TransparencyThreshold.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_BackgroundFill\", VariableType.Int, SurfaceBitIndex.BackgroundFill.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasColorAndNormal\", VariableType.Int, SurfaceBitIndex.HasColorAndNormal.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_OverrideRgb\", VariableType.Int, SurfaceBitIndex.OverrideRgb.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_NoFaceFront\", VariableType.Int, SurfaceBitIndex.NoFaceFront.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasMaterialAtlas\", VariableType.Int, SurfaceBitIndex.HasMaterialAtlas.toString());\r\n\r\n // Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus\r\n // used differently there & so require different constants. Unused constants are commented out.\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasTexture\", SurfaceBitIndex.HasTexture);\r\n builder.addBitFlagConstant(\"kSurfaceBit_IgnoreMaterial\", SurfaceBitIndex.IgnoreMaterial);\r\n builder.addBitFlagConstant(\"kSurfaceBit_OverrideRgb\", SurfaceBitIndex.OverrideRgb);\r\n\r\n // Only need masks for flags modified in vertex shader\r\n const suffix = System.instance.capabilities.isWebGL2 ? \"u\" : \".0\";\r\n const type = System.instance.capabilities.isWebGL2 ? VariableType.Uint : VariableType.Float;\r\n builder.addConstant(\"kSurfaceMask_HasTexture\", type, SurfaceFlags.HasTexture.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_IgnoreMaterial\", type, SurfaceFlags.IgnoreMaterial.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_OverrideRgb\", type, SurfaceFlags.OverrideRgb.toString() + suffix);\r\n\r\n addExtractNthBit(builder);\r\n if (System.instance.capabilities.isWebGL2) {\r\n builder.addFunction(isSurfaceBitSet2);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Uint);\r\n } else {\r\n builder.addFunction(isSurfaceBitSet);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Float);\r\n }\r\n}\r\n\r\nconst initSurfaceFlags = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0.0;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0.0;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0.0;\r\n`;\r\nconst initSurfaceFlags2 = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;\r\n`;\r\n\r\nconst computeBaseSurfaceFlags = `\r\n bool hasTexture = u_surfaceFlags[kSurfaceBitIndex_HasTexture];\r\n if (feature_ignore_material) {\r\n if (hasTexture) {\r\n hasTexture = false;\r\n surfaceFlags -= kSurfaceMask_HasTexture;\r\n }\r\n\r\n surfaceFlags += kSurfaceMask_IgnoreMaterial;\r\n }\r\n`;\r\n\r\n// Textured surfaces (including raster glyphs) always *multiply* the sampled alpha by the alpha override.\r\nconst computeColorSurfaceFlags = `\r\n if (feature_rgb.r >= 0.0)\r\n surfaceFlags += kSurfaceMask_OverrideRgb;\r\n`;\r\n\r\nconst returnSurfaceFlags = \" return surfaceFlags;\\n\";\r\nconst returnSurfaceFlags2 = \" return float(surfaceFlags);\\n\";\r\n\r\nconst computeSurfaceFlags = computeBaseSurfaceFlags;\r\nconst computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;\r\n\r\n/** @internal */\r\nexport const octDecodeNormal = `\r\nvec3 octDecodeNormal(vec2 e) {\r\n e = e / 255.0 * 2.0 - 1.0;\r\n vec3 n = vec3(e.x, e.y, 1.0 - abs(e.x) - abs(e.y));\r\n if (n.z < 0.0) {\r\n vec2 signNotZero = vec2(n.x >= 0.0 ? 1.0 : -1.0, n.y >= 0.0 ? 1.0 : -1.0);\r\n n.xy = (1.0 - abs(n.yx)) * signNotZero;\r\n }\r\n\r\n return normalize(n);\r\n}\r\n`;\r\n\r\nconst computeNormal = `\r\n vec2 tc = g_vertexBaseCoords;\r\n tc.x += 3.0 * g_vert_stepX;\r\n vec4 enc = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec2 normal = u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal] ? enc.xy : g_vertexData2;\r\n return u_surfaceFlags[kSurfaceBitIndex_HasNormals] ? normalize(MAT_NORM * octDecodeNormal(normal)) : vec3(0.0);\r\n`;\r\n\r\nconst computeAnimatedNormal = `\r\n if (u_animNormalParams.x >= 0.0)\r\n return normalize(MAT_NORM * computeAnimationNormal(u_animNormalParams.x, u_animNormalParams.y, u_animNormalParams.z));\r\n${computeNormal}`;\r\n\r\nconst applyBackgroundColor = `\r\n return u_surfaceFlags[kSurfaceBitIndex_BackgroundFill] ? vec4(u_bgColor.rgb, baseColor.a) : baseColor;\r\n`;\r\n\r\nconst computeTexCoord = `\r\n vec2 tc = g_vertexBaseCoords;\r\n tc.x += 3.0 * g_vert_stepX;\r\n vec4 rgba = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec2 qcoords = vec2(decodeUInt16(rgba.xy), decodeUInt16(rgba.zw));\r\n return chooseVec2WithBitFlag(vec2(0.0), unquantize2d(qcoords, u_qTexCoordParams), surfaceFlags, kSurfaceBit_HasTexture);\r\n`;\r\nconst computeAnimatedTexCoord = `\r\n if (u_animScalarQParams.x >= 0.0)\r\n return computeAnimationParam(u_animScalarParams.x, u_animScalarParams.y, u_animScalarParams.z, u_animScalarQParams.x, u_animScalarQParams.y);\r\n${computeTexCoord}`;\r\nconst getSurfaceColor = `\r\nvec4 getSurfaceColor() { return v_color; }\r\n`;\r\n\r\n// If we have texture weight < 1.0 we must compute the element/material color first then mix with texture color\r\n// in ApplyMaterialOverrides(). Do the sample once, here, and store in a global variable for possible later use.\r\n// If a glyph texture, must mix getSurfaceColor() with texture color so texture color alpha is applied 100% and\r\n// surface color rgb is scaled by texture color rgb (latter is full white originally but stretched via mipmapping).\r\nconst computeBaseColor = `\r\n g_surfaceTexel = sampleSurfaceTexture();\r\n vec4 surfaceColor = getSurfaceColor();\r\n\r\n if (!u_applyGlyphTex)\r\n return surfaceColor;\r\n\r\n // Compute color for raster glyph.\r\n const vec3 white = vec3(1.0);\r\n const vec3 epsilon = vec3(0.0001);\r\n const vec3 almostWhite = white - epsilon;\r\n\r\n // set to black if almost white and reverse white-on-white is on\r\n bvec3 isAlmostWhite = greaterThan(surfaceColor.rgb, almostWhite);\r\n surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);\r\n return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a);\r\n`;\r\n\r\nconst surfaceFlagArray = new Int32Array(SurfaceBitIndex.Count);\r\n\r\n/** @internal */\r\nexport function addSurfaceFlags(builder: ProgramBuilder, withFeatureOverrides: boolean, withFeatureColor: boolean) {\r\n addSurfaceFlagsLookup(builder.vert);\r\n addSurfaceFlagsLookup(builder.frag);\r\n\r\n let compute = (System.instance.capabilities.isWebGL2 ? initSurfaceFlags2 : initSurfaceFlags);\r\n if (withFeatureOverrides)\r\n compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\\n`;\r\n compute += (System.instance.capabilities.isWebGL2 ? returnSurfaceFlags2 : returnSurfaceFlags);\r\n builder.addFunctionComputedVarying(\"v_surfaceFlags\", VariableType.Float, \"computeSurfaceFlags\", compute);\r\n\r\n if (System.instance.capabilities.isWebGL2)\r\n builder.frag.addInitializer(\"surfaceFlags = uint(floor(v_surfaceFlags + 0.5));\");\r\n else\r\n builder.frag.addInitializer(\"surfaceFlags = floor(v_surfaceFlags + 0.5);\");\r\n\r\n builder.addUniformArray(\"u_surfaceFlags\", VariableType.Boolean, SurfaceBitIndex.Count, (prog) => {\r\n prog.addGraphicUniform(\"u_surfaceFlags\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asSurface);\r\n const mesh = params.geometry.asSurface;\r\n mesh.computeSurfaceFlags(params.programParams, surfaceFlagArray);\r\n uniform.setUniform1iv(surfaceFlagArray);\r\n });\r\n });\r\n}\r\n\r\nfunction addNormal(builder: ProgramBuilder, instanced: IsInstanced, animated: IsAnimated) {\r\n addNormalMatrix(builder.vert, instanced);\r\n\r\n builder.vert.addFunction(octDecodeNormal);\r\n addChooseWithBitFlagFunctions(builder.vert);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", animated ? computeAnimatedNormal : computeNormal);\r\n\r\n // Set to true to colorize surfaces based on normals (in world space).\r\n // You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.\r\n const debugNormals = false;\r\n if (debugNormals) {\r\n builder.frag.set(FragmentShaderComponent.ApplyDebugColor, \"return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);\");\r\n builder.addFunctionComputedVarying(\"v_normal\", VariableType.Vec3, \"computeDebugNormal\", `\r\n vec2 tc = g_vertexBaseCoords;\r\n tc.x += 3.0 * g_vert_stepX;\r\n vec4 enc = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec2 normal = u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal] ? enc.xy : g_vertexData2;\r\n return u_surfaceFlags[kSurfaceBitIndex_HasNormals] ? normalize(octDecodeNormal(normal)) : vec3(0.0);\r\n `);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud = false) {\r\n if (isThematic) {\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));\r\n } else {\r\n builder.vert.addFunction(unquantize2d);\r\n addChooseWithBitFlagFunctions(builder.vert);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", animated ? computeAnimatedTexCoord : computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (surfGeom.useTexture(params.programParams)) {\r\n const uvQParams = surfGeom.lut.uvQParams;\r\n if (undefined !== uvQParams) {\r\n uniform.setUniform4fv(uvQParams);\r\n }\r\n }\r\n });\r\n });\r\n builder.frag.addFunction(sampleSurfaceTexture);\r\n }\r\n\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures\r\n params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);\r\n } else if (surfGeom.useTexture(params.programParams)) {\r\n const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? (params.target.analysisTexture as Texture) : surfGeom.texture;\r\n assert(undefined !== texture);\r\n texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.SurfaceTexture);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport const discardClassifiedByAlpha = `\r\n if (u_no_classifier_discard)\r\n return false;\r\n\r\n bool hasAlpha = alpha <= s_maxAlpha;\r\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\r\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\r\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\r\n`;\r\n\r\n// Target.readPixels() renders everything in opaque pass. It turns off textures for normal surfaces but keeps them for things like 3d view attachment tiles.\r\n// We want to discard fully-transparent pixels of those things during readPixels() so that we don't locate the attachment unless the cursor is over a\r\n// non-transparent pixel of it.\r\nconst discardTransparentTexel = `return isSurfaceBitSet(kSurfaceBit_HasTexture) && alpha < (1.0 / 255.0);`;\r\n\r\n/** @internal */\r\nexport function createSurfaceBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, flags.isThematic, false);\r\n addShaderFlags(builder);\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n }\r\n\r\n if (flags.isThematic) {\r\n addThematicDisplay(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n addSurfaceFlags(builder, FeatureMode.Overrides === feat, true);\r\n addSurfaceDiscard(builder, flags);\r\n addNormal(builder, flags.isInstanced, flags.isAnimated);\r\n\r\n // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).\r\n addChooseWithBitFlagFunctions(builder.frag);\r\n builder.frag.set(FragmentShaderComponent.FinalizeBaseColor, applyBackgroundColor);\r\n builder.frag.addUniform(\"u_bgColor\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\r\n params.target.uniforms.style.bindBackgroundRgb(uniform);\r\n });\r\n });\r\n\r\n addTexture(builder, flags.isAnimated, flags.isThematic);\r\n\r\n builder.frag.addUniform(\"u_applyGlyphTex\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_applyGlyphTex\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n uniform.setUniform1i(surfGeom.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);\r\n });\r\n });\r\n\r\n // Fragment and Vertex\r\n addColor(builder);\r\n\r\n // Fragment\r\n builder.frag.addFunction(getSurfaceColor);\r\n addLighting(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n if (flags.isTranslucent) {\r\n addTranslucency(builder);\r\n } else {\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(builder.frag);\r\n } else {\r\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardTransparentTexel);\r\n if (!flags.isClassified)\r\n addOverrideClassifierColor(builder, flags.isThematic);\r\n else\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isEdgeTestNeeded || flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n builder.frag.addGlobal(\"g_surfaceTexel\", VariableType.Vec4);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, (flags.isThematic === IsThematic.No) ? computeBaseColor : \"return getSurfaceColor();\");\r\n\r\n if (flags.isClassified)\r\n addClassificationTranslucencyDiscard(builder);\r\n\r\n addSurfaceMonochrome(builder.frag);\r\n addMaterial(builder);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\nexport function addClassificationTranslucencyDiscard(builder: ProgramBuilder) {\r\n // For unclassified geometry, we need to render in both the translucent and opaque passes if any feature transparency overrides are applied that would change the default render pass used.\r\n // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.\r\n // For classified geometry, the transparency comes from the classifier geometry (when using Display.ElementColor), so even if there are no feature overrides, we may need to draw in both passes.\r\n // Since the transparency is not known until the fragment shader, we must perform the discard there instead.\r\n addMaxAlpha(builder.frag);\r\n addRenderPass(builder.frag);\r\n\r\n // Do not discard transparent classified geometry if we're trying to do a pick...\r\n builder.frag.addUniform(\"u_no_classifier_discard\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_no_classifier_discard\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardClassifiedByAlpha);\r\n}\r\n"]}
@@ -16,7 +16,7 @@ const Decode_1 = require("./Decode");
16
16
  const Instancing_1 = require("./Instancing");
17
17
  const LookupTable_1 = require("./LookupTable");
18
18
  const initializeVertLUTCoords = `
19
- g_vertexLUTIndex = decodeUInt24(a_pos);
19
+ g_vertexLUTIndex = decodeUInt24(qpos);
20
20
  g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);
21
21
  `;
22
22
  const unquantizePosition = `