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

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 (838) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AccuDraw.js +1 -1
  4. package/lib/cjs/AccuDraw.js.map +1 -1
  5. package/lib/cjs/BriefcaseConnection.d.ts +23 -3
  6. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  7. package/lib/cjs/BriefcaseConnection.js +11 -3
  8. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  9. package/lib/cjs/CheckpointConnection.js +1 -1
  10. package/lib/cjs/CheckpointConnection.js.map +1 -1
  11. package/lib/cjs/DisplayStyleState.d.ts +2 -2
  12. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  13. package/lib/cjs/DisplayStyleState.js +12 -4
  14. package/lib/cjs/DisplayStyleState.js.map +1 -1
  15. package/lib/cjs/IModelApp.d.ts +4 -3
  16. package/lib/cjs/IModelApp.d.ts.map +1 -1
  17. package/lib/cjs/IModelApp.js +4 -6
  18. package/lib/cjs/IModelApp.js.map +1 -1
  19. package/lib/cjs/IModelConnection.d.ts +4 -6
  20. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  21. package/lib/cjs/IModelConnection.js +6 -7
  22. package/lib/cjs/IModelConnection.js.map +1 -1
  23. package/lib/cjs/IpcApp.d.ts +1 -1
  24. package/lib/cjs/IpcApp.d.ts.map +1 -1
  25. package/lib/cjs/IpcApp.js +1 -1
  26. package/lib/cjs/IpcApp.js.map +1 -1
  27. package/lib/cjs/NativeApp.d.ts +8 -1
  28. package/lib/cjs/NativeApp.d.ts.map +1 -1
  29. package/lib/cjs/NativeApp.js +10 -6
  30. package/lib/cjs/NativeApp.js.map +1 -1
  31. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  32. package/lib/cjs/NoRenderApp.js +3 -0
  33. package/lib/cjs/NoRenderApp.js.map +1 -1
  34. package/lib/cjs/SpatialViewState.d.ts +4 -1
  35. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  36. package/lib/cjs/SpatialViewState.js +19 -5
  37. package/lib/cjs/SpatialViewState.js.map +1 -1
  38. package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
  39. package/lib/cjs/SubCategoriesCache.js +0 -1
  40. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  41. package/lib/cjs/Tiles.d.ts +4 -0
  42. package/lib/cjs/Tiles.d.ts.map +1 -1
  43. package/lib/cjs/Tiles.js +11 -0
  44. package/lib/cjs/Tiles.js.map +1 -1
  45. package/lib/cjs/ViewContext.js +1 -1
  46. package/lib/cjs/ViewContext.js.map +1 -1
  47. package/lib/cjs/ViewManager.d.ts.map +1 -1
  48. package/lib/cjs/ViewManager.js +2 -3
  49. package/lib/cjs/ViewManager.js.map +1 -1
  50. package/lib/cjs/ViewState.d.ts +4 -5
  51. package/lib/cjs/ViewState.d.ts.map +1 -1
  52. package/lib/cjs/ViewState.js +0 -1
  53. package/lib/cjs/ViewState.js.map +1 -1
  54. package/lib/cjs/Viewport.d.ts +53 -4
  55. package/lib/cjs/Viewport.d.ts.map +1 -1
  56. package/lib/cjs/Viewport.js +82 -34
  57. package/lib/cjs/Viewport.js.map +1 -1
  58. package/lib/cjs/extension/ExtensionImpl.js +2 -2
  59. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  60. package/lib/cjs/extension/ExtensionRuntime.js +3 -0
  61. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  62. package/lib/cjs/render/GraphicBranch.d.ts +3 -0
  63. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  64. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  65. package/lib/cjs/render/GraphicBuilder.d.ts +1 -1
  66. package/lib/cjs/render/GraphicBuilder.js +1 -1
  67. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  68. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  69. package/lib/cjs/render/MockRender.js +3 -0
  70. package/lib/cjs/render/MockRender.js.map +1 -1
  71. package/lib/cjs/render/RealityMeshParams.d.ts +7 -5
  72. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  73. package/lib/cjs/render/RealityMeshParams.js +23 -9
  74. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  75. package/lib/cjs/render/RenderMaterial.d.ts +1 -1
  76. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  77. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  78. package/lib/cjs/render/RenderSystem.d.ts +9 -20
  79. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  80. package/lib/cjs/render/RenderSystem.js +4 -10
  81. package/lib/cjs/render/RenderSystem.js.map +1 -1
  82. package/lib/cjs/render/RenderTarget.d.ts +1 -1
  83. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  84. package/lib/cjs/render/RenderTarget.js +1 -1
  85. package/lib/cjs/render/RenderTarget.js.map +1 -1
  86. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  87. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  88. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  89. package/lib/cjs/render/VisibleFeature.d.ts +5 -5
  90. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  91. package/lib/cjs/render/primitives/DisplayParams.d.ts.map +1 -1
  92. package/lib/cjs/render/primitives/DisplayParams.js +2 -1
  93. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  94. package/lib/cjs/render/webgl/AttributeBuffers.d.ts +9 -79
  95. package/lib/cjs/render/webgl/AttributeBuffers.d.ts.map +1 -1
  96. package/lib/cjs/render/webgl/AttributeBuffers.js +19 -152
  97. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  98. package/lib/cjs/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  99. package/lib/cjs/render/webgl/BackgroundMapDrape.js +3 -6
  100. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  101. package/lib/cjs/render/webgl/BranchState.d.ts +3 -0
  102. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  103. package/lib/cjs/render/webgl/BranchState.js +5 -0
  104. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  105. package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
  106. package/lib/cjs/render/webgl/BranchUniforms.js +0 -8
  107. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  108. package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
  109. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  110. package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
  111. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  112. package/lib/cjs/render/webgl/ClipStack.d.ts +0 -1
  113. package/lib/cjs/render/webgl/ClipStack.d.ts.map +1 -1
  114. package/lib/cjs/render/webgl/ClipStack.js +2 -6
  115. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  116. package/lib/cjs/render/webgl/ClipVolume.d.ts.map +1 -1
  117. package/lib/cjs/render/webgl/ClipVolume.js +1 -5
  118. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  119. package/lib/cjs/render/webgl/ClippingProgram.d.ts +3 -2
  120. package/lib/cjs/render/webgl/ClippingProgram.d.ts.map +1 -1
  121. package/lib/cjs/render/webgl/ClippingProgram.js +10 -37
  122. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  123. package/lib/cjs/render/webgl/DrawCommand.d.ts +2 -2
  124. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  125. package/lib/cjs/render/webgl/DrawCommand.js +7 -5
  126. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  127. package/lib/cjs/render/webgl/EDL.d.ts +40 -0
  128. package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
  129. package/lib/cjs/render/webgl/EDL.js +264 -0
  130. package/lib/cjs/render/webgl/EDL.js.map +1 -0
  131. package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
  132. package/lib/cjs/render/webgl/FeatureOverrides.js +1 -1
  133. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  134. package/lib/cjs/render/webgl/FloatRGBA.d.ts.map +1 -1
  135. package/lib/cjs/render/webgl/FloatRGBA.js +0 -4
  136. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  137. package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
  138. package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
  139. package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
  140. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  141. package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
  142. package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  144. package/lib/cjs/render/webgl/GLTimer.d.ts.map +1 -1
  145. package/lib/cjs/render/webgl/GLTimer.js +2 -35
  146. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  147. package/lib/cjs/render/webgl/Layer.js +2 -2
  148. package/lib/cjs/render/webgl/LayerCommands.js +2 -2
  149. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  150. package/lib/cjs/render/webgl/PlanarClassifier.js +20 -77
  151. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  152. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  153. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  154. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  155. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  156. package/lib/cjs/render/webgl/PointCloud.js +1 -1
  157. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  158. package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
  159. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  160. package/lib/cjs/render/webgl/RealityMesh.js +8 -3
  161. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  162. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
  163. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  164. package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
  165. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  166. package/lib/cjs/render/webgl/RenderBuffer.d.ts +1 -1
  167. package/lib/cjs/render/webgl/RenderBuffer.d.ts.map +1 -1
  168. package/lib/cjs/render/webgl/RenderBuffer.js +2 -3
  169. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  170. package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -1
  171. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  172. package/lib/cjs/render/webgl/RenderCommands.js +46 -38
  173. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  174. package/lib/cjs/render/webgl/RenderFlags.d.ts +20 -19
  175. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  176. package/lib/cjs/render/webgl/RenderFlags.js +12 -12
  177. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  178. package/lib/cjs/render/webgl/SceneCompositor.d.ts +6 -3
  179. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  180. package/lib/cjs/render/webgl/SceneCompositor.js +626 -888
  181. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  182. package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
  183. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  184. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +1 -2
  185. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  186. package/lib/cjs/render/webgl/ShaderBuilder.js +13 -48
  187. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  188. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -2
  189. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  190. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  191. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  192. package/lib/cjs/render/webgl/SolarShadowMap.js +8 -29
  193. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  194. package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
  195. package/lib/cjs/render/webgl/System.d.ts +10 -10
  196. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  197. package/lib/cjs/render/webgl/System.js +39 -122
  198. package/lib/cjs/render/webgl/System.js.map +1 -1
  199. package/lib/cjs/render/webgl/Target.js +7 -7
  200. package/lib/cjs/render/webgl/Target.js.map +1 -1
  201. package/lib/cjs/render/webgl/Technique.d.ts +4 -5
  202. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  203. package/lib/cjs/render/webgl/Technique.js +16 -25
  204. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  205. package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
  206. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  207. package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
  208. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  209. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  210. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  211. package/lib/cjs/render/webgl/Texture.js +14 -18
  212. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  213. package/lib/cjs/render/webgl/ThematicSensors.d.ts +4 -3
  214. package/lib/cjs/render/webgl/ThematicSensors.d.ts.map +1 -1
  215. package/lib/cjs/render/webgl/ThematicSensors.js +9 -50
  216. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  217. package/lib/cjs/render/webgl/ThematicUniforms.js +1 -1
  218. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  219. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  220. package/lib/cjs/render/webgl/UniformHandle.js +2 -6
  221. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  222. package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
  223. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  224. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  225. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
  226. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  227. package/lib/cjs/render/webgl/glsl/Animation.d.ts +1 -2
  228. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  229. package/lib/cjs/render/webgl/glsl/Animation.js +23 -26
  230. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  231. package/lib/cjs/render/webgl/glsl/Blur.d.ts +1 -2
  232. package/lib/cjs/render/webgl/glsl/Blur.d.ts.map +1 -1
  233. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  234. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  235. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  236. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -9
  237. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  238. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  239. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  240. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -10
  241. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  242. package/lib/cjs/render/webgl/glsl/Clipping.d.ts +1 -1
  243. package/lib/cjs/render/webgl/glsl/Clipping.d.ts.map +1 -1
  244. package/lib/cjs/render/webgl/glsl/Clipping.js +5 -36
  245. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  246. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  247. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  248. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  249. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts +1 -2
  250. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  251. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  252. package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
  253. package/lib/cjs/render/webgl/glsl/Common.js +9 -55
  254. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  255. package/lib/cjs/render/webgl/glsl/Composite.d.ts +1 -2
  256. package/lib/cjs/render/webgl/glsl/Composite.d.ts.map +1 -1
  257. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  258. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts +1 -2
  259. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  260. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  261. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  262. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  263. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +12 -19
  264. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  265. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts +4 -7
  266. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  267. package/lib/cjs/render/webgl/glsl/CopyStencil.js +2 -39
  268. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  269. package/lib/cjs/render/webgl/glsl/EDL.d.ts +13 -0
  270. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
  271. package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
  272. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
  273. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  274. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  275. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  276. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  277. package/lib/cjs/render/webgl/glsl/Edge.js +2 -2
  278. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  279. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  280. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +3 -24
  281. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  282. package/lib/cjs/render/webgl/glsl/Fragment.d.ts +0 -7
  283. package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
  284. package/lib/cjs/render/webgl/glsl/Fragment.js +5 -40
  285. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  286. package/lib/cjs/render/webgl/glsl/Instancing.d.ts.map +1 -1
  287. package/lib/cjs/render/webgl/glsl/Instancing.js +1 -5
  288. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  289. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  290. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  291. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  292. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  293. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  294. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -12
  295. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  296. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  297. package/lib/cjs/render/webgl/glsl/RealityMesh.js +3 -8
  298. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  299. package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
  300. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  301. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts +1 -2
  302. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  303. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  304. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts +1 -2
  305. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  306. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  307. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -1
  308. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  309. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  310. package/lib/cjs/render/webgl/glsl/Surface.js +33 -57
  311. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  312. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  313. package/lib/cjs/render/webgl/glsl/Thematic.js +3 -36
  314. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  315. package/lib/cjs/render/webgl/glsl/Translucency.d.ts.map +1 -1
  316. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -12
  317. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  318. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +1 -2
  319. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  320. package/lib/cjs/render/webgl/glsl/Vertex.js +15 -78
  321. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  322. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  323. package/lib/cjs/render/webgl/glsl/Wiremesh.js +2 -5
  324. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  325. package/lib/cjs/tile/BatchedTileIdMap.js +1 -1
  326. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  327. package/lib/cjs/tile/DynamicIModelTile.js +1 -1
  328. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  329. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  330. package/lib/cjs/tile/GltfReader.js +4 -2
  331. package/lib/cjs/tile/GltfReader.js.map +1 -1
  332. package/lib/cjs/tile/IModelTile.js +1 -1
  333. package/lib/cjs/tile/IModelTile.js.map +1 -1
  334. package/lib/cjs/tile/ImdlReader.d.ts +6 -0
  335. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  336. package/lib/cjs/tile/ImdlReader.js +20 -7
  337. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  338. package/lib/cjs/tile/OrbitGtTileTree.d.ts +14 -1
  339. package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
  340. package/lib/cjs/tile/OrbitGtTileTree.js +30 -11
  341. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  342. package/lib/cjs/tile/PrimaryTileTree.d.ts +0 -3
  343. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  344. package/lib/cjs/tile/PrimaryTileTree.js +6 -28
  345. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  346. package/lib/cjs/tile/RealityModelTileTree.d.ts +4 -3
  347. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  348. package/lib/cjs/tile/RealityModelTileTree.js +61 -53
  349. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  350. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  351. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  352. package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
  353. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  354. package/lib/cjs/tile/RealityTileTree.js +8 -4
  355. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  356. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  357. package/lib/cjs/tile/TileAdmin.js +17 -9
  358. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  359. package/lib/cjs/tile/TileDrawArgs.js +1 -1
  360. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  361. package/lib/cjs/tile/TileTreeReference.d.ts +3 -0
  362. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  363. package/lib/cjs/tile/TileTreeReference.js +3 -0
  364. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  365. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +14 -1
  366. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  367. package/lib/cjs/tile/map/ArcGisUtilities.js +57 -27
  368. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  369. package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
  370. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  371. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  372. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  373. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  374. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  375. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  376. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  377. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  378. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  379. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  380. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  381. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  382. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  383. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
  384. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  385. package/lib/cjs/tile/map/ImageryTileTree.d.ts +28 -3
  386. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  387. package/lib/cjs/tile/map/ImageryTileTree.js +63 -8
  388. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  389. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  390. package/lib/cjs/tile/map/MapLayerImageryFormats.js +3 -2
  391. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  392. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +12 -2
  393. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  394. package/lib/cjs/tile/map/MapLayerImageryProvider.js +16 -4
  395. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  396. package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -1
  397. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  398. package/lib/cjs/tile/map/MapLayerSources.js +2 -0
  399. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  400. package/lib/cjs/tile/map/MapTile.d.ts +13 -0
  401. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  402. package/lib/cjs/tile/map/MapTile.js +57 -14
  403. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  404. package/lib/cjs/tile/map/MapTileTree.d.ts +44 -4
  405. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  406. package/lib/cjs/tile/map/MapTileTree.js +131 -11
  407. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  408. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  409. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  410. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +26 -0
  411. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  412. package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
  413. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  414. package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
  415. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  416. package/lib/cjs/tools/ClipViewTool.js +2 -2
  417. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  418. package/lib/cjs/tools/MeasureTool.js +2 -2
  419. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  420. package/lib/esm/AccuDraw.js +1 -1
  421. package/lib/esm/AccuDraw.js.map +1 -1
  422. package/lib/esm/BriefcaseConnection.d.ts +23 -3
  423. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  424. package/lib/esm/BriefcaseConnection.js +11 -3
  425. package/lib/esm/BriefcaseConnection.js.map +1 -1
  426. package/lib/esm/CheckpointConnection.js +1 -1
  427. package/lib/esm/CheckpointConnection.js.map +1 -1
  428. package/lib/esm/DisplayStyleState.d.ts +2 -2
  429. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  430. package/lib/esm/DisplayStyleState.js +12 -4
  431. package/lib/esm/DisplayStyleState.js.map +1 -1
  432. package/lib/esm/IModelApp.d.ts +4 -3
  433. package/lib/esm/IModelApp.d.ts.map +1 -1
  434. package/lib/esm/IModelApp.js +4 -6
  435. package/lib/esm/IModelApp.js.map +1 -1
  436. package/lib/esm/IModelConnection.d.ts +4 -6
  437. package/lib/esm/IModelConnection.d.ts.map +1 -1
  438. package/lib/esm/IModelConnection.js +6 -7
  439. package/lib/esm/IModelConnection.js.map +1 -1
  440. package/lib/esm/IpcApp.d.ts +1 -1
  441. package/lib/esm/IpcApp.d.ts.map +1 -1
  442. package/lib/esm/IpcApp.js +1 -1
  443. package/lib/esm/IpcApp.js.map +1 -1
  444. package/lib/esm/NativeApp.d.ts +8 -1
  445. package/lib/esm/NativeApp.d.ts.map +1 -1
  446. package/lib/esm/NativeApp.js +10 -6
  447. package/lib/esm/NativeApp.js.map +1 -1
  448. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  449. package/lib/esm/NoRenderApp.js +3 -0
  450. package/lib/esm/NoRenderApp.js.map +1 -1
  451. package/lib/esm/SpatialViewState.d.ts +4 -1
  452. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  453. package/lib/esm/SpatialViewState.js +19 -5
  454. package/lib/esm/SpatialViewState.js.map +1 -1
  455. package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
  456. package/lib/esm/SubCategoriesCache.js +0 -1
  457. package/lib/esm/SubCategoriesCache.js.map +1 -1
  458. package/lib/esm/Tiles.d.ts +4 -0
  459. package/lib/esm/Tiles.d.ts.map +1 -1
  460. package/lib/esm/Tiles.js +11 -0
  461. package/lib/esm/Tiles.js.map +1 -1
  462. package/lib/esm/ViewContext.js +1 -1
  463. package/lib/esm/ViewContext.js.map +1 -1
  464. package/lib/esm/ViewManager.d.ts.map +1 -1
  465. package/lib/esm/ViewManager.js +2 -3
  466. package/lib/esm/ViewManager.js.map +1 -1
  467. package/lib/esm/ViewState.d.ts +4 -5
  468. package/lib/esm/ViewState.d.ts.map +1 -1
  469. package/lib/esm/ViewState.js +0 -1
  470. package/lib/esm/ViewState.js.map +1 -1
  471. package/lib/esm/Viewport.d.ts +53 -4
  472. package/lib/esm/Viewport.d.ts.map +1 -1
  473. package/lib/esm/Viewport.js +83 -35
  474. package/lib/esm/Viewport.js.map +1 -1
  475. package/lib/esm/extension/ExtensionImpl.js +2 -2
  476. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  477. package/lib/esm/extension/ExtensionRuntime.js +5 -2
  478. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  479. package/lib/esm/render/GraphicBranch.d.ts +3 -0
  480. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  481. package/lib/esm/render/GraphicBranch.js.map +1 -1
  482. package/lib/esm/render/GraphicBuilder.d.ts +1 -1
  483. package/lib/esm/render/GraphicBuilder.js +1 -1
  484. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  485. package/lib/esm/render/MockRender.d.ts.map +1 -1
  486. package/lib/esm/render/MockRender.js +3 -0
  487. package/lib/esm/render/MockRender.js.map +1 -1
  488. package/lib/esm/render/RealityMeshParams.d.ts +7 -5
  489. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  490. package/lib/esm/render/RealityMeshParams.js +24 -10
  491. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  492. package/lib/esm/render/RenderMaterial.d.ts +1 -1
  493. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  494. package/lib/esm/render/RenderMaterial.js.map +1 -1
  495. package/lib/esm/render/RenderSystem.d.ts +9 -20
  496. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  497. package/lib/esm/render/RenderSystem.js +4 -10
  498. package/lib/esm/render/RenderSystem.js.map +1 -1
  499. package/lib/esm/render/RenderTarget.d.ts +1 -1
  500. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  501. package/lib/esm/render/RenderTarget.js +1 -1
  502. package/lib/esm/render/RenderTarget.js.map +1 -1
  503. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  504. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  505. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  506. package/lib/esm/render/VisibleFeature.d.ts +5 -5
  507. package/lib/esm/render/VisibleFeature.js.map +1 -1
  508. package/lib/esm/render/primitives/DisplayParams.d.ts.map +1 -1
  509. package/lib/esm/render/primitives/DisplayParams.js +2 -1
  510. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  511. package/lib/esm/render/webgl/AttributeBuffers.d.ts +9 -79
  512. package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
  513. package/lib/esm/render/webgl/AttributeBuffers.js +16 -144
  514. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  515. package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  516. package/lib/esm/render/webgl/BackgroundMapDrape.js +3 -6
  517. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  518. package/lib/esm/render/webgl/BranchState.d.ts +3 -0
  519. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  520. package/lib/esm/render/webgl/BranchState.js +5 -0
  521. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  522. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  523. package/lib/esm/render/webgl/BranchUniforms.js +0 -8
  524. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  525. package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
  526. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  527. package/lib/esm/render/webgl/CachedGeometry.js +69 -0
  528. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  529. package/lib/esm/render/webgl/ClipStack.d.ts +0 -1
  530. package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
  531. package/lib/esm/render/webgl/ClipStack.js +2 -6
  532. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  533. package/lib/esm/render/webgl/ClipVolume.d.ts.map +1 -1
  534. package/lib/esm/render/webgl/ClipVolume.js +1 -5
  535. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  536. package/lib/esm/render/webgl/ClippingProgram.d.ts +3 -2
  537. package/lib/esm/render/webgl/ClippingProgram.d.ts.map +1 -1
  538. package/lib/esm/render/webgl/ClippingProgram.js +10 -37
  539. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  540. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
  541. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  542. package/lib/esm/render/webgl/DrawCommand.js +7 -5
  543. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  544. package/lib/esm/render/webgl/EDL.d.ts +40 -0
  545. package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
  546. package/lib/esm/render/webgl/EDL.js +260 -0
  547. package/lib/esm/render/webgl/EDL.js.map +1 -0
  548. package/lib/esm/render/webgl/EdgeSettings.js +2 -2
  549. package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
  550. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  551. package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
  552. package/lib/esm/render/webgl/FloatRGBA.js +0 -4
  553. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  554. package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
  555. package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
  556. package/lib/esm/render/webgl/FrameBuffer.js +9 -0
  557. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  558. package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
  559. package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
  560. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  561. package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
  562. package/lib/esm/render/webgl/GLTimer.js +2 -35
  563. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  564. package/lib/esm/render/webgl/Layer.js +2 -2
  565. package/lib/esm/render/webgl/LayerCommands.js +2 -2
  566. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  567. package/lib/esm/render/webgl/PlanarClassifier.js +20 -77
  568. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  569. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  570. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  571. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  572. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  573. package/lib/esm/render/webgl/PointCloud.js +1 -1
  574. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  575. package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
  576. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  577. package/lib/esm/render/webgl/RealityMesh.js +8 -3
  578. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  579. package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
  580. package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  581. package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
  582. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  583. package/lib/esm/render/webgl/RenderBuffer.d.ts +1 -1
  584. package/lib/esm/render/webgl/RenderBuffer.d.ts.map +1 -1
  585. package/lib/esm/render/webgl/RenderBuffer.js +2 -3
  586. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  587. package/lib/esm/render/webgl/RenderCommands.d.ts +2 -1
  588. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  589. package/lib/esm/render/webgl/RenderCommands.js +46 -38
  590. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  591. package/lib/esm/render/webgl/RenderFlags.d.ts +20 -19
  592. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  593. package/lib/esm/render/webgl/RenderFlags.js +12 -12
  594. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  595. package/lib/esm/render/webgl/SceneCompositor.d.ts +6 -3
  596. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  597. package/lib/esm/render/webgl/SceneCompositor.js +627 -891
  598. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  599. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  600. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  601. package/lib/esm/render/webgl/ShaderBuilder.d.ts +1 -2
  602. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  603. package/lib/esm/render/webgl/ShaderBuilder.js +13 -48
  604. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  605. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -2
  606. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  607. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  608. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  609. package/lib/esm/render/webgl/SolarShadowMap.js +8 -29
  610. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  611. package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
  612. package/lib/esm/render/webgl/System.d.ts +10 -10
  613. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  614. package/lib/esm/render/webgl/System.js +41 -124
  615. package/lib/esm/render/webgl/System.js.map +1 -1
  616. package/lib/esm/render/webgl/Target.js +7 -7
  617. package/lib/esm/render/webgl/Target.js.map +1 -1
  618. package/lib/esm/render/webgl/Technique.d.ts +4 -5
  619. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  620. package/lib/esm/render/webgl/Technique.js +17 -26
  621. package/lib/esm/render/webgl/Technique.js.map +1 -1
  622. package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
  623. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  624. package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
  625. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  626. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  627. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  628. package/lib/esm/render/webgl/Texture.js +14 -18
  629. package/lib/esm/render/webgl/Texture.js.map +1 -1
  630. package/lib/esm/render/webgl/ThematicSensors.d.ts +4 -3
  631. package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
  632. package/lib/esm/render/webgl/ThematicSensors.js +9 -50
  633. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  634. package/lib/esm/render/webgl/ThematicUniforms.js +1 -1
  635. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  636. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  637. package/lib/esm/render/webgl/UniformHandle.js +2 -6
  638. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  639. package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
  640. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  641. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  642. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  643. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  644. package/lib/esm/render/webgl/glsl/Animation.d.ts +1 -2
  645. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  646. package/lib/esm/render/webgl/glsl/Animation.js +23 -26
  647. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  648. package/lib/esm/render/webgl/glsl/Blur.d.ts +1 -2
  649. package/lib/esm/render/webgl/glsl/Blur.d.ts.map +1 -1
  650. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  651. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  652. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  653. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -9
  654. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  655. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  656. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  657. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -10
  658. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  659. package/lib/esm/render/webgl/glsl/Clipping.d.ts +1 -1
  660. package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
  661. package/lib/esm/render/webgl/glsl/Clipping.js +5 -36
  662. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  663. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  664. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  665. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  666. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts +1 -2
  667. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  668. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  669. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  670. package/lib/esm/render/webgl/glsl/Common.js +9 -55
  671. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  672. package/lib/esm/render/webgl/glsl/Composite.d.ts +1 -2
  673. package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
  674. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  675. package/lib/esm/render/webgl/glsl/CopyColor.d.ts +1 -2
  676. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  677. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  678. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  679. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  680. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +12 -19
  681. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  682. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts +4 -7
  683. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  684. package/lib/esm/render/webgl/glsl/CopyStencil.js +1 -37
  685. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  686. package/lib/esm/render/webgl/glsl/EDL.d.ts +13 -0
  687. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
  688. package/lib/esm/render/webgl/glsl/EDL.js +253 -0
  689. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
  690. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  691. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  692. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  693. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  694. package/lib/esm/render/webgl/glsl/Edge.js +2 -2
  695. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  696. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  697. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +3 -24
  698. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  699. package/lib/esm/render/webgl/glsl/Fragment.d.ts +0 -7
  700. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  701. package/lib/esm/render/webgl/glsl/Fragment.js +4 -38
  702. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  703. package/lib/esm/render/webgl/glsl/Instancing.d.ts.map +1 -1
  704. package/lib/esm/render/webgl/glsl/Instancing.js +1 -5
  705. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  706. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  707. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  708. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  709. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  710. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  711. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -12
  712. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  713. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  714. package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -8
  715. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  716. package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
  717. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  718. package/lib/esm/render/webgl/glsl/SkyBox.d.ts +1 -2
  719. package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  720. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  721. package/lib/esm/render/webgl/glsl/SkySphere.d.ts +1 -2
  722. package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  723. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  724. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
  725. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  726. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  727. package/lib/esm/render/webgl/glsl/Surface.js +33 -57
  728. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  729. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  730. package/lib/esm/render/webgl/glsl/Thematic.js +3 -36
  731. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  732. package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
  733. package/lib/esm/render/webgl/glsl/Translucency.js +3 -13
  734. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  735. package/lib/esm/render/webgl/glsl/Vertex.d.ts +1 -2
  736. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  737. package/lib/esm/render/webgl/glsl/Vertex.js +16 -79
  738. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  739. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  740. package/lib/esm/render/webgl/glsl/Wiremesh.js +2 -5
  741. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  742. package/lib/esm/tile/BatchedTileIdMap.js +1 -1
  743. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  744. package/lib/esm/tile/DynamicIModelTile.js +1 -1
  745. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  746. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  747. package/lib/esm/tile/GltfReader.js +4 -2
  748. package/lib/esm/tile/GltfReader.js.map +1 -1
  749. package/lib/esm/tile/IModelTile.js +1 -1
  750. package/lib/esm/tile/IModelTile.js.map +1 -1
  751. package/lib/esm/tile/ImdlReader.d.ts +6 -0
  752. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  753. package/lib/esm/tile/ImdlReader.js +20 -7
  754. package/lib/esm/tile/ImdlReader.js.map +1 -1
  755. package/lib/esm/tile/OrbitGtTileTree.d.ts +14 -1
  756. package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
  757. package/lib/esm/tile/OrbitGtTileTree.js +30 -12
  758. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  759. package/lib/esm/tile/PrimaryTileTree.d.ts +0 -3
  760. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  761. package/lib/esm/tile/PrimaryTileTree.js +8 -30
  762. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  763. package/lib/esm/tile/RealityModelTileTree.d.ts +4 -3
  764. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  765. package/lib/esm/tile/RealityModelTileTree.js +62 -54
  766. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  767. package/lib/esm/tile/RealityTileLoader.js +2 -2
  768. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  769. package/lib/esm/tile/RealityTileTree.d.ts +5 -0
  770. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  771. package/lib/esm/tile/RealityTileTree.js +8 -4
  772. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  773. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  774. package/lib/esm/tile/TileAdmin.js +17 -9
  775. package/lib/esm/tile/TileAdmin.js.map +1 -1
  776. package/lib/esm/tile/TileDrawArgs.js +1 -1
  777. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  778. package/lib/esm/tile/TileTreeReference.d.ts +3 -0
  779. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  780. package/lib/esm/tile/TileTreeReference.js +3 -0
  781. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  782. package/lib/esm/tile/map/ArcGisUtilities.d.ts +14 -1
  783. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  784. package/lib/esm/tile/map/ArcGisUtilities.js +57 -27
  785. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  786. package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
  787. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  788. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  789. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  790. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  791. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  792. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  793. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  794. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  795. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  796. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  797. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  798. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  799. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  800. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  801. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  802. package/lib/esm/tile/map/ImageryTileTree.d.ts +28 -3
  803. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  804. package/lib/esm/tile/map/ImageryTileTree.js +62 -8
  805. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  806. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  807. package/lib/esm/tile/map/MapLayerImageryFormats.js +3 -2
  808. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  809. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +12 -2
  810. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  811. package/lib/esm/tile/map/MapLayerImageryProvider.js +16 -4
  812. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  813. package/lib/esm/tile/map/MapLayerSources.d.ts +3 -1
  814. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  815. package/lib/esm/tile/map/MapLayerSources.js +2 -0
  816. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  817. package/lib/esm/tile/map/MapTile.d.ts +13 -0
  818. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  819. package/lib/esm/tile/map/MapTile.js +57 -14
  820. package/lib/esm/tile/map/MapTile.js.map +1 -1
  821. package/lib/esm/tile/map/MapTileTree.d.ts +44 -4
  822. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  823. package/lib/esm/tile/map/MapTileTree.js +131 -11
  824. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  825. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  826. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  827. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +26 -0
  828. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  829. package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
  830. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  831. package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
  832. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  833. package/lib/esm/tools/ClipViewTool.js +2 -2
  834. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  835. package/lib/esm/tools/MeasureTool.js +2 -2
  836. package/lib/esm/tools/MeasureTool.js.map +1 -1
  837. package/lib/public/locales/en/iModelJs.json +2 -2
  838. package/package.json +20 -21
