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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/lib/cjs/IModelApp.d.ts +1 -0
  2. package/lib/cjs/IModelApp.d.ts.map +1 -1
  3. package/lib/cjs/IModelApp.js +2 -4
  4. package/lib/cjs/IModelApp.js.map +1 -1
  5. package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
  6. package/lib/cjs/SubCategoriesCache.js +0 -1
  7. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  8. package/lib/cjs/render/RealityMeshParams.d.ts +4 -1
  9. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  10. package/lib/cjs/render/RealityMeshParams.js +14 -4
  11. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  12. package/lib/cjs/render/RenderSystem.d.ts +5 -16
  13. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  14. package/lib/cjs/render/RenderSystem.js +0 -6
  15. package/lib/cjs/render/RenderSystem.js.map +1 -1
  16. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  17. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  18. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  19. package/lib/cjs/render/webgl/AttributeBuffers.d.ts +9 -79
  20. package/lib/cjs/render/webgl/AttributeBuffers.d.ts.map +1 -1
  21. package/lib/cjs/render/webgl/AttributeBuffers.js +19 -152
  22. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  23. package/lib/cjs/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  24. package/lib/cjs/render/webgl/BackgroundMapDrape.js +0 -3
  25. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  26. package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
  27. package/lib/cjs/render/webgl/BranchUniforms.js +0 -8
  28. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  29. package/lib/cjs/render/webgl/ClipStack.d.ts +0 -1
  30. package/lib/cjs/render/webgl/ClipStack.d.ts.map +1 -1
  31. package/lib/cjs/render/webgl/ClipStack.js +2 -6
  32. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  33. package/lib/cjs/render/webgl/ClipVolume.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/ClipVolume.js +1 -5
  35. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  36. package/lib/cjs/render/webgl/ClippingProgram.d.ts +3 -2
  37. package/lib/cjs/render/webgl/ClippingProgram.d.ts.map +1 -1
  38. package/lib/cjs/render/webgl/ClippingProgram.js +10 -37
  39. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  40. package/lib/cjs/render/webgl/DrawCommand.d.ts +2 -2
  41. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/DrawCommand.js +1 -1
  43. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  44. package/lib/cjs/render/webgl/FeatureOverrides.js +1 -1
  45. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  46. package/lib/cjs/render/webgl/FloatRGBA.d.ts.map +1 -1
  47. package/lib/cjs/render/webgl/FloatRGBA.js +0 -4
  48. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  49. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  50. package/lib/cjs/render/webgl/GLTimer.d.ts.map +1 -1
  51. package/lib/cjs/render/webgl/GLTimer.js +2 -35
  52. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  53. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  54. package/lib/cjs/render/webgl/PlanarClassifier.js +13 -71
  55. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  56. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  57. package/lib/cjs/render/webgl/PointCloud.js +1 -3
  58. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  59. package/lib/cjs/render/webgl/RenderBuffer.d.ts +1 -1
  60. package/lib/cjs/render/webgl/RenderBuffer.d.ts.map +1 -1
  61. package/lib/cjs/render/webgl/RenderBuffer.js +2 -3
  62. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  63. package/lib/cjs/render/webgl/RenderFlags.d.ts +1 -2
  64. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  65. package/lib/cjs/render/webgl/RenderFlags.js +4 -6
  66. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  67. package/lib/cjs/render/webgl/SceneCompositor.d.ts +0 -2
  68. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  69. package/lib/cjs/render/webgl/SceneCompositor.js +754 -1135
  70. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  71. package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
  72. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  73. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +1 -2
  74. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  75. package/lib/cjs/render/webgl/ShaderBuilder.js +13 -48
  76. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  77. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -2
  78. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  79. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  80. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  81. package/lib/cjs/render/webgl/SolarShadowMap.js +6 -18
  82. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  83. package/lib/cjs/render/webgl/System.d.ts +11 -10
  84. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  85. package/lib/cjs/render/webgl/System.js +40 -122
  86. package/lib/cjs/render/webgl/System.js.map +1 -1
  87. package/lib/cjs/render/webgl/Technique.d.ts +4 -5
  88. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  89. package/lib/cjs/render/webgl/Technique.js +4 -28
  90. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  91. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  92. package/lib/cjs/render/webgl/Texture.js +14 -18
  93. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  94. package/lib/cjs/render/webgl/ThematicSensors.d.ts +4 -3
  95. package/lib/cjs/render/webgl/ThematicSensors.d.ts.map +1 -1
  96. package/lib/cjs/render/webgl/ThematicSensors.js +9 -50
  97. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  98. package/lib/cjs/render/webgl/ThematicUniforms.js +1 -1
  99. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  100. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  101. package/lib/cjs/render/webgl/UniformHandle.js +1 -4
  102. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  103. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  104. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  105. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
  106. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  107. package/lib/cjs/render/webgl/glsl/Animation.d.ts +1 -2
  108. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  109. package/lib/cjs/render/webgl/glsl/Animation.js +23 -26
  110. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  111. package/lib/cjs/render/webgl/glsl/Blur.d.ts +1 -2
  112. package/lib/cjs/render/webgl/glsl/Blur.d.ts.map +1 -1
  113. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  114. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  115. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  116. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -9
  117. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  118. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  119. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  120. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -10
  121. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  122. package/lib/cjs/render/webgl/glsl/Clipping.d.ts +1 -1
  123. package/lib/cjs/render/webgl/glsl/Clipping.d.ts.map +1 -1
  124. package/lib/cjs/render/webgl/glsl/Clipping.js +5 -36
  125. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  126. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  127. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  128. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  129. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts +1 -2
  130. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  131. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  132. package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
  133. package/lib/cjs/render/webgl/glsl/Common.js +9 -55
  134. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  135. package/lib/cjs/render/webgl/glsl/Composite.d.ts +1 -2
  136. package/lib/cjs/render/webgl/glsl/Composite.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  138. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts +1 -2
  139. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  140. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  141. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  142. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +12 -19
  144. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  145. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts +4 -7
  146. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  147. package/lib/cjs/render/webgl/glsl/CopyStencil.js +2 -39
  148. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  149. package/lib/cjs/render/webgl/glsl/EDL.d.ts +4 -5
  150. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -1
  151. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  152. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  153. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  154. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  155. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  156. package/lib/cjs/render/webgl/glsl/Edge.js +2 -2
  157. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  158. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  159. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +3 -24
  160. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  161. package/lib/cjs/render/webgl/glsl/Fragment.d.ts +0 -7
  162. package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
  163. package/lib/cjs/render/webgl/glsl/Fragment.js +5 -40
  164. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  165. package/lib/cjs/render/webgl/glsl/Instancing.d.ts.map +1 -1
  166. package/lib/cjs/render/webgl/glsl/Instancing.js +1 -5
  167. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  168. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  169. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  170. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  171. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  172. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  173. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -12
  174. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  175. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  176. package/lib/cjs/render/webgl/glsl/RealityMesh.js +3 -8
  177. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  178. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts +1 -2
  179. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  180. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  181. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts +1 -2
  182. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  183. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  184. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -1
  185. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  186. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  187. package/lib/cjs/render/webgl/glsl/Surface.js +33 -57
  188. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  189. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  190. package/lib/cjs/render/webgl/glsl/Thematic.js +3 -36
  191. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  192. package/lib/cjs/render/webgl/glsl/Translucency.d.ts.map +1 -1
  193. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -12
  194. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  195. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +1 -2
  196. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  197. package/lib/cjs/render/webgl/glsl/Vertex.js +15 -78
  198. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  199. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  200. package/lib/cjs/render/webgl/glsl/Wiremesh.js +2 -5
  201. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  202. package/lib/cjs/tile/PrimaryTileTree.d.ts +0 -3
  203. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  204. package/lib/cjs/tile/PrimaryTileTree.js +6 -28
  205. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  206. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  207. package/lib/cjs/tile/TileAdmin.js +2 -2
  208. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  209. package/lib/esm/IModelApp.d.ts +1 -0
  210. package/lib/esm/IModelApp.d.ts.map +1 -1
  211. package/lib/esm/IModelApp.js +2 -4
  212. package/lib/esm/IModelApp.js.map +1 -1
  213. package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
  214. package/lib/esm/SubCategoriesCache.js +0 -1
  215. package/lib/esm/SubCategoriesCache.js.map +1 -1
  216. package/lib/esm/render/RealityMeshParams.d.ts +4 -1
  217. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  218. package/lib/esm/render/RealityMeshParams.js +14 -4
  219. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  220. package/lib/esm/render/RenderSystem.d.ts +5 -16
  221. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  222. package/lib/esm/render/RenderSystem.js +0 -6
  223. package/lib/esm/render/RenderSystem.js.map +1 -1
  224. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  225. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  226. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  227. package/lib/esm/render/webgl/AttributeBuffers.d.ts +9 -79
  228. package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
  229. package/lib/esm/render/webgl/AttributeBuffers.js +16 -144
  230. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  231. package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  232. package/lib/esm/render/webgl/BackgroundMapDrape.js +0 -3
  233. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  234. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  235. package/lib/esm/render/webgl/BranchUniforms.js +0 -8
  236. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  237. package/lib/esm/render/webgl/ClipStack.d.ts +0 -1
  238. package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
  239. package/lib/esm/render/webgl/ClipStack.js +2 -6
  240. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  241. package/lib/esm/render/webgl/ClipVolume.d.ts.map +1 -1
  242. package/lib/esm/render/webgl/ClipVolume.js +1 -5
  243. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  244. package/lib/esm/render/webgl/ClippingProgram.d.ts +3 -2
  245. package/lib/esm/render/webgl/ClippingProgram.d.ts.map +1 -1
  246. package/lib/esm/render/webgl/ClippingProgram.js +10 -37
  247. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  248. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
  249. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  250. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  251. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  252. package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
  253. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  254. package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
  255. package/lib/esm/render/webgl/FloatRGBA.js +0 -4
  256. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  257. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  258. package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
  259. package/lib/esm/render/webgl/GLTimer.js +2 -35
  260. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  261. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  262. package/lib/esm/render/webgl/PlanarClassifier.js +13 -71
  263. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  264. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  265. package/lib/esm/render/webgl/PointCloud.js +1 -3
  266. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  267. package/lib/esm/render/webgl/RenderBuffer.d.ts +1 -1
  268. package/lib/esm/render/webgl/RenderBuffer.d.ts.map +1 -1
  269. package/lib/esm/render/webgl/RenderBuffer.js +2 -3
  270. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  271. package/lib/esm/render/webgl/RenderFlags.d.ts +1 -2
  272. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  273. package/lib/esm/render/webgl/RenderFlags.js +4 -6
  274. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  275. package/lib/esm/render/webgl/SceneCompositor.d.ts +0 -2
  276. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  277. package/lib/esm/render/webgl/SceneCompositor.js +756 -1137
  278. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  279. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  280. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  281. package/lib/esm/render/webgl/ShaderBuilder.d.ts +1 -2
  282. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  283. package/lib/esm/render/webgl/ShaderBuilder.js +13 -48
  284. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  285. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -2
  286. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  287. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  288. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  289. package/lib/esm/render/webgl/SolarShadowMap.js +6 -18
  290. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  291. package/lib/esm/render/webgl/System.d.ts +11 -10
  292. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  293. package/lib/esm/render/webgl/System.js +42 -124
  294. package/lib/esm/render/webgl/System.js.map +1 -1
  295. package/lib/esm/render/webgl/Technique.d.ts +4 -5
  296. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  297. package/lib/esm/render/webgl/Technique.js +5 -29
  298. package/lib/esm/render/webgl/Technique.js.map +1 -1
  299. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  300. package/lib/esm/render/webgl/Texture.js +14 -18
  301. package/lib/esm/render/webgl/Texture.js.map +1 -1
  302. package/lib/esm/render/webgl/ThematicSensors.d.ts +4 -3
  303. package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
  304. package/lib/esm/render/webgl/ThematicSensors.js +9 -50
  305. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  306. package/lib/esm/render/webgl/ThematicUniforms.js +1 -1
  307. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  308. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  309. package/lib/esm/render/webgl/UniformHandle.js +1 -4
  310. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  311. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  312. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  313. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  314. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  315. package/lib/esm/render/webgl/glsl/Animation.d.ts +1 -2
  316. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  317. package/lib/esm/render/webgl/glsl/Animation.js +23 -26
  318. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  319. package/lib/esm/render/webgl/glsl/Blur.d.ts +1 -2
  320. package/lib/esm/render/webgl/glsl/Blur.d.ts.map +1 -1
  321. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  322. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  323. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  324. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -9
  325. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  326. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  327. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  328. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -10
  329. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  330. package/lib/esm/render/webgl/glsl/Clipping.d.ts +1 -1
  331. package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
  332. package/lib/esm/render/webgl/glsl/Clipping.js +5 -36
  333. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  334. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  335. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  336. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  337. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts +1 -2
  338. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  339. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  340. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  341. package/lib/esm/render/webgl/glsl/Common.js +9 -55
  342. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  343. package/lib/esm/render/webgl/glsl/Composite.d.ts +1 -2
  344. package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
  345. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  346. package/lib/esm/render/webgl/glsl/CopyColor.d.ts +1 -2
  347. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  348. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  349. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  350. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  351. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +12 -19
  352. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  353. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts +4 -7
  354. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  355. package/lib/esm/render/webgl/glsl/CopyStencil.js +1 -37
  356. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  357. package/lib/esm/render/webgl/glsl/EDL.d.ts +4 -5
  358. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -1
  359. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  360. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  361. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  362. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  363. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  364. package/lib/esm/render/webgl/glsl/Edge.js +2 -2
  365. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  366. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  367. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +3 -24
  368. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  369. package/lib/esm/render/webgl/glsl/Fragment.d.ts +0 -7
  370. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  371. package/lib/esm/render/webgl/glsl/Fragment.js +4 -38
  372. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  373. package/lib/esm/render/webgl/glsl/Instancing.d.ts.map +1 -1
  374. package/lib/esm/render/webgl/glsl/Instancing.js +1 -5
  375. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  376. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  378. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  379. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  380. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  381. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -12
  382. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  383. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  384. package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -8
  385. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  386. package/lib/esm/render/webgl/glsl/SkyBox.d.ts +1 -2
  387. package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  388. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  389. package/lib/esm/render/webgl/glsl/SkySphere.d.ts +1 -2
  390. package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  391. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  392. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
  393. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  394. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  395. package/lib/esm/render/webgl/glsl/Surface.js +33 -57
  396. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  397. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  398. package/lib/esm/render/webgl/glsl/Thematic.js +3 -36
  399. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  400. package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
  401. package/lib/esm/render/webgl/glsl/Translucency.js +3 -13
  402. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  403. package/lib/esm/render/webgl/glsl/Vertex.d.ts +1 -2
  404. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  405. package/lib/esm/render/webgl/glsl/Vertex.js +16 -79
  406. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  407. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  408. package/lib/esm/render/webgl/glsl/Wiremesh.js +2 -5
  409. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  410. package/lib/esm/tile/PrimaryTileTree.d.ts +0 -3
  411. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  412. package/lib/esm/tile/PrimaryTileTree.js +8 -30
  413. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  414. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  415. package/lib/esm/tile/TileAdmin.js +2 -2
  416. package/lib/esm/tile/TileAdmin.js.map +1 -1
  417. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarGrid.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PlanarGrid.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 { PlanarGridTransparency } from \"../../RenderSystem\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addLogDepth } from \"./LogarithmicDepthBuffer\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\n\r\nconst computeBaseColor = `\r\n // u_gridProps - x = gridsPerRef, y - planeAlpha, z = line alpha, w = ref alpha.\r\n vec4 color = vec4(u_gridColor, u_gridProps.y);\r\n float refsPerGrid = u_gridProps.x;\r\n if (0.0 == refsPerGrid || !drawGridLine(color, 1.0 / refsPerGrid, u_gridProps.w - color.a))\r\n drawGridLine(color, 1.0, u_gridProps.z - color.a);\r\n\r\n return color;\r\n`;\r\n\r\nconst drawGridLine = `\r\n bool drawGridLine(inout vec4 color, float mult, float alphaScale) {\r\n vec2 scaledTexCoord = v_texCoord * mult;\r\n vec2 deriv = mult * screenSpaceDeriv(v_texCoord);\r\n if (deriv.x != 0.0 && deriv.y != 0.0) {\r\n vec2 grid = abs(fract(mult * v_texCoord - 0.5) - 0.5) / deriv;\r\n float line = min(grid.x, grid.y);\r\n if (line < 1.0) {\r\n color.a += alphaScale * (1.0 - min(line, 1.0)) / max(1.0, length(deriv));\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n`;\r\n\r\nconst fwidth2dWhenAvailable = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return fwidth(screenXY); }\\n`;\r\nconst fwidth2dWhenNotAvailable = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return vec2(0.25, 0.25); }\\n`;\r\n\r\nconst defaultTransparency = new PlanarGridTransparency();\r\n/** @internal */\r\nexport default function createPlanarGridProgram(context: WebGLContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PlanarGrid, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n addShaderFlags(builder);\r\n\r\n addTranslucency(builder);\r\n if (System.instance.capabilities.isWebGL2) {\r\n frag.addFunction(fwidth2dWhenAvailable);\r\n } else if (System.instance.capabilities.supportsStandardDerivatives) {\r\n frag.addExtension(\"GL_OES_standard_derivatives\");\r\n frag.addFunction(fwidth2dWhenAvailable);\r\n } else {\r\n frag.addFunction(fwidth2dWhenNotAvailable);\r\n }\r\n\r\n if (System.instance.supportsLogZBuffer)\r\n addLogDepth(builder);\r\n\r\n frag.addFunction(drawGridLine);\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n vert.headerComment = `//!V! PlanarGrid`;\r\n frag.headerComment = `//!F! PlanarGrid`;\r\n\r\n vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n uniform.setUniform4fv(planarGrid.uvParams.params);\r\n });\r\n });\r\n frag.addUniform(\"u_gridColor\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_gridColor\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n const color = planarGrid.props.color.colors;\r\n uniform.setUniform3fv([color.r / 255, color.g / 255, color.b / 255]);\r\n });\r\n });\r\n frag.addUniform(\"u_gridProps\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_gridProps\", (uniform, params) => {\r\n const planarGridProps = params.geometry.asPlanarGrid!.props;\r\n const transparency = planarGridProps.transparency ? planarGridProps.transparency : defaultTransparency;\r\n uniform.setUniform4fv([planarGridProps.gridsPerRef, 1.0 - transparency.planeTransparency, 1.0 - transparency.lineTransparency, 1.0 - transparency.refTransparency]);\r\n });\r\n });\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"PlanarGrid.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PlanarGrid.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 { PlanarGridTransparency } from \"../../RenderSystem\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addLogDepth } from \"./LogarithmicDepthBuffer\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\n\r\nconst computeBaseColor = `\r\n // u_gridProps - x = gridsPerRef, y - planeAlpha, z = line alpha, w = ref alpha.\r\n vec4 color = vec4(u_gridColor, u_gridProps.y);\r\n float refsPerGrid = u_gridProps.x;\r\n if (0.0 == refsPerGrid || !drawGridLine(color, 1.0 / refsPerGrid, u_gridProps.w - color.a))\r\n drawGridLine(color, 1.0, u_gridProps.z - color.a);\r\n\r\n return color;\r\n`;\r\n\r\nconst drawGridLine = `\r\n bool drawGridLine(inout vec4 color, float mult, float alphaScale) {\r\n vec2 scaledTexCoord = v_texCoord * mult;\r\n vec2 deriv = mult * screenSpaceDeriv(v_texCoord);\r\n if (deriv.x != 0.0 && deriv.y != 0.0) {\r\n vec2 grid = abs(fract(mult * v_texCoord - 0.5) - 0.5) / deriv;\r\n float line = min(grid.x, grid.y);\r\n if (line < 1.0) {\r\n color.a += alphaScale * (1.0 - min(line, 1.0)) / max(1.0, length(deriv));\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n`;\r\n\r\nconst fwidth2d = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return fwidth(screenXY); }\\n`;\r\n\r\nconst defaultTransparency = new PlanarGridTransparency();\r\n/** @internal */\r\nexport default function createPlanarGridProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PlanarGrid, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n addShaderFlags(builder);\r\n\r\n addTranslucency(builder);\r\n frag.addFunction(fwidth2d);\r\n\r\n if (System.instance.supportsLogZBuffer)\r\n addLogDepth(builder);\r\n\r\n frag.addFunction(drawGridLine);\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n vert.headerComment = `//!V! PlanarGrid`;\r\n frag.headerComment = `//!F! PlanarGrid`;\r\n\r\n vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n uniform.setUniform4fv(planarGrid.uvParams.params);\r\n });\r\n });\r\n frag.addUniform(\"u_gridColor\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_gridColor\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n const color = planarGrid.props.color.colors;\r\n uniform.setUniform3fv([color.r / 255, color.g / 255, color.b / 255]);\r\n });\r\n });\r\n frag.addUniform(\"u_gridProps\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_gridProps\", (uniform, params) => {\r\n const planarGridProps = params.geometry.asPlanarGrid!.props;\r\n const transparency = planarGridProps.transparency ? planarGridProps.transparency : defaultTransparency;\r\n uniform.setUniform4fv([planarGridProps.gridsPerRef, 1.0 - transparency.planeTransparency, 1.0 - transparency.lineTransparency, 1.0 - transparency.refTransparency]);\r\n });\r\n });\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAA2B,cAAc,EAAE,aAAa,EAAuC,MAAM,kBAAkB,CAAC;AAE/H,OAAO,EAAsD,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsBvG,eAAO,MAAM,cAAc,uEAE1B,CAAC;AAsMF,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,QAMtD;AAYD,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA2E9E"}
