@itwin/core-frontend 3.6.0-dev.8 → 4.0.0-dev.2

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 (516) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AccuDraw.js +1 -1
  4. package/lib/cjs/AccuDraw.js.map +1 -1
  5. package/lib/cjs/BriefcaseConnection.d.ts +23 -3
  6. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  7. package/lib/cjs/BriefcaseConnection.js +11 -3
  8. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  9. package/lib/cjs/CheckpointConnection.js +1 -1
  10. package/lib/cjs/CheckpointConnection.js.map +1 -1
  11. package/lib/cjs/DisplayStyleState.d.ts +2 -2
  12. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  13. package/lib/cjs/DisplayStyleState.js +12 -4
  14. package/lib/cjs/DisplayStyleState.js.map +1 -1
  15. package/lib/cjs/IModelApp.d.ts +3 -3
  16. package/lib/cjs/IModelApp.d.ts.map +1 -1
  17. package/lib/cjs/IModelApp.js +2 -2
  18. package/lib/cjs/IModelApp.js.map +1 -1
  19. package/lib/cjs/IModelConnection.d.ts +4 -6
  20. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  21. package/lib/cjs/IModelConnection.js +6 -7
  22. package/lib/cjs/IModelConnection.js.map +1 -1
  23. package/lib/cjs/IpcApp.d.ts +1 -1
  24. package/lib/cjs/IpcApp.d.ts.map +1 -1
  25. package/lib/cjs/IpcApp.js +1 -1
  26. package/lib/cjs/IpcApp.js.map +1 -1
  27. package/lib/cjs/NativeApp.d.ts +8 -1
  28. package/lib/cjs/NativeApp.d.ts.map +1 -1
  29. package/lib/cjs/NativeApp.js +10 -6
  30. package/lib/cjs/NativeApp.js.map +1 -1
  31. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  32. package/lib/cjs/NoRenderApp.js +3 -0
  33. package/lib/cjs/NoRenderApp.js.map +1 -1
  34. package/lib/cjs/SpatialViewState.d.ts +4 -1
  35. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  36. package/lib/cjs/SpatialViewState.js +19 -5
  37. package/lib/cjs/SpatialViewState.js.map +1 -1
  38. package/lib/cjs/Tiles.d.ts +4 -0
  39. package/lib/cjs/Tiles.d.ts.map +1 -1
  40. package/lib/cjs/Tiles.js +11 -0
  41. package/lib/cjs/Tiles.js.map +1 -1
  42. package/lib/cjs/ViewContext.js +1 -1
  43. package/lib/cjs/ViewContext.js.map +1 -1
  44. package/lib/cjs/ViewManager.d.ts.map +1 -1
  45. package/lib/cjs/ViewManager.js +2 -3
  46. package/lib/cjs/ViewManager.js.map +1 -1
  47. package/lib/cjs/ViewState.d.ts +4 -5
  48. package/lib/cjs/ViewState.d.ts.map +1 -1
  49. package/lib/cjs/ViewState.js +0 -1
  50. package/lib/cjs/ViewState.js.map +1 -1
  51. package/lib/cjs/Viewport.d.ts +53 -4
  52. package/lib/cjs/Viewport.d.ts.map +1 -1
  53. package/lib/cjs/Viewport.js +82 -34
  54. package/lib/cjs/Viewport.js.map +1 -1
  55. package/lib/cjs/extension/ExtensionImpl.js +2 -2
  56. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  57. package/lib/cjs/extension/ExtensionRuntime.js +3 -0
  58. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  59. package/lib/cjs/render/GraphicBranch.d.ts +3 -0
  60. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  61. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  62. package/lib/cjs/render/GraphicBuilder.d.ts +1 -1
  63. package/lib/cjs/render/GraphicBuilder.js +1 -1
  64. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  65. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  66. package/lib/cjs/render/MockRender.js +3 -0
  67. package/lib/cjs/render/MockRender.js.map +1 -1
  68. package/lib/cjs/render/RealityMeshParams.d.ts +3 -4
  69. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  70. package/lib/cjs/render/RealityMeshParams.js +9 -5
  71. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  72. package/lib/cjs/render/RenderMaterial.d.ts +1 -1
  73. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  74. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  75. package/lib/cjs/render/RenderSystem.d.ts +4 -4
  76. package/lib/cjs/render/RenderSystem.js +4 -4
  77. package/lib/cjs/render/RenderSystem.js.map +1 -1
  78. package/lib/cjs/render/RenderTarget.d.ts +1 -1
  79. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  80. package/lib/cjs/render/RenderTarget.js +1 -1
  81. package/lib/cjs/render/RenderTarget.js.map +1 -1
  82. package/lib/cjs/render/VisibleFeature.d.ts +5 -5
  83. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  84. package/lib/cjs/render/primitives/DisplayParams.d.ts.map +1 -1
  85. package/lib/cjs/render/primitives/DisplayParams.js +2 -1
  86. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  87. package/lib/cjs/render/webgl/BackgroundMapDrape.js +3 -3
  88. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  89. package/lib/cjs/render/webgl/BranchState.d.ts +3 -0
  90. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  91. package/lib/cjs/render/webgl/BranchState.js +5 -0
  92. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  93. package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
  94. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  95. package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
  96. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  97. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  98. package/lib/cjs/render/webgl/DrawCommand.js +6 -4
  99. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  100. package/lib/cjs/render/webgl/EDL.d.ts +40 -0
  101. package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
  102. package/lib/cjs/render/webgl/EDL.js +264 -0
  103. package/lib/cjs/render/webgl/EDL.js.map +1 -0
  104. package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
  105. package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
  106. package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
  107. package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
  108. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  109. package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
  110. package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
  111. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  112. package/lib/cjs/render/webgl/Layer.js +2 -2
  113. package/lib/cjs/render/webgl/LayerCommands.js +2 -2
  114. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  115. package/lib/cjs/render/webgl/PlanarClassifier.js +9 -8
  116. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  117. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  118. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  119. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  120. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  121. package/lib/cjs/render/webgl/PointCloud.js +2 -0
  122. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  123. package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
  124. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  125. package/lib/cjs/render/webgl/RealityMesh.js +8 -3
  126. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  127. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
  128. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  129. package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
  130. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  131. package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -1
  132. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  133. package/lib/cjs/render/webgl/RenderCommands.js +46 -38
  134. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  135. package/lib/cjs/render/webgl/RenderFlags.d.ts +19 -17
  136. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/RenderFlags.js +8 -6
  138. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  139. package/lib/cjs/render/webgl/SceneCompositor.d.ts +6 -1
  140. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  141. package/lib/cjs/render/webgl/SceneCompositor.js +195 -76
  142. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  143. package/lib/cjs/render/webgl/SolarShadowMap.js +3 -3
  144. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  145. package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
  146. package/lib/cjs/render/webgl/Target.js +7 -7
  147. package/lib/cjs/render/webgl/Target.js.map +1 -1
  148. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  149. package/lib/cjs/render/webgl/Technique.js +18 -3
  150. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  151. package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
  152. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  153. package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
  154. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  155. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  156. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  157. package/lib/cjs/render/webgl/UniformHandle.js +1 -2
  158. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  159. package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
  160. package/lib/cjs/render/webgl/glsl/EDL.d.ts +14 -0
  161. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
  162. package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
  163. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
  164. package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
  165. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  166. package/lib/cjs/render/webgl/glsl/Surface.js +1 -1
  167. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  168. package/lib/cjs/tile/BatchedTileIdMap.js +1 -1
  169. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  170. package/lib/cjs/tile/DynamicIModelTile.js +1 -1
  171. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  172. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  173. package/lib/cjs/tile/GltfReader.js +4 -2
  174. package/lib/cjs/tile/GltfReader.js.map +1 -1
  175. package/lib/cjs/tile/IModelTile.js +1 -1
  176. package/lib/cjs/tile/IModelTile.js.map +1 -1
  177. package/lib/cjs/tile/ImdlReader.d.ts +6 -0
  178. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  179. package/lib/cjs/tile/ImdlReader.js +20 -7
  180. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  181. package/lib/cjs/tile/OrbitGtTileTree.d.ts +14 -1
  182. package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
  183. package/lib/cjs/tile/OrbitGtTileTree.js +30 -11
  184. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  185. package/lib/cjs/tile/RealityModelTileTree.d.ts +4 -3
  186. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  187. package/lib/cjs/tile/RealityModelTileTree.js +61 -53
  188. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  189. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  190. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  191. package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
  192. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  193. package/lib/cjs/tile/RealityTileTree.js +9 -4
  194. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  195. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  196. package/lib/cjs/tile/TileAdmin.js +15 -7
  197. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  198. package/lib/cjs/tile/TileDrawArgs.js +1 -1
  199. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  200. package/lib/cjs/tile/TileTreeReference.d.ts +3 -0
  201. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  202. package/lib/cjs/tile/TileTreeReference.js +3 -0
  203. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  204. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +14 -1
  205. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  206. package/lib/cjs/tile/map/ArcGisUtilities.js +57 -27
  207. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  208. package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
  209. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  210. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  211. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  212. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  213. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  214. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  215. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  216. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  217. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  218. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  219. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  220. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  221. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  222. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
  223. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  224. package/lib/cjs/tile/map/ImageryTileTree.d.ts +26 -1
  225. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  226. package/lib/cjs/tile/map/ImageryTileTree.js +54 -4
  227. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  228. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  229. package/lib/cjs/tile/map/MapLayerImageryFormats.js +3 -2
  230. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  231. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +12 -2
  232. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  233. package/lib/cjs/tile/map/MapLayerImageryProvider.js +16 -4
  234. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  235. package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -1
  236. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  237. package/lib/cjs/tile/map/MapLayerSources.js +2 -0
  238. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  239. package/lib/cjs/tile/map/MapTile.d.ts +5 -0
  240. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  241. package/lib/cjs/tile/map/MapTile.js +33 -14
  242. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  243. package/lib/cjs/tile/map/MapTileTree.d.ts +42 -3
  244. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  245. package/lib/cjs/tile/map/MapTileTree.js +126 -9
  246. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  247. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  248. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  249. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +26 -0
  250. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  251. package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
  252. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  253. package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
  254. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  255. package/lib/cjs/tools/ClipViewTool.js +2 -2
  256. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  257. package/lib/cjs/tools/MeasureTool.js +2 -2
  258. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  259. package/lib/esm/AccuDraw.js +1 -1
  260. package/lib/esm/AccuDraw.js.map +1 -1
  261. package/lib/esm/BriefcaseConnection.d.ts +23 -3
  262. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  263. package/lib/esm/BriefcaseConnection.js +11 -3
  264. package/lib/esm/BriefcaseConnection.js.map +1 -1
  265. package/lib/esm/CheckpointConnection.js +1 -1
  266. package/lib/esm/CheckpointConnection.js.map +1 -1
  267. package/lib/esm/DisplayStyleState.d.ts +2 -2
  268. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  269. package/lib/esm/DisplayStyleState.js +12 -4
  270. package/lib/esm/DisplayStyleState.js.map +1 -1
  271. package/lib/esm/IModelApp.d.ts +3 -3
  272. package/lib/esm/IModelApp.d.ts.map +1 -1
  273. package/lib/esm/IModelApp.js +2 -2
  274. package/lib/esm/IModelApp.js.map +1 -1
  275. package/lib/esm/IModelConnection.d.ts +4 -6
  276. package/lib/esm/IModelConnection.d.ts.map +1 -1
  277. package/lib/esm/IModelConnection.js +6 -7
  278. package/lib/esm/IModelConnection.js.map +1 -1
  279. package/lib/esm/IpcApp.d.ts +1 -1
  280. package/lib/esm/IpcApp.d.ts.map +1 -1
  281. package/lib/esm/IpcApp.js +1 -1
  282. package/lib/esm/IpcApp.js.map +1 -1
  283. package/lib/esm/NativeApp.d.ts +8 -1
  284. package/lib/esm/NativeApp.d.ts.map +1 -1
  285. package/lib/esm/NativeApp.js +10 -6
  286. package/lib/esm/NativeApp.js.map +1 -1
  287. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  288. package/lib/esm/NoRenderApp.js +3 -0
  289. package/lib/esm/NoRenderApp.js.map +1 -1
  290. package/lib/esm/SpatialViewState.d.ts +4 -1
  291. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  292. package/lib/esm/SpatialViewState.js +19 -5
  293. package/lib/esm/SpatialViewState.js.map +1 -1
  294. package/lib/esm/Tiles.d.ts +4 -0
  295. package/lib/esm/Tiles.d.ts.map +1 -1
  296. package/lib/esm/Tiles.js +11 -0
  297. package/lib/esm/Tiles.js.map +1 -1
  298. package/lib/esm/ViewContext.js +1 -1
  299. package/lib/esm/ViewContext.js.map +1 -1
  300. package/lib/esm/ViewManager.d.ts.map +1 -1
  301. package/lib/esm/ViewManager.js +2 -3
  302. package/lib/esm/ViewManager.js.map +1 -1
  303. package/lib/esm/ViewState.d.ts +4 -5
  304. package/lib/esm/ViewState.d.ts.map +1 -1
  305. package/lib/esm/ViewState.js +0 -1
  306. package/lib/esm/ViewState.js.map +1 -1
  307. package/lib/esm/Viewport.d.ts +53 -4
  308. package/lib/esm/Viewport.d.ts.map +1 -1
  309. package/lib/esm/Viewport.js +83 -35
  310. package/lib/esm/Viewport.js.map +1 -1
  311. package/lib/esm/extension/ExtensionImpl.js +2 -2
  312. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  313. package/lib/esm/extension/ExtensionRuntime.js +5 -2
  314. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  315. package/lib/esm/render/GraphicBranch.d.ts +3 -0
  316. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  317. package/lib/esm/render/GraphicBranch.js.map +1 -1
  318. package/lib/esm/render/GraphicBuilder.d.ts +1 -1
  319. package/lib/esm/render/GraphicBuilder.js +1 -1
  320. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  321. package/lib/esm/render/MockRender.d.ts.map +1 -1
  322. package/lib/esm/render/MockRender.js +3 -0
  323. package/lib/esm/render/MockRender.js.map +1 -1
  324. package/lib/esm/render/RealityMeshParams.d.ts +3 -4
  325. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  326. package/lib/esm/render/RealityMeshParams.js +10 -6
  327. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  328. package/lib/esm/render/RenderMaterial.d.ts +1 -1
  329. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  330. package/lib/esm/render/RenderMaterial.js.map +1 -1
  331. package/lib/esm/render/RenderSystem.d.ts +4 -4
  332. package/lib/esm/render/RenderSystem.js +4 -4
  333. package/lib/esm/render/RenderSystem.js.map +1 -1
  334. package/lib/esm/render/RenderTarget.d.ts +1 -1
  335. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  336. package/lib/esm/render/RenderTarget.js +1 -1
  337. package/lib/esm/render/RenderTarget.js.map +1 -1
  338. package/lib/esm/render/VisibleFeature.d.ts +5 -5
  339. package/lib/esm/render/VisibleFeature.js.map +1 -1
  340. package/lib/esm/render/primitives/DisplayParams.d.ts.map +1 -1
  341. package/lib/esm/render/primitives/DisplayParams.js +2 -1
  342. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  343. package/lib/esm/render/webgl/BackgroundMapDrape.js +3 -3
  344. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  345. package/lib/esm/render/webgl/BranchState.d.ts +3 -0
  346. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  347. package/lib/esm/render/webgl/BranchState.js +5 -0
  348. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  349. package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
  350. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  351. package/lib/esm/render/webgl/CachedGeometry.js +69 -0
  352. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  353. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  354. package/lib/esm/render/webgl/DrawCommand.js +6 -4
  355. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  356. package/lib/esm/render/webgl/EDL.d.ts +40 -0
  357. package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
  358. package/lib/esm/render/webgl/EDL.js +260 -0
  359. package/lib/esm/render/webgl/EDL.js.map +1 -0
  360. package/lib/esm/render/webgl/EdgeSettings.js +2 -2
  361. package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
  362. package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
  363. package/lib/esm/render/webgl/FrameBuffer.js +9 -0
  364. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  365. package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
  366. package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
  367. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  368. package/lib/esm/render/webgl/Layer.js +2 -2
  369. package/lib/esm/render/webgl/LayerCommands.js +2 -2
  370. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  371. package/lib/esm/render/webgl/PlanarClassifier.js +9 -8
  372. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  373. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  374. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  375. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  376. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/PointCloud.js +2 -0
  378. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  379. package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
  380. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  381. package/lib/esm/render/webgl/RealityMesh.js +8 -3
  382. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  383. package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
  384. package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  385. package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
  386. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  387. package/lib/esm/render/webgl/RenderCommands.d.ts +2 -1
  388. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  389. package/lib/esm/render/webgl/RenderCommands.js +46 -38
  390. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  391. package/lib/esm/render/webgl/RenderFlags.d.ts +19 -17
  392. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  393. package/lib/esm/render/webgl/RenderFlags.js +8 -6
  394. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  395. package/lib/esm/render/webgl/SceneCompositor.d.ts +6 -1
  396. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  397. package/lib/esm/render/webgl/SceneCompositor.js +194 -77
  398. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  399. package/lib/esm/render/webgl/SolarShadowMap.js +3 -3
  400. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  401. package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
  402. package/lib/esm/render/webgl/Target.js +7 -7
  403. package/lib/esm/render/webgl/Target.js.map +1 -1
  404. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  405. package/lib/esm/render/webgl/Technique.js +18 -3
  406. package/lib/esm/render/webgl/Technique.js.map +1 -1
  407. package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
  408. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  409. package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
  410. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  411. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  412. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  413. package/lib/esm/render/webgl/UniformHandle.js +1 -2
  414. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  415. package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
  416. package/lib/esm/render/webgl/glsl/EDL.d.ts +14 -0
  417. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
  418. package/lib/esm/render/webgl/glsl/EDL.js +253 -0
  419. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
  420. package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
  421. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  422. package/lib/esm/render/webgl/glsl/Surface.js +1 -1
  423. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  424. package/lib/esm/tile/BatchedTileIdMap.js +1 -1
  425. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  426. package/lib/esm/tile/DynamicIModelTile.js +1 -1
  427. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  428. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  429. package/lib/esm/tile/GltfReader.js +4 -2
  430. package/lib/esm/tile/GltfReader.js.map +1 -1
  431. package/lib/esm/tile/IModelTile.js +1 -1
  432. package/lib/esm/tile/IModelTile.js.map +1 -1
  433. package/lib/esm/tile/ImdlReader.d.ts +6 -0
  434. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  435. package/lib/esm/tile/ImdlReader.js +20 -7
  436. package/lib/esm/tile/ImdlReader.js.map +1 -1
  437. package/lib/esm/tile/OrbitGtTileTree.d.ts +14 -1
  438. package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
  439. package/lib/esm/tile/OrbitGtTileTree.js +30 -12
  440. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  441. package/lib/esm/tile/RealityModelTileTree.d.ts +4 -3
  442. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  443. package/lib/esm/tile/RealityModelTileTree.js +62 -54
  444. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  445. package/lib/esm/tile/RealityTileLoader.js +2 -2
  446. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  447. package/lib/esm/tile/RealityTileTree.d.ts +5 -0
  448. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  449. package/lib/esm/tile/RealityTileTree.js +9 -4
  450. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  451. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  452. package/lib/esm/tile/TileAdmin.js +15 -7
  453. package/lib/esm/tile/TileAdmin.js.map +1 -1
  454. package/lib/esm/tile/TileDrawArgs.js +1 -1
  455. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  456. package/lib/esm/tile/TileTreeReference.d.ts +3 -0
  457. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  458. package/lib/esm/tile/TileTreeReference.js +3 -0
  459. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  460. package/lib/esm/tile/map/ArcGisUtilities.d.ts +14 -1
  461. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  462. package/lib/esm/tile/map/ArcGisUtilities.js +57 -27
  463. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  464. package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
  465. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  466. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  467. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  468. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  469. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  470. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  471. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  472. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  473. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  474. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  475. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  476. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  477. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  478. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  479. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  480. package/lib/esm/tile/map/ImageryTileTree.d.ts +26 -1
  481. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  482. package/lib/esm/tile/map/ImageryTileTree.js +53 -4
  483. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  484. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  485. package/lib/esm/tile/map/MapLayerImageryFormats.js +3 -2
  486. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  487. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +12 -2
  488. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  489. package/lib/esm/tile/map/MapLayerImageryProvider.js +16 -4
  490. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  491. package/lib/esm/tile/map/MapLayerSources.d.ts +3 -1
  492. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  493. package/lib/esm/tile/map/MapLayerSources.js +2 -0
  494. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  495. package/lib/esm/tile/map/MapTile.d.ts +5 -0
  496. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  497. package/lib/esm/tile/map/MapTile.js +33 -14
  498. package/lib/esm/tile/map/MapTile.js.map +1 -1
  499. package/lib/esm/tile/map/MapTileTree.d.ts +42 -3
  500. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  501. package/lib/esm/tile/map/MapTileTree.js +126 -9
  502. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  503. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  504. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  505. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +26 -0
  506. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  507. package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
  508. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  509. package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
  510. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  511. package/lib/esm/tools/ClipViewTool.js +2 -2
  512. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  513. package/lib/esm/tools/MeasureTool.js +2 -2
  514. package/lib/esm/tools/MeasureTool.js.map +1 -1
  515. package/lib/public/locales/en/iModelJs.json +2 -2
  516. package/package.json +20 -21