@@ -7,7 +7,7 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.SceneCompositor = void 0;
10
+ exports.SceneCompositor = exports.collectGeometryStatistics = exports.collectTextureStatistics = void 0;
11
11
  const core_bentley_1 = require("@itwin/core-bentley");
12
12
  const core_geometry_1 = require("@itwin/core-geometry");
13
13
  const core_common_1 = require("@itwin/core-common");
@@ -17,7 +17,6 @@ const BranchState_1 = require("./BranchState");
17
17
  const CachedGeometry_1 = require("./CachedGeometry");
18
18
  const Diagnostics_1 = require("./Diagnostics");
19
19
  const DrawCommand_1 = require("./DrawCommand");
20
- const FloatRGBA_1 = require("./FloatRGBA");
21
20
  const FrameBuffer_1 = require("./FrameBuffer");
22
21
  const GL_1 = require("./GL");
23
22
  const IModelFrameLifecycle_1 = require("./IModelFrameLifecycle");
@@ -29,10 +28,12 @@ const SolarShadowMap_1 = require("./SolarShadowMap");
29
28
  const System_1 = require("./System");
30
29
  const Texture_1 = require("./Texture");
31
30
  const RenderBuffer_1 = require("./RenderBuffer");
31
+ const EDL_1 = require("./EDL");
32
32
  function collectTextureStatistics(texture, stats) {
33
33
  if (undefined !== texture)
34
34
  stats.addTextureAttachment(texture.bytesUsed);
35
35
  }