1
+ {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAA2B,cAAc,EAAE,aAAa,EAAuC,MAAM,kBAAkB,CAAC;AAE/H,OAAO,EAAyC,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsB1F,eAAO,MAAM,cAAc,uEAE1B,CAAC;AAsMF,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,QAMtD;AAYD,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAsE9E"}
@@ -206,7 +206,7 @@ const mixFeatureColor = `
206
206
  col.a = mix(col.a, v_color.a, step(0.0, v_color.a));
207
207
  `;
208
208
  function addThematicToRealityMesh(builder, gradientTextureUnit) {
209
- (0, Vertex_1.addNormalMatrix)(builder.vert, 0 /* No */);
209
+ (0, Vertex_1.addNormalMatrix)(builder.vert);
210
210
  builder.vert.addFunction(Surface_1.octDecodeNormal);
211
211
  builder.vert.addGlobal("g_hillshadeIndex", 2 /* Float */);
212
212
  builder.addFunctionComputedVarying("v_n", 4 /* Vec3 */, "computeLightingNormal", computeNormal);
@@ -268,13 +268,8 @@ function createRealityMeshBuilder(flags) {
268
268
  frag.addGlobal("featureIncrement", 2 /* Float */, "0.0");
269
269
  frag.addGlobal("classifierId", 5 /* Vec4 */);
270
270
  frag.set(17 /* OverrideFeatureId */, overrideFeatureId);
271
- let textureCount = System_1.System.instance.maxRealityImageryLayers;
272
- let gradientTextureUnit = RenderFlags_1.TextureUnit.RealityMeshThematicGradient;
273
- const caps = System_1.System.instance.capabilities;
274
- if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && 1 /* Yes */ === flags.isThematic) {
275
- textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)
276
- gradientTextureUnit = -1; // is dependent on drawing mode so will set later
277
- }
271
+ const textureCount = System_1.System.instance.maxRealityImageryLayers;
272
+ const gradientTextureUnit = RenderFlags_1.TextureUnit.RealityMeshThematicGradient;
278
273
  const feat = flags.featureMode;
279
274
  let opts = 2 /* Overrides */ === feat ? 28 /* Surface */ : 0 /* None */;
280
275
  let applyFragmentFeatureColor = "";
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nexport const finalizeNormal = `\r\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n uv.y = 1.0 - uv.y;\r\n }\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // Texture color is premultiplied by alpha only if projected (from classification).\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\nreturn false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addColorOverrideMix(frag: ShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nexport const finalizeNormal = `\r\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n uv.y = 1.0 - uv.y;\r\n }\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // Texture color is premultiplied by alpha only if projected (from classification).\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\nreturn false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addColorOverrideMix(frag: ShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n const textureCount = System.instance.maxRealityImageryLayers;\r\n const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
@@ -1,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 createSkyBoxProgram(context: WebGLContext): ShaderProgram;
6
+ export declare function createSkyBoxProgram(context: WebGL2RenderingContext): ShaderProgram;
8
7
  //# sourceMappingURL=SkyBox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SkyBox.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUjD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAmCxE"}
