@itwin/core-frontend 5.0.0-dev.32 → 5.0.0-dev.34

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 (259) hide show
  1. package/lib/cjs/AccuDraw.js +1 -1
  2. package/lib/cjs/AccuDraw.js.map +1 -1
  3. package/lib/cjs/ApproximateTerrainHeights.js +1 -1
  4. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  5. package/lib/cjs/BackgroundMapGeometry.js +5 -5
  6. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  7. package/lib/cjs/DrawingViewState.js +9 -9
  8. package/lib/cjs/DrawingViewState.js.map +1 -1
  9. package/lib/cjs/GraphicalEditingScope.js +4 -4
  10. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  11. package/lib/cjs/IModelApp.js +61 -63
  12. package/lib/cjs/IModelApp.js.map +1 -1
  13. package/lib/cjs/IModelConnection.js +10 -10
  14. package/lib/cjs/IModelConnection.js.map +1 -1
  15. package/lib/cjs/IModelRoutingContext.js +1 -1
  16. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  17. package/lib/cjs/IpcApp.js +2 -2
  18. package/lib/cjs/IpcApp.js.map +1 -1
  19. package/lib/cjs/LocalhostIpcApp.js +1 -1
  20. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  21. package/lib/cjs/NativeApp.js +15 -17
  22. package/lib/cjs/NativeApp.js.map +1 -1
  23. package/lib/cjs/NativeAppLogger.js +1 -1
  24. package/lib/cjs/NativeAppLogger.js.map +1 -1
  25. package/lib/cjs/NoRenderApp.js +1 -1
  26. package/lib/cjs/NoRenderApp.js.map +1 -1
  27. package/lib/cjs/SelectionSet.js +148 -156
  28. package/lib/cjs/SelectionSet.js.map +1 -1
  29. package/lib/cjs/Sprites.js +1 -1
  30. package/lib/cjs/Sprites.js.map +1 -1
  31. package/lib/cjs/ViewCreator2d.js +3 -3
  32. package/lib/cjs/ViewCreator2d.js.map +1 -1
  33. package/lib/cjs/ViewGlobalLocation.js +5 -5
  34. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  35. package/lib/cjs/ViewState.js +2 -2
  36. package/lib/cjs/ViewState.js.map +1 -1
  37. package/lib/cjs/ViewingSpace.js +9 -9
  38. package/lib/cjs/ViewingSpace.js.map +1 -1
  39. package/lib/cjs/Viewport.js +41 -41
  40. package/lib/cjs/Viewport.js.map +1 -1
  41. package/lib/cjs/common/internal/render/DisplayParams.js +1 -1
  42. package/lib/cjs/common/internal/render/DisplayParams.js.map +1 -1
  43. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
  44. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  45. package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
  46. package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
  47. package/lib/cjs/internal/render/PrimitiveBuilder.js +1 -1
  48. package/lib/cjs/internal/render/PrimitiveBuilder.js.map +1 -1
  49. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +1 -1
  50. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  51. package/lib/cjs/render/MockRender.js +3 -3
  52. package/lib/cjs/render/MockRender.js.map +1 -1
  53. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  54. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  55. package/lib/cjs/render/webgl/BatchState.js +1 -1
  56. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  57. package/lib/cjs/render/webgl/ColorInfo.js +2 -2
  58. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  59. package/lib/cjs/render/webgl/Diagnostics.js +4 -4
  60. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  61. package/lib/cjs/render/webgl/DrawCommand.js +4 -4
  62. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  63. package/lib/cjs/render/webgl/IModelFrameLifecycle.js +4 -4
  64. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  65. package/lib/cjs/render/webgl/InstancedGeometry.js +3 -3
  66. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  67. package/lib/cjs/render/webgl/Material.js +4 -4
  68. package/lib/cjs/render/webgl/Material.js.map +1 -1
  69. package/lib/cjs/render/webgl/PlanarClassifier.js +1 -1
  70. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  71. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  72. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  73. package/lib/cjs/render/webgl/RenderState.js +1 -1
  74. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  75. package/lib/cjs/render/webgl/Target.js +1 -1
  76. package/lib/cjs/render/webgl/Target.js.map +1 -1
  77. package/lib/cjs/render/webgl/Technique.js +39 -39
  78. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  79. package/lib/cjs/render/webgl/TechniqueFlags.js +1 -1
  80. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  81. package/lib/cjs/render/webgl/Texture.js +3 -3
  82. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  83. package/lib/cjs/tile/CesiumAssetProvider.js +1 -1
  84. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  85. package/lib/cjs/tile/map/ArcGISTileMap.js +1 -1
  86. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  87. package/lib/cjs/tile/map/ArcGisUtilities.js +1 -1
  88. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  89. package/lib/cjs/tile/map/CesiumTerrainProvider.js +6 -6
  90. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  91. package/lib/cjs/tile/map/ImageryTileTree.js +2 -2
  92. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  93. package/lib/cjs/tile/map/MapLayerImageryFormats.js +7 -7
  94. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  95. package/lib/cjs/tile/map/MapTile.js +8 -8
  96. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  97. package/lib/cjs/tile/map/MapTileAvailability.js +1 -1
  98. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  99. package/lib/cjs/tile/map/MapTileTree.js +9 -9
  100. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  101. package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
  102. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  103. package/lib/cjs/tile/map/WmsCapabilities.js +2 -2
  104. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  105. package/lib/cjs/tile/map/WmtsCapabilities.js +1 -1
  106. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  107. package/lib/cjs/tools/AccuDrawTool.js +21 -21
  108. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  109. package/lib/cjs/tools/ClipViewTool.js +32 -32
  110. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  111. package/lib/cjs/tools/EditManipulator.js +2 -2
  112. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  113. package/lib/cjs/tools/IdleTool.js +2 -2
  114. package/lib/cjs/tools/IdleTool.js.map +1 -1
  115. package/lib/cjs/tools/MeasureTool.js +34 -34
  116. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  117. package/lib/cjs/tools/SelectTool.js +5 -5
  118. package/lib/cjs/tools/SelectTool.js.map +1 -1
  119. package/lib/cjs/tools/Tool.js +10 -10
  120. package/lib/cjs/tools/Tool.js.map +1 -1
  121. package/lib/cjs/tools/ToolAdmin.js +19 -19
  122. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  123. package/lib/cjs/tools/ToolAssistance.js +19 -19
  124. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  125. package/lib/cjs/tools/ToolSettings.js +63 -63
  126. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  127. package/lib/cjs/tools/ViewTool.js +37 -37
  128. package/lib/cjs/tools/ViewTool.js.map +1 -1
  129. package/lib/esm/AccuDraw.js +1 -1
  130. package/lib/esm/AccuDraw.js.map +1 -1
  131. package/lib/esm/ApproximateTerrainHeights.js +1 -1
  132. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  133. package/lib/esm/BackgroundMapGeometry.js +5 -5
  134. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  135. package/lib/esm/DrawingViewState.js +9 -9
  136. package/lib/esm/DrawingViewState.js.map +1 -1
  137. package/lib/esm/GraphicalEditingScope.js +4 -4
  138. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  139. package/lib/esm/IModelApp.js +61 -63
  140. package/lib/esm/IModelApp.js.map +1 -1
  141. package/lib/esm/IModelConnection.js +10 -10
  142. package/lib/esm/IModelConnection.js.map +1 -1
  143. package/lib/esm/IModelRoutingContext.js +1 -1
  144. package/lib/esm/IModelRoutingContext.js.map +1 -1
  145. package/lib/esm/IpcApp.js +2 -2
  146. package/lib/esm/IpcApp.js.map +1 -1
  147. package/lib/esm/LocalhostIpcApp.js +1 -1
  148. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  149. package/lib/esm/NativeApp.js +15 -17
  150. package/lib/esm/NativeApp.js.map +1 -1
  151. package/lib/esm/NativeAppLogger.js +1 -1
  152. package/lib/esm/NativeAppLogger.js.map +1 -1
  153. package/lib/esm/NoRenderApp.js +1 -1
  154. package/lib/esm/NoRenderApp.js.map +1 -1
  155. package/lib/esm/SelectionSet.js +148 -156
  156. package/lib/esm/SelectionSet.js.map +1 -1
  157. package/lib/esm/Sprites.js +1 -1
  158. package/lib/esm/Sprites.js.map +1 -1
  159. package/lib/esm/ViewCreator2d.js +3 -3
  160. package/lib/esm/ViewCreator2d.js.map +1 -1
  161. package/lib/esm/ViewGlobalLocation.js +5 -5
  162. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  163. package/lib/esm/ViewState.js +2 -2
  164. package/lib/esm/ViewState.js.map +1 -1
  165. package/lib/esm/ViewingSpace.js +9 -9
  166. package/lib/esm/ViewingSpace.js.map +1 -1
  167. package/lib/esm/Viewport.js +41 -41
  168. package/lib/esm/Viewport.js.map +1 -1
  169. package/lib/esm/common/internal/render/DisplayParams.js +1 -1
  170. package/lib/esm/common/internal/render/DisplayParams.js.map +1 -1
  171. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
  172. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  173. package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
  174. package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
  175. package/lib/esm/internal/render/PrimitiveBuilder.js +1 -1
  176. package/lib/esm/internal/render/PrimitiveBuilder.js.map +1 -1
  177. package/lib/esm/internal/render/RenderInstancesParamsImpl.js +1 -1
  178. package/lib/esm/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  179. package/lib/esm/render/MockRender.js +3 -3
  180. package/lib/esm/render/MockRender.js.map +1 -1
  181. package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
  182. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  183. package/lib/esm/render/webgl/BatchState.js +1 -1
  184. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  185. package/lib/esm/render/webgl/ColorInfo.js +2 -2
  186. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  187. package/lib/esm/render/webgl/Diagnostics.js +4 -4
  188. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  189. package/lib/esm/render/webgl/DrawCommand.js +4 -4
  190. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  191. package/lib/esm/render/webgl/IModelFrameLifecycle.js +4 -4
  192. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  193. package/lib/esm/render/webgl/InstancedGeometry.js +3 -3
  194. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  195. package/lib/esm/render/webgl/Material.js +4 -4
  196. package/lib/esm/render/webgl/Material.js.map +1 -1
  197. package/lib/esm/render/webgl/PlanarClassifier.js +1 -1
  198. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  199. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  200. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  201. package/lib/esm/render/webgl/RenderState.js +1 -1
  202. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  203. package/lib/esm/render/webgl/Target.js +1 -1
  204. package/lib/esm/render/webgl/Target.js.map +1 -1
  205. package/lib/esm/render/webgl/Technique.js +39 -39
  206. package/lib/esm/render/webgl/Technique.js.map +1 -1
  207. package/lib/esm/render/webgl/TechniqueFlags.js +1 -1
  208. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  209. package/lib/esm/render/webgl/Texture.js +3 -3
  210. package/lib/esm/render/webgl/Texture.js.map +1 -1
  211. package/lib/esm/tile/CesiumAssetProvider.js +1 -1
  212. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  213. package/lib/esm/tile/map/ArcGISTileMap.js +1 -1
  214. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  215. package/lib/esm/tile/map/ArcGisUtilities.js +1 -1
  216. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  217. package/lib/esm/tile/map/CesiumTerrainProvider.js +6 -6
  218. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  219. package/lib/esm/tile/map/ImageryTileTree.js +2 -2
  220. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  221. package/lib/esm/tile/map/MapLayerImageryFormats.js +7 -7
  222. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  223. package/lib/esm/tile/map/MapTile.js +8 -8
  224. package/lib/esm/tile/map/MapTile.js.map +1 -1
  225. package/lib/esm/tile/map/MapTileAvailability.js +1 -1
  226. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  227. package/lib/esm/tile/map/MapTileTree.js +9 -9
  228. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  229. package/lib/esm/tile/map/MapTilingScheme.js +1 -1
  230. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  231. package/lib/esm/tile/map/WmsCapabilities.js +2 -2
  232. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  233. package/lib/esm/tile/map/WmtsCapabilities.js +1 -1
  234. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  235. package/lib/esm/tools/AccuDrawTool.js +21 -21
  236. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  237. package/lib/esm/tools/ClipViewTool.js +32 -32
  238. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  239. package/lib/esm/tools/EditManipulator.js +2 -2
  240. package/lib/esm/tools/EditManipulator.js.map +1 -1
  241. package/lib/esm/tools/IdleTool.js +2 -2
  242. package/lib/esm/tools/IdleTool.js.map +1 -1
  243. package/lib/esm/tools/MeasureTool.js +34 -34
  244. package/lib/esm/tools/MeasureTool.js.map +1 -1
  245. package/lib/esm/tools/SelectTool.js +5 -5
  246. package/lib/esm/tools/SelectTool.js.map +1 -1
  247. package/lib/esm/tools/Tool.js +10 -10
  248. package/lib/esm/tools/Tool.js.map +1 -1
  249. package/lib/esm/tools/ToolAdmin.js +19 -19
  250. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  251. package/lib/esm/tools/ToolAssistance.js +19 -19
  252. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  253. package/lib/esm/tools/ToolSettings.js +63 -63
  254. package/lib/esm/tools/ToolSettings.js.map +1 -1
  255. package/lib/esm/tools/ViewTool.js +37 -37
  256. package/lib/esm/tools/ViewTool.js.map +1 -1
  257. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  258. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  259. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"TechniqueFlags.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueFlags.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { RenderMode } from \"@itwin/core-common\";\nimport { RenderPass } from \"./RenderFlags\";\nimport { Target } from \"./Target\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** Specifies how a TechniqueFlags handles feature table/overrides.\n * @internal\n */\nexport const enum FeatureMode {\n None, // no features\n Pick, // feature table only\n Overrides, // feature table with symbology overrides\n}\n\n/** @internal */\nexport const enum IsInstanced { No, Yes }\n\n/** @internal */\nexport const enum IsAnimated { No, Yes }\n\n/** @internal */\nexport const enum IsClassified { No, Yes }\n\n/** @internal */\nexport const enum IsEdgeTestNeeded { No, Yes }\n\n/** @internal */\nexport const enum IsShadowable { No, Yes }\n\n/** @internal */\nexport const enum IsThematic { No, Yes }\n\n/** @internal */\nexport const enum IsWiremesh { No, Yes }\n\n/** @internal */\nexport type PositionType = \"quantized\" | \"unquantized\";\n\n/** @internal */\nexport const enum EnableAtmosphere { No, Yes }\n\n/** Flags used to control which shader program is used by a rendering Technique.\n * @internal\n */\nexport class TechniqueFlags {\n public numClipPlanes = 0;\n public featureMode = FeatureMode.None;\n public isTranslucent: boolean;\n public isEdgeTestNeeded: IsEdgeTestNeeded = IsEdgeTestNeeded.No;\n public isAnimated: IsAnimated = IsAnimated.No;\n public isInstanced: IsInstanced = IsInstanced.No;\n public isClassified: IsClassified = IsClassified.No;\n public isShadowable: IsShadowable = IsShadowable.No;\n public isThematic: IsThematic = IsThematic.No;\n public isWiremesh: IsWiremesh = IsWiremesh.No;\n public positionType: PositionType = \"quantized\";\n public enableAtmosphere: EnableAtmosphere = EnableAtmosphere.No;\n private _isHilite = false;\n\n public constructor(translucent: boolean = false) {\n this.isTranslucent = translucent;\n }\n\n public get hasClip(): boolean {\n return this.numClipPlanes > 0;\n }\n\n public get usesQuantizedPositions(): boolean {\n return \"quantized\" === this.positionType;\n }\n\n public init(target: Target, pass: RenderPass, instanced: IsInstanced, animated: IsAnimated = IsAnimated.No, classified = IsClassified.No, shadowable = IsShadowable.No, thematic = IsThematic.No, wiremesh = IsWiremesh.No, posType: PositionType = \"quantized\", enableAtmosphere = EnableAtmosphere.No): void {\n const clipStack = target.uniforms.branch.clipStack;\n const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;\n this.positionType = posType;\n\n if (RenderPass.Hilite === pass || RenderPass.HiliteClassification === pass || RenderPass.HilitePlanarClassification === pass) {\n const isClassified = (classified === IsClassified.Yes && RenderPass.HilitePlanarClassification === pass) ? IsClassified.Yes : IsClassified.No;\n this.initForHilite(numClipPlanes, instanced, isClassified, posType);\n } else {\n this._isHilite = false;\n this.isTranslucent = RenderPass.Translucent === pass;\n this.numClipPlanes = numClipPlanes;\n this.isAnimated = animated;\n this.isInstanced = instanced;\n this.isClassified = classified;\n this.isShadowable = shadowable;\n this.isThematic = thematic;\n this.isWiremesh = wiremesh;\n this.enableAtmosphere = enableAtmosphere;\n this.featureMode = target.uniforms.batch.featureMode;\n\n // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).\n // These are only useful if the geometry defines feature Ids.\n // In 3d, if we're only displaying surfaces or edges, not both, don't bother, unless forceSurfaceDiscard is true.\n this.isEdgeTestNeeded = this.hasFeatures ? (this.isClassified ? IsEdgeTestNeeded.No : IsEdgeTestNeeded.Yes) : IsEdgeTestNeeded.No;\n if (!target.currentViewFlags.forceSurfaceDiscard && target.is3d && !target.isReadPixelsInProgress && this.isEdgeTestNeeded) {\n switch (target.currentViewFlags.renderMode) {\n case RenderMode.Wireframe:\n // We're only displaying edges (ignoring filled planar regions)\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n break;\n case RenderMode.SmoothShade:\n if (!target.currentViewFlags.visibleEdges && !target.wantAmbientOcclusion && pass !== RenderPass.PlanarClassification) {\n // We're only displaying surfaces (ignoring filled planar regions).\n // NB: Filled text (blanking region) is handled by adjusting the depth in the surface vertex shader.\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n }\n break;\n default:\n // SolidFill and HiddenLine always display edges and surfaces.\n break;\n }\n }\n }\n }\n\n public reset(mode: FeatureMode, instanced: IsInstanced = IsInstanced.No, shadowable: IsShadowable, thematic: IsThematic, posType: PositionType) {\n this._isHilite = false;\n this.featureMode = mode;\n this.isTranslucent = false;\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n this.isAnimated = IsAnimated.No;\n this.isClassified = IsClassified.No;\n this.isInstanced = instanced;\n this.isShadowable = shadowable;\n this.isThematic = thematic;\n this.isWiremesh = IsWiremesh.No;\n this.positionType = posType;\n this.enableAtmosphere = EnableAtmosphere.No;\n this.numClipPlanes = 0;\n }\n\n public get hasFeatures() { return FeatureMode.None !== this.featureMode; }\n\n public setAnimated(animated: boolean) { this.isAnimated = animated ? IsAnimated.Yes : IsAnimated.No; }\n public setInstanced(instanced: boolean) { this.isInstanced = instanced ? IsInstanced.Yes : IsInstanced.No; }\n public setClassified(classified: boolean) {\n this.isClassified = classified ? IsClassified.Yes : IsClassified.No;\n }\n\n public get isHilite() { return this._isHilite; }\n public initForHilite(numClipPlanes: number, instanced: IsInstanced, classified: IsClassified, posType: PositionType) {\n this.featureMode = classified ? FeatureMode.None : FeatureMode.Overrides;\n this._isHilite = true;\n this.isTranslucent = false;\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n this.isAnimated = IsAnimated.No;\n this.isInstanced = instanced;\n this.isClassified = classified;\n this.numClipPlanes = numClipPlanes;\n this.positionType = posType;\n }\n\n public equals(other: TechniqueFlags): boolean {\n return this.numClipPlanes === other.numClipPlanes\n && this.featureMode === other.featureMode\n && this.isTranslucent === other.isTranslucent\n && this.isEdgeTestNeeded === other.isEdgeTestNeeded\n && this.isAnimated === other.isAnimated\n && this.isInstanced === other.isInstanced\n && this.isClassified === other.isClassified\n && this.isShadowable === other.isShadowable\n && this.isThematic === other.isThematic\n && this.isWiremesh === other.isWiremesh\n && this.positionType === other.positionType\n && this.enableAtmosphere === other.enableAtmosphere\n && this.isHilite === other.isHilite;\n }\n\n public buildDescription(): string {\n const parts = [this.isTranslucent ? \"Translucent\" : \"Opaque\"];\n if (this.isInstanced)\n parts.push(\"Instanced\");\n if (this.isEdgeTestNeeded)\n parts.push(\"EdgeTestNeeded\");\n if (this.isAnimated)\n parts.push(\"Animated\");\n if (this.isHilite)\n parts.push(\"Hilite\");\n if (this.isClassified)\n parts.push(\"Classified\");\n if (this.hasClip)\n parts.push(\"Clip\");\n if (this.isShadowable)\n parts.push(\"Shadowable\");\n if (this.isThematic)\n parts.push(\"Thematic\");\n if (this.hasFeatures)\n parts.push(FeatureMode.Pick === this.featureMode ? \"Pick\" : \"Overrides\");\n if (this.isWiremesh)\n parts.push(\"Wiremesh\");\n if (this.positionType === \"unquantized\")\n parts.push(\"Unquantized\");\n if (this.enableAtmosphere)\n parts.push(\"EnableAtmosphere\");\n\n return parts.join(\"-\");\n }\n\n public static fromDescription(description: string): TechniqueFlags {\n const flags = new TechniqueFlags(false);\n const parts = description.split(\"-\");\n for (const part of parts) {\n switch (part) {\n case \"Translucent\":\n flags.isTranslucent = true;\n break;\n case \"Instanced\":\n flags.isInstanced = IsInstanced.Yes;\n break;\n case \"EdgeTestNeeded\":\n flags.isEdgeTestNeeded = IsEdgeTestNeeded.Yes;\n break;\n case \"Animated\":\n flags.isAnimated = IsAnimated.Yes;\n break;\n case \"Hilite\":\n flags._isHilite = true;\n break;\n case \"Classified\":\n flags.isClassified = IsClassified.Yes;\n break;\n case \"Clip\":\n flags.numClipPlanes = 1;\n break;\n case \"Shadowable\":\n flags.isShadowable = IsShadowable.Yes;\n break;\n case \"Thematic\":\n flags.isThematic = IsThematic.Yes;\n break;\n case \"Wiremesh\":\n flags.isWiremesh = IsWiremesh.Yes;\n break;\n case \"Unquantized\":\n flags.positionType = \"unquantized\";\n break;\n case \"EnableAtmosphere\":\n flags.enableAtmosphere = EnableAtmosphere.Yes;\n break;\n case \"Pick\":\n flags.featureMode = FeatureMode.Pick;\n break;\n case \"Overrides\":\n flags.featureMode = FeatureMode.Overrides;\n break;\n }\n }\n\n return flags;\n }\n\n public static readonly defaults = new TechniqueFlags();\n}\n"]}
