@itwin/core-frontend 4.0.0-dev.2 → 4.0.0-dev.6

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 (447) 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 +5 -26
  82. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  83. package/lib/cjs/render/webgl/System.d.ts +10 -10
  84. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  85. package/lib/cjs/render/webgl/System.js +39 -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/RealityTileTree.d.ts.map +1 -1
  207. package/lib/cjs/tile/RealityTileTree.js +1 -2
  208. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  209. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  210. package/lib/cjs/tile/TileAdmin.js +2 -2
  211. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  212. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
  213. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  214. package/lib/cjs/tile/map/ImageryTileTree.js +10 -5
  215. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  216. package/lib/cjs/tile/map/MapTile.d.ts +8 -0
  217. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  218. package/lib/cjs/tile/map/MapTile.js +26 -2
  219. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  220. package/lib/cjs/tile/map/MapTileTree.d.ts +2 -1
  221. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  222. package/lib/cjs/tile/map/MapTileTree.js +11 -8
  223. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  224. package/lib/esm/IModelApp.d.ts +1 -0
  225. package/lib/esm/IModelApp.d.ts.map +1 -1
  226. package/lib/esm/IModelApp.js +2 -4
  227. package/lib/esm/IModelApp.js.map +1 -1
  228. package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
  229. package/lib/esm/SubCategoriesCache.js +0 -1
  230. package/lib/esm/SubCategoriesCache.js.map +1 -1
  231. package/lib/esm/render/RealityMeshParams.d.ts +4 -1
  232. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  233. package/lib/esm/render/RealityMeshParams.js +14 -4
  234. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  235. package/lib/esm/render/RenderSystem.d.ts +5 -16
  236. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  237. package/lib/esm/render/RenderSystem.js +0 -6
  238. package/lib/esm/render/RenderSystem.js.map +1 -1
  239. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  240. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  241. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  242. package/lib/esm/render/webgl/AttributeBuffers.d.ts +9 -79
  243. package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
  244. package/lib/esm/render/webgl/AttributeBuffers.js +16 -144
  245. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  246. package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  247. package/lib/esm/render/webgl/BackgroundMapDrape.js +0 -3
  248. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  249. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  250. package/lib/esm/render/webgl/BranchUniforms.js +0 -8
  251. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  252. package/lib/esm/render/webgl/ClipStack.d.ts +0 -1
  253. package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
  254. package/lib/esm/render/webgl/ClipStack.js +2 -6
  255. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  256. package/lib/esm/render/webgl/ClipVolume.d.ts.map +1 -1
  257. package/lib/esm/render/webgl/ClipVolume.js +1 -5
  258. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  259. package/lib/esm/render/webgl/ClippingProgram.d.ts +3 -2
  260. package/lib/esm/render/webgl/ClippingProgram.d.ts.map +1 -1
  261. package/lib/esm/render/webgl/ClippingProgram.js +10 -37
  262. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  263. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
  264. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  265. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  266. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  267. package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
  268. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  269. package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
  270. package/lib/esm/render/webgl/FloatRGBA.js +0 -4
  271. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  272. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  273. package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
  274. package/lib/esm/render/webgl/GLTimer.js +2 -35
  275. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  276. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  277. package/lib/esm/render/webgl/PlanarClassifier.js +13 -71
  278. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  279. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  280. package/lib/esm/render/webgl/PointCloud.js +1 -3
  281. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  282. package/lib/esm/render/webgl/RenderBuffer.d.ts +1 -1
  283. package/lib/esm/render/webgl/RenderBuffer.d.ts.map +1 -1
  284. package/lib/esm/render/webgl/RenderBuffer.js +2 -3
  285. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  286. package/lib/esm/render/webgl/RenderFlags.d.ts +1 -2
  287. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  288. package/lib/esm/render/webgl/RenderFlags.js +4 -6
  289. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  290. package/lib/esm/render/webgl/SceneCompositor.d.ts +0 -2
  291. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  292. package/lib/esm/render/webgl/SceneCompositor.js +756 -1137
  293. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  294. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  295. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  296. package/lib/esm/render/webgl/ShaderBuilder.d.ts +1 -2
  297. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  298. package/lib/esm/render/webgl/ShaderBuilder.js +13 -48
  299. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  300. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -2
  301. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  302. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  303. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  304. package/lib/esm/render/webgl/SolarShadowMap.js +5 -26
  305. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  306. package/lib/esm/render/webgl/System.d.ts +10 -10
  307. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  308. package/lib/esm/render/webgl/System.js +41 -124
  309. package/lib/esm/render/webgl/System.js.map +1 -1
  310. package/lib/esm/render/webgl/Technique.d.ts +4 -5
  311. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  312. package/lib/esm/render/webgl/Technique.js +5 -29
  313. package/lib/esm/render/webgl/Technique.js.map +1 -1
  314. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  315. package/lib/esm/render/webgl/Texture.js +14 -18
  316. package/lib/esm/render/webgl/Texture.js.map +1 -1
  317. package/lib/esm/render/webgl/ThematicSensors.d.ts +4 -3
  318. package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
  319. package/lib/esm/render/webgl/ThematicSensors.js +9 -50
  320. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  321. package/lib/esm/render/webgl/ThematicUniforms.js +1 -1
  322. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  323. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  324. package/lib/esm/render/webgl/UniformHandle.js +1 -4
  325. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  326. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  327. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  328. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  329. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  330. package/lib/esm/render/webgl/glsl/Animation.d.ts +1 -2
  331. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  332. package/lib/esm/render/webgl/glsl/Animation.js +23 -26
  333. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  334. package/lib/esm/render/webgl/glsl/Blur.d.ts +1 -2
  335. package/lib/esm/render/webgl/glsl/Blur.d.ts.map +1 -1
  336. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  337. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  338. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  339. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -9
  340. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  341. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  342. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  343. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -10
  344. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  345. package/lib/esm/render/webgl/glsl/Clipping.d.ts +1 -1
  346. package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
  347. package/lib/esm/render/webgl/glsl/Clipping.js +5 -36
  348. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  349. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  350. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  351. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  352. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts +1 -2
  353. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  354. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  355. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  356. package/lib/esm/render/webgl/glsl/Common.js +9 -55
  357. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  358. package/lib/esm/render/webgl/glsl/Composite.d.ts +1 -2
  359. package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
  360. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  361. package/lib/esm/render/webgl/glsl/CopyColor.d.ts +1 -2
  362. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  363. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  364. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  365. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  366. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +12 -19
  367. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  368. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts +4 -7
  369. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  370. package/lib/esm/render/webgl/glsl/CopyStencil.js +1 -37
  371. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  372. package/lib/esm/render/webgl/glsl/EDL.d.ts +4 -5
  373. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -1
  374. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  375. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  376. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  378. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  379. package/lib/esm/render/webgl/glsl/Edge.js +2 -2
  380. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  381. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  382. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +3 -24
  383. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  384. package/lib/esm/render/webgl/glsl/Fragment.d.ts +0 -7
  385. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  386. package/lib/esm/render/webgl/glsl/Fragment.js +4 -38
  387. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  388. package/lib/esm/render/webgl/glsl/Instancing.d.ts.map +1 -1
  389. package/lib/esm/render/webgl/glsl/Instancing.js +1 -5
  390. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  391. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  392. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  393. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  394. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  395. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  396. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -12
  397. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  398. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  399. package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -8
  400. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  401. package/lib/esm/render/webgl/glsl/SkyBox.d.ts +1 -2
  402. package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  403. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  404. package/lib/esm/render/webgl/glsl/SkySphere.d.ts +1 -2
  405. package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  406. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  407. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
  408. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  409. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  410. package/lib/esm/render/webgl/glsl/Surface.js +33 -57
  411. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  412. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  413. package/lib/esm/render/webgl/glsl/Thematic.js +3 -36
  414. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  415. package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
  416. package/lib/esm/render/webgl/glsl/Translucency.js +3 -13
  417. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  418. package/lib/esm/render/webgl/glsl/Vertex.d.ts +1 -2
  419. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  420. package/lib/esm/render/webgl/glsl/Vertex.js +16 -79
  421. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  422. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  423. package/lib/esm/render/webgl/glsl/Wiremesh.js +2 -5
  424. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  425. package/lib/esm/tile/PrimaryTileTree.d.ts +0 -3
  426. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  427. package/lib/esm/tile/PrimaryTileTree.js +8 -30
  428. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  429. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  430. package/lib/esm/tile/RealityTileTree.js +1 -2
  431. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  432. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  433. package/lib/esm/tile/TileAdmin.js +2 -2
  434. package/lib/esm/tile/TileAdmin.js.map +1 -1
  435. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
  436. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  437. package/lib/esm/tile/map/ImageryTileTree.js +10 -5
  438. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  439. package/lib/esm/tile/map/MapTile.d.ts +8 -0
  440. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  441. package/lib/esm/tile/map/MapTile.js +26 -2
  442. package/lib/esm/tile/map/MapTile.js.map +1 -1
  443. package/lib/esm/tile/map/MapTileTree.d.ts +2 -1
  444. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  445. package/lib/esm/tile/map/MapTileTree.js +11 -8
  446. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  447. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"ThematicUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.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, dispose } from \"@itwin/core-bentley\";\r\nimport { Gradient, RenderTexture, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode } from \"@itwin/core-common\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Angle, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Target } from \"./Target\";\r\nimport { System } from \"./System\";\r\nimport { FloatRgb } from \"./FloatRGBA\";\r\n\r\n/** Maintains state for uniforms related to thematic display.\r\n * @internal\r\n */\r\nexport class ThematicUniforms implements WebGLDisposable {\r\n private _sensors?: ThematicSensors; // NB: This is only used if no distance cutoff is applied (this is shared among all batches)\r\n private _texture?: TextureHandle;\r\n private readonly _range = new Float32Array(2);\r\n private _colorMix = 0.0;\r\n private readonly _axis = new Float32Array(3);\r\n private readonly _sunDirection = new Float32Array(3);\r\n private readonly _marginColor = new Float32Array(3);\r\n private readonly _displayMode = new Float32Array(1);\r\n private readonly _fragSettings = new Float32Array(3); // gradientMode, distanceCutoff, stepCount\r\n private _numSensors = 0;\r\n private _gradientDimension = _getGradientDimension();\r\n private _thematicDisplay?: ThematicDisplay;\r\n\r\n public syncKey = 0;\r\n\r\n private get _distanceCutoff(): number { return this._fragSettings[1]; }\r\n\r\n public get thematicDisplay(): ThematicDisplay | undefined {\r\n return this._thematicDisplay;\r\n }\r\n\r\n public get wantIsoLines(): boolean {\r\n if (undefined !== this.thematicDisplay)\r\n return ThematicDisplayMode.Height === this._displayMode[0] && ThematicGradientMode.IsoLines === this.thematicDisplay.gradientSettings.mode;\r\n return false;\r\n }\r\n\r\n public get wantSlopeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.Slope === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantHillShadeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.HillShade === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantGlobalSensorTexture(): boolean {\r\n return !(this._distanceCutoff > 0);\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._sensors ? this._sensors.bytesUsed : 0;\r\n }\r\n\r\n private _scratchVector = new Vector3d();\r\n\r\n private _updateAxis(axis: Vector3d, viewMatrix?: Transform) {\r\n const tAxis = (viewMatrix !== undefined) ? viewMatrix.multiplyVector(axis, this._scratchVector) : axis;\r\n tAxis.normalizeInPlace();\r\n this._axis[0] = tAxis.x;\r\n this._axis[1] = tAxis.y;\r\n this._axis[2] = tAxis.z;\r\n }\r\n\r\n private _updateSunDirection(sunDir: Vector3d, viewMatrix: Transform) {\r\n viewMatrix.multiplyVector(sunDir, this._scratchVector);\r\n this._scratchVector.negate(this._scratchVector);\r\n this._scratchVector.normalizeInPlace();\r\n this._sunDirection[0] = this._scratchVector.x;\r\n this._sunDirection[1] = this._scratchVector.y;\r\n this._sunDirection[2] = this._scratchVector.z;\r\n }\r\n\r\n public update(target: Target): void {\r\n const plan = target.plan;\r\n\r\n if (this.thematicDisplay && plan.thematic && this.thematicDisplay.equals(plan.thematic) && this._texture) {\r\n if (undefined !== this._sensors)\r\n this._sensors.update(target.uniforms.frustum.viewMatrix);\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._updateAxis(this.thematicDisplay.axis, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n } else if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode) {\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n }\r\n\r\n return;\r\n }\r\n\r\n desync(this);\r\n\r\n this._thematicDisplay = plan.thematic;\r\n this._texture = dispose(this._texture);\r\n if (!this.thematicDisplay)\r\n return;\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._range[0] = Angle.degreesToRadians(this.thematicDisplay.range.low);\r\n this._range[1] = Angle.degreesToRadians(this.thematicDisplay.range.high);\r\n } else {\r\n this._range[0] = this.thematicDisplay.range.low;\r\n this._range[1] = this.thematicDisplay.range.high;\r\n }\r\n\r\n this._colorMix = this.thematicDisplay.gradientSettings.colorMix;\r\n\r\n this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);\r\n\r\n if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n\r\n const marginRgb = FloatRgb.fromColorDef(this.thematicDisplay.gradientSettings.marginColor);\r\n this._marginColor[0] = marginRgb.red;\r\n this._marginColor[1] = marginRgb.green;\r\n this._marginColor[2] = marginRgb.blue;\r\n\r\n this._displayMode[0] = this.thematicDisplay.displayMode;\r\n\r\n this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;\r\n\r\n const sensorSettings = this.thematicDisplay.sensorSettings;\r\n this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;\r\n\r\n this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);\r\n\r\n // If we want sensors and have no distance cutoff, then create a global shared sensor texture.\r\n if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {\r\n this._numSensors = sensorSettings.sensors.length;\r\n this._sensors = dispose(this._sensors);\r\n this._sensors = ThematicSensors.create(target, Range3d.createNull());\r\n }\r\n\r\n const symb = Gradient.Symb.createThematic(this.thematicDisplay.gradientSettings);\r\n const image = symb.getThematicImageForRenderer(this._gradientDimension);\r\n this._texture = TextureHandle.createForImageBuffer(image, RenderTexture.Type.ThematicGradient);\r\n }\r\n\r\n public bindRange(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._range);\r\n }\r\n\r\n public bindAxis(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._axis);\r\n }\r\n\r\n public bindSunDirection(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._sunDirection);\r\n }\r\n\r\n public bindMarginColor(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._marginColor);\r\n }\r\n\r\n public bindDisplayMode(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1fv(this._displayMode);\r\n }\r\n\r\n public bindFragSettings(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._fragSettings);\r\n }\r\n\r\n public bindTexture(uniform: UniformHandle, unit: TextureUnit): void {\r\n assert(undefined !== this._texture);\r\n this._texture.bindSampler(uniform, unit);\r\n }\r\n\r\n public bindNumSensors(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1i(this._numSensors);\r\n }\r\n\r\n public bindSensors(uniform: UniformHandle): void {\r\n assert(undefined !== this._sensors);\r\n this._sensors.texture.bindSampler(uniform, TextureUnit.ThematicSensors);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._texture && undefined === this._sensors;\r\n }\r\n\r\n public dispose() {\r\n this._texture = dispose(this._texture);\r\n this._sensors = dispose(this._sensors);\r\n }\r\n}\r\n\r\nfunction _getGradientDimension(): number {\r\n const preferDimension = 8192;\r\n const maxDimension = System.instance.capabilities.maxTextureSize;\r\n return (preferDimension > maxDimension) ? maxDimension : preferDimension;\r\n}\r\n"]}