1
+ {"version":3,"file":"SkyBox.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUjD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAmClF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkyBoxQuadsGeometry } from \"../CachedGeometry\";\r\nimport { Matrix3 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture } from \"../Texture\";\r\n\r\nconst computeBaseColor = `return vec4(0, 0, 0, 0);`;\r\nconst assignFragData = `FragColor = TEXTURE_CUBE(s_cube, v_texDir);`;\r\nconst computePosition = `vec3 pos = u_rot * vec3(rawPos.x, rawPos.z, -rawPos.y); return pos.xyzz;`; // rawPos swizzling accounts for iModel rotation.\r\nconst computeTexDir = `v_texDir = rawPosition.xyz;`;\r\n\r\nconst scratchRotMatrix = new Matrix3();\r\n\r\n/** @internal */\r\nexport function createSkyBoxProgram(context: WebGLContext): ShaderProgram {\r\n const prog = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n prog.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n prog.frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n prog.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.vert.addUniform(\"u_rot\", VariableType.Mat3, (prg) => {\r\n prg.addGraphicUniform(\"u_rot\", (uniform, params) => {\r\n const rot = params.target.uniforms.frustum.viewMatrix.matrix;\r\n const mat3 = scratchRotMatrix;\r\n mat3.m00 = -rot.at(0, 0);\r\n mat3.m01 = -rot.at(0, 1);\r\n mat3.m02 = -rot.at(0, 2);\r\n mat3.m10 = -rot.at(1, 0);\r\n mat3.m11 = -rot.at(1, 1);\r\n mat3.m12 = -rot.at(1, 2);\r\n mat3.m20 = rot.at(2, 0);\r\n mat3.m21 = rot.at(2, 1);\r\n mat3.m22 = rot.at(2, 2);\r\n uniform.setMatrix3(mat3);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"s_cube\", VariableType.SamplerCube, (prg) => {\r\n prg.addGraphicUniform(\"s_cube\", (uniform, params) => {\r\n const geom = params.geometry as SkyBoxQuadsGeometry;\r\n (geom.cube as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n prog.addInlineComputedVarying(\"v_texDir\", VariableType.Vec3, computeTexDir);\r\n\r\n prog.vert.headerComment = \"//!V! SkyBox\";\r\n prog.frag.headerComment = \"//!F! SkyBox\";\r\n\r\n return prog.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkyBoxQuadsGeometry } from \"../CachedGeometry\";\r\nimport { Matrix3 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture } from \"../Texture\";\r\n\r\nconst computeBaseColor = `return vec4(0, 0, 0, 0);`;\r\nconst assignFragData = `FragColor = TEXTURE_CUBE(s_cube, v_texDir);`;\r\nconst computePosition = `vec3 pos = u_rot * vec3(rawPos.x, rawPos.z, -rawPos.y); return pos.xyzz;`; // rawPos swizzling accounts for iModel rotation.\r\nconst computeTexDir = `v_texDir = rawPosition.xyz;`;\r\n\r\nconst scratchRotMatrix = new Matrix3();\r\n\r\n/** @internal */\r\nexport function createSkyBoxProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const prog = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n prog.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n prog.frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n prog.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.vert.addUniform(\"u_rot\", VariableType.Mat3, (prg) => {\r\n prg.addGraphicUniform(\"u_rot\", (uniform, params) => {\r\n const rot = params.target.uniforms.frustum.viewMatrix.matrix;\r\n const mat3 = scratchRotMatrix;\r\n mat3.m00 = -rot.at(0, 0);\r\n mat3.m01 = -rot.at(0, 1);\r\n mat3.m02 = -rot.at(0, 2);\r\n mat3.m10 = -rot.at(1, 0);\r\n mat3.m11 = -rot.at(1, 1);\r\n mat3.m12 = -rot.at(1, 2);\r\n mat3.m20 = rot.at(2, 0);\r\n mat3.m21 = rot.at(2, 1);\r\n mat3.m22 = rot.at(2, 2);\r\n uniform.setMatrix3(mat3);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"s_cube\", VariableType.SamplerCube, (prg) => {\r\n prg.addGraphicUniform(\"s_cube\", (uniform, params) => {\r\n const geom = params.geometry as SkyBoxQuadsGeometry;\r\n (geom.cube as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n prog.addInlineComputedVarying(\"v_texDir\", VariableType.Vec3, computeTexDir);\r\n\r\n prog.vert.headerComment = \"//!V! SkyBox\";\r\n prog.frag.headerComment = \"//!F! SkyBox\";\r\n\r\n return prog.buildProgram(context);\r\n}\r\n"]}
@@ -1,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 createSkySphereProgram(context: WebGLContext, isGradient: boolean): ShaderProgram;
6
+ export declare function createSkySphereProgram(context: WebGL2RenderingContext, isGradient: boolean): ShaderProgram;
8
7
  //# sourceMappingURL=SkySphere.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SkySphere.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA4DjD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,GAAG,aAAa,CAwJhG"}
