@itwin/core-frontend 3.1.0-dev.8 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. package/CHANGELOG.md +217 -35
  2. package/lib/cjs/AccuSnap.js +2 -2
  3. package/lib/cjs/AccuSnap.js.map +1 -1
  4. package/lib/cjs/ApproximateTerrainHeights.d.ts +1 -1
  5. package/lib/cjs/ApproximateTerrainHeights.d.ts.map +1 -1
  6. package/lib/cjs/ApproximateTerrainHeights.js +22 -8
  7. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  8. package/lib/cjs/ApproximateTerrainHeightsProps.d.ts +12 -0
  9. package/lib/cjs/ApproximateTerrainHeightsProps.d.ts.map +1 -0
  10. package/lib/cjs/ApproximateTerrainHeightsProps.js +13 -0
  11. package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -0
  12. package/lib/cjs/CategorySelectorState.js +1 -1
  13. package/lib/cjs/CategorySelectorState.js.map +1 -1
  14. package/lib/cjs/DisplayStyleState.d.ts +4 -3
  15. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  16. package/lib/cjs/DisplayStyleState.js +32 -8
  17. package/lib/cjs/DisplayStyleState.js.map +1 -1
  18. package/lib/cjs/DrawingViewState.d.ts.map +1 -1
  19. package/lib/cjs/DrawingViewState.js +6 -5
  20. package/lib/cjs/DrawingViewState.js.map +1 -1
  21. package/lib/cjs/FrontendLoggerCategory.d.ts +3 -1
  22. package/lib/cjs/FrontendLoggerCategory.d.ts.map +1 -1
  23. package/lib/cjs/FrontendLoggerCategory.js +2 -0
  24. package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
  25. package/lib/cjs/IModelApp.d.ts +10 -4
  26. package/lib/cjs/IModelApp.d.ts.map +1 -1
  27. package/lib/cjs/IModelApp.js +26 -13
  28. package/lib/cjs/IModelApp.js.map +1 -1
  29. package/lib/cjs/IModelConnection.d.ts +3 -2
  30. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  31. package/lib/cjs/IModelConnection.js +6 -4
  32. package/lib/cjs/IModelConnection.js.map +1 -1
  33. package/lib/cjs/ImageUtil.d.ts.map +1 -1
  34. package/lib/cjs/ImageUtil.js +8 -14
  35. package/lib/cjs/ImageUtil.js.map +1 -1
  36. package/lib/cjs/LocalhostIpcApp.d.ts +2 -0
  37. package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
  38. package/lib/cjs/LocalhostIpcApp.js +10 -4
  39. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  40. package/lib/cjs/RealityDataSource.d.ts +60 -14
  41. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  42. package/lib/cjs/RealityDataSource.js +36 -235
  43. package/lib/cjs/RealityDataSource.js.map +1 -1
  44. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
  45. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
  46. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +166 -0
  47. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
  48. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +83 -0
  49. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -0
  50. package/lib/cjs/RealityDataSourceContextShareImpl.js +234 -0
  51. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -0
  52. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
  53. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
  54. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +135 -0
  55. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -0
  56. package/lib/cjs/SheetViewState.js +4 -0
  57. package/lib/cjs/SheetViewState.js.map +1 -1
  58. package/lib/cjs/ViewState.d.ts +8 -0
  59. package/lib/cjs/ViewState.d.ts.map +1 -1
  60. package/lib/cjs/ViewState.js +1 -1
  61. package/lib/cjs/ViewState.js.map +1 -1
  62. package/lib/cjs/Viewport.d.ts +30 -12
  63. package/lib/cjs/Viewport.d.ts.map +1 -1
  64. package/lib/cjs/Viewport.js +43 -1
  65. package/lib/cjs/Viewport.js.map +1 -1
  66. package/lib/cjs/core-frontend.d.ts +6 -4
  67. package/lib/cjs/core-frontend.d.ts.map +1 -1
  68. package/lib/cjs/core-frontend.js +6 -4
  69. package/lib/cjs/core-frontend.js.map +1 -1
  70. package/lib/cjs/extension/Extension.d.ts +48 -0
  71. package/lib/cjs/extension/Extension.d.ts.map +1 -0
  72. package/lib/cjs/extension/Extension.js +18 -0
  73. package/lib/cjs/extension/Extension.js.map +1 -0
  74. package/lib/cjs/extension/ExtensionAdmin.d.ts +64 -0
  75. package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -0
  76. package/lib/cjs/extension/ExtensionAdmin.js +106 -0
  77. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -0
  78. package/lib/cjs/extension/ExtensionHost.d.ts +23 -0
  79. package/lib/cjs/extension/ExtensionHost.d.ts.map +1 -0
  80. package/lib/cjs/extension/ExtensionHost.js +26 -0
  81. package/lib/cjs/extension/ExtensionHost.js.map +1 -0
  82. package/lib/cjs/extension/ExtensionImpl.d.ts +21 -0
  83. package/lib/cjs/extension/ExtensionImpl.d.ts.map +1 -0
  84. package/lib/cjs/extension/ExtensionImpl.js +45 -0
  85. package/lib/cjs/extension/ExtensionImpl.js.map +1 -0
  86. package/lib/cjs/extension/ExtensionLoader.d.ts +26 -0
  87. package/lib/cjs/extension/ExtensionLoader.d.ts.map +1 -0
  88. package/lib/cjs/extension/ExtensionLoader.js +10 -0
  89. package/lib/cjs/extension/ExtensionLoader.js.map +1 -0
  90. package/lib/cjs/extension/ExtensionRuntime.d.ts +5 -0
  91. package/lib/cjs/extension/ExtensionRuntime.d.ts.map +1 -0
  92. package/lib/cjs/extension/ExtensionRuntime.js +86 -0
  93. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -0
  94. package/lib/cjs/extension/extensions.d.ts +19 -0
  95. package/lib/cjs/extension/extensions.d.ts.map +1 -0
  96. package/lib/cjs/extension/extensions.js +36 -0
  97. package/lib/cjs/extension/extensions.js.map +1 -0
  98. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
  99. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  100. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +48 -44
  101. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  102. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +90 -80
  103. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  104. package/lib/cjs/quantity-formatting/QuantityFormatter.js +85 -45
  105. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  106. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
  107. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
  108. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js +32 -0
  109. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
  110. package/lib/cjs/quantity-formatting/UnitsData.d.ts +11 -0
  111. package/lib/cjs/quantity-formatting/UnitsData.d.ts.map +1 -0
  112. package/lib/cjs/quantity-formatting/UnitsData.js +59 -0
  113. package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -0
  114. package/lib/cjs/render/GraphicBranch.d.ts +2 -0
  115. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  116. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  117. package/lib/cjs/render/RenderPlanarClassifier.d.ts +1 -1
  118. package/lib/cjs/render/RenderPlanarClassifier.d.ts.map +1 -1
  119. package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
  120. package/lib/cjs/render/RenderSystem.d.ts +12 -7
  121. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  122. package/lib/cjs/render/RenderSystem.js +8 -5
  123. package/lib/cjs/render/RenderSystem.js.map +1 -1
  124. package/lib/cjs/render/RenderTarget.d.ts +4 -4
  125. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  126. package/lib/cjs/render/RenderTarget.js.map +1 -1
  127. package/lib/cjs/render/Scene.d.ts.map +1 -1
  128. package/lib/cjs/render/Scene.js.map +1 -1
  129. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
  130. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
  131. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
  132. package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
  133. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  134. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  135. package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
  136. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/BranchState.js +5 -3
  138. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  139. package/lib/cjs/render/webgl/DrawCommand.js +1 -1
  140. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  141. package/lib/cjs/render/webgl/Graphic.d.ts +5 -3
  142. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/Graphic.js +7 -2
  144. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  145. package/lib/cjs/render/webgl/PlanarClassifier.d.ts +4 -1
  146. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  147. package/lib/cjs/render/webgl/PlanarClassifier.js +22 -9
  148. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  149. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts +2 -2
  150. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  151. package/lib/cjs/render/webgl/PlanarTextureProjection.js +5 -3
  152. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  153. package/lib/cjs/render/webgl/RealityMesh.d.ts +31 -11
  154. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  155. package/lib/cjs/render/webgl/RealityMesh.js +155 -52
  156. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  157. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  158. package/lib/cjs/render/webgl/RenderCommands.js +4 -0
  159. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  160. package/lib/cjs/render/webgl/SceneCompositor.d.ts +3 -0
  161. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  162. package/lib/cjs/render/webgl/SceneCompositor.js +45 -19
  163. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  164. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -0
  165. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  166. package/lib/cjs/render/webgl/ShaderProgram.js +1 -0
  167. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  168. package/lib/cjs/render/webgl/System.d.ts +10 -10
  169. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  170. package/lib/cjs/render/webgl/System.js +5 -5
  171. package/lib/cjs/render/webgl/System.js.map +1 -1
  172. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  173. package/lib/cjs/render/webgl/Target.js.map +1 -1
  174. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +1 -1
  175. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  176. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  177. package/lib/cjs/render/webgl/glsl/RealityMesh.js +102 -27
  178. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  179. package/lib/cjs/tile/ClassifierTileTree.d.ts +4 -2
  180. package/lib/cjs/tile/ClassifierTileTree.d.ts.map +1 -1
  181. package/lib/cjs/tile/ClassifierTileTree.js +31 -16
  182. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  183. package/lib/cjs/tile/GltfReader.d.ts +22 -3
  184. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  185. package/lib/cjs/tile/GltfReader.js +224 -40
  186. package/lib/cjs/tile/GltfReader.js.map +1 -1
  187. package/lib/cjs/tile/IModelTileRequestChannels.d.ts +3 -3
  188. package/lib/cjs/tile/IModelTileRequestChannels.d.ts.map +1 -1
  189. package/lib/cjs/tile/IModelTileRequestChannels.js +7 -11
  190. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  191. package/lib/cjs/tile/OPCFormatInterpreter.d.ts +22 -0
  192. package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -0
  193. package/lib/cjs/tile/OPCFormatInterpreter.js +92 -0
  194. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -0
  195. package/lib/cjs/tile/PntsReader.d.ts +1 -1
  196. package/lib/cjs/tile/PntsReader.d.ts.map +1 -1
  197. package/lib/cjs/tile/PntsReader.js +170 -36
  198. package/lib/cjs/tile/PntsReader.js.map +1 -1
  199. package/lib/cjs/tile/PrimaryTileTree.d.ts +18 -2
  200. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  201. package/lib/cjs/tile/PrimaryTileTree.js +53 -2
  202. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  203. package/lib/cjs/tile/RealityModelTileTree.d.ts +24 -3
  204. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  205. package/lib/cjs/tile/RealityModelTileTree.js +36 -11
  206. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  207. package/lib/cjs/tile/RealityTile.d.ts +16 -2
  208. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  209. package/lib/cjs/tile/RealityTile.js +32 -0
  210. package/lib/cjs/tile/RealityTile.js.map +1 -1
  211. package/lib/cjs/tile/RealityTileDrawArgs.d.ts +4 -1
  212. package/lib/cjs/tile/RealityTileDrawArgs.d.ts.map +1 -1
  213. package/lib/cjs/tile/RealityTileDrawArgs.js +3 -1
  214. package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
  215. package/lib/cjs/tile/RealityTileLoader.d.ts +7 -4
  216. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  217. package/lib/cjs/tile/RealityTileLoader.js +19 -5
  218. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  219. package/lib/cjs/tile/RealityTileTree.d.ts +4 -1
  220. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  221. package/lib/cjs/tile/RealityTileTree.js +11 -3
  222. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  223. package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
  224. package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
  225. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +179 -0
  226. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -0
  227. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  228. package/lib/cjs/tile/TileAdmin.js +0 -5
  229. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  230. package/lib/cjs/tile/TileDrawArgs.d.ts +2 -0
  231. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  232. package/lib/cjs/tile/TileDrawArgs.js +5 -0
  233. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  234. package/lib/cjs/tile/TileGeometryCollector.d.ts +80 -0
  235. package/lib/cjs/tile/TileGeometryCollector.d.ts.map +1 -0
  236. package/lib/cjs/tile/TileGeometryCollector.js +71 -0
  237. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -0
  238. package/lib/cjs/tile/TileRequestChannels.d.ts +0 -4
  239. package/lib/cjs/tile/TileRequestChannels.d.ts.map +1 -1
  240. package/lib/cjs/tile/TileRequestChannels.js +1 -6
  241. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  242. package/lib/cjs/tile/TileTree.d.ts +7 -1
  243. package/lib/cjs/tile/TileTree.d.ts.map +1 -1
  244. package/lib/cjs/tile/TileTree.js +7 -0
  245. package/lib/cjs/tile/TileTree.js.map +1 -1
  246. package/lib/cjs/tile/TileTreeReference.d.ts +26 -1
  247. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  248. package/lib/cjs/tile/TileTreeReference.js +40 -0
  249. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  250. package/lib/cjs/tile/internal.d.ts +4 -0
  251. package/lib/cjs/tile/internal.d.ts.map +1 -1
  252. package/lib/cjs/tile/internal.js +4 -0
  253. package/lib/cjs/tile/internal.js.map +1 -1
  254. package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -2
  255. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  256. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +5 -3
  257. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  258. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +45 -12
  259. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  260. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +2 -2
  261. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  262. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  263. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
  264. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  265. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  266. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +2 -2
  267. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  268. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +4 -3
  269. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  270. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
  271. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
  272. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  273. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -3
  274. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  275. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +13 -11
  276. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  277. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
  278. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  279. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  280. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -3
  281. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  282. package/lib/cjs/tile/map/ImageryTileTree.js +4 -3
  283. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  284. package/lib/cjs/tile/map/MapFeatureInfo.d.ts +26 -0
  285. package/lib/cjs/tile/map/MapFeatureInfo.d.ts.map +1 -0
  286. package/lib/cjs/tile/map/MapFeatureInfo.js +19 -0
  287. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -0
  288. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +4 -4
  289. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  290. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  291. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +3 -3
  292. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  293. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  294. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +5 -4
  295. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  296. package/lib/cjs/tile/map/MapLayerImageryProvider.js +5 -1
  297. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  298. package/lib/cjs/tile/map/MapLayerSources.d.ts +2 -2
  299. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  300. package/lib/cjs/tile/map/MapLayerSources.js +6 -4
  301. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  302. package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts +10 -2
  303. package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
  304. package/lib/cjs/tile/map/MapLayerTileTreeReference.js +26 -3
  305. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  306. package/lib/cjs/tile/map/MapTile.d.ts +12 -10
  307. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  308. package/lib/cjs/tile/map/MapTile.js +60 -39
  309. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  310. package/lib/cjs/tile/map/MapTileLoader.d.ts +2 -1
  311. package/lib/cjs/tile/map/MapTileLoader.d.ts.map +1 -1
  312. package/lib/cjs/tile/map/MapTileLoader.js +4 -1
  313. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  314. package/lib/cjs/tile/map/MapTileTree.d.ts +18 -8
  315. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  316. package/lib/cjs/tile/map/MapTileTree.js +150 -63
  317. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  318. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  319. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +1 -1
  320. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  321. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
  322. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  323. package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
  324. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  325. package/lib/cjs/tools/ToolAdmin.d.ts +2 -3
  326. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  327. package/lib/cjs/tools/ToolAdmin.js +7 -2
  328. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  329. package/lib/cjs/tools/ViewTool.d.ts +4 -4
  330. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  331. package/lib/cjs/tools/ViewTool.js +1 -1
  332. package/lib/cjs/tools/ViewTool.js.map +1 -1
  333. package/lib/esm/AccuSnap.js +2 -2
  334. package/lib/esm/AccuSnap.js.map +1 -1
  335. package/lib/esm/ApproximateTerrainHeights.d.ts +1 -1
  336. package/lib/esm/ApproximateTerrainHeights.d.ts.map +1 -1
  337. package/lib/esm/ApproximateTerrainHeights.js +3 -8
  338. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  339. package/lib/esm/ApproximateTerrainHeightsProps.d.ts +12 -0
  340. package/lib/esm/ApproximateTerrainHeightsProps.d.ts.map +1 -0
  341. package/lib/esm/ApproximateTerrainHeightsProps.js +10 -0
  342. package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -0
  343. package/lib/esm/CategorySelectorState.js +1 -1
  344. package/lib/esm/CategorySelectorState.js.map +1 -1
  345. package/lib/esm/DisplayStyleState.d.ts +4 -3
  346. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  347. package/lib/esm/DisplayStyleState.js +34 -10
  348. package/lib/esm/DisplayStyleState.js.map +1 -1
  349. package/lib/esm/DrawingViewState.d.ts.map +1 -1
  350. package/lib/esm/DrawingViewState.js +6 -5
  351. package/lib/esm/DrawingViewState.js.map +1 -1
  352. package/lib/esm/FrontendLoggerCategory.d.ts +3 -1
  353. package/lib/esm/FrontendLoggerCategory.d.ts.map +1 -1
  354. package/lib/esm/FrontendLoggerCategory.js +2 -0
  355. package/lib/esm/FrontendLoggerCategory.js.map +1 -1
  356. package/lib/esm/IModelApp.d.ts +10 -4
  357. package/lib/esm/IModelApp.d.ts.map +1 -1
  358. package/lib/esm/IModelApp.js +25 -12
  359. package/lib/esm/IModelApp.js.map +1 -1
  360. package/lib/esm/IModelConnection.d.ts +3 -2
  361. package/lib/esm/IModelConnection.d.ts.map +1 -1
  362. package/lib/esm/IModelConnection.js +7 -5
  363. package/lib/esm/IModelConnection.js.map +1 -1
  364. package/lib/esm/ImageUtil.d.ts.map +1 -1
  365. package/lib/esm/ImageUtil.js +8 -14
  366. package/lib/esm/ImageUtil.js.map +1 -1
  367. package/lib/esm/LocalhostIpcApp.d.ts +2 -0
  368. package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
  369. package/lib/esm/LocalhostIpcApp.js +10 -4
  370. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  371. package/lib/esm/RealityDataSource.d.ts +60 -14
  372. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  373. package/lib/esm/RealityDataSource.js +37 -237
  374. package/lib/esm/RealityDataSource.js.map +1 -1
  375. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
  376. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
  377. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +162 -0
  378. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
  379. package/lib/esm/RealityDataSourceContextShareImpl.d.ts +83 -0
  380. package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -0
  381. package/lib/esm/RealityDataSourceContextShareImpl.js +230 -0
  382. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -0
  383. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
  384. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
  385. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +131 -0
  386. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -0
  387. package/lib/esm/SheetViewState.js +4 -0
  388. package/lib/esm/SheetViewState.js.map +1 -1
  389. package/lib/esm/ViewState.d.ts +8 -0
  390. package/lib/esm/ViewState.d.ts.map +1 -1
  391. package/lib/esm/ViewState.js +1 -1
  392. package/lib/esm/ViewState.js.map +1 -1
  393. package/lib/esm/Viewport.d.ts +30 -12
  394. package/lib/esm/Viewport.d.ts.map +1 -1
  395. package/lib/esm/Viewport.js +43 -1
  396. package/lib/esm/Viewport.js.map +1 -1
  397. package/lib/esm/core-frontend.d.ts +6 -4
  398. package/lib/esm/core-frontend.d.ts.map +1 -1
  399. package/lib/esm/core-frontend.js +6 -4
  400. package/lib/esm/core-frontend.js.map +1 -1
  401. package/lib/esm/extension/Extension.d.ts +48 -0
  402. package/lib/esm/extension/Extension.d.ts.map +1 -0
  403. package/lib/esm/extension/Extension.js +15 -0
  404. package/lib/esm/extension/Extension.js.map +1 -0
  405. package/lib/esm/extension/ExtensionAdmin.d.ts +64 -0
  406. package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -0
  407. package/lib/esm/extension/ExtensionAdmin.js +102 -0
  408. package/lib/esm/extension/ExtensionAdmin.js.map +1 -0
  409. package/lib/esm/extension/ExtensionHost.d.ts +23 -0
  410. package/lib/esm/extension/ExtensionHost.d.ts.map +1 -0
  411. package/lib/esm/extension/ExtensionHost.js +22 -0
  412. package/lib/esm/extension/ExtensionHost.js.map +1 -0
  413. package/lib/esm/extension/ExtensionImpl.d.ts +21 -0
  414. package/lib/esm/extension/ExtensionImpl.d.ts.map +1 -0
  415. package/lib/esm/extension/ExtensionImpl.js +40 -0
  416. package/lib/esm/extension/ExtensionImpl.js.map +1 -0
  417. package/lib/esm/extension/ExtensionLoader.d.ts +26 -0
  418. package/lib/esm/extension/ExtensionLoader.d.ts.map +1 -0
  419. package/lib/esm/extension/ExtensionLoader.js +9 -0
  420. package/lib/esm/extension/ExtensionLoader.js.map +1 -0
  421. package/lib/esm/extension/ExtensionRuntime.d.ts +5 -0
  422. package/lib/esm/extension/ExtensionRuntime.d.ts.map +1 -0
  423. package/lib/esm/extension/ExtensionRuntime.js +84 -0
  424. package/lib/esm/extension/ExtensionRuntime.js.map +1 -0
  425. package/lib/esm/extension/extensions.d.ts +19 -0
  426. package/lib/esm/extension/extensions.d.ts.map +1 -0
  427. package/lib/esm/extension/extensions.js +24 -0
  428. package/lib/esm/extension/extensions.js.map +1 -0
  429. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
  430. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  431. package/lib/esm/quantity-formatting/BasicUnitsProvider.js +48 -44
  432. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  433. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +90 -80
  434. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  435. package/lib/esm/quantity-formatting/QuantityFormatter.js +85 -42
  436. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  437. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
  438. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
  439. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js +26 -0
  440. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
  441. package/lib/esm/quantity-formatting/UnitsData.d.ts +11 -0
  442. package/lib/esm/quantity-formatting/UnitsData.d.ts.map +1 -0
  443. package/lib/esm/quantity-formatting/UnitsData.js +56 -0
  444. package/lib/esm/quantity-formatting/UnitsData.js.map +1 -0
  445. package/lib/esm/render/GraphicBranch.d.ts +2 -0
  446. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  447. package/lib/esm/render/GraphicBranch.js.map +1 -1
  448. package/lib/esm/render/RenderPlanarClassifier.d.ts +1 -1
  449. package/lib/esm/render/RenderPlanarClassifier.d.ts.map +1 -1
  450. package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
  451. package/lib/esm/render/RenderSystem.d.ts +12 -7
  452. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  453. package/lib/esm/render/RenderSystem.js +6 -3
  454. package/lib/esm/render/RenderSystem.js.map +1 -1
  455. package/lib/esm/render/RenderTarget.d.ts +4 -4
  456. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  457. package/lib/esm/render/RenderTarget.js.map +1 -1
  458. package/lib/esm/render/Scene.d.ts.map +1 -1
  459. package/lib/esm/render/Scene.js.map +1 -1
  460. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
  461. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
  462. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
  463. package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
  464. package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
  465. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  466. package/lib/esm/render/webgl/BranchState.d.ts +2 -0
  467. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  468. package/lib/esm/render/webgl/BranchState.js +5 -3
  469. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  470. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  471. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  472. package/lib/esm/render/webgl/Graphic.d.ts +5 -3
  473. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  474. package/lib/esm/render/webgl/Graphic.js +7 -2
  475. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  476. package/lib/esm/render/webgl/PlanarClassifier.d.ts +4 -1
  477. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  478. package/lib/esm/render/webgl/PlanarClassifier.js +22 -9
  479. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  480. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts +2 -2
  481. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  482. package/lib/esm/render/webgl/PlanarTextureProjection.js +5 -3
  483. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  484. package/lib/esm/render/webgl/RealityMesh.d.ts +31 -11
  485. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  486. package/lib/esm/render/webgl/RealityMesh.js +155 -52
  487. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  488. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  489. package/lib/esm/render/webgl/RenderCommands.js +4 -0
  490. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  491. package/lib/esm/render/webgl/SceneCompositor.d.ts +3 -0
  492. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  493. package/lib/esm/render/webgl/SceneCompositor.js +45 -19
  494. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  495. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -0
  496. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  497. package/lib/esm/render/webgl/ShaderProgram.js +1 -0
  498. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  499. package/lib/esm/render/webgl/System.d.ts +10 -10
  500. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  501. package/lib/esm/render/webgl/System.js +6 -6
  502. package/lib/esm/render/webgl/System.js.map +1 -1
  503. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  504. package/lib/esm/render/webgl/Target.js.map +1 -1
  505. package/lib/esm/render/webgl/glsl/PlanarClassification.js +1 -1
  506. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  507. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  508. package/lib/esm/render/webgl/glsl/RealityMesh.js +103 -28
  509. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  510. package/lib/esm/tile/ClassifierTileTree.d.ts +4 -2
  511. package/lib/esm/tile/ClassifierTileTree.d.ts.map +1 -1
  512. package/lib/esm/tile/ClassifierTileTree.js +32 -17
  513. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  514. package/lib/esm/tile/GltfReader.d.ts +22 -3
  515. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  516. package/lib/esm/tile/GltfReader.js +207 -42
  517. package/lib/esm/tile/GltfReader.js.map +1 -1
  518. package/lib/esm/tile/IModelTileRequestChannels.d.ts +3 -3
  519. package/lib/esm/tile/IModelTileRequestChannels.d.ts.map +1 -1
  520. package/lib/esm/tile/IModelTileRequestChannels.js +7 -11
  521. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  522. package/lib/esm/tile/OPCFormatInterpreter.d.ts +22 -0
  523. package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -0
  524. package/lib/esm/tile/OPCFormatInterpreter.js +88 -0
  525. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -0
  526. package/lib/esm/tile/PntsReader.d.ts +1 -1
  527. package/lib/esm/tile/PntsReader.d.ts.map +1 -1
  528. package/lib/esm/tile/PntsReader.js +154 -39
  529. package/lib/esm/tile/PntsReader.js.map +1 -1
  530. package/lib/esm/tile/PrimaryTileTree.d.ts +18 -2
  531. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  532. package/lib/esm/tile/PrimaryTileTree.js +51 -2
  533. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  534. package/lib/esm/tile/RealityModelTileTree.d.ts +24 -3
  535. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  536. package/lib/esm/tile/RealityModelTileTree.js +36 -12
  537. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  538. package/lib/esm/tile/RealityTile.d.ts +16 -2
  539. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  540. package/lib/esm/tile/RealityTile.js +32 -0
  541. package/lib/esm/tile/RealityTile.js.map +1 -1
  542. package/lib/esm/tile/RealityTileDrawArgs.d.ts +4 -1
  543. package/lib/esm/tile/RealityTileDrawArgs.d.ts.map +1 -1
  544. package/lib/esm/tile/RealityTileDrawArgs.js +3 -1
  545. package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
  546. package/lib/esm/tile/RealityTileLoader.d.ts +7 -4
  547. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  548. package/lib/esm/tile/RealityTileLoader.js +19 -5
  549. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  550. package/lib/esm/tile/RealityTileTree.d.ts +4 -1
  551. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  552. package/lib/esm/tile/RealityTileTree.js +13 -5
  553. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  554. package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
  555. package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
  556. package/lib/esm/tile/ThreeDTileFormatInterpreter.js +175 -0
  557. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -0
  558. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  559. package/lib/esm/tile/TileAdmin.js +0 -5
  560. package/lib/esm/tile/TileAdmin.js.map +1 -1
  561. package/lib/esm/tile/TileDrawArgs.d.ts +2 -0
  562. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  563. package/lib/esm/tile/TileDrawArgs.js +5 -0
  564. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  565. package/lib/esm/tile/TileGeometryCollector.d.ts +80 -0
  566. package/lib/esm/tile/TileGeometryCollector.d.ts.map +1 -0
  567. package/lib/esm/tile/TileGeometryCollector.js +67 -0
  568. package/lib/esm/tile/TileGeometryCollector.js.map +1 -0
  569. package/lib/esm/tile/TileRequestChannels.d.ts +0 -4
  570. package/lib/esm/tile/TileRequestChannels.d.ts.map +1 -1
  571. package/lib/esm/tile/TileRequestChannels.js +1 -6
  572. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  573. package/lib/esm/tile/TileTree.d.ts +7 -1
  574. package/lib/esm/tile/TileTree.d.ts.map +1 -1
  575. package/lib/esm/tile/TileTree.js +7 -0
  576. package/lib/esm/tile/TileTree.js.map +1 -1
  577. package/lib/esm/tile/TileTreeReference.d.ts +26 -1
  578. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  579. package/lib/esm/tile/TileTreeReference.js +42 -2
  580. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  581. package/lib/esm/tile/internal.d.ts +4 -0
  582. package/lib/esm/tile/internal.d.ts.map +1 -1
  583. package/lib/esm/tile/internal.js +4 -0
  584. package/lib/esm/tile/internal.js.map +1 -1
  585. package/lib/esm/tile/map/CesiumTerrainProvider.js +2 -2
  586. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  587. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +5 -3
  588. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  589. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -13
  590. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  591. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +2 -2
  592. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  593. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  594. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
  595. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  596. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  597. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +2 -2
  598. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  599. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +4 -3
  600. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  601. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
  602. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
  603. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  604. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -3
  605. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  606. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +13 -11
  607. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  608. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
  609. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  610. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  611. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -3
  612. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  613. package/lib/esm/tile/map/ImageryTileTree.js +4 -3
  614. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  615. package/lib/esm/tile/map/MapFeatureInfo.d.ts +26 -0
  616. package/lib/esm/tile/map/MapFeatureInfo.d.ts.map +1 -0
  617. package/lib/esm/tile/map/MapFeatureInfo.js +15 -0
  618. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -0
  619. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +4 -4
  620. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  621. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  622. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +3 -3
  623. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  624. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  625. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +5 -4
  626. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  627. package/lib/esm/tile/map/MapLayerImageryProvider.js +5 -1
  628. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  629. package/lib/esm/tile/map/MapLayerSources.d.ts +2 -2
  630. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  631. package/lib/esm/tile/map/MapLayerSources.js +6 -4
  632. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  633. package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts +10 -2
  634. package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
  635. package/lib/esm/tile/map/MapLayerTileTreeReference.js +25 -3
  636. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  637. package/lib/esm/tile/map/MapTile.d.ts +12 -10
  638. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  639. package/lib/esm/tile/map/MapTile.js +60 -39
  640. package/lib/esm/tile/map/MapTile.js.map +1 -1
  641. package/lib/esm/tile/map/MapTileLoader.d.ts +2 -1
  642. package/lib/esm/tile/map/MapTileLoader.d.ts.map +1 -1
  643. package/lib/esm/tile/map/MapTileLoader.js +4 -1
  644. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  645. package/lib/esm/tile/map/MapTileTree.d.ts +18 -8
  646. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  647. package/lib/esm/tile/map/MapTileTree.js +152 -65
  648. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  649. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  650. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +2 -2
  651. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  652. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
  653. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  654. package/lib/esm/tile/map/WmsCapabilities.js +11 -10
  655. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  656. package/lib/esm/tools/ToolAdmin.d.ts +2 -3
  657. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  658. package/lib/esm/tools/ToolAdmin.js +8 -3
  659. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  660. package/lib/esm/tools/ViewTool.d.ts +4 -4
  661. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  662. package/lib/esm/tools/ViewTool.js +1 -1
  663. package/lib/esm/tools/ViewTool.js.map +1 -1
  664. package/package.json +22 -20
  665. package/lib/cjs/tile/DracoDecoder.d.ts +0 -20
  666. package/lib/cjs/tile/DracoDecoder.d.ts.map +0 -1
  667. package/lib/cjs/tile/DracoDecoder.js +0 -169
  668. package/lib/cjs/tile/DracoDecoder.js.map +0 -1
  669. package/lib/esm/tile/DracoDecoder.d.ts +0 -20
  670. package/lib/esm/tile/DracoDecoder.d.ts.map +0 -1
  671. package/lib/esm/tile/DracoDecoder.js +0 -165
  672. package/lib/esm/tile/DracoDecoder.js.map +0 -1
  673. package/lib/public/assets/approximateTerrainHeights.json +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../src/render/webgl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, IDisposable } from \"@itwin/core-bentley\";\r\nimport { Range2d, Range3d, Transform, Vector2d } from \"@itwin/core-geometry\";\r\nimport { ColorDef, PackedFeatureTable, Quantization, RenderTexture } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"./AttributeMap\";\r\nimport { BufferHandle, BufferParameters, QBufferHandle2d, QBufferHandle3d } from \"./AttributeBuffers\";\r\nimport { IndexedGeometry, IndexedGeometryParams } from \"./CachedGeometry\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { GraphicBranch } from \"../GraphicBranch\";\r\nimport { RealityMeshPrimitive } from \"../primitives/mesh/RealityMeshPrimitive\";\r\nimport { TerrainMeshPrimitive } from \"../primitives/mesh/TerrainMeshPrimitive\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { RenderSystem, TerrainTexture } from \"../RenderSystem\";\r\nimport { GL } from \"./GL\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { RenderOrder } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\n\r\nconst scratchOverlapRange = Range2d.createNull();\r\n\r\n/** @internal */\r\nexport class RealityTextureParams {\r\n\r\n constructor(public matrices: Matrix4[], public textures: RenderTexture[]) { }\r\n public static create(terrainTextures: TerrainTexture[]) {\r\n const maxTexturesPerMesh = System.instance.maxRealityImageryLayers;\r\n assert(terrainTextures.length <= maxTexturesPerMesh);\r\n\r\n const renderTextures = [];\r\n const matrices = new Array<Matrix4>();\r\n for (const terrainTexture of terrainTextures) {\r\n const matrix = new Matrix4(); // Published as Mat4.\r\n renderTextures.push(terrainTexture.texture);\r\n assert(terrainTexture.texture !== undefined, \"Texture not defined in TerrainTextureParams constructor\");\r\n matrix.data[0] = terrainTexture.translate.x;\r\n matrix.data[1] = terrainTexture.translate.y;\r\n matrix.data[2] = terrainTexture.scale.x;\r\n matrix.data[3] = terrainTexture.scale.y;\r\n\r\n if (terrainTexture.clipRectangle) {\r\n matrix.data[4] = terrainTexture.clipRectangle.low.x;\r\n matrix.data[5] = terrainTexture.clipRectangle.low.y;\r\n matrix.data[6] = terrainTexture.clipRectangle.high.x;\r\n matrix.data[7] = terrainTexture.clipRectangle.high.y;\r\n } else {\r\n matrix.data[4] = matrix.data[5] = 0;\r\n matrix.data[6] = matrix.data[7] = 1;\r\n }\r\n matrix.data[8] = (1.0 - terrainTexture.transparency);\r\n matrix.data[9] = terrainTexture.featureId;\r\n matrices.push(matrix);\r\n }\r\n\r\n for (let i = terrainTextures.length; i < maxTexturesPerMesh; i++) {\r\n const matrix = new Matrix4();\r\n matrix.data[0] = matrix.data[1] = 0.0;\r\n matrix.data[2] = matrix.data[3] = 1.0;\r\n matrix.data[4] = matrix.data[5] = 1;\r\n matrix.data[6] = matrix.data[7] = -1;\r\n matrices.push(matrix);\r\n }\r\n return new RealityTextureParams(matrices, renderTextures);\r\n }\r\n}\r\n\r\n/** @internal */\r\n\r\nexport class RealityMeshGeometryParams extends IndexedGeometryParams {\r\n public readonly uvParams: QBufferHandle2d;\r\n public readonly featureID?: number;\r\n public readonly normals?: BufferHandle;\r\n\r\n protected constructor(positions: QBufferHandle3d, normals: BufferHandle | undefined, uvParams: QBufferHandle2d, indices: BufferHandle, numIndices: number, featureID?: number) {\r\n super(positions, indices, numIndices);\r\n let attrParams = AttributeMap.findAttribute(\"a_uvParam\", TechniqueId.RealityMesh, false);\r\n assert(attrParams !== undefined);\r\n this.buffers.addBuffer(uvParams, [BufferParameters.create(attrParams.location, 2, GL.DataType.UnsignedShort, false, 0, 0, false)]);\r\n this.uvParams = uvParams;\r\n\r\n if (undefined !== normals) {\r\n attrParams = AttributeMap.findAttribute(\"a_norm\", TechniqueId.RealityMesh, false);\r\n assert(attrParams !== undefined);\r\n if (normals.bytesUsed > 0)\r\n this.buffers.addBuffer(normals, [BufferParameters.create(attrParams.location, 2, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this.normals = normals;\r\n }\r\n\r\n this.featureID = featureID;\r\n }\r\n\r\n private static createFromBuffers(posBuf: QBufferHandle3d, uvParamBuf: QBufferHandle2d, indices: Uint16Array, normBuf: BufferHandle | undefined, featureID: number) {\r\n const indBuf = BufferHandle.createBuffer(GL.Buffer.Target.ElementArrayBuffer, indices);\r\n\r\n if (undefined === indBuf)\r\n return undefined;\r\n\r\n return new RealityMeshGeometryParams(posBuf, normBuf, uvParamBuf, indBuf, indices.length, featureID);\r\n\r\n }\r\n\r\n public static createFromRealityMesh(mesh: RealityMeshPrimitive) {\r\n const posBuf = QBufferHandle3d.create(mesh.pointQParams, mesh.points);\r\n const uvParamBuf = QBufferHandle2d.create(mesh.uvQParams, mesh.uvs);\r\n const normalBuf = mesh.normals ? BufferHandle.createArrayBuffer(mesh.normals) : undefined;\r\n return (undefined === posBuf || undefined === uvParamBuf) ? undefined : this.createFromBuffers(posBuf, uvParamBuf, mesh.indices, normalBuf, mesh.featureID);\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed && this.uvParams.isDisposed;\r\n }\r\n public get bytesUsed(): number { return this.positions.bytesUsed + (undefined === this.normals ? 0 : this.normals.bytesUsed) + this.uvParams.bytesUsed + this.indices.bytesUsed; }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this.uvParams);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityMeshGeometry extends IndexedGeometry implements IDisposable, RenderMemory.Consumer {\r\n public override get asRealityMesh(): RealityMeshGeometry | undefined { return this; }\r\n public override get isDisposed(): boolean { return this._realityMeshParams.isDisposed; }\r\n public get uvQParams() { return this._realityMeshParams.uvParams.params; }\r\n public override get hasFeatures(): boolean { return this._realityMeshParams.featureID !== undefined; }\r\n public override get supportsThematicDisplay() { return true; }\r\n public get overrideColorMix() { return .5; } // This could be a setting from either the mesh or the override if required.\r\n\r\n private constructor(private _realityMeshParams: RealityMeshGeometryParams, public textureParams: RealityTextureParams | undefined, private readonly _transform: Transform | undefined, public readonly baseColor: ColorDef | undefined, private _baseIsTransparent: boolean, private _isTerrain: boolean) {\r\n super(_realityMeshParams);\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this._realityMeshParams);\r\n }\r\n\r\n public static createFromTerrainMesh(terrainMesh: TerrainMeshPrimitive, transform: Transform | undefined) {\r\n const params = RealityMeshGeometryParams.createFromRealityMesh(terrainMesh);\r\n return params ? new RealityMeshGeometry(params, undefined, transform, undefined, false, true) : undefined;\r\n }\r\n\r\n public static createFromRealityMesh(realityMesh: RealityMeshPrimitive): RealityMeshGeometry | undefined {\r\n const params = RealityMeshGeometryParams.createFromRealityMesh(realityMesh);\r\n if (!params)\r\n return undefined;\r\n const texture = realityMesh.texture ? new TerrainTexture(realityMesh.texture, realityMesh.featureID, Vector2d.create(1.0, -1.0), Vector2d.create(0.0, 1.0), Range2d.createXYXY(0, 0, 1, 1), 0, 0) : undefined;\r\n\r\n return new RealityMeshGeometry(params, texture ? RealityTextureParams.create([texture]) : undefined, undefined, undefined, false, false);\r\n }\r\n\r\n public getRange(): Range3d {\r\n return Range3d.createXYZXYZ(this.qOrigin[0], this.qOrigin[1], this.qOrigin[2], this.qOrigin[0] + Quantization.rangeScale16 * this.qScale[0], this.qOrigin[1] + Quantization.rangeScale16 * this.qScale[1], this.qOrigin[2] + Quantization.rangeScale16 * this.qScale[2]);\r\n }\r\n\r\n public static createGraphic(system: RenderSystem, realityMesh: RealityMeshGeometry, featureTable: PackedFeatureTable, tileId: string | undefined, baseColor: ColorDef | undefined, baseTransparent: boolean, textures?: TerrainTexture[]): RenderGraphic | undefined {\r\n const meshes = [];\r\n if (textures === undefined)\r\n textures = [];\r\n\r\n const texturesPerMesh = System.instance.maxRealityImageryLayers;\r\n const layers = new Array<TerrainTexture[]>();\r\n let layerCount = 0;\r\n for (const texture of textures) {\r\n const layer = layers[texture.layerIndex];\r\n if (layer) {\r\n layer.push(texture);\r\n } else {\r\n layerCount++;\r\n layers[texture.layerIndex] = [texture];\r\n }\r\n }\r\n if (layerCount < 2) {\r\n // If only there is not more than one layer then we can group all of the textures into a single draw call.\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(textures), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n } else {\r\n const primaryLayer = layers.shift()!;\r\n for (const primaryTexture of primaryLayer) {\r\n const targetRectangle = primaryTexture.targetRectangle;\r\n const overlapMinimum = 1.0E-5 * (targetRectangle.high.x - targetRectangle.low.x) * (targetRectangle.high.y - targetRectangle.low.y);\r\n const layerTextures = [primaryTexture];\r\n for (const secondaryLayer of layers) {\r\n if (!secondaryLayer)\r\n continue;\r\n for (const secondaryTexture of secondaryLayer) {\r\n const secondaryRectangle = secondaryTexture.targetRectangle;\r\n const overlap = targetRectangle.intersect(secondaryRectangle, scratchOverlapRange);\r\n if (!overlap.isNull && (overlap.high.x - overlap.low.x) * (overlap.high.y - overlap.low.y) > overlapMinimum) {\r\n const textureRange = Range2d.createXYXY(overlap.low.x, overlap.low.y, overlap.high.x, overlap.high.y);\r\n secondaryRectangle.worldToLocal(textureRange.low, textureRange.low);\r\n secondaryRectangle.worldToLocal(textureRange.high, textureRange.high);\r\n\r\n if (secondaryTexture.clipRectangle)\r\n textureRange.intersect(secondaryTexture.clipRectangle, textureRange);\r\n\r\n if (!textureRange.isNull)\r\n layerTextures.push(new TerrainTexture(secondaryTexture.texture, secondaryTexture.featureId, secondaryTexture.scale, secondaryTexture.translate, secondaryTexture.targetRectangle, secondaryTexture.layerIndex, secondaryTexture.transparency, textureRange));\r\n }\r\n }\r\n }\r\n layerTextures.length = Math.min(layerTextures.length, texturesPerMesh);\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(layerTextures), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n }\r\n }\r\n\r\n if (meshes.length === 0)\r\n return undefined;\r\n\r\n const branch = new GraphicBranch(true);\r\n for (const mesh of meshes) {\r\n const primitive = Primitive.create(mesh);\r\n branch.add(system.createBatch(primitive!, featureTable, mesh.getRange(), { tileId }));\r\n }\r\n\r\n return system.createBranch(branch, realityMesh._transform ? realityMesh._transform : Transform.createIdentity());\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this._isTerrain ? stats.addTerrain(this._realityMeshParams.bytesUsed) : stats.addRealityMesh(this._realityMeshParams.bytesUsed);\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.RealityMesh; }\r\n\r\n public override getPass(target: Target) {\r\n if (target.isDrawingShadowMap)\r\n return \"none\";\r\n\r\n if (this._baseIsTransparent || (target.wantThematicDisplay && target.uniforms.thematic.wantIsoLines))\r\n return \"translucent\";\r\n\r\n return \"opaque\";\r\n }\r\n public get renderOrder(): RenderOrder { return RenderOrder.UnlitSurface; }\r\n\r\n public override draw(): void {\r\n this._params.buffers.bind();\r\n System.instance.context.drawElements(GL.PrimitiveType.Triangles, this._params.numIndices, GL.DataType.UnsignedShort, 0);\r\n this._params.buffers.unbind();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../src/render/webgl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose, IDisposable } from \"@itwin/core-bentley\";\r\nimport { ColorDef, Quantization, RenderTexture } from \"@itwin/core-common\";\r\nimport { Matrix4d, Range2d, Range3d, Transform, Vector2d } from \"@itwin/core-geometry\";\r\nimport { GraphicBranch } from \"../GraphicBranch\";\r\nimport { RealityMeshGraphicParams, RealityMeshPrimitive } from \"../primitives/mesh/RealityMeshPrimitive\";\r\nimport { TerrainMeshPrimitive } from \"../primitives/mesh/TerrainMeshPrimitive\";\r\nimport { RenderGraphic } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { RenderPlanarClassifier } from \"../RenderPlanarClassifier\";\r\nimport { RenderSystem, TerrainTexture } from \"../RenderSystem\";\r\nimport { BufferHandle, BufferParameters, QBufferHandle2d, QBufferHandle3d } from \"./AttributeBuffers\";\r\nimport { AttributeMap } from \"./AttributeMap\";\r\nimport { IndexedGeometry, IndexedGeometryParams } from \"./CachedGeometry\";\r\nimport { GL } from \"./GL\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { PlanarClassifier } from \"./PlanarClassifier\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { RenderOrder } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\n\r\nconst scratchOverlapRange = Range2d.createNull();\r\nconst scratchBytes = new Uint8Array(4);\r\nconst scratchBatchBaseId = new Uint32Array(scratchBytes.buffer);\r\nconst scratchRange2d = Range2d.createNull();\r\nclass ProjectedTexture {\r\n public classifier: PlanarClassifier;\r\n constructor(classifier: RenderPlanarClassifier, public meshParams: RealityMeshGraphicParams, public targetRectangle: Range2d) {\r\n this.classifier = classifier as PlanarClassifier;\r\n }\r\n public clone(targetRectangle: Range2d) {\r\n return new ProjectedTexture(this.classifier, this.meshParams, targetRectangle.clone());\r\n }\r\n}\r\ntype TerrainOrProjectedTexture = TerrainTexture | ProjectedTexture;\r\n\r\nclass RealityTextureParam {\r\n constructor(public texture: RenderTexture | undefined, private _projectedTextureOrMatrix: ProjectedTexture | Matrix4) { }\r\n public get isProjected() { return this._projectedTextureOrMatrix instanceof ProjectedTexture; }\r\n\r\n /* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a classified texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"classified\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\n public getProjectionMatrix(): Matrix4d | undefined {\r\n return this._projectedTextureOrMatrix instanceof ProjectedTexture ? this._projectedTextureOrMatrix.classifier.projectionMatrix : undefined;\r\n }\r\n public getTerrainMatrix(): Matrix4 | undefined {\r\n return this._projectedTextureOrMatrix instanceof Matrix4 ? this._projectedTextureOrMatrix : undefined;\r\n }\r\n\r\n public getParams(result: Matrix4): Matrix4 {\r\n /** Entry 0 is 0 for */\r\n if (this._projectedTextureOrMatrix instanceof ProjectedTexture) {\r\n const projectedTexture = this._projectedTextureOrMatrix;\r\n\r\n result.data[0] = 1;\r\n result.data[1] = projectedTexture.classifier.textureImageCount;\r\n result.data[2] = projectedTexture.classifier.sourceTransparency === undefined ? 1.0 : (1.0 - projectedTexture.classifier.sourceTransparency);\r\n scratchBatchBaseId[0] = projectedTexture.classifier.baseBatchId;\r\n result.data[4] = scratchBytes[0];\r\n result.data[5] = scratchBytes[1];\r\n result.data[6] = scratchBytes[2];\r\n result.data[7] = scratchBytes[3];\r\n\r\n const points = [];\r\n const meshParams = projectedTexture.meshParams;\r\n // Calculate range in the tiles local coordinates.\r\n const low = meshParams.tileRectangle.worldToLocal(projectedTexture.targetRectangle.low, scratchRange2d.low)!;\r\n const high = meshParams.tileRectangle.worldToLocal(projectedTexture.targetRectangle.high, scratchRange2d.high)!;\r\n points.push(meshParams.projection.getGlobalPoint(low.x, low.y, 0));\r\n points.push( meshParams.projection.getGlobalPoint(high.x, low.y, 0));\r\n points.push(meshParams.projection.getGlobalPoint(high.x, high.y, 0));\r\n points.push(meshParams.projection.getGlobalPoint(low.x, high.y, 0));\r\n for (let i = 0, j = 8; i < 4; i++) {\r\n const projectedPoint = projectedTexture.classifier.projectionMatrix.multiplyPoint3dQuietNormalize(points[i]);\r\n result.data[j++] = projectedPoint.x;\r\n result.data[j++] = projectedPoint.y;\r\n }\r\n const x0 = result.data[10] - result.data[8], y0 = result.data[11] - result.data[9];\r\n const x1 = result.data[12] - result.data[8], y1 = result.data[13] - result.data[9];\r\n if (x0 * y1 - x1 * y0 < 0) {\r\n const swap = ((i: number, j: number) => {\r\n const temp = result.data[i];\r\n result.data[i] = result.data[j];\r\n result.data[j] = temp;\r\n });\r\n for (let i = 8, j = 14; i <= 10; i += 2, j -= 2) {\r\n swap(i, j);\r\n swap(i + 1, j + 1);\r\n }\r\n }\r\n } else {\r\n result.data[0] = 0;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityTextureParams {\r\n constructor(public params: RealityTextureParam[]) { }\r\n public static create(textures: TerrainOrProjectedTexture[]) {\r\n const maxTexturesPerMesh = System.instance.maxRealityImageryLayers;\r\n assert(textures.length <= maxTexturesPerMesh);\r\n\r\n const textureParams = new Array<RealityTextureParam>();\r\n for (const texture of textures) {\r\n if (texture instanceof TerrainTexture) {\r\n const terrainTexture = texture;\r\n const matrix = new Matrix4(); // Published as Mat4.\r\n assert(terrainTexture.texture !== undefined, \"Texture not defined in TerrainTextureParams constructor\");\r\n matrix.data[0] = terrainTexture.translate.x;\r\n matrix.data[1] = terrainTexture.translate.y;\r\n matrix.data[2] = terrainTexture.scale.x;\r\n matrix.data[3] = terrainTexture.scale.y;\r\n\r\n if (terrainTexture.clipRectangle) {\r\n matrix.data[4] = terrainTexture.clipRectangle.low.x;\r\n matrix.data[5] = terrainTexture.clipRectangle.low.y;\r\n matrix.data[6] = terrainTexture.clipRectangle.high.x;\r\n matrix.data[7] = terrainTexture.clipRectangle.high.y;\r\n } else {\r\n matrix.data[4] = matrix.data[5] = 0;\r\n matrix.data[6] = matrix.data[7] = 1;\r\n }\r\n matrix.data[8] = (1.0 - terrainTexture.transparency);\r\n matrix.data[9] = terrainTexture.featureId;\r\n textureParams.push(new RealityTextureParam(terrainTexture.texture, matrix));\r\n } else {\r\n const classifier = texture.classifier;\r\n textureParams.push(new RealityTextureParam(classifier.getOrCreateClassifierTexture(), texture));\r\n }\r\n }\r\n\r\n for (let i = textures.length; i < maxTexturesPerMesh; i++) {\r\n const matrix = new Matrix4();\r\n matrix.data[0] = matrix.data[1] = 0.0;\r\n matrix.data[2] = matrix.data[3] = 1.0;\r\n matrix.data[4] = matrix.data[5] = 1;\r\n matrix.data[6] = matrix.data[7] = -1;\r\n matrix.data[15] = 0; // Denotes a terrain texture.\r\n textureParams.push(new RealityTextureParam(undefined, matrix));\r\n }\r\n return new RealityTextureParams(textureParams);\r\n }\r\n\r\n}\r\n\r\n/** @internal */\r\n\r\nexport class RealityMeshGeometryParams extends IndexedGeometryParams {\r\n public readonly uvParams: QBufferHandle2d;\r\n public readonly featureID?: number;\r\n public readonly normals?: BufferHandle;\r\n\r\n protected constructor(positions: QBufferHandle3d, normals: BufferHandle | undefined, uvParams: QBufferHandle2d, indices: BufferHandle, numIndices: number, featureID?: number) {\r\n super(positions, indices, numIndices);\r\n let attrParams = AttributeMap.findAttribute(\"a_uvParam\", TechniqueId.RealityMesh, false);\r\n assert(attrParams !== undefined);\r\n this.buffers.addBuffer(uvParams, [BufferParameters.create(attrParams.location, 2, GL.DataType.UnsignedShort, false, 0, 0, false)]);\r\n this.uvParams = uvParams;\r\n\r\n if (undefined !== normals) {\r\n attrParams = AttributeMap.findAttribute(\"a_norm\", TechniqueId.RealityMesh, false);\r\n assert(attrParams !== undefined);\r\n if (normals.bytesUsed > 0)\r\n this.buffers.addBuffer(normals, [BufferParameters.create(attrParams.location, 2, GL.DataType.UnsignedByte, false, 0, 0, false)]);\r\n this.normals = normals;\r\n }\r\n this.featureID = featureID;\r\n }\r\n\r\n private static createFromBuffers(posBuf: QBufferHandle3d, uvParamBuf: QBufferHandle2d, indices: Uint16Array, normBuf: BufferHandle | undefined, featureID: number) {\r\n const indBuf = BufferHandle.createBuffer(GL.Buffer.Target.ElementArrayBuffer, indices);\r\n\r\n if (undefined === indBuf)\r\n return undefined;\r\n\r\n return new RealityMeshGeometryParams(posBuf, normBuf, uvParamBuf, indBuf, indices.length, featureID);\r\n\r\n }\r\n\r\n public static createFromRealityMesh(mesh: RealityMeshPrimitive) {\r\n const posBuf = QBufferHandle3d.create(mesh.pointQParams, mesh.points);\r\n const uvParamBuf = QBufferHandle2d.create(mesh.uvQParams, mesh.uvs);\r\n const normalBuf = mesh.normals ? BufferHandle.createArrayBuffer(mesh.normals) : undefined;\r\n return (undefined === posBuf || undefined === uvParamBuf) ? undefined : this.createFromBuffers(posBuf, uvParamBuf, mesh.indices, normalBuf, mesh.featureID);\r\n }\r\n\r\n public override get isDisposed(): boolean {\r\n return super.isDisposed && this.uvParams.isDisposed;\r\n }\r\n public get bytesUsed(): number { return this.positions.bytesUsed + (undefined === this.normals ? 0 : this.normals.bytesUsed) + this.uvParams.bytesUsed + this.indices.bytesUsed; }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this.uvParams);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityMeshGeometry extends IndexedGeometry implements IDisposable, RenderMemory.Consumer {\r\n public override get asRealityMesh(): RealityMeshGeometry | undefined { return this; }\r\n public override get isDisposed(): boolean { return this._realityMeshParams.isDisposed; }\r\n public get uvQParams() { return this._realityMeshParams.uvParams.params; }\r\n public override get hasFeatures(): boolean { return this._realityMeshParams.featureID !== undefined; }\r\n public override get supportsThematicDisplay() { return true; }\r\n public get overrideColorMix() { return .5; } // This could be a setting from either the mesh or the override if required.\r\n public get transform(): Transform | undefined { return this._transform; }\r\n\r\n private constructor(private _realityMeshParams: RealityMeshGeometryParams, public textureParams: RealityTextureParams | undefined, private readonly _transform: Transform | undefined, public readonly baseColor: ColorDef | undefined, private _baseIsTransparent: boolean, private _isTerrain: boolean) {\r\n super(_realityMeshParams);\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n dispose(this._realityMeshParams);\r\n }\r\n\r\n public static createFromTerrainMesh(terrainMesh: TerrainMeshPrimitive, transform: Transform | undefined) {\r\n const params = RealityMeshGeometryParams.createFromRealityMesh(terrainMesh);\r\n return params ? new RealityMeshGeometry(params, undefined, transform, undefined, false, true) : undefined;\r\n }\r\n\r\n public static createFromRealityMesh(realityMesh: RealityMeshPrimitive): RealityMeshGeometry | undefined {\r\n const params = RealityMeshGeometryParams.createFromRealityMesh(realityMesh);\r\n if (!params)\r\n return undefined;\r\n const texture = realityMesh.texture ? new TerrainTexture(realityMesh.texture, realityMesh.featureID, Vector2d.create(1.0, -1.0), Vector2d.create(0.0, 1.0), Range2d.createXYXY(0, 0, 1, 1), 0, 0) : undefined;\r\n\r\n return new RealityMeshGeometry(params, texture ? RealityTextureParams.create([texture]) : undefined, undefined, undefined, false, false);\r\n }\r\n\r\n public getRange(): Range3d {\r\n return Range3d.createXYZXYZ(this.qOrigin[0], this.qOrigin[1], this.qOrigin[2], this.qOrigin[0] + Quantization.rangeScale16 * this.qScale[0], this.qOrigin[1] + Quantization.rangeScale16 * this.qScale[1], this.qOrigin[2] + Quantization.rangeScale16 * this.qScale[2]);\r\n }\r\n\r\n public static createGraphic(system: RenderSystem, params: RealityMeshGraphicParams): RenderGraphic | undefined {\r\n const meshes = [];\r\n const textures = params.textures ?? [];\r\n const realityMesh = params.realityMesh as RealityMeshGeometry;\r\n const { baseColor, baseTransparent, featureTable, tileId, layerClassifiers } = params;\r\n\r\n const texturesPerMesh = System.instance.maxRealityImageryLayers;\r\n const layers = new Array<(TerrainTexture | ProjectedTexture)[]>();\r\n // Collate the textures and classifiers layers into a single array.\r\n for (const texture of textures) {\r\n const layer = layers[texture.layerIndex];\r\n if (layer) {\r\n (layer as TerrainTexture[]).push(texture);\r\n } else {\r\n layers[texture.layerIndex] = [texture];\r\n }\r\n }\r\n params.layerClassifiers?.forEach((layerClassifier, layerIndex) => layers[layerIndex] = [new ProjectedTexture(layerClassifier, params, params.tileRectangle)]);\r\n\r\n if (layers.length < 2 && !layerClassifiers?.size && textures.length < texturesPerMesh) {\r\n // If only there is not more than one layer then we can group all of the textures into a single draw call.\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(textures), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n } else {\r\n let primaryLayer;\r\n while (primaryLayer === undefined)\r\n primaryLayer = layers.shift();\r\n if (!primaryLayer)\r\n return undefined;\r\n for (const primaryTexture of primaryLayer) {\r\n const targetRectangle = primaryTexture.targetRectangle;\r\n const overlapMinimum = 1.0E-5 * (targetRectangle.high.x - targetRectangle.low.x) * (targetRectangle.high.y - targetRectangle.low.y);\r\n let layerTextures = [primaryTexture];\r\n for (const secondaryLayer of layers) {\r\n if (!secondaryLayer)\r\n continue;\r\n for (const secondaryTexture of secondaryLayer) {\r\n if (secondaryTexture instanceof ProjectedTexture) {\r\n layerTextures.push(secondaryTexture.clone(targetRectangle));\r\n } else {\r\n const secondaryRectangle = secondaryTexture.targetRectangle;\r\n const overlap = targetRectangle.intersect(secondaryRectangle, scratchOverlapRange);\r\n if (!overlap.isNull && (overlap.high.x - overlap.low.x) * (overlap.high.y - overlap.low.y) > overlapMinimum) {\r\n const textureRange = Range2d.createXYXY(overlap.low.x, overlap.low.y, overlap.high.x, overlap.high.y);\r\n secondaryRectangle.worldToLocal(textureRange.low, textureRange.low);\r\n secondaryRectangle.worldToLocal(textureRange.high, textureRange.high);\r\n\r\n if (secondaryTexture.clipRectangle)\r\n textureRange.intersect(secondaryTexture.clipRectangle, textureRange);\r\n\r\n if (!textureRange.isNull && textureRange) {\r\n layerTextures.push(secondaryTexture.cloneWithClip(textureRange));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n while (layerTextures.length > texturesPerMesh) {\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(layerTextures.slice(0, texturesPerMesh)), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n layerTextures = layerTextures.slice(texturesPerMesh);\r\n }\r\n meshes.push(new RealityMeshGeometry(realityMesh._realityMeshParams, RealityTextureParams.create(layerTextures), realityMesh._transform, baseColor, baseTransparent, realityMesh._isTerrain));\r\n }\r\n }\r\n\r\n if (meshes.length === 0)\r\n return undefined;\r\n\r\n const branch = new GraphicBranch(true);\r\n for (const mesh of meshes) {\r\n const primitive = Primitive.create(mesh);\r\n branch.add(system.createBatch(primitive!, featureTable, mesh.getRange(), { tileId }));\r\n }\r\n\r\n return system.createBranch(branch, realityMesh._transform ? realityMesh._transform : Transform.createIdentity());\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n this._isTerrain ? stats.addTerrain(this._realityMeshParams.bytesUsed) : stats.addRealityMesh(this._realityMeshParams.bytesUsed);\r\n }\r\n\r\n public get techniqueId(): TechniqueId { return TechniqueId.RealityMesh; }\r\n\r\n public override getPass(target: Target) {\r\n if (target.isDrawingShadowMap)\r\n return \"none\";\r\n\r\n if (this._baseIsTransparent || (target.wantThematicDisplay && target.uniforms.thematic.wantIsoLines))\r\n return \"translucent\";\r\n\r\n return \"opaque\";\r\n }\r\n public get renderOrder(): RenderOrder { return RenderOrder.UnlitSurface; }\r\n\r\n public override draw(): void {\r\n this._params.buffers.bind();\r\n System.instance.context.drawElements(GL.PrimitiveType.Triangles, this._params.numIndices, GL.DataType.UnsignedShort, 0);\r\n this._params.buffers.unbind();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RenderCommands.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RenderCommands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RenderCommands.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RenderCommands.ts"],"names":[],"mappings":"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"}
@@ -286,6 +286,8 @@ export class RenderCommands {
286
286
  this._stack.pushBranch(branch);
287
287
  if (branch.planarClassifier)
288
288
  branch.planarClassifier.pushBatchState(this._batchState);
289
+ if (branch.secondaryClassifiers)
290
+ branch.secondaryClassifiers.forEach((classifier) => classifier.pushBatchState(this._batchState));
289
291
  const cmds = this.getCommands(pass);
290
292
  const clip = animState === null || animState === void 0 ? void 0 : animState.clip;
291
293
  const pushClip = undefined !== clip ? new PushClipCommand(clip) : undefined;
@@ -366,6 +368,8 @@ export class RenderCommands {
366
368
  this._stack.pushBranch(branch);
367
369
  if (branch.planarClassifier)
368
370
  branch.planarClassifier.pushBatchState(this._batchState);
371
+ if (branch.secondaryClassifiers)
372
+ branch.secondaryClassifiers.forEach((classifier) => classifier.pushBatchState(this._batchState));
369
373
  this.pushAndPop(new PushBranchCommand(branch), PopBranchCommand.instance, func);
370
374
  this._stack.pop();
371
375
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RenderCommands.js","sourceRoot":"","sources":["../../../../src/render/webgl/RenderCommands.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAa,MAAM,oBAAoB,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAM1D,OAAO,EACS,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAc,gBAAgB,EAAE,gBAAgB,EAC/G,iBAAiB,EAAE,eAAe,EAAe,gBAAgB,GAClE,MAAM,eAAe,CAAC;AACvB,OAAO,EAAS,MAAM,EAAW,aAAa,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAkB,IAAI,EAA2B,MAAM,eAAe,CAAC;AAK9E;;GAEG;AACH,MAAM,OAAO,cAAc;IA4DzB,YAAY,MAAc,EAAE,KAAkB,EAAE,UAAsB;QA1DrD,oBAAe,GAAG,IAAI,OAAO,EAAE,CAAC;QAChC,kBAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,cAAS,GAAG,IAAI,KAAK,gBAAgC,CAAC;QAI/D,sBAAiB,kBAA+B;QAChD,+BAA0B,GAAG,KAAK,CAAC;QACnC,qBAAgB,GAAG,KAAK,CAAC;QACzB,0BAAqB,GAAG,KAAK,CAAC;QAC9B,4BAAuB,GAAG,KAAK,CAAC,CAAC,6FAA6F;QAiDpI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,iBAAmB,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IArDD,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAE7C,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,CAAC;IAED,IAAW,OAAO;QAChB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YACnC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM;gBACrB,OAAO,KAAK,CAAC;QAEjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAW,eAAe;QACxB,QAAQ,IAAI,CAAC,iBAAiB,EAAE;YAC9B,0BAA6B;YAC7B,+BAAkC;YAClC;gBACE,OAAO,IAAI,CAAC;YACd;gBACE,OAAO,KAAK,CAAC;SAChB;IACH,CAAC;IAED,IAAW,gBAAgB,KAAgB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,IAAW,cAAc;QACvB,IAAI,KAAK,eAAsB,CAAC;QAChC,IAAI,IAAI,CAAC,WAAW,qBAAwB;YAC1C,KAAK,uBAA8B,CAAC;QAEtC,IAAI,IAAI,CAAC,WAAW,gBAAmB,IAAI,IAAI,CAAC,WAAW,+BAAiC,IAAI,IAAI,CAAC,WAAW,qCAAuC;YACrJ,KAAK,kBAAyB,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB;YAClC,KAAK,4BAAmC,CAAC;QAE3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAY,SAAS,KAAwB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;IAE7E,WAAW,CAAC,IAAgB,IAAa,OAAO,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,YAAY,CAAC,IAAgB,IAAa,OAAO,IAAI,wBAA2B,IAAI,IAAI,yBAA4B,CAAC,CAAC,CAAC;IAYvH,KAAK,CAAC,MAAc,EAAE,KAAkB,EAAE,UAAsB;QACrE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAEM,kCAAkC,CAAC,KAAkB;QAC1D,MAAM,CAAC,IAAI,CAAC,iBAAiB,mBAAoB,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAEzC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;IAC1C,CAAC;IAEM,WAAW,CAAC,KAAkB,EAAE,2BAAwC;QAC7E,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;QACpC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAE,KAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;IAC3C,CAAC;IAED,2DAA2D;IACpD,wBAAwB,CAAC,qBAAkC;QAChE,IAAI,CAAC,iBAAiB,yBAA2B,CAAC;QAClD,qBAAqB,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAE,KAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;IAC3C,CAAC;IACD,qDAAqD;IAC9C,kBAAkB,CAAC,eAA4B;QACpD,IAAI,CAAC,iBAAiB,wBAA0B,CAAC;QACjD,eAAe,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAE,KAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;IAC3C,CAAC;IAEM,cAAc,CAAC,GAAgB,EAAE,2BAAwC;QAC9E,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE;YACtB,KAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;IAC3C,CAAC;IAEM,mBAAmB,CAAC,IAAiB;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE;YAChC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;gBACvC,KAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACtC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,IAAiB;QAC9C,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE;YAC7B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;gBAChC,MAAM,EAAE,GAAG,MAAiB,CAAC;gBAC7B,IAAI,EAAE,CAAC,UAAU;oBACf,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACxB;SACF;QAED,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE;gBAChC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;oBACrC,IAAK,EAAc,CAAC,UAAU;wBAC3B,EAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBACrC;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEM,aAAa,CAAC,EAAY;QAC/B,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO;QAET,MAAM,CAAC,mBAAoB,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEnD,IAAI,CAAC,iBAAiB,qBAAwB,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;IAC3C,CAAC;IAEM,SAAS,CAAC,EAAY;QAC3B,IAAI,SAAS,KAAK,EAAE;YAClB,OAAO;QAET,MAAM,CAAC,mBAAoB,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEnD,IAAI,CAAC,iBAAiB,kBAAoB,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;IAC3C,CAAC;IAEM,mBAAmB,CAAC,OAAyB,EAAE,IAAW;QAC/D,IAAI,SAAS,KAAK,IAAI;YACpB,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,MAAM,KAAK,IAAI,EAAE,kFAAkF;YACrG,OAAO;QAET,IAAI,mBAAoB,IAAI,CAAC,iBAAiB,EAAE;YAC9C,0DAA0D;YAC1D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,OAAO;SACR;QAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YACxB,4DAA4D;YAC5D,QAAQ,IAAI,EAAE;gBACZ,KAAK,eAAe,CAAC;gBACrB,KAAK,eAAe;oBAClB,IAAI,GAAG,QAAQ,CAAC;oBAChB,MAAM;gBACR,KAAK,2BAA2B;oBAC9B,IAAI,GAAG,oBAAoB,CAAC;oBAC5B,MAAM;aACT;SACF;QAED,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;QAE5H,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,uBAAuB,EAAE;YACjE,QAAQ,OAAO,CAAC,WAAW,EAAE;gBAC3B,+BAAkC;gBAClC,iCAAoC;gBACpC;oBACE,IAAI,GAAG,eAAe,CAAC;oBACvB,MAAM;gBACR,wBAA4B;gBAC5B;oBACE,IAAI,GAAG,QAAQ,CAAC;oBAChB,MAAM;gBACR;oBACE,IAAI,GAAG,eAAe,CAAC;oBACvB,MAAM;aACT;SACF;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,6BAA6B,GAAG,YAAY,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,oBAAoB,CAAC,CAAC;QACtG,IAAI,6BAA6B,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,uBAAuB,EAAE;YAC/H,IAAI,UAAsB,CAAC;YAC3B,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;gBAC1C,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACtC;iBAAM;gBACL,QAAQ,OAAO,CAAC,WAAW,EAAE;oBAC3B,+BAAkC;oBAClC,iCAAoC;oBACpC;wBACE,UAAU,uBAA0B,CAAC;wBACrC,MAAM;oBACR,wBAA4B;oBAC5B;wBACE,UAAU,wBAA2B,CAAC;wBACtC,MAAM;oBACR;wBACE,UAAU,uBAA0B,CAAC;wBACrC,MAAM;iBACT;aACF;YAED,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5C;QAED,MAAM,6BAA6B,GAAG,YAAY,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,oBAAoB,CAAC,CAAC;QAC3G,IAAI,6BAA6B,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB;YAC5F,IAAI,CAAC,WAAW,qBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzD,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEM,WAAW,CAAC,IAAgB;QACjC,IAAI,GAAG,GAAG,IAAc,CAAC;QACzB,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM;YAC9B,GAAG,IAAI,CAAC,CAAC;QAEX,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEM,eAAe,CAAC,IAAgB,EAAE,IAAkB;QACzD,MAAM,GAAG,GAAG,IAAc,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEM,eAAe,CAAC,MAAc,EAAE,IAAgB;QACrD,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAE,KAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,SAAyB;QAC5C,MAAM,CAAC,mBAAoB,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnD,IAAI,mBAAoB,IAAI,CAAC,iBAAiB;YAC5C,OAAO;QAET,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;IAC3C,CAAC;IAEM,gBAAgB,CAAC,KAAY;QAClC,IAAI,IAAI,CAAC,0BAA0B,EAAE;YACnC,yFAAyF;YACzF,sHAAsH;YACtH,MAAM,CAAC,IAAI,CAAC,iBAAiB,mBAAoB,CAAC,CAAC;YACnD,IAAI,CAAC,iBAAiB,wBAA2B,CAAC;YAClD,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;YACzC,OAAO;SACR;QAED,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,OAAO;QAET,gGAAgG;QAChG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IACxC,CAAC;IAEM,sBAAsB,CAAC,OAAgB,EAAE,IAAgB;QAC9D,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,0BAA0B;YAC3D,OAAO;QAET,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACxC,IAAI,CAAC,iBAAiB,iBAAkB,CAAC;QAEzC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAEO,uBAAuB,CAAC,MAAc;;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACzC,OAAO,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,0CAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,CAAC;IAEO,uBAAuB,CAAC,IAAgB,EAAE,MAAc,EAAE,IAAgB;QAChF,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI;YACjB,OAAO;QAET,MAAM,CAAC,mBAAoB,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,gBAAgB;YACzB,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAA8B,CAAC;QACvD,MAAM,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,IAAI,QAAQ;YACV,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtB,MAAM,IAAI,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,IAAI,EAAE,CAAC;QAEP,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,IAAI,QAAQ;gBACV,IAAI,CAAC,GAAG,EAAE,CAAC;SACd;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,QAAQ;gBACV,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;SACtC;IACH,CAAC;IAEO,UAAU,CAAC,IAAiB,EAAE,GAAe,EAAE,IAAgB;QACrE,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,SAAS,gBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,gBAAmB,CAAC;YAC/C,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;gBACnD,IAAI,CAAC,GAAG,EAAE,CAAC;;gBAEX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEjB,OAAO;SACR;QAED,IAAI,mBAAoB,IAAI,CAAC,iBAAiB,EAAE;YAC9C,gGAAgG;YAChG,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS;gBAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnB;aAAM;YACL,+EAA+E;YAC/E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,gBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9C;QAED,IAAI,EAAE,CAAC;QAEP,oHAAoH;QACpH,IAAI,mBAAoB,IAAI,CAAC,iBAAiB,EAAE;YAC9C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;gBACjC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;oBACnD,IAAI,CAAC,GAAG,EAAE,CAAC;;oBAEX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAClB;SACF;aAAM;YACL,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,gBAAmB,CAAC,MAAM,CAAC,CAAC;YAErD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;gBAChC,IAAI,CAAC,GAAG,EAAE,CAAC;;gBAEX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEjB,IAAI,GAAG,IAAI,CAAC,SAAS,gBAAmB,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;gBAChC,IAAI,CAAC,GAAG,EAAE,CAAC;;gBAEX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;IACH,CAAC;IAEM,gBAAgB,CAAC,MAAc,EAAE,IAAgB;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI;YACjB,OAAO;QAET,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI;YACjB,IAAI,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,SAAS,CAAC,IAAkB,CAAC,EAAE,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;;YAExI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAEO,iBAAiB,CAAC,MAAc,EAAE,IAAgB;QACxD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,gBAAgB;YACzB,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3D,IAAI,CAAC,UAAU,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEhF,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAEM,eAAe,CAAC,KAAkB,EAAE,IAAgB;QACzD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAEM,KAAK;QACV,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAkB,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEM,mBAAmB,CAAC,aAA0B,EAAE,kBAA2C;QAChG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAEpC,KAAK,MAAM,OAAO,IAAI,aAAa;YAChC,OAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,SAAS,KAAK,kBAAkB,EAAE;YACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE;gBACtD,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE;oBACxC,MAAM,EAAE,GAAG,OAAkB,CAAC;oBAC9B,IAAI,EAAE,CAAC,UAAU;wBACf,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBACxB;YACH,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;IACvC,CAAC;IAEM,iBAAiB,CAAC,GAAmB;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,yEAAyE;QACzE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAEpC,0BAA0B;QAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEjC,qCAAqC;QACrC,IAAI,SAAS,KAAK,GAAG,CAAC,WAAW;YAC/B,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE/C,kCAAkC;QAClC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QAErC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;IAEM,aAAa,CAAC,GAAmB;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YACjC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;QAC5B,IAAI,SAAS,KAAK,GAAG,EAAE;YACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAyB,CAAC,CAAC;YAElD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAiB,CAAC,CAAC;YAEtC,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM;gBACnD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAE/B,IAAI,SAAS,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM;gBACjD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE;gBACtD,IAAI,SAAS,KAAK,GAAG,CAAC,WAAW,IAAI,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM;oBAC7D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,uBAAyB,CAAC;gBAE/D,IAAI,SAAS,KAAK,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM;oBAC/D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,wBAA0B,CAAC;YACnE,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;IAEM,YAAY,CAAC,IAAe;QACjC,gIAAgI;QAChI,sEAAsE;QACtE,YAAY;QAEZ,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE,EAAE,qCAAqC;YAC5E,IAAI,gBAAgB,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACtC,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC1E,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;gBACrE,IAAI,aAAa,CAAC,WAAW,CAAC,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE;oBAChG,OAAO;iBACR;aACF;SACF;QAED,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,mBAAoB,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7D,MAAM,EAAE,GAAc,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACnD,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC,WAAW;gBAC1D,IAAI,CAAC,WAAW,oBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACzD;IACH,CAAC;IAEM,SAAS,CAAC,MAAc;QAC7B,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAE,KAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,4BAA4B,CAAC,KAAY;QAC9C,IAAI,IAAI,iBAAoB,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,YAAY,WAAW,EAAE;YACxC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;YACzB,IAAI,WAAW,CAAC,gBAAgB,KAAK,EAAE,CAAC,WAAW;gBACjD,IAAI,gCAAkC,CAAC;SAC1C;aAAM,IAAI,KAAK,CAAC,OAAO,YAAY,aAAa,EAAE;YACjD,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;YACzB,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,WAAW,EAAE;gBACzC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,WAAW,CAAC,gBAAgB,KAAK,EAAE,CAAC,WAAW;oBACjD,IAAI,gCAAkC,CAAC;aAC1C;iBAAM,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE;gBAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,WAAW,EAAE;oBAC7E,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,WAAW,CAAC,gBAAgB,KAAK,EAAE,CAAC,WAAW;wBACjD,IAAI,gCAAkC,CAAC;iBAC1C;aACF;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,QAAQ,CAAC,KAAY;QAC1B,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB;YACzD,OAAO;QAET,+FAA+F;QAC/F,yCAAyC;QACzC,6FAA6F;QAC7F,sDAAsD;QACtD,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QAErC,iFAAiF;QACjF,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,SAAS;YACrB,OAAO;QAET,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;YACvB,gIAAgI;YAChI,2DAA2D;YAC3D,YAAY;YAEZ,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;gBACrC,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBACnE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;gBACrE,IAAI,aAAa,CAAC,WAAW,CAAC,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE;oBAChG,OAAO;iBACR;aACF;SACF;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAEpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC1E,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,IAAI,SAAS,CAAC,6BAA6B,EAAE;gBACjF,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC;gBAC5C,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC,cAAc,CAAC;gBAEtD,IAAI,SAAS,KAAK,UAAU,EAAE;oBAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,UAAU,CAAC,SAAS,CAAC;oBACtE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,IAAI,UAAU,CAAC,cAAc,CAAC;iBACtF;aACF;YAED,kIAAkI;YAClI,IAAI,qBAAqB,iBAAkB,CAAC;YAC5C,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,6BAA6B,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE;gBACvI,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAC/C,IAAI,CAAC,iBAAiB,uCAAyC,CAAC;aACjE;YAEA,KAAK,CAAC,OAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,yCAA2C,IAAI,CAAC,iBAAiB;gBACnE,IAAI,CAAC,iBAAiB,GAAG,qBAAqB,CAAC;YAEjD,iFAAiF;YACjF,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YACxC,MAAM,uBAAuB,GAAG,SAAS,KAAK,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC;YAClF,IAAI,UAAU,IAAI,uBAAuB;gBACtC,KAAK,CAAC,OAAmB,CAAC,iBAAiB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC,qCAAuC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;QAEnK,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,yHAAyH;IAClH,aAAa,CAAC,OAAgB,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5F,6BAA6B;IACtB,eAAe,KAAW,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;IAE3D,2BAA2B;QACjC,iHAAiH;QACjH,kHAAkH;QAClH,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,wBAA2B,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,gCAAkC,CAAC;QACrE,MAAM,YAAY,GAAiB,EAAE,CAAC,CAAC,0DAA0D;QACjG,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;YAC7B,QAAQ,GAAG,CAAC,MAAM,EAAE;gBAClB,KAAK,YAAY,CAAC;gBAClB,KAAK,WAAW,CAAC;gBACjB,KAAK,WAAW;oBACd,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvB,MAAM;gBACR,KAAK,eAAe;oBAClB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE;wBAClC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAC3B;oBACD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtB,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;wBACjD,IAAI,WAAW,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;4BACxC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;6BACxC,gDAAgD;4BACnD,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;qBAC/C;oBACD,MAAM;gBACR,KAAK,UAAU,CAAC;gBAChB,KAAK,WAAW;oBACd,YAAY,CAAC,GAAG,EAAE,CAAC;oBACnB,MAAM;aACT;SACF;IACH,CAAC;IAEM,IAAI;QACT,MAAM,IAAI,GAAG;YACX,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE;YAChC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;YAC7B,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;SAC/B,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;gBACtB,IAAI,KAAK,CAAC;gBACV,QAAQ,GAAG,CAAC,MAAM,EAAE;oBAClB,KAAK,eAAe;wBAAE,KAAK,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACvC,KAAK,WAAW;wBAAE,KAAK,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACnC,KAAK,YAAY;wBAAE,KAAK,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACpC,OAAO,CAAC,CAAC,SAAS;iBACnB;gBAED,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;aACrB;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Frustum, FrustumPlanes, RenderMode, ViewFlags } from \"@itwin/core-common\";\r\nimport { Decorations } from \"../Decorations\";\r\nimport { SurfaceType } from \"../primitives/SurfaceParams\";\r\nimport { GraphicList, RenderGraphic } from \"../RenderGraphic\";\r\nimport { AnimationBranchState } from \"../GraphicBranch\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport {\r\n DrawCommands, PopBatchCommand, PopBranchCommand, PopClipCommand, PopCommand, PrimitiveCommand, PushBatchCommand,\r\n PushBranchCommand, PushClipCommand, PushCommand, PushStateCommand,\r\n} from \"./DrawCommand\";\r\nimport { Batch, Branch, Graphic, GraphicsArray } from \"./Graphic\";\r\nimport { Layer, LayerContainer } from \"./Layer\";\r\nimport { LayerCommandLists } from \"./LayerCommands\";\r\nimport { MeshGraphic } from \"./Mesh\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { CompositeFlags, Pass, RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { TargetGraphics } from \"./TargetGraphics\";\r\nimport { Target } from \"./Target\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\n\r\n/** A list of DrawCommands to be rendered, ordered by render pass.\r\n * @internal\r\n */\r\nexport class RenderCommands implements Iterable<DrawCommands> {\r\n private _frustumPlanes?: FrustumPlanes;\r\n private readonly _scratchFrustum = new Frustum();\r\n private readonly _scratchRange = new Range3d();\r\n private readonly _commands = new Array<DrawCommands>(RenderPass.COUNT);\r\n private _target: Target;\r\n private _stack: BranchStack; // refers to the Target's BranchStack\r\n private _batchState: BatchState; // refers to the Target's BatchState\r\n private _forcedRenderPass: RenderPass = RenderPass.None;\r\n private _addLayersAsNormalGraphics = false;\r\n private _opaqueOverrides = false;\r\n private _translucentOverrides = false;\r\n private _addTranslucentAsOpaque = false; // true when rendering for _ReadPixels to force translucent items to be drawn in opaque pass.\r\n private readonly _layers: LayerCommandLists;\r\n\r\n public get target(): Target { return this._target; }\r\n\r\n public [Symbol.iterator](): Iterator<DrawCommands> {\r\n return this._commands[Symbol.iterator]();\r\n }\r\n\r\n public get isEmpty(): boolean {\r\n for (const commands of this._commands)\r\n if (0 < commands.length)\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public get isDrawingLayers() {\r\n switch (this._forcedRenderPass) {\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n public get currentViewFlags(): ViewFlags { return this._stack.top.viewFlags; }\r\n public get compositeFlags(): CompositeFlags {\r\n let flags = CompositeFlags.None;\r\n if (this.hasCommands(RenderPass.Translucent))\r\n flags |= CompositeFlags.Translucent;\r\n\r\n if (this.hasCommands(RenderPass.Hilite) || this.hasCommands(RenderPass.HiliteClassification) || this.hasCommands(RenderPass.HilitePlanarClassification))\r\n flags |= CompositeFlags.Hilite;\r\n\r\n if (this.target.wantAmbientOcclusion)\r\n flags |= CompositeFlags.AmbientOcclusion;\r\n\r\n return flags;\r\n }\r\n\r\n private get _curBatch(): Batch | undefined { return this._batchState.currentBatch; }\r\n\r\n public hasCommands(pass: RenderPass): boolean { return 0 !== this.getCommands(pass).length; }\r\n public isOpaquePass(pass: RenderPass): boolean { return pass >= RenderPass.OpaqueLinear && pass <= RenderPass.OpaqueGeneral; }\r\n\r\n constructor(target: Target, stack: BranchStack, batchState: BatchState) {\r\n this._target = target;\r\n this._stack = stack;\r\n this._batchState = batchState;\r\n this._layers = new LayerCommandLists(this);\r\n\r\n for (let i = 0; i < RenderPass.COUNT; ++i)\r\n this._commands[i] = [];\r\n }\r\n\r\n public reset(target: Target, stack: BranchStack, batchState: BatchState): void {\r\n this._target = target;\r\n this._stack = stack;\r\n this._batchState = batchState;\r\n this.clear();\r\n }\r\n\r\n public collectGraphicsForPlanarProjection(scene: GraphicList): void {\r\n assert(this._forcedRenderPass === RenderPass.None);\r\n assert(!this._addLayersAsNormalGraphics);\r\n\r\n this._addLayersAsNormalGraphics = true;\r\n this.addGraphics(scene);\r\n this._addLayersAsNormalGraphics = false;\r\n }\r\n\r\n public addGraphics(scene: GraphicList, forcedPass: RenderPass = RenderPass.None): void {\r\n this._forcedRenderPass = forcedPass;\r\n scene.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n /** Add backgroundMap graphics to their own render pass. */\r\n public addBackgroundMapGraphics(backgroundMapGraphics: GraphicList): void {\r\n this._forcedRenderPass = RenderPass.BackgroundMap;\r\n backgroundMapGraphics.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n /** Add overlay graphics to the world overlay pass */\r\n public addOverlayGraphics(overlayGraphics: GraphicList): void {\r\n this._forcedRenderPass = RenderPass.WorldOverlay;\r\n overlayGraphics.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addDecorations(dec: GraphicList, forcedPass: RenderPass = RenderPass.None): void {\r\n this._forcedRenderPass = forcedPass;\r\n for (const entry of dec) {\r\n (entry as Graphic).addCommands(this);\r\n }\r\n\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addWorldDecorations(decs: GraphicList): void {\r\n const world = this.target.getWorldDecorations(decs);\r\n this.pushAndPopBranch(world, () => {\r\n for (const entry of world.branch.entries) {\r\n (entry as Graphic).addCommands(this);\r\n }\r\n });\r\n }\r\n\r\n private addPickableDecorations(decs: Decorations): void {\r\n if (undefined !== decs.normal) {\r\n for (const normal of decs.normal) {\r\n const gf = normal as Graphic;\r\n if (gf.isPickable)\r\n gf.addCommands(this);\r\n }\r\n }\r\n\r\n if (undefined !== decs.world) {\r\n const world = this.target.getWorldDecorations(decs.world);\r\n this.pushAndPopBranch(world, () => {\r\n for (const gf of world.branch.entries) {\r\n if ((gf as Graphic).isPickable)\r\n (gf as Graphic).addCommands(this);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public addBackground(gf?: Graphic): void {\r\n if (undefined === gf)\r\n return;\r\n\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n\r\n this._forcedRenderPass = RenderPass.Background;\r\n this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addSkyBox(gf?: Graphic): void {\r\n if (undefined === gf)\r\n return;\r\n\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n\r\n this._forcedRenderPass = RenderPass.SkyBox;\r\n this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addPrimitiveCommand(command: PrimitiveCommand, pass?: Pass): void {\r\n if (undefined === pass)\r\n pass = command.getPass(this.target);\r\n\r\n if (\"none\" === pass) // Edges will return none if they don't want to draw at all (edges not turned on).\r\n return;\r\n\r\n if (RenderPass.None !== this._forcedRenderPass) {\r\n // Add the command to the forced render pass (background).\r\n this.getCommands(this._forcedRenderPass).push(command);\r\n return;\r\n }\r\n\r\n if (!command.hasFeatures) {\r\n // Draw in general opaque pass so they are not in pick data.\r\n switch (pass) {\r\n case \"opaque-linear\":\r\n case \"opaque-planar\":\r\n pass = \"opaque\";\r\n break;\r\n case \"opaque-planar-translucent\":\r\n pass = \"opaque-translucent\";\r\n break;\r\n }\r\n }\r\n\r\n const haveFeatureOverrides = (this._opaqueOverrides || this._translucentOverrides) && command.opcode && command.hasFeatures;\r\n\r\n if (Pass.rendersTranslucent(pass) && this._addTranslucentAsOpaque) {\r\n switch (command.renderOrder) {\r\n case RenderOrder.PlanarLitSurface:\r\n case RenderOrder.PlanarUnlitSurface:\r\n case RenderOrder.BlankingRegion:\r\n pass = \"opaque-planar\";\r\n break;\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n pass = \"opaque\";\r\n break;\r\n default:\r\n pass = \"opaque-linear\";\r\n break;\r\n }\r\n }\r\n\r\n const isDoublePass = Pass.rendersOpaqueAndTranslucent(pass);\r\n const renderTranslucentDuringOpaque = isDoublePass || (this._opaqueOverrides && haveFeatureOverrides);\r\n if (renderTranslucentDuringOpaque && Pass.rendersTranslucent(pass) && !command.primitive.cachedGeometry.alwaysRenderTranslucent) {\r\n let opaquePass: RenderPass;\r\n if (Pass.rendersOpaqueAndTranslucent(pass)) {\r\n opaquePass = Pass.toOpaquePass(pass);\r\n } else {\r\n switch (command.renderOrder) {\r\n case RenderOrder.PlanarLitSurface:\r\n case RenderOrder.PlanarUnlitSurface:\r\n case RenderOrder.BlankingRegion:\r\n opaquePass = RenderPass.OpaquePlanar;\r\n break;\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n opaquePass = RenderPass.OpaqueGeneral;\r\n break;\r\n default:\r\n opaquePass = RenderPass.OpaqueLinear;\r\n break;\r\n }\r\n }\r\n\r\n this.getCommands(opaquePass).push(command);\r\n }\r\n\r\n const renderOpaqueDuringTranslucent = isDoublePass || (this._translucentOverrides && haveFeatureOverrides);\r\n if (renderOpaqueDuringTranslucent && Pass.rendersOpaque(pass) && !this._addTranslucentAsOpaque)\r\n this.getCommands(RenderPass.Translucent).push(command);\r\n\r\n if (!Pass.rendersOpaqueAndTranslucent(pass))\r\n this.getCommands(Pass.toRenderPass(pass)).push(command);\r\n }\r\n\r\n public getCommands(pass: RenderPass): DrawCommands {\r\n let idx = pass as number;\r\n assert(idx < this._commands.length);\r\n if (idx >= this._commands.length)\r\n idx -= 1;\r\n\r\n return this._commands[idx];\r\n }\r\n\r\n public replaceCommands(pass: RenderPass, cmds: DrawCommands): void {\r\n const idx = pass as number;\r\n this._commands[idx].splice(0);\r\n this._commands[idx] = cmds;\r\n }\r\n\r\n public addHiliteBranch(branch: Branch, pass: RenderPass): void {\r\n this.pushAndPopBranchForPass(pass, branch, () => {\r\n branch.branch.entries.forEach((entry: RenderGraphic) => (entry as Graphic).addHiliteCommands(this, pass));\r\n });\r\n }\r\n\r\n public processLayers(container: LayerContainer): void {\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n if (RenderPass.None !== this._forcedRenderPass)\r\n return;\r\n\r\n this._forcedRenderPass = container.renderPass;\r\n this._layers.processLayers(container, () => container.graphic.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addLayerCommands(layer: Layer): void {\r\n if (this._addLayersAsNormalGraphics) {\r\n // GraphicsCollectorDrawArgs wants to collect graphics to project to a plane for masking.\r\n // It bypasses PlanProjectionTreeReference.createDrawArgs which would otherwise wrap the graphics in a LayerContainer.\r\n assert(this._forcedRenderPass === RenderPass.None);\r\n this._forcedRenderPass = RenderPass.OpaqueGeneral;\r\n layer.graphic.addCommands(this);\r\n this._forcedRenderPass = RenderPass.None;\r\n return;\r\n }\r\n\r\n assert(this.isDrawingLayers);\r\n if (!this.isDrawingLayers)\r\n return;\r\n\r\n // Let the graphic add its commands. Afterward, pull them out and add them to the LayerCommands.\r\n this._layers.currentLayer = layer;\r\n layer.graphic.addCommands(this);\r\n\r\n const cmds = this.getCommands(this._forcedRenderPass);\r\n this._layers.addCommands(cmds);\r\n\r\n cmds.length = 0;\r\n this._layers.currentLayer = undefined;\r\n }\r\n\r\n public addHiliteLayerCommands(graphic: Graphic, pass: RenderPass): void {\r\n assert(this.isDrawingLayers || this._addLayersAsNormalGraphics);\r\n if (!this.isDrawingLayers && !this._addLayersAsNormalGraphics)\r\n return;\r\n\r\n const prevPass = this._forcedRenderPass;\r\n this._forcedRenderPass = RenderPass.None;\r\n\r\n graphic.addHiliteCommands(this, pass);\r\n\r\n this._forcedRenderPass = prevPass;\r\n }\r\n\r\n private getAnimationBranchState(branch: Branch): AnimationBranchState | undefined {\r\n const animId = branch.branch.animationId;\r\n return undefined !== animId ? this.target.animationBranches?.branchStates.get(animId) : undefined;\r\n }\r\n\r\n private pushAndPopBranchForPass(pass: RenderPass, branch: Branch, func: () => void): void {\r\n assert(!this.isDrawingLayers);\r\n\r\n const animState = this.getAnimationBranchState(branch);\r\n if (animState?.omit)\r\n return;\r\n\r\n assert(RenderPass.None !== pass);\r\n\r\n this._stack.pushBranch(branch);\r\n if (branch.planarClassifier)\r\n branch.planarClassifier.pushBatchState(this._batchState);\r\n\r\n const cmds = this.getCommands(pass);\r\n const clip = animState?.clip as ClipVolume | undefined;\r\n const pushClip = undefined !== clip ? new PushClipCommand(clip) : undefined;\r\n if (pushClip)\r\n cmds.push(pushClip);\r\n\r\n const push = new PushBranchCommand(branch);\r\n cmds.push(push);\r\n\r\n func();\r\n\r\n this._stack.pop();\r\n if (cmds[cmds.length - 1] === push) {\r\n cmds.pop();\r\n if (pushClip)\r\n cmds.pop();\r\n } else {\r\n cmds.push(PopBranchCommand.instance);\r\n if (pushClip)\r\n cmds.push(PopClipCommand.instance);\r\n }\r\n }\r\n\r\n private pushAndPop(push: PushCommand, pop: PopCommand, func: () => void): void {\r\n if (this.isDrawingLayers) {\r\n this._commands[RenderPass.Hilite].push(push);\r\n this._layers.pushAndPop(push, pop, func);\r\n\r\n const cmds = this._commands[RenderPass.Hilite];\r\n if (0 < cmds.length && cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n\r\n return;\r\n }\r\n\r\n if (RenderPass.None === this._forcedRenderPass) {\r\n // Need to make sure the push command precedes any subsequent commands added to any render pass.\r\n for (const cmds of this._commands)\r\n cmds.push(push);\r\n } else {\r\n // May want to add hilite commands as well - add the push command to that pass.\r\n this._commands[this._forcedRenderPass].push(push);\r\n this._commands[RenderPass.Hilite].push(push);\r\n }\r\n\r\n func();\r\n\r\n // Remove push command from any passes that didn't receive any commands; add the pop command to any passes that did.\r\n if (RenderPass.None === this._forcedRenderPass) {\r\n for (const cmds of this._commands) {\r\n assert(0 < cmds.length);\r\n if (0 < cmds.length && cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n }\r\n } else {\r\n assert(0 < this._commands[this._forcedRenderPass].length);\r\n assert(0 < this._commands[RenderPass.Hilite].length);\r\n\r\n let cmds = this._commands[this._forcedRenderPass];\r\n if (cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n\r\n cmds = this._commands[RenderPass.Hilite];\r\n if (cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n }\r\n }\r\n\r\n public pushAndPopBranch(branch: Branch, func: () => void): void {\r\n const animState = this.getAnimationBranchState(branch);\r\n if (animState?.omit)\r\n return;\r\n\r\n if (animState?.clip)\r\n this.pushAndPop(new PushClipCommand(animState.clip as ClipVolume), PopClipCommand.instance, () => this._pushAndPopBranch(branch, func));\r\n else\r\n this._pushAndPopBranch(branch, func);\r\n }\r\n\r\n private _pushAndPopBranch(branch: Branch, func: () => void): void {\r\n this._stack.pushBranch(branch);\r\n if (branch.planarClassifier)\r\n branch.planarClassifier.pushBatchState(this._batchState);\r\n\r\n this.pushAndPop(new PushBranchCommand(branch), PopBranchCommand.instance, func);\r\n\r\n this._stack.pop();\r\n }\r\n\r\n public pushAndPopState(state: BranchState, func: () => void): void {\r\n this._stack.pushState(state);\r\n this.pushAndPop(new PushStateCommand(state), PopBranchCommand.instance, func);\r\n this._stack.pop();\r\n }\r\n\r\n public clear(): void {\r\n assert(this._batchState.isEmpty);\r\n this._clearCommands();\r\n }\r\n\r\n private _clearCommands(): void {\r\n this._commands.forEach((cmds: DrawCommands) => { cmds.splice(0); });\r\n this._layers.clear();\r\n }\r\n\r\n public initForPickOverlays(sceneOverlays: GraphicList, overlayDecorations: GraphicList | undefined): void {\r\n this._clearCommands();\r\n\r\n this._addTranslucentAsOpaque = true;\r\n\r\n for (const sceneGf of sceneOverlays)\r\n (sceneGf as Graphic).addCommands(this);\r\n\r\n if (undefined !== overlayDecorations) {\r\n this.pushAndPopState(this.target.decorationsState, () => {\r\n for (const overlay of overlayDecorations) {\r\n const gf = overlay as Graphic;\r\n if (gf.isPickable)\r\n gf.addCommands(this);\r\n }\r\n });\r\n }\r\n\r\n this._addTranslucentAsOpaque = false;\r\n }\r\n\r\n public initForReadPixels(gfx: TargetGraphics): void {\r\n this.clear();\r\n\r\n // Set flag to force translucent geometry to be put into the opaque pass.\r\n this._addTranslucentAsOpaque = true;\r\n\r\n // Add the scene graphics.\r\n this.addGraphics(gfx.foreground);\r\n\r\n // Also add any pickable decorations.\r\n if (undefined !== gfx.decorations)\r\n this.addPickableDecorations(gfx.decorations);\r\n\r\n // Also background map is pickable\r\n this.addBackgroundMapGraphics(gfx.background);\r\n\r\n this._addTranslucentAsOpaque = false;\r\n\r\n this.setupClassificationByVolume();\r\n this._layers.outputCommands();\r\n }\r\n\r\n public initForRender(gfx: TargetGraphics): void {\r\n this.clear();\r\n\r\n this.addGraphics(gfx.foreground);\r\n this.addBackgroundMapGraphics(gfx.background);\r\n this.addOverlayGraphics(gfx.overlays);\r\n\r\n const dynamics = gfx.dynamics;\r\n if (dynamics && dynamics.length > 0)\r\n this.addDecorations(dynamics);\r\n\r\n const dec = gfx.decorations;\r\n if (undefined !== dec) {\r\n this.addBackground(dec.viewBackground as Graphic);\r\n\r\n this.addSkyBox(dec.skyBox as Graphic);\r\n\r\n if (undefined !== dec.normal && 0 < dec.normal.length)\r\n this.addGraphics(dec.normal);\r\n\r\n if (undefined !== dec.world && 0 < dec.world.length)\r\n this.addWorldDecorations(dec.world);\r\n\r\n this.pushAndPopState(this.target.decorationsState, () => {\r\n if (undefined !== dec.viewOverlay && 0 < dec.viewOverlay.length)\r\n this.addDecorations(dec.viewOverlay, RenderPass.ViewOverlay);\r\n\r\n if (undefined !== dec.worldOverlay && 0 < dec.worldOverlay.length)\r\n this.addDecorations(dec.worldOverlay, RenderPass.WorldOverlay);\r\n });\r\n }\r\n\r\n this.setupClassificationByVolume();\r\n this._layers.outputCommands();\r\n }\r\n\r\n public addPrimitive(prim: Primitive): void {\r\n // ###TODO Would be nice if we could detect outside active volume here, but active volume only applies to specific render passes\r\n // if (this.target.isGeometryOutsideActiveVolume(prim.cachedGeometry))\r\n // return;\r\n\r\n if (undefined !== this._frustumPlanes) { // See if we can cull this primitive.\r\n if (\"classification\" === prim.getPass(this.target)) {\r\n const geom = prim.cachedGeometry;\r\n geom.computeRange(this._scratchRange);\r\n let frustum = Frustum.fromRange(this._scratchRange, this._scratchFrustum);\r\n frustum = frustum.transformBy(this.target.currentTransform, frustum);\r\n if (FrustumPlanes.Containment.Outside === this._frustumPlanes.computeFrustumContainment(frustum)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const command = new PrimitiveCommand(prim);\r\n this.addPrimitiveCommand(command);\r\n\r\n if (RenderPass.None === this._forcedRenderPass && prim.isEdge) {\r\n const vf: ViewFlags = this.target.currentViewFlags;\r\n if (vf.renderMode !== RenderMode.Wireframe && vf.hiddenEdges)\r\n this.getCommands(RenderPass.HiddenEdge).push(command);\r\n }\r\n }\r\n\r\n public addBranch(branch: Branch): void {\r\n this.pushAndPopBranch(branch, () => {\r\n branch.branch.entries.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n });\r\n }\r\n\r\n public computeBatchHiliteRenderPass(batch: Batch): RenderPass {\r\n let pass = RenderPass.Hilite;\r\n if (batch.graphic instanceof MeshGraphic) {\r\n const mg = batch.graphic;\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n } else if (batch.graphic instanceof GraphicsArray) {\r\n const ga = batch.graphic;\r\n if (ga.graphics[0] instanceof MeshGraphic) {\r\n const mg = ga.graphics[0];\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n } else if (ga.graphics[0] instanceof Branch) {\r\n const b = ga.graphics[0];\r\n if (b.branch.entries.length > 0 && b.branch.entries[0] instanceof MeshGraphic) {\r\n const mg = b.branch.entries[0];\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n }\r\n }\r\n }\r\n return pass;\r\n }\r\n\r\n public addBatch(batch: Batch): void {\r\n if (batch.locateOnly && !this.target.isReadPixelsInProgress)\r\n return;\r\n\r\n // Batches (aka element tiles) should only draw during ordinary (translucent or opaque) passes.\r\n // They may draw during both, or neither.\r\n // NB: This is no longer true - pickable overlay decorations are defined as Batches. Problem?\r\n // assert(RenderPass.None === this._forcedRenderPass);\r\n assert(!this._opaqueOverrides && !this._translucentOverrides);\r\n assert(undefined === this._curBatch);\r\n\r\n // If all features are overridden to be invisible, draw no graphics in this batch\r\n const overrides = batch.getOverrides(this.target);\r\n if (overrides.allHidden)\r\n return;\r\n\r\n if (!batch.range.isNull) {\r\n // ###TODO Would be nice if we could detect outside active volume here, but active volume only applies to specific render passes\r\n // if (this.target.isRangeOutsideActiveVolume(batch.range))\r\n // return;\r\n\r\n if (undefined !== this._frustumPlanes) {\r\n let frustum = Frustum.fromRange(batch.range, this._scratchFrustum);\r\n frustum = frustum.transformBy(this.target.currentTransform, frustum);\r\n if (FrustumPlanes.Containment.Outside === this._frustumPlanes.computeFrustumContainment(frustum)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const classifier = this._stack.top.planarClassifier;\r\n\r\n this._batchState.push(batch, true);\r\n\r\n this.pushAndPop(new PushBatchCommand(batch), PopBatchCommand.instance, () => {\r\n if (this.currentViewFlags.transparency || overrides.anyViewIndependentTranslucent) {\r\n this._opaqueOverrides = overrides.anyOpaque;\r\n this._translucentOverrides = overrides.anyTranslucent;\r\n\r\n if (undefined !== classifier) {\r\n this._opaqueOverrides = this._opaqueOverrides || classifier.anyOpaque;\r\n this._translucentOverrides = this._translucentOverrides || classifier.anyTranslucent;\r\n }\r\n }\r\n\r\n // If we have an active volume classifier then force all batches for the reality data being classified into a special render pass.\r\n let savedForcedRenderPass = RenderPass.None;\r\n if (undefined !== this.target.activeVolumeClassifierModelId && batch.featureTable.modelId === this.target.activeVolumeClassifierModelId) {\r\n savedForcedRenderPass = this._forcedRenderPass;\r\n this._forcedRenderPass = RenderPass.VolumeClassifiedRealityData;\r\n }\r\n\r\n (batch.graphic as Graphic).addCommands(this);\r\n\r\n if (RenderPass.VolumeClassifiedRealityData === this._forcedRenderPass)\r\n this._forcedRenderPass = savedForcedRenderPass;\r\n\r\n // If the batch contains hilited features, need to render them in the hilite pass\r\n const anyHilited = overrides.anyHilited;\r\n const planarClassifierHilited = undefined !== classifier && classifier.anyHilited;\r\n if (anyHilited || planarClassifierHilited)\r\n (batch.graphic as Graphic).addHiliteCommands(this, planarClassifierHilited ? RenderPass.HilitePlanarClassification : this.computeBatchHiliteRenderPass(batch));\r\n\r\n });\r\n\r\n this._opaqueOverrides = this._translucentOverrides = false;\r\n this._batchState.pop();\r\n }\r\n\r\n // Define a culling frustum. Commands associated with Graphics whose ranges do not intersect the frustum will be skipped.\r\n public setCheckRange(frustum: Frustum) { this._frustumPlanes = new FrustumPlanes(frustum); }\r\n // Clear the culling frustum.\r\n public clearCheckRange(): void { this._frustumPlanes = undefined; }\r\n\r\n private setupClassificationByVolume(): void {\r\n // To make it easier to process the classifiers individually, set up a secondary command list for them where they\r\n // are each separated by their own pushes & pops so that they can easily be drawn individually. This now supports\r\n // nested branches and batches.\r\n const groupedCmds = this._commands[RenderPass.Classification];\r\n const byIndexCmds = this._commands[RenderPass.ClassificationByIndex];\r\n const pushCommands: DrawCommands = []; // will contain current set of pushes ahead of a primitive\r\n for (const cmd of groupedCmds) {\r\n switch (cmd.opcode) {\r\n case \"pushBranch\":\r\n case \"pushBatch\":\r\n case \"pushState\":\r\n pushCommands.push(cmd);\r\n break;\r\n case \"drawPrimitive\":\r\n for (const pushCmd of pushCommands) {\r\n byIndexCmds.push(pushCmd);\r\n }\r\n byIndexCmds.push(cmd);\r\n for (let i = pushCommands.length - 1; i >= 0; --i) {\r\n if (\"pushBatch\" === pushCommands[i].opcode)\r\n byIndexCmds.push(PopBatchCommand.instance);\r\n else // should be eith pushBranch or pushState opcode\r\n byIndexCmds.push(PopBranchCommand.instance);\r\n }\r\n break;\r\n case \"popBatch\":\r\n case \"popBranch\":\r\n pushCommands.pop();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n public dump(): Array<{ name: string, count: number }> {\r\n const dump = [\r\n { name: \"Primitives\", count: 0 },\r\n { name: \"Batches\", count: 0 },\r\n { name: \"Branches\", count: 0 },\r\n ];\r\n\r\n for (const cmds of this._commands) {\r\n for (const cmd of cmds) {\r\n let index;\r\n switch (cmd.opcode) {\r\n case \"drawPrimitive\": index = 0; break;\r\n case \"pushBatch\": index = 1; break;\r\n case \"pushBranch\": index = 2; break;\r\n default: continue;\r\n }\r\n\r\n dump[index].count++;\r\n }\r\n }\r\n\r\n return dump;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RenderCommands.js","sourceRoot":"","sources":["../../../../src/render/webgl/RenderCommands.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Frustum, FrustumPlanes, RenderMode, ViewFlags } from \"@itwin/core-common\";\r\nimport { Decorations } from \"../Decorations\";\r\nimport { SurfaceType } from \"../primitives/SurfaceParams\";\r\nimport { GraphicList, RenderGraphic } from \"../RenderGraphic\";\r\nimport { AnimationBranchState } from \"../GraphicBranch\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport {\r\n DrawCommands, PopBatchCommand, PopBranchCommand, PopClipCommand, PopCommand, PrimitiveCommand, PushBatchCommand,\r\n PushBranchCommand, PushClipCommand, PushCommand, PushStateCommand,\r\n} from \"./DrawCommand\";\r\nimport { Batch, Branch, Graphic, GraphicsArray } from \"./Graphic\";\r\nimport { Layer, LayerContainer } from \"./Layer\";\r\nimport { LayerCommandLists } from \"./LayerCommands\";\r\nimport { MeshGraphic } from \"./Mesh\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { CompositeFlags, Pass, RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { TargetGraphics } from \"./TargetGraphics\";\r\nimport { Target } from \"./Target\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\n\r\n/** A list of DrawCommands to be rendered, ordered by render pass.\r\n * @internal\r\n */\r\nexport class RenderCommands implements Iterable<DrawCommands> {\r\n private _frustumPlanes?: FrustumPlanes;\r\n private readonly _scratchFrustum = new Frustum();\r\n private readonly _scratchRange = new Range3d();\r\n private readonly _commands = new Array<DrawCommands>(RenderPass.COUNT);\r\n private _target: Target;\r\n private _stack: BranchStack; // refers to the Target's BranchStack\r\n private _batchState: BatchState; // refers to the Target's BatchState\r\n private _forcedRenderPass: RenderPass = RenderPass.None;\r\n private _addLayersAsNormalGraphics = false;\r\n private _opaqueOverrides = false;\r\n private _translucentOverrides = false;\r\n private _addTranslucentAsOpaque = false; // true when rendering for _ReadPixels to force translucent items to be drawn in opaque pass.\r\n private readonly _layers: LayerCommandLists;\r\n\r\n public get target(): Target { return this._target; }\r\n\r\n public [Symbol.iterator](): Iterator<DrawCommands> {\r\n return this._commands[Symbol.iterator]();\r\n }\r\n\r\n public get isEmpty(): boolean {\r\n for (const commands of this._commands)\r\n if (0 < commands.length)\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public get isDrawingLayers() {\r\n switch (this._forcedRenderPass) {\r\n case RenderPass.OpaqueLayers:\r\n case RenderPass.TranslucentLayers:\r\n case RenderPass.OverlayLayers:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n public get currentViewFlags(): ViewFlags { return this._stack.top.viewFlags; }\r\n public get compositeFlags(): CompositeFlags {\r\n let flags = CompositeFlags.None;\r\n if (this.hasCommands(RenderPass.Translucent))\r\n flags |= CompositeFlags.Translucent;\r\n\r\n if (this.hasCommands(RenderPass.Hilite) || this.hasCommands(RenderPass.HiliteClassification) || this.hasCommands(RenderPass.HilitePlanarClassification))\r\n flags |= CompositeFlags.Hilite;\r\n\r\n if (this.target.wantAmbientOcclusion)\r\n flags |= CompositeFlags.AmbientOcclusion;\r\n\r\n return flags;\r\n }\r\n\r\n private get _curBatch(): Batch | undefined { return this._batchState.currentBatch; }\r\n\r\n public hasCommands(pass: RenderPass): boolean { return 0 !== this.getCommands(pass).length; }\r\n public isOpaquePass(pass: RenderPass): boolean { return pass >= RenderPass.OpaqueLinear && pass <= RenderPass.OpaqueGeneral; }\r\n\r\n constructor(target: Target, stack: BranchStack, batchState: BatchState) {\r\n this._target = target;\r\n this._stack = stack;\r\n this._batchState = batchState;\r\n this._layers = new LayerCommandLists(this);\r\n\r\n for (let i = 0; i < RenderPass.COUNT; ++i)\r\n this._commands[i] = [];\r\n }\r\n\r\n public reset(target: Target, stack: BranchStack, batchState: BatchState): void {\r\n this._target = target;\r\n this._stack = stack;\r\n this._batchState = batchState;\r\n this.clear();\r\n }\r\n\r\n public collectGraphicsForPlanarProjection(scene: GraphicList): void {\r\n assert(this._forcedRenderPass === RenderPass.None);\r\n assert(!this._addLayersAsNormalGraphics);\r\n\r\n this._addLayersAsNormalGraphics = true;\r\n this.addGraphics(scene);\r\n this._addLayersAsNormalGraphics = false;\r\n }\r\n\r\n public addGraphics(scene: GraphicList, forcedPass: RenderPass = RenderPass.None): void {\r\n this._forcedRenderPass = forcedPass;\r\n scene.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n /** Add backgroundMap graphics to their own render pass. */\r\n public addBackgroundMapGraphics(backgroundMapGraphics: GraphicList): void {\r\n this._forcedRenderPass = RenderPass.BackgroundMap;\r\n backgroundMapGraphics.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n /** Add overlay graphics to the world overlay pass */\r\n public addOverlayGraphics(overlayGraphics: GraphicList): void {\r\n this._forcedRenderPass = RenderPass.WorldOverlay;\r\n overlayGraphics.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addDecorations(dec: GraphicList, forcedPass: RenderPass = RenderPass.None): void {\r\n this._forcedRenderPass = forcedPass;\r\n for (const entry of dec) {\r\n (entry as Graphic).addCommands(this);\r\n }\r\n\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addWorldDecorations(decs: GraphicList): void {\r\n const world = this.target.getWorldDecorations(decs);\r\n this.pushAndPopBranch(world, () => {\r\n for (const entry of world.branch.entries) {\r\n (entry as Graphic).addCommands(this);\r\n }\r\n });\r\n }\r\n\r\n private addPickableDecorations(decs: Decorations): void {\r\n if (undefined !== decs.normal) {\r\n for (const normal of decs.normal) {\r\n const gf = normal as Graphic;\r\n if (gf.isPickable)\r\n gf.addCommands(this);\r\n }\r\n }\r\n\r\n if (undefined !== decs.world) {\r\n const world = this.target.getWorldDecorations(decs.world);\r\n this.pushAndPopBranch(world, () => {\r\n for (const gf of world.branch.entries) {\r\n if ((gf as Graphic).isPickable)\r\n (gf as Graphic).addCommands(this);\r\n }\r\n });\r\n }\r\n }\r\n\r\n public addBackground(gf?: Graphic): void {\r\n if (undefined === gf)\r\n return;\r\n\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n\r\n this._forcedRenderPass = RenderPass.Background;\r\n this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addSkyBox(gf?: Graphic): void {\r\n if (undefined === gf)\r\n return;\r\n\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n\r\n this._forcedRenderPass = RenderPass.SkyBox;\r\n this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addPrimitiveCommand(command: PrimitiveCommand, pass?: Pass): void {\r\n if (undefined === pass)\r\n pass = command.getPass(this.target);\r\n\r\n if (\"none\" === pass) // Edges will return none if they don't want to draw at all (edges not turned on).\r\n return;\r\n\r\n if (RenderPass.None !== this._forcedRenderPass) {\r\n // Add the command to the forced render pass (background).\r\n this.getCommands(this._forcedRenderPass).push(command);\r\n return;\r\n }\r\n\r\n if (!command.hasFeatures) {\r\n // Draw in general opaque pass so they are not in pick data.\r\n switch (pass) {\r\n case \"opaque-linear\":\r\n case \"opaque-planar\":\r\n pass = \"opaque\";\r\n break;\r\n case \"opaque-planar-translucent\":\r\n pass = \"opaque-translucent\";\r\n break;\r\n }\r\n }\r\n\r\n const haveFeatureOverrides = (this._opaqueOverrides || this._translucentOverrides) && command.opcode && command.hasFeatures;\r\n\r\n if (Pass.rendersTranslucent(pass) && this._addTranslucentAsOpaque) {\r\n switch (command.renderOrder) {\r\n case RenderOrder.PlanarLitSurface:\r\n case RenderOrder.PlanarUnlitSurface:\r\n case RenderOrder.BlankingRegion:\r\n pass = \"opaque-planar\";\r\n break;\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n pass = \"opaque\";\r\n break;\r\n default:\r\n pass = \"opaque-linear\";\r\n break;\r\n }\r\n }\r\n\r\n const isDoublePass = Pass.rendersOpaqueAndTranslucent(pass);\r\n const renderTranslucentDuringOpaque = isDoublePass || (this._opaqueOverrides && haveFeatureOverrides);\r\n if (renderTranslucentDuringOpaque && Pass.rendersTranslucent(pass) && !command.primitive.cachedGeometry.alwaysRenderTranslucent) {\r\n let opaquePass: RenderPass;\r\n if (Pass.rendersOpaqueAndTranslucent(pass)) {\r\n opaquePass = Pass.toOpaquePass(pass);\r\n } else {\r\n switch (command.renderOrder) {\r\n case RenderOrder.PlanarLitSurface:\r\n case RenderOrder.PlanarUnlitSurface:\r\n case RenderOrder.BlankingRegion:\r\n opaquePass = RenderPass.OpaquePlanar;\r\n break;\r\n case RenderOrder.LitSurface:\r\n case RenderOrder.UnlitSurface:\r\n opaquePass = RenderPass.OpaqueGeneral;\r\n break;\r\n default:\r\n opaquePass = RenderPass.OpaqueLinear;\r\n break;\r\n }\r\n }\r\n\r\n this.getCommands(opaquePass).push(command);\r\n }\r\n\r\n const renderOpaqueDuringTranslucent = isDoublePass || (this._translucentOverrides && haveFeatureOverrides);\r\n if (renderOpaqueDuringTranslucent && Pass.rendersOpaque(pass) && !this._addTranslucentAsOpaque)\r\n this.getCommands(RenderPass.Translucent).push(command);\r\n\r\n if (!Pass.rendersOpaqueAndTranslucent(pass))\r\n this.getCommands(Pass.toRenderPass(pass)).push(command);\r\n }\r\n\r\n public getCommands(pass: RenderPass): DrawCommands {\r\n let idx = pass as number;\r\n assert(idx < this._commands.length);\r\n if (idx >= this._commands.length)\r\n idx -= 1;\r\n\r\n return this._commands[idx];\r\n }\r\n\r\n public replaceCommands(pass: RenderPass, cmds: DrawCommands): void {\r\n const idx = pass as number;\r\n this._commands[idx].splice(0);\r\n this._commands[idx] = cmds;\r\n }\r\n\r\n public addHiliteBranch(branch: Branch, pass: RenderPass): void {\r\n this.pushAndPopBranchForPass(pass, branch, () => {\r\n branch.branch.entries.forEach((entry: RenderGraphic) => (entry as Graphic).addHiliteCommands(this, pass));\r\n });\r\n }\r\n\r\n public processLayers(container: LayerContainer): void {\r\n assert(RenderPass.None === this._forcedRenderPass);\r\n if (RenderPass.None !== this._forcedRenderPass)\r\n return;\r\n\r\n this._forcedRenderPass = container.renderPass;\r\n this._layers.processLayers(container, () => container.graphic.addCommands(this));\r\n this._forcedRenderPass = RenderPass.None;\r\n }\r\n\r\n public addLayerCommands(layer: Layer): void {\r\n if (this._addLayersAsNormalGraphics) {\r\n // GraphicsCollectorDrawArgs wants to collect graphics to project to a plane for masking.\r\n // It bypasses PlanProjectionTreeReference.createDrawArgs which would otherwise wrap the graphics in a LayerContainer.\r\n assert(this._forcedRenderPass === RenderPass.None);\r\n this._forcedRenderPass = RenderPass.OpaqueGeneral;\r\n layer.graphic.addCommands(this);\r\n this._forcedRenderPass = RenderPass.None;\r\n return;\r\n }\r\n\r\n assert(this.isDrawingLayers);\r\n if (!this.isDrawingLayers)\r\n return;\r\n\r\n // Let the graphic add its commands. Afterward, pull them out and add them to the LayerCommands.\r\n this._layers.currentLayer = layer;\r\n layer.graphic.addCommands(this);\r\n\r\n const cmds = this.getCommands(this._forcedRenderPass);\r\n this._layers.addCommands(cmds);\r\n\r\n cmds.length = 0;\r\n this._layers.currentLayer = undefined;\r\n }\r\n\r\n public addHiliteLayerCommands(graphic: Graphic, pass: RenderPass): void {\r\n assert(this.isDrawingLayers || this._addLayersAsNormalGraphics);\r\n if (!this.isDrawingLayers && !this._addLayersAsNormalGraphics)\r\n return;\r\n\r\n const prevPass = this._forcedRenderPass;\r\n this._forcedRenderPass = RenderPass.None;\r\n\r\n graphic.addHiliteCommands(this, pass);\r\n\r\n this._forcedRenderPass = prevPass;\r\n }\r\n\r\n private getAnimationBranchState(branch: Branch): AnimationBranchState | undefined {\r\n const animId = branch.branch.animationId;\r\n return undefined !== animId ? this.target.animationBranches?.branchStates.get(animId) : undefined;\r\n }\r\n\r\n private pushAndPopBranchForPass(pass: RenderPass, branch: Branch, func: () => void): void {\r\n assert(!this.isDrawingLayers);\r\n\r\n const animState = this.getAnimationBranchState(branch);\r\n if (animState?.omit)\r\n return;\r\n\r\n assert(RenderPass.None !== pass);\r\n\r\n this._stack.pushBranch(branch);\r\n if (branch.planarClassifier)\r\n branch.planarClassifier.pushBatchState(this._batchState);\r\n\r\n if (branch.secondaryClassifiers)\r\n branch.secondaryClassifiers.forEach((classifier) => classifier.pushBatchState(this._batchState));\r\n\r\n const cmds = this.getCommands(pass);\r\n const clip = animState?.clip as ClipVolume | undefined;\r\n const pushClip = undefined !== clip ? new PushClipCommand(clip) : undefined;\r\n if (pushClip)\r\n cmds.push(pushClip);\r\n\r\n const push = new PushBranchCommand(branch);\r\n cmds.push(push);\r\n\r\n func();\r\n\r\n this._stack.pop();\r\n if (cmds[cmds.length - 1] === push) {\r\n cmds.pop();\r\n if (pushClip)\r\n cmds.pop();\r\n } else {\r\n cmds.push(PopBranchCommand.instance);\r\n if (pushClip)\r\n cmds.push(PopClipCommand.instance);\r\n }\r\n }\r\n\r\n private pushAndPop(push: PushCommand, pop: PopCommand, func: () => void): void {\r\n if (this.isDrawingLayers) {\r\n this._commands[RenderPass.Hilite].push(push);\r\n this._layers.pushAndPop(push, pop, func);\r\n\r\n const cmds = this._commands[RenderPass.Hilite];\r\n if (0 < cmds.length && cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n\r\n return;\r\n }\r\n\r\n if (RenderPass.None === this._forcedRenderPass) {\r\n // Need to make sure the push command precedes any subsequent commands added to any render pass.\r\n for (const cmds of this._commands)\r\n cmds.push(push);\r\n } else {\r\n // May want to add hilite commands as well - add the push command to that pass.\r\n this._commands[this._forcedRenderPass].push(push);\r\n this._commands[RenderPass.Hilite].push(push);\r\n }\r\n\r\n func();\r\n\r\n // Remove push command from any passes that didn't receive any commands; add the pop command to any passes that did.\r\n if (RenderPass.None === this._forcedRenderPass) {\r\n for (const cmds of this._commands) {\r\n assert(0 < cmds.length);\r\n if (0 < cmds.length && cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n }\r\n } else {\r\n assert(0 < this._commands[this._forcedRenderPass].length);\r\n assert(0 < this._commands[RenderPass.Hilite].length);\r\n\r\n let cmds = this._commands[this._forcedRenderPass];\r\n if (cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n\r\n cmds = this._commands[RenderPass.Hilite];\r\n if (cmds[cmds.length - 1] === push)\r\n cmds.pop();\r\n else\r\n cmds.push(pop);\r\n }\r\n }\r\n\r\n public pushAndPopBranch(branch: Branch, func: () => void): void {\r\n const animState = this.getAnimationBranchState(branch);\r\n if (animState?.omit)\r\n return;\r\n\r\n if (animState?.clip)\r\n this.pushAndPop(new PushClipCommand(animState.clip as ClipVolume), PopClipCommand.instance, () => this._pushAndPopBranch(branch, func));\r\n else\r\n this._pushAndPopBranch(branch, func);\r\n }\r\n\r\n private _pushAndPopBranch(branch: Branch, func: () => void): void {\r\n this._stack.pushBranch(branch);\r\n if (branch.planarClassifier)\r\n branch.planarClassifier.pushBatchState(this._batchState);\r\n\r\n if (branch.secondaryClassifiers)\r\n branch.secondaryClassifiers.forEach((classifier) => classifier.pushBatchState(this._batchState));\r\n\r\n this.pushAndPop(new PushBranchCommand(branch), PopBranchCommand.instance, func);\r\n\r\n this._stack.pop();\r\n }\r\n\r\n public pushAndPopState(state: BranchState, func: () => void): void {\r\n this._stack.pushState(state);\r\n this.pushAndPop(new PushStateCommand(state), PopBranchCommand.instance, func);\r\n this._stack.pop();\r\n }\r\n\r\n public clear(): void {\r\n assert(this._batchState.isEmpty);\r\n this._clearCommands();\r\n }\r\n\r\n private _clearCommands(): void {\r\n this._commands.forEach((cmds: DrawCommands) => { cmds.splice(0); });\r\n this._layers.clear();\r\n }\r\n\r\n public initForPickOverlays(sceneOverlays: GraphicList, overlayDecorations: GraphicList | undefined): void {\r\n this._clearCommands();\r\n\r\n this._addTranslucentAsOpaque = true;\r\n\r\n for (const sceneGf of sceneOverlays)\r\n (sceneGf as Graphic).addCommands(this);\r\n\r\n if (undefined !== overlayDecorations) {\r\n this.pushAndPopState(this.target.decorationsState, () => {\r\n for (const overlay of overlayDecorations) {\r\n const gf = overlay as Graphic;\r\n if (gf.isPickable)\r\n gf.addCommands(this);\r\n }\r\n });\r\n }\r\n\r\n this._addTranslucentAsOpaque = false;\r\n }\r\n\r\n public initForReadPixels(gfx: TargetGraphics): void {\r\n this.clear();\r\n\r\n // Set flag to force translucent geometry to be put into the opaque pass.\r\n this._addTranslucentAsOpaque = true;\r\n\r\n // Add the scene graphics.\r\n this.addGraphics(gfx.foreground);\r\n\r\n // Also add any pickable decorations.\r\n if (undefined !== gfx.decorations)\r\n this.addPickableDecorations(gfx.decorations);\r\n\r\n // Also background map is pickable\r\n this.addBackgroundMapGraphics(gfx.background);\r\n\r\n this._addTranslucentAsOpaque = false;\r\n\r\n this.setupClassificationByVolume();\r\n this._layers.outputCommands();\r\n }\r\n\r\n public initForRender(gfx: TargetGraphics): void {\r\n this.clear();\r\n\r\n this.addGraphics(gfx.foreground);\r\n this.addBackgroundMapGraphics(gfx.background);\r\n this.addOverlayGraphics(gfx.overlays);\r\n\r\n const dynamics = gfx.dynamics;\r\n if (dynamics && dynamics.length > 0)\r\n this.addDecorations(dynamics);\r\n\r\n const dec = gfx.decorations;\r\n if (undefined !== dec) {\r\n this.addBackground(dec.viewBackground as Graphic);\r\n\r\n this.addSkyBox(dec.skyBox as Graphic);\r\n\r\n if (undefined !== dec.normal && 0 < dec.normal.length)\r\n this.addGraphics(dec.normal);\r\n\r\n if (undefined !== dec.world && 0 < dec.world.length)\r\n this.addWorldDecorations(dec.world);\r\n\r\n this.pushAndPopState(this.target.decorationsState, () => {\r\n if (undefined !== dec.viewOverlay && 0 < dec.viewOverlay.length)\r\n this.addDecorations(dec.viewOverlay, RenderPass.ViewOverlay);\r\n\r\n if (undefined !== dec.worldOverlay && 0 < dec.worldOverlay.length)\r\n this.addDecorations(dec.worldOverlay, RenderPass.WorldOverlay);\r\n });\r\n }\r\n\r\n this.setupClassificationByVolume();\r\n this._layers.outputCommands();\r\n }\r\n\r\n public addPrimitive(prim: Primitive): void {\r\n // ###TODO Would be nice if we could detect outside active volume here, but active volume only applies to specific render passes\r\n // if (this.target.isGeometryOutsideActiveVolume(prim.cachedGeometry))\r\n // return;\r\n\r\n if (undefined !== this._frustumPlanes) { // See if we can cull this primitive.\r\n if (\"classification\" === prim.getPass(this.target)) {\r\n const geom = prim.cachedGeometry;\r\n geom.computeRange(this._scratchRange);\r\n let frustum = Frustum.fromRange(this._scratchRange, this._scratchFrustum);\r\n frustum = frustum.transformBy(this.target.currentTransform, frustum);\r\n if (FrustumPlanes.Containment.Outside === this._frustumPlanes.computeFrustumContainment(frustum)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const command = new PrimitiveCommand(prim);\r\n this.addPrimitiveCommand(command);\r\n\r\n if (RenderPass.None === this._forcedRenderPass && prim.isEdge) {\r\n const vf: ViewFlags = this.target.currentViewFlags;\r\n if (vf.renderMode !== RenderMode.Wireframe && vf.hiddenEdges)\r\n this.getCommands(RenderPass.HiddenEdge).push(command);\r\n }\r\n }\r\n\r\n public addBranch(branch: Branch): void {\r\n this.pushAndPopBranch(branch, () => {\r\n branch.branch.entries.forEach((entry: RenderGraphic) => (entry as Graphic).addCommands(this));\r\n });\r\n }\r\n\r\n public computeBatchHiliteRenderPass(batch: Batch): RenderPass {\r\n let pass = RenderPass.Hilite;\r\n if (batch.graphic instanceof MeshGraphic) {\r\n const mg = batch.graphic;\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n } else if (batch.graphic instanceof GraphicsArray) {\r\n const ga = batch.graphic;\r\n if (ga.graphics[0] instanceof MeshGraphic) {\r\n const mg = ga.graphics[0];\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n } else if (ga.graphics[0] instanceof Branch) {\r\n const b = ga.graphics[0];\r\n if (b.branch.entries.length > 0 && b.branch.entries[0] instanceof MeshGraphic) {\r\n const mg = b.branch.entries[0];\r\n if (SurfaceType.VolumeClassifier === mg.surfaceType)\r\n pass = RenderPass.HiliteClassification;\r\n }\r\n }\r\n }\r\n return pass;\r\n }\r\n\r\n public addBatch(batch: Batch): void {\r\n if (batch.locateOnly && !this.target.isReadPixelsInProgress)\r\n return;\r\n\r\n // Batches (aka element tiles) should only draw during ordinary (translucent or opaque) passes.\r\n // They may draw during both, or neither.\r\n // NB: This is no longer true - pickable overlay decorations are defined as Batches. Problem?\r\n // assert(RenderPass.None === this._forcedRenderPass);\r\n assert(!this._opaqueOverrides && !this._translucentOverrides);\r\n assert(undefined === this._curBatch);\r\n\r\n // If all features are overridden to be invisible, draw no graphics in this batch\r\n const overrides = batch.getOverrides(this.target);\r\n if (overrides.allHidden)\r\n return;\r\n\r\n if (!batch.range.isNull) {\r\n // ###TODO Would be nice if we could detect outside active volume here, but active volume only applies to specific render passes\r\n // if (this.target.isRangeOutsideActiveVolume(batch.range))\r\n // return;\r\n\r\n if (undefined !== this._frustumPlanes) {\r\n let frustum = Frustum.fromRange(batch.range, this._scratchFrustum);\r\n frustum = frustum.transformBy(this.target.currentTransform, frustum);\r\n if (FrustumPlanes.Containment.Outside === this._frustumPlanes.computeFrustumContainment(frustum)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const classifier = this._stack.top.planarClassifier;\r\n\r\n this._batchState.push(batch, true);\r\n\r\n this.pushAndPop(new PushBatchCommand(batch), PopBatchCommand.instance, () => {\r\n if (this.currentViewFlags.transparency || overrides.anyViewIndependentTranslucent) {\r\n this._opaqueOverrides = overrides.anyOpaque;\r\n this._translucentOverrides = overrides.anyTranslucent;\r\n\r\n if (undefined !== classifier) {\r\n this._opaqueOverrides = this._opaqueOverrides || classifier.anyOpaque;\r\n this._translucentOverrides = this._translucentOverrides || classifier.anyTranslucent;\r\n }\r\n }\r\n\r\n // If we have an active volume classifier then force all batches for the reality data being classified into a special render pass.\r\n let savedForcedRenderPass = RenderPass.None;\r\n if (undefined !== this.target.activeVolumeClassifierModelId && batch.featureTable.modelId === this.target.activeVolumeClassifierModelId) {\r\n savedForcedRenderPass = this._forcedRenderPass;\r\n this._forcedRenderPass = RenderPass.VolumeClassifiedRealityData;\r\n }\r\n\r\n (batch.graphic as Graphic).addCommands(this);\r\n\r\n if (RenderPass.VolumeClassifiedRealityData === this._forcedRenderPass)\r\n this._forcedRenderPass = savedForcedRenderPass;\r\n\r\n // If the batch contains hilited features, need to render them in the hilite pass\r\n const anyHilited = overrides.anyHilited;\r\n const planarClassifierHilited = undefined !== classifier && classifier.anyHilited;\r\n if (anyHilited || planarClassifierHilited)\r\n (batch.graphic as Graphic).addHiliteCommands(this, planarClassifierHilited ? RenderPass.HilitePlanarClassification : this.computeBatchHiliteRenderPass(batch));\r\n\r\n });\r\n\r\n this._opaqueOverrides = this._translucentOverrides = false;\r\n this._batchState.pop();\r\n }\r\n\r\n // Define a culling frustum. Commands associated with Graphics whose ranges do not intersect the frustum will be skipped.\r\n public setCheckRange(frustum: Frustum) { this._frustumPlanes = new FrustumPlanes(frustum); }\r\n // Clear the culling frustum.\r\n public clearCheckRange(): void { this._frustumPlanes = undefined; }\r\n\r\n private setupClassificationByVolume(): void {\r\n // To make it easier to process the classifiers individually, set up a secondary command list for them where they\r\n // are each separated by their own pushes & pops so that they can easily be drawn individually. This now supports\r\n // nested branches and batches.\r\n const groupedCmds = this._commands[RenderPass.Classification];\r\n const byIndexCmds = this._commands[RenderPass.ClassificationByIndex];\r\n const pushCommands: DrawCommands = []; // will contain current set of pushes ahead of a primitive\r\n for (const cmd of groupedCmds) {\r\n switch (cmd.opcode) {\r\n case \"pushBranch\":\r\n case \"pushBatch\":\r\n case \"pushState\":\r\n pushCommands.push(cmd);\r\n break;\r\n case \"drawPrimitive\":\r\n for (const pushCmd of pushCommands) {\r\n byIndexCmds.push(pushCmd);\r\n }\r\n byIndexCmds.push(cmd);\r\n for (let i = pushCommands.length - 1; i >= 0; --i) {\r\n if (\"pushBatch\" === pushCommands[i].opcode)\r\n byIndexCmds.push(PopBatchCommand.instance);\r\n else // should be eith pushBranch or pushState opcode\r\n byIndexCmds.push(PopBranchCommand.instance);\r\n }\r\n break;\r\n case \"popBatch\":\r\n case \"popBranch\":\r\n pushCommands.pop();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n public dump(): Array<{ name: string, count: number }> {\r\n const dump = [\r\n { name: \"Primitives\", count: 0 },\r\n { name: \"Batches\", count: 0 },\r\n { name: \"Branches\", count: 0 },\r\n ];\r\n\r\n for (const cmds of this._commands) {\r\n for (const cmd of cmds) {\r\n let index;\r\n switch (cmd.opcode) {\r\n case \"drawPrimitive\": index = 0; break;\r\n case \"pushBatch\": index = 1; break;\r\n case \"pushBranch\": index = 2; break;\r\n default: continue;\r\n }\r\n\r\n dump[index].count++;\r\n }\r\n }\r\n\r\n return dump;\r\n }\r\n}\r\n"]}
@@ -12,6 +12,8 @@ import { RenderCommands } from "./RenderCommands";
12
12
  import { SolarShadowMap } from "./SolarShadowMap";
13
13
  import { Target } from "./Target";
14
14
  import { TextureHandle } from "./Texture";
15
+ import { Primitive } from "./Primitive";
16
+ import { ShaderProgramExecutor } from "./ShaderProgram";
15
17
  /** Orchestrates rendering of the scene on behalf of a Target.
16
18
  * This base class exists only so we don't have to export all the types of the shared Compositor members like Textures, FrameBuffers, etc.
17
19
  * @internal
@@ -30,6 +32,7 @@ export declare abstract class SceneCompositor implements WebGLDisposable, Render
30
32
  abstract readDepthAndOrder(rect: ViewRect): Uint8Array | undefined;
31
33
  abstract readFeatureIds(rect: ViewRect): Uint8Array | undefined;
32
34
  abstract updateSolarShadows(context: SceneContext | undefined): void;
35
+ abstract drawPrimitive(primitive: Primitive, exec: ShaderProgramExecutor, outputsToPick: boolean): void;
33
36
  /** Obtain a framebuffer with a single spare RGBA texture that can be used for screen-space effect shaders. */
34
37
  abstract get screenSpaceEffectFbo(): FrameBuffer;
35
38
  abstract get featureIds(): TextureHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"SceneCompositor.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/SceneCompositor.ts"],"names":[],"mappings":"AAIA;;GAEG;AASH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQ/C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAC;AAIzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AA+jB1C;;;GAGG;AACH,8BAAsB,eAAgB,YAAW,eAAe,EAAE,YAAY,CAAC,QAAQ;IACrF,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,cAAc,EAAE,cAAc,CAAC;IAE/C,aAAoB,wBAAwB,IAAI,MAAM,CAAC;IACvD,aAAoB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE;IAC7D,aAAoB,UAAU,IAAI,OAAO,CAAC;aAC1B,OAAO,IAAI,IAAI;aACf,OAAO,IAAI,IAAI;aACf,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;aACrC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI;aAC3H,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS;aAC9E,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS;aACzD,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS;aACtD,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;IAE3E,8GAA8G;IAC9G,aAAoB,oBAAoB,IAAI,WAAW,CAAC;IAExD,aAAoB,UAAU,IAAI,aAAa,CAAC;IAChD,aAAoB,aAAa,IAAI,aAAa,CAAC;IACnD,aAAoB,gBAAgB,IAAI,MAAM,CAAC;IAE/C,SAAS,aAAa,MAAM,EAAE,MAAM;WAKtB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;aAIrC,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;CACxE"}
