@itwin/core-frontend 4.0.0-dev.1 → 4.0.0-dev.4

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 (417) hide show
  1. package/lib/cjs/IModelApp.d.ts +1 -0
  2. package/lib/cjs/IModelApp.d.ts.map +1 -1
  3. package/lib/cjs/IModelApp.js +2 -4
  4. package/lib/cjs/IModelApp.js.map +1 -1
  5. package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
  6. package/lib/cjs/SubCategoriesCache.js +0 -1
  7. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  8. package/lib/cjs/render/RealityMeshParams.d.ts +4 -1
  9. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  10. package/lib/cjs/render/RealityMeshParams.js +14 -4
  11. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  12. package/lib/cjs/render/RenderSystem.d.ts +5 -16
  13. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  14. package/lib/cjs/render/RenderSystem.js +0 -6
  15. package/lib/cjs/render/RenderSystem.js.map +1 -1
  16. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  17. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  18. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  19. package/lib/cjs/render/webgl/AttributeBuffers.d.ts +9 -79
  20. package/lib/cjs/render/webgl/AttributeBuffers.d.ts.map +1 -1
  21. package/lib/cjs/render/webgl/AttributeBuffers.js +19 -152
  22. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  23. package/lib/cjs/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  24. package/lib/cjs/render/webgl/BackgroundMapDrape.js +0 -3
  25. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  26. package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
  27. package/lib/cjs/render/webgl/BranchUniforms.js +0 -8
  28. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  29. package/lib/cjs/render/webgl/ClipStack.d.ts +0 -1
  30. package/lib/cjs/render/webgl/ClipStack.d.ts.map +1 -1
  31. package/lib/cjs/render/webgl/ClipStack.js +2 -6
  32. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  33. package/lib/cjs/render/webgl/ClipVolume.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/ClipVolume.js +1 -5
  35. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  36. package/lib/cjs/render/webgl/ClippingProgram.d.ts +3 -2
  37. package/lib/cjs/render/webgl/ClippingProgram.d.ts.map +1 -1
  38. package/lib/cjs/render/webgl/ClippingProgram.js +10 -37
  39. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  40. package/lib/cjs/render/webgl/DrawCommand.d.ts +2 -2
  41. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/DrawCommand.js +1 -1
  43. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  44. package/lib/cjs/render/webgl/FeatureOverrides.js +1 -1
  45. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  46. package/lib/cjs/render/webgl/FloatRGBA.d.ts.map +1 -1
  47. package/lib/cjs/render/webgl/FloatRGBA.js +0 -4
  48. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  49. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  50. package/lib/cjs/render/webgl/GLTimer.d.ts.map +1 -1
  51. package/lib/cjs/render/webgl/GLTimer.js +2 -35
  52. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  53. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  54. package/lib/cjs/render/webgl/PlanarClassifier.js +13 -71
  55. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  56. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  57. package/lib/cjs/render/webgl/PointCloud.js +1 -3
  58. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  59. package/lib/cjs/render/webgl/RenderBuffer.d.ts +1 -1
  60. package/lib/cjs/render/webgl/RenderBuffer.d.ts.map +1 -1
  61. package/lib/cjs/render/webgl/RenderBuffer.js +2 -3
  62. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  63. package/lib/cjs/render/webgl/RenderFlags.d.ts +1 -2
  64. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  65. package/lib/cjs/render/webgl/RenderFlags.js +4 -6
  66. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  67. package/lib/cjs/render/webgl/SceneCompositor.d.ts +0 -2
  68. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  69. package/lib/cjs/render/webgl/SceneCompositor.js +754 -1135
  70. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  71. package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
  72. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  73. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +1 -2
  74. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  75. package/lib/cjs/render/webgl/ShaderBuilder.js +13 -48
  76. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  77. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -2
  78. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  79. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  80. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  81. package/lib/cjs/render/webgl/SolarShadowMap.js +6 -18
  82. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  83. package/lib/cjs/render/webgl/System.d.ts +11 -10
  84. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  85. package/lib/cjs/render/webgl/System.js +40 -122
  86. package/lib/cjs/render/webgl/System.js.map +1 -1
  87. package/lib/cjs/render/webgl/Technique.d.ts +4 -5
  88. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  89. package/lib/cjs/render/webgl/Technique.js +4 -28
  90. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  91. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  92. package/lib/cjs/render/webgl/Texture.js +14 -18
  93. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  94. package/lib/cjs/render/webgl/ThematicSensors.d.ts +4 -3
  95. package/lib/cjs/render/webgl/ThematicSensors.d.ts.map +1 -1
  96. package/lib/cjs/render/webgl/ThematicSensors.js +9 -50
  97. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  98. package/lib/cjs/render/webgl/ThematicUniforms.js +1 -1
  99. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  100. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  101. package/lib/cjs/render/webgl/UniformHandle.js +1 -4
  102. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  103. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  104. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  105. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
  106. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  107. package/lib/cjs/render/webgl/glsl/Animation.d.ts +1 -2
  108. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  109. package/lib/cjs/render/webgl/glsl/Animation.js +23 -26
  110. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  111. package/lib/cjs/render/webgl/glsl/Blur.d.ts +1 -2
  112. package/lib/cjs/render/webgl/glsl/Blur.d.ts.map +1 -1
  113. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  114. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  115. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  116. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -9
  117. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  118. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  119. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  120. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -10
  121. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  122. package/lib/cjs/render/webgl/glsl/Clipping.d.ts +1 -1
  123. package/lib/cjs/render/webgl/glsl/Clipping.d.ts.map +1 -1
  124. package/lib/cjs/render/webgl/glsl/Clipping.js +5 -36
  125. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  126. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  127. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  128. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  129. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts +1 -2
  130. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  131. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  132. package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
  133. package/lib/cjs/render/webgl/glsl/Common.js +9 -55
  134. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  135. package/lib/cjs/render/webgl/glsl/Composite.d.ts +1 -2
  136. package/lib/cjs/render/webgl/glsl/Composite.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  138. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts +1 -2
  139. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  140. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  141. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  142. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +12 -19
  144. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  145. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts +4 -7
  146. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  147. package/lib/cjs/render/webgl/glsl/CopyStencil.js +2 -39
  148. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  149. package/lib/cjs/render/webgl/glsl/EDL.d.ts +4 -5
  150. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -1
  151. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  152. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  153. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  154. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  155. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  156. package/lib/cjs/render/webgl/glsl/Edge.js +2 -2
  157. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  158. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  159. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +3 -24
  160. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  161. package/lib/cjs/render/webgl/glsl/Fragment.d.ts +0 -7
  162. package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
  163. package/lib/cjs/render/webgl/glsl/Fragment.js +5 -40
  164. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  165. package/lib/cjs/render/webgl/glsl/Instancing.d.ts.map +1 -1
  166. package/lib/cjs/render/webgl/glsl/Instancing.js +1 -5
  167. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  168. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  169. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  170. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  171. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  172. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  173. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -12
  174. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  175. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  176. package/lib/cjs/render/webgl/glsl/RealityMesh.js +3 -8
  177. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  178. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts +1 -2
  179. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  180. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  181. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts +1 -2
  182. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  183. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  184. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -1
  185. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  186. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  187. package/lib/cjs/render/webgl/glsl/Surface.js +33 -57
  188. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  189. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  190. package/lib/cjs/render/webgl/glsl/Thematic.js +3 -36
  191. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  192. package/lib/cjs/render/webgl/glsl/Translucency.d.ts.map +1 -1
  193. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -12
  194. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  195. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +1 -2
  196. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  197. package/lib/cjs/render/webgl/glsl/Vertex.js +15 -78
  198. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  199. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  200. package/lib/cjs/render/webgl/glsl/Wiremesh.js +2 -5
  201. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  202. package/lib/cjs/tile/PrimaryTileTree.d.ts +0 -3
  203. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  204. package/lib/cjs/tile/PrimaryTileTree.js +6 -28
  205. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  206. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  207. package/lib/cjs/tile/TileAdmin.js +2 -2
  208. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  209. package/lib/esm/IModelApp.d.ts +1 -0
  210. package/lib/esm/IModelApp.d.ts.map +1 -1
  211. package/lib/esm/IModelApp.js +2 -4
  212. package/lib/esm/IModelApp.js.map +1 -1
  213. package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
  214. package/lib/esm/SubCategoriesCache.js +0 -1
  215. package/lib/esm/SubCategoriesCache.js.map +1 -1
  216. package/lib/esm/render/RealityMeshParams.d.ts +4 -1
  217. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  218. package/lib/esm/render/RealityMeshParams.js +14 -4
  219. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  220. package/lib/esm/render/RenderSystem.d.ts +5 -16
  221. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  222. package/lib/esm/render/RenderSystem.js +0 -6
  223. package/lib/esm/render/RenderSystem.js.map +1 -1
  224. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  225. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  226. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  227. package/lib/esm/render/webgl/AttributeBuffers.d.ts +9 -79
  228. package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
  229. package/lib/esm/render/webgl/AttributeBuffers.js +16 -144
  230. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  231. package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  232. package/lib/esm/render/webgl/BackgroundMapDrape.js +0 -3
  233. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  234. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  235. package/lib/esm/render/webgl/BranchUniforms.js +0 -8
  236. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  237. package/lib/esm/render/webgl/ClipStack.d.ts +0 -1
  238. package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
  239. package/lib/esm/render/webgl/ClipStack.js +2 -6
  240. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  241. package/lib/esm/render/webgl/ClipVolume.d.ts.map +1 -1
  242. package/lib/esm/render/webgl/ClipVolume.js +1 -5
  243. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  244. package/lib/esm/render/webgl/ClippingProgram.d.ts +3 -2
  245. package/lib/esm/render/webgl/ClippingProgram.d.ts.map +1 -1
  246. package/lib/esm/render/webgl/ClippingProgram.js +10 -37
  247. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  248. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
  249. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  250. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  251. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  252. package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
  253. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  254. package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
  255. package/lib/esm/render/webgl/FloatRGBA.js +0 -4
  256. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  257. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  258. package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
  259. package/lib/esm/render/webgl/GLTimer.js +2 -35
  260. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  261. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  262. package/lib/esm/render/webgl/PlanarClassifier.js +13 -71
  263. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  264. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  265. package/lib/esm/render/webgl/PointCloud.js +1 -3
  266. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  267. package/lib/esm/render/webgl/RenderBuffer.d.ts +1 -1
  268. package/lib/esm/render/webgl/RenderBuffer.d.ts.map +1 -1
  269. package/lib/esm/render/webgl/RenderBuffer.js +2 -3
  270. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  271. package/lib/esm/render/webgl/RenderFlags.d.ts +1 -2
  272. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  273. package/lib/esm/render/webgl/RenderFlags.js +4 -6
  274. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  275. package/lib/esm/render/webgl/SceneCompositor.d.ts +0 -2
  276. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  277. package/lib/esm/render/webgl/SceneCompositor.js +756 -1137
  278. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  279. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  280. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  281. package/lib/esm/render/webgl/ShaderBuilder.d.ts +1 -2
  282. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  283. package/lib/esm/render/webgl/ShaderBuilder.js +13 -48
  284. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  285. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -2
  286. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  287. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  288. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  289. package/lib/esm/render/webgl/SolarShadowMap.js +6 -18
  290. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  291. package/lib/esm/render/webgl/System.d.ts +11 -10
  292. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  293. package/lib/esm/render/webgl/System.js +42 -124
  294. package/lib/esm/render/webgl/System.js.map +1 -1
  295. package/lib/esm/render/webgl/Technique.d.ts +4 -5
  296. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  297. package/lib/esm/render/webgl/Technique.js +5 -29
  298. package/lib/esm/render/webgl/Technique.js.map +1 -1
  299. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  300. package/lib/esm/render/webgl/Texture.js +14 -18
  301. package/lib/esm/render/webgl/Texture.js.map +1 -1
  302. package/lib/esm/render/webgl/ThematicSensors.d.ts +4 -3
  303. package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
  304. package/lib/esm/render/webgl/ThematicSensors.js +9 -50
  305. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  306. package/lib/esm/render/webgl/ThematicUniforms.js +1 -1
  307. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  308. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  309. package/lib/esm/render/webgl/UniformHandle.js +1 -4
  310. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  311. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  312. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  313. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  314. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  315. package/lib/esm/render/webgl/glsl/Animation.d.ts +1 -2
  316. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  317. package/lib/esm/render/webgl/glsl/Animation.js +23 -26
  318. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  319. package/lib/esm/render/webgl/glsl/Blur.d.ts +1 -2
  320. package/lib/esm/render/webgl/glsl/Blur.d.ts.map +1 -1
  321. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  322. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  323. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  324. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -9
  325. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  326. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  327. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  328. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -10
  329. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  330. package/lib/esm/render/webgl/glsl/Clipping.d.ts +1 -1
  331. package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
  332. package/lib/esm/render/webgl/glsl/Clipping.js +5 -36
  333. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  334. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  335. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  336. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  337. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts +1 -2
  338. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  339. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  340. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  341. package/lib/esm/render/webgl/glsl/Common.js +9 -55
  342. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  343. package/lib/esm/render/webgl/glsl/Composite.d.ts +1 -2
  344. package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
  345. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  346. package/lib/esm/render/webgl/glsl/CopyColor.d.ts +1 -2
  347. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  348. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  349. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  350. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  351. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +12 -19
  352. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  353. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts +4 -7
  354. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  355. package/lib/esm/render/webgl/glsl/CopyStencil.js +1 -37
  356. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  357. package/lib/esm/render/webgl/glsl/EDL.d.ts +4 -5
  358. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -1
  359. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  360. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  361. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  362. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  363. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  364. package/lib/esm/render/webgl/glsl/Edge.js +2 -2
  365. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  366. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  367. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +3 -24
  368. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  369. package/lib/esm/render/webgl/glsl/Fragment.d.ts +0 -7
  370. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  371. package/lib/esm/render/webgl/glsl/Fragment.js +4 -38
  372. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  373. package/lib/esm/render/webgl/glsl/Instancing.d.ts.map +1 -1
  374. package/lib/esm/render/webgl/glsl/Instancing.js +1 -5
  375. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  376. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  378. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  379. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  380. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  381. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -12
  382. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  383. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  384. package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -8
  385. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  386. package/lib/esm/render/webgl/glsl/SkyBox.d.ts +1 -2
  387. package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  388. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  389. package/lib/esm/render/webgl/glsl/SkySphere.d.ts +1 -2
  390. package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  391. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  392. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
  393. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  394. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  395. package/lib/esm/render/webgl/glsl/Surface.js +33 -57
  396. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  397. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  398. package/lib/esm/render/webgl/glsl/Thematic.js +3 -36
  399. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  400. package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
  401. package/lib/esm/render/webgl/glsl/Translucency.js +3 -13
  402. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  403. package/lib/esm/render/webgl/glsl/Vertex.d.ts +1 -2
  404. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  405. package/lib/esm/render/webgl/glsl/Vertex.js +16 -79
  406. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  407. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  408. package/lib/esm/render/webgl/glsl/Wiremesh.js +2 -5
  409. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  410. package/lib/esm/tile/PrimaryTileTree.d.ts +0 -3
  411. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  412. package/lib/esm/tile/PrimaryTileTree.js +8 -30
  413. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  414. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  415. package/lib/esm/tile/TileAdmin.js +2 -2
  416. package/lib/esm/tile/TileAdmin.js.map +1 -1
  417. package/package.json +20 -20
