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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) 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 +3 -3
  16. package/lib/cjs/IModelApp.d.ts.map +1 -1
  17. package/lib/cjs/IModelApp.js +2 -2
  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/Tiles.d.ts +4 -0
  39. package/lib/cjs/Tiles.d.ts.map +1 -1
  40. package/lib/cjs/Tiles.js +11 -0
  41. package/lib/cjs/Tiles.js.map +1 -1
  42. package/lib/cjs/ViewContext.js +1 -1
  43. package/lib/cjs/ViewContext.js.map +1 -1
  44. package/lib/cjs/ViewManager.d.ts.map +1 -1
  45. package/lib/cjs/ViewManager.js +2 -3
  46. package/lib/cjs/ViewManager.js.map +1 -1
  47. package/lib/cjs/ViewState.d.ts +4 -5
  48. package/lib/cjs/ViewState.d.ts.map +1 -1
  49. package/lib/cjs/ViewState.js +0 -1
  50. package/lib/cjs/ViewState.js.map +1 -1
  51. package/lib/cjs/Viewport.d.ts +53 -4
  52. package/lib/cjs/Viewport.d.ts.map +1 -1
  53. package/lib/cjs/Viewport.js +82 -34
  54. package/lib/cjs/Viewport.js.map +1 -1
  55. package/lib/cjs/extension/ExtensionImpl.js +2 -2
  56. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  57. package/lib/cjs/extension/ExtensionRuntime.js +3 -0
  58. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  59. package/lib/cjs/render/GraphicBranch.d.ts +3 -0
  60. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  61. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  62. package/lib/cjs/render/GraphicBuilder.d.ts +1 -1
  63. package/lib/cjs/render/GraphicBuilder.js +1 -1
  64. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  65. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  66. package/lib/cjs/render/MockRender.js +3 -0
  67. package/lib/cjs/render/MockRender.js.map +1 -1
  68. package/lib/cjs/render/RealityMeshParams.d.ts +3 -4
  69. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  70. package/lib/cjs/render/RealityMeshParams.js +9 -5
  71. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  72. package/lib/cjs/render/RenderMaterial.d.ts +1 -1
  73. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  74. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  75. package/lib/cjs/render/RenderSystem.d.ts +4 -4
  76. package/lib/cjs/render/RenderSystem.js +4 -4
  77. package/lib/cjs/render/RenderSystem.js.map +1 -1
  78. package/lib/cjs/render/RenderTarget.d.ts +1 -1
  79. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  80. package/lib/cjs/render/RenderTarget.js +1 -1
  81. package/lib/cjs/render/RenderTarget.js.map +1 -1
  82. package/lib/cjs/render/VisibleFeature.d.ts +5 -5
  83. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  84. package/lib/cjs/render/primitives/DisplayParams.d.ts.map +1 -1
  85. package/lib/cjs/render/primitives/DisplayParams.js +2 -1
  86. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  87. package/lib/cjs/render/webgl/BackgroundMapDrape.js +3 -3
  88. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  89. package/lib/cjs/render/webgl/BranchState.d.ts +3 -0
  90. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  91. package/lib/cjs/render/webgl/BranchState.js +5 -0
  92. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  93. package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
  94. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  95. package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
  96. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  97. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  98. package/lib/cjs/render/webgl/DrawCommand.js +6 -4
  99. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  100. package/lib/cjs/render/webgl/EDL.d.ts +40 -0
  101. package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
  102. package/lib/cjs/render/webgl/EDL.js +264 -0
  103. package/lib/cjs/render/webgl/EDL.js.map +1 -0
  104. package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
  105. package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
  106. package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
  107. package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
  108. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  109. package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
  110. package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
  111. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  112. package/lib/cjs/render/webgl/Layer.js +2 -2
  113. package/lib/cjs/render/webgl/LayerCommands.js +2 -2
  114. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  115. package/lib/cjs/render/webgl/PlanarClassifier.js +9 -8
  116. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  117. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  118. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  119. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  120. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  121. package/lib/cjs/render/webgl/PointCloud.js +2 -0
  122. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  123. package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
  124. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  125. package/lib/cjs/render/webgl/RealityMesh.js +8 -3
  126. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  127. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
  128. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  129. package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
  130. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  131. package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -1
  132. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  133. package/lib/cjs/render/webgl/RenderCommands.js +46 -38
  134. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  135. package/lib/cjs/render/webgl/RenderFlags.d.ts +19 -17
  136. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/RenderFlags.js +8 -6
  138. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  139. package/lib/cjs/render/webgl/SceneCompositor.d.ts +6 -1
  140. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  141. package/lib/cjs/render/webgl/SceneCompositor.js +195 -76
  142. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  143. package/lib/cjs/render/webgl/SolarShadowMap.js +3 -3
  144. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  145. package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
  146. package/lib/cjs/render/webgl/Target.js +7 -7
  147. package/lib/cjs/render/webgl/Target.js.map +1 -1
  148. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  149. package/lib/cjs/render/webgl/Technique.js +18 -3
  150. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  151. package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
  152. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  153. package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
  154. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  155. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  156. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  157. package/lib/cjs/render/webgl/UniformHandle.js +1 -2
  158. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  159. package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
  160. package/lib/cjs/render/webgl/glsl/EDL.d.ts +14 -0
  161. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
  162. package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
  163. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
  164. package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
  165. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  166. package/lib/cjs/render/webgl/glsl/Surface.js +1 -1
  167. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  168. package/lib/cjs/tile/BatchedTileIdMap.js +1 -1
  169. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  170. package/lib/cjs/tile/DynamicIModelTile.js +1 -1
  171. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  172. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  173. package/lib/cjs/tile/GltfReader.js +4 -2
  174. package/lib/cjs/tile/GltfReader.js.map +1 -1
  175. package/lib/cjs/tile/IModelTile.js +1 -1
  176. package/lib/cjs/tile/IModelTile.js.map +1 -1
  177. package/lib/cjs/tile/ImdlReader.d.ts +6 -0
  178. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  179. package/lib/cjs/tile/ImdlReader.js +20 -7
  180. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  181. package/lib/cjs/tile/OrbitGtTileTree.d.ts +14 -1
  182. package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
  183. package/lib/cjs/tile/OrbitGtTileTree.js +30 -11
  184. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  185. package/lib/cjs/tile/RealityModelTileTree.d.ts +4 -3
  186. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  187. package/lib/cjs/tile/RealityModelTileTree.js +61 -53
  188. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  189. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  190. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  191. package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
  192. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  193. package/lib/cjs/tile/RealityTileTree.js +9 -4
  194. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  195. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  196. package/lib/cjs/tile/TileAdmin.js +15 -7
  197. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  198. package/lib/cjs/tile/TileDrawArgs.js +1 -1
  199. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  200. package/lib/cjs/tile/TileTreeReference.d.ts +3 -0
  201. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  202. package/lib/cjs/tile/TileTreeReference.js +3 -0
  203. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  204. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +14 -1
  205. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  206. package/lib/cjs/tile/map/ArcGisUtilities.js +57 -27
  207. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  208. package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
  209. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  210. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  211. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  212. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  213. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  214. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  215. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  216. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  217. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  218. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  219. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  220. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  221. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  222. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
  223. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  224. package/lib/cjs/tile/map/ImageryTileTree.d.ts +26 -1
  225. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  226. package/lib/cjs/tile/map/ImageryTileTree.js +54 -4
  227. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  228. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  229. package/lib/cjs/tile/map/MapLayerImageryFormats.js +3 -2
  230. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  231. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +12 -2
  232. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  233. package/lib/cjs/tile/map/MapLayerImageryProvider.js +16 -4
  234. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  235. package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -1
  236. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  237. package/lib/cjs/tile/map/MapLayerSources.js +2 -0
  238. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  239. package/lib/cjs/tile/map/MapTile.d.ts +5 -0
  240. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  241. package/lib/cjs/tile/map/MapTile.js +33 -14
  242. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  243. package/lib/cjs/tile/map/MapTileTree.d.ts +42 -3
  244. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  245. package/lib/cjs/tile/map/MapTileTree.js +126 -9
  246. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  247. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  248. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  249. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +26 -0
  250. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  251. package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
  252. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  253. package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
  254. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  255. package/lib/cjs/tools/ClipViewTool.js +2 -2
  256. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  257. package/lib/cjs/tools/MeasureTool.js +2 -2
  258. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  259. package/lib/esm/AccuDraw.js +1 -1
  260. package/lib/esm/AccuDraw.js.map +1 -1
  261. package/lib/esm/BriefcaseConnection.d.ts +23 -3
  262. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  263. package/lib/esm/BriefcaseConnection.js +11 -3
  264. package/lib/esm/BriefcaseConnection.js.map +1 -1
  265. package/lib/esm/CheckpointConnection.js +1 -1
  266. package/lib/esm/CheckpointConnection.js.map +1 -1
  267. package/lib/esm/DisplayStyleState.d.ts +2 -2
  268. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  269. package/lib/esm/DisplayStyleState.js +12 -4
  270. package/lib/esm/DisplayStyleState.js.map +1 -1
  271. package/lib/esm/IModelApp.d.ts +3 -3
  272. package/lib/esm/IModelApp.d.ts.map +1 -1
  273. package/lib/esm/IModelApp.js +2 -2
  274. package/lib/esm/IModelApp.js.map +1 -1
  275. package/lib/esm/IModelConnection.d.ts +4 -6
  276. package/lib/esm/IModelConnection.d.ts.map +1 -1
  277. package/lib/esm/IModelConnection.js +6 -7
  278. package/lib/esm/IModelConnection.js.map +1 -1
  279. package/lib/esm/IpcApp.d.ts +1 -1
  280. package/lib/esm/IpcApp.d.ts.map +1 -1
  281. package/lib/esm/IpcApp.js +1 -1
  282. package/lib/esm/IpcApp.js.map +1 -1
  283. package/lib/esm/NativeApp.d.ts +8 -1
  284. package/lib/esm/NativeApp.d.ts.map +1 -1
  285. package/lib/esm/NativeApp.js +10 -6
  286. package/lib/esm/NativeApp.js.map +1 -1
  287. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  288. package/lib/esm/NoRenderApp.js +3 -0
  289. package/lib/esm/NoRenderApp.js.map +1 -1
  290. package/lib/esm/SpatialViewState.d.ts +4 -1
  291. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  292. package/lib/esm/SpatialViewState.js +19 -5
  293. package/lib/esm/SpatialViewState.js.map +1 -1
  294. package/lib/esm/Tiles.d.ts +4 -0
  295. package/lib/esm/Tiles.d.ts.map +1 -1
  296. package/lib/esm/Tiles.js +11 -0
  297. package/lib/esm/Tiles.js.map +1 -1
  298. package/lib/esm/ViewContext.js +1 -1
  299. package/lib/esm/ViewContext.js.map +1 -1
  300. package/lib/esm/ViewManager.d.ts.map +1 -1
  301. package/lib/esm/ViewManager.js +2 -3
  302. package/lib/esm/ViewManager.js.map +1 -1
  303. package/lib/esm/ViewState.d.ts +4 -5
  304. package/lib/esm/ViewState.d.ts.map +1 -1
  305. package/lib/esm/ViewState.js +0 -1
  306. package/lib/esm/ViewState.js.map +1 -1
  307. package/lib/esm/Viewport.d.ts +53 -4
  308. package/lib/esm/Viewport.d.ts.map +1 -1
  309. package/lib/esm/Viewport.js +83 -35
  310. package/lib/esm/Viewport.js.map +1 -1
  311. package/lib/esm/extension/ExtensionImpl.js +2 -2
  312. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  313. package/lib/esm/extension/ExtensionRuntime.js +5 -2
  314. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  315. package/lib/esm/render/GraphicBranch.d.ts +3 -0
  316. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  317. package/lib/esm/render/GraphicBranch.js.map +1 -1
  318. package/lib/esm/render/GraphicBuilder.d.ts +1 -1
  319. package/lib/esm/render/GraphicBuilder.js +1 -1
  320. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  321. package/lib/esm/render/MockRender.d.ts.map +1 -1
  322. package/lib/esm/render/MockRender.js +3 -0
  323. package/lib/esm/render/MockRender.js.map +1 -1
  324. package/lib/esm/render/RealityMeshParams.d.ts +3 -4
  325. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  326. package/lib/esm/render/RealityMeshParams.js +10 -6
  327. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  328. package/lib/esm/render/RenderMaterial.d.ts +1 -1
  329. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  330. package/lib/esm/render/RenderMaterial.js.map +1 -1
  331. package/lib/esm/render/RenderSystem.d.ts +4 -4
  332. package/lib/esm/render/RenderSystem.js +4 -4
  333. package/lib/esm/render/RenderSystem.js.map +1 -1
  334. package/lib/esm/render/RenderTarget.d.ts +1 -1
  335. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  336. package/lib/esm/render/RenderTarget.js +1 -1
  337. package/lib/esm/render/RenderTarget.js.map +1 -1
  338. package/lib/esm/render/VisibleFeature.d.ts +5 -5
  339. package/lib/esm/render/VisibleFeature.js.map +1 -1
  340. package/lib/esm/render/primitives/DisplayParams.d.ts.map +1 -1
  341. package/lib/esm/render/primitives/DisplayParams.js +2 -1
  342. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  343. package/lib/esm/render/webgl/BackgroundMapDrape.js +3 -3
  344. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  345. package/lib/esm/render/webgl/BranchState.d.ts +3 -0
  346. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  347. package/lib/esm/render/webgl/BranchState.js +5 -0
  348. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  349. package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
  350. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  351. package/lib/esm/render/webgl/CachedGeometry.js +69 -0
  352. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  353. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  354. package/lib/esm/render/webgl/DrawCommand.js +6 -4
  355. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  356. package/lib/esm/render/webgl/EDL.d.ts +40 -0
  357. package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
  358. package/lib/esm/render/webgl/EDL.js +260 -0
  359. package/lib/esm/render/webgl/EDL.js.map +1 -0
  360. package/lib/esm/render/webgl/EdgeSettings.js +2 -2
  361. package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
  362. package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
  363. package/lib/esm/render/webgl/FrameBuffer.js +9 -0
  364. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  365. package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
  366. package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
  367. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  368. package/lib/esm/render/webgl/Layer.js +2 -2
  369. package/lib/esm/render/webgl/LayerCommands.js +2 -2
  370. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  371. package/lib/esm/render/webgl/PlanarClassifier.js +9 -8
  372. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  373. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  374. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  375. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  376. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/PointCloud.js +2 -0
  378. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  379. package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
  380. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  381. package/lib/esm/render/webgl/RealityMesh.js +8 -3
  382. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  383. package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
  384. package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  385. package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
  386. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  387. package/lib/esm/render/webgl/RenderCommands.d.ts +2 -1
  388. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  389. package/lib/esm/render/webgl/RenderCommands.js +46 -38
  390. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  391. package/lib/esm/render/webgl/RenderFlags.d.ts +19 -17
  392. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  393. package/lib/esm/render/webgl/RenderFlags.js +8 -6
  394. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  395. package/lib/esm/render/webgl/SceneCompositor.d.ts +6 -1
  396. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  397. package/lib/esm/render/webgl/SceneCompositor.js +194 -77
  398. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  399. package/lib/esm/render/webgl/SolarShadowMap.js +3 -3
  400. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  401. package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
  402. package/lib/esm/render/webgl/Target.js +7 -7
  403. package/lib/esm/render/webgl/Target.js.map +1 -1
  404. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  405. package/lib/esm/render/webgl/Technique.js +18 -3
  406. package/lib/esm/render/webgl/Technique.js.map +1 -1
  407. package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
  408. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  409. package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
  410. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  411. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  412. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  413. package/lib/esm/render/webgl/UniformHandle.js +1 -2
  414. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  415. package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
  416. package/lib/esm/render/webgl/glsl/EDL.d.ts +14 -0
  417. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
  418. package/lib/esm/render/webgl/glsl/EDL.js +253 -0
  419. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
  420. package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
  421. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  422. package/lib/esm/render/webgl/glsl/Surface.js +1 -1
  423. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  424. package/lib/esm/tile/BatchedTileIdMap.js +1 -1
  425. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  426. package/lib/esm/tile/DynamicIModelTile.js +1 -1
  427. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  428. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  429. package/lib/esm/tile/GltfReader.js +4 -2
  430. package/lib/esm/tile/GltfReader.js.map +1 -1
  431. package/lib/esm/tile/IModelTile.js +1 -1
  432. package/lib/esm/tile/IModelTile.js.map +1 -1
  433. package/lib/esm/tile/ImdlReader.d.ts +6 -0
  434. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  435. package/lib/esm/tile/ImdlReader.js +20 -7
  436. package/lib/esm/tile/ImdlReader.js.map +1 -1
  437. package/lib/esm/tile/OrbitGtTileTree.d.ts +14 -1
  438. package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
  439. package/lib/esm/tile/OrbitGtTileTree.js +30 -12
  440. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  441. package/lib/esm/tile/RealityModelTileTree.d.ts +4 -3
  442. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  443. package/lib/esm/tile/RealityModelTileTree.js +62 -54
  444. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  445. package/lib/esm/tile/RealityTileLoader.js +2 -2
  446. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  447. package/lib/esm/tile/RealityTileTree.d.ts +5 -0
  448. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  449. package/lib/esm/tile/RealityTileTree.js +9 -4
  450. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  451. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  452. package/lib/esm/tile/TileAdmin.js +15 -7
  453. package/lib/esm/tile/TileAdmin.js.map +1 -1
  454. package/lib/esm/tile/TileDrawArgs.js +1 -1
  455. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  456. package/lib/esm/tile/TileTreeReference.d.ts +3 -0
  457. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  458. package/lib/esm/tile/TileTreeReference.js +3 -0
  459. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  460. package/lib/esm/tile/map/ArcGisUtilities.d.ts +14 -1
  461. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  462. package/lib/esm/tile/map/ArcGisUtilities.js +57 -27
  463. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  464. package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
  465. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  466. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  467. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  468. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  469. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  470. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  471. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  472. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  473. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  474. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  475. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  476. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  477. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  478. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  479. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  480. package/lib/esm/tile/map/ImageryTileTree.d.ts +26 -1
  481. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  482. package/lib/esm/tile/map/ImageryTileTree.js +53 -4
  483. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  484. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  485. package/lib/esm/tile/map/MapLayerImageryFormats.js +3 -2
  486. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  487. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +12 -2
  488. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  489. package/lib/esm/tile/map/MapLayerImageryProvider.js +16 -4
  490. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  491. package/lib/esm/tile/map/MapLayerSources.d.ts +3 -1
  492. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  493. package/lib/esm/tile/map/MapLayerSources.js +2 -0
  494. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  495. package/lib/esm/tile/map/MapTile.d.ts +5 -0
  496. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  497. package/lib/esm/tile/map/MapTile.js +33 -14
  498. package/lib/esm/tile/map/MapTile.js.map +1 -1
  499. package/lib/esm/tile/map/MapTileTree.d.ts +42 -3
  500. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  501. package/lib/esm/tile/map/MapTileTree.js +126 -9
  502. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  503. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  504. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  505. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +26 -0
  506. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  507. package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
  508. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  509. package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
  510. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  511. package/lib/esm/tools/ClipViewTool.js +2 -2
  512. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  513. package/lib/esm/tools/MeasureTool.js +2 -2
  514. package/lib/esm/tools/MeasureTool.js.map +1 -1
  515. package/lib/public/locales/en/iModelJs.json +2 -2
  516. package/package.json +20 -21