1
+ {"version":3,"file":"TechniqueFlags.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueFlags.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { RenderMode } from \"@itwin/core-common\";\nimport { RenderPass } from \"./RenderFlags\";\nimport { Target } from \"./Target\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** Specifies how a TechniqueFlags handles feature table/overrides.\n * @internal\n */\nexport const enum FeatureMode {\n None, // no features\n Pick, // feature table only\n Overrides, // feature table with symbology overrides\n}\n\n/** @internal */\nexport const enum IsInstanced { No, Yes }\n\n/** @internal */\nexport const enum IsAnimated { No, Yes }\n\n/** @internal */\nexport const enum IsClassified { No, Yes }\n\n/** @internal */\nexport const enum IsEdgeTestNeeded { No, Yes }\n\n/** @internal */\nexport const enum IsShadowable { No, Yes }\n\n/** @internal */\nexport const enum IsThematic { No, Yes }\n\n/** @internal */\nexport const enum IsWiremesh { No, Yes }\n\n/** @internal */\nexport type PositionType = \"quantized\" | \"unquantized\";\n\n/** @internal */\nexport const enum EnableAtmosphere { No, Yes }\n\n/** Flags used to control which shader program is used by a rendering Technique.\n * @internal\n */\nexport class TechniqueFlags {\n public numClipPlanes = 0;\n public featureMode = FeatureMode.None;\n public isTranslucent: boolean;\n public isEdgeTestNeeded: IsEdgeTestNeeded = IsEdgeTestNeeded.No;\n public isAnimated: IsAnimated = IsAnimated.No;\n public isInstanced: IsInstanced = IsInstanced.No;\n public isClassified: IsClassified = IsClassified.No;\n public isShadowable: IsShadowable = IsShadowable.No;\n public isThematic: IsThematic = IsThematic.No;\n public isWiremesh: IsWiremesh = IsWiremesh.No;\n public positionType: PositionType = \"quantized\";\n public enableAtmosphere: EnableAtmosphere = EnableAtmosphere.No;\n private _isHilite = false;\n\n public constructor(translucent: boolean = false) {\n this.isTranslucent = translucent;\n }\n\n public get hasClip(): boolean {\n return this.numClipPlanes > 0;\n }\n\n public get usesQuantizedPositions(): boolean {\n return \"quantized\" === this.positionType;\n }\n\n public init(target: Target, pass: RenderPass, instanced: IsInstanced, animated: IsAnimated = IsAnimated.No, classified = IsClassified.No, shadowable = IsShadowable.No, thematic = IsThematic.No, wiremesh = IsWiremesh.No, posType: PositionType = \"quantized\", enableAtmosphere = EnableAtmosphere.No): void {\n const clipStack = target.uniforms.branch.clipStack;\n const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;\n this.positionType = posType;\n\n if (RenderPass.Hilite === pass || RenderPass.HiliteClassification === pass || RenderPass.HilitePlanarClassification === pass) {\n const isClassified = (classified === IsClassified.Yes && RenderPass.HilitePlanarClassification === pass) ? IsClassified.Yes : IsClassified.No;\n this.initForHilite(numClipPlanes, instanced, isClassified, posType);\n } else {\n this._isHilite = false;\n this.isTranslucent = RenderPass.Translucent === pass;\n this.numClipPlanes = numClipPlanes;\n this.isAnimated = animated;\n this.isInstanced = instanced;\n this.isClassified = classified;\n this.isShadowable = shadowable;\n this.isThematic = thematic;\n this.isWiremesh = wiremesh;\n this.enableAtmosphere = enableAtmosphere;\n this.featureMode = target.uniforms.batch.featureMode;\n\n // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).\n // These are only useful if the geometry defines feature Ids.\n // In 3d, if we're only displaying surfaces or edges, not both, don't bother, unless forceSurfaceDiscard is true.\n this.isEdgeTestNeeded = this.hasFeatures ? (this.isClassified ? IsEdgeTestNeeded.No : IsEdgeTestNeeded.Yes) : IsEdgeTestNeeded.No;\n if (!target.currentViewFlags.forceSurfaceDiscard && target.is3d && !target.isReadPixelsInProgress && this.isEdgeTestNeeded) {\n switch (target.currentViewFlags.renderMode) {\n case RenderMode.Wireframe:\n // We're only displaying edges (ignoring filled planar regions)\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n break;\n case RenderMode.SmoothShade:\n if (!target.currentViewFlags.visibleEdges && !target.wantAmbientOcclusion && pass !== RenderPass.PlanarClassification) {\n // We're only displaying surfaces (ignoring filled planar regions).\n // NB: Filled text (blanking region) is handled by adjusting the depth in the surface vertex shader.\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n }\n break;\n default:\n // SolidFill and HiddenLine always display edges and surfaces.\n break;\n }\n }\n }\n }\n\n public reset(mode: FeatureMode, instanced: IsInstanced = IsInstanced.No, shadowable: IsShadowable, thematic: IsThematic, posType: PositionType) {\n this._isHilite = false;\n this.featureMode = mode;\n this.isTranslucent = false;\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n this.isAnimated = IsAnimated.No;\n this.isClassified = IsClassified.No;\n this.isInstanced = instanced;\n this.isShadowable = shadowable;\n this.isThematic = thematic;\n this.isWiremesh = IsWiremesh.No;\n this.positionType = posType;\n this.enableAtmosphere = EnableAtmosphere.No;\n this.numClipPlanes = 0;\n }\n\n public get hasFeatures() { return FeatureMode.None !== this.featureMode; }\n\n public setAnimated(animated: boolean) { this.isAnimated = animated ? IsAnimated.Yes : IsAnimated.No; }\n public setInstanced(instanced: boolean) { this.isInstanced = instanced ? IsInstanced.Yes : IsInstanced.No; }\n public setClassified(classified: boolean) {\n this.isClassified = classified ? IsClassified.Yes : IsClassified.No;\n }\n\n public get isHilite() { return this._isHilite; }\n public initForHilite(numClipPlanes: number, instanced: IsInstanced, classified: IsClassified, posType: PositionType) {\n this.featureMode = classified ? FeatureMode.None : FeatureMode.Overrides;\n this._isHilite = true;\n this.isTranslucent = false;\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n this.isAnimated = IsAnimated.No;\n this.isInstanced = instanced;\n this.isClassified = classified;\n this.numClipPlanes = numClipPlanes;\n this.positionType = posType;\n }\n\n public equals(other: TechniqueFlags): boolean {\n return this.numClipPlanes === other.numClipPlanes\n && this.featureMode === other.featureMode\n && this.isTranslucent === other.isTranslucent\n && this.isEdgeTestNeeded === other.isEdgeTestNeeded\n && this.isAnimated === other.isAnimated\n && this.isInstanced === other.isInstanced\n && this.isClassified === other.isClassified\n && this.isShadowable === other.isShadowable\n && this.isThematic === other.isThematic\n && this.isWiremesh === other.isWiremesh\n && this.positionType === other.positionType\n && this.enableAtmosphere === other.enableAtmosphere\n && this.isHilite === other.isHilite;\n }\n\n public buildDescription(): string {\n const parts = [this.isTranslucent ? \"Translucent\" : \"Opaque\"];\n if (this.isInstanced)\n parts.push(\"Instanced\");\n if (this.isEdgeTestNeeded)\n parts.push(\"EdgeTestNeeded\");\n if (this.isAnimated)\n parts.push(\"Animated\");\n if (this.isHilite)\n parts.push(\"Hilite\");\n if (this.isClassified)\n parts.push(\"Classified\");\n if (this.hasClip)\n parts.push(\"Clip\");\n if (this.isShadowable)\n parts.push(\"Shadowable\");\n if (this.isThematic)\n parts.push(\"Thematic\");\n if (this.hasFeatures)\n parts.push(FeatureMode.Pick === this.featureMode ? \"Pick\" : \"Overrides\");\n if (this.isWiremesh)\n parts.push(\"Wiremesh\");\n if (this.positionType === \"unquantized\")\n parts.push(\"Unquantized\");\n if (this.enableAtmosphere)\n parts.push(\"EnableAtmosphere\");\n\n return parts.join(\"-\");\n }\n\n public static fromDescription(description: string): TechniqueFlags {\n const flags = new TechniqueFlags(false);\n const parts = description.split(\"-\");\n for (const part of parts) {\n switch (part) {\n case \"Translucent\":\n flags.isTranslucent = true;\n break;\n case \"Instanced\":\n flags.isInstanced = IsInstanced.Yes;\n break;\n case \"EdgeTestNeeded\":\n flags.isEdgeTestNeeded = IsEdgeTestNeeded.Yes;\n break;\n case \"Animated\":\n flags.isAnimated = IsAnimated.Yes;\n break;\n case \"Hilite\":\n flags._isHilite = true;\n break;\n case \"Classified\":\n flags.isClassified = IsClassified.Yes;\n break;\n case \"Clip\":\n flags.numClipPlanes = 1;\n break;\n case \"Shadowable\":\n flags.isShadowable = IsShadowable.Yes;\n break;\n case \"Thematic\":\n flags.isThematic = IsThematic.Yes;\n break;\n case \"Wiremesh\":\n flags.isWiremesh = IsWiremesh.Yes;\n break;\n case \"Unquantized\":\n flags.positionType = \"unquantized\";\n break;\n case \"EnableAtmosphere\":\n flags.enableAtmosphere = EnableAtmosphere.Yes;\n break;\n case \"Pick\":\n flags.featureMode = FeatureMode.Pick;\n break;\n case \"Overrides\":\n flags.featureMode = FeatureMode.Overrides;\n break;\n }\n }\n\n return flags;\n }\n\n public static readonly defaults = new TechniqueFlags();\n}\n"]}
@@ -230,8 +230,8 @@ class Texture2DCreateParams {
230
230
  const format = GL_1.GL.Texture.Format.Rgba;
231
231
  return { format, wrapMode, useMipMaps, interpolate, anisotropicFilter };
232
232
  }
233
+ static { this.placeholderParams = new Texture2DCreateParams(1, 1, GL_1.GL.Texture.Format.Rgba, GL_1.GL.Texture.DataType.UnsignedByte, GL_1.GL.Texture.WrapMode.ClampToEdge, (_tex, _params) => undefined); }
233
234
  }
