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