@@ -174,7 +174,7 @@ class ShadowMapParams {
174
174
  }
175
175
  const defaultSunDirection = core_geometry_1.Vector3d.create(-1, -1, -1).normalize();
176
176
  const scratchFrustum = new core_common_1.Frustum();
177
- const scratchFrustumPlanes = new core_common_1.FrustumPlanes();
177
+ const scratchFrustumPlanes = core_common_1.FrustumPlanes.createEmpty();
178
178
  class SolarShadowMap {
179
179
  constructor(target) {
180
180
  this._projectionMatrix = core_geometry_1.Matrix4d.createIdentity();
@@ -394,8 +394,8 @@ class SolarShadowMap {
394
394
  System_1.System.instance.frameBufferStack.execute(bundle.fbo, true, false, () => {
395
395
  System_1.System.instance.context.clearDepth(1.0);
396
396
  System_1.System.instance.context.clear(GL_1.GL.BufferBit.Depth);
397
- target.techniques.execute(target, renderCommands.getCommands(3 /* OpaquePlanar */), 18 /* PlanarClassification */); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.
398
- target.techniques.execute(target, renderCommands.getCommands(4 /* OpaqueGeneral */), 18 /* PlanarClassification */); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.
397
+ target.techniques.execute(target, renderCommands.getCommands(3 /* OpaquePlanar */), 19 /* PlanarClassification */); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.
398
+ target.techniques.execute(target, renderCommands.getCommands(5 /* OpaqueGeneral */), 19 /* PlanarClassification */); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.
399
399
  });
400
400
  // copy depth buffer to EVSM shadow buffer and average down for AA effect
401
401
  gl.viewport(0, 0, evsmWidth, evsmHeight);
@@ -1 +1 @@
1
- {"version":3,"file":"SolarShadowMap.js","sourceRoot":"","sources":["../../../../src/render/webgl/SolarShadowMap.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,sDAAsD;AACtD,wDAAuK;AACvK,oDAE4B;AAC5B,oEAAwD;AACxD,kDAA4F;AAK5F,6CAA0C;AAC1C,qDAAgD;AAEhD,+CAA4C;AAC5C,6BAA0B;AAC1B,qDAAkD;AAClD,+CAAwD;AACxD,+CAA4C;AAC5C,2DAAoD;AACpD,qCAAkC;AAElC,uCAAmD;AAInD,SAAS,cAAc,CAAC,YAA0B,EAAE,cAA8B,EAAE,IAAuB,EAAE,aAA4B,EAAE,YAA0B;IACnK,MAAM,sBAAuB,SAAQ,uBAAY;QAI/C,YAAoB,iBAAgC,EAAU,UAA0B,EAAE,IAAkB,EAAE,OAAqB;YACjI,KAAK,CAAC,IAAI,CAAC,CAAC;YADM,sBAAiB,GAAjB,iBAAiB,CAAe;YAAU,eAAU,GAAV,UAAU,CAAgB;YAEtF,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC/B,CAAC;QAED,iIAAiI;QACjI,iEAAiE;QACjE,IAAoB,4BAA4B,KAAyB,OAAO,GAAG,CAAC,CAAC,CAAC;QAEtE,oBAAoB,CAAC,KAAa;YAChD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,IAAoB,aAAa;YAC/B,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe;gBAC/B,OAAO,KAAK,CAAC,aAAa,CAAC;;gBAE3B,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAClC,CAAC;QAED,IAAoB,cAAc;YAChC,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe;gBAC/B,OAAO,KAAK,CAAC,cAAc,CAAC;;gBAE5B,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAC1C,CAAC;QAEe,YAAY;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,QAAQ;gBACV,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAEe,YAAY,CAAC,IAAU;YACrC,uIAAuI;YACvI,qDAAqD;YACrD,4GAA4G;YAC5G,6FAA6F;YAC7F,IAAI,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE;gBACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,eAAe,GAAG,yBAAc,CAAC,cAAc,KAAK,GAAG,CAAC;aAC9D;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAEM,MAAM,CAAC,MAAM,CAAC,OAAqB,EAAE,SAAyB,EAAE,QAA2B,EAAE,MAAqB,EAAE,OAAqB;YAC9I,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,CAAC;KACF;IAED,OAAO,sBAAsB,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,CAAC,CAAE,oCAAoC;AAClE,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,iCAAiC;AACzE,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,CAAC,CAAE,yCAAyC;AAChF,MAAM,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC;AACvC,MAAM,uBAAuB,GAAG,wBAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzJ,gFAAgF;AAChF,MAAM,MAAM;IACV,YACkB,YAAqB,EACrB,gBAAyB,EACzB,GAAgB,EAChB,KAAkB,EAClB,QAAsB,EACtB,cAA8B;QAL9B,iBAAY,GAAZ,YAAY,CAAS;QACrB,qBAAgB,GAAhB,gBAAgB,CAAS;QACzB,QAAG,GAAH,GAAG,CAAa;QAChB,UAAK,GAAL,KAAK,CAAa;QAClB,aAAQ,GAAR,QAAQ,CAAc;QACtB,mBAAc,GAAd,cAAc,CAAgB;IAChD,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,MAAc,EAAE,KAAkB,EAAE,KAAiB;QACxE,MAAM,kBAAkB,GAAG,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,EAAE,eAAe,CAAkB,CAAC;QAC/G,IAAI,SAAS,KAAK,kBAAkB;YAClC,OAAO,SAAS,CAAC;QAEnB,IAAI,aAAa,GAAG,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC9C,QAAQ,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;YAClD,KAAK,gCAAU,CAAC,YAAY;gBAC1B,MAAM;YACR,KAAK,gCAAU,CAAC,gBAAgB;gBAC9B,IAAI,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE;oBACzC,aAAa,GAAI,eAAM,CAAC,QAAQ,CAAC,OAAkC,CAAC,UAAU,CAAC;oBAC/E,MAAM;iBACP;qBAAM;oBACL,MAAM,KAAK,GAAG,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,oBAAoB,CAAyB,wBAAwB,CAAC,CAAC;oBAClH,IAAI,SAAS,KAAK,KAAK,EAAE;wBACvB,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC;wBACrC,MAAM;qBACP;iBACF;YACH,mBAAmB;YACnB;gBACE,OAAO,SAAS,CAAC;SACpB;QAED,MAAM,aAAa,GAAoB,EAAE,CAAC;QAE1C,sGAAsG;QACtG,mEAAmE;QACnE,2EAA2E;QAC3E,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,0BAA0B,EAAE;YAC5D,MAAM,MAAM,GAAG,uBAAa,CAAC,mBAAmB,CAAC,cAAc,EAAE,eAAe,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACzH,IAAI,SAAS,KAAK,MAAM;gBACtB,OAAO,SAAS,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,MAAM,GAAG,GAAG,yBAAW,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAClE,IAAI,SAAS,KAAK,GAAG;YACnB,OAAO,SAAS,CAAC;QAEnB,sFAAsF;QACtF,MAAM,sBAAsB,GAAG,uBAAa,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC/H,IAAI,SAAS,KAAK,sBAAsB;YACtC,OAAO,SAAS,CAAC;QAEnB,MAAM,KAAK,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC3D,IAAI,SAAS,KAAK,KAAK;YACrB,OAAO,SAAS,CAAC;QAEnB,MAAM,YAAY,GAAG,IAAI,iBAAO,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,2BAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,iCAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;QACxK,MAAM,QAAQ,GAAG,6BAAY,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAG,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QACjH,IAAI,SAAS,KAAK,QAAQ;YACxB,OAAO,SAAS,CAAC;QAEnB,MAAM,gBAAgB,GAAG,IAAI,iBAAO,CAAC,EAAE,IAAI,EAAE,2BAAa,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,EAAE,YAAY,EAAE,iCAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3K,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC1F,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU;eAC9B,IAAI,CAAC,gBAAgB,CAAC,UAAU;eAChC,IAAI,CAAC,GAAG,CAAC,UAAU;eACnB,IAAI,CAAC,KAAK,CAAC,UAAU;eACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAChC,CAAC;IAEM,OAAO;QACZ,IAAA,sBAAO,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,IAAA,sBAAO,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,IAAA,sBAAO,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,IAAA,sBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;CACF;AAED,sGAAsG;AACtG,MAAM,eAAe;IAKnB,YAAmB,WAAoB,EAAE,SAAmB,EAAE,QAA6B;QAJ3E,cAAS,GAAG,IAAI,wBAAQ,EAAE,CAAC;QAC3B,gBAAW,GAAG,IAAI,qBAAO,EAAE,CAAC;QAI1C,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,WAAoB,EAAE,SAAmB,EAAE,QAA6B;QACpF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;CACF;AAED,MAAM,mBAAmB,GAAG,wBAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAG,CAAC;AACrE,MAAM,cAAc,GAAG,IAAI,qBAAO,EAAE,CAAC;AACrC,MAAM,oBAAoB,GAAG,IAAI,2BAAa,EAAE,CAAC;AAEjD,MAAa,cAAc;IA2CzB,YAAmB,MAAc;QAzCzB,sBAAiB,GAAG,wBAAQ,CAAC,cAAc,EAAE,CAAC;QAC9C,cAAS,GAAoB,EAAE,CAAC;QAChC,mBAAc,GAAG,IAAI,qBAAO,EAAE,CAAC;QAC/B,aAAQ,GAAG,KAAK,CAAC;QACjB,eAAU,GAAG,KAAK,CAAC;QACnB,aAAQ,GAAG,KAAK,CAAC;QAER,kBAAa,GAAG,uBAAO,CAAC,UAAU,EAAE,CAAC;QACrC,sBAAiB,GAAG,yBAAS,CAAC,cAAc,EAAE,CAAC;QAE/C,sBAAiB,GAAG,IAAI,uBAAS,EAAE,CAAC;QAI7C,oBAAe,GAAG,qBAAK,CAAC,cAAc,EAAE,CAAC;QA4B/C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,IAAI,yBAAW,EAAE,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QAEzC,IAAI,CAAC,eAAe,GAAG,IAAI,yBAAW,EAAE,CAAC;QACzC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QAE7C,IAAI,CAAC,WAAW,GAAG,IAAI,uBAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAhCO,SAAS,CAAC,MAAc;QAC9B,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACrF,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;SACpC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,IAAW,gBAAgB,KAAe,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1E,IAAW,YAAY,KAA0B,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7H,IAAW,gBAAgB,KAA0B,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACrI,IAAW,QAAQ,KAAsC,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACjI,IAAW,SAAS,KAA2B,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACxH,IAAW,OAAO,KAAc,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7D,IAAW,cAAc,KAAY,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5D,UAAU,CAAC,OAAsB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAepE,OAAO;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IAEM,iBAAiB,CAAC,KAA8B;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,SAAS,KAAK,MAAM;YACtB,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/F,OAAO;QACZ,IAAI,CAAC,OAAO,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEO,aAAa,CAAC,MAAe;QACnC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS;YAClC,OAAO,CAAC,OAAO,EAAE,CAAC;QAEpB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,IAAI,MAAM;YACR,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAEO,qBAAqB;QAC3B,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB;YACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,OAAiC;;QAC7C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACnE,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO;SACR;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,MAAA,KAAK,CAAC,YAAY,mCAAI,mBAAmB,CAAC;QAE/D,MAAM,uBAAuB,GAAG,CAAC,GAAG,CAAC;QACrC,IAAI,YAAY,CAAC,CAAC,GAAG,uBAAuB,EAAE;YAC5C,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO;SACR;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7C,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;;YAExE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,MAAM,mBAAmB,GAAG,yBAAS,CAAC,UAAU,CAAC,uBAAO,CAAC,UAAU,EAAE,EAAE,wBAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAG,CAAC,CAAC;QAChJ,MAAM,UAAU,GAAG,wBAAQ,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAG,CAAC;QAE/C,6BAA6B;QAC7B,MAAM,WAAW,GAAG,mBAAmB,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE7E,0CAA0C;QAC1C,MAAM,aAAa,GAAG,uBAAO,CAAC,UAAU,EAAE,CAAC;QAC3C,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,IAAI,GAAG,CAAC,YAAY,EAAE;gBACpB,IAAI,GAAG,CAAC,QAAQ,EAAE;oBAChB,0FAA0F;oBAC1F,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,MAAM,EAAE;wBACnC,MAAM,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC7C,IAAI,EAAE,CAAC,CAAC,GAAG,MAAM;4BACf,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;;4BAEjD,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB;qBACnF;iBACF;qBAAM;oBACL,GAAG,CAAC,0BAA0B,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;iBACtE;aACF;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,MAAM;YACvB,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEnC,4FAA4F;QAC5F,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAC1C,UAAU,CAAC,kCAAkC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAO,mJAAmJ;QAC/N,MAAM,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC;QAC5F,IAAI,SAAS,KAAK,qBAAqB,EAAE;YACvC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,gCAAgC,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;YAChI,IAAI,CAAC,oBAAoB,CAAC,MAAM;gBAC9B,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;SAC7E;QAED,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;QAC1E,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE1C,MAAM,wBAAwB,GAAG,uBAAO,CAAC,UAAU,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,kCAAkB,CAAC,YAAY,CAAC,oBAAoB,CAAC,MAAO,CAAC,CAAC;QACrF,6BAAa,CAAC,+CAA+C,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC,MAAwB,EAAE,EAAE;YACtH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,eAAe,EAAE;gBAC1C,wBAAwB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,IAAI,wBAAwB,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO;SACR;QACD,wBAAwB,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAG,yFAAyF;QAEjJ,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;QAC5D,UAAU,CAAC,kCAAkC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAE1E,MAAM,SAAS,GAAG,uBAAO,CAAC,UAAU,EAAE,CAAC;QACvC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/C,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,IAAI,CAAC,GAAG,CAAC,YAAY;gBACnB,OAAO;YAET,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1F,KAAK,MAAM,IAAI,IAAI,KAAK;oBACtB,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;YAEH,IAAI,SAAS,KAAK,QAAQ;gBACxB,OAAO;YAET,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,0BAA0B,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,CAAC;QAEJ,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC1B;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACpC,iDAAiD;YACjD,IAAI,wBAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrE,wBAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnE,wBAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACrE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACzB,OAAO;aACR;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YACjD,IAAI,SAAS,KAAK,UAAU,EAAE;gBAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAA,qBAAM,EAAC,KAAK,CAAC,CAAC;gBACd,OAAO;aACR;YAED,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAEvD,MAAM,UAAU,GAAG,uBAAuB,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACxF,MAAM,SAAS,GAAG,qBAAK,CAAC,YAAY,CAAC,uBAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,uBAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,uBAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,uBAAO,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,CAAC,CAAC,CAAE,CAAC;YACrK,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,SAAS,KAAK,UAAU,EAAE;gBAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACzB,OAAO;aACR;YAED,MAAM,aAAa,GAAG,qBAAK,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/D,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;SAChE;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEM,IAAI,CAAC,MAAc;QACxB,IAAA,qBAAM,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM;YAC7C,OAAO;QAET,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,SAAS,KAAK,MAAM;YACtB,OAAO;QAET,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,MAAM,SAAS,GAAG,eAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QAEnD,mHAAmH;QACnH,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC7C,UAAU,EAAE,wBAAU,CAAC,WAAW;YAClC,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE,KAAK;YACvB,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QAEH,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QAE7B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QACnF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExF,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC7C,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7E,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE3C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACrE,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACxC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,WAAW,sBAAyB,gCAAkC,CAAC,CAAI,gHAAgH;YAC5O,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,WAAW,uBAA0B,gCAAkC,CAAC,CAAI,gHAAgH;QAC/O,CAAC,CAAC,CAAC;QAEH,yEAAyE;QACzE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACzC,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACvE,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,0DAA0D;QAC1D,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,yBAAW,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACtG,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,KAAK,gCAAU,CAAC,YAAY,CAAC;QACzF,IAAI,SAAS,IAAI,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,0BAA0B,IAAI,CAAC,SAAS,IAAI,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,8BAA8B,EAAE;YACrJ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC;YAChF,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;SACnE;QAED,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5C,kDAAkD;QAElD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAG,yBAAyB;QACrD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAElC,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5C,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB;QAC1G,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;CACF;AAlTD,wCAkTC","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\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { ClipUtilities, ConvexClipPlaneSet, Geometry, GrowableXYZArray, Map4d, Matrix3d, Matrix4d, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n Frustum, FrustumPlanes, RenderMode, RenderTexture, SolarShadowSettings, TextureTransparency, ViewFlags,\r\n} from \"@itwin/core-common\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { Tile, TileDrawArgs, TileTreeReference, TileVisibility } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { EVSMGeometry } from \"./CachedGeometry\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass, TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { Texture, TextureHandle } from \"./Texture\";\r\n\r\ntype ProcessTiles = (tiles: Tile[]) => void;\r\n\r\nfunction createDrawArgs(sceneContext: SceneContext, solarShadowMap: SolarShadowMap, tree: TileTreeReference, frustumPlanes: FrustumPlanes, processTiles: ProcessTiles): TileDrawArgs | undefined {\r\n class SolarShadowMapDrawArgs extends TileDrawArgs {\r\n private _useViewportMap?: boolean;\r\n private readonly _processTiles: ProcessTiles;\r\n\r\n constructor(private _mapFrustumPlanes: FrustumPlanes, private _shadowMap: SolarShadowMap, args: TileDrawArgs, process: ProcessTiles) {\r\n super(args);\r\n this._processTiles = process;\r\n }\r\n\r\n // The solar shadow projection is parallel - which can cause excessive tile selection if it is along an axis of an unbounded tile\r\n // tree such as the OSM buildings. Rev limit the selection here.\r\n public override get maxRealityTreeSelectionCount(): undefined | number { return 500; }\r\n\r\n public override processSelectedTiles(tiles: Tile[]): void {\r\n this._processTiles(tiles);\r\n }\r\n\r\n public override get frustumPlanes(): FrustumPlanes {\r\n if (true === this._useViewportMap)\r\n return super.frustumPlanes;\r\n else\r\n return this._mapFrustumPlanes;\r\n }\r\n\r\n public override get worldToViewMap(): Map4d {\r\n if (true === this._useViewportMap)\r\n return super.worldToViewMap;\r\n else\r\n return this._shadowMap.worldToViewMap;\r\n }\r\n\r\n public override drawGraphics(): void {\r\n const graphics = this.produceGraphics();\r\n if (graphics)\r\n this._shadowMap.addGraphic(graphics);\r\n }\r\n\r\n public override getPixelSize(tile: Tile): number {\r\n // For tiles that are part of the scene, size them based on the viewport frustum so that shadow map uses same resolution tiles as scene\r\n // - otherwise artifacts like shadow acne may result.\r\n // For tiles that are NOT part of the scene, size them based on the shadow frustum, not the viewport frustum\r\n // - otherwise excessive numbers of excessively detailed may be requested for the shadow map.\r\n if (undefined === this._useViewportMap) {\r\n this._useViewportMap = true;\r\n const vis = tile.computeVisibility(this);\r\n this._useViewportMap = TileVisibility.OutsideFrustum !== vis;\r\n }\r\n\r\n const size = super.getPixelSize(tile);\r\n this._useViewportMap = undefined;\r\n return size;\r\n }\r\n\r\n public static create(context: SceneContext, shadowMap: SolarShadowMap, tileTree: TileTreeReference, planes: FrustumPlanes, process: ProcessTiles) {\r\n const args = tileTree.createDrawArgs(context);\r\n return undefined !== args ? new SolarShadowMapDrawArgs(planes, shadowMap, args, process) : undefined;\r\n }\r\n }\r\n\r\n return SolarShadowMapDrawArgs.create(sceneContext, solarShadowMap, tree, frustumPlanes, processTiles);\r\n}\r\n\r\nconst shadowMapWidth = 4096; // size of original depth buffer map\r\nconst shadowMapHeight = shadowMapWidth; // TBD - Adjust for aspect ratio.\r\nconst evsmWidth = shadowMapWidth / 2; // EVSM buffer is 1/2 size each direction\r\nconst evsmHeight = shadowMapHeight / 2;\r\nconst postProjectionMatrixNpc = Matrix4d.createRowValues(/* Row 1 */ 0, 1, 0, 0, /* Row 1 */ 0, 0, 1, 0, /* Row 3 */ 1, 0, 0, 0, /* Row 4 */ 0, 0, 0, 1);\r\n\r\n// Bundles up the disposable, create-once-and-reuse members of a SolarShadowMap.\r\nclass Bundle implements WebGLDisposable {\r\n private constructor(\r\n public readonly depthTexture: Texture,\r\n public readonly shadowMapTexture: Texture,\r\n public readonly fbo: FrameBuffer,\r\n public readonly fboSM: FrameBuffer,\r\n public readonly evsmGeom: EVSMGeometry,\r\n public readonly renderCommands: RenderCommands) {\r\n }\r\n\r\n public static create(target: Target, stack: BranchStack, batch: BatchState): Bundle | undefined {\r\n const depthTextureHandle = System.instance.createDepthBuffer(shadowMapWidth, shadowMapHeight) as TextureHandle;\r\n if (undefined === depthTextureHandle)\r\n return undefined;\r\n\r\n let pixelDataType = GL.Texture.DataType.Float;\r\n switch (System.instance.capabilities.maxRenderType) {\r\n case RenderType.TextureFloat:\r\n break;\r\n case RenderType.TextureHalfFloat:\r\n if (System.instance.capabilities.isWebGL2) {\r\n pixelDataType = (System.instance.context as WebGL2RenderingContext).HALF_FLOAT;\r\n break;\r\n } else {\r\n const exthf = System.instance.capabilities.queryExtensionObject<OES_texture_half_float>(\"OES_texture_half_float\");\r\n if (undefined !== exthf) {\r\n pixelDataType = exthf.HALF_FLOAT_OES;\r\n break;\r\n }\r\n }\r\n /* falls through */\r\n default:\r\n return undefined;\r\n }\r\n\r\n const colorTextures: TextureHandle[] = [];\r\n\r\n // Check if the system can render to a depth texture without a renderable color texture bound as well.\r\n // If it cannot, add a renderable color texture to the framebuffer.\r\n // MacOS Safari exhibited this behavior, which necessitated this code path.\r\n if (!System.instance.capabilities.canRenderDepthWithoutColor) {\r\n const colTex = TextureHandle.createForAttachment(shadowMapWidth, shadowMapHeight, GL.Texture.Format.Rgba, pixelDataType);\r\n if (undefined === colTex)\r\n return undefined;\r\n colorTextures.push(colTex);\r\n }\r\n\r\n const fbo = FrameBuffer.create(colorTextures, depthTextureHandle);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n // shadowMap texture is 1/4 size the depth texture (and averaged down when converting)\r\n const shadowMapTextureHandle = TextureHandle.createForAttachment(evsmWidth, evsmHeight, GL.Texture.Format.Rgba, pixelDataType);\r\n if (undefined === shadowMapTextureHandle)\r\n return undefined;\r\n\r\n const fboSM = FrameBuffer.create([shadowMapTextureHandle]);\r\n if (undefined === fboSM)\r\n return undefined;\r\n\r\n const depthTexture = new Texture({ ownership: \"external\", type: RenderTexture.Type.TileSection, handle: depthTextureHandle, transparency: TextureTransparency.Opaque });\r\n const evsmGeom = EVSMGeometry.createGeometry(depthTexture.texture.getHandle()!, shadowMapWidth, shadowMapHeight);\r\n if (undefined === evsmGeom)\r\n return undefined;\r\n\r\n const shadowMapTexture = new Texture({ type: RenderTexture.Type.Normal, ownership: \"external\", handle: shadowMapTextureHandle, transparency: TextureTransparency.Opaque });\r\n const renderCommands = new RenderCommands(target, stack, batch);\r\n return new Bundle(depthTexture, shadowMapTexture, fbo, fboSM, evsmGeom, renderCommands);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this.depthTexture.isDisposed\r\n && this.shadowMapTexture.isDisposed\r\n && this.fbo.isDisposed\r\n && this.fboSM.isDisposed\r\n && this.evsmGeom.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.depthTexture);\r\n dispose(this.shadowMapTexture);\r\n dispose(this.fbo);\r\n dispose(this.fboSM);\r\n dispose(this.evsmGeom);\r\n }\r\n}\r\n\r\n/** Describes the set of parameters which, when they change, require us to recreate the shadow map. */\r\nclass ShadowMapParams {\r\n public readonly direction = new Vector3d();\r\n public readonly viewFrustum = new Frustum();\r\n public settings: SolarShadowSettings;\r\n\r\n public constructor(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings) {\r\n direction.clone(this.direction);\r\n this.viewFrustum.setFrom(viewFrustum);\r\n this.settings = settings;\r\n }\r\n\r\n public update(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings): void {\r\n this.settings = settings;\r\n this.viewFrustum.setFrom(viewFrustum);\r\n direction.clone(this.direction);\r\n }\r\n}\r\n\r\nconst defaultSunDirection = Vector3d.create(-1, -1, -1).normalize()!;\r\nconst scratchFrustum = new Frustum();\r\nconst scratchFrustumPlanes = new FrustumPlanes();\r\n\r\nexport class SolarShadowMap implements RenderMemory.Consumer, WebGLDisposable {\r\n private _bundle?: Bundle;\r\n private _projectionMatrix = Matrix4d.createIdentity();\r\n private _graphics: RenderGraphic[] = [];\r\n private _shadowFrustum = new Frustum();\r\n private _isReady = false;\r\n private _isDrawing = false;\r\n private _enabled = false;\r\n private _params?: ShadowMapParams;\r\n private readonly _scratchRange = Range3d.createNull();\r\n private readonly _scratchTransform = Transform.createIdentity();\r\n\r\n private readonly _scratchViewFlags = new ViewFlags();\r\n private readonly _renderState: RenderState;\r\n private readonly _noZRenderState: RenderState;\r\n private readonly _batchState: BatchState;\r\n private _worldToViewMap = Map4d.createIdentity();\r\n private readonly _target: Target;\r\n\r\n // This exists chiefly for debugging. See ToggleShadowMapTilesTool.\r\n public onGraphicsChanged?: (graphics: RenderGraphic[]) => void;\r\n\r\n private getBundle(target: Target): Bundle | undefined {\r\n if (undefined === this._bundle) {\r\n this._bundle = Bundle.create(target, target.uniforms.branch.stack, this._batchState);\r\n assert(undefined !== this._bundle);\r\n }\r\n\r\n return this._bundle;\r\n }\r\n\r\n public get isReady() { return this._isReady; }\r\n public get isDrawing() { return this._isDrawing; }\r\n public get isEnabled() { return this._enabled; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n public get depthTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.depthTexture : undefined; }\r\n public get shadowMapTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.shadowMapTexture : undefined; }\r\n public get settings(): SolarShadowSettings | undefined { return undefined !== this._params ? this._params.settings : undefined; }\r\n public get direction(): Vector3d | undefined { return undefined !== this._params ? this._params.direction : undefined; }\r\n public get frustum(): Frustum { return this._shadowFrustum; }\r\n public get worldToViewMap(): Map4d { return this._worldToViewMap; }\r\n public addGraphic(graphic: RenderGraphic) { this._graphics.push(graphic); }\r\n\r\n public constructor(target: Target) {\r\n this._target = target;\r\n this._renderState = new RenderState();\r\n this._renderState.flags.depthMask = true;\r\n this._renderState.flags.blend = false;\r\n this._renderState.flags.depthTest = true;\r\n\r\n this._noZRenderState = new RenderState();\r\n this._noZRenderState.flags.depthMask = false;\r\n\r\n this._batchState = new BatchState(target.uniforms.branch.stack);\r\n }\r\n\r\n public disable() {\r\n this._enabled = this._isReady = false;\r\n this._bundle = dispose(this._bundle);\r\n this.clearGraphics(true);\r\n this._target.uniforms.shadow.update();\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n const bundle = this._bundle;\r\n if (undefined !== bundle)\r\n stats.addShadowMap(bundle.depthTexture.bytesUsed + bundle.shadowMapTexture.bytesUsed);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._bundle && 0 === this._graphics.length; }\r\n\r\n public dispose() {\r\n this._bundle = dispose(this._bundle);\r\n this.clearGraphics(true);\r\n }\r\n\r\n private clearGraphics(notify: boolean) {\r\n for (const graphic of this._graphics)\r\n graphic.dispose();\r\n\r\n this._graphics.length = 0;\r\n if (notify)\r\n this.notifyGraphicsChanged();\r\n }\r\n\r\n private notifyGraphicsChanged(): void {\r\n if (undefined !== this.onGraphicsChanged)\r\n this.onGraphicsChanged(this._graphics);\r\n }\r\n\r\n public update(context: SceneContext | undefined) {\r\n this._isReady = false;\r\n this.clearGraphics(false);\r\n\r\n if (undefined === context || !context.viewport.view.isSpatialView()) {\r\n this.disable();\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n\r\n const view = context.viewport.view;\r\n const style = view.getDisplayStyle3d();\r\n const sunDirection = style.sunDirection ?? defaultSunDirection;\r\n\r\n const minimumHorizonDirection = -.01;\r\n if (sunDirection.z > minimumHorizonDirection) {\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n\r\n this._enabled = true;\r\n const viewFrustum = context.viewingSpace.getFrustum();\r\n const settings = style.settings.solarShadows;\r\n if (undefined === this._params)\r\n this._params = new ShadowMapParams(viewFrustum, sunDirection, settings);\r\n else\r\n this._params.update(viewFrustum, sunDirection, settings);\r\n\r\n const iModel = view.iModel;\r\n\r\n const worldToMapTransform = Transform.createRefs(Point3d.createZero(), Matrix3d.createRigidHeadsUp(this._params.direction.negate()).inverse()!);\r\n const worldToMap = Matrix4d.createTransform(worldToMapTransform);\r\n const mapToWorld = worldToMap.createInverse()!;\r\n\r\n // Start with entire project.\r\n const shadowRange = worldToMapTransform.multiplyRange(iModel.projectExtents);\r\n\r\n // Limit the map to only displayed models.\r\n const viewTileRange = Range3d.createNull();\r\n view.forEachTileTreeRef((ref) => {\r\n if (ref.castsShadows) {\r\n if (ref.isGlobal) {\r\n // A shadow-casting tile tree that spans the globe. Limit its range to the viewed extents.\r\n for (const p3 of viewFrustum.points) {\r\n const p4 = worldToMap.multiplyPoint3d(p3, 1);\r\n if (p4.w > 0.0001)\r\n viewTileRange.extendXYZW(p4.x, p4.y, p4.z, p4.w);\r\n else\r\n viewTileRange.high.z = Math.max(1.0, viewTileRange.high.z); // behind eye plane.\r\n }\r\n } else {\r\n ref.accumulateTransformedRange(viewTileRange, worldToMap, undefined);\r\n }\r\n }\r\n });\r\n\r\n if (!viewTileRange.isNull)\r\n viewTileRange.clone(shadowRange);\r\n\r\n // Expand shadow range to include both the shadowers and shadowed portion of background map.\r\n scratchFrustum.initFromRange(shadowRange);\r\n mapToWorld.multiplyPoint3dArrayQuietNormalize(scratchFrustum.points); // This frustum represents the shadwowing geometry. Intersect it with background geometry and expand the range depth to include that intersection.\r\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\r\n if (undefined !== backgroundMapGeometry) {\r\n const backgroundDepthRange = backgroundMapGeometry.getFrustumIntersectionDepthRange(this._shadowFrustum, iModel.projectExtents);\r\n if (!backgroundDepthRange.isNull)\r\n shadowRange.low.z = Math.min(shadowRange.low.z, backgroundDepthRange.low);\r\n }\r\n\r\n this._params.viewFrustum.transformBy(worldToMapTransform, scratchFrustum);\r\n scratchFrustumPlanes.init(scratchFrustum);\r\n\r\n const viewIntersectShadowRange = Range3d.createNull();\r\n const viewClipPlanes = ConvexClipPlaneSet.createPlanes(scratchFrustumPlanes.planes!);\r\n ClipUtilities.announceLoopsOfConvexClipPlaneSetIntersectRange(viewClipPlanes, shadowRange, (points: GrowableXYZArray) => {\r\n for (const point of points.getPoint3dArray())\r\n viewIntersectShadowRange.extendPoint(point);\r\n });\r\n if (viewIntersectShadowRange.isNull) {\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n viewIntersectShadowRange.high.z = shadowRange.high.z; // We need to include shadowing geometry that may be outside view (along the solar axis).\r\n\r\n this._shadowFrustum.initFromRange(viewIntersectShadowRange);\r\n mapToWorld.multiplyPoint3dArrayQuietNormalize(this._shadowFrustum.points);\r\n\r\n const tileRange = Range3d.createNull();\r\n scratchFrustumPlanes.init(this._shadowFrustum);\r\n view.forEachTileTreeRef(((ref) => {\r\n if (!ref.castsShadows)\r\n return;\r\n\r\n const drawArgs = createDrawArgs(context, this, ref, scratchFrustumPlanes, (tiles: Tile[]) => {\r\n for (const tile of tiles)\r\n tileRange.extendRange(tileToMapTransform.multiplyRange(tile.range, this._scratchRange));\r\n });\r\n\r\n if (undefined === drawArgs)\r\n return;\r\n\r\n const tileToMapTransform = worldToMapTransform.multiplyTransformTransform(drawArgs.location, this._scratchTransform);\r\n drawArgs.tree.draw(drawArgs);\r\n }));\r\n\r\n if (tileRange.isNull) {\r\n this.clearGraphics(true);\r\n } else if (this._graphics.length > 0) {\r\n // Avoid an uninvertible matrix on empty range...\r\n if (Geometry.isAlmostEqualNumber(shadowRange.low.x, shadowRange.high.x) ||\r\n Geometry.isAlmostEqualNumber(shadowRange.low.y, shadowRange.high.y) ||\r\n Geometry.isAlmostEqualNumber(shadowRange.low.z, shadowRange.high.z)) {\r\n this.clearGraphics(true);\r\n return;\r\n }\r\n\r\n const frustumMap = this._shadowFrustum.toMap4d();\r\n if (undefined === frustumMap) {\r\n this.clearGraphics(true);\r\n assert(false);\r\n return;\r\n }\r\n\r\n this._projectionMatrix = frustumMap.transform0.clone();\r\n\r\n const worldToNpc = postProjectionMatrixNpc.multiplyMatrixMatrix(this._projectionMatrix);\r\n const npcToView = Map4d.createBoxMap(Point3d.create(0, 0, 0), Point3d.create(1, 1, 1), Point3d.create(0, 0, 0), Point3d.create(shadowMapWidth, shadowMapHeight, 1))!;\r\n const npcToWorld = worldToNpc.createInverse();\r\n if (undefined === npcToWorld) {\r\n this.clearGraphics(true);\r\n return;\r\n }\r\n\r\n const worldToNpcMap = Map4d.createRefs(worldToNpc, npcToWorld);\r\n this._worldToViewMap = npcToView.multiplyMapMap(worldToNpcMap);\r\n }\r\n\r\n this._target.uniforms.shadow.update();\r\n this.notifyGraphicsChanged();\r\n }\r\n\r\n public draw(target: Target) {\r\n assert(this.isEnabled);\r\n\r\n if (this.isReady || 0 === this._graphics.length)\r\n return;\r\n\r\n const bundle = this.getBundle(target);\r\n if (undefined === bundle)\r\n return;\r\n\r\n this._isDrawing = true;\r\n\r\n const prevState = System.instance.currentRenderState.clone();\r\n const gl = System.instance.context;\r\n gl.viewport(0, 0, shadowMapWidth, shadowMapHeight);\r\n\r\n // NB: textures and materials are needed because their transparencies affect whether or not a surface casts shadows\r\n const viewFlags = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n System.instance.applyRenderState(this._renderState);\r\n const prevPlan = target.plan;\r\n\r\n target.changeFrustum(this._shadowFrustum, this._shadowFrustum.getFraction(), true);\r\n target.uniforms.branch.changeRenderPlan(viewFlags, target.plan.is3d, target.plan.hline);\r\n\r\n const renderCommands = bundle.renderCommands;\r\n renderCommands.reset(target, target.uniforms.branch.stack, this._batchState);\r\n renderCommands.addGraphics(this._graphics);\r\n\r\n System.instance.frameBufferStack.execute(bundle.fbo, true, false, () => {\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n target.techniques.execute(target, renderCommands.getCommands(RenderPass.OpaquePlanar), RenderPass.PlanarClassification); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.\r\n target.techniques.execute(target, renderCommands.getCommands(RenderPass.OpaqueGeneral), RenderPass.PlanarClassification); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.\r\n });\r\n\r\n // copy depth buffer to EVSM shadow buffer and average down for AA effect\r\n gl.viewport(0, 0, evsmWidth, evsmHeight);\r\n System.instance.frameBufferStack.execute(bundle.fboSM, true, false, () => {\r\n System.instance.applyRenderState(this._noZRenderState);\r\n const params = getDrawParams(target, bundle.evsmGeom);\r\n target.techniques.draw(params);\r\n });\r\n\r\n // mipmap resulting EVSM texture and set filtering options\r\n System.instance.activateTexture2d(TextureUnit.ShadowMap, bundle.shadowMapTexture.texture.getHandle());\r\n gl.generateMipmap(gl.TEXTURE_2D);\r\n const fullFloat = System.instance.capabilities.maxRenderType === RenderType.TextureFloat;\r\n if (fullFloat && System.instance.capabilities.supportsTextureFloatLinear || !fullFloat && System.instance.capabilities.supportsTextureHalfFloatLinear) {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n }\r\n\r\n System.instance.setMaxAnisotropy(undefined);\r\n // target.recordPerformanceMetric(\"Compute EVSM\");\r\n\r\n this._batchState.reset(); // Reset the batch Ids...\r\n target.changeRenderPlan(prevPlan);\r\n\r\n System.instance.applyRenderState(prevState);\r\n System.instance.context.viewport(0, 0, target.viewRect.width, target.viewRect.height); // Restore viewport\r\n this.clearGraphics(false);\r\n this._isDrawing = false;\r\n this._isReady = true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SolarShadowMap.js","sourceRoot":"","sources":["../../../../src/render/webgl/SolarShadowMap.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\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { ClipUtilities, ConvexClipPlaneSet, Geometry, GrowableXYZArray, Map4d, Matrix3d, Matrix4d, Point3d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n Frustum, FrustumPlanes, RenderMode, RenderTexture, SolarShadowSettings, TextureTransparency, ViewFlags,\r\n} from \"@itwin/core-common\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { Tile, TileDrawArgs, TileTreeReference, TileVisibility } from \"../../tile/internal\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { EVSMGeometry } from \"./CachedGeometry\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { RenderPass, TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { Texture, TextureHandle } from \"./Texture\";\r\n\r\ntype ProcessTiles = (tiles: Tile[]) => void;\r\n\r\nfunction createDrawArgs(sceneContext: SceneContext, solarShadowMap: SolarShadowMap, tree: TileTreeReference, frustumPlanes: FrustumPlanes, processTiles: ProcessTiles): TileDrawArgs | undefined {\r\n class SolarShadowMapDrawArgs extends TileDrawArgs {\r\n private _useViewportMap?: boolean;\r\n private readonly _processTiles: ProcessTiles;\r\n\r\n constructor(private _mapFrustumPlanes: FrustumPlanes, private _shadowMap: SolarShadowMap, args: TileDrawArgs, process: ProcessTiles) {\r\n super(args);\r\n this._processTiles = process;\r\n }\r\n\r\n // The solar shadow projection is parallel - which can cause excessive tile selection if it is along an axis of an unbounded tile\r\n // tree such as the OSM buildings. Rev limit the selection here.\r\n public override get maxRealityTreeSelectionCount(): undefined | number { return 500; }\r\n\r\n public override processSelectedTiles(tiles: Tile[]): void {\r\n this._processTiles(tiles);\r\n }\r\n\r\n public override get frustumPlanes(): FrustumPlanes {\r\n if (true === this._useViewportMap)\r\n return super.frustumPlanes;\r\n else\r\n return this._mapFrustumPlanes;\r\n }\r\n\r\n public override get worldToViewMap(): Map4d {\r\n if (true === this._useViewportMap)\r\n return super.worldToViewMap;\r\n else\r\n return this._shadowMap.worldToViewMap;\r\n }\r\n\r\n public override drawGraphics(): void {\r\n const graphics = this.produceGraphics();\r\n if (graphics)\r\n this._shadowMap.addGraphic(graphics);\r\n }\r\n\r\n public override getPixelSize(tile: Tile): number {\r\n // For tiles that are part of the scene, size them based on the viewport frustum so that shadow map uses same resolution tiles as scene\r\n // - otherwise artifacts like shadow acne may result.\r\n // For tiles that are NOT part of the scene, size them based on the shadow frustum, not the viewport frustum\r\n // - otherwise excessive numbers of excessively detailed may be requested for the shadow map.\r\n if (undefined === this._useViewportMap) {\r\n this._useViewportMap = true;\r\n const vis = tile.computeVisibility(this);\r\n this._useViewportMap = TileVisibility.OutsideFrustum !== vis;\r\n }\r\n\r\n const size = super.getPixelSize(tile);\r\n this._useViewportMap = undefined;\r\n return size;\r\n }\r\n\r\n public static create(context: SceneContext, shadowMap: SolarShadowMap, tileTree: TileTreeReference, planes: FrustumPlanes, process: ProcessTiles) {\r\n const args = tileTree.createDrawArgs(context);\r\n return undefined !== args ? new SolarShadowMapDrawArgs(planes, shadowMap, args, process) : undefined;\r\n }\r\n }\r\n\r\n return SolarShadowMapDrawArgs.create(sceneContext, solarShadowMap, tree, frustumPlanes, processTiles);\r\n}\r\n\r\nconst shadowMapWidth = 4096; // size of original depth buffer map\r\nconst shadowMapHeight = shadowMapWidth; // TBD - Adjust for aspect ratio.\r\nconst evsmWidth = shadowMapWidth / 2; // EVSM buffer is 1/2 size each direction\r\nconst evsmHeight = shadowMapHeight / 2;\r\nconst postProjectionMatrixNpc = Matrix4d.createRowValues(/* Row 1 */ 0, 1, 0, 0, /* Row 1 */ 0, 0, 1, 0, /* Row 3 */ 1, 0, 0, 0, /* Row 4 */ 0, 0, 0, 1);\r\n\r\n// Bundles up the disposable, create-once-and-reuse members of a SolarShadowMap.\r\nclass Bundle implements WebGLDisposable {\r\n private constructor(\r\n public readonly depthTexture: Texture,\r\n public readonly shadowMapTexture: Texture,\r\n public readonly fbo: FrameBuffer,\r\n public readonly fboSM: FrameBuffer,\r\n public readonly evsmGeom: EVSMGeometry,\r\n public readonly renderCommands: RenderCommands) {\r\n }\r\n\r\n public static create(target: Target, stack: BranchStack, batch: BatchState): Bundle | undefined {\r\n const depthTextureHandle = System.instance.createDepthBuffer(shadowMapWidth, shadowMapHeight) as TextureHandle;\r\n if (undefined === depthTextureHandle)\r\n return undefined;\r\n\r\n let pixelDataType = GL.Texture.DataType.Float;\r\n switch (System.instance.capabilities.maxRenderType) {\r\n case RenderType.TextureFloat:\r\n break;\r\n case RenderType.TextureHalfFloat:\r\n if (System.instance.capabilities.isWebGL2) {\r\n pixelDataType = (System.instance.context as WebGL2RenderingContext).HALF_FLOAT;\r\n break;\r\n } else {\r\n const exthf = System.instance.capabilities.queryExtensionObject<OES_texture_half_float>(\"OES_texture_half_float\");\r\n if (undefined !== exthf) {\r\n pixelDataType = exthf.HALF_FLOAT_OES;\r\n break;\r\n }\r\n }\r\n /* falls through */\r\n default:\r\n return undefined;\r\n }\r\n\r\n const colorTextures: TextureHandle[] = [];\r\n\r\n // Check if the system can render to a depth texture without a renderable color texture bound as well.\r\n // If it cannot, add a renderable color texture to the framebuffer.\r\n // MacOS Safari exhibited this behavior, which necessitated this code path.\r\n if (!System.instance.capabilities.canRenderDepthWithoutColor) {\r\n const colTex = TextureHandle.createForAttachment(shadowMapWidth, shadowMapHeight, GL.Texture.Format.Rgba, pixelDataType);\r\n if (undefined === colTex)\r\n return undefined;\r\n colorTextures.push(colTex);\r\n }\r\n\r\n const fbo = FrameBuffer.create(colorTextures, depthTextureHandle);\r\n if (undefined === fbo)\r\n return undefined;\r\n\r\n // shadowMap texture is 1/4 size the depth texture (and averaged down when converting)\r\n const shadowMapTextureHandle = TextureHandle.createForAttachment(evsmWidth, evsmHeight, GL.Texture.Format.Rgba, pixelDataType);\r\n if (undefined === shadowMapTextureHandle)\r\n return undefined;\r\n\r\n const fboSM = FrameBuffer.create([shadowMapTextureHandle]);\r\n if (undefined === fboSM)\r\n return undefined;\r\n\r\n const depthTexture = new Texture({ ownership: \"external\", type: RenderTexture.Type.TileSection, handle: depthTextureHandle, transparency: TextureTransparency.Opaque });\r\n const evsmGeom = EVSMGeometry.createGeometry(depthTexture.texture.getHandle()!, shadowMapWidth, shadowMapHeight);\r\n if (undefined === evsmGeom)\r\n return undefined;\r\n\r\n const shadowMapTexture = new Texture({ type: RenderTexture.Type.Normal, ownership: \"external\", handle: shadowMapTextureHandle, transparency: TextureTransparency.Opaque });\r\n const renderCommands = new RenderCommands(target, stack, batch);\r\n return new Bundle(depthTexture, shadowMapTexture, fbo, fboSM, evsmGeom, renderCommands);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return this.depthTexture.isDisposed\r\n && this.shadowMapTexture.isDisposed\r\n && this.fbo.isDisposed\r\n && this.fboSM.isDisposed\r\n && this.evsmGeom.isDisposed;\r\n }\r\n\r\n public dispose(): void {\r\n dispose(this.depthTexture);\r\n dispose(this.shadowMapTexture);\r\n dispose(this.fbo);\r\n dispose(this.fboSM);\r\n dispose(this.evsmGeom);\r\n }\r\n}\r\n\r\n/** Describes the set of parameters which, when they change, require us to recreate the shadow map. */\r\nclass ShadowMapParams {\r\n public readonly direction = new Vector3d();\r\n public readonly viewFrustum = new Frustum();\r\n public settings: SolarShadowSettings;\r\n\r\n public constructor(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings) {\r\n direction.clone(this.direction);\r\n this.viewFrustum.setFrom(viewFrustum);\r\n this.settings = settings;\r\n }\r\n\r\n public update(viewFrustum: Frustum, direction: Vector3d, settings: SolarShadowSettings): void {\r\n this.settings = settings;\r\n this.viewFrustum.setFrom(viewFrustum);\r\n direction.clone(this.direction);\r\n }\r\n}\r\n\r\nconst defaultSunDirection = Vector3d.create(-1, -1, -1).normalize()!;\r\nconst scratchFrustum = new Frustum();\r\nconst scratchFrustumPlanes = FrustumPlanes.createEmpty();\r\n\r\nexport class SolarShadowMap implements RenderMemory.Consumer, WebGLDisposable {\r\n private _bundle?: Bundle;\r\n private _projectionMatrix = Matrix4d.createIdentity();\r\n private _graphics: RenderGraphic[] = [];\r\n private _shadowFrustum = new Frustum();\r\n private _isReady = false;\r\n private _isDrawing = false;\r\n private _enabled = false;\r\n private _params?: ShadowMapParams;\r\n private readonly _scratchRange = Range3d.createNull();\r\n private readonly _scratchTransform = Transform.createIdentity();\r\n\r\n private readonly _scratchViewFlags = new ViewFlags();\r\n private readonly _renderState: RenderState;\r\n private readonly _noZRenderState: RenderState;\r\n private readonly _batchState: BatchState;\r\n private _worldToViewMap = Map4d.createIdentity();\r\n private readonly _target: Target;\r\n\r\n // This exists chiefly for debugging. See ToggleShadowMapTilesTool.\r\n public onGraphicsChanged?: (graphics: RenderGraphic[]) => void;\r\n\r\n private getBundle(target: Target): Bundle | undefined {\r\n if (undefined === this._bundle) {\r\n this._bundle = Bundle.create(target, target.uniforms.branch.stack, this._batchState);\r\n assert(undefined !== this._bundle);\r\n }\r\n\r\n return this._bundle;\r\n }\r\n\r\n public get isReady() { return this._isReady; }\r\n public get isDrawing() { return this._isDrawing; }\r\n public get isEnabled() { return this._enabled; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n public get depthTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.depthTexture : undefined; }\r\n public get shadowMapTexture(): Texture | undefined { return undefined !== this._bundle ? this._bundle.shadowMapTexture : undefined; }\r\n public get settings(): SolarShadowSettings | undefined { return undefined !== this._params ? this._params.settings : undefined; }\r\n public get direction(): Vector3d | undefined { return undefined !== this._params ? this._params.direction : undefined; }\r\n public get frustum(): Frustum { return this._shadowFrustum; }\r\n public get worldToViewMap(): Map4d { return this._worldToViewMap; }\r\n public addGraphic(graphic: RenderGraphic) { this._graphics.push(graphic); }\r\n\r\n public constructor(target: Target) {\r\n this._target = target;\r\n this._renderState = new RenderState();\r\n this._renderState.flags.depthMask = true;\r\n this._renderState.flags.blend = false;\r\n this._renderState.flags.depthTest = true;\r\n\r\n this._noZRenderState = new RenderState();\r\n this._noZRenderState.flags.depthMask = false;\r\n\r\n this._batchState = new BatchState(target.uniforms.branch.stack);\r\n }\r\n\r\n public disable() {\r\n this._enabled = this._isReady = false;\r\n this._bundle = dispose(this._bundle);\r\n this.clearGraphics(true);\r\n this._target.uniforms.shadow.update();\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n const bundle = this._bundle;\r\n if (undefined !== bundle)\r\n stats.addShadowMap(bundle.depthTexture.bytesUsed + bundle.shadowMapTexture.bytesUsed);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._bundle && 0 === this._graphics.length; }\r\n\r\n public dispose() {\r\n this._bundle = dispose(this._bundle);\r\n this.clearGraphics(true);\r\n }\r\n\r\n private clearGraphics(notify: boolean) {\r\n for (const graphic of this._graphics)\r\n graphic.dispose();\r\n\r\n this._graphics.length = 0;\r\n if (notify)\r\n this.notifyGraphicsChanged();\r\n }\r\n\r\n private notifyGraphicsChanged(): void {\r\n if (undefined !== this.onGraphicsChanged)\r\n this.onGraphicsChanged(this._graphics);\r\n }\r\n\r\n public update(context: SceneContext | undefined) {\r\n this._isReady = false;\r\n this.clearGraphics(false);\r\n\r\n if (undefined === context || !context.viewport.view.isSpatialView()) {\r\n this.disable();\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n\r\n const view = context.viewport.view;\r\n const style = view.getDisplayStyle3d();\r\n const sunDirection = style.sunDirection ?? defaultSunDirection;\r\n\r\n const minimumHorizonDirection = -.01;\r\n if (sunDirection.z > minimumHorizonDirection) {\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n\r\n this._enabled = true;\r\n const viewFrustum = context.viewingSpace.getFrustum();\r\n const settings = style.settings.solarShadows;\r\n if (undefined === this._params)\r\n this._params = new ShadowMapParams(viewFrustum, sunDirection, settings);\r\n else\r\n this._params.update(viewFrustum, sunDirection, settings);\r\n\r\n const iModel = view.iModel;\r\n\r\n const worldToMapTransform = Transform.createRefs(Point3d.createZero(), Matrix3d.createRigidHeadsUp(this._params.direction.negate()).inverse()!);\r\n const worldToMap = Matrix4d.createTransform(worldToMapTransform);\r\n const mapToWorld = worldToMap.createInverse()!;\r\n\r\n // Start with entire project.\r\n const shadowRange = worldToMapTransform.multiplyRange(iModel.projectExtents);\r\n\r\n // Limit the map to only displayed models.\r\n const viewTileRange = Range3d.createNull();\r\n view.forEachTileTreeRef((ref) => {\r\n if (ref.castsShadows) {\r\n if (ref.isGlobal) {\r\n // A shadow-casting tile tree that spans the globe. Limit its range to the viewed extents.\r\n for (const p3 of viewFrustum.points) {\r\n const p4 = worldToMap.multiplyPoint3d(p3, 1);\r\n if (p4.w > 0.0001)\r\n viewTileRange.extendXYZW(p4.x, p4.y, p4.z, p4.w);\r\n else\r\n viewTileRange.high.z = Math.max(1.0, viewTileRange.high.z); // behind eye plane.\r\n }\r\n } else {\r\n ref.accumulateTransformedRange(viewTileRange, worldToMap, undefined);\r\n }\r\n }\r\n });\r\n\r\n if (!viewTileRange.isNull)\r\n viewTileRange.clone(shadowRange);\r\n\r\n // Expand shadow range to include both the shadowers and shadowed portion of background map.\r\n scratchFrustum.initFromRange(shadowRange);\r\n mapToWorld.multiplyPoint3dArrayQuietNormalize(scratchFrustum.points); // This frustum represents the shadwowing geometry. Intersect it with background geometry and expand the range depth to include that intersection.\r\n const backgroundMapGeometry = context.viewport.view.displayStyle.getBackgroundMapGeometry();\r\n if (undefined !== backgroundMapGeometry) {\r\n const backgroundDepthRange = backgroundMapGeometry.getFrustumIntersectionDepthRange(this._shadowFrustum, iModel.projectExtents);\r\n if (!backgroundDepthRange.isNull)\r\n shadowRange.low.z = Math.min(shadowRange.low.z, backgroundDepthRange.low);\r\n }\r\n\r\n this._params.viewFrustum.transformBy(worldToMapTransform, scratchFrustum);\r\n scratchFrustumPlanes.init(scratchFrustum);\r\n\r\n const viewIntersectShadowRange = Range3d.createNull();\r\n const viewClipPlanes = ConvexClipPlaneSet.createPlanes(scratchFrustumPlanes.planes);\r\n ClipUtilities.announceLoopsOfConvexClipPlaneSetIntersectRange(viewClipPlanes, shadowRange, (points: GrowableXYZArray) => {\r\n for (const point of points.getPoint3dArray())\r\n viewIntersectShadowRange.extendPoint(point);\r\n });\r\n if (viewIntersectShadowRange.isNull) {\r\n this.notifyGraphicsChanged();\r\n return;\r\n }\r\n viewIntersectShadowRange.high.z = shadowRange.high.z; // We need to include shadowing geometry that may be outside view (along the solar axis).\r\n\r\n this._shadowFrustum.initFromRange(viewIntersectShadowRange);\r\n mapToWorld.multiplyPoint3dArrayQuietNormalize(this._shadowFrustum.points);\r\n\r\n const tileRange = Range3d.createNull();\r\n scratchFrustumPlanes.init(this._shadowFrustum);\r\n view.forEachTileTreeRef(((ref) => {\r\n if (!ref.castsShadows)\r\n return;\r\n\r\n const drawArgs = createDrawArgs(context, this, ref, scratchFrustumPlanes, (tiles: Tile[]) => {\r\n for (const tile of tiles)\r\n tileRange.extendRange(tileToMapTransform.multiplyRange(tile.range, this._scratchRange));\r\n });\r\n\r\n if (undefined === drawArgs)\r\n return;\r\n\r\n const tileToMapTransform = worldToMapTransform.multiplyTransformTransform(drawArgs.location, this._scratchTransform);\r\n drawArgs.tree.draw(drawArgs);\r\n }));\r\n\r\n if (tileRange.isNull) {\r\n this.clearGraphics(true);\r\n } else if (this._graphics.length > 0) {\r\n // Avoid an uninvertible matrix on empty range...\r\n if (Geometry.isAlmostEqualNumber(shadowRange.low.x, shadowRange.high.x) ||\r\n Geometry.isAlmostEqualNumber(shadowRange.low.y, shadowRange.high.y) ||\r\n Geometry.isAlmostEqualNumber(shadowRange.low.z, shadowRange.high.z)) {\r\n this.clearGraphics(true);\r\n return;\r\n }\r\n\r\n const frustumMap = this._shadowFrustum.toMap4d();\r\n if (undefined === frustumMap) {\r\n this.clearGraphics(true);\r\n assert(false);\r\n return;\r\n }\r\n\r\n this._projectionMatrix = frustumMap.transform0.clone();\r\n\r\n const worldToNpc = postProjectionMatrixNpc.multiplyMatrixMatrix(this._projectionMatrix);\r\n const npcToView = Map4d.createBoxMap(Point3d.create(0, 0, 0), Point3d.create(1, 1, 1), Point3d.create(0, 0, 0), Point3d.create(shadowMapWidth, shadowMapHeight, 1))!;\r\n const npcToWorld = worldToNpc.createInverse();\r\n if (undefined === npcToWorld) {\r\n this.clearGraphics(true);\r\n return;\r\n }\r\n\r\n const worldToNpcMap = Map4d.createRefs(worldToNpc, npcToWorld);\r\n this._worldToViewMap = npcToView.multiplyMapMap(worldToNpcMap);\r\n }\r\n\r\n this._target.uniforms.shadow.update();\r\n this.notifyGraphicsChanged();\r\n }\r\n\r\n public draw(target: Target) {\r\n assert(this.isEnabled);\r\n\r\n if (this.isReady || 0 === this._graphics.length)\r\n return;\r\n\r\n const bundle = this.getBundle(target);\r\n if (undefined === bundle)\r\n return;\r\n\r\n this._isDrawing = true;\r\n\r\n const prevState = System.instance.currentRenderState.clone();\r\n const gl = System.instance.context;\r\n gl.viewport(0, 0, shadowMapWidth, shadowMapHeight);\r\n\r\n // NB: textures and materials are needed because their transparencies affect whether or not a surface casts shadows\r\n const viewFlags = target.currentViewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n transparency: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n });\r\n\r\n System.instance.applyRenderState(this._renderState);\r\n const prevPlan = target.plan;\r\n\r\n target.changeFrustum(this._shadowFrustum, this._shadowFrustum.getFraction(), true);\r\n target.uniforms.branch.changeRenderPlan(viewFlags, target.plan.is3d, target.plan.hline);\r\n\r\n const renderCommands = bundle.renderCommands;\r\n renderCommands.reset(target, target.uniforms.branch.stack, this._batchState);\r\n renderCommands.addGraphics(this._graphics);\r\n\r\n System.instance.frameBufferStack.execute(bundle.fbo, true, false, () => {\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n target.techniques.execute(target, renderCommands.getCommands(RenderPass.OpaquePlanar), RenderPass.PlanarClassification); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.\r\n target.techniques.execute(target, renderCommands.getCommands(RenderPass.OpaqueGeneral), RenderPass.PlanarClassification); // Draw these with RenderPass.PlanarClassification (rather than Opaque...) so that the pick ordering is avoided.\r\n });\r\n\r\n // copy depth buffer to EVSM shadow buffer and average down for AA effect\r\n gl.viewport(0, 0, evsmWidth, evsmHeight);\r\n System.instance.frameBufferStack.execute(bundle.fboSM, true, false, () => {\r\n System.instance.applyRenderState(this._noZRenderState);\r\n const params = getDrawParams(target, bundle.evsmGeom);\r\n target.techniques.draw(params);\r\n });\r\n\r\n // mipmap resulting EVSM texture and set filtering options\r\n System.instance.activateTexture2d(TextureUnit.ShadowMap, bundle.shadowMapTexture.texture.getHandle());\r\n gl.generateMipmap(gl.TEXTURE_2D);\r\n const fullFloat = System.instance.capabilities.maxRenderType === RenderType.TextureFloat;\r\n if (fullFloat && System.instance.capabilities.supportsTextureFloatLinear || !fullFloat && System.instance.capabilities.supportsTextureHalfFloatLinear) {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n }\r\n\r\n System.instance.setMaxAnisotropy(undefined);\r\n // target.recordPerformanceMetric(\"Compute EVSM\");\r\n\r\n this._batchState.reset(); // Reset the batch Ids...\r\n target.changeRenderPlan(prevPlan);\r\n\r\n System.instance.applyRenderState(prevState);\r\n System.instance.context.viewport(0, 0, target.viewRect.width, target.viewRect.height); // Restore viewport\r\n this.clearGraphics(false);\r\n this._isDrawing = false;\r\n this._isReady = true;\r\n }\r\n}\r\n"]}
@@ -204,12 +204,12 @@ class SurfaceGeometry extends MeshGeometry_1.MeshGeometry {
204
204
  // NB: We need this for opaque pass due to SolidFill (must compute transparency, discard below threshold, render opaque at or above threshold)
205
205
  case 2 /* OpaqueLinear */:
206
206
  case 3 /* OpaquePlanar */:
207
- case 4 /* OpaqueGeneral */:
208
- case 7 /* Translucent */:
209
- case 11 /* WorldOverlay */:
207
+ case 5 /* OpaqueGeneral */:
208
+ case 8 /* Translucent */:
209
+ case 12 /* WorldOverlay */:
210
210
  case 1 /* OpaqueLayers */:
211
- case 6 /* TranslucentLayers */:
212
- case 10 /* OverlayLayers */: {
211
+ case 7 /* TranslucentLayers */:
212
+ case 11 /* OverlayLayers */: {
213
213
  const mode = vf.renderMode;
214
214
  if (!this.isGlyph && (core_common_1.RenderMode.HiddenLine === mode || core_common_1.RenderMode.SolidFill === mode)) {
215
215
  flags[4 /* TransparencyThreshold */] = 1;
@@ -471,7 +471,7 @@ class Target extends RenderTarget_1.RenderTarget {
471
471
  get frameStatsCollector() { return this._frameStatsCollector; }
472
472
  assignFrameStatsCollector(collector) { this._frameStatsCollector = collector; }
473
473
  paintScene(sceneMilSecElapsed) {
474
- var _a;
474
+ var _a, _b;
475
475
  if (!this._dcAssigned)
476
476
  return;
477
477
  this._frameStatsCollector.beginTime("totalFrameTime");
@@ -486,7 +486,7 @@ class Target extends RenderTarget_1.RenderTarget {
486
486
  // Set this to true to visualize the output of readPixels()...useful for debugging pick.
487
487
  if (this.drawForReadPixels) {
488
488
  this.beginReadPixels(Pixel_1.Pixel.Selector.Feature);
489
- this.compositor.drawForReadPixels(this._renderCommands, this.graphics.overlays, (_a = this.graphics.decorations) === null || _a === void 0 ? void 0 : _a.worldOverlay);
489
+ this.compositor.drawForReadPixels(this._renderCommands, this.graphics.overlays, (_a = this.graphics.decorations) === null || _a === void 0 ? void 0 : _a.worldOverlay, (_b = this.graphics.decorations) === null || _b === void 0 ? void 0 : _b.viewOverlay);
490
490
  this.endReadPixels();
491
491
  }
492
492
  else {
@@ -515,10 +515,10 @@ class Target extends RenderTarget_1.RenderTarget {
515
515
  this._frameStatsCollector.beginTime("overlaysTime");
516
516
  this.beginPerfMetricRecord("Overlay Draws");
517
517
  this.beginPerfMetricRecord("World Overlays");
518
- this.drawPass(11 /* WorldOverlay */);
518
+ this.drawPass(12 /* WorldOverlay */);
519
519
  this.endPerfMetricRecord();
520
520
  this.beginPerfMetricRecord("View Overlays");
521
- this.drawPass(12 /* ViewOverlay */);
521
+ this.drawPass(13 /* ViewOverlay */);
522
522
  this.endPerfMetricRecord();
523
523
  this.endPerfMetricRecord(); // End "Overlay Draws"
524
524
  this._frameStatsCollector.endTime("overlaysTime");
@@ -544,7 +544,7 @@ class Target extends RenderTarget_1.RenderTarget {
544
544
  }
545
545
  getRenderState(pass) {
546
546
  // the other passes are handled by SceneCompositor
547
- (0, core_bentley_1.assert)(12 /* ViewOverlay */ === pass || 11 /* WorldOverlay */ === pass);
547
+ (0, core_bentley_1.assert)(13 /* ViewOverlay */ === pass || 12 /* WorldOverlay */ === pass);
548
548
  return this._overlayRenderState;
549
549
  }
550
550
  assignDC() {
@@ -672,7 +672,7 @@ class Target extends RenderTarget_1.RenderTarget {
672
672
  this._isReadPixelsInProgress = false;
673
673
  }
674
674
  readPixelsFromFbo(rect, selector) {
675
- var _a;
675
+ var _a, _b;
676
676
  // Create a culling frustum based on the input rect. We can't do this if a screen-space effect is going to move pixels around.
677
677
  let rectFrust;
678
678
  if (!this.renderSystem.screenSpaceEffects.shouldApply(this)) {
@@ -703,7 +703,7 @@ class Target extends RenderTarget_1.RenderTarget {
703
703
  }
704
704
  this.beginReadPixels(selector, rectFrust);
705
705
  // Draw the scene
706
- this.compositor.drawForReadPixels(this._renderCommands, this.graphics.overlays, (_a = this.graphics.decorations) === null || _a === void 0 ? void 0 : _a.worldOverlay);
706
+ this.compositor.drawForReadPixels(this._renderCommands, this.graphics.overlays, (_a = this.graphics.decorations) === null || _a === void 0 ? void 0 : _a.worldOverlay, (_b = this.graphics.decorations) === null || _b === void 0 ? void 0 : _b.viewOverlay);
707
707
  if (this.performanceMetrics && !this.performanceMetrics.gatherCurPerformanceMetrics) { // Only collect readPixels data if in disp-perf-test-app
708
708
  this.performanceMetrics.endOperation(); // End the 'CPU Total Time' operation
709
709
  if (this.performanceMetrics.gatherGlFinish && !this.renderSystem.isGLTimerSupported) {