1
+ {"version":3,"file":"ThematicUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.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, dispose } from \"@itwin/core-bentley\";\r\nimport { Gradient, RenderTexture, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode } from \"@itwin/core-common\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Angle, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Target } from \"./Target\";\r\nimport { System } from \"./System\";\r\nimport { FloatRgb } from \"./FloatRGBA\";\r\n\r\n/** Maintains state for uniforms related to thematic display.\r\n * @internal\r\n */\r\nexport class ThematicUniforms implements WebGLDisposable {\r\n private _sensors?: ThematicSensors; // NB: This is only used if no distance cutoff is applied (this is shared among all batches)\r\n private _texture?: TextureHandle;\r\n private readonly _range = new Float32Array(2);\r\n private _colorMix = 0.0;\r\n private readonly _axis = new Float32Array(3);\r\n private readonly _sunDirection = new Float32Array(3);\r\n private readonly _marginColor = new Float32Array(3);\r\n private readonly _displayMode = new Float32Array(1);\r\n private readonly _fragSettings = new Float32Array(3); // gradientMode, distanceCutoff, stepCount\r\n private _numSensors = 0;\r\n private _gradientDimension = _getGradientDimension();\r\n private _thematicDisplay?: ThematicDisplay;\r\n\r\n public syncKey = 0;\r\n\r\n private get _distanceCutoff(): number { return this._fragSettings[1]; }\r\n\r\n public get thematicDisplay(): ThematicDisplay | undefined {\r\n return this._thematicDisplay;\r\n }\r\n\r\n public get wantIsoLines(): boolean {\r\n if (undefined !== this.thematicDisplay)\r\n return ThematicDisplayMode.Height === this._displayMode[0] && ThematicGradientMode.IsoLines === this.thematicDisplay.gradientSettings.mode;\r\n return false;\r\n }\r\n\r\n public get wantSlopeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.Slope === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantHillShadeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.HillShade === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantGlobalSensorTexture(): boolean {\r\n return !(this._distanceCutoff > 0);\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._sensors ? this._sensors.bytesUsed : 0;\r\n }\r\n\r\n private _scratchVector = new Vector3d();\r\n\r\n private _updateAxis(axis: Vector3d, viewMatrix?: Transform) {\r\n const tAxis = (viewMatrix !== undefined) ? viewMatrix.multiplyVector(axis, this._scratchVector) : axis;\r\n tAxis.normalizeInPlace();\r\n this._axis[0] = tAxis.x;\r\n this._axis[1] = tAxis.y;\r\n this._axis[2] = tAxis.z;\r\n }\r\n\r\n private _updateSunDirection(sunDir: Vector3d, viewMatrix: Transform) {\r\n viewMatrix.multiplyVector(sunDir, this._scratchVector);\r\n this._scratchVector.negate(this._scratchVector);\r\n this._scratchVector.normalizeInPlace();\r\n this._sunDirection[0] = this._scratchVector.x;\r\n this._sunDirection[1] = this._scratchVector.y;\r\n this._sunDirection[2] = this._scratchVector.z;\r\n }\r\n\r\n public update(target: Target): void {\r\n const plan = target.plan;\r\n\r\n if (this.thematicDisplay && plan.thematic && this.thematicDisplay.equals(plan.thematic) && this._texture) {\r\n if (undefined !== this._sensors)\r\n this._sensors.update(target.uniforms.frustum.viewMatrix);\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._updateAxis(this.thematicDisplay.axis, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n } else if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode) {\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n }\r\n\r\n return;\r\n }\r\n\r\n desync(this);\r\n\r\n this._thematicDisplay = plan.thematic;\r\n this._texture = dispose(this._texture);\r\n if (!this.thematicDisplay)\r\n return;\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._range[0] = Angle.degreesToRadians(this.thematicDisplay.range.low);\r\n this._range[1] = Angle.degreesToRadians(this.thematicDisplay.range.high);\r\n } else {\r\n this._range[0] = this.thematicDisplay.range.low;\r\n this._range[1] = this.thematicDisplay.range.high;\r\n }\r\n\r\n this._colorMix = this.thematicDisplay.gradientSettings.colorMix;\r\n\r\n this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);\r\n\r\n if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n\r\n const marginRgb = FloatRgb.fromColorDef(this.thematicDisplay.gradientSettings.marginColor);\r\n this._marginColor[0] = marginRgb.red;\r\n this._marginColor[1] = marginRgb.green;\r\n this._marginColor[2] = marginRgb.blue;\r\n\r\n this._displayMode[0] = this.thematicDisplay.displayMode;\r\n\r\n this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;\r\n\r\n const sensorSettings = this.thematicDisplay.sensorSettings;\r\n this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;\r\n\r\n this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);\r\n\r\n // If we want sensors and have no distance cutoff, then create a global shared sensor texture.\r\n if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {\r\n this._numSensors = sensorSettings.sensors.length;\r\n this._sensors = dispose(this._sensors);\r\n this._sensors = ThematicSensors.create(target, Range3d.createNull());\r\n }\r\n\r\n const symb = Gradient.Symb.createThematic(this.thematicDisplay.gradientSettings);\r\n const image = symb.getThematicImageForRenderer(this._gradientDimension);\r\n this._texture = TextureHandle.createForImageBuffer(image, RenderTexture.Type.ThematicGradient);\r\n }\r\n\r\n public bindRange(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._range);\r\n }\r\n\r\n public bindAxis(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._axis);\r\n }\r\n\r\n public bindSunDirection(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._sunDirection);\r\n }\r\n\r\n public bindMarginColor(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._marginColor);\r\n }\r\n\r\n public bindDisplayMode(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1fv(this._displayMode);\r\n }\r\n\r\n public bindFragSettings(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._fragSettings);\r\n }\r\n\r\n public bindTexture(uniform: UniformHandle, unit: TextureUnit): void {\r\n assert(undefined !== this._texture);\r\n this._texture.bindSampler(uniform, unit);\r\n }\r\n\r\n public bindNumSensors(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1i(this._numSensors);\r\n }\r\n\r\n public bindSensors(uniform: UniformHandle): void {\r\n assert(undefined !== this._sensors);\r\n this._sensors.texture.bindSampler(uniform, TextureUnit.ThematicSensors);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._texture && undefined === this._sensors;\r\n }\r\n\r\n public dispose() {\r\n this._texture = dispose(this._texture);\r\n this._sensors = dispose(this._sensors);\r\n }\r\n}\r\n\r\nfunction _getGradientDimension(): number {\r\n const preferDimension = 8192;\r\n const maxDimension = System.instance.maxTextureSize;\r\n return (preferDimension > maxDimension) ? maxDimension : preferDimension;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UniformHandle.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAiBnC;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;IAE7B,OAAO;WAEO,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;IAgBzE,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAcZ,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAKzC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,kBAAkB,CAAC,IAAI,EAAE,MAAM;CAMvC"}
1
+ {"version":3,"file":"UniformHandle.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAiBnC;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;IAE7B,OAAO;WAEO,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;IAgBzE,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAcZ,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAKzC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,kBAAkB,CAAC,IAAI,EAAE,MAAM;CAGvC"}
@@ -99,10 +99,7 @@ export class UniformHandle {
99
99
  System.instance.context.uniform1ui(this._location, data);
100
100
  }
101
101
  setUniformBitflags(data) {
102
- if (System.instance.capabilities.isWebGL2)
103
- this.setUniform1ui(data);
104
- else
105
- this.setUniform1f(data);
102
+ this.setUniform1ui(data);
106
103
  }
107
104
  }