1
+ {"version":3,"file":"SceneCompositor.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/SceneCompositor.ts"],"names":[],"mappings":"AAIA;;GAEG;AASH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQ/C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAC;AAIzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AA8jBxD;;;GAGG;AACH,8BAAsB,eAAgB,YAAW,eAAe,EAAE,YAAY,CAAC,QAAQ;IACrF,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,cAAc,EAAE,cAAc,CAAC;IAE/C,aAAoB,wBAAwB,IAAI,MAAM,CAAC;IACvD,aAAoB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE;IAC7D,aAAoB,UAAU,IAAI,OAAO,CAAC;aAC1B,OAAO,IAAI,IAAI;aACf,OAAO,IAAI,IAAI;aACf,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;aACrC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI;aAC3H,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS;aAC9E,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS;aACzD,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS;aACtD,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI;aAC3D,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAE9G,8GAA8G;IAC9G,aAAoB,oBAAoB,IAAI,WAAW,CAAC;IAExD,aAAoB,UAAU,IAAI,aAAa,CAAC;IAChD,aAAoB,aAAa,IAAI,aAAa,CAAC;IACnD,aAAoB,gBAAgB,IAAI,MAAM,CAAC;IAE/C,SAAS,aAAa,MAAM,EAAE,MAAM;WAKtB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;aAIrC,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;CACxE"}
@@ -500,6 +500,13 @@ export class SceneCompositor {
500
500
  return System.instance.capabilities.supportsDrawBuffers ? new MRTCompositor(target) : new MPCompositor(target);
501
501
  }
