@itwin/core-frontend 3.5.0-dev.8 → 3.5.1

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 (640) hide show
  1. package/CHANGELOG.md +103 -1
  2. package/lib/cjs/AccuSnap.d.ts +7 -1
  3. package/lib/cjs/AccuSnap.d.ts.map +1 -1
  4. package/lib/cjs/AccuSnap.js +26 -3
  5. package/lib/cjs/AccuSnap.js.map +1 -1
  6. package/lib/cjs/BriefcaseConnection.d.ts +28 -1
  7. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  8. package/lib/cjs/BriefcaseConnection.js +29 -8
  9. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  10. package/lib/cjs/BriefcaseTxns.js +9 -9
  11. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  12. package/lib/cjs/GraphicalEditingScope.js +2 -2
  13. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  14. package/lib/cjs/IModelApp.d.ts +6 -0
  15. package/lib/cjs/IModelApp.d.ts.map +1 -1
  16. package/lib/cjs/IModelApp.js +6 -0
  17. package/lib/cjs/IModelApp.js.map +1 -1
  18. package/lib/cjs/IModelConnection.d.ts +32 -2
  19. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  20. package/lib/cjs/IModelConnection.js +44 -6
  21. package/lib/cjs/IModelConnection.js.map +1 -1
  22. package/lib/cjs/IpcApp.d.ts +14 -1
  23. package/lib/cjs/IpcApp.d.ts.map +1 -1
  24. package/lib/cjs/IpcApp.js +25 -0
  25. package/lib/cjs/IpcApp.js.map +1 -1
  26. package/lib/cjs/MarginPercent.d.ts +27 -2
  27. package/lib/cjs/MarginPercent.d.ts.map +1 -1
  28. package/lib/cjs/MarginPercent.js +8 -2
  29. package/lib/cjs/MarginPercent.js.map +1 -1
  30. package/lib/cjs/ModelState.d.ts +2 -1
  31. package/lib/cjs/ModelState.d.ts.map +1 -1
  32. package/lib/cjs/ModelState.js +5 -3
  33. package/lib/cjs/ModelState.js.map +1 -1
  34. package/lib/cjs/NativeApp.d.ts +5 -1
  35. package/lib/cjs/NativeApp.d.ts.map +1 -1
  36. package/lib/cjs/NativeApp.js +25 -20
  37. package/lib/cjs/NativeApp.js.map +1 -1
  38. package/lib/cjs/NativeAppLogger.js +1 -1
  39. package/lib/cjs/NativeAppLogger.js.map +1 -1
  40. package/lib/cjs/RealityDataSource.d.ts +44 -1
  41. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  42. package/lib/cjs/RealityDataSource.js +41 -14
  43. package/lib/cjs/RealityDataSource.js.map +1 -1
  44. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +1 -0
  45. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
  46. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +3 -0
  47. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  48. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +1 -0
  49. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -1
  50. package/lib/cjs/RealityDataSourceContextShareImpl.js +3 -0
  51. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  52. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +1 -0
  53. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  54. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +3 -0
  55. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  56. package/lib/cjs/ViewAnimation.d.ts +10 -2
  57. package/lib/cjs/ViewAnimation.d.ts.map +1 -1
  58. package/lib/cjs/ViewAnimation.js.map +1 -1
  59. package/lib/cjs/ViewCreator2d.js +3 -2
  60. package/lib/cjs/ViewCreator2d.js.map +1 -1
  61. package/lib/cjs/ViewPose.d.ts +62 -10
  62. package/lib/cjs/ViewPose.d.ts.map +1 -1
  63. package/lib/cjs/ViewPose.js +37 -8
  64. package/lib/cjs/ViewPose.js.map +1 -1
  65. package/lib/cjs/ViewState.d.ts +18 -10
  66. package/lib/cjs/ViewState.d.ts.map +1 -1
  67. package/lib/cjs/ViewState.js +39 -15
  68. package/lib/cjs/ViewState.js.map +1 -1
  69. package/lib/cjs/Viewport.d.ts.map +1 -1
  70. package/lib/cjs/Viewport.js +7 -2
  71. package/lib/cjs/Viewport.js.map +1 -1
  72. package/lib/cjs/extension/ExtensionRuntime.js +13 -0
  73. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  74. package/lib/cjs/render/GraphicBranch.d.ts +3 -0
  75. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  76. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  77. package/lib/cjs/render/RealityMeshParams.d.ts +3 -4
  78. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  79. package/lib/cjs/render/RealityMeshParams.js +9 -3
  80. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  81. package/lib/cjs/render/RenderMaterial.d.ts +3 -1
  82. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  83. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  84. package/lib/cjs/render/RenderTarget.d.ts +1 -0
  85. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  86. package/lib/cjs/render/RenderTarget.js.map +1 -1
  87. package/lib/cjs/render/primitives/SurfaceParams.d.ts +0 -1
  88. package/lib/cjs/render/primitives/SurfaceParams.d.ts.map +1 -1
  89. package/lib/cjs/render/primitives/SurfaceParams.js.map +1 -1
  90. package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
  91. package/lib/cjs/render/primitives/VertexTable.js +0 -1
  92. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  93. package/lib/cjs/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  94. package/lib/cjs/render/primitives/VertexTableSplitter.js +0 -1
  95. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  96. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +0 -1
  97. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  98. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +0 -1
  99. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  100. package/lib/cjs/render/webgl/BackgroundMapDrape.js +2 -2
  101. package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
  102. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  103. package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
  104. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  105. package/lib/cjs/render/webgl/DrawCommand.js +3 -3
  106. package/lib/cjs/render/webgl/EDL.d.ts +40 -0
  107. package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
  108. package/lib/cjs/render/webgl/EDL.js +264 -0
  109. package/lib/cjs/render/webgl/EDL.js.map +1 -0
  110. package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
  111. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +0 -1
  112. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  113. package/lib/cjs/render/webgl/FeatureOverrides.js +16 -11
  114. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  115. package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
  116. package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
  117. package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
  118. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  119. package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
  120. package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
  121. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  122. package/lib/cjs/render/webgl/Layer.js +2 -2
  123. package/lib/cjs/render/webgl/LayerCommands.js +2 -2
  124. package/lib/cjs/render/webgl/MeshData.d.ts +1 -1
  125. package/lib/cjs/render/webgl/MeshData.d.ts.map +1 -1
  126. package/lib/cjs/render/webgl/MeshData.js +13 -1
  127. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  128. package/lib/cjs/render/webgl/MeshGeometry.d.ts +1 -1
  129. package/lib/cjs/render/webgl/MeshGeometry.d.ts.map +1 -1
  130. package/lib/cjs/render/webgl/MeshGeometry.js +1 -1
  131. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  132. package/lib/cjs/render/webgl/PlanarClassifier.js +7 -7
  133. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  134. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  135. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  136. package/lib/cjs/render/webgl/PointCloud.js +2 -0
  137. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  138. package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
  139. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  140. package/lib/cjs/render/webgl/RealityMesh.js +8 -3
  141. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  142. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
  143. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  144. package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
  145. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  146. package/lib/cjs/render/webgl/RenderCommands.js +30 -30
  147. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  148. package/lib/cjs/render/webgl/RenderFlags.d.ts +33 -21
  149. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  150. package/lib/cjs/render/webgl/RenderFlags.js +10 -6
  151. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  152. package/lib/cjs/render/webgl/SceneCompositor.d.ts +5 -0
  153. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  154. package/lib/cjs/render/webgl/SceneCompositor.js +192 -73
  155. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  156. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +2 -1
  157. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  158. package/lib/cjs/render/webgl/ShaderBuilder.js +6 -1
  159. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  160. package/lib/cjs/render/webgl/SolarShadowMap.js +2 -2
  161. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts +3 -1
  162. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  163. package/lib/cjs/render/webgl/SurfaceGeometry.js +22 -11
  164. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  165. package/lib/cjs/render/webgl/System.d.ts +1 -1
  166. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  167. package/lib/cjs/render/webgl/System.js +1 -0
  168. package/lib/cjs/render/webgl/System.js.map +1 -1
  169. package/lib/cjs/render/webgl/Target.d.ts +1 -0
  170. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  171. package/lib/cjs/render/webgl/Target.js +4 -3
  172. package/lib/cjs/render/webgl/Target.js.map +1 -1
  173. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  174. package/lib/cjs/render/webgl/Technique.js +18 -3
  175. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  176. package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
  177. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  178. package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
  179. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  180. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  181. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  182. package/lib/cjs/render/webgl/UniformHandle.js +1 -2
  183. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  184. package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
  185. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  186. package/lib/cjs/render/webgl/glsl/Animation.js +2 -1
  187. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  188. package/lib/cjs/render/webgl/glsl/Common.d.ts +3 -1
  189. package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
  190. package/lib/cjs/render/webgl/glsl/Common.js +28 -33
  191. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  192. package/lib/cjs/render/webgl/glsl/EDL.d.ts +14 -0
  193. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
  194. package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
  195. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
  196. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  197. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +9 -1
  198. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  199. package/lib/cjs/render/webgl/glsl/Lighting.d.ts.map +1 -1
  200. package/lib/cjs/render/webgl/glsl/Lighting.js +6 -8
  201. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  202. package/lib/cjs/render/webgl/glsl/PointCloud.d.ts.map +1 -1
  203. package/lib/cjs/render/webgl/glsl/PointCloud.js +8 -3
  204. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  205. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts +1 -0
  206. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  207. package/lib/cjs/render/webgl/glsl/RealityMesh.js +6 -1
  208. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  209. package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
  210. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  211. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.d.ts.map +1 -1
  212. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -4
  213. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  214. package/lib/cjs/render/webgl/glsl/Surface.d.ts +1 -1
  215. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  216. package/lib/cjs/render/webgl/glsl/Surface.js +87 -15
  217. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  218. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  219. package/lib/cjs/render/webgl/glsl/Thematic.js +2 -6
  220. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  221. package/lib/cjs/tile/DynamicIModelTile.js +1 -1
  222. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  223. package/lib/cjs/tile/GltfReader.d.ts +13 -2
  224. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  225. package/lib/cjs/tile/GltfReader.js +67 -23
  226. package/lib/cjs/tile/GltfReader.js.map +1 -1
  227. package/lib/cjs/tile/IModelTile.js +1 -1
  228. package/lib/cjs/tile/IModelTile.js.map +1 -1
  229. package/lib/cjs/tile/IModelTileRequestChannels.js +1 -1
  230. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  231. package/lib/cjs/tile/ImdlReader.d.ts +5 -0
  232. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  233. package/lib/cjs/tile/ImdlReader.js +14 -7
  234. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  235. package/lib/cjs/tile/PrimaryTileTree.js +2 -2
  236. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  237. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  238. package/lib/cjs/tile/RealityModelTileTree.js +52 -20
  239. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  240. package/lib/cjs/tile/RealityTile.d.ts +2 -2
  241. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  242. package/lib/cjs/tile/RealityTile.js +11 -4
  243. package/lib/cjs/tile/RealityTile.js.map +1 -1
  244. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -0
  245. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  246. package/lib/cjs/tile/RealityTileLoader.js +15 -2
  247. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  248. package/lib/cjs/tile/RealityTileTree.js +1 -1
  249. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  250. package/lib/cjs/tile/Tile.d.ts +5 -0
  251. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  252. package/lib/cjs/tile/Tile.js +5 -0
  253. package/lib/cjs/tile/Tile.js.map +1 -1
  254. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  255. package/lib/cjs/tile/TileAdmin.js +13 -6
  256. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  257. package/lib/cjs/tile/TileDrawArgs.d.ts +5 -1
  258. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  259. package/lib/cjs/tile/TileDrawArgs.js +2 -0
  260. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  261. package/lib/cjs/tile/TileRequestChannels.js +1 -1
  262. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  263. package/lib/cjs/tile/TileStorage.d.ts.map +1 -1
  264. package/lib/cjs/tile/TileStorage.js +12 -6
  265. package/lib/cjs/tile/TileStorage.js.map +1 -1
  266. package/lib/cjs/tile/internal.d.ts +1 -0
  267. package/lib/cjs/tile/internal.d.ts.map +1 -1
  268. package/lib/cjs/tile/internal.js +1 -0
  269. package/lib/cjs/tile/internal.js.map +1 -1
  270. package/lib/cjs/tile/map/ArcGISTileMap.d.ts +5 -2
  271. package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
  272. package/lib/cjs/tile/map/ArcGISTileMap.js +17 -2
  273. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  274. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +51 -5
  275. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  276. package/lib/cjs/tile/map/ArcGisUtilities.js +120 -48
  277. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  278. package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
  279. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  280. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +26 -0
  281. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -0
  282. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +97 -0
  283. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -0
  284. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -4
  285. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  286. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +11 -96
  287. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  288. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  289. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -1
  290. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  291. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -0
  292. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  293. package/lib/cjs/tile/map/ImageryTileTree.js +6 -4
  294. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  295. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +18 -4
  296. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  297. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +25 -5
  298. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  299. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +6 -4
  300. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  301. package/lib/cjs/tile/map/MapLayerImageryFormats.js +12 -16
  302. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  303. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +26 -5
  304. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  305. package/lib/cjs/tile/map/MapLayerImageryProvider.js +69 -48
  306. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  307. package/lib/cjs/tile/map/MapLayerSources.js +1 -1
  308. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  309. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  310. package/lib/cjs/tile/map/WmsCapabilities.js +4 -1
  311. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  312. package/lib/cjs/tools/EditManipulator.d.ts.map +1 -1
  313. package/lib/cjs/tools/EditManipulator.js +2 -1
  314. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  315. package/lib/cjs/tools/Tool.js +1 -1
  316. package/lib/cjs/tools/Tool.js.map +1 -1
  317. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  318. package/lib/cjs/tools/ToolAdmin.js +6 -4
  319. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  320. package/lib/esm/AccuSnap.d.ts +7 -1
  321. package/lib/esm/AccuSnap.d.ts.map +1 -1
  322. package/lib/esm/AccuSnap.js +27 -4
  323. package/lib/esm/AccuSnap.js.map +1 -1
  324. package/lib/esm/BriefcaseConnection.d.ts +28 -1
  325. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  326. package/lib/esm/BriefcaseConnection.js +30 -9
  327. package/lib/esm/BriefcaseConnection.js.map +1 -1
  328. package/lib/esm/BriefcaseTxns.js +9 -9
  329. package/lib/esm/BriefcaseTxns.js.map +1 -1
  330. package/lib/esm/GraphicalEditingScope.js +2 -2
  331. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  332. package/lib/esm/IModelApp.d.ts +6 -0
  333. package/lib/esm/IModelApp.d.ts.map +1 -1
  334. package/lib/esm/IModelApp.js +6 -0
  335. package/lib/esm/IModelApp.js.map +1 -1
  336. package/lib/esm/IModelConnection.d.ts +32 -2
  337. package/lib/esm/IModelConnection.d.ts.map +1 -1
  338. package/lib/esm/IModelConnection.js +44 -6
  339. package/lib/esm/IModelConnection.js.map +1 -1
  340. package/lib/esm/IpcApp.d.ts +14 -1
  341. package/lib/esm/IpcApp.d.ts.map +1 -1
  342. package/lib/esm/IpcApp.js +25 -0
  343. package/lib/esm/IpcApp.js.map +1 -1
  344. package/lib/esm/MarginPercent.d.ts +27 -2
  345. package/lib/esm/MarginPercent.d.ts.map +1 -1
  346. package/lib/esm/MarginPercent.js +8 -2
  347. package/lib/esm/MarginPercent.js.map +1 -1
  348. package/lib/esm/ModelState.d.ts +2 -1
  349. package/lib/esm/ModelState.d.ts.map +1 -1
  350. package/lib/esm/ModelState.js +5 -3
  351. package/lib/esm/ModelState.js.map +1 -1
  352. package/lib/esm/NativeApp.d.ts +5 -1
  353. package/lib/esm/NativeApp.d.ts.map +1 -1
  354. package/lib/esm/NativeApp.js +25 -20
  355. package/lib/esm/NativeApp.js.map +1 -1
  356. package/lib/esm/NativeAppLogger.js +1 -1
  357. package/lib/esm/NativeAppLogger.js.map +1 -1
  358. package/lib/esm/RealityDataSource.d.ts +44 -1
  359. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  360. package/lib/esm/RealityDataSource.js +39 -13
  361. package/lib/esm/RealityDataSource.js.map +1 -1
  362. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +1 -0
  363. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
  364. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +3 -0
  365. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  366. package/lib/esm/RealityDataSourceContextShareImpl.d.ts +1 -0
  367. package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -1
  368. package/lib/esm/RealityDataSourceContextShareImpl.js +3 -0
  369. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  370. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +1 -0
  371. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  372. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +3 -0
  373. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  374. package/lib/esm/ViewAnimation.d.ts +10 -2
  375. package/lib/esm/ViewAnimation.d.ts.map +1 -1
  376. package/lib/esm/ViewAnimation.js.map +1 -1
  377. package/lib/esm/ViewCreator2d.js +3 -2
  378. package/lib/esm/ViewCreator2d.js.map +1 -1
  379. package/lib/esm/ViewPose.d.ts +62 -10
  380. package/lib/esm/ViewPose.d.ts.map +1 -1
  381. package/lib/esm/ViewPose.js +37 -8
  382. package/lib/esm/ViewPose.js.map +1 -1
  383. package/lib/esm/ViewState.d.ts +18 -10
  384. package/lib/esm/ViewState.d.ts.map +1 -1
  385. package/lib/esm/ViewState.js +39 -15
  386. package/lib/esm/ViewState.js.map +1 -1
  387. package/lib/esm/Viewport.d.ts.map +1 -1
  388. package/lib/esm/Viewport.js +7 -2
  389. package/lib/esm/Viewport.js.map +1 -1
  390. package/lib/esm/extension/ExtensionRuntime.js +15 -2
  391. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  392. package/lib/esm/render/GraphicBranch.d.ts +3 -0
  393. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  394. package/lib/esm/render/GraphicBranch.js.map +1 -1
  395. package/lib/esm/render/RealityMeshParams.d.ts +3 -4
  396. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  397. package/lib/esm/render/RealityMeshParams.js +10 -4
  398. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  399. package/lib/esm/render/RenderMaterial.d.ts +3 -1
  400. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  401. package/lib/esm/render/RenderMaterial.js.map +1 -1
  402. package/lib/esm/render/RenderTarget.d.ts +1 -0
  403. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  404. package/lib/esm/render/RenderTarget.js.map +1 -1
  405. package/lib/esm/render/primitives/SurfaceParams.d.ts +0 -1
  406. package/lib/esm/render/primitives/SurfaceParams.d.ts.map +1 -1
  407. package/lib/esm/render/primitives/SurfaceParams.js.map +1 -1
  408. package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
  409. package/lib/esm/render/primitives/VertexTable.js +0 -1
  410. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  411. package/lib/esm/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  412. package/lib/esm/render/primitives/VertexTableSplitter.js +0 -1
  413. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  414. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +0 -1
  415. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  416. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +0 -1
  417. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  418. package/lib/esm/render/webgl/BackgroundMapDrape.js +2 -2
  419. package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
  420. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  421. package/lib/esm/render/webgl/CachedGeometry.js +69 -0
  422. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  423. package/lib/esm/render/webgl/DrawCommand.js +3 -3
  424. package/lib/esm/render/webgl/EDL.d.ts +40 -0
  425. package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
  426. package/lib/esm/render/webgl/EDL.js +260 -0
  427. package/lib/esm/render/webgl/EDL.js.map +1 -0
  428. package/lib/esm/render/webgl/EdgeSettings.js +2 -2
  429. package/lib/esm/render/webgl/FeatureOverrides.d.ts +0 -1
  430. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  431. package/lib/esm/render/webgl/FeatureOverrides.js +16 -11
  432. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  433. package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
  434. package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
  435. package/lib/esm/render/webgl/FrameBuffer.js +9 -0
  436. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  437. package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
  438. package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
  439. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  440. package/lib/esm/render/webgl/Layer.js +2 -2
  441. package/lib/esm/render/webgl/LayerCommands.js +2 -2
  442. package/lib/esm/render/webgl/MeshData.d.ts +1 -1
  443. package/lib/esm/render/webgl/MeshData.d.ts.map +1 -1
  444. package/lib/esm/render/webgl/MeshData.js +13 -1
  445. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  446. package/lib/esm/render/webgl/MeshGeometry.d.ts +1 -1
  447. package/lib/esm/render/webgl/MeshGeometry.d.ts.map +1 -1
  448. package/lib/esm/render/webgl/MeshGeometry.js +1 -1
  449. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  450. package/lib/esm/render/webgl/PlanarClassifier.js +7 -7
  451. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  452. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  453. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  454. package/lib/esm/render/webgl/PointCloud.js +2 -0
  455. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  456. package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
  457. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  458. package/lib/esm/render/webgl/RealityMesh.js +8 -3
  459. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  460. package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
  461. package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  462. package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
  463. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  464. package/lib/esm/render/webgl/RenderCommands.js +30 -30
  465. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  466. package/lib/esm/render/webgl/RenderFlags.d.ts +33 -21
  467. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  468. package/lib/esm/render/webgl/RenderFlags.js +10 -6
  469. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  470. package/lib/esm/render/webgl/SceneCompositor.d.ts +5 -0
  471. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  472. package/lib/esm/render/webgl/SceneCompositor.js +191 -74
  473. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  474. package/lib/esm/render/webgl/ShaderBuilder.d.ts +2 -1
  475. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  476. package/lib/esm/render/webgl/ShaderBuilder.js +6 -1
  477. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  478. package/lib/esm/render/webgl/SolarShadowMap.js +2 -2
  479. package/lib/esm/render/webgl/SurfaceGeometry.d.ts +3 -1
  480. package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  481. package/lib/esm/render/webgl/SurfaceGeometry.js +22 -11
  482. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  483. package/lib/esm/render/webgl/System.d.ts +1 -1
  484. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  485. package/lib/esm/render/webgl/System.js +1 -0
  486. package/lib/esm/render/webgl/System.js.map +1 -1
  487. package/lib/esm/render/webgl/Target.d.ts +1 -0
  488. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  489. package/lib/esm/render/webgl/Target.js +4 -3
  490. package/lib/esm/render/webgl/Target.js.map +1 -1
  491. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  492. package/lib/esm/render/webgl/Technique.js +18 -3
  493. package/lib/esm/render/webgl/Technique.js.map +1 -1
  494. package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
  495. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  496. package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
  497. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  498. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  499. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  500. package/lib/esm/render/webgl/UniformHandle.js +1 -2
  501. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  502. package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
  503. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  504. package/lib/esm/render/webgl/glsl/Animation.js +2 -1
  505. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  506. package/lib/esm/render/webgl/glsl/Common.d.ts +3 -1
  507. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  508. package/lib/esm/render/webgl/glsl/Common.js +25 -31
  509. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  510. package/lib/esm/render/webgl/glsl/EDL.d.ts +14 -0
  511. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
  512. package/lib/esm/render/webgl/glsl/EDL.js +253 -0
  513. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
  514. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  515. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +9 -1
  516. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  517. package/lib/esm/render/webgl/glsl/Lighting.d.ts.map +1 -1
  518. package/lib/esm/render/webgl/glsl/Lighting.js +6 -8
  519. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  520. package/lib/esm/render/webgl/glsl/PointCloud.d.ts.map +1 -1
  521. package/lib/esm/render/webgl/glsl/PointCloud.js +8 -3
  522. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  523. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts +1 -0
  524. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  525. package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -0
  526. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  527. package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
  528. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  529. package/lib/esm/render/webgl/glsl/SolarShadowMapping.d.ts.map +1 -1
  530. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -4
  531. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  532. package/lib/esm/render/webgl/glsl/Surface.d.ts +1 -1
  533. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  534. package/lib/esm/render/webgl/glsl/Surface.js +88 -16
  535. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  536. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  537. package/lib/esm/render/webgl/glsl/Thematic.js +2 -6
  538. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  539. package/lib/esm/tile/DynamicIModelTile.js +1 -1
  540. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  541. package/lib/esm/tile/GltfReader.d.ts +13 -2
  542. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  543. package/lib/esm/tile/GltfReader.js +67 -23
  544. package/lib/esm/tile/GltfReader.js.map +1 -1
  545. package/lib/esm/tile/IModelTile.js +1 -1
  546. package/lib/esm/tile/IModelTile.js.map +1 -1
  547. package/lib/esm/tile/IModelTileRequestChannels.js +1 -1
  548. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  549. package/lib/esm/tile/ImdlReader.d.ts +5 -0
  550. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  551. package/lib/esm/tile/ImdlReader.js +14 -7
  552. package/lib/esm/tile/ImdlReader.js.map +1 -1
  553. package/lib/esm/tile/PrimaryTileTree.js +2 -2
  554. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  555. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  556. package/lib/esm/tile/RealityModelTileTree.js +52 -20
  557. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  558. package/lib/esm/tile/RealityTile.d.ts +2 -2
  559. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  560. package/lib/esm/tile/RealityTile.js +11 -4
  561. package/lib/esm/tile/RealityTile.js.map +1 -1
  562. package/lib/esm/tile/RealityTileLoader.d.ts +1 -0
  563. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  564. package/lib/esm/tile/RealityTileLoader.js +16 -3
  565. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  566. package/lib/esm/tile/RealityTileTree.js +1 -1
  567. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  568. package/lib/esm/tile/Tile.d.ts +5 -0
  569. package/lib/esm/tile/Tile.d.ts.map +1 -1
  570. package/lib/esm/tile/Tile.js +5 -0
  571. package/lib/esm/tile/Tile.js.map +1 -1
  572. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  573. package/lib/esm/tile/TileAdmin.js +13 -6
  574. package/lib/esm/tile/TileAdmin.js.map +1 -1
  575. package/lib/esm/tile/TileDrawArgs.d.ts +5 -1
  576. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  577. package/lib/esm/tile/TileDrawArgs.js +2 -0
  578. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  579. package/lib/esm/tile/TileRequestChannels.js +1 -1
  580. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  581. package/lib/esm/tile/TileStorage.d.ts.map +1 -1
  582. package/lib/esm/tile/TileStorage.js +12 -6
  583. package/lib/esm/tile/TileStorage.js.map +1 -1
  584. package/lib/esm/tile/internal.d.ts +1 -0
  585. package/lib/esm/tile/internal.d.ts.map +1 -1
  586. package/lib/esm/tile/internal.js +1 -0
  587. package/lib/esm/tile/internal.js.map +1 -1
  588. package/lib/esm/tile/map/ArcGISTileMap.d.ts +5 -2
  589. package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
  590. package/lib/esm/tile/map/ArcGISTileMap.js +18 -3
  591. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  592. package/lib/esm/tile/map/ArcGisUtilities.d.ts +51 -5
  593. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  594. package/lib/esm/tile/map/ArcGisUtilities.js +121 -49
  595. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  596. package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
  597. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  598. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +26 -0
  599. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -0
  600. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +93 -0
  601. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -0
  602. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -4
  603. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  604. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +10 -95
  605. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  606. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  607. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -1
  608. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  609. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -0
  610. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  611. package/lib/esm/tile/map/ImageryTileTree.js +6 -4
  612. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  613. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +18 -4
  614. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  615. package/lib/esm/tile/map/MapLayerFormatRegistry.js +26 -6
  616. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  617. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +6 -4
  618. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  619. package/lib/esm/tile/map/MapLayerImageryFormats.js +12 -16
  620. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  621. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +26 -5
  622. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  623. package/lib/esm/tile/map/MapLayerImageryProvider.js +70 -49
  624. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  625. package/lib/esm/tile/map/MapLayerSources.js +1 -1
  626. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  627. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  628. package/lib/esm/tile/map/WmsCapabilities.js +4 -1
  629. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  630. package/lib/esm/tools/EditManipulator.d.ts.map +1 -1
  631. package/lib/esm/tools/EditManipulator.js +2 -1
  632. package/lib/esm/tools/EditManipulator.js.map +1 -1
  633. package/lib/esm/tools/Tool.js +1 -1
  634. package/lib/esm/tools/Tool.js.map +1 -1
  635. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  636. package/lib/esm/tools/ToolAdmin.js +6 -4
  637. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  638. package/package.json +25 -23
  639. package/lib/cjs/tile/object-storage-azure.js +0 -5
  640. package/lib/esm/tile/object-storage-azure.js +0 -5