108
105
  //# sourceMappingURL=UniformHandle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.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, Logger } from \"@itwin/core-bentley\";\r\nimport { FrontendLoggerCategory } from \"../../FrontendLoggerCategory\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation | null;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation | null) { this._location = location; }\r\n\r\n public static create(program: ShaderProgram, name: string): UniformHandle {\r\n let location = null;\r\n if (undefined !== program.glProgram) {\r\n location = System.instance.context.getUniformLocation(program.glProgram, name);\r\n }\r\n if (null === location) {\r\n const errMsg = `uniform ${name} not found in ${program.description}.`;\r\n if (System.instance.options.errorOnMissingUniform) {\r\n throw new Error(errMsg);\r\n } else {\r\n Logger.logError(FrontendLoggerCategory.Render, errMsg);\r\n }\r\n }\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n (System.instance.context as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAItE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAgBlC;;GAEG;AACH,MAAM,OAAO,aAAa;IAMxB,YAAoB,QAAqC;QAJjD,UAAK,qBAAgC;QAC5B,UAAK,GAAa,EAAE,CAAC;QAGuB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAAC,CAAC;IAElF,MAAM,CAAC,MAAM,CAAC,OAAsB,EAAE,IAAY;QACvD,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;YACnC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAChF;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE;YACrB,MAAM,MAAM,GAAG,WAAW,IAAI,iBAAiB,OAAO,CAAC,WAAW,GAAG,CAAC;YACtE,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE;gBACjD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;aACzB;iBAAM;gBACL,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aACxD;SACF;QACD,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAEO,UAAU,CAAC,IAAc,EAAE,IAA0C;QAC3E,MAAM,CAAC,sBAAuB,IAAI,IAAI,gBAAiB,IAAI,IAAI,kBAAmB,IAAI,IAAI,kBAAkB,IAAI,CAAC,CAAC;QAElH,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;QAClC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;gBACnC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SACnC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;SACvB;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,WAAW,CAAC,IAAc,EAAE,KAAa;QAC/C,MAAM,CAAC,gBAAiB,IAAI,IAAI,kBAAkB,IAAI,IAAI,kBAAmB,IAAI,CAAC,CAAC;QAEnF,wHAAwH;QACxH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAEtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,UAAU,CAAC,GAAY;QAC5B,IAAI,IAAI,CAAC,UAAU,eAAgB,GAAG,CAAC,IAAI,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEM,UAAU,CAAC,GAAY;QAC5B,IAAI,IAAI,CAAC,UAAU,eAAgB,GAAG,CAAC,IAAI,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEM,aAAa,CAAC,IAA2B;QAC9C,IAAI,IAAI,CAAC,UAAU,mBAAoB,IAAI,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,IAA6B;QAChD,IAAI,IAAI,CAAC,UAAU,qBAAsB,IAAI,CAAC;YAC5C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,IAA6B;QAChD,IAAI,IAAI,CAAC,UAAU,eAAgB,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,IAA6B;QAChD,IAAI,IAAI,CAAC,UAAU,eAAgB,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,IAA6B;QAChD,IAAI,IAAI,CAAC,UAAU,eAAgB,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,YAAY,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,WAAW,cAAe,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,YAAY,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,WAAW,gBAAiB,IAAI,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,aAAa,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,WAAW,gBAAgB,IAAI,CAAC;YACvC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,kBAAkB,CAAC,IAAY;QACpC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF","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, Logger } from \"@itwin/core-bentley\";\r\nimport { FrontendLoggerCategory } from \"../../FrontendLoggerCategory\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation | null;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation | null) { this._location = location; }\r\n\r\n public static create(program: ShaderProgram, name: string): UniformHandle {\r\n let location = null;\r\n if (undefined !== program.glProgram) {\r\n location = System.instance.context.getUniformLocation(program.glProgram, name);\r\n }\r\n if (null === location) {\r\n const errMsg = `uniform ${name} not found in ${program.description}.`;\r\n if (System.instance.options.errorOnMissingUniform) {\r\n throw new Error(errMsg);\r\n } else {\r\n Logger.logError(FrontendLoggerCategory.Render, errMsg);\r\n }\r\n }\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n System.instance.context.uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n this.setUniform1ui(data);\r\n }\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 createAmbientOcclusionProgram(context: WebGLContext): ShaderProgram;
6
+ export declare function createAmbientOcclusionProgram(context: WebGL2RenderingContext): ShaderProgram;
8
7
  //# sourceMappingURL=AmbientOcclusion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AmbientOcclusion.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/AmbientOcclusion.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA+LjD,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CA+FlF"}
1
+ {"version":3,"file":"AmbientOcclusion.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/AmbientOcclusion.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA+LjD,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA+F5F"}
@@ -184,7 +184,7 @@ const unfinalizeLinearDepthDB = `
184
184
  }
185
185
  `;
186
186
  function _shouldUseDB() {
187
- return System.instance.supportsLogZBuffer && System.instance.capabilities.supportsTextureFloat;
187
+ return System.instance.supportsLogZBuffer;
188
188
  }
189
189
  /** @internal */