1
+ {"version":3,"file":"SkySphere.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.ts"],"names":[],"mappings":"AAIA;;GAEG;AASH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA4DjD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,GAAG,aAAa,CAwJ1G"}
@@ -1 +1 @@
1
- {"version":3,"file":"SkySphere.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.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 { Angle, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkySphereViewportQuadGeometry } from \"../CachedGeometry\";\r\nimport { fromSumOf, FrustumUniformType } from \"../FrustumUniforms\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ShaderType, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computeGradientValue = `\r\n // For the gradient sky it's good enough to calculate these in the vertex shader.\r\n vec3 eyeToVert = a_worldPos - u_worldEye;\r\n float radius = sqrt(eyeToVert.x * eyeToVert.x + eyeToVert.y * eyeToVert.y);\r\n float zValue = eyeToVert.z - radius * u_zOffset;\r\n float d = atan(zValue, radius);\r\n if (u_skyParams.x < 0.0) { // 2-color gradient\r\n d = 0.5 - d / 3.14159265359;\r\n return vec4(d, 0.0, 0.0, 0.0);\r\n }\r\n d = d / 1.570796326795;\r\n return vec4(d, 1.0 - (d - horizonSize) / (1.0 - horizonSize), 1.0 - (-d - horizonSize) / (1.0 - horizonSize), (d + horizonSize) / (horizonSize * 2.0));\r\n`;\r\n\r\nconst computeSkySphereColorGradient = `\r\n if (u_skyParams.x < 0.0) // 2-color\r\n return vec4(mix(u_zenithColor, u_nadirColor, v_gradientValue.x), 1.0);\r\n\r\n if (v_gradientValue.x > horizonSize) // above horizon\r\n return vec4(mix(u_zenithColor, u_skyColor, pow(v_gradientValue.y, u_skyParams.y)), 1.0);\r\n else if (v_gradientValue.x < -horizonSize) // below horizon\r\n return vec4(mix(u_nadirColor, u_groundColor, pow(v_gradientValue.z, u_skyParams.z)), 1.0);\r\n\r\n return vec4(mix(u_groundColor, u_skyColor, v_gradientValue.w), 1.0);\r\n`;\r\n\r\nconst computeEyeToVert = \"v_eyeToVert = a_worldPos - u_worldEye;\";\r\n\r\nconst computeSkySphereColorTexture = `\r\n // For the texture we must calculate these per pixel. Alternatively we could use a finer mesh.\r\n float radius = sqrt(v_eyeToVert.x * v_eyeToVert.x + v_eyeToVert.y * v_eyeToVert.y);\r\n float zValue = v_eyeToVert.z - radius * u_zOffset;\r\n float u = 0.25 - (atan(v_eyeToVert.y, v_eyeToVert.x) + u_rotation) / 6.28318530718;\r\n float v = 0.5 - atan(zValue, radius) / 3.14159265359;\r\n if (u < 0.0)\r\n u += 1.0;\r\n if (v < 0.0)\r\n v += 1.0;\r\n return TEXTURE(s_skyTxtr, vec2(u, v));\r\n`;\r\n\r\nconst scratch3Floats = new Float32Array(3);\r\nconst scratchVec3 = new Vector3d();\r\nconst scratchPoint3 = new Point3d();\r\n\r\n/** @internal */\r\nfunction modulateColor(colorIn: Float32Array, t: number, colorOut: Float32Array): void {\r\n const b = 1.0 - t;\r\n colorOut[0] = colorIn[0] * b;\r\n colorOut[1] = colorIn[1] * b;\r\n colorOut[2] = colorIn[2] * b;\r\n}\r\n\r\n/** @internal */\r\nexport function createSkySphereProgram(context: WebGLContext, isGradient: boolean): ShaderProgram {\r\n const attrMap = AttributeMap.findAttributeMap(isGradient ? TechniqueId.SkySphereGradient : TechniqueId.SkySphereTexture, false);\r\n const builder = createViewportQuadBuilder(false, attrMap);\r\n if (isGradient) {\r\n builder.addFunctionComputedVarying(\"v_gradientValue\", VariableType.Vec4, \"computeGradientValue\", computeGradientValue);\r\n builder.addGlobal(\"horizonSize\", VariableType.Float, ShaderType.Both, \"0.0015\", true);\r\n } else\r\n builder.addInlineComputedVarying(\"v_eyeToVert\", VariableType.Vec3, computeEyeToVert);\r\n\r\n const vert = builder.vert;\r\n vert.addUniform(\"u_worldEye\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_worldEye\", (uniform, params) => {\r\n const frustum = params.target.planFrustum;\r\n if (FrustumUniformType.Perspective === params.target.uniforms.frustum.type) {\r\n // compute eye point from frustum.\r\n const farLowerLeft = frustum.getCorner(Npc.LeftBottomRear);\r\n const nearLowerLeft = frustum.getCorner(Npc.LeftBottomFront);\r\n const scale = 1.0 / (1.0 - params.target.planFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, scratchVec3);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, scratchPoint3);\r\n scratch3Floats[0] = cameraPosition.x;\r\n scratch3Floats[1] = cameraPosition.y;\r\n scratch3Floats[2] = cameraPosition.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else {\r\n const delta = Vector3d.createStartEnd(frustum.getCorner(Npc.LeftBottomRear), frustum.getCorner(Npc.LeftBottomFront), scratchVec3);\r\n const pseudoCameraHalfAngle = 22.5;\r\n const diagonal = frustum.getCorner(Npc.LeftBottomRear).distance(frustum.getCorner(Npc.RightTopRear));\r\n const focalLength = diagonal / (2 * Math.atan(pseudoCameraHalfAngle * Angle.radiansPerDegree));\r\n let zScale = focalLength / delta.magnitude();\r\n if (zScale < 1.000001)\r\n zScale = 1.000001; // prevent worldEye front being on or inside the frustum front plane\r\n const worldEye = Point3d.createAdd3Scaled(frustum.getCorner(Npc.LeftBottomRear), .5, frustum.getCorner(Npc.RightTopRear), .5, delta, zScale, scratchPoint3);\r\n scratch3Floats[0] = worldEye.x;\r\n scratch3Floats[1] = worldEye.y;\r\n scratch3Floats[2] = worldEye.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n }\r\n });\r\n });\r\n if (isGradient) {\r\n vert.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n vert.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n }\r\n\r\n const frag = builder.frag;\r\n if (isGradient) {\r\n frag.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n frag.addUniform(\"u_zenithColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_zenithColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.zenithColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.zenithColor);\r\n });\r\n });\r\n frag.addUniform(\"u_skyColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.skyColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.skyColor);\r\n });\r\n });\r\n frag.addUniform(\"u_groundColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_groundColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.zenithColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.groundColor);\r\n }\r\n });\r\n });\r\n frag.addUniform(\"u_nadirColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_nadirColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.nadirColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.nadirColor);\r\n }\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorGradient);\r\n } else {\r\n frag.addUniform(\"s_skyTxtr\", VariableType.Sampler2D, (shader) => {\r\n shader.addGraphicUniform(\"s_skyTxtr\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n if (undefined !== geom.skyTexture)\r\n (geom.skyTexture as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n else\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.FeatureSymbology);\r\n });\r\n });\r\n frag.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n frag.addUniform(\"u_rotation\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_rotation\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.rotation);\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorTexture);\r\n }\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n builder.vert.headerComment = `//!V! SkySphere-${isGradient ? \"Gradient\" : \"Texture\"}`;\r\n builder.frag.headerComment = `//!F! SkySphere-${isGradient ? \"Gradient\" : \"Texture\"}`;\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"SkySphere.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.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 { Angle, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkySphereViewportQuadGeometry } from \"../CachedGeometry\";\r\nimport { fromSumOf, FrustumUniformType } from \"../FrustumUniforms\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ShaderType, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nconst computeGradientValue = `\r\n // For the gradient sky it's good enough to calculate these in the vertex shader.\r\n vec3 eyeToVert = a_worldPos - u_worldEye;\r\n float radius = sqrt(eyeToVert.x * eyeToVert.x + eyeToVert.y * eyeToVert.y);\r\n float zValue = eyeToVert.z - radius * u_zOffset;\r\n float d = atan(zValue, radius);\r\n if (u_skyParams.x < 0.0) { // 2-color gradient\r\n d = 0.5 - d / 3.14159265359;\r\n return vec4(d, 0.0, 0.0, 0.0);\r\n }\r\n d = d / 1.570796326795;\r\n return vec4(d, 1.0 - (d - horizonSize) / (1.0 - horizonSize), 1.0 - (-d - horizonSize) / (1.0 - horizonSize), (d + horizonSize) / (horizonSize * 2.0));\r\n`;\r\n\r\nconst computeSkySphereColorGradient = `\r\n if (u_skyParams.x < 0.0) // 2-color\r\n return vec4(mix(u_zenithColor, u_nadirColor, v_gradientValue.x), 1.0);\r\n\r\n if (v_gradientValue.x > horizonSize) // above horizon\r\n return vec4(mix(u_zenithColor, u_skyColor, pow(v_gradientValue.y, u_skyParams.y)), 1.0);\r\n else if (v_gradientValue.x < -horizonSize) // below horizon\r\n return vec4(mix(u_nadirColor, u_groundColor, pow(v_gradientValue.z, u_skyParams.z)), 1.0);\r\n\r\n return vec4(mix(u_groundColor, u_skyColor, v_gradientValue.w), 1.0);\r\n`;\r\n\r\nconst computeEyeToVert = \"v_eyeToVert = a_worldPos - u_worldEye;\";\r\n\r\nconst computeSkySphereColorTexture = `\r\n // For the texture we must calculate these per pixel. Alternatively we could use a finer mesh.\r\n float radius = sqrt(v_eyeToVert.x * v_eyeToVert.x + v_eyeToVert.y * v_eyeToVert.y);\r\n float zValue = v_eyeToVert.z - radius * u_zOffset;\r\n float u = 0.25 - (atan(v_eyeToVert.y, v_eyeToVert.x) + u_rotation) / 6.28318530718;\r\n float v = 0.5 - atan(zValue, radius) / 3.14159265359;\r\n if (u < 0.0)\r\n u += 1.0;\r\n if (v < 0.0)\r\n v += 1.0;\r\n return TEXTURE(s_skyTxtr, vec2(u, v));\r\n`;\r\n\r\nconst scratch3Floats = new Float32Array(3);\r\nconst scratchVec3 = new Vector3d();\r\nconst scratchPoint3 = new Point3d();\r\n\r\n/** @internal */\r\nfunction modulateColor(colorIn: Float32Array, t: number, colorOut: Float32Array): void {\r\n const b = 1.0 - t;\r\n colorOut[0] = colorIn[0] * b;\r\n colorOut[1] = colorIn[1] * b;\r\n colorOut[2] = colorIn[2] * b;\r\n}\r\n\r\n/** @internal */\r\nexport function createSkySphereProgram(context: WebGL2RenderingContext, isGradient: boolean): ShaderProgram {\r\n const attrMap = AttributeMap.findAttributeMap(isGradient ? TechniqueId.SkySphereGradient : TechniqueId.SkySphereTexture, false);\r\n const builder = createViewportQuadBuilder(false, attrMap);\r\n if (isGradient) {\r\n builder.addFunctionComputedVarying(\"v_gradientValue\", VariableType.Vec4, \"computeGradientValue\", computeGradientValue);\r\n builder.addGlobal(\"horizonSize\", VariableType.Float, ShaderType.Both, \"0.0015\", true);\r\n } else\r\n builder.addInlineComputedVarying(\"v_eyeToVert\", VariableType.Vec3, computeEyeToVert);\r\n\r\n const vert = builder.vert;\r\n vert.addUniform(\"u_worldEye\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_worldEye\", (uniform, params) => {\r\n const frustum = params.target.planFrustum;\r\n if (FrustumUniformType.Perspective === params.target.uniforms.frustum.type) {\r\n // compute eye point from frustum.\r\n const farLowerLeft = frustum.getCorner(Npc.LeftBottomRear);\r\n const nearLowerLeft = frustum.getCorner(Npc.LeftBottomFront);\r\n const scale = 1.0 / (1.0 - params.target.planFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, scratchVec3);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, scratchPoint3);\r\n scratch3Floats[0] = cameraPosition.x;\r\n scratch3Floats[1] = cameraPosition.y;\r\n scratch3Floats[2] = cameraPosition.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else {\r\n const delta = Vector3d.createStartEnd(frustum.getCorner(Npc.LeftBottomRear), frustum.getCorner(Npc.LeftBottomFront), scratchVec3);\r\n const pseudoCameraHalfAngle = 22.5;\r\n const diagonal = frustum.getCorner(Npc.LeftBottomRear).distance(frustum.getCorner(Npc.RightTopRear));\r\n const focalLength = diagonal / (2 * Math.atan(pseudoCameraHalfAngle * Angle.radiansPerDegree));\r\n let zScale = focalLength / delta.magnitude();\r\n if (zScale < 1.000001)\r\n zScale = 1.000001; // prevent worldEye front being on or inside the frustum front plane\r\n const worldEye = Point3d.createAdd3Scaled(frustum.getCorner(Npc.LeftBottomRear), .5, frustum.getCorner(Npc.RightTopRear), .5, delta, zScale, scratchPoint3);\r\n scratch3Floats[0] = worldEye.x;\r\n scratch3Floats[1] = worldEye.y;\r\n scratch3Floats[2] = worldEye.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n }\r\n });\r\n });\r\n if (isGradient) {\r\n vert.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n vert.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n }\r\n\r\n const frag = builder.frag;\r\n if (isGradient) {\r\n frag.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n frag.addUniform(\"u_zenithColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_zenithColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.zenithColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.zenithColor);\r\n });\r\n });\r\n frag.addUniform(\"u_skyColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.skyColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.skyColor);\r\n });\r\n });\r\n frag.addUniform(\"u_groundColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_groundColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.zenithColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.groundColor);\r\n }\r\n });\r\n });\r\n frag.addUniform(\"u_nadirColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_nadirColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.nadirColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.nadirColor);\r\n }\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorGradient);\r\n } else {\r\n frag.addUniform(\"s_skyTxtr\", VariableType.Sampler2D, (shader) => {\r\n shader.addGraphicUniform(\"s_skyTxtr\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n if (undefined !== geom.skyTexture)\r\n (geom.skyTexture as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n else\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.FeatureSymbology);\r\n });\r\n });\r\n frag.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n frag.addUniform(\"u_rotation\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_rotation\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.rotation);\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorTexture);\r\n }\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n builder.vert.headerComment = `//!V! SkySphere-${isGradient ? \"Gradient\" : \"Texture\"}`;\r\n builder.frag.headerComment = `//!F! SkySphere-${isGradient ? \"Gradient\" : \"Texture\"}`;\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
@@ -78,7 +78,7 @@ const applySolarShadowMapTerrain = `
78
78
  function addEvsmExponent(frag) {
79
79
  frag.addUniform("u_evsmExponent", 2 /* Float */, (prog) => {
80
80
  prog.addGraphicUniform("u_evsmExponent", (uniform) => {
81
- uniform.setUniform1f((webgl_compatibility_1.RenderType.TextureFloat === System_1.System.instance.capabilities.maxRenderType) ? evsm32Exp : evsm16Exp);
81
+ uniform.setUniform1f((webgl_compatibility_1.RenderType.TextureFloat === System_1.System.instance.maxRenderType) ? evsm32Exp : evsm16Exp);
82
82
  });
83
83
  });
84
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SolarShadowMapping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SolarShadowMapping.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\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { addInstancedRtcMatrix } from \"./Vertex\";\r\n\r\nconst computeShadowPos = `\r\n vec4 shadowProj = u_shadowProj * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\nconst computeInstancedShadowPos = `\r\n vec4 shadowProj = u_shadowProj * g_instancedRtcMatrix * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\n\r\n// for 32-bit float, max exponent should be 44.36, for 16-bit should be 5.545\r\nconst evsm32Exp = 42.0;\r\nconst evsm16Exp = 5.545;\r\n\r\nexport const warpDepth = `\r\n// Applies exponential warp to shadow map depth, input depth should be in [0, 1]\r\nvec2 warpDepth(float depth, float exponent) {\r\n depth = 2.0 * depth - 1.0; // Rescale depth into [-1, 1]\r\n float pos = exp( exponent * depth);\r\n float neg = -exp(-exponent * depth);\r\n return vec2(pos, neg);\r\n}\r\n`;\r\n\r\nconst chebyshevUpperBound = `\r\nfloat chebyshevUpperBound(vec2 moments, float mean, float minVariance) {\r\n float variance = moments.y - (moments.x * moments.x);\r\n variance = max(variance, minVariance);\r\n\r\n // Compute probabilistic upper bound\r\n float d = mean - moments.x;\r\n float pMax = variance / (variance + (d * d));\r\n\r\n return (mean <= moments.x ? 1.0 : pMax); // One-tailed Chebyshev\r\n}\r\n`;\r\n\r\nconst shadowMapEVSM = `\r\nfloat shadowMapEVSM(vec3 shadowPos) {\r\n vec2 warpedDepth = warpDepth(shadowPos.z, u_evsmExponent);\r\n vec4 occluder = TEXTURE(s_shadowSampler, shadowPos.xy/* * 0.5*/); // shadow texture is 1/2 size (both dirs)\r\n\r\n // Derivative of warping at depth\r\n vec2 depthScale = kVSMBias * 0.01 * u_evsmExponent * warpedDepth;\r\n vec2 minVariance = depthScale * depthScale;\r\n\r\n float posContrib = chebyshevUpperBound(occluder.xz, warpedDepth.x, minVariance.x);\r\n float negContrib = chebyshevUpperBound(occluder.yw, warpedDepth.y, minVariance.y);\r\n return min(posContrib, negContrib);\r\n}\r\n`;\r\n\r\nconst applySolarShadowMap = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n float visible = (u_surfaceFlags[kSurfaceBitIndex_HasNormals] && (dot(g_normal, u_sunDir) < 0.0)) ? 0.0 : shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\nconst applySolarShadowMapTerrain = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n\r\n float visible = shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEvsmExponent(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_evsmExponent\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_evsmExponent\", (uniform) => {\r\n uniform.setUniform1f((RenderType.TextureFloat === System.instance.capabilities.maxRenderType) ? evsm32Exp : evsm16Exp);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addSolarShadowMap(builder: ProgramBuilder, toTerrain = false) {\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n frag.addUniform(\"s_shadowSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_shadowSampler\", (uniform, params) => {\r\n const shadowMap = params.target.solarShadowMap;\r\n assert(undefined !== shadowMap.shadowMapTexture);\r\n shadowMap.shadowMapTexture.texture.bindSampler(uniform, TextureUnit.ShadowMap);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_shadowParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowParams\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindColorAndBias(uniform);\r\n });\r\n });\r\n\r\n if (!toTerrain) {\r\n frag.addUniform(\"u_sunDir\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_sunDir\", (uniform, params) => {\r\n params.target.uniforms.bindSunDirection(uniform);\r\n });\r\n });\r\n }\r\n\r\n vert.addUniform(\"u_shadowProj\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowProj\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n\r\n addEvsmExponent(frag);\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n builder.addInlineComputedVarying(\"v_shadowPos\", VariableType.Vec3, vert.usesInstancedGeometry ? computeInstancedShadowPos : computeShadowPos);\r\n /* This is the EVSM bias value, which makes tradeoffs in shadow quality. Normally it should be set to 0.1.\r\n Lower values can introduce shadows where they should not be, including shadow acne. Higher values can cause Peter\r\n Panning effect and light bleeding. Tested 0.01 and 1.0, woth more focus on 0.1 to 0.5 inclusive, chose 0.2 for a\r\n while (on 9/13/19) then after having shadow tiles match view tile resolution for ones in view, retested and went\r\n back to 0.1 (on 11/5/19). */\r\n frag.addGlobal(\"kVSMBias\", VariableType.Float, \"0.1\", true);\r\n frag.addFunction(warpDepth);\r\n frag.addFunction(chebyshevUpperBound);\r\n frag.addFunction(shadowMapEVSM);\r\n frag.set(FragmentShaderComponent.ApplySolarShadowMap, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);\r\n}\r\n"]}
1
+ {"version":3,"file":"SolarShadowMapping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SolarShadowMapping.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\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { addInstancedRtcMatrix } from \"./Vertex\";\r\n\r\nconst computeShadowPos = `\r\n vec4 shadowProj = u_shadowProj * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\nconst computeInstancedShadowPos = `\r\n vec4 shadowProj = u_shadowProj * g_instancedRtcMatrix * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\n\r\n// for 32-bit float, max exponent should be 44.36, for 16-bit should be 5.545\r\nconst evsm32Exp = 42.0;\r\nconst evsm16Exp = 5.545;\r\n\r\nexport const warpDepth = `\r\n// Applies exponential warp to shadow map depth, input depth should be in [0, 1]\r\nvec2 warpDepth(float depth, float exponent) {\r\n depth = 2.0 * depth - 1.0; // Rescale depth into [-1, 1]\r\n float pos = exp( exponent * depth);\r\n float neg = -exp(-exponent * depth);\r\n return vec2(pos, neg);\r\n}\r\n`;\r\n\r\nconst chebyshevUpperBound = `\r\nfloat chebyshevUpperBound(vec2 moments, float mean, float minVariance) {\r\n float variance = moments.y - (moments.x * moments.x);\r\n variance = max(variance, minVariance);\r\n\r\n // Compute probabilistic upper bound\r\n float d = mean - moments.x;\r\n float pMax = variance / (variance + (d * d));\r\n\r\n return (mean <= moments.x ? 1.0 : pMax); // One-tailed Chebyshev\r\n}\r\n`;\r\n\r\nconst shadowMapEVSM = `\r\nfloat shadowMapEVSM(vec3 shadowPos) {\r\n vec2 warpedDepth = warpDepth(shadowPos.z, u_evsmExponent);\r\n vec4 occluder = TEXTURE(s_shadowSampler, shadowPos.xy/* * 0.5*/); // shadow texture is 1/2 size (both dirs)\r\n\r\n // Derivative of warping at depth\r\n vec2 depthScale = kVSMBias * 0.01 * u_evsmExponent * warpedDepth;\r\n vec2 minVariance = depthScale * depthScale;\r\n\r\n float posContrib = chebyshevUpperBound(occluder.xz, warpedDepth.x, minVariance.x);\r\n float negContrib = chebyshevUpperBound(occluder.yw, warpedDepth.y, minVariance.y);\r\n return min(posContrib, negContrib);\r\n}\r\n`;\r\n\r\nconst applySolarShadowMap = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n float visible = (u_surfaceFlags[kSurfaceBitIndex_HasNormals] && (dot(g_normal, u_sunDir) < 0.0)) ? 0.0 : shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\nconst applySolarShadowMapTerrain = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n\r\n float visible = shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEvsmExponent(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_evsmExponent\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_evsmExponent\", (uniform) => {\r\n uniform.setUniform1f((RenderType.TextureFloat === System.instance.maxRenderType) ? evsm32Exp : evsm16Exp);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addSolarShadowMap(builder: ProgramBuilder, toTerrain = false) {\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n frag.addUniform(\"s_shadowSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_shadowSampler\", (uniform, params) => {\r\n const shadowMap = params.target.solarShadowMap;\r\n assert(undefined !== shadowMap.shadowMapTexture);\r\n shadowMap.shadowMapTexture.texture.bindSampler(uniform, TextureUnit.ShadowMap);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_shadowParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowParams\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindColorAndBias(uniform);\r\n });\r\n });\r\n\r\n if (!toTerrain) {\r\n frag.addUniform(\"u_sunDir\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_sunDir\", (uniform, params) => {\r\n params.target.uniforms.bindSunDirection(uniform);\r\n });\r\n });\r\n }\r\n\r\n vert.addUniform(\"u_shadowProj\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowProj\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n\r\n addEvsmExponent(frag);\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n builder.addInlineComputedVarying(\"v_shadowPos\", VariableType.Vec3, vert.usesInstancedGeometry ? computeInstancedShadowPos : computeShadowPos);\r\n /* This is the EVSM bias value, which makes tradeoffs in shadow quality. Normally it should be set to 0.1.\r\n Lower values can introduce shadows where they should not be, including shadow acne. Higher values can cause Peter\r\n Panning effect and light bleeding. Tested 0.01 and 1.0, woth more focus on 0.1 to 0.5 inclusive, chose 0.2 for a\r\n while (on 9/13/19) then after having shadow tiles match view tile resolution for ones in view, retested and went\r\n back to 0.1 (on 11/5/19). */\r\n frag.addGlobal(\"kVSMBias\", VariableType.Float, \"0.1\", true);\r\n frag.addFunction(warpDepth);\r\n frag.addFunction(chebyshevUpperBound);\r\n frag.addFunction(shadowMapEVSM);\r\n frag.set(FragmentShaderComponent.ApplySolarShadowMap, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAC2C,cAAc,EAC/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACQ,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,YAAY,EAAE,cAAc,EAC3G,MAAM,mBAAmB,CAAC;AA2O3B,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAc5H;AAmFD,gBAAgB;AAChB,eAAO,MAAM,eAAe,+SAW3B,CAAC;AA4GF,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,QAuBhH;AAuCD,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,QAuDzI;AAED,eAAO,MAAM,wBAAwB,mWAQpC,CAAC;AA+BF,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA8E1E;AAED,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,cAAc,QAgB3E"}
1
+ {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAC2C,cAAc,EAC/D,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACQ,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,YAAY,EAAE,cAAc,EAC3G,MAAM,mBAAmB,CAAC;AAwO3B,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAc5H;AAoED,gBAAgB;AAChB,eAAO,MAAM,eAAe,+SAW3B,CAAC;AA4GF,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,QAoBhH;AAuCD,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,QAuDzI;AAED,eAAO,MAAM,wBAAwB,mWAQpC,CAAC;AA+BF,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA8E1E;AAED,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,cAAc,QAgB3E"}