@@ -3,6 +3,8 @@
3
3
  */
4
4
  import { PointCloudDisplaySettings, RealityModelDisplaySettings } from "@itwin/core-common";
5
5
  import { UniformHandle } from "./UniformHandle";
6
+ import { Range3d, Transform } from "@itwin/core-geometry";
7
+ import { Target } from "./Target";
6
8
  /** A Target keeps track of the current settings for drawing point clouds.
7
9
  * Pushing a Branch may *replace* the current settings. Popping the Branch does not reset them. It is expected that every Branch containing
8
10
  * a point cloud will also specify the settings for drawing that point cloud.
@@ -13,10 +15,17 @@ import { UniformHandle } from "./UniformHandle";
13
15
  export declare class PointCloudUniforms {
14
16
  syncKey: number;
15
17
  private _settings;
18
+ private _scaleFactor;
19
+ private _is3d;
16
20
  private readonly _vec4;
21
+ private readonly _edl1;
22
+ private readonly _edl2;
17
23
  constructor();
18
24
  update(settings: PointCloudDisplaySettings): void;
25
+ updateRange(range: Range3d | undefined, target: Target, xform: Transform, is3d: boolean): void;
19
26
  bind(uniform: UniformHandle): void;
27
+ bindEDL1(uniform: UniformHandle): void;
28
+ bindEDL2(uniform: UniformHandle): void;
20
29
  private initialize;
21
30
  }
22
31
  /** Uniforms affecting how reality models are drawn.
@@ -1 +1 @@
1
- {"version":3,"file":"RealityModelUniforms.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RealityModelUniforms.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD;;;;;;GAMG;AACH,qBAAa,kBAAkB;IACtB,OAAO,SAAK;IACnB,OAAO,CAAC,SAAS,CAAsC;IAOvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;;IAMtC,MAAM,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IASjD,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKzC,OAAO,CAAC,UAAU;CAMnB;AAED;;;;;;GAMG;AACH,qBAAa,oBAAoB;IAE/B,SAAgB,UAAU,qBAA4B;IACtD,OAAO,CAAC,iBAAiB,CAAO;IAEzB,MAAM,CAAC,QAAQ,EAAE,2BAA2B,GAAG,IAAI;IAKnD,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;CAG1D"}
1
+ {"version":3,"file":"RealityModelUniforms.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/RealityModelUniforms.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAY,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;GAMG;AACH,qBAAa,kBAAkB;IACtB,OAAO,SAAK;IACnB,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,YAAY,CAAO;IAC3B,OAAO,CAAC,KAAK,CAAQ;IAOrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAM7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;;IAMtC,MAAM,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IASjD,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IA0B9F,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKlC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKtC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK7C,OAAO,CAAC,UAAU;CAgBnB;AAED;;;;;;GAMG;AACH,qBAAa,oBAAoB;IAE/B,SAAgB,UAAU,qBAA4B;IACtD,OAAO,CAAC,iBAAiB,CAAO;IAEzB,MAAM,CAAC,QAAQ,EAAE,2BAA2B,GAAG,IAAI;IAKnD,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;CAG1D"}
@@ -10,6 +10,7 @@ exports.RealityModelUniforms = exports.PointCloudUniforms = void 0;
10
10
  */