234
- Texture2DCreateParams.placeholderParams = new Texture2DCreateParams(1, 1, GL_1.GL.Texture.Format.Rgba, GL_1.GL.Texture.DataType.UnsignedByte, GL_1.GL.Texture.WrapMode.ClampToEdge, (_tex, _params) => undefined);
235
235
  class TextureCubeCreateParams {
236
236
  constructor(dim, format, dataType, wrapMode, loadImageData) {
237
237
  this.dim = dim;
@@ -402,6 +402,7 @@ class Texture2DHandle extends TextureHandle {
402
402
  static createForImageBitmap(image, type) {
403
403
  return this.create(Texture2DCreateParams.createForImageBitmap(image, type));
404
404
  }
405
+ static { this._placeHolderTextureData = new Uint8Array([128, 128, 128, 255]); }
405
406
  static createForElement(id, imodel, type, format, onLoaded) {
406
407
  // set a placeholder texture while we wait for the external texture to load
407
408
  const handle = this.createForData(1, 1, this._placeHolderTextureData, undefined, undefined, GL_1.GL.Texture.Format.Rgba);
@@ -430,9 +431,9 @@ class Texture2DHandle extends TextureHandle {
430
431
  }
431
432
  }
432
433
  exports.Texture2DHandle = Texture2DHandle;
433
- Texture2DHandle._placeHolderTextureData = new Uint8Array([128, 128, 128, 255]);
434
434
  /** @internal */
435
435
  class ExternalTextureLoader {
436
+ static { this.instance = new ExternalTextureLoader(2); }
436
437
  get numActiveRequests() { return this._activeRequests.length; }
437
438
  get numPendingRequests() { return this._pendingRequests.length; }
438
439
  get maxActiveRequests() { return this._maxActiveRequests; }
@@ -526,7 +527,6 @@ class ExternalTextureLoader {
526
527
  }
527
528
  }
528
529
  exports.ExternalTextureLoader = ExternalTextureLoader;
529
- ExternalTextureLoader.instance = new ExternalTextureLoader(2);
530
530
  /** @internal */
531
531
  class TextureCubeHandle extends TextureHandle {
532
532
  get width() { return this._dim; }
@@ -1 +1 @@
1
- {"version":3,"file":"Texture.js","sourceRoot":"","sources":["../../../../src/render/webgl/Texture.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, BeEvent, dispose, Id64String } from \"@itwin/core-bentley\";\nimport {\n ImageBuffer, ImageBufferFormat, ImageSource, ImageSourceFormat, isPowerOfTwo, nextHighestPowerOfTwo, RenderTexture, TextureData, TextureTransparency,\n} from \"@itwin/core-common\";\nimport { getImageSourceMimeType, imageBufferToPngDataUrl, imageElementFromImageSource, openImageDataUrlInNewWindow } from \"../../common/ImageUtil\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { GL } from \"./GL\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { TextureUnit } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { TextureOwnership } from \"../CreateTextureArgs\";\nimport { OvrFlags } from \"../../common/internal/render/OvrFlags\";\n\n/** @internal */\nexport type Texture2DData = Uint8Array | Float32Array;\n\nfunction computeBytesUsed(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType): number {\n const bytesPerComponent = GL.Texture.DataType.UnsignedByte === dataType ? 1 : 4;\n let componentsPerPixel = 1;\n switch (format) {\n case GL.Texture.Format.Rgb:\n componentsPerPixel = 3;\n break;\n case GL.Texture.Format.Rgba:\n componentsPerPixel = 4;\n break;\n }\n\n return width * height * componentsPerPixel * bytesPerComponent;\n}\n\n/** Associate texture data with a WebGLTexture from a canvas, image, OR a bitmap. */\nfunction loadTexture2DImageData(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData, source?: TexImageSource): void {\n handle.bytesUsed = undefined !== bytes ? bytes.byteLength : computeBytesUsed(params.width, params.height, params.format, params.dataType);\n\n const tex = handle.getHandle()!;\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n\n // Figure out the internal format. For all but WebGL2 float/half-float datatypes it is just same as format.\n // TODO: probably need to just support internal format types in Texture2DCreateParams.\n let internalFormat = params.format;\n const context2 = System.instance.context;\n if (GL.Texture.Format.Rgba === params.format) {\n if (GL.Texture.DataType.Float === params.dataType)\n internalFormat = context2.RGBA32F;\n else if (context2.HALF_FLOAT === params.dataType)\n internalFormat = context2.RGBA16F;\n } else if (GL.Texture.Format.DepthStencil === params.format)\n internalFormat = context2.DEPTH24_STENCIL8;\n\n // send the texture data\n if (undefined !== source) {\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.format, params.dataType, source);\n } else {\n const pixelData = undefined !== bytes ? bytes : null;\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.width, params.height, 0, params.format, params.dataType, pixelData);\n }\n\n if (params.useMipMaps) {\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n } else {\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n }\n if (params.anisotropicFilter) {\n System.instance.setMaxAnisotropy(params.anisotropicFilter);\n }\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, params.wrapMode);\n\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n}\n\nfunction loadTextureFromBytes(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData): void {\n loadTexture2DImageData(handle, params, bytes);\n}\n\n/** Associate cube texture data with a WebGLTexture from an image. */\nfunction loadTextureCubeImageData(handle: TextureHandle, params: TextureCubeCreateParams, images: TexImageSource[]): void {\n handle.bytesUsed = computeBytesUsed(params.dim * 6, params.dim, params.format, params.dataType);\n\n const tex = handle.getHandle()!;\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTextureCubeMap(TextureUnit.Zero, tex);\n\n const cubeTargets: number[] = [GL.Texture.Target.CubeMapPositiveX, GL.Texture.Target.CubeMapNegativeX, GL.Texture.Target.CubeMapPositiveY, GL.Texture.Target.CubeMapNegativeY, GL.Texture.Target.CubeMapPositiveZ, GL.Texture.Target.CubeMapNegativeZ];\n\n for (let i = 0; i < 6; i++) {\n gl.texImage2D(cubeTargets[i], 0, params.format, params.format, params.dataType, images[i]);\n }\n\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_T, params.wrapMode);\n // gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_R, params.wrapMode); // Unavailable in GLES2\n\n System.instance.bindTextureCubeMap(TextureUnit.Zero, undefined);\n}\n\ntype TextureFlag = true | undefined;\ntype TextureAnisotropicFilter = number | undefined;\ntype Load2DImageData = (handle: TextureHandle, params: Texture2DCreateParams) => void;\ntype LoadCubeImageData = (handle: TextureHandle, params: TextureCubeCreateParams) => void;\n\ninterface TextureImageProperties {\n wrapMode: GL.Texture.WrapMode;\n useMipMaps: TextureFlag;\n interpolate: TextureFlag;\n format: GL.Texture.Format;\n anisotropicFilter: TextureAnisotropicFilter;\n}\n\n/** @internal */\nexport interface TextureParams {\n type: RenderTexture.Type;\n ownership?: TextureOwnership;\n transparency: TextureTransparency;\n handle: TextureHandle;\n}\n\n/** Wrapper class for a WebGL texture handle and parameters specific to an individual texture.\n * @internal\n */\nexport class Texture extends RenderTexture implements WebGLDisposable {\n public readonly texture: TextureHandle;\n public readonly ownership?: TextureOwnership;\n public transparency: TextureTransparency;\n\n public get bytesUsed(): number { return this.texture.bytesUsed; }\n public get hasOwner(): boolean { return undefined !== this.ownership; }\n public get key(): string | undefined {\n return typeof this.ownership !== \"string\" && typeof this.ownership?.key === \"string\" ? this.ownership.key : undefined;\n }\n\n public constructor(params: TextureParams) {\n super(params.type);\n this.ownership = params.ownership;\n this.texture = params.handle;\n this.transparency = params.handle.format === GL.Texture.Format.Rgba ? params.transparency : TextureTransparency.Opaque;\n }\n\n public get isDisposed(): boolean { return this.texture.isDisposed; }\n\n /** Free this object in the WebGL wrapper. */\n public dispose() {\n dispose(this.texture);\n }\n}\n\nfunction getDataType(data: Texture2DData): GL.Texture.DataType {\n return data instanceof Float32Array ? GL.Texture.DataType.Float : GL.Texture.DataType.UnsignedByte;\n}\n\n/** Parameters used internally to define how to create a texture for use with WebGL. */\nclass Texture2DCreateParams {\n private constructor(\n public width: number,\n public height: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: Load2DImageData,\n public useMipMaps?: TextureFlag,\n public interpolate?: TextureFlag,\n public anisotropicFilter?: TextureAnisotropicFilter,\n public dataBytes?: Uint8Array) { }\n\n public static createForData(width: number, height: number, data: Texture2DData, preserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n const bytes = (preserveData && data instanceof Uint8Array) ? data : undefined;\n return new Texture2DCreateParams(width, height, format, getDataType(data), wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, data), undefined, undefined, undefined, bytes);\n }\n\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n if (ImageBufferFormat.Rgb === image.format)\n props.format = GL.Texture.Format.Rgb;\n\n return new Texture2DCreateParams(image.width, image.height, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, image.data), props.useMipMaps, props.interpolate);\n }\n\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return new Texture2DCreateParams(width, height, format, dataType, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params), undefined, undefined);\n }\n\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.naturalWidth;\n let targetHeight = image.naturalHeight;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // Cap texture dimensions to system WebGL capabilities\n const maxTexSize = System.instance.maxTextureSize;\n targetWidth = Math.min(targetWidth, maxTexSize);\n targetHeight = Math.min(targetHeight, maxTexSize);\n\n let element: TexImageSource = image;\n if (targetWidth !== image.naturalWidth || targetHeight !== image.naturalHeight) {\n // Resize so dimensions are powers-of-two\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n element = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, element), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.width;\n let targetHeight = image.height;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // If we have to resize, use a canvas\n let source: TexImageSource = image;\n if (image.width !== targetWidth || image.height !== targetHeight) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n source = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, source), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n private static getImageProperties(type: RenderTexture.Type): TextureImageProperties {\n const isSky = RenderTexture.Type.SkyBox === type;\n const isTile = RenderTexture.Type.TileSection === type;\n const isThematic = RenderTexture.Type.ThematicGradient === type;\n const isFilteredTile = RenderTexture.Type.FilteredTileSection === type;\n const maxAnisotropicFilterLevel = 16;\n\n const wrapMode = RenderTexture.Type.Normal === type ? GL.Texture.WrapMode.Repeat : GL.Texture.WrapMode.ClampToEdge;\n const useMipMaps: TextureFlag = (!isSky && !isTile && !isFilteredTile && !isThematic) ? true : undefined;\n const interpolate: TextureFlag = isThematic ? undefined : true;\n const anisotropicFilter = isFilteredTile ? maxAnisotropicFilterLevel : undefined;\n\n // Always use RGBA. RGB is much slower and almost certainly does not actually save any GPU memory.\n const format = GL.Texture.Format.Rgba;\n\n return { format, wrapMode, useMipMaps, interpolate, anisotropicFilter };\n }\n\n public static readonly placeholderParams = new Texture2DCreateParams(1, 1, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (_tex: TextureHandle, _params: Texture2DCreateParams) => undefined);\n}\n\nclass TextureCubeCreateParams {\n private constructor(\n public dim: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: LoadCubeImageData) { }\n\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement): TextureCubeCreateParams | undefined {\n const targetDim = posX.naturalWidth;\n\n if (posX.naturalHeight !== targetDim) // Cube texture dimensions must match (width must equal height)\n return undefined;\n\n const images: HTMLImageElement[] = [posX, negX, posY, negY, posZ, negZ];\n\n for (let i = 1; i < images.length; i++) { // Dimensions of all six sides must match each other\n if (images[i].naturalWidth !== targetDim || images[i].naturalHeight !== targetDim)\n return undefined;\n }\n\n return new TextureCubeCreateParams(targetDim, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: TextureCubeCreateParams) => loadTextureCubeImageData(tex, params, images));\n }\n}\n\n/** Wraps a WebGLTextureHandle\n * @internal\n */\nexport abstract class TextureHandle implements WebGLDisposable {\n protected _glTexture?: WebGLTexture;\n protected _bytesUsed = 0;\n\n public abstract get width(): number;\n public abstract get height(): number;\n public abstract get format(): GL.Texture.Format;\n public abstract get dataType(): GL.Texture.DataType;\n public abstract get dataBytes(): Uint8Array | undefined;\n public get bytesUsed(): number { return this._bytesUsed; }\n public set bytesUsed(bytesUsed: number) {\n // assert(0 === this.bytesUsed);\n this._bytesUsed = bytesUsed;\n }\n\n /** Get the WebGLTexture for this TextureHandle. */\n public getHandle(): WebGLTexture | undefined { return this._glTexture; }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public abstract bind(_texUnit: TextureUnit): boolean;\n\n /** Bind this texture to a uniform sampler. */\n public abstract bindSampler(_uniform: UniformHandle, _unit: TextureUnit): void;\n\n public get isDisposed(): boolean { return this._glTexture === undefined; }\n\n public dispose() {\n if (!this.isDisposed) {\n System.instance.disposeTexture(this._glTexture!);\n this._glTexture = undefined;\n this.bytesUsed = 0;\n }\n }\n\n /** Create a 2D texture for use as a color attachment for rendering */\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return Texture2DHandle.createForAttachment(width, height, format, dataType);\n }\n\n /** Create a 2D texture to hold non-image data */\n public static createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return Texture2DHandle.createForData(width, height, data, wantPreserveData, wrapMode, format);\n }\n\n /** Create a 2D texture from a bitmap */\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBuffer(image, type);\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return Texture2DHandle.createForImage(image, type);\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBitmap(image, type);\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n return TextureCubeHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n }\n\n public static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n return Texture2DHandle.createForElement(id, imodel, type, format, onLoaded);\n }\n\n protected constructor(glTexture: WebGLTexture) {\n this._glTexture = glTexture;\n }\n\n /** For debugging purposes, open a new window containing this texture as an image. */\n public showDebugImage(): void {\n const gl = System.instance.context;\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.getHandle()!, 0);\n if (gl.FRAMEBUFFER_COMPLETE === gl.checkFramebufferStatus(gl.FRAMEBUFFER)) {\n const w = this.width;\n const h = this.height;\n const pixels = new Uint8Array(w * h * 4);\n gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n const buffer = ImageBuffer.create(pixels, ImageBufferFormat.Rgba, w);\n const url = imageBufferToPngDataUrl(buffer, false);\n openImageDataUrlInNewWindow(url!, \"Classifiers\");\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.deleteFramebuffer(fbo);\n }\n}\n\n/** @internal */\nexport class Texture2DHandle extends TextureHandle {\n private _width: number;\n private _height: number;\n private _format: GL.Texture.Format;\n private _dataType: GL.Texture.DataType;\n private _dataBytes?: Uint8Array;\n\n public get width(): number { return this._width; }\n public get height(): number { return this._height; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return this._dataBytes; }\n\n /** Bind specified texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTexture2d(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n Texture2DHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n Texture2DHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n /** Update the 2D texture contents. */\n public update(updater: Texture2DDataUpdater): boolean {\n if (0 === this.width || 0 === this.height || undefined === this._dataBytes || 0 === this._dataBytes.length) {\n assert(false);\n return false;\n }\n\n if (!updater.modified)\n return false;\n\n return this.replaceTextureData(this._dataBytes);\n }\n\n /** Replace the 2D texture contents. */\n public replaceTextureData(data: Texture2DData): boolean {\n assert((GL.Texture.DataType.Float === this._dataType) === (data instanceof Float32Array));\n\n const tex = this.getHandle()!;\n if (undefined === tex)\n return false;\n\n const gl = System.instance.context;\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Go through System to ensure we don't interfere with currently-bound textures!\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.width, this.height, this._format, this._dataType, data);\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n\n return true;\n }\n\n private static create(params: Texture2DCreateParams): Texture2DHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new Texture2DHandle(glTex, params) : undefined;\n }\n\n /** Create a texture for use as a color attachment for rendering */\n public static override createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return this.create(Texture2DCreateParams.createForAttachment(width, height, format, dataType));\n }\n\n /** Create a texture to hold non-image data */\n public static override createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return this.create(Texture2DCreateParams.createForData(width, height, data, wantPreserveData, wrapMode, format));\n }\n\n /** Create a texture from a bitmap */\n public static override createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n if (RenderTexture.Type.TileSection !== type && RenderTexture.Type.ThematicGradient !== type)\n assert(isPowerOfTwo(image.width) && isPowerOfTwo(image.height), \"###TODO: Resize image dimensions to powers-of-two if necessary\");\n\n return this.create(Texture2DCreateParams.createForImageBuffer(image, type));\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static override createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImage(image, type));\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static override createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImageBitmap(image, type));\n }\n\n private static _placeHolderTextureData = new Uint8Array([128, 128, 128, 255]);\n\n public static override createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n // set a placeholder texture while we wait for the external texture to load\n const handle = this.createForData(1, 1, this._placeHolderTextureData, undefined, undefined, GL.Texture.Format.Rgba);\n\n if (undefined === handle)\n return undefined;\n\n // kick off loading the texture from the backend\n ExternalTextureLoader.instance.loadTexture(handle, id, imodel, type, format, onLoaded);\n\n return handle;\n }\n\n public reload(params: Texture2DCreateParams) {\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n\n private constructor(glTexture: WebGLTexture, params: Texture2DCreateParams) {\n super(glTexture);\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport type ExternalTextureLoadCallback = (req: ExternalTextureRequest, data: TextureData) => void;\n\n/** @internal */\nexport interface ExternalTextureRequest {\n handle: Texture2DHandle;\n name: Id64String;\n imodel: IModelConnection;\n type: RenderTexture.Type;\n format: ImageSourceFormat;\n onLoaded?: ExternalTextureLoadCallback;\n}\n\n/** @internal */\ninterface TextureConvertRequest {\n req: ExternalTextureRequest;\n texData: TextureData;\n}\n\n/** @internal */\nexport class ExternalTextureLoader { /* currently exported for tests only */\n public static readonly instance = new ExternalTextureLoader(2);\n public readonly onTexturesLoaded = new BeEvent<() => void>();\n private readonly _maxActiveRequests: number;\n private _activeRequests: Array<ExternalTextureRequest> = [];\n private _pendingRequests: Array<ExternalTextureRequest> = [];\n private _convertRequests: Array<TextureConvertRequest> = [];\n private _convertPending = false;\n\n public get numActiveRequests() { return this._activeRequests.length; }\n public get numPendingRequests() { return this._pendingRequests.length; }\n public get maxActiveRequests() { return this._maxActiveRequests; }\n\n private constructor(maxActiveRequests: number) {\n this._maxActiveRequests = maxActiveRequests;\n }\n\n private async _nextRequest(prevReq: ExternalTextureRequest) {\n this._activeRequests.splice(this._activeRequests.indexOf(prevReq), 1);\n if (this._activeRequests.length < this._maxActiveRequests && this._pendingRequests.length > 0) {\n const req = this._pendingRequests.shift()!;\n await this._activateRequest(req);\n }\n if (this._activeRequests.length < 1 && this._pendingRequests.length < 1)\n this.onTexturesLoaded.raiseEvent();\n }\n\n private async _activateRequest(req: ExternalTextureRequest) {\n if (req.imodel.isClosed)\n return;\n\n this._activeRequests.push(req);\n\n try {\n if (!req.imodel.isClosed) {\n const maxTextureSize = System.instance.maxTexSizeAllow;\n const texData = await req.imodel.queryTextureData({ name: req.name, maxTextureSize });\n if (undefined !== texData) {\n const cnvReq = { req, texData };\n this._convertRequests.push(cnvReq);\n // _convertPending is used to prevent overlapping calls to _convertTexture (from overlapping calls to _activateRequest)\n // it has been put on the list, so if it doesn't get converted here it will get converted by the loop that is converting the current one\n do {\n if (!this._convertPending)\n await this._convertTexture();\n } while (!this._convertPending && this._convertRequests.length > 0);\n if (!req.imodel.isClosed) {\n IModelApp.tileAdmin.invalidateAllScenes();\n if (undefined !== req.onLoaded)\n req.onLoaded(req, texData);\n }\n }\n }\n } catch { }\n\n return this._nextRequest(req);\n }\n\n private async _convertTexture(): Promise<void> {\n this._convertPending = true;\n try {\n const cnvReq = this._convertRequests.shift();\n if (undefined !== cnvReq) {\n const imageSource = new ImageSource(cnvReq.texData.bytes, cnvReq.texData.format);\n if (System.instance.supportsCreateImageBitmap) {\n const blob = new Blob([imageSource.data], { type: getImageSourceMimeType(imageSource.format) });\n const image = await createImageBitmap(blob, 0, 0, cnvReq.texData.width, cnvReq.texData.height);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImageBitmap(image, cnvReq.req.type));\n }\n } else {\n const image = await imageElementFromImageSource(imageSource);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImage(image, cnvReq.req.type));\n }\n }\n }\n } catch { }\n this._convertPending = false;\n }\n\n private _requestExists(reqToCheck: ExternalTextureRequest) {\n for (const r of this._activeRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n for (const r of this._pendingRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n return false;\n }\n\n public loadTexture(handle: Texture2DHandle, name: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded?: ExternalTextureLoadCallback) {\n const req = { handle, name, imodel, type, format, onLoaded };\n if (this._requestExists(req))\n return;\n\n if (this._activeRequests.length + 1 > this._maxActiveRequests) {\n this._pendingRequests.push(req);\n } else\n this._activateRequest(req); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n}\n\n/** @internal */\nexport class TextureCubeHandle extends TextureHandle {\n private _dim: number; // Cubemap texture height and width must match. This must be the same for each of the six faces.\n private _format: GL.Texture.Format; // Format must be the same for each of the six faces.\n private _dataType: GL.Texture.DataType; // Type must be the same for each of the six faces.\n\n public get width(): number { return this._dim; }\n public get height(): number { return this._dim; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return undefined; }\n\n /** Bind specified cubemap texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTextureCubeMap(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n TextureCubeHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n TextureCubeHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n private static create(params: TextureCubeCreateParams): TextureHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new TextureCubeHandle(glTex, params) : undefined;\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static override createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n const params = TextureCubeCreateParams.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n return params !== undefined ? this.create(params) : undefined;\n }\n\n private constructor(glTexture: WebGLTexture, params: TextureCubeCreateParams) {\n super(glTexture);\n this._dim = params.dim;\n this._format = params.format;\n this._dataType = params.dataType;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport class Texture2DDataUpdater {\n public data: Uint8Array;\n public modified: boolean = false;\n\n public constructor(data: Uint8Array) { this.data = data; }\n\n public setByteAtIndex(index: number, byte: number) {\n assert(index < this.data.length);\n if (byte !== this.data[index]) {\n this.data[index] = byte;\n this.modified = true;\n }\n }\n\n public setOvrFlagsAtIndex(index: number, value: OvrFlags) {\n assert(index < this.data.length - 1);\n assert(value < 0xffff);\n this.setByteAtIndex(index, value & 0xff);\n this.setByteAtIndex(index + 1, (value & 0xff00) >> 8);\n }\n\n public getByteAtIndex(index: number): number {\n assert(index < this.data.length);\n return this.data[index];\n }\n\n public getOvrFlagsAtIndex(index: number): OvrFlags {\n const lo = this.getByteAtIndex(index);\n const hi = this.getByteAtIndex(index + 1);\n return lo | (hi << 8);\n }\n}\n"]}
1
+ {"version":3,"file":"Texture.js","sourceRoot":"","sources":["../../../../src/render/webgl/Texture.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA2E;AAC3E,oDAE4B;AAC5B,sDAAmJ;AAEnJ,+CAA4C;AAE5C,6BAA0B;AAE1B,+CAA4C;AAC5C,qCAAkC;AAOlC,SAAS,gBAAgB,CAAC,KAAa,EAAE,MAAc,EAAE,MAAyB,EAAE,QAA6B;IAC/G,MAAM,iBAAiB,GAAG,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;YACxB,kBAAkB,GAAG,CAAC,CAAC;YACvB,MAAM;QACR,KAAK,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,kBAAkB,GAAG,CAAC,CAAC;YACvB,MAAM;IACV,CAAC;IAED,OAAO,KAAK,GAAG,MAAM,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AACjE,CAAC;AAED,oFAAoF;AACpF,SAAS,sBAAsB,CAAC,MAAqB,EAAE,MAA6B,EAAE,KAAqB,EAAE,MAAuB;IAClI,MAAM,CAAC,SAAS,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE1I,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAG,CAAC;IAChC,MAAM,EAAE,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAEnC,0BAA0B;IAC1B,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAEvC,oFAAoF;IACpF,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,yBAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEzD,4GAA4G;IAC5G,sFAAsF;IACtF,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,QAAQ,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzC,IAAI,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ;YAC/C,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC;aAC/B,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,QAAQ;YAC9C,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC;IACtC,CAAC;SAAM,IAAI,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM;QACzD,cAAc,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAE7C,wBAAwB;IACxB,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7H,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QACjC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC;QAChF,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACpG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC7B,eAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEpE,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAqB,EAAE,MAA6B,EAAE,KAAqB;IACvG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,qEAAqE;AACrE,SAAS,wBAAwB,CAAC,MAAqB,EAAE,MAA+B,EAAE,MAAwB;IAChH,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEhG,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,EAAG,CAAC;IAChC,MAAM,EAAE,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAEnC,0BAA0B;IAC1B,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAEvC,oFAAoF;IACpF,eAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,yBAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAa,CAAC,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEvP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9E,EAAE,CAAC,aAAa,CAAC,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9E,EAAE,CAAC,aAAa,CAAC,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChF,EAAE,CAAC,aAAa,CAAC,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChF,2GAA2G;IAE3G,eAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAClE,CAAC;AAuBD;;GAEG;AACH,MAAa,OAAQ,SAAQ,2BAAa;IAKxC,IAAW,SAAS,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACjE,IAAW,QAAQ,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACvE,IAAW,GAAG;QACZ,OAAO,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACxH,CAAC;IAED,YAAmB,MAAqB;QACtC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,iCAAmB,CAAC,MAAM,CAAC;IACzH,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpE,6CAA6C;IACtC,OAAO;QACZ,IAAA,sBAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;CACF;AAxBD,0BAwBC;AAED,SAAS,WAAW,CAAC,IAAmB;IACtC,OAAO,IAAI,YAAY,YAAY,CAAC,CAAC,CAAC,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;AACrG,CAAC;AAED,uFAAuF;AACvF,MAAM,qBAAqB;IACzB,YACS,KAAa,EACb,MAAc,EACd,MAAyB,EACzB,QAA6B,EAC7B,QAA6B,EAC7B,aAA8B,EAC9B,UAAwB,EACxB,WAAyB,EACzB,iBAA4C,EAC5C,SAAsB;QATtB,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAmB;QACzB,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,kBAAa,GAAb,aAAa,CAAiB;QAC9B,eAAU,GAAV,UAAU,CAAc;QACxB,gBAAW,GAAX,WAAW,CAAc;QACzB,sBAAiB,GAAjB,iBAAiB,CAA2B;QAC5C,cAAS,GAAT,SAAS,CAAa;IAAI,CAAC;IAE7B,MAAM,CAAC,aAAa,CAAC,KAAa,EAAE,MAAc,EAAE,IAAmB,EAAE,YAAY,GAAG,KAAK,EAAE,QAAQ,GAAG,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;QAC/K,MAAM,KAAK,GAAG,CAAC,YAAY,IAAI,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,OAAO,IAAI,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EACjF,CAAC,GAAkB,EAAE,MAA6B,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5I,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,KAAkB,EAAE,IAAwB;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,+BAAiB,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM;YACxC,KAAK,CAAC,MAAM,GAAG,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QAEvC,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,EACxH,CAAC,GAAkB,EAAE,MAA6B,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/I,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,KAAa,EAAE,MAAc,EAAE,MAAyB,EAAE,QAA6B;QACvH,OAAO,IAAI,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAC/F,CAAC,GAAkB,EAAE,MAA6B,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACpH,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,KAAuB,EAAE,IAAwB;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;QACrC,IAAI,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;QAEvC,IAAI,2BAAa,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACtC,WAAW,GAAG,IAAA,mCAAqB,EAAC,WAAW,CAAC,CAAC;YACjD,YAAY,GAAG,IAAA,mCAAqB,EAAC,YAAY,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,2BAA2B,IAAI,CAAC,CAAC,IAAA,0BAAY,EAAC,WAAW,CAAC,IAAI,CAAC,IAAA,0BAAY,EAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACvH,IAAI,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACvD,qCAAqC;gBACrC,kKAAkK;gBAClK,gHAAgH;gBAChH,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;YAC/B,CAAC;iBAAM,IAAI,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzD,WAAW,GAAG,IAAA,mCAAqB,EAAC,WAAW,CAAC,CAAC;gBACjD,YAAY,GAAG,IAAA,mCAAqB,EAAC,YAAY,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,MAAM,UAAU,GAAG,eAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAClD,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAChD,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAElD,IAAI,OAAO,GAAmB,KAAK,CAAC;QACpC,IAAI,WAAW,KAAK,KAAK,CAAC,YAAY,IAAI,YAAY,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/E,yCAAyC;YACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;YAC3B,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;YAE7B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;YACzC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAE5D,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,EACxH,CAAC,GAAkB,EAAE,MAA6B,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAClL,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,KAAkB,EAAE,IAAwB;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,IAAI,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;QAEhC,IAAI,2BAAa,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACtC,WAAW,GAAG,IAAA,mCAAqB,EAAC,WAAW,CAAC,CAAC;YACjD,YAAY,GAAG,IAAA,mCAAqB,EAAC,YAAY,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,2BAA2B,IAAI,CAAC,CAAC,IAAA,0BAAY,EAAC,WAAW,CAAC,IAAI,CAAC,IAAA,0BAAY,EAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACvH,IAAI,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACvD,qCAAqC;gBACrC,kKAAkK;gBAClK,gHAAgH;gBAChH,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;YAC/B,CAAC;iBAAM,IAAI,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzD,WAAW,GAAG,IAAA,mCAAqB,EAAC,WAAW,CAAC,CAAC;gBACjD,YAAY,GAAG,IAAA,mCAAqB,EAAC,YAAY,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,MAAM,GAAmB,KAAK,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;YAC3B,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;YACzC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAE5D,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,qBAAqB,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,EACxH,CAAC,GAAkB,EAAE,MAA6B,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjL,CAAC;IAEO,MAAM,CAAC,kBAAkB,CAAC,IAAwB;QACxD,MAAM,KAAK,GAAG,2BAAa,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;QACjD,MAAM,MAAM,GAAG,2BAAa,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;QACvD,MAAM,UAAU,GAAG,2BAAa,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC;QAChE,MAAM,cAAc,GAAG,2BAAa,CAAC,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC;QACvE,MAAM,yBAAyB,GAAG,EAAE,CAAC;QAErC,MAAM,QAAQ,GAAG,2BAAa,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QACnH,MAAM,UAAU,GAAgB,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACzG,MAAM,WAAW,GAAgB,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,iBAAiB,GAAG,cAAc,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjF,kGAAkG;QAClG,MAAM,MAAM,GAAG,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAEtC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;IAC1E,CAAC;aAEsB,sBAAiB,GAAG,IAAI,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAClK,CAAC,IAAmB,EAAE,OAA8B,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;;AAGxE,MAAM,uBAAuB;IAC3B,YACS,GAAW,EACX,MAAyB,EACzB,QAA6B,EAC7B,QAA6B,EAC7B,aAAgC;QAJhC,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAmB;QACzB,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,kBAAa,GAAb,aAAa,CAAmB;IAAI,CAAC;IAEvC,MAAM,CAAC,mBAAmB,CAAC,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB;QAC9K,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QAEpC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,+DAA+D;YACnG,OAAO,SAAS,CAAC;QAEnB,MAAM,MAAM,GAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAExE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,oDAAoD;YAC5F,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS;gBAC/E,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,uBAAuB,CAAC,SAAS,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EACrI,CAAC,GAAkB,EAAE,MAA+B,EAAE,EAAE,CAAC,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5G,CAAC;CACF;AAED;;GAEG;AACH,MAAsB,aAAa;IASjC,IAAW,SAAS,KAAa,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,IAAW,SAAS,CAAC,SAAiB;QACpC,gCAAgC;QAChC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,mDAAmD;IAC5C,SAAS,KAA+B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAQxE,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC;IAEnE,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,eAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;YACjD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,sEAAsE;IAC/D,MAAM,CAAC,mBAAmB,CAAC,KAAa,EAAE,MAAc,EAAE,MAAyB,EAAE,QAA6B;QACvH,OAAO,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED,iDAAiD;IAC1C,MAAM,CAAC,aAAa,CAAC,KAAa,EAAE,MAAc,EAAE,IAAmB,EAAE,gBAAgB,GAAG,KAAK,EAAE,QAAQ,GAAG,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;QACnL,OAAO,eAAe,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChG,CAAC;IAED,wCAAwC;IACjC,MAAM,CAAC,oBAAoB,CAAC,KAAkB,EAAE,IAAwB;QAC7E,OAAO,eAAe,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,oDAAoD;IAC7C,MAAM,CAAC,cAAc,CAAC,KAAuB,EAAE,IAAwB;QAC5E,OAAO,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,+CAA+C;IACxC,MAAM,CAAC,oBAAoB,CAAC,KAAkB,EAAE,IAAwB;QAC7E,OAAO,eAAe,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,mEAAmE;IAC5D,MAAM,CAAC,mBAAmB,CAAC,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB;QAC9K,OAAO,iBAAiB,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,EAAc,EAAE,MAAwB,EAAE,IAAwB,EAAE,MAAyB,EAAE,QAAqC;QACjK,OAAO,eAAe,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED,YAAsB,SAAuB;QAlEnC,eAAU,GAAG,CAAC,CAAC;QAmEvB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,qFAAqF;IAC9E,cAAc;QACnB,MAAM,EAAE,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnC,MAAM,GAAG,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;QACnC,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACxC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAG,EAAE,CAAC,CAAC,CAAC;QACnG,IAAI,EAAE,CAAC,oBAAoB,KAAK,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAE7D,MAAM,MAAM,GAAG,yBAAW,CAAC,MAAM,CAAC,MAAM,EAAE,+BAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,IAAA,mCAAuB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnD,IAAA,uCAA2B,EAAC,GAAI,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;QAED,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;CACF;AA5FD,sCA4FC;AAED,gBAAgB;AAChB,MAAa,eAAgB,SAAQ,aAAa;IAOhD,IAAW,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,IAAW,MAAM,KAAwB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,IAAW,QAAQ,KAA0B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,IAAW,SAAS,KAA6B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1E,+DAA+D;IACxD,MAAM,CAAC,WAAW,CAAC,OAAoB,EAAE,KAA+B;QAC7E,IAAA,qBAAM,EAAC,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC;QAC1C,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,wDAAwD;IACjD,MAAM,CAAC,WAAW,CAAC,OAAsB,EAAE,GAAiB,EAAE,IAAiB;QACpF,IAAA,qBAAM,EAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,yBAAW,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,mHAAmH;IAC5G,IAAI,CAAC,OAAoB;QAC9B,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YAC/B,OAAO,KAAK,CAAC;QACf,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IACxC,WAAW,CAAC,OAAsB,EAAE,IAAiB;QAC1D,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YAC/B,eAAe,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,sCAAsC;IAC/B,MAAM,CAAC,OAA6B;QACzC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3G,IAAA,qBAAM,EAAC,KAAK,CAAC,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ;YACnB,OAAO,KAAK,CAAC;QAEf,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,uCAAuC;IAChC,kBAAkB,CAAC,IAAmB;QAC3C,IAAA,qBAAM,EAAC,CAAC,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,YAAY,YAAY,CAAC,CAAC,CAAC;QAE1F,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAG,CAAC;QAC9B,IAAI,SAAS,KAAK,GAAG;YACnB,OAAO,KAAK,CAAC;QAEf,MAAM,EAAE,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnC,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAEvC,gFAAgF;QAChF,eAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,yBAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzD,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtG,eAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE3D,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,MAAM,CAAC,MAA6B;QACjD,MAAM,KAAK,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACtD,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,CAAC;IAED,mEAAmE;IAC5D,MAAM,CAAU,mBAAmB,CAAC,KAAa,EAAE,MAAc,EAAE,MAAyB,EAAE,QAA6B;QAChI,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,8CAA8C;IACvC,MAAM,CAAU,aAAa,CAAC,KAAa,EAAE,MAAc,EAAE,IAAmB,EAAE,gBAAgB,GAAG,KAAK,EAAE,QAAQ,GAAG,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;QAC5L,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACnH,CAAC;IAED,qCAAqC;IAC9B,MAAM,CAAU,oBAAoB,CAAC,KAAkB,EAAE,IAAwB;QACtF,IAAI,2BAAa,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,2BAAa,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI;YACzF,IAAA,qBAAM,EAAC,IAAA,0BAAY,EAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAA,0BAAY,EAAC,KAAK,CAAC,MAAM,CAAC,EAAE,gEAAgE,CAAC,CAAC;QAEpI,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,oDAAoD;IAC7C,MAAM,CAAU,cAAc,CAAC,KAAuB,EAAE,IAAwB;QACrF,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,+CAA+C;IACxC,MAAM,CAAU,oBAAoB,CAAC,KAAkB,EAAE,IAAwB;QACtF,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9E,CAAC;aAEc,4BAAuB,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvE,MAAM,CAAU,gBAAgB,CAAC,EAAc,EAAE,MAAwB,EAAE,IAAwB,EAAE,MAAyB,EAAE,QAAqC;QAC1K,2EAA2E;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpH,IAAI,SAAS,KAAK,MAAM;YACtB,OAAO,SAAS,CAAC;QAEnB,gDAAgD;QAChD,qBAAqB,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEvF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,MAA6B;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QAEnC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,YAAoB,SAAuB,EAAE,MAA6B;QACxE,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QAEnC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;;AA3IH,0CA4IC;AAqBD,gBAAgB;AAChB,MAAa,qBAAqB;aACT,aAAQ,GAAG,IAAI,qBAAqB,CAAC,CAAC,CAAC,AAA/B,CAAgC;IAQ/D,IAAW,iBAAiB,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,IAAW,kBAAkB,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,IAAW,iBAAiB,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAElE,YAAoB,iBAAyB;QAX7B,qBAAgB,GAAG,IAAI,sBAAO,EAAc,CAAC;QAErD,oBAAe,GAAkC,EAAE,CAAC;QACpD,qBAAgB,GAAkC,EAAE,CAAC;QACrD,qBAAgB,GAAiC,EAAE,CAAC;QACpD,oBAAe,GAAG,KAAK,CAAC;QAO9B,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAA+B;QACxD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9F,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAG,CAAC;YAC3C,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YACrE,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,GAA2B;QACxD,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ;YACrB,OAAO;QAET,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACzB,MAAM,cAAc,GAAG,eAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACvD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;gBACtF,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;oBAC1B,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;oBAChC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACnC,uHAAuH;oBACvH,wIAAwI;oBACxI,GAAG,CAAC;wBACF,IAAI,CAAC,IAAI,CAAC,eAAe;4BACvB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;oBACjC,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACzB,qBAAS,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;wBAC1C,IAAI,SAAS,KAAK,GAAG,CAAC,QAAQ;4BAC5B,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC;QAEX,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC7C,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACjF,IAAI,eAAM,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAA,kCAAsB,EAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAChG,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC/F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC/F,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAG,MAAM,IAAA,uCAA2B,EAAC,WAAW,CAAC,CAAC;oBAC7D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC;QACX,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAEO,cAAc,CAAC,UAAkC;QACvD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe;YAClC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAC9D,OAAO,IAAI,CAAC;QAEhB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB;YACnC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAC9D,OAAO,IAAI,CAAC;QAEhB,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,WAAW,CAAC,MAAuB,EAAE,IAAgB,EAAE,MAAwB,EAAE,IAAwB,EAAE,MAAyB,EAAE,QAAsC;QACjL,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAC1B,OAAO;QAET,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;;YACC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,8DAA8D;IAC9F,CAAC;;AAtGH,sDAuGC;AAED,gBAAgB;AAChB,MAAa,iBAAkB,SAAQ,aAAa;IAKlD,IAAW,KAAK,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,IAAW,MAAM,KAAwB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,IAAW,QAAQ,KAA0B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,IAAW,SAAS,KAA6B,OAAO,SAAS,CAAC,CAAC,CAAC;IAEpE,uEAAuE;IAChE,MAAM,CAAC,WAAW,CAAC,OAAoB,EAAE,KAA+B;QAC7E,IAAA,qBAAM,EAAC,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC;QAC1C,eAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,wDAAwD;IACjD,MAAM,CAAC,WAAW,CAAC,OAAsB,EAAE,GAAiB,EAAE,IAAiB;QACpF,IAAA,qBAAM,EAAC,CAAC,CAAC,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,yBAAW,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,mHAAmH;IAC5G,IAAI,CAAC,OAAoB;QAC9B,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YAC/B,OAAO,KAAK,CAAC;QACf,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IACxC,WAAW,CAAC,OAAsB,EAAE,IAAiB;QAC1D,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YAC/B,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IAEO,MAAM,CAAC,MAAM,CAAC,MAA+B;QACnD,MAAM,KAAK,GAAG,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACtD,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAED,mEAAmE;IAC5D,MAAM,CAAU,mBAAmB,CAAC,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB;QACvL,MAAM,MAAM,GAAG,uBAAuB,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/F,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IAED,YAAoB,SAAuB,EAAE,MAA+B;QAC1E,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;CACF;AAzDD,8CAyDC;AAED,gBAAgB;AAChB,MAAa,oBAAoB;IAI/B,YAAmB,IAAgB;QAF5B,aAAQ,GAAY,KAAK,CAAC;QAEM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAAC,CAAC;IAEnD,cAAc,CAAC,KAAa,EAAE,IAAY;QAC/C,IAAA,qBAAM,EAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAEM,kBAAkB,CAAC,KAAa,EAAE,KAAe;QACtD,IAAA,qBAAM,EAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAA,qBAAM,EAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,cAAc,CAAC,KAAa;QACjC,IAAA,qBAAM,EAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAEM,kBAAkB,CAAC,KAAa;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACxB,CAAC;CACF;AA/BD,oDA+BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, BeEvent, dispose, Id64String } from \"@itwin/core-bentley\";\nimport {\n ImageBuffer, ImageBufferFormat, ImageSource, ImageSourceFormat, isPowerOfTwo, nextHighestPowerOfTwo, RenderTexture, TextureData, TextureTransparency,\n} from \"@itwin/core-common\";\nimport { getImageSourceMimeType, imageBufferToPngDataUrl, imageElementFromImageSource, openImageDataUrlInNewWindow } from \"../../common/ImageUtil\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { GL } from \"./GL\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { TextureUnit } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { TextureOwnership } from \"../CreateTextureArgs\";\nimport { OvrFlags } from \"../../common/internal/render/OvrFlags\";\n\n/** @internal */\nexport type Texture2DData = Uint8Array | Float32Array;\n\nfunction computeBytesUsed(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType): number {\n const bytesPerComponent = GL.Texture.DataType.UnsignedByte === dataType ? 1 : 4;\n let componentsPerPixel = 1;\n switch (format) {\n case GL.Texture.Format.Rgb:\n componentsPerPixel = 3;\n break;\n case GL.Texture.Format.Rgba:\n componentsPerPixel = 4;\n break;\n }\n\n return width * height * componentsPerPixel * bytesPerComponent;\n}\n\n/** Associate texture data with a WebGLTexture from a canvas, image, OR a bitmap. */\nfunction loadTexture2DImageData(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData, source?: TexImageSource): void {\n handle.bytesUsed = undefined !== bytes ? bytes.byteLength : computeBytesUsed(params.width, params.height, params.format, params.dataType);\n\n const tex = handle.getHandle()!;\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n\n // Figure out the internal format. For all but WebGL2 float/half-float datatypes it is just same as format.\n // TODO: probably need to just support internal format types in Texture2DCreateParams.\n let internalFormat = params.format;\n const context2 = System.instance.context;\n if (GL.Texture.Format.Rgba === params.format) {\n if (GL.Texture.DataType.Float === params.dataType)\n internalFormat = context2.RGBA32F;\n else if (context2.HALF_FLOAT === params.dataType)\n internalFormat = context2.RGBA16F;\n } else if (GL.Texture.Format.DepthStencil === params.format)\n internalFormat = context2.DEPTH24_STENCIL8;\n\n // send the texture data\n if (undefined !== source) {\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.format, params.dataType, source);\n } else {\n const pixelData = undefined !== bytes ? bytes : null;\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.width, params.height, 0, params.format, params.dataType, pixelData);\n }\n\n if (params.useMipMaps) {\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n } else {\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n }\n if (params.anisotropicFilter) {\n System.instance.setMaxAnisotropy(params.anisotropicFilter);\n }\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, params.wrapMode);\n\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n}\n\nfunction loadTextureFromBytes(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData): void {\n loadTexture2DImageData(handle, params, bytes);\n}\n\n/** Associate cube texture data with a WebGLTexture from an image. */\nfunction loadTextureCubeImageData(handle: TextureHandle, params: TextureCubeCreateParams, images: TexImageSource[]): void {\n handle.bytesUsed = computeBytesUsed(params.dim * 6, params.dim, params.format, params.dataType);\n\n const tex = handle.getHandle()!;\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTextureCubeMap(TextureUnit.Zero, tex);\n\n const cubeTargets: number[] = [GL.Texture.Target.CubeMapPositiveX, GL.Texture.Target.CubeMapNegativeX, GL.Texture.Target.CubeMapPositiveY, GL.Texture.Target.CubeMapNegativeY, GL.Texture.Target.CubeMapPositiveZ, GL.Texture.Target.CubeMapNegativeZ];\n\n for (let i = 0; i < 6; i++) {\n gl.texImage2D(cubeTargets[i], 0, params.format, params.format, params.dataType, images[i]);\n }\n\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_T, params.wrapMode);\n // gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_R, params.wrapMode); // Unavailable in GLES2\n\n System.instance.bindTextureCubeMap(TextureUnit.Zero, undefined);\n}\n\ntype TextureFlag = true | undefined;\ntype TextureAnisotropicFilter = number | undefined;\ntype Load2DImageData = (handle: TextureHandle, params: Texture2DCreateParams) => void;\ntype LoadCubeImageData = (handle: TextureHandle, params: TextureCubeCreateParams) => void;\n\ninterface TextureImageProperties {\n wrapMode: GL.Texture.WrapMode;\n useMipMaps: TextureFlag;\n interpolate: TextureFlag;\n format: GL.Texture.Format;\n anisotropicFilter: TextureAnisotropicFilter;\n}\n\n/** @internal */\nexport interface TextureParams {\n type: RenderTexture.Type;\n ownership?: TextureOwnership;\n transparency: TextureTransparency;\n handle: TextureHandle;\n}\n\n/** Wrapper class for a WebGL texture handle and parameters specific to an individual texture.\n * @internal\n */\nexport class Texture extends RenderTexture implements WebGLDisposable {\n public readonly texture: TextureHandle;\n public readonly ownership?: TextureOwnership;\n public transparency: TextureTransparency;\n\n public get bytesUsed(): number { return this.texture.bytesUsed; }\n public get hasOwner(): boolean { return undefined !== this.ownership; }\n public get key(): string | undefined {\n return typeof this.ownership !== \"string\" && typeof this.ownership?.key === \"string\" ? this.ownership.key : undefined;\n }\n\n public constructor(params: TextureParams) {\n super(params.type);\n this.ownership = params.ownership;\n this.texture = params.handle;\n this.transparency = params.handle.format === GL.Texture.Format.Rgba ? params.transparency : TextureTransparency.Opaque;\n }\n\n public get isDisposed(): boolean { return this.texture.isDisposed; }\n\n /** Free this object in the WebGL wrapper. */\n public dispose() {\n dispose(this.texture);\n }\n}\n\nfunction getDataType(data: Texture2DData): GL.Texture.DataType {\n return data instanceof Float32Array ? GL.Texture.DataType.Float : GL.Texture.DataType.UnsignedByte;\n}\n\n/** Parameters used internally to define how to create a texture for use with WebGL. */\nclass Texture2DCreateParams {\n private constructor(\n public width: number,\n public height: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: Load2DImageData,\n public useMipMaps?: TextureFlag,\n public interpolate?: TextureFlag,\n public anisotropicFilter?: TextureAnisotropicFilter,\n public dataBytes?: Uint8Array) { }\n\n public static createForData(width: number, height: number, data: Texture2DData, preserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n const bytes = (preserveData && data instanceof Uint8Array) ? data : undefined;\n return new Texture2DCreateParams(width, height, format, getDataType(data), wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, data), undefined, undefined, undefined, bytes);\n }\n\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n if (ImageBufferFormat.Rgb === image.format)\n props.format = GL.Texture.Format.Rgb;\n\n return new Texture2DCreateParams(image.width, image.height, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, image.data), props.useMipMaps, props.interpolate);\n }\n\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return new Texture2DCreateParams(width, height, format, dataType, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params), undefined, undefined);\n }\n\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.naturalWidth;\n let targetHeight = image.naturalHeight;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // Cap texture dimensions to system WebGL capabilities\n const maxTexSize = System.instance.maxTextureSize;\n targetWidth = Math.min(targetWidth, maxTexSize);\n targetHeight = Math.min(targetHeight, maxTexSize);\n\n let element: TexImageSource = image;\n if (targetWidth !== image.naturalWidth || targetHeight !== image.naturalHeight) {\n // Resize so dimensions are powers-of-two\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n element = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, element), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.width;\n let targetHeight = image.height;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // If we have to resize, use a canvas\n let source: TexImageSource = image;\n if (image.width !== targetWidth || image.height !== targetHeight) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n source = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, source), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n private static getImageProperties(type: RenderTexture.Type): TextureImageProperties {\n const isSky = RenderTexture.Type.SkyBox === type;\n const isTile = RenderTexture.Type.TileSection === type;\n const isThematic = RenderTexture.Type.ThematicGradient === type;\n const isFilteredTile = RenderTexture.Type.FilteredTileSection === type;\n const maxAnisotropicFilterLevel = 16;\n\n const wrapMode = RenderTexture.Type.Normal === type ? GL.Texture.WrapMode.Repeat : GL.Texture.WrapMode.ClampToEdge;\n const useMipMaps: TextureFlag = (!isSky && !isTile && !isFilteredTile && !isThematic) ? true : undefined;\n const interpolate: TextureFlag = isThematic ? undefined : true;\n const anisotropicFilter = isFilteredTile ? maxAnisotropicFilterLevel : undefined;\n\n // Always use RGBA. RGB is much slower and almost certainly does not actually save any GPU memory.\n const format = GL.Texture.Format.Rgba;\n\n return { format, wrapMode, useMipMaps, interpolate, anisotropicFilter };\n }\n\n public static readonly placeholderParams = new Texture2DCreateParams(1, 1, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (_tex: TextureHandle, _params: Texture2DCreateParams) => undefined);\n}\n\nclass TextureCubeCreateParams {\n private constructor(\n public dim: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: LoadCubeImageData) { }\n\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement): TextureCubeCreateParams | undefined {\n const targetDim = posX.naturalWidth;\n\n if (posX.naturalHeight !== targetDim) // Cube texture dimensions must match (width must equal height)\n return undefined;\n\n const images: HTMLImageElement[] = [posX, negX, posY, negY, posZ, negZ];\n\n for (let i = 1; i < images.length; i++) { // Dimensions of all six sides must match each other\n if (images[i].naturalWidth !== targetDim || images[i].naturalHeight !== targetDim)\n return undefined;\n }\n\n return new TextureCubeCreateParams(targetDim, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: TextureCubeCreateParams) => loadTextureCubeImageData(tex, params, images));\n }\n}\n\n/** Wraps a WebGLTextureHandle\n * @internal\n */\nexport abstract class TextureHandle implements WebGLDisposable {\n protected _glTexture?: WebGLTexture;\n protected _bytesUsed = 0;\n\n public abstract get width(): number;\n public abstract get height(): number;\n public abstract get format(): GL.Texture.Format;\n public abstract get dataType(): GL.Texture.DataType;\n public abstract get dataBytes(): Uint8Array | undefined;\n public get bytesUsed(): number { return this._bytesUsed; }\n public set bytesUsed(bytesUsed: number) {\n // assert(0 === this.bytesUsed);\n this._bytesUsed = bytesUsed;\n }\n\n /** Get the WebGLTexture for this TextureHandle. */\n public getHandle(): WebGLTexture | undefined { return this._glTexture; }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public abstract bind(_texUnit: TextureUnit): boolean;\n\n /** Bind this texture to a uniform sampler. */\n public abstract bindSampler(_uniform: UniformHandle, _unit: TextureUnit): void;\n\n public get isDisposed(): boolean { return this._glTexture === undefined; }\n\n public dispose() {\n if (!this.isDisposed) {\n System.instance.disposeTexture(this._glTexture!);\n this._glTexture = undefined;\n this.bytesUsed = 0;\n }\n }\n\n /** Create a 2D texture for use as a color attachment for rendering */\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return Texture2DHandle.createForAttachment(width, height, format, dataType);\n }\n\n /** Create a 2D texture to hold non-image data */\n public static createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return Texture2DHandle.createForData(width, height, data, wantPreserveData, wrapMode, format);\n }\n\n /** Create a 2D texture from a bitmap */\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBuffer(image, type);\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return Texture2DHandle.createForImage(image, type);\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBitmap(image, type);\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n return TextureCubeHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n }\n\n public static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n return Texture2DHandle.createForElement(id, imodel, type, format, onLoaded);\n }\n\n protected constructor(glTexture: WebGLTexture) {\n this._glTexture = glTexture;\n }\n\n /** For debugging purposes, open a new window containing this texture as an image. */\n public showDebugImage(): void {\n const gl = System.instance.context;\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.getHandle()!, 0);\n if (gl.FRAMEBUFFER_COMPLETE === gl.checkFramebufferStatus(gl.FRAMEBUFFER)) {\n const w = this.width;\n const h = this.height;\n const pixels = new Uint8Array(w * h * 4);\n gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n const buffer = ImageBuffer.create(pixels, ImageBufferFormat.Rgba, w);\n const url = imageBufferToPngDataUrl(buffer, false);\n openImageDataUrlInNewWindow(url!, \"Classifiers\");\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.deleteFramebuffer(fbo);\n }\n}\n\n/** @internal */\nexport class Texture2DHandle extends TextureHandle {\n private _width: number;\n private _height: number;\n private _format: GL.Texture.Format;\n private _dataType: GL.Texture.DataType;\n private _dataBytes?: Uint8Array;\n\n public get width(): number { return this._width; }\n public get height(): number { return this._height; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return this._dataBytes; }\n\n /** Bind specified texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTexture2d(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n Texture2DHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n Texture2DHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n /** Update the 2D texture contents. */\n public update(updater: Texture2DDataUpdater): boolean {\n if (0 === this.width || 0 === this.height || undefined === this._dataBytes || 0 === this._dataBytes.length) {\n assert(false);\n return false;\n }\n\n if (!updater.modified)\n return false;\n\n return this.replaceTextureData(this._dataBytes);\n }\n\n /** Replace the 2D texture contents. */\n public replaceTextureData(data: Texture2DData): boolean {\n assert((GL.Texture.DataType.Float === this._dataType) === (data instanceof Float32Array));\n\n const tex = this.getHandle()!;\n if (undefined === tex)\n return false;\n\n const gl = System.instance.context;\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Go through System to ensure we don't interfere with currently-bound textures!\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.width, this.height, this._format, this._dataType, data);\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n\n return true;\n }\n\n private static create(params: Texture2DCreateParams): Texture2DHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new Texture2DHandle(glTex, params) : undefined;\n }\n\n /** Create a texture for use as a color attachment for rendering */\n public static override createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return this.create(Texture2DCreateParams.createForAttachment(width, height, format, dataType));\n }\n\n /** Create a texture to hold non-image data */\n public static override createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return this.create(Texture2DCreateParams.createForData(width, height, data, wantPreserveData, wrapMode, format));\n }\n\n /** Create a texture from a bitmap */\n public static override createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n if (RenderTexture.Type.TileSection !== type && RenderTexture.Type.ThematicGradient !== type)\n assert(isPowerOfTwo(image.width) && isPowerOfTwo(image.height), \"###TODO: Resize image dimensions to powers-of-two if necessary\");\n\n return this.create(Texture2DCreateParams.createForImageBuffer(image, type));\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static override createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImage(image, type));\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static override createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImageBitmap(image, type));\n }\n\n private static _placeHolderTextureData = new Uint8Array([128, 128, 128, 255]);\n\n public static override createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n // set a placeholder texture while we wait for the external texture to load\n const handle = this.createForData(1, 1, this._placeHolderTextureData, undefined, undefined, GL.Texture.Format.Rgba);\n\n if (undefined === handle)\n return undefined;\n\n // kick off loading the texture from the backend\n ExternalTextureLoader.instance.loadTexture(handle, id, imodel, type, format, onLoaded);\n\n return handle;\n }\n\n public reload(params: Texture2DCreateParams) {\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n\n private constructor(glTexture: WebGLTexture, params: Texture2DCreateParams) {\n super(glTexture);\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport type ExternalTextureLoadCallback = (req: ExternalTextureRequest, data: TextureData) => void;\n\n/** @internal */\nexport interface ExternalTextureRequest {\n handle: Texture2DHandle;\n name: Id64String;\n imodel: IModelConnection;\n type: RenderTexture.Type;\n format: ImageSourceFormat;\n onLoaded?: ExternalTextureLoadCallback;\n}\n\n/** @internal */\ninterface TextureConvertRequest {\n req: ExternalTextureRequest;\n texData: TextureData;\n}\n\n/** @internal */\nexport class ExternalTextureLoader { /* currently exported for tests only */\n public static readonly instance = new ExternalTextureLoader(2);\n public readonly onTexturesLoaded = new BeEvent<() => void>();\n private readonly _maxActiveRequests: number;\n private _activeRequests: Array<ExternalTextureRequest> = [];\n private _pendingRequests: Array<ExternalTextureRequest> = [];\n private _convertRequests: Array<TextureConvertRequest> = [];\n private _convertPending = false;\n\n public get numActiveRequests() { return this._activeRequests.length; }\n public get numPendingRequests() { return this._pendingRequests.length; }\n public get maxActiveRequests() { return this._maxActiveRequests; }\n\n private constructor(maxActiveRequests: number) {\n this._maxActiveRequests = maxActiveRequests;\n }\n\n private async _nextRequest(prevReq: ExternalTextureRequest) {\n this._activeRequests.splice(this._activeRequests.indexOf(prevReq), 1);\n if (this._activeRequests.length < this._maxActiveRequests && this._pendingRequests.length > 0) {\n const req = this._pendingRequests.shift()!;\n await this._activateRequest(req);\n }\n if (this._activeRequests.length < 1 && this._pendingRequests.length < 1)\n this.onTexturesLoaded.raiseEvent();\n }\n\n private async _activateRequest(req: ExternalTextureRequest) {\n if (req.imodel.isClosed)\n return;\n\n this._activeRequests.push(req);\n\n try {\n if (!req.imodel.isClosed) {\n const maxTextureSize = System.instance.maxTexSizeAllow;\n const texData = await req.imodel.queryTextureData({ name: req.name, maxTextureSize });\n if (undefined !== texData) {\n const cnvReq = { req, texData };\n this._convertRequests.push(cnvReq);\n // _convertPending is used to prevent overlapping calls to _convertTexture (from overlapping calls to _activateRequest)\n // it has been put on the list, so if it doesn't get converted here it will get converted by the loop that is converting the current one\n do {\n if (!this._convertPending)\n await this._convertTexture();\n } while (!this._convertPending && this._convertRequests.length > 0);\n if (!req.imodel.isClosed) {\n IModelApp.tileAdmin.invalidateAllScenes();\n if (undefined !== req.onLoaded)\n req.onLoaded(req, texData);\n }\n }\n }\n } catch { }\n\n return this._nextRequest(req);\n }\n\n private async _convertTexture(): Promise<void> {\n this._convertPending = true;\n try {\n const cnvReq = this._convertRequests.shift();\n if (undefined !== cnvReq) {\n const imageSource = new ImageSource(cnvReq.texData.bytes, cnvReq.texData.format);\n if (System.instance.supportsCreateImageBitmap) {\n const blob = new Blob([imageSource.data], { type: getImageSourceMimeType(imageSource.format) });\n const image = await createImageBitmap(blob, 0, 0, cnvReq.texData.width, cnvReq.texData.height);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImageBitmap(image, cnvReq.req.type));\n }\n } else {\n const image = await imageElementFromImageSource(imageSource);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImage(image, cnvReq.req.type));\n }\n }\n }\n } catch { }\n this._convertPending = false;\n }\n\n private _requestExists(reqToCheck: ExternalTextureRequest) {\n for (const r of this._activeRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n for (const r of this._pendingRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n return false;\n }\n\n public loadTexture(handle: Texture2DHandle, name: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded?: ExternalTextureLoadCallback) {\n const req = { handle, name, imodel, type, format, onLoaded };\n if (this._requestExists(req))\n return;\n\n if (this._activeRequests.length + 1 > this._maxActiveRequests) {\n this._pendingRequests.push(req);\n } else\n this._activateRequest(req); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n}\n\n/** @internal */\nexport class TextureCubeHandle extends TextureHandle {\n private _dim: number; // Cubemap texture height and width must match. This must be the same for each of the six faces.\n private _format: GL.Texture.Format; // Format must be the same for each of the six faces.\n private _dataType: GL.Texture.DataType; // Type must be the same for each of the six faces.\n\n public get width(): number { return this._dim; }\n public get height(): number { return this._dim; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return undefined; }\n\n /** Bind specified cubemap texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTextureCubeMap(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n TextureCubeHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n TextureCubeHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n private static create(params: TextureCubeCreateParams): TextureHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new TextureCubeHandle(glTex, params) : undefined;\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static override createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n const params = TextureCubeCreateParams.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n return params !== undefined ? this.create(params) : undefined;\n }\n\n private constructor(glTexture: WebGLTexture, params: TextureCubeCreateParams) {\n super(glTexture);\n this._dim = params.dim;\n this._format = params.format;\n this._dataType = params.dataType;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport class Texture2DDataUpdater {\n public data: Uint8Array;\n public modified: boolean = false;\n\n public constructor(data: Uint8Array) { this.data = data; }\n\n public setByteAtIndex(index: number, byte: number) {\n assert(index < this.data.length);\n if (byte !== this.data[index]) {\n this.data[index] = byte;\n this.modified = true;\n }\n }\n\n public setOvrFlagsAtIndex(index: number, value: OvrFlags) {\n assert(index < this.data.length - 1);\n assert(value < 0xffff);\n this.setByteAtIndex(index, value & 0xff);\n this.setByteAtIndex(index + 1, (value & 0xff00) >> 8);\n }\n\n public getByteAtIndex(index: number): number {\n assert(index < this.data.length);\n return this.data[index];\n }\n\n public getOvrFlagsAtIndex(index: number): OvrFlags {\n const lo = this.getByteAtIndex(index);\n const hi = this.getByteAtIndex(index + 1);\n return lo | (hi << 8);\n }\n}\n"]}
@@ -10,6 +10,7 @@ exports.CesiumIonAssetProvider = void 0;
10
10
  * @internal
11
11
  */
12
12
  class CesiumIonAssetProvider {
13
+ static { this.osmBuildingId = "OSMBuildings"; }
13
14
  /** Return true if this is a supported url to this service provider */
14
15
  static isProviderUrl(url) {
15
16
  return url.includes("$CesiumIonAsset=");
@@ -31,5 +32,4 @@ class CesiumIonAssetProvider {
31
32
  }
32
33
  }
33
34
  exports.CesiumIonAssetProvider = CesiumIonAssetProvider;
34
- CesiumIonAssetProvider.osmBuildingId = "OSMBuildings";
35
35
  //# sourceMappingURL=CesiumAssetProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CesiumAssetProvider.js","sourceRoot":"","sources":["../../../src/tile/CesiumAssetProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;;GAGG;AACH,MAAa,sBAAsB;IAEjC,sEAAsE;IAC/D,MAAM,CAAC,aAAa,CAAC,GAAW;QACrC,OAAO,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IACD,gFAAgF;IACzE,MAAM,CAAC,cAAc,CAAC,GAAW;QACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACxC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,WAAW,GAAG,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAC1B,OAAO,SAAS,CAAC;QAEnB,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,KAAK,SAAS;YAClB,OAAO,SAAS,CAAC;QAEnB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;;AAtBH,wDAuBC;AAtBe,oCAAa,GAAC,cAAc,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/**\n * This class provide methods used to interpret url to a cesiumIon asset (RealityDataProvider.CesiumIonAsset)\n * @internal\n */\nexport class CesiumIonAssetProvider {\n public static osmBuildingId=\"OSMBuildings\";\n /** Return true if this is a supported url to this service provider */\n public static isProviderUrl(url: string): boolean {\n return url.includes(\"$CesiumIonAsset=\");\n }\n // TBD - Allow an object to override the URL and provide its own authentication.\n public static parseCesiumUrl(url: string): { id: number, key: string } | undefined {\n const cesiumSuffix = \"$CesiumIonAsset=\";\n const cesiumIndex = url.indexOf(cesiumSuffix);\n if (cesiumIndex < 0)\n return undefined;\n const cesiumIonString = url.slice(cesiumIndex + cesiumSuffix.length);\n const cesiumParts = cesiumIonString.split(\":\");\n if (cesiumParts.length !== 2)\n return undefined;\n\n const id = parseInt(cesiumParts[0], 10);\n if (id === undefined)\n return undefined;\n\n return { id, key: cesiumParts[1] };\n }\n}\n"]}
1
+ {"version":3,"file":"CesiumAssetProvider.js","sourceRoot":"","sources":["../../../src/tile/CesiumAssetProvider.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;;GAGG;AACH,MAAa,sBAAsB;aACnB,kBAAa,GAAC,cAAc,CAAC;IAC3C,sEAAsE;IAC/D,MAAM,CAAC,aAAa,CAAC,GAAW;QACrC,OAAO,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IACD,gFAAgF;IACzE,MAAM,CAAC,cAAc,CAAC,GAAW;QACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACxC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,WAAW,GAAG,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAC1B,OAAO,SAAS,CAAC;QAEnB,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,KAAK,SAAS;YAClB,OAAO,SAAS,CAAC;QAEnB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;;AAtBH,wDAuBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/**\n * This class provide methods used to interpret url to a cesiumIon asset (RealityDataProvider.CesiumIonAsset)\n * @internal\n */\nexport class CesiumIonAssetProvider {\n public static osmBuildingId=\"OSMBuildings\";\n /** Return true if this is a supported url to this service provider */\n public static isProviderUrl(url: string): boolean {\n return url.includes(\"$CesiumIonAsset=\");\n }\n // TBD - Allow an object to override the URL and provide its own authentication.\n public static parseCesiumUrl(url: string): { id: number, key: string } | undefined {\n const cesiumSuffix = \"$CesiumIonAsset=\";\n const cesiumIndex = url.indexOf(cesiumSuffix);\n if (cesiumIndex < 0)\n return undefined;\n const cesiumIonString = url.slice(cesiumIndex + cesiumSuffix.length);\n const cesiumParts = cesiumIonString.split(\":\");\n if (cesiumParts.length !== 2)\n return undefined;\n\n const id = parseInt(cesiumParts[0], 10);\n if (id === undefined)\n return undefined;\n\n return { id, key: cesiumParts[1] };\n }\n}\n"]}
@@ -14,6 +14,7 @@ const loggerCategory = "ArcGISTileMap";
14
14
  const nonVisibleChildren = [false, false, false, false];
15
15
  /** @internal */
16
16
  class ArcGISTileMap {
17
+ static { this.maxLod = 30; }
17
18
  // We want to query a tile map that covers an area all around the top-lef missing tile, we offset the top-left corner position of the tilemap.
18
19
  // We used to create a 32x32 tiles area around the missing tiles, but this was causing the tilemap top-left position
19
20
  // to fall outside the dataset bundle of the remote server, thus giving invalid response.
@@ -229,5 +230,4 @@ class ArcGISTileMap {
229
230
  }
230
231
  }
231
232
  exports.ArcGISTileMap = ArcGISTileMap;
232
- ArcGISTileMap.maxLod = 30;
233
233
  //# sourceMappingURL=ArcGISTileMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISTileMap.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGISTileMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, compareStrings, Dictionary, Logger } from \"@itwin/core-bentley\";\nimport { QuadId } from \"../internal\";\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\nconst loggerCategory = \"ArcGISTileMap\";\n\n/** @internal */\nexport type FetchFunction = (url: URL, options?: RequestInit) => Promise<Response>;\n\nconst nonVisibleChildren = [false, false, false, false];\n\n/** @internal */\nexport class ArcGISTileMap {\n\n // For similar reasons as the corner offset, we need to keep the tile map size not too big to avoid covering multiple bundles.\n public tileMapRequestSize = 8;\n private static maxLod = 30;\n\n // We want to query a tile map that covers an area all around the top-lef missing tile, we offset the top-left corner position of the tilemap.\n // We used to create a 32x32 tiles area around the missing tiles, but this was causing the tilemap top-left position\n // to fall outside the dataset bundle of the remote server, thus giving invalid response.\n public get tileMapOffset() {return (this.tileMapRequestSize * 0.5);}\n\n public fallbackTileMapRequestSize = 2;\n\n private _callQueues: Array<Promise<boolean[]>> | undefined;\n private _tilesCache = new Dictionary<string, boolean>((lhs, rhs) => compareStrings(lhs, rhs));\n private _restBaseUrl: string;\n private _fetchFunc: FetchFunction;\n private _settings: ImageMapLayerSettings;\n\n constructor(restBaseUrl: string, settings: ImageMapLayerSettings, fetchFunc: FetchFunction ){\n this._restBaseUrl = restBaseUrl;\n this._fetchFunc = fetchFunc;\n this._settings = settings;\n this._callQueues = new Array<Promise<boolean[]>>(ArcGISTileMap.maxLod).fill(Promise.resolve<boolean[]>(nonVisibleChildren));\n\n }\n protected async fetchTileMapFromServer(level: number, row: number, column: number, width: number, height: number): Promise<any> {\n const tmpUrl = `${this._restBaseUrl}/tilemap/${level}/${row}/${column}/${width}/${height}?f=json`;\n const response = await this._fetchFunc(new URL(tmpUrl));\n return response.json();\n }\n\n protected getAvailableTilesFromCache(tiles: QuadId[]): {allTilesFound: boolean, available: boolean[]} {\n let allTilesFound = true;\n\n // Check children visibility from cache\n const available = tiles.map((tileId) => {\n const avail = this._tilesCache.get(tileId.contentId);\n if (undefined === avail) {\n allTilesFound = false;\n }\n return avail ?? false;\n });\n\n return {allTilesFound, available};\n }\n\n public async getChildrenAvailability(childIds: QuadId[]): Promise<boolean[]> {\n if (!childIds.length)\n return [];\n\n // Before entering the queue for a backend request,\n // let check if cache doesn't already contain what we are looking for.\n const cacheInfo = this.getAvailableTilesFromCache(childIds);\n if (cacheInfo.allTilesFound) {\n\n if (cacheInfo.available.includes(false))\n return cacheInfo.available;\n\n return cacheInfo.available;\n }\n\n // If we never encountered this tile level before, then a tilemap request must be made to get tiles visibility.\n // However, we dont want several overlapping large tilemap request being made simultaneously for tiles on the same level.\n // To avoid this from happening, we 'serialize' async calls so that we wait until the first tilemap request has completed\n // before making another one.\n const childLevel = childIds[0].level+1;\n if (this._callQueues && childLevel < this._callQueues.length ) {\n const res = this._callQueues[childLevel].then(async () => {\n return this.getChildrenAvailabilityFromServer(childIds);\n });\n this._callQueues[childLevel] = res.catch(() => nonVisibleChildren);\n return res;\n } else {\n // We should not be in this case, probably because server info is missing LODs in the capabilities?!\n Logger.logWarning(loggerCategory, `Skipped request queue for child level ${childLevel}`);\n return this.getChildrenAvailabilityFromServer(childIds);\n }\n }\n\n private isCacheMissingTile(level: number, startRow: number, startColumn: number, endRow: number, endColumn: number) {\n let missingTileFound = false;\n\n if (endRow <= startRow || endColumn <= startColumn)\n return missingTileFound;\n\n for (let j = startColumn; j <= endColumn && !missingTileFound; j++) {\n for (let i = startRow; i<=endRow && !missingTileFound; i++) {\n if (j >= 0 && i >= 0) {\n const contentId = QuadId.getTileContentId(level, j, i);\n if (this._tilesCache.get(contentId) === undefined) {\n missingTileFound = true;\n }\n }\n }\n }\n return missingTileFound;\n }\n\n private collectTilesMissingFromCache( missingQueryTiles: QuadId[]) {\n const missingTiles: QuadId[] = [];\n for (const quad of missingQueryTiles) {\n const contentId = QuadId.getTileContentId(quad.level, quad.column, quad.row);\n const avail = this._tilesCache.get(contentId);\n if (avail === undefined)\n missingTiles.push(quad);\n\n }\n return missingTiles;\n }\n\n // Query tiles are tiles that we need to check availability\n // The array is assumed to be in in row major orientation, i.e.: [TileRow0Col0, TileRow0Col1, TileRow1Col0, TileRow1Col1,]\n public async fetchAndReadTilemap(queryTiles: QuadId[], reqWidth: number, reqHeight: number) {\n let available = queryTiles.map(()=>false);\n if (queryTiles.length === 0 ) {\n return available;\n }\n\n // console.log(`queryTiles: ${queryTiles.map((quad) => quad.contentId)}`);\n\n // Find the top-left most corner of the extent covering the query tiles.\n const getTopLeftCorner = (tiles: QuadId[]): {row: number|undefined, column: number|undefined} => {\n let row: number|undefined;\n let column: number|undefined;\n for (const quad of tiles) {\n if (row === undefined || quad.row <= row )\n row = quad.row;\n if (column === undefined || quad.column <= column) {\n column = quad.column ;\n }\n }\n return {row, column};\n };\n\n const level = queryTiles[0].level; // We assume all tiles to be on the same level\n\n let missingQueryTiles = this.collectTilesMissingFromCache(queryTiles);\n let gotAdjusted = false;\n let nbAttempt = 0; // Safety: We should never be making more requests than the number of queries tiles (otherwise something is wrong)\n while (missingQueryTiles.length > 0\n && (nbAttempt++ < queryTiles.length) ) {\n const tileMapTopLeft = getTopLeftCorner(missingQueryTiles);\n if (tileMapTopLeft.row === undefined || tileMapTopLeft.column === undefined)\n return available; // Should not occurs since missingQueryTiles is non empty\n\n let tileMapRow = tileMapTopLeft.row;\n let tileMapColumn = tileMapTopLeft.column;\n\n const logLocationOffset = (newRow: number, newCol: number) => `[Row:${newRow !== tileMapTopLeft.row ? `${tileMapTopLeft.row}->${newRow}` : `${newRow}`} Column:${newCol !== tileMapTopLeft.column ? `${tileMapTopLeft.column}->${newCol}` : `${newCol}`}]`;\n\n // Position the top-left missing tile in the middle of the tilemap; minimizing requests if sibling tiles are requested right after\n // If previous response got adjusted, don't try to optimize tile map location\n if (queryTiles.length < this.tileMapRequestSize && !gotAdjusted) {\n const tileMapOffset = this.tileMapOffset - Math.floor(Math.sqrt(queryTiles.length) * 0.5);\n const missingTileBufferSize = Math.ceil(tileMapOffset * 0.5);\n if (this.isCacheMissingTile(level, tileMapRow-missingTileBufferSize, tileMapColumn-missingTileBufferSize, tileMapRow-1, tileMapColumn-1)) {\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\n tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);\n Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n } else {\n const leftMissingTiles = this.isCacheMissingTile(level, tileMapRow, tileMapColumn-missingTileBufferSize, tileMapRow+missingTileBufferSize, tileMapColumn-1);\n const topMissingTiles = this.isCacheMissingTile(level, tileMapRow-missingTileBufferSize, tileMapColumn, tileMapRow-1, tileMapColumn+missingTileBufferSize);\n if (leftMissingTiles && topMissingTiles) {\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\n tileMapColumn = Math.max(tileMapColumn- tileMapOffset, 0);\n Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n } else if (leftMissingTiles) {\n tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);\n Logger.logTrace(loggerCategory, `Offset applied to location in left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n } else if (topMissingTiles) {\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\n Logger.logTrace(loggerCategory, `Offset applied to location in top direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n } else\n Logger.logTrace(loggerCategory, `No offset applied to location: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n }\n }\n\n const json = await this.fetchTileMapFromServer(level, tileMapRow, tileMapColumn, reqWidth, reqHeight);\n let tileMapWidth = reqWidth;\n let tileMapHeight = reqHeight;\n if (Array.isArray(json.data)) {\n // The response width and height might be different than the requested dimensions.\n // Ref: https://developers.arcgis.com/rest/services-reference/enterprise/tile-map.htm\n if (json.adjusted) {\n gotAdjusted = true;\n // If tilemap size got adjusted, I'm expecting to get adjusted size...\n // otherwise there is something really odd with this server.\n assert(json.location?.width !== undefined && json.location?.height !== undefined);\n if (json.location?.width !== undefined && json.location?.height !== undefined) {\n tileMapWidth = json.location?.width;\n tileMapHeight = json.location?.height;\n }\n }\n // Build cache from tile map response\n for (let j = 0; j < tileMapHeight; j++) {\n for (let i = 0; i < tileMapWidth; i++) {\n const avail = json.data[(j*tileMapWidth)+i] !== 0;\n const curColumn = tileMapColumn + i;\n const curRow = tileMapRow + j;\n this._tilesCache.set(QuadId.getTileContentId(level, curColumn, curRow), avail);\n }\n }\n\n // Collect tile missing from the cache\n // There are 2 reasons why the tile map response would not cover all the missing tiles:\n // 1. The requested tile map size is not large enough to cover all tiles\n // 2. The tile map size has been adjusted by the server (i.e. data bundle limits)\n missingQueryTiles = this.collectTilesMissingFromCache(missingQueryTiles);\n if (missingQueryTiles.length > 0)\n Logger.logTrace(loggerCategory, `There are ${missingQueryTiles.length} missing tiles from previous request`);\n } else {\n missingQueryTiles = [];\n // Mark all tilemap tiles to non-available in the cache too.\n for (let j = 0; j < tileMapWidth; j++) {\n for (let i = 0; i < tileMapHeight; i++) {\n this._tilesCache.set(QuadId.getTileContentId(level, tileMapColumn + i, tileMapRow + j), false);\n }\n }\n }\n } // end loop missing tiles\n\n if (nbAttempt > queryTiles.length) {\n Logger.logError(loggerCategory, `Request loop was terminated; unable to get missing tiles; `);\n }\n // Create final output array from cache\n available = queryTiles.map((quad)=>this._tilesCache.get(quad.contentId) ?? false);\n\n if (available.includes(false))\n return available;\n\n return available;\n }\n\n protected async getChildrenAvailabilityFromServer(childIds: QuadId[]): Promise<boolean[]> {\n\n let available;\n try {\n available = await this.fetchAndReadTilemap(childIds, this.tileMapRequestSize, this.tileMapRequestSize);\n } catch (err) {\n // if any error occurs, we assume tiles not to be visible\n Logger.logError(loggerCategory, `Error while fetching tile map data : ${err}`);\n available = childIds.map(()=>false);\n }\n\n return available;\n }\n}\n"]}
1
+ {"version":3,"file":"ArcGISTileMap.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGISTileMap.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAiF;AACjF,0CAAqC;AAErC,MAAM,cAAc,GAAG,eAAe,CAAC;AAKvC,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAExD,gBAAgB;AAChB,MAAa,aAAa;aAIT,WAAM,GAAG,EAAE,AAAL,CAAM;IAE3B,8IAA8I;IAC9I,oHAAoH;IACpH,yFAAyF;IACzF,IAAW,aAAa,KAAI,OAAO,CAAC,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC,CAAA,CAAC;IAUpE,YAAY,WAAmB,EAAE,QAA+B,EAAE,SAAwB;QAjB1F,8HAA8H;QACvH,uBAAkB,GAAG,CAAC,CAAC;QAQtB,+BAA0B,GAAG,CAAC,CAAC;QAG/B,gBAAW,GAAG,IAAI,yBAAU,CAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAA,6BAAc,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAM5F,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,KAAK,CAAqB,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAY,kBAAkB,CAAC,CAAC,CAAC;IAE9H,CAAC;IACS,KAAK,CAAC,sBAAsB,CAAC,KAAa,EAAE,GAAW,EAAE,MAAc,EAAE,KAAa,EAAE,MAAc;QAC9G,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,YAAY,KAAK,IAAI,GAAG,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,SAAS,CAAC;QAClG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAES,0BAA0B,CAAC,KAAe;QAClD,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,uCAAuC;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACxB,aAAa,GAAG,KAAK,CAAC;YACxB,CAAC;YACD,OAAO,KAAK,IAAI,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,OAAO,EAAC,aAAa,EAAE,SAAS,EAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,QAAkB;QACrD,IAAI,CAAC,QAAQ,CAAC,MAAM;YAClB,OAAO,EAAE,CAAC;QAEZ,mDAAmD;QACnD,sEAAsE;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YAE5B,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACrC,OAAO,SAAS,CAAC,SAAS,CAAC;YAE7B,OAAO,SAAS,CAAC,SAAS,CAAC;QAC7B,CAAC;QAED,+GAA+G;QAC/G,yHAAyH;QACzH,yHAAyH;QACzH,6BAA6B;QAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAG,CAAC;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACvD,OAAO,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC;YACnE,OAAO,GAAG,CAAC;QACb,CAAC;aAAM,CAAC;YACN,oGAAoG;YACpG,qBAAM,CAAC,UAAU,CAAC,cAAc,EAAE,yCAAyC,UAAU,EAAE,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAa,EAAE,QAAgB,EAAE,WAAmB,EAAE,MAAc,EAAE,SAAiB;QAChH,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,IAAI,MAAM,IAAI,QAAQ,IAAI,SAAS,IAAI,WAAW;YAChD,OAAO,gBAAgB,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,SAAS,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;YACnE,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,MAAM,SAAS,GAAG,iBAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACvD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;wBAClD,gBAAgB,GAAG,IAAI,CAAC;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,4BAA4B,CAAE,iBAA2B;QAC/D,MAAM,YAAY,GAAc,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,iBAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,KAAK,KAAK,SAAS;gBACrB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5B,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,2DAA2D;IAC3D,0HAA0H;IACnH,KAAK,CAAC,mBAAmB,CAAC,UAAoB,EAAE,QAAgB,EAAE,SAAiB;QACxF,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAE,EAAE,CAAA,KAAK,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAG,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,0EAA0E;QAE1E,wEAAwE;QACxE,MAAM,gBAAgB,GAAG,CAAC,KAAe,EAAqD,EAAE;YAC9F,IAAI,GAAqB,CAAC;YAC1B,IAAI,MAAwB,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG;oBACtC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;gBACjB,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;oBAClD,MAAM,GAAG,IAAI,CAAC,MAAM,CAAE;gBACxB,CAAC;YACH,CAAC;YACD,OAAO,EAAC,GAAG,EAAE,MAAM,EAAC,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,8CAA8C;QAEjF,IAAI,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,kHAAkH;QACrI,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC;eAC9B,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAAG,CAAC;YACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAC3D,IAAI,cAAc,CAAC,GAAG,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,KAAK,SAAS;gBACzE,OAAO,SAAS,CAAC,CAAG,yDAAyD;YAE/E,IAAI,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC;YACpC,IAAI,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC;YAE1C,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE,CAAE,QAAQ,MAAM,KAAK,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,WAAW,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC;YAE5P,kIAAkI;YAClI,6EAA6E;YAC7E,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,IAAI,CAAC,WAAW,EAAE,CAAC;gBAChE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC1F,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;gBAC7D,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAC,qBAAqB,EAAE,aAAa,GAAC,qBAAqB,EAAE,UAAU,GAAC,CAAC,EAAE,aAAa,GAAC,CAAC,CAAC,EAAE,CAAC;oBACzI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC;oBACrD,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC;oBAC3D,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,qDAAqD,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;gBACvI,CAAC;qBAAM,CAAC;oBACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,GAAC,qBAAqB,EAAE,UAAU,GAAC,qBAAqB,EAAE,aAAa,GAAC,CAAC,CAAC,CAAC;oBAC5J,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAC,qBAAqB,EAAE,aAAa,EAAE,UAAU,GAAC,CAAC,EAAE,aAAa,GAAC,qBAAqB,CAAC,CAAC;oBAC3J,IAAI,gBAAgB,IAAI,eAAe,EAAE,CAAC;wBACxC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC;wBACrD,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAE,aAAa,EAAE,CAAC,CAAC,CAAC;wBAC1D,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,qDAAqD,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;oBACvI,CAAC;yBAAM,IAAI,gBAAgB,EAAE,CAAC;wBAC5B,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC;wBAC3D,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,iDAAiD,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;oBACnI,CAAC;yBAAM,IAAI,eAAe,EAAG,CAAC;wBAC5B,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC;wBACrD,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,gDAAgD,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;oBAClI,CAAC;;wBACC,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,kCAAkC,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;gBACtH,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACtG,IAAI,YAAY,GAAG,QAAQ,CAAC;YAC5B,IAAI,aAAa,GAAG,SAAS,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,kFAAkF;gBAClF,qFAAqF;gBACrF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,WAAW,GAAG,IAAI,CAAC;oBACnB,sEAAsE;oBACtE,4DAA4D;oBAC5D,IAAA,qBAAM,EAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;oBAClF,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;wBAC9E,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;wBACpC,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;oBACxC,CAAC;gBACH,CAAC;gBACD,qCAAqC;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,YAAY,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAClD,MAAM,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC;wBACpC,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC;wBAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,iBAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;oBACjF,CAAC;gBACH,CAAC;gBAED,sCAAsC;gBACtC,uFAAuF;gBACvF,wEAAwE;gBACxE,iFAAiF;gBACjF,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;gBACzE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC;oBAC9B,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,aAAa,iBAAiB,CAAC,MAAM,sCAAsC,CAAC,CAAC;YACjH,CAAC;iBAAM,CAAC;gBACN,iBAAiB,GAAG,EAAE,CAAC;gBACvB,4DAA4D;gBAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;wBACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,iBAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oBACjG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAE,yBAAyB;QAE5B,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;YAClC,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,4DAA4D,CAAC,CAAC;QAChG,CAAC;QACD,uCAAuC;QACvC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAC,EAAE,CAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;QAElF,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3B,OAAO,SAAS,CAAC;QAEnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,KAAK,CAAC,iCAAiC,CAAC,QAAkB;QAElE,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACzG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yDAAyD;YACzD,qBAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,wCAAwC,GAAG,EAAE,CAAC,CAAC;YAC/E,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAE,EAAE,CAAA,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;;AAtPH,sCAuPC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, compareStrings, Dictionary, Logger } from \"@itwin/core-bentley\";\nimport { QuadId } from \"../internal\";\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\nconst loggerCategory = \"ArcGISTileMap\";\n\n/** @internal */\nexport type FetchFunction = (url: URL, options?: RequestInit) => Promise<Response>;\n\nconst nonVisibleChildren = [false, false, false, false];\n\n/** @internal */\nexport class ArcGISTileMap {\n\n // For similar reasons as the corner offset, we need to keep the tile map size not too big to avoid covering multiple bundles.\n public tileMapRequestSize = 8;\n private static maxLod = 30;\n\n // We want to query a tile map that covers an area all around the top-lef missing tile, we offset the top-left corner position of the tilemap.\n // We used to create a 32x32 tiles area around the missing tiles, but this was causing the tilemap top-left position\n // to fall outside the dataset bundle of the remote server, thus giving invalid response.\n public get tileMapOffset() {return (this.tileMapRequestSize * 0.5);}\n\n public fallbackTileMapRequestSize = 2;\n\n private _callQueues: Array<Promise<boolean[]>> | undefined;\n private _tilesCache = new Dictionary<string, boolean>((lhs, rhs) => compareStrings(lhs, rhs));\n private _restBaseUrl: string;\n private _fetchFunc: FetchFunction;\n private _settings: ImageMapLayerSettings;\n\n constructor(restBaseUrl: string, settings: ImageMapLayerSettings, fetchFunc: FetchFunction ){\n this._restBaseUrl = restBaseUrl;\n this._fetchFunc = fetchFunc;\n this._settings = settings;\n this._callQueues = new Array<Promise<boolean[]>>(ArcGISTileMap.maxLod).fill(Promise.resolve<boolean[]>(nonVisibleChildren));\n\n }\n protected async fetchTileMapFromServer(level: number, row: number, column: number, width: number, height: number): Promise<any> {\n const tmpUrl = `${this._restBaseUrl}/tilemap/${level}/${row}/${column}/${width}/${height}?f=json`;\n const response = await this._fetchFunc(new URL(tmpUrl));\n return response.json();\n }\n\n protected getAvailableTilesFromCache(tiles: QuadId[]): {allTilesFound: boolean, available: boolean[]} {\n let allTilesFound = true;\n\n // Check children visibility from cache\n const available = tiles.map((tileId) => {\n const avail = this._tilesCache.get(tileId.contentId);\n if (undefined === avail) {\n allTilesFound = false;\n }\n return avail ?? false;\n });\n\n return {allTilesFound, available};\n }\n\n public async getChildrenAvailability(childIds: QuadId[]): Promise<boolean[]> {\n if (!childIds.length)\n return [];\n\n // Before entering the queue for a backend request,\n // let check if cache doesn't already contain what we are looking for.\n const cacheInfo = this.getAvailableTilesFromCache(childIds);\n if (cacheInfo.allTilesFound) {\n\n if (cacheInfo.available.includes(false))\n return cacheInfo.available;\n\n return cacheInfo.available;\n }\n\n // If we never encountered this tile level before, then a tilemap request must be made to get tiles visibility.\n // However, we dont want several overlapping large tilemap request being made simultaneously for tiles on the same level.\n // To avoid this from happening, we 'serialize' async calls so that we wait until the first tilemap request has completed\n // before making another one.\n const childLevel = childIds[0].level+1;\n if (this._callQueues && childLevel < this._callQueues.length ) {\n const res = this._callQueues[childLevel].then(async () => {\n return this.getChildrenAvailabilityFromServer(childIds);\n });\n this._callQueues[childLevel] = res.catch(() => nonVisibleChildren);\n return res;\n } else {\n // We should not be in this case, probably because server info is missing LODs in the capabilities?!\n Logger.logWarning(loggerCategory, `Skipped request queue for child level ${childLevel}`);\n return this.getChildrenAvailabilityFromServer(childIds);\n }\n }\n\n private isCacheMissingTile(level: number, startRow: number, startColumn: number, endRow: number, endColumn: number) {\n let missingTileFound = false;\n\n if (endRow <= startRow || endColumn <= startColumn)\n return missingTileFound;\n\n for (let j = startColumn; j <= endColumn && !missingTileFound; j++) {\n for (let i = startRow; i<=endRow && !missingTileFound; i++) {\n if (j >= 0 && i >= 0) {\n const contentId = QuadId.getTileContentId(level, j, i);\n if (this._tilesCache.get(contentId) === undefined) {\n missingTileFound = true;\n }\n }\n }\n }\n return missingTileFound;\n }\n\n private collectTilesMissingFromCache( missingQueryTiles: QuadId[]) {\n const missingTiles: QuadId[] = [];\n for (const quad of missingQueryTiles) {\n const contentId = QuadId.getTileContentId(quad.level, quad.column, quad.row);\n const avail = this._tilesCache.get(contentId);\n if (avail === undefined)\n missingTiles.push(quad);\n\n }\n return missingTiles;\n }\n\n // Query tiles are tiles that we need to check availability\n // The array is assumed to be in in row major orientation, i.e.: [TileRow0Col0, TileRow0Col1, TileRow1Col0, TileRow1Col1,]\n public async fetchAndReadTilemap(queryTiles: QuadId[], reqWidth: number, reqHeight: number) {\n let available = queryTiles.map(()=>false);\n if (queryTiles.length === 0 ) {\n return available;\n }\n\n // console.log(`queryTiles: ${queryTiles.map((quad) => quad.contentId)}`);\n\n // Find the top-left most corner of the extent covering the query tiles.\n const getTopLeftCorner = (tiles: QuadId[]): {row: number|undefined, column: number|undefined} => {\n let row: number|undefined;\n let column: number|undefined;\n for (const quad of tiles) {\n if (row === undefined || quad.row <= row )\n row = quad.row;\n if (column === undefined || quad.column <= column) {\n column = quad.column ;\n }\n }\n return {row, column};\n };\n\n const level = queryTiles[0].level; // We assume all tiles to be on the same level\n\n let missingQueryTiles = this.collectTilesMissingFromCache(queryTiles);\n let gotAdjusted = false;\n let nbAttempt = 0; // Safety: We should never be making more requests than the number of queries tiles (otherwise something is wrong)\n while (missingQueryTiles.length > 0\n && (nbAttempt++ < queryTiles.length) ) {\n const tileMapTopLeft = getTopLeftCorner(missingQueryTiles);\n if (tileMapTopLeft.row === undefined || tileMapTopLeft.column === undefined)\n return available; // Should not occurs since missingQueryTiles is non empty\n\n let tileMapRow = tileMapTopLeft.row;\n let tileMapColumn = tileMapTopLeft.column;\n\n const logLocationOffset = (newRow: number, newCol: number) => `[Row:${newRow !== tileMapTopLeft.row ? `${tileMapTopLeft.row}->${newRow}` : `${newRow}`} Column:${newCol !== tileMapTopLeft.column ? `${tileMapTopLeft.column}->${newCol}` : `${newCol}`}]`;\n\n // Position the top-left missing tile in the middle of the tilemap; minimizing requests if sibling tiles are requested right after\n // If previous response got adjusted, don't try to optimize tile map location\n if (queryTiles.length < this.tileMapRequestSize && !gotAdjusted) {\n const tileMapOffset = this.tileMapOffset - Math.floor(Math.sqrt(queryTiles.length) * 0.5);\n const missingTileBufferSize = Math.ceil(tileMapOffset * 0.5);\n if (this.isCacheMissingTile(level, tileMapRow-missingTileBufferSize, tileMapColumn-missingTileBufferSize, tileMapRow-1, tileMapColumn-1)) {\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\n tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);\n Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n } else {\n const leftMissingTiles = this.isCacheMissingTile(level, tileMapRow, tileMapColumn-missingTileBufferSize, tileMapRow+missingTileBufferSize, tileMapColumn-1);\n const topMissingTiles = this.isCacheMissingTile(level, tileMapRow-missingTileBufferSize, tileMapColumn, tileMapRow-1, tileMapColumn+missingTileBufferSize);\n if (leftMissingTiles && topMissingTiles) {\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\n tileMapColumn = Math.max(tileMapColumn- tileMapOffset, 0);\n Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n } else if (leftMissingTiles) {\n tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);\n Logger.logTrace(loggerCategory, `Offset applied to location in left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n } else if (topMissingTiles) {\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\n Logger.logTrace(loggerCategory, `Offset applied to location in top direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n } else\n Logger.logTrace(loggerCategory, `No offset applied to location: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\n }\n }\n\n const json = await this.fetchTileMapFromServer(level, tileMapRow, tileMapColumn, reqWidth, reqHeight);\n let tileMapWidth = reqWidth;\n let tileMapHeight = reqHeight;\n if (Array.isArray(json.data)) {\n // The response width and height might be different than the requested dimensions.\n // Ref: https://developers.arcgis.com/rest/services-reference/enterprise/tile-map.htm\n if (json.adjusted) {\n gotAdjusted = true;\n // If tilemap size got adjusted, I'm expecting to get adjusted size...\n // otherwise there is something really odd with this server.\n assert(json.location?.width !== undefined && json.location?.height !== undefined);\n if (json.location?.width !== undefined && json.location?.height !== undefined) {\n tileMapWidth = json.location?.width;\n tileMapHeight = json.location?.height;\n }\n }\n // Build cache from tile map response\n for (let j = 0; j < tileMapHeight; j++) {\n for (let i = 0; i < tileMapWidth; i++) {\n const avail = json.data[(j*tileMapWidth)+i] !== 0;\n const curColumn = tileMapColumn + i;\n const curRow = tileMapRow + j;\n this._tilesCache.set(QuadId.getTileContentId(level, curColumn, curRow), avail);\n }\n }\n\n // Collect tile missing from the cache\n // There are 2 reasons why the tile map response would not cover all the missing tiles:\n // 1. The requested tile map size is not large enough to cover all tiles\n // 2. The tile map size has been adjusted by the server (i.e. data bundle limits)\n missingQueryTiles = this.collectTilesMissingFromCache(missingQueryTiles);\n if (missingQueryTiles.length > 0)\n Logger.logTrace(loggerCategory, `There are ${missingQueryTiles.length} missing tiles from previous request`);\n } else {\n missingQueryTiles = [];\n // Mark all tilemap tiles to non-available in the cache too.\n for (let j = 0; j < tileMapWidth; j++) {\n for (let i = 0; i < tileMapHeight; i++) {\n this._tilesCache.set(QuadId.getTileContentId(level, tileMapColumn + i, tileMapRow + j), false);\n }\n }\n }\n } // end loop missing tiles\n\n if (nbAttempt > queryTiles.length) {\n Logger.logError(loggerCategory, `Request loop was terminated; unable to get missing tiles; `);\n }\n // Create final output array from cache\n available = queryTiles.map((quad)=>this._tilesCache.get(quad.contentId) ?? false);\n\n if (available.includes(false))\n return available;\n\n return available;\n }\n\n protected async getChildrenAvailabilityFromServer(childIds: QuadId[]): Promise<boolean[]> {\n\n let available;\n try {\n available = await this.fetchAndReadTilemap(childIds, this.tileMapRequestSize, this.tileMapRequestSize);\n } catch (err) {\n // if any error occurs, we assume tiles not to be visible\n Logger.logError(loggerCategory, `Error while fetching tile map data : ${err}`);\n available = childIds.map(()=>false);\n }\n\n return available;\n }\n}\n"]}
@@ -189,6 +189,7 @@ class ArcGisUtilities {
189
189
  const zeroLod = tileInfo.lods[0];
190
190
  return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;
191
191
  }
192
+ static { this._serviceCache = new Map(); }
192
193
  /**
193
194
  * Fetches an ArcGIS service metadata, and returns its JSON representation.
194
195
  * If an access client has been configured for the specified formatId,
@@ -351,5 +352,4 @@ class ArcGisUtilities {
351
352
  }
352
353
  }
353
354
  exports.ArcGisUtilities = ArcGisUtilities;
354
- ArcGisUtilities._serviceCache = new Map();
355
355
  //# sourceMappingURL=ArcGisUtilities.js.map