502
502
  }
503
+ // This describes what types of primitives a compositor should draw. See the `drawPrimitive` method of Compositor.
504
+ var PrimitiveDrawState;
505
+ (function (PrimitiveDrawState) {
506
+ PrimitiveDrawState[PrimitiveDrawState["Both"] = 0] = "Both";
507
+ PrimitiveDrawState[PrimitiveDrawState["Pickable"] = 1] = "Pickable";
508
+ PrimitiveDrawState[PrimitiveDrawState["NonPickable"] = 2] = "NonPickable";
509
+ })(PrimitiveDrawState || (PrimitiveDrawState = {}));
503
510
  // The actual base class. Specializations are provided based on whether or not multiple render targets are supported.
504
511
  class Compositor extends SceneCompositor {
505
512
  constructor(target, fbos, geometry) {
@@ -519,6 +526,7 @@ class Compositor extends SceneCompositor {
519
526
  this._haveVolumeClassifier = false;
520
527
  this._antialiasSamples = 1;
521
528
  this._viewProjectionMatrix = new Matrix4();
529
+ this._primitiveDrawState = PrimitiveDrawState.Both; // used by drawPrimitive to decide whether a primitive needs to be drawn.
522
530
  this._frameBuffers = fbos;
523
531
  this._geom = geometry;
524
532
  this._opaqueRenderState.flags.depthTest = true;
@@ -539,6 +547,11 @@ class Compositor extends SceneCompositor {
539
547
  this._layerRenderState.depthFunc = GL.DepthFunc.Always;
540
548
  this._layerRenderState.blend.setBlendFunc(GL.BlendFactor.One, GL.BlendFactor.OneMinusSrcAlpha);
541
549
  }
550
+ drawPrimitive(primitive, exec, outputsToPick) {
551
+ if ((outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.NonPickable) ||
552
+ (!outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.Pickable))
553
+ primitive.draw(exec);
554
+ }
542
555
  get antialiasSamples() { return this._antialiasSamples; }
543
556
  get useMsBuffers() { return this._antialiasSamples > 1 && !this.target.isReadPixelsInProgress; }
544
557
  enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
@@ -1660,40 +1673,47 @@ class MRTCompositor extends Compositor {
1660
1673
  });
1661
1674
  }
1662
1675
  renderOpaque(commands, compositeFlags, renderForReadPixels) {
1663
- // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels()).
1664
- this._readPickDataFromPingPong = true;
1665
1676
  const needComposite = 0 /* None */ !== compositeFlags;
1666
1677
  const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
1667
1678
  const fbStack = System.instance.frameBufferStack;
1668
- fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll, true, this.useMsBuffers, () => {
1679
+ // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels() or ambient occlusion).
1680
+ let fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
1681
+ const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
1682
+ this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
1683
+ fbStack.execute(fbo, true, useMsBuffers, () => {
1669
1684
  this.drawPass(commands, 2 /* OpaqueLinear */);
1670
1685
  this.drawPass(commands, 3 /* OpaquePlanar */, true);
1671
1686
  if (needAO || renderForReadPixels) {
1687
+ if (needAO)
1688
+ this._primitiveDrawState = PrimitiveDrawState.Pickable;
1672
1689
  this.drawPass(commands, 4 /* OpaqueGeneral */, true);
1673
- if (this.useMsBuffers) {
1674
- const fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
1690
+ this._primitiveDrawState = PrimitiveDrawState.Both;
1691
+ if (useMsBuffers)
1675
1692
  fbo.blitMsBuffersToTextures(true);
1676
- }
1677
- if (needAO)
1678
- this.renderAmbientOcclusion();
1679
1693
  }
1680
1694
  });
1681
1695
  this._readPickDataFromPingPong = false;
1682
1696
  // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.
1683
- if (!renderForReadPixels && !needAO) {
1684
- fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor, true, this.useMsBuffers, () => {
1697
+ if (!renderForReadPixels) {
1698
+ fbo = (needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor);
1699
+ fbStack.execute(fbo, true, useMsBuffers, () => {
1700
+ if (needAO)
1701
+ this._primitiveDrawState = PrimitiveDrawState.NonPickable;
1685
1702
  this.drawPass(commands, 4 /* OpaqueGeneral */, false);
1703
+ this._primitiveDrawState = PrimitiveDrawState.Both;
1686
1704
  this.drawPass(commands, 8 /* HiddenEdge */, false);
1687
1705
  });
1688
- if (this.useMsBuffers) {
1689
- const fbo = (needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor);
1706
+ if (useMsBuffers)
1690
1707
  fbo.blitMsBuffersToTextures(needComposite);
1691
- }
1692
1708
  }
1709
+ if (needAO)
1710
+ this.renderAmbientOcclusion();
1693
1711
  }
1694
1712
  renderLayers(commands, needComposite, pass) {
1695
- this._readPickDataFromPingPong = true;
1696
- System.instance.frameBufferStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll, true, 1 /* OpaqueLayers */ === pass && this.useMsBuffers, () => {
1713
+ const fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
1714
+ const useMsBuffers = 1 /* OpaqueLayers */ === pass && fbo.isMultisampled && this.useMsBuffers;
1715
+ this._readPickDataFromPingPong = !useMsBuffers;
1716
+ System.instance.frameBufferStack.execute(fbo, true, useMsBuffers, () => {
1697
1717
  this.drawPass(commands, pass, true);
1698
1718
  });
1699
1719
  this._readPickDataFromPingPong = false;
@@ -1739,7 +1759,7 @@ class MRTCompositor extends Compositor {
1739
1759
  }
1740
1760
  pingPong() {
1741
1761
  if (this._fbos.opaqueAll.isMultisampled && this.useMsBuffers) {
1742
- // If we are multisampling we can just blit the FeatureId and DepthAndOrder buffers to their textures.
1762
+ // If we are multisampling we can just blit the FeatureId and DepthAndOrder MS buffers to their textures.
1743
1763
  this._fbos.opaqueAll.blitMsBuffersToTextures(false, 1);
1744
1764
  this._fbos.opaqueAll.blitMsBuffersToTextures(false, 2);
1745
1765
  }
@@ -1862,19 +1882,25 @@ class MPCompositor extends Compositor {
1862
1882
  this.drawOpaquePass(colorFbo, commands, 2 /* OpaqueLinear */, false);
1863
1883
  this.drawOpaquePass(colorFbo, commands, 3 /* OpaquePlanar */, true);
1864
1884
  if (renderForReadPixels || needAO) {
1865
- this.drawOpaquePass(colorFbo, commands, 4 /* OpaqueGeneral */, true);
1866
1885
  if (needAO)
1867
- this.renderAmbientOcclusion();
1886
+ this._primitiveDrawState = PrimitiveDrawState.Pickable;
1887
+ this.drawOpaquePass(colorFbo, commands, 4 /* OpaqueGeneral */, true);
1888
+ this._primitiveDrawState = PrimitiveDrawState.Both;
1868
1889
  }
1869
1890
  this._readPickDataFromPingPong = false;
1870
1891
  // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.
1871
- if (!renderForReadPixels && !needAO) {
1892
+ if (!renderForReadPixels) {
1872
1893
  System.instance.frameBufferStack.execute(colorFbo, true, false, () => {
1873
1894
  this._drawMultiPassDepth = true; // for OpaqueGeneral
1895
+ if (needAO)
1896
+ this._primitiveDrawState = PrimitiveDrawState.NonPickable;
1874
1897
  this.drawPass(commands, 4 /* OpaqueGeneral */, false);
1898
+ this._primitiveDrawState = PrimitiveDrawState.Both;
1875
1899
  this.drawPass(commands, 8 /* HiddenEdge */, false);
1876
1900
  });
1877
1901
  }
1902
+ if (needAO)
1903
+ this.renderAmbientOcclusion();
1878
1904
  }
1879
1905
  renderLayers(commands, needComposite, pass) {
1880
1906
  this._readPickDataFromPingPong = true;