11
11
  const core_common_1 = require("@itwin/core-common");
12
12
  const Sync_1 = require("./Sync");
13
+ const core_geometry_1 = require("@itwin/core-geometry");
13
14
  /** A Target keeps track of the current settings for drawing point clouds.
14
15
  * Pushing a Branch may *replace* the current settings. Popping the Branch does not reset them. It is expected that every Branch containing
15
16
  * a point cloud will also specify the settings for drawing that point cloud.
@@ -21,12 +22,20 @@ class PointCloudUniforms {
21
22
  constructor() {
22
23
  this.syncKey = 0;
23
24
  this._settings = core_common_1.PointCloudDisplaySettings.defaults;
25
+ this._scaleFactor = 8.0;
26
+ this._is3d = true;
24
27
  // vec3 u_pointSize
25
28
  // x = fixed point size in pixels if > 0, else scale applied to voxel size (negated).
26
29
  // y = minimum size in pixels if using voxel size.
27
30
  // z = maximum size in pixels if using voxel size
28
31
  // w = 1.0 if drawing square points, 0.0 if round.
29
32
  this._vec4 = new Float32Array(4);
33
+ // x = strength - 0.0 disables EDL
34
+ // y = radius
35
+ // z =
36
+ // w =
37
+ this._edl1 = new Float32Array(4);
38
+ this._edl2 = new Float32Array(4);
30
39
  this.initialize(this._settings);
31
40
  }
32
41
  update(settings) {
@@ -36,15 +45,56 @@ class PointCloudUniforms {
36
45
  (0, Sync_1.desync)(this);
37
46
  this.initialize(settings);
38
47
  }
48
+ updateRange(range, target, xform, is3d) {
49
+ let rangeFactor = 8.0; // default to min scale factor of 8
50
+ const near = target.uniforms.frustum.nearPlane;
51
+ const far = target.uniforms.frustum.farPlane;
52
+ const viewDepth = far - near;
53
+ if (range !== undefined) {
54
+ const scale = xform.matrix;
55
+ // calculate a "normalized" strength factor based on the size of the point cloud versus the current viewing depth
56
+ // from the matrix, only care about scaling factor here (entries 0,4,8) to scale the range lengths
57
+ // then use the largest length component as the reference for the size of the point cloud
58
+ const rangeScale = core_geometry_1.Vector3d.create(scale.coffs[0] * range.xLength(), scale.coffs[4] * range.xLength(), scale.coffs[8] * range.xLength()).maxAbs();
59
+ // limit the viewDepth/rangeScale ratio to min of 10 to still get reasonable factors when close to and inside the model
60
+ rangeFactor = Math.log(Math.max(10, viewDepth / rangeScale));
61
+ }
62
+ const zoomFactor = Math.log(far / near); // compensate for zoom level
63
+ const winSizeFactor = Math.pow(1.8440033, Math.log2(2226 / target.uniforms.viewRect.width)); // compensate for window size
64
+ const scaleFactor = (rangeFactor + zoomFactor) / winSizeFactor;
65
+ if (this._scaleFactor === scaleFactor && this._is3d === is3d)
66
+ return;
67
+ this._scaleFactor = scaleFactor;
68
+ this._is3d = is3d;
69
+ (0, Sync_1.desync)(this);
70
+ this.initialize(this._settings);
71
+ }
39
72
  bind(uniform) {
40
73
  if (!(0, Sync_1.sync)(this, uniform))
41
74
  uniform.setUniform4fv(this._vec4);
42
75
  }
76
+ bindEDL1(uniform) {
77
+ if (!(0, Sync_1.sync)(this, uniform))
78
+ uniform.setUniform4fv(this._edl1);
79
+ }
80
+ bindEDL2(uniform) {
81
+ if (!(0, Sync_1.sync)(this, uniform))
82
+ uniform.setUniform4fv(this._edl2);
83
+ }
43
84
  initialize(settings) {
85
+ var _a, _b, _c;
44
86
  this._vec4[0] = "pixel" === settings.sizeMode ? settings.pixelSize : -settings.voxelScale;
45
87
  this._vec4[1] = settings.minPixelsPerVoxel;
46
88
  this._vec4[2] = settings.maxPixelsPerVoxel;
47
89
  this._vec4[3] = "square" === settings.shape ? 1 : 0;
90
+ this._edl1[0] = settings.edlStrength;
91
+ this._edl1[1] = settings.edlRadius;
92
+ this._edl1[2] = this._scaleFactor;
93
+ this._edl1[3] = this._is3d ? 1 : 0;
94
+ this._edl2[0] = (_a = settings === null || settings === void 0 ? void 0 : settings.edlMixWts1) !== null && _a !== void 0 ? _a : 1.0;
95
+ this._edl2[1] = (_b = settings === null || settings === void 0 ? void 0 : settings.edlMixWts2) !== null && _b !== void 0 ? _b : 0.5;
96
+ this._edl2[2] = (_c = settings === null || settings === void 0 ? void 0 : settings.edlMixWts4) !== null && _c !== void 0 ? _c : 0.25;
97
+ this._edl2[3] = 0;
48
98
  }
49
99
  }
50
100
  exports.PointCloudUniforms = PointCloudUniforms;
@@ -1 +1 @@
1
- {"version":3,"file":"RealityModelUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/RealityModelUniforms.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,oDAA4F;AAE5F,iCAAsC;AAEtC;;;;;;GAMG;AACH,MAAa,kBAAkB;IAW7B;QAVO,YAAO,GAAG,CAAC,CAAC;QACX,cAAS,GAAG,uCAAyB,CAAC,QAAQ,CAAC;QAEvD,mBAAmB;QACnB,qFAAqF;QACrF,kDAAkD;QAClD,iDAAiD;QACjD,kDAAkD;QACjC,UAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAG3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,QAAmC;QAC/C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;YACjC,OAAO;QAET,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC;QACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAEM,IAAI,CAAC,OAAsB;QAChC,IAAI,CAAC,IAAA,WAAI,EAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAEO,UAAU,CAAC,QAAmC;QACpD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;CACF;AAnCD,gDAmCC;AAED;;;;;;GAMG;AACH,MAAa,oBAAoB;IAAjC;QACE,6EAA6E;QAC7D,eAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC9C,sBAAiB,GAAG,GAAG,CAAC;IAUlC,CAAC;IARQ,MAAM,CAAC,QAAqC;QACjD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,kBAAkB,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAEM,oBAAoB,CAAC,OAAsB;QAChD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC;CACF;AAbD,oDAaC","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 { PointCloudDisplaySettings, RealityModelDisplaySettings } from \"@itwin/core-common\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { desync, sync } from \"./Sync\";\r\n\r\n/** A Target keeps track of the current settings for drawing point clouds.\r\n * Pushing a Branch may *replace* the current settings. Popping the Branch does not reset them. It is expected that every Branch containing\r\n * a point cloud will also specify the settings for drawing that point cloud.\r\n * This permits the same point cloud graphics to be rendered differently in different viewports.\r\n * In future these uniforms will include eye-dome lighting.\r\n * @internal\r\n */\r\nexport class PointCloudUniforms {\r\n public syncKey = 0;\r\n private _settings = PointCloudDisplaySettings.defaults;\r\n\r\n // vec3 u_pointSize\r\n // x = fixed point size in pixels if > 0, else scale applied to voxel size (negated).\r\n // y = minimum size in pixels if using voxel size.\r\n // z = maximum size in pixels if using voxel size\r\n // w = 1.0 if drawing square points, 0.0 if round.\r\n private readonly _vec4 = new Float32Array(4);\r\n\r\n public constructor() {\r\n this.initialize(this._settings);\r\n }\r\n\r\n public update(settings: PointCloudDisplaySettings): void {\r\n if (this._settings.equals(settings))\r\n return;\r\n\r\n this._settings = settings;\r\n desync(this);\r\n this.initialize(settings);\r\n }\r\n\r\n public bind(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform4fv(this._vec4);\r\n }\r\n\r\n private initialize(settings: PointCloudDisplaySettings): void {\r\n this._vec4[0] = \"pixel\" === settings.sizeMode ? settings.pixelSize : -settings.voxelScale;\r\n this._vec4[1] = settings.minPixelsPerVoxel;\r\n this._vec4[2] = settings.maxPixelsPerVoxel;\r\n this._vec4[3] = \"square\" === settings.shape ? 1 : 0;\r\n }\r\n}\r\n\r\n/** Uniforms affecting how reality models are drawn.\r\n * Pushing a Branch may *replace* the current settings. Popping the Branch does not reset them. It is expected that every Branch containing\r\n * a reality model will also specify the settings for drawing that reality model.\r\n * This permits the same reality model graphics to be rendered differently in different viewports.\r\n * In future these uniforms may include additional settings for reality meshes - currently only the override color ratio applies to them.\r\n * @internal\r\n */\r\nexport class RealityModelUniforms {\r\n // ###TODO when we need it: public readonly mesh = new RealityMeshUniforms();\r\n public readonly pointCloud = new PointCloudUniforms();\r\n private _overrideColorMix = 0.5;\r\n\r\n public update(settings: RealityModelDisplaySettings): void {\r\n this._overrideColorMix = settings.overrideColorRatio;\r\n this.pointCloud.update(settings.pointCloud);\r\n }\r\n\r\n public bindOverrideColorMix(uniform: UniformHandle): void {\r\n uniform.setUniform1f(this._overrideColorMix);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityModelUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/RealityModelUniforms.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 { PointCloudDisplaySettings, RealityModelDisplaySettings } from \"@itwin/core-common\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Target } from \"./Target\";\r\n\r\n/** A Target keeps track of the current settings for drawing point clouds.\r\n * Pushing a Branch may *replace* the current settings. Popping the Branch does not reset them. It is expected that every Branch containing\r\n * a point cloud will also specify the settings for drawing that point cloud.\r\n * This permits the same point cloud graphics to be rendered differently in different viewports.\r\n * In future these uniforms will include eye-dome lighting.\r\n * @internal\r\n */\r\nexport class PointCloudUniforms {\r\n public syncKey = 0;\r\n private _settings = PointCloudDisplaySettings.defaults;\r\n private _scaleFactor = 8.0;\r\n private _is3d = true;\r\n\r\n // vec3 u_pointSize\r\n // x = fixed point size in pixels if > 0, else scale applied to voxel size (negated).\r\n // y = minimum size in pixels if using voxel size.\r\n // z = maximum size in pixels if using voxel size\r\n // w = 1.0 if drawing square points, 0.0 if round.\r\n private readonly _vec4 = new Float32Array(4);\r\n\r\n // x = strength - 0.0 disables EDL\r\n // y = radius\r\n // z =\r\n // w =\r\n private readonly _edl1 = new Float32Array(4);\r\n private readonly _edl2 = new Float32Array(4);\r\n\r\n public constructor() {\r\n this.initialize(this._settings);\r\n }\r\n\r\n public update(settings: PointCloudDisplaySettings): void {\r\n if (this._settings.equals(settings))\r\n return;\r\n\r\n this._settings = settings;\r\n desync(this);\r\n this.initialize(settings);\r\n }\r\n\r\n public updateRange(range: Range3d | undefined, target: Target, xform: Transform, is3d: boolean): void {\r\n let rangeFactor = 8.0; // default to min scale factor of 8\r\n const near = target.uniforms.frustum.nearPlane;\r\n const far = target.uniforms.frustum.farPlane;\r\n const viewDepth = far - near;\r\n if (range !== undefined) {\r\n const scale = xform.matrix;\r\n // calculate a \"normalized\" strength factor based on the size of the point cloud versus the current viewing depth\r\n // from the matrix, only care about scaling factor here (entries 0,4,8) to scale the range lengths\r\n // then use the largest length component as the reference for the size of the point cloud\r\n const rangeScale = Vector3d.create(scale.coffs[0] * range.xLength(), scale.coffs[4] * range.xLength(), scale.coffs[8] * range.xLength()).maxAbs();\r\n // limit the viewDepth/rangeScale ratio to min of 10 to still get reasonable factors when close to and inside the model\r\n rangeFactor = Math.log (Math.max (10, viewDepth / rangeScale));\r\n }\r\n const zoomFactor = Math.log (far / near); // compensate for zoom level\r\n const winSizeFactor = Math.pow (1.8440033, Math.log2 (2226 / target.uniforms.viewRect.width)); // compensate for window size\r\n const scaleFactor = (rangeFactor + zoomFactor) / winSizeFactor;\r\n\r\n if (this._scaleFactor === scaleFactor && this._is3d === is3d)\r\n return;\r\n this._scaleFactor = scaleFactor;\r\n this._is3d = is3d;\r\n desync(this);\r\n this.initialize(this._settings);\r\n }\r\n\r\n public bind(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform4fv(this._vec4);\r\n }\r\n\r\n public bindEDL1(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform4fv(this._edl1);\r\n }\r\n\r\n public bindEDL2(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform4fv(this._edl2);\r\n }\r\n\r\n private initialize(settings: PointCloudDisplaySettings): void {\r\n this._vec4[0] = \"pixel\" === settings.sizeMode ? settings.pixelSize : -settings.voxelScale;\r\n this._vec4[1] = settings.minPixelsPerVoxel;\r\n this._vec4[2] = settings.maxPixelsPerVoxel;\r\n this._vec4[3] = \"square\" === settings.shape ? 1 : 0;\r\n\r\n this._edl1[0] = settings.edlStrength;\r\n this._edl1[1] = settings.edlRadius;\r\n this._edl1[2] = this._scaleFactor;\r\n this._edl1[3] = this._is3d ? 1 : 0;\r\n\r\n this._edl2[0] = settings?.edlMixWts1 ?? 1.0;\r\n this._edl2[1] = settings?.edlMixWts2 ?? 0.5;\r\n this._edl2[2] = settings?.edlMixWts4 ?? 0.25;\r\n this._edl2[3] = 0;\r\n }\r\n}\r\n\r\n/** Uniforms affecting how reality models are drawn.\r\n * Pushing a Branch may *replace* the current settings. Popping the Branch does not reset them. It is expected that every Branch containing\r\n * a reality model will also specify the settings for drawing that reality model.\r\n * This permits the same reality model graphics to be rendered differently in different viewports.\r\n * In future these uniforms may include additional settings for reality meshes - currently only the override color ratio applies to them.\r\n * @internal\r\n */\r\nexport class RealityModelUniforms {\r\n // ###TODO when we need it: public readonly mesh = new RealityMeshUniforms();\r\n public readonly pointCloud = new PointCloudUniforms();\r\n private _overrideColorMix = 0.5;\r\n\r\n public update(settings: RealityModelDisplaySettings): void {\r\n this._overrideColorMix = settings.overrideColorRatio;\r\n this.pointCloud.update(settings.pointCloud);\r\n }\r\n\r\n public bindOverrideColorMix(uniform: UniformHandle): void {\r\n uniform.setUniform1f(this._overrideColorMix);\r\n }\r\n}\r\n"]}
@@ -24,7 +24,7 @@ class RenderCommands {
24
24
  constructor(target, stack, batchState) {
25
25
  this._scratchFrustum = new core_common_1.Frustum();
26
26
  this._scratchRange = new core_geometry_1.Range3d();
27
- this._commands = new Array(20 /* COUNT */);
27
+ this._commands = new Array(21 /* COUNT */);
28
28
  this._forcedRenderPass = 255 /* None */;
29
29
  this._addLayersAsNormalGraphics = false;
30
30
  this._opaqueOverrides = false;
@@ -34,7 +34,7 @@ class RenderCommands {
34
34
  this._stack = stack;
35
35
  this._batchState = batchState;
36
36
  this._layers = new LayerCommands_1.LayerCommandLists(this);
37
- for (let i = 0; i < 20 /* COUNT */; ++i)
37
+ for (let i = 0; i < 21 /* COUNT */; ++i)
38
38
  this._commands[i] = [];
39
39
  }
40
40
  get target() { return this._target; }
@@ -50,8 +50,8 @@ class RenderCommands {
50
50
  get isDrawingLayers() {
51
51
  switch (this._forcedRenderPass) {
52
52
  case 1 /* OpaqueLayers */:
53
- case 6 /* TranslucentLayers */:
54
- case 10 /* OverlayLayers */:
53
+ case 7 /* TranslucentLayers */:
54
+ case 11 /* OverlayLayers */:
55
55
  return true;
56
56
  default:
57
57
  return false;
@@ -60,9 +60,9 @@ class RenderCommands {
60
60
  get currentViewFlags() { return this._stack.top.viewFlags; }
61
61
  get compositeFlags() {
62
62
  let flags = 0 /* None */;
63
- if (this.hasCommands(7 /* Translucent */))
63
+ if (this.hasCommands(8 /* Translucent */))
64
64
  flags |= 1 /* Translucent */;
65
- if (this.hasCommands(9 /* Hilite */) || this.hasCommands(15 /* HiliteClassification */) || this.hasCommands(17 /* HilitePlanarClassification */))
65
+ if (this.hasCommands(10 /* Hilite */) || this.hasCommands(16 /* HiliteClassification */) || this.hasCommands(18 /* HilitePlanarClassification */))
66
66
  flags |= 2 /* Hilite */;
67
67
  if (this.target.wantAmbientOcclusion)
68
68
  flags |= 4 /* AmbientOcclusion */;
@@ -70,7 +70,7 @@ class RenderCommands {
70
70
  }
71
71
  get _curBatch() { return this._batchState.currentBatch; }
72
72
  hasCommands(pass) { return 0 !== this.getCommands(pass).length; }
73
- isOpaquePass(pass) { return pass >= 2 /* OpaqueLinear */ && pass <= 4 /* OpaqueGeneral */; }
73
+ isOpaquePass(pass) { return pass >= 2 /* OpaqueLinear */ && pass <= 5 /* OpaqueGeneral */; }
74
74
  reset(target, stack, batchState) {
75
75
  this._target = target;
76
76
  this._stack = stack;
@@ -91,13 +91,13 @@ class RenderCommands {
91
91
  }
92
92
  /** Add backgroundMap graphics to their own render pass. */
93
93
  addBackgroundMapGraphics(backgroundMapGraphics) {
94
- this._forcedRenderPass = 14 /* BackgroundMap */;
94
+ this._forcedRenderPass = 15 /* BackgroundMap */;
95
95
  backgroundMapGraphics.forEach((entry) => entry.addCommands(this));
96
96
  this._forcedRenderPass = 255 /* None */;
97
97
  }
98
98
  /** Add overlay graphics to the world overlay pass */
99
99
  addOverlayGraphics(overlayGraphics) {
100
- this._forcedRenderPass = 11 /* WorldOverlay */;
100
+ this._forcedRenderPass = 12 /* WorldOverlay */;
101
101
  overlayGraphics.forEach((entry) => entry.addCommands(this));
102
102
  this._forcedRenderPass = 255 /* None */;
103
103
  }
@@ -146,7 +146,7 @@ class RenderCommands {
146
146
  if (undefined === gf)
147
147
  return;
148
148
  (0, core_bentley_1.assert)(255 /* None */ === this._forcedRenderPass);
149
- this._forcedRenderPass = 13 /* SkyBox */;
149
+ this._forcedRenderPass = 14 /* SkyBox */;
150
150
  this.pushAndPopState(this.target.decorationsState, () => gf.addCommands(this));
151
151
  this._forcedRenderPass = 255 /* None */;
152
152
  }
@@ -205,7 +205,7 @@ class RenderCommands {
205
205
  break;
206
206
  case 4 /* LitSurface */:
207
207
  case 3 /* UnlitSurface */:
208
- opaquePass = 4 /* OpaqueGeneral */;
208
+ opaquePass = 5 /* OpaqueGeneral */;
209
209
  break;
210
210
  default:
211
211
  opaquePass = 2 /* OpaqueLinear */;
@@ -216,7 +216,7 @@ class RenderCommands {
216
216
  }
217
217
  const renderOpaqueDuringTranslucent = isDoublePass || (this._translucentOverrides && haveFeatureOverrides);
218
218
  if (renderOpaqueDuringTranslucent && RenderFlags_1.Pass.rendersOpaque(pass) && !this._addTranslucentAsOpaque)
219
- this.getCommands(7 /* Translucent */).push(command);
219
+ this.getCommands(8 /* Translucent */).push(command);
220
220
  if (!RenderFlags_1.Pass.rendersOpaqueAndTranslucent(pass))
221
221
  this.getCommands(RenderFlags_1.Pass.toRenderPass(pass)).push(command);
222
222
  }
@@ -250,7 +250,7 @@ class RenderCommands {
250
250
  // GraphicsCollectorDrawArgs wants to collect graphics to project to a plane for masking.
251
251
  // It bypasses PlanProjectionTreeReference.createDrawArgs which would otherwise wrap the graphics in a LayerContainer.
252
252
  (0, core_bentley_1.assert)(this._forcedRenderPass === 255 /* None */);
253
- this._forcedRenderPass = 4 /* OpaqueGeneral */;
253
+ this._forcedRenderPass = 5 /* OpaqueGeneral */;
254
254
  layer.graphic.addCommands(this);
255
255
  this._forcedRenderPass = 255 /* None */;
256
256
  return;
@@ -313,9 +313,9 @@ class RenderCommands {
313
313
  }
314
314
  pushAndPop(push, pop, func) {
315
315
  if (this.isDrawingLayers) {
316
- this._commands[9 /* Hilite */].push(push);
316
+ this._commands[10 /* Hilite */].push(push);
317
317
  this._layers.pushAndPop(push, pop, func);
318
- const cmds = this._commands[9 /* Hilite */];
318
+ const cmds = this._commands[10 /* Hilite */];
319
319
  if (0 < cmds.length && cmds[cmds.length - 1] === push)
320
320
  cmds.pop();
321
321
  else
@@ -330,7 +330,7 @@ class RenderCommands {
330
330
  else {
331
331
  // May want to add hilite commands as well - add the push command to that pass.
332
332
  this._commands[this._forcedRenderPass].push(push);
333
- this._commands[9 /* Hilite */].push(push);
333
+ this._commands[10 /* Hilite */].push(push);
334
334
  }
335
335
  func();
336
336
  // Remove push command from any passes that didn't receive any commands; add the pop command to any passes that did.
@@ -345,13 +345,13 @@ class RenderCommands {
345
345
  }
346
346
  else {
347
347
  (0, core_bentley_1.assert)(0 < this._commands[this._forcedRenderPass].length);
348
- (0, core_bentley_1.assert)(0 < this._commands[9 /* Hilite */].length);
348
+ (0, core_bentley_1.assert)(0 < this._commands[10 /* Hilite */].length);
349
349
  let cmds = this._commands[this._forcedRenderPass];
350
350
  if (cmds[cmds.length - 1] === push)
351
351
  cmds.pop();
352
352
  else
353
353
  cmds.push(pop);
354
- cmds = this._commands[9 /* Hilite */];
354
+ cmds = this._commands[10 /* Hilite */];
355
355
  if (cmds[cmds.length - 1] === push)
356
356
  cmds.pop();
357
357
  else
@@ -438,9 +438,9 @@ class RenderCommands {
438
438
  this.addWorldDecorations(dec.world);
439
439
  this.pushAndPopState(this.target.decorationsState, () => {
440
440
  if (undefined !== dec.viewOverlay && 0 < dec.viewOverlay.length)
441
- this.addDecorations(dec.viewOverlay, 12 /* ViewOverlay */);
441
+ this.addDecorations(dec.viewOverlay, 13 /* ViewOverlay */);
442
442
  if (undefined !== dec.worldOverlay && 0 < dec.worldOverlay.length)
443
- this.addDecorations(dec.worldOverlay, 11 /* WorldOverlay */);
443
+ this.addDecorations(dec.worldOverlay, 12 /* WorldOverlay */);
444
444
  });
445
445
  }
446
446
  this.setupClassificationByVolume();
@@ -466,7 +466,7 @@ class RenderCommands {
466
466
  if (255 /* None */ === this._forcedRenderPass && prim.isEdge) {
467
467
  const vf = this.target.currentViewFlags;
468
468
  if (vf.renderMode !== core_common_1.RenderMode.Wireframe && vf.hiddenEdges)
469
- this.getCommands(8 /* HiddenEdge */).push(command);
469
+ this.getCommands(9 /* HiddenEdge */).push(command);
470
470
  }
471
471
  }
472
472
  addBranch(branch) {
@@ -475,25 +475,25 @@ class RenderCommands {
475
475
  });
476
476
  }
477
477
  computeBatchHiliteRenderPass(batch) {
478
- let pass = 9 /* Hilite */;
478
+ let pass = 10 /* Hilite */;
479
479
  if (batch.graphic instanceof Mesh_1.MeshGraphic) {
480
480
  const mg = batch.graphic;
481
481
  if (SurfaceParams_1.SurfaceType.VolumeClassifier === mg.surfaceType)
482
- pass = 15 /* HiliteClassification */;
482
+ pass = 16 /* HiliteClassification */;
483
483
  }
484
484
  else if (batch.graphic instanceof Graphic_1.GraphicsArray) {
485
485
  const ga = batch.graphic;
486
486
  if (ga.graphics[0] instanceof Mesh_1.MeshGraphic) {
487
487
  const mg = ga.graphics[0];
488
488
  if (SurfaceParams_1.SurfaceType.VolumeClassifier === mg.surfaceType)
489
- pass = 15 /* HiliteClassification */;
489
+ pass = 16 /* HiliteClassification */;
490
490
  }
491
491
  else if (ga.graphics[0] instanceof Graphic_1.Branch) {
492
492
  const b = ga.graphics[0];
493
493
  if (b.branch.entries.length > 0 && b.branch.entries[0] instanceof Mesh_1.MeshGraphic) {
494
494
  const mg = b.branch.entries[0];
495
495
  if (SurfaceParams_1.SurfaceType.VolumeClassifier === mg.surfaceType)
496
- pass = 15 /* HiliteClassification */;
496
+ pass = 16 /* HiliteClassification */;
497
497
  }
498
498
  }
499
499
  }
@@ -539,16 +539,16 @@ class RenderCommands {
539
539
  let savedForcedRenderPass = 255 /* None */;
540
540
  if (undefined !== this.target.activeVolumeClassifierModelId && batch.featureTable.modelId === this.target.activeVolumeClassifierModelId) {
541
541
  savedForcedRenderPass = this._forcedRenderPass;
542
- this._forcedRenderPass = 19 /* VolumeClassifiedRealityData */;
542
+ this._forcedRenderPass = 20 /* VolumeClassifiedRealityData */;
543
543
  }
544
544
  batch.graphic.addCommands(this);
545
- if (19 /* VolumeClassifiedRealityData */ === this._forcedRenderPass)
545
+ if (20 /* VolumeClassifiedRealityData */ === this._forcedRenderPass)
546
546
  this._forcedRenderPass = savedForcedRenderPass;
547
547
  // If the batch contains hilited features, need to render them in the hilite pass
548
548
  const anyHilited = overrides.anyHilited;
549
549
  const planarClassifierHilited = undefined !== classifier && classifier.anyHilited;
550
550
  if (anyHilited || planarClassifierHilited)
551
- batch.graphic.addHiliteCommands(this, planarClassifierHilited ? 17 /* HilitePlanarClassification */ : this.computeBatchHiliteRenderPass(batch));
551
+ batch.graphic.addHiliteCommands(this, planarClassifierHilited ? 18 /* HilitePlanarClassification */ : this.computeBatchHiliteRenderPass(batch));
552
552
  });
553
553
  this._opaqueOverrides = this._translucentOverrides = false;
554
554
  this._batchState.pop();
@@ -561,8 +561,8 @@ class RenderCommands {
561
561
  // To make it easier to process the classifiers individually, set up a secondary command list for them where they
562
562
  // are each separated by their own pushes & pops so that they can easily be drawn individually. This now supports
563
563
  // nested branches and batches.
564
- const groupedCmds = this._commands[5 /* Classification */];
565
- const byIndexCmds = this._commands[16 /* ClassificationByIndex */];
564
+ const groupedCmds = this._commands[6 /* Classification */];
565
+ const byIndexCmds = this._commands[17 /* ClassificationByIndex */];
566
566
  const pushCommands = []; // will contain current set of pushes ahead of a primitive
567
567
  for (const cmd of groupedCmds) {
568
568
  switch (cmd.opcode) {
@@ -1 +1 @@
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\":\r\n index = 0;\r\n break;\r\n case \"pushBatch\":\r\n index = 1;\r\n break;\r\n case \"pushBranch\":\r\n index = 2;\r\n break;\r\n default:\r\n 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\":\r\n index = 0;\r\n break;\r\n case \"pushBatch\":\r\n index = 1;\r\n break;\r\n case \"pushBranch\":\r\n index = 2;\r\n break;\r\n default:\r\n 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"]}