@@ -6,7 +6,6 @@
6
6
  * @module WebGL
7
7
  */
8
8
  import { TextureUnit } from "../RenderFlags";
9
- import { System } from "../System";
10
9
  import { Texture2DHandle } from "../Texture";
11
10
  import { createViewportQuadBuilder } from "./ViewportQuad";
12
11
  const computeBaseColor = "return vec4(1.0);";
@@ -19,24 +18,18 @@ export function createCopyPickBuffersProgram(context) {
19
18
  const builder = createViewportQuadBuilder(true);
20
19
  const frag = builder.frag;
21
20
  frag.set(1 /* ComputeBaseColor */, computeBaseColor);
22
- if (System.instance.capabilities.maxColorAttachments < 2) {
23
- // NB: Never used - we gl.clear() each attachment directly.
24
- frag.set(16 /* AssignFragData */, "FragColor = vec4(0.0);");
25
- }
26
- else {
27
- frag.addUniform("u_pickFeatureId", 8 /* Sampler2D */, (prog) => {
28
- prog.addGraphicUniform("u_pickFeatureId", (uniform, params) => {
29
- Texture2DHandle.bindSampler(uniform, params.geometry.featureId, TextureUnit.Zero);
30
- });
31
- }, 3 /* High */);
32
- frag.addUniform("u_pickDepthAndOrder", 8 /* Sampler2D */, (prog) => {
33
- prog.addGraphicUniform("u_pickDepthAndOrder", (uniform, params) => {
34
- Texture2DHandle.bindSampler(uniform, params.geometry.depthAndOrder, TextureUnit.One);
35
- });
36
- }, 3 /* High */);
37
- frag.addDrawBuffersExtension(2);
38
- frag.set(16 /* AssignFragData */, assignFragData);
39
- }
21
+ frag.addUniform("u_pickFeatureId", 8 /* Sampler2D */, (prog) => {
22
+ prog.addGraphicUniform("u_pickFeatureId", (uniform, params) => {
23
+ Texture2DHandle.bindSampler(uniform, params.geometry.featureId, TextureUnit.Zero);
24
+ });
25
+ }, 3 /* High */);
26
+ frag.addUniform("u_pickDepthAndOrder", 8 /* Sampler2D */, (prog) => {
27
+ prog.addGraphicUniform("u_pickDepthAndOrder", (uniform, params) => {
28
+ Texture2DHandle.bindSampler(uniform, params.geometry.depthAndOrder, TextureUnit.One);
29
+ });
30
+ }, 3 /* High */);
31
+ frag.addDrawBuffersExtension(2);
32
+ frag.set(16 /* AssignFragData */, assignFragData);
40
33
  builder.vert.headerComment = "//!V! CopyPickBuffers";
41
34
  builder.frag.headerComment = "//!F! CopyPickBuffers";
42
35
  return builder.buildProgram(context);
@@ -1 +1 @@
1
- {"version":3,"file":"CopyPickBuffers.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyPickBuffers.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAE7C,MAAM,cAAc,GAAG;;;CAGtB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,4BAA4B,CAAC,OAAqB;IAChE,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;IAErE,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,GAAG,CAAC,EAAE;QACxD,2DAA2D;QAC3D,IAAI,CAAC,GAAG,0BAAyC,wBAAwB,CAAC,CAAC;KAC5E;SAAM;QACL,IAAI,CAAC,UAAU,CAAC,iBAAiB,qBAA0B,CAAC,IAAI,EAAE,EAAE;YAClE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC5D,eAAe,CAAC,WAAW,CAAC,OAAO,EAAG,MAAM,CAAC,QAAmC,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YAChH,CAAC,CAAC,CAAC;QACL,CAAC,eAAyB,CAAC;QAE3B,IAAI,CAAC,UAAU,CAAC,qBAAqB,qBAA0B,CAAC,IAAI,EAAE,EAAE;YACtE,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChE,eAAe,CAAC,WAAW,CAAC,OAAO,EAAG,MAAM,CAAC,QAAmC,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;YACnH,CAAC,CAAC,CAAC;QACL,CAAC,eAAyB,CAAC;QAE3B,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,0BAAyC,cAAc,CAAC,CAAC;KAClE;IAED,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,uBAAuB,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,uBAAuB,CAAC;IAErD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { CopyPickBufferGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, VariablePrecision, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computeBaseColor = \"return vec4(1.0);\";\r\n\r\nconst assignFragData = `\r\n FragColor0 = TEXTURE(u_pickFeatureId, v_texCoord);\r\n FragColor1 = TEXTURE(u_pickDepthAndOrder, v_texCoord);\r\n`;\r\n\r\n/** @internal */\r\nexport function createCopyPickBuffersProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n if (System.instance.capabilities.maxColorAttachments < 2) {\r\n // NB: Never used - we gl.clear() each attachment directly.\r\n frag.set(FragmentShaderComponent.AssignFragData, \"FragColor = vec4(0.0);\");\r\n } else {\r\n frag.addUniform(\"u_pickFeatureId\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_pickFeatureId\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CopyPickBufferGeometry).featureId, TextureUnit.Zero);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CopyPickBufferGeometry).depthAndOrder, TextureUnit.One);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.addDrawBuffersExtension(2);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n }\r\n\r\n builder.vert.headerComment = \"//!V! CopyPickBuffers\";\r\n builder.frag.headerComment = \"//!F! CopyPickBuffers\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"CopyPickBuffers.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyPickBuffers.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAE7C,MAAM,cAAc,GAAG;;;CAGtB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,4BAA4B,CAAC,OAA+B;IAC1E,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;IAErE,IAAI,CAAC,UAAU,CAAC,iBAAiB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QAClE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,eAAe,CAAC,WAAW,CAAC,OAAO,EAAG,MAAM,CAAC,QAAmC,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACL,CAAC,eAAyB,CAAC;IAE3B,IAAI,CAAC,UAAU,CAAC,qBAAqB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACtE,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChE,eAAe,CAAC,WAAW,CAAC,OAAO,EAAG,MAAM,CAAC,QAAmC,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QACnH,CAAC,CAAC,CAAC;IACL,CAAC,eAAyB,CAAC;IAE3B,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,0BAAyC,cAAc,CAAC,CAAC;IAEjE,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,uBAAuB,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,uBAAuB,CAAC;IAErD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { CopyPickBufferGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, VariablePrecision, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computeBaseColor = \"return vec4(1.0);\";\r\n\r\nconst assignFragData = `\r\n FragColor0 = TEXTURE(u_pickFeatureId, v_texCoord);\r\n FragColor1 = TEXTURE(u_pickDepthAndOrder, v_texCoord);\r\n`;\r\n\r\n/** @internal */\r\nexport function createCopyPickBuffersProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n frag.addUniform(\"u_pickFeatureId\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_pickFeatureId\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CopyPickBufferGeometry).featureId, TextureUnit.Zero);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CopyPickBufferGeometry).depthAndOrder, TextureUnit.One);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.addDrawBuffersExtension(2);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n\r\n builder.vert.headerComment = \"//!V! CopyPickBuffers\";\r\n builder.frag.headerComment = \"//!F! CopyPickBuffers\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
@@ -1,16 +1,13 @@
1
1
  /** @packageDocumentation
2
2
  * @module WebGL
3
3
  */
4
- import { WebGLContext } from "@itwin/webgl-compatibility";
5
4
  import { ShaderProgram } from "../ShaderProgram";
6
5
  /** @internal */
7
- export declare function createVolClassColorUsingStencilProgram(context: WebGLContext): ShaderProgram;
6
+ export declare function createVolClassColorUsingStencilProgram(context: WebGL2RenderingContext): ShaderProgram;
8
7
  /** @internal */
9
- export declare function createVolClassCopyZProgram(context: WebGLContext): ShaderProgram;
8
+ export declare function createVolClassCopyZProgram(context: WebGL2RenderingContext): ShaderProgram;
10
9
  /** @internal */
11
- export declare function createVolClassCopyZUsingPointsProgram(context: WebGLContext): ShaderProgram;
10
+ export declare function createVolClassSetBlendProgram(context: WebGL2RenderingContext): ShaderProgram;
12
11
  /** @internal */
13
- export declare function createVolClassSetBlendProgram(context: WebGLContext): ShaderProgram;
14
- /** @internal */
15
- export declare function createVolClassBlendProgram(context: WebGLContext): ShaderProgram;
12
+ export declare function createVolClassBlendProgram(context: WebGL2RenderingContext): ShaderProgram;
16
13
  //# sourceMappingURL=CopyStencil.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CopyStencil.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA2DjD,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAqB3F;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CA+B/E;AAED,gBAAgB;AAChB,wBAAgB,qCAAqC,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CA6B1F;AAED,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAkDlF;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAoB/E"}
1
+ {"version":3,"file":"CopyStencil.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiDjD,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAqBrG;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA8BzF;AAED,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAkD5F;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAoBzF"}
@@ -6,12 +6,9 @@
6
6
  * @module WebGL
7
7
  */
8
8
  import { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from "@itwin/core-common";
9
- import { AttributeMap } from "../AttributeMap";
10
9
  import { BoundaryType } from "../CachedGeometry";
11
10
  import { FloatRgba } from "../FloatRGBA";
12
11
  import { TextureUnit } from "../RenderFlags";
13
- import { ProgramBuilder } from "../ShaderBuilder";
14
- import { System } from "../System";
15
12
  import { Texture2DHandle } from "../Texture";
16
13
  import { assignFragColor } from "./Fragment";
17
14
  import { createViewportQuadBuilder } from "./ViewportQuad";
@@ -25,12 +22,6 @@ const checkDiscardBackgroundByZ = `
25
22
  return false;
26
23
  `;
27
24
  const depthFromTexture = "return TEXTURE(u_depthTexture, v_texCoord).r;";
28
- const computePosition = `
29
- gl_PointSize = 1.0; // Need to set the point size since we are drawing points with this.
30
- float z = TEXTURE(u_depthTexture, (rawPos.xy + 1.0) * 0.5).r * 2.0 - 1.0;
31
- return vec4(rawPos.x, rawPos.y, z, 1.0);
32
- `;
33
- const computeQuantizedPosition2d = `return vec3(a_pos.x, a_pos.y, 0.0);`;
34
25
  const scratchColor = FloatRgba.fromColorDef(ColorDef.white);
35
26
  /** @internal */
36
27
  function addBoundaryTypeConstants(builder) {
@@ -97,40 +88,13 @@ export function createVolClassCopyZProgram(context) {
97
88
  Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);
98
89
  });
99
90
  });
100
- if (!System.instance.capabilities.isWebGL2)
101
- frag.addExtension("GL_EXT_frag_depth");
91
+ frag.addExtension("GL_EXT_frag_depth");
102
92
  frag.set(18 /* FinalizeDepth */, depthFromTexture);
103
93
  builder.vert.headerComment = "//!V! VolClassCopyZ";
104
94
  builder.frag.headerComment = "//!F! VolClassCopyZ";
105
95
  return builder.buildProgram(context);
106
96
  }