190
190
  export function createAmbientOcclusionProgram(context) {
@@ -1 +1 @@
1
- {"version":3,"file":"AmbientOcclusion.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/AmbientOcclusion.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\n// portions adapted from Cesium.js Copyright 2011 - 2017 Cesium Contributors\r\n\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AmbientOcclusionGeometry } 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 { addFrustum } from \"./Common\";\r\nimport { decodeDepthRgb } from \"./Decode\";\r\nimport { addRenderOrderConstants, readDepthAndOrder } from \"./FeatureSymbology\";\r\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\r\nimport { addViewport } from \"./Viewport\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// 'PB' indicates a shader variation when only the pickbuffer is available\r\n// 'DB' indicates a shader variation when the real floating point depth buffer is available.\r\n\r\nconst computeAmbientOcclusionPrefixPB = `\r\nvec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\nvec2 depthAndOrder = readDepthAndOrder(tc);\r\nfloat db = depthAndOrder.y;\r\n`;\r\n\r\nconst computeAmbientOcclusionPrefixDB = `\r\nvec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\nvec2 depthAndOrder = readDepthAndOrder(tc);\r\nfloat db = readDepth(tc);\r\n`;\r\n\r\n// This outputs 1 for unlit surfaces, and for polylines and point strings.\r\n// Otherwise it computes ambient occlusion based on normal reconstructed from pick depth.\r\n// NB: This shader code actually begins with a `computeAmbientOcclusionPrefix` variation as shown above.\r\nconst computeAmbientOcclusion = `\r\n depthAndOrder.y = unfinalizeLinearDepth(db);\r\n float order = depthAndOrder.x;\r\n if (order >= kRenderOrder_PlanarBit)\r\n order = order - kRenderOrder_PlanarBit;\r\n\r\n if (order < kRenderOrder_LitSurface || order == kRenderOrder_Linear)\r\n return vec4(1.0);\r\n\r\n // NB: linearDepth: 1 == near, 0 == far\r\n\r\n float linearDepth = depthAndOrder.y;\r\n float nonLinearDepth = computeNonLinearDepth(db);\r\n if (nonLinearDepth > u_maxDistance)\r\n return vec4(1.0);\r\n\r\n vec3 viewPos = computePositionFromDepth(tc, nonLinearDepth).xyz;\r\n\r\n vec2 pixelSize = 1.0 / u_viewport;\r\n vec3 viewNormal = computeNormalFromDepth(viewPos, tc, pixelSize);\r\n\r\n vec2 sampleDirection = vec2(1.0, 0.0);\r\n float gapAngle = 90.0 * 0.017453292519943295; // radians per degree\r\n\r\n // Grab some random noise\r\n // Multiply screen UV (range 0..1) with size of viewport divided by 4 in order to tile the 4x4 noise texture across the screen.\r\n // Multiply the random 0..1 vec3 by 2 and then substract 1. This puts the components of the vec3 in the range -1..1.\r\n vec3 noiseVec = (TEXTURE(u_noise, tc * vec2(u_viewport.x / 4.0, u_viewport.y / 4.0)).rgb + 1.0) / 2.0;\r\n\r\n float bias = u_hbaoSettings.x; // Represents an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value, sampling stops in the current direction. This is used to remove shadows from near planar edges.\r\n float zLengthCap = u_hbaoSettings.y; // If the distance in linear Z from the current sample to first sample is greater than this value, sampling stops in the current direction.\r\n float intensity = u_hbaoSettings.z; // Raise the final occlusion to the power of this value. Larger values make the ambient shadows darker.\r\n float texelStepSize = clamp(u_hbaoSettings.w * linearDepth, 1.0, u_hbaoSettings.w); // Indicates the distance to step toward the next texel sample in the current direction.\r\n\r\n float tOcclusion = 0.0;\r\n\r\n // loop for each direction\r\n for (int i = 0; i < 4; i++) {\r\n float newGapAngle = gapAngle * (float(i) + noiseVec.x);\r\n float cosVal = cos(newGapAngle);\r\n float sinVal = sin(newGapAngle);\r\n\r\n // rotate sampling direction\r\n vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y);\r\n float curOcclusion = 0.0;\r\n float curStepSize = texelStepSize; // 1.0 = stepsize, StepSize should be specified by uniform - what are good values?\r\n\r\n // loop for each step\r\n for (int j = 0; j < 6; j++) {\r\n vec2 directionWithStep = vec2(rotatedSampleDirection.x * curStepSize * pixelSize.x, rotatedSampleDirection.y * curStepSize * pixelSize.y);\r\n vec2 newCoords = directionWithStep + tc;\r\n\r\n // do not repeat around the depth texture\r\n if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0) {\r\n break;\r\n }\r\n\r\n db = readDepth(newCoords);\r\n float curLinearDepth = unfinalizeLinearDepth(db);\r\n float curNonLinearDepth = computeNonLinearDepth(db);\r\n vec3 curViewPos = computePositionFromDepth(newCoords, curNonLinearDepth).xyz;\r\n vec3 diffVec = curViewPos.xyz - viewPos.xyz;\r\n float zLength = abs(curLinearDepth - linearDepth);\r\n\r\n float dotVal = clamp(dot(viewNormal, normalize(diffVec)), 0.0, 1.0);\r\n float weight = smoothstep(0.0, 1.0, zLengthCap / zLength);\r\n\r\n if (dotVal < bias) {\r\n dotVal = 0.0;\r\n }\r\n\r\n curOcclusion = max(curOcclusion, dotVal * weight);\r\n curStepSize += texelStepSize;\r\n }\r\n tOcclusion += curOcclusion;\r\n }\r\n\r\n float distanceFadeFactor = kFrustumType_Perspective == u_frustum.z ? 1.0 - pow(clamp(nonLinearDepth / u_maxDistance, 0.0, 1.0), 4.0) : 1.0;\r\n tOcclusion *= distanceFadeFactor;\r\n\r\n tOcclusion /= 4.0;\r\n tOcclusion = 1.0 - clamp(tOcclusion, 0.0, 1.0);\r\n tOcclusion = pow(tOcclusion, intensity);\r\n\r\n return vec4(tOcclusion, tOcclusion, tOcclusion, 1.0);\r\n`;\r\n\r\nconst computePositionFromDepth = `\r\nvec4 computePositionFromDepth(vec2 tc, float nonLinearDepth) {\r\n if (kFrustumType_Perspective == u_frustum.z) {\r\n vec2 xy = vec2((tc.x * 2.0 - 1.0), ((1.0 - tc.y) * 2.0 - 1.0));\r\n vec4 posEC = u_invProj * vec4(xy, nonLinearDepth, 1.0);\r\n posEC = posEC / posEC.w;\r\n return posEC;\r\n } else {\r\n float top = u_frustumPlanes.x;\r\n float bottom = u_frustumPlanes.y;\r\n float left = u_frustumPlanes.z;\r\n float right = u_frustumPlanes.w;\r\n return vec4(mix(left, right, tc.x), mix(bottom, top, tc.y), nonLinearDepth, 1.0);\r\n }\r\n}\r\n`;\r\n\r\nconst computeNormalFromDepth = `\r\nvec3 computeNormalFromDepth(vec3 viewPos, vec2 tc, vec2 pixelSize) {\r\n float nonLinearDepthU = computeNonLinearDepth(readDepth(tc - vec2(0.0, pixelSize.y)));\r\n float nonLinearDepthD = computeNonLinearDepth(readDepth(tc + vec2(0.0, pixelSize.y)));\r\n float nonLinearDepthL = computeNonLinearDepth(readDepth(tc - vec2(pixelSize.x, 0.0)));\r\n float nonLinearDepthR = computeNonLinearDepth(readDepth(tc + vec2(pixelSize.x, 0.0)));\r\n\r\n vec3 viewPosUp = computePositionFromDepth(tc - vec2(0.0, pixelSize.y), nonLinearDepthU).xyz;\r\n vec3 viewPosDown = computePositionFromDepth(tc + vec2(0.0, pixelSize.y), nonLinearDepthD).xyz;\r\n vec3 viewPosLeft = computePositionFromDepth(tc - vec2(pixelSize.x, 0.0), nonLinearDepthL).xyz;\r\n vec3 viewPosRight = computePositionFromDepth(tc + vec2(pixelSize.x, 0.0), nonLinearDepthR).xyz;\r\n\r\n vec3 up = viewPos.xyz - viewPosUp.xyz;\r\n vec3 down = viewPosDown.xyz - viewPos.xyz;\r\n vec3 left = viewPos.xyz - viewPosLeft.xyz;\r\n vec3 right = viewPosRight.xyz - viewPos.xyz;\r\n\r\n vec3 dx = length(left) < length(right) ? left : right;\r\n vec3 dy = length(up) < length(down) ? up : down;\r\n\r\n return normalize(cross(dy, dx));\r\n}\r\n`;\r\n\r\nconst computeNonLinearDepthPB = `\r\nfloat computeNonLinearDepth(float linearDepth) {\r\n return mix(u_frustum.y, u_frustum.x, linearDepth);\r\n}\r\n`;\r\nconst computeNonLinearDepthDB = `\r\nfloat computeNonLinearDepth(float depth) {\r\n return 0.0 == u_logZ.x ? depth * u_logZ.y : exp(depth * u_logZ.y) / u_logZ.x;\r\n}\r\n`;\r\n\r\nconst readDepthPB = `\r\nfloat readDepth(vec2 tc) {\r\n return readDepthAndOrder(tc).y;\r\n}\r\n`;\r\nconst readDepthDB = `\r\nfloat readDepth(vec2 tc) {\r\n return TEXTURE(u_depthBuffer, tc).r;\r\n}\r\n`;\r\nconst unfinalizeLinearDepthDB = `\r\n float unfinalizeLinearDepth(float depth) {\r\n float eyeZ = 0.0 == u_logZ.x ? depth * u_logZ.y : exp(depth * u_logZ.y) / u_logZ.x;\r\n float near = u_frustum.x, far = u_frustum.y;\r\n float depthRange = far - near;\r\n float linearDepth = (eyeZ - near) / depthRange;\r\n return 1.0 - linearDepth;\r\n }\r\n`;\r\n\r\nfunction _shouldUseDB() {\r\n return System.instance.supportsLogZBuffer && System.instance.capabilities.supportsTextureFloat;\r\n}\r\n\r\n/** @internal */\r\nexport function createAmbientOcclusionProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n const shouldUseDB = _shouldUseDB();\r\n\r\n addWindowToTexCoords(frag);\r\n frag.addFunction(decodeDepthRgb);\r\n frag.addFunction(readDepthAndOrder);\r\n\r\n if (shouldUseDB) {\r\n frag.addFunction(unfinalizeLinearDepthDB);\r\n frag.addFunction(computeNonLinearDepthDB);\r\n frag.addFunction(readDepthDB);\r\n } else {\r\n frag.addDefine(\"unfinalizeLinearDepth\", \"\");\r\n frag.addFunction(computeNonLinearDepthPB);\r\n frag.addFunction(readDepthPB);\r\n }\r\n\r\n frag.addFunction(computePositionFromDepth);\r\n frag.addFunction(computeNormalFromDepth);\r\n addRenderOrderConstants(frag);\r\n\r\n if (shouldUseDB)\r\n frag.addUniform(\"u_logZ\", VariableType.Vec2, (prog) => {\r\n prog.addProgramUniform(\"u_logZ\", (uniform, params) => {\r\n uniform.setUniform2fv(params.target.uniforms.frustum.logZ);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, shouldUseDB ?\r\n computeAmbientOcclusionPrefixDB + computeAmbientOcclusion :\r\n computeAmbientOcclusionPrefixPB + computeAmbientOcclusion);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\r\n const geom = params.geometry as AmbientOcclusionGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthAndOrder, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (shouldUseDB)\r\n frag.addUniform(\"u_depthBuffer\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthBuffer\", (uniform, params) => {\r\n const geom = params.geometry as AmbientOcclusionGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depth, TextureUnit.Two);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_noise\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_noise\", (uniform, params) => {\r\n const geom = params.geometry as AmbientOcclusionGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.noise, TextureUnit.One);\r\n });\r\n });\r\n\r\n addFrustum(builder);\r\n addViewport(frag);\r\n\r\n frag.addUniform(\"u_invProj\", VariableType.Mat4, (prog) => {\r\n prog.addProgramUniform(\"u_invProj\", (uniform, params) => {\r\n const invProj = params.projectionMatrix.clone();\r\n invProj.invert();\r\n uniform.setMatrix4(invProj);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_frustumPlanes\", VariableType.Vec4, (prog) => {\r\n prog.addProgramUniform(\"u_frustumPlanes\", (uniform, params) => {\r\n uniform.setUniform4fv(params.target.uniforms.frustum.planes);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_hbaoSettings\", VariableType.Vec4, (prog) => {\r\n prog.addProgramUniform(\"u_hbaoSettings\", (uniform, params) => {\r\n const hbaoSettings = new Float32Array([\r\n params.target.ambientOcclusionSettings.bias,\r\n params.target.ambientOcclusionSettings.zLengthCap,\r\n params.target.ambientOcclusionSettings.intensity,\r\n params.target.ambientOcclusionSettings.texelStepSize]);\r\n uniform.setUniform4fv(hbaoSettings);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.addUniform(\"u_maxDistance\", VariableType.Float, (prog) => {\r\n prog.addProgramUniform(\"u_maxDistance\", (uniform, params) => {\r\n uniform.setUniform1f(params.target.ambientOcclusionSettings.maxDistance);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n builder.vert.headerComment = \"//!V! AmbientOcclusion\";\r\n builder.frag.headerComment = \"//!F! AmbientOcclusion\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"AmbientOcclusion.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/AmbientOcclusion.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\n// portions adapted from Cesium.js Copyright 2011 - 2017 Cesium Contributors\r\n\r\nimport { AmbientOcclusionGeometry } 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 { addFrustum } from \"./Common\";\r\nimport { decodeDepthRgb } from \"./Decode\";\r\nimport { addRenderOrderConstants, readDepthAndOrder } from \"./FeatureSymbology\";\r\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\r\nimport { addViewport } from \"./Viewport\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// 'PB' indicates a shader variation when only the pickbuffer is available\r\n// 'DB' indicates a shader variation when the real floating point depth buffer is available.\r\n\r\nconst computeAmbientOcclusionPrefixPB = `\r\nvec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\nvec2 depthAndOrder = readDepthAndOrder(tc);\r\nfloat db = depthAndOrder.y;\r\n`;\r\n\r\nconst computeAmbientOcclusionPrefixDB = `\r\nvec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\nvec2 depthAndOrder = readDepthAndOrder(tc);\r\nfloat db = readDepth(tc);\r\n`;\r\n\r\n// This outputs 1 for unlit surfaces, and for polylines and point strings.\r\n// Otherwise it computes ambient occlusion based on normal reconstructed from pick depth.\r\n// NB: This shader code actually begins with a `computeAmbientOcclusionPrefix` variation as shown above.\r\nconst computeAmbientOcclusion = `\r\n depthAndOrder.y = unfinalizeLinearDepth(db);\r\n float order = depthAndOrder.x;\r\n if (order >= kRenderOrder_PlanarBit)\r\n order = order - kRenderOrder_PlanarBit;\r\n\r\n if (order < kRenderOrder_LitSurface || order == kRenderOrder_Linear)\r\n return vec4(1.0);\r\n\r\n // NB: linearDepth: 1 == near, 0 == far\r\n\r\n float linearDepth = depthAndOrder.y;\r\n float nonLinearDepth = computeNonLinearDepth(db);\r\n if (nonLinearDepth > u_maxDistance)\r\n return vec4(1.0);\r\n\r\n vec3 viewPos = computePositionFromDepth(tc, nonLinearDepth).xyz;\r\n\r\n vec2 pixelSize = 1.0 / u_viewport;\r\n vec3 viewNormal = computeNormalFromDepth(viewPos, tc, pixelSize);\r\n\r\n vec2 sampleDirection = vec2(1.0, 0.0);\r\n float gapAngle = 90.0 * 0.017453292519943295; // radians per degree\r\n\r\n // Grab some random noise\r\n // Multiply screen UV (range 0..1) with size of viewport divided by 4 in order to tile the 4x4 noise texture across the screen.\r\n // Multiply the random 0..1 vec3 by 2 and then substract 1. This puts the components of the vec3 in the range -1..1.\r\n vec3 noiseVec = (TEXTURE(u_noise, tc * vec2(u_viewport.x / 4.0, u_viewport.y / 4.0)).rgb + 1.0) / 2.0;\r\n\r\n float bias = u_hbaoSettings.x; // Represents an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value, sampling stops in the current direction. This is used to remove shadows from near planar edges.\r\n float zLengthCap = u_hbaoSettings.y; // If the distance in linear Z from the current sample to first sample is greater than this value, sampling stops in the current direction.\r\n float intensity = u_hbaoSettings.z; // Raise the final occlusion to the power of this value. Larger values make the ambient shadows darker.\r\n float texelStepSize = clamp(u_hbaoSettings.w * linearDepth, 1.0, u_hbaoSettings.w); // Indicates the distance to step toward the next texel sample in the current direction.\r\n\r\n float tOcclusion = 0.0;\r\n\r\n // loop for each direction\r\n for (int i = 0; i < 4; i++) {\r\n float newGapAngle = gapAngle * (float(i) + noiseVec.x);\r\n float cosVal = cos(newGapAngle);\r\n float sinVal = sin(newGapAngle);\r\n\r\n // rotate sampling direction\r\n vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y);\r\n float curOcclusion = 0.0;\r\n float curStepSize = texelStepSize; // 1.0 = stepsize, StepSize should be specified by uniform - what are good values?\r\n\r\n // loop for each step\r\n for (int j = 0; j < 6; j++) {\r\n vec2 directionWithStep = vec2(rotatedSampleDirection.x * curStepSize * pixelSize.x, rotatedSampleDirection.y * curStepSize * pixelSize.y);\r\n vec2 newCoords = directionWithStep + tc;\r\n\r\n // do not repeat around the depth texture\r\n if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0) {\r\n break;\r\n }\r\n\r\n db = readDepth(newCoords);\r\n float curLinearDepth = unfinalizeLinearDepth(db);\r\n float curNonLinearDepth = computeNonLinearDepth(db);\r\n vec3 curViewPos = computePositionFromDepth(newCoords, curNonLinearDepth).xyz;\r\n vec3 diffVec = curViewPos.xyz - viewPos.xyz;\r\n float zLength = abs(curLinearDepth - linearDepth);\r\n\r\n float dotVal = clamp(dot(viewNormal, normalize(diffVec)), 0.0, 1.0);\r\n float weight = smoothstep(0.0, 1.0, zLengthCap / zLength);\r\n\r\n if (dotVal < bias) {\r\n dotVal = 0.0;\r\n }\r\n\r\n curOcclusion = max(curOcclusion, dotVal * weight);\r\n curStepSize += texelStepSize;\r\n }\r\n tOcclusion += curOcclusion;\r\n }\r\n\r\n float distanceFadeFactor = kFrustumType_Perspective == u_frustum.z ? 1.0 - pow(clamp(nonLinearDepth / u_maxDistance, 0.0, 1.0), 4.0) : 1.0;\r\n tOcclusion *= distanceFadeFactor;\r\n\r\n tOcclusion /= 4.0;\r\n tOcclusion = 1.0 - clamp(tOcclusion, 0.0, 1.0);\r\n tOcclusion = pow(tOcclusion, intensity);\r\n\r\n return vec4(tOcclusion, tOcclusion, tOcclusion, 1.0);\r\n`;\r\n\r\nconst computePositionFromDepth = `\r\nvec4 computePositionFromDepth(vec2 tc, float nonLinearDepth) {\r\n if (kFrustumType_Perspective == u_frustum.z) {\r\n vec2 xy = vec2((tc.x * 2.0 - 1.0), ((1.0 - tc.y) * 2.0 - 1.0));\r\n vec4 posEC = u_invProj * vec4(xy, nonLinearDepth, 1.0);\r\n posEC = posEC / posEC.w;\r\n return posEC;\r\n } else {\r\n float top = u_frustumPlanes.x;\r\n float bottom = u_frustumPlanes.y;\r\n float left = u_frustumPlanes.z;\r\n float right = u_frustumPlanes.w;\r\n return vec4(mix(left, right, tc.x), mix(bottom, top, tc.y), nonLinearDepth, 1.0);\r\n }\r\n}\r\n`;\r\n\r\nconst computeNormalFromDepth = `\r\nvec3 computeNormalFromDepth(vec3 viewPos, vec2 tc, vec2 pixelSize) {\r\n float nonLinearDepthU = computeNonLinearDepth(readDepth(tc - vec2(0.0, pixelSize.y)));\r\n float nonLinearDepthD = computeNonLinearDepth(readDepth(tc + vec2(0.0, pixelSize.y)));\r\n float nonLinearDepthL = computeNonLinearDepth(readDepth(tc - vec2(pixelSize.x, 0.0)));\r\n float nonLinearDepthR = computeNonLinearDepth(readDepth(tc + vec2(pixelSize.x, 0.0)));\r\n\r\n vec3 viewPosUp = computePositionFromDepth(tc - vec2(0.0, pixelSize.y), nonLinearDepthU).xyz;\r\n vec3 viewPosDown = computePositionFromDepth(tc + vec2(0.0, pixelSize.y), nonLinearDepthD).xyz;\r\n vec3 viewPosLeft = computePositionFromDepth(tc - vec2(pixelSize.x, 0.0), nonLinearDepthL).xyz;\r\n vec3 viewPosRight = computePositionFromDepth(tc + vec2(pixelSize.x, 0.0), nonLinearDepthR).xyz;\r\n\r\n vec3 up = viewPos.xyz - viewPosUp.xyz;\r\n vec3 down = viewPosDown.xyz - viewPos.xyz;\r\n vec3 left = viewPos.xyz - viewPosLeft.xyz;\r\n vec3 right = viewPosRight.xyz - viewPos.xyz;\r\n\r\n vec3 dx = length(left) < length(right) ? left : right;\r\n vec3 dy = length(up) < length(down) ? up : down;\r\n\r\n return normalize(cross(dy, dx));\r\n}\r\n`;\r\n\r\nconst computeNonLinearDepthPB = `\r\nfloat computeNonLinearDepth(float linearDepth) {\r\n return mix(u_frustum.y, u_frustum.x, linearDepth);\r\n}\r\n`;\r\nconst computeNonLinearDepthDB = `\r\nfloat computeNonLinearDepth(float depth) {\r\n return 0.0 == u_logZ.x ? depth * u_logZ.y : exp(depth * u_logZ.y) / u_logZ.x;\r\n}\r\n`;\r\n\r\nconst readDepthPB = `\r\nfloat readDepth(vec2 tc) {\r\n return readDepthAndOrder(tc).y;\r\n}\r\n`;\r\nconst readDepthDB = `\r\nfloat readDepth(vec2 tc) {\r\n return TEXTURE(u_depthBuffer, tc).r;\r\n}\r\n`;\r\nconst unfinalizeLinearDepthDB = `\r\n float unfinalizeLinearDepth(float depth) {\r\n float eyeZ = 0.0 == u_logZ.x ? depth * u_logZ.y : exp(depth * u_logZ.y) / u_logZ.x;\r\n float near = u_frustum.x, far = u_frustum.y;\r\n float depthRange = far - near;\r\n float linearDepth = (eyeZ - near) / depthRange;\r\n return 1.0 - linearDepth;\r\n }\r\n`;\r\n\r\nfunction _shouldUseDB() {\r\n return System.instance.supportsLogZBuffer;\r\n}\r\n\r\n/** @internal */\r\nexport function createAmbientOcclusionProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n const shouldUseDB = _shouldUseDB();\r\n\r\n addWindowToTexCoords(frag);\r\n frag.addFunction(decodeDepthRgb);\r\n frag.addFunction(readDepthAndOrder);\r\n\r\n if (shouldUseDB) {\r\n frag.addFunction(unfinalizeLinearDepthDB);\r\n frag.addFunction(computeNonLinearDepthDB);\r\n frag.addFunction(readDepthDB);\r\n } else {\r\n frag.addDefine(\"unfinalizeLinearDepth\", \"\");\r\n frag.addFunction(computeNonLinearDepthPB);\r\n frag.addFunction(readDepthPB);\r\n }\r\n\r\n frag.addFunction(computePositionFromDepth);\r\n frag.addFunction(computeNormalFromDepth);\r\n addRenderOrderConstants(frag);\r\n\r\n if (shouldUseDB)\r\n frag.addUniform(\"u_logZ\", VariableType.Vec2, (prog) => {\r\n prog.addProgramUniform(\"u_logZ\", (uniform, params) => {\r\n uniform.setUniform2fv(params.target.uniforms.frustum.logZ);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, shouldUseDB ?\r\n computeAmbientOcclusionPrefixDB + computeAmbientOcclusion :\r\n computeAmbientOcclusionPrefixPB + computeAmbientOcclusion);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\r\n const geom = params.geometry as AmbientOcclusionGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depthAndOrder, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (shouldUseDB)\r\n frag.addUniform(\"u_depthBuffer\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_depthBuffer\", (uniform, params) => {\r\n const geom = params.geometry as AmbientOcclusionGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.depth, TextureUnit.Two);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_noise\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_noise\", (uniform, params) => {\r\n const geom = params.geometry as AmbientOcclusionGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.noise, TextureUnit.One);\r\n });\r\n });\r\n\r\n addFrustum(builder);\r\n addViewport(frag);\r\n\r\n frag.addUniform(\"u_invProj\", VariableType.Mat4, (prog) => {\r\n prog.addProgramUniform(\"u_invProj\", (uniform, params) => {\r\n const invProj = params.projectionMatrix.clone();\r\n invProj.invert();\r\n uniform.setMatrix4(invProj);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_frustumPlanes\", VariableType.Vec4, (prog) => {\r\n prog.addProgramUniform(\"u_frustumPlanes\", (uniform, params) => {\r\n uniform.setUniform4fv(params.target.uniforms.frustum.planes);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_hbaoSettings\", VariableType.Vec4, (prog) => {\r\n prog.addProgramUniform(\"u_hbaoSettings\", (uniform, params) => {\r\n const hbaoSettings = new Float32Array([\r\n params.target.ambientOcclusionSettings.bias,\r\n params.target.ambientOcclusionSettings.zLengthCap,\r\n params.target.ambientOcclusionSettings.intensity,\r\n params.target.ambientOcclusionSettings.texelStepSize]);\r\n uniform.setUniform4fv(hbaoSettings);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.addUniform(\"u_maxDistance\", VariableType.Float, (prog) => {\r\n prog.addProgramUniform(\"u_maxDistance\", (uniform, params) => {\r\n uniform.setUniform1f(params.target.ambientOcclusionSettings.maxDistance);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n builder.vert.headerComment = \"//!V! AmbientOcclusion\";\r\n builder.frag.headerComment = \"//!F! AmbientOcclusion\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
@@ -2,7 +2,6 @@
2
2
  * @module WebGL
3
3
  */
4
4
  import { VertexShaderBuilder } from "../ShaderBuilder";
5
- import { IsThematic } from "../TechniqueFlags";
6
5
  /** @internal */
7
- export declare function addAnimation(vert: VertexShaderBuilder, isSurface: boolean, isThematic: IsThematic): void;
6
+ export declare function addAnimation(vert: VertexShaderBuilder, isSurface: boolean): void;
8
7
  //# sourceMappingURL=Animation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Animation.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Animation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAAgB,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA0K/C,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAwHxG"}
1
+ {"version":3,"file":"Animation.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Animation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAgB,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AA0K5F,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAsHhF"}
@@ -7,7 +7,6 @@
7
7
  */
8
8
  import { assert } from "@itwin/core-bentley";
9
9
  import { ThematicGradientSettings } from "@itwin/core-common";
10
- import { System } from "../System";
11
10
  import { TextureUnit } from "../RenderFlags";
12
11
  import { octDecodeNormal } from "./Surface";
13
12
  import { unquantizePosition } from "./Vertex";
@@ -161,7 +160,7 @@ function computeAnimParams(params, channel, fraction) {
161
160
  params[2] = 0.0;
162
161
  }
163
162
  /** @internal */
164
- export function addAnimation(vert, isSurface, isThematic) {
163
+ export function addAnimation(vert, isSurface) {
165
164
  // Lookup table
166
165
  vert.addGlobal("g_anim_step", 3 /* Vec2 */);
167
166
  vert.addGlobal("g_anim_center", 3 /* Vec2 */);
@@ -237,32 +236,30 @@ export function addAnimation(vert, isSurface, isThematic) {
237
236
  uniform.setUniform3fv(animParams);
238
237
  });
239
238
  });
240
- if (isThematic === 0 /* No */ || System.instance.capabilities.isWebGL2) {
241
- vert.addUniform("u_animScalarParams", 4 /* Vec3 */, (prog) => {
242
- prog.addGraphicUniform("u_animScalarParams", (uniform, params) => {
243
- const scalars = getScalarChannel(params);
244
- const animParams = getAnimParams(3, -1.0);
245
- if (scalars)
246
- computeAnimParams(animParams, scalars.channel, params.target.analysisFraction);
247
- uniform.setUniform3fv(animParams);
248
- });
239
+ vert.addUniform("u_animScalarParams", 4 /* Vec3 */, (prog) => {
240
+ prog.addGraphicUniform("u_animScalarParams", (uniform, params) => {
241
+ const scalars = getScalarChannel(params);
242
+ const animParams = getAnimParams(3, -1.0);
243
+ if (scalars)
244
+ computeAnimParams(animParams, scalars.channel, params.target.analysisFraction);
245
+ uniform.setUniform3fv(animParams);
249
246
  });
250
- vert.addUniform("u_animScalarQParams", 3 /* Vec2 */, (prog) => {
251
- prog.addGraphicUniform("u_animScalarQParams", (uniform, params) => {
252
- const scalars = getScalarChannel(params);
253
- const animParams = getAnimParams(2, 1.0);
254
- if (scalars) {
255
- const range = scalars.scalar.range;
256
- let rangeScale = range.high - range.low;
257
- if (rangeScale === 0)
258
- rangeScale = 1;
259
- animParams[0] = ThematicGradientSettings.margin + (scalars.channel.qOrigin - range.low) / rangeScale;
260
- animParams[1] = ThematicGradientSettings.contentRange * scalars.channel.qScale / rangeScale;
261
- }
262
- uniform.setUniform2fv(animParams);
263
- });
247
+ });
248
+ vert.addUniform("u_animScalarQParams", 3 /* Vec2 */, (prog) => {
249
+ prog.addGraphicUniform("u_animScalarQParams", (uniform, params) => {
250
+ const scalars = getScalarChannel(params);
251
+ const animParams = getAnimParams(2, 1.0);
252
+ if (scalars) {
253
+ const range = scalars.scalar.range;
254
+ let rangeScale = range.high - range.low;
255
+ if (rangeScale === 0)
256
+ rangeScale = 1;
257
+ animParams[0] = ThematicGradientSettings.margin + (scalars.channel.qOrigin - range.low) / rangeScale;
258
+ animParams[1] = ThematicGradientSettings.contentRange * scalars.channel.qScale / rangeScale;
259
+ }
260
+ uniform.setUniform2fv(animParams);
264
261
  });
265
- }
262
+ });
266
263
  }
267
264
  }
268
265
  //# sourceMappingURL=Animation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Animation.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Animation.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 { AnalysisStyleDisplacement, AnalysisStyleThematic, ThematicGradientSettings } from \"@itwin/core-common\";\r\nimport { AuxChannel, AuxDisplacementChannel, AuxParamChannel } from \"../../primitives/AuxChannelTable\";\r\nimport { DrawParams } from \"../DrawCommand\";\r\nimport { System } from \"../System\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsThematic } from \"../TechniqueFlags\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { unquantizePosition } from \"./Vertex\";\r\n\r\nconst initialize = `\r\n g_anim_step = vec2(1.0) / u_animLUTParams.xy;\r\n g_anim_center = g_anim_step * 0.5;\r\n`;\r\n\r\n// The vertex index is an integer in [0..numVertices].\r\n// The frame index is an integer in [0..numBytesPerVertex/2].\r\n// Therefore each frame index points at 2 bytes within the texture.\r\n// The third component of the return value is 0.0 if the input index points to the first 2 bytes of the texel, or 1.0 if pointing to the second 2 bytes\r\nconst computeAnimLUTCoords = `\r\nvec3 computeAnimLUTCoords(float vertIndex, float frameIndex) {\r\n // float baseIndex = (vertIndex * 2.0) + frameIndex;\r\n float baseIndex = (vertIndex * u_animLUTParams.z) + frameIndex;\r\n float halfIndex = baseIndex * 0.5;\r\n float index = floor(halfIndex);\r\n\r\n float epsilon = 0.5 / u_animLUTParams.x;\r\n float yId = floor(index / u_animLUTParams.x + epsilon);\r\n float xId = index - u_animLUTParams.x * yId;\r\n\r\n vec2 texCoord = g_anim_center + vec2(xId / u_animLUTParams.x, yId / u_animLUTParams.y);\r\n return vec3(texCoord, 2.0 * (halfIndex - index));\r\n}\r\n`;\r\n\r\n// Sample 2 bytes at the specified index.\r\nconst sampleAnimVec2 = `\r\nvec2 sampleAnimVec2(float vertIndex, float frameIndex) {\r\n vec3 tc = computeAnimLUTCoords(vertIndex, frameIndex);\r\n vec4 texel = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\r\n return texel.xy * (1.0 - tc.z) + texel.zw * tc.z;\r\n}\r\n`;\r\n\r\n// Position is quantized to 6 bytes (2 bytes per component). So we always must sample two adjacent texels. We discard two bytes based on whether the index is even or odd.\r\nconst computeAnimationFrameDisplacement = `\r\nvec3 computeAnimationFrameDisplacement(float vertIndex, float frameIndex, vec3 origin, vec3 scale) {\r\n vec3 tc = computeAnimLUTCoords(vertIndex, frameIndex);\r\n vec4 enc1 = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\r\n tc.x += g_anim_step.x;\r\n vec4 enc2 = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\r\n\r\n vec2 ex = enc1.xy * (1.0 - tc.z) + enc1.zw * tc.z;\r\n vec2 ey = enc1.zw * (1.0 - tc.z) + enc2.xy * tc.z;\r\n vec2 ez = enc2.xy * (1.0 - tc.z) + enc2.zw * tc.z;\r\n\r\n vec3 qpos = vec3(decodeUInt16(ex), decodeUInt16(ey), decodeUInt16(ez));\r\n return unquantizePosition(qpos, origin, scale).xyz;\r\n}\r\n`;\r\n\r\nconst computeAnimationDisplacement = `\r\nvec3 computeAnimationDisplacement(float vertIndex, float frameIndex0, float frameIndex1, float fraction, vec3 origin, vec3 scale) {\r\n if (frameIndex0 < 0.0)\r\n return vec3(0.0, 0.0, 0.0);\r\n\r\n vec3 displacement = computeAnimationFrameDisplacement(vertIndex, frameIndex0, origin, scale);\r\n if (fraction > 0.0) {\r\n vec3 displacement1 = computeAnimationFrameDisplacement(vertIndex, frameIndex1, origin, scale);\r\n displacement += fraction * (displacement1 - displacement);\r\n }\r\n\r\n return displacement;\r\n}\r\n`;\r\n\r\nconst adjustRawPosition = `\r\n rawPos.xyz += computeAnimationDisplacement(g_vertexLUTIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);\r\n return rawPos;\r\n`;\r\n\r\nconst computeAnimationFrameNormal = `\r\nvec3 computeAnimationFrameNormal(float frameIndex) {\r\n vec2 enc = sampleAnimVec2(g_vertexLUTIndex, frameIndex);\r\n return octDecodeNormal(enc);\r\n}\r\n`;\r\n\r\nconst computeAnimationNormal = `\r\nvec3 computeAnimationNormal(float frameIndex0, float frameIndex1, float fraction) {\r\n vec3 normal = computeAnimationFrameNormal(frameIndex0);\r\n if (fraction > 0.0) {\r\n vec3 normal1 = computeAnimationFrameNormal(frameIndex1);\r\n normal += fraction * (normal1 - normal);\r\n }\r\n\r\n return normal;\r\n}\r\n`;\r\n\r\nconst computeAnimationFrameParam = `\r\nfloat computeAnimationFrameParam(float frameIndex, float origin, float scale) {\r\n vec2 enc = sampleAnimVec2(g_vertexLUTIndex, frameIndex);\r\n return clamp((origin + scale * decodeUInt16(enc)), 0.0, 1.0);\r\n}\r\n`;\r\n\r\nconst computeAnimationParam = `\r\nvec2 computeAnimationParam(float frameIndex0, float frameIndex1, float fraction, float origin, float scale) {\r\n float param = computeAnimationFrameParam(frameIndex0, origin, scale);\r\n if (fraction > 0.0) {\r\n float param1 = computeAnimationFrameParam(frameIndex1, origin, scale);\r\n param += fraction * (param1 - param);\r\n }\r\n\r\n return vec2(.5, param);\r\n}\r\n`;\r\n\r\nconst scratchAnimParams = [\r\n undefined,\r\n undefined,\r\n new Float32Array(2), // origin, scale\r\n new Float32Array(3), // index0, index1, fraction\r\n];\r\n\r\nfunction getAnimParams(size: 2 | 3, initialValue?: number): Float32Array {\r\n const array = scratchAnimParams[size]!;\r\n if (undefined !== initialValue)\r\n for (let i = 0; i < array.length; i++)\r\n array[i] = initialValue;\r\n\r\n return array;\r\n}\r\n\r\nfunction getDisplacementChannel(params: DrawParams): { channel: AuxDisplacementChannel, displacement: AnalysisStyleDisplacement } | undefined {\r\n const displacement = params.target.analysisStyle?.displacement;\r\n if (!displacement)\r\n return undefined;\r\n\r\n const channel = params.geometry.asLUT?.lut.auxChannels?.displacements?.get(displacement.channelName);\r\n return channel ? { channel, displacement } : undefined;\r\n}\r\n\r\nfunction getNormalChannel(params: DrawParams): AuxChannel | undefined {\r\n const channelName = params.target.analysisStyle?.normalChannelName;\r\n if (undefined === channelName)\r\n return undefined;\r\n\r\n return params.geometry.asLUT?.lut.auxChannels?.normals?.get(channelName);\r\n}\r\n\r\nfunction getScalarChannel(params: DrawParams): { channel: AuxParamChannel, scalar: AnalysisStyleThematic } | undefined {\r\n const scalar = params.target.analysisStyle?.thematic;\r\n if (!scalar)\r\n return undefined;\r\n\r\n const channel = params.geometry.asMesh?.lut.auxChannels?.params?.get(scalar.channelName);\r\n return channel ? { channel, scalar } : undefined;\r\n}\r\n\r\nfunction computeAnimParams(params: Float32Array, channel: AuxChannel, fraction: number): void {\r\n const { inputs, indices } = channel;\r\n const inputValue = fraction * inputs[inputs.length - 1];\r\n for (let i = 0; i < inputs.length - 1; i++) {\r\n if (inputValue >= inputs[i] && inputValue < inputs[i + 1]) {\r\n params[0] = indices[i];\r\n params[1] = indices[i + 1];\r\n params[2] = inputValue - inputs[i] / (inputs[i + 1] - inputs[i]);\r\n return;\r\n }\r\n }\r\n params[0] = params[1] = indices[inputs.length - 1];\r\n params[2] = 0.0;\r\n}\r\n\r\n/** @internal */\r\nexport function addAnimation(vert: VertexShaderBuilder, isSurface: boolean, isThematic: IsThematic): void {\r\n // Lookup table\r\n vert.addGlobal(\"g_anim_step\", VariableType.Vec2);\r\n vert.addGlobal(\"g_anim_center\", VariableType.Vec2);\r\n vert.addInitializer(initialize);\r\n vert.addFunction(unquantizePosition);\r\n\r\n vert.addUniform(\"u_animLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_animLUT\", (uniform, params) => {\r\n const channels = (params.geometry.asLUT!).lut.auxChannels!;\r\n assert(undefined !== channels);\r\n channels.texture.bindSampler(uniform, TextureUnit.AuxChannelLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_animLUTParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_animLUTParams\", (uniform, params) => {\r\n const geom = params.geometry.asLUT!;\r\n assert(undefined !== geom && undefined !== geom.lut.auxChannels);\r\n const tex = geom.lut.auxChannels.texture;\r\n const array = getAnimParams(3);\r\n array[0] = tex.width;\r\n array[1] = tex.height;\r\n array[2] = geom.lut.auxChannels.numBytesPerVertex / 2;\r\n uniform.setUniform3fv(array);\r\n });\r\n });\r\n\r\n vert.addFunction(computeAnimLUTCoords);\r\n vert.addFunction(sampleAnimVec2);\r\n\r\n // Displacement\r\n vert.addFunction(computeAnimationFrameDisplacement);\r\n vert.addFunction(computeAnimationDisplacement);\r\n vert.set(VertexShaderComponent.AdjustRawPosition, adjustRawPosition);\r\n\r\n vert.addUniform(\"u_animDispParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_animDispParams\", (uniform, params) => {\r\n const animParams = getAnimParams(3, 0.0);\r\n const disp = getDisplacementChannel(params);\r\n if (undefined !== disp)\r\n computeAnimParams(animParams, disp.channel, params.target.analysisFraction);\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n vert.addUniform(\"u_qAnimDispScale\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qAnimDispScale\", (uniform, params) => {\r\n const animParams = getAnimParams(3, 0.0);\r\n const disp = getDisplacementChannel(params);\r\n if (undefined !== disp)\r\n for (let i = 0; i < 3; i++)\r\n animParams[i] = disp.channel.qScale[i] * disp.displacement.scale;\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n vert.addUniform(\"u_qAnimDispOrigin\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qAnimDispOrigin\", (uniform, params) => {\r\n const animParams = getAnimParams(3, 0.0);\r\n const disp = getDisplacementChannel(params);\r\n if (undefined !== disp)\r\n for (let i = 0; i < 3; i++)\r\n animParams[i] = disp.channel.qOrigin[i] * disp.displacement.scale;\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n\r\n // Normal and param\r\n if (isSurface) {\r\n vert.addFunction(octDecodeNormal);\r\n vert.addFunction(computeAnimationFrameNormal);\r\n vert.addFunction(computeAnimationNormal);\r\n\r\n vert.addFunction(computeAnimationFrameParam);\r\n vert.addFunction(computeAnimationParam);\r\n\r\n vert.addUniform(\"u_animNormalParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_animNormalParams\", (uniform, params) => {\r\n const animParams = getAnimParams(3, -1.0);\r\n const channel = getNormalChannel(params);\r\n if (undefined !== channel)\r\n computeAnimParams(animParams, channel, params.target.analysisFraction);\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n\r\n if (isThematic === IsThematic.No || System.instance.capabilities.isWebGL2) {\r\n vert.addUniform(\"u_animScalarParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_animScalarParams\", (uniform, params) => {\r\n const scalars = getScalarChannel(params);\r\n const animParams = getAnimParams(3, -1.0);\r\n if (scalars)\r\n computeAnimParams(animParams, scalars.channel, params.target.analysisFraction);\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_animScalarQParams\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_animScalarQParams\", (uniform, params) => {\r\n const scalars = getScalarChannel(params);\r\n const animParams = getAnimParams(2, 1.0);\r\n if (scalars) {\r\n const range = scalars.scalar.range;\r\n let rangeScale = range.high - range.low;\r\n if (rangeScale === 0)\r\n rangeScale = 1;\r\n\r\n animParams[0] = ThematicGradientSettings.margin + (scalars.channel.qOrigin - range.low) / rangeScale;\r\n animParams[1] = ThematicGradientSettings.contentRange * scalars.channel.qScale / rangeScale;\r\n }\r\n\r\n uniform.setUniform2fv(animParams);\r\n });\r\n });\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Animation.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Animation.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 { AnalysisStyleDisplacement, AnalysisStyleThematic, ThematicGradientSettings } from \"@itwin/core-common\";\r\nimport { AuxChannel, AuxDisplacementChannel, AuxParamChannel } from \"../../primitives/AuxChannelTable\";\r\nimport { DrawParams } from \"../DrawCommand\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { VariableType, VertexShaderBuilder, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { octDecodeNormal } from \"./Surface\";\r\nimport { unquantizePosition } from \"./Vertex\";\r\n\r\nconst initialize = `\r\n g_anim_step = vec2(1.0) / u_animLUTParams.xy;\r\n g_anim_center = g_anim_step * 0.5;\r\n`;\r\n\r\n// The vertex index is an integer in [0..numVertices].\r\n// The frame index is an integer in [0..numBytesPerVertex/2].\r\n// Therefore each frame index points at 2 bytes within the texture.\r\n// The third component of the return value is 0.0 if the input index points to the first 2 bytes of the texel, or 1.0 if pointing to the second 2 bytes\r\nconst computeAnimLUTCoords = `\r\nvec3 computeAnimLUTCoords(float vertIndex, float frameIndex) {\r\n // float baseIndex = (vertIndex * 2.0) + frameIndex;\r\n float baseIndex = (vertIndex * u_animLUTParams.z) + frameIndex;\r\n float halfIndex = baseIndex * 0.5;\r\n float index = floor(halfIndex);\r\n\r\n float epsilon = 0.5 / u_animLUTParams.x;\r\n float yId = floor(index / u_animLUTParams.x + epsilon);\r\n float xId = index - u_animLUTParams.x * yId;\r\n\r\n vec2 texCoord = g_anim_center + vec2(xId / u_animLUTParams.x, yId / u_animLUTParams.y);\r\n return vec3(texCoord, 2.0 * (halfIndex - index));\r\n}\r\n`;\r\n\r\n// Sample 2 bytes at the specified index.\r\nconst sampleAnimVec2 = `\r\nvec2 sampleAnimVec2(float vertIndex, float frameIndex) {\r\n vec3 tc = computeAnimLUTCoords(vertIndex, frameIndex);\r\n vec4 texel = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\r\n return texel.xy * (1.0 - tc.z) + texel.zw * tc.z;\r\n}\r\n`;\r\n\r\n// Position is quantized to 6 bytes (2 bytes per component). So we always must sample two adjacent texels. We discard two bytes based on whether the index is even or odd.\r\nconst computeAnimationFrameDisplacement = `\r\nvec3 computeAnimationFrameDisplacement(float vertIndex, float frameIndex, vec3 origin, vec3 scale) {\r\n vec3 tc = computeAnimLUTCoords(vertIndex, frameIndex);\r\n vec4 enc1 = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\r\n tc.x += g_anim_step.x;\r\n vec4 enc2 = floor(TEXTURE(u_animLUT, tc.xy) * 255.0 + 0.5);\r\n\r\n vec2 ex = enc1.xy * (1.0 - tc.z) + enc1.zw * tc.z;\r\n vec2 ey = enc1.zw * (1.0 - tc.z) + enc2.xy * tc.z;\r\n vec2 ez = enc2.xy * (1.0 - tc.z) + enc2.zw * tc.z;\r\n\r\n vec3 qpos = vec3(decodeUInt16(ex), decodeUInt16(ey), decodeUInt16(ez));\r\n return unquantizePosition(qpos, origin, scale).xyz;\r\n}\r\n`;\r\n\r\nconst computeAnimationDisplacement = `\r\nvec3 computeAnimationDisplacement(float vertIndex, float frameIndex0, float frameIndex1, float fraction, vec3 origin, vec3 scale) {\r\n if (frameIndex0 < 0.0)\r\n return vec3(0.0, 0.0, 0.0);\r\n\r\n vec3 displacement = computeAnimationFrameDisplacement(vertIndex, frameIndex0, origin, scale);\r\n if (fraction > 0.0) {\r\n vec3 displacement1 = computeAnimationFrameDisplacement(vertIndex, frameIndex1, origin, scale);\r\n displacement += fraction * (displacement1 - displacement);\r\n }\r\n\r\n return displacement;\r\n}\r\n`;\r\n\r\nconst adjustRawPosition = `\r\n rawPos.xyz += computeAnimationDisplacement(g_vertexLUTIndex, u_animDispParams.x, u_animDispParams.y, u_animDispParams.z, u_qAnimDispOrigin, u_qAnimDispScale);\r\n return rawPos;\r\n`;\r\n\r\nconst computeAnimationFrameNormal = `\r\nvec3 computeAnimationFrameNormal(float frameIndex) {\r\n vec2 enc = sampleAnimVec2(g_vertexLUTIndex, frameIndex);\r\n return octDecodeNormal(enc);\r\n}\r\n`;\r\n\r\nconst computeAnimationNormal = `\r\nvec3 computeAnimationNormal(float frameIndex0, float frameIndex1, float fraction) {\r\n vec3 normal = computeAnimationFrameNormal(frameIndex0);\r\n if (fraction > 0.0) {\r\n vec3 normal1 = computeAnimationFrameNormal(frameIndex1);\r\n normal += fraction * (normal1 - normal);\r\n }\r\n\r\n return normal;\r\n}\r\n`;\r\n\r\nconst computeAnimationFrameParam = `\r\nfloat computeAnimationFrameParam(float frameIndex, float origin, float scale) {\r\n vec2 enc = sampleAnimVec2(g_vertexLUTIndex, frameIndex);\r\n return clamp((origin + scale * decodeUInt16(enc)), 0.0, 1.0);\r\n}\r\n`;\r\n\r\nconst computeAnimationParam = `\r\nvec2 computeAnimationParam(float frameIndex0, float frameIndex1, float fraction, float origin, float scale) {\r\n float param = computeAnimationFrameParam(frameIndex0, origin, scale);\r\n if (fraction > 0.0) {\r\n float param1 = computeAnimationFrameParam(frameIndex1, origin, scale);\r\n param += fraction * (param1 - param);\r\n }\r\n\r\n return vec2(.5, param);\r\n}\r\n`;\r\n\r\nconst scratchAnimParams = [\r\n undefined,\r\n undefined,\r\n new Float32Array(2), // origin, scale\r\n new Float32Array(3), // index0, index1, fraction\r\n];\r\n\r\nfunction getAnimParams(size: 2 | 3, initialValue?: number): Float32Array {\r\n const array = scratchAnimParams[size]!;\r\n if (undefined !== initialValue)\r\n for (let i = 0; i < array.length; i++)\r\n array[i] = initialValue;\r\n\r\n return array;\r\n}\r\n\r\nfunction getDisplacementChannel(params: DrawParams): { channel: AuxDisplacementChannel, displacement: AnalysisStyleDisplacement } | undefined {\r\n const displacement = params.target.analysisStyle?.displacement;\r\n if (!displacement)\r\n return undefined;\r\n\r\n const channel = params.geometry.asLUT?.lut.auxChannels?.displacements?.get(displacement.channelName);\r\n return channel ? { channel, displacement } : undefined;\r\n}\r\n\r\nfunction getNormalChannel(params: DrawParams): AuxChannel | undefined {\r\n const channelName = params.target.analysisStyle?.normalChannelName;\r\n if (undefined === channelName)\r\n return undefined;\r\n\r\n return params.geometry.asLUT?.lut.auxChannels?.normals?.get(channelName);\r\n}\r\n\r\nfunction getScalarChannel(params: DrawParams): { channel: AuxParamChannel, scalar: AnalysisStyleThematic } | undefined {\r\n const scalar = params.target.analysisStyle?.thematic;\r\n if (!scalar)\r\n return undefined;\r\n\r\n const channel = params.geometry.asMesh?.lut.auxChannels?.params?.get(scalar.channelName);\r\n return channel ? { channel, scalar } : undefined;\r\n}\r\n\r\nfunction computeAnimParams(params: Float32Array, channel: AuxChannel, fraction: number): void {\r\n const { inputs, indices } = channel;\r\n const inputValue = fraction * inputs[inputs.length - 1];\r\n for (let i = 0; i < inputs.length - 1; i++) {\r\n if (inputValue >= inputs[i] && inputValue < inputs[i + 1]) {\r\n params[0] = indices[i];\r\n params[1] = indices[i + 1];\r\n params[2] = inputValue - inputs[i] / (inputs[i + 1] - inputs[i]);\r\n return;\r\n }\r\n }\r\n params[0] = params[1] = indices[inputs.length - 1];\r\n params[2] = 0.0;\r\n}\r\n\r\n/** @internal */\r\nexport function addAnimation(vert: VertexShaderBuilder, isSurface: boolean): void {\r\n // Lookup table\r\n vert.addGlobal(\"g_anim_step\", VariableType.Vec2);\r\n vert.addGlobal(\"g_anim_center\", VariableType.Vec2);\r\n vert.addInitializer(initialize);\r\n vert.addFunction(unquantizePosition);\r\n\r\n vert.addUniform(\"u_animLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_animLUT\", (uniform, params) => {\r\n const channels = (params.geometry.asLUT!).lut.auxChannels!;\r\n assert(undefined !== channels);\r\n channels.texture.bindSampler(uniform, TextureUnit.AuxChannelLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_animLUTParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_animLUTParams\", (uniform, params) => {\r\n const geom = params.geometry.asLUT!;\r\n assert(undefined !== geom && undefined !== geom.lut.auxChannels);\r\n const tex = geom.lut.auxChannels.texture;\r\n const array = getAnimParams(3);\r\n array[0] = tex.width;\r\n array[1] = tex.height;\r\n array[2] = geom.lut.auxChannels.numBytesPerVertex / 2;\r\n uniform.setUniform3fv(array);\r\n });\r\n });\r\n\r\n vert.addFunction(computeAnimLUTCoords);\r\n vert.addFunction(sampleAnimVec2);\r\n\r\n // Displacement\r\n vert.addFunction(computeAnimationFrameDisplacement);\r\n vert.addFunction(computeAnimationDisplacement);\r\n vert.set(VertexShaderComponent.AdjustRawPosition, adjustRawPosition);\r\n\r\n vert.addUniform(\"u_animDispParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_animDispParams\", (uniform, params) => {\r\n const animParams = getAnimParams(3, 0.0);\r\n const disp = getDisplacementChannel(params);\r\n if (undefined !== disp)\r\n computeAnimParams(animParams, disp.channel, params.target.analysisFraction);\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n vert.addUniform(\"u_qAnimDispScale\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qAnimDispScale\", (uniform, params) => {\r\n const animParams = getAnimParams(3, 0.0);\r\n const disp = getDisplacementChannel(params);\r\n if (undefined !== disp)\r\n for (let i = 0; i < 3; i++)\r\n animParams[i] = disp.channel.qScale[i] * disp.displacement.scale;\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n vert.addUniform(\"u_qAnimDispOrigin\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qAnimDispOrigin\", (uniform, params) => {\r\n const animParams = getAnimParams(3, 0.0);\r\n const disp = getDisplacementChannel(params);\r\n if (undefined !== disp)\r\n for (let i = 0; i < 3; i++)\r\n animParams[i] = disp.channel.qOrigin[i] * disp.displacement.scale;\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n\r\n // Normal and param\r\n if (isSurface) {\r\n vert.addFunction(octDecodeNormal);\r\n vert.addFunction(computeAnimationFrameNormal);\r\n vert.addFunction(computeAnimationNormal);\r\n\r\n vert.addFunction(computeAnimationFrameParam);\r\n vert.addFunction(computeAnimationParam);\r\n\r\n vert.addUniform(\"u_animNormalParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_animNormalParams\", (uniform, params) => {\r\n const animParams = getAnimParams(3, -1.0);\r\n const channel = getNormalChannel(params);\r\n if (undefined !== channel)\r\n computeAnimParams(animParams, channel, params.target.analysisFraction);\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_animScalarParams\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_animScalarParams\", (uniform, params) => {\r\n const scalars = getScalarChannel(params);\r\n const animParams = getAnimParams(3, -1.0);\r\n if (scalars)\r\n computeAnimParams(animParams, scalars.channel, params.target.analysisFraction);\r\n\r\n uniform.setUniform3fv(animParams);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_animScalarQParams\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_animScalarQParams\", (uniform, params) => {\r\n const scalars = getScalarChannel(params);\r\n const animParams = getAnimParams(2, 1.0);\r\n if (scalars) {\r\n const range = scalars.scalar.range;\r\n let rangeScale = range.high - range.low;\r\n if (rangeScale === 0)\r\n rangeScale = 1;\r\n\r\n animParams[0] = ThematicGradientSettings.margin + (scalars.channel.qOrigin - range.low) / rangeScale;\r\n animParams[1] = ThematicGradientSettings.contentRange * scalars.channel.qScale / rangeScale;\r\n }\r\n\r\n uniform.setUniform2fv(animParams);\r\n });\r\n });\r\n }\r\n}\r\n"]}
@@ -1,9 +1,8 @@
1
1
  /** @packageDocumentation
2
2
  * @module WebGL
3
3
  */
4
- import { WebGLContext } from "@itwin/webgl-compatibility";
5
4
  import { BlurType } from "../CachedGeometry";
6
5
  import { ShaderProgram } from "../ShaderProgram";
7
6
  /** @internal */
8
- export declare function createBlurProgram(context: WebGLContext, type: BlurType): ShaderProgram;
7
+ export declare function createBlurProgram(context: WebGL2RenderingContext, type: BlurType): ShaderProgram;
9
8
  //# sourceMappingURL=Blur.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Blur.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Blur.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAgB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkDjD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,CA4DtF"}
1
+ {"version":3,"file":"Blur.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Blur.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAgB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkDjD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,CA4DhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"Blur.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Blur.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { BlurGeometry, BlurType } 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 { addRenderOrderConstants } from \"./FeatureSymbology\";\r\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\r\nimport { addViewport } from \"./Viewport\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// This shader applies a Gaussian blur in one dimension.\r\nconst computeBlur = `\r\n float delta = u_blurSettings.x;\r\n float sigma = u_blurSettings.y;\r\n float texelStepSize = u_blurSettings.z;\r\n\r\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\n vec2 step = texelStepSize / u_viewport;\r\n\r\n vec3 gaussian;\r\n const float twoPi = 6.283185307179586;\r\n gaussian.x = 1.0 / (sqrt(twoPi) * sigma);\r\n gaussian.y = exp((-0.5 * delta * delta) / (sigma * sigma));\r\n gaussian.z = gaussian.y * gaussian.y;\r\n\r\n vec4 origColor = TEXTURE(u_textureToBlur, tc);\r\n vec4 result = origColor * gaussian.x;\r\n for (int i = 1; i < 8; i++) {\r\n gaussian.xy *= gaussian.yz;\r\n\r\n vec2 offset = float(i) * u_blurDir * step;\r\n vec2 tcMinusOffset = tc - offset;\r\n vec2 tcPlusOffset = tc + offset;\r\n\r\n result += TEXTURE(u_textureToBlur, tcMinusOffset) * gaussian.x;\r\n result += TEXTURE(u_textureToBlur, tcPlusOffset) * gaussian.x;\r\n }\r\n\r\n return result;\r\n`;\r\n\r\n// This optionally skips adding in the blur texture result if the current pixel is a linear/edge/silhouette.\r\nconst testRenderOrder = `\r\n vec2 rotc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\n vec4 pdo = TEXTURE(u_pickDepthAndOrder, rotc);\r\n float order = floor(pdo.x * 16.0 + 0.5);\r\n if (order >= kRenderOrder_PlanarBit)\r\n order = order - kRenderOrder_PlanarBit;\r\n if (order >= kRenderOrder_Linear && order <= kRenderOrder_Silhouette)\r\n return vec4(1.0);\r\n\r\n`;\r\n\r\n/** @internal */\r\nexport function createBlurProgram(context: WebGLContext, type: BlurType): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n addWindowToTexCoords(frag);\r\n\r\n if (BlurType.TestOrder === type) {\r\n addRenderOrderConstants(frag);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, testRenderOrder + computeBlur);\r\n } else {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlur);\r\n }\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n addViewport(frag);\r\n\r\n frag.addUniform(\"u_textureToBlur\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_textureToBlur\", (uniform, params) => {\r\n const geom = params.geometry as BlurGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.textureToBlur, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blurDir\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_blurDir\", (uniform, params) => {\r\n const geom = params.geometry as BlurGeometry;\r\n uniform.setUniform2fv(new Float32Array([geom.blurDir.x, geom.blurDir.y]));\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blurSettings\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_blurSettings\", (uniform, params) => {\r\n const hbaoSettings = new Float32Array([\r\n // ###TODO: If we want to apply this blur shader to situations other than AO, we should move these settings away from the ambient occlusion params.\r\n params.target.ambientOcclusionSettings.blurDelta,\r\n params.target.ambientOcclusionSettings.blurSigma,\r\n params.target.ambientOcclusionSettings.blurTexelStepSize]);\r\n uniform.setUniform3fv(hbaoSettings);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n if (BlurType.TestOrder === type) {\r\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\r\n const geom = params.geometry as BlurGeometry;\r\n if (params.target.compositor.needHiddenEdges)\r\n Texture2DHandle.bindSampler(uniform, geom.depthAndOrderHidden, TextureUnit.One);\r\n else\r\n Texture2DHandle.bindSampler(uniform, geom.depthAndOrder, TextureUnit.One);\r\n });\r\n });\r\n builder.vert.headerComment = \"//!V! BlurTestOrder\";\r\n builder.frag.headerComment = \"//!F! BlurTestOrder\";\r\n } else {\r\n builder.vert.headerComment = \"//!V! Blur\";\r\n builder.frag.headerComment = \"//!F! Blur\";\r\n }\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"Blur.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Blur.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 { BlurGeometry, BlurType } 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 { addRenderOrderConstants } from \"./FeatureSymbology\";\r\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\r\nimport { addViewport } from \"./Viewport\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\n// This shader applies a Gaussian blur in one dimension.\r\nconst computeBlur = `\r\n float delta = u_blurSettings.x;\r\n float sigma = u_blurSettings.y;\r\n float texelStepSize = u_blurSettings.z;\r\n\r\n vec2 tc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\n vec2 step = texelStepSize / u_viewport;\r\n\r\n vec3 gaussian;\r\n const float twoPi = 6.283185307179586;\r\n gaussian.x = 1.0 / (sqrt(twoPi) * sigma);\r\n gaussian.y = exp((-0.5 * delta * delta) / (sigma * sigma));\r\n gaussian.z = gaussian.y * gaussian.y;\r\n\r\n vec4 origColor = TEXTURE(u_textureToBlur, tc);\r\n vec4 result = origColor * gaussian.x;\r\n for (int i = 1; i < 8; i++) {\r\n gaussian.xy *= gaussian.yz;\r\n\r\n vec2 offset = float(i) * u_blurDir * step;\r\n vec2 tcMinusOffset = tc - offset;\r\n vec2 tcPlusOffset = tc + offset;\r\n\r\n result += TEXTURE(u_textureToBlur, tcMinusOffset) * gaussian.x;\r\n result += TEXTURE(u_textureToBlur, tcPlusOffset) * gaussian.x;\r\n }\r\n\r\n return result;\r\n`;\r\n\r\n// This optionally skips adding in the blur texture result if the current pixel is a linear/edge/silhouette.\r\nconst testRenderOrder = `\r\n vec2 rotc = windowCoordsToTexCoords(gl_FragCoord.xy);\r\n vec4 pdo = TEXTURE(u_pickDepthAndOrder, rotc);\r\n float order = floor(pdo.x * 16.0 + 0.5);\r\n if (order >= kRenderOrder_PlanarBit)\r\n order = order - kRenderOrder_PlanarBit;\r\n if (order >= kRenderOrder_Linear && order <= kRenderOrder_Silhouette)\r\n return vec4(1.0);\r\n\r\n`;\r\n\r\n/** @internal */\r\nexport function createBlurProgram(context: WebGL2RenderingContext, type: BlurType): ShaderProgram {\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n addWindowToTexCoords(frag);\r\n\r\n if (BlurType.TestOrder === type) {\r\n addRenderOrderConstants(frag);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, testRenderOrder + computeBlur);\r\n } else {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlur);\r\n }\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n addViewport(frag);\r\n\r\n frag.addUniform(\"u_textureToBlur\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_textureToBlur\", (uniform, params) => {\r\n const geom = params.geometry as BlurGeometry;\r\n Texture2DHandle.bindSampler(uniform, geom.textureToBlur, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blurDir\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_blurDir\", (uniform, params) => {\r\n const geom = params.geometry as BlurGeometry;\r\n uniform.setUniform2fv(new Float32Array([geom.blurDir.x, geom.blurDir.y]));\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_blurSettings\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_blurSettings\", (uniform, params) => {\r\n const hbaoSettings = new Float32Array([\r\n // ###TODO: If we want to apply this blur shader to situations other than AO, we should move these settings away from the ambient occlusion params.\r\n params.target.ambientOcclusionSettings.blurDelta,\r\n params.target.ambientOcclusionSettings.blurSigma,\r\n params.target.ambientOcclusionSettings.blurTexelStepSize]);\r\n uniform.setUniform3fv(hbaoSettings);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n if (BlurType.TestOrder === type) {\r\n frag.addUniform(\"u_pickDepthAndOrder\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_pickDepthAndOrder\", (uniform, params) => {\r\n const geom = params.geometry as BlurGeometry;\r\n if (params.target.compositor.needHiddenEdges)\r\n Texture2DHandle.bindSampler(uniform, geom.depthAndOrderHidden, TextureUnit.One);\r\n else\r\n Texture2DHandle.bindSampler(uniform, geom.depthAndOrder, TextureUnit.One);\r\n });\r\n });\r\n builder.vert.headerComment = \"//!V! BlurTestOrder\";\r\n builder.frag.headerComment = \"//!F! BlurTestOrder\";\r\n } else {\r\n builder.vert.headerComment = \"//!V! Blur\";\r\n builder.frag.headerComment = \"//!F! Blur\";\r\n }\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 createClearPickAndColorProgram(context: WebGLContext): ShaderProgram;
6
+ export declare function createClearPickAndColorProgram(context: WebGL2RenderingContext): ShaderProgram;
8
7
  //# sourceMappingURL=ClearPickAndColor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClearPickAndColor.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ClearPickAndColor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYjD,gBAAgB;AAChB,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAuBnF"}
1
+ {"version":3,"file":"ClearPickAndColor.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ClearPickAndColor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWjD,gBAAgB;AAChB,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAkB7F"}
@@ -5,7 +5,6 @@
5
5
  /** @packageDocumentation
6
6
  * @module WebGL
7
7
  */
8
- import { System } from "../System";
9
8
  import { createViewportQuadBuilder } from "./ViewportQuad";
10
9
  const computeBaseColor = "return u_bgColor;";
11
10
  const assignFragData = `
@@ -23,14 +22,8 @@ export function createClearPickAndColorProgram(context) {
23
22
  });
24
23
  });
25
24
  frag.set(1 /* ComputeBaseColor */, computeBaseColor);
26
- if (!System.instance.capabilities.supportsMRTPickShaders) {
27
- // NB: This shader is never used - we gl.clear() directly
28
- frag.set(16 /* AssignFragData */, "FragColor = baseColor;");
29
- }
30
- else {
31
- frag.addDrawBuffersExtension(3);
32
- frag.set(16 /* AssignFragData */, assignFragData);
33
- }
25
+ frag.addDrawBuffersExtension(3);
26
+ frag.set(16 /* AssignFragData */, assignFragData);
34
27
  builder.vert.headerComment = "//!V! ClearPickAndColor";
35
28
  builder.frag.headerComment = "//!F! ClearPickAndColor";
36
29
  return builder.buildProgram(context);
@@ -1 +1 @@
1
- {"version":3,"file":"ClearPickAndColor.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ClearPickAndColor.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAE7C,MAAM,cAAc,GAAG;;;;CAItB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,8BAA8B,CAAC,OAAqB;IAClE,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,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,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;IAErE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,sBAAsB,EAAE;QACxD,yDAAyD;QACzD,IAAI,CAAC,GAAG,0BAAyC,wBAAwB,CAAC,CAAC;KAC5E;SAAM;QACL,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,0BAAyC,cAAc,CAAC,CAAC;KAClE;IAED,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;IAEvD,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 { FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computeBaseColor = \"return u_bgColor;\";\r\n\r\nconst assignFragData = `\r\n FragColor0 = baseColor;\r\n FragColor1 = vec4(0.0);\r\n FragColor2 = vec4(0.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function createClearPickAndColorProgram(context: WebGLContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(false);\r\n const frag = builder.frag;\r\n frag.addUniform(\"u_bgColor\", VariableType.Vec4, (prog) => {\r\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\r\n params.target.uniforms.style.bindBackgroundRgba(uniform);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n if (!System.instance.capabilities.supportsMRTPickShaders) {\r\n // NB: This shader is never used - we gl.clear() directly\r\n frag.set(FragmentShaderComponent.AssignFragData, \"FragColor = baseColor;\");\r\n } else {\r\n frag.addDrawBuffersExtension(3);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n }\r\n\r\n builder.vert.headerComment = \"//!V! ClearPickAndColor\";\r\n builder.frag.headerComment = \"//!F! ClearPickAndColor\";\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"ClearPickAndColor.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ClearPickAndColor.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAE7C,MAAM,cAAc,GAAG;;;;CAItB,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,8BAA8B,CAAC,OAA+B;IAC5E,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,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,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,2BAA2C,gBAAgB,CAAC,CAAC;IAErE,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,0BAAyC,cAAc,CAAC,CAAC;IAEjE,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;IAEvD,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 { FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computeBaseColor = \"return u_bgColor;\";\r\n\r\nconst assignFragData = `\r\n FragColor0 = baseColor;\r\n FragColor1 = vec4(0.0);\r\n FragColor2 = vec4(0.0);\r\n`;\r\n\r\n/** @internal */\r\nexport function createClearPickAndColorProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = createViewportQuadBuilder(false);\r\n const frag = builder.frag;\r\n frag.addUniform(\"u_bgColor\", VariableType.Vec4, (prog) => {\r\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\r\n params.target.uniforms.style.bindBackgroundRgba(uniform);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n frag.addDrawBuffersExtension(3);\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n\r\n builder.vert.headerComment = \"//!V! ClearPickAndColor\";\r\n builder.frag.headerComment = \"//!F! ClearPickAndColor\";\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 createClearTranslucentProgram(context: WebGLContext): ShaderProgram;
6
+ export declare function createClearTranslucentProgram(context: WebGL2RenderingContext): ShaderProgram;
8
7
  //# sourceMappingURL=ClearTranslucent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClearTranslucent.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ClearTranslucent.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYjD,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAgBlF"}
1
+ {"version":3,"file":"ClearTranslucent.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ClearTranslucent.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAW5F"}