@itwin/core-frontend 3.0.0-extension.0 → 3.1.0-dev.5

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 (1302) hide show
  1. package/CHANGELOG.md +89 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AccuSnap.js +3 -3
  4. package/lib/cjs/AccuSnap.js.map +1 -1
  5. package/lib/cjs/ApproximateTerrainHeights.d.ts.map +1 -1
  6. package/lib/cjs/ApproximateTerrainHeights.js +10 -5
  7. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  8. package/lib/cjs/BackgroundMapGeometry.d.ts +1 -1
  9. package/lib/cjs/BackgroundMapGeometry.d.ts.map +1 -1
  10. package/lib/cjs/BackgroundMapGeometry.js +2 -2
  11. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  12. package/lib/cjs/BingLocation.js +2 -2
  13. package/lib/cjs/BingLocation.js.map +1 -1
  14. package/lib/cjs/CheckpointConnection.js +1 -1
  15. package/lib/cjs/CheckpointConnection.js.map +1 -1
  16. package/lib/cjs/ContextRealityModelState.js +1 -1
  17. package/lib/cjs/ContextRealityModelState.js.map +1 -1
  18. package/lib/cjs/DisplayStyleState.d.ts +10 -163
  19. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  20. package/lib/cjs/DisplayStyleState.js +69 -350
  21. package/lib/cjs/DisplayStyleState.js.map +1 -1
  22. package/lib/cjs/DrawingViewState.d.ts +2 -2
  23. package/lib/cjs/DrawingViewState.d.ts.map +1 -1
  24. package/lib/cjs/DrawingViewState.js +3 -3
  25. package/lib/cjs/DrawingViewState.js.map +1 -1
  26. package/lib/cjs/ElementLocateManager.d.ts +5 -0
  27. package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
  28. package/lib/cjs/ElementLocateManager.js +12 -2
  29. package/lib/cjs/ElementLocateManager.js.map +1 -1
  30. package/lib/cjs/EmphasizeElements.d.ts.map +1 -1
  31. package/lib/cjs/EmphasizeElements.js +14 -4
  32. package/lib/cjs/EmphasizeElements.js.map +1 -1
  33. package/lib/cjs/EnvironmentDecorations.d.ts +39 -0
  34. package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -0
  35. package/lib/cjs/EnvironmentDecorations.js +200 -0
  36. package/lib/cjs/EnvironmentDecorations.js.map +1 -0
  37. package/lib/cjs/FrontendHubAccess.d.ts +11 -7
  38. package/lib/cjs/FrontendHubAccess.d.ts.map +1 -1
  39. package/lib/cjs/FrontendHubAccess.js.map +1 -1
  40. package/lib/cjs/FrontendLoggerCategory.d.ts +2 -8
  41. package/lib/cjs/FrontendLoggerCategory.d.ts.map +1 -1
  42. package/lib/cjs/FrontendLoggerCategory.js +2 -8
  43. package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
  44. package/lib/cjs/HitDetail.js +7 -7
  45. package/lib/cjs/HitDetail.js.map +1 -1
  46. package/lib/cjs/IModelApp.d.ts +31 -24
  47. package/lib/cjs/IModelApp.d.ts.map +1 -1
  48. package/lib/cjs/IModelApp.js +35 -36
  49. package/lib/cjs/IModelApp.js.map +1 -1
  50. package/lib/cjs/IModelConnection.d.ts +4 -6
  51. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  52. package/lib/cjs/IModelConnection.js +6 -11
  53. package/lib/cjs/IModelConnection.js.map +1 -1
  54. package/lib/cjs/IModeljs-css.d.ts.map +1 -1
  55. package/lib/cjs/IModeljs-css.js +8 -6
  56. package/lib/cjs/IModeljs-css.js.map +1 -1
  57. package/lib/cjs/ImageUtil.d.ts +3 -3
  58. package/lib/cjs/ImageUtil.d.ts.map +1 -1
  59. package/lib/cjs/ImageUtil.js +7 -4
  60. package/lib/cjs/ImageUtil.js.map +1 -1
  61. package/lib/cjs/LocalhostIpcApp.d.ts +2 -1
  62. package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
  63. package/lib/cjs/LocalhostIpcApp.js +21 -7
  64. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  65. package/lib/cjs/Marker.d.ts +9 -2
  66. package/lib/cjs/Marker.d.ts.map +1 -1
  67. package/lib/cjs/Marker.js +33 -5
  68. package/lib/cjs/Marker.js.map +1 -1
  69. package/lib/cjs/ModelState.js +1 -1
  70. package/lib/cjs/ModelState.js.map +1 -1
  71. package/lib/cjs/NativeApp.d.ts +3 -38
  72. package/lib/cjs/NativeApp.d.ts.map +1 -1
  73. package/lib/cjs/NativeApp.js +4 -73
  74. package/lib/cjs/NativeApp.js.map +1 -1
  75. package/lib/cjs/NoRenderApp.d.ts +0 -1
  76. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  77. package/lib/cjs/NoRenderApp.js +0 -1
  78. package/lib/cjs/NoRenderApp.js.map +1 -1
  79. package/lib/cjs/NotificationManager.d.ts +3 -1
  80. package/lib/cjs/NotificationManager.d.ts.map +1 -1
  81. package/lib/cjs/NotificationManager.js +2 -0
  82. package/lib/cjs/NotificationManager.js.map +1 -1
  83. package/lib/cjs/RealityDataSource.d.ts +59 -29
  84. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  85. package/lib/cjs/RealityDataSource.js +247 -94
  86. package/lib/cjs/RealityDataSource.js.map +1 -1
  87. package/lib/cjs/RenderScheduleState.d.ts +2 -0
  88. package/lib/cjs/RenderScheduleState.d.ts.map +1 -1
  89. package/lib/cjs/RenderScheduleState.js +10 -5
  90. package/lib/cjs/RenderScheduleState.js.map +1 -1
  91. package/lib/cjs/SheetViewState.d.ts +2 -2
  92. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  93. package/lib/cjs/SheetViewState.js +8 -9
  94. package/lib/cjs/SheetViewState.js.map +1 -1
  95. package/lib/cjs/SpatialViewState.d.ts +10 -2
  96. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  97. package/lib/cjs/SpatialViewState.js +12 -2
  98. package/lib/cjs/SpatialViewState.js.map +1 -1
  99. package/lib/cjs/SubCategoriesCache.js +1 -1
  100. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  101. package/lib/cjs/Tiles.d.ts +11 -1
  102. package/lib/cjs/Tiles.d.ts.map +1 -1
  103. package/lib/cjs/Tiles.js +7 -0
  104. package/lib/cjs/Tiles.js.map +1 -1
  105. package/lib/cjs/TwoWayViewportSync.d.ts +35 -6
  106. package/lib/cjs/TwoWayViewportSync.d.ts.map +1 -1
  107. package/lib/cjs/TwoWayViewportSync.js +51 -11
  108. package/lib/cjs/TwoWayViewportSync.js.map +1 -1
  109. package/lib/cjs/UserPreferences.d.ts +72 -0
  110. package/lib/cjs/UserPreferences.d.ts.map +1 -0
  111. package/lib/cjs/{extension/ExtensionLoader.js → UserPreferences.js} +1 -5
  112. package/lib/cjs/UserPreferences.js.map +1 -0
  113. package/lib/cjs/ViewContext.d.ts +3 -1
  114. package/lib/cjs/ViewContext.d.ts.map +1 -1
  115. package/lib/cjs/ViewContext.js +4 -0
  116. package/lib/cjs/ViewContext.js.map +1 -1
  117. package/lib/cjs/ViewCreator2d.js +3 -3
  118. package/lib/cjs/ViewCreator2d.js.map +1 -1
  119. package/lib/cjs/ViewCreator3d.d.ts +1 -1
  120. package/lib/cjs/ViewCreator3d.d.ts.map +1 -1
  121. package/lib/cjs/ViewCreator3d.js +4 -5
  122. package/lib/cjs/ViewCreator3d.js.map +1 -1
  123. package/lib/cjs/ViewManager.d.ts +6 -6
  124. package/lib/cjs/ViewManager.d.ts.map +1 -1
  125. package/lib/cjs/ViewManager.js +13 -13
  126. package/lib/cjs/ViewManager.js.map +1 -1
  127. package/lib/cjs/ViewState.d.ts +11 -5
  128. package/lib/cjs/ViewState.d.ts.map +1 -1
  129. package/lib/cjs/ViewState.js +18 -63
  130. package/lib/cjs/ViewState.js.map +1 -1
  131. package/lib/cjs/ViewingSpace.js +1 -1
  132. package/lib/cjs/ViewingSpace.js.map +1 -1
  133. package/lib/cjs/Viewport.d.ts +57 -11
  134. package/lib/cjs/Viewport.d.ts.map +1 -1
  135. package/lib/cjs/Viewport.js +55 -31
  136. package/lib/cjs/Viewport.js.map +1 -1
  137. package/lib/cjs/core-frontend.d.ts +17 -31
  138. package/lib/cjs/core-frontend.d.ts.map +1 -1
  139. package/lib/cjs/core-frontend.js +17 -31
  140. package/lib/cjs/core-frontend.js.map +1 -1
  141. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
  142. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  143. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
  144. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  145. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
  146. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  147. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +20 -5
  148. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  149. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +26 -3
  150. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  151. package/lib/cjs/quantity-formatting/QuantityFormatter.js +46 -7
  152. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  153. package/lib/cjs/render/FeatureSymbology.d.ts.map +1 -1
  154. package/lib/cjs/render/FeatureSymbology.js +3 -3
  155. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  156. package/lib/cjs/render/GraphicBranch.d.ts +18 -2
  157. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  158. package/lib/cjs/render/GraphicBranch.js +9 -1
  159. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  160. package/lib/cjs/render/GraphicBuilder.d.ts +7 -1
  161. package/lib/cjs/render/GraphicBuilder.d.ts.map +1 -1
  162. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  163. package/lib/cjs/render/MockRender.d.ts +3 -1
  164. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  165. package/lib/cjs/render/MockRender.js.map +1 -1
  166. package/lib/cjs/render/RenderMaterial.d.ts +61 -0
  167. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -0
  168. package/lib/cjs/render/RenderMaterial.js +10 -0
  169. package/lib/cjs/render/RenderMaterial.js.map +1 -0
  170. package/lib/cjs/render/RenderMemory.d.ts +21 -15
  171. package/lib/cjs/render/RenderMemory.d.ts.map +1 -1
  172. package/lib/cjs/render/RenderMemory.js +21 -15
  173. package/lib/cjs/render/RenderMemory.js.map +1 -1
  174. package/lib/cjs/render/RenderSystem.d.ts +44 -7
  175. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  176. package/lib/cjs/render/RenderSystem.js +32 -9
  177. package/lib/cjs/render/RenderSystem.js.map +1 -1
  178. package/lib/cjs/render/RenderTarget.d.ts +10 -2
  179. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  180. package/lib/cjs/render/RenderTarget.js +2 -1
  181. package/lib/cjs/render/RenderTarget.js.map +1 -1
  182. package/lib/cjs/render/RenderTexture.d.ts +2 -17
  183. package/lib/cjs/render/RenderTexture.d.ts.map +1 -1
  184. package/lib/cjs/render/RenderTexture.js +0 -17
  185. package/lib/cjs/render/RenderTexture.js.map +1 -1
  186. package/lib/cjs/render/primitives/EdgeParams.d.ts +84 -0
  187. package/lib/cjs/render/primitives/EdgeParams.d.ts.map +1 -0
  188. package/lib/cjs/render/primitives/EdgeParams.js +220 -0
  189. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -0
  190. package/lib/cjs/render/primitives/PointStringParams.d.ts +16 -0
  191. package/lib/cjs/render/primitives/PointStringParams.d.ts.map +1 -0
  192. package/lib/cjs/render/primitives/PointStringParams.js +43 -0
  193. package/lib/cjs/render/primitives/PointStringParams.js.map +1 -0
  194. package/lib/cjs/render/primitives/PolylineParams.d.ts +44 -0
  195. package/lib/cjs/render/primitives/PolylineParams.d.ts.map +1 -0
  196. package/lib/cjs/render/primitives/PolylineParams.js +205 -0
  197. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -0
  198. package/lib/cjs/render/primitives/Primitives.d.ts +1 -1
  199. package/lib/cjs/render/primitives/Primitives.d.ts.map +1 -1
  200. package/lib/cjs/render/primitives/Primitives.js.map +1 -1
  201. package/lib/cjs/render/primitives/SurfaceParams.d.ts +46 -0
  202. package/lib/cjs/render/primitives/SurfaceParams.d.ts.map +1 -0
  203. package/lib/cjs/render/primitives/SurfaceParams.js +42 -0
  204. package/lib/cjs/render/primitives/SurfaceParams.js.map +1 -0
  205. package/lib/cjs/render/primitives/VertexTable.d.ts +4 -123
  206. package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
  207. package/lib/cjs/render/primitives/VertexTable.js +16 -352
  208. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  209. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts +2 -0
  210. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  211. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +2 -1
  212. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  213. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
  214. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +1 -0
  215. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  216. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +2 -2
  217. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  218. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +3 -3
  219. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  220. package/lib/cjs/render/primitives/mesh/TerrainMeshPrimitive.d.ts +1 -1
  221. package/lib/cjs/render/primitives/mesh/TerrainMeshPrimitive.js +1 -1
  222. package/lib/cjs/render/primitives/mesh/TerrainMeshPrimitive.js.map +1 -1
  223. package/lib/cjs/render/webgl/AttributeMap.js +5 -5
  224. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  225. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  226. package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
  227. package/lib/cjs/render/webgl/BranchUniforms.js +8 -5
  228. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  229. package/lib/cjs/render/webgl/CachedGeometry.d.ts +16 -11
  230. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  231. package/lib/cjs/render/webgl/CachedGeometry.js +26 -23
  232. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  233. package/lib/cjs/render/webgl/DrawCommand.d.ts +2 -3
  234. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  235. package/lib/cjs/render/webgl/DrawCommand.js +6 -4
  236. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  237. package/lib/cjs/render/webgl/EdgeGeometry.d.ts +73 -0
  238. package/lib/cjs/render/webgl/EdgeGeometry.d.ts.map +1 -0
  239. package/lib/cjs/render/webgl/EdgeGeometry.js +141 -0
  240. package/lib/cjs/render/webgl/EdgeGeometry.js.map +1 -0
  241. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +2 -0
  242. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  243. package/lib/cjs/render/webgl/FeatureOverrides.js +11 -3
  244. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  245. package/lib/cjs/render/webgl/FloatRGBA.d.ts.map +1 -1
  246. package/lib/cjs/render/webgl/FloatRGBA.js +13 -11
  247. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  248. package/lib/cjs/render/webgl/Graphic.d.ts +13 -0
  249. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  250. package/lib/cjs/render/webgl/Graphic.js +41 -3
  251. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  252. package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts +51 -0
  253. package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -0
  254. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +90 -0
  255. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -0
  256. package/lib/cjs/render/webgl/InstancedGeometry.d.ts +6 -5
  257. package/lib/cjs/render/webgl/InstancedGeometry.d.ts.map +1 -1
  258. package/lib/cjs/render/webgl/InstancedGeometry.js +2 -1
  259. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  260. package/lib/cjs/render/webgl/LightingUniforms.d.ts +1 -0
  261. package/lib/cjs/render/webgl/LightingUniforms.d.ts.map +1 -1
  262. package/lib/cjs/render/webgl/LightingUniforms.js +4 -1
  263. package/lib/cjs/render/webgl/LightingUniforms.js.map +1 -1
  264. package/lib/cjs/render/webgl/Material.d.ts +1 -1
  265. package/lib/cjs/render/webgl/Material.d.ts.map +1 -1
  266. package/lib/cjs/render/webgl/Material.js +2 -0
  267. package/lib/cjs/render/webgl/Material.js.map +1 -1
  268. package/lib/cjs/render/webgl/Mesh.d.ts +8 -162
  269. package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
  270. package/lib/cjs/render/webgl/Mesh.js +18 -458
  271. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  272. package/lib/cjs/render/webgl/MeshData.d.ts +38 -0
  273. package/lib/cjs/render/webgl/MeshData.d.ts.map +1 -0
  274. package/lib/cjs/render/webgl/MeshData.js +66 -0
  275. package/lib/cjs/render/webgl/MeshData.js.map +1 -0
  276. package/lib/cjs/render/webgl/MeshGeometry.d.ts +38 -0
  277. package/lib/cjs/render/webgl/MeshGeometry.d.ts.map +1 -0
  278. package/lib/cjs/render/webgl/MeshGeometry.js +59 -0
  279. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -0
  280. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  281. package/lib/cjs/render/webgl/PlanarClassifier.js +8 -4
  282. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  283. package/lib/cjs/render/webgl/PlanarGrid.d.ts +2 -3
  284. package/lib/cjs/render/webgl/PlanarGrid.d.ts.map +1 -1
  285. package/lib/cjs/render/webgl/PlanarGrid.js +3 -3
  286. package/lib/cjs/render/webgl/PlanarGrid.js.map +1 -1
  287. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  288. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -0
  289. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  290. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  291. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  292. package/lib/cjs/render/webgl/PointCloud.js +2 -2
  293. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  294. package/lib/cjs/render/webgl/PointString.d.ts +3 -3
  295. package/lib/cjs/render/webgl/PointString.d.ts.map +1 -1
  296. package/lib/cjs/render/webgl/PointString.js +1 -1
  297. package/lib/cjs/render/webgl/PointString.js.map +1 -1
  298. package/lib/cjs/render/webgl/Polyline.d.ts +3 -3
  299. package/lib/cjs/render/webgl/Polyline.d.ts.map +1 -1
  300. package/lib/cjs/render/webgl/Polyline.js +6 -6
  301. package/lib/cjs/render/webgl/Polyline.js.map +1 -1
  302. package/lib/cjs/render/webgl/Primitive.d.ts +2 -2
  303. package/lib/cjs/render/webgl/Primitive.d.ts.map +1 -1
  304. package/lib/cjs/render/webgl/Primitive.js +5 -5
  305. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  306. package/lib/cjs/render/webgl/RealityMesh.d.ts +2 -2
  307. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  308. package/lib/cjs/render/webgl/RealityMesh.js +9 -9
  309. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  310. package/lib/cjs/render/webgl/RenderCommands.d.ts +6 -2
  311. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  312. package/lib/cjs/render/webgl/RenderCommands.js +81 -48
  313. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  314. package/lib/cjs/render/webgl/RenderFlags.d.ts +48 -1
  315. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  316. package/lib/cjs/render/webgl/RenderFlags.js +64 -2
  317. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  318. package/lib/cjs/render/webgl/SceneCompositor.js +10 -9
  319. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  320. package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
  321. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +23 -20
  322. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  323. package/lib/cjs/render/webgl/ShaderBuilder.js +38 -32
  324. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  325. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -1
  326. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  327. package/lib/cjs/render/webgl/ShaderProgram.js +4 -4
  328. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  329. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  330. package/lib/cjs/render/webgl/SolarShadowMap.js +4 -3
  331. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  332. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts +54 -0
  333. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -0
  334. package/lib/cjs/render/webgl/SurfaceGeometry.js +248 -0
  335. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -0
  336. package/lib/cjs/render/webgl/System.d.ts +13 -10
  337. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  338. package/lib/cjs/render/webgl/System.js +75 -21
  339. package/lib/cjs/render/webgl/System.js.map +1 -1
  340. package/lib/cjs/render/webgl/Target.d.ts +13 -1
  341. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  342. package/lib/cjs/render/webgl/Target.js +88 -2
  343. package/lib/cjs/render/webgl/Target.js.map +1 -1
  344. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  345. package/lib/cjs/render/webgl/Technique.js +112 -119
  346. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  347. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -1
  348. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  349. package/lib/cjs/render/webgl/TechniqueFlags.js +10 -1
  350. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  351. package/lib/cjs/render/webgl/TechniqueId.d.ts +29 -28
  352. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  353. package/lib/cjs/render/webgl/TechniqueId.js +7 -7
  354. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  355. package/lib/cjs/render/webgl/Texture.d.ts +15 -12
  356. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  357. package/lib/cjs/render/webgl/Texture.js +26 -23
  358. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  359. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  360. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +83 -18
  361. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  362. package/lib/cjs/render/webgl/glsl/Animation.js +1 -1
  363. package/lib/cjs/render/webgl/glsl/Blur.js +1 -1
  364. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -2
  365. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -2
  366. package/lib/cjs/render/webgl/glsl/Color.js +1 -1
  367. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +1 -1
  368. package/lib/cjs/render/webgl/glsl/CombineTextures.js +1 -1
  369. package/lib/cjs/render/webgl/glsl/Composite.js +1 -1
  370. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  371. package/lib/cjs/render/webgl/glsl/CopyColor.js +17 -2
  372. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  373. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +2 -2
  374. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  375. package/lib/cjs/render/webgl/glsl/CopyStencil.js +10 -13
  376. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  377. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +2 -2
  378. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  379. package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -1
  380. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  381. package/lib/cjs/render/webgl/glsl/Edge.js +132 -14
  382. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  383. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  384. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +43 -21
  385. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  386. package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
  387. package/lib/cjs/render/webgl/glsl/Fragment.js +19 -11
  388. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  389. package/lib/cjs/render/webgl/glsl/Lighting.d.ts.map +1 -1
  390. package/lib/cjs/render/webgl/glsl/Lighting.js +16 -2
  391. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  392. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
  393. package/lib/cjs/render/webgl/glsl/LookupTable.d.ts +4 -2
  394. package/lib/cjs/render/webgl/glsl/LookupTable.d.ts.map +1 -1
  395. package/lib/cjs/render/webgl/glsl/LookupTable.js +7 -3
  396. package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
  397. package/lib/cjs/render/webgl/glsl/PlanarClassification.d.ts.map +1 -1
  398. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +13 -4
  399. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  400. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -2
  401. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  402. package/lib/cjs/render/webgl/glsl/PointCloud.js +2 -2
  403. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  404. package/lib/cjs/render/webgl/glsl/PointString.js +1 -1
  405. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  406. package/lib/cjs/render/webgl/glsl/Polyline.js +1 -1
  407. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  408. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  409. package/lib/cjs/render/webgl/glsl/RealityMesh.js +9 -6
  410. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  411. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +2 -2
  412. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  413. package/lib/cjs/render/webgl/glsl/SkyBox.js +2 -2
  414. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  415. package/lib/cjs/render/webgl/glsl/SkySphere.js +2 -2
  416. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  417. package/lib/cjs/render/webgl/glsl/Surface.js +41 -16
  418. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  419. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -2
  420. package/lib/cjs/render/webgl/glsl/Vertex.js +2 -2
  421. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  422. package/lib/cjs/render/webgl/glsl/ViewportQuad.js +1 -1
  423. package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
  424. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts +9 -0
  425. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
  426. package/lib/cjs/render/webgl/glsl/Wiremesh.js +40 -0
  427. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -0
  428. package/lib/cjs/render-primitives.d.ts +5 -1
  429. package/lib/cjs/render-primitives.d.ts.map +1 -1
  430. package/lib/cjs/render-primitives.js +5 -1
  431. package/lib/cjs/render-primitives.js.map +1 -1
  432. package/lib/cjs/request/Request.d.ts +167 -0
  433. package/lib/cjs/request/Request.d.ts.map +1 -0
  434. package/lib/cjs/request/Request.js +315 -0
  435. package/lib/cjs/request/Request.js.map +1 -0
  436. package/lib/cjs/tile/B3dmReader.d.ts +2 -1
  437. package/lib/cjs/tile/B3dmReader.d.ts.map +1 -1
  438. package/lib/cjs/tile/B3dmReader.js +11 -7
  439. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  440. package/lib/cjs/tile/CesiumAssetProvider.d.ts +14 -0
  441. package/lib/cjs/tile/CesiumAssetProvider.d.ts.map +1 -0
  442. package/lib/cjs/tile/CesiumAssetProvider.js +35 -0
  443. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -0
  444. package/lib/cjs/tile/ContextShareProvider.d.ts +22 -0
  445. package/lib/cjs/tile/ContextShareProvider.d.ts.map +1 -0
  446. package/lib/cjs/tile/ContextShareProvider.js +129 -0
  447. package/lib/cjs/tile/ContextShareProvider.js.map +1 -0
  448. package/lib/cjs/tile/DynamicIModelTile.js +9 -3
  449. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  450. package/lib/cjs/tile/GltfReader.d.ts +594 -55
  451. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  452. package/lib/cjs/tile/GltfReader.js +703 -264
  453. package/lib/cjs/tile/GltfReader.js.map +1 -1
  454. package/lib/cjs/tile/I3dmReader.d.ts +2 -1
  455. package/lib/cjs/tile/I3dmReader.d.ts.map +1 -1
  456. package/lib/cjs/tile/I3dmReader.js +10 -6
  457. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  458. package/lib/cjs/tile/IModelTile.d.ts.map +1 -1
  459. package/lib/cjs/tile/IModelTile.js +14 -7
  460. package/lib/cjs/tile/IModelTile.js.map +1 -1
  461. package/lib/cjs/tile/IModelTileTree.d.ts +8 -0
  462. package/lib/cjs/tile/IModelTileTree.d.ts.map +1 -1
  463. package/lib/cjs/tile/IModelTileTree.js +36 -1
  464. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  465. package/lib/cjs/tile/ImdlReader.d.ts +365 -10
  466. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  467. package/lib/cjs/tile/ImdlReader.js +202 -68
  468. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  469. package/lib/cjs/tile/OrbitGtTileTree.d.ts +0 -9
  470. package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
  471. package/lib/cjs/tile/OrbitGtTileTree.js +10 -20
  472. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  473. package/lib/cjs/tile/PrimaryTileTree.d.ts +14 -5
  474. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  475. package/lib/cjs/tile/PrimaryTileTree.js +69 -14
  476. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  477. package/lib/cjs/tile/RealityModelTileTree.d.ts +2 -41
  478. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  479. package/lib/cjs/tile/RealityModelTileTree.js +57 -217
  480. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  481. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -0
  482. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  483. package/lib/cjs/tile/RealityTileLoader.js +4 -3
  484. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  485. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  486. package/lib/cjs/tile/Tile.js +5 -1
  487. package/lib/cjs/tile/Tile.js.map +1 -1
  488. package/lib/cjs/tile/TileAdmin.d.ts +37 -4
  489. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  490. package/lib/cjs/tile/TileAdmin.js +18 -12
  491. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  492. package/lib/cjs/tile/TileDrawArgs.d.ts +11 -0
  493. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  494. package/lib/cjs/tile/TileDrawArgs.js +6 -1
  495. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  496. package/lib/cjs/tile/TileTreeReference.d.ts +2 -0
  497. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  498. package/lib/cjs/tile/TileTreeReference.js +5 -0
  499. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  500. package/lib/cjs/tile/internal.d.ts +4 -1
  501. package/lib/cjs/tile/internal.d.ts.map +1 -1
  502. package/lib/cjs/tile/internal.js +4 -1
  503. package/lib/cjs/tile/internal.js.map +1 -1
  504. package/lib/cjs/tile/map/ArcGISTileMap.d.ts +22 -0
  505. package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -0
  506. package/lib/cjs/tile/map/ArcGISTileMap.js +177 -0
  507. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -0
  508. package/lib/cjs/tile/map/ArcGisTokenGenerator.js +3 -3
  509. package/lib/cjs/tile/map/ArcGisTokenGenerator.js.map +1 -1
  510. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +1 -1
  511. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  512. package/lib/cjs/tile/map/ArcGisUtilities.js +18 -10
  513. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  514. package/lib/cjs/tile/map/BingElevation.js +4 -4
  515. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  516. package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
  517. package/lib/cjs/tile/map/CesiumTerrainProvider.js +27 -15
  518. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  519. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -2
  520. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  521. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +23 -44
  522. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  523. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +3 -3
  524. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  525. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +8 -0
  526. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  527. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +51 -10
  528. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  529. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +6 -1
  530. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  531. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +63 -21
  532. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  533. package/lib/cjs/tile/map/ImageryTileTree.d.ts +4 -4
  534. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  535. package/lib/cjs/tile/map/ImageryTileTree.js +20 -24
  536. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  537. package/lib/cjs/tile/map/MapCartoRectangle.js +1 -1
  538. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  539. package/lib/cjs/tile/map/MapLayerAuthentication.d.ts +20 -0
  540. package/lib/cjs/tile/map/MapLayerAuthentication.d.ts.map +1 -0
  541. package/lib/cjs/tile/map/MapLayerAuthentication.js +18 -0
  542. package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -0
  543. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +6 -3
  544. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  545. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +3 -1
  546. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  547. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +2 -2
  548. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  549. package/lib/cjs/tile/map/MapLayerImageryFormats.js +21 -8
  550. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  551. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +18 -6
  552. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  553. package/lib/cjs/tile/map/MapLayerImageryProvider.js +47 -14
  554. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  555. package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -11
  556. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  557. package/lib/cjs/tile/map/MapLayerSources.js +5 -34
  558. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  559. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  560. package/lib/cjs/tile/map/MapTile.js +4 -3
  561. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  562. package/lib/cjs/tile/map/MapTileLoader.js +2 -2
  563. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  564. package/lib/cjs/tile/map/MapTileTree.d.ts +1 -1
  565. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  566. package/lib/cjs/tile/map/MapTileTree.js +30 -21
  567. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  568. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +3 -3
  569. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  570. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +4 -6
  571. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  572. package/lib/cjs/tile/map/MapTilingScheme.d.ts +7 -2
  573. package/lib/cjs/tile/map/MapTilingScheme.d.ts.map +1 -1
  574. package/lib/cjs/tile/map/MapTilingScheme.js +21 -8
  575. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  576. package/lib/cjs/tile/map/QuadId.d.ts +1 -0
  577. package/lib/cjs/tile/map/QuadId.d.ts.map +1 -1
  578. package/lib/cjs/tile/map/QuadId.js +2 -1
  579. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  580. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +1 -1
  581. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  582. package/lib/cjs/tile/map/WmsCapabilities.d.ts +8 -1
  583. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  584. package/lib/cjs/tile/map/WmsCapabilities.js +39 -5
  585. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  586. package/lib/cjs/tile/map/WmtsCapabilities.d.ts +11 -1
  587. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  588. package/lib/cjs/tile/map/WmtsCapabilities.js +23 -9
  589. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  590. package/lib/cjs/tools/EditManipulator.d.ts.map +1 -1
  591. package/lib/cjs/tools/EditManipulator.js +1 -1
  592. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  593. package/lib/cjs/tools/ElementSetTool.js +2 -2
  594. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  595. package/lib/cjs/tools/PrimitiveTool.d.ts +4 -4
  596. package/lib/cjs/tools/PrimitiveTool.d.ts.map +1 -1
  597. package/lib/cjs/tools/PrimitiveTool.js +2 -2
  598. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  599. package/lib/cjs/tools/Tool.d.ts +29 -1
  600. package/lib/cjs/tools/Tool.d.ts.map +1 -1
  601. package/lib/cjs/tools/Tool.js +66 -0
  602. package/lib/cjs/tools/Tool.js.map +1 -1
  603. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  604. package/lib/cjs/tools/ToolAdmin.js +20 -10
  605. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  606. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  607. package/lib/cjs/tools/ViewTool.js +3 -11
  608. package/lib/cjs/tools/ViewTool.js.map +1 -1
  609. package/lib/cjs/webgl.d.ts +5 -0
  610. package/lib/cjs/webgl.d.ts.map +1 -1
  611. package/lib/cjs/webgl.js +5 -0
  612. package/lib/cjs/webgl.js.map +1 -1
  613. package/lib/esm/AccuSnap.js +3 -3
  614. package/lib/esm/AccuSnap.js.map +1 -1
  615. package/lib/esm/ApproximateTerrainHeights.d.ts.map +1 -1
  616. package/lib/esm/ApproximateTerrainHeights.js +10 -5
  617. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  618. package/lib/esm/BackgroundMapGeometry.d.ts +1 -1
  619. package/lib/esm/BackgroundMapGeometry.d.ts.map +1 -1
  620. package/lib/esm/BackgroundMapGeometry.js +2 -2
  621. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  622. package/lib/esm/BingLocation.js +1 -1
  623. package/lib/esm/BingLocation.js.map +1 -1
  624. package/lib/esm/CheckpointConnection.js +1 -1
  625. package/lib/esm/CheckpointConnection.js.map +1 -1
  626. package/lib/esm/ContextRealityModelState.js +1 -1
  627. package/lib/esm/ContextRealityModelState.js.map +1 -1
  628. package/lib/esm/DisplayStyleState.d.ts +10 -163
  629. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  630. package/lib/esm/DisplayStyleState.js +70 -346
  631. package/lib/esm/DisplayStyleState.js.map +1 -1
  632. package/lib/esm/DrawingViewState.d.ts +2 -2
  633. package/lib/esm/DrawingViewState.d.ts.map +1 -1
  634. package/lib/esm/DrawingViewState.js +3 -3
  635. package/lib/esm/DrawingViewState.js.map +1 -1
  636. package/lib/esm/ElementLocateManager.d.ts +5 -0
  637. package/lib/esm/ElementLocateManager.d.ts.map +1 -1
  638. package/lib/esm/ElementLocateManager.js +12 -2
  639. package/lib/esm/ElementLocateManager.js.map +1 -1
  640. package/lib/esm/EmphasizeElements.d.ts.map +1 -1
  641. package/lib/esm/EmphasizeElements.js +14 -4
  642. package/lib/esm/EmphasizeElements.js.map +1 -1
  643. package/lib/esm/EnvironmentDecorations.d.ts +39 -0
  644. package/lib/esm/EnvironmentDecorations.d.ts.map +1 -0
  645. package/lib/esm/EnvironmentDecorations.js +196 -0
  646. package/lib/esm/EnvironmentDecorations.js.map +1 -0
  647. package/lib/esm/FrontendHubAccess.d.ts +11 -7
  648. package/lib/esm/FrontendHubAccess.d.ts.map +1 -1
  649. package/lib/esm/FrontendHubAccess.js.map +1 -1
  650. package/lib/esm/FrontendLoggerCategory.d.ts +2 -8
  651. package/lib/esm/FrontendLoggerCategory.d.ts.map +1 -1
  652. package/lib/esm/FrontendLoggerCategory.js +2 -8
  653. package/lib/esm/FrontendLoggerCategory.js.map +1 -1
  654. package/lib/esm/HitDetail.js +7 -7
  655. package/lib/esm/HitDetail.js.map +1 -1
  656. package/lib/esm/IModelApp.d.ts +31 -24
  657. package/lib/esm/IModelApp.d.ts.map +1 -1
  658. package/lib/esm/IModelApp.js +34 -35
  659. package/lib/esm/IModelApp.js.map +1 -1
  660. package/lib/esm/IModelConnection.d.ts +4 -6
  661. package/lib/esm/IModelConnection.d.ts.map +1 -1
  662. package/lib/esm/IModelConnection.js +6 -11
  663. package/lib/esm/IModelConnection.js.map +1 -1
  664. package/lib/esm/IModeljs-css.d.ts.map +1 -1
  665. package/lib/esm/IModeljs-css.js +8 -6
  666. package/lib/esm/IModeljs-css.js.map +1 -1
  667. package/lib/esm/ImageUtil.d.ts +3 -3
  668. package/lib/esm/ImageUtil.d.ts.map +1 -1
  669. package/lib/esm/ImageUtil.js +7 -4
  670. package/lib/esm/ImageUtil.js.map +1 -1
  671. package/lib/esm/LocalhostIpcApp.d.ts +2 -1
  672. package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
  673. package/lib/esm/LocalhostIpcApp.js +22 -8
  674. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  675. package/lib/esm/Marker.d.ts +9 -2
  676. package/lib/esm/Marker.d.ts.map +1 -1
  677. package/lib/esm/Marker.js +34 -6
  678. package/lib/esm/Marker.js.map +1 -1
  679. package/lib/esm/ModelState.js +1 -1
  680. package/lib/esm/ModelState.js.map +1 -1
  681. package/lib/esm/NativeApp.d.ts +3 -38
  682. package/lib/esm/NativeApp.d.ts.map +1 -1
  683. package/lib/esm/NativeApp.js +1 -69
  684. package/lib/esm/NativeApp.js.map +1 -1
  685. package/lib/esm/NoRenderApp.d.ts +0 -1
  686. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  687. package/lib/esm/NoRenderApp.js +0 -1
  688. package/lib/esm/NoRenderApp.js.map +1 -1
  689. package/lib/esm/NotificationManager.d.ts +3 -1
  690. package/lib/esm/NotificationManager.d.ts.map +1 -1
  691. package/lib/esm/NotificationManager.js +2 -0
  692. package/lib/esm/NotificationManager.js.map +1 -1
  693. package/lib/esm/RealityDataSource.d.ts +59 -29
  694. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  695. package/lib/esm/RealityDataSource.js +247 -92
  696. package/lib/esm/RealityDataSource.js.map +1 -1
  697. package/lib/esm/RenderScheduleState.d.ts +2 -0
  698. package/lib/esm/RenderScheduleState.d.ts.map +1 -1
  699. package/lib/esm/RenderScheduleState.js +8 -4
  700. package/lib/esm/RenderScheduleState.js.map +1 -1
  701. package/lib/esm/SheetViewState.d.ts +2 -2
  702. package/lib/esm/SheetViewState.d.ts.map +1 -1
  703. package/lib/esm/SheetViewState.js +8 -9
  704. package/lib/esm/SheetViewState.js.map +1 -1
  705. package/lib/esm/SpatialViewState.d.ts +10 -2
  706. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  707. package/lib/esm/SpatialViewState.js +12 -2
  708. package/lib/esm/SpatialViewState.js.map +1 -1
  709. package/lib/esm/SubCategoriesCache.js +1 -1
  710. package/lib/esm/SubCategoriesCache.js.map +1 -1
  711. package/lib/esm/Tiles.d.ts +11 -1
  712. package/lib/esm/Tiles.d.ts.map +1 -1
  713. package/lib/esm/Tiles.js +7 -0
  714. package/lib/esm/Tiles.js.map +1 -1
  715. package/lib/esm/TwoWayViewportSync.d.ts +35 -6
  716. package/lib/esm/TwoWayViewportSync.d.ts.map +1 -1
  717. package/lib/esm/TwoWayViewportSync.js +49 -10
  718. package/lib/esm/TwoWayViewportSync.js.map +1 -1
  719. package/lib/esm/UserPreferences.d.ts +72 -0
  720. package/lib/esm/UserPreferences.d.ts.map +1 -0
  721. package/lib/esm/{extension/ExtensionLoader.js → UserPreferences.js} +1 -5
  722. package/lib/esm/UserPreferences.js.map +1 -0
  723. package/lib/esm/ViewContext.d.ts +3 -1
  724. package/lib/esm/ViewContext.d.ts.map +1 -1
  725. package/lib/esm/ViewContext.js +4 -0
  726. package/lib/esm/ViewContext.js.map +1 -1
  727. package/lib/esm/ViewCreator2d.js +3 -3
  728. package/lib/esm/ViewCreator2d.js.map +1 -1
  729. package/lib/esm/ViewCreator3d.d.ts +1 -1
  730. package/lib/esm/ViewCreator3d.d.ts.map +1 -1
  731. package/lib/esm/ViewCreator3d.js +5 -6
  732. package/lib/esm/ViewCreator3d.js.map +1 -1
  733. package/lib/esm/ViewManager.d.ts +6 -6
  734. package/lib/esm/ViewManager.d.ts.map +1 -1
  735. package/lib/esm/ViewManager.js +13 -13
  736. package/lib/esm/ViewManager.js.map +1 -1
  737. package/lib/esm/ViewState.d.ts +11 -5
  738. package/lib/esm/ViewState.d.ts.map +1 -1
  739. package/lib/esm/ViewState.js +21 -66
  740. package/lib/esm/ViewState.js.map +1 -1
  741. package/lib/esm/ViewingSpace.js +1 -1
  742. package/lib/esm/ViewingSpace.js.map +1 -1
  743. package/lib/esm/Viewport.d.ts +57 -11
  744. package/lib/esm/Viewport.d.ts.map +1 -1
  745. package/lib/esm/Viewport.js +56 -32
  746. package/lib/esm/Viewport.js.map +1 -1
  747. package/lib/esm/core-frontend.d.ts +17 -31
  748. package/lib/esm/core-frontend.d.ts.map +1 -1
  749. package/lib/esm/core-frontend.js +17 -31
  750. package/lib/esm/core-frontend.js.map +1 -1
  751. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
  752. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  753. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
  754. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  755. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
  756. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  757. package/lib/esm/quantity-formatting/BasicUnitsProvider.js +18 -4
  758. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  759. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +26 -3
  760. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  761. package/lib/esm/quantity-formatting/QuantityFormatter.js +45 -7
  762. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  763. package/lib/esm/render/FeatureSymbology.d.ts.map +1 -1
  764. package/lib/esm/render/FeatureSymbology.js +3 -3
  765. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  766. package/lib/esm/render/GraphicBranch.d.ts +18 -2
  767. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  768. package/lib/esm/render/GraphicBranch.js +8 -0
  769. package/lib/esm/render/GraphicBranch.js.map +1 -1
  770. package/lib/esm/render/GraphicBuilder.d.ts +7 -1
  771. package/lib/esm/render/GraphicBuilder.d.ts.map +1 -1
  772. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  773. package/lib/esm/render/MockRender.d.ts +3 -1
  774. package/lib/esm/render/MockRender.d.ts.map +1 -1
  775. package/lib/esm/render/MockRender.js.map +1 -1
  776. package/lib/esm/render/RenderMaterial.d.ts +61 -0
  777. package/lib/esm/render/RenderMaterial.d.ts.map +1 -0
  778. package/lib/esm/render/RenderMaterial.js +9 -0
  779. package/lib/esm/render/RenderMaterial.js.map +1 -0
  780. package/lib/esm/render/RenderMemory.d.ts +21 -15
  781. package/lib/esm/render/RenderMemory.d.ts.map +1 -1
  782. package/lib/esm/render/RenderMemory.js +21 -15
  783. package/lib/esm/render/RenderMemory.js.map +1 -1
  784. package/lib/esm/render/RenderSystem.d.ts +44 -7
  785. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  786. package/lib/esm/render/RenderSystem.js +32 -9
  787. package/lib/esm/render/RenderSystem.js.map +1 -1
  788. package/lib/esm/render/RenderTarget.d.ts +10 -2
  789. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  790. package/lib/esm/render/RenderTarget.js +2 -1
  791. package/lib/esm/render/RenderTarget.js.map +1 -1
  792. package/lib/esm/render/RenderTexture.d.ts +2 -17
  793. package/lib/esm/render/RenderTexture.d.ts.map +1 -1
  794. package/lib/esm/render/RenderTexture.js +1 -16
  795. package/lib/esm/render/RenderTexture.js.map +1 -1
  796. package/lib/esm/render/primitives/EdgeParams.d.ts +84 -0
  797. package/lib/esm/render/primitives/EdgeParams.d.ts.map +1 -0
  798. package/lib/esm/render/primitives/EdgeParams.js +217 -0
  799. package/lib/esm/render/primitives/EdgeParams.js.map +1 -0
  800. package/lib/esm/render/primitives/PointStringParams.d.ts +16 -0
  801. package/lib/esm/render/primitives/PointStringParams.d.ts.map +1 -0
  802. package/lib/esm/render/primitives/PointStringParams.js +39 -0
  803. package/lib/esm/render/primitives/PointStringParams.js.map +1 -0
  804. package/lib/esm/render/primitives/PolylineParams.d.ts +44 -0
  805. package/lib/esm/render/primitives/PolylineParams.d.ts.map +1 -0
  806. package/lib/esm/render/primitives/PolylineParams.js +199 -0
  807. package/lib/esm/render/primitives/PolylineParams.js.map +1 -0
  808. package/lib/esm/render/primitives/Primitives.d.ts +1 -1
  809. package/lib/esm/render/primitives/Primitives.d.ts.map +1 -1
  810. package/lib/esm/render/primitives/Primitives.js.map +1 -1
  811. package/lib/esm/render/primitives/SurfaceParams.d.ts +46 -0
  812. package/lib/esm/render/primitives/SurfaceParams.d.ts.map +1 -0
  813. package/lib/esm/render/primitives/SurfaceParams.js +37 -0
  814. package/lib/esm/render/primitives/SurfaceParams.js.map +1 -0
  815. package/lib/esm/render/primitives/VertexTable.d.ts +4 -123
  816. package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
  817. package/lib/esm/render/primitives/VertexTable.js +11 -342
  818. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  819. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts +2 -0
  820. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  821. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +2 -1
  822. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  823. package/lib/esm/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
  824. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +1 -0
  825. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  826. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +2 -2
  827. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  828. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +3 -3
  829. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  830. package/lib/esm/render/primitives/mesh/TerrainMeshPrimitive.d.ts +1 -1
  831. package/lib/esm/render/primitives/mesh/TerrainMeshPrimitive.js +1 -1
  832. package/lib/esm/render/primitives/mesh/TerrainMeshPrimitive.js.map +1 -1
  833. package/lib/esm/render/webgl/AttributeMap.js +5 -5
  834. package/lib/esm/render/webgl/BackgroundMapDrape.js +2 -2
  835. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  836. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  837. package/lib/esm/render/webgl/BranchUniforms.js +8 -5
  838. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  839. package/lib/esm/render/webgl/CachedGeometry.d.ts +16 -11
  840. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  841. package/lib/esm/render/webgl/CachedGeometry.js +26 -23
  842. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  843. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -3
  844. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  845. package/lib/esm/render/webgl/DrawCommand.js +6 -4
  846. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  847. package/lib/esm/render/webgl/EdgeGeometry.d.ts +73 -0
  848. package/lib/esm/render/webgl/EdgeGeometry.d.ts.map +1 -0
  849. package/lib/esm/render/webgl/EdgeGeometry.js +135 -0
  850. package/lib/esm/render/webgl/EdgeGeometry.js.map +1 -0
  851. package/lib/esm/render/webgl/FeatureOverrides.d.ts +2 -0
  852. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  853. package/lib/esm/render/webgl/FeatureOverrides.js +11 -3
  854. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  855. package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
  856. package/lib/esm/render/webgl/FloatRGBA.js +13 -11
  857. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  858. package/lib/esm/render/webgl/Graphic.d.ts +13 -0
  859. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  860. package/lib/esm/render/webgl/Graphic.js +39 -2
  861. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  862. package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts +51 -0
  863. package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -0
  864. package/lib/esm/render/webgl/IndexedEdgeGeometry.js +85 -0
  865. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -0
  866. package/lib/esm/render/webgl/InstancedGeometry.d.ts +6 -5
  867. package/lib/esm/render/webgl/InstancedGeometry.d.ts.map +1 -1
  868. package/lib/esm/render/webgl/InstancedGeometry.js +2 -1
  869. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  870. package/lib/esm/render/webgl/LightingUniforms.d.ts +1 -0
  871. package/lib/esm/render/webgl/LightingUniforms.d.ts.map +1 -1
  872. package/lib/esm/render/webgl/LightingUniforms.js +4 -1
  873. package/lib/esm/render/webgl/LightingUniforms.js.map +1 -1
  874. package/lib/esm/render/webgl/Material.d.ts +1 -1
  875. package/lib/esm/render/webgl/Material.d.ts.map +1 -1
  876. package/lib/esm/render/webgl/Material.js +2 -0
  877. package/lib/esm/render/webgl/Material.js.map +1 -1
  878. package/lib/esm/render/webgl/Mesh.d.ts +8 -162
  879. package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
  880. package/lib/esm/render/webgl/Mesh.js +12 -445
  881. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  882. package/lib/esm/render/webgl/MeshData.d.ts +38 -0
  883. package/lib/esm/render/webgl/MeshData.d.ts.map +1 -0
  884. package/lib/esm/render/webgl/MeshData.js +62 -0
  885. package/lib/esm/render/webgl/MeshData.js.map +1 -0
  886. package/lib/esm/render/webgl/MeshGeometry.d.ts +38 -0
  887. package/lib/esm/render/webgl/MeshGeometry.d.ts.map +1 -0
  888. package/lib/esm/render/webgl/MeshGeometry.js +55 -0
  889. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -0
  890. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  891. package/lib/esm/render/webgl/PlanarClassifier.js +9 -5
  892. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  893. package/lib/esm/render/webgl/PlanarGrid.d.ts +2 -3
  894. package/lib/esm/render/webgl/PlanarGrid.d.ts.map +1 -1
  895. package/lib/esm/render/webgl/PlanarGrid.js +3 -3
  896. package/lib/esm/render/webgl/PlanarGrid.js.map +1 -1
  897. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  898. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -0
  899. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  900. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  901. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  902. package/lib/esm/render/webgl/PointCloud.js +2 -2
  903. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  904. package/lib/esm/render/webgl/PointString.d.ts +3 -3
  905. package/lib/esm/render/webgl/PointString.d.ts.map +1 -1
  906. package/lib/esm/render/webgl/PointString.js +1 -1
  907. package/lib/esm/render/webgl/PointString.js.map +1 -1
  908. package/lib/esm/render/webgl/Polyline.d.ts +3 -3
  909. package/lib/esm/render/webgl/Polyline.d.ts.map +1 -1
  910. package/lib/esm/render/webgl/Polyline.js +6 -6
  911. package/lib/esm/render/webgl/Polyline.js.map +1 -1
  912. package/lib/esm/render/webgl/Primitive.d.ts +2 -2
  913. package/lib/esm/render/webgl/Primitive.d.ts.map +1 -1
  914. package/lib/esm/render/webgl/Primitive.js +5 -5
  915. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  916. package/lib/esm/render/webgl/RealityMesh.d.ts +2 -2
  917. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  918. package/lib/esm/render/webgl/RealityMesh.js +9 -9
  919. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  920. package/lib/esm/render/webgl/RenderCommands.d.ts +6 -2
  921. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  922. package/lib/esm/render/webgl/RenderCommands.js +78 -45
  923. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  924. package/lib/esm/render/webgl/RenderFlags.d.ts +48 -1
  925. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  926. package/lib/esm/render/webgl/RenderFlags.js +63 -1
  927. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  928. package/lib/esm/render/webgl/SceneCompositor.js +10 -9
  929. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  930. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  931. package/lib/esm/render/webgl/ShaderBuilder.d.ts +23 -20
  932. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  933. package/lib/esm/render/webgl/ShaderBuilder.js +38 -32
  934. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  935. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -1
  936. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  937. package/lib/esm/render/webgl/ShaderProgram.js +4 -4
  938. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  939. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  940. package/lib/esm/render/webgl/SolarShadowMap.js +5 -4
  941. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  942. package/lib/esm/render/webgl/SurfaceGeometry.d.ts +54 -0
  943. package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -0
  944. package/lib/esm/render/webgl/SurfaceGeometry.js +243 -0
  945. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -0
  946. package/lib/esm/render/webgl/System.d.ts +13 -10
  947. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  948. package/lib/esm/render/webgl/System.js +77 -23
  949. package/lib/esm/render/webgl/System.js.map +1 -1
  950. package/lib/esm/render/webgl/Target.d.ts +13 -1
  951. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  952. package/lib/esm/render/webgl/Target.js +88 -2
  953. package/lib/esm/render/webgl/Target.js.map +1 -1
  954. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  955. package/lib/esm/render/webgl/Technique.js +112 -119
  956. package/lib/esm/render/webgl/Technique.js.map +1 -1
  957. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -1
  958. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  959. package/lib/esm/render/webgl/TechniqueFlags.js +10 -1
  960. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  961. package/lib/esm/render/webgl/TechniqueId.d.ts +29 -28
  962. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  963. package/lib/esm/render/webgl/TechniqueId.js +7 -7
  964. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  965. package/lib/esm/render/webgl/Texture.d.ts +15 -12
  966. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  967. package/lib/esm/render/webgl/Texture.js +27 -24
  968. package/lib/esm/render/webgl/Texture.js.map +1 -1
  969. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  970. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +84 -19
  971. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  972. package/lib/esm/render/webgl/glsl/Animation.js +1 -1
  973. package/lib/esm/render/webgl/glsl/Blur.js +1 -1
  974. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -2
  975. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -2
  976. package/lib/esm/render/webgl/glsl/Color.js +1 -1
  977. package/lib/esm/render/webgl/glsl/Combine3Textures.js +1 -1
  978. package/lib/esm/render/webgl/glsl/CombineTextures.js +1 -1
  979. package/lib/esm/render/webgl/glsl/Composite.js +1 -1
  980. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  981. package/lib/esm/render/webgl/glsl/CopyColor.js +17 -2
  982. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  983. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +2 -2
  984. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  985. package/lib/esm/render/webgl/glsl/CopyStencil.js +10 -13
  986. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  987. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +2 -2
  988. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  989. package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -1
  990. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  991. package/lib/esm/render/webgl/glsl/Edge.js +132 -14
  992. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  993. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  994. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +44 -22
  995. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  996. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  997. package/lib/esm/render/webgl/glsl/Fragment.js +19 -11
  998. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  999. package/lib/esm/render/webgl/glsl/Lighting.d.ts.map +1 -1
  1000. package/lib/esm/render/webgl/glsl/Lighting.js +16 -2
  1001. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  1002. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
  1003. package/lib/esm/render/webgl/glsl/LookupTable.d.ts +4 -2
  1004. package/lib/esm/render/webgl/glsl/LookupTable.d.ts.map +1 -1
  1005. package/lib/esm/render/webgl/glsl/LookupTable.js +7 -3
  1006. package/lib/esm/render/webgl/glsl/LookupTable.js.map +1 -1
  1007. package/lib/esm/render/webgl/glsl/PlanarClassification.d.ts.map +1 -1
  1008. package/lib/esm/render/webgl/glsl/PlanarClassification.js +13 -4
  1009. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  1010. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -2
  1011. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  1012. package/lib/esm/render/webgl/glsl/PointCloud.js +2 -2
  1013. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  1014. package/lib/esm/render/webgl/glsl/PointString.js +1 -1
  1015. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  1016. package/lib/esm/render/webgl/glsl/Polyline.js +1 -1
  1017. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  1018. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  1019. package/lib/esm/render/webgl/glsl/RealityMesh.js +9 -6
  1020. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  1021. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +2 -2
  1022. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  1023. package/lib/esm/render/webgl/glsl/SkyBox.js +2 -2
  1024. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  1025. package/lib/esm/render/webgl/glsl/SkySphere.js +2 -2
  1026. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  1027. package/lib/esm/render/webgl/glsl/Surface.js +41 -16
  1028. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  1029. package/lib/esm/render/webgl/glsl/Translucency.js +2 -2
  1030. package/lib/esm/render/webgl/glsl/Vertex.js +3 -3
  1031. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  1032. package/lib/esm/render/webgl/glsl/ViewportQuad.js +1 -1
  1033. package/lib/esm/render/webgl/glsl/ViewportQuad.js.map +1 -1
  1034. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts +9 -0
  1035. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
  1036. package/lib/esm/render/webgl/glsl/Wiremesh.js +36 -0
  1037. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -0
  1038. package/lib/esm/render-primitives.d.ts +5 -1
  1039. package/lib/esm/render-primitives.d.ts.map +1 -1
  1040. package/lib/esm/render-primitives.js +5 -1
  1041. package/lib/esm/render-primitives.js.map +1 -1
  1042. package/lib/esm/request/Request.d.ts +167 -0
  1043. package/lib/esm/request/Request.d.ts.map +1 -0
  1044. package/lib/esm/request/Request.js +289 -0
  1045. package/lib/esm/request/Request.js.map +1 -0
  1046. package/lib/esm/tile/B3dmReader.d.ts +2 -1
  1047. package/lib/esm/tile/B3dmReader.d.ts.map +1 -1
  1048. package/lib/esm/tile/B3dmReader.js +12 -8
  1049. package/lib/esm/tile/B3dmReader.js.map +1 -1
  1050. package/lib/esm/tile/CesiumAssetProvider.d.ts +14 -0
  1051. package/lib/esm/tile/CesiumAssetProvider.d.ts.map +1 -0
  1052. package/lib/esm/tile/CesiumAssetProvider.js +31 -0
  1053. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -0
  1054. package/lib/esm/tile/ContextShareProvider.d.ts +22 -0
  1055. package/lib/esm/tile/ContextShareProvider.d.ts.map +1 -0
  1056. package/lib/esm/tile/ContextShareProvider.js +125 -0
  1057. package/lib/esm/tile/ContextShareProvider.js.map +1 -0
  1058. package/lib/esm/tile/DynamicIModelTile.js +9 -3
  1059. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  1060. package/lib/esm/tile/GltfReader.d.ts +594 -55
  1061. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  1062. package/lib/esm/tile/GltfReader.js +678 -242
  1063. package/lib/esm/tile/GltfReader.js.map +1 -1
  1064. package/lib/esm/tile/I3dmReader.d.ts +2 -1
  1065. package/lib/esm/tile/I3dmReader.d.ts.map +1 -1
  1066. package/lib/esm/tile/I3dmReader.js +11 -7
  1067. package/lib/esm/tile/I3dmReader.js.map +1 -1
  1068. package/lib/esm/tile/IModelTile.d.ts.map +1 -1
  1069. package/lib/esm/tile/IModelTile.js +14 -7
  1070. package/lib/esm/tile/IModelTile.js.map +1 -1
  1071. package/lib/esm/tile/IModelTileTree.d.ts +8 -0
  1072. package/lib/esm/tile/IModelTileTree.d.ts.map +1 -1
  1073. package/lib/esm/tile/IModelTileTree.js +36 -1
  1074. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  1075. package/lib/esm/tile/ImdlReader.d.ts +365 -10
  1076. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  1077. package/lib/esm/tile/ImdlReader.js +199 -66
  1078. package/lib/esm/tile/ImdlReader.js.map +1 -1
  1079. package/lib/esm/tile/OrbitGtTileTree.d.ts +0 -9
  1080. package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
  1081. package/lib/esm/tile/OrbitGtTileTree.js +10 -20
  1082. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  1083. package/lib/esm/tile/PrimaryTileTree.d.ts +14 -5
  1084. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  1085. package/lib/esm/tile/PrimaryTileTree.js +70 -15
  1086. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  1087. package/lib/esm/tile/RealityModelTileTree.d.ts +2 -41
  1088. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  1089. package/lib/esm/tile/RealityModelTileTree.js +56 -215
  1090. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  1091. package/lib/esm/tile/RealityTileLoader.d.ts +1 -0
  1092. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  1093. package/lib/esm/tile/RealityTileLoader.js +4 -3
  1094. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  1095. package/lib/esm/tile/Tile.d.ts.map +1 -1
  1096. package/lib/esm/tile/Tile.js +5 -1
  1097. package/lib/esm/tile/Tile.js.map +1 -1
  1098. package/lib/esm/tile/TileAdmin.d.ts +37 -4
  1099. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  1100. package/lib/esm/tile/TileAdmin.js +19 -13
  1101. package/lib/esm/tile/TileAdmin.js.map +1 -1
  1102. package/lib/esm/tile/TileDrawArgs.d.ts +11 -0
  1103. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  1104. package/lib/esm/tile/TileDrawArgs.js +6 -1
  1105. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  1106. package/lib/esm/tile/TileTreeReference.d.ts +2 -0
  1107. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  1108. package/lib/esm/tile/TileTreeReference.js +5 -0
  1109. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  1110. package/lib/esm/tile/internal.d.ts +4 -1
  1111. package/lib/esm/tile/internal.d.ts.map +1 -1
  1112. package/lib/esm/tile/internal.js +4 -1
  1113. package/lib/esm/tile/internal.js.map +1 -1
  1114. package/lib/esm/tile/map/ArcGISTileMap.d.ts +22 -0
  1115. package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -0
  1116. package/lib/esm/tile/map/ArcGISTileMap.js +173 -0
  1117. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -0
  1118. package/lib/esm/tile/map/ArcGisTokenGenerator.js +1 -1
  1119. package/lib/esm/tile/map/ArcGisTokenGenerator.js.map +1 -1
  1120. package/lib/esm/tile/map/ArcGisUtilities.d.ts +1 -1
  1121. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  1122. package/lib/esm/tile/map/ArcGisUtilities.js +14 -6
  1123. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  1124. package/lib/esm/tile/map/BingElevation.js +1 -1
  1125. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  1126. package/lib/esm/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
  1127. package/lib/esm/tile/map/CesiumTerrainProvider.js +25 -13
  1128. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  1129. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -2
  1130. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  1131. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +21 -42
  1132. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  1133. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
  1134. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  1135. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +8 -0
  1136. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  1137. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +51 -10
  1138. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  1139. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +6 -1
  1140. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  1141. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +63 -21
  1142. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  1143. package/lib/esm/tile/map/ImageryTileTree.d.ts +4 -4
  1144. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  1145. package/lib/esm/tile/map/ImageryTileTree.js +21 -25
  1146. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  1147. package/lib/esm/tile/map/MapCartoRectangle.js +1 -1
  1148. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  1149. package/lib/esm/tile/map/MapLayerAuthentication.d.ts +20 -0
  1150. package/lib/esm/tile/map/MapLayerAuthentication.d.ts.map +1 -0
  1151. package/lib/esm/tile/map/MapLayerAuthentication.js +15 -0
  1152. package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -0
  1153. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +6 -3
  1154. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  1155. package/lib/esm/tile/map/MapLayerFormatRegistry.js +3 -1
  1156. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  1157. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +2 -2
  1158. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  1159. package/lib/esm/tile/map/MapLayerImageryFormats.js +22 -9
  1160. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  1161. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +18 -6
  1162. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  1163. package/lib/esm/tile/map/MapLayerImageryProvider.js +44 -11
  1164. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  1165. package/lib/esm/tile/map/MapLayerSources.d.ts +3 -11
  1166. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  1167. package/lib/esm/tile/map/MapLayerSources.js +7 -36
  1168. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  1169. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  1170. package/lib/esm/tile/map/MapTile.js +4 -3
  1171. package/lib/esm/tile/map/MapTile.js.map +1 -1
  1172. package/lib/esm/tile/map/MapTileLoader.js +1 -1
  1173. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  1174. package/lib/esm/tile/map/MapTileTree.d.ts +1 -1
  1175. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  1176. package/lib/esm/tile/map/MapTileTree.js +30 -21
  1177. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  1178. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +3 -3
  1179. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  1180. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +4 -6
  1181. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  1182. package/lib/esm/tile/map/MapTilingScheme.d.ts +7 -2
  1183. package/lib/esm/tile/map/MapTilingScheme.d.ts.map +1 -1
  1184. package/lib/esm/tile/map/MapTilingScheme.js +22 -9
  1185. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  1186. package/lib/esm/tile/map/QuadId.d.ts +1 -0
  1187. package/lib/esm/tile/map/QuadId.d.ts.map +1 -1
  1188. package/lib/esm/tile/map/QuadId.js +2 -1
  1189. package/lib/esm/tile/map/QuadId.js.map +1 -1
  1190. package/lib/esm/tile/map/TerrainMeshProvider.d.ts +1 -1
  1191. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  1192. package/lib/esm/tile/map/WmsCapabilities.d.ts +8 -1
  1193. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  1194. package/lib/esm/tile/map/WmsCapabilities.js +37 -3
  1195. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  1196. package/lib/esm/tile/map/WmtsCapabilities.d.ts +11 -1
  1197. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  1198. package/lib/esm/tile/map/WmtsCapabilities.js +20 -6
  1199. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  1200. package/lib/esm/tools/EditManipulator.d.ts.map +1 -1
  1201. package/lib/esm/tools/EditManipulator.js +1 -1
  1202. package/lib/esm/tools/EditManipulator.js.map +1 -1
  1203. package/lib/esm/tools/ElementSetTool.js +2 -2
  1204. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  1205. package/lib/esm/tools/PrimitiveTool.d.ts +4 -4
  1206. package/lib/esm/tools/PrimitiveTool.d.ts.map +1 -1
  1207. package/lib/esm/tools/PrimitiveTool.js +2 -2
  1208. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  1209. package/lib/esm/tools/Tool.d.ts +29 -1
  1210. package/lib/esm/tools/Tool.d.ts.map +1 -1
  1211. package/lib/esm/tools/Tool.js +66 -0
  1212. package/lib/esm/tools/Tool.js.map +1 -1
  1213. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  1214. package/lib/esm/tools/ToolAdmin.js +20 -10
  1215. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  1216. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  1217. package/lib/esm/tools/ViewTool.js +3 -11
  1218. package/lib/esm/tools/ViewTool.js.map +1 -1
  1219. package/lib/esm/webgl.d.ts +5 -0
  1220. package/lib/esm/webgl.d.ts.map +1 -1
  1221. package/lib/esm/webgl.js +5 -0
  1222. package/lib/esm/webgl.js.map +1 -1
  1223. package/lib/public/locales/en/iModelJs.json +3 -1
  1224. package/package.json +33 -28
  1225. package/lib/cjs/RealityDataAccessProps.d.ts +0 -44
  1226. package/lib/cjs/RealityDataAccessProps.d.ts.map +0 -1
  1227. package/lib/cjs/RealityDataAccessProps.js +0 -23
  1228. package/lib/cjs/RealityDataAccessProps.js.map +0 -1
  1229. package/lib/cjs/RealityDataConnection.d.ts +0 -31
  1230. package/lib/cjs/RealityDataConnection.d.ts.map +0 -1
  1231. package/lib/cjs/RealityDataConnection.js +0 -101
  1232. package/lib/cjs/RealityDataConnection.js.map +0 -1
  1233. package/lib/cjs/extension/Extension.d.ts +0 -39
  1234. package/lib/cjs/extension/Extension.d.ts.map +0 -1
  1235. package/lib/cjs/extension/Extension.js +0 -39
  1236. package/lib/cjs/extension/Extension.js.map +0 -1
  1237. package/lib/cjs/extension/ExtensionAdmin.d.ts +0 -70
  1238. package/lib/cjs/extension/ExtensionAdmin.d.ts.map +0 -1
  1239. package/lib/cjs/extension/ExtensionAdmin.js +0 -105
  1240. package/lib/cjs/extension/ExtensionAdmin.js.map +0 -1
  1241. package/lib/cjs/extension/ExtensionHost.d.ts +0 -20
  1242. package/lib/cjs/extension/ExtensionHost.d.ts.map +0 -1
  1243. package/lib/cjs/extension/ExtensionHost.js +0 -19
  1244. package/lib/cjs/extension/ExtensionHost.js.map +0 -1
  1245. package/lib/cjs/extension/ExtensionImpl.d.ts +0 -16
  1246. package/lib/cjs/extension/ExtensionImpl.d.ts.map +0 -1
  1247. package/lib/cjs/extension/ExtensionImpl.js +0 -40
  1248. package/lib/cjs/extension/ExtensionImpl.js.map +0 -1
  1249. package/lib/cjs/extension/ExtensionLoader.d.ts +0 -20
  1250. package/lib/cjs/extension/ExtensionLoader.d.ts.map +0 -1
  1251. package/lib/cjs/extension/ExtensionLoader.js.map +0 -1
  1252. package/lib/cjs/extension/ExtensionRuntime.d.ts +0 -2
  1253. package/lib/cjs/extension/ExtensionRuntime.d.ts.map +0 -1
  1254. package/lib/cjs/extension/ExtensionRuntime.js +0 -60
  1255. package/lib/cjs/extension/ExtensionRuntime.js.map +0 -1
  1256. package/lib/cjs/extension/extensions.d.ts +0 -18
  1257. package/lib/cjs/extension/extensions.d.ts.map +0 -1
  1258. package/lib/cjs/extension/extensions.js +0 -35
  1259. package/lib/cjs/extension/extensions.js.map +0 -1
  1260. package/lib/cjs/tile/map/MapLayerSettingsService.d.ts +0 -39
  1261. package/lib/cjs/tile/map/MapLayerSettingsService.d.ts.map +0 -1
  1262. package/lib/cjs/tile/map/MapLayerSettingsService.js +0 -190
  1263. package/lib/cjs/tile/map/MapLayerSettingsService.js.map +0 -1
  1264. package/lib/esm/RealityDataAccessProps.d.ts +0 -44
  1265. package/lib/esm/RealityDataAccessProps.d.ts.map +0 -1
  1266. package/lib/esm/RealityDataAccessProps.js +0 -20
  1267. package/lib/esm/RealityDataAccessProps.js.map +0 -1
  1268. package/lib/esm/RealityDataConnection.d.ts +0 -31
  1269. package/lib/esm/RealityDataConnection.d.ts.map +0 -1
  1270. package/lib/esm/RealityDataConnection.js +0 -98
  1271. package/lib/esm/RealityDataConnection.js.map +0 -1
  1272. package/lib/esm/extension/Extension.d.ts +0 -39
  1273. package/lib/esm/extension/Extension.d.ts.map +0 -1
  1274. package/lib/esm/extension/Extension.js +0 -38
  1275. package/lib/esm/extension/Extension.js.map +0 -1
  1276. package/lib/esm/extension/ExtensionAdmin.d.ts +0 -70
  1277. package/lib/esm/extension/ExtensionAdmin.d.ts.map +0 -1
  1278. package/lib/esm/extension/ExtensionAdmin.js +0 -101
  1279. package/lib/esm/extension/ExtensionAdmin.js.map +0 -1
  1280. package/lib/esm/extension/ExtensionHost.d.ts +0 -20
  1281. package/lib/esm/extension/ExtensionHost.d.ts.map +0 -1
  1282. package/lib/esm/extension/ExtensionHost.js +0 -15
  1283. package/lib/esm/extension/ExtensionHost.js.map +0 -1
  1284. package/lib/esm/extension/ExtensionImpl.d.ts +0 -16
  1285. package/lib/esm/extension/ExtensionImpl.d.ts.map +0 -1
  1286. package/lib/esm/extension/ExtensionImpl.js +0 -35
  1287. package/lib/esm/extension/ExtensionImpl.js.map +0 -1
  1288. package/lib/esm/extension/ExtensionLoader.d.ts +0 -20
  1289. package/lib/esm/extension/ExtensionLoader.d.ts.map +0 -1
  1290. package/lib/esm/extension/ExtensionLoader.js.map +0 -1
  1291. package/lib/esm/extension/ExtensionRuntime.d.ts +0 -2
  1292. package/lib/esm/extension/ExtensionRuntime.d.ts.map +0 -1
  1293. package/lib/esm/extension/ExtensionRuntime.js +0 -58
  1294. package/lib/esm/extension/ExtensionRuntime.js.map +0 -1
  1295. package/lib/esm/extension/extensions.d.ts +0 -18
  1296. package/lib/esm/extension/extensions.d.ts.map +0 -1
  1297. package/lib/esm/extension/extensions.js +0 -23
  1298. package/lib/esm/extension/extensions.js.map +0 -1
  1299. package/lib/esm/tile/map/MapLayerSettingsService.d.ts +0 -39
  1300. package/lib/esm/tile/map/MapLayerSettingsService.d.ts.map +0 -1
  1301. package/lib/esm/tile/map/MapLayerSettingsService.js +0 -186
  1302. package/lib/esm/tile/map/MapLayerSettingsService.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SceneCompositor.js","sourceRoot":"","sources":["../../../../src/render/webgl/SceneCompositor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n Feature, PackedFeatureTable, RenderMode, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay,\r\n} from \"@itwin/core-common\";\r\nimport { DepthType, RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewRect } from \"../../ViewRect\";\r\nimport { Pixel } from \"../Pixel\";\r\nimport { GraphicList } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport {\r\n AmbientOcclusionGeometry, BlurGeometry, BoundaryType, CachedGeometry, CompositeGeometry, CopyPickBufferGeometry, ScreenPointsGeometry,\r\n SingleTexturedViewportQuadGeometry, ViewportQuadGeometry, VolumeClassifierGeometry,\r\n} from \"./CachedGeometry\";\r\nimport { Debug } from \"./Diagnostics\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands, extractFlashedVolumeClassifierCommands, extractHilitedVolumeClassifierCommands } from \"./DrawCommand\";\r\nimport { FloatRgba } from \"./FloatRGBA\";\r\nimport { DepthBuffer, FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { IModelFrameLifecycle } from \"./IModelFrameLifecycle\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { CompositeFlags, RenderOrder, RenderPass, TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { SolarShadowMap } from \"./SolarShadowMap\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { RenderBufferMultiSample } from \"./RenderBuffer\";\r\n\r\nfunction collectTextureStatistics(texture: TextureHandle | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== texture)\r\n stats.addTextureAttachment(texture.bytesUsed);\r\n}\r\n\r\nfunction collectMsBufferStatistics(msBuff: RenderBufferMultiSample | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== msBuff)\r\n stats.addTextureAttachment(msBuff.bytesUsed);\r\n}\r\n\r\n// Maintains the textures used by a SceneCompositor. The textures are reallocated when the dimensions of the viewport change.\r\nclass Textures implements WebGLDisposable, RenderMemory.Consumer {\r\n public accumulation?: TextureHandle;\r\n public revealage?: TextureHandle;\r\n public color?: TextureHandle;\r\n public featureId?: TextureHandle;\r\n public depthAndOrder?: TextureHandle;\r\n public hilite?: TextureHandle;\r\n public occlusion?: TextureHandle;\r\n public occlusionBlur?: TextureHandle;\r\n public volClassBlend?: TextureHandle;\r\n public colorMsBuff?: RenderBufferMultiSample;\r\n public featureIdMsBuff?: RenderBufferMultiSample;\r\n public depthAndOrderMsBuff?: RenderBufferMultiSample;\r\n public hiliteMsBuff?: RenderBufferMultiSample;\r\n public volClassBlendMsBuff?: RenderBufferMultiSample;\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.accumulation\r\n && undefined === this.revealage\r\n && undefined === this.color\r\n && undefined === this.featureId\r\n && undefined === this.depthAndOrder\r\n && undefined === this.hilite\r\n && undefined === this.occlusion\r\n && undefined === this.occlusionBlur\r\n && undefined === this.volClassBlend\r\n && undefined === this.colorMsBuff\r\n && undefined === this.featureIdMsBuff\r\n && undefined === this.depthAndOrderMsBuff\r\n && undefined === this.hiliteMsBuff\r\n && undefined === this.volClassBlendMsBuff;\r\n }\r\n\r\n public dispose() {\r\n this.accumulation = dispose(this.accumulation);\r\n this.revealage = dispose(this.revealage);\r\n this.color = dispose(this.color);\r\n this.featureId = dispose(this.featureId);\r\n this.depthAndOrder = dispose(this.depthAndOrder);\r\n this.hilite = dispose(this.hilite);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.colorMsBuff = dispose(this.colorMsBuff);\r\n this.featureIdMsBuff = dispose(this.featureIdMsBuff);\r\n this.depthAndOrderMsBuff = dispose(this.depthAndOrderMsBuff);\r\n this.hiliteMsBuff = dispose(this.hiliteMsBuff);\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n this.volClassBlendMsBuff = dispose(this.volClassBlendMsBuff);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n collectTextureStatistics(this.accumulation, stats);\r\n collectTextureStatistics(this.revealage, stats);\r\n collectTextureStatistics(this.color, stats);\r\n collectTextureStatistics(this.featureId, stats);\r\n collectTextureStatistics(this.depthAndOrder, stats);\r\n collectTextureStatistics(this.hilite, stats);\r\n collectTextureStatistics(this.occlusion, stats);\r\n collectTextureStatistics(this.occlusionBlur, stats);\r\n collectTextureStatistics(this.volClassBlend, stats);\r\n collectMsBufferStatistics(this.colorMsBuff, stats);\r\n collectMsBufferStatistics(this.featureIdMsBuff, stats);\r\n collectMsBufferStatistics(this.depthAndOrderMsBuff, stats);\r\n collectMsBufferStatistics(this.hiliteMsBuff, stats);\r\n collectMsBufferStatistics(this.volClassBlendMsBuff, stats);\r\n }\r\n\r\n public init(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.accumulation);\r\n\r\n let pixelDataType: GL.Texture.DataType = GL.Texture.DataType.UnsignedByte;\r\n switch (System.instance.capabilities.maxRenderType) {\r\n case RenderType.TextureFloat: {\r\n pixelDataType = GL.Texture.DataType.Float;\r\n break;\r\n }\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 ext = System.instance.capabilities.queryExtensionObject<OES_texture_half_float>(\"OES_texture_half_float\");\r\n if (undefined !== ext) {\r\n pixelDataType = ext.HALF_FLOAT_OES;\r\n break;\r\n }\r\n }\r\n }\r\n /* falls through */\r\n case RenderType.TextureUnsignedByte: {\r\n break;\r\n }\r\n }\r\n\r\n // NB: Both of these must be of the same type, because they are borrowed by pingpong and bound to the same frame buffer.\r\n this.accumulation = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, pixelDataType);\r\n this.revealage = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, pixelDataType);\r\n\r\n // Hilite texture is a simple on-off, but the smallest texture format WebGL allows us to use as output is RGBA with a byte per component.\r\n this.hilite = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n this.color = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n this.featureId = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n this.depthAndOrder = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n let rVal = undefined !== this.accumulation\r\n && undefined !== this.revealage\r\n && undefined !== this.color\r\n && undefined !== this.featureId\r\n && undefined !== this.depthAndOrder\r\n && undefined !== this.hilite;\r\n\r\n if (rVal && numSamples > 1) {\r\n rVal = this.enableMultiSampling(width, height, numSamples);\r\n }\r\n\r\n return rVal;\r\n }\r\n\r\n public enableOcclusion(width: number, height: number): boolean {\r\n assert(undefined === this.occlusion && undefined === this.occlusionBlur);\r\n this.occlusion = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n this.occlusionBlur = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n return undefined !== this.occlusion && undefined !== this.occlusionBlur;\r\n }\r\n\r\n public disableOcclusion(): void {\r\n assert(undefined !== this.occlusion && undefined !== this.occlusionBlur);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n }\r\n\r\n public enableVolumeClassifier(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.volClassBlend);\r\n this.volClassBlend = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n let rVal = undefined !== this.volClassBlend;\r\n if (rVal && undefined !== numSamples && numSamples > 1) {\r\n this.volClassBlendMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n rVal = undefined !== this.volClassBlendMsBuff;\r\n }\r\n return rVal;\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n this.volClassBlendMsBuff = dispose(this.volClassBlendMsBuff);\r\n }\r\n\r\n public enableMultiSampling(width: number, height: number, numSamples: number): boolean {\r\n this.colorMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.featureIdMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.depthAndOrderMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.hiliteMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n return undefined !== this.colorMsBuff\r\n && undefined !== this.featureIdMsBuff\r\n && undefined !== this.depthAndOrderMsBuff\r\n && undefined !== this.hiliteMsBuff;\r\n }\r\n\r\n public disableMultiSampling(): boolean {\r\n this.colorMsBuff = dispose(this.colorMsBuff);\r\n this.featureIdMsBuff = dispose(this.featureIdMsBuff);\r\n this.depthAndOrderMsBuff = dispose(this.depthAndOrderMsBuff);\r\n this.hiliteMsBuff = dispose(this.hiliteMsBuff);\r\n return true;\r\n }\r\n}\r\n\r\n// Maintains the framebuffers used by a SceneCompositor. The color attachments are supplied by a Textures object.\r\nclass FrameBuffers implements WebGLDisposable {\r\n public opaqueColor?: FrameBuffer;\r\n public opaqueAndCompositeColor?: FrameBuffer;\r\n public depthAndOrder?: FrameBuffer;\r\n public hilite?: FrameBuffer;\r\n public hiliteUsingStencil?: FrameBuffer;\r\n public stencilSet?: FrameBuffer;\r\n public occlusion?: FrameBuffer;\r\n public occlusionBlur?: FrameBuffer;\r\n public altZOnly?: FrameBuffer;\r\n public volClassCreateBlend?: FrameBuffer;\r\n public volClassCreateBlendAltZ?: FrameBuffer;\r\n\r\n public init(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer | undefined): boolean {\r\n if (!this.initPotentialMSFbos(textures, depth, depthMS))\r\n return false;\r\n\r\n this.depthAndOrder = FrameBuffer.create([textures.depthAndOrder!], depth);\r\n this.hilite = FrameBuffer.create([textures.hilite!], depth);\r\n this.hiliteUsingStencil = FrameBuffer.create([textures.hilite!], depth);\r\n\r\n return undefined !== this.depthAndOrder\r\n && undefined !== this.hilite\r\n && undefined !== this.hiliteUsingStencil;\r\n }\r\n\r\n private initPotentialMSFbos(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer | undefined): boolean {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n assert(undefined !== boundColor && undefined !== textures.color);\r\n if (undefined === depthMS) {\r\n this.opaqueColor = FrameBuffer.create([boundColor], depth);\r\n this.opaqueAndCompositeColor = FrameBuffer.create([textures.color], depth);\r\n } else {\r\n assert(undefined !== textures.colorMsBuff);\r\n this.opaqueColor = FrameBuffer.create([boundColor], depth, [textures.colorMsBuff], [GL.MultiSampling.Filter.Linear], depthMS);\r\n this.opaqueAndCompositeColor = FrameBuffer.create([textures.color], depth, [textures.colorMsBuff], [GL.MultiSampling.Filter.Linear], depthMS);\r\n }\r\n return undefined !== this.opaqueColor\r\n && undefined !== this.opaqueAndCompositeColor;\r\n }\r\n\r\n public toggleOcclusion(textures: Textures): void {\r\n if (undefined !== textures.occlusion) {\r\n assert(undefined !== textures.occlusionBlur);\r\n this.occlusion = FrameBuffer.create([textures.occlusion]);\r\n this.occlusionBlur = FrameBuffer.create([textures.occlusionBlur]);\r\n } else {\r\n assert(undefined === textures.occlusionBlur);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n }\r\n }\r\n\r\n public enableVolumeClassifier(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n if (undefined === this.stencilSet) {\r\n if (undefined !== depthMS) { // if multisampling use the multisampled depth everywhere\r\n this.stencilSet = FrameBuffer.create([], depth, [], [], depthMS);\r\n this.altZOnly = FrameBuffer.create([], volClassDepth, [], [], volClassDepthMS);\r\n this.volClassCreateBlend = FrameBuffer.create([textures.volClassBlend!], depth, [textures.volClassBlendMsBuff!], [GL.MultiSampling.Filter.Nearest], depthMS);\r\n this.volClassCreateBlendAltZ = FrameBuffer.create([textures.volClassBlend!], volClassDepth, [textures.volClassBlendMsBuff!], [GL.MultiSampling.Filter.Nearest], volClassDepthMS);\r\n } else if (undefined !== volClassDepth) {\r\n this.stencilSet = FrameBuffer.create([], depth);\r\n this.altZOnly = FrameBuffer.create([], volClassDepth);\r\n this.volClassCreateBlend = FrameBuffer.create([textures.volClassBlend!], depth);\r\n this.volClassCreateBlendAltZ = FrameBuffer.create([textures.volClassBlend!], volClassDepth);\r\n }\r\n }\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n if (undefined !== this.stencilSet) {\r\n this.stencilSet = dispose(this.stencilSet);\r\n this.altZOnly = dispose(this.altZOnly);\r\n this.volClassCreateBlend = dispose(this.volClassCreateBlend);\r\n this.volClassCreateBlendAltZ = dispose(this.volClassCreateBlendAltZ);\r\n }\r\n }\r\n\r\n public enableMultiSampling(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer): boolean {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n return this.initPotentialMSFbos(textures, depth, depthMS);\r\n }\r\n\r\n public disableMultiSampling(textures: Textures, depth: DepthBuffer): boolean {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n return this.initPotentialMSFbos(textures, depth, undefined);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.opaqueColor\r\n && undefined === this.opaqueAndCompositeColor\r\n && undefined === this.depthAndOrder\r\n && undefined === this.hilite\r\n && undefined === this.hiliteUsingStencil\r\n && undefined === this.occlusion\r\n && undefined === this.occlusionBlur\r\n && undefined === this.stencilSet\r\n && undefined === this.altZOnly\r\n && undefined === this.volClassCreateBlend\r\n && undefined === this.volClassCreateBlendAltZ;\r\n }\r\n\r\n public dispose() {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n this.depthAndOrder = dispose(this.depthAndOrder);\r\n this.hilite = dispose(this.hilite);\r\n this.hiliteUsingStencil = dispose(this.hiliteUsingStencil);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.stencilSet = dispose(this.stencilSet);\r\n this.altZOnly = dispose(this.altZOnly);\r\n this.volClassCreateBlend = dispose(this.volClassCreateBlend);\r\n this.volClassCreateBlendAltZ = dispose(this.volClassCreateBlendAltZ);\r\n }\r\n}\r\n\r\nfunction collectGeometryStatistics(geom: CachedGeometry | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== geom)\r\n geom.collectStatistics(stats);\r\n}\r\n\r\n// Maintains the geometry used to execute screenspace operations for a SceneCompositor.\r\nclass Geometry implements WebGLDisposable, RenderMemory.Consumer {\r\n public composite?: CompositeGeometry;\r\n public volClassColorStencil?: ViewportQuadGeometry;\r\n public volClassCopyZ?: SingleTexturedViewportQuadGeometry;\r\n public volClassCopyZWithPoints?: ScreenPointsGeometry;\r\n public volClassSetBlend?: VolumeClassifierGeometry;\r\n public volClassBlend?: SingleTexturedViewportQuadGeometry;\r\n public occlusion?: AmbientOcclusionGeometry;\r\n public occlusionXBlur?: BlurGeometry;\r\n public occlusionYBlur?: BlurGeometry;\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n collectGeometryStatistics(this.composite, stats);\r\n collectGeometryStatistics(this.volClassColorStencil, stats);\r\n collectGeometryStatistics(this.volClassCopyZ, stats);\r\n collectGeometryStatistics(this.volClassCopyZWithPoints, stats);\r\n collectGeometryStatistics(this.volClassSetBlend, stats);\r\n collectGeometryStatistics(this.volClassBlend, stats);\r\n collectGeometryStatistics(this.occlusion, stats);\r\n collectGeometryStatistics(this.occlusionXBlur, stats);\r\n collectGeometryStatistics(this.occlusionYBlur, stats);\r\n }\r\n\r\n public init(textures: Textures): boolean {\r\n assert(undefined === this.composite);\r\n this.composite = CompositeGeometry.createGeometry(\r\n textures.color!.getHandle()!,\r\n textures.accumulation!.getHandle()!,\r\n textures.revealage!.getHandle()!, textures.hilite!.getHandle()!);\r\n return undefined !== this.composite;\r\n }\r\n\r\n public toggleOcclusion(textures: Textures): void {\r\n if (undefined !== textures.occlusion) {\r\n assert(undefined !== textures.occlusionBlur);\r\n this.composite!.occlusion = textures.occlusion.getHandle();\r\n this.occlusion = AmbientOcclusionGeometry.createGeometry(textures.depthAndOrder!.getHandle()!);\r\n this.occlusionXBlur = BlurGeometry.createGeometry(textures.occlusion.getHandle()!, textures.depthAndOrder!.getHandle()!, new Vector2d(1.0, 0.0));\r\n this.occlusionYBlur = BlurGeometry.createGeometry(textures.occlusionBlur.getHandle()!, textures.depthAndOrder!.getHandle()!, new Vector2d(0.0, 1.0));\r\n } else {\r\n assert(undefined === textures.occlusionBlur);\r\n this.composite!.occlusion = undefined;\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionXBlur = dispose(this.occlusionXBlur);\r\n this.occlusionYBlur = dispose(this.occlusionYBlur);\r\n }\r\n }\r\n\r\n public enableVolumeClassifier(textures: Textures, depth: DepthBuffer, width: number, height: number): boolean {\r\n assert(undefined === this.volClassColorStencil && undefined === this.volClassCopyZ && undefined === this.volClassSetBlend && undefined === this.volClassBlend);\r\n this.volClassColorStencil = ViewportQuadGeometry.create(TechniqueId.VolClassColorUsingStencil);\r\n this.volClassCopyZ = SingleTexturedViewportQuadGeometry.createGeometry(depth.getHandle()!, TechniqueId.VolClassCopyZ);\r\n this.volClassSetBlend = VolumeClassifierGeometry.createVCGeometry(depth.getHandle()!);\r\n this.volClassBlend = SingleTexturedViewportQuadGeometry.createGeometry(textures.volClassBlend!.getHandle()!, TechniqueId.VolClassBlend);\r\n if (!System.instance.capabilities.supportsFragDepth)\r\n this.volClassCopyZWithPoints = ScreenPointsGeometry.createGeometry(width, height, depth.getHandle()!);\r\n return undefined !== this.volClassColorStencil && undefined !== this.volClassCopyZ && undefined !== this.volClassSetBlend && undefined !== this.volClassBlend\r\n && (System.instance.capabilities.supportsFragDepth || undefined !== this.volClassCopyZWithPoints);\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n if (undefined !== this.volClassColorStencil) {\r\n this.volClassColorStencil = dispose(this.volClassColorStencil);\r\n this.volClassCopyZ = dispose(this.volClassCopyZ);\r\n this.volClassSetBlend = dispose(this.volClassSetBlend);\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n if (!System.instance.capabilities.supportsFragDepth)\r\n this.volClassCopyZWithPoints = dispose(this.volClassCopyZWithPoints);\r\n }\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.composite\r\n && undefined === this.occlusion\r\n && undefined === this.occlusionXBlur\r\n && undefined === this.occlusionYBlur\r\n && undefined === this.volClassColorStencil\r\n && undefined === this.volClassCopyZ\r\n && undefined === this.volClassSetBlend\r\n && undefined === this.volClassBlend\r\n && undefined === this.volClassCopyZWithPoints;\r\n }\r\n\r\n public dispose() {\r\n this.composite = dispose(this.composite);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionXBlur = dispose(this.occlusionXBlur);\r\n this.occlusionYBlur = dispose(this.occlusionYBlur);\r\n this.disableVolumeClassifier();\r\n }\r\n}\r\n\r\ninterface BatchInfo {\r\n featureTable: PackedFeatureTable;\r\n iModel?: IModelConnection;\r\n tileId?: string;\r\n}\r\n\r\n// Represents a view of data read from a region of the frame buffer.\r\nclass PixelBuffer implements Pixel.Buffer {\r\n private readonly _rect: ViewRect;\r\n private readonly _selector: Pixel.Selector;\r\n private readonly _featureId?: Uint32Array;\r\n private readonly _depthAndOrder?: Uint32Array;\r\n private readonly _batchState: BatchState;\r\n\r\n private get _numPixels(): number { return this._rect.width * this._rect.height; }\r\n\r\n private getPixelIndex(x: number, y: number): number {\r\n if (x < this._rect.left || y < this._rect.top)\r\n return this._numPixels;\r\n\r\n x -= this._rect.left;\r\n y -= this._rect.top;\r\n if (x >= this._rect.width || y >= this._rect.height)\r\n return this._numPixels;\r\n\r\n // NB: View coords have origin at top-left; GL at bottom-left. So our rows are upside-down.\r\n y = this._rect.height - 1 - y;\r\n return y * this._rect.width + x;\r\n }\r\n\r\n private getPixel32(data: Uint32Array, pixelIndex: number): number | undefined {\r\n return pixelIndex < data.length ? data[pixelIndex] : undefined;\r\n }\r\n\r\n private getFeature(pixelIndex: number): Feature | undefined {\r\n const featureId = this.getFeatureId(pixelIndex);\r\n return undefined !== featureId ? this._batchState.getFeature(featureId) : undefined;\r\n }\r\n\r\n private getFeatureId(pixelIndex: number): number | undefined {\r\n return undefined !== this._featureId ? this.getPixel32(this._featureId, pixelIndex) : undefined;\r\n }\r\n\r\n private getBatchInfo(pixelIndex: number): BatchInfo | undefined {\r\n const featureId = this.getFeatureId(pixelIndex);\r\n if (undefined !== featureId) {\r\n const batch = this._batchState.find(featureId);\r\n if (undefined !== batch)\r\n return { featureTable: batch.featureTable, iModel: batch.batchIModel, tileId: batch.tileId };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private readonly _scratchUint32Array = new Uint32Array(1);\r\n private readonly _scratchUint8Array = new Uint8Array(this._scratchUint32Array.buffer);\r\n private readonly _scratchVector3d = new Vector3d();\r\n private readonly _mult = new Vector3d(1.0, 1.0 / 255.0, 1.0 / 65025.0);\r\n private decodeDepthRgba(depthAndOrder: number): number {\r\n this._scratchUint32Array[0] = depthAndOrder;\r\n const bytes = this._scratchUint8Array;\r\n const fpt = Vector3d.create(bytes[1] / 255.0, bytes[2] / 255.0, bytes[3] / 255.0, this._scratchVector3d);\r\n let depth = fpt.dotProduct(this._mult);\r\n\r\n assert(0.0 <= depth);\r\n assert(1.01 >= depth); // rounding error...\r\n\r\n depth = Math.min(1.0, depth);\r\n depth = Math.max(0.0, depth);\r\n\r\n return depth;\r\n }\r\n\r\n private decodeRenderOrderRgba(depthAndOrder: number): RenderOrder {\r\n this._scratchUint32Array[0] = depthAndOrder;\r\n const encByte = this._scratchUint8Array[0];\r\n const enc = encByte / 255.0;\r\n const dec = Math.floor(16.0 * enc + 0.5);\r\n return dec;\r\n }\r\n\r\n private readonly _invalidPixelData = new Pixel.Data();\r\n public getPixel(x: number, y: number): Pixel.Data {\r\n const px = this._invalidPixelData;\r\n const index = this.getPixelIndex(x, y);\r\n if (index >= this._numPixels)\r\n return px;\r\n\r\n // Initialize to the defaults...\r\n let distanceFraction = px.distanceFraction;\r\n let geometryType = px.type;\r\n let planarity = px.planarity;\r\n\r\n const haveFeatureIds = Pixel.Selector.None !== (this._selector & Pixel.Selector.Feature);\r\n const feature = haveFeatureIds ? this.getFeature(index) : undefined;\r\n const batchInfo = haveFeatureIds ? this.getBatchInfo(index) : undefined;\r\n if (Pixel.Selector.None !== (this._selector & Pixel.Selector.GeometryAndDistance) && undefined !== this._depthAndOrder) {\r\n const depthAndOrder = this.getPixel32(this._depthAndOrder, index);\r\n if (undefined !== depthAndOrder) {\r\n distanceFraction = this.decodeDepthRgba(depthAndOrder);\r\n\r\n const orderWithPlanarBit = this.decodeRenderOrderRgba(depthAndOrder);\r\n const order = orderWithPlanarBit & ~RenderOrder.PlanarBit;\r\n planarity = (orderWithPlanarBit === order) ? Pixel.Planarity.NonPlanar : Pixel.Planarity.Planar;\r\n switch (order) {\r\n case RenderOrder.None:\r\n geometryType = Pixel.GeometryType.None;\r\n planarity = Pixel.Planarity.None;\r\n break;\r\n case RenderOrder.Background:\r\n case RenderOrder.BlankingRegion:\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n geometryType = Pixel.GeometryType.Surface;\r\n break;\r\n case RenderOrder.Linear:\r\n geometryType = Pixel.GeometryType.Linear;\r\n break;\r\n case RenderOrder.Edge:\r\n geometryType = Pixel.GeometryType.Edge;\r\n break;\r\n case RenderOrder.Silhouette:\r\n geometryType = Pixel.GeometryType.Silhouette;\r\n break;\r\n default:\r\n // ###TODO: may run into issues with point clouds - they are not written correctly in C++.\r\n assert(false, \"Invalid render order\");\r\n geometryType = Pixel.GeometryType.None;\r\n planarity = Pixel.Planarity.None;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let featureTable, iModel, tileId;\r\n if (undefined !== batchInfo) {\r\n featureTable = batchInfo.featureTable;\r\n iModel = batchInfo.iModel;\r\n tileId = batchInfo.tileId;\r\n }\r\n\r\n return new Pixel.Data(feature, distanceFraction, geometryType, planarity, featureTable, iModel, tileId);\r\n }\r\n\r\n private constructor(rect: ViewRect, selector: Pixel.Selector, compositor: SceneCompositor) {\r\n this._rect = rect.clone();\r\n this._selector = selector;\r\n this._batchState = compositor.target.uniforms.batch.state;\r\n\r\n if (Pixel.Selector.None !== (selector & Pixel.Selector.GeometryAndDistance)) {\r\n const depthAndOrderBytes = compositor.readDepthAndOrder(rect);\r\n if (undefined !== depthAndOrderBytes)\r\n this._depthAndOrder = new Uint32Array(depthAndOrderBytes.buffer);\r\n else\r\n this._selector &= ~Pixel.Selector.GeometryAndDistance;\r\n }\r\n\r\n if (Pixel.Selector.None !== (selector & Pixel.Selector.Feature)) {\r\n const features = compositor.readFeatureIds(rect);\r\n if (undefined !== features)\r\n this._featureId = new Uint32Array(features.buffer);\r\n else\r\n this._selector &= ~Pixel.Selector.Feature;\r\n }\r\n }\r\n\r\n public get isEmpty(): boolean { return Pixel.Selector.None === this._selector; }\r\n\r\n public static create(rect: ViewRect, selector: Pixel.Selector, compositor: SceneCompositor): Pixel.Buffer | undefined {\r\n const pdb = new PixelBuffer(rect, selector, compositor);\r\n return pdb.isEmpty ? undefined : pdb;\r\n }\r\n}\r\n\r\n/** Orchestrates rendering of the scene on behalf of a Target.\r\n * This base class exists only so we don't have to export all the types of the shared Compositor members like Textures, FrameBuffers, etc.\r\n * @internal\r\n */\r\nexport abstract class SceneCompositor implements WebGLDisposable, RenderMemory.Consumer {\r\n public readonly target: Target;\r\n public readonly solarShadowMap: SolarShadowMap;\r\n\r\n public abstract get currentRenderTargetIndex(): number;\r\n public abstract set currentRenderTargetIndex(_index: number);\r\n public abstract get isDisposed(): boolean;\r\n public abstract dispose(): void;\r\n public abstract preDraw(): void;\r\n public abstract draw(_commands: RenderCommands): void;\r\n public abstract drawForReadPixels(_commands: RenderCommands, sceneOverlays: GraphicList, overlayDecorations: GraphicList | undefined): void;\r\n public abstract readPixels(rect: ViewRect, selector: Pixel.Selector): Pixel.Buffer | undefined;\r\n public abstract readDepthAndOrder(rect: ViewRect): Uint8Array | undefined;\r\n public abstract readFeatureIds(rect: ViewRect): Uint8Array | undefined;\r\n public abstract updateSolarShadows(context: SceneContext | undefined): void;\r\n\r\n /** Obtain a framebuffer with a single spare RGBA texture that can be used for screen-space effect shaders. */\r\n public abstract get screenSpaceEffectFbo(): FrameBuffer;\r\n\r\n public abstract get featureIds(): TextureHandle;\r\n public abstract get depthAndOrder(): TextureHandle;\r\n public abstract get antialiasSamples(): number;\r\n\r\n protected constructor(target: Target) {\r\n this.target = target;\r\n this.solarShadowMap = new SolarShadowMap(target);\r\n }\r\n\r\n public static create(target: Target): SceneCompositor {\r\n return System.instance.capabilities.supportsDrawBuffers ? new MRTCompositor(target) : new MPCompositor(target);\r\n }\r\n\r\n public abstract collectStatistics(stats: RenderMemory.Statistics): void;\r\n}\r\n\r\n// The actual base class. Specializations are provided based on whether or not multiple render targets are supported.\r\nabstract class Compositor extends SceneCompositor {\r\n protected _width: number = -1;\r\n protected _height: number = -1;\r\n protected _includeOcclusion: boolean = false;\r\n protected _textures = new Textures();\r\n protected _depth?: DepthBuffer;\r\n protected _depthMS?: DepthBuffer; // multisample depth buffer\r\n protected _frameBuffers: FrameBuffers;\r\n protected _geom: Geometry;\r\n protected _readPickDataFromPingPong: boolean = true;\r\n protected _opaqueRenderState = new RenderState();\r\n protected _layerRenderState = new RenderState();\r\n protected _translucentRenderState = new RenderState();\r\n protected _hiliteRenderState = new RenderState();\r\n protected _noDepthMaskRenderState = new RenderState();\r\n protected _backgroundMapRenderState = new RenderState();\r\n protected _debugStencil: number = 0; // 0 to draw stencil volumes normally, 1 to draw as opaque, 2 to draw blended\r\n protected _vcBranchState?: BranchState;\r\n protected _vcSetStencilRenderState?: RenderState;\r\n protected _vcCopyZRenderState?: RenderState;\r\n protected _vcColorRenderState?: RenderState;\r\n protected _vcBlendRenderState?: RenderState;\r\n protected _vcPickDataRenderState?: RenderState;\r\n protected _vcDebugRenderState?: RenderState;\r\n protected _vcAltDepthStencil?: DepthBuffer;\r\n protected _vcAltDepthStencilMS?: DepthBuffer;\r\n protected _haveVolumeClassifier: boolean = false;\r\n protected _antialiasSamples: number = 1;\r\n protected readonly _viewProjectionMatrix = new Matrix4();\r\n\r\n public abstract override get currentRenderTargetIndex(): number;\r\n public abstract override set currentRenderTargetIndex(_index: number);\r\n\r\n protected abstract clearOpaque(_needComposite: boolean): void;\r\n protected abstract renderLayers(_commands: RenderCommands, _needComposite: boolean, pass: RenderPass): void;\r\n protected abstract renderOpaque(_commands: RenderCommands, _compositeFlags: CompositeFlags, _renderForReadPixels: boolean): void;\r\n protected abstract renderForVolumeClassification(_commands: RenderCommands, _compositeFlags: CompositeFlags, _renderForReadPixels: boolean): void;\r\n protected abstract renderIndexedClassifierForReadPixels(_commands: DrawCommands, state: RenderState, renderForIntersectingVolumes: boolean, _needComposite: boolean): void;\r\n protected abstract clearTranslucent(): void;\r\n protected abstract renderTranslucent(_commands: RenderCommands): void;\r\n protected abstract getBackgroundFbo(_needComposite: boolean): FrameBuffer;\r\n protected abstract pingPong(): void;\r\n\r\n public get antialiasSamples(): number { return this._antialiasSamples; }\r\n\r\n protected get useMsBuffers(): boolean { return this._antialiasSamples > 1 && !this.target.isReadPixelsInProgress; }\r\n\r\n protected enableVolumeClassifierFbos(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n this._frameBuffers.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n }\r\n protected disableVolumeClassifierFbos(): void { this._frameBuffers.disableVolumeClassifier(); }\r\n\r\n /** This function generates a texture that contains ambient occlusion information to be applied later. */\r\n protected renderAmbientOcclusion() {\r\n const system = System.instance;\r\n\r\n // Render unblurred ambient occlusion based on depth buffer\r\n let fbo = this._frameBuffers.occlusion!;\r\n this.target.beginPerfMetricRecord(\"Compute AO\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, this._geom.occlusion!);\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the X-blurred ambient occlusion based on unblurred ambient occlusion\r\n fbo = this._frameBuffers.occlusionBlur!;\r\n this.target.beginPerfMetricRecord(\"Blur AO X\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, this._geom.occlusionXBlur!);\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the Y-blurred ambient occlusion based on X-blurred ambient occlusion (render into original occlusion framebuffer)\r\n fbo = this._frameBuffers.occlusion!;\r\n this.target.beginPerfMetricRecord(\"Blur AO Y\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, this._geom.occlusionYBlur!);\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n }\r\n\r\n protected constructor(target: Target, fbos: FrameBuffers, geometry: Geometry) {\r\n super(target);\r\n\r\n this._frameBuffers = fbos;\r\n this._geom = geometry;\r\n\r\n this._opaqueRenderState.flags.depthTest = true;\r\n\r\n this._translucentRenderState.flags.depthMask = false;\r\n this._translucentRenderState.flags.blend = this._translucentRenderState.flags.depthTest = true;\r\n this._translucentRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.Zero, GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n\r\n this._hiliteRenderState.flags.depthMask = false;\r\n this._hiliteRenderState.flags.blend = true;\r\n this._hiliteRenderState.blend.functionDestRgb = GL.BlendFactor.One;\r\n this._hiliteRenderState.blend.functionDestAlpha = GL.BlendFactor.One;\r\n\r\n this._noDepthMaskRenderState.flags.depthMask = false;\r\n\r\n // Background map supports transparency, even when depth is off, which is mostly useless but should blend with background color / skybox.\r\n this._backgroundMapRenderState.flags.depthMask = false;\r\n this._backgroundMapRenderState.flags.blend = true;\r\n this._backgroundMapRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n\r\n // Can't write depth without enabling depth test - so make depth test always pass\r\n this._layerRenderState.flags.depthTest = true;\r\n this._layerRenderState.depthFunc = GL.DepthFunc.Always;\r\n this._layerRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._depth)\r\n stats.addTextureAttachment(this._depth.bytesUsed);\r\n if (undefined !== this._depthMS)\r\n stats.addTextureAttachment(this._depthMS.bytesUsed);\r\n this._textures.collectStatistics(stats);\r\n this._geom.collectStatistics(stats);\r\n }\r\n\r\n public preDraw(): boolean {\r\n const rect = this.target.viewRect;\r\n const width = rect.width;\r\n const height = rect.height;\r\n const includeOcclusion = this.target.wantAmbientOcclusion;\r\n const wantVolumeClassifier = (undefined !== this.target.activeVolumeClassifierProps);\r\n let wantAntialiasSamples = this.target.antialiasSamples <= 1 || !System.instance.capabilities.supportsDrawBuffers ? 1 : this.target.antialiasSamples;\r\n if (wantAntialiasSamples > System.instance.capabilities.maxAntialiasSamples)\r\n wantAntialiasSamples = System.instance.capabilities.maxAntialiasSamples;\r\n const changeAntialiasSamples = (this._antialiasSamples > 1 && wantAntialiasSamples > 1 && this._antialiasSamples !== wantAntialiasSamples);\r\n\r\n // If not yet initialized, or dimensions changed, or antialiasing changed the number of samples, initialize.\r\n if (undefined === this._textures.accumulation || width !== this._width || height !== this._height || changeAntialiasSamples) {\r\n this._width = width;\r\n this._height = height;\r\n this._antialiasSamples = wantAntialiasSamples;\r\n\r\n // init() first calls dispose(), which releases all of our fbos, textures, etc, and resets the _includeOcclusion flag.\r\n if (!this.init()) {\r\n assert(false, \"Failed to initialize scene compositor\");\r\n return false;\r\n }\r\n } else if (this._antialiasSamples !== wantAntialiasSamples) {\r\n // Turn on or off multisampling. Rather than just re-initializing, we can save the\r\n // non multisampled textures & FBOs and just try to add or delete the multisampled ones.\r\n this._antialiasSamples = wantAntialiasSamples;\r\n if (wantVolumeClassifier && this._haveVolumeClassifier) {\r\n // Multisampling and volume classification buffers are somewhat co-dependent so if volume classification is on\r\n // and is staying on, just disable volume classifiers and let them get re-enabled later.\r\n this.disableVolumeClassifierFbos();\r\n this._geom.disableVolumeClassifier();\r\n this._textures.disableVolumeClassifier();\r\n if (undefined !== this._vcAltDepthStencil) {\r\n this._vcAltDepthStencil.dispose();\r\n this._vcAltDepthStencil = undefined;\r\n }\r\n this._haveVolumeClassifier = false;\r\n }\r\n if (this._antialiasSamples > 1) {\r\n if (!this.enableMultiSampling()) {\r\n assert(false, \"Failed to initialize multisampling buffers\");\r\n return false;\r\n }\r\n } else {\r\n if (!this.disableMultiSampling()) {\r\n assert(false, \"Failed to initialize multisampling buffers\");\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n // Allocate or free ambient occlusion-related resources if necessary\r\n if (includeOcclusion !== this._includeOcclusion) {\r\n this._includeOcclusion = includeOcclusion;\r\n if (includeOcclusion) {\r\n if (!this._textures.enableOcclusion(width, height)) {\r\n assert(false, \"Failed to initialize occlusion textures\");\r\n return false;\r\n }\r\n } else {\r\n this._textures.disableOcclusion();\r\n }\r\n\r\n this._frameBuffers.toggleOcclusion(this._textures);\r\n this._geom.toggleOcclusion(this._textures);\r\n }\r\n\r\n // Allocate or free volume classifier-related resources if necessary. Make sure that we have depth/stencil.\r\n if (wantVolumeClassifier !== this._haveVolumeClassifier) {\r\n if (wantVolumeClassifier && DepthType.TextureUnsignedInt24Stencil8 === System.instance.capabilities.maxDepthType) {\r\n this._vcAltDepthStencil = System.instance.createDepthBuffer(width, height) as TextureHandle;\r\n if (undefined !== this._depthMS)\r\n this._vcAltDepthStencilMS = System.instance.createDepthBuffer(width, height, this._antialiasSamples) as TextureHandle;\r\n if (undefined === this._vcAltDepthStencil || (undefined !== this._depthMS && undefined === this._vcAltDepthStencilMS)) {\r\n assert(false, \"Failed to initialize volume classifier depth buffer\");\r\n return false;\r\n }\r\n if (!this._textures.enableVolumeClassifier(width, height, this._antialiasSamples)) {\r\n assert(false, \"Failed to initialize volume classifier textures\");\r\n return false;\r\n }\r\n if (!this._geom.enableVolumeClassifier(this._textures, this._depth!, width, height)) {\r\n assert(false, \"Failed to initialize volume classifier geometry\");\r\n return false;\r\n }\r\n this.enableVolumeClassifierFbos(this._textures, this._depth!, this._vcAltDepthStencil, this._depthMS, this._vcAltDepthStencilMS);\r\n this._haveVolumeClassifier = true;\r\n } else {\r\n this.disableVolumeClassifierFbos();\r\n this._geom.disableVolumeClassifier();\r\n this._textures.disableVolumeClassifier();\r\n if (undefined !== this._vcAltDepthStencil) {\r\n this._vcAltDepthStencil.dispose();\r\n this._vcAltDepthStencil = undefined;\r\n }\r\n this._haveVolumeClassifier = false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public draw(commands: RenderCommands) {\r\n if (!this.preDraw()) {\r\n assert(false);\r\n return;\r\n }\r\n\r\n const compositeFlags = commands.compositeFlags;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n\r\n // Clear output targets\r\n this.target.frameStatsCollector.beginTime(\"opaqueTime\");\r\n this.target.beginPerfMetricRecord(\"Clear Opaque\");\r\n this.clearOpaque(needComposite);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"opaqueTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"backgroundTime\"); // includes skybox\r\n\r\n // Render the background\r\n this.target.beginPerfMetricRecord(\"Render Background\");\r\n this.renderBackground(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the sky box\r\n this.target.beginPerfMetricRecord(\"Render Skybox\");\r\n this.renderSkyBox(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the background map graphics\r\n this.target.beginPerfMetricRecord(\"Render Background Map\");\r\n this.renderBackgroundMap(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"backgroundTime\");\r\n\r\n // Enable clipping\r\n this.target.beginPerfMetricRecord(\"Enable Clipping\");\r\n this.target.pushViewClip();\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render volume classification first so that we only classify the reality data\r\n this.target.frameStatsCollector.beginTime(\"classifiersTime\");\r\n this.target.beginPerfMetricRecord(\"Render VolumeClassification\");\r\n this.renderVolumeClassification(commands, compositeFlags, false);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"classifiersTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"opaqueTime\");\r\n\r\n // Render layers\r\n this.target.beginPerfMetricRecord(\"Render Opaque Layers\");\r\n this.renderLayers(commands, needComposite, RenderPass.OpaqueLayers);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render opaque geometry\r\n this.target.frameStatsCollector.beginTime(\"onRenderOpaqueTime\");\r\n IModelFrameLifecycle.onRenderOpaque.raiseEvent({\r\n commands,\r\n needComposite,\r\n compositeFlags,\r\n fbo: this.getBackgroundFbo(needComposite),\r\n frameBufferStack: System.instance.frameBufferStack,\r\n });\r\n this.target.frameStatsCollector.endTime(\"onRenderOpaqueTime\");\r\n\r\n // Render opaque geometry\r\n this.target.beginPerfMetricRecord(\"Render Opaque\");\r\n this.renderOpaque(commands, compositeFlags, false);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"opaqueTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"translucentTime\");\r\n\r\n // Render translucent layers\r\n this.target.beginPerfMetricRecord(\"Render Translucent Layers\");\r\n this.renderLayers(commands, needComposite, RenderPass.TranslucentLayers);\r\n this.target.endPerfMetricRecord();\r\n\r\n if (needComposite) {\r\n this._geom.composite!.update(compositeFlags);\r\n this.target.beginPerfMetricRecord(\"Render Translucent\");\r\n this.clearTranslucent();\r\n this.renderTranslucent(commands);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"translucentTime\");\r\n\r\n this.target.beginPerfMetricRecord(\"Render Hilite\");\r\n this.renderHilite(commands);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.beginPerfMetricRecord(\"Composite\");\r\n this.composite();\r\n this.target.endPerfMetricRecord();\r\n } else\r\n this.target.frameStatsCollector.endTime(\"translucentTime\");\r\n\r\n // Render overlay Layers\r\n this.target.frameStatsCollector.beginTime(\"overlaysTime\");\r\n this.target.beginPerfMetricRecord(\"Render Overlay Layers\");\r\n this.renderLayers(commands, false, RenderPass.OverlayLayers);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"overlaysTime\");\r\n\r\n this.target.popViewClip();\r\n }\r\n\r\n public get fullHeight(): number { return this.target.viewRect.height; }\r\n\r\n public drawForReadPixels(commands: RenderCommands, sceneOverlays: GraphicList, overlayDecorations: GraphicList | undefined): void {\r\n this.target.beginPerfMetricRecord(\"Render Background\", true);\r\n if (!this.preDraw()) {\r\n this.target.endPerfMetricRecord(true); // End Render Background record if returning\r\n assert(false);\r\n return;\r\n }\r\n\r\n this.clearOpaque(false);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // On entry the RenderCommands has been initialized for all scene graphics and pickable decorations with the exception of world overlays.\r\n // It's possible we have no pickable scene graphics or decorations, but do have pickable world overlays.\r\n const haveRenderCommands = !commands.isEmpty;\r\n if (haveRenderCommands) {\r\n this.target.beginPerfMetricRecord(\"Enable Clipping\", true);\r\n this.target.pushViewClip();\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render VolumeClassification\", true);\r\n this.renderVolumeClassification(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // RenderPass.BackgroundMap is used only when depth is turned off for the map.\r\n // Ensure it draws before any opaque geometry (including layers), without depth.\r\n this.target.beginPerfMetricRecord(\"Render background map\", true);\r\n this.target.drawingBackgroundForReadPixels = true;\r\n this.renderLayers(commands, false, RenderPass.BackgroundMap);\r\n this.target.drawingBackgroundForReadPixels = false;\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Opaque Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.OpaqueLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Opaque\", true);\r\n this.renderOpaque(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Translucent Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.TranslucentLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Overlay Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.OverlayLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.popViewClip();\r\n }\r\n\r\n if (0 === sceneOverlays.length && (undefined === overlayDecorations || 0 === overlayDecorations.length))\r\n return;\r\n\r\n // Now populate the opaque passes with any pickable world overlays\r\n this.target.beginPerfMetricRecord(\"Overlay Draws\", true);\r\n commands.initForPickOverlays(sceneOverlays, overlayDecorations);\r\n if (commands.isEmpty) {\r\n this.target.endPerfMetricRecord(true); // End Overlay Draws record if returning\r\n return;\r\n }\r\n\r\n // Clear the depth buffer so that overlay decorations win the depth test.\r\n // (If *only* overlays exist, then clearOpaque() above already took care of this).\r\n if (haveRenderCommands) {\r\n const system = System.instance;\r\n system.frameBufferStack.execute(this._frameBuffers.opaqueColor!, true, this.useMsBuffers, () => {\r\n system.applyRenderState(RenderState.defaults);\r\n system.context.clearDepth(1.0);\r\n system.context.clear(GL.BufferBit.Depth);\r\n });\r\n }\r\n\r\n // Render overlays as opaque into the pick buffers. Make sure we use the decoration state (to ignore symbology overrides, esp. the non-locatable flag).\r\n const decState = this.target.decorationsState;\r\n const vf = decState.viewFlags;\r\n if (vf.transparency)\r\n decState.viewFlags = vf.copy({ transparency: false });\r\n\r\n this.renderOpaque(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord();\r\n decState.viewFlags = vf;\r\n }\r\n\r\n public readPixels(rect: ViewRect, selector: Pixel.Selector): Pixel.Buffer | undefined {\r\n return PixelBuffer.create(rect, selector, this);\r\n }\r\n\r\n public readDepthAndOrder(rect: ViewRect): Uint8Array | undefined { return this.readFrameBuffer(rect, this._frameBuffers.depthAndOrder); }\r\n\r\n public readFeatureIds(rect: ViewRect): Uint8Array | undefined {\r\n const tex = this._textures.featureId;\r\n if (undefined === tex)\r\n return undefined;\r\n\r\n const fbo = FrameBuffer.create([tex]);\r\n const result = this.readFrameBuffer(rect, fbo);\r\n\r\n dispose(fbo);\r\n\r\n return result;\r\n }\r\n\r\n public updateSolarShadows(context: SceneContext | undefined): void {\r\n this.solarShadowMap.update(context);\r\n }\r\n\r\n public get screenSpaceEffectFbo(): FrameBuffer {\r\n assert(undefined !== this._frameBuffers.hilite);\r\n return this._frameBuffers.hilite;\r\n }\r\n\r\n private readFrameBuffer(rect: ViewRect, fbo?: FrameBuffer): Uint8Array | undefined {\r\n if (undefined === fbo || !Debug.isValidFrameBuffer)\r\n return undefined;\r\n\r\n // NB: ViewRect origin at top-left; GL origin at bottom-left\r\n const bottom = this.fullHeight - rect.bottom;\r\n const gl = System.instance.context;\r\n const bytes = new Uint8Array(rect.width * rect.height * 4);\r\n let result: Uint8Array | undefined = bytes;\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n try {\r\n gl.readPixels(rect.left, bottom, rect.width, rect.height, gl.RGBA, gl.UNSIGNED_BYTE, bytes);\r\n } catch (e) {\r\n result = undefined;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._depth\r\n && undefined === this._vcAltDepthStencil\r\n && !this._includeOcclusion\r\n && this._textures.isDisposed\r\n && this._frameBuffers.isDisposed\r\n && this._geom.isDisposed\r\n && !this._haveVolumeClassifier\r\n && this.solarShadowMap.isDisposed;\r\n }\r\n\r\n public dispose() {\r\n this.reset();\r\n dispose(this.solarShadowMap);\r\n }\r\n\r\n // Resets anything that depends on the dimensions of the render target.\r\n // Does *not* dispose the solar shadow map.\r\n private reset() {\r\n this._depth = dispose(this._depth);\r\n this._depthMS = dispose(this._depthMS);\r\n this._vcAltDepthStencil = dispose(this._vcAltDepthStencil);\r\n this._includeOcclusion = false;\r\n dispose(this._textures);\r\n dispose(this._frameBuffers);\r\n dispose(this._geom);\r\n this._haveVolumeClassifier = false;\r\n }\r\n\r\n private init(): boolean {\r\n this.reset();\r\n this._depth = System.instance.createDepthBuffer(this._width, this._height, 1);\r\n if (this._antialiasSamples > 1)\r\n this._depthMS = System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);\r\n else\r\n this._depthMS = undefined;\r\n if (this._depth !== undefined) {\r\n return this._textures.init(this._width, this._height, this._antialiasSamples)\r\n && this._frameBuffers.init(this._textures, this._depth, this._depthMS)\r\n && this._geom.init(this._textures);\r\n }\r\n return false;\r\n }\r\n\r\n protected enableMultiSampling(): boolean {\r\n // Assume that non-multisampled stuff is already allocated. Just need to add multisampled textures, buffers, & geometry.\r\n assert(undefined === this._depthMS && undefined !== this._depth);\r\n this._depthMS = System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);\r\n if (undefined === this._depthMS)\r\n return false;\r\n return this._textures.enableMultiSampling(this._width, this._height, this._antialiasSamples);\r\n }\r\n\r\n protected disableMultiSampling(): boolean {\r\n // Want to disable multisampling without deleting & reallocating other stuff.\r\n this._depthMS = dispose(this._depthMS);\r\n assert(undefined !== this._depth);\r\n return this._textures.disableMultiSampling();\r\n }\r\n\r\n private renderBackgroundMap(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.BackgroundMap);\r\n if (0 === cmds.length) {\r\n return;\r\n }\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.BackgroundMap));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.BackgroundMap);\r\n });\r\n }\r\n\r\n private renderSkyBox(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.SkyBox);\r\n if (0 === cmds.length) {\r\n return;\r\n }\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.SkyBox));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.SkyBox);\r\n });\r\n }\r\n\r\n private renderBackground(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.Background);\r\n if (0 === cmds.length)\r\n return;\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.Background));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Background);\r\n });\r\n }\r\n\r\n private createVolumeClassifierStates() {\r\n // If we have already created a branch state for use in rendering the volume classifiers we must at least swap out its symbology overrides for the current one.\r\n if (undefined !== this._vcBranchState) {\r\n this._vcBranchState.symbologyOverrides = this.target.uniforms.branch.top.symbologyOverrides;\r\n return;\r\n }\r\n\r\n // Create a BranchState and several RenderStates to use when drawing the classifier volumes.\r\n // The BranchState needs to be created every time in case the symbology overrides changes.\r\n // It is based off of the current state, but turns off unnecessary and unwanted options, lighting being the most important.\r\n const top = this.target.uniforms.branch.top;\r\n const viewFlags = top.viewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n lighting: false,\r\n forceSurfaceDiscard: false,\r\n hiddenEdges: false,\r\n visibleEdges: false,\r\n materials: false,\r\n textures: false,\r\n transparency: false,\r\n });\r\n\r\n this._vcBranchState = new BranchState({\r\n symbologyOverrides: top.symbologyOverrides,\r\n viewFlags,\r\n transform: Transform.createIdentity(),\r\n clipVolume: top.clipVolume,\r\n planarClassifier: top.planarClassifier,\r\n iModel: top.iModel,\r\n is3d: top.is3d,\r\n edgeSettings: top.edgeSettings,\r\n });\r\n\r\n this._vcSetStencilRenderState = new RenderState();\r\n this._vcCopyZRenderState = new RenderState();\r\n this._vcColorRenderState = new RenderState();\r\n this._vcBlendRenderState = new RenderState();\r\n this._vcPickDataRenderState = new RenderState();\r\n\r\n this._vcCopyZRenderState.flags.depthTest = true;\r\n this._vcCopyZRenderState.flags.depthMask = true;\r\n this._vcCopyZRenderState.depthFunc = GL.DepthFunc.Always;\r\n this._vcCopyZRenderState.flags.colorWrite = true;\r\n this._vcCopyZRenderState.flags.stencilTest = true;\r\n this._vcCopyZRenderState.stencil.frontFunction.function = GL.StencilFunction.Always;\r\n this._vcCopyZRenderState.stencil.frontOperation.fail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.frontOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.frontOperation.zPass = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backFunction.function = GL.StencilFunction.Always;\r\n this._vcCopyZRenderState.stencil.backOperation.fail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero;\r\n\r\n this._vcSetStencilRenderState.flags.depthTest = true;\r\n this._vcSetStencilRenderState.flags.depthMask = false;\r\n this._vcSetStencilRenderState.flags.colorWrite = false;\r\n this._vcSetStencilRenderState.flags.stencilTest = true;\r\n this._vcSetStencilRenderState.depthFunc = GL.DepthFunc.LessOrEqual;\r\n this._vcSetStencilRenderState.stencil.frontFunction.function = GL.StencilFunction.Always;\r\n this._vcSetStencilRenderState.stencil.frontOperation.zFail = GL.StencilOperation.IncrWrap;\r\n this._vcSetStencilRenderState.stencil.backFunction.function = GL.StencilFunction.Always;\r\n this._vcSetStencilRenderState.stencil.backOperation.zFail = GL.StencilOperation.DecrWrap;\r\n\r\n this._vcPickDataRenderState.flags.depthTest = false;\r\n this._vcPickDataRenderState.flags.depthMask = false;\r\n this._vcPickDataRenderState.flags.colorWrite = true;\r\n this._vcPickDataRenderState.flags.stencilTest = true;\r\n this._vcPickDataRenderState.flags.cull = true;\r\n this._vcPickDataRenderState.cullFace = GL.CullFace.Front;\r\n this._vcPickDataRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcPickDataRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n // Let all of the operations remain at Keep so that the stencil will remain in tact for the subsequent blend draw to the color buffer.\r\n\r\n this._vcColorRenderState.flags.depthTest = false;\r\n this._vcColorRenderState.flags.depthMask = false;\r\n this._vcColorRenderState.flags.colorWrite = true;\r\n this._vcColorRenderState.flags.stencilTest = true;\r\n this._vcColorRenderState.cullFace = GL.CullFace.Front;\r\n this._vcColorRenderState.stencil.frontFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.frontOperation.fail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.frontOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.frontOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n this._vcColorRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.backOperation.fail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.backOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n this._vcColorRenderState.flags.blend = true; // blend func and color will be set before using\r\n\r\n this._vcBlendRenderState.flags.depthTest = false;\r\n this._vcBlendRenderState.flags.depthMask = false;\r\n this._vcBlendRenderState.flags.colorWrite = true;\r\n this._vcBlendRenderState.flags.stencilTest = false;\r\n this._vcBlendRenderState.flags.blend = true;\r\n this._vcBlendRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.SrcAlpha, GL.BlendFactor.Zero, GL.BlendFactor.OneMinusSrcAlpha, GL.BlendFactor.One);\r\n\r\n if (this._debugStencil > 0) {\r\n this._vcDebugRenderState = new RenderState();\r\n this._vcDebugRenderState.flags.depthTest = true;\r\n this._vcDebugRenderState.flags.blend = true;\r\n this._vcDebugRenderState.blend.setBlendFunc(GL.BlendFactor.OneMinusConstColor, GL.BlendFactor.ConstColor);\r\n this._vcDebugRenderState.blend.color = [0.67, 0.67, 0.67, 1.0];\r\n }\r\n }\r\n\r\n private setAllStencilOps(state: RenderState, op: GL.StencilOperation): void {\r\n state.stencil.frontOperation.fail = op;\r\n state.stencil.frontOperation.zFail = op;\r\n state.stencil.frontOperation.zPass = op;\r\n state.stencil.backOperation.fail = op;\r\n state.stencil.backOperation.zFail = op;\r\n state.stencil.backOperation.zPass = op;\r\n }\r\n\r\n private renderIndexedVolumeClassifier(cmdsByIndex: DrawCommands, needComposite: boolean) {\r\n // Set the stencil for the given classifier stencil volume.\r\n System.instance.frameBufferStack.execute(this._frameBuffers.stencilSet!, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.executeForIndexedClassifier(this.target, cmdsByIndex, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil for the pick data.\r\n this.renderIndexedClassifierForReadPixels(cmdsByIndex, this._vcPickDataRenderState!, true, needComposite);\r\n }\r\n\r\n private renderVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n // Sometimes we need to render the classifier stencil volumes one at a time, if so draw them from the cmdsByIndex list\r\n const cmds = commands.getCommands(RenderPass.Classification);\r\n const cmdsByIndex = commands.getCommands(RenderPass.ClassificationByIndex);\r\n let numCmdsPerClassifier = 0;\r\n for (const cmd of cmdsByIndex) { // Figure out how many commands there are per index/primitive\r\n numCmdsPerClassifier++;\r\n if (\"drawPrimitive\" === cmd.opcode) {\r\n numCmdsPerClassifier += numCmdsPerClassifier - 1;\r\n break;\r\n }\r\n }\r\n const cmdsForVC = commands.getCommands(RenderPass.VolumeClassifiedRealityData);\r\n if (!this.target.activeVolumeClassifierProps || (renderForReadPixels && 0 === cmds.length) || 0 === cmdsForVC.length)\r\n return;\r\n\r\n let outsideFlags = this.target.activeVolumeClassifierProps.flags.outside;\r\n let insideFlags = this.target.activeVolumeClassifierProps.flags.inside;\r\n\r\n if (this.target.wantThematicDisplay) {\r\n if (outsideFlags !== SpatialClassifierOutsideDisplay.Off)\r\n outsideFlags = SpatialClassifierOutsideDisplay.On;\r\n if (insideFlags !== SpatialClassifierInsideDisplay.Off)\r\n insideFlags = SpatialClassifierInsideDisplay.On;\r\n }\r\n\r\n // Render the geometry which we are going to classify.\r\n this.renderForVolumeClassification(commands, compositeFlags, renderForReadPixels);\r\n\r\n this.createVolumeClassifierStates();\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const fboColorAndZ = this.getBackgroundFbo(needComposite);\r\n\r\n if (this._debugStencil > 0) {\r\n fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {\r\n if (1 === this._debugStencil) {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.OpaqueGeneral));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n } else {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcDebugRenderState!);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n }\r\n });\r\n return;\r\n }\r\n\r\n if (undefined === this._frameBuffers.altZOnly || undefined === this._frameBuffers.stencilSet)\r\n return;\r\n\r\n if (renderForReadPixels && this.target.vcSupportIntersectingVolumes) {\r\n // Clear the stencil.\r\n fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n });\r\n\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n\r\n for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier)\r\n this.renderIndexedVolumeClassifier(cmdsByIndex.slice(i, i + numCmdsPerClassifier), needComposite);\r\n\r\n return;\r\n }\r\n\r\n const needOutsideDraw = SpatialClassifierOutsideDisplay.On !== outsideFlags;\r\n const needInsideDraw = SpatialClassifierInsideDisplay.On !== insideFlags;\r\n const doColorByElement = SpatialClassifierInsideDisplay.ElementColor === insideFlags || renderForReadPixels;\r\n const doColorByElementForIntersectingVolumes = this.target.vcSupportIntersectingVolumes;\r\n const needAltZ = (doColorByElement && !doColorByElementForIntersectingVolumes) || needOutsideDraw;\r\n let zOnlyFbo = this._frameBuffers.stencilSet;\r\n let volClassBlendFbo = this._frameBuffers.volClassCreateBlend;\r\n let volClassBlendReadZTexture = this._vcAltDepthStencil!.getHandle()!;\r\n let volClassBlendReadZTextureFbo = this._frameBuffers.altZOnly;\r\n if (!needAltZ) {\r\n // Initialize the blend texture and the stencil.\r\n assert(undefined !== volClassBlendFbo);\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n System.instance.context.clearColor(0.0, 0.0, 0.0, 0.0);\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Color | GL.BufferBit.Stencil);\r\n });\r\n } else {\r\n // If we are doing color-by-element for the inside do not care about intersecting volumes or we need to color the outside\r\n // then we need to copy the Z buffer and set up a different zbuffer/stencil to render in.\r\n zOnlyFbo = this._frameBuffers.altZOnly;\r\n volClassBlendFbo = this._frameBuffers.volClassCreateBlendAltZ;\r\n assert(undefined !== volClassBlendFbo);\r\n volClassBlendReadZTexture = this._depth!.getHandle()!;\r\n volClassBlendReadZTextureFbo = this._frameBuffers.stencilSet;\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n // Copy the current Z into the Alt-Z. At the same time go ahead and clear the stencil and the blend texture.\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n this.target.pushState(this.target.decorationsState);\r\n System.instance.applyRenderState(this._vcCopyZRenderState!);\r\n if (System.instance.capabilities.supportsFragDepth)\r\n this.target.techniques.draw(getDrawParams(this.target, this._geom.volClassCopyZ!)); // This method uses the EXT_frag_depth extension\r\n else\r\n this.target.techniques.draw(getDrawParams(this.target, this._geom.volClassCopyZWithPoints!)); // This method draws GL_POINTS (1 per pixel) to set Z in vertex shader\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n this.target.popBranch();\r\n });\r\n }\r\n\r\n if (renderForReadPixels) {\r\n // Set the stencil for all of the classifier volumes.\r\n System.instance.frameBufferStack.execute(this._frameBuffers.altZOnly, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n // After we create the stencil we need to clear the Z for the next step (so also must turn on z writing temporarily).\r\n this._vcSetStencilRenderState!.flags.depthMask = true;\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n this._vcSetStencilRenderState!.flags.depthMask = false;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Two, undefined);\r\n System.instance.bindTexture2d(TextureUnit.Five, undefined);\r\n });\r\n this.target.pushState(this._vcBranchState!);\r\n this._vcColorRenderState!.flags.depthTest = true;\r\n this._vcColorRenderState!.flags.depthMask = true;\r\n this._vcColorRenderState!.flags.cull = true;\r\n this._vcColorRenderState!.flags.blend = false;\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw\r\n this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ!.texture;\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n this.renderIndexedClassifierForReadPixels(cmds, this._vcColorRenderState!, false, needComposite);\r\n this.target.activeVolumeClassifierTexture = undefined;\r\n this._vcColorRenderState!.flags.depthTest = false;\r\n this._vcColorRenderState!.flags.depthMask = false;\r\n this._vcColorRenderState!.flags.cull = false;\r\n this._vcColorRenderState!.flags.blend = true;\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Zero);\r\n System.instance.context.clearStencil(0); // must clear stencil afterwards since we had to draw with stencil set to KEEP\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.PlanarClassification, undefined);\r\n return;\r\n }\r\n\r\n if ((needOutsideDraw && cmds.length > 0) || (needInsideDraw && !(doColorByElement && doColorByElementForIntersectingVolumes))) {\r\n // Set the stencil using all of the volume classifiers. This will be used to do the outside and/or the inside if they need to be done.\r\n // If we are not modifying the outside and the inside is using color-by-element for intersecting volumes, then the stencil will get set later.\r\n fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Two, undefined);\r\n System.instance.bindTexture2d(TextureUnit.Five, undefined);\r\n });\r\n }\r\n if (needOutsideDraw) {\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n this._geom.volClassSetBlend!.boundaryType = BoundaryType.Outside;\r\n this._geom.volClassSetBlend!.texture = volClassBlendReadZTexture;\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState!.flags.blend = false;\r\n this._vcColorRenderState!.stencil.frontFunction.function = GL.StencilFunction.Equal; // temp swap the functions so we get what is not set in the stencil\r\n this._vcColorRenderState!.stencil.backFunction.function = GL.StencilFunction.Equal;\r\n if (needInsideDraw)\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Keep); // don't clear the stencil since we'll use it again\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend!);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState!.flags.blend = true;\r\n this._vcColorRenderState!.stencil.frontFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState!.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n if (needInsideDraw)\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Zero);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined); // unbind the depth buffer that we used as a texture as we'll need it as an output later\r\n });\r\n }\r\n if (needInsideDraw) {\r\n if (!doColorByElement) {\r\n // In this case our stencil is already set and it is all getting colored the same, so we can just draw with a viewport quad to color it.\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n this._geom.volClassSetBlend!.boundaryType = BoundaryType.Inside;\r\n this._geom.volClassSetBlend!.texture = volClassBlendReadZTexture;\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState!.flags.blend = false;\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend!);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState!.flags.blend = true;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n } else if (doColorByElementForIntersectingVolumes) {\r\n // If we have intersecting classifier volumes, then we must stencil them individually to get their colors in the blend texture.\r\n for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier) {\r\n const nxtCmds = cmdsByIndex.slice(i, i + numCmdsPerClassifier);\r\n // Set the stencil for this one classifier.\r\n fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.execute(this.target, nxtCmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil. Just render the volume normally (us opaque pass), but use blending to modify the source alpha that gets written to the blend texture.\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n this._vcColorRenderState!.blend.color = [1.0, 1.0, 1.0, 0.35];\r\n this._vcColorRenderState!.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.Zero);\r\n this._vcColorRenderState!.flags.cull = true;\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n this.target.activeVolumeClassifierTexture = undefined; // make sure this texture is undefined so we do not use the planar classification shader\r\n this.target.techniques.execute(this.target, nxtCmds, RenderPass.OpaqueGeneral);\r\n this._vcColorRenderState!.flags.cull = false;\r\n this.target.popBranch();\r\n });\r\n }\r\n } else {\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n // For coloring the inside by element color we will draw the inside using the the classifiers themselves.\r\n // To do this we need to first clear our Alt-Z. The shader will then test and write Z and will discard\r\n // anything that is in front of the reality model by reading the Z texture from the standard Z buffer (which has the reality mesh Z's in it).\r\n // What we end up with is the closest volume behind the terrain which works if the classifier volumes do not intersect.\r\n // Since we need the blend texture to have alpha in it, we will use blending just to modify the alpha that gets written.\r\n this.target.pushState(this._vcBranchState!);\r\n this._vcColorRenderState!.blend.color = [1.0, 1.0, 1.0, 0.35];\r\n this._vcColorRenderState!.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.Zero);\r\n this._vcColorRenderState!.flags.depthTest = true;\r\n this._vcColorRenderState!.flags.depthMask = true;\r\n this._vcColorRenderState!.flags.cull = true;\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ!.texture;\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n this.target.activeVolumeClassifierTexture = undefined;\r\n this._vcColorRenderState!.flags.depthTest = false;\r\n this._vcColorRenderState!.flags.depthMask = false;\r\n this._vcColorRenderState!.flags.cull = false;\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Zero);\r\n System.instance.context.clearStencil(0); // must clear stencil afterwards since we had to draw with stencil set to KEEP\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.PlanarClassification, undefined);\r\n });\r\n }\r\n }\r\n\r\n // Handle the selected classifier volumes. Note though that if color-by-element is being used, then the selected volumes are already hilited\r\n // and this stage can be skipped. In order for this to work the list of commands needs to get reduced to only the ones which draw hilited volumes.\r\n // We cannot use the hillite shader to draw them since it doesn't handle logZ properly (it doesn't need to since it is only used elsewhere when Z write is turned off)\r\n // and we don't really want another whole set of hilite shaders just for this.\r\n const cmdsSelected = extractHilitedVolumeClassifierCommands(this.target.hilites, commands.getCommands(RenderPass.HiliteClassification));\r\n commands.replaceCommands(RenderPass.HiliteClassification, cmdsSelected); // replace the hilite command list for use in hilite pass as well.\r\n // if (cmdsSelected.length > 0 && insideFlags !== this.target.activeVolumeClassifierProps!.flags.selected) {\r\n if (!doColorByElement && cmdsSelected.length > 0 && insideFlags !== SpatialClassifierInsideDisplay.Hilite) { // assume selected ones are always hilited\r\n // Set the stencil using just the hilited volume classifiers.\r\n fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n if (needAltZ) {\r\n // If we are using the alternate Z then the stencil that goes with the original Z has not been cleared yet, so clear it here.\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n }\r\n\r\n this.target.techniques.execute(this.target, cmdsSelected, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._frameBuffers.altZOnly.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n\r\n fbStack.execute(this._frameBuffers.volClassCreateBlend!, false, this.useMsBuffers, () => {\r\n this._geom.volClassSetBlend!.boundaryType = BoundaryType.Selected;\r\n this._geom.volClassSetBlend!.texture = this._vcAltDepthStencil!.getHandle()!; // need to attach the alt depth instead of the real one since it is bound to the frame buffer\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState!.flags.blend = false;\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend!);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState!.flags.blend = true;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n }\r\n\r\n // Now modify the color of the reality mesh by using the blend texture to blend with it.\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers) {\r\n volClassBlendFbo.blitMsBuffersToTextures(false); // make sure the volClassBlend texture that we are about to read has been blitted\r\n }\r\n\r\n fbStack.execute(fboColorAndZ, false, this.useMsBuffers, () => {\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcBlendRenderState!.blend.setBlendFuncSeparate(GL.BlendFactor.SrcAlpha, GL.BlendFactor.Zero, GL.BlendFactor.OneMinusSrcAlpha, GL.BlendFactor.One);\r\n System.instance.applyRenderState(this._vcBlendRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassBlend!);\r\n this.target.techniques.draw(params);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n\r\n // Process the flashed classifier if there is one.\r\n // Like the selected volumes, we do not need to do this step if we used by-element-color since the flashing is included in the element color.\r\n const flashedClassifierCmds = extractFlashedVolumeClassifierCommands(this.target.flashedId, cmdsByIndex, numCmdsPerClassifier);\r\n if (undefined !== flashedClassifierCmds && !doColorByElement) {\r\n // Set the stencil for this one classifier.\r\n fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.executeForIndexedClassifier(this.target, flashedClassifierCmds, RenderPass.OpaqueGeneral);\r\n this.target.popBranch();\r\n });\r\n\r\n // Process the stencil to flash the contents.\r\n fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState!.blend.color = [1.0, 1.0, 1.0, this.target.flashIntensity * 0.2];\r\n this._vcColorRenderState!.blend.setBlendFuncSeparate(GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.One, GL.BlendFactor.One);\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassColorStencil!);\r\n this.target.techniques.draw(params);\r\n this.target.popBranch();\r\n });\r\n }\r\n }\r\n\r\n private renderHilite(commands: RenderCommands) {\r\n const system = System.instance;\r\n system.frameBufferStack.execute(this._frameBuffers.hilite!, true, false, () => {\r\n // Clear the hilite buffer.\r\n system.context.clearColor(0, 0, 0, 0);\r\n system.context.clear(GL.BufferBit.Color);\r\n // Draw the normal hilite geometry.\r\n this.drawPass(commands, RenderPass.Hilite);\r\n });\r\n\r\n // Process planar classifiers\r\n const planarClassifierCmds = commands.getCommands(RenderPass.HilitePlanarClassification);\r\n if (0 !== planarClassifierCmds.length) {\r\n system.frameBufferStack.execute(this._frameBuffers.hiliteUsingStencil!, true, false, () => {\r\n system.applyRenderState(this._opaqueRenderState);\r\n this.target.techniques.execute(this.target, planarClassifierCmds, RenderPass.HilitePlanarClassification);\r\n });\r\n }\r\n\r\n // Process the volume classifiers.\r\n const vcHiliteCmds = commands.getCommands(RenderPass.HiliteClassification);\r\n if (0 !== vcHiliteCmds.length && undefined !== this._vcBranchState) {\r\n // Set the stencil for the given classifier stencil volume.\r\n system.frameBufferStack.execute(this._frameBuffers.stencilSet!, false, false, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n system.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.execute(this.target, vcHiliteCmds, RenderPass.Hilite);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil for the hilite data.\r\n system.frameBufferStack.execute(this._frameBuffers.hiliteUsingStencil!, true, false, () => {\r\n system.applyRenderState(this._vcPickDataRenderState!);\r\n this.target.techniques.execute(this.target, vcHiliteCmds, RenderPass.Hilite);\r\n });\r\n }\r\n }\r\n\r\n private composite() {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, this._geom.composite!);\r\n this.target.techniques.draw(params);\r\n }\r\n\r\n protected getRenderState(pass: RenderPass): RenderState {\r\n switch (pass) {\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers:\r\n // NB: During pick, we don't want blending - it will mess up our pick buffer data and we don't care about the color data.\r\n // During normal draw, we don't use the pick buffers for anything, and we want color blending.\r\n // (We get away with this because surfaces always draw before their edges, and we're not depth-testing, so edges always draw atop surfaces without pick buffer testing).\r\n this._layerRenderState.flags.blend = !this.target.isReadPixelsInProgress;\r\n\r\n // Transparent non-overlay Layers are drawn between opaque and translucent passes. Test depth, don't write it, so that they blend with opaque.\r\n this._layerRenderState.flags.depthMask = RenderPass.TranslucentLayers !== pass;\r\n this._layerRenderState.depthFunc = (RenderPass.TranslucentLayers === pass) ? GL.DepthFunc.Default : GL.DepthFunc.Always;\r\n return this._layerRenderState;\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n case RenderPass.HilitePlanarClassification:\r\n return this._opaqueRenderState;\r\n case RenderPass.Translucent:\r\n return this._translucentRenderState;\r\n case RenderPass.Hilite:\r\n return this._hiliteRenderState;\r\n case RenderPass.BackgroundMap:\r\n return this._backgroundMapRenderState;\r\n default:\r\n return this._noDepthMaskRenderState;\r\n }\r\n }\r\n\r\n protected drawPass(commands: RenderCommands, pass: RenderPass, pingPong: boolean = false, cmdPass: RenderPass = RenderPass.None) {\r\n const cmds = commands.getCommands(RenderPass.None !== cmdPass ? cmdPass : pass);\r\n if (0 === cmds.length) {\r\n return;\r\n } else if (pingPong) {\r\n this.pingPong();\r\n }\r\n\r\n System.instance.applyRenderState(this.getRenderState(pass));\r\n this.target.techniques.execute(this.target, cmds, pass);\r\n }\r\n}\r\n\r\nclass MRTFrameBuffers extends FrameBuffers {\r\n public opaqueAll?: FrameBuffer;\r\n public opaqueAndCompositeAll?: FrameBuffer;\r\n public pingPong?: FrameBuffer;\r\n public translucent?: FrameBuffer;\r\n public clearTranslucent?: FrameBuffer;\r\n public idsAndZ?: FrameBuffer;\r\n public idsAndAltZ?: FrameBuffer;\r\n public idsAndZComposite?: FrameBuffer;\r\n public idsAndAltZComposite?: FrameBuffer;\r\n\r\n public override init(textures: Textures, depth: DepthBuffer, depthMs: DepthBuffer | undefined): boolean {\r\n if (!super.init(textures, depth, depthMs))\r\n return false;\r\n\r\n assert(undefined === this.opaqueAll);\r\n\r\n if (!this.initPotentialMSMRTFbos(textures, depth, depthMs))\r\n return false;\r\n\r\n assert(undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const colors = [textures.accumulation, textures.revealage];\r\n this.translucent = FrameBuffer.create(colors, depth);\r\n this.clearTranslucent = FrameBuffer.create(colors);\r\n\r\n // We borrow the SceneCompositor's accum and revealage textures for the surface pass.\r\n // First we render edges, writing to our textures.\r\n // Then we copy our textures to borrowed textures.\r\n // Finally we render surfaces, writing to our textures and reading from borrowed textures.\r\n assert(undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const pingPong = [textures.accumulation, textures.revealage];\r\n this.pingPong = FrameBuffer.create(pingPong);\r\n\r\n return undefined !== this.translucent\r\n && undefined !== this.clearTranslucent\r\n && undefined !== this.pingPong;\r\n }\r\n\r\n private initPotentialMSMRTFbos(textures: Textures, depth: DepthBuffer, depthMs: DepthBuffer | undefined): boolean {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n assert(undefined !== boundColor && undefined !== textures.color && undefined !== textures.featureId && undefined !== textures.depthAndOrder);\r\n const colorAndPick = [boundColor, textures.featureId, textures.depthAndOrder];\r\n\r\n if (undefined === depthMs) {\r\n this.opaqueAll = FrameBuffer.create(colorAndPick, depth);\r\n colorAndPick[0] = textures.color;\r\n this.opaqueAndCompositeAll = FrameBuffer.create(colorAndPick, depth);\r\n } else {\r\n assert(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuff && undefined !== textures.depthAndOrderMsBuff);\r\n const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuff, textures.depthAndOrderMsBuff];\r\n const colorAndPickFilters = [GL.MultiSampling.Filter.Linear, GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest];\r\n this.opaqueAll = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n colorAndPick[0] = textures.color;\r\n this.opaqueAndCompositeAll = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n }\r\n\r\n return undefined !== this.opaqueAll\r\n && undefined !== this.opaqueAndCompositeAll;\r\n }\r\n\r\n public override enableVolumeClassifier(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n if (undefined === boundColor)\r\n return;\r\n super.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n if (undefined !== this.opaqueAll && undefined !== this.opaqueAndCompositeAll) {\r\n if (undefined !== volClassDepth) {\r\n let ids = [this.opaqueAll.getColor(0), this.opaqueAll.getColor(1)];\r\n this.idsAndZ = FrameBuffer.create(ids, depth);\r\n this.idsAndAltZ = FrameBuffer.create(ids, volClassDepth);\r\n ids = [this.opaqueAndCompositeAll.getColor(0), this.opaqueAndCompositeAll.getColor(1)];\r\n this.idsAndZComposite = FrameBuffer.create(ids, depth);\r\n this.idsAndAltZComposite = FrameBuffer.create(ids, volClassDepth);\r\n }\r\n }\r\n }\r\n\r\n public override disableVolumeClassifier(): void {\r\n super.disableVolumeClassifier();\r\n if (undefined !== this.idsAndZ) {\r\n this.idsAndZ = dispose(this.idsAndZ);\r\n this.idsAndAltZ = dispose(this.idsAndAltZ);\r\n this.idsAndZComposite = dispose(this.idsAndZComposite);\r\n this.idsAndAltZComposite = dispose(this.idsAndAltZComposite);\r\n }\r\n }\r\n\r\n public override enableMultiSampling(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer): boolean {\r\n super.enableMultiSampling(textures, depth, depthMS);\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n return this.initPotentialMSMRTFbos(textures, depth, depthMS);\r\n }\r\n\r\n public override disableMultiSampling(textures: Textures, depth: DepthBuffer): boolean {\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n if (!this.initPotentialMSMRTFbos(textures, depth, undefined))\r\n return false;\r\n return super.disableMultiSampling(textures, depth);\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && undefined === this.opaqueAll\r\n && undefined === this.opaqueAndCompositeAll\r\n && undefined === this.pingPong\r\n && undefined === this.translucent\r\n && undefined === this.clearTranslucent\r\n && undefined === this.idsAndZ\r\n && undefined === this.idsAndAltZ\r\n && undefined === this.idsAndZComposite\r\n && undefined === this.idsAndAltZComposite;\r\n }\r\n\r\n public override dispose(): void {\r\n super.dispose();\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n this.pingPong = dispose(this.pingPong);\r\n this.translucent = dispose(this.translucent);\r\n this.clearTranslucent = dispose(this.clearTranslucent);\r\n this.idsAndZ = dispose(this.idsAndZ);\r\n this.idsAndAltZ = dispose(this.idsAndAltZ);\r\n this.idsAndZComposite = dispose(this.idsAndZComposite);\r\n this.idsAndAltZComposite = dispose(this.idsAndAltZComposite);\r\n }\r\n}\r\n\r\nclass MRTGeometry extends Geometry {\r\n public copyPickBuffers?: CopyPickBufferGeometry;\r\n public clearTranslucent?: ViewportQuadGeometry;\r\n public clearPickAndColor?: ViewportQuadGeometry;\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n collectGeometryStatistics(this.copyPickBuffers, stats);\r\n collectGeometryStatistics(this.clearTranslucent, stats);\r\n collectGeometryStatistics(this.clearPickAndColor, stats);\r\n }\r\n\r\n public override init(textures: Textures): boolean {\r\n if (!super.init(textures))\r\n return false;\r\n\r\n assert(undefined === this.copyPickBuffers);\r\n\r\n this.copyPickBuffers = CopyPickBufferGeometry.createGeometry(textures.featureId!.getHandle()!, textures.depthAndOrder!.getHandle()!);\r\n this.clearTranslucent = ViewportQuadGeometry.create(TechniqueId.OITClearTranslucent);\r\n this.clearPickAndColor = ViewportQuadGeometry.create(TechniqueId.ClearPickAndColor);\r\n\r\n return undefined !== this.copyPickBuffers && undefined !== this.clearTranslucent && undefined !== this.clearPickAndColor;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && undefined === this.copyPickBuffers\r\n && undefined === this.clearTranslucent\r\n && undefined === this.clearPickAndColor;\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this.copyPickBuffers = dispose(this.copyPickBuffers);\r\n this.clearTranslucent = dispose(this.clearTranslucent);\r\n this.clearPickAndColor = dispose(this.clearPickAndColor);\r\n }\r\n}\r\n\r\n// SceneCompositor used when multiple render targets are supported (WEBGL_draw_buffers exists and supports at least 4 color attachments).\r\nclass MRTCompositor extends Compositor {\r\n public constructor(target: Target) {\r\n super(target, new MRTFrameBuffers(), new MRTGeometry());\r\n }\r\n\r\n public get currentRenderTargetIndex(): number {\r\n assert(false, \"MRT is supported\");\r\n return 0;\r\n }\r\n public set currentRenderTargetIndex(_index: number) {\r\n assert(false, \"MRT is supported\");\r\n }\r\n\r\n public get featureIds(): TextureHandle { return this.getSamplerTexture(this._readPickDataFromPingPong ? 0 : 1); }\r\n public get depthAndOrder(): TextureHandle { return this.getSamplerTexture(this._readPickDataFromPingPong ? 1 : 2); }\r\n\r\n private get _fbos(): MRTFrameBuffers { return this._frameBuffers as MRTFrameBuffers; }\r\n private get _geometry(): MRTGeometry { return this._geom as MRTGeometry; }\r\n\r\n protected override enableVolumeClassifierFbos(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n }\r\n protected override disableVolumeClassifierFbos(): void { this._fbos.disableVolumeClassifier(); }\r\n\r\n protected override enableMultiSampling(): boolean {\r\n if (!super.enableMultiSampling())\r\n return false;\r\n assert(undefined !== this._depth && undefined !== this._depthMS);\r\n return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);\r\n }\r\n\r\n protected override disableMultiSampling(): boolean {\r\n assert(undefined !== this._depth);\r\n if (!this._fbos.disableMultiSampling(this._textures, this._depth))\r\n return false;\r\n return super.disableMultiSampling();\r\n }\r\n\r\n protected clearOpaque(needComposite: boolean): void {\r\n const fbo = needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!;\r\n const system = System.instance;\r\n system.frameBufferStack.execute(fbo, true, this.useMsBuffers, () => {\r\n // Clear pick data buffers to 0's and color buffer to background color\r\n // (0,0,0,0) in elementID0 and ElementID1 buffers indicates invalid element id\r\n // (0,0,0,0) in DepthAndOrder buffer indicates render order 0 and encoded depth of 0 (= far plane)\r\n system.applyRenderState(this._noDepthMaskRenderState);\r\n const params = getDrawParams(this.target, this._geometry.clearPickAndColor!);\r\n this.target.techniques.draw(params);\r\n\r\n // Clear depth buffer\r\n system.applyRenderState(RenderState.defaults); // depthMask == true.\r\n system.context.clearDepth(1.0);\r\n system.context.clear(GL.BufferBit.Depth);\r\n });\r\n }\r\n\r\n protected renderOpaque(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels()).\r\n this._readPickDataFromPingPong = true;\r\n\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!, true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueLinear);\r\n this.drawPass(commands, RenderPass.OpaquePlanar, true);\r\n if (needAO || renderForReadPixels) {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true);\r\n\r\n if (this.useMsBuffers) {\r\n const fbo = (needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!);\r\n fbo.blitMsBuffersToTextures(true);\r\n }\r\n\r\n if (needAO)\r\n this.renderAmbientOcclusion();\r\n }\r\n });\r\n\r\n this._readPickDataFromPingPong = false;\r\n\r\n // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.\r\n if (!renderForReadPixels && !needAO) {\r\n fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!, true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false);\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n });\r\n if (this.useMsBuffers) {\r\n const fbo = (needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!);\r\n fbo.blitMsBuffersToTextures(needComposite);\r\n }\r\n }\r\n }\r\n\r\n protected renderLayers(commands: RenderCommands, needComposite: boolean, pass: RenderPass): void {\r\n this._readPickDataFromPingPong = true;\r\n System.instance.frameBufferStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!, true, RenderPass.OpaqueLayers === pass && this.useMsBuffers, () => {\r\n this.drawPass(commands, pass, true);\r\n });\r\n\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected renderForVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n const fbStack = System.instance.frameBufferStack;\r\n\r\n if (renderForReadPixels || needAO) {\r\n this._readPickDataFromPingPong = true;\r\n fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!, true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n } else {\r\n this._readPickDataFromPingPong = false;\r\n fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!, true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n }\r\n }\r\n\r\n protected renderIndexedClassifierForReadPixels(cmds: DrawCommands, state: RenderState, renderForIntersectingVolumes: boolean, needComposite: boolean) {\r\n this._readPickDataFromPingPong = true;\r\n const fbo = (renderForIntersectingVolumes ? (needComposite ? this._fbos.idsAndZComposite! : this._fbos.idsAndZ!)\r\n : (needComposite ? this._fbos.idsAndAltZComposite! : this._fbos.idsAndAltZ!));\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(state);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n });\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected clearTranslucent() {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n System.instance.frameBufferStack.execute(this._fbos.clearTranslucent!, true, false, () => {\r\n const params = getDrawParams(this.target, this._geometry.clearTranslucent!);\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n\r\n protected renderTranslucent(commands: RenderCommands) {\r\n System.instance.frameBufferStack.execute(this._fbos.translucent!, true, false, () => {\r\n this.drawPass(commands, RenderPass.Translucent);\r\n });\r\n }\r\n\r\n protected pingPong() {\r\n if (this._fbos.opaqueAll!.isMultisampled && this.useMsBuffers) {\r\n // If we are multisampling we can just blit the FeatureId and DepthAndOrder buffers to their textures.\r\n this._fbos.opaqueAll!.blitMsBuffersToTextures(false, 1);\r\n this._fbos.opaqueAll!.blitMsBuffersToTextures(false, 2);\r\n } else {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n System.instance.frameBufferStack.execute(this._fbos.pingPong!, true, this.useMsBuffers, () => {\r\n const params = getDrawParams(this.target, this._geometry.copyPickBuffers!);\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n }\r\n\r\n protected getBackgroundFbo(needComposite: boolean): FrameBuffer { return needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!; }\r\n\r\n private get _samplerFbo(): FrameBuffer { return this._readPickDataFromPingPong ? this._fbos.pingPong! : this._fbos.opaqueAll!; }\r\n private getSamplerTexture(index: number) { return this._samplerFbo.getColor(index); }\r\n}\r\n\r\nclass MPFrameBuffers extends FrameBuffers {\r\n public accumulation?: FrameBuffer;\r\n public revealage?: FrameBuffer;\r\n public featureId?: FrameBuffer;\r\n public featureIdWithDepth?: FrameBuffer;\r\n public featureIdWithDepthAltZ?: FrameBuffer;\r\n\r\n public override init(textures: Textures, depth: DepthBuffer): boolean {\r\n if (!super.init(textures, depth, undefined))\r\n return false;\r\n\r\n assert(undefined === this.accumulation);\r\n\r\n this.accumulation = FrameBuffer.create([textures.accumulation!], depth);\r\n this.revealage = FrameBuffer.create([textures.revealage!], depth);\r\n this.featureId = FrameBuffer.create([textures.featureId!], depth);\r\n\r\n return undefined !== this.accumulation && undefined !== this.revealage && undefined !== this.featureId;\r\n }\r\n\r\n public override enableVolumeClassifier(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n super.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n if (undefined !== this.featureId) {\r\n this.featureIdWithDepth = FrameBuffer.create([this.featureId.getColor(0)], depth);\r\n this.featureIdWithDepthAltZ = FrameBuffer.create([this.featureId.getColor(0)], volClassDepth);\r\n }\r\n }\r\n\r\n public override disableVolumeClassifier(): void {\r\n super.disableVolumeClassifier();\r\n if (undefined !== this.featureIdWithDepth) {\r\n this.featureIdWithDepth = dispose(this.featureIdWithDepth);\r\n this.featureIdWithDepthAltZ = dispose(this.featureIdWithDepthAltZ);\r\n }\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && undefined === this.accumulation\r\n && undefined === this.revealage\r\n && undefined === this.featureId\r\n && undefined === this.featureIdWithDepth\r\n && undefined === this.featureIdWithDepthAltZ;\r\n }\r\n\r\n public override dispose(): void {\r\n super.dispose();\r\n\r\n this.accumulation = dispose(this.accumulation);\r\n this.revealage = dispose(this.revealage);\r\n this.featureId = dispose(this.featureId);\r\n this.disableVolumeClassifier();\r\n }\r\n}\r\n\r\nclass MPGeometry extends Geometry {\r\n public copyColor?: SingleTexturedViewportQuadGeometry;\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n collectGeometryStatistics(this.copyColor, stats);\r\n }\r\n\r\n public override init(textures: Textures): boolean {\r\n if (!super.init(textures))\r\n return false;\r\n\r\n assert(undefined === this.copyColor);\r\n this.copyColor = SingleTexturedViewportQuadGeometry.createGeometry(textures.featureId!.getHandle()!, TechniqueId.CopyColor);\r\n return undefined !== this.copyColor;\r\n }\r\n\r\n public override get isDisposed(): boolean { return super.isDisposed && undefined === this.copyColor; }\r\n\r\n public override dispose(): void {\r\n super.dispose();\r\n this.copyColor = dispose(this.copyColor);\r\n }\r\n}\r\n\r\n// Compositor used when multiple render targets are not supported (WEBGL_draw_buffers not available or fewer than 4 color attachments supported).\r\n// This falls back to multi-pass rendering in place of MRT rendering, which has obvious performance implications.\r\n// The chief use case is iOS.\r\nclass MPCompositor extends Compositor {\r\n private _currentRenderTargetIndex: number = 0;\r\n private _drawMultiPassDepth: boolean = true;\r\n private readonly _opaqueRenderStateNoZWt = new RenderState();\r\n private readonly _scratchBgColor = new FloatRgba();\r\n\r\n public constructor(target: Target) {\r\n super(target, new MPFrameBuffers(), new MPGeometry());\r\n\r\n this._opaqueRenderStateNoZWt.flags.depthTest = true;\r\n this._opaqueRenderStateNoZWt.flags.depthMask = false;\r\n }\r\n\r\n protected override getRenderState(pass: RenderPass): RenderState {\r\n switch (pass) {\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n return this._drawMultiPassDepth ? this._opaqueRenderState : this._opaqueRenderStateNoZWt;\r\n }\r\n\r\n return super.getRenderState(pass);\r\n }\r\n\r\n private get _fbos(): MPFrameBuffers { return this._frameBuffers as MPFrameBuffers; }\r\n private get _geometry(): MPGeometry { return this._geom as MPGeometry; }\r\n\r\n public get currentRenderTargetIndex(): number { return this._currentRenderTargetIndex; }\r\n public set currentRenderTargetIndex(index: number) { this._currentRenderTargetIndex = index; }\r\n public get featureIds(): TextureHandle { return this._readPickDataFromPingPong ? this._textures.accumulation! : this._textures.featureId!; }\r\n public get depthAndOrder(): TextureHandle { return this._readPickDataFromPingPong ? this._textures.revealage! : this._textures.depthAndOrder!; }\r\n\r\n protected getBackgroundFbo(needComposite: boolean): FrameBuffer { return needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!; }\r\n\r\n protected override enableVolumeClassifierFbos(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n }\r\n protected override disableVolumeClassifierFbos(): void { this._fbos.disableVolumeClassifier(); }\r\n\r\n protected clearOpaque(needComposite: boolean): void {\r\n const bg = this._scratchBgColor;\r\n this.target.uniforms.style.cloneBackgroundRgba(bg);\r\n this.clearFbo(needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!, bg.red, bg.green, bg.blue, bg.alpha, true);\r\n this.clearFbo(this._fbos.depthAndOrder!, 0, 0, 0, 0, false);\r\n this.clearFbo(this._fbos.featureId!, 0, 0, 0, 0, false);\r\n }\r\n\r\n protected renderOpaque(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean): void {\r\n // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels()).\r\n this._readPickDataFromPingPong = true;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!;\r\n this.drawOpaquePass(colorFbo, commands, RenderPass.OpaqueLinear, false);\r\n this.drawOpaquePass(colorFbo, commands, RenderPass.OpaquePlanar, true);\r\n if (renderForReadPixels || needAO) {\r\n this.drawOpaquePass(colorFbo, commands, RenderPass.OpaqueGeneral, true);\r\n if (needAO)\r\n this.renderAmbientOcclusion();\r\n }\r\n\r\n this._readPickDataFromPingPong = false;\r\n\r\n // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.\r\n if (!renderForReadPixels && !needAO) {\r\n System.instance.frameBufferStack.execute(colorFbo, true, false, () => {\r\n this._drawMultiPassDepth = true; // for OpaqueGeneral\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false);\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n });\r\n }\r\n }\r\n\r\n protected renderLayers(commands: RenderCommands, needComposite: boolean, pass: RenderPass): void {\r\n this._readPickDataFromPingPong = true;\r\n const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!;\r\n this.drawOpaquePass(colorFbo, commands, pass, true);\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected renderForVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean): void {\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!;\r\n if (renderForReadPixels || needAO) {\r\n this._readPickDataFromPingPong = true;\r\n this.drawOpaquePass(colorFbo, commands, RenderPass.OpaqueGeneral, true, RenderPass.VolumeClassifiedRealityData);\r\n if (needAO)\r\n this.renderAmbientOcclusion();\r\n } else {\r\n this._readPickDataFromPingPong = false;\r\n System.instance.frameBufferStack.execute(colorFbo, true, false, () => {\r\n this._drawMultiPassDepth = true; // for OpaqueGeneral\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n }\r\n }\r\n\r\n protected renderIndexedClassifierForReadPixels(cmds: DrawCommands, state: RenderState, renderForIntersectingVolumes: boolean, _needComposite: boolean) {\r\n // Note that we only need to render to the Id textures here, no color, since the color buffer is not used in readPixels.\r\n this._readPickDataFromPingPong = true;\r\n this._currentRenderTargetIndex = 1;\r\n const fbo = (renderForIntersectingVolumes ? this._fbos.featureIdWithDepth! : this._fbos.featureIdWithDepthAltZ!);\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(state);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n });\r\n this._currentRenderTargetIndex = 0;\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n // ###TODO: For readPixels(), could skip rendering color...also could skip rendering depth and/or element ID depending upon selector...\r\n private drawOpaquePass(colorFbo: FrameBuffer, commands: RenderCommands, pass: RenderPass, pingPong: boolean, cmdPass: RenderPass = RenderPass.None): void {\r\n const commandPass = RenderPass.None === cmdPass ? pass : cmdPass;\r\n const stack = System.instance.frameBufferStack;\r\n this._drawMultiPassDepth = true;\r\n if (!this.target.isReadPixelsInProgress) {\r\n stack.execute(colorFbo, true, false, () => this.drawPass(commands, pass, pingPong, commandPass));\r\n this._drawMultiPassDepth = false;\r\n }\r\n this._currentRenderTargetIndex++;\r\n if (!this.target.isReadPixelsInProgress || Pixel.Selector.None !== (this.target.readPixelsSelector & Pixel.Selector.Feature)) {\r\n stack.execute(this._fbos.featureId!, true, false, () => this.drawPass(commands, pass, pingPong && this._drawMultiPassDepth, commandPass));\r\n this._drawMultiPassDepth = false;\r\n }\r\n this._currentRenderTargetIndex++;\r\n if (!this.target.isReadPixelsInProgress || Pixel.Selector.None !== (this.target.readPixelsSelector & Pixel.Selector.GeometryAndDistance)) {\r\n stack.execute(this._fbos.depthAndOrder!, true, false, () => this.drawPass(commands, pass, pingPong && this._drawMultiPassDepth, commandPass));\r\n }\r\n this._currentRenderTargetIndex = 0;\r\n }\r\n\r\n protected clearTranslucent() {\r\n this.clearFbo(this._fbos.accumulation!, 0, 0, 0, 1, false);\r\n this.clearFbo(this._fbos.revealage!, 1, 0, 0, 1, false);\r\n }\r\n\r\n protected renderTranslucent(commands: RenderCommands) {\r\n System.instance.frameBufferStack.execute(this._fbos.accumulation!, true, false, () => {\r\n this.drawPass(commands, RenderPass.Translucent);\r\n });\r\n\r\n this._currentRenderTargetIndex = 1;\r\n System.instance.frameBufferStack.execute(this._fbos.revealage!, true, false, () => {\r\n this.drawPass(commands, RenderPass.Translucent);\r\n });\r\n\r\n this._currentRenderTargetIndex = 0;\r\n }\r\n\r\n protected pingPong() {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n\r\n this.copyFbo(this._textures.featureId!, this._fbos.accumulation!);\r\n this.copyFbo(this._textures.depthAndOrder!, this._fbos.revealage!);\r\n }\r\n\r\n private copyFbo(src: TextureHandle, dst: FrameBuffer): void {\r\n const geom = this._geometry.copyColor!;\r\n geom.texture = src.getHandle()!;\r\n System.instance.frameBufferStack.execute(dst, true, false, () => {\r\n const params = getDrawParams(this.target, geom);\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n\r\n private clearFbo(fbo: FrameBuffer, red: number, green: number, blue: number, alpha: number, andDepth: boolean): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n system.applyRenderState(andDepth ? RenderState.defaults : this._noDepthMaskRenderState);\r\n gl.clearColor(red, green, blue, alpha);\r\n let bit = GL.BufferBit.Color;\r\n if (andDepth) {\r\n gl.clearDepth(1.0);\r\n bit |= GL.BufferBit.Depth;\r\n }\r\n\r\n gl.clear(bit);\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SceneCompositor.js","sourceRoot":"","sources":["../../../../src/render/webgl/SceneCompositor.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAsD;AACtD,wDAAqE;AACrE,oDAE4B;AAC5B,oEAAmE;AAInE,oCAAiC;AAGjC,+CAA4C;AAE5C,qDAG0B;AAC1B,+CAAsC;AAEtC,+CAA6H;AAC7H,2CAAwC;AACxC,+CAAyD;AACzD,6BAA0B;AAC1B,iEAA8D;AAC9D,qCAAmC;AAEnC,+CAAqF;AACrF,+CAA4C;AAC5C,2DAAoD;AACpD,qDAAkD;AAClD,qCAAkC;AAGlC,uCAA0C;AAC1C,iDAAyD;AAEzD,SAAS,wBAAwB,CAAC,OAAkC,EAAE,KAA8B;IAClG,IAAI,SAAS,KAAK,OAAO;QACvB,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA2C,EAAE,KAA8B;IAC5G,IAAI,SAAS,KAAK,MAAM;QACtB,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,6HAA6H;AAC7H,MAAM,QAAQ;IAgBZ,IAAW,UAAU;QACnB,OAAO,SAAS,KAAK,IAAI,CAAC,YAAY;eACjC,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,KAAK;eACxB,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,MAAM;eACzB,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,WAAW;eAC9B,SAAS,KAAK,IAAI,CAAC,eAAe;eAClC,SAAS,KAAK,IAAI,CAAC,mBAAmB;eACtC,SAAS,KAAK,IAAI,CAAC,YAAY;eAC/B,SAAS,KAAK,IAAI,CAAC,mBAAmB,CAAC;IAC9C,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,YAAY,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC/D,CAAC;IAEM,iBAAiB,CAAC,KAA8B;QACrD,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACnD,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5C,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACpD,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7C,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChD,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACpD,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACpD,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACnD,yBAAyB,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACvD,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC3D,yBAAyB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACpD,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAEM,IAAI,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB;QAC3D,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;QAExC,IAAI,aAAa,GAAwB,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC1E,QAAQ,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;YAClD,KAAK,gCAAU,CAAC,YAAY,CAAC,CAAC;gBAC5B,aAAa,GAAG,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1C,MAAM;aACP;YACD,KAAK,gCAAU,CAAC,gBAAgB,CAAC,CAAC;gBAChC,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,GAAG,GAAG,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,oBAAoB,CAAyB,wBAAwB,CAAC,CAAC;oBAChH,IAAI,SAAS,KAAK,GAAG,EAAE;wBACrB,aAAa,GAAG,GAAG,CAAC,cAAc,CAAC;wBACnC,MAAM;qBACP;iBACF;aACF;YACD,mBAAmB;YACnB,KAAK,gCAAU,CAAC,mBAAmB,CAAC,CAAC;gBACnC,MAAM;aACP;SACF;QAED,wHAAwH;QACxH,IAAI,CAAC,YAAY,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC5G,IAAI,CAAC,SAAS,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAEzG,yIAAyI;QACzI,IAAI,CAAC,MAAM,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEzH,IAAI,CAAC,KAAK,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAExH,IAAI,CAAC,SAAS,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5H,IAAI,CAAC,aAAa,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEhI,IAAI,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC,YAAY;eACrC,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,KAAK;eACxB,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC;QAE/B,IAAI,IAAI,IAAI,UAAU,GAAG,CAAC,EAAE;YAC1B,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;SAC5D;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,eAAe,CAAC,KAAa,EAAE,MAAc;QAClD,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC5H,IAAI,CAAC,aAAa,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChI,OAAO,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC;IAC1E,CAAC;IAEM,gBAAgB;QACrB,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAEM,sBAAsB,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB;QAC7E,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChI,IAAI,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC;QAC5C,IAAI,IAAI,IAAI,SAAS,KAAK,UAAU,IAAI,UAAU,GAAG,CAAC,EAAE;YACtD,IAAI,CAAC,mBAAmB,GAAG,sCAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACnH,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC,mBAAmB,CAAC;SAC/C;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,uBAAuB;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC/D,CAAC;IAEM,mBAAmB,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB;QAC1E,IAAI,CAAC,WAAW,GAAG,sCAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC3G,IAAI,CAAC,eAAe,GAAG,sCAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC/G,IAAI,CAAC,mBAAmB,GAAG,sCAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACnH,IAAI,CAAC,YAAY,GAAG,sCAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5G,OAAO,SAAS,KAAK,IAAI,CAAC,WAAW;eAChC,SAAS,KAAK,IAAI,CAAC,eAAe;eAClC,SAAS,KAAK,IAAI,CAAC,mBAAmB;eACtC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC;IACvC,CAAC;IAEM,oBAAoB;QACzB,IAAI,CAAC,WAAW,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,iHAAiH;AACjH,MAAM,YAAY;IAaT,IAAI,CAAC,QAAkB,EAAE,KAAkB,EAAE,OAAgC;QAClF,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC;YACrD,OAAO,KAAK,CAAC;QAEf,IAAI,CAAC,aAAa,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAc,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAO,CAAC,EAAE,KAAK,CAAC,CAAC;QAExE,OAAO,SAAS,KAAK,IAAI,CAAC,aAAa;eAClC,SAAS,KAAK,IAAI,CAAC,MAAM;eACzB,SAAS,KAAK,IAAI,CAAC,kBAAkB,CAAC;IAC7C,CAAC;IAEO,mBAAmB,CAAC,QAAkB,EAAE,KAAkB,EAAE,OAAgC;QAClG,MAAM,UAAU,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;QACvE,IAAA,qBAAM,EAAC,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,WAAW,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,uBAAuB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;SAC5E;aAAM;YACL,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9H,IAAI,CAAC,uBAAuB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;SAC/I;QACD,OAAO,SAAS,KAAK,IAAI,CAAC,WAAW;eAChC,SAAS,KAAK,IAAI,CAAC,uBAAuB,CAAC;IAClD,CAAC;IAEM,eAAe,CAAC,QAAkB;QACvC,IAAI,SAAS,KAAK,QAAQ,CAAC,SAAS,EAAE;YACpC,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,aAAa,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;SACnE;aAAM;YACL,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAClD;IACH,CAAC;IAEM,sBAAsB,CAAC,QAAkB,EAAE,KAAkB,EAAE,aAAsC,EAAE,OAAqB,EAAE,eAA6B;QAChK,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE;YACjC,IAAI,SAAS,KAAK,OAAO,EAAE,EAAE,yDAAyD;gBACpF,IAAI,CAAC,UAAU,GAAG,yBAAW,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBACjE,IAAI,CAAC,QAAQ,GAAG,yBAAW,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;gBAC/E,IAAI,CAAC,mBAAmB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAc,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,mBAAoB,CAAC,EAAE,CAAC,OAAE,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC7J,IAAI,CAAC,uBAAuB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAc,CAAC,EAAE,aAAa,EAAE,CAAC,QAAQ,CAAC,mBAAoB,CAAC,EAAE,CAAC,OAAE,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;aAClL;iBAAM,IAAI,SAAS,KAAK,aAAa,EAAE;gBACtC,IAAI,CAAC,UAAU,GAAG,yBAAW,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,GAAG,yBAAW,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;gBACtD,IAAI,CAAC,mBAAmB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAc,CAAC,EAAE,KAAK,CAAC,CAAC;gBAChF,IAAI,CAAC,uBAAuB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAc,CAAC,EAAE,aAAa,CAAC,CAAC;aAC7F;SACF;IACH,CAAC;IAEM,uBAAuB;QAC5B,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE;YACjC,IAAI,CAAC,UAAU,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC7D,IAAI,CAAC,uBAAuB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;SACtE;IACH,CAAC;IAEM,mBAAmB,CAAC,QAAkB,EAAE,KAAkB,EAAE,OAAoB;QACrF,IAAI,CAAC,WAAW,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,uBAAuB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEM,oBAAoB,CAAC,QAAkB,EAAE,KAAkB;QAChE,IAAI,CAAC,WAAW,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,uBAAuB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,SAAS,KAAK,IAAI,CAAC,WAAW;eAChC,SAAS,KAAK,IAAI,CAAC,uBAAuB;eAC1C,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,MAAM;eACzB,SAAS,KAAK,IAAI,CAAC,kBAAkB;eACrC,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,UAAU;eAC7B,SAAS,KAAK,IAAI,CAAC,QAAQ;eAC3B,SAAS,KAAK,IAAI,CAAC,mBAAmB;eACtC,SAAS,KAAK,IAAI,CAAC,uBAAuB,CAAC;IAClD,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,WAAW,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,uBAAuB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrE,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC7D,IAAI,CAAC,uBAAuB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvE,CAAC;CACF;AAED,SAAS,yBAAyB,CAAC,IAAgC,EAAE,KAA8B;IACjG,IAAI,SAAS,KAAK,IAAI;QACpB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,uFAAuF;AACvF,MAAM,QAAQ;IAWL,iBAAiB,CAAC,KAA8B;QACrD,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjD,yBAAyB,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC5D,yBAAyB,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACrD,yBAAyB,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC/D,yBAAyB,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACxD,yBAAyB,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACrD,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjD,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACtD,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAEM,IAAI,CAAC,QAAkB;QAC5B,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,kCAAiB,CAAC,cAAc,CAC/C,QAAQ,CAAC,KAAM,CAAC,SAAS,EAAG,EAC5B,QAAQ,CAAC,YAAa,CAAC,SAAS,EAAG,EACnC,QAAQ,CAAC,SAAU,CAAC,SAAS,EAAG,EAAE,QAAQ,CAAC,MAAO,CAAC,SAAS,EAAG,CAAC,CAAC;QACnE,OAAO,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;IACtC,CAAC;IAEM,eAAe,CAAC,QAAkB,EAAE,KAAkB;QAC3D,IAAI,SAAS,KAAK,QAAQ,CAAC,SAAS,EAAE;YACpC,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAU,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC3D,IAAI,CAAC,SAAS,GAAG,yCAAwB,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAc,CAAC,SAAS,EAAG,EAAE,KAAK,CAAC,SAAS,EAAG,CAAC,CAAC;YACnH,IAAI,CAAC,cAAc,GAAG,6BAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAG,EAAE,QAAQ,CAAC,aAAc,CAAC,SAAS,EAAG,EAAE,IAAI,wBAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACjJ,IAAI,CAAC,cAAc,GAAG,6BAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAG,EAAE,QAAQ,CAAC,aAAc,CAAC,SAAS,EAAG,EAAE,IAAI,wBAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;SACtJ;aAAM;YACL,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAU,CAAC,SAAS,GAAG,SAAS,CAAC;YACtC,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,cAAc,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,CAAC,cAAc,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACpD;IACH,CAAC;IAEM,sBAAsB,CAAC,QAAkB,EAAE,KAAkB,EAAE,KAAa,EAAE,MAAc;QACjG,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,oBAAoB,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,IAAI,SAAS,KAAK,IAAI,CAAC,gBAAgB,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/J,IAAI,CAAC,oBAAoB,GAAG,qCAAoB,CAAC,MAAM,oCAAuC,CAAC;QAC/F,IAAI,CAAC,aAAa,GAAG,mDAAkC,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAG,yBAA4B,CAAC;QACtH,IAAI,CAAC,gBAAgB,GAAG,yCAAwB,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAG,CAAC,CAAC;QACtF,IAAI,CAAC,aAAa,GAAG,mDAAkC,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAc,CAAC,SAAS,EAAG,yBAA4B,CAAC;QACxI,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB;YACjD,IAAI,CAAC,uBAAuB,GAAG,qCAAoB,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,EAAG,CAAC,CAAC;QACxG,OAAO,SAAS,KAAK,IAAI,CAAC,oBAAoB,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,IAAI,SAAS,KAAK,IAAI,CAAC,gBAAgB,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa;eACxJ,CAAC,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,IAAI,SAAS,KAAK,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACtG,CAAC;IAEM,uBAAuB;QAC5B,IAAI,SAAS,KAAK,IAAI,CAAC,oBAAoB,EAAE;YAC3C,IAAI,CAAC,oBAAoB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC/D,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjD,IAAI,CAAC,gBAAgB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACvD,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjD,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB;gBACjD,IAAI,CAAC,uBAAuB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;SACxE;IACH,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,SAAS,KAAK,IAAI,CAAC,SAAS;eAC9B,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,cAAc;eACjC,SAAS,KAAK,IAAI,CAAC,cAAc;eACjC,SAAS,KAAK,IAAI,CAAC,oBAAoB;eACvC,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,gBAAgB;eACnC,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,uBAAuB,CAAC;IAClD,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;CACF;AAQD,oEAAoE;AACpE,MAAM,WAAW;IAyIf,YAAoB,IAAc,EAAE,QAAwB,EAAE,UAA2B;QA1FxE,wBAAmB,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACzC,uBAAkB,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrE,qBAAgB,GAAG,IAAI,wBAAQ,EAAE,CAAC;QAClC,UAAK,GAAG,IAAI,wBAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QAwBtD,sBAAiB,GAAG,IAAI,aAAK,CAAC,IAAI,EAAE,CAAC;QAgEpD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAE1D,IAAI,aAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,aAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;YAC3E,MAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,SAAS,KAAK,kBAAkB;gBAClC,IAAI,CAAC,cAAc,GAAG,IAAI,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;;gBAEjE,IAAI,CAAC,SAAS,IAAI,CAAC,aAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SACzD;QAED,IAAI,aAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,aAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC/D,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,SAAS,KAAK,QAAQ;gBACxB,IAAI,CAAC,UAAU,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;gBAEnD,IAAI,CAAC,SAAS,IAAI,CAAC,aAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;SAC7C;IACH,CAAC;IAtJD,IAAY,UAAU,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzE,aAAa,CAAC,CAAS,EAAE,CAAS;QACxC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;YAC3C,OAAO,IAAI,CAAC,UAAU,CAAC;QAEzB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YACjD,OAAO,IAAI,CAAC,UAAU,CAAC;QAEzB,2FAA2F;QAC3F,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IAClC,CAAC;IAEO,UAAU,CAAC,IAAiB,EAAE,UAAkB;QACtD,OAAO,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAEO,UAAU,CAAC,UAAkB;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IAEO,YAAY,CAAC,UAAkB;QACrC,OAAO,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,CAAC;IAEO,YAAY,CAAC,UAAkB;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,SAAS,KAAK,KAAK;gBACrB,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;SAChG;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAMO,eAAe,CAAC,aAAqB;QAC3C,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACtC,MAAM,GAAG,GAAG,wBAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzG,IAAI,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvC,IAAA,qBAAM,EAAC,GAAG,IAAI,KAAK,CAAC,CAAC;QACrB,IAAA,qBAAM,EAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,oBAAoB;QAE3C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE7B,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,qBAAqB,CAAC,aAAqB;QACjD,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC;IAGM,QAAQ,CAAC,CAAS,EAAE,CAAS;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU;YAC1B,OAAO,EAAE,CAAC;QAEZ,gCAAgC;QAChC,IAAI,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC;QAC3C,IAAI,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC;QAC3B,IAAI,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QAE7B,MAAM,cAAc,GAAG,aAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,aAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,aAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,aAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;YACtH,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAClE,IAAI,SAAS,KAAK,aAAa,EAAE;gBAC/B,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;gBAEvD,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;gBACrE,MAAM,KAAK,GAAG,kBAAkB,GAAG,kBAAsB,CAAC;gBAC1D,SAAS,GAAG,CAAC,kBAAkB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,aAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,aAAK,CAAC,SAAS,CAAC,MAAM,CAAC;gBAChG,QAAQ,KAAK,EAAE;oBACb;wBACE,YAAY,GAAG,aAAK,CAAC,YAAY,CAAC,IAAI,CAAC;wBACvC,SAAS,GAAG,aAAK,CAAC,SAAS,CAAC,IAAI,CAAC;wBACjC,MAAM;oBACR,wBAA4B;oBAC5B,4BAAgC;oBAChC,wBAA4B;oBAC5B;wBACE,YAAY,GAAG,aAAK,CAAC,YAAY,CAAC,OAAO,CAAC;wBAC1C,MAAM;oBACR;wBACE,YAAY,GAAG,aAAK,CAAC,YAAY,CAAC,MAAM,CAAC;wBACzC,MAAM;oBACR;wBACE,YAAY,GAAG,aAAK,CAAC,YAAY,CAAC,IAAI,CAAC;wBACvC,MAAM;oBACR;wBACE,YAAY,GAAG,aAAK,CAAC,YAAY,CAAC,UAAU,CAAC;wBAC7C,MAAM;oBACR;wBACE,0FAA0F;wBAC1F,IAAA,qBAAM,EAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;wBACtC,YAAY,GAAG,aAAK,CAAC,YAAY,CAAC,IAAI,CAAC;wBACvC,SAAS,GAAG,aAAK,CAAC,SAAS,CAAC,IAAI,CAAC;wBACjC,MAAM;iBACT;aACF;SACF;QAED,IAAI,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;YACtC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC1B,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;SAC3B;QAED,OAAO,IAAI,aAAK,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1G,CAAC;IAwBD,IAAW,OAAO,KAAc,OAAO,aAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAEzE,MAAM,CAAC,MAAM,CAAC,IAAc,EAAE,QAAwB,EAAE,UAA2B;QACxF,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,CAAC;CACF;AAED;;;GAGG;AACH,MAAsB,eAAe;IAuBnC,YAAsB,MAAc;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,MAAc;QACjC,OAAO,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACjH,CAAC;CAGF;AAjCD,0CAiCC;AAED,qHAAqH;AACrH,MAAe,UAAW,SAAQ,eAAe;IAuF/C,YAAsB,MAAc,EAAE,IAAkB,EAAE,QAAkB;QAC1E,KAAK,CAAC,MAAM,CAAC,CAAC;QAvFN,WAAM,GAAW,CAAC,CAAC,CAAC;QACpB,YAAO,GAAW,CAAC,CAAC,CAAC;QACrB,sBAAiB,GAAY,KAAK,CAAC;QACnC,cAAS,GAAG,IAAI,QAAQ,EAAE,CAAC;QAK3B,8BAAyB,GAAY,IAAI,CAAC;QAC1C,uBAAkB,GAAG,IAAI,yBAAW,EAAE,CAAC;QACvC,sBAAiB,GAAG,IAAI,yBAAW,EAAE,CAAC;QACtC,4BAAuB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAC5C,uBAAkB,GAAG,IAAI,yBAAW,EAAE,CAAC;QACvC,4BAAuB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAC5C,8BAAyB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAC9C,kBAAa,GAAW,CAAC,CAAC,CAAC,6EAA6E;QAUxG,0BAAqB,GAAY,KAAK,CAAC;QACvC,sBAAiB,GAAW,CAAC,CAAC;QACrB,0BAAqB,GAAG,IAAI,gBAAO,EAAE,CAAC;QA8DvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEtB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QAE/C,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACrD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QAC/F,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAEtJ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QAChD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAC3C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,eAAe,GAAG,OAAE,CAAC,WAAW,CAAC,GAAG,CAAC;QACnE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,iBAAiB,GAAG,OAAE,CAAC,WAAW,CAAC,GAAG,CAAC;QAErE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QAErD,yIAAyI;QACzI,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACvD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAClD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,YAAY,CAAC,OAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAEvG,iFAAiF;QACjF,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,OAAE,CAAC,SAAS,CAAC,MAAM,CAAC;QACvD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,OAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACjG,CAAC;IAxED,IAAW,gBAAgB,KAAa,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExE,IAAc,YAAY,KAAc,OAAO,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAEzG,0BAA0B,CAAC,QAAkB,EAAE,KAAkB,EAAE,aAAsC,EAAE,OAAqB,EAAE,eAA6B;QACvK,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACtG,CAAC;IACS,2BAA2B,KAAW,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IAE/F,yGAAyG;IAC/F,sBAAsB;QAC9B,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC;QAE/B,2DAA2D;QAC3D,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACrD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,yBAAW,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,8EAA8E;QAC9E,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,aAAc,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACrD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,yBAAW,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,cAAe,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,2HAA2H;QAC3H,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAU,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACrD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,yBAAW,CAAC,QAAQ,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,cAAe,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;IACpC,CAAC;IAgCM,iBAAiB,CAAC,KAA8B;QACrD,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM;YAC3B,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ;YAC7B,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAEM,OAAO;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAC1D,MAAM,oBAAoB,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;QACrF,IAAI,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACrJ,IAAI,oBAAoB,GAAG,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB;YACzE,oBAAoB,GAAG,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC;QAC1E,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,oBAAoB,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,KAAK,oBAAoB,CAAC,CAAC;QAE3I,4GAA4G;QAC5G,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,IAAI,sBAAsB,EAAE;YAC3H,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,iBAAiB,GAAG,oBAAoB,CAAC;YAE9C,sHAAsH;YACtH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAA,qBAAM,EAAC,KAAK,EAAE,uCAAuC,CAAC,CAAC;gBACvD,OAAO,KAAK,CAAC;aACd;SACF;aAAM,IAAI,IAAI,CAAC,iBAAiB,KAAK,oBAAoB,EAAE;YAC1D,mFAAmF;YACnF,wFAAwF;YACxF,IAAI,CAAC,iBAAiB,GAAG,oBAAoB,CAAC;YAC9C,IAAI,oBAAoB,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBACtD,8GAA8G;gBAC9G,wFAAwF;gBACxF,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,uBAAuB,EAAE,CAAC;gBACzC,IAAI,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE;oBACzC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;oBAClC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;iBACrC;gBACD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;aACpC;YACD,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;oBAC/B,IAAA,qBAAM,EAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC;oBAC5D,OAAO,KAAK,CAAC;iBACd;aACF;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;oBAChC,IAAA,qBAAM,EAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC;oBAC5D,OAAO,KAAK,CAAC;iBACd;aACF;SACF;QAED,oEAAoE;QACpE,IAAI,gBAAgB,KAAK,IAAI,CAAC,iBAAiB,EAAE;YAC/C,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;YAC1C,IAAI,gBAAgB,EAAE;gBACpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;oBAClD,IAAA,qBAAM,EAAC,KAAK,EAAE,yCAAyC,CAAC,CAAC;oBACzD,OAAO,KAAK,CAAC;iBACd;aACF;iBAAM;gBACL,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;aACnC;YAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAO,CAAC,CAAC;SAC1D;QAED,4GAA4G;QAC5G,IAAI,oBAAoB,KAAK,IAAI,CAAC,qBAAqB,EAAE;YACvD,IAAI,oBAAoB,IAAI,+BAAS,CAAC,4BAA4B,KAAK,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE;gBAChH,IAAI,CAAC,kBAAkB,GAAG,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAkB,CAAC;gBAC5F,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ;oBAC7B,IAAI,CAAC,oBAAoB,GAAG,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAkB,CAAC;gBACxH,IAAI,SAAS,KAAK,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,oBAAoB,CAAC,EAAE;oBACrH,IAAA,qBAAM,EAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;oBACrE,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;oBACjF,IAAA,qBAAM,EAAC,KAAK,EAAE,iDAAiD,CAAC,CAAC;oBACjE,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAO,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;oBACnF,IAAA,qBAAM,EAAC,KAAK,EAAE,iDAAiD,CAAC,CAAC;oBACjE,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACjI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;aACnC;iBAAM;gBACL,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,uBAAuB,EAAE,CAAC;gBACzC,IAAI,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE;oBACzC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;oBAClC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;iBACrC;gBACD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;aACpC;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,IAAI,CAAC,QAAwB;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,IAAA,qBAAM,EAAC,KAAK,CAAC,CAAC;YACd,OAAO;SACR;QAED,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;QAC/C,MAAM,aAAa,GAAG,iBAAwB,cAAc,CAAC;QAE7D,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB;QAE/E,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,qBAAqB;QACrB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,qCAAqC;QACrC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;QAC3D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAE1D,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,+EAA+E;QAC/E,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,6BAA6B,CAAC,CAAC;QACjE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAExD,gBAAgB;QAChB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,uBAA0B,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAChE,2CAAoB,CAAC,cAAc,CAAC,UAAU,CAAC;YAC7C,QAAQ;YACR,aAAa;YACb,cAAc;YACd,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;YACzC,gBAAgB,EAAE,eAAM,CAAC,QAAQ,CAAC,gBAAgB;SACnD,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAE9D,yBAAyB;QACzB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAE7D,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,aAAa,4BAA+B,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAElC,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;YACxD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAElC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAE3D,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;YACnD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAElC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;SACnC;;YACC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAE7D,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,yBAA2B,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhE,iBAAiB,CAAC,QAAwB,EAAE,aAA0B,EAAE,kBAA2C;QACxH,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,4CAA4C;YACnF,IAAA,qBAAM,EAAC,KAAK,CAAC,CAAC;YACd,OAAO;SACR;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAEtC,yIAAyI;QACzI,wGAAwG;QACxG,MAAM,kBAAkB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC7C,IAAI,kBAAkB,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC,0BAA0B,CAAC,QAAQ,gBAAuB,IAAI,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAEtC,8EAA8E;YAC9E,gFAAgF;YAChF,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,8BAA8B,GAAG,IAAI,CAAC;YAClD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,yBAA2B,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,8BAA8B,GAAG,KAAK,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,uBAA0B,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,CAAC,QAAQ,gBAAuB,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;YACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,4BAA+B,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,yBAA2B,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;SAC3B;QAED,IAAI,CAAC,KAAK,aAAa,CAAC,MAAM,IAAI,CAAC,SAAS,KAAK,kBAAkB,IAAI,CAAC,KAAK,kBAAkB,CAAC,MAAM,CAAC;YACrG,OAAO;QAET,kEAAkE;QAClE,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACzD,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QAChE,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,wCAAwC;YAC/E,OAAO;SACR;QAED,yEAAyE;QACzE,kFAAkF;QAClF,IAAI,kBAAkB,EAAE;YACtB,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC;YAC/B,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,WAAY,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC7F,MAAM,CAAC,gBAAgB,CAAC,yBAAW,CAAC,QAAQ,CAAC,CAAC;gBAC9C,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;SACJ;QAED,uJAAuJ;QACvJ,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC9B,IAAI,EAAE,CAAC,YAAY;YACjB,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAExD,IAAI,CAAC,YAAY,CAAC,QAAQ,gBAAuB,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAClC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC;IAC1B,CAAC;IAEM,UAAU,CAAC,IAAc,EAAE,QAAwB;QACxD,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAEM,iBAAiB,CAAC,IAAc,IAA4B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAElI,cAAc,CAAC,IAAc;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QACrC,IAAI,SAAS,KAAK,GAAG;YACnB,OAAO,SAAS,CAAC;QAEnB,MAAM,GAAG,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE/C,IAAA,sBAAO,EAAC,GAAG,CAAC,CAAC;QAEb,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,kBAAkB,CAAC,OAAiC;QACzD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,IAAW,oBAAoB;QAC7B,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC,CAAC;IAEO,eAAe,CAAC,IAAc,EAAE,GAAiB;QACvD,IAAI,SAAS,KAAK,GAAG,IAAI,CAAC,mBAAK,CAAC,kBAAkB;YAChD,OAAO,SAAS,CAAC;QAEnB,4DAA4D;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7C,MAAM,EAAE,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,MAAM,GAA2B,KAAK,CAAC;QAC3C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YAC9D,IAAI;gBACF,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;aAC7F;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,GAAG,SAAS,CAAC;aACpB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM;eAC3B,SAAS,KAAK,IAAI,CAAC,kBAAkB;eACrC,CAAC,IAAI,CAAC,iBAAiB;eACvB,IAAI,CAAC,SAAS,CAAC,UAAU;eACzB,IAAI,CAAC,aAAa,CAAC,UAAU;eAC7B,IAAI,CAAC,KAAK,CAAC,UAAU;eACrB,CAAC,IAAI,CAAC,qBAAqB;eAC3B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;IACtC,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAA,sBAAO,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/B,CAAC;IAED,uEAAuE;IACvE,2CAA2C;IACnC,KAAK;QACX,IAAI,CAAC,MAAM,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3D,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,IAAA,sBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;;YAErG,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC;mBACxE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;mBACnE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACtC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAES,mBAAmB;QAC3B,yHAAyH;QACzH,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACrG,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ;YAC7B,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/F,CAAC;IAES,oBAAoB;QAC5B,6EAA6E;QAC7E,IAAI,CAAC,QAAQ,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;IAC/C,CAAC;IAEO,mBAAmB,CAAC,QAAwB,EAAE,aAAsB;QAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,wBAA0B,CAAC;QAC5D,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO;SACR;QAED,MAAM,OAAO,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YACjD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,wBAA0B,CAAC,CAAC;YAChF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,yBAA2B,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,QAAwB,EAAE,aAAsB;QACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,iBAAmB,CAAC;QACrD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO;SACR;QAED,MAAM,OAAO,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YACjD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,iBAAmB,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,kBAAoB,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,QAAwB,EAAE,aAAsB;QACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,oBAAuB,CAAC;QACzD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;YACnB,OAAO;QAET,MAAM,OAAO,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YACjD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,oBAAuB,CAAC,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,qBAAwB,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,4BAA4B;QAClC,+JAA+J;QAC/J,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;YACrC,IAAI,CAAC,cAAc,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC5F,OAAO;SACR;QAED,4FAA4F;QAC5F,0FAA0F;QAC1F,2HAA2H;QAC3H,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YACnC,UAAU,EAAE,wBAAU,CAAC,WAAW;YAClC,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,mBAAmB,EAAE,KAAK;YAC1B,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,yBAAW,CAAC;YACpC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;YAC1C,SAAS;YACT,SAAS,EAAE,yBAAS,CAAC,cAAc,EAAE;YACrC,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY,EAAE,GAAG,CAAC,YAAY;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAwB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAClD,IAAI,CAAC,mBAAmB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAEhD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,OAAE,CAAC,SAAS,CAAC,MAAM,CAAC;QACzD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAClD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QACpF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAChF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACjF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACjF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QACnF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC/E,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAChF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAEhF,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACrD,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACtD,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;QACvD,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACvD,IAAI,CAAC,wBAAwB,CAAC,SAAS,GAAG,OAAE,CAAC,SAAS,CAAC,WAAW,CAAC;QACnE,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QACzF,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAC1F,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QACxF,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAEzF,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACpD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACpD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QACpD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACrD,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,sBAAsB,CAAC,QAAQ,GAAG,OAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzD,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;QACxF,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,8BAA8B;QAClH,sIAAsI;QAEtI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAClD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,OAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;QACtF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAChF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACjF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,8BAA8B;QAChH,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;QACrF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC/E,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAChF,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,8BAA8B;QAC/G,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,gDAAgD;QAE7F,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QACnD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,OAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEvJ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,yBAAW,EAAE,CAAC;YAC7C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YAChD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YAC5C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,OAAE,CAAC,WAAW,CAAC,kBAAkB,EAAE,OAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC1G,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;SAChE;IACH,CAAC;IAEO,gBAAgB,CAAC,KAAkB,EAAE,EAAuB;QAClE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,EAAE,CAAC;QACvC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC;QACxC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC;QACxC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,EAAE,CAAC;QACtC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;QACvC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;IACzC,CAAC;IAEO,6BAA6B,CAAC,WAAyB,EAAE,aAAsB;QACrF,2DAA2D;QAC3D,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAW,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YACtG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;YAC5C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,yBAA4B,CAAC;YACxG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,yCAAyC;QACzC,IAAI,CAAC,oCAAoC,CAAC,WAAW,EAAE,IAAI,CAAC,sBAAuB,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5G,CAAC;IAEO,0BAA0B,CAAC,QAAwB,EAAE,cAA8B,EAAE,mBAA4B;QACvH,sHAAsH;QACtH,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,wBAA2B,CAAC;QAC7D,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,gCAAkC,CAAC;QAC3E,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,EAAE,6DAA6D;YAC5F,oBAAoB,EAAE,CAAC;YACvB,IAAI,eAAe,KAAK,GAAG,CAAC,MAAM,EAAE;gBAClC,oBAAoB,IAAI,oBAAoB,GAAG,CAAC,CAAC;gBACjD,MAAM;aACP;SACF;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,sCAAwC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,IAAI,CAAC,mBAAmB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM;YAClH,OAAO;QAET,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC;QACzE,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC;QAEvE,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;YACnC,IAAI,YAAY,KAAK,6CAA+B,CAAC,GAAG;gBACtD,YAAY,GAAG,6CAA+B,CAAC,EAAE,CAAC;YACpD,IAAI,WAAW,KAAK,4CAA8B,CAAC,GAAG;gBACpD,WAAW,GAAG,4CAA8B,CAAC,EAAE,CAAC;SACnD;QAED,sDAAsD;QACtD,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAElF,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjD,MAAM,aAAa,GAAG,iBAAwB,cAAc,CAAC;QAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAE1D,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YAC1B,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC1D,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE;oBAC5B,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,uBAA0B,CAAC,CAAC;oBAChF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,wBAA2B,CAAC;iBAC7E;qBAAM;oBACL,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;oBAC5C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;oBAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,yBAA4B,CAAC;oBAC7E,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;iBACzB;YACH,CAAC,CAAC,CAAC;YACH,OAAO;SACR;QAED,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa,CAAC,UAAU;YAC1F,OAAO;QAET,IAAI,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE;YACnE,qBAAqB;YACrB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC5E,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACxC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;gBAChF,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;YAE5I,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,oBAAoB;gBAC/D,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,EAAE,aAAa,CAAC,CAAC;YAEpG,OAAO;SACR;QAED,MAAM,eAAe,GAAG,6CAA+B,CAAC,EAAE,KAAK,YAAY,CAAC;QAC5E,MAAM,cAAc,GAAG,4CAA8B,CAAC,EAAE,KAAK,WAAW,CAAC;QACzE,MAAM,gBAAgB,GAAG,4CAA8B,CAAC,YAAY,KAAK,WAAW,IAAI,mBAAmB,CAAC;QAC5G,MAAM,sCAAsC,GAAG,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC;QACxF,MAAM,QAAQ,GAAG,CAAC,gBAAgB,IAAI,CAAC,sCAAsC,CAAC,IAAI,eAAe,CAAC;QAClG,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;QAC7C,IAAI,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC;QAC9D,IAAI,yBAAyB,GAAG,IAAI,CAAC,kBAAmB,CAAC,SAAS,EAAG,CAAC;QACtE,IAAI,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE;YACb,gDAAgD;YAChD,IAAA,qBAAM,EAAC,SAAS,KAAK,gBAAgB,CAAC,CAAC;YACvC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC9D,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACvD,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACxC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,KAAK,GAAG,OAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,yHAAyH;YACzH,yFAAyF;YACzF,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YACvC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;YAC9D,IAAA,qBAAM,EAAC,SAAS,KAAK,gBAAgB,CAAC,CAAC;YACvC,yBAAyB,GAAG,IAAI,CAAC,MAAO,CAAC,SAAS,EAAG,CAAC;YACtD,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;YAC7D,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;gBAChF,4BAA4B,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;YAC3I,6GAA6G;YAC7G,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC9D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACpD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;gBAC5D,IAAI,eAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB;oBAChD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,aAAc,CAAC,CAAC,CAAC,CAAE,gDAAgD;;oBAErI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,CAAC,sEAAsE;gBACtK,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC3D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,mBAAmB,EAAE;YACvB,qDAAqD;YACrD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBACnG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;gBAC5C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,yBAA4B,CAAC;gBAC7E,qHAAqH;gBACrH,IAAI,CAAC,wBAAyB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC;gBACjE,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACxC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,CAAC,wBAAyB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxB,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC1D,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;YAC5C,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACjD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACjD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAC5C,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,EAAE,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,sFAAsF;YAClK,IAAI,CAAC,MAAM,CAAC,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,aAAc,CAAC,OAAO,CAAC;YAC9E,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;gBAChF,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;YAC5I,IAAI,CAAC,oCAAoC,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAoB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YACjG,IAAI,CAAC,MAAM,CAAC,6BAA6B,GAAG,SAAS,CAAC;YACtD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;YAClD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;YAClD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;YAC7C,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,EAAE,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3E,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,8EAA8E;YACvH,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACxB,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;YAC3E,OAAO;SACR;QAED,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,gBAAgB,IAAI,sCAAsC,CAAC,CAAC,EAAE;YAC7H,uIAAuI;YACvI,8IAA8I;YAC9I,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBACvD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;gBAC5C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,yBAA4B,CAAC;gBAC7E,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxB,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC1D,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,eAAe,EAAE;YACnB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;gBAChF,4BAA4B,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;YAC3I,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC/D,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,YAAY,GAAG,6BAAY,CAAC,OAAO,CAAC;gBACjE,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,OAAO,GAAG,yBAAyB,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACpD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC9C,IAAI,CAAC,mBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,mEAAmE;gBACxJ,IAAI,CAAC,mBAAoB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,KAAK,CAAC;gBACnF,IAAI,cAAc;oBAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,EAAE,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,mDAAmD;gBACjI,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,CAAC;gBACxE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBAC7C,IAAI,CAAC,mBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;gBACvF,IAAI,CAAC,mBAAoB,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAE,CAAC,eAAe,CAAC,QAAQ,CAAC;gBACtF,IAAI,cAAc;oBAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,EAAE,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC7E,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxB,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,wFAAwF;YACtJ,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,gBAAgB,EAAE;gBACrB,wIAAwI;gBACxI,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;oBAChF,4BAA4B,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;gBAC3I,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;oBAC/D,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,YAAY,GAAG,6BAAY,CAAC,MAAM,CAAC;oBAChE,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,OAAO,GAAG,yBAAyB,CAAC;oBACjE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;oBACpD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBAC9C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;oBAC5D,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,CAAC;oBACxE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpC,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;oBAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACxB,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;aACJ;iBAAM,IAAI,sCAAsC,EAAE;gBACjD,+HAA+H;gBAC/H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,oBAAoB,EAAE;oBACjE,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,CAAC;oBAC/D,2CAA2C;oBAC3C,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;wBACvD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;wBAC5C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC;wBACjE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,yBAA4B,CAAC;wBAChF,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBAC1B,CAAC,CAAC,CAAC;oBACH,6JAA6J;oBAC7J,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;wBAC9D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;wBAC5C,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;wBAC9D,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAE,CAAC,WAAW,CAAC,UAAU,EAAE,OAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBAC9I,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;wBAC5C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;wBAC5D,IAAI,CAAC,MAAM,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAAC,wFAAwF;wBAC/I,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,wBAA2B,CAAC;wBAC/E,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;wBAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBAC1B,CAAC,CAAC,CAAC;iBACJ;aACF;iBAAM;gBACL,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;oBAChF,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;gBAC5I,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;oBAC/D,yGAAyG;oBACzG,uGAAuG;oBACvG,6IAA6I;oBAC7I,uHAAuH;oBACvH,wHAAwH;oBACxH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;oBAC5C,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAC9D,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAE,CAAC,WAAW,CAAC,UAAU,EAAE,OAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC9I,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;oBACjD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;oBACjD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;oBAC5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,EAAE,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,sFAAsF;oBAClK,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;oBAC5D,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBACxC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAClD,IAAI,CAAC,MAAM,CAAC,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,aAAc,CAAC,OAAO,CAAC;oBAC9E,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,wBAA2B,CAAC;oBAC5E,IAAI,CAAC,MAAM,CAAC,6BAA6B,GAAG,SAAS,CAAC;oBACtD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;oBAClD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;oBAClD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;oBAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,EAAE,OAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC3E,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,8EAA8E;oBACvH,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBACpD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACxB,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;aACJ;SACF;QAED,6IAA6I;QAC7I,mJAAmJ;QACnJ,sKAAsK;QACtK,8EAA8E;QAC9E,MAAM,YAAY,GAAG,IAAA,oDAAsC,EAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,+BAAiC,CAAC,CAAC;QACxI,QAAQ,CAAC,eAAe,gCAAkC,YAAY,CAAC,CAAC,CAAC,kEAAkE;QAC3I,4GAA4G;QAC5G,IAAI,CAAC,gBAAgB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,KAAK,4CAA8B,CAAC,MAAM,EAAE,EAAE,0CAA0C;YACrJ,6DAA6D;YAC7D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC5E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;gBAC5C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC;gBACjE,IAAI,QAAQ,EAAE;oBACZ,6HAA6H;oBAC7H,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBACxC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;iBACrD;gBAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,yBAA4B,CAAC;gBACrF,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;gBAChF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yEAAyE;YAE1I,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAoB,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBACtF,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,YAAY,GAAG,6BAAY,CAAC,QAAQ,CAAC;gBAClE,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAmB,CAAC,SAAS,EAAG,CAAC,CAAC,6FAA6F;gBAC3K,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACpD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBAC9C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,CAAC;gBACxE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxB,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;SACJ;QAED,wFAAwF;QACxF,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;YAClF,gBAAgB,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,iFAAiF;SACnI;QAED,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YAC3D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,OAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACxJ,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,aAAc,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACxB,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,kDAAkD;QAClD,6IAA6I;QAC7I,MAAM,qBAAqB,GAAG,IAAA,oDAAsC,EAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC/H,IAAI,SAAS,KAAK,qBAAqB,IAAI,CAAC,gBAAgB,EAAE;YAC5D,2CAA2C;YAC3C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC5E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;gBAC5C,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,wBAA2B,CAAC;gBACjH,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YAEH,6CAA6C;YAC7C,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACpD,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;gBAC1F,IAAI,CAAC,mBAAoB,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAE,CAAC,WAAW,CAAC,UAAU,EAAE,OAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,WAAW,CAAC,GAAG,EAAE,OAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC7I,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAoB,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAqB,CAAC,CAAC;gBAC5E,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,YAAY,CAAC,QAAwB;QAC3C,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC;QAC/B,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YAC5E,2BAA2B;YAC3B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACzC,mCAAmC;YACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,iBAAoB,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,MAAM,oBAAoB,GAAG,QAAQ,CAAC,WAAW,qCAAuC,CAAC;QACzF,IAAI,CAAC,KAAK,oBAAoB,CAAC,MAAM,EAAE;YACrC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;gBACxF,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,sCAAwC,CAAC;YAC3G,CAAC,CAAC,CAAC;SACJ;QAED,kCAAkC;QAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,+BAAiC,CAAC;QAC3E,IAAI,CAAC,KAAK,YAAY,CAAC,MAAM,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;YAClE,2DAA2D;YAC3D,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;gBACjF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;gBAC5C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,iBAAoB,CAAC;gBAC7E,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,2CAA2C;YAC3C,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;gBACxF,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,sBAAuB,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,iBAAoB,CAAC;YAC/E,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,SAAS;QACf,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,yBAAW,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAES,cAAc,CAAC,IAAgB;QACvC,QAAQ,IAAI,EAAE;YACZ,0BAA6B;YAC7B,+BAAkC;YAClC;gBACE,yHAAyH;gBACzH,8FAA8F;gBAC9F,wKAAwK;gBACxK,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC;gBAEzE,8IAA8I;gBAC9I,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,GAAG,8BAAiC,IAAI,CAAC;gBAC/E,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,CAAC,8BAAiC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,OAAE,CAAC,SAAS,CAAC,MAAM,CAAC;gBACxH,OAAO,IAAI,CAAC,iBAAiB,CAAC;YAChC,0BAA6B;YAC7B,0BAA6B;YAC7B,2BAA8B;YAC9B;gBACE,OAAO,IAAI,CAAC,kBAAkB,CAAC;YACjC;gBACE,OAAO,IAAI,CAAC,uBAAuB,CAAC;YACtC;gBACE,OAAO,IAAI,CAAC,kBAAkB,CAAC;YACjC;gBACE,OAAO,IAAI,CAAC,yBAAyB,CAAC;YACxC;gBACE,OAAO,IAAI,CAAC,uBAAuB,CAAC;SACvC;IACH,CAAC;IAES,QAAQ,CAAC,QAAwB,EAAE,IAAgB,EAAE,WAAoB,KAAK,EAAE,wBAAqC;QAC7H,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,mBAAoB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO;SACR;aAAM,IAAI,QAAQ,EAAE;YACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;QAED,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,eAAgB,SAAQ,YAAY;IAWxB,IAAI,CAAC,QAAkB,EAAE,KAAkB,EAAE,OAAgC;QAC3F,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC;YACvC,OAAO,KAAK,CAAC;QAEf,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC;YACxD,OAAO,KAAK,CAAC;QAEf,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,YAAY,IAAI,SAAS,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,yBAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,GAAG,yBAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEnD,qFAAqF;QACrF,kDAAkD;QAClD,kDAAkD;QAClD,0FAA0F;QAC1F,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,YAAY,IAAI,SAAS,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,yBAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE7C,OAAO,SAAS,KAAK,IAAI,CAAC,WAAW;eAChC,SAAS,KAAK,IAAI,CAAC,gBAAgB;eACnC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC;IACnC,CAAC;IAEO,sBAAsB,CAAC,QAAkB,EAAE,KAAkB,EAAE,OAAgC;QACrG,MAAM,UAAU,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;QACvE,IAAA,qBAAM,EAAC,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,QAAQ,CAAC,KAAK,IAAI,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,SAAS,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC7I,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAE9E,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACzD,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;YACjC,IAAI,CAAC,qBAAqB,GAAG,yBAAW,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SACtE;aAAM;YACL,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,WAAW,IAAI,SAAS,KAAK,QAAQ,CAAC,eAAe,IAAI,SAAS,KAAK,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YACnI,MAAM,mBAAmB,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC3G,MAAM,mBAAmB,GAAG,CAAC,OAAE,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAE,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,OAAE,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/H,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC5G,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;YACjC,IAAI,CAAC,qBAAqB,GAAG,yBAAW,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;SACzH;QAED,OAAO,SAAS,KAAK,IAAI,CAAC,SAAS;eAC9B,SAAS,KAAK,IAAI,CAAC,qBAAqB,CAAC;IAChD,CAAC;IAEe,sBAAsB,CAAC,QAAkB,EAAE,KAAkB,EAAE,aAAsC,EAAE,OAAqB,EAAE,eAA6B;QACzK,MAAM,UAAU,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;QACvE,IAAI,SAAS,KAAK,UAAU;YAC1B,OAAO;QACT,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;QACvF,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,qBAAqB,EAAE;YAC5E,IAAI,SAAS,KAAK,aAAa,EAAE;gBAC/B,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,OAAO,GAAG,yBAAW,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC9C,IAAI,CAAC,UAAU,GAAG,yBAAW,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBACzD,GAAG,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvF,IAAI,CAAC,gBAAgB,GAAG,yBAAW,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvD,IAAI,CAAC,mBAAmB,GAAG,yBAAW,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;aACnE;SACF;IACH,CAAC;IAEe,uBAAuB;QACrC,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAChC,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,OAAO,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,UAAU,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACvD,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SAC9D;IACH,CAAC;IAEe,mBAAmB,CAAC,QAAkB,EAAE,KAAkB,EAAE,OAAoB;QAC9F,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEe,oBAAoB,CAAC,QAAkB,EAAE,KAAkB;QACzE,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC;YAC1D,OAAO,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,IAAoB,UAAU;QAC5B,OAAO,KAAK,CAAC,UAAU;eAClB,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,qBAAqB;eACxC,SAAS,KAAK,IAAI,CAAC,QAAQ;eAC3B,SAAS,KAAK,IAAI,CAAC,WAAW;eAC9B,SAAS,KAAK,IAAI,CAAC,gBAAgB;eACnC,SAAS,KAAK,IAAI,CAAC,OAAO;eAC1B,SAAS,KAAK,IAAI,CAAC,UAAU;eAC7B,SAAS,KAAK,IAAI,CAAC,gBAAgB;eACnC,SAAS,KAAK,IAAI,CAAC,mBAAmB,CAAC;IAC9C,CAAC;IAEe,OAAO;QACrB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,gBAAgB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,WAAY,SAAQ,QAAQ;IAKhB,iBAAiB,CAAC,KAA8B;QAC9D,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/B,yBAAyB,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACvD,yBAAyB,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACxD,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEe,IAAI,CAAC,QAAkB;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvB,OAAO,KAAK,CAAC;QAEf,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC;QAE3C,IAAI,CAAC,eAAe,GAAG,uCAAsB,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAU,CAAC,SAAS,EAAG,EAAE,QAAQ,CAAC,aAAc,CAAC,SAAS,EAAG,CAAC,CAAC;QACrI,IAAI,CAAC,gBAAgB,GAAG,qCAAoB,CAAC,MAAM,8BAAiC,CAAC;QACrF,IAAI,CAAC,iBAAiB,GAAG,qCAAoB,CAAC,MAAM,4BAA+B,CAAC;QAEpF,OAAO,SAAS,KAAK,IAAI,CAAC,eAAe,IAAI,SAAS,KAAK,IAAI,CAAC,gBAAgB,IAAI,SAAS,KAAK,IAAI,CAAC,iBAAiB,CAAC;IAC3H,CAAC;IAED,IAAoB,UAAU;QAC5B,OAAO,KAAK,CAAC,UAAU;eAClB,SAAS,KAAK,IAAI,CAAC,eAAe;eAClC,SAAS,KAAK,IAAI,CAAC,gBAAgB;eACnC,SAAS,KAAK,IAAI,CAAC,iBAAiB,CAAC;IAC5C,CAAC;IAEe,OAAO;QACrB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,eAAe,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,yIAAyI;AACzI,MAAM,aAAc,SAAQ,UAAU;IACpC,YAAmB,MAAc;QAC/B,KAAK,CAAC,MAAM,EAAE,IAAI,eAAe,EAAE,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAW,wBAAwB;QACjC,IAAA,qBAAM,EAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAW,wBAAwB,CAAC,MAAc;QAChD,IAAA,qBAAM,EAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IACpC,CAAC;IAED,IAAW,UAAU,KAAoB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjH,IAAW,aAAa,KAAoB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpH,IAAY,KAAK,KAAsB,OAAO,IAAI,CAAC,aAAgC,CAAC,CAAC,CAAC;IACtF,IAAY,SAAS,KAAkB,OAAO,IAAI,CAAC,KAAoB,CAAC,CAAC,CAAC;IAEvD,0BAA0B,CAAC,QAAkB,EAAE,KAAkB,EAAE,aAAsC,EAAE,OAAqB,EAAE,eAA6B;QAChL,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAC9F,CAAC;IACkB,2BAA2B,KAAW,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IAE7E,mBAAmB;QACpC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;YAC9B,OAAO,KAAK,CAAC;QACf,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpF,CAAC;IAEkB,oBAAoB;QACrC,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACtC,CAAC;IAES,WAAW,CAAC,aAAsB;QAC1C,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC;QACtF,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC;QAC/B,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YACjE,sEAAsE;YACtE,8EAA8E;YAC9E,kGAAkG;YAClG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAkB,CAAC,CAAC;YAC7E,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEpC,qBAAqB;YACrB,MAAM,CAAC,gBAAgB,CAAC,yBAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB;YACpE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAES,YAAY,CAAC,QAAwB,EAAE,cAA8B,EAAE,mBAA4B;QAC3G,+GAA+G;QAC/G,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QAEtC,MAAM,aAAa,GAAG,iBAAwB,cAAc,CAAC;QAC7D,MAAM,MAAM,GAAG,iBAAwB,CAAC,cAAc,2BAAkC,CAAC,CAAC;QAE1F,MAAM,OAAO,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YACvH,IAAI,CAAC,QAAQ,CAAC,QAAQ,uBAA0B,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,wBAA2B,IAAI,CAAC,CAAC;YACvD,IAAI,MAAM,IAAI,mBAAmB,EAAE;gBACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,yBAA4B,IAAI,CAAC,CAAC;gBAExD,IAAI,IAAI,CAAC,YAAY,EAAE;oBACrB,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC;oBACxF,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;iBACnC;gBAED,IAAI,MAAM;oBACR,IAAI,CAAC,sBAAsB,EAAE,CAAC;aACjC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;QAEvC,0HAA0H;QAC1H,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,EAAE;YACnC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC3H,IAAI,CAAC,QAAQ,CAAC,QAAQ,yBAA4B,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,sBAAyB,KAAK,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,CAAC,CAAC;gBAC5F,GAAG,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;aAC5C;SACF;IACH,CAAC;IAES,YAAY,CAAC,QAAwB,EAAE,aAAsB,EAAE,IAAgB;QACvF,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACtC,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,EAAE,IAAI,EAAE,yBAA4B,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YACpL,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;IACzC,CAAC;IAES,6BAA6B,CAAC,QAAwB,EAAE,cAA8B,EAAE,mBAA4B;QAC5H,MAAM,aAAa,GAAG,iBAAwB,cAAc,CAAC;QAC7D,MAAM,MAAM,GAAG,iBAAwB,CAAC,cAAc,2BAAkC,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAEjD,IAAI,mBAAmB,IAAI,MAAM,EAAE;YACjC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBACvH,IAAI,CAAC,QAAQ,CAAC,QAAQ,yBAA4B,IAAI,uCAAyC,CAAC;YAClG,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;YACvC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC3H,IAAI,CAAC,QAAQ,CAAC,QAAQ,yBAA4B,KAAK,uCAAyC,CAAC;YACnG,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAES,oCAAoC,CAAC,IAAkB,EAAE,KAAkB,EAAE,4BAAqC,EAAE,aAAsB;QAClJ,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACtC,MAAM,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAQ,CAAC;YAC9G,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAW,CAAC,CAAC,CAAC;QAChF,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YAC9D,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,wBAA2B,CAAC;QAC9E,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;IACzC,CAAC;IAES,gBAAgB;QACxB,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC/D,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACvF,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAiB,CAAC,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAES,iBAAiB,CAAC,QAAwB;QAClD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YAClF,IAAI,CAAC,QAAQ,CAAC,QAAQ,sBAAyB,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAES,QAAQ;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE;YAC7D,sGAAsG;YACtG,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACzD;aAAM;YACL,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC/D,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAS,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;gBAC3F,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,eAAgB,CAAC,CAAC;gBAC3E,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAES,gBAAgB,CAAC,aAAsB,IAAiB,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,CAAC,CAAC,CAAC;IAEzJ,IAAY,WAAW,KAAkB,OAAO,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC,CAAC;IACxH,iBAAiB,CAAC,KAAa,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACtF;AAED,MAAM,cAAe,SAAQ,YAAY;IAOvB,IAAI,CAAC,QAAkB,EAAE,KAAkB;QACzD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC;QAEf,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;QAExC,IAAI,CAAC,YAAY,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,YAAa,CAAC,EAAE,KAAK,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAU,CAAC,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAU,CAAC,EAAE,KAAK,CAAC,CAAC;QAElE,OAAO,SAAS,KAAK,IAAI,CAAC,YAAY,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;IACzG,CAAC;IAEe,sBAAsB,CAAC,QAAkB,EAAE,KAAkB,EAAE,aAAsC,EAAE,OAAqB,EAAE,eAA6B;QACzK,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;QACvF,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;YAChC,IAAI,CAAC,kBAAkB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAClF,IAAI,CAAC,sBAAsB,GAAG,yBAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;SAC/F;IACH,CAAC;IAEe,uBAAuB;QACrC,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAChC,IAAI,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE;YACzC,IAAI,CAAC,kBAAkB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC3D,IAAI,CAAC,sBAAsB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;SACpE;IACH,CAAC;IAED,IAAoB,UAAU;QAC5B,OAAO,KAAK,CAAC,UAAU;eAClB,SAAS,KAAK,IAAI,CAAC,YAAY;eAC/B,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,SAAS;eAC5B,SAAS,KAAK,IAAI,CAAC,kBAAkB;eACrC,SAAS,KAAK,IAAI,CAAC,sBAAsB,CAAC;IACjD,CAAC;IAEe,OAAO;QACrB,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,YAAY,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAW,SAAQ,QAAQ;IAGf,iBAAiB,CAAC,KAA8B;QAC9D,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/B,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAEe,IAAI,CAAC,QAAkB;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvB,OAAO,KAAK,CAAC;QAEf,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,mDAAkC,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAU,CAAC,SAAS,EAAG,qBAAwB,CAAC;QAC5H,OAAO,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC;IACtC,CAAC;IAED,IAAoB,UAAU,KAAc,OAAO,KAAK,CAAC,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAEtF,OAAO;QACrB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,iJAAiJ;AACjJ,iHAAiH;AACjH,6BAA6B;AAC7B,MAAM,YAAa,SAAQ,UAAU;IAMnC,YAAmB,MAAc;QAC/B,KAAK,CAAC,MAAM,EAAE,IAAI,cAAc,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;QANhD,8BAAyB,GAAW,CAAC,CAAC;QACtC,wBAAmB,GAAY,IAAI,CAAC;QAC3B,4BAAuB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAC5C,oBAAe,GAAG,IAAI,qBAAS,EAAE,CAAC;QAKjD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACpD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IACvD,CAAC;IAEkB,cAAc,CAAC,IAAgB;QAChD,QAAQ,IAAI,EAAE;YACZ,0BAA6B;YAC7B,0BAA6B;YAC7B;gBACE,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC;SAC5F;QAED,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,IAAY,KAAK,KAAqB,OAAO,IAAI,CAAC,aAA+B,CAAC,CAAC,CAAC;IACpF,IAAY,SAAS,KAAiB,OAAO,IAAI,CAAC,KAAmB,CAAC,CAAC,CAAC;IAExE,IAAW,wBAAwB,KAAa,OAAO,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACxF,IAAW,wBAAwB,CAAC,KAAa,IAAI,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9F,IAAW,UAAU,KAAoB,OAAO,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAU,CAAC,CAAC,CAAC;IAC5I,IAAW,aAAa,KAAoB,OAAO,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAc,CAAC,CAAC,CAAC;IAEtI,gBAAgB,CAAC,aAAsB,IAAiB,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,CAAC,CAAC,CAAC;IAEtI,0BAA0B,CAAC,QAAkB,EAAE,KAAkB,EAAE,aAAsC,EAAE,OAAqB,EAAE,eAA6B;QAChL,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAC9F,CAAC;IACkB,2BAA2B,KAAW,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IAEtF,WAAW,CAAC,aAAsB;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAc,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAES,YAAY,CAAC,QAAwB,EAAE,cAA8B,EAAE,mBAA4B;QAC3G,+GAA+G;QAC/G,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACtC,MAAM,aAAa,GAAG,iBAAwB,cAAc,CAAC;QAC7D,MAAM,MAAM,GAAG,iBAAwB,CAAC,cAAc,2BAAkC,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,CAAC;QAC/F,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,wBAA2B,KAAK,CAAC,CAAC;QACxE,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,wBAA2B,IAAI,CAAC,CAAC;QACvE,IAAI,mBAAmB,IAAI,MAAM,EAAE;YACjC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,yBAA4B,IAAI,CAAC,CAAC;YACxE,IAAI,MAAM;gBACR,IAAI,CAAC,sBAAsB,EAAE,CAAC;SACjC;QAED,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;QAEvC,0HAA0H;QAC1H,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,EAAE;YACnC,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;gBACnE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAE,oBAAoB;gBACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,yBAA4B,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,sBAAyB,KAAK,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAES,YAAY,CAAC,QAAwB,EAAE,aAAsB,EAAE,IAAgB;QACvF,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACtC,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,CAAC;QAC/F,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;IACzC,CAAC;IAES,6BAA6B,CAAC,QAAwB,EAAE,cAA8B,EAAE,mBAA4B;QAC5H,MAAM,aAAa,GAAG,iBAAwB,cAAc,CAAC;QAC7D,MAAM,MAAM,GAAG,iBAAwB,CAAC,cAAc,2BAAkC,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAY,CAAC;QAC/F,IAAI,mBAAmB,IAAI,MAAM,EAAE;YACjC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,yBAA4B,IAAI,uCAAyC,CAAC;YAChH,IAAI,MAAM;gBACR,IAAI,CAAC,sBAAsB,EAAE,CAAC;SACjC;aAAM;YACL,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;YACvC,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;gBACnE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAE,oBAAoB;gBACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,yBAA4B,KAAK,uCAAyC,CAAC;YACnG,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAES,oCAAoC,CAAC,IAAkB,EAAE,KAAkB,EAAE,4BAAqC,EAAE,cAAuB;QACnJ,wHAAwH;QACxH,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAuB,CAAC,CAAC;QACjH,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YAC9D,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,wBAA2B,CAAC;QAC9E,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,uIAAuI;IAC/H,cAAc,CAAC,QAAqB,EAAE,QAAwB,EAAE,IAAgB,EAAE,QAAiB,EAAE,wBAAqC;QAChJ,MAAM,WAAW,GAAG,mBAAoB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,MAAM,KAAK,GAAG,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;YACvC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YACjG,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;SAClC;QACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,IAAI,aAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,aAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC5H,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;YAC1I,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;SAClC;QACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,IAAI,aAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,aAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;YACxI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAc,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;SAC/I;QACD,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;IACrC,CAAC;IAES,gBAAgB;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAES,iBAAiB,CAAC,QAAwB;QAClD,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAa,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACnF,IAAI,CAAC,QAAQ,CAAC,QAAQ,sBAAyB,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;QACnC,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAU,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YAChF,IAAI,CAAC,QAAQ,CAAC,QAAQ,sBAAyB,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;IACrC,CAAC;IAES,QAAQ;QAChB,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,SAAU,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,aAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC;IACrE,CAAC;IAEO,OAAO,CAAC,GAAkB,EAAE,GAAgB;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAU,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,EAAG,CAAC;QAChC,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,IAAA,iCAAa,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,GAAgB,EAAE,GAAW,EAAE,KAAa,EAAE,IAAY,EAAE,KAAa,EAAE,QAAiB;QAC3G,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAAC;QAC/B,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAC1B,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACxF,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACvC,IAAI,GAAG,GAAG,OAAE,CAAC,SAAS,CAAC,KAAK,CAAC;YAC7B,IAAI,QAAQ,EAAE;gBACZ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,IAAI,OAAE,CAAC,SAAS,CAAC,KAAK,CAAC;aAC3B;YAED,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { Transform, Vector2d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n Feature, PackedFeatureTable, RenderMode, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay,\r\n} from \"@itwin/core-common\";\r\nimport { DepthType, RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { ViewRect } from \"../../ViewRect\";\r\nimport { Pixel } from \"../Pixel\";\r\nimport { GraphicList } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport {\r\n AmbientOcclusionGeometry, BlurGeometry, BoundaryType, CachedGeometry, CompositeGeometry, CopyPickBufferGeometry, ScreenPointsGeometry,\r\n SingleTexturedViewportQuadGeometry, ViewportQuadGeometry, VolumeClassifierGeometry,\r\n} from \"./CachedGeometry\";\r\nimport { Debug } from \"./Diagnostics\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands, extractFlashedVolumeClassifierCommands, extractHilitedVolumeClassifierCommands } from \"./DrawCommand\";\r\nimport { FloatRgba } from \"./FloatRGBA\";\r\nimport { DepthBuffer, FrameBuffer } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { IModelFrameLifecycle } from \"./IModelFrameLifecycle\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { CompositeFlags, RenderOrder, RenderPass, TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { getDrawParams } from \"./ScratchDrawParams\";\r\nimport { SolarShadowMap } from \"./SolarShadowMap\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { RenderBufferMultiSample } from \"./RenderBuffer\";\r\n\r\nfunction collectTextureStatistics(texture: TextureHandle | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== texture)\r\n stats.addTextureAttachment(texture.bytesUsed);\r\n}\r\n\r\nfunction collectMsBufferStatistics(msBuff: RenderBufferMultiSample | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== msBuff)\r\n stats.addTextureAttachment(msBuff.bytesUsed);\r\n}\r\n\r\n// Maintains the textures used by a SceneCompositor. The textures are reallocated when the dimensions of the viewport change.\r\nclass Textures implements WebGLDisposable, RenderMemory.Consumer {\r\n public accumulation?: TextureHandle;\r\n public revealage?: TextureHandle;\r\n public color?: TextureHandle;\r\n public featureId?: TextureHandle;\r\n public depthAndOrder?: TextureHandle;\r\n public hilite?: TextureHandle;\r\n public occlusion?: TextureHandle;\r\n public occlusionBlur?: TextureHandle;\r\n public volClassBlend?: TextureHandle;\r\n public colorMsBuff?: RenderBufferMultiSample;\r\n public featureIdMsBuff?: RenderBufferMultiSample;\r\n public depthAndOrderMsBuff?: RenderBufferMultiSample;\r\n public hiliteMsBuff?: RenderBufferMultiSample;\r\n public volClassBlendMsBuff?: RenderBufferMultiSample;\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.accumulation\r\n && undefined === this.revealage\r\n && undefined === this.color\r\n && undefined === this.featureId\r\n && undefined === this.depthAndOrder\r\n && undefined === this.hilite\r\n && undefined === this.occlusion\r\n && undefined === this.occlusionBlur\r\n && undefined === this.volClassBlend\r\n && undefined === this.colorMsBuff\r\n && undefined === this.featureIdMsBuff\r\n && undefined === this.depthAndOrderMsBuff\r\n && undefined === this.hiliteMsBuff\r\n && undefined === this.volClassBlendMsBuff;\r\n }\r\n\r\n public dispose() {\r\n this.accumulation = dispose(this.accumulation);\r\n this.revealage = dispose(this.revealage);\r\n this.color = dispose(this.color);\r\n this.featureId = dispose(this.featureId);\r\n this.depthAndOrder = dispose(this.depthAndOrder);\r\n this.hilite = dispose(this.hilite);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.colorMsBuff = dispose(this.colorMsBuff);\r\n this.featureIdMsBuff = dispose(this.featureIdMsBuff);\r\n this.depthAndOrderMsBuff = dispose(this.depthAndOrderMsBuff);\r\n this.hiliteMsBuff = dispose(this.hiliteMsBuff);\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n this.volClassBlendMsBuff = dispose(this.volClassBlendMsBuff);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n collectTextureStatistics(this.accumulation, stats);\r\n collectTextureStatistics(this.revealage, stats);\r\n collectTextureStatistics(this.color, stats);\r\n collectTextureStatistics(this.featureId, stats);\r\n collectTextureStatistics(this.depthAndOrder, stats);\r\n collectTextureStatistics(this.hilite, stats);\r\n collectTextureStatistics(this.occlusion, stats);\r\n collectTextureStatistics(this.occlusionBlur, stats);\r\n collectTextureStatistics(this.volClassBlend, stats);\r\n collectMsBufferStatistics(this.colorMsBuff, stats);\r\n collectMsBufferStatistics(this.featureIdMsBuff, stats);\r\n collectMsBufferStatistics(this.depthAndOrderMsBuff, stats);\r\n collectMsBufferStatistics(this.hiliteMsBuff, stats);\r\n collectMsBufferStatistics(this.volClassBlendMsBuff, stats);\r\n }\r\n\r\n public init(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.accumulation);\r\n\r\n let pixelDataType: GL.Texture.DataType = GL.Texture.DataType.UnsignedByte;\r\n switch (System.instance.capabilities.maxRenderType) {\r\n case RenderType.TextureFloat: {\r\n pixelDataType = GL.Texture.DataType.Float;\r\n break;\r\n }\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 ext = System.instance.capabilities.queryExtensionObject<OES_texture_half_float>(\"OES_texture_half_float\");\r\n if (undefined !== ext) {\r\n pixelDataType = ext.HALF_FLOAT_OES;\r\n break;\r\n }\r\n }\r\n }\r\n /* falls through */\r\n case RenderType.TextureUnsignedByte: {\r\n break;\r\n }\r\n }\r\n\r\n // NB: Both of these must be of the same type, because they are borrowed by pingpong and bound to the same frame buffer.\r\n this.accumulation = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, pixelDataType);\r\n this.revealage = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, pixelDataType);\r\n\r\n // Hilite texture is a simple on-off, but the smallest texture format WebGL allows us to use as output is RGBA with a byte per component.\r\n this.hilite = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n this.color = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n this.featureId = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n this.depthAndOrder = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n\r\n let rVal = undefined !== this.accumulation\r\n && undefined !== this.revealage\r\n && undefined !== this.color\r\n && undefined !== this.featureId\r\n && undefined !== this.depthAndOrder\r\n && undefined !== this.hilite;\r\n\r\n if (rVal && numSamples > 1) {\r\n rVal = this.enableMultiSampling(width, height, numSamples);\r\n }\r\n\r\n return rVal;\r\n }\r\n\r\n public enableOcclusion(width: number, height: number): boolean {\r\n assert(undefined === this.occlusion && undefined === this.occlusionBlur);\r\n this.occlusion = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n this.occlusionBlur = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n return undefined !== this.occlusion && undefined !== this.occlusionBlur;\r\n }\r\n\r\n public disableOcclusion(): void {\r\n assert(undefined !== this.occlusion && undefined !== this.occlusionBlur);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n }\r\n\r\n public enableVolumeClassifier(width: number, height: number, numSamples: number): boolean {\r\n assert(undefined === this.volClassBlend);\r\n this.volClassBlend = TextureHandle.createForAttachment(width, height, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte);\r\n let rVal = undefined !== this.volClassBlend;\r\n if (rVal && undefined !== numSamples && numSamples > 1) {\r\n this.volClassBlendMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n rVal = undefined !== this.volClassBlendMsBuff;\r\n }\r\n return rVal;\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n this.volClassBlendMsBuff = dispose(this.volClassBlendMsBuff);\r\n }\r\n\r\n public enableMultiSampling(width: number, height: number, numSamples: number): boolean {\r\n this.colorMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.featureIdMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.depthAndOrderMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n this.hiliteMsBuff = RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.RGBA8, numSamples);\r\n return undefined !== this.colorMsBuff\r\n && undefined !== this.featureIdMsBuff\r\n && undefined !== this.depthAndOrderMsBuff\r\n && undefined !== this.hiliteMsBuff;\r\n }\r\n\r\n public disableMultiSampling(): boolean {\r\n this.colorMsBuff = dispose(this.colorMsBuff);\r\n this.featureIdMsBuff = dispose(this.featureIdMsBuff);\r\n this.depthAndOrderMsBuff = dispose(this.depthAndOrderMsBuff);\r\n this.hiliteMsBuff = dispose(this.hiliteMsBuff);\r\n return true;\r\n }\r\n}\r\n\r\n// Maintains the framebuffers used by a SceneCompositor. The color attachments are supplied by a Textures object.\r\nclass FrameBuffers implements WebGLDisposable {\r\n public opaqueColor?: FrameBuffer;\r\n public opaqueAndCompositeColor?: FrameBuffer;\r\n public depthAndOrder?: FrameBuffer;\r\n public hilite?: FrameBuffer;\r\n public hiliteUsingStencil?: FrameBuffer;\r\n public stencilSet?: FrameBuffer;\r\n public occlusion?: FrameBuffer;\r\n public occlusionBlur?: FrameBuffer;\r\n public altZOnly?: FrameBuffer;\r\n public volClassCreateBlend?: FrameBuffer;\r\n public volClassCreateBlendAltZ?: FrameBuffer;\r\n\r\n public init(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer | undefined): boolean {\r\n if (!this.initPotentialMSFbos(textures, depth, depthMS))\r\n return false;\r\n\r\n this.depthAndOrder = FrameBuffer.create([textures.depthAndOrder!], depth);\r\n this.hilite = FrameBuffer.create([textures.hilite!], depth);\r\n this.hiliteUsingStencil = FrameBuffer.create([textures.hilite!], depth);\r\n\r\n return undefined !== this.depthAndOrder\r\n && undefined !== this.hilite\r\n && undefined !== this.hiliteUsingStencil;\r\n }\r\n\r\n private initPotentialMSFbos(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer | undefined): boolean {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n assert(undefined !== boundColor && undefined !== textures.color);\r\n if (undefined === depthMS) {\r\n this.opaqueColor = FrameBuffer.create([boundColor], depth);\r\n this.opaqueAndCompositeColor = FrameBuffer.create([textures.color], depth);\r\n } else {\r\n assert(undefined !== textures.colorMsBuff);\r\n this.opaqueColor = FrameBuffer.create([boundColor], depth, [textures.colorMsBuff], [GL.MultiSampling.Filter.Linear], depthMS);\r\n this.opaqueAndCompositeColor = FrameBuffer.create([textures.color], depth, [textures.colorMsBuff], [GL.MultiSampling.Filter.Linear], depthMS);\r\n }\r\n return undefined !== this.opaqueColor\r\n && undefined !== this.opaqueAndCompositeColor;\r\n }\r\n\r\n public toggleOcclusion(textures: Textures): void {\r\n if (undefined !== textures.occlusion) {\r\n assert(undefined !== textures.occlusionBlur);\r\n this.occlusion = FrameBuffer.create([textures.occlusion]);\r\n this.occlusionBlur = FrameBuffer.create([textures.occlusionBlur]);\r\n } else {\r\n assert(undefined === textures.occlusionBlur);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n }\r\n }\r\n\r\n public enableVolumeClassifier(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n if (undefined === this.stencilSet) {\r\n if (undefined !== depthMS) { // if multisampling use the multisampled depth everywhere\r\n this.stencilSet = FrameBuffer.create([], depth, [], [], depthMS);\r\n this.altZOnly = FrameBuffer.create([], volClassDepth, [], [], volClassDepthMS);\r\n this.volClassCreateBlend = FrameBuffer.create([textures.volClassBlend!], depth, [textures.volClassBlendMsBuff!], [GL.MultiSampling.Filter.Nearest], depthMS);\r\n this.volClassCreateBlendAltZ = FrameBuffer.create([textures.volClassBlend!], volClassDepth, [textures.volClassBlendMsBuff!], [GL.MultiSampling.Filter.Nearest], volClassDepthMS);\r\n } else if (undefined !== volClassDepth) {\r\n this.stencilSet = FrameBuffer.create([], depth);\r\n this.altZOnly = FrameBuffer.create([], volClassDepth);\r\n this.volClassCreateBlend = FrameBuffer.create([textures.volClassBlend!], depth);\r\n this.volClassCreateBlendAltZ = FrameBuffer.create([textures.volClassBlend!], volClassDepth);\r\n }\r\n }\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n if (undefined !== this.stencilSet) {\r\n this.stencilSet = dispose(this.stencilSet);\r\n this.altZOnly = dispose(this.altZOnly);\r\n this.volClassCreateBlend = dispose(this.volClassCreateBlend);\r\n this.volClassCreateBlendAltZ = dispose(this.volClassCreateBlendAltZ);\r\n }\r\n }\r\n\r\n public enableMultiSampling(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer): boolean {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n return this.initPotentialMSFbos(textures, depth, depthMS);\r\n }\r\n\r\n public disableMultiSampling(textures: Textures, depth: DepthBuffer): boolean {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n return this.initPotentialMSFbos(textures, depth, undefined);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.opaqueColor\r\n && undefined === this.opaqueAndCompositeColor\r\n && undefined === this.depthAndOrder\r\n && undefined === this.hilite\r\n && undefined === this.hiliteUsingStencil\r\n && undefined === this.occlusion\r\n && undefined === this.occlusionBlur\r\n && undefined === this.stencilSet\r\n && undefined === this.altZOnly\r\n && undefined === this.volClassCreateBlend\r\n && undefined === this.volClassCreateBlendAltZ;\r\n }\r\n\r\n public dispose() {\r\n this.opaqueColor = dispose(this.opaqueColor);\r\n this.opaqueAndCompositeColor = dispose(this.opaqueAndCompositeColor);\r\n this.depthAndOrder = dispose(this.depthAndOrder);\r\n this.hilite = dispose(this.hilite);\r\n this.hiliteUsingStencil = dispose(this.hiliteUsingStencil);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionBlur = dispose(this.occlusionBlur);\r\n this.stencilSet = dispose(this.stencilSet);\r\n this.altZOnly = dispose(this.altZOnly);\r\n this.volClassCreateBlend = dispose(this.volClassCreateBlend);\r\n this.volClassCreateBlendAltZ = dispose(this.volClassCreateBlendAltZ);\r\n }\r\n}\r\n\r\nfunction collectGeometryStatistics(geom: CachedGeometry | undefined, stats: RenderMemory.Statistics): void {\r\n if (undefined !== geom)\r\n geom.collectStatistics(stats);\r\n}\r\n\r\n// Maintains the geometry used to execute screenspace operations for a SceneCompositor.\r\nclass Geometry implements WebGLDisposable, RenderMemory.Consumer {\r\n public composite?: CompositeGeometry;\r\n public volClassColorStencil?: ViewportQuadGeometry;\r\n public volClassCopyZ?: SingleTexturedViewportQuadGeometry;\r\n public volClassCopyZWithPoints?: ScreenPointsGeometry;\r\n public volClassSetBlend?: VolumeClassifierGeometry;\r\n public volClassBlend?: SingleTexturedViewportQuadGeometry;\r\n public occlusion?: AmbientOcclusionGeometry;\r\n public occlusionXBlur?: BlurGeometry;\r\n public occlusionYBlur?: BlurGeometry;\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n collectGeometryStatistics(this.composite, stats);\r\n collectGeometryStatistics(this.volClassColorStencil, stats);\r\n collectGeometryStatistics(this.volClassCopyZ, stats);\r\n collectGeometryStatistics(this.volClassCopyZWithPoints, stats);\r\n collectGeometryStatistics(this.volClassSetBlend, stats);\r\n collectGeometryStatistics(this.volClassBlend, stats);\r\n collectGeometryStatistics(this.occlusion, stats);\r\n collectGeometryStatistics(this.occlusionXBlur, stats);\r\n collectGeometryStatistics(this.occlusionYBlur, stats);\r\n }\r\n\r\n public init(textures: Textures): boolean {\r\n assert(undefined === this.composite);\r\n this.composite = CompositeGeometry.createGeometry(\r\n textures.color!.getHandle()!,\r\n textures.accumulation!.getHandle()!,\r\n textures.revealage!.getHandle()!, textures.hilite!.getHandle()!);\r\n return undefined !== this.composite;\r\n }\r\n\r\n public toggleOcclusion(textures: Textures, depth: DepthBuffer): void {\r\n if (undefined !== textures.occlusion) {\r\n assert(undefined !== textures.occlusionBlur);\r\n this.composite!.occlusion = textures.occlusion.getHandle();\r\n this.occlusion = AmbientOcclusionGeometry.createGeometry(textures.depthAndOrder!.getHandle()!, depth.getHandle()!);\r\n this.occlusionXBlur = BlurGeometry.createGeometry(textures.occlusion.getHandle()!, textures.depthAndOrder!.getHandle()!, new Vector2d(1.0, 0.0));\r\n this.occlusionYBlur = BlurGeometry.createGeometry(textures.occlusionBlur.getHandle()!, textures.depthAndOrder!.getHandle()!, new Vector2d(0.0, 1.0));\r\n } else {\r\n assert(undefined === textures.occlusionBlur);\r\n this.composite!.occlusion = undefined;\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionXBlur = dispose(this.occlusionXBlur);\r\n this.occlusionYBlur = dispose(this.occlusionYBlur);\r\n }\r\n }\r\n\r\n public enableVolumeClassifier(textures: Textures, depth: DepthBuffer, width: number, height: number): boolean {\r\n assert(undefined === this.volClassColorStencil && undefined === this.volClassCopyZ && undefined === this.volClassSetBlend && undefined === this.volClassBlend);\r\n this.volClassColorStencil = ViewportQuadGeometry.create(TechniqueId.VolClassColorUsingStencil);\r\n this.volClassCopyZ = SingleTexturedViewportQuadGeometry.createGeometry(depth.getHandle()!, TechniqueId.VolClassCopyZ);\r\n this.volClassSetBlend = VolumeClassifierGeometry.createVCGeometry(depth.getHandle()!);\r\n this.volClassBlend = SingleTexturedViewportQuadGeometry.createGeometry(textures.volClassBlend!.getHandle()!, TechniqueId.VolClassBlend);\r\n if (!System.instance.capabilities.supportsFragDepth)\r\n this.volClassCopyZWithPoints = ScreenPointsGeometry.createGeometry(width, height, depth.getHandle()!);\r\n return undefined !== this.volClassColorStencil && undefined !== this.volClassCopyZ && undefined !== this.volClassSetBlend && undefined !== this.volClassBlend\r\n && (System.instance.capabilities.supportsFragDepth || undefined !== this.volClassCopyZWithPoints);\r\n }\r\n\r\n public disableVolumeClassifier(): void {\r\n if (undefined !== this.volClassColorStencil) {\r\n this.volClassColorStencil = dispose(this.volClassColorStencil);\r\n this.volClassCopyZ = dispose(this.volClassCopyZ);\r\n this.volClassSetBlend = dispose(this.volClassSetBlend);\r\n this.volClassBlend = dispose(this.volClassBlend);\r\n if (!System.instance.capabilities.supportsFragDepth)\r\n this.volClassCopyZWithPoints = dispose(this.volClassCopyZWithPoints);\r\n }\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this.composite\r\n && undefined === this.occlusion\r\n && undefined === this.occlusionXBlur\r\n && undefined === this.occlusionYBlur\r\n && undefined === this.volClassColorStencil\r\n && undefined === this.volClassCopyZ\r\n && undefined === this.volClassSetBlend\r\n && undefined === this.volClassBlend\r\n && undefined === this.volClassCopyZWithPoints;\r\n }\r\n\r\n public dispose() {\r\n this.composite = dispose(this.composite);\r\n this.occlusion = dispose(this.occlusion);\r\n this.occlusionXBlur = dispose(this.occlusionXBlur);\r\n this.occlusionYBlur = dispose(this.occlusionYBlur);\r\n this.disableVolumeClassifier();\r\n }\r\n}\r\n\r\ninterface BatchInfo {\r\n featureTable: PackedFeatureTable;\r\n iModel?: IModelConnection;\r\n tileId?: string;\r\n}\r\n\r\n// Represents a view of data read from a region of the frame buffer.\r\nclass PixelBuffer implements Pixel.Buffer {\r\n private readonly _rect: ViewRect;\r\n private readonly _selector: Pixel.Selector;\r\n private readonly _featureId?: Uint32Array;\r\n private readonly _depthAndOrder?: Uint32Array;\r\n private readonly _batchState: BatchState;\r\n\r\n private get _numPixels(): number { return this._rect.width * this._rect.height; }\r\n\r\n private getPixelIndex(x: number, y: number): number {\r\n if (x < this._rect.left || y < this._rect.top)\r\n return this._numPixels;\r\n\r\n x -= this._rect.left;\r\n y -= this._rect.top;\r\n if (x >= this._rect.width || y >= this._rect.height)\r\n return this._numPixels;\r\n\r\n // NB: View coords have origin at top-left; GL at bottom-left. So our rows are upside-down.\r\n y = this._rect.height - 1 - y;\r\n return y * this._rect.width + x;\r\n }\r\n\r\n private getPixel32(data: Uint32Array, pixelIndex: number): number | undefined {\r\n return pixelIndex < data.length ? data[pixelIndex] : undefined;\r\n }\r\n\r\n private getFeature(pixelIndex: number): Feature | undefined {\r\n const featureId = this.getFeatureId(pixelIndex);\r\n return undefined !== featureId ? this._batchState.getFeature(featureId) : undefined;\r\n }\r\n\r\n private getFeatureId(pixelIndex: number): number | undefined {\r\n return undefined !== this._featureId ? this.getPixel32(this._featureId, pixelIndex) : undefined;\r\n }\r\n\r\n private getBatchInfo(pixelIndex: number): BatchInfo | undefined {\r\n const featureId = this.getFeatureId(pixelIndex);\r\n if (undefined !== featureId) {\r\n const batch = this._batchState.find(featureId);\r\n if (undefined !== batch)\r\n return { featureTable: batch.featureTable, iModel: batch.batchIModel, tileId: batch.tileId };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private readonly _scratchUint32Array = new Uint32Array(1);\r\n private readonly _scratchUint8Array = new Uint8Array(this._scratchUint32Array.buffer);\r\n private readonly _scratchVector3d = new Vector3d();\r\n private readonly _mult = new Vector3d(1.0, 1.0 / 255.0, 1.0 / 65025.0);\r\n private decodeDepthRgba(depthAndOrder: number): number {\r\n this._scratchUint32Array[0] = depthAndOrder;\r\n const bytes = this._scratchUint8Array;\r\n const fpt = Vector3d.create(bytes[1] / 255.0, bytes[2] / 255.0, bytes[3] / 255.0, this._scratchVector3d);\r\n let depth = fpt.dotProduct(this._mult);\r\n\r\n assert(0.0 <= depth);\r\n assert(1.01 >= depth); // rounding error...\r\n\r\n depth = Math.min(1.0, depth);\r\n depth = Math.max(0.0, depth);\r\n\r\n return depth;\r\n }\r\n\r\n private decodeRenderOrderRgba(depthAndOrder: number): RenderOrder {\r\n this._scratchUint32Array[0] = depthAndOrder;\r\n const encByte = this._scratchUint8Array[0];\r\n const enc = encByte / 255.0;\r\n const dec = Math.floor(16.0 * enc + 0.5);\r\n return dec;\r\n }\r\n\r\n private readonly _invalidPixelData = new Pixel.Data();\r\n public getPixel(x: number, y: number): Pixel.Data {\r\n const px = this._invalidPixelData;\r\n const index = this.getPixelIndex(x, y);\r\n if (index >= this._numPixels)\r\n return px;\r\n\r\n // Initialize to the defaults...\r\n let distanceFraction = px.distanceFraction;\r\n let geometryType = px.type;\r\n let planarity = px.planarity;\r\n\r\n const haveFeatureIds = Pixel.Selector.None !== (this._selector & Pixel.Selector.Feature);\r\n const feature = haveFeatureIds ? this.getFeature(index) : undefined;\r\n const batchInfo = haveFeatureIds ? this.getBatchInfo(index) : undefined;\r\n if (Pixel.Selector.None !== (this._selector & Pixel.Selector.GeometryAndDistance) && undefined !== this._depthAndOrder) {\r\n const depthAndOrder = this.getPixel32(this._depthAndOrder, index);\r\n if (undefined !== depthAndOrder) {\r\n distanceFraction = this.decodeDepthRgba(depthAndOrder);\r\n\r\n const orderWithPlanarBit = this.decodeRenderOrderRgba(depthAndOrder);\r\n const order = orderWithPlanarBit & ~RenderOrder.PlanarBit;\r\n planarity = (orderWithPlanarBit === order) ? Pixel.Planarity.NonPlanar : Pixel.Planarity.Planar;\r\n switch (order) {\r\n case RenderOrder.None:\r\n geometryType = Pixel.GeometryType.None;\r\n planarity = Pixel.Planarity.None;\r\n break;\r\n case RenderOrder.Background:\r\n case RenderOrder.BlankingRegion:\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n geometryType = Pixel.GeometryType.Surface;\r\n break;\r\n case RenderOrder.Linear:\r\n geometryType = Pixel.GeometryType.Linear;\r\n break;\r\n case RenderOrder.Edge:\r\n geometryType = Pixel.GeometryType.Edge;\r\n break;\r\n case RenderOrder.Silhouette:\r\n geometryType = Pixel.GeometryType.Silhouette;\r\n break;\r\n default:\r\n // ###TODO: may run into issues with point clouds - they are not written correctly in C++.\r\n assert(false, \"Invalid render order\");\r\n geometryType = Pixel.GeometryType.None;\r\n planarity = Pixel.Planarity.None;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let featureTable, iModel, tileId;\r\n if (undefined !== batchInfo) {\r\n featureTable = batchInfo.featureTable;\r\n iModel = batchInfo.iModel;\r\n tileId = batchInfo.tileId;\r\n }\r\n\r\n return new Pixel.Data(feature, distanceFraction, geometryType, planarity, featureTable, iModel, tileId);\r\n }\r\n\r\n private constructor(rect: ViewRect, selector: Pixel.Selector, compositor: SceneCompositor) {\r\n this._rect = rect.clone();\r\n this._selector = selector;\r\n this._batchState = compositor.target.uniforms.batch.state;\r\n\r\n if (Pixel.Selector.None !== (selector & Pixel.Selector.GeometryAndDistance)) {\r\n const depthAndOrderBytes = compositor.readDepthAndOrder(rect);\r\n if (undefined !== depthAndOrderBytes)\r\n this._depthAndOrder = new Uint32Array(depthAndOrderBytes.buffer);\r\n else\r\n this._selector &= ~Pixel.Selector.GeometryAndDistance;\r\n }\r\n\r\n if (Pixel.Selector.None !== (selector & Pixel.Selector.Feature)) {\r\n const features = compositor.readFeatureIds(rect);\r\n if (undefined !== features)\r\n this._featureId = new Uint32Array(features.buffer);\r\n else\r\n this._selector &= ~Pixel.Selector.Feature;\r\n }\r\n }\r\n\r\n public get isEmpty(): boolean { return Pixel.Selector.None === this._selector; }\r\n\r\n public static create(rect: ViewRect, selector: Pixel.Selector, compositor: SceneCompositor): Pixel.Buffer | undefined {\r\n const pdb = new PixelBuffer(rect, selector, compositor);\r\n return pdb.isEmpty ? undefined : pdb;\r\n }\r\n}\r\n\r\n/** Orchestrates rendering of the scene on behalf of a Target.\r\n * This base class exists only so we don't have to export all the types of the shared Compositor members like Textures, FrameBuffers, etc.\r\n * @internal\r\n */\r\nexport abstract class SceneCompositor implements WebGLDisposable, RenderMemory.Consumer {\r\n public readonly target: Target;\r\n public readonly solarShadowMap: SolarShadowMap;\r\n\r\n public abstract get currentRenderTargetIndex(): number;\r\n public abstract set currentRenderTargetIndex(_index: number);\r\n public abstract get isDisposed(): boolean;\r\n public abstract dispose(): void;\r\n public abstract preDraw(): void;\r\n public abstract draw(_commands: RenderCommands): void;\r\n public abstract drawForReadPixels(_commands: RenderCommands, sceneOverlays: GraphicList, overlayDecorations: GraphicList | undefined): void;\r\n public abstract readPixels(rect: ViewRect, selector: Pixel.Selector): Pixel.Buffer | undefined;\r\n public abstract readDepthAndOrder(rect: ViewRect): Uint8Array | undefined;\r\n public abstract readFeatureIds(rect: ViewRect): Uint8Array | undefined;\r\n public abstract updateSolarShadows(context: SceneContext | undefined): void;\r\n\r\n /** Obtain a framebuffer with a single spare RGBA texture that can be used for screen-space effect shaders. */\r\n public abstract get screenSpaceEffectFbo(): FrameBuffer;\r\n\r\n public abstract get featureIds(): TextureHandle;\r\n public abstract get depthAndOrder(): TextureHandle;\r\n public abstract get antialiasSamples(): number;\r\n\r\n protected constructor(target: Target) {\r\n this.target = target;\r\n this.solarShadowMap = new SolarShadowMap(target);\r\n }\r\n\r\n public static create(target: Target): SceneCompositor {\r\n return System.instance.capabilities.supportsDrawBuffers ? new MRTCompositor(target) : new MPCompositor(target);\r\n }\r\n\r\n public abstract collectStatistics(stats: RenderMemory.Statistics): void;\r\n}\r\n\r\n// The actual base class. Specializations are provided based on whether or not multiple render targets are supported.\r\nabstract class Compositor extends SceneCompositor {\r\n protected _width: number = -1;\r\n protected _height: number = -1;\r\n protected _includeOcclusion: boolean = false;\r\n protected _textures = new Textures();\r\n protected _depth?: DepthBuffer;\r\n protected _depthMS?: DepthBuffer; // multisample depth buffer\r\n protected _frameBuffers: FrameBuffers;\r\n protected _geom: Geometry;\r\n protected _readPickDataFromPingPong: boolean = true;\r\n protected _opaqueRenderState = new RenderState();\r\n protected _layerRenderState = new RenderState();\r\n protected _translucentRenderState = new RenderState();\r\n protected _hiliteRenderState = new RenderState();\r\n protected _noDepthMaskRenderState = new RenderState();\r\n protected _backgroundMapRenderState = new RenderState();\r\n protected _debugStencil: number = 0; // 0 to draw stencil volumes normally, 1 to draw as opaque, 2 to draw blended\r\n protected _vcBranchState?: BranchState;\r\n protected _vcSetStencilRenderState?: RenderState;\r\n protected _vcCopyZRenderState?: RenderState;\r\n protected _vcColorRenderState?: RenderState;\r\n protected _vcBlendRenderState?: RenderState;\r\n protected _vcPickDataRenderState?: RenderState;\r\n protected _vcDebugRenderState?: RenderState;\r\n protected _vcAltDepthStencil?: DepthBuffer;\r\n protected _vcAltDepthStencilMS?: DepthBuffer;\r\n protected _haveVolumeClassifier: boolean = false;\r\n protected _antialiasSamples: number = 1;\r\n protected readonly _viewProjectionMatrix = new Matrix4();\r\n\r\n public abstract override get currentRenderTargetIndex(): number;\r\n public abstract override set currentRenderTargetIndex(_index: number);\r\n\r\n protected abstract clearOpaque(_needComposite: boolean): void;\r\n protected abstract renderLayers(_commands: RenderCommands, _needComposite: boolean, pass: RenderPass): void;\r\n protected abstract renderOpaque(_commands: RenderCommands, _compositeFlags: CompositeFlags, _renderForReadPixels: boolean): void;\r\n protected abstract renderForVolumeClassification(_commands: RenderCommands, _compositeFlags: CompositeFlags, _renderForReadPixels: boolean): void;\r\n protected abstract renderIndexedClassifierForReadPixels(_commands: DrawCommands, state: RenderState, renderForIntersectingVolumes: boolean, _needComposite: boolean): void;\r\n protected abstract clearTranslucent(): void;\r\n protected abstract renderTranslucent(_commands: RenderCommands): void;\r\n protected abstract getBackgroundFbo(_needComposite: boolean): FrameBuffer;\r\n protected abstract pingPong(): void;\r\n\r\n public get antialiasSamples(): number { return this._antialiasSamples; }\r\n\r\n protected get useMsBuffers(): boolean { return this._antialiasSamples > 1 && !this.target.isReadPixelsInProgress; }\r\n\r\n protected enableVolumeClassifierFbos(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n this._frameBuffers.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n }\r\n protected disableVolumeClassifierFbos(): void { this._frameBuffers.disableVolumeClassifier(); }\r\n\r\n /** This function generates a texture that contains ambient occlusion information to be applied later. */\r\n protected renderAmbientOcclusion() {\r\n const system = System.instance;\r\n\r\n // Render unblurred ambient occlusion based on depth buffer\r\n let fbo = this._frameBuffers.occlusion!;\r\n this.target.beginPerfMetricRecord(\"Compute AO\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, this._geom.occlusion!);\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the X-blurred ambient occlusion based on unblurred ambient occlusion\r\n fbo = this._frameBuffers.occlusionBlur!;\r\n this.target.beginPerfMetricRecord(\"Blur AO X\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, this._geom.occlusionXBlur!);\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the Y-blurred ambient occlusion based on X-blurred ambient occlusion (render into original occlusion framebuffer)\r\n fbo = this._frameBuffers.occlusion!;\r\n this.target.beginPerfMetricRecord(\"Blur AO Y\");\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, this._geom.occlusionYBlur!);\r\n this.target.techniques.draw(params);\r\n });\r\n this.target.endPerfMetricRecord();\r\n }\r\n\r\n protected constructor(target: Target, fbos: FrameBuffers, geometry: Geometry) {\r\n super(target);\r\n\r\n this._frameBuffers = fbos;\r\n this._geom = geometry;\r\n\r\n this._opaqueRenderState.flags.depthTest = true;\r\n\r\n this._translucentRenderState.flags.depthMask = false;\r\n this._translucentRenderState.flags.blend = this._translucentRenderState.flags.depthTest = true;\r\n this._translucentRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.Zero, GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n\r\n this._hiliteRenderState.flags.depthMask = false;\r\n this._hiliteRenderState.flags.blend = true;\r\n this._hiliteRenderState.blend.functionDestRgb = GL.BlendFactor.One;\r\n this._hiliteRenderState.blend.functionDestAlpha = GL.BlendFactor.One;\r\n\r\n this._noDepthMaskRenderState.flags.depthMask = false;\r\n\r\n // Background map supports transparency, even when depth is off, which is mostly useless but should blend with background color / skybox.\r\n this._backgroundMapRenderState.flags.depthMask = false;\r\n this._backgroundMapRenderState.flags.blend = true;\r\n this._backgroundMapRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n\r\n // Can't write depth without enabling depth test - so make depth test always pass\r\n this._layerRenderState.flags.depthTest = true;\r\n this._layerRenderState.depthFunc = GL.DepthFunc.Always;\r\n this._layerRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._depth)\r\n stats.addTextureAttachment(this._depth.bytesUsed);\r\n if (undefined !== this._depthMS)\r\n stats.addTextureAttachment(this._depthMS.bytesUsed);\r\n this._textures.collectStatistics(stats);\r\n this._geom.collectStatistics(stats);\r\n }\r\n\r\n public preDraw(): boolean {\r\n const rect = this.target.viewRect;\r\n const width = rect.width;\r\n const height = rect.height;\r\n const includeOcclusion = this.target.wantAmbientOcclusion;\r\n const wantVolumeClassifier = (undefined !== this.target.activeVolumeClassifierProps);\r\n let wantAntialiasSamples = this.target.antialiasSamples <= 1 || !System.instance.capabilities.supportsDrawBuffers ? 1 : this.target.antialiasSamples;\r\n if (wantAntialiasSamples > System.instance.capabilities.maxAntialiasSamples)\r\n wantAntialiasSamples = System.instance.capabilities.maxAntialiasSamples;\r\n const changeAntialiasSamples = (this._antialiasSamples > 1 && wantAntialiasSamples > 1 && this._antialiasSamples !== wantAntialiasSamples);\r\n\r\n // If not yet initialized, or dimensions changed, or antialiasing changed the number of samples, initialize.\r\n if (undefined === this._textures.accumulation || width !== this._width || height !== this._height || changeAntialiasSamples) {\r\n this._width = width;\r\n this._height = height;\r\n this._antialiasSamples = wantAntialiasSamples;\r\n\r\n // init() first calls dispose(), which releases all of our fbos, textures, etc, and resets the _includeOcclusion flag.\r\n if (!this.init()) {\r\n assert(false, \"Failed to initialize scene compositor\");\r\n return false;\r\n }\r\n } else if (this._antialiasSamples !== wantAntialiasSamples) {\r\n // Turn on or off multisampling. Rather than just re-initializing, we can save the\r\n // non multisampled textures & FBOs and just try to add or delete the multisampled ones.\r\n this._antialiasSamples = wantAntialiasSamples;\r\n if (wantVolumeClassifier && this._haveVolumeClassifier) {\r\n // Multisampling and volume classification buffers are somewhat co-dependent so if volume classification is on\r\n // and is staying on, just disable volume classifiers and let them get re-enabled later.\r\n this.disableVolumeClassifierFbos();\r\n this._geom.disableVolumeClassifier();\r\n this._textures.disableVolumeClassifier();\r\n if (undefined !== this._vcAltDepthStencil) {\r\n this._vcAltDepthStencil.dispose();\r\n this._vcAltDepthStencil = undefined;\r\n }\r\n this._haveVolumeClassifier = false;\r\n }\r\n if (this._antialiasSamples > 1) {\r\n if (!this.enableMultiSampling()) {\r\n assert(false, \"Failed to initialize multisampling buffers\");\r\n return false;\r\n }\r\n } else {\r\n if (!this.disableMultiSampling()) {\r\n assert(false, \"Failed to initialize multisampling buffers\");\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n // Allocate or free ambient occlusion-related resources if necessary\r\n if (includeOcclusion !== this._includeOcclusion) {\r\n this._includeOcclusion = includeOcclusion;\r\n if (includeOcclusion) {\r\n if (!this._textures.enableOcclusion(width, height)) {\r\n assert(false, \"Failed to initialize occlusion textures\");\r\n return false;\r\n }\r\n } else {\r\n this._textures.disableOcclusion();\r\n }\r\n\r\n this._frameBuffers.toggleOcclusion(this._textures);\r\n this._geom.toggleOcclusion(this._textures, this._depth!);\r\n }\r\n\r\n // Allocate or free volume classifier-related resources if necessary. Make sure that we have depth/stencil.\r\n if (wantVolumeClassifier !== this._haveVolumeClassifier) {\r\n if (wantVolumeClassifier && DepthType.TextureUnsignedInt24Stencil8 === System.instance.capabilities.maxDepthType) {\r\n this._vcAltDepthStencil = System.instance.createDepthBuffer(width, height) as TextureHandle;\r\n if (undefined !== this._depthMS)\r\n this._vcAltDepthStencilMS = System.instance.createDepthBuffer(width, height, this._antialiasSamples) as TextureHandle;\r\n if (undefined === this._vcAltDepthStencil || (undefined !== this._depthMS && undefined === this._vcAltDepthStencilMS)) {\r\n assert(false, \"Failed to initialize volume classifier depth buffer\");\r\n return false;\r\n }\r\n if (!this._textures.enableVolumeClassifier(width, height, this._antialiasSamples)) {\r\n assert(false, \"Failed to initialize volume classifier textures\");\r\n return false;\r\n }\r\n if (!this._geom.enableVolumeClassifier(this._textures, this._depth!, width, height)) {\r\n assert(false, \"Failed to initialize volume classifier geometry\");\r\n return false;\r\n }\r\n this.enableVolumeClassifierFbos(this._textures, this._depth!, this._vcAltDepthStencil, this._depthMS, this._vcAltDepthStencilMS);\r\n this._haveVolumeClassifier = true;\r\n } else {\r\n this.disableVolumeClassifierFbos();\r\n this._geom.disableVolumeClassifier();\r\n this._textures.disableVolumeClassifier();\r\n if (undefined !== this._vcAltDepthStencil) {\r\n this._vcAltDepthStencil.dispose();\r\n this._vcAltDepthStencil = undefined;\r\n }\r\n this._haveVolumeClassifier = false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public draw(commands: RenderCommands) {\r\n if (!this.preDraw()) {\r\n assert(false);\r\n return;\r\n }\r\n\r\n const compositeFlags = commands.compositeFlags;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n\r\n // Clear output targets\r\n this.target.frameStatsCollector.beginTime(\"opaqueTime\");\r\n this.target.beginPerfMetricRecord(\"Clear Opaque\");\r\n this.clearOpaque(needComposite);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"opaqueTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"backgroundTime\"); // includes skybox\r\n\r\n // Render the background\r\n this.target.beginPerfMetricRecord(\"Render Background\");\r\n this.renderBackground(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the sky box\r\n this.target.beginPerfMetricRecord(\"Render Skybox\");\r\n this.renderSkyBox(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render the background map graphics\r\n this.target.beginPerfMetricRecord(\"Render Background Map\");\r\n this.renderBackgroundMap(commands, needComposite);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"backgroundTime\");\r\n\r\n // Enable clipping\r\n this.target.beginPerfMetricRecord(\"Enable Clipping\");\r\n this.target.pushViewClip();\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render volume classification first so that we only classify the reality data\r\n this.target.frameStatsCollector.beginTime(\"classifiersTime\");\r\n this.target.beginPerfMetricRecord(\"Render VolumeClassification\");\r\n this.renderVolumeClassification(commands, compositeFlags, false);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"classifiersTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"opaqueTime\");\r\n\r\n // Render layers\r\n this.target.beginPerfMetricRecord(\"Render Opaque Layers\");\r\n this.renderLayers(commands, needComposite, RenderPass.OpaqueLayers);\r\n this.target.endPerfMetricRecord();\r\n\r\n // Render opaque geometry\r\n this.target.frameStatsCollector.beginTime(\"onRenderOpaqueTime\");\r\n IModelFrameLifecycle.onRenderOpaque.raiseEvent({\r\n commands,\r\n needComposite,\r\n compositeFlags,\r\n fbo: this.getBackgroundFbo(needComposite),\r\n frameBufferStack: System.instance.frameBufferStack,\r\n });\r\n this.target.frameStatsCollector.endTime(\"onRenderOpaqueTime\");\r\n\r\n // Render opaque geometry\r\n this.target.beginPerfMetricRecord(\"Render Opaque\");\r\n this.renderOpaque(commands, compositeFlags, false);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"opaqueTime\");\r\n\r\n this.target.frameStatsCollector.beginTime(\"translucentTime\");\r\n\r\n // Render translucent layers\r\n this.target.beginPerfMetricRecord(\"Render Translucent Layers\");\r\n this.renderLayers(commands, needComposite, RenderPass.TranslucentLayers);\r\n this.target.endPerfMetricRecord();\r\n\r\n if (needComposite) {\r\n this._geom.composite!.update(compositeFlags);\r\n this.target.beginPerfMetricRecord(\"Render Translucent\");\r\n this.clearTranslucent();\r\n this.renderTranslucent(commands);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.frameStatsCollector.endTime(\"translucentTime\");\r\n\r\n this.target.beginPerfMetricRecord(\"Render Hilite\");\r\n this.renderHilite(commands);\r\n this.target.endPerfMetricRecord();\r\n\r\n this.target.beginPerfMetricRecord(\"Composite\");\r\n this.composite();\r\n this.target.endPerfMetricRecord();\r\n } else\r\n this.target.frameStatsCollector.endTime(\"translucentTime\");\r\n\r\n // Render overlay Layers\r\n this.target.frameStatsCollector.beginTime(\"overlaysTime\");\r\n this.target.beginPerfMetricRecord(\"Render Overlay Layers\");\r\n this.renderLayers(commands, false, RenderPass.OverlayLayers);\r\n this.target.endPerfMetricRecord();\r\n this.target.frameStatsCollector.endTime(\"overlaysTime\");\r\n\r\n this.target.popViewClip();\r\n }\r\n\r\n public get fullHeight(): number { return this.target.viewRect.height; }\r\n\r\n public drawForReadPixels(commands: RenderCommands, sceneOverlays: GraphicList, overlayDecorations: GraphicList | undefined): void {\r\n this.target.beginPerfMetricRecord(\"Render Background\", true);\r\n if (!this.preDraw()) {\r\n this.target.endPerfMetricRecord(true); // End Render Background record if returning\r\n assert(false);\r\n return;\r\n }\r\n\r\n this.clearOpaque(false);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // On entry the RenderCommands has been initialized for all scene graphics and pickable decorations with the exception of world overlays.\r\n // It's possible we have no pickable scene graphics or decorations, but do have pickable world overlays.\r\n const haveRenderCommands = !commands.isEmpty;\r\n if (haveRenderCommands) {\r\n this.target.beginPerfMetricRecord(\"Enable Clipping\", true);\r\n this.target.pushViewClip();\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render VolumeClassification\", true);\r\n this.renderVolumeClassification(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n // RenderPass.BackgroundMap is used only when depth is turned off for the map.\r\n // Ensure it draws before any opaque geometry (including layers), without depth.\r\n this.target.beginPerfMetricRecord(\"Render background map\", true);\r\n this.target.drawingBackgroundForReadPixels = true;\r\n this.renderLayers(commands, false, RenderPass.BackgroundMap);\r\n this.target.drawingBackgroundForReadPixels = false;\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Opaque Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.OpaqueLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Opaque\", true);\r\n this.renderOpaque(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Translucent Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.TranslucentLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.beginPerfMetricRecord(\"Render Overlay Layers\", true);\r\n this.renderLayers(commands, false, RenderPass.OverlayLayers);\r\n this.target.endPerfMetricRecord(true);\r\n\r\n this.target.popViewClip();\r\n }\r\n\r\n if (0 === sceneOverlays.length && (undefined === overlayDecorations || 0 === overlayDecorations.length))\r\n return;\r\n\r\n // Now populate the opaque passes with any pickable world overlays\r\n this.target.beginPerfMetricRecord(\"Overlay Draws\", true);\r\n commands.initForPickOverlays(sceneOverlays, overlayDecorations);\r\n if (commands.isEmpty) {\r\n this.target.endPerfMetricRecord(true); // End Overlay Draws record if returning\r\n return;\r\n }\r\n\r\n // Clear the depth buffer so that overlay decorations win the depth test.\r\n // (If *only* overlays exist, then clearOpaque() above already took care of this).\r\n if (haveRenderCommands) {\r\n const system = System.instance;\r\n system.frameBufferStack.execute(this._frameBuffers.opaqueColor!, true, this.useMsBuffers, () => {\r\n system.applyRenderState(RenderState.defaults);\r\n system.context.clearDepth(1.0);\r\n system.context.clear(GL.BufferBit.Depth);\r\n });\r\n }\r\n\r\n // Render overlays as opaque into the pick buffers. Make sure we use the decoration state (to ignore symbology overrides, esp. the non-locatable flag).\r\n const decState = this.target.decorationsState;\r\n const vf = decState.viewFlags;\r\n if (vf.transparency)\r\n decState.viewFlags = vf.copy({ transparency: false });\r\n\r\n this.renderOpaque(commands, CompositeFlags.None, true);\r\n this.target.endPerfMetricRecord();\r\n decState.viewFlags = vf;\r\n }\r\n\r\n public readPixels(rect: ViewRect, selector: Pixel.Selector): Pixel.Buffer | undefined {\r\n return PixelBuffer.create(rect, selector, this);\r\n }\r\n\r\n public readDepthAndOrder(rect: ViewRect): Uint8Array | undefined { return this.readFrameBuffer(rect, this._frameBuffers.depthAndOrder); }\r\n\r\n public readFeatureIds(rect: ViewRect): Uint8Array | undefined {\r\n const tex = this._textures.featureId;\r\n if (undefined === tex)\r\n return undefined;\r\n\r\n const fbo = FrameBuffer.create([tex]);\r\n const result = this.readFrameBuffer(rect, fbo);\r\n\r\n dispose(fbo);\r\n\r\n return result;\r\n }\r\n\r\n public updateSolarShadows(context: SceneContext | undefined): void {\r\n this.solarShadowMap.update(context);\r\n }\r\n\r\n public get screenSpaceEffectFbo(): FrameBuffer {\r\n assert(undefined !== this._frameBuffers.hilite);\r\n return this._frameBuffers.hilite;\r\n }\r\n\r\n private readFrameBuffer(rect: ViewRect, fbo?: FrameBuffer): Uint8Array | undefined {\r\n if (undefined === fbo || !Debug.isValidFrameBuffer)\r\n return undefined;\r\n\r\n // NB: ViewRect origin at top-left; GL origin at bottom-left\r\n const bottom = this.fullHeight - rect.bottom;\r\n const gl = System.instance.context;\r\n const bytes = new Uint8Array(rect.width * rect.height * 4);\r\n let result: Uint8Array | undefined = bytes;\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n try {\r\n gl.readPixels(rect.left, bottom, rect.width, rect.height, gl.RGBA, gl.UNSIGNED_BYTE, bytes);\r\n } catch (e) {\r\n result = undefined;\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._depth\r\n && undefined === this._vcAltDepthStencil\r\n && !this._includeOcclusion\r\n && this._textures.isDisposed\r\n && this._frameBuffers.isDisposed\r\n && this._geom.isDisposed\r\n && !this._haveVolumeClassifier\r\n && this.solarShadowMap.isDisposed;\r\n }\r\n\r\n public dispose() {\r\n this.reset();\r\n dispose(this.solarShadowMap);\r\n }\r\n\r\n // Resets anything that depends on the dimensions of the render target.\r\n // Does *not* dispose the solar shadow map.\r\n private reset() {\r\n this._depth = dispose(this._depth);\r\n this._depthMS = dispose(this._depthMS);\r\n this._vcAltDepthStencil = dispose(this._vcAltDepthStencil);\r\n this._includeOcclusion = false;\r\n dispose(this._textures);\r\n dispose(this._frameBuffers);\r\n dispose(this._geom);\r\n this._haveVolumeClassifier = false;\r\n }\r\n\r\n private init(): boolean {\r\n this.reset();\r\n this._depth = System.instance.createDepthBuffer(this._width, this._height, 1);\r\n if (this._antialiasSamples > 1)\r\n this._depthMS = System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);\r\n else\r\n this._depthMS = undefined;\r\n if (this._depth !== undefined) {\r\n return this._textures.init(this._width, this._height, this._antialiasSamples)\r\n && this._frameBuffers.init(this._textures, this._depth, this._depthMS)\r\n && this._geom.init(this._textures);\r\n }\r\n return false;\r\n }\r\n\r\n protected enableMultiSampling(): boolean {\r\n // Assume that non-multisampled stuff is already allocated. Just need to add multisampled textures, buffers, & geometry.\r\n assert(undefined === this._depthMS && undefined !== this._depth);\r\n this._depthMS = System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);\r\n if (undefined === this._depthMS)\r\n return false;\r\n return this._textures.enableMultiSampling(this._width, this._height, this._antialiasSamples);\r\n }\r\n\r\n protected disableMultiSampling(): boolean {\r\n // Want to disable multisampling without deleting & reallocating other stuff.\r\n this._depthMS = dispose(this._depthMS);\r\n assert(undefined !== this._depth);\r\n return this._textures.disableMultiSampling();\r\n }\r\n\r\n private renderBackgroundMap(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.BackgroundMap);\r\n if (0 === cmds.length) {\r\n return;\r\n }\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.BackgroundMap));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.BackgroundMap);\r\n });\r\n }\r\n\r\n private renderSkyBox(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.SkyBox);\r\n if (0 === cmds.length) {\r\n return;\r\n }\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.SkyBox));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.SkyBox);\r\n });\r\n }\r\n\r\n private renderBackground(commands: RenderCommands, needComposite: boolean) {\r\n const cmds = commands.getCommands(RenderPass.Background);\r\n if (0 === cmds.length)\r\n return;\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const fbo = this.getBackgroundFbo(needComposite);\r\n fbStack.execute(fbo, true, this.useMsBuffers, () => {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.Background));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Background);\r\n });\r\n }\r\n\r\n private createVolumeClassifierStates() {\r\n // If we have already created a branch state for use in rendering the volume classifiers we must at least swap out its symbology overrides for the current one.\r\n if (undefined !== this._vcBranchState) {\r\n this._vcBranchState.symbologyOverrides = this.target.uniforms.branch.top.symbologyOverrides;\r\n return;\r\n }\r\n\r\n // Create a BranchState and several RenderStates to use when drawing the classifier volumes.\r\n // The BranchState needs to be created every time in case the symbology overrides changes.\r\n // It is based off of the current state, but turns off unnecessary and unwanted options, lighting being the most important.\r\n const top = this.target.uniforms.branch.top;\r\n const viewFlags = top.viewFlags.copy({\r\n renderMode: RenderMode.SmoothShade,\r\n wiremesh: false,\r\n lighting: false,\r\n forceSurfaceDiscard: false,\r\n hiddenEdges: false,\r\n visibleEdges: false,\r\n materials: false,\r\n textures: false,\r\n transparency: false,\r\n });\r\n\r\n this._vcBranchState = new BranchState({\r\n symbologyOverrides: top.symbologyOverrides,\r\n viewFlags,\r\n transform: Transform.createIdentity(),\r\n clipVolume: top.clipVolume,\r\n planarClassifier: top.planarClassifier,\r\n iModel: top.iModel,\r\n is3d: top.is3d,\r\n edgeSettings: top.edgeSettings,\r\n });\r\n\r\n this._vcSetStencilRenderState = new RenderState();\r\n this._vcCopyZRenderState = new RenderState();\r\n this._vcColorRenderState = new RenderState();\r\n this._vcBlendRenderState = new RenderState();\r\n this._vcPickDataRenderState = new RenderState();\r\n\r\n this._vcCopyZRenderState.flags.depthTest = true;\r\n this._vcCopyZRenderState.flags.depthMask = true;\r\n this._vcCopyZRenderState.depthFunc = GL.DepthFunc.Always;\r\n this._vcCopyZRenderState.flags.colorWrite = true;\r\n this._vcCopyZRenderState.flags.stencilTest = true;\r\n this._vcCopyZRenderState.stencil.frontFunction.function = GL.StencilFunction.Always;\r\n this._vcCopyZRenderState.stencil.frontOperation.fail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.frontOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.frontOperation.zPass = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backFunction.function = GL.StencilFunction.Always;\r\n this._vcCopyZRenderState.stencil.backOperation.fail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcCopyZRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero;\r\n\r\n this._vcSetStencilRenderState.flags.depthTest = true;\r\n this._vcSetStencilRenderState.flags.depthMask = false;\r\n this._vcSetStencilRenderState.flags.colorWrite = false;\r\n this._vcSetStencilRenderState.flags.stencilTest = true;\r\n this._vcSetStencilRenderState.depthFunc = GL.DepthFunc.LessOrEqual;\r\n this._vcSetStencilRenderState.stencil.frontFunction.function = GL.StencilFunction.Always;\r\n this._vcSetStencilRenderState.stencil.frontOperation.zFail = GL.StencilOperation.IncrWrap;\r\n this._vcSetStencilRenderState.stencil.backFunction.function = GL.StencilFunction.Always;\r\n this._vcSetStencilRenderState.stencil.backOperation.zFail = GL.StencilOperation.DecrWrap;\r\n\r\n this._vcPickDataRenderState.flags.depthTest = false;\r\n this._vcPickDataRenderState.flags.depthMask = false;\r\n this._vcPickDataRenderState.flags.colorWrite = true;\r\n this._vcPickDataRenderState.flags.stencilTest = true;\r\n this._vcPickDataRenderState.flags.cull = true;\r\n this._vcPickDataRenderState.cullFace = GL.CullFace.Front;\r\n this._vcPickDataRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcPickDataRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n // Let all of the operations remain at Keep so that the stencil will remain in tact for the subsequent blend draw to the color buffer.\r\n\r\n this._vcColorRenderState.flags.depthTest = false;\r\n this._vcColorRenderState.flags.depthMask = false;\r\n this._vcColorRenderState.flags.colorWrite = true;\r\n this._vcColorRenderState.flags.stencilTest = true;\r\n this._vcColorRenderState.cullFace = GL.CullFace.Front;\r\n this._vcColorRenderState.stencil.frontFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.frontOperation.fail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.frontOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.frontOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n this._vcColorRenderState.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState.stencil.backOperation.fail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.backOperation.zFail = GL.StencilOperation.Zero;\r\n this._vcColorRenderState.stencil.backOperation.zPass = GL.StencilOperation.Zero; // this will clear the stencil\r\n this._vcColorRenderState.flags.blend = true; // blend func and color will be set before using\r\n\r\n this._vcBlendRenderState.flags.depthTest = false;\r\n this._vcBlendRenderState.flags.depthMask = false;\r\n this._vcBlendRenderState.flags.colorWrite = true;\r\n this._vcBlendRenderState.flags.stencilTest = false;\r\n this._vcBlendRenderState.flags.blend = true;\r\n this._vcBlendRenderState.blend.setBlendFuncSeparate(GL.BlendFactor.SrcAlpha, GL.BlendFactor.Zero, GL.BlendFactor.OneMinusSrcAlpha, GL.BlendFactor.One);\r\n\r\n if (this._debugStencil > 0) {\r\n this._vcDebugRenderState = new RenderState();\r\n this._vcDebugRenderState.flags.depthTest = true;\r\n this._vcDebugRenderState.flags.blend = true;\r\n this._vcDebugRenderState.blend.setBlendFunc(GL.BlendFactor.OneMinusConstColor, GL.BlendFactor.ConstColor);\r\n this._vcDebugRenderState.blend.color = [0.67, 0.67, 0.67, 1.0];\r\n }\r\n }\r\n\r\n private setAllStencilOps(state: RenderState, op: GL.StencilOperation): void {\r\n state.stencil.frontOperation.fail = op;\r\n state.stencil.frontOperation.zFail = op;\r\n state.stencil.frontOperation.zPass = op;\r\n state.stencil.backOperation.fail = op;\r\n state.stencil.backOperation.zFail = op;\r\n state.stencil.backOperation.zPass = op;\r\n }\r\n\r\n private renderIndexedVolumeClassifier(cmdsByIndex: DrawCommands, needComposite: boolean) {\r\n // Set the stencil for the given classifier stencil volume.\r\n System.instance.frameBufferStack.execute(this._frameBuffers.stencilSet!, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.executeForIndexedClassifier(this.target, cmdsByIndex, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil for the pick data.\r\n this.renderIndexedClassifierForReadPixels(cmdsByIndex, this._vcPickDataRenderState!, true, needComposite);\r\n }\r\n\r\n private renderVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n // Sometimes we need to render the classifier stencil volumes one at a time, if so draw them from the cmdsByIndex list\r\n const cmds = commands.getCommands(RenderPass.Classification);\r\n const cmdsByIndex = commands.getCommands(RenderPass.ClassificationByIndex);\r\n let numCmdsPerClassifier = 0;\r\n for (const cmd of cmdsByIndex) { // Figure out how many commands there are per index/primitive\r\n numCmdsPerClassifier++;\r\n if (\"drawPrimitive\" === cmd.opcode) {\r\n numCmdsPerClassifier += numCmdsPerClassifier - 1;\r\n break;\r\n }\r\n }\r\n const cmdsForVC = commands.getCommands(RenderPass.VolumeClassifiedRealityData);\r\n if (!this.target.activeVolumeClassifierProps || (renderForReadPixels && 0 === cmds.length) || 0 === cmdsForVC.length)\r\n return;\r\n\r\n let outsideFlags = this.target.activeVolumeClassifierProps.flags.outside;\r\n let insideFlags = this.target.activeVolumeClassifierProps.flags.inside;\r\n\r\n if (this.target.wantThematicDisplay) {\r\n if (outsideFlags !== SpatialClassifierOutsideDisplay.Off)\r\n outsideFlags = SpatialClassifierOutsideDisplay.On;\r\n if (insideFlags !== SpatialClassifierInsideDisplay.Off)\r\n insideFlags = SpatialClassifierInsideDisplay.On;\r\n }\r\n\r\n // Render the geometry which we are going to classify.\r\n this.renderForVolumeClassification(commands, compositeFlags, renderForReadPixels);\r\n\r\n this.createVolumeClassifierStates();\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const fboColorAndZ = this.getBackgroundFbo(needComposite);\r\n\r\n if (this._debugStencil > 0) {\r\n fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {\r\n if (1 === this._debugStencil) {\r\n System.instance.applyRenderState(this.getRenderState(RenderPass.OpaqueGeneral));\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n } else {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcDebugRenderState!);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n }\r\n });\r\n return;\r\n }\r\n\r\n if (undefined === this._frameBuffers.altZOnly || undefined === this._frameBuffers.stencilSet)\r\n return;\r\n\r\n if (renderForReadPixels && this.target.vcSupportIntersectingVolumes) {\r\n // Clear the stencil.\r\n fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n });\r\n\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n\r\n for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier)\r\n this.renderIndexedVolumeClassifier(cmdsByIndex.slice(i, i + numCmdsPerClassifier), needComposite);\r\n\r\n return;\r\n }\r\n\r\n const needOutsideDraw = SpatialClassifierOutsideDisplay.On !== outsideFlags;\r\n const needInsideDraw = SpatialClassifierInsideDisplay.On !== insideFlags;\r\n const doColorByElement = SpatialClassifierInsideDisplay.ElementColor === insideFlags || renderForReadPixels;\r\n const doColorByElementForIntersectingVolumes = this.target.vcSupportIntersectingVolumes;\r\n const needAltZ = (doColorByElement && !doColorByElementForIntersectingVolumes) || needOutsideDraw;\r\n let zOnlyFbo = this._frameBuffers.stencilSet;\r\n let volClassBlendFbo = this._frameBuffers.volClassCreateBlend;\r\n let volClassBlendReadZTexture = this._vcAltDepthStencil!.getHandle()!;\r\n let volClassBlendReadZTextureFbo = this._frameBuffers.altZOnly;\r\n if (!needAltZ) {\r\n // Initialize the blend texture and the stencil.\r\n assert(undefined !== volClassBlendFbo);\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n System.instance.context.clearColor(0.0, 0.0, 0.0, 0.0);\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Color | GL.BufferBit.Stencil);\r\n });\r\n } else {\r\n // If we are doing color-by-element for the inside do not care about intersecting volumes or we need to color the outside\r\n // then we need to copy the Z buffer and set up a different zbuffer/stencil to render in.\r\n zOnlyFbo = this._frameBuffers.altZOnly;\r\n volClassBlendFbo = this._frameBuffers.volClassCreateBlendAltZ;\r\n assert(undefined !== volClassBlendFbo);\r\n volClassBlendReadZTexture = this._depth!.getHandle()!;\r\n volClassBlendReadZTextureFbo = this._frameBuffers.stencilSet;\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n // Copy the current Z into the Alt-Z. At the same time go ahead and clear the stencil and the blend texture.\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n this.target.pushState(this.target.decorationsState);\r\n System.instance.applyRenderState(this._vcCopyZRenderState!);\r\n if (System.instance.capabilities.supportsFragDepth)\r\n this.target.techniques.draw(getDrawParams(this.target, this._geom.volClassCopyZ!)); // This method uses the EXT_frag_depth extension\r\n else\r\n this.target.techniques.draw(getDrawParams(this.target, this._geom.volClassCopyZWithPoints!)); // This method draws GL_POINTS (1 per pixel) to set Z in vertex shader\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n this.target.popBranch();\r\n });\r\n }\r\n\r\n if (renderForReadPixels) {\r\n // Set the stencil for all of the classifier volumes.\r\n System.instance.frameBufferStack.execute(this._frameBuffers.altZOnly, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n // After we create the stencil we need to clear the Z for the next step (so also must turn on z writing temporarily).\r\n this._vcSetStencilRenderState!.flags.depthMask = true;\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n this._vcSetStencilRenderState!.flags.depthMask = false;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Two, undefined);\r\n System.instance.bindTexture2d(TextureUnit.Five, undefined);\r\n });\r\n this.target.pushState(this._vcBranchState!);\r\n this._vcColorRenderState!.flags.depthTest = true;\r\n this._vcColorRenderState!.flags.depthMask = true;\r\n this._vcColorRenderState!.flags.cull = true;\r\n this._vcColorRenderState!.flags.blend = false;\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw\r\n this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ!.texture;\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n this.renderIndexedClassifierForReadPixels(cmds, this._vcColorRenderState!, false, needComposite);\r\n this.target.activeVolumeClassifierTexture = undefined;\r\n this._vcColorRenderState!.flags.depthTest = false;\r\n this._vcColorRenderState!.flags.depthMask = false;\r\n this._vcColorRenderState!.flags.cull = false;\r\n this._vcColorRenderState!.flags.blend = true;\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Zero);\r\n System.instance.context.clearStencil(0); // must clear stencil afterwards since we had to draw with stencil set to KEEP\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.PlanarClassification, undefined);\r\n return;\r\n }\r\n\r\n if ((needOutsideDraw && cmds.length > 0) || (needInsideDraw && !(doColorByElement && doColorByElementForIntersectingVolumes))) {\r\n // Set the stencil using all of the volume classifiers. This will be used to do the outside and/or the inside if they need to be done.\r\n // If we are not modifying the outside and the inside is using color-by-element for intersecting volumes, then the stencil will get set later.\r\n fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Two, undefined);\r\n System.instance.bindTexture2d(TextureUnit.Five, undefined);\r\n });\r\n }\r\n if (needOutsideDraw) {\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n this._geom.volClassSetBlend!.boundaryType = BoundaryType.Outside;\r\n this._geom.volClassSetBlend!.texture = volClassBlendReadZTexture;\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState!.flags.blend = false;\r\n this._vcColorRenderState!.stencil.frontFunction.function = GL.StencilFunction.Equal; // temp swap the functions so we get what is not set in the stencil\r\n this._vcColorRenderState!.stencil.backFunction.function = GL.StencilFunction.Equal;\r\n if (needInsideDraw)\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Keep); // don't clear the stencil since we'll use it again\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend!);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState!.flags.blend = true;\r\n this._vcColorRenderState!.stencil.frontFunction.function = GL.StencilFunction.NotEqual;\r\n this._vcColorRenderState!.stencil.backFunction.function = GL.StencilFunction.NotEqual;\r\n if (needInsideDraw)\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Zero);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined); // unbind the depth buffer that we used as a texture as we'll need it as an output later\r\n });\r\n }\r\n if (needInsideDraw) {\r\n if (!doColorByElement) {\r\n // In this case our stencil is already set and it is all getting colored the same, so we can just draw with a viewport quad to color it.\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n this._geom.volClassSetBlend!.boundaryType = BoundaryType.Inside;\r\n this._geom.volClassSetBlend!.texture = volClassBlendReadZTexture;\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState!.flags.blend = false;\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend!);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState!.flags.blend = true;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n } else if (doColorByElementForIntersectingVolumes) {\r\n // If we have intersecting classifier volumes, then we must stencil them individually to get their colors in the blend texture.\r\n for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier) {\r\n const nxtCmds = cmdsByIndex.slice(i, i + numCmdsPerClassifier);\r\n // Set the stencil for this one classifier.\r\n fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.execute(this.target, nxtCmds, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil. Just render the volume normally (us opaque pass), but use blending to modify the source alpha that gets written to the blend texture.\r\n fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n this._vcColorRenderState!.blend.color = [1.0, 1.0, 1.0, 0.35];\r\n this._vcColorRenderState!.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.Zero);\r\n this._vcColorRenderState!.flags.cull = true;\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n this.target.activeVolumeClassifierTexture = undefined; // make sure this texture is undefined so we do not use the planar classification shader\r\n this.target.techniques.execute(this.target, nxtCmds, RenderPass.OpaqueGeneral);\r\n this._vcColorRenderState!.flags.cull = false;\r\n this.target.popBranch();\r\n });\r\n }\r\n } else {\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {\r\n // For coloring the inside by element color we will draw the inside using the the classifiers themselves.\r\n // To do this we need to first clear our Alt-Z. The shader will then test and write Z and will discard\r\n // anything that is in front of the reality model by reading the Z texture from the standard Z buffer (which has the reality mesh Z's in it).\r\n // What we end up with is the closest volume behind the terrain which works if the classifier volumes do not intersect.\r\n // Since we need the blend texture to have alpha in it, we will use blending just to modify the alpha that gets written.\r\n this.target.pushState(this._vcBranchState!);\r\n this._vcColorRenderState!.blend.color = [1.0, 1.0, 1.0, 0.35];\r\n this._vcColorRenderState!.blend.setBlendFuncSeparate(GL.BlendFactor.One, GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.Zero);\r\n this._vcColorRenderState!.flags.depthTest = true;\r\n this._vcColorRenderState!.flags.depthMask = true;\r\n this._vcColorRenderState!.flags.cull = true;\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n System.instance.context.clearDepth(1.0);\r\n System.instance.context.clear(GL.BufferBit.Depth);\r\n this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ!.texture;\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n this.target.activeVolumeClassifierTexture = undefined;\r\n this._vcColorRenderState!.flags.depthTest = false;\r\n this._vcColorRenderState!.flags.depthMask = false;\r\n this._vcColorRenderState!.flags.cull = false;\r\n this.setAllStencilOps(this._vcColorRenderState!, GL.StencilOperation.Zero);\r\n System.instance.context.clearStencil(0); // must clear stencil afterwards since we had to draw with stencil set to KEEP\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.PlanarClassification, undefined);\r\n });\r\n }\r\n }\r\n\r\n // Handle the selected classifier volumes. Note though that if color-by-element is being used, then the selected volumes are already hilited\r\n // and this stage can be skipped. In order for this to work the list of commands needs to get reduced to only the ones which draw hilited volumes.\r\n // We cannot use the hillite shader to draw them since it doesn't handle logZ properly (it doesn't need to since it is only used elsewhere when Z write is turned off)\r\n // and we don't really want another whole set of hilite shaders just for this.\r\n const cmdsSelected = extractHilitedVolumeClassifierCommands(this.target.hilites, commands.getCommands(RenderPass.HiliteClassification));\r\n commands.replaceCommands(RenderPass.HiliteClassification, cmdsSelected); // replace the hilite command list for use in hilite pass as well.\r\n // if (cmdsSelected.length > 0 && insideFlags !== this.target.activeVolumeClassifierProps!.flags.selected) {\r\n if (!doColorByElement && cmdsSelected.length > 0 && insideFlags !== SpatialClassifierInsideDisplay.Hilite) { // assume selected ones are always hilited\r\n // Set the stencil using just the hilited volume classifiers.\r\n fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n if (needAltZ) {\r\n // If we are using the alternate Z then the stencil that goes with the original Z has not been cleared yet, so clear it here.\r\n System.instance.context.clearStencil(0);\r\n System.instance.context.clear(GL.BufferBit.Stencil);\r\n }\r\n\r\n this.target.techniques.execute(this.target, cmdsSelected, RenderPass.Classification);\r\n this.target.popBranch();\r\n });\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)\r\n this._frameBuffers.altZOnly.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted\r\n\r\n fbStack.execute(this._frameBuffers.volClassCreateBlend!, false, this.useMsBuffers, () => {\r\n this._geom.volClassSetBlend!.boundaryType = BoundaryType.Selected;\r\n this._geom.volClassSetBlend!.texture = this._vcAltDepthStencil!.getHandle()!; // need to attach the alt depth instead of the real one since it is bound to the frame buffer\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState!.flags.blend = false;\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassSetBlend!);\r\n this.target.techniques.draw(params);\r\n this._vcColorRenderState!.flags.blend = true;\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n }\r\n\r\n // Now modify the color of the reality mesh by using the blend texture to blend with it.\r\n if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers) {\r\n volClassBlendFbo.blitMsBuffersToTextures(false); // make sure the volClassBlend texture that we are about to read has been blitted\r\n }\r\n\r\n fbStack.execute(fboColorAndZ, false, this.useMsBuffers, () => {\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcBlendRenderState!.blend.setBlendFuncSeparate(GL.BlendFactor.SrcAlpha, GL.BlendFactor.Zero, GL.BlendFactor.OneMinusSrcAlpha, GL.BlendFactor.One);\r\n System.instance.applyRenderState(this._vcBlendRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassBlend!);\r\n this.target.techniques.draw(params);\r\n this.target.popBranch();\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n });\r\n\r\n // Process the flashed classifier if there is one.\r\n // Like the selected volumes, we do not need to do this step if we used by-element-color since the flashing is included in the element color.\r\n const flashedClassifierCmds = extractFlashedVolumeClassifierCommands(this.target.flashedId, cmdsByIndex, numCmdsPerClassifier);\r\n if (undefined !== flashedClassifierCmds && !doColorByElement) {\r\n // Set the stencil for this one classifier.\r\n fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n System.instance.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.executeForIndexedClassifier(this.target, flashedClassifierCmds, RenderPass.OpaqueGeneral);\r\n this.target.popBranch();\r\n });\r\n\r\n // Process the stencil to flash the contents.\r\n fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {\r\n this.target.pushState(this.target.decorationsState);\r\n this._vcColorRenderState!.blend.color = [1.0, 1.0, 1.0, this.target.flashIntensity * 0.2];\r\n this._vcColorRenderState!.blend.setBlendFuncSeparate(GL.BlendFactor.ConstAlpha, GL.BlendFactor.Zero, GL.BlendFactor.One, GL.BlendFactor.One);\r\n System.instance.applyRenderState(this._vcColorRenderState!);\r\n const params = getDrawParams(this.target, this._geom.volClassColorStencil!);\r\n this.target.techniques.draw(params);\r\n this.target.popBranch();\r\n });\r\n }\r\n }\r\n\r\n private renderHilite(commands: RenderCommands) {\r\n const system = System.instance;\r\n system.frameBufferStack.execute(this._frameBuffers.hilite!, true, false, () => {\r\n // Clear the hilite buffer.\r\n system.context.clearColor(0, 0, 0, 0);\r\n system.context.clear(GL.BufferBit.Color);\r\n // Draw the normal hilite geometry.\r\n this.drawPass(commands, RenderPass.Hilite);\r\n });\r\n\r\n // Process planar classifiers\r\n const planarClassifierCmds = commands.getCommands(RenderPass.HilitePlanarClassification);\r\n if (0 !== planarClassifierCmds.length) {\r\n system.frameBufferStack.execute(this._frameBuffers.hiliteUsingStencil!, true, false, () => {\r\n system.applyRenderState(this._opaqueRenderState);\r\n this.target.techniques.execute(this.target, planarClassifierCmds, RenderPass.HilitePlanarClassification);\r\n });\r\n }\r\n\r\n // Process the volume classifiers.\r\n const vcHiliteCmds = commands.getCommands(RenderPass.HiliteClassification);\r\n if (0 !== vcHiliteCmds.length && undefined !== this._vcBranchState) {\r\n // Set the stencil for the given classifier stencil volume.\r\n system.frameBufferStack.execute(this._frameBuffers.stencilSet!, false, false, () => {\r\n this.target.pushState(this._vcBranchState!);\r\n system.applyRenderState(this._vcSetStencilRenderState!);\r\n this.target.techniques.execute(this.target, vcHiliteCmds, RenderPass.Hilite);\r\n this.target.popBranch();\r\n });\r\n // Process the stencil for the hilite data.\r\n system.frameBufferStack.execute(this._frameBuffers.hiliteUsingStencil!, true, false, () => {\r\n system.applyRenderState(this._vcPickDataRenderState!);\r\n this.target.techniques.execute(this.target, vcHiliteCmds, RenderPass.Hilite);\r\n });\r\n }\r\n }\r\n\r\n private composite() {\r\n System.instance.applyRenderState(RenderState.defaults);\r\n const params = getDrawParams(this.target, this._geom.composite!);\r\n this.target.techniques.draw(params);\r\n }\r\n\r\n protected getRenderState(pass: RenderPass): RenderState {\r\n switch (pass) {\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers:\r\n // NB: During pick, we don't want blending - it will mess up our pick buffer data and we don't care about the color data.\r\n // During normal draw, we don't use the pick buffers for anything, and we want color blending.\r\n // (We get away with this because surfaces always draw before their edges, and we're not depth-testing, so edges always draw atop surfaces without pick buffer testing).\r\n this._layerRenderState.flags.blend = !this.target.isReadPixelsInProgress;\r\n\r\n // Transparent non-overlay Layers are drawn between opaque and translucent passes. Test depth, don't write it, so that they blend with opaque.\r\n this._layerRenderState.flags.depthMask = RenderPass.TranslucentLayers !== pass;\r\n this._layerRenderState.depthFunc = (RenderPass.TranslucentLayers === pass) ? GL.DepthFunc.Default : GL.DepthFunc.Always;\r\n return this._layerRenderState;\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n case RenderPass.HilitePlanarClassification:\r\n return this._opaqueRenderState;\r\n case RenderPass.Translucent:\r\n return this._translucentRenderState;\r\n case RenderPass.Hilite:\r\n return this._hiliteRenderState;\r\n case RenderPass.BackgroundMap:\r\n return this._backgroundMapRenderState;\r\n default:\r\n return this._noDepthMaskRenderState;\r\n }\r\n }\r\n\r\n protected drawPass(commands: RenderCommands, pass: RenderPass, pingPong: boolean = false, cmdPass: RenderPass = RenderPass.None) {\r\n const cmds = commands.getCommands(RenderPass.None !== cmdPass ? cmdPass : pass);\r\n if (0 === cmds.length) {\r\n return;\r\n } else if (pingPong) {\r\n this.pingPong();\r\n }\r\n\r\n System.instance.applyRenderState(this.getRenderState(pass));\r\n this.target.techniques.execute(this.target, cmds, pass);\r\n }\r\n}\r\n\r\nclass MRTFrameBuffers extends FrameBuffers {\r\n public opaqueAll?: FrameBuffer;\r\n public opaqueAndCompositeAll?: FrameBuffer;\r\n public pingPong?: FrameBuffer;\r\n public translucent?: FrameBuffer;\r\n public clearTranslucent?: FrameBuffer;\r\n public idsAndZ?: FrameBuffer;\r\n public idsAndAltZ?: FrameBuffer;\r\n public idsAndZComposite?: FrameBuffer;\r\n public idsAndAltZComposite?: FrameBuffer;\r\n\r\n public override init(textures: Textures, depth: DepthBuffer, depthMs: DepthBuffer | undefined): boolean {\r\n if (!super.init(textures, depth, depthMs))\r\n return false;\r\n\r\n assert(undefined === this.opaqueAll);\r\n\r\n if (!this.initPotentialMSMRTFbos(textures, depth, depthMs))\r\n return false;\r\n\r\n assert(undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const colors = [textures.accumulation, textures.revealage];\r\n this.translucent = FrameBuffer.create(colors, depth);\r\n this.clearTranslucent = FrameBuffer.create(colors);\r\n\r\n // We borrow the SceneCompositor's accum and revealage textures for the surface pass.\r\n // First we render edges, writing to our textures.\r\n // Then we copy our textures to borrowed textures.\r\n // Finally we render surfaces, writing to our textures and reading from borrowed textures.\r\n assert(undefined !== textures.accumulation && undefined !== textures.revealage);\r\n const pingPong = [textures.accumulation, textures.revealage];\r\n this.pingPong = FrameBuffer.create(pingPong);\r\n\r\n return undefined !== this.translucent\r\n && undefined !== this.clearTranslucent\r\n && undefined !== this.pingPong;\r\n }\r\n\r\n private initPotentialMSMRTFbos(textures: Textures, depth: DepthBuffer, depthMs: DepthBuffer | undefined): boolean {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n assert(undefined !== boundColor && undefined !== textures.color && undefined !== textures.featureId && undefined !== textures.depthAndOrder);\r\n const colorAndPick = [boundColor, textures.featureId, textures.depthAndOrder];\r\n\r\n if (undefined === depthMs) {\r\n this.opaqueAll = FrameBuffer.create(colorAndPick, depth);\r\n colorAndPick[0] = textures.color;\r\n this.opaqueAndCompositeAll = FrameBuffer.create(colorAndPick, depth);\r\n } else {\r\n assert(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuff && undefined !== textures.depthAndOrderMsBuff);\r\n const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuff, textures.depthAndOrderMsBuff];\r\n const colorAndPickFilters = [GL.MultiSampling.Filter.Linear, GL.MultiSampling.Filter.Nearest, GL.MultiSampling.Filter.Nearest];\r\n this.opaqueAll = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n colorAndPick[0] = textures.color;\r\n this.opaqueAndCompositeAll = FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);\r\n }\r\n\r\n return undefined !== this.opaqueAll\r\n && undefined !== this.opaqueAndCompositeAll;\r\n }\r\n\r\n public override enableVolumeClassifier(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n const boundColor = System.instance.frameBufferStack.currentColorBuffer;\r\n if (undefined === boundColor)\r\n return;\r\n super.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n if (undefined !== this.opaqueAll && undefined !== this.opaqueAndCompositeAll) {\r\n if (undefined !== volClassDepth) {\r\n let ids = [this.opaqueAll.getColor(0), this.opaqueAll.getColor(1)];\r\n this.idsAndZ = FrameBuffer.create(ids, depth);\r\n this.idsAndAltZ = FrameBuffer.create(ids, volClassDepth);\r\n ids = [this.opaqueAndCompositeAll.getColor(0), this.opaqueAndCompositeAll.getColor(1)];\r\n this.idsAndZComposite = FrameBuffer.create(ids, depth);\r\n this.idsAndAltZComposite = FrameBuffer.create(ids, volClassDepth);\r\n }\r\n }\r\n }\r\n\r\n public override disableVolumeClassifier(): void {\r\n super.disableVolumeClassifier();\r\n if (undefined !== this.idsAndZ) {\r\n this.idsAndZ = dispose(this.idsAndZ);\r\n this.idsAndAltZ = dispose(this.idsAndAltZ);\r\n this.idsAndZComposite = dispose(this.idsAndZComposite);\r\n this.idsAndAltZComposite = dispose(this.idsAndAltZComposite);\r\n }\r\n }\r\n\r\n public override enableMultiSampling(textures: Textures, depth: DepthBuffer, depthMS: DepthBuffer): boolean {\r\n super.enableMultiSampling(textures, depth, depthMS);\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n return this.initPotentialMSMRTFbos(textures, depth, depthMS);\r\n }\r\n\r\n public override disableMultiSampling(textures: Textures, depth: DepthBuffer): boolean {\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n if (!this.initPotentialMSMRTFbos(textures, depth, undefined))\r\n return false;\r\n return super.disableMultiSampling(textures, depth);\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && undefined === this.opaqueAll\r\n && undefined === this.opaqueAndCompositeAll\r\n && undefined === this.pingPong\r\n && undefined === this.translucent\r\n && undefined === this.clearTranslucent\r\n && undefined === this.idsAndZ\r\n && undefined === this.idsAndAltZ\r\n && undefined === this.idsAndZComposite\r\n && undefined === this.idsAndAltZComposite;\r\n }\r\n\r\n public override dispose(): void {\r\n super.dispose();\r\n this.opaqueAll = dispose(this.opaqueAll);\r\n this.opaqueAndCompositeAll = dispose(this.opaqueAndCompositeAll);\r\n this.pingPong = dispose(this.pingPong);\r\n this.translucent = dispose(this.translucent);\r\n this.clearTranslucent = dispose(this.clearTranslucent);\r\n this.idsAndZ = dispose(this.idsAndZ);\r\n this.idsAndAltZ = dispose(this.idsAndAltZ);\r\n this.idsAndZComposite = dispose(this.idsAndZComposite);\r\n this.idsAndAltZComposite = dispose(this.idsAndAltZComposite);\r\n }\r\n}\r\n\r\nclass MRTGeometry extends Geometry {\r\n public copyPickBuffers?: CopyPickBufferGeometry;\r\n public clearTranslucent?: ViewportQuadGeometry;\r\n public clearPickAndColor?: ViewportQuadGeometry;\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n collectGeometryStatistics(this.copyPickBuffers, stats);\r\n collectGeometryStatistics(this.clearTranslucent, stats);\r\n collectGeometryStatistics(this.clearPickAndColor, stats);\r\n }\r\n\r\n public override init(textures: Textures): boolean {\r\n if (!super.init(textures))\r\n return false;\r\n\r\n assert(undefined === this.copyPickBuffers);\r\n\r\n this.copyPickBuffers = CopyPickBufferGeometry.createGeometry(textures.featureId!.getHandle()!, textures.depthAndOrder!.getHandle()!);\r\n this.clearTranslucent = ViewportQuadGeometry.create(TechniqueId.OITClearTranslucent);\r\n this.clearPickAndColor = ViewportQuadGeometry.create(TechniqueId.ClearPickAndColor);\r\n\r\n return undefined !== this.copyPickBuffers && undefined !== this.clearTranslucent && undefined !== this.clearPickAndColor;\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && undefined === this.copyPickBuffers\r\n && undefined === this.clearTranslucent\r\n && undefined === this.clearPickAndColor;\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this.copyPickBuffers = dispose(this.copyPickBuffers);\r\n this.clearTranslucent = dispose(this.clearTranslucent);\r\n this.clearPickAndColor = dispose(this.clearPickAndColor);\r\n }\r\n}\r\n\r\n// SceneCompositor used when multiple render targets are supported (WEBGL_draw_buffers exists and supports at least 4 color attachments).\r\nclass MRTCompositor extends Compositor {\r\n public constructor(target: Target) {\r\n super(target, new MRTFrameBuffers(), new MRTGeometry());\r\n }\r\n\r\n public get currentRenderTargetIndex(): number {\r\n assert(false, \"MRT is supported\");\r\n return 0;\r\n }\r\n public set currentRenderTargetIndex(_index: number) {\r\n assert(false, \"MRT is supported\");\r\n }\r\n\r\n public get featureIds(): TextureHandle { return this.getSamplerTexture(this._readPickDataFromPingPong ? 0 : 1); }\r\n public get depthAndOrder(): TextureHandle { return this.getSamplerTexture(this._readPickDataFromPingPong ? 1 : 2); }\r\n\r\n private get _fbos(): MRTFrameBuffers { return this._frameBuffers as MRTFrameBuffers; }\r\n private get _geometry(): MRTGeometry { return this._geom as MRTGeometry; }\r\n\r\n protected override enableVolumeClassifierFbos(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n }\r\n protected override disableVolumeClassifierFbos(): void { this._fbos.disableVolumeClassifier(); }\r\n\r\n protected override enableMultiSampling(): boolean {\r\n if (!super.enableMultiSampling())\r\n return false;\r\n assert(undefined !== this._depth && undefined !== this._depthMS);\r\n return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);\r\n }\r\n\r\n protected override disableMultiSampling(): boolean {\r\n assert(undefined !== this._depth);\r\n if (!this._fbos.disableMultiSampling(this._textures, this._depth))\r\n return false;\r\n return super.disableMultiSampling();\r\n }\r\n\r\n protected clearOpaque(needComposite: boolean): void {\r\n const fbo = needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!;\r\n const system = System.instance;\r\n system.frameBufferStack.execute(fbo, true, this.useMsBuffers, () => {\r\n // Clear pick data buffers to 0's and color buffer to background color\r\n // (0,0,0,0) in elementID0 and ElementID1 buffers indicates invalid element id\r\n // (0,0,0,0) in DepthAndOrder buffer indicates render order 0 and encoded depth of 0 (= far plane)\r\n system.applyRenderState(this._noDepthMaskRenderState);\r\n const params = getDrawParams(this.target, this._geometry.clearPickAndColor!);\r\n this.target.techniques.draw(params);\r\n\r\n // Clear depth buffer\r\n system.applyRenderState(RenderState.defaults); // depthMask == true.\r\n system.context.clearDepth(1.0);\r\n system.context.clear(GL.BufferBit.Depth);\r\n });\r\n }\r\n\r\n protected renderOpaque(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels()).\r\n this._readPickDataFromPingPong = true;\r\n\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n\r\n const fbStack = System.instance.frameBufferStack;\r\n fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!, true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueLinear);\r\n this.drawPass(commands, RenderPass.OpaquePlanar, true);\r\n if (needAO || renderForReadPixels) {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true);\r\n\r\n if (this.useMsBuffers) {\r\n const fbo = (needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!);\r\n fbo.blitMsBuffersToTextures(true);\r\n }\r\n\r\n if (needAO)\r\n this.renderAmbientOcclusion();\r\n }\r\n });\r\n\r\n this._readPickDataFromPingPong = false;\r\n\r\n // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.\r\n if (!renderForReadPixels && !needAO) {\r\n fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!, true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false);\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n });\r\n if (this.useMsBuffers) {\r\n const fbo = (needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!);\r\n fbo.blitMsBuffersToTextures(needComposite);\r\n }\r\n }\r\n }\r\n\r\n protected renderLayers(commands: RenderCommands, needComposite: boolean, pass: RenderPass): void {\r\n this._readPickDataFromPingPong = true;\r\n System.instance.frameBufferStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!, true, RenderPass.OpaqueLayers === pass && this.useMsBuffers, () => {\r\n this.drawPass(commands, pass, true);\r\n });\r\n\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected renderForVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean) {\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n const fbStack = System.instance.frameBufferStack;\r\n\r\n if (renderForReadPixels || needAO) {\r\n this._readPickDataFromPingPong = true;\r\n fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll! : this._fbos.opaqueAll!, true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, true, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n } else {\r\n this._readPickDataFromPingPong = false;\r\n fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!, true, this.useMsBuffers, () => {\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n }\r\n }\r\n\r\n protected renderIndexedClassifierForReadPixels(cmds: DrawCommands, state: RenderState, renderForIntersectingVolumes: boolean, needComposite: boolean) {\r\n this._readPickDataFromPingPong = true;\r\n const fbo = (renderForIntersectingVolumes ? (needComposite ? this._fbos.idsAndZComposite! : this._fbos.idsAndZ!)\r\n : (needComposite ? this._fbos.idsAndAltZComposite! : this._fbos.idsAndAltZ!));\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(state);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n });\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected clearTranslucent() {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n System.instance.frameBufferStack.execute(this._fbos.clearTranslucent!, true, false, () => {\r\n const params = getDrawParams(this.target, this._geometry.clearTranslucent!);\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n\r\n protected renderTranslucent(commands: RenderCommands) {\r\n System.instance.frameBufferStack.execute(this._fbos.translucent!, true, false, () => {\r\n this.drawPass(commands, RenderPass.Translucent);\r\n });\r\n }\r\n\r\n protected pingPong() {\r\n if (this._fbos.opaqueAll!.isMultisampled && this.useMsBuffers) {\r\n // If we are multisampling we can just blit the FeatureId and DepthAndOrder buffers to their textures.\r\n this._fbos.opaqueAll!.blitMsBuffersToTextures(false, 1);\r\n this._fbos.opaqueAll!.blitMsBuffersToTextures(false, 2);\r\n } else {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n System.instance.frameBufferStack.execute(this._fbos.pingPong!, true, this.useMsBuffers, () => {\r\n const params = getDrawParams(this.target, this._geometry.copyPickBuffers!);\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n }\r\n\r\n protected getBackgroundFbo(needComposite: boolean): FrameBuffer { return needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!; }\r\n\r\n private get _samplerFbo(): FrameBuffer { return this._readPickDataFromPingPong ? this._fbos.pingPong! : this._fbos.opaqueAll!; }\r\n private getSamplerTexture(index: number) { return this._samplerFbo.getColor(index); }\r\n}\r\n\r\nclass MPFrameBuffers extends FrameBuffers {\r\n public accumulation?: FrameBuffer;\r\n public revealage?: FrameBuffer;\r\n public featureId?: FrameBuffer;\r\n public featureIdWithDepth?: FrameBuffer;\r\n public featureIdWithDepthAltZ?: FrameBuffer;\r\n\r\n public override init(textures: Textures, depth: DepthBuffer): boolean {\r\n if (!super.init(textures, depth, undefined))\r\n return false;\r\n\r\n assert(undefined === this.accumulation);\r\n\r\n this.accumulation = FrameBuffer.create([textures.accumulation!], depth);\r\n this.revealage = FrameBuffer.create([textures.revealage!], depth);\r\n this.featureId = FrameBuffer.create([textures.featureId!], depth);\r\n\r\n return undefined !== this.accumulation && undefined !== this.revealage && undefined !== this.featureId;\r\n }\r\n\r\n public override enableVolumeClassifier(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n super.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n if (undefined !== this.featureId) {\r\n this.featureIdWithDepth = FrameBuffer.create([this.featureId.getColor(0)], depth);\r\n this.featureIdWithDepthAltZ = FrameBuffer.create([this.featureId.getColor(0)], volClassDepth);\r\n }\r\n }\r\n\r\n public override disableVolumeClassifier(): void {\r\n super.disableVolumeClassifier();\r\n if (undefined !== this.featureIdWithDepth) {\r\n this.featureIdWithDepth = dispose(this.featureIdWithDepth);\r\n this.featureIdWithDepthAltZ = dispose(this.featureIdWithDepthAltZ);\r\n }\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed\r\n && undefined === this.accumulation\r\n && undefined === this.revealage\r\n && undefined === this.featureId\r\n && undefined === this.featureIdWithDepth\r\n && undefined === this.featureIdWithDepthAltZ;\r\n }\r\n\r\n public override dispose(): void {\r\n super.dispose();\r\n\r\n this.accumulation = dispose(this.accumulation);\r\n this.revealage = dispose(this.revealage);\r\n this.featureId = dispose(this.featureId);\r\n this.disableVolumeClassifier();\r\n }\r\n}\r\n\r\nclass MPGeometry extends Geometry {\r\n public copyColor?: SingleTexturedViewportQuadGeometry;\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n collectGeometryStatistics(this.copyColor, stats);\r\n }\r\n\r\n public override init(textures: Textures): boolean {\r\n if (!super.init(textures))\r\n return false;\r\n\r\n assert(undefined === this.copyColor);\r\n this.copyColor = SingleTexturedViewportQuadGeometry.createGeometry(textures.featureId!.getHandle()!, TechniqueId.CopyColor);\r\n return undefined !== this.copyColor;\r\n }\r\n\r\n public override get isDisposed(): boolean { return super.isDisposed && undefined === this.copyColor; }\r\n\r\n public override dispose(): void {\r\n super.dispose();\r\n this.copyColor = dispose(this.copyColor);\r\n }\r\n}\r\n\r\n// Compositor used when multiple render targets are not supported (WEBGL_draw_buffers not available or fewer than 4 color attachments supported).\r\n// This falls back to multi-pass rendering in place of MRT rendering, which has obvious performance implications.\r\n// The chief use case is iOS.\r\nclass MPCompositor extends Compositor {\r\n private _currentRenderTargetIndex: number = 0;\r\n private _drawMultiPassDepth: boolean = true;\r\n private readonly _opaqueRenderStateNoZWt = new RenderState();\r\n private readonly _scratchBgColor = new FloatRgba();\r\n\r\n public constructor(target: Target) {\r\n super(target, new MPFrameBuffers(), new MPGeometry());\r\n\r\n this._opaqueRenderStateNoZWt.flags.depthTest = true;\r\n this._opaqueRenderStateNoZWt.flags.depthMask = false;\r\n }\r\n\r\n protected override getRenderState(pass: RenderPass): RenderState {\r\n switch (pass) {\r\n case RenderPass.OpaqueLinear:\r\n case RenderPass.OpaquePlanar:\r\n case RenderPass.OpaqueGeneral:\r\n return this._drawMultiPassDepth ? this._opaqueRenderState : this._opaqueRenderStateNoZWt;\r\n }\r\n\r\n return super.getRenderState(pass);\r\n }\r\n\r\n private get _fbos(): MPFrameBuffers { return this._frameBuffers as MPFrameBuffers; }\r\n private get _geometry(): MPGeometry { return this._geom as MPGeometry; }\r\n\r\n public get currentRenderTargetIndex(): number { return this._currentRenderTargetIndex; }\r\n public set currentRenderTargetIndex(index: number) { this._currentRenderTargetIndex = index; }\r\n public get featureIds(): TextureHandle { return this._readPickDataFromPingPong ? this._textures.accumulation! : this._textures.featureId!; }\r\n public get depthAndOrder(): TextureHandle { return this._readPickDataFromPingPong ? this._textures.revealage! : this._textures.depthAndOrder!; }\r\n\r\n protected getBackgroundFbo(needComposite: boolean): FrameBuffer { return needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!; }\r\n\r\n protected override enableVolumeClassifierFbos(textures: Textures, depth: DepthBuffer, volClassDepth: DepthBuffer | undefined, depthMS?: DepthBuffer, volClassDepthMS?: DepthBuffer): void {\r\n this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);\r\n }\r\n protected override disableVolumeClassifierFbos(): void { this._fbos.disableVolumeClassifier(); }\r\n\r\n protected clearOpaque(needComposite: boolean): void {\r\n const bg = this._scratchBgColor;\r\n this.target.uniforms.style.cloneBackgroundRgba(bg);\r\n this.clearFbo(needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!, bg.red, bg.green, bg.blue, bg.alpha, true);\r\n this.clearFbo(this._fbos.depthAndOrder!, 0, 0, 0, 0, false);\r\n this.clearFbo(this._fbos.featureId!, 0, 0, 0, 0, false);\r\n }\r\n\r\n protected renderOpaque(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean): void {\r\n // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels()).\r\n this._readPickDataFromPingPong = true;\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!;\r\n this.drawOpaquePass(colorFbo, commands, RenderPass.OpaqueLinear, false);\r\n this.drawOpaquePass(colorFbo, commands, RenderPass.OpaquePlanar, true);\r\n if (renderForReadPixels || needAO) {\r\n this.drawOpaquePass(colorFbo, commands, RenderPass.OpaqueGeneral, true);\r\n if (needAO)\r\n this.renderAmbientOcclusion();\r\n }\r\n\r\n this._readPickDataFromPingPong = false;\r\n\r\n // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.\r\n if (!renderForReadPixels && !needAO) {\r\n System.instance.frameBufferStack.execute(colorFbo, true, false, () => {\r\n this._drawMultiPassDepth = true; // for OpaqueGeneral\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false);\r\n this.drawPass(commands, RenderPass.HiddenEdge, false);\r\n });\r\n }\r\n }\r\n\r\n protected renderLayers(commands: RenderCommands, needComposite: boolean, pass: RenderPass): void {\r\n this._readPickDataFromPingPong = true;\r\n const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!;\r\n this.drawOpaquePass(colorFbo, commands, pass, true);\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n protected renderForVolumeClassification(commands: RenderCommands, compositeFlags: CompositeFlags, renderForReadPixels: boolean): void {\r\n const needComposite = CompositeFlags.None !== compositeFlags;\r\n const needAO = CompositeFlags.None !== (compositeFlags & CompositeFlags.AmbientOcclusion);\r\n const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor! : this._fbos.opaqueColor!;\r\n if (renderForReadPixels || needAO) {\r\n this._readPickDataFromPingPong = true;\r\n this.drawOpaquePass(colorFbo, commands, RenderPass.OpaqueGeneral, true, RenderPass.VolumeClassifiedRealityData);\r\n if (needAO)\r\n this.renderAmbientOcclusion();\r\n } else {\r\n this._readPickDataFromPingPong = false;\r\n System.instance.frameBufferStack.execute(colorFbo, true, false, () => {\r\n this._drawMultiPassDepth = true; // for OpaqueGeneral\r\n this.drawPass(commands, RenderPass.OpaqueGeneral, false, RenderPass.VolumeClassifiedRealityData);\r\n });\r\n }\r\n }\r\n\r\n protected renderIndexedClassifierForReadPixels(cmds: DrawCommands, state: RenderState, renderForIntersectingVolumes: boolean, _needComposite: boolean) {\r\n // Note that we only need to render to the Id textures here, no color, since the color buffer is not used in readPixels.\r\n this._readPickDataFromPingPong = true;\r\n this._currentRenderTargetIndex = 1;\r\n const fbo = (renderForIntersectingVolumes ? this._fbos.featureIdWithDepth! : this._fbos.featureIdWithDepthAltZ!);\r\n System.instance.frameBufferStack.execute(fbo, true, false, () => {\r\n System.instance.applyRenderState(state);\r\n this.target.techniques.execute(this.target, cmds, RenderPass.OpaqueGeneral);\r\n });\r\n this._currentRenderTargetIndex = 0;\r\n this._readPickDataFromPingPong = false;\r\n }\r\n\r\n // ###TODO: For readPixels(), could skip rendering color...also could skip rendering depth and/or element ID depending upon selector...\r\n private drawOpaquePass(colorFbo: FrameBuffer, commands: RenderCommands, pass: RenderPass, pingPong: boolean, cmdPass: RenderPass = RenderPass.None): void {\r\n const commandPass = RenderPass.None === cmdPass ? pass : cmdPass;\r\n const stack = System.instance.frameBufferStack;\r\n this._drawMultiPassDepth = true;\r\n if (!this.target.isReadPixelsInProgress) {\r\n stack.execute(colorFbo, true, false, () => this.drawPass(commands, pass, pingPong, commandPass));\r\n this._drawMultiPassDepth = false;\r\n }\r\n this._currentRenderTargetIndex++;\r\n if (!this.target.isReadPixelsInProgress || Pixel.Selector.None !== (this.target.readPixelsSelector & Pixel.Selector.Feature)) {\r\n stack.execute(this._fbos.featureId!, true, false, () => this.drawPass(commands, pass, pingPong && this._drawMultiPassDepth, commandPass));\r\n this._drawMultiPassDepth = false;\r\n }\r\n this._currentRenderTargetIndex++;\r\n if (!this.target.isReadPixelsInProgress || Pixel.Selector.None !== (this.target.readPixelsSelector & Pixel.Selector.GeometryAndDistance)) {\r\n stack.execute(this._fbos.depthAndOrder!, true, false, () => this.drawPass(commands, pass, pingPong && this._drawMultiPassDepth, commandPass));\r\n }\r\n this._currentRenderTargetIndex = 0;\r\n }\r\n\r\n protected clearTranslucent() {\r\n this.clearFbo(this._fbos.accumulation!, 0, 0, 0, 1, false);\r\n this.clearFbo(this._fbos.revealage!, 1, 0, 0, 1, false);\r\n }\r\n\r\n protected renderTranslucent(commands: RenderCommands) {\r\n System.instance.frameBufferStack.execute(this._fbos.accumulation!, true, false, () => {\r\n this.drawPass(commands, RenderPass.Translucent);\r\n });\r\n\r\n this._currentRenderTargetIndex = 1;\r\n System.instance.frameBufferStack.execute(this._fbos.revealage!, true, false, () => {\r\n this.drawPass(commands, RenderPass.Translucent);\r\n });\r\n\r\n this._currentRenderTargetIndex = 0;\r\n }\r\n\r\n protected pingPong() {\r\n System.instance.applyRenderState(this._noDepthMaskRenderState);\r\n\r\n this.copyFbo(this._textures.featureId!, this._fbos.accumulation!);\r\n this.copyFbo(this._textures.depthAndOrder!, this._fbos.revealage!);\r\n }\r\n\r\n private copyFbo(src: TextureHandle, dst: FrameBuffer): void {\r\n const geom = this._geometry.copyColor!;\r\n geom.texture = src.getHandle()!;\r\n System.instance.frameBufferStack.execute(dst, true, false, () => {\r\n const params = getDrawParams(this.target, geom);\r\n this.target.techniques.draw(params);\r\n });\r\n }\r\n\r\n private clearFbo(fbo: FrameBuffer, red: number, green: number, blue: number, alpha: number, andDepth: boolean): void {\r\n const system = System.instance;\r\n const gl = system.context;\r\n system.frameBufferStack.execute(fbo, true, false, () => {\r\n system.applyRenderState(andDepth ? RenderState.defaults : this._noDepthMaskRenderState);\r\n gl.clearColor(red, green, blue, alpha);\r\n let bit = GL.BufferBit.Color;\r\n if (andDepth) {\r\n gl.clearDepth(1.0);\r\n bit |= GL.BufferBit.Depth;\r\n }\r\n\r\n gl.clear(bit);\r\n });\r\n }\r\n}\r\n"]}