107
97
  /** @internal */
108
- export function createVolClassCopyZUsingPointsProgram(context) {
109
- const attrMap = AttributeMap.findAttributeMap(31 /* VolClassCopyZ */, false);
110
- const builder = new ProgramBuilder(attrMap);
111
- const vert = builder.vert;
112
- vert.set(0 /* ComputeQuantizedPosition */, computeQuantizedPosition2d);
113
- vert.addUniform("u_depthTexture", 8 /* Sampler2D */, (prog) => {
114
- prog.addGraphicUniform("u_depthTexture", (uniform, params) => {
115
- const geom = params.geometry;
116
- Texture2DHandle.bindSampler(uniform, geom.zTexture, TextureUnit.Zero);
117
- });
118
- });
119
- vert.set(10 /* ComputePosition */, computePosition);
120
- const frag = builder.frag;
121
- frag.set(1 /* ComputeBaseColor */, computeSetBlendColor);
122
- frag.set(16 /* AssignFragData */, assignFragColor);
123
- frag.addUniform("u_blend_color", 5 /* Vec4 */, (prog) => {
124
- prog.addGraphicUniform("u_blend_color", (uniform, _params) => {
125
- scratchColor.set(0.0, 0.0, 0.0, 0.0);
126
- scratchColor.bind(uniform);
127
- });
128
- });
129
- builder.vert.headerComment = "//!V! VolClassCopyZUsingPoints";
130
- builder.frag.headerComment = "//!F! VolClassCopyZUsingPoints";
131
- return builder.buildProgram(context);
132
- }
133
- /** @internal */
134
98
  export function createVolClassSetBlendProgram(context) {
135
99
  const builder = createViewportQuadBuilder(true);
136
100
  builder.addInlineComputedVarying("v_texCoord", 3 /* Vec2 */, computeTexCoord);
@@ -1 +1 @@
1
- {"version":3,"file":"CopyStencil.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from \"@itwin/core-common\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { BoundaryType, ScreenPointsGeometry, SingleTexturedViewportQuadGeometry, VolumeClassifierGeometry } from \"../CachedGeometry\";\r\nimport { FloatRgb, FloatRgba } from \"../FloatRGBA\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computehiliteColor = \"return vec4(u_hilite_color.rgb, 1.0);\";\r\n\r\nconst computeSetBlendColor = \"return u_blend_color;\";\r\n\r\nconst computeBlendTextureColor = \"return TEXTURE(u_blendTexture, v_texCoord);\";\r\n\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\n\r\nconst checkDiscardBackgroundByZ = `\r\n if (u_boundaryType == kBoundaryType_Out)\r\n return TEXTURE(u_depthTexture, v_texCoord).r == 1.0;\r\n return false;\r\n`;\r\n\r\nconst depthFromTexture = \"return TEXTURE(u_depthTexture, v_texCoord).r;\";\r\n\r\nconst computePosition = `\r\n gl_PointSize = 1.0; // Need to set the point size since we are drawing points with this.\r\n float z = TEXTURE(u_depthTexture, (rawPos.xy + 1.0) * 0.5).r * 2.0 - 1.0;\r\n return vec4(rawPos.x, rawPos.y, z, 1.0);\r\n`;\r\n\r\nconst computeQuantizedPosition2d = `return vec3(a_pos.x, a_pos.y, 0.0);`;\r\n\r\nconst scratchColor = FloatRgba.fromColorDef(ColorDef.white);\r\n\r\n/** @internal */\r\nfunction addBoundaryTypeConstants(builder: ShaderBuilder): void {\r\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\r\n builder.addConstant(\"kBoundaryType_Out\", VariableType.Int, \"0\");\r\n builder.addConstant(\"kBoundaryType_In\", VariableType.Int, \"1\");\r\n builder.addConstant(\"kBoundaryType_Selected\", VariableType.Int, \"2\");\r\n}\r\n\r\n/** @internal */\r\nfunction setScratchColor(display: number, hilite: FloatRgb, hAlpha: number): void {\r\n switch (display) {\r\n case SpatialClassifierOutsideDisplay.Dimmed:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.3);\r\n break;\r\n case SpatialClassifierOutsideDisplay.Off:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.8);\r\n break;\r\n case SpatialClassifierOutsideDisplay.On:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n break;\r\n default: // Hilite or ByElementColor (though ByElementColor should never use this shader)\r\n scratchColor.set(hilite.red, hilite.green, hilite.blue, hAlpha);\r\n break;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassColorUsingStencilProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(false);\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computehiliteColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_hilite_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite_color\", (uniform, params) => {\r\n const useLighting = params.geometry.getFlashMode(params);\r\n if (useLighting) {\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n scratchColor.set(hiliteColor.red, hiliteColor.green, hiliteColor.blue, 1.0);\r\n } else\r\n scratchColor.set(1.0, 1.0, 1.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassColorUsingStencil\";\r\n builder.frag.headerComment = \"//!F! VolClassColorUsingStencil\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (!System.instance.capabilities.isWebGL2)\r\n frag.addExtension(\"GL_EXT_frag_depth\");\r\n frag.set(FragmentShaderComponent.FinalizeDepth, depthFromTexture);\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZ\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZ\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZUsingPointsProgram(context: WebGLContext): ShaderProgram {\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.VolClassCopyZ, false);\r\n const builder = new ProgramBuilder(attrMap);\r\n\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, computeQuantizedPosition2d);\r\n vert.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as ScreenPointsGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.zTexture, TextureUnit.Zero);\r\n });\r\n });\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZUsingPoints\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZUsingPoints\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassSetBlendProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n addBoundaryTypeConstants(frag);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkDiscardBackgroundByZ);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_boundaryType\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_boundaryType\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n uniform.setUniform1i(geom.boundaryType);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;\r\n switch (geom.boundaryType) {\r\n case BoundaryType.Outside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.outside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Inside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.inside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Selected:\r\n // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);\r\n setScratchColor(SpatialClassifierInsideDisplay.Hilite, hiliteColor, hiliteAlpha); // option for how to display selected classifiers has been removed, always just hilite\r\n break;\r\n }\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassSetBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassSetBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassBlendProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlendTextureColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blendTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_blendTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"CopyStencil.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from \"@itwin/core-common\";\r\nimport { BoundaryType, SingleTexturedViewportQuadGeometry, VolumeClassifierGeometry } from \"../CachedGeometry\";\r\nimport { FloatRgb, FloatRgba } from \"../FloatRGBA\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computehiliteColor = \"return vec4(u_hilite_color.rgb, 1.0);\";\r\n\r\nconst computeSetBlendColor = \"return u_blend_color;\";\r\n\r\nconst computeBlendTextureColor = \"return TEXTURE(u_blendTexture, v_texCoord);\";\r\n\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\n\r\nconst checkDiscardBackgroundByZ = `\r\n if (u_boundaryType == kBoundaryType_Out)\r\n return TEXTURE(u_depthTexture, v_texCoord).r == 1.0;\r\n return false;\r\n`;\r\n\r\nconst depthFromTexture = \"return TEXTURE(u_depthTexture, v_texCoord).r;\";\r\n\r\nconst scratchColor = FloatRgba.fromColorDef(ColorDef.white);\r\n\r\n/** @internal */\r\nfunction addBoundaryTypeConstants(builder: ShaderBuilder): void {\r\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\r\n builder.addConstant(\"kBoundaryType_Out\", VariableType.Int, \"0\");\r\n builder.addConstant(\"kBoundaryType_In\", VariableType.Int, \"1\");\r\n builder.addConstant(\"kBoundaryType_Selected\", VariableType.Int, \"2\");\r\n}\r\n\r\n/** @internal */\r\nfunction setScratchColor(display: number, hilite: FloatRgb, hAlpha: number): void {\r\n switch (display) {\r\n case SpatialClassifierOutsideDisplay.Dimmed:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.3);\r\n break;\r\n case SpatialClassifierOutsideDisplay.Off:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.8);\r\n break;\r\n case SpatialClassifierOutsideDisplay.On:\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n break;\r\n default: // Hilite or ByElementColor (though ByElementColor should never use this shader)\r\n scratchColor.set(hilite.red, hilite.green, hilite.blue, hAlpha);\r\n break;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassColorUsingStencilProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(false);\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computehiliteColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_hilite_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite_color\", (uniform, params) => {\r\n const useLighting = params.geometry.getFlashMode(params);\r\n if (useLighting) {\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n scratchColor.set(hiliteColor.red, hiliteColor.green, hiliteColor.blue, 1.0);\r\n } else\r\n scratchColor.set(1.0, 1.0, 1.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassColorUsingStencil\";\r\n builder.frag.headerComment = \"//!F! VolClassColorUsingStencil\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassCopyZProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\r\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addExtension(\"GL_EXT_frag_depth\");\r\n frag.set(FragmentShaderComponent.FinalizeDepth, depthFromTexture);\r\n\r\n builder.vert.headerComment = \"//!V! VolClassCopyZ\";\r\n builder.frag.headerComment = \"//!F! VolClassCopyZ\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassSetBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n addBoundaryTypeConstants(frag);\r\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkDiscardBackgroundByZ);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_boundaryType\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_boundaryType\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n uniform.setUniform1i(geom.boundaryType);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_blend_color\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\r\n const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;\r\n switch (geom.boundaryType) {\r\n case BoundaryType.Outside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.outside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Inside:\r\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.inside, hiliteColor, hiliteAlpha);\r\n break;\r\n case BoundaryType.Selected:\r\n // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);\r\n setScratchColor(SpatialClassifierInsideDisplay.Hilite, hiliteColor, hiliteAlpha); // option for how to display selected classifiers has been removed, always just hilite\r\n break;\r\n }\r\n scratchColor.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as VolumeClassifierGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassSetBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassSetBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n/** @internal */\r\nexport function createVolClassBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n const frag = builder.frag;\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlendTextureColor);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_blendTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_blendTexture\", (uniform, params) => {\r\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! VolClassBlend\";\r\n builder.frag.headerComment = \"//!F! VolClassBlend\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
@@ -1,14 +1,13 @@
1
1
  /** @packageDocumentation
2
2
  * @module WebGL
3
3
  */
4
- import { WebGLContext } from "@itwin/webgl-compatibility";
5
4
  import { ShaderProgram } from "../ShaderProgram";
6
5
  /** @internal */
7
- export declare function createEDLCalcBasicProgram(context: WebGLContext): ShaderProgram;
6
+ export declare function createEDLCalcBasicProgram(context: WebGL2RenderingContext): ShaderProgram;
8
7
  /** @internal */
9
- export declare function createEDLCalcFullProgram(context: WebGLContext): ShaderProgram;
8
+ export declare function createEDLCalcFullProgram(context: WebGL2RenderingContext): ShaderProgram;
10
9
  /** @internal */
11
- export declare function createEDLFilterProgram(context: WebGLContext): ShaderProgram;
10
+ export declare function createEDLFilterProgram(context: WebGL2RenderingContext): ShaderProgram;
12
11
  /** @internal */
13
- export declare function createEDLMixProgram(context: WebGLContext): ShaderProgram;
12
+ export declare function createEDLMixProgram(context: WebGL2RenderingContext): ShaderProgram;
14
13
  //# sourceMappingURL=EDL.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EDL.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EDL.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAqCjD,gBAAgB;AAChB,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAuC9E;AAmCD,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAuC7E;AAwCD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAgC3E;AAcD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAuCxE"}
1
+ {"version":3,"file":"EDL.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EDL.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAqCjD,gBAAgB;AAChB,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAuCxF;AAmCD,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAuCvF;AAwCD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAgCrF;AAcD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAuClF"}
@@ -1 +1 @@
1
- {"version":3,"file":"EDL.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EDL.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,qGAAqG;AACrG,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BpB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,yBAAyB,CAAC,OAAqB;IAC7D,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAA2C,YAAY,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG,0BAAyC,eAAe,CAAC,CAAC;IAElE,IAAI,CAAC,UAAU,CAAC,WAAW,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACvD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAgC,CAAC;YACrD,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAgC,CAAC;YACrD,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAgC,CAAC;YACrD,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mDAAmD;IACnD,IAAI,CAAC,UAAU,CAAC,kBAAkB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC;IAElD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,4FAA4F;AAC5F,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BnB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,wBAAwB,CAAC,OAAqB;IAC5D,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAA2C,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,0BAAyC,eAAe,CAAC,CAAC;IAElE,IAAI,CAAC,UAAU,CAAC,WAAW,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACvD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,CAAC,QAA+B,CAAC;YACpD,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAA+B,CAAC;YACpD,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAA+B,CAAC;YACpD,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mDAAmD;IACnD,IAAI,CAAC,UAAU,CAAC,kBAAkB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC;IAEjD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,yEAAyE;AACzE,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCjB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,sBAAsB,CAAC,OAAqB;IAC1D,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAA2C,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,0BAAyC,eAAe,CAAC,CAAC;IAElE,IAAI,CAAC,UAAU,CAAC,WAAW,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACvD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,MAAM,CAAC,QAA6B,CAAC;YAClD,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAA6B,CAAC;YAClD,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAA6B,CAAC;YAClD,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC;IAE/C,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,0DAA0D;AAC1D,MAAM,MAAM,GAAG;;;;;;;;;CASd,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,mBAAmB,CAAC,OAAqB;IACvD,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAA2C,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,0BAAyC,eAAe,CAAC,CAAC;IAElE,IAAI,CAAC,UAAU,CAAC,iBAAiB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QAClE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,QAA0B,CAAC;YAC/C,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,iBAAiB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QAClE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,QAA0B,CAAC;YAC/C,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,iBAAiB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QAClE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,QAA0B,CAAC;YAC/C,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mDAAmD;IACnD,IAAI,CAAC,UAAU,CAAC,WAAW,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACvD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;IAE5C,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { EDLCalcBasicGeometry, EDLCalcFullGeometry, EDLFilterGeometry, EDLMixGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// This shader calculates a more basic version of EDL, and only for the original size, so single pass\r\nconst calcBasicEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n discard;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN));\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcBasicProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcBasicEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcBasic\";\r\n builder.frag.headerComment = \"//!F! EDLCalcBasic\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader calculates the full version of EDL, and can be run at full, 1/2 and 1/4 scale\r\nconst calcFullEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n float scale = u_texInfo.z; // 1, 2, 4\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n return color;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN)) / scale;\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcFullProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcFullEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcFull\";\r\n builder.frag.headerComment = \"//!F! EDLCalcFull\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader filters the EDL image, and can be run at 1/2 and 1/4 scale\r\nconst filterEDL = `\r\n // NB: this bilateral filter hardcodes spatialSigma to 2.0 and depthSigma to 0.4, with halfSize = 2\r\n float distCoefs[] = float[] (\r\n 1.0, 0.9692332344763441, 0.8824969025845955, 0.9692332344763441, 0.9394130628134758,\r\n 0.8553453273074225, 0.8824969025845955, 0.8553453273074225, 0.8553453273074225, 0.7788007830714049);\r\n const float depthSigma = 0.4;\r\n vec2 invTexSize = u_texInfo.xy;\r\n\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float wsum = 0.0; // sum of all weights\r\n vec3 csum = vec3(0.0); // sum of all contributions\r\n vec2 coordi = vec2(0.0, 0.0); // ith neighbor position x,y\r\n\r\n for (int c = -2; c <= 2; c++) {\r\n coordi.x = float(c) * invTexSize.x;\r\n int cabs = (c < 0) ? -c : c;\r\n\r\n for (int d = -2; d <= 2; d++) {\r\n coordi.y = float(d) * invTexSize.y;\r\n vec4 ci = TEXTURE(u_colorTexture, v_texCoord + coordi); // neighbor color\r\n\r\n //pixel distance based damping\r\n int dabs = (d < 0) ? -d : d;\r\n float fi = distCoefs[cabs * 3 + dabs];\r\n\r\n //pixel depth difference based damping\r\n float zi = TEXTURE(u_depthTexture, v_texCoord + coordi).r; // neighbor depth\r\n float dz = (depth - zi) / depthSigma;\r\n fi *= exp(-dz * dz / 2.0);\r\n\r\n csum += ci.rgb * fi;\r\n wsum += fi;\r\n }\r\n }\r\n return vec4(csum / wsum, 1.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLFilterProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, filterEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLFilter\";\r\n builder.frag.headerComment = \"//!F! EDLFilter\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader mixes the 3 EDL images into the final image\r\nconst mixEDL = `\r\n vec4 col1 = TEXTURE(u_colorTexture1, v_texCoord);\r\n if (col1.a == 0.0)\r\n discard;\r\n else {\r\n vec3 col2 = TEXTURE(u_colorTexture2, v_texCoord).rgb;\r\n vec3 col4 = TEXTURE(u_colorTexture4, v_texCoord).rgb;\r\n return vec4 ((u_weights.x * col1.rgb + u_weights.y * col2 + u_weights.z * col4) / (u_weights.x + u_weights.y + u_weights.z), 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLMixProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, mixEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_colorTexture1\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture1\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture1, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture2\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture2\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture2, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture4\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture4\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture4, TextureUnit.Two);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_weights\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_weights\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL2(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLMix\";\r\n builder.frag.headerComment = \"//!F! EDLMix\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"EDL.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EDL.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 { EDLCalcBasicGeometry, EDLCalcFullGeometry, EDLFilterGeometry, EDLMixGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// This shader calculates a more basic version of EDL, and only for the original size, so single pass\r\nconst calcBasicEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n discard;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN));\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcBasicProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcBasicEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcBasicGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcBasic\";\r\n builder.frag.headerComment = \"//!F! EDLCalcBasic\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader calculates the full version of EDL, and can be run at full, 1/2 and 1/4 scale\r\nconst calcFullEDL = `\r\n float strength = u_pointCloudEDL1.x;\r\n float scaleFactor = u_pointCloudEDL1.z;\r\n float pixRadius = u_pointCloudEDL1.y;\r\n float scale = u_texInfo.z; // 1, 2, 4\r\n vec2 invTexSize = u_texInfo.xy;\r\n float is3d = u_pointCloudEDL1.w;\r\n\r\n vec4 color = TEXTURE(u_colorTexture, v_texCoord);\r\n if (color.a == 0.0)\r\n return color;\r\n else {\r\n const vec2 neighbors[8] = vec2[8] ( //neighbor relative position\r\n vec2( 1.0, 0.0), vec2( 0.70710678, 0.70710678), vec2(0.0, 1.0), vec2(-0.70710678, 0.70710678),\r\n vec2(-1.0, 0.0), vec2(-0.70710678, -0.70710678), vec2(0.0, -1.0), vec2( 0.70710678, -0.70710678));\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float sum = 0.0;\r\n vec2 posScale = pixRadius * invTexSize;\r\n // contribution of each neighbor\r\n // NOTE: this is currently using neighbor depths regardless of if they were written by point cloud\r\n for (int c = 0; c < 8; c++) {\r\n vec2 nRelPos = posScale * neighbors[c];\r\n vec2 nPos = v_texCoord + nRelPos;\r\n float zN = TEXTURE(u_depthTexture, nPos).r; // neighbor depth\r\n sum += max(0.0, (is3d > 0.5) ? depth - zN : log (depth/zN)) / scale;\r\n }\r\n float f = sum / 8.0;\r\n f = exp(-f * 33.5 * strength * scaleFactor); // 33.5 factor to aim for a typical (unfactored) strength of 5\r\n return vec4(f * color.rgb, 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLCalcFullProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, calcFullEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLCalcFullGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_pointCloudEDL1\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudEDL1\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL1(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLCalcFull\";\r\n builder.frag.headerComment = \"//!F! EDLCalcFull\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader filters the EDL image, and can be run at 1/2 and 1/4 scale\r\nconst filterEDL = `\r\n // NB: this bilateral filter hardcodes spatialSigma to 2.0 and depthSigma to 0.4, with halfSize = 2\r\n float distCoefs[] = float[] (\r\n 1.0, 0.9692332344763441, 0.8824969025845955, 0.9692332344763441, 0.9394130628134758,\r\n 0.8553453273074225, 0.8824969025845955, 0.8553453273074225, 0.8553453273074225, 0.7788007830714049);\r\n const float depthSigma = 0.4;\r\n vec2 invTexSize = u_texInfo.xy;\r\n\r\n float depth = TEXTURE(u_depthTexture, v_texCoord).r;\r\n float wsum = 0.0; // sum of all weights\r\n vec3 csum = vec3(0.0); // sum of all contributions\r\n vec2 coordi = vec2(0.0, 0.0); // ith neighbor position x,y\r\n\r\n for (int c = -2; c <= 2; c++) {\r\n coordi.x = float(c) * invTexSize.x;\r\n int cabs = (c < 0) ? -c : c;\r\n\r\n for (int d = -2; d <= 2; d++) {\r\n coordi.y = float(d) * invTexSize.y;\r\n vec4 ci = TEXTURE(u_colorTexture, v_texCoord + coordi); // neighbor color\r\n\r\n //pixel distance based damping\r\n int dabs = (d < 0) ? -d : d;\r\n float fi = distCoefs[cabs * 3 + dabs];\r\n\r\n //pixel depth difference based damping\r\n float zi = TEXTURE(u_depthTexture, v_texCoord + coordi).r; // neighbor depth\r\n float dz = (depth - zi) / depthSigma;\r\n fi *= exp(-dz * dz / 2.0);\r\n\r\n csum += ci.rgb * fi;\r\n wsum += fi;\r\n }\r\n }\r\n return vec4(csum / wsum, 1.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLFilterProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, filterEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_texInfo\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_texInfo\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n uniform.setUniform3fv(geom.texInfo);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EDLFilterGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.One);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLFilter\";\r\n builder.frag.headerComment = \"//!F! EDLFilter\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n// This shader mixes the 3 EDL images into the final image\r\nconst mixEDL = `\r\n vec4 col1 = TEXTURE(u_colorTexture1, v_texCoord);\r\n if (col1.a == 0.0)\r\n discard;\r\n else {\r\n vec3 col2 = TEXTURE(u_colorTexture2, v_texCoord).rgb;\r\n vec3 col4 = TEXTURE(u_colorTexture4, v_texCoord).rgb;\r\n return vec4 ((u_weights.x * col1.rgb + u_weights.y * col2 + u_weights.z * col4) / (u_weights.x + u_weights.y + u_weights.z), 1.0);\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport function createEDLMixProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, mixEDL);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_colorTexture1\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture1\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture1, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture2\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture2\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture2, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_colorTexture4\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_colorTexture4\", (uniform, params) => {\r\n const geom = params.geometry as EDLMixGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.colorTexture4, TextureUnit.Two);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n frag.addUniform(\"u_weights\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_weights\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bindEDL2(uniform);\r\n });\r\n });\r\n\r\n builder.vert.headerComment = \"//!V! EDLMix\";\r\n builder.frag.headerComment = \"//!F! EDLMix\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
@@ -1,8 +1,7 @@
1
1
  /** @packageDocumentation
2
2
  * @module WebGL
3
3
  */
4
- import { WebGLContext } from "@itwin/webgl-compatibility";
5
4
  import { ShaderProgram } from "../ShaderProgram";
6
5
  /** @internal */
7
- export declare function createEVSMProgram(context: WebGLContext): ShaderProgram;
6
+ export declare function createEVSMProgram(context: WebGL2RenderingContext): ShaderProgram;
8
7
  //# sourceMappingURL=EVSMFromDepth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EVSMFromDepth.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EVSMFromDepth.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAsCjD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAgCtE"}
1
+ {"version":3,"file":"EVSMFromDepth.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EVSMFromDepth.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAsCjD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAgChF"}
@@ -1 +1 @@
1
- {"version":3,"file":"EVSMFromDepth.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EVSMFromDepth.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAA2B,cAAc,EAA0D,MAAM,kBAAkB,CAAC;AAEnI,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAElE,mGAAmG;AAEnG,4DAA4D;AAC5D,MAAM,eAAe,GAAG,4CAA4C,CAAC;AACrE,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBnB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,iBAAiB,CAAC,OAAqB;IACrD,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAAwC,eAAe,CAAC,CAAC;IACjE,OAAO,CAAC,wBAAwB,CAAC,YAAY,gBAAqB,eAAe,CAAC,CAAC;IAEnF,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAwB,CAAC;YAC7C,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,YAAY,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACxD,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAwB,CAAC;YAC7C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,eAAyB,CAAC;IAE3B,eAAe,CAAC,IAAI,CAAC,CAAC;IAEtB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,2BAA2C,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,0BAAyC,eAAe,CAAC,CAAC;IAElE,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;IAEnD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { EVSMGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariablePrecision, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { addEvsmExponent, warpDepth } from \"./SolarShadowMapping\";\r\n\r\n// This shader reads the depth texture, converts it to EVSM values, then averages those down 4 to 1\r\n\r\n// Positions are in NDC [-1..1]. Compute UV params in [0..1]\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\nconst computePosition = \"return rawPos;\";\r\n\r\nconst computeEVSM = `\r\n const float sampleWeight = 0.25;\r\n vec4 average = vec4(0.0);\r\n vec2 tc = v_texCoord - u_stepSize * 0.5; // v_texCoord starts in between the 4 texels\r\n\r\n float depth = TEXTURE(u_depthTexture, tc).r;\r\n vec2 vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.x += u_stepSize.x;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.y += u_stepSize.y;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.x -= u_stepSize.x;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n return average;\r\n`;\r\n\r\n/** @internal */\r\nexport function createEVSMProgram(context: WebGLContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EVSMGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_stepSize\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_stepSize\", (uniform, params) => {\r\n const geom = params.geometry as EVSMGeometry;\r\n uniform.setUniform2fv(geom.stepSize);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n addEvsmExponent(frag);\r\n\r\n frag.addFunction(warpDepth);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeEVSM);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n builder.vert.headerComment = \"//!V! EVSMFromDepth\";\r\n builder.frag.headerComment = \"//!F! EVSMFromDepth\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"EVSMFromDepth.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/EVSMFromDepth.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAA2B,cAAc,EAA0D,MAAM,kBAAkB,CAAC;AAEnI,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAElE,mGAAmG;AAEnG,4DAA4D;AAC5D,MAAM,eAAe,GAAG,4CAA4C,CAAC;AACrE,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBnB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,iBAAiB,CAAC,OAA+B;IAC/D,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,GAAG,2BAAwC,eAAe,CAAC,CAAC;IACjE,OAAO,CAAC,wBAAwB,CAAC,YAAY,gBAAqB,eAAe,CAAC,CAAC;IAEnF,IAAI,CAAC,UAAU,CAAC,gBAAgB,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAwB,CAAC;YAC7C,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,YAAY,gBAAqB,CAAC,IAAI,EAAE,EAAE;QACxD,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAwB,CAAC;YAC7C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,eAAyB,CAAC;IAE3B,eAAe,CAAC,IAAI,CAAC,CAAC;IAEtB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,2BAA2C,WAAW,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,0BAAyC,eAAe,CAAC,CAAC;IAElE,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;IAEnD,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { EVSMGeometry } from \"../CachedGeometry\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariablePrecision, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { addEvsmExponent, warpDepth } from \"./SolarShadowMapping\";\r\n\r\n// This shader reads the depth texture, converts it to EVSM values, then averages those down 4 to 1\r\n\r\n// Positions are in NDC [-1..1]. Compute UV params in [0..1]\r\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\r\nconst computePosition = \"return rawPos;\";\r\n\r\nconst computeEVSM = `\r\n const float sampleWeight = 0.25;\r\n vec4 average = vec4(0.0);\r\n vec2 tc = v_texCoord - u_stepSize * 0.5; // v_texCoord starts in between the 4 texels\r\n\r\n float depth = TEXTURE(u_depthTexture, tc).r;\r\n vec2 vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.x += u_stepSize.x;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.y += u_stepSize.y;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n tc.x -= u_stepSize.x;\r\n depth = TEXTURE(u_depthTexture, tc).r;\r\n vsmDepth = warpDepth(depth, u_evsmExponent);\r\n average += sampleWeight * vec4(vsmDepth.xy, vsmDepth.xy * vsmDepth.xy);\r\n\r\n return average;\r\n`;\r\n\r\n/** @internal */\r\nexport function createEVSMProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\r\n\r\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\r\n const geom = params.geometry as EVSMGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthTexture, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_stepSize\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_stepSize\", (uniform, params) => {\r\n const geom = params.geometry as EVSMGeometry;\r\n uniform.setUniform2fv(geom.stepSize);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n addEvsmExponent(frag);\r\n\r\n frag.addFunction(warpDepth);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeEVSM);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n builder.vert.headerComment = \"//!V! EVSMFromDepth\";\r\n builder.frag.headerComment = \"//!F! EVSMFromDepth\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Edge.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAgB,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AACrI,OAAO,EAAE,UAAU,EAAE,WAAW,EAAc,YAAY,EAAE,MAAM,mBAAmB,CAAC;AActF,oBAAY,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AA+K3E,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAY/D;AA2FD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAO9I"}
1
+ {"version":3,"file":"Edge.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAgB,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AACrI,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAc1E,oBAAY,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AA+K3E,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAY/D;AA2FD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAO9I"}
@@ -243,7 +243,7 @@ function createBase(type, instanced, isAnimated, positionType) {
243
243
  vert.addInitializer(decodeEndPointAndQuadIndices);
244
244
  }
245
245
  if (isAnimated) {
246
- addAnimation(vert, false, 0 /* No */);
246
+ addAnimation(vert, false);
247
247
  vert.addInitializer(animateEndPoint);
248
248
  }
249
249
  vert.addGlobal("lineCodeEyePos", 5 /* Vec4 */);
@@ -259,7 +259,7 @@ function createBase(type, instanced, isAnimated, positionType) {
259
259
  addModelViewMatrix(vert);
260
260
  addLineWeight(vert);
261
261
  if (isSilhouette || isIndexed) {
262
- addNormalMatrix(vert, instanced);
262
+ addNormalMatrix(vert);
263
263
  addFrustum(builder);
264
264
  vert.addFunction(octDecodeNormal);
265
265
  vert.set(2 /* CheckForEarlyDiscard */, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);
@@ -1 +1 @@
1
- {"version":3,"file":"Edge.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsAnimated, IsInstanced, IsThematic, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { addColor } from \"./Color\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addAdjustWidth, addLineCode } from \"./Polyline\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { addLineWeight, addModelViewMatrix, addNormalMatrix, addProjectionMatrix, addSamplePosition } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderOrder, addRenderOrderConstants } from \"./FeatureSymbology\";\r\n\r\nexport type EdgeBuilderType = \"SegmentEdge\" | \"Silhouette\" | \"IndexedEdge\";\r\n\r\nconst computeOtherPos = `\r\n g_otherPos = samplePosition(g_otherIndex);\r\n`;\r\n\r\nconst decodeEndPointAndQuadIndices = `\r\n g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);\r\n${computeOtherPos}\r\n g_quadIndex = a_endPointAndQuadIndices.w;\r\n`;\r\n\r\nconst animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;\r\n\r\n// a_pos is a 24-bit index into edge lookup table.\r\n// First six bytes of lookup table entry are the pair of 24-bit indices identifying the endpoints of the edge in the vertex table.\r\n// Return the 24-bit index of \"this\" vertex in the vertex table encoded in a vec3.\r\nconst computeIndexedQuantizedPosition = `\r\n g_vertexId = gl_VertexID % 6;\r\n if (g_vertexId == 0)\r\n g_quadIndex = 0.0;\r\n else if (g_vertexId == 2 || g_vertexId == 3)\r\n g_quadIndex = 1.0;\r\n else if (g_vertexId == 1 || g_vertexId == 4)\r\n g_quadIndex = 2.0;\r\n else\r\n g_quadIndex = 3.0;\r\n\r\n // The following formula computes the texel index, but suffers from precision issues for large edge indices, so we must compute using integers instead.\r\n // float edgeBaseIndex = u_edgeParams.z * 1.5 + u_edgeParams.w * 0.25 + (edgeIndex - u_edgeParams.z) * 2.5);\r\n\r\n float fEdgeIndex = decodeUInt24(a_pos);\r\n g_isSilhouette = fEdgeIndex >= u_edgeParams.z;\r\n int edgeIndex = int(fEdgeIndex);\r\n bool isEven = 0 == (edgeIndex & 1);\r\n float edgeBaseIndex;\r\n if (!g_isSilhouette) {\r\n edgeBaseIndex = float(edgeIndex + (edgeIndex / 2));\r\n } else {\r\n // If both pad and edgeIndex produce a remainder (0.5 for each - pad is a multiple of 2), we must add one to the index to account for it.\r\n int shift = isEven ? 0 : 1;\r\n int pad = int(u_edgeParams.w);\r\n if (0 != (pad % 4)) {\r\n isEven = !isEven;\r\n shift = shift + 1;\r\n }\r\n\r\n // s = num segments p = num padding bytes i = edge index\r\n // texel index = 1.5s + .25p + 2.5(i - s) = 1.5s + .25p + 2.5i - 2.5s = 2.5i + .25p - s = i + i + i/2 + p/4 - s\r\n edgeBaseIndex = float(edgeIndex + edgeIndex + edgeIndex / 2 + pad / 4 - int(u_edgeParams.z) + shift / 2);\r\n }\r\n\r\n vec2 tc = compute_edge_coords(floor(edgeBaseIndex));\r\n vec4 s0 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s1 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s2 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n\r\n vec3 i0 = isEven ? s0.xyz : vec3(s0.zw, s1.x);\r\n vec3 i1 = isEven ? vec3(s0.w, s1.xy) : s1.yzw;\r\n g_otherIndexIndex = g_quadIndex < 2.0 ? i1 : i0;\r\n\r\n g_normals = isEven ? vec4(s1.zw, s2.xy) : s2;\r\n\r\n return g_quadIndex < 2.0 ? i0 : i1;\r\n`;\r\n\r\nconst initializeIndexed = `\r\n g_otherIndex = decodeUInt24(g_otherIndexIndex);\r\n${computeOtherPos}\r\n`;\r\n\r\n// IndexedEdgeGeometry.renderOrder returns Edge or PlanarEdge. Adjust if silhouette for output to pick buffers.\r\nconst computeIndexedRenderOrder = `\r\n if (g_isSilhouette)\r\n v_renderOrder = kRenderOrder_Edge == u_renderOrder ? kRenderOrder_Silhouette : kRenderOrder_PlanarSilhouette;\r\n else\r\n v_renderOrder = u_renderOrder;\r\n`;\r\n\r\nconst checkForSilhouetteDiscard = `\r\n if (kFrustumType_Perspective != u_frustum.z) {\r\n float perpTol = 4.75e-6;\r\n return (n0.z * n1.z > perpTol); // orthographic.\r\n } else {\r\n float perpTol = 2.5e-4;\r\n vec4 viewPos = MAT_MV * rawPos; // perspective\r\n vec3 toEye = normalize(viewPos.xyz);\r\n float dot0 = dot(n0, toEye);\r\n float dot1 = dot(n1, toEye);\r\n\r\n if (dot0 * dot1 > perpTol)\r\n return true;\r\n\r\n // Need to discard if either is non-silhouette.\r\n vec4 otherPosition = g_otherPos;\r\n viewPos = MAT_MV * otherPosition;\r\n toEye = normalize(viewPos.xyz);\r\n dot0 = dot(n0, toEye);\r\n dot1 = dot(n1, toEye);\r\n\r\n return dot0 * dot1 > perpTol;\r\n }\r\n`;\r\n\r\nconst checkForSilhouetteDiscardNonIndexed = `\r\n vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst checkForSilhouetteDiscardIndexed = `\r\n if (!g_isSilhouette)\r\n return false;\r\n\r\n vec3 n0 = MAT_NORM * octDecodeNormal(g_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(g_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst computePosition = `\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n vec4 other = g_otherPos;\r\n float miterAdjust = 0.0;\r\n float weight = computeLineWeight();\r\n\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, other, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0) // Clipped out.\r\n return g_windowPos;\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projOther = modelToWindowCoordinates(other, rawPos, otherPos, otherMvPos);\r\n\r\n g_windowDir = projOther.xy - g_windowPos.xy;\r\n\r\n adjustWidth(weight, g_windowDir, g_windowPos.xy);\r\n g_windowDir = normalize(g_windowDir);\r\n\r\n vec2 perp = vec2(-g_windowDir.y, g_windowDir.x);\r\n float perpDist = weight / 2.0;\r\n float alongDist = 0.0;\r\n\r\n perpDist *= sign(0.5 - float(g_quadIndex == 0.0 || g_quadIndex == 3.0)); // negate for index 0 and 3\r\n alongDist += distance(rawPos, other) * float(g_quadIndex >= 2.0); // index 2 and 3 correspond to 'far' endpoint of segment\r\n\r\n pos.x += perp.x * perpDist * 2.0 * pos.w / u_viewport.x;\r\n pos.y += perp.y * perpDist * 2.0 * pos.w / u_viewport.y;\r\n\r\n lineCodeEyePos = .5 * (rawPos + other);\r\n lineCodeDist = alongDist;\r\n\r\n return pos;\r\n`;\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, 0.0\";\r\n\r\nconst adjustContrast = `\r\n float bgi = u_bgIntensity;\r\n if (bgi < 0.0)\r\n return baseColor;\r\n\r\n float s;\r\n float rgbi = baseColor.r * 0.3 + baseColor.g * 0.59 + baseColor.b * 0.11;\r\n if (rgbi > 0.81)\r\n s = bgi > 0.57 ? 0.0 : 0.699;\r\n else if (rgbi > 0.57)\r\n s = bgi > 0.57 ? 0.0 : 1.0;\r\n else\r\n s = bgi < 0.81 ? 1.0 : 0.699;\r\n\r\n return vec4(vec3(s), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEdgeContrast(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_bgIntensity\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_bgIntensity\", (uniform, params) => {\r\n let bgi = -1;\r\n if (params.geometry.isEdge && params.target.currentEdgeSettings.wantContrastingColor(params.target.currentViewFlags.renderMode))\r\n bgi = params.target.uniforms.style.backgroundIntensity;\r\n\r\n uniform.setUniform1f(bgi);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.AdjustContrast, adjustContrast);\r\n}\r\n\r\nconst edgeLutParams = new Float32Array(4);\r\n\r\nfunction createBase(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated, positionType: PositionType): ProgramBuilder {\r\n const isInstanced = IsInstanced.Yes === instanced;\r\n const isSilhouette = \"Silhouette\" === type;\r\n const isIndexed = \"IndexedEdge\" === type;\r\n const techId = isSilhouette ? TechniqueId.SilhouetteEdge : (isIndexed ? TechniqueId.IndexedEdge : TechniqueId.Edge);\r\n const attrMap = AttributeMap.findAttributeMap(techId, isInstanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced: isInstanced });\r\n const vert = builder.vert;\r\n\r\n vert.addGlobal(\"g_otherPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_quadIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addGlobal(\"g_otherIndex\", VariableType.Float);\r\n\r\n addSamplePosition(vert);\r\n\r\n if (isIndexed) {\r\n vert.addGlobal(\"g_vertexId\", VariableType.Int);\r\n vert.addGlobal(\"g_otherIndexIndex\", VariableType.Vec3);\r\n vert.addGlobal(\"g_isSilhouette\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"g_normals\", VariableType.Vec4);\r\n\r\n const initLut = addLookupTable(vert, \"edge\", \"1.0\");\r\n vert.addUniform(\"u_edgeLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeLUT\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edge.edgeLut.texture.bindSampler(uniform, TextureUnit.EdgeLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_edgeParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeParams\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edgeLutParams[0] = edge.edgeLut.texture.width;\r\n edgeLutParams[1] = edge.edgeLut.texture.height;\r\n edgeLutParams[2] = edge.edgeLut.numSegments;\r\n edgeLutParams[3] = edge.edgeLut.silhouettePadding;\r\n uniform.setUniform4fv(edgeLutParams);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, `${initLut}\\n\\n${computeIndexedQuantizedPosition}`);\r\n vert.addInitializer(initializeIndexed);\r\n\r\n addRenderOrder(vert);\r\n addRenderOrderConstants(vert);\r\n builder.addInlineComputedVarying(\"v_renderOrder\", VariableType.Float, computeIndexedRenderOrder);\r\n builder.frag.set(FragmentShaderComponent.OverrideRenderOrder, \"return v_renderOrder;\");\r\n } else {\r\n vert.addInitializer(decodeEndPointAndQuadIndices);\r\n }\r\n\r\n if (isAnimated) {\r\n addAnimation(vert, false, IsThematic.No);\r\n vert.addInitializer(animateEndPoint);\r\n }\r\n\r\n vert.addGlobal(\"lineCodeEyePos\", VariableType.Vec4);\r\n vert.addGlobal(\"lineCodeDist\", VariableType.Float, \"0.0\");\r\n\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation, and sets g_eyeSpace\r\n addProjectionMatrix(vert);\r\n addLineCode(builder, lineCodeArgs);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addViewport(vert);\r\n addModelViewMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n\r\n if (isSilhouette || isIndexed) {\r\n addNormalMatrix(vert, instanced);\r\n addFrustum(builder);\r\n vert.addFunction(octDecodeNormal);\r\n vert.set(VertexShaderComponent.CheckForEarlyDiscard, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createEdgeBuilder(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated, posType: PositionType): ProgramBuilder {\r\n const builder = createBase(type, instanced, isAnimated, posType);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"Edge.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Edge.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsAnimated, IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { addColor } from \"./Color\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addAdjustWidth, addLineCode } from \"./Polyline\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { addLineWeight, addModelViewMatrix, addNormalMatrix, addProjectionMatrix, addSamplePosition } from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\nimport { addRenderOrder, addRenderOrderConstants } from \"./FeatureSymbology\";\r\n\r\nexport type EdgeBuilderType = \"SegmentEdge\" | \"Silhouette\" | \"IndexedEdge\";\r\n\r\nconst computeOtherPos = `\r\n g_otherPos = samplePosition(g_otherIndex);\r\n`;\r\n\r\nconst decodeEndPointAndQuadIndices = `\r\n g_otherIndex = decodeUInt24(a_endPointAndQuadIndices.xyz);\r\n${computeOtherPos}\r\n g_quadIndex = a_endPointAndQuadIndices.w;\r\n`;\r\n\r\nconst animateEndPoint = `g_otherPos.xyz += computeAnimationDisplacement(g_otherIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);`;\r\n\r\n// a_pos is a 24-bit index into edge lookup table.\r\n// First six bytes of lookup table entry are the pair of 24-bit indices identifying the endpoints of the edge in the vertex table.\r\n// Return the 24-bit index of \"this\" vertex in the vertex table encoded in a vec3.\r\nconst computeIndexedQuantizedPosition = `\r\n g_vertexId = gl_VertexID % 6;\r\n if (g_vertexId == 0)\r\n g_quadIndex = 0.0;\r\n else if (g_vertexId == 2 || g_vertexId == 3)\r\n g_quadIndex = 1.0;\r\n else if (g_vertexId == 1 || g_vertexId == 4)\r\n g_quadIndex = 2.0;\r\n else\r\n g_quadIndex = 3.0;\r\n\r\n // The following formula computes the texel index, but suffers from precision issues for large edge indices, so we must compute using integers instead.\r\n // float edgeBaseIndex = u_edgeParams.z * 1.5 + u_edgeParams.w * 0.25 + (edgeIndex - u_edgeParams.z) * 2.5);\r\n\r\n float fEdgeIndex = decodeUInt24(a_pos);\r\n g_isSilhouette = fEdgeIndex >= u_edgeParams.z;\r\n int edgeIndex = int(fEdgeIndex);\r\n bool isEven = 0 == (edgeIndex & 1);\r\n float edgeBaseIndex;\r\n if (!g_isSilhouette) {\r\n edgeBaseIndex = float(edgeIndex + (edgeIndex / 2));\r\n } else {\r\n // If both pad and edgeIndex produce a remainder (0.5 for each - pad is a multiple of 2), we must add one to the index to account for it.\r\n int shift = isEven ? 0 : 1;\r\n int pad = int(u_edgeParams.w);\r\n if (0 != (pad % 4)) {\r\n isEven = !isEven;\r\n shift = shift + 1;\r\n }\r\n\r\n // s = num segments p = num padding bytes i = edge index\r\n // texel index = 1.5s + .25p + 2.5(i - s) = 1.5s + .25p + 2.5i - 2.5s = 2.5i + .25p - s = i + i + i/2 + p/4 - s\r\n edgeBaseIndex = float(edgeIndex + edgeIndex + edgeIndex / 2 + pad / 4 - int(u_edgeParams.z) + shift / 2);\r\n }\r\n\r\n vec2 tc = compute_edge_coords(floor(edgeBaseIndex));\r\n vec4 s0 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s1 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_edge_stepX;\r\n vec4 s2 = floor(TEXTURE(u_edgeLUT, tc) * 255.0 + 0.5);\r\n\r\n vec3 i0 = isEven ? s0.xyz : vec3(s0.zw, s1.x);\r\n vec3 i1 = isEven ? vec3(s0.w, s1.xy) : s1.yzw;\r\n g_otherIndexIndex = g_quadIndex < 2.0 ? i1 : i0;\r\n\r\n g_normals = isEven ? vec4(s1.zw, s2.xy) : s2;\r\n\r\n return g_quadIndex < 2.0 ? i0 : i1;\r\n`;\r\n\r\nconst initializeIndexed = `\r\n g_otherIndex = decodeUInt24(g_otherIndexIndex);\r\n${computeOtherPos}\r\n`;\r\n\r\n// IndexedEdgeGeometry.renderOrder returns Edge or PlanarEdge. Adjust if silhouette for output to pick buffers.\r\nconst computeIndexedRenderOrder = `\r\n if (g_isSilhouette)\r\n v_renderOrder = kRenderOrder_Edge == u_renderOrder ? kRenderOrder_Silhouette : kRenderOrder_PlanarSilhouette;\r\n else\r\n v_renderOrder = u_renderOrder;\r\n`;\r\n\r\nconst checkForSilhouetteDiscard = `\r\n if (kFrustumType_Perspective != u_frustum.z) {\r\n float perpTol = 4.75e-6;\r\n return (n0.z * n1.z > perpTol); // orthographic.\r\n } else {\r\n float perpTol = 2.5e-4;\r\n vec4 viewPos = MAT_MV * rawPos; // perspective\r\n vec3 toEye = normalize(viewPos.xyz);\r\n float dot0 = dot(n0, toEye);\r\n float dot1 = dot(n1, toEye);\r\n\r\n if (dot0 * dot1 > perpTol)\r\n return true;\r\n\r\n // Need to discard if either is non-silhouette.\r\n vec4 otherPosition = g_otherPos;\r\n viewPos = MAT_MV * otherPosition;\r\n toEye = normalize(viewPos.xyz);\r\n dot0 = dot(n0, toEye);\r\n dot1 = dot(n1, toEye);\r\n\r\n return dot0 * dot1 > perpTol;\r\n }\r\n`;\r\n\r\nconst checkForSilhouetteDiscardNonIndexed = `\r\n vec3 n0 = MAT_NORM * octDecodeNormal(a_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(a_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst checkForSilhouetteDiscardIndexed = `\r\n if (!g_isSilhouette)\r\n return false;\r\n\r\n vec3 n0 = MAT_NORM * octDecodeNormal(g_normals.xy);\r\n vec3 n1 = MAT_NORM * octDecodeNormal(g_normals.zw);\r\n${checkForSilhouetteDiscard}\r\n`;\r\n\r\nconst computePosition = `\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n vec4 other = g_otherPos;\r\n float miterAdjust = 0.0;\r\n float weight = computeLineWeight();\r\n\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, other, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0) // Clipped out.\r\n return g_windowPos;\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projOther = modelToWindowCoordinates(other, rawPos, otherPos, otherMvPos);\r\n\r\n g_windowDir = projOther.xy - g_windowPos.xy;\r\n\r\n adjustWidth(weight, g_windowDir, g_windowPos.xy);\r\n g_windowDir = normalize(g_windowDir);\r\n\r\n vec2 perp = vec2(-g_windowDir.y, g_windowDir.x);\r\n float perpDist = weight / 2.0;\r\n float alongDist = 0.0;\r\n\r\n perpDist *= sign(0.5 - float(g_quadIndex == 0.0 || g_quadIndex == 3.0)); // negate for index 0 and 3\r\n alongDist += distance(rawPos, other) * float(g_quadIndex >= 2.0); // index 2 and 3 correspond to 'far' endpoint of segment\r\n\r\n pos.x += perp.x * perpDist * 2.0 * pos.w / u_viewport.x;\r\n pos.y += perp.y * perpDist * 2.0 * pos.w / u_viewport.y;\r\n\r\n lineCodeEyePos = .5 * (rawPos + other);\r\n lineCodeDist = alongDist;\r\n\r\n return pos;\r\n`;\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, 0.0\";\r\n\r\nconst adjustContrast = `\r\n float bgi = u_bgIntensity;\r\n if (bgi < 0.0)\r\n return baseColor;\r\n\r\n float s;\r\n float rgbi = baseColor.r * 0.3 + baseColor.g * 0.59 + baseColor.b * 0.11;\r\n if (rgbi > 0.81)\r\n s = bgi > 0.57 ? 0.0 : 0.699;\r\n else if (rgbi > 0.57)\r\n s = bgi > 0.57 ? 0.0 : 1.0;\r\n else\r\n s = bgi < 0.81 ? 1.0 : 0.699;\r\n\r\n return vec4(vec3(s), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEdgeContrast(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_bgIntensity\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_bgIntensity\", (uniform, params) => {\r\n let bgi = -1;\r\n if (params.geometry.isEdge && params.target.currentEdgeSettings.wantContrastingColor(params.target.currentViewFlags.renderMode))\r\n bgi = params.target.uniforms.style.backgroundIntensity;\r\n\r\n uniform.setUniform1f(bgi);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.AdjustContrast, adjustContrast);\r\n}\r\n\r\nconst edgeLutParams = new Float32Array(4);\r\n\r\nfunction createBase(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated, positionType: PositionType): ProgramBuilder {\r\n const isInstanced = IsInstanced.Yes === instanced;\r\n const isSilhouette = \"Silhouette\" === type;\r\n const isIndexed = \"IndexedEdge\" === type;\r\n const techId = isSilhouette ? TechniqueId.SilhouetteEdge : (isIndexed ? TechniqueId.IndexedEdge : TechniqueId.Edge);\r\n const attrMap = AttributeMap.findAttributeMap(techId, isInstanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced: isInstanced });\r\n const vert = builder.vert;\r\n\r\n vert.addGlobal(\"g_otherPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_quadIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addGlobal(\"g_otherIndex\", VariableType.Float);\r\n\r\n addSamplePosition(vert);\r\n\r\n if (isIndexed) {\r\n vert.addGlobal(\"g_vertexId\", VariableType.Int);\r\n vert.addGlobal(\"g_otherIndexIndex\", VariableType.Vec3);\r\n vert.addGlobal(\"g_isSilhouette\", VariableType.Boolean, \"false\");\r\n vert.addGlobal(\"g_normals\", VariableType.Vec4);\r\n\r\n const initLut = addLookupTable(vert, \"edge\", \"1.0\");\r\n vert.addUniform(\"u_edgeLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeLUT\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edge.edgeLut.texture.bindSampler(uniform, TextureUnit.EdgeLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_edgeParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_edgeParams\", (uniform, params) => {\r\n const edge = params.geometry.asIndexedEdge;\r\n assert(undefined !== edge);\r\n edgeLutParams[0] = edge.edgeLut.texture.width;\r\n edgeLutParams[1] = edge.edgeLut.texture.height;\r\n edgeLutParams[2] = edge.edgeLut.numSegments;\r\n edgeLutParams[3] = edge.edgeLut.silhouettePadding;\r\n uniform.setUniform4fv(edgeLutParams);\r\n });\r\n });\r\n\r\n vert.set(VertexShaderComponent.ComputeQuantizedPosition, `${initLut}\\n\\n${computeIndexedQuantizedPosition}`);\r\n vert.addInitializer(initializeIndexed);\r\n\r\n addRenderOrder(vert);\r\n addRenderOrderConstants(vert);\r\n builder.addInlineComputedVarying(\"v_renderOrder\", VariableType.Float, computeIndexedRenderOrder);\r\n builder.frag.set(FragmentShaderComponent.OverrideRenderOrder, \"return v_renderOrder;\");\r\n } else {\r\n vert.addInitializer(decodeEndPointAndQuadIndices);\r\n }\r\n\r\n if (isAnimated) {\r\n addAnimation(vert, false);\r\n vert.addInitializer(animateEndPoint);\r\n }\r\n\r\n vert.addGlobal(\"lineCodeEyePos\", VariableType.Vec4);\r\n vert.addGlobal(\"lineCodeDist\", VariableType.Float, \"0.0\");\r\n\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation, and sets g_eyeSpace\r\n addProjectionMatrix(vert);\r\n addLineCode(builder, lineCodeArgs);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n builder.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addViewport(vert);\r\n addModelViewMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n\r\n if (isSilhouette || isIndexed) {\r\n addNormalMatrix(vert);\r\n addFrustum(builder);\r\n vert.addFunction(octDecodeNormal);\r\n vert.set(VertexShaderComponent.CheckForEarlyDiscard, isSilhouette ? checkForSilhouetteDiscardNonIndexed : checkForSilhouetteDiscardIndexed);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createEdgeBuilder(type: EdgeBuilderType, instanced: IsInstanced, isAnimated: IsAnimated, posType: PositionType): ProgramBuilder {\r\n const builder = createBase(type, instanced, isAnimated, posType);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAqPD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA6DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;AAwBD,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,QAiB3E;AASD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,QA4D/E;AA4DD,eAAO,MAAM,eAAe,sOAIzB,CAAC;AAwCJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAIpE;AAoBD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAoBnH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAW/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CA0ClG"}
1
+ {"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAmOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA6DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;AAwBD,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,QAiB3E;AASD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,QA4D/E;AA4DD,eAAO,MAAM,eAAe,sOAIzB,CAAC;AAwCJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAIpE;AAoBD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAoBnH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAW/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CA0ClG"}
@@ -7,7 +7,6 @@
7
7
  */
8
8
  import { assert } from "@itwin/core-bentley";
9
9
  import { Pass, TextureUnit } from "../RenderFlags";
10
- import { System } from "../System";
11
10
  import { addExtractNthBit, addEyeSpace, addUInt32s } from "./Common";
12
11
  import { decodeDepthRgb, decodeUint24 } from "./Decode";
13
12
  import { addWindowToTexCoords, assignFragColor, computeLinearDepth } from "./Fragment";
@@ -55,24 +54,12 @@ float getFeatureIndex() {
55
54
  }
56
55
  `;
57
56
  }
58
- // Returns true if the specified flag is not globally overridden and is set in flags
59
57
  const nthFeatureBitSet = `
60
- bool nthFeatureBitSet(float flags, float n) {
61
- return !nthBitSet(u_globalOvrFlags, n) && nthBitSet(flags, n);
62
- }
63
- `;
64
- const nthFeatureBitSet2 = `
65
58
  bool nthFeatureBitSet(float flags, uint n) {
66
59
  return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n);
67
60
  }
68
61
  `;
69
- // Returns 1.0 if the specified flag is not globally overridden and is set in flags
70
62
  const extractNthFeatureBit = `
71
- float extractNthFeatureBit(float flags, float n) {
72
- return !nthBitSet(u_globalOvrFlags, n) && nthBitSet(flags, n) ? 1.0 : 0.0;
73
- }
74
- `;
75
- const extractNthFeatureBit2 = `
76
63
  float extractNthFeatureBit(float flags, uint n) {
77
64
  return 0u == (u_globalOvrFlags & n) && nthBitSet(flags, n) ? 1.0 : 0.0;
78
65
  }
@@ -191,17 +178,9 @@ function addCommon(builder, mode, opts, wantGlobalOvrFlags = true) {
191
178
  }
192
179
  }
193
180
  if (wantGlobalOvrFlags) {
194
- let bitmapType;
195
- if (System.instance.capabilities.isWebGL2) {
196
- vert.addFunction(nthFeatureBitSet2);
197
- vert.addFunction(extractNthFeatureBit2);
198
- bitmapType = 10 /* Uint */;
199
- }
200
- else {
201
- vert.addFunction(nthFeatureBitSet);
202
- vert.addFunction(extractNthFeatureBit);
203
- bitmapType = 2 /* Float */;
204
- }
181
+ const bitmapType = 10 /* Uint */;
182
+ vert.addFunction(nthFeatureBitSet);
183
+ vert.addFunction(extractNthFeatureBit);
205
184
  vert.addUniform("u_globalOvrFlags", bitmapType, (prog) => {
206
185
  prog.addGraphicUniform("u_globalOvrFlags", (uniform, params) => {
207
186
  let flags = 0.0;