36
+ exports.collectTextureStatistics = collectTextureStatistics;
36
37
  function collectMsBufferStatistics(msBuff, stats) {
37
38
  if (undefined !== msBuff)
38
39
  stats.addTextureAttachment(msBuff.bytesUsed);
@@ -99,23 +100,14 @@ class Textures {
99
100
  init(width, height, numSamples) {
100
101
  (0, core_bentley_1.assert)(undefined === this.accumulation);
101
102
  let pixelDataType = GL_1.GL.Texture.DataType.UnsignedByte;
102
- switch (System_1.System.instance.capabilities.maxRenderType) {
103
+ switch (System_1.System.instance.maxRenderType) {
103
104
  case webgl_compatibility_1.RenderType.TextureFloat: {
104
105
  pixelDataType = GL_1.GL.Texture.DataType.Float;
105
106
  break;
106
107
  }
107
108
  case webgl_compatibility_1.RenderType.TextureHalfFloat: {
108
- if (System_1.System.instance.capabilities.isWebGL2) {
109
- pixelDataType = System_1.System.instance.context.HALF_FLOAT;
110
- break;
111
- }
112
- else {
113
- const ext = System_1.System.instance.capabilities.queryExtensionObject("OES_texture_half_float");
114
- if (undefined !== ext) {
115
- pixelDataType = ext.HALF_FLOAT_OES;
116
- break;
117
- }
118
- }
109
+ pixelDataType = System_1.System.instance.context.HALF_FLOAT;
110
+ break;
119
111
  }
120
112
  /* falls through */
121
113
  case webgl_compatibility_1.RenderType.TextureUnsignedByte: {
@@ -205,9 +197,25 @@ class FrameBuffers {
205
197
  this.depthAndOrder = FrameBuffer_1.FrameBuffer.create([textures.depthAndOrder], depth);
206
198
  this.hilite = FrameBuffer_1.FrameBuffer.create([textures.hilite], depth);
207
199
  this.hiliteUsingStencil = FrameBuffer_1.FrameBuffer.create([textures.hilite], depth);
208
- return undefined !== this.depthAndOrder
209
- && undefined !== this.hilite
210
- && undefined !== this.hiliteUsingStencil;
200
+ if (!this.depthAndOrder || !this.hilite || !this.hiliteUsingStencil)
201
+ return false;
202
+ (0, core_bentley_1.assert)(undefined === this.opaqueAll);
203
+ if (!this.initPotentialMSMRTFbos(textures, depth, depthMS))
204
+ return false;
205
+ (0, core_bentley_1.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
206
+ const colors = [textures.accumulation, textures.revealage];
207
+ this.translucent = FrameBuffer_1.FrameBuffer.create(colors, depth);
208
+ this.clearTranslucent = FrameBuffer_1.FrameBuffer.create(colors);
209
+ // We borrow the SceneCompositor's accum and revealage textures for the surface pass.
210
+ // First we render edges, writing to our textures.
211
+ // Then we copy our textures to borrowed textures.
212
+ // Finally we render surfaces, writing to our textures and reading from borrowed textures.
213
+ (0, core_bentley_1.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
214
+ const pingPong = [textures.accumulation, textures.revealage];
215
+ this.pingPong = FrameBuffer_1.FrameBuffer.create(pingPong);
216
+ return undefined !== this.translucent
217
+ && undefined !== this.clearTranslucent
218
+ && undefined !== this.pingPong;
211
219
  }
212
220
  initPotentialMSFbos(textures, depth, depthMS) {
213
221
  const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
@@ -224,19 +232,69 @@ class FrameBuffers {
224
232
  return undefined !== this.opaqueColor
225
233
  && undefined !== this.opaqueAndCompositeColor;
226
234
  }
227
- enableOcclusion(textures, _depth, _depthMs) {
235
+ initPotentialMSMRTFbos(textures, depth, depthMs) {
236
+ const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
237
+ (0, core_bentley_1.assert)(undefined !== boundColor && undefined !== textures.color && undefined !== textures.featureId && undefined !== textures.depthAndOrder && undefined !== textures.accumulation && undefined !== textures.revealage);
238
+ const colorAndPick = [boundColor, textures.featureId, textures.depthAndOrder];
239
+ if (undefined === depthMs) {
240
+ this.opaqueAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
241
+ colorAndPick[0] = textures.color;
242
+ this.opaqueAndCompositeAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
243
+ }
244
+ else {
245
+ (0, core_bentley_1.assert)(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuff && undefined !== textures.depthAndOrderMsBuffHidden);
246
+ const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuff, textures.depthAndOrderMsBuff];
247
+ const colorAndPickFilters = [GL_1.GL.MultiSampling.Filter.Linear, GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
248
+ this.opaqueAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
249
+ colorAndPick[0] = textures.color;
250
+ this.opaqueAndCompositeAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
251
+ }
252
+ return undefined !== this.opaqueAll
253
+ && undefined !== this.opaqueAndCompositeAll;
254
+ }
255
+ enableOcclusion(textures, depth, depthMs) {
228
256
  (0, core_bentley_1.assert)(undefined !== textures.occlusion && undefined !== textures.occlusionBlur);
229
257
  this.occlusion = FrameBuffer_1.FrameBuffer.create([textures.occlusion]);
230
258
  this.occlusionBlur = FrameBuffer_1.FrameBuffer.create([textures.occlusionBlur]);
231
- return undefined !== this.occlusion && undefined !== this.occlusionBlur;
259
+ let rVal = undefined !== this.occlusion && undefined !== this.occlusionBlur;
260
+ if (undefined === depthMs) {
261
+ // If not using multisampling then we can use the accumulation and revealage textures for the hidden pick buffers,
262
+ (0, core_bentley_1.assert)(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.revealage);
263
+ const colorAndPick = [textures.color, textures.accumulation, textures.revealage];
264
+ this.opaqueAndCompositeAllHidden = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
265
+ rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden;
266
+ }
267
+ else {
268
+ // If multisampling then we cannot use the revealage texture for depthAndOrder for the hidden edges since it is of the wrong type for blitting,
269
+ // so instead use a special depthAndOrderHidden texture just for this purpose.
270
+ // The featureId texture is not needed for hidden edges, so the accumulation texture can be used for it if we don't blit from the multisample bufffer into it.
271
+ (0, core_bentley_1.assert)(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.depthAndOrderHidden);
272
+ (0, core_bentley_1.assert)(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuffHidden);
273
+ const colorAndPick = [textures.color, textures.accumulation, textures.depthAndOrderHidden];
274
+ const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];
275
+ const colorAndPickFilters = [GL_1.GL.MultiSampling.Filter.Linear, GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
276
+ this.opaqueAndCompositeAllHidden = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
277
+ // We will also need a frame buffer for copying the real pick data buffers into these hidden edge pick data buffers.
278
+ const pingPong = [textures.accumulation, textures.depthAndOrderHidden];
279
+ const pingPongMSBuffs = [textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];
280
+ const pingPongFilters = [GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
281
+ this.pingPongMS = FrameBuffer_1.FrameBuffer.create(pingPong, depth, pingPongMSBuffs, pingPongFilters, depthMs);
282
+ rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden && (undefined === depthMs || undefined !== this.pingPongMS);
283
+ }
284
+ return rVal;
232
285
  }
233
286
  disableOcclusion() {
234
287
  if (undefined !== this.occlusion) {
235
288
  this.occlusion = (0, core_bentley_1.dispose)(this.occlusion);
236
289
  this.occlusionBlur = (0, core_bentley_1.dispose)(this.occlusionBlur);
237
290
  }
291
+ this.opaqueAndCompositeAllHidden = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAllHidden);
292
+ this.pingPongMS = (0, core_bentley_1.dispose)(this.pingPongMS);
238
293
  }
239
294
  enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
295
+ const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
296
+ if (undefined === boundColor)
297
+ return;
240
298
  if (undefined === this.stencilSet) {
241
299
  if (undefined !== depthMS) { // if multisampling use the multisampled depth everywhere
242
300
  this.stencilSet = FrameBuffer_1.FrameBuffer.create([], depth, [], [], depthMS);
@@ -251,6 +309,16 @@ class FrameBuffers {
251
309
  this.volClassCreateBlendAltZ = FrameBuffer_1.FrameBuffer.create([textures.volClassBlend], volClassDepth);
252
310
  }
253
311
  }
312
+ if (undefined !== this.opaqueAll && undefined !== this.opaqueAndCompositeAll) {
313
+ if (undefined !== volClassDepth) {
314
+ let ids = [this.opaqueAll.getColor(0), this.opaqueAll.getColor(1)];
315
+ this.idsAndZ = FrameBuffer_1.FrameBuffer.create(ids, depth);
316
+ this.idsAndAltZ = FrameBuffer_1.FrameBuffer.create(ids, volClassDepth);
317
+ ids = [this.opaqueAndCompositeAll.getColor(0), this.opaqueAndCompositeAll.getColor(1)];
318
+ this.idsAndZComposite = FrameBuffer_1.FrameBuffer.create(ids, depth);
319
+ this.idsAndAltZComposite = FrameBuffer_1.FrameBuffer.create(ids, volClassDepth);
320
+ }
321
+ }
254
322
  }
255
323
  disableVolumeClassifier() {
256
324
  if (undefined !== this.stencilSet) {
@@ -259,29 +327,40 @@ class FrameBuffers {
259
327
  this.volClassCreateBlend = (0, core_bentley_1.dispose)(this.volClassCreateBlend);
260
328
  this.volClassCreateBlendAltZ = (0, core_bentley_1.dispose)(this.volClassCreateBlendAltZ);
261
329
  }
330
+ if (undefined !== this.idsAndZ) {
331
+ this.idsAndZ = (0, core_bentley_1.dispose)(this.idsAndZ);
332
+ this.idsAndAltZ = (0, core_bentley_1.dispose)(this.idsAndAltZ);
333
+ this.idsAndZComposite = (0, core_bentley_1.dispose)(this.idsAndZComposite);
334
+ this.idsAndAltZComposite = (0, core_bentley_1.dispose)(this.idsAndAltZComposite);
335
+ }
262
336
  }
263
337
  enableMultiSampling(textures, depth, depthMS) {
264
338
  this.opaqueColor = (0, core_bentley_1.dispose)(this.opaqueColor);
265
339
  this.opaqueAndCompositeColor = (0, core_bentley_1.dispose)(this.opaqueAndCompositeColor);
266
- return this.initPotentialMSFbos(textures, depth, depthMS);
340
+ let rVal = this.initPotentialMSFbos(textures, depth, depthMS);
341
+ this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
342
+ this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
343
+ rVal = this.initPotentialMSMRTFbos(textures, depth, depthMS);
344
+ return rVal;
267
345
  }
268
346
  disableMultiSampling(textures, depth) {
347
+ this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
348
+ this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
349
+ if (!this.initPotentialMSMRTFbos(textures, depth, undefined))
350
+ return false;
269
351
  this.opaqueColor = (0, core_bentley_1.dispose)(this.opaqueColor);
270
352
  this.opaqueAndCompositeColor = (0, core_bentley_1.dispose)(this.opaqueAndCompositeColor);
271
353
  return this.initPotentialMSFbos(textures, depth, undefined);
272
354
  }
273
355
  get isDisposed() {
274
- return undefined === this.opaqueColor
275
- && undefined === this.opaqueAndCompositeColor
276
- && undefined === this.depthAndOrder
277
- && undefined === this.hilite
278
- && undefined === this.hiliteUsingStencil
279
- && undefined === this.occlusion
280
- && undefined === this.occlusionBlur
281
- && undefined === this.stencilSet
282
- && undefined === this.altZOnly
283
- && undefined === this.volClassCreateBlend
284
- && undefined === this.volClassCreateBlendAltZ;
356
+ return undefined === this.opaqueColor && undefined === this.opaqueAndCompositeColor && undefined === this.depthAndOrder
357
+ && undefined === this.hilite && undefined === this.hiliteUsingStencil && undefined === this.occlusion
358
+ && undefined === this.occlusionBlur && undefined === this.stencilSet && undefined === this.altZOnly
359
+ && undefined === this.volClassCreateBlend && undefined === this.volClassCreateBlendAltZ && undefined === this.opaqueAll
360
+ && undefined === this.opaqueAndCompositeAll && undefined === this.opaqueAndCompositeAllHidden && undefined === this.pingPong
361
+ && undefined === this.pingPongMS && undefined === this.translucent && undefined === this.clearTranslucent
362
+ && undefined === this.idsAndZ && undefined === this.idsAndAltZ && undefined === this.idsAndZComposite
363
+ && undefined === this.idsAndAltZComposite && undefined === this.edlDrawCol;
285
364
  }
286
365
  dispose() {
287
366
  this.opaqueColor = (0, core_bentley_1.dispose)(this.opaqueColor);
@@ -295,29 +374,50 @@ class FrameBuffers {
295
374
  this.altZOnly = (0, core_bentley_1.dispose)(this.altZOnly);
296
375
  this.volClassCreateBlend = (0, core_bentley_1.dispose)(this.volClassCreateBlend);
297
376
  this.volClassCreateBlendAltZ = (0, core_bentley_1.dispose)(this.volClassCreateBlendAltZ);
377
+ this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
378
+ this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
379
+ this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAllHidden);
380
+ this.pingPong = (0, core_bentley_1.dispose)(this.pingPong);
381
+ this.pingPongMS = (0, core_bentley_1.dispose)(this.pingPongMS);
382
+ this.translucent = (0, core_bentley_1.dispose)(this.translucent);
383
+ this.clearTranslucent = (0, core_bentley_1.dispose)(this.clearTranslucent);
384
+ this.idsAndZ = (0, core_bentley_1.dispose)(this.idsAndZ);
385
+ this.idsAndAltZ = (0, core_bentley_1.dispose)(this.idsAndAltZ);
386
+ this.idsAndZComposite = (0, core_bentley_1.dispose)(this.idsAndZComposite);
387
+ this.idsAndAltZComposite = (0, core_bentley_1.dispose)(this.idsAndAltZComposite);
388
+ this.edlDrawCol = (0, core_bentley_1.dispose)(this.edlDrawCol);
298
389
  }
299
390
  }
300
391
  function collectGeometryStatistics(geom, stats) {
301
392
  if (undefined !== geom)
302
393
  geom.collectStatistics(stats);
303
394
  }
395
+ exports.collectGeometryStatistics = collectGeometryStatistics;
304
396
  // Maintains the geometry used to execute screenspace operations for a SceneCompositor.
305
397
  class Geometry {
306
398
  collectStatistics(stats) {
307
399
  collectGeometryStatistics(this.composite, stats);
308
400
  collectGeometryStatistics(this.volClassColorStencil, stats);
309
401
  collectGeometryStatistics(this.volClassCopyZ, stats);
310
- collectGeometryStatistics(this.volClassCopyZWithPoints, stats);
311
402
  collectGeometryStatistics(this.volClassSetBlend, stats);
312
403
  collectGeometryStatistics(this.volClassBlend, stats);
313
404
  collectGeometryStatistics(this.occlusion, stats);
314
405
  collectGeometryStatistics(this.occlusionXBlur, stats);
315
406
  collectGeometryStatistics(this.occlusionYBlur, stats);
407
+ collectGeometryStatistics(this.copyPickBuffers, stats);
408
+ collectGeometryStatistics(this.clearTranslucent, stats);
409
+ collectGeometryStatistics(this.clearPickAndColor, stats);
316
410
  }
317
411
  init(textures) {
318
412
  (0, core_bentley_1.assert)(undefined === this.composite);
319
413
  this.composite = CachedGeometry_1.CompositeGeometry.createGeometry(textures.color.getHandle(), textures.accumulation.getHandle(), textures.revealage.getHandle(), textures.hilite.getHandle());
320
- return undefined !== this.composite;
414
+ if (undefined === this.composite)
415
+ return false;
416
+ (0, core_bentley_1.assert)(undefined === this.copyPickBuffers);
417
+ this.copyPickBuffers = CachedGeometry_1.CopyPickBufferGeometry.createGeometry(textures.featureId.getHandle(), textures.depthAndOrder.getHandle());
418
+ this.clearTranslucent = CachedGeometry_1.ViewportQuadGeometry.create(16 /* OITClearTranslucent */);
419
+ this.clearPickAndColor = CachedGeometry_1.ViewportQuadGeometry.create(21 /* ClearPickAndColor */);
420
+ return undefined !== this.copyPickBuffers && undefined !== this.clearTranslucent && undefined !== this.clearPickAndColor;
321
421
  }
322
422
  enableOcclusion(textures, depth) {
323
423
  var _a;
@@ -334,16 +434,13 @@ class Geometry {
334
434
  this.occlusionXBlur = (0, core_bentley_1.dispose)(this.occlusionXBlur);
335
435
  this.occlusionYBlur = (0, core_bentley_1.dispose)(this.occlusionYBlur);
336
436
  }
337
- enableVolumeClassifier(textures, depth, width, height) {
437
+ enableVolumeClassifier(textures, depth) {
338
438
  (0, core_bentley_1.assert)(undefined === this.volClassColorStencil && undefined === this.volClassCopyZ && undefined === this.volClassSetBlend && undefined === this.volClassBlend);
339
439
  this.volClassColorStencil = CachedGeometry_1.ViewportQuadGeometry.create(20 /* VolClassColorUsingStencil */);
340
440
  this.volClassCopyZ = CachedGeometry_1.SingleTexturedViewportQuadGeometry.createGeometry(depth.getHandle(), 31 /* VolClassCopyZ */);
341
441
  this.volClassSetBlend = CachedGeometry_1.VolumeClassifierGeometry.createVCGeometry(depth.getHandle());
342
442
  this.volClassBlend = CachedGeometry_1.SingleTexturedViewportQuadGeometry.createGeometry(textures.volClassBlend.getHandle(), 33 /* VolClassBlend */);
343
- if (!System_1.System.instance.capabilities.supportsFragDepth)
344
- this.volClassCopyZWithPoints = CachedGeometry_1.ScreenPointsGeometry.createGeometry(width, height, depth.getHandle());
345
- return undefined !== this.volClassColorStencil && undefined !== this.volClassCopyZ && undefined !== this.volClassSetBlend && undefined !== this.volClassBlend
346
- && (System_1.System.instance.capabilities.supportsFragDepth || undefined !== this.volClassCopyZWithPoints);
443
+ return undefined !== this.volClassColorStencil && undefined !== this.volClassCopyZ && undefined !== this.volClassSetBlend && undefined !== this.volClassBlend;
347
444
  }
348
445
  disableVolumeClassifier() {
349
446
  if (undefined !== this.volClassColorStencil) {
@@ -351,20 +448,13 @@ class Geometry {
351
448
  this.volClassCopyZ = (0, core_bentley_1.dispose)(this.volClassCopyZ);
352
449
  this.volClassSetBlend = (0, core_bentley_1.dispose)(this.volClassSetBlend);
353
450
  this.volClassBlend = (0, core_bentley_1.dispose)(this.volClassBlend);
354
- if (!System_1.System.instance.capabilities.supportsFragDepth)
355
- this.volClassCopyZWithPoints = (0, core_bentley_1.dispose)(this.volClassCopyZWithPoints);
356
451
  }
357
452
  }
358
453
  get isDisposed() {
359
- return undefined === this.composite
360
- && undefined === this.occlusion
361
- && undefined === this.occlusionXBlur
362
- && undefined === this.occlusionYBlur
363
- && undefined === this.volClassColorStencil
364
- && undefined === this.volClassCopyZ
365
- && undefined === this.volClassSetBlend
366
- && undefined === this.volClassBlend
367
- && undefined === this.volClassCopyZWithPoints;
454
+ return undefined === this.composite && undefined === this.occlusion && undefined === this.occlusionXBlur
455
+ && undefined === this.occlusionYBlur && undefined === this.volClassColorStencil && undefined === this.volClassCopyZ
456
+ && undefined === this.volClassSetBlend && undefined === this.volClassBlend && undefined === this.copyPickBuffers
457
+ && undefined === this.clearTranslucent && undefined === this.clearPickAndColor;
368
458
  }
369
459
  dispose() {
370
460
  this.composite = (0, core_bentley_1.dispose)(this.composite);
@@ -372,6 +462,9 @@ class Geometry {
372
462
  this.occlusionXBlur = (0, core_bentley_1.dispose)(this.occlusionXBlur);
373
463
  this.occlusionYBlur = (0, core_bentley_1.dispose)(this.occlusionYBlur);
374
464
  this.disableVolumeClassifier();
465
+ this.copyPickBuffers = (0, core_bentley_1.dispose)(this.copyPickBuffers);
466
+ this.clearTranslucent = (0, core_bentley_1.dispose)(this.clearTranslucent);
467
+ this.clearPickAndColor = (0, core_bentley_1.dispose)(this.clearPickAndColor);
375
468
  }
376
469
  }
377
470
  // Represents a view of data read from a region of the frame buffer.
@@ -519,11 +612,12 @@ class SceneCompositor {
519
612
  constructor(target) {
520
613
  this.target = target;
521
614
  this.solarShadowMap = new SolarShadowMap_1.SolarShadowMap(target);
615
+ this.eyeDomeLighting = new EDL_1.EyeDomeLighting(target);
522
616
  this._needHiddenEdges = false;
523
617
  }
524
618
  get needHiddenEdges() { return this._needHiddenEdges; }
525
619
  static create(target) {
526
- return System_1.System.instance.capabilities.supportsDrawBuffers ? new MRTCompositor(target) : new MPCompositor(target);
620
+ return new Compositor(target);
527
621
  }
528
622
  }
529
623
  exports.SceneCompositor = SceneCompositor;
@@ -536,7 +630,7 @@ var PrimitiveDrawState;
536
630
  })(PrimitiveDrawState || (PrimitiveDrawState = {}));
537
631
  // The actual base class. Specializations are provided based on whether or not multiple render targets are supported.
538
632
  class Compositor extends SceneCompositor {
539
- constructor(target, fbos, geometry) {
633
+ constructor(target) {
540
634
  super(target);
541
635
  this._width = -1;
542
636
  this._height = -1;
@@ -549,14 +643,16 @@ class Compositor extends SceneCompositor {
549
643
  this._hiliteRenderState = new RenderState_1.RenderState();
550
644
  this._noDepthMaskRenderState = new RenderState_1.RenderState();
551
645
  this._backgroundMapRenderState = new RenderState_1.RenderState();
646
+ this._pointCloudRenderState = new RenderState_1.RenderState();
552
647
  this._debugStencil = 0; // 0 to draw stencil volumes normally, 1 to draw as opaque, 2 to draw blended
553
648
  this._haveVolumeClassifier = false;
554
649
  this._antialiasSamples = 1;
555
650
  this._viewProjectionMatrix = new Matrix_1.Matrix4();
556
651
  this._primitiveDrawState = PrimitiveDrawState.Both; // used by drawPrimitive to decide whether a primitive needs to be drawn.
557
- this._frameBuffers = fbos;
558
- this._geom = geometry;
652
+ this._fbos = new FrameBuffers();
653
+ this._geom = new Geometry();
559
654
  this._opaqueRenderState.flags.depthTest = true;
655
+ this._pointCloudRenderState.flags.depthTest = true;
560
656
  this._translucentRenderState.flags.depthMask = false;
561
657
  this._translucentRenderState.flags.blend = this._translucentRenderState.flags.depthTest = true;
562
658
  this._translucentRenderState.blend.setBlendFuncSeparate(GL_1.GL.BlendFactor.One, GL_1.GL.BlendFactor.Zero, GL_1.GL.BlendFactor.One, GL_1.GL.BlendFactor.OneMinusSrcAlpha);
@@ -574,123 +670,400 @@ class Compositor extends SceneCompositor {
574
670
  this._layerRenderState.depthFunc = GL_1.GL.DepthFunc.Always;
575
671
  this._layerRenderState.blend.setBlendFunc(GL_1.GL.BlendFactor.One, GL_1.GL.BlendFactor.OneMinusSrcAlpha);
576
672
  }
673
+ get featureIds() { return this.getSamplerTexture(this._readPickDataFromPingPong ? 0 : 1); }
674
+ get depthAndOrder() { return this.getSamplerTexture(this._readPickDataFromPingPong ? 1 : 2); }
675
+ get _samplerFbo() { return this._readPickDataFromPingPong ? this._fbos.pingPong : this._fbos.opaqueAll; }
676
+ getSamplerTexture(index) { return this._samplerFbo.getColor(index); }
577
677
  drawPrimitive(primitive, exec, outputsToPick) {
578
678
  if ((outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.NonPickable) ||
579
679
  (!outputsToPick && this._primitiveDrawState !== PrimitiveDrawState.Pickable))
580
680
  primitive.draw(exec);
581
681
  }
582
- get antialiasSamples() { return this._antialiasSamples; }
583
- get useMsBuffers() { return this._antialiasSamples > 1 && !this.target.isReadPixelsInProgress; }
584
- enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
585
- this._frameBuffers.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
586
- }
587
- disableVolumeClassifierFbos() { this._frameBuffers.disableVolumeClassifier(); }
588
- /** This function generates a texture that contains ambient occlusion information to be applied later. */
589
- renderAmbientOcclusion() {
682
+ clearOpaque(needComposite) {
683
+ const fbo = needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll;
590
684
  const system = System_1.System.instance;
591
- // Render unblurred ambient occlusion based on depth buffer
592
- let fbo = this._frameBuffers.occlusion;
593
- this.target.beginPerfMetricRecord("Compute AO");
594
- system.frameBufferStack.execute(fbo, true, false, () => {
595
- System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
596
- const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusion);
597
- this.target.techniques.draw(params);
598
- });
599
- this.target.endPerfMetricRecord();
600
- // Render the X-blurred ambient occlusion based on unblurred ambient occlusion
601
- fbo = this._frameBuffers.occlusionBlur;
602
- this.target.beginPerfMetricRecord("Blur AO X");
603
- system.frameBufferStack.execute(fbo, true, false, () => {
604
- System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
605
- const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusionXBlur);
606
- this.target.techniques.draw(params);
607
- });
608
- this.target.endPerfMetricRecord();
609
- // Render the Y-blurred ambient occlusion based on X-blurred ambient occlusion (render into original occlusion framebuffer)
610
- fbo = this._frameBuffers.occlusion;
611
- this.target.beginPerfMetricRecord("Blur AO Y");
612
- system.frameBufferStack.execute(fbo, true, false, () => {
613
- System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
614
- const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusionYBlur);
685
+ system.frameBufferStack.execute(fbo, true, this.useMsBuffers, () => {
686
+ // Clear pick data buffers to 0's and color buffer to background color
687
+ // (0,0,0,0) in elementID0 and ElementID1 buffers indicates invalid element id
688
+ // (0,0,0,0) in DepthAndOrder buffer indicates render order 0 and encoded depth of 0 (= far plane)
689
+ system.applyRenderState(this._noDepthMaskRenderState);
690
+ const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.clearPickAndColor);
615
691
  this.target.techniques.draw(params);
692
+ // Clear depth buffer
693
+ system.applyRenderState(RenderState_1.RenderState.defaults); // depthMask == true.
694
+ system.context.clearDepth(1.0);
695
+ system.context.clear(GL_1.GL.BufferBit.Depth);
616
696
  });
617
- this.target.endPerfMetricRecord();
618
697
  }
619
- collectStatistics(stats) {
620
- if (undefined !== this._depth)
621
- stats.addTextureAttachment(this._depth.bytesUsed);
622
- if (undefined !== this._depthMS)
623
- stats.addTextureAttachment(this._depthMS.bytesUsed);
624
- this._textures.collectStatistics(stats);
625
- this._geom.collectStatistics(stats);
698
+ renderLayers(commands, needComposite, pass) {
699
+ const fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
700
+ const useMsBuffers = 1 /* OpaqueLayers */ === pass && fbo.isMultisampled && this.useMsBuffers;
701
+ this._readPickDataFromPingPong = !useMsBuffers;
702
+ System_1.System.instance.frameBufferStack.execute(fbo, true, useMsBuffers, () => {
703
+ this.drawPass(commands, pass, true);
704
+ });
705
+ this._readPickDataFromPingPong = false;
626
706
  }
627
- preDraw() {
628
- const rect = this.target.viewRect;
629
- const width = rect.width;
630
- const height = rect.height;
631
- const includeOcclusion = this.target.wantAmbientOcclusion;
632
- const wantVolumeClassifier = (undefined !== this.target.activeVolumeClassifierProps);
633
- let wantAntialiasSamples = this.target.antialiasSamples <= 1 || !System_1.System.instance.capabilities.supportsDrawBuffers ? 1 : this.target.antialiasSamples;
634
- if (wantAntialiasSamples > System_1.System.instance.capabilities.maxAntialiasSamples)
635
- wantAntialiasSamples = System_1.System.instance.capabilities.maxAntialiasSamples;
636
- const changeAntialiasSamples = (this._antialiasSamples > 1 && wantAntialiasSamples > 1 && this._antialiasSamples !== wantAntialiasSamples);
637
- // If not yet initialized, or dimensions changed, or antialiasing changed the number of samples, initialize.
638
- if (undefined === this._textures.accumulation || width !== this._width || height !== this._height || changeAntialiasSamples) {
639
- this._width = width;
640
- this._height = height;
641
- this._antialiasSamples = wantAntialiasSamples;
642
- // init() first calls dispose(), which releases all of our fbos, textures, etc, and resets the _includeOcclusion flag.
643
- if (!this.init()) {
644
- (0, core_bentley_1.assert)(false, "Failed to initialize scene compositor");
645
- return false;
646
- }
707
+ renderOpaque(commands, compositeFlags, renderForReadPixels) {
708
+ if (0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */) && !renderForReadPixels) {
709
+ this.renderOpaqueAO(commands);
710
+ return;
647
711
  }
648
- else if (this._antialiasSamples !== wantAntialiasSamples) {
649
- // Turn on or off multisampling. Rather than just re-initializing, we can save the
650
- // non multisampled textures & FBOs and just try to add or delete the multisampled ones.
651
- this._antialiasSamples = wantAntialiasSamples;
652
- if (wantVolumeClassifier && this._haveVolumeClassifier) {
653
- // Multisampling and volume classification buffers are somewhat co-dependent so if volume classification is on
654
- // and is staying on, just disable volume classifiers and let them get re-enabled later.
655
- this.disableVolumeClassifierFbos();
656
- this._geom.disableVolumeClassifier();
657
- this._textures.disableVolumeClassifier();
658
- if (undefined !== this._vcAltDepthStencil) {
659
- this._vcAltDepthStencil.dispose();
660
- this._vcAltDepthStencil = undefined;
661
- }
662
- this._haveVolumeClassifier = false;
663
- }
664
- if (includeOcclusion && this._includeOcclusion) {
665
- // Multisampling and AO buffers are also somewhat co-dependent, so if AO is on
666
- // and is staying on, just disable AO and let it get re-enabled later.
667
- this._geom.disableOcclusion();
668
- this._frameBuffers.disableOcclusion();
669
- this._textures.disableOcclusion();
670
- this._includeOcclusion = false;
671
- }
672
- if (this._antialiasSamples > 1) {
673
- if (!this.enableMultiSampling()) {
674
- (0, core_bentley_1.assert)(false, "Failed to initialize multisampling buffers");
675
- return false;
676
- }
677
- }
678
- else {
679
- if (!this.disableMultiSampling()) {
680
- (0, core_bentley_1.assert)(false, "Failed to initialize multisampling buffers");
681
- return false;
682
- }
712
+ const needComposite = 0 /* None */ !== compositeFlags;
713
+ const fbStack = System_1.System.instance.frameBufferStack;
714
+ // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels() or ambient occlusion).
715
+ let fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
716
+ const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
717
+ this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
718
+ fbStack.execute(fbo, true, useMsBuffers, () => {
719
+ this.drawPass(commands, 2 /* OpaqueLinear */);
720
+ this.drawPass(commands, 3 /* OpaquePlanar */, true);
721
+ if (renderForReadPixels) {
722
+ this.drawPass(commands, 4 /* PointClouds */, true); // don't need EDL for this
723
+ this.drawPass(commands, 5 /* OpaqueGeneral */, true);
724
+ if (useMsBuffers)
725
+ fbo.blitMsBuffersToTextures(true);
683
726
  }
684
- }
685
- // Allocate or free ambient occlusion-related resources if necessary
686
- if (includeOcclusion !== this._includeOcclusion) {
727
+ });
728
+ this._readPickDataFromPingPong = false;
729
+ // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.
730
+ if (!renderForReadPixels) {
731
+ fbo = (needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor);
732
+ fbStack.execute(fbo, true, useMsBuffers, () => {
733
+ this.drawPass(commands, 5 /* OpaqueGeneral */, false);
734
+ this.drawPass(commands, 9 /* HiddenEdge */, false);
735
+ });
736
+ // assume we are done with MS at this point, so update the non-MS buffers
737
+ if (useMsBuffers)
738
+ fbo.blitMsBuffersToTextures(needComposite);
739
+ }
740
+ }
741
+ renderOpaqueAO(commands) {
742
+ const fbStack = System_1.System.instance.frameBufferStack;
743
+ const haveHiddenEdges = 0 !== commands.getCommands(9 /* HiddenEdge */).length;
744
+ // Output the linear, planar, and pickable surfaces to color and pick data buffers.
745
+ let fbo = this._fbos.opaqueAndCompositeAll;
746
+ const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
747
+ this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
748
+ fbStack.execute(fbo, true, useMsBuffers, () => {
749
+ this.drawPass(commands, 2 /* OpaqueLinear */);
750
+ this.drawPass(commands, 3 /* OpaquePlanar */, true);
751
+ this._primitiveDrawState = PrimitiveDrawState.Pickable;
752
+ this.drawPass(commands, 5 /* OpaqueGeneral */, true);
753
+ this._primitiveDrawState = PrimitiveDrawState.Both;
754
+ if (useMsBuffers)
755
+ fbo.blitMsBuffersToTextures(true);
756
+ });
757
+ this._readPickDataFromPingPong = false;
758
+ // Output the non-pickable surfaces and hidden edges to just the color buffer.
759
+ fbo = this._fbos.opaqueAndCompositeColor;
760
+ fbStack.execute(fbo, true, useMsBuffers, () => {
761
+ this._primitiveDrawState = PrimitiveDrawState.NonPickable;
762
+ this.drawPass(commands, 5 /* OpaqueGeneral */, false);
763
+ if (haveHiddenEdges)
764
+ this.drawPass(commands, 9 /* HiddenEdge */, false);
765
+ this._primitiveDrawState = PrimitiveDrawState.Both;
766
+ });
767
+ if (useMsBuffers)
768
+ fbo.blitMsBuffersToTextures(true);
769
+ // If there are no hidden edges, then we're done & can run the AO passes using the normal depthAndOrder texture.
770
+ if (haveHiddenEdges) {
771
+ // AO needs the pick data (orderAndDepth) for the hidden edges. We don't want it in with the other pick data though since they are not pickable, so we will use other textures.
772
+ // If not multisampling we will re-use the ping-pong/transparency textures since we are done with ping-ponging at this point and transparency happens later.
773
+ // If multisampling then we will use the accumulation texture for featureIDs and a special texture for depthAndOrder since the revealage texture is not the right type for multisampling.
774
+ // First we will need to copy what's in the pick buffers so far into the hidden pick buffers.
775
+ System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
776
+ fbo = (useMsBuffers ? this._fbos.pingPongMS : this._fbos.pingPong);
777
+ fbStack.execute(fbo, true, useMsBuffers, () => {
778
+ const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.copyPickBuffers);
779
+ this.target.techniques.draw(params);
780
+ });
781
+ if (useMsBuffers)
782
+ fbo.blitMsBuffersToTextures(false, 1); // only want to blit the depth/order target
783
+ // Now draw the hidden edges, using an fbo which places their depth/order into the hidden pick buffers.
784
+ // Since we are not writing to the actual pick buffers we let this._readPickDataFromPingPong remain false.
785
+ fbo = this._fbos.opaqueAndCompositeAllHidden;
786
+ this._primitiveDrawState = PrimitiveDrawState.Pickable;
787
+ fbStack.execute(fbo, true, useMsBuffers, () => {
788
+ this.drawPass(commands, 9 /* HiddenEdge */, false);
789
+ });
790
+ this._primitiveDrawState = PrimitiveDrawState.Both;
791
+ if (useMsBuffers) {
792
+ // Only want to blit the color and depth/order targets as the featureId target is not blit-able and will generate a GL error.
793
+ fbo.blitMsBuffersToTextures(false, 0);
794
+ fbo.blitMsBuffersToTextures(false, 2);
795
+ }
796
+ this._needHiddenEdges = false;
797
+ }
798
+ this._needHiddenEdges = haveHiddenEdges; // this will cause the alternate renderAndOrder texture with the hidden edges to be read for the 2nd AO blur pass.
799
+ this.renderAmbientOcclusion();
800
+ this._needHiddenEdges = false;
801
+ }
802
+ renderPointClouds(commands, compositeFlags) {
803
+ var _a, _b;
804
+ const is3d = 2 /* Perspective */ === this.target.uniforms.frustum.type;
805
+ // separate individual point clouds and get their point cloud settings
806
+ const pointClouds = [];
807
+ let pcs;
808
+ const cmds = commands.getCommands(4 /* PointClouds */);
809
+ let curPC;
810
+ let pushDepth = 0;
811
+ for (const cmd of cmds) {
812
+ if ("pushBranch" === cmd.opcode) { // should be first command
813
+ ++pushDepth;
814
+ if (pushDepth === 1) {
815
+ pcs = (_a = cmd.branch.branch.realityModelDisplaySettings) === null || _a === void 0 ? void 0 : _a.pointCloud;
816
+ this.target.uniforms.realityModel.pointCloud.updateRange(cmd.branch.branch.realityModelRange, this.target, cmd.branch.localToWorldTransform, is3d);
817
+ pointClouds.push(curPC = { pcs, cmds: [cmd] });
818
+ }
819
+ else {
820
+ (0, core_bentley_1.assert)(undefined !== curPC);
821
+ curPC.cmds.push(cmd);
822
+ }
823
+ }
824
+ else {
825
+ if ("popBranch" === cmd.opcode)
826
+ --pushDepth;
827
+ (0, core_bentley_1.assert)(undefined !== curPC);
828
+ curPC.cmds.push(cmd);
829
+ }
830
+ }
831
+ const needComposite = 0 /* None */ !== compositeFlags;
832
+ const fbo = (needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor);
833
+ const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
834
+ const system = System_1.System.instance;
835
+ const fbStack = system.frameBufferStack;
836
+ this._readPickDataFromPingPong = false;
837
+ for (const pc of pointClouds) {
838
+ pcs = pc.pcs;
839
+ let edlOn = (pcs === null || pcs === void 0 ? void 0 : pcs.edlMode) !== "off" && is3d;
840
+ if (edlOn) {
841
+ if (undefined === this._textures.hilite)
842
+ edlOn = false;
843
+ else {
844
+ // create fbo on fly if not present, or has changed (from MS)
845
+ // ###TODO consider not drawing point clouds to MS buffers, at least if EDL, it isn't worth the overhead.
846
+ // would have to blit depth before draw, use depth for draw, then run shader to copy depth back to MSAA
847
+ // at end, wherever color buf changed (test alpha, else discard)
848
+ // this would also simplify this code considerably
849
+ let drawColBufs;
850
+ if (undefined !== this._fbos.edlDrawCol)
851
+ drawColBufs = this._fbos.edlDrawCol.getColorTargets(useMsBuffers, 0);
852
+ if (undefined === this._fbos.edlDrawCol || this._textures.hilite !== (drawColBufs === null || drawColBufs === void 0 ? void 0 : drawColBufs.tex) || this._textures.hiliteMsBuff !== drawColBufs.msBuf) {
853
+ this._fbos.edlDrawCol = (0, core_bentley_1.dispose)(this._fbos.edlDrawCol);
854
+ const filters = [GL_1.GL.MultiSampling.Filter.Linear];
855
+ if (useMsBuffers)
856
+ this._fbos.edlDrawCol = FrameBuffer_1.FrameBuffer.create([this._textures.hilite], this._depth, useMsBuffers && this._textures.hiliteMsBuff ? [this._textures.hiliteMsBuff] : undefined, filters, this._depthMS);
857
+ else
858
+ this._fbos.edlDrawCol = FrameBuffer_1.FrameBuffer.create([this._textures.hilite], this._depth);
859
+ }
860
+ if (undefined === this._fbos.edlDrawCol)
861
+ edlOn = false;
862
+ else { // can draw EDL
863
+ // first draw pointcloud to borrowed hilite texture(MS) and regular depth(MS) buffers
864
+ fbStack.execute(this._fbos.edlDrawCol, true, useMsBuffers, () => {
865
+ system.context.clearColor(0, 0, 0, 0);
866
+ system.context.clear(GL_1.GL.BufferBit.Color);
867
+ system.applyRenderState(this.getRenderState(4 /* PointClouds */));
868
+ this.target.techniques.execute(this.target, pc.cmds, 4 /* PointClouds */);
869
+ });
870
+ if (useMsBuffers)
871
+ this._fbos.edlDrawCol.blitMsBuffersToTextures(true, 0); // need to read the non-MS depth and hilite buffers
872
+ // next process buffers to generate EDL (depth buffer is passed during init)
873
+ this.target.beginPerfMetricRecord("Calc EDL"); // ### todo keep? (probably)
874
+ const sts = this.eyeDomeLighting.draw({
875
+ edlMode: ((_b = pc.pcs) === null || _b === void 0 ? void 0 : _b.edlMode) === "full" ? EDL_1.EDLMode.Full : EDL_1.EDLMode.On,
876
+ edlFilter: !!(pcs === null || pcs === void 0 ? void 0 : pcs.edlFilter),
877
+ useMsBuffers,
878
+ inputTex: this._textures.hilite,
879
+ curFbo: fbo,
880
+ });
881
+ this.target.endPerfMetricRecord();
882
+ if (!sts) {
883
+ edlOn = false;
884
+ }
885
+ }
886
+ }
887
+ }
888
+ if (!edlOn) {
889
+ // draw the regular way
890
+ fbStack.execute(fbo, true, useMsBuffers, () => {
891
+ system.applyRenderState(this.getRenderState(4 /* PointClouds */));
892
+ this.target.techniques.execute(this.target, pc.cmds, 4 /* PointClouds */);
893
+ });
894
+ }
895
+ }
896
+ }
897
+ renderForVolumeClassification(commands, compositeFlags, renderForReadPixels) {
898
+ const needComposite = 0 /* None */ !== compositeFlags;
899
+ const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
900
+ const fbStack = System_1.System.instance.frameBufferStack;
901
+ if (renderForReadPixels || needAO) {
902
+ this._readPickDataFromPingPong = true;
903
+ fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll, true, this.useMsBuffers, () => {
904
+ this.drawPass(commands, 5 /* OpaqueGeneral */, true, 20 /* VolumeClassifiedRealityData */);
905
+ });
906
+ }
907
+ else {
908
+ this._readPickDataFromPingPong = false;
909
+ fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor, true, this.useMsBuffers, () => {
910
+ this.drawPass(commands, 5 /* OpaqueGeneral */, false, 20 /* VolumeClassifiedRealityData */);
911
+ });
912
+ }
913
+ }
914
+ renderIndexedClassifierForReadPixels(cmds, state, renderForIntersectingVolumes, needComposite) {
915
+ this._readPickDataFromPingPong = true;
916
+ const fbo = (renderForIntersectingVolumes ? (needComposite ? this._fbos.idsAndZComposite : this._fbos.idsAndZ)
917
+ : (needComposite ? this._fbos.idsAndAltZComposite : this._fbos.idsAndAltZ));
918
+ System_1.System.instance.frameBufferStack.execute(fbo, true, false, () => {
919
+ System_1.System.instance.applyRenderState(state);
920
+ this.target.techniques.execute(this.target, cmds, 5 /* OpaqueGeneral */);
921
+ });
922
+ this._readPickDataFromPingPong = false;
923
+ }
924
+ clearTranslucent() {
925
+ System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
926
+ System_1.System.instance.frameBufferStack.execute(this._fbos.clearTranslucent, true, false, () => {
927
+ const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.clearTranslucent);
928
+ this.target.techniques.draw(params);
929
+ });
930
+ }
931
+ renderTranslucent(commands) {
932
+ System_1.System.instance.frameBufferStack.execute(this._fbos.translucent, true, false, () => {
933
+ this.drawPass(commands, 8 /* Translucent */);
934
+ });
935
+ }
936
+ getBackgroundFbo(needComposite) {
937
+ return needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor;
938
+ }
939
+ pingPong() {
940
+ if (this._fbos.opaqueAll.isMultisampled && this.useMsBuffers) {
941
+ // If we are multisampling we can just blit the FeatureId and DepthAndOrder MS buffers to their textures.
942
+ this._fbos.opaqueAll.blitMsBuffersToTextures(false, 1);
943
+ this._fbos.opaqueAll.blitMsBuffersToTextures(false, 2);
944
+ }
945
+ else {
946
+ System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
947
+ System_1.System.instance.frameBufferStack.execute(this._fbos.pingPong, true, this.useMsBuffers, () => {
948
+ const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.copyPickBuffers);
949
+ this.target.techniques.draw(params);
950
+ });
951
+ }
952
+ }
953
+ get antialiasSamples() { return this._antialiasSamples; }
954
+ get useMsBuffers() { return this._antialiasSamples > 1 && !this.target.isReadPixelsInProgress; }
955
+ enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
956
+ this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
957
+ }
958
+ disableVolumeClassifierFbos() {
959
+ this._fbos.disableVolumeClassifier();
960
+ }
961
+ /** This function generates a texture that contains ambient occlusion information to be applied later. */
962
+ renderAmbientOcclusion() {
963
+ const system = System_1.System.instance;
964
+ // Render unblurred ambient occlusion based on depth buffer
965
+ let fbo = this._fbos.occlusion;
966
+ this.target.beginPerfMetricRecord("Compute AO");
967
+ system.frameBufferStack.execute(fbo, true, false, () => {
968
+ System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
969
+ const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusion);
970
+ this.target.techniques.draw(params);
971
+ });
972
+ this.target.endPerfMetricRecord();
973
+ // Render the X-blurred ambient occlusion based on unblurred ambient occlusion
974
+ fbo = this._fbos.occlusionBlur;
975
+ this.target.beginPerfMetricRecord("Blur AO X");
976
+ system.frameBufferStack.execute(fbo, true, false, () => {
977
+ System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
978
+ const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusionXBlur);
979
+ this.target.techniques.draw(params);
980
+ });
981
+ this.target.endPerfMetricRecord();
982
+ // Render the Y-blurred ambient occlusion based on X-blurred ambient occlusion (render into original occlusion framebuffer)
983
+ fbo = this._fbos.occlusion;
984
+ this.target.beginPerfMetricRecord("Blur AO Y");
985
+ system.frameBufferStack.execute(fbo, true, false, () => {
986
+ System_1.System.instance.applyRenderState(RenderState_1.RenderState.defaults);
987
+ const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.occlusionYBlur);
988
+ this.target.techniques.draw(params);
989
+ });
990
+ this.target.endPerfMetricRecord();
991
+ }
992
+ collectStatistics(stats) {
993
+ if (undefined !== this._depth)
994
+ stats.addTextureAttachment(this._depth.bytesUsed);
995
+ if (undefined !== this._depthMS)
996
+ stats.addTextureAttachment(this._depthMS.bytesUsed);
997
+ this._textures.collectStatistics(stats);
998
+ this._geom.collectStatistics(stats);
999
+ }
1000
+ preDraw() {
1001
+ const rect = this.target.viewRect;
1002
+ const width = rect.width;
1003
+ const height = rect.height;
1004
+ const includeOcclusion = this.target.wantAmbientOcclusion;
1005
+ const wantVolumeClassifier = (undefined !== this.target.activeVolumeClassifierProps);
1006
+ let wantAntialiasSamples = this.target.antialiasSamples <= 1 ? 1 : this.target.antialiasSamples;
1007
+ if (wantAntialiasSamples > System_1.System.instance.maxAntialiasSamples)
1008
+ wantAntialiasSamples = System_1.System.instance.maxAntialiasSamples;
1009
+ const changeAntialiasSamples = (this._antialiasSamples > 1 && wantAntialiasSamples > 1 && this._antialiasSamples !== wantAntialiasSamples);
1010
+ // If not yet initialized, or dimensions changed, or antialiasing changed the number of samples, initialize.
1011
+ if (undefined === this._textures.accumulation || width !== this._width || height !== this._height || changeAntialiasSamples) {
1012
+ this._width = width;
1013
+ this._height = height;
1014
+ this._antialiasSamples = wantAntialiasSamples;
1015
+ // init() first calls dispose(), which releases all of our fbos, textures, etc, and resets the _includeOcclusion flag.
1016
+ if (!this.init()) {
1017
+ (0, core_bentley_1.assert)(false, "Failed to initialize scene compositor");
1018
+ return false;
1019
+ }
1020
+ }
1021
+ else if (this._antialiasSamples !== wantAntialiasSamples) {
1022
+ // Turn on or off multisampling. Rather than just re-initializing, we can save the
1023
+ // non multisampled textures & FBOs and just try to add or delete the multisampled ones.
1024
+ this._antialiasSamples = wantAntialiasSamples;
1025
+ if (wantVolumeClassifier && this._haveVolumeClassifier) {
1026
+ // Multisampling and volume classification buffers are somewhat co-dependent so if volume classification is on
1027
+ // and is staying on, just disable volume classifiers and let them get re-enabled later.
1028
+ this.disableVolumeClassifierFbos();
1029
+ this._geom.disableVolumeClassifier();
1030
+ this._textures.disableVolumeClassifier();
1031
+ if (undefined !== this._vcAltDepthStencil) {
1032
+ this._vcAltDepthStencil.dispose();
1033
+ this._vcAltDepthStencil = undefined;
1034
+ }
1035
+ this._haveVolumeClassifier = false;
1036
+ }
1037
+ if (includeOcclusion && this._includeOcclusion) {
1038
+ // Multisampling and AO buffers are also somewhat co-dependent, so if AO is on
1039
+ // and is staying on, just disable AO and let it get re-enabled later.
1040
+ this._geom.disableOcclusion();
1041
+ this._fbos.disableOcclusion();
1042
+ this._textures.disableOcclusion();
1043
+ this._includeOcclusion = false;
1044
+ }
1045
+ if (this._antialiasSamples > 1) {
1046
+ if (!this.enableMultiSampling()) {
1047
+ (0, core_bentley_1.assert)(false, "Failed to initialize multisampling buffers");
1048
+ return false;
1049
+ }
1050
+ }
1051
+ else {
1052
+ if (!this.disableMultiSampling()) {
1053
+ (0, core_bentley_1.assert)(false, "Failed to initialize multisampling buffers");
1054
+ return false;
1055
+ }
1056
+ }
1057
+ }
1058
+ // Allocate or free ambient occlusion-related resources if necessary
1059
+ if (includeOcclusion !== this._includeOcclusion) {
687
1060
  this._includeOcclusion = includeOcclusion;
688
1061
  if (includeOcclusion) {
689
1062
  if (!this._textures.enableOcclusion(width, height, this._antialiasSamples)) {
690
1063
  (0, core_bentley_1.assert)(false, "Failed to initialize occlusion textures");
691
1064
  return false;
692
1065
  }
693
- if (!this._frameBuffers.enableOcclusion(this._textures, this._depth, this._depthMS)) {
1066
+ if (!this._fbos.enableOcclusion(this._textures, this._depth, this._depthMS)) {
694
1067
  (0, core_bentley_1.assert)(false, "Failed to initialize occlusion frame buffers");
695
1068
  return false;
696
1069
  }
@@ -698,28 +1071,22 @@ class Compositor extends SceneCompositor {
698
1071
  }
699
1072
  else {
700
1073
  this._geom.disableOcclusion();
701
- this._frameBuffers.disableOcclusion();
1074
+ this._fbos.disableOcclusion();
702
1075
  this._textures.disableOcclusion();
703
1076
  }
704
1077
  }
705
- // Allocate or free volume classifier-related resources if necessary. Make sure that we have depth/stencil.
1078
+ // Allocate or free volume classifier-related resources if necessary.
706
1079
  if (wantVolumeClassifier !== this._haveVolumeClassifier) {
707
- if (wantVolumeClassifier && webgl_compatibility_1.DepthType.TextureUnsignedInt24Stencil8 === System_1.System.instance.capabilities.maxDepthType) {
1080
+ if (wantVolumeClassifier) {
708
1081
  this._vcAltDepthStencil = System_1.System.instance.createDepthBuffer(width, height);
709
1082
  if (undefined !== this._depthMS)
710
1083
  this._vcAltDepthStencilMS = System_1.System.instance.createDepthBuffer(width, height, this._antialiasSamples);
711
- if (undefined === this._vcAltDepthStencil || (undefined !== this._depthMS && undefined === this._vcAltDepthStencilMS)) {
712
- (0, core_bentley_1.assert)(false, "Failed to initialize volume classifier depth buffer");
1084
+ if (undefined === this._vcAltDepthStencil || (undefined !== this._depthMS && undefined === this._vcAltDepthStencilMS))
713
1085
  return false;
714
- }
715
- if (!this._textures.enableVolumeClassifier(width, height, this._antialiasSamples)) {
716
- (0, core_bentley_1.assert)(false, "Failed to initialize volume classifier textures");
1086
+ if (!this._textures.enableVolumeClassifier(width, height, this._antialiasSamples))
717
1087
  return false;
718
- }
719
- if (!this._geom.enableVolumeClassifier(this._textures, this._depth, width, height)) {
720
- (0, core_bentley_1.assert)(false, "Failed to initialize volume classifier geometry");
1088
+ if (!this._geom.enableVolumeClassifier(this._textures, this._depth))
721
1089
  return false;
722
- }
723
1090
  this.enableVolumeClassifierFbos(this._textures, this._depth, this._vcAltDepthStencil, this._depthMS, this._vcAltDepthStencilMS);
724
1091
  this._haveVolumeClassifier = true;
725
1092
  }
@@ -737,10 +1104,8 @@ class Compositor extends SceneCompositor {
737
1104
  return true;
738
1105
  }
739
1106
  draw(commands) {
740
- if (!this.preDraw()) {
741
- (0, core_bentley_1.assert)(false);
1107
+ if (!this.preDraw())
742
1108
  return;
743
- }
744
1109
  const compositeFlags = commands.compositeFlags;
745
1110
  const needComposite = 0 /* None */ !== compositeFlags;
746
1111
  // Clear output targets
@@ -788,6 +1153,10 @@ class Compositor extends SceneCompositor {
788
1153
  frameBufferStack: System_1.System.instance.frameBufferStack,
789
1154
  });
790
1155
  this.target.frameStatsCollector.endTime("onRenderOpaqueTime");
1156
+ // Render point cloud geometry with possible EDL
1157
+ this.target.beginPerfMetricRecord("Render PointClouds");
1158
+ this.renderPointClouds(commands, compositeFlags);
1159
+ this.target.endPerfMetricRecord();
791
1160
  // Render opaque geometry
792
1161
  this.target.beginPerfMetricRecord("Render Opaque");
793
1162
  this.renderOpaque(commands, compositeFlags, false);
@@ -796,7 +1165,7 @@ class Compositor extends SceneCompositor {
796
1165
  this.target.frameStatsCollector.beginTime("translucentTime");
797
1166
  // Render translucent layers
798
1167
  this.target.beginPerfMetricRecord("Render Translucent Layers");
799
- this.renderLayers(commands, needComposite, 6 /* TranslucentLayers */);
1168
+ this.renderLayers(commands, needComposite, 7 /* TranslucentLayers */);
800
1169
  this.target.endPerfMetricRecord();
801
1170
  if (needComposite) {
802
1171
  this._geom.composite.update(compositeFlags);
@@ -817,13 +1186,13 @@ class Compositor extends SceneCompositor {
817
1186
  // Render overlay Layers
818
1187
  this.target.frameStatsCollector.beginTime("overlaysTime");
819
1188
  this.target.beginPerfMetricRecord("Render Overlay Layers");
820
- this.renderLayers(commands, false, 10 /* OverlayLayers */);
1189
+ this.renderLayers(commands, false, 11 /* OverlayLayers */);
821
1190
  this.target.endPerfMetricRecord();
822
1191
  this.target.frameStatsCollector.endTime("overlaysTime");
823
1192
  this.target.popViewClip();
824
1193
  }
825
1194
  get fullHeight() { return this.target.viewRect.height; }
826
- drawForReadPixels(commands, sceneOverlays, overlayDecorations) {
1195
+ drawForReadPixels(commands, sceneOverlays, worldOverlayDecorations, viewOverlayDecorations) {
827
1196
  this.target.beginPerfMetricRecord("Render Background", true);
828
1197
  if (!this.preDraw()) {
829
1198
  this.target.endPerfMetricRecord(true); // End Render Background record if returning
@@ -846,28 +1215,29 @@ class Compositor extends SceneCompositor {
846
1215
  // Ensure it draws before any opaque geometry (including layers), without depth.
847
1216
  this.target.beginPerfMetricRecord("Render background map", true);
848
1217
  this.target.drawingBackgroundForReadPixels = true;
849
- this.renderLayers(commands, false, 14 /* BackgroundMap */);
1218
+ this.renderLayers(commands, false, 15 /* BackgroundMap */);
850
1219
  this.target.drawingBackgroundForReadPixels = false;
851
1220
  this.target.endPerfMetricRecord(true);
852
1221
  this.target.beginPerfMetricRecord("Render Opaque Layers", true);
853
1222
  this.renderLayers(commands, false, 1 /* OpaqueLayers */);
854
1223
  this.target.endPerfMetricRecord(true);
1224
+ // PointClouds are rendered in Opaque pass for readPixels
855
1225
  this.target.beginPerfMetricRecord("Render Opaque", true);
856
1226
  this.renderOpaque(commands, 0 /* None */, true);
857
1227
  this.target.endPerfMetricRecord(true);
858
1228
  this.target.beginPerfMetricRecord("Render Translucent Layers", true);
859
- this.renderLayers(commands, false, 6 /* TranslucentLayers */);
1229
+ this.renderLayers(commands, false, 7 /* TranslucentLayers */);
860
1230
  this.target.endPerfMetricRecord(true);
861
1231
  this.target.beginPerfMetricRecord("Render Overlay Layers", true);
862
- this.renderLayers(commands, false, 10 /* OverlayLayers */);
1232
+ this.renderLayers(commands, false, 11 /* OverlayLayers */);
863
1233
  this.target.endPerfMetricRecord(true);
864
1234
  this.target.popViewClip();
865
1235
  }
866
- if (0 === sceneOverlays.length && (undefined === overlayDecorations || 0 === overlayDecorations.length))
1236
+ if (!sceneOverlays.length && !(worldOverlayDecorations === null || worldOverlayDecorations === void 0 ? void 0 : worldOverlayDecorations.length) && !(viewOverlayDecorations === null || viewOverlayDecorations === void 0 ? void 0 : viewOverlayDecorations.length))
867
1237
  return;
868
1238
  // Now populate the opaque passes with any pickable world overlays
869
1239
  this.target.beginPerfMetricRecord("Overlay Draws", true);
870
- commands.initForPickOverlays(sceneOverlays, overlayDecorations);
1240
+ commands.initForPickOverlays(sceneOverlays, worldOverlayDecorations, viewOverlayDecorations);
871
1241
  if (commands.isEmpty) {
872
1242
  this.target.endPerfMetricRecord(true); // End Overlay Draws record if returning
873
1243
  return;
@@ -876,7 +1246,7 @@ class Compositor extends SceneCompositor {
876
1246
  // (If *only* overlays exist, then clearOpaque() above already took care of this).
877
1247
  if (haveRenderCommands) {
878
1248
  const system = System_1.System.instance;
879
- system.frameBufferStack.execute(this._frameBuffers.opaqueColor, true, this.useMsBuffers, () => {
1249
+ system.frameBufferStack.execute(this._fbos.opaqueColor, true, this.useMsBuffers, () => {
880
1250
  system.applyRenderState(RenderState_1.RenderState.defaults);
881
1251
  system.context.clearDepth(1.0);
882
1252
  system.context.clear(GL_1.GL.BufferBit.Depth);
@@ -894,7 +1264,7 @@ class Compositor extends SceneCompositor {
894
1264
  readPixels(rect, selector) {
895
1265
  return PixelBuffer.create(rect, selector, this);
896
1266
  }
897
- readDepthAndOrder(rect) { return this.readFrameBuffer(rect, this._frameBuffers.depthAndOrder); }
1267
+ readDepthAndOrder(rect) { return this.readFrameBuffer(rect, this._fbos.depthAndOrder); }
898
1268
  readFeatureIds(rect) {
899
1269
  const tex = this._textures.featureId;
900
1270
  if (undefined === tex)
@@ -908,8 +1278,8 @@ class Compositor extends SceneCompositor {
908
1278
  this.solarShadowMap.update(context);
909
1279
  }
910
1280
  get screenSpaceEffectFbo() {
911
- (0, core_bentley_1.assert)(undefined !== this._frameBuffers.hilite);
912
- return this._frameBuffers.hilite;
1281
+ (0, core_bentley_1.assert)(undefined !== this._fbos.hilite);
1282
+ return this._fbos.hilite;
913
1283
  }
914
1284
  readFrameBuffer(rect, fbo) {
915
1285
  if (undefined === fbo || !Diagnostics_1.Debug.isValidFrameBuffer)
@@ -934,14 +1304,16 @@ class Compositor extends SceneCompositor {
934
1304
  && undefined === this._vcAltDepthStencil
935
1305
  && !this._includeOcclusion
936
1306
  && this._textures.isDisposed
937
- && this._frameBuffers.isDisposed
1307
+ && this._fbos.isDisposed
938
1308
  && this._geom.isDisposed
939
1309
  && !this._haveVolumeClassifier
940
- && this.solarShadowMap.isDisposed;
1310
+ && this.solarShadowMap.isDisposed
1311
+ && this.eyeDomeLighting.isDisposed;
941
1312
  }
942
1313
  dispose() {
943
1314
  this.reset();
944
1315
  (0, core_bentley_1.dispose)(this.solarShadowMap);
1316
+ (0, core_bentley_1.dispose)(this.eyeDomeLighting);
945
1317
  }
946
1318
  // Resets anything that depends on the dimensions of the render target.
947
1319
  // Does *not* dispose the solar shadow map.
@@ -951,9 +1323,10 @@ class Compositor extends SceneCompositor {
951
1323
  this._vcAltDepthStencil = (0, core_bentley_1.dispose)(this._vcAltDepthStencil);
952
1324
  this._includeOcclusion = false;
953
1325
  (0, core_bentley_1.dispose)(this._textures);
954
- (0, core_bentley_1.dispose)(this._frameBuffers);
1326
+ (0, core_bentley_1.dispose)(this._fbos);
955
1327
  (0, core_bentley_1.dispose)(this._geom);
956
1328
  this._haveVolumeClassifier = false;
1329
+ this.eyeDomeLighting.reset();
957
1330
  }
958
1331
  init() {
959
1332
  this.reset();
@@ -964,8 +1337,9 @@ class Compositor extends SceneCompositor {
964
1337
  this._depthMS = undefined;
965
1338
  if (this._depth !== undefined) {
966
1339
  return this._textures.init(this._width, this._height, this._antialiasSamples)
967
- && this._frameBuffers.init(this._textures, this._depth, this._depthMS)
968
- && this._geom.init(this._textures);
1340
+ && this._fbos.init(this._textures, this._depth, this._depthMS)
1341
+ && this._geom.init(this._textures)
1342
+ && this.eyeDomeLighting.init(this._width, this._height, this._depth);
969
1343
  }
970
1344
  return false;
971
1345
  }
@@ -975,36 +1349,42 @@ class Compositor extends SceneCompositor {
975
1349
  this._depthMS = System_1.System.instance.createDepthBuffer(this._width, this._height, this._antialiasSamples);
976
1350
  if (undefined === this._depthMS)
977
1351
  return false;
978
- return this._textures.enableMultiSampling(this._width, this._height, this._antialiasSamples);
1352
+ if (!this._textures.enableMultiSampling(this._width, this._height, this._antialiasSamples))
1353
+ return false;
1354
+ (0, core_bentley_1.assert)(undefined !== this._depth && undefined !== this._depthMS);
1355
+ return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);
979
1356
  }
980
1357
  disableMultiSampling() {
1358
+ (0, core_bentley_1.assert)(undefined !== this._depth);
1359
+ if (!this._fbos.disableMultiSampling(this._textures, this._depth))
1360
+ return false;
981
1361
  // Want to disable multisampling without deleting & reallocating other stuff.
982
1362
  this._depthMS = (0, core_bentley_1.dispose)(this._depthMS);
983
1363
  (0, core_bentley_1.assert)(undefined !== this._depth);
984
1364
  return this._textures.disableMultiSampling();
985
1365
  }
986
1366
  renderBackgroundMap(commands, needComposite) {
987
- const cmds = commands.getCommands(14 /* BackgroundMap */);
1367
+ const cmds = commands.getCommands(15 /* BackgroundMap */);
988
1368
  if (0 === cmds.length) {
989
1369
  return;
990
1370
  }
991
1371
  const fbStack = System_1.System.instance.frameBufferStack;
992
1372
  const fbo = this.getBackgroundFbo(needComposite);
993
1373
  fbStack.execute(fbo, true, this.useMsBuffers, () => {
994
- System_1.System.instance.applyRenderState(this.getRenderState(14 /* BackgroundMap */));
995
- this.target.techniques.execute(this.target, cmds, 14 /* BackgroundMap */);
1374
+ System_1.System.instance.applyRenderState(this.getRenderState(15 /* BackgroundMap */));
1375
+ this.target.techniques.execute(this.target, cmds, 15 /* BackgroundMap */);
996
1376
  });
997
1377
  }
998
1378
  renderSkyBox(commands, needComposite) {
999
- const cmds = commands.getCommands(13 /* SkyBox */);
1379
+ const cmds = commands.getCommands(14 /* SkyBox */);
1000
1380
  if (0 === cmds.length) {
1001
1381
  return;
1002
1382
  }
1003
1383
  const fbStack = System_1.System.instance.frameBufferStack;
1004
1384
  const fbo = this.getBackgroundFbo(needComposite);
1005
1385
  fbStack.execute(fbo, true, this.useMsBuffers, () => {
1006
- System_1.System.instance.applyRenderState(this.getRenderState(13 /* SkyBox */));
1007
- this.target.techniques.execute(this.target, cmds, 13 /* SkyBox */);
1386
+ System_1.System.instance.applyRenderState(this.getRenderState(14 /* SkyBox */));
1387
+ this.target.techniques.execute(this.target, cmds, 14 /* SkyBox */);
1008
1388
  });
1009
1389
  }
1010
1390
  renderBackground(commands, needComposite) {
@@ -1123,10 +1503,10 @@ class Compositor extends SceneCompositor {
1123
1503
  }
1124
1504
  renderIndexedVolumeClassifier(cmdsByIndex, needComposite) {
1125
1505
  // Set the stencil for the given classifier stencil volume.
1126
- System_1.System.instance.frameBufferStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {
1506
+ System_1.System.instance.frameBufferStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {
1127
1507
  this.target.pushState(this._vcBranchState);
1128
1508
  System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
1129
- this.target.techniques.executeForIndexedClassifier(this.target, cmdsByIndex, 5 /* Classification */);
1509
+ this.target.techniques.executeForIndexedClassifier(this.target, cmdsByIndex, 6 /* Classification */);
1130
1510
  this.target.popBranch();
1131
1511
  });
1132
1512
  // Process the stencil for the pick data.
@@ -1134,8 +1514,8 @@ class Compositor extends SceneCompositor {
1134
1514
  }
1135
1515
  renderVolumeClassification(commands, compositeFlags, renderForReadPixels) {
1136
1516
  // Sometimes we need to render the classifier stencil volumes one at a time, if so draw them from the cmdsByIndex list
1137
- const cmds = commands.getCommands(5 /* Classification */);
1138
- const cmdsByIndex = commands.getCommands(16 /* ClassificationByIndex */);
1517
+ const cmds = commands.getCommands(6 /* Classification */);
1518
+ const cmdsByIndex = commands.getCommands(17 /* ClassificationByIndex */);
1139
1519
  let numCmdsPerClassifier = 0;
1140
1520
  for (const cmd of cmdsByIndex) { // Figure out how many commands there are per index/primitive
1141
1521
  numCmdsPerClassifier++;
@@ -1144,7 +1524,7 @@ class Compositor extends SceneCompositor {
1144
1524
  break;
1145
1525
  }
1146
1526
  }
1147
- const cmdsForVC = commands.getCommands(19 /* VolumeClassifiedRealityData */);
1527
+ const cmdsForVC = commands.getCommands(20 /* VolumeClassifiedRealityData */);
1148
1528
  if (!this.target.activeVolumeClassifierProps || (renderForReadPixels && 0 === cmds.length) || 0 === cmdsForVC.length)
1149
1529
  return;
1150
1530
  let outsideFlags = this.target.activeVolumeClassifierProps.flags.outside;
@@ -1164,28 +1544,28 @@ class Compositor extends SceneCompositor {
1164
1544
  if (this._debugStencil > 0) {
1165
1545
  fbStack.execute(fboColorAndZ, true, this.useMsBuffers, () => {
1166
1546
  if (1 === this._debugStencil) {
1167
- System_1.System.instance.applyRenderState(this.getRenderState(4 /* OpaqueGeneral */));
1168
- this.target.techniques.execute(this.target, cmds, 4 /* OpaqueGeneral */);
1547
+ System_1.System.instance.applyRenderState(this.getRenderState(5 /* OpaqueGeneral */));
1548
+ this.target.techniques.execute(this.target, cmds, 5 /* OpaqueGeneral */);
1169
1549
  }
1170
1550
  else {
1171
1551
  this.target.pushState(this._vcBranchState);
1172
1552
  System_1.System.instance.applyRenderState(this._vcDebugRenderState);
1173
- this.target.techniques.execute(this.target, cmds, 5 /* Classification */);
1553
+ this.target.techniques.execute(this.target, cmds, 6 /* Classification */);
1174
1554
  this.target.popBranch();
1175
1555
  }
1176
1556
  });
1177
1557
  return;
1178
1558
  }
1179
- if (undefined === this._frameBuffers.altZOnly || undefined === this._frameBuffers.stencilSet)
1559
+ if (undefined === this._fbos.altZOnly || undefined === this._fbos.stencilSet)
1180
1560
  return;
1181
1561
  if (renderForReadPixels && this.target.vcSupportIntersectingVolumes) {
1182
1562
  // Clear the stencil.
1183
- fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {
1563
+ fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {
1184
1564
  System_1.System.instance.context.clearStencil(0);
1185
1565
  System_1.System.instance.context.clear(GL_1.GL.BufferBit.Stencil);
1186
1566
  });
1187
1567
  if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
1188
- this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1568
+ this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1189
1569
  for (let i = 0; i < cmdsByIndex.length; i += numCmdsPerClassifier)
1190
1570
  this.renderIndexedVolumeClassifier(cmdsByIndex.slice(i, i + numCmdsPerClassifier), needComposite);
1191
1571
  return;
@@ -1195,10 +1575,10 @@ class Compositor extends SceneCompositor {
1195
1575
  const doColorByElement = core_common_1.SpatialClassifierInsideDisplay.ElementColor === insideFlags || renderForReadPixels;
1196
1576
  const doColorByElementForIntersectingVolumes = this.target.vcSupportIntersectingVolumes;
1197
1577
  const needAltZ = (doColorByElement && !doColorByElementForIntersectingVolumes) || needOutsideDraw;
1198
- let zOnlyFbo = this._frameBuffers.stencilSet;
1199
- let volClassBlendFbo = this._frameBuffers.volClassCreateBlend;
1578
+ let zOnlyFbo = this._fbos.stencilSet;
1579
+ let volClassBlendFbo = this._fbos.volClassCreateBlend;
1200
1580
  let volClassBlendReadZTexture = this._vcAltDepthStencil.getHandle();
1201
- let volClassBlendReadZTextureFbo = this._frameBuffers.altZOnly;
1581
+ let volClassBlendReadZTextureFbo = this._fbos.altZOnly;
1202
1582
  if (!needAltZ) {
1203
1583
  // Initialize the blend texture and the stencil.
1204
1584
  (0, core_bentley_1.assert)(undefined !== volClassBlendFbo);
@@ -1211,31 +1591,28 @@ class Compositor extends SceneCompositor {
1211
1591
  else {
1212
1592
  // If we are doing color-by-element for the inside do not care about intersecting volumes or we need to color the outside
1213
1593
  // then we need to copy the Z buffer and set up a different zbuffer/stencil to render in.
1214
- zOnlyFbo = this._frameBuffers.altZOnly;
1215
- volClassBlendFbo = this._frameBuffers.volClassCreateBlendAltZ;
1594
+ zOnlyFbo = this._fbos.altZOnly;
1595
+ volClassBlendFbo = this._fbos.volClassCreateBlendAltZ;
1216
1596
  (0, core_bentley_1.assert)(undefined !== volClassBlendFbo);
1217
1597
  volClassBlendReadZTexture = this._depth.getHandle();
1218
- volClassBlendReadZTextureFbo = this._frameBuffers.stencilSet;
1598
+ volClassBlendReadZTextureFbo = this._fbos.stencilSet;
1219
1599
  if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
1220
1600
  volClassBlendReadZTextureFbo.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1221
1601
  // Copy the current Z into the Alt-Z. At the same time go ahead and clear the stencil and the blend texture.
1222
1602
  fbStack.execute(volClassBlendFbo, true, this.useMsBuffers, () => {
1223
1603
  this.target.pushState(this.target.decorationsState);
1224
1604
  System_1.System.instance.applyRenderState(this._vcCopyZRenderState);
1225
- if (System_1.System.instance.capabilities.supportsFragDepth)
1226
- this.target.techniques.draw((0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.volClassCopyZ)); // This method uses the EXT_frag_depth extension
1227
- else
1228
- this.target.techniques.draw((0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.volClassCopyZWithPoints)); // This method draws GL_POINTS (1 per pixel) to set Z in vertex shader
1605
+ this.target.techniques.draw((0, ScratchDrawParams_1.getDrawParams)(this.target, this._geom.volClassCopyZ)); // This method uses the EXT_frag_depth extension
1229
1606
  System_1.System.instance.bindTexture2d(RenderFlags_1.TextureUnit.Zero, undefined);
1230
1607
  this.target.popBranch();
1231
1608
  });
1232
1609
  }
1233
1610
  if (renderForReadPixels) {
1234
1611
  // Set the stencil for all of the classifier volumes.
1235
- System_1.System.instance.frameBufferStack.execute(this._frameBuffers.altZOnly, false, this.useMsBuffers, () => {
1612
+ System_1.System.instance.frameBufferStack.execute(this._fbos.altZOnly, false, this.useMsBuffers, () => {
1236
1613
  this.target.pushState(this._vcBranchState);
1237
1614
  System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
1238
- this.target.techniques.execute(this.target, cmds, 5 /* Classification */);
1615
+ this.target.techniques.execute(this.target, cmds, 6 /* Classification */);
1239
1616
  // After we create the stencil we need to clear the Z for the next step (so also must turn on z writing temporarily).
1240
1617
  this._vcSetStencilRenderState.flags.depthMask = true;
1241
1618
  System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
@@ -1254,7 +1631,7 @@ class Compositor extends SceneCompositor {
1254
1631
  this.setAllStencilOps(this._vcColorRenderState, GL_1.GL.StencilOperation.Keep); // don't clear the stencil so that all classifiers behind reality mesh will still draw
1255
1632
  this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ.texture;
1256
1633
  if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
1257
- this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1634
+ this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1258
1635
  this.renderIndexedClassifierForReadPixels(cmds, this._vcColorRenderState, false, needComposite);
1259
1636
  this.target.activeVolumeClassifierTexture = undefined;
1260
1637
  this._vcColorRenderState.flags.depthTest = false;
@@ -1274,7 +1651,7 @@ class Compositor extends SceneCompositor {
1274
1651
  fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {
1275
1652
  this.target.pushState(this._vcBranchState);
1276
1653
  System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
1277
- this.target.techniques.execute(this.target, cmds, 5 /* Classification */);
1654
+ this.target.techniques.execute(this.target, cmds, 6 /* Classification */);
1278
1655
  this.target.popBranch();
1279
1656
  System_1.System.instance.bindTexture2d(RenderFlags_1.TextureUnit.Two, undefined);
1280
1657
  System_1.System.instance.bindTexture2d(RenderFlags_1.TextureUnit.Five, undefined);
@@ -1330,7 +1707,7 @@ class Compositor extends SceneCompositor {
1330
1707
  fbStack.execute(zOnlyFbo, false, this.useMsBuffers, () => {
1331
1708
  this.target.pushState(this._vcBranchState);
1332
1709
  System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
1333
- this.target.techniques.execute(this.target, nxtCmds, 5 /* Classification */);
1710
+ this.target.techniques.execute(this.target, nxtCmds, 6 /* Classification */);
1334
1711
  this.target.popBranch();
1335
1712
  });
1336
1713
  // Process the stencil. Just render the volume normally (us opaque pass), but use blending to modify the source alpha that gets written to the blend texture.
@@ -1341,7 +1718,7 @@ class Compositor extends SceneCompositor {
1341
1718
  this._vcColorRenderState.flags.cull = true;
1342
1719
  System_1.System.instance.applyRenderState(this._vcColorRenderState);
1343
1720
  this.target.activeVolumeClassifierTexture = undefined; // make sure this texture is undefined so we do not use the planar classification shader
1344
- this.target.techniques.execute(this.target, nxtCmds, 4 /* OpaqueGeneral */);
1721
+ this.target.techniques.execute(this.target, nxtCmds, 5 /* OpaqueGeneral */);
1345
1722
  this._vcColorRenderState.flags.cull = false;
1346
1723
  this.target.popBranch();
1347
1724
  });
@@ -1349,7 +1726,7 @@ class Compositor extends SceneCompositor {
1349
1726
  }
1350
1727
  else {
1351
1728
  if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
1352
- this._frameBuffers.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1729
+ this._fbos.stencilSet.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1353
1730
  fbStack.execute(volClassBlendFbo, false, this.useMsBuffers, () => {
1354
1731
  // For coloring the inside by element color we will draw the inside using the the classifiers themselves.
1355
1732
  // To do this we need to first clear our Alt-Z. The shader will then test and write Z and will discard
@@ -1367,7 +1744,7 @@ class Compositor extends SceneCompositor {
1367
1744
  System_1.System.instance.context.clearDepth(1.0);
1368
1745
  System_1.System.instance.context.clear(GL_1.GL.BufferBit.Depth);
1369
1746
  this.target.activeVolumeClassifierTexture = this._geom.volClassCopyZ.texture;
1370
- this.target.techniques.execute(this.target, cmds, 4 /* OpaqueGeneral */);
1747
+ this.target.techniques.execute(this.target, cmds, 5 /* OpaqueGeneral */);
1371
1748
  this.target.activeVolumeClassifierTexture = undefined;
1372
1749
  this._vcColorRenderState.flags.depthTest = false;
1373
1750
  this._vcColorRenderState.flags.depthMask = false;
@@ -1384,12 +1761,12 @@ class Compositor extends SceneCompositor {
1384
1761
  // and this stage can be skipped. In order for this to work the list of commands needs to get reduced to only the ones which draw hilited volumes.
1385
1762
  // We cannot use the hillite shader to draw them since it doesn't handle logZ properly (it doesn't need to since it is only used elsewhere when Z write is turned off)
1386
1763
  // and we don't really want another whole set of hilite shaders just for this.
1387
- const cmdsSelected = (0, DrawCommand_1.extractHilitedVolumeClassifierCommands)(this.target.hilites, commands.getCommands(15 /* HiliteClassification */));
1388
- commands.replaceCommands(15 /* HiliteClassification */, cmdsSelected); // replace the hilite command list for use in hilite pass as well.
1764
+ const cmdsSelected = (0, DrawCommand_1.extractHilitedVolumeClassifierCommands)(this.target.hilites, commands.getCommands(16 /* HiliteClassification */));
1765
+ commands.replaceCommands(16 /* HiliteClassification */, cmdsSelected); // replace the hilite command list for use in hilite pass as well.
1389
1766
  // if (cmdsSelected.length > 0 && insideFlags !== this.target.activeVolumeClassifierProps!.flags.selected) {
1390
1767
  if (!doColorByElement && cmdsSelected.length > 0 && insideFlags !== core_common_1.SpatialClassifierInsideDisplay.Hilite) { // assume selected ones are always hilited
1391
1768
  // Set the stencil using just the hilited volume classifiers.
1392
- fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {
1769
+ fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {
1393
1770
  this.target.pushState(this._vcBranchState);
1394
1771
  System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
1395
1772
  if (needAltZ) {
@@ -1397,12 +1774,12 @@ class Compositor extends SceneCompositor {
1397
1774
  System_1.System.instance.context.clearStencil(0);
1398
1775
  System_1.System.instance.context.clear(GL_1.GL.BufferBit.Stencil);
1399
1776
  }
1400
- this.target.techniques.execute(this.target, cmdsSelected, 5 /* Classification */);
1777
+ this.target.techniques.execute(this.target, cmdsSelected, 6 /* Classification */);
1401
1778
  this.target.popBranch();
1402
1779
  });
1403
1780
  if (this._antialiasSamples > 1 && undefined !== this._depthMS && this.useMsBuffers)
1404
- this._frameBuffers.altZOnly.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1405
- fbStack.execute(this._frameBuffers.volClassCreateBlend, false, this.useMsBuffers, () => {
1781
+ this._fbos.altZOnly.blitMsBuffersToTextures(true, -1); // make sure that the Z buffer that we are about to read has been blitted
1782
+ fbStack.execute(this._fbos.volClassCreateBlend, false, this.useMsBuffers, () => {
1406
1783
  this._geom.volClassSetBlend.boundaryType = CachedGeometry_1.BoundaryType.Selected;
1407
1784
  this._geom.volClassSetBlend.texture = this._vcAltDepthStencil.getHandle(); // need to attach the alt depth instead of the real one since it is bound to the frame buffer
1408
1785
  this.target.pushState(this.target.decorationsState);
@@ -1433,10 +1810,10 @@ class Compositor extends SceneCompositor {
1433
1810
  const flashedClassifierCmds = (0, DrawCommand_1.extractFlashedVolumeClassifierCommands)(this.target.flashedId, cmdsByIndex, numCmdsPerClassifier);
1434
1811
  if (undefined !== flashedClassifierCmds && !doColorByElement) {
1435
1812
  // Set the stencil for this one classifier.
1436
- fbStack.execute(this._frameBuffers.stencilSet, false, this.useMsBuffers, () => {
1813
+ fbStack.execute(this._fbos.stencilSet, false, this.useMsBuffers, () => {
1437
1814
  this.target.pushState(this._vcBranchState);
1438
1815
  System_1.System.instance.applyRenderState(this._vcSetStencilRenderState);
1439
- this.target.techniques.executeForIndexedClassifier(this.target, flashedClassifierCmds, 4 /* OpaqueGeneral */);
1816
+ this.target.techniques.executeForIndexedClassifier(this.target, flashedClassifierCmds, 5 /* OpaqueGeneral */);
1440
1817
  this.target.popBranch();
1441
1818
  });
1442
1819
  // Process the stencil to flash the contents.
@@ -1453,35 +1830,35 @@ class Compositor extends SceneCompositor {
1453
1830
  }
1454
1831
  renderHilite(commands) {
1455
1832
  const system = System_1.System.instance;
1456
- system.frameBufferStack.execute(this._frameBuffers.hilite, true, false, () => {
1833
+ system.frameBufferStack.execute(this._fbos.hilite, true, false, () => {
1457
1834
  // Clear the hilite buffer.
1458
1835
  system.context.clearColor(0, 0, 0, 0);
1459
1836
  system.context.clear(GL_1.GL.BufferBit.Color);
1460
1837
  // Draw the normal hilite geometry.
1461
- this.drawPass(commands, 9 /* Hilite */);
1838
+ this.drawPass(commands, 10 /* Hilite */);
1462
1839
  });
1463
1840
  // Process planar classifiers
1464
- const planarClassifierCmds = commands.getCommands(17 /* HilitePlanarClassification */);
1841
+ const planarClassifierCmds = commands.getCommands(18 /* HilitePlanarClassification */);
1465
1842
  if (0 !== planarClassifierCmds.length) {
1466
- system.frameBufferStack.execute(this._frameBuffers.hiliteUsingStencil, true, false, () => {
1843
+ system.frameBufferStack.execute(this._fbos.hiliteUsingStencil, true, false, () => {
1467
1844
  system.applyRenderState(this._opaqueRenderState);
1468
- this.target.techniques.execute(this.target, planarClassifierCmds, 17 /* HilitePlanarClassification */);
1845
+ this.target.techniques.execute(this.target, planarClassifierCmds, 18 /* HilitePlanarClassification */);
1469
1846
  });
1470
1847
  }
1471
1848
  // Process the volume classifiers.
1472
- const vcHiliteCmds = commands.getCommands(15 /* HiliteClassification */);
1849
+ const vcHiliteCmds = commands.getCommands(16 /* HiliteClassification */);
1473
1850
  if (0 !== vcHiliteCmds.length && undefined !== this._vcBranchState) {
1474
1851
  // Set the stencil for the given classifier stencil volume.
1475
- system.frameBufferStack.execute(this._frameBuffers.stencilSet, false, false, () => {
1852
+ system.frameBufferStack.execute(this._fbos.stencilSet, false, false, () => {
1476
1853
  this.target.pushState(this._vcBranchState);
1477
1854
  system.applyRenderState(this._vcSetStencilRenderState);
1478
- this.target.techniques.execute(this.target, vcHiliteCmds, 9 /* Hilite */);
1855
+ this.target.techniques.execute(this.target, vcHiliteCmds, 10 /* Hilite */);
1479
1856
  this.target.popBranch();
1480
1857
  });
1481
1858
  // Process the stencil for the hilite data.
1482
- system.frameBufferStack.execute(this._frameBuffers.hiliteUsingStencil, true, false, () => {
1859
+ system.frameBufferStack.execute(this._fbos.hiliteUsingStencil, true, false, () => {
1483
1860
  system.applyRenderState(this._vcPickDataRenderState);
1484
- this.target.techniques.execute(this.target, vcHiliteCmds, 9 /* Hilite */);
1861
+ this.target.techniques.execute(this.target, vcHiliteCmds, 10 /* Hilite */);
1485
1862
  });
1486
1863
  }
1487
1864
  }
@@ -1493,27 +1870,29 @@ class Compositor extends SceneCompositor {
1493
1870
  getRenderState(pass) {
1494
1871
  switch (pass) {
1495
1872
  case 1 /* OpaqueLayers */:
1496
- case 6 /* TranslucentLayers */:
1497
- case 10 /* OverlayLayers */:
1873
+ case 7 /* TranslucentLayers */:
1874
+ case 11 /* OverlayLayers */:
1498
1875
  // NB: During pick, we don't want blending - it will mess up our pick buffer data and we don't care about the color data.
1499
1876
  // During normal draw, we don't use the pick buffers for anything, and we want color blending.
1500
1877
  // (We get away with this because surfaces always draw before their edges, and we're not depth-testing, so edges always draw atop surfaces without pick buffer testing).
1501
1878
  this._layerRenderState.flags.blend = !this.target.isReadPixelsInProgress;
1502
1879
  // Transparent non-overlay Layers are drawn between opaque and translucent passes. Test depth, don't write it, so that they blend with opaque.
1503
- this._layerRenderState.flags.depthMask = 6 /* TranslucentLayers */ !== pass;
1504
- this._layerRenderState.depthFunc = (6 /* TranslucentLayers */ === pass) ? GL_1.GL.DepthFunc.Default : GL_1.GL.DepthFunc.Always;
1880
+ this._layerRenderState.flags.depthMask = 7 /* TranslucentLayers */ !== pass;
1881
+ this._layerRenderState.depthFunc = (7 /* TranslucentLayers */ === pass) ? GL_1.GL.DepthFunc.Default : GL_1.GL.DepthFunc.Always;
1505
1882
  return this._layerRenderState;
1506
1883
  case 2 /* OpaqueLinear */:
1507
1884
  case 3 /* OpaquePlanar */:
1508
- case 4 /* OpaqueGeneral */:
1509
- case 17 /* HilitePlanarClassification */:
1885
+ case 5 /* OpaqueGeneral */:
1886
+ case 18 /* HilitePlanarClassification */:
1510
1887
  return this._opaqueRenderState;
1511
- case 7 /* Translucent */:
1888
+ case 8 /* Translucent */:
1512
1889
  return this._translucentRenderState;
1513
- case 9 /* Hilite */:
1890
+ case 10 /* Hilite */:
1514
1891
  return this._hiliteRenderState;
1515
- case 14 /* BackgroundMap */:
1892
+ case 15 /* BackgroundMap */:
1516
1893
  return this._backgroundMapRenderState;
1894
+ case 4 /* PointClouds */:
1895
+ return this._pointCloudRenderState;
1517
1896
  default:
1518
1897
  return this._noDepthMaskRenderState;
1519
1898
  }
@@ -1530,645 +1909,4 @@ class Compositor extends SceneCompositor {
1530
1909
  this.target.techniques.execute(this.target, cmds, pass);
1531
1910
  }
1532
1911
  }
1533
- class MRTFrameBuffers extends FrameBuffers {
1534
- init(textures, depth, depthMs) {
1535
- if (!super.init(textures, depth, depthMs))
1536
- return false;
1537
- (0, core_bentley_1.assert)(undefined === this.opaqueAll);
1538
- if (!this.initPotentialMSMRTFbos(textures, depth, depthMs))
1539
- return false;
1540
- (0, core_bentley_1.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
1541
- const colors = [textures.accumulation, textures.revealage];
1542
- this.translucent = FrameBuffer_1.FrameBuffer.create(colors, depth);
1543
- this.clearTranslucent = FrameBuffer_1.FrameBuffer.create(colors);
1544
- // We borrow the SceneCompositor's accum and revealage textures for the surface pass.
1545
- // First we render edges, writing to our textures.
1546
- // Then we copy our textures to borrowed textures.
1547
- // Finally we render surfaces, writing to our textures and reading from borrowed textures.
1548
- (0, core_bentley_1.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
1549
- const pingPong = [textures.accumulation, textures.revealage];
1550
- this.pingPong = FrameBuffer_1.FrameBuffer.create(pingPong);
1551
- return undefined !== this.translucent
1552
- && undefined !== this.clearTranslucent
1553
- && undefined !== this.pingPong;
1554
- }
1555
- initPotentialMSMRTFbos(textures, depth, depthMs) {
1556
- const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
1557
- (0, core_bentley_1.assert)(undefined !== boundColor && undefined !== textures.color && undefined !== textures.featureId && undefined !== textures.depthAndOrder && undefined !== textures.accumulation && undefined !== textures.revealage);
1558
- const colorAndPick = [boundColor, textures.featureId, textures.depthAndOrder];
1559
- if (undefined === depthMs) {
1560
- this.opaqueAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
1561
- colorAndPick[0] = textures.color;
1562
- this.opaqueAndCompositeAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
1563
- }
1564
- else {
1565
- (0, core_bentley_1.assert)(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuff && undefined !== textures.depthAndOrderMsBuffHidden);
1566
- const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuff, textures.depthAndOrderMsBuff];
1567
- const colorAndPickFilters = [GL_1.GL.MultiSampling.Filter.Linear, GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
1568
- this.opaqueAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
1569
- colorAndPick[0] = textures.color;
1570
- this.opaqueAndCompositeAll = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
1571
- }
1572
- return undefined !== this.opaqueAll
1573
- && undefined !== this.opaqueAndCompositeAll;
1574
- }
1575
- enableOcclusion(textures, depth, depthMs) {
1576
- let rVal = super.enableOcclusion(textures, depth, depthMs);
1577
- if (undefined === depthMs) {
1578
- // If not using multisampling then we can use the accumulation and revealage textures for the hidden pick buffers,
1579
- (0, core_bentley_1.assert)(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.revealage);
1580
- const colorAndPick = [textures.color, textures.accumulation, textures.revealage];
1581
- this.opaqueAndCompositeAllHidden = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth);
1582
- rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden;
1583
- }
1584
- else {
1585
- // If multisampling then we cannot use the revealage texture for depthAndOrder for the hidden edges since it is of the wrong type for blitting,
1586
- // so instead use a special depthAndOrderHidden texture just for this purpose.
1587
- // The featureId texture is not needed for hidden edges, so the accumulation texture can be used for it if we don't blit from the multisample bufffer into it.
1588
- (0, core_bentley_1.assert)(undefined !== textures.color && undefined !== textures.accumulation && undefined !== textures.depthAndOrderHidden);
1589
- (0, core_bentley_1.assert)(undefined !== textures.colorMsBuff && undefined !== textures.featureIdMsBuffHidden && undefined !== textures.depthAndOrderMsBuffHidden);
1590
- const colorAndPick = [textures.color, textures.accumulation, textures.depthAndOrderHidden];
1591
- const colorAndPickMsBuffs = [textures.colorMsBuff, textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];
1592
- const colorAndPickFilters = [GL_1.GL.MultiSampling.Filter.Linear, GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
1593
- this.opaqueAndCompositeAllHidden = FrameBuffer_1.FrameBuffer.create(colorAndPick, depth, colorAndPickMsBuffs, colorAndPickFilters, depthMs);
1594
- // We will also need a frame buffer for copying the real pick data buffers into these hidden edge pick data buffers.
1595
- const pingPong = [textures.accumulation, textures.depthAndOrderHidden];
1596
- const pingPongMSBuffs = [textures.featureIdMsBuffHidden, textures.depthAndOrderMsBuffHidden];
1597
- const pingPongFilters = [GL_1.GL.MultiSampling.Filter.Nearest, GL_1.GL.MultiSampling.Filter.Nearest];
1598
- this.pingPongMS = FrameBuffer_1.FrameBuffer.create(pingPong, depth, pingPongMSBuffs, pingPongFilters, depthMs);
1599
- rVal = rVal && undefined !== this.opaqueAndCompositeAllHidden && (undefined === depthMs || undefined !== this.pingPongMS);
1600
- }
1601
- return rVal;
1602
- }
1603
- disableOcclusion() {
1604
- super.disableOcclusion();
1605
- this.opaqueAndCompositeAllHidden = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAllHidden);
1606
- this.pingPongMS = (0, core_bentley_1.dispose)(this.pingPongMS);
1607
- }
1608
- enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
1609
- const boundColor = System_1.System.instance.frameBufferStack.currentColorBuffer;
1610
- if (undefined === boundColor)
1611
- return;
1612
- super.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
1613
- if (undefined !== this.opaqueAll && undefined !== this.opaqueAndCompositeAll) {
1614
- if (undefined !== volClassDepth) {
1615
- let ids = [this.opaqueAll.getColor(0), this.opaqueAll.getColor(1)];
1616
- this.idsAndZ = FrameBuffer_1.FrameBuffer.create(ids, depth);
1617
- this.idsAndAltZ = FrameBuffer_1.FrameBuffer.create(ids, volClassDepth);
1618
- ids = [this.opaqueAndCompositeAll.getColor(0), this.opaqueAndCompositeAll.getColor(1)];
1619
- this.idsAndZComposite = FrameBuffer_1.FrameBuffer.create(ids, depth);
1620
- this.idsAndAltZComposite = FrameBuffer_1.FrameBuffer.create(ids, volClassDepth);
1621
- }
1622
- }
1623
- }
1624
- disableVolumeClassifier() {
1625
- super.disableVolumeClassifier();
1626
- if (undefined !== this.idsAndZ) {
1627
- this.idsAndZ = (0, core_bentley_1.dispose)(this.idsAndZ);
1628
- this.idsAndAltZ = (0, core_bentley_1.dispose)(this.idsAndAltZ);
1629
- this.idsAndZComposite = (0, core_bentley_1.dispose)(this.idsAndZComposite);
1630
- this.idsAndAltZComposite = (0, core_bentley_1.dispose)(this.idsAndAltZComposite);
1631
- }
1632
- }
1633
- enableMultiSampling(textures, depth, depthMS) {
1634
- super.enableMultiSampling(textures, depth, depthMS);
1635
- this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
1636
- this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
1637
- return this.initPotentialMSMRTFbos(textures, depth, depthMS);
1638
- }
1639
- disableMultiSampling(textures, depth) {
1640
- this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
1641
- this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
1642
- if (!this.initPotentialMSMRTFbos(textures, depth, undefined))
1643
- return false;
1644
- return super.disableMultiSampling(textures, depth);
1645
- }
1646
- get isDisposed() {
1647
- return super.isDisposed
1648
- && undefined === this.opaqueAll
1649
- && undefined === this.opaqueAndCompositeAll
1650
- && undefined === this.opaqueAndCompositeAllHidden
1651
- && undefined === this.pingPong
1652
- && undefined === this.pingPongMS
1653
- && undefined === this.translucent
1654
- && undefined === this.clearTranslucent
1655
- && undefined === this.idsAndZ
1656
- && undefined === this.idsAndAltZ
1657
- && undefined === this.idsAndZComposite
1658
- && undefined === this.idsAndAltZComposite;
1659
- }
1660
- dispose() {
1661
- super.dispose();
1662
- this.opaqueAll = (0, core_bentley_1.dispose)(this.opaqueAll);
1663
- this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAll);
1664
- this.opaqueAndCompositeAll = (0, core_bentley_1.dispose)(this.opaqueAndCompositeAllHidden);
1665
- this.pingPong = (0, core_bentley_1.dispose)(this.pingPong);
1666
- this.pingPongMS = (0, core_bentley_1.dispose)(this.pingPongMS);
1667
- this.translucent = (0, core_bentley_1.dispose)(this.translucent);
1668
- this.clearTranslucent = (0, core_bentley_1.dispose)(this.clearTranslucent);
1669
- this.idsAndZ = (0, core_bentley_1.dispose)(this.idsAndZ);
1670
- this.idsAndAltZ = (0, core_bentley_1.dispose)(this.idsAndAltZ);
1671
- this.idsAndZComposite = (0, core_bentley_1.dispose)(this.idsAndZComposite);
1672
- this.idsAndAltZComposite = (0, core_bentley_1.dispose)(this.idsAndAltZComposite);
1673
- }
1674
- }
1675
- class MRTGeometry extends Geometry {
1676
- collectStatistics(stats) {
1677
- super.collectStatistics(stats);
1678
- collectGeometryStatistics(this.copyPickBuffers, stats);
1679
- collectGeometryStatistics(this.clearTranslucent, stats);
1680
- collectGeometryStatistics(this.clearPickAndColor, stats);
1681
- }
1682
- init(textures) {
1683
- if (!super.init(textures))
1684
- return false;
1685
- (0, core_bentley_1.assert)(undefined === this.copyPickBuffers);
1686
- this.copyPickBuffers = CachedGeometry_1.CopyPickBufferGeometry.createGeometry(textures.featureId.getHandle(), textures.depthAndOrder.getHandle());
1687
- this.clearTranslucent = CachedGeometry_1.ViewportQuadGeometry.create(16 /* OITClearTranslucent */);
1688
- this.clearPickAndColor = CachedGeometry_1.ViewportQuadGeometry.create(21 /* ClearPickAndColor */);
1689
- return undefined !== this.copyPickBuffers && undefined !== this.clearTranslucent && undefined !== this.clearPickAndColor;
1690
- }
1691
- get isDisposed() {
1692
- return super.isDisposed
1693
- && undefined === this.copyPickBuffers
1694
- && undefined === this.clearTranslucent
1695
- && undefined === this.clearPickAndColor;
1696
- }
1697
- dispose() {
1698
- super.dispose();
1699
- this.copyPickBuffers = (0, core_bentley_1.dispose)(this.copyPickBuffers);
1700
- this.clearTranslucent = (0, core_bentley_1.dispose)(this.clearTranslucent);
1701
- this.clearPickAndColor = (0, core_bentley_1.dispose)(this.clearPickAndColor);
1702
- }
1703
- }
1704
- // SceneCompositor used when multiple render targets are supported (WEBGL_draw_buffers exists and supports at least 4 color attachments).
1705
- class MRTCompositor extends Compositor {
1706
- constructor(target) {
1707
- super(target, new MRTFrameBuffers(), new MRTGeometry());
1708
- }
1709
- get currentRenderTargetIndex() {
1710
- (0, core_bentley_1.assert)(false, "MRT is supported");
1711
- return 0;
1712
- }
1713
- set currentRenderTargetIndex(_index) {
1714
- (0, core_bentley_1.assert)(false, "MRT is supported");
1715
- }
1716
- get featureIds() { return this.getSamplerTexture(this._readPickDataFromPingPong ? 0 : 1); }
1717
- get depthAndOrder() { return this.getSamplerTexture(this._readPickDataFromPingPong ? 1 : 2); }
1718
- get _fbos() { return this._frameBuffers; }
1719
- get _geometry() { return this._geom; }
1720
- enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
1721
- this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
1722
- }
1723
- disableVolumeClassifierFbos() { this._fbos.disableVolumeClassifier(); }
1724
- enableMultiSampling() {
1725
- if (!super.enableMultiSampling())
1726
- return false;
1727
- (0, core_bentley_1.assert)(undefined !== this._depth && undefined !== this._depthMS);
1728
- return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);
1729
- }
1730
- disableMultiSampling() {
1731
- (0, core_bentley_1.assert)(undefined !== this._depth);
1732
- if (!this._fbos.disableMultiSampling(this._textures, this._depth))
1733
- return false;
1734
- return super.disableMultiSampling();
1735
- }
1736
- clearOpaque(needComposite) {
1737
- const fbo = needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll;
1738
- const system = System_1.System.instance;
1739
- system.frameBufferStack.execute(fbo, true, this.useMsBuffers, () => {
1740
- // Clear pick data buffers to 0's and color buffer to background color
1741
- // (0,0,0,0) in elementID0 and ElementID1 buffers indicates invalid element id
1742
- // (0,0,0,0) in DepthAndOrder buffer indicates render order 0 and encoded depth of 0 (= far plane)
1743
- system.applyRenderState(this._noDepthMaskRenderState);
1744
- const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geometry.clearPickAndColor);
1745
- this.target.techniques.draw(params);
1746
- // Clear depth buffer
1747
- system.applyRenderState(RenderState_1.RenderState.defaults); // depthMask == true.
1748
- system.context.clearDepth(1.0);
1749
- system.context.clear(GL_1.GL.BufferBit.Depth);
1750
- });
1751
- }
1752
- renderOpaque(commands, compositeFlags, renderForReadPixels) {
1753
- if (0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */) && !renderForReadPixels) {
1754
- this.renderOpaqueAO(commands);
1755
- return;
1756
- }
1757
- const needComposite = 0 /* None */ !== compositeFlags;
1758
- const fbStack = System_1.System.instance.frameBufferStack;
1759
- // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels() or ambient occlusion).
1760
- let fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
1761
- const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
1762
- this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
1763
- fbStack.execute(fbo, true, useMsBuffers, () => {
1764
- this.drawPass(commands, 2 /* OpaqueLinear */);
1765
- this.drawPass(commands, 3 /* OpaquePlanar */, true);
1766
- if (renderForReadPixels) {
1767
- this.drawPass(commands, 4 /* OpaqueGeneral */, true);
1768
- if (useMsBuffers)
1769
- fbo.blitMsBuffersToTextures(true);
1770
- }
1771
- });
1772
- this._readPickDataFromPingPong = false;
1773
- // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.
1774
- if (!renderForReadPixels) {
1775
- fbo = (needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor);
1776
- fbStack.execute(fbo, true, useMsBuffers, () => {
1777
- this.drawPass(commands, 4 /* OpaqueGeneral */, false);
1778
- this.drawPass(commands, 8 /* HiddenEdge */, false);
1779
- });
1780
- if (useMsBuffers)
1781
- fbo.blitMsBuffersToTextures(needComposite);
1782
- }
1783
- }
1784
- renderOpaqueAO(commands) {
1785
- const fbStack = System_1.System.instance.frameBufferStack;
1786
- const haveHiddenEdges = 0 !== commands.getCommands(8 /* HiddenEdge */).length;
1787
- // Output the linear, planar, and pickable surfaces to color and pick data buffers.
1788
- let fbo = this._fbos.opaqueAndCompositeAll;
1789
- const useMsBuffers = fbo.isMultisampled && this.useMsBuffers;
1790
- this._readPickDataFromPingPong = !useMsBuffers; // if multisampling then can read pick textures directly.
1791
- fbStack.execute(fbo, true, useMsBuffers, () => {
1792
- this.drawPass(commands, 2 /* OpaqueLinear */);
1793
- this.drawPass(commands, 3 /* OpaquePlanar */, true);
1794
- this._primitiveDrawState = PrimitiveDrawState.Pickable;
1795
- this.drawPass(commands, 4 /* OpaqueGeneral */, true);
1796
- this._primitiveDrawState = PrimitiveDrawState.Both;
1797
- if (useMsBuffers)
1798
- fbo.blitMsBuffersToTextures(true);
1799
- });
1800
- this._readPickDataFromPingPong = false;
1801
- // Output the non-pickable surfaces and hidden edges to just the color buffer.
1802
- fbo = this._fbos.opaqueAndCompositeColor;
1803
- fbStack.execute(fbo, true, useMsBuffers, () => {
1804
- this._primitiveDrawState = PrimitiveDrawState.NonPickable;
1805
- this.drawPass(commands, 4 /* OpaqueGeneral */, false);
1806
- if (haveHiddenEdges)
1807
- this.drawPass(commands, 8 /* HiddenEdge */, false);
1808
- this._primitiveDrawState = PrimitiveDrawState.Both;
1809
- });
1810
- if (useMsBuffers)
1811
- fbo.blitMsBuffersToTextures(true);
1812
- // If there are no hidden edges, then we're done & can run the AO passes using the normal depthAndOrder texture.
1813
- if (haveHiddenEdges) {
1814
- // AO needs the pick data (orderAndDepth) for the hidden edges. We don't want it in with the other pick data though since they are not pickable, so we will use other textures.
1815
- // If not multisampling we will re-use the ping-pong/transparency textures since we are done with ping-ponging at this point and transparency happens later.
1816
- // If multisampling then we will use the accumulation texture for featureIDs and a special texture for depthAndOrder since the revealage texture is not the right type for multisampling.
1817
- // First we will need to copy what's in the pick buffers so far into the hidden pick buffers.
1818
- System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
1819
- fbo = (useMsBuffers ? this._fbos.pingPongMS : this._fbos.pingPong);
1820
- fbStack.execute(fbo, true, useMsBuffers, () => {
1821
- const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geometry.copyPickBuffers);
1822
- this.target.techniques.draw(params);
1823
- });
1824
- if (useMsBuffers)
1825
- fbo.blitMsBuffersToTextures(false, 1); // only want to blit the depth/order target
1826
- // Now draw the hidden edges, using an fbo which places their depth/order into the hidden pick buffers.
1827
- // Since we are not writing to the actual pick buffers we let this._readPickDataFromPingPong remain false.
1828
- fbo = this._fbos.opaqueAndCompositeAllHidden;
1829
- this._primitiveDrawState = PrimitiveDrawState.Pickable;
1830
- fbStack.execute(fbo, true, useMsBuffers, () => {
1831
- this.drawPass(commands, 8 /* HiddenEdge */, false);
1832
- });
1833
- this._primitiveDrawState = PrimitiveDrawState.Both;
1834
- if (useMsBuffers) {
1835
- // Only want to blit the color and depth/order targets as the featureId target is not blit-able and will generate a GL error.
1836
- fbo.blitMsBuffersToTextures(false, 0);
1837
- fbo.blitMsBuffersToTextures(false, 2);
1838
- }
1839
- this._needHiddenEdges = false;
1840
- }
1841
- this._needHiddenEdges = haveHiddenEdges; // this will cause the alternate renderAndOrder texture with the hidden edges to be read for the 2nd AO blur pass.
1842
- this.renderAmbientOcclusion();
1843
- this._needHiddenEdges = false;
1844
- }
1845
- renderLayers(commands, needComposite, pass) {
1846
- const fbo = (needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll);
1847
- const useMsBuffers = 1 /* OpaqueLayers */ === pass && fbo.isMultisampled && this.useMsBuffers;
1848
- this._readPickDataFromPingPong = !useMsBuffers;
1849
- System_1.System.instance.frameBufferStack.execute(fbo, true, useMsBuffers, () => {
1850
- this.drawPass(commands, pass, true);
1851
- });
1852
- this._readPickDataFromPingPong = false;
1853
- }
1854
- renderForVolumeClassification(commands, compositeFlags, renderForReadPixels) {
1855
- const needComposite = 0 /* None */ !== compositeFlags;
1856
- const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
1857
- const fbStack = System_1.System.instance.frameBufferStack;
1858
- if (renderForReadPixels || needAO) {
1859
- this._readPickDataFromPingPong = true;
1860
- fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeAll : this._fbos.opaqueAll, true, this.useMsBuffers, () => {
1861
- this.drawPass(commands, 4 /* OpaqueGeneral */, true, 19 /* VolumeClassifiedRealityData */);
1862
- });
1863
- }
1864
- else {
1865
- this._readPickDataFromPingPong = false;
1866
- fbStack.execute(needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor, true, this.useMsBuffers, () => {
1867
- this.drawPass(commands, 4 /* OpaqueGeneral */, false, 19 /* VolumeClassifiedRealityData */);
1868
- });
1869
- }
1870
- }
1871
- renderIndexedClassifierForReadPixels(cmds, state, renderForIntersectingVolumes, needComposite) {
1872
- this._readPickDataFromPingPong = true;
1873
- const fbo = (renderForIntersectingVolumes ? (needComposite ? this._fbos.idsAndZComposite : this._fbos.idsAndZ)
1874
- : (needComposite ? this._fbos.idsAndAltZComposite : this._fbos.idsAndAltZ));
1875
- System_1.System.instance.frameBufferStack.execute(fbo, true, false, () => {
1876
- System_1.System.instance.applyRenderState(state);
1877
- this.target.techniques.execute(this.target, cmds, 4 /* OpaqueGeneral */);
1878
- });
1879
- this._readPickDataFromPingPong = false;
1880
- }
1881
- clearTranslucent() {
1882
- System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
1883
- System_1.System.instance.frameBufferStack.execute(this._fbos.clearTranslucent, true, false, () => {
1884
- const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geometry.clearTranslucent);
1885
- this.target.techniques.draw(params);
1886
- });
1887
- }
1888
- renderTranslucent(commands) {
1889
- System_1.System.instance.frameBufferStack.execute(this._fbos.translucent, true, false, () => {
1890
- this.drawPass(commands, 7 /* Translucent */);
1891
- });
1892
- }
1893
- pingPong() {
1894
- if (this._fbos.opaqueAll.isMultisampled && this.useMsBuffers) {
1895
- // If we are multisampling we can just blit the FeatureId and DepthAndOrder MS buffers to their textures.
1896
- this._fbos.opaqueAll.blitMsBuffersToTextures(false, 1);
1897
- this._fbos.opaqueAll.blitMsBuffersToTextures(false, 2);
1898
- }
1899
- else {
1900
- System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
1901
- System_1.System.instance.frameBufferStack.execute(this._fbos.pingPong, true, this.useMsBuffers, () => {
1902
- const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, this._geometry.copyPickBuffers);
1903
- this.target.techniques.draw(params);
1904
- });
1905
- }
1906
- }
1907
- getBackgroundFbo(needComposite) { return needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor; }
1908
- get _samplerFbo() { return this._readPickDataFromPingPong ? this._fbos.pingPong : this._fbos.opaqueAll; }
1909
- getSamplerTexture(index) { return this._samplerFbo.getColor(index); }
1910
- }
1911
- class MPFrameBuffers extends FrameBuffers {
1912
- init(textures, depth) {
1913
- if (!super.init(textures, depth, undefined))
1914
- return false;
1915
- (0, core_bentley_1.assert)(undefined === this.accumulation);
1916
- this.accumulation = FrameBuffer_1.FrameBuffer.create([textures.accumulation], depth);
1917
- this.revealage = FrameBuffer_1.FrameBuffer.create([textures.revealage], depth);
1918
- this.featureId = FrameBuffer_1.FrameBuffer.create([textures.featureId], depth);
1919
- return undefined !== this.accumulation && undefined !== this.revealage && undefined !== this.featureId;
1920
- }
1921
- enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
1922
- super.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
1923
- if (undefined !== this.featureId) {
1924
- this.featureIdWithDepth = FrameBuffer_1.FrameBuffer.create([this.featureId.getColor(0)], depth);
1925
- this.featureIdWithDepthAltZ = FrameBuffer_1.FrameBuffer.create([this.featureId.getColor(0)], volClassDepth);
1926
- }
1927
- }
1928
- disableVolumeClassifier() {
1929
- super.disableVolumeClassifier();
1930
- if (undefined !== this.featureIdWithDepth) {
1931
- this.featureIdWithDepth = (0, core_bentley_1.dispose)(this.featureIdWithDepth);
1932
- this.featureIdWithDepthAltZ = (0, core_bentley_1.dispose)(this.featureIdWithDepthAltZ);
1933
- }
1934
- }
1935
- get isDisposed() {
1936
- return super.isDisposed
1937
- && undefined === this.accumulation
1938
- && undefined === this.revealage
1939
- && undefined === this.featureId
1940
- && undefined === this.featureIdWithDepth
1941
- && undefined === this.featureIdWithDepthAltZ;
1942
- }
1943
- dispose() {
1944
- super.dispose();
1945
- this.accumulation = (0, core_bentley_1.dispose)(this.accumulation);
1946
- this.revealage = (0, core_bentley_1.dispose)(this.revealage);
1947
- this.featureId = (0, core_bentley_1.dispose)(this.featureId);
1948
- this.disableVolumeClassifier();
1949
- }
1950
- }
1951
- class MPGeometry extends Geometry {
1952
- collectStatistics(stats) {
1953
- super.collectStatistics(stats);
1954
- collectGeometryStatistics(this.copyColor, stats);
1955
- }
1956
- init(textures) {
1957
- if (!super.init(textures))
1958
- return false;
1959
- (0, core_bentley_1.assert)(undefined === this.copyColor);
1960
- this.copyColor = CachedGeometry_1.SingleTexturedViewportQuadGeometry.createGeometry(textures.featureId.getHandle(), 18 /* CopyColor */);
1961
- return undefined !== this.copyColor;
1962
- }
1963
- get isDisposed() { return super.isDisposed && undefined === this.copyColor; }
1964
- dispose() {
1965
- super.dispose();
1966
- this.copyColor = (0, core_bentley_1.dispose)(this.copyColor);
1967
- }
1968
- }
1969
- // Compositor used when multiple render targets are not supported (WEBGL_draw_buffers not available or fewer than 4 color attachments supported).
1970
- // This falls back to multi-pass rendering in place of MRT rendering, which has obvious performance implications.
1971
- // The chief use case is iOS.
1972
- class MPCompositor extends Compositor {
1973
- constructor(target) {
1974
- super(target, new MPFrameBuffers(), new MPGeometry());
1975
- this._currentRenderTargetIndex = 0;
1976
- this._drawMultiPassDepth = true;
1977
- this._opaqueRenderStateNoZWt = new RenderState_1.RenderState();
1978
- this._scratchBgColor = new FloatRGBA_1.FloatRgba();
1979
- this._opaqueRenderStateNoZWt.flags.depthTest = true;
1980
- this._opaqueRenderStateNoZWt.flags.depthMask = false;
1981
- }
1982
- getRenderState(pass) {
1983
- switch (pass) {
1984
- case 2 /* OpaqueLinear */:
1985
- case 3 /* OpaquePlanar */:
1986
- case 4 /* OpaqueGeneral */:
1987
- return this._drawMultiPassDepth ? this._opaqueRenderState : this._opaqueRenderStateNoZWt;
1988
- }
1989
- return super.getRenderState(pass);
1990
- }
1991
- get _fbos() { return this._frameBuffers; }
1992
- get _geometry() { return this._geom; }
1993
- get currentRenderTargetIndex() { return this._currentRenderTargetIndex; }
1994
- set currentRenderTargetIndex(index) { this._currentRenderTargetIndex = index; }
1995
- get featureIds() { return this._readPickDataFromPingPong ? this._textures.accumulation : this._textures.featureId; }
1996
- get depthAndOrder() { return this._readPickDataFromPingPong ? this._textures.revealage : this._textures.depthAndOrder; }
1997
- getBackgroundFbo(needComposite) { return needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor; }
1998
- enableVolumeClassifierFbos(textures, depth, volClassDepth, depthMS, volClassDepthMS) {
1999
- this._fbos.enableVolumeClassifier(textures, depth, volClassDepth, depthMS, volClassDepthMS);
2000
- }
2001
- disableVolumeClassifierFbos() { this._fbos.disableVolumeClassifier(); }
2002
- clearOpaque(needComposite) {
2003
- const bg = this._scratchBgColor;
2004
- this.target.uniforms.style.cloneBackgroundRgba(bg);
2005
- this.clearFbo(needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor, bg.red, bg.green, bg.blue, bg.alpha, true);
2006
- this.clearFbo(this._fbos.depthAndOrder, 0, 0, 0, 0, false);
2007
- this.clearFbo(this._fbos.featureId, 0, 0, 0, 0, false);
2008
- }
2009
- clearHiddenPick() {
2010
- }
2011
- renderOpaque(commands, compositeFlags, renderForReadPixels) {
2012
- if (0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */) && !renderForReadPixels) {
2013
- this.renderOpaqueAO(commands);
2014
- return;
2015
- }
2016
- // Output the first 2 passes to color and pick data buffers. (All 3 in the case of rendering for readPixels()).
2017
- this._readPickDataFromPingPong = true;
2018
- const needComposite = 0 /* None */ !== compositeFlags;
2019
- const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
2020
- const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor;
2021
- this.drawOpaquePass(colorFbo, commands, 2 /* OpaqueLinear */, false);
2022
- this.drawOpaquePass(colorFbo, commands, 3 /* OpaquePlanar */, true);
2023
- if (renderForReadPixels || needAO)
2024
- this.drawOpaquePass(colorFbo, commands, 4 /* OpaqueGeneral */, true);
2025
- this._readPickDataFromPingPong = false;
2026
- // The general pass (and following) will not bother to write to pick buffers and so can read from the actual pick buffers.
2027
- if (!renderForReadPixels) {
2028
- System_1.System.instance.frameBufferStack.execute(colorFbo, true, false, () => {
2029
- this._drawMultiPassDepth = true; // for OpaqueGeneral
2030
- this.drawPass(commands, 4 /* OpaqueGeneral */, false);
2031
- this.drawPass(commands, 8 /* HiddenEdge */, false);
2032
- });
2033
- }
2034
- }
2035
- renderOpaqueAO(commands) {
2036
- const fbStack = System_1.System.instance.frameBufferStack;
2037
- const haveHiddenEdges = 0 !== commands.getCommands(8 /* HiddenEdge */).length;
2038
- // Output the linear, planar, and pickable surfaces to color and pick data buffers.
2039
- this._readPickDataFromPingPong = true;
2040
- const colorFbo = this._fbos.opaqueAndCompositeColor;
2041
- this.drawOpaquePass(colorFbo, commands, 2 /* OpaqueLinear */, false);
2042
- this.drawOpaquePass(colorFbo, commands, 3 /* OpaquePlanar */, true);
2043
- this._primitiveDrawState = PrimitiveDrawState.Pickable;
2044
- this.drawOpaquePass(colorFbo, commands, 4 /* OpaqueGeneral */, true);
2045
- this._primitiveDrawState = PrimitiveDrawState.Both;
2046
- this._readPickDataFromPingPong = false;
2047
- // Output the non-pickable surfaces and hidden edges to just the color buffer.
2048
- fbStack.execute(colorFbo, true, false, () => {
2049
- this._drawMultiPassDepth = true; // for OpaqueGeneral
2050
- this._primitiveDrawState = PrimitiveDrawState.NonPickable;
2051
- this.drawPass(commands, 4 /* OpaqueGeneral */, false);
2052
- if (haveHiddenEdges)
2053
- this.drawPass(commands, 8 /* HiddenEdge */, false);
2054
- this._primitiveDrawState = PrimitiveDrawState.Both;
2055
- });
2056
- if (haveHiddenEdges) {
2057
- // First copy the depthAndOrder texture to the revealage texture which we will use for the hidden edge pick data (don't need full pick with featureIds).
2058
- System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
2059
- this.copyFbo(this._textures.depthAndOrder, this._fbos.revealage);
2060
- // So far only the non-pickable hidden edges have been drawn for AO, so we need to draw the pickable ones to the hidden depthAndOrder (revealage).
2061
- this._primitiveDrawState = PrimitiveDrawState.Pickable;
2062
- // Since we only need to draw color and depthAndOrder instead of calling drawOpaquePass just do what we need here.
2063
- this._drawMultiPassDepth = true;
2064
- fbStack.execute(colorFbo, true, false, () => this.drawPass(commands, 8 /* HiddenEdge */, false));
2065
- this._drawMultiPassDepth = false;
2066
- this._currentRenderTargetIndex = 2;
2067
- fbStack.execute(this._fbos.revealage, true, false, () => this.drawPass(commands, 8 /* HiddenEdge */, false));
2068
- this._currentRenderTargetIndex = 0;
2069
- this._readPickDataFromPingPong = false;
2070
- this._primitiveDrawState = PrimitiveDrawState.Both;
2071
- }
2072
- this._needHiddenEdges = haveHiddenEdges; // this will cause the alternate renderAndOrder texture to be read for the 2nd AO blur pass.
2073
- this.renderAmbientOcclusion();
2074
- this._needHiddenEdges = false;
2075
- }
2076
- renderLayers(commands, needComposite, pass) {
2077
- this._readPickDataFromPingPong = true;
2078
- const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor;
2079
- this.drawOpaquePass(colorFbo, commands, pass, true);
2080
- this._readPickDataFromPingPong = false;
2081
- }
2082
- renderForVolumeClassification(commands, compositeFlags, renderForReadPixels) {
2083
- const needComposite = 0 /* None */ !== compositeFlags;
2084
- const needAO = 0 /* None */ !== (compositeFlags & 4 /* AmbientOcclusion */);
2085
- const colorFbo = needComposite ? this._fbos.opaqueAndCompositeColor : this._fbos.opaqueColor;
2086
- if (renderForReadPixels || needAO) {
2087
- this._readPickDataFromPingPong = true;
2088
- this.drawOpaquePass(colorFbo, commands, 4 /* OpaqueGeneral */, true, 19 /* VolumeClassifiedRealityData */);
2089
- if (needAO)
2090
- this.renderAmbientOcclusion();
2091
- }
2092
- else {
2093
- this._readPickDataFromPingPong = false;
2094
- System_1.System.instance.frameBufferStack.execute(colorFbo, true, false, () => {
2095
- this._drawMultiPassDepth = true; // for OpaqueGeneral
2096
- this.drawPass(commands, 4 /* OpaqueGeneral */, false, 19 /* VolumeClassifiedRealityData */);
2097
- });
2098
- }
2099
- }
2100
- renderIndexedClassifierForReadPixels(cmds, state, renderForIntersectingVolumes, _needComposite) {
2101
- // Note that we only need to render to the Id textures here, no color, since the color buffer is not used in readPixels.
2102
- this._readPickDataFromPingPong = true;
2103
- this._currentRenderTargetIndex = 1;
2104
- const fbo = (renderForIntersectingVolumes ? this._fbos.featureIdWithDepth : this._fbos.featureIdWithDepthAltZ);
2105
- System_1.System.instance.frameBufferStack.execute(fbo, true, false, () => {
2106
- System_1.System.instance.applyRenderState(state);
2107
- this.target.techniques.execute(this.target, cmds, 4 /* OpaqueGeneral */);
2108
- });
2109
- this._currentRenderTargetIndex = 0;
2110
- this._readPickDataFromPingPong = false;
2111
- }
2112
- // ###TODO: For readPixels(), could skip rendering color...also could skip rendering depth and/or element ID depending upon selector...
2113
- drawOpaquePass(colorFbo, commands, pass, pingPong, cmdPass = 255 /* None */) {
2114
- const commandPass = 255 /* None */ === cmdPass ? pass : cmdPass;
2115
- const stack = System_1.System.instance.frameBufferStack;
2116
- this._drawMultiPassDepth = true;
2117
- if (!this.target.isReadPixelsInProgress) {
2118
- stack.execute(colorFbo, true, false, () => this.drawPass(commands, pass, pingPong, commandPass));
2119
- this._drawMultiPassDepth = false;
2120
- }
2121
- this._currentRenderTargetIndex++;
2122
- if (!this.target.isReadPixelsInProgress || Pixel_1.Pixel.Selector.None !== (this.target.readPixelsSelector & Pixel_1.Pixel.Selector.Feature)) {
2123
- stack.execute(this._fbos.featureId, true, false, () => this.drawPass(commands, pass, pingPong && this._drawMultiPassDepth, commandPass));
2124
- this._drawMultiPassDepth = false;
2125
- }
2126
- this._currentRenderTargetIndex++;
2127
- if (!this.target.isReadPixelsInProgress || Pixel_1.Pixel.Selector.None !== (this.target.readPixelsSelector & Pixel_1.Pixel.Selector.GeometryAndDistance)) {
2128
- stack.execute(this._fbos.depthAndOrder, true, false, () => this.drawPass(commands, pass, pingPong && this._drawMultiPassDepth, commandPass));
2129
- }
2130
- this._currentRenderTargetIndex = 0;
2131
- }
2132
- clearTranslucent() {
2133
- this.clearFbo(this._fbos.accumulation, 0, 0, 0, 1, false);
2134
- this.clearFbo(this._fbos.revealage, 1, 0, 0, 1, false);
2135
- }
2136
- renderTranslucent(commands) {
2137
- System_1.System.instance.frameBufferStack.execute(this._fbos.accumulation, true, false, () => {
2138
- this.drawPass(commands, 7 /* Translucent */);
2139
- });
2140
- this._currentRenderTargetIndex = 1;
2141
- System_1.System.instance.frameBufferStack.execute(this._fbos.revealage, true, false, () => {
2142
- this.drawPass(commands, 7 /* Translucent */);
2143
- });
2144
- this._currentRenderTargetIndex = 0;
2145
- }
2146
- pingPong() {
2147
- System_1.System.instance.applyRenderState(this._noDepthMaskRenderState);
2148
- this.copyFbo(this._textures.featureId, this._fbos.accumulation);
2149
- this.copyFbo(this._textures.depthAndOrder, this._fbos.revealage);
2150
- }
2151
- copyFbo(src, dst) {
2152
- const geom = this._geometry.copyColor;
2153
- geom.texture = src.getHandle();
2154
- System_1.System.instance.frameBufferStack.execute(dst, true, false, () => {
2155
- const params = (0, ScratchDrawParams_1.getDrawParams)(this.target, geom);
2156
- this.target.techniques.draw(params);
2157
- });
2158
- }
2159
- clearFbo(fbo, red, green, blue, alpha, andDepth) {
2160
- const system = System_1.System.instance;
2161
- const gl = system.context;
2162
- system.frameBufferStack.execute(fbo, true, false, () => {
2163
- system.applyRenderState(andDepth ? RenderState_1.RenderState.defaults : this._noDepthMaskRenderState);
2164
- gl.clearColor(red, green, blue, alpha);
2165
- let bit = GL_1.GL.BufferBit.Color;
2166
- if (andDepth) {
2167
- gl.clearDepth(1.0);
2168
- bit |= GL_1.GL.BufferBit.Depth;
2169
- }
2170
- gl.clear(bit);
2171
- });
2172
- }
2173
- }
2174
1912
  //# sourceMappingURL=SceneCompositor.js.map