@@ -1 +1 @@
1
- {"version":3,"file":"FrameBuffer.js","sourceRoot":"","sources":["../../../../src/render/webgl/FrameBuffer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { GL } from \"./GL\";\r\nimport { RenderBuffer, RenderBufferMultiSample } from \"./RenderBuffer\";\r\nimport { System } from \"./System\";\r\nimport { TextureHandle } from \"./Texture\";\r\n\r\n/** @internal */\r\nexport type DepthBuffer = RenderBuffer | RenderBufferMultiSample | TextureHandle;\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport const enum FrameBufferBindState {\r\n Unbound,\r\n Bound,\r\n BoundWithAttachments,\r\n BoundMultisampled,\r\n BoundWithAttachmentsMultisampled,\r\n Suspended,\r\n}\r\n\r\n/** @internal */\r\nexport class FrameBuffer implements WebGLDisposable {\r\n private _fbo?: WebGLFramebuffer;\r\n private _fboMs?: WebGLFramebuffer;\r\n private _bindState: FrameBufferBindState = FrameBufferBindState.Unbound;\r\n private readonly _colorTextures: TextureHandle[] = [];\r\n private readonly _colorMsBuffers: RenderBufferMultiSample[] = [];\r\n private readonly _colorAttachments: GLenum[] = [];\r\n private readonly _colorMsFilters: GL.MultiSampling.Filter[] = [];\r\n public readonly depthBuffer?: DepthBuffer;\r\n public readonly depthBufferMs?: DepthBuffer;\r\n\r\n public get isDisposed(): boolean { return this._fbo === undefined; }\r\n\r\n public get isBound(): boolean { return FrameBufferBindState.Bound <= this._bindState && FrameBufferBindState.BoundWithAttachmentsMultisampled >= this._bindState; }\r\n\r\n public get isBoundMultisampled(): boolean { return FrameBufferBindState.BoundMultisampled === this._bindState || FrameBufferBindState.BoundWithAttachmentsMultisampled === this._bindState; }\r\n\r\n public get isSuspended(): boolean { return FrameBufferBindState.Suspended === this._bindState; }\r\n\r\n public get isMultisampled(): boolean { return this._colorMsBuffers.length > 0 || undefined !== this.depthBufferMs; }\r\n\r\n public getColor(ndx: number): TextureHandle {\r\n assert(ndx < this._colorTextures.length);\r\n if (ndx < this._colorMsBuffers.length && this._colorMsBuffers[ndx].isDirty) {\r\n this.blitMsBuffersToTextures(false, ndx);\r\n }\r\n return this._colorTextures[ndx];\r\n }\r\n\r\n private constructor(fbo: WebGLFramebuffer, colorTextures: TextureHandle[], depthBuffer?: DepthBuffer,\r\n colorMsBuffers?: RenderBufferMultiSample[], msFilters?: GL.MultiSampling.Filter[], depthBufferMs?: DepthBuffer) {\r\n this._fbo = fbo;\r\n const gl = System.instance.context;\r\n\r\n this.bind(false);\r\n\r\n let i: number = 0;\r\n for (const colTex of colorTextures) {\r\n const attachmentEnum: GLenum = gl.COLOR_ATTACHMENT0 + i;\r\n this._colorAttachments.push(attachmentEnum);\r\n this._colorTextures.push(colTex);\r\n const texHandle = colTex.getHandle();\r\n if (undefined !== texHandle)\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachmentEnum, gl.TEXTURE_2D, texHandle, 0);\r\n i++;\r\n }\r\n\r\n if (depthBuffer !== undefined) {\r\n this.depthBuffer = depthBuffer;\r\n const dbHandle = depthBuffer.getHandle();\r\n if (undefined !== dbHandle) {\r\n if (depthBuffer instanceof RenderBuffer) {\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, dbHandle);\r\n } else if (depthBuffer instanceof RenderBufferMultiSample) {\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, dbHandle);\r\n } else {\r\n // Looks like we only get a 24 bit depth buffer anyway, so use a 24-8 with a stencil.\r\n // gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, dbHandle, 0);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.TEXTURE_2D, dbHandle, 0);\r\n }\r\n }\r\n }\r\n\r\n this.unbind();\r\n\r\n if (undefined !== colorMsBuffers && colorMsBuffers.length === colorTextures.length && undefined !== msFilters && msFilters.length === colorMsBuffers.length) {\r\n // Create a matching FBO with multisampling render buffers.\r\n const fbo2 = System.instance.context.createFramebuffer();\r\n if (null !== fbo2) {\r\n this._fboMs = fbo2;\r\n this.bind(false, true);\r\n i = 0;\r\n for (const colMsBuff of colorMsBuffers) {\r\n const attachmentEnum: GLenum = gl.COLOR_ATTACHMENT0 + i;\r\n this._colorMsBuffers.push(colMsBuff);\r\n this._colorMsFilters.push(msFilters[i]);\r\n const msBuffHandle = colMsBuff.getHandle();\r\n if (undefined !== msBuffHandle)\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachmentEnum, gl.RENDERBUFFER, msBuffHandle);\r\n i++;\r\n }\r\n\r\n if (depthBufferMs !== undefined) {\r\n this.depthBufferMs = depthBufferMs;\r\n const dbHandleMs = depthBufferMs.getHandle();\r\n if (undefined !== dbHandleMs) {\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, dbHandleMs);\r\n }\r\n }\r\n this.unbind();\r\n }\r\n }\r\n }\r\n\r\n public static create(colorTextures: TextureHandle[], depthBuffer?: DepthBuffer, colorMsBuffers?: RenderBufferMultiSample[], msFilters?: GL.MultiSampling.Filter[], depthBufferMs?: DepthBuffer): FrameBuffer | undefined {\r\n const fbo: WebGLFramebuffer | null = System.instance.context.createFramebuffer();\r\n if (null === fbo) {\r\n return undefined;\r\n }\r\n return new FrameBuffer(fbo, colorTextures, depthBuffer, colorMsBuffers, msFilters, depthBufferMs);\r\n }\r\n\r\n public dispose(): void {\r\n // NB: The FrameBuffer does not *own* the textures and depth buffer.\r\n if (!this.isDisposed) {\r\n System.instance.context.deleteFramebuffer(this._fbo!);\r\n this._fbo = undefined;\r\n if (undefined !== this._fboMs) {\r\n System.instance.context.deleteFramebuffer(this._fboMs);\r\n this._fboMs = undefined;\r\n }\r\n }\r\n }\r\n\r\n public bind(bindAttachments: boolean = false, bindMS: boolean = false): boolean {\r\n assert(undefined !== this._fbo);\r\n assert(!this.isBound);\r\n\r\n if (undefined === this._fbo)\r\n return false;\r\n\r\n const gl = System.instance.context;\r\n\r\n if (bindMS && undefined !== this._fboMs) {\r\n gl.bindFramebuffer(GL.FrameBuffer.TARGET, this._fboMs);\r\n this._bindState = FrameBufferBindState.BoundMultisampled;\r\n } else {\r\n gl.bindFramebuffer(GL.FrameBuffer.TARGET, this._fbo);\r\n this._bindState = FrameBufferBindState.Bound;\r\n }\r\n\r\n if (bindAttachments) {\r\n System.instance.setDrawBuffers(this._colorAttachments);\r\n this._bindState++;\r\n }\r\n return true;\r\n }\r\n\r\n public unbind() {\r\n assert(this.isBound);\r\n System.instance.context.bindFramebuffer(GL.FrameBuffer.TARGET, null);\r\n this._bindState = FrameBufferBindState.Unbound;\r\n }\r\n\r\n public suspend() {\r\n assert(this.isBound);\r\n this._bindState = FrameBufferBindState.Suspended;\r\n }\r\n\r\n public markTargetsDirty(): void {\r\n for (const msBuff of this._colorMsBuffers) {\r\n msBuff.markBufferDirty(true);\r\n }\r\n if (undefined !== this.depthBufferMs)\r\n (this.depthBufferMs as RenderBufferMultiSample).markBufferDirty(true);\r\n }\r\n\r\n /** blitDepth is true to blit the depth/stencil buffer. ndx is index of single attachment to blit.\r\n * All color attachments are blitted if ndx is undefined, none are blitted if ndx is -1.\r\n */\r\n public blitMsBuffersToTextures(blitDepth: boolean, ndx?: number) {\r\n if (!this._fboMs)\r\n return;\r\n System.instance.frameBufferStack.suspend();\r\n const gl2 = System.instance.context as WebGL2RenderingContext;\r\n const attachments = [];\r\n const max = (undefined === ndx ? this._colorMsBuffers.length : ndx + 1);\r\n for (let i = 0; i < max; ++i) {\r\n if (undefined !== ndx && i < ndx) {\r\n attachments.push(gl2.NONE); // skip this one, but first add a NONE for it in the attachment list\r\n continue;\r\n }\r\n if (this._colorMsBuffers[i].isDirty) {\r\n gl2.bindFramebuffer(gl2.READ_FRAMEBUFFER, this._fboMs);\r\n gl2.readBuffer(this._colorAttachments[i]);\r\n gl2.bindFramebuffer(gl2.DRAW_FRAMEBUFFER, this._fbo!);\r\n attachments.push(this._colorAttachments[i]);\r\n gl2.drawBuffers(attachments);\r\n attachments.pop();\r\n attachments.push(gl2.NONE);\r\n gl2.blitFramebuffer(0, 0, this._colorTextures[i].width, this._colorTextures[i].height,\r\n 0, 0, this._colorTextures[i].width, this._colorTextures[i].height,\r\n GL.BufferBit.Color, this._colorMsFilters[i]);\r\n this._colorMsBuffers[i].markBufferDirty(false);\r\n if (undefined !== ndx && i === ndx)\r\n break;\r\n }\r\n }\r\n if (blitDepth && undefined !== this.depthBuffer && undefined !== this.depthBufferMs && (this.depthBufferMs as RenderBufferMultiSample).isDirty) {\r\n const mask = GL.BufferBit.Depth; // (this.depthBuffer instanceof RenderBuffer ? GL.BufferBit.Depth : GL.BufferBit.Depth | GL.BufferBit.Stencil);\r\n gl2.bindFramebuffer(gl2.READ_FRAMEBUFFER, this._fboMs);\r\n gl2.bindFramebuffer(gl2.DRAW_FRAMEBUFFER, this._fbo!);\r\n gl2.blitFramebuffer(0, 0, this.depthBuffer.width, this.depthBuffer.height,\r\n 0, 0, this.depthBuffer.width, this.depthBuffer.height,\r\n mask, GL.MultiSampling.Filter.Nearest);\r\n (this.depthBufferMs as RenderBufferMultiSample).markBufferDirty(false);\r\n }\r\n gl2.bindFramebuffer(gl2.READ_FRAMEBUFFER, null);\r\n gl2.bindFramebuffer(gl2.DRAW_FRAMEBUFFER, null);\r\n System.instance.frameBufferStack.resume();\r\n }\r\n\r\n /** invDepth is true to invalidate depth buffer. invStencil is true to invalidate stencil buffer. ndx is index of single color attachment to invalidate.\r\n * All color attachments are invalidated if ndx is undefined, none are invalidated if ndx is -1.\r\n * Set withMultiSampling to true to invalidate the MS buffers.\r\n */\r\n public invalidate(invDepth: boolean, invStencil: boolean, withMultiSampling: boolean, indices?: number[]): void {\r\n const gl = System.instance.context;\r\n const attachments = invDepth ? (invStencil ? [gl.DEPTH_STENCIL_ATTACHMENT] : [System.instance.context.DEPTH_ATTACHMENT]) : (invDepth ? [gl.STENCIL_ATTACHMENT] : []);\r\n if (undefined !== indices) {\r\n if (indices.length > 0) {\r\n for (const i of indices)\r\n attachments.push(gl.COLOR_ATTACHMENT0 + i);\r\n }\r\n } else {\r\n attachments.concat(this._colorAttachments);\r\n }\r\n System.instance.frameBufferStack.execute(this, true, withMultiSampling, () => {\r\n System.instance.invalidateFrameBuffer(attachments);\r\n });\r\n }\r\n\r\n // Chiefly for debugging currently - assumes RGBA, unsigned byte, want all pixels.\r\n public get debugPixels(): Uint8Array | undefined {\r\n if (!this.isBound || 0 === this._colorTextures.length || !(this._colorTextures[0] instanceof TextureHandle))\r\n return undefined;\r\n\r\n const tex = this._colorTextures[0];\r\n if (GL.Texture.Format.Rgba !== tex.format || GL.Texture.DataType.UnsignedByte !== tex.dataType)\r\n return undefined;\r\n\r\n const buffer = new Uint8Array(tex.width * tex.height * 4);\r\n for (let i = 0; i < buffer.length; i += 4) {\r\n buffer[i] = 0xba;\r\n buffer[i + 1] = 0xad;\r\n buffer[i + 2] = 0xf0;\r\n buffer[i + 3] = 0x0d;\r\n }\r\n\r\n System.instance.context.readPixels(0, 0, tex.width, tex.height, tex.format, tex.dataType, buffer);\r\n return buffer;\r\n }\r\n}\r\n\r\ninterface Binding {\r\n fbo: FrameBuffer;\r\n withAttachments: boolean;\r\n withMultSampling: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class FrameBufferStack {\r\n // FrameBuffers within this array are not owned, as this is only a storage device holding references\r\n private readonly _stack: Binding[] = [];\r\n\r\n private get _top() { return !this.isEmpty ? this._stack[this._stack.length - 1] : undefined; }\r\n\r\n public push(fbo: FrameBuffer, withAttachments: boolean, withMultSampling: boolean): void {\r\n if (undefined !== this._top) {\r\n this._top.fbo.suspend();\r\n }\r\n\r\n assert(!fbo.isBound);\r\n fbo.bind(withAttachments, withMultSampling);\r\n assert(fbo.isBound);\r\n\r\n this._stack.push({ fbo, withAttachments, withMultSampling });\r\n }\r\n\r\n public pop(): void {\r\n assert(!this.isEmpty);\r\n if (undefined === this._top) {\r\n return;\r\n }\r\n\r\n const fbo = this._top.fbo;\r\n this._stack.pop();\r\n\r\n assert(fbo.isBound);\r\n fbo.unbind();\r\n assert(!fbo.isBound);\r\n\r\n if (this.isEmpty) {\r\n System.instance.context.bindFramebuffer(GL.FrameBuffer.TARGET, null);\r\n } else {\r\n const top = this._top;\r\n assert(top.fbo.isSuspended);\r\n top.fbo.bind(top.withAttachments, top.withMultSampling);\r\n assert(top.fbo.isBound);\r\n }\r\n }\r\n\r\n public get currentColorBuffer(): TextureHandle | undefined {\r\n assert(!this.isEmpty);\r\n return undefined !== this._top ? this._top.fbo.getColor(0) : undefined;\r\n }\r\n\r\n public get currentFbMultisampled(): boolean {\r\n return undefined !== this._top ? this._top.fbo.isBoundMultisampled : false;\r\n }\r\n\r\n public get isEmpty(): boolean { return 0 === this._stack.length; }\r\n\r\n public execute(fbo: FrameBuffer, withAttachments: boolean, withMultSampling: boolean, func: () => void) {\r\n this.push(fbo, withAttachments, withMultSampling);\r\n func();\r\n this.pop();\r\n }\r\n\r\n public markTargetsDirty(): void {\r\n const top = this._top;\r\n if (undefined !== top)\r\n top.fbo.markTargetsDirty();\r\n }\r\n\r\n public suspend(): void {\r\n if (undefined !== this._top) {\r\n this._top.fbo.suspend();\r\n }\r\n }\r\n\r\n public resume(): void {\r\n if (undefined === this._top) {\r\n return;\r\n }\r\n\r\n if (this.isEmpty) {\r\n System.instance.context.bindFramebuffer(GL.FrameBuffer.TARGET, null);\r\n } else {\r\n const top = this._top;\r\n top.fbo.bind(top.withAttachments, top.withMultSampling);\r\n assert(top.fbo.isBound);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FrameBuffer.js","sourceRoot":"","sources":["../../../../src/render/webgl/FrameBuffer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { GL } from \"./GL\";\r\nimport { RenderBuffer, RenderBufferMultiSample } from \"./RenderBuffer\";\r\nimport { System } from \"./System\";\r\nimport { TextureHandle } from \"./Texture\";\r\n\r\n/** @internal */\r\nexport type DepthBuffer = RenderBuffer | RenderBufferMultiSample | TextureHandle;\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport const enum FrameBufferBindState {\r\n Unbound,\r\n Bound,\r\n BoundWithAttachments,\r\n BoundMultisampled,\r\n BoundWithAttachmentsMultisampled,\r\n Suspended,\r\n}\r\n\r\n/** @internal */\r\nexport class FrameBuffer implements WebGLDisposable {\r\n private _fbo?: WebGLFramebuffer;\r\n private _fboMs?: WebGLFramebuffer;\r\n private _bindState: FrameBufferBindState = FrameBufferBindState.Unbound;\r\n private readonly _colorTextures: TextureHandle[] = [];\r\n private readonly _colorMsBuffers: RenderBufferMultiSample[] = [];\r\n private readonly _colorAttachments: GLenum[] = [];\r\n private readonly _colorMsFilters: GL.MultiSampling.Filter[] = [];\r\n public readonly depthBuffer?: DepthBuffer;\r\n public readonly depthBufferMs?: DepthBuffer;\r\n\r\n public get isDisposed(): boolean { return this._fbo === undefined; }\r\n\r\n public get isBound(): boolean { return FrameBufferBindState.Bound <= this._bindState && FrameBufferBindState.BoundWithAttachmentsMultisampled >= this._bindState; }\r\n\r\n public get isBoundMultisampled(): boolean { return FrameBufferBindState.BoundMultisampled === this._bindState || FrameBufferBindState.BoundWithAttachmentsMultisampled === this._bindState; }\r\n\r\n public get isSuspended(): boolean { return FrameBufferBindState.Suspended === this._bindState; }\r\n\r\n public get isMultisampled(): boolean { return this._colorMsBuffers.length > 0 || undefined !== this.depthBufferMs; }\r\n\r\n public getColor(ndx: number): TextureHandle {\r\n assert(ndx < this._colorTextures.length);\r\n if (ndx < this._colorMsBuffers.length && this._colorMsBuffers[ndx].isDirty) {\r\n this.blitMsBuffersToTextures(false, ndx);\r\n }\r\n return this._colorTextures[ndx];\r\n }\r\n\r\n public getColorTargets(useMSBuffers: boolean, ndx: number): { tex: TextureHandle, msBuf: RenderBufferMultiSample | undefined } {\r\n let msBuf;\r\n if (useMSBuffers) {\r\n assert (ndx < this._colorMsBuffers.length);\r\n msBuf = this._colorMsBuffers[ndx];\r\n }\r\n assert(ndx < this._colorTextures.length);\r\n return { tex: this._colorTextures[ndx], msBuf };\r\n }\r\n\r\n private constructor(fbo: WebGLFramebuffer, colorTextures: TextureHandle[], depthBuffer?: DepthBuffer,\r\n colorMsBuffers?: RenderBufferMultiSample[], msFilters?: GL.MultiSampling.Filter[], depthBufferMs?: DepthBuffer) {\r\n this._fbo = fbo;\r\n const gl = System.instance.context;\r\n\r\n this.bind(false);\r\n\r\n let i: number = 0;\r\n for (const colTex of colorTextures) {\r\n const attachmentEnum: GLenum = gl.COLOR_ATTACHMENT0 + i;\r\n this._colorAttachments.push(attachmentEnum);\r\n this._colorTextures.push(colTex);\r\n const texHandle = colTex.getHandle();\r\n if (undefined !== texHandle)\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachmentEnum, gl.TEXTURE_2D, texHandle, 0);\r\n i++;\r\n }\r\n\r\n if (depthBuffer !== undefined) {\r\n this.depthBuffer = depthBuffer;\r\n const dbHandle = depthBuffer.getHandle();\r\n if (undefined !== dbHandle) {\r\n if (depthBuffer instanceof RenderBuffer) {\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, dbHandle);\r\n } else if (depthBuffer instanceof RenderBufferMultiSample) {\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, dbHandle);\r\n } else {\r\n // Looks like we only get a 24 bit depth buffer anyway, so use a 24-8 with a stencil.\r\n // gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, dbHandle, 0);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.TEXTURE_2D, dbHandle, 0);\r\n }\r\n }\r\n }\r\n\r\n this.unbind();\r\n\r\n if (undefined !== colorMsBuffers && colorMsBuffers.length === colorTextures.length && undefined !== msFilters && msFilters.length === colorMsBuffers.length) {\r\n // Create a matching FBO with multisampling render buffers.\r\n const fbo2 = System.instance.context.createFramebuffer();\r\n if (null !== fbo2) {\r\n this._fboMs = fbo2;\r\n this.bind(false, true);\r\n i = 0;\r\n for (const colMsBuff of colorMsBuffers) {\r\n const attachmentEnum: GLenum = gl.COLOR_ATTACHMENT0 + i;\r\n this._colorMsBuffers.push(colMsBuff);\r\n this._colorMsFilters.push(msFilters[i]);\r\n const msBuffHandle = colMsBuff.getHandle();\r\n if (undefined !== msBuffHandle)\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachmentEnum, gl.RENDERBUFFER, msBuffHandle);\r\n i++;\r\n }\r\n\r\n if (depthBufferMs !== undefined) {\r\n this.depthBufferMs = depthBufferMs;\r\n const dbHandleMs = depthBufferMs.getHandle();\r\n if (undefined !== dbHandleMs) {\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, dbHandleMs);\r\n }\r\n }\r\n this.unbind();\r\n }\r\n }\r\n }\r\n\r\n public static create(colorTextures: TextureHandle[], depthBuffer?: DepthBuffer, colorMsBuffers?: RenderBufferMultiSample[], msFilters?: GL.MultiSampling.Filter[], depthBufferMs?: DepthBuffer): FrameBuffer | undefined {\r\n const fbo: WebGLFramebuffer | null = System.instance.context.createFramebuffer();\r\n if (null === fbo) {\r\n return undefined;\r\n }\r\n return new FrameBuffer(fbo, colorTextures, depthBuffer, colorMsBuffers, msFilters, depthBufferMs);\r\n }\r\n\r\n public dispose(): void {\r\n // NB: The FrameBuffer does not *own* the textures and depth buffer.\r\n if (!this.isDisposed) {\r\n System.instance.context.deleteFramebuffer(this._fbo!);\r\n this._fbo = undefined;\r\n if (undefined !== this._fboMs) {\r\n System.instance.context.deleteFramebuffer(this._fboMs);\r\n this._fboMs = undefined;\r\n }\r\n }\r\n }\r\n\r\n public bind(bindAttachments: boolean = false, bindMS: boolean = false): boolean {\r\n assert(undefined !== this._fbo);\r\n assert(!this.isBound);\r\n\r\n if (undefined === this._fbo)\r\n return false;\r\n\r\n const gl = System.instance.context;\r\n\r\n if (bindMS && undefined !== this._fboMs) {\r\n gl.bindFramebuffer(GL.FrameBuffer.TARGET, this._fboMs);\r\n this._bindState = FrameBufferBindState.BoundMultisampled;\r\n } else {\r\n gl.bindFramebuffer(GL.FrameBuffer.TARGET, this._fbo);\r\n this._bindState = FrameBufferBindState.Bound;\r\n }\r\n\r\n if (bindAttachments) {\r\n System.instance.setDrawBuffers(this._colorAttachments);\r\n this._bindState++;\r\n }\r\n return true;\r\n }\r\n\r\n public unbind() {\r\n assert(this.isBound);\r\n System.instance.context.bindFramebuffer(GL.FrameBuffer.TARGET, null);\r\n this._bindState = FrameBufferBindState.Unbound;\r\n }\r\n\r\n public suspend() {\r\n assert(this.isBound);\r\n this._bindState = FrameBufferBindState.Suspended;\r\n }\r\n\r\n public markTargetsDirty(): void {\r\n for (const msBuff of this._colorMsBuffers) {\r\n msBuff.markBufferDirty(true);\r\n }\r\n if (undefined !== this.depthBufferMs)\r\n (this.depthBufferMs as RenderBufferMultiSample).markBufferDirty(true);\r\n }\r\n\r\n /** blitDepth is true to blit the depth/stencil buffer. ndx is index of single attachment to blit.\r\n * All color attachments are blitted if ndx is undefined, none are blitted if ndx is -1.\r\n */\r\n public blitMsBuffersToTextures(blitDepth: boolean, ndx?: number) {\r\n if (!this._fboMs)\r\n return;\r\n System.instance.frameBufferStack.suspend();\r\n const gl2 = System.instance.context as WebGL2RenderingContext;\r\n const attachments = [];\r\n const max = (undefined === ndx ? this._colorMsBuffers.length : ndx + 1);\r\n for (let i = 0; i < max; ++i) {\r\n if (undefined !== ndx && i < ndx) {\r\n attachments.push(gl2.NONE); // skip this one, but first add a NONE for it in the attachment list\r\n continue;\r\n }\r\n if (this._colorMsBuffers[i].isDirty) {\r\n gl2.bindFramebuffer(gl2.READ_FRAMEBUFFER, this._fboMs);\r\n gl2.readBuffer(this._colorAttachments[i]);\r\n gl2.bindFramebuffer(gl2.DRAW_FRAMEBUFFER, this._fbo!);\r\n attachments.push(this._colorAttachments[i]);\r\n gl2.drawBuffers(attachments);\r\n attachments.pop();\r\n attachments.push(gl2.NONE);\r\n gl2.blitFramebuffer(0, 0, this._colorTextures[i].width, this._colorTextures[i].height,\r\n 0, 0, this._colorTextures[i].width, this._colorTextures[i].height,\r\n GL.BufferBit.Color, this._colorMsFilters[i]);\r\n this._colorMsBuffers[i].markBufferDirty(false);\r\n if (undefined !== ndx && i === ndx)\r\n break;\r\n }\r\n }\r\n if (blitDepth && undefined !== this.depthBuffer && undefined !== this.depthBufferMs && (this.depthBufferMs as RenderBufferMultiSample).isDirty) {\r\n const mask = GL.BufferBit.Depth; // (this.depthBuffer instanceof RenderBuffer ? GL.BufferBit.Depth : GL.BufferBit.Depth | GL.BufferBit.Stencil);\r\n gl2.bindFramebuffer(gl2.READ_FRAMEBUFFER, this._fboMs);\r\n gl2.bindFramebuffer(gl2.DRAW_FRAMEBUFFER, this._fbo!);\r\n gl2.blitFramebuffer(0, 0, this.depthBuffer.width, this.depthBuffer.height,\r\n 0, 0, this.depthBuffer.width, this.depthBuffer.height,\r\n mask, GL.MultiSampling.Filter.Nearest);\r\n (this.depthBufferMs as RenderBufferMultiSample).markBufferDirty(false);\r\n }\r\n gl2.bindFramebuffer(gl2.READ_FRAMEBUFFER, null);\r\n gl2.bindFramebuffer(gl2.DRAW_FRAMEBUFFER, null);\r\n System.instance.frameBufferStack.resume();\r\n }\r\n\r\n /** invDepth is true to invalidate depth buffer. invStencil is true to invalidate stencil buffer. ndx is index of single color attachment to invalidate.\r\n * All color attachments are invalidated if ndx is undefined, none are invalidated if ndx is -1.\r\n * Set withMultiSampling to true to invalidate the MS buffers.\r\n */\r\n public invalidate(invDepth: boolean, invStencil: boolean, withMultiSampling: boolean, indices?: number[]): void {\r\n const gl = System.instance.context;\r\n const attachments = invDepth ? (invStencil ? [gl.DEPTH_STENCIL_ATTACHMENT] : [System.instance.context.DEPTH_ATTACHMENT]) : (invDepth ? [gl.STENCIL_ATTACHMENT] : []);\r\n if (undefined !== indices) {\r\n if (indices.length > 0) {\r\n for (const i of indices)\r\n attachments.push(gl.COLOR_ATTACHMENT0 + i);\r\n }\r\n } else {\r\n attachments.concat(this._colorAttachments);\r\n }\r\n System.instance.frameBufferStack.execute(this, true, withMultiSampling, () => {\r\n System.instance.invalidateFrameBuffer(attachments);\r\n });\r\n }\r\n\r\n // Chiefly for debugging currently - assumes RGBA, unsigned byte, want all pixels.\r\n public get debugPixels(): Uint8Array | undefined {\r\n if (!this.isBound || 0 === this._colorTextures.length || !(this._colorTextures[0] instanceof TextureHandle))\r\n return undefined;\r\n\r\n const tex = this._colorTextures[0];\r\n if (GL.Texture.Format.Rgba !== tex.format || GL.Texture.DataType.UnsignedByte !== tex.dataType)\r\n return undefined;\r\n\r\n const buffer = new Uint8Array(tex.width * tex.height * 4);\r\n for (let i = 0; i < buffer.length; i += 4) {\r\n buffer[i] = 0xba;\r\n buffer[i + 1] = 0xad;\r\n buffer[i + 2] = 0xf0;\r\n buffer[i + 3] = 0x0d;\r\n }\r\n\r\n System.instance.context.readPixels(0, 0, tex.width, tex.height, tex.format, tex.dataType, buffer);\r\n return buffer;\r\n }\r\n}\r\n\r\ninterface Binding {\r\n fbo: FrameBuffer;\r\n withAttachments: boolean;\r\n withMultSampling: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class FrameBufferStack {\r\n // FrameBuffers within this array are not owned, as this is only a storage device holding references\r\n private readonly _stack: Binding[] = [];\r\n\r\n private get _top() { return !this.isEmpty ? this._stack[this._stack.length - 1] : undefined; }\r\n\r\n public push(fbo: FrameBuffer, withAttachments: boolean, withMultSampling: boolean): void {\r\n if (undefined !== this._top) {\r\n this._top.fbo.suspend();\r\n }\r\n\r\n assert(!fbo.isBound);\r\n fbo.bind(withAttachments, withMultSampling);\r\n assert(fbo.isBound);\r\n\r\n this._stack.push({ fbo, withAttachments, withMultSampling });\r\n }\r\n\r\n public pop(): void {\r\n assert(!this.isEmpty);\r\n if (undefined === this._top) {\r\n return;\r\n }\r\n\r\n const fbo = this._top.fbo;\r\n this._stack.pop();\r\n\r\n assert(fbo.isBound);\r\n fbo.unbind();\r\n assert(!fbo.isBound);\r\n\r\n if (this.isEmpty) {\r\n System.instance.context.bindFramebuffer(GL.FrameBuffer.TARGET, null);\r\n } else {\r\n const top = this._top;\r\n assert(top.fbo.isSuspended);\r\n top.fbo.bind(top.withAttachments, top.withMultSampling);\r\n assert(top.fbo.isBound);\r\n }\r\n }\r\n\r\n public get currentColorBuffer(): TextureHandle | undefined {\r\n assert(!this.isEmpty);\r\n return undefined !== this._top ? this._top.fbo.getColor(0) : undefined;\r\n }\r\n\r\n public get currentFbMultisampled(): boolean {\r\n return undefined !== this._top ? this._top.fbo.isBoundMultisampled : false;\r\n }\r\n\r\n public get isEmpty(): boolean { return 0 === this._stack.length; }\r\n\r\n public execute(fbo: FrameBuffer, withAttachments: boolean, withMultSampling: boolean, func: () => void) {\r\n this.push(fbo, withAttachments, withMultSampling);\r\n func();\r\n this.pop();\r\n }\r\n\r\n public markTargetsDirty(): void {\r\n const top = this._top;\r\n if (undefined !== top)\r\n top.fbo.markTargetsDirty();\r\n }\r\n\r\n public suspend(): void {\r\n if (undefined !== this._top) {\r\n this._top.fbo.suspend();\r\n }\r\n }\r\n\r\n public resume(): void {\r\n if (undefined === this._top) {\r\n return;\r\n }\r\n\r\n if (this.isEmpty) {\r\n System.instance.context.bindFramebuffer(GL.FrameBuffer.TARGET, null);\r\n } else {\r\n const top = this._top;\r\n top.fbo.bind(top.withAttachments, top.withMultSampling);\r\n assert(top.fbo.isBound);\r\n }\r\n }\r\n}\r\n"]}
@@ -11,6 +11,13 @@ export declare const enum FrustumUniformType {
11
11
  Orthographic = 1,
12
12
  Perspective = 2
13
13
  }
14
+ /** @internal */
15
+ export declare const enum Plane {
16
+ kTop = 0,
17
+ kBottom = 1,
18
+ kLeft = 2,
19
+ kRight = 3
20
+ }
14
21
  /** Represents a Target's frustum for use in glsl as a pair of uniforms.
15
22
  * Do not modify fields of exposed objects directly. e.g., do not directly manipulate the projection or view matrices - use the appropriate APIs.
16
23
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"FrustumUniforms.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/FrustumUniforms.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAsB,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,OAAO,EAAO,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,gBAAgB;AAChB,0BAAkB,kBAAkB;IAClC,MAAM,IAAA;IACN,YAAY,IAAA;IACZ,WAAW,IAAA;CACZ;AAeD;;;GAGG;AACH,qBAAa,eAAe;IAE1B,SAAgB,WAAW,UAAiB;IAC5C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAClD,SAAgB,UAAU,YAA8B;IACxD,SAAgB,gBAAgB,WAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAGlD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,SAAgB,kBAAkB,UAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IAGhD,OAAO,SAAK;IAGnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAMvB;;IAKK,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKlD,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMjD,IAAW,MAAM,IAAI,YAAY,CAA4B;IAG7D,IAAW,OAAO,IAAI,YAAY,CAA8B;IAEhE,IAAW,SAAS,IAAI,MAAM,CAAiD;IAC/E,IAAW,QAAQ,IAAI,MAAM,CAAgD;IAC7E,IAAW,IAAI,IAAI,kBAAkB,CAAkE;IACvG,IAAW,IAAI,IAAI,OAAO,CAAoD;IAC9E,IAAW,YAAY,IAAI,MAAM,CAA+B;IAGhE,IAAW,IAAI,IAAI,YAAY,CAA2B;IAEnD,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAuF5E,sBAAsB,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI;IAMxD,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOnF,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;CAS1F;AAWD,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,WAM9E"}
1
+ {"version":3,"file":"FrustumUniforms.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/FrustumUniforms.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAsB,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,OAAO,EAAO,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,gBAAgB;AAChB,0BAAkB,kBAAkB;IAClC,MAAM,IAAA;IACN,YAAY,IAAA;IACZ,WAAW,IAAA;CACZ;AAED,gBAAgB;AAChB,0BAAkB,KAAK;IACrB,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,KAAK,IAAA;IACL,MAAM,IAAA;CACP;AAQD;;;GAGG;AACH,qBAAa,eAAe;IAE1B,SAAgB,WAAW,UAAiB;IAC5C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAClD,SAAgB,UAAU,YAA8B;IACxD,SAAgB,gBAAgB,WAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAGlD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,SAAgB,kBAAkB,UAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IAGhD,OAAO,SAAK;IAGnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAMvB;;IAKK,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKlD,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMjD,IAAW,MAAM,IAAI,YAAY,CAA4B;IAG7D,IAAW,OAAO,IAAI,YAAY,CAA8B;IAEhE,IAAW,SAAS,IAAI,MAAM,CAAiD;IAC/E,IAAW,QAAQ,IAAI,MAAM,CAAgD;IAC7E,IAAW,IAAI,IAAI,kBAAkB,CAAkE;IACvG,IAAW,IAAI,IAAI,OAAO,CAAoD;IAC9E,IAAW,YAAY,IAAI,MAAM,CAA+B;IAGhE,IAAW,IAAI,IAAI,YAAY,CAA2B;IAEnD,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAuF5E,sBAAsB,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI;IAMxD,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOnF,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;CAS1F;AAWD,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,WAM9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"FrustumUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/FrustumUniforms.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { InverseMatrixState, Matrix4d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Frustum, Npc } from \"@itwin/core-common\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { IModelFrameLifecycle } from \"./IModelFrameLifecycle\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { desync, sync } from \"./Sync\";\r\n\r\n/** @internal */\r\nexport const enum FrustumUniformType { // eslint-disable-line no-restricted-syntax\r\n TwoDee,\r\n Orthographic,\r\n Perspective,\r\n}\r\n\r\nconst enum Plane { // eslint-disable-line no-restricted-syntax\r\n kTop,\r\n kBottom,\r\n kLeft,\r\n kRight,\r\n}\r\n\r\nconst enum FrustumData { // eslint-disable-line no-restricted-syntax\r\n kNear,\r\n kFar,\r\n kType,\r\n}\r\n\r\n/** Represents a Target's frustum for use in glsl as a pair of uniforms.\r\n * Do not modify fields of exposed objects directly. e.g., do not directly manipulate the projection or view matrices - use the appropriate APIs.\r\n * @internal\r\n */\r\nexport class FrustumUniforms {\r\n // CPU state. Do not modify - use APIs.\r\n public readonly planFrustum = new Frustum();\r\n private _planFraction = 0;\r\n private readonly _nearPlaneCenter = new Point3d();\r\n public readonly viewMatrix = Transform.createIdentity();\r\n public readonly projectionMatrix = Matrix4d.createIdentity();\r\n private readonly _worldUpVector = Vector3d.unitZ();\r\n private readonly _viewUpVector = Vector3d.unitZ();\r\n\r\n // GPU state\r\n private readonly _planeData: Float32Array = new Float32Array(4);\r\n private readonly _frustumData: Float32Array = new Float32Array(3);\r\n public readonly projectionMatrix32 = new Matrix4();\r\n private readonly _logZData = new Float32Array(2);\r\n private readonly _viewUpVector32 = new Float32Array(3);\r\n\r\n // SyncTarget\r\n public syncKey = 0;\r\n\r\n // Scratch variables\r\n private readonly _scratch = {\r\n point3d: new Point3d(),\r\n vec3d: new Vector3d(),\r\n viewX: new Vector3d(),\r\n viewY: new Vector3d(),\r\n viewZ: new Vector3d(),\r\n };\r\n\r\n public constructor() {\r\n }\r\n\r\n public bindProjectionMatrix(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setMatrix4(this.projectionMatrix32);\r\n }\r\n\r\n public bindUpVector(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._viewUpVector32);\r\n }\r\n\r\n // uniform vec4 u_frustumPlanes; // { top, bottom, left, right }\r\n public get planes(): Float32Array { return this._planeData; }\r\n\r\n // uniform vec3 u_frustum; // { near, far, type }\r\n public get frustum(): Float32Array { return this._frustumData; }\r\n\r\n public get nearPlane(): number { return this._frustumData[FrustumData.kNear]; }\r\n public get farPlane(): number { return this._frustumData[FrustumData.kFar]; }\r\n public get type(): FrustumUniformType { return this.frustum[FrustumData.kType] as FrustumUniformType; }\r\n public get is2d(): boolean { return FrustumUniformType.TwoDee === this.type; }\r\n public get planFraction(): number { return this._planFraction; }\r\n\r\n // uniform vec2 u_logZ where x = 1/near and y = log(far/near)\r\n public get logZ(): Float32Array { return this._logZData; }\r\n\r\n public changeFrustum(newFrustum: Frustum, newFraction: number, is3d: boolean): void {\r\n if (newFraction === this._planFraction && is3d !== this.is2d && newFrustum.equals(this.planFrustum))\r\n return;\r\n\r\n desync(this);\r\n\r\n newFrustum.clone(this.planFrustum);\r\n\r\n const farLowerLeft = newFrustum.getCorner(Npc.LeftBottomRear);\r\n const farLowerRight = newFrustum.getCorner(Npc.RightBottomRear);\r\n const farUpperLeft = newFrustum.getCorner(Npc.LeftTopRear);\r\n const farUpperRight = newFrustum.getCorner(Npc.RightTopRear);\r\n const nearLowerLeft = newFrustum.getCorner(Npc.LeftBottomFront);\r\n const nearLowerRight = newFrustum.getCorner(Npc.RightBottomFront);\r\n const nearUpperLeft = newFrustum.getCorner(Npc.LeftTopFront);\r\n const nearUpperRight = newFrustum.getCorner(Npc.RightTopFront);\r\n\r\n const nearCenter = nearLowerLeft.interpolate(0.5, nearUpperRight, this._scratch.point3d);\r\n\r\n const viewX = normalizedDifference(nearLowerRight, nearLowerLeft, this._scratch.viewX);\r\n const viewY = normalizedDifference(nearUpperLeft, nearLowerLeft, this._scratch.viewY);\r\n const viewZ = viewX.crossProduct(viewY, this._scratch.viewZ).normalize()!;\r\n\r\n this._planFraction = newFraction;\r\n\r\n if (!is3d || newFraction > 0.999) { // ortho or 2d\r\n const halfWidth = Vector3d.createStartEnd(farLowerRight, farLowerLeft, this._scratch.vec3d).magnitude() * 0.5;\r\n const halfHeight = Vector3d.createStartEnd(farLowerRight, farUpperRight).magnitude() * 0.5;\r\n const depth = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, this._scratch.vec3d).magnitude();\r\n\r\n lookIn(nearCenter, viewX, viewY, viewZ, this.viewMatrix);\r\n ortho(-halfWidth, halfWidth, -halfHeight, halfHeight, 0, depth, this.projectionMatrix);\r\n\r\n this._nearPlaneCenter.setFrom(nearLowerLeft);\r\n this._nearPlaneCenter.interpolate(0.5, nearUpperRight, this._nearPlaneCenter);\r\n\r\n this.setPlanes(halfHeight, -halfHeight, -halfWidth, halfWidth);\r\n this.setFrustum(0, depth, is3d ? FrustumUniformType.Orthographic : FrustumUniformType.TwoDee);\r\n } else { // perspective\r\n const scale = 1.0 / (1.0 - newFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, this._scratch.vec3d);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, this._scratch.point3d);\r\n\r\n const frustumLeft = dotDifference(farLowerLeft, cameraPosition, viewX) * newFraction;\r\n const frustumRight = dotDifference(farLowerRight, cameraPosition, viewX) * newFraction;\r\n const frustumBottom = dotDifference(farLowerLeft, cameraPosition, viewY) * newFraction;\r\n const frustumTop = dotDifference(farUpperLeft, cameraPosition, viewY) * newFraction;\r\n const frustumFront = -dotDifference(nearLowerLeft, cameraPosition, viewZ);\r\n const frustumBack = -dotDifference(farLowerLeft, cameraPosition, viewZ);\r\n\r\n lookIn(cameraPosition, viewX, viewY, viewZ, this.viewMatrix);\r\n frustum(frustumLeft, frustumRight, frustumBottom, frustumTop, frustumFront, frustumBack, this.projectionMatrix);\r\n\r\n IModelFrameLifecycle.onChangeCameraView.raiseEvent({\r\n cameraPosition,\r\n viewX,\r\n viewY,\r\n viewZ,\r\n });\r\n IModelFrameLifecycle.onChangeCameraFrustum.raiseEvent({\r\n type: FrustumUniformType.Perspective,\r\n left: frustumLeft,\r\n right: frustumRight,\r\n bottom: frustumBottom,\r\n top: frustumTop,\r\n front: frustumFront,\r\n back: frustumBack,\r\n });\r\n\r\n this._nearPlaneCenter.setFrom(nearLowerLeft);\r\n this._nearPlaneCenter.interpolate(0.5, nearUpperRight, this._nearPlaneCenter);\r\n\r\n this.setPlanes(frustumTop, frustumBottom, frustumLeft, frustumRight);\r\n this.setFrustum(frustumFront, frustumBack, FrustumUniformType.Perspective);\r\n }\r\n\r\n this.viewMatrix.matrix.inverseState = InverseMatrixState.unknown;\r\n\r\n this.viewMatrix.matrix.multiplyVector(this._worldUpVector, this._viewUpVector);\r\n this._viewUpVector.normalizeInPlace();\r\n this._viewUpVector32[0] = this._viewUpVector.x;\r\n this._viewUpVector32[1] = this._viewUpVector.y;\r\n this._viewUpVector32[2] = this._viewUpVector.z;\r\n\r\n this.projectionMatrix32.initFromMatrix4d(this.projectionMatrix);\r\n }\r\n\r\n public changeProjectionMatrix(newMatrix: Matrix4d): void {\r\n desync(this);\r\n this.projectionMatrix.setFrom(newMatrix);\r\n this.projectionMatrix32.initFromMatrix4d(this.projectionMatrix);\r\n }\r\n\r\n protected setPlanes(top: number, bottom: number, left: number, right: number): void {\r\n this._planeData[Plane.kTop] = top;\r\n this._planeData[Plane.kBottom] = bottom;\r\n this._planeData[Plane.kLeft] = left;\r\n this._planeData[Plane.kRight] = right;\r\n }\r\n\r\n protected setFrustum(nearPlane: number, farPlane: number, type: FrustumUniformType): void {\r\n this._frustumData[FrustumData.kNear] = nearPlane;\r\n this._frustumData[FrustumData.kFar] = farPlane;\r\n this._frustumData[FrustumData.kType] = type as number;\r\n\r\n // If nearPlane is zero, we don't have a camera (or got very unlucky); in that case shader will compute linear depth.\r\n this._logZData[0] = 0 !== nearPlane ? 1 / nearPlane : 0;\r\n this._logZData[1] = 0 !== nearPlane ? Math.log(farPlane / nearPlane) : farPlane;\r\n }\r\n}\r\n\r\nfunction normalizedDifference(p0: Point3d, p1: Point3d, out?: Vector3d): Vector3d {\r\n const result = undefined !== out ? out : new Vector3d();\r\n result.x = p0.x - p1.x;\r\n result.y = p0.y - p1.y;\r\n result.z = p0.z - p1.z;\r\n result.normalizeInPlace();\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function fromSumOf(p: Point3d, v: Vector3d, scale: number, out?: Point3d) {\r\n const result = undefined !== out ? out : new Point3d();\r\n result.x = p.x + v.x * scale;\r\n result.y = p.y + v.y * scale;\r\n result.z = p.z + v.z * scale;\r\n return result;\r\n}\r\n\r\nfunction dotDifference(pt: Point3d, origin: Point3d, vec: Vector3d): number {\r\n return (pt.x - origin.x) * vec.x + (pt.y - origin.y) * vec.y + (pt.z - origin.z) * vec.z;\r\n}\r\n\r\nfunction lookIn(eye: Point3d, viewX: Vector3d, viewY: Vector3d, viewZ: Vector3d, result: Transform) {\r\n const rot = result.matrix.coffs;\r\n rot[0] = viewX.x;\r\n rot[1] = viewX.y;\r\n rot[2] = viewX.z;\r\n rot[3] = viewY.x;\r\n rot[4] = viewY.y;\r\n rot[5] = viewY.z;\r\n rot[6] = viewZ.x;\r\n rot[7] = viewZ.y;\r\n rot[8] = viewZ.z;\r\n\r\n result.origin.x = -viewX.dotProduct(eye);\r\n result.origin.y = -viewY.dotProduct(eye);\r\n result.origin.z = -viewZ.dotProduct(eye);\r\n}\r\n\r\nfunction ortho(left: number, right: number, bottom: number, top: number, near: number, far: number, result: Matrix4d) {\r\n Matrix4d.createRowValues(\r\n 2.0 / (right - left), 0.0, 0.0, -(right + left) / (right - left),\r\n 0.0, 2.0 / (top - bottom), 0.0, -(top + bottom) / (top - bottom),\r\n 0.0, 0.0, -2.0 / (far - near), -(far + near) / (far - near),\r\n 0.0, 0.0, 0.0, 1.0,\r\n result);\r\n}\r\n\r\nfunction frustum(left: number, right: number, bottom: number, top: number, near: number, far: number, result: Matrix4d) {\r\n Matrix4d.createRowValues(\r\n (2.0 * near) / (right - left), 0.0, (right + left) / (right - left), 0.0,\r\n 0.0, (2.0 * near) / (top - bottom), (top + bottom) / (top - bottom), 0.0,\r\n 0.0, 0.0, -(far + near) / (far - near), -(2.0 * far * near) / (far - near),\r\n 0.0, 0.0, -1.0, 0.0,\r\n result);\r\n}\r\n"]}
1
+ {"version":3,"file":"FrustumUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/FrustumUniforms.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { InverseMatrixState, Matrix4d, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Frustum, Npc } from \"@itwin/core-common\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { IModelFrameLifecycle } from \"./IModelFrameLifecycle\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { desync, sync } from \"./Sync\";\r\n\r\n/** @internal */\r\nexport const enum FrustumUniformType { // eslint-disable-line no-restricted-syntax\r\n TwoDee,\r\n Orthographic,\r\n Perspective,\r\n}\r\n\r\n/** @internal */\r\nexport const enum Plane { // eslint-disable-line no-restricted-syntax\r\n kTop,\r\n kBottom,\r\n kLeft,\r\n kRight,\r\n}\r\n\r\nconst enum FrustumData { // eslint-disable-line no-restricted-syntax\r\n kNear,\r\n kFar,\r\n kType,\r\n}\r\n\r\n/** Represents a Target's frustum for use in glsl as a pair of uniforms.\r\n * Do not modify fields of exposed objects directly. e.g., do not directly manipulate the projection or view matrices - use the appropriate APIs.\r\n * @internal\r\n */\r\nexport class FrustumUniforms {\r\n // CPU state. Do not modify - use APIs.\r\n public readonly planFrustum = new Frustum();\r\n private _planFraction = 0;\r\n private readonly _nearPlaneCenter = new Point3d();\r\n public readonly viewMatrix = Transform.createIdentity();\r\n public readonly projectionMatrix = Matrix4d.createIdentity();\r\n private readonly _worldUpVector = Vector3d.unitZ();\r\n private readonly _viewUpVector = Vector3d.unitZ();\r\n\r\n // GPU state\r\n private readonly _planeData: Float32Array = new Float32Array(4);\r\n private readonly _frustumData: Float32Array = new Float32Array(3);\r\n public readonly projectionMatrix32 = new Matrix4();\r\n private readonly _logZData = new Float32Array(2);\r\n private readonly _viewUpVector32 = new Float32Array(3);\r\n\r\n // SyncTarget\r\n public syncKey = 0;\r\n\r\n // Scratch variables\r\n private readonly _scratch = {\r\n point3d: new Point3d(),\r\n vec3d: new Vector3d(),\r\n viewX: new Vector3d(),\r\n viewY: new Vector3d(),\r\n viewZ: new Vector3d(),\r\n };\r\n\r\n public constructor() {\r\n }\r\n\r\n public bindProjectionMatrix(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setMatrix4(this.projectionMatrix32);\r\n }\r\n\r\n public bindUpVector(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._viewUpVector32);\r\n }\r\n\r\n // uniform vec4 u_frustumPlanes; // { top, bottom, left, right }\r\n public get planes(): Float32Array { return this._planeData; }\r\n\r\n // uniform vec3 u_frustum; // { near, far, type }\r\n public get frustum(): Float32Array { return this._frustumData; }\r\n\r\n public get nearPlane(): number { return this._frustumData[FrustumData.kNear]; }\r\n public get farPlane(): number { return this._frustumData[FrustumData.kFar]; }\r\n public get type(): FrustumUniformType { return this.frustum[FrustumData.kType] as FrustumUniformType; }\r\n public get is2d(): boolean { return FrustumUniformType.TwoDee === this.type; }\r\n public get planFraction(): number { return this._planFraction; }\r\n\r\n // uniform vec2 u_logZ where x = 1/near and y = log(far/near)\r\n public get logZ(): Float32Array { return this._logZData; }\r\n\r\n public changeFrustum(newFrustum: Frustum, newFraction: number, is3d: boolean): void {\r\n if (newFraction === this._planFraction && is3d !== this.is2d && newFrustum.equals(this.planFrustum))\r\n return;\r\n\r\n desync(this);\r\n\r\n newFrustum.clone(this.planFrustum);\r\n\r\n const farLowerLeft = newFrustum.getCorner(Npc.LeftBottomRear);\r\n const farLowerRight = newFrustum.getCorner(Npc.RightBottomRear);\r\n const farUpperLeft = newFrustum.getCorner(Npc.LeftTopRear);\r\n const farUpperRight = newFrustum.getCorner(Npc.RightTopRear);\r\n const nearLowerLeft = newFrustum.getCorner(Npc.LeftBottomFront);\r\n const nearLowerRight = newFrustum.getCorner(Npc.RightBottomFront);\r\n const nearUpperLeft = newFrustum.getCorner(Npc.LeftTopFront);\r\n const nearUpperRight = newFrustum.getCorner(Npc.RightTopFront);\r\n\r\n const nearCenter = nearLowerLeft.interpolate(0.5, nearUpperRight, this._scratch.point3d);\r\n\r\n const viewX = normalizedDifference(nearLowerRight, nearLowerLeft, this._scratch.viewX);\r\n const viewY = normalizedDifference(nearUpperLeft, nearLowerLeft, this._scratch.viewY);\r\n const viewZ = viewX.crossProduct(viewY, this._scratch.viewZ).normalize()!;\r\n\r\n this._planFraction = newFraction;\r\n\r\n if (!is3d || newFraction > 0.999) { // ortho or 2d\r\n const halfWidth = Vector3d.createStartEnd(farLowerRight, farLowerLeft, this._scratch.vec3d).magnitude() * 0.5;\r\n const halfHeight = Vector3d.createStartEnd(farLowerRight, farUpperRight).magnitude() * 0.5;\r\n const depth = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, this._scratch.vec3d).magnitude();\r\n\r\n lookIn(nearCenter, viewX, viewY, viewZ, this.viewMatrix);\r\n ortho(-halfWidth, halfWidth, -halfHeight, halfHeight, 0, depth, this.projectionMatrix);\r\n\r\n this._nearPlaneCenter.setFrom(nearLowerLeft);\r\n this._nearPlaneCenter.interpolate(0.5, nearUpperRight, this._nearPlaneCenter);\r\n\r\n this.setPlanes(halfHeight, -halfHeight, -halfWidth, halfWidth);\r\n this.setFrustum(0, depth, is3d ? FrustumUniformType.Orthographic : FrustumUniformType.TwoDee);\r\n } else { // perspective\r\n const scale = 1.0 / (1.0 - newFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, this._scratch.vec3d);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, this._scratch.point3d);\r\n\r\n const frustumLeft = dotDifference(farLowerLeft, cameraPosition, viewX) * newFraction;\r\n const frustumRight = dotDifference(farLowerRight, cameraPosition, viewX) * newFraction;\r\n const frustumBottom = dotDifference(farLowerLeft, cameraPosition, viewY) * newFraction;\r\n const frustumTop = dotDifference(farUpperLeft, cameraPosition, viewY) * newFraction;\r\n const frustumFront = -dotDifference(nearLowerLeft, cameraPosition, viewZ);\r\n const frustumBack = -dotDifference(farLowerLeft, cameraPosition, viewZ);\r\n\r\n lookIn(cameraPosition, viewX, viewY, viewZ, this.viewMatrix);\r\n frustum(frustumLeft, frustumRight, frustumBottom, frustumTop, frustumFront, frustumBack, this.projectionMatrix);\r\n\r\n IModelFrameLifecycle.onChangeCameraView.raiseEvent({\r\n cameraPosition,\r\n viewX,\r\n viewY,\r\n viewZ,\r\n });\r\n IModelFrameLifecycle.onChangeCameraFrustum.raiseEvent({\r\n type: FrustumUniformType.Perspective,\r\n left: frustumLeft,\r\n right: frustumRight,\r\n bottom: frustumBottom,\r\n top: frustumTop,\r\n front: frustumFront,\r\n back: frustumBack,\r\n });\r\n\r\n this._nearPlaneCenter.setFrom(nearLowerLeft);\r\n this._nearPlaneCenter.interpolate(0.5, nearUpperRight, this._nearPlaneCenter);\r\n\r\n this.setPlanes(frustumTop, frustumBottom, frustumLeft, frustumRight);\r\n this.setFrustum(frustumFront, frustumBack, FrustumUniformType.Perspective);\r\n }\r\n\r\n this.viewMatrix.matrix.inverseState = InverseMatrixState.unknown;\r\n\r\n this.viewMatrix.matrix.multiplyVector(this._worldUpVector, this._viewUpVector);\r\n this._viewUpVector.normalizeInPlace();\r\n this._viewUpVector32[0] = this._viewUpVector.x;\r\n this._viewUpVector32[1] = this._viewUpVector.y;\r\n this._viewUpVector32[2] = this._viewUpVector.z;\r\n\r\n this.projectionMatrix32.initFromMatrix4d(this.projectionMatrix);\r\n }\r\n\r\n public changeProjectionMatrix(newMatrix: Matrix4d): void {\r\n desync(this);\r\n this.projectionMatrix.setFrom(newMatrix);\r\n this.projectionMatrix32.initFromMatrix4d(this.projectionMatrix);\r\n }\r\n\r\n protected setPlanes(top: number, bottom: number, left: number, right: number): void {\r\n this._planeData[Plane.kTop] = top;\r\n this._planeData[Plane.kBottom] = bottom;\r\n this._planeData[Plane.kLeft] = left;\r\n this._planeData[Plane.kRight] = right;\r\n }\r\n\r\n protected setFrustum(nearPlane: number, farPlane: number, type: FrustumUniformType): void {\r\n this._frustumData[FrustumData.kNear] = nearPlane;\r\n this._frustumData[FrustumData.kFar] = farPlane;\r\n this._frustumData[FrustumData.kType] = type as number;\r\n\r\n // If nearPlane is zero, we don't have a camera (or got very unlucky); in that case shader will compute linear depth.\r\n this._logZData[0] = 0 !== nearPlane ? 1 / nearPlane : 0;\r\n this._logZData[1] = 0 !== nearPlane ? Math.log(farPlane / nearPlane) : farPlane;\r\n }\r\n}\r\n\r\nfunction normalizedDifference(p0: Point3d, p1: Point3d, out?: Vector3d): Vector3d {\r\n const result = undefined !== out ? out : new Vector3d();\r\n result.x = p0.x - p1.x;\r\n result.y = p0.y - p1.y;\r\n result.z = p0.z - p1.z;\r\n result.normalizeInPlace();\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function fromSumOf(p: Point3d, v: Vector3d, scale: number, out?: Point3d) {\r\n const result = undefined !== out ? out : new Point3d();\r\n result.x = p.x + v.x * scale;\r\n result.y = p.y + v.y * scale;\r\n result.z = p.z + v.z * scale;\r\n return result;\r\n}\r\n\r\nfunction dotDifference(pt: Point3d, origin: Point3d, vec: Vector3d): number {\r\n return (pt.x - origin.x) * vec.x + (pt.y - origin.y) * vec.y + (pt.z - origin.z) * vec.z;\r\n}\r\n\r\nfunction lookIn(eye: Point3d, viewX: Vector3d, viewY: Vector3d, viewZ: Vector3d, result: Transform) {\r\n const rot = result.matrix.coffs;\r\n rot[0] = viewX.x;\r\n rot[1] = viewX.y;\r\n rot[2] = viewX.z;\r\n rot[3] = viewY.x;\r\n rot[4] = viewY.y;\r\n rot[5] = viewY.z;\r\n rot[6] = viewZ.x;\r\n rot[7] = viewZ.y;\r\n rot[8] = viewZ.z;\r\n\r\n result.origin.x = -viewX.dotProduct(eye);\r\n result.origin.y = -viewY.dotProduct(eye);\r\n result.origin.z = -viewZ.dotProduct(eye);\r\n}\r\n\r\nfunction ortho(left: number, right: number, bottom: number, top: number, near: number, far: number, result: Matrix4d) {\r\n Matrix4d.createRowValues(\r\n 2.0 / (right - left), 0.0, 0.0, -(right + left) / (right - left),\r\n 0.0, 2.0 / (top - bottom), 0.0, -(top + bottom) / (top - bottom),\r\n 0.0, 0.0, -2.0 / (far - near), -(far + near) / (far - near),\r\n 0.0, 0.0, 0.0, 1.0,\r\n result);\r\n}\r\n\r\nfunction frustum(left: number, right: number, bottom: number, top: number, near: number, far: number, result: Matrix4d) {\r\n Matrix4d.createRowValues(\r\n (2.0 * near) / (right - left), 0.0, (right + left) / (right - left), 0.0,\r\n 0.0, (2.0 * near) / (top - bottom), (top + bottom) / (top - bottom), 0.0,\r\n 0.0, 0.0, -(far + near) / (far - near), -(2.0 * far * near) / (far - near),\r\n 0.0, 0.0, -1.0, 0.0,\r\n result);\r\n}\r\n"]}
@@ -61,9 +61,9 @@ class LayerContainer extends GraphicWrapper {
61
61
  super(graphic);
62
62
  this.elevation = elevation;
63
63
  if (drawAsOverlay)
64
- this.renderPass = 10 /* OverlayLayers */;
64
+ this.renderPass = 11 /* OverlayLayers */;
65
65
  else if (transparency > 0)
66
- this.renderPass = 6 /* TranslucentLayers */;
66
+ this.renderPass = 7 /* TranslucentLayers */;
67
67
  else
68
68
  this.renderPass = 1 /* OpaqueLayers */; // ###TODO: What about layers containing naturally-transparent geometry?
69
69
  }
@@ -210,8 +210,8 @@ class LayerCommandLists {
210
210
  }
211
211
  outputCommands() {
212
212
  this.outputCommandsForPass(1 /* OpaqueLayers */);
213
- this.outputCommandsForPass(6 /* TranslucentLayers */);
214
- this.outputCommandsForPass(10 /* OverlayLayers */);
213
+ this.outputCommandsForPass(7 /* TranslucentLayers */);
214
+ this.outputCommandsForPass(11 /* OverlayLayers */);
215
215
  }
216
216
  outputCommandsForPass(pass) {
217
217
  const map = this._maps[pass];
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarClassifier.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlanarClassifier.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/PlanarClassifier.ts"],"names":[],"mappings":"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"}
@@ -96,7 +96,7 @@ class ClassifierFrameBuffers {
96
96
  system.frameBufferStack.execute(this._hilite, true, false, () => {
97
97
  gl.clearColor(0, 0, 0, 0);
98
98
  gl.clear(GL_1.GL.BufferBit.Color);
99
- target.techniques.execute(target, cmds, 9 /* Hilite */);
99
+ target.techniques.execute(target, cmds, 10 /* Hilite */);
100
100
  });
101
101
  }
102
102
  static create(width, height) {
@@ -138,7 +138,7 @@ class ClassifierMRTFrameBuffers extends ClassifierFrameBuffers {
138
138
  draw(cmds, target) {
139
139
  System_1.System.instance.frameBufferStack.execute(this._fbo, true, false, () => {
140
140
  target.techniques.draw((0, ScratchDrawParams_1.getDrawParams)(target, this._clearGeom));
141
- target.techniques.execute(target, cmds, 18 /* PlanarClassification */);
141
+ target.techniques.execute(target, cmds, 19 /* PlanarClassification */);
142
142
  });
143
143
  }
144
144
  }
@@ -172,7 +172,7 @@ class ClassifierMPFrameBuffers extends ClassifierFrameBuffers {
172
172
  gl.clearColor(0, 0, 0, 0);
173
173
  gl.clear(GL_1.GL.BufferBit.Color);
174
174
  target.compositor.currentRenderTargetIndex = feature ? 1 : 0;
175
- target.techniques.execute(target, cmds, 18 /* PlanarClassification */);
175
+ target.techniques.execute(target, cmds, 19 /* PlanarClassification */);
176
176
  });
177
177
  };
178
178
  draw(false);
@@ -216,7 +216,7 @@ class MaskFrameBuffer extends SingleTextureFrameBuffer {
216
216
  gl.clear(GL_1.GL.BufferBit.Color);
217
217
  if (!System_1.System.instance.capabilities.supportsDrawBuffers)
218
218
  target.compositor.currentRenderTargetIndex = 0;
219
- target.techniques.execute(target, cmds, 18 /* PlanarClassification */);
219
+ target.techniques.execute(target, cmds, 19 /* PlanarClassification */);
220
220
  });
221
221
  }
222
222
  }
@@ -402,7 +402,8 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
402
402
  this._planarClipMaskOverrides = (_b = this._planarClipMask) === null || _b === void 0 ? void 0 : _b.getPlanarClipMaskSymbologyOverrides();
403
403
  const drawTree = (treeRef, graphics) => {
404
404
  this._graphics = graphics;
405
- const drawArgs = internal_1.GraphicsCollectorDrawArgs.create(context, this, treeRef, new core_common_1.FrustumPlanes(this._frustum), projection.worldToViewMap);
405
+ const frustumPlanes = this._frustum ? core_common_1.FrustumPlanes.fromFrustum(this._frustum) : core_common_1.FrustumPlanes.createEmpty();
406
+ const drawArgs = internal_1.GraphicsCollectorDrawArgs.create(context, this, treeRef, frustumPlanes, projection.worldToViewMap);
406
407
  if (undefined !== drawArgs)
407
408
  treeRef.draw(drawArgs);
408
409
  this._graphics = undefined;
@@ -513,10 +514,10 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
513
514
  // NB: "Outside" geometry by definition cannot take color/transparency from element...
514
515
  const cmds = renderCommands.getCommands(3 /* OpaquePlanar */);
515
516
  // NB: We don't strictly require the classifier geometry to be planar, and sometimes (e.g., "planar" polyface/bspsurf) we do not detect planarity.
516
- cmds.push(...renderCommands.getCommands(4 /* OpaqueGeneral */));
517
+ cmds.push(...renderCommands.getCommands(5 /* OpaqueGeneral */));
517
518
  cmds.push(...renderCommands.getCommands(2 /* OpaqueLinear */));
518
519
  this._anyOpaque = cmds.length > 0;
519
- const transCmds = renderCommands.getCommands(7 /* Translucent */);
520
+ const transCmds = renderCommands.getCommands(8 /* Translucent */);
520
521
  if (transCmds.length > 0) {
521
522
  cmds.push(...transCmds);
522
523
  this._anyTranslucent = true;
@@ -526,7 +527,7 @@ class PlanarClassifier extends RenderPlanarClassifier_1.RenderPlanarClassifier {
526
527
  if (this._classifierGraphics.length > 0 && this._classifierBuffers) {
527
528
  this._classifierBuffers.draw(getDrawCommands(this._classifierGraphics), target);
528
529
  // Draw any hilited classifiers.
529
- const hiliteCommands = renderCommands.getCommands(9 /* Hilite */);
530
+ const hiliteCommands = renderCommands.getCommands(10 /* Hilite */);
530
531
  this._anyHilited = 0 !== hiliteCommands.length;
531
532
  if (this._anyHilited)
532
533
  this._classifierBuffers.drawHilite(hiliteCommands, target);