@itwin/core-frontend 4.0.0-dev.2 → 4.0.0-dev.6

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 (447) hide show
  1. package/lib/cjs/IModelApp.d.ts +1 -0
  2. package/lib/cjs/IModelApp.d.ts.map +1 -1
  3. package/lib/cjs/IModelApp.js +2 -4
  4. package/lib/cjs/IModelApp.js.map +1 -1
  5. package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
  6. package/lib/cjs/SubCategoriesCache.js +0 -1
  7. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  8. package/lib/cjs/render/RealityMeshParams.d.ts +4 -1
  9. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  10. package/lib/cjs/render/RealityMeshParams.js +14 -4
  11. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  12. package/lib/cjs/render/RenderSystem.d.ts +5 -16
  13. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  14. package/lib/cjs/render/RenderSystem.js +0 -6
  15. package/lib/cjs/render/RenderSystem.js.map +1 -1
  16. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  17. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  18. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  19. package/lib/cjs/render/webgl/AttributeBuffers.d.ts +9 -79
  20. package/lib/cjs/render/webgl/AttributeBuffers.d.ts.map +1 -1
  21. package/lib/cjs/render/webgl/AttributeBuffers.js +19 -152
  22. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  23. package/lib/cjs/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  24. package/lib/cjs/render/webgl/BackgroundMapDrape.js +0 -3
  25. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  26. package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
  27. package/lib/cjs/render/webgl/BranchUniforms.js +0 -8
  28. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  29. package/lib/cjs/render/webgl/ClipStack.d.ts +0 -1
  30. package/lib/cjs/render/webgl/ClipStack.d.ts.map +1 -1
  31. package/lib/cjs/render/webgl/ClipStack.js +2 -6
  32. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  33. package/lib/cjs/render/webgl/ClipVolume.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/ClipVolume.js +1 -5
  35. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  36. package/lib/cjs/render/webgl/ClippingProgram.d.ts +3 -2
  37. package/lib/cjs/render/webgl/ClippingProgram.d.ts.map +1 -1
  38. package/lib/cjs/render/webgl/ClippingProgram.js +10 -37
  39. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  40. package/lib/cjs/render/webgl/DrawCommand.d.ts +2 -2
  41. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/DrawCommand.js +1 -1
  43. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  44. package/lib/cjs/render/webgl/FeatureOverrides.js +1 -1
  45. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  46. package/lib/cjs/render/webgl/FloatRGBA.d.ts.map +1 -1
  47. package/lib/cjs/render/webgl/FloatRGBA.js +0 -4
  48. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  49. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  50. package/lib/cjs/render/webgl/GLTimer.d.ts.map +1 -1
  51. package/lib/cjs/render/webgl/GLTimer.js +2 -35
  52. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  53. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  54. package/lib/cjs/render/webgl/PlanarClassifier.js +13 -71
  55. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  56. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  57. package/lib/cjs/render/webgl/PointCloud.js +1 -3
  58. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  59. package/lib/cjs/render/webgl/RenderBuffer.d.ts +1 -1
  60. package/lib/cjs/render/webgl/RenderBuffer.d.ts.map +1 -1
  61. package/lib/cjs/render/webgl/RenderBuffer.js +2 -3
  62. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  63. package/lib/cjs/render/webgl/RenderFlags.d.ts +1 -2
  64. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  65. package/lib/cjs/render/webgl/RenderFlags.js +4 -6
  66. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  67. package/lib/cjs/render/webgl/SceneCompositor.d.ts +0 -2
  68. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  69. package/lib/cjs/render/webgl/SceneCompositor.js +754 -1135
  70. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  71. package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
  72. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  73. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +1 -2
  74. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  75. package/lib/cjs/render/webgl/ShaderBuilder.js +13 -48
  76. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  77. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -2
  78. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  79. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  80. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  81. package/lib/cjs/render/webgl/SolarShadowMap.js +5 -26
  82. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  83. package/lib/cjs/render/webgl/System.d.ts +10 -10
  84. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  85. package/lib/cjs/render/webgl/System.js +39 -122
  86. package/lib/cjs/render/webgl/System.js.map +1 -1
  87. package/lib/cjs/render/webgl/Technique.d.ts +4 -5
  88. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  89. package/lib/cjs/render/webgl/Technique.js +4 -28
  90. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  91. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  92. package/lib/cjs/render/webgl/Texture.js +14 -18
  93. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  94. package/lib/cjs/render/webgl/ThematicSensors.d.ts +4 -3
  95. package/lib/cjs/render/webgl/ThematicSensors.d.ts.map +1 -1
  96. package/lib/cjs/render/webgl/ThematicSensors.js +9 -50
  97. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  98. package/lib/cjs/render/webgl/ThematicUniforms.js +1 -1
  99. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  100. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  101. package/lib/cjs/render/webgl/UniformHandle.js +1 -4
  102. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  103. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  104. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  105. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
  106. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  107. package/lib/cjs/render/webgl/glsl/Animation.d.ts +1 -2
  108. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  109. package/lib/cjs/render/webgl/glsl/Animation.js +23 -26
  110. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  111. package/lib/cjs/render/webgl/glsl/Blur.d.ts +1 -2
  112. package/lib/cjs/render/webgl/glsl/Blur.d.ts.map +1 -1
  113. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  114. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  115. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  116. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -9
  117. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  118. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  119. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  120. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -10
  121. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  122. package/lib/cjs/render/webgl/glsl/Clipping.d.ts +1 -1
  123. package/lib/cjs/render/webgl/glsl/Clipping.d.ts.map +1 -1
  124. package/lib/cjs/render/webgl/glsl/Clipping.js +5 -36
  125. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  126. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  127. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  128. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  129. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts +1 -2
  130. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  131. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  132. package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
  133. package/lib/cjs/render/webgl/glsl/Common.js +9 -55
  134. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  135. package/lib/cjs/render/webgl/glsl/Composite.d.ts +1 -2
  136. package/lib/cjs/render/webgl/glsl/Composite.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  138. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts +1 -2
  139. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  140. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  141. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  142. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +12 -19
  144. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  145. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts +4 -7
  146. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  147. package/lib/cjs/render/webgl/glsl/CopyStencil.js +2 -39
  148. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  149. package/lib/cjs/render/webgl/glsl/EDL.d.ts +4 -5
  150. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -1
  151. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  152. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  153. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  154. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  155. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  156. package/lib/cjs/render/webgl/glsl/Edge.js +2 -2
  157. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  158. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  159. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +3 -24
  160. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  161. package/lib/cjs/render/webgl/glsl/Fragment.d.ts +0 -7
  162. package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
  163. package/lib/cjs/render/webgl/glsl/Fragment.js +5 -40
  164. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  165. package/lib/cjs/render/webgl/glsl/Instancing.d.ts.map +1 -1
  166. package/lib/cjs/render/webgl/glsl/Instancing.js +1 -5
  167. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  168. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  169. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  170. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  171. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  172. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  173. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -12
  174. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  175. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  176. package/lib/cjs/render/webgl/glsl/RealityMesh.js +3 -8
  177. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  178. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts +1 -2
  179. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  180. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  181. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts +1 -2
  182. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  183. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  184. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -1
  185. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  186. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  187. package/lib/cjs/render/webgl/glsl/Surface.js +33 -57
  188. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  189. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  190. package/lib/cjs/render/webgl/glsl/Thematic.js +3 -36
  191. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  192. package/lib/cjs/render/webgl/glsl/Translucency.d.ts.map +1 -1
  193. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -12
  194. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  195. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +1 -2
  196. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  197. package/lib/cjs/render/webgl/glsl/Vertex.js +15 -78
  198. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  199. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  200. package/lib/cjs/render/webgl/glsl/Wiremesh.js +2 -5
  201. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  202. package/lib/cjs/tile/PrimaryTileTree.d.ts +0 -3
  203. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  204. package/lib/cjs/tile/PrimaryTileTree.js +6 -28
  205. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  206. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  207. package/lib/cjs/tile/RealityTileTree.js +1 -2
  208. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  209. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  210. package/lib/cjs/tile/TileAdmin.js +2 -2
  211. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  212. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
  213. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  214. package/lib/cjs/tile/map/ImageryTileTree.js +10 -5
  215. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  216. package/lib/cjs/tile/map/MapTile.d.ts +8 -0
  217. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  218. package/lib/cjs/tile/map/MapTile.js +26 -2
  219. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  220. package/lib/cjs/tile/map/MapTileTree.d.ts +2 -1
  221. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  222. package/lib/cjs/tile/map/MapTileTree.js +11 -8
  223. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  224. package/lib/esm/IModelApp.d.ts +1 -0
  225. package/lib/esm/IModelApp.d.ts.map +1 -1
  226. package/lib/esm/IModelApp.js +2 -4
  227. package/lib/esm/IModelApp.js.map +1 -1
  228. package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
  229. package/lib/esm/SubCategoriesCache.js +0 -1
  230. package/lib/esm/SubCategoriesCache.js.map +1 -1
  231. package/lib/esm/render/RealityMeshParams.d.ts +4 -1
  232. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  233. package/lib/esm/render/RealityMeshParams.js +14 -4
  234. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  235. package/lib/esm/render/RenderSystem.d.ts +5 -16
  236. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  237. package/lib/esm/render/RenderSystem.js +0 -6
  238. package/lib/esm/render/RenderSystem.js.map +1 -1
  239. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  240. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  241. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  242. package/lib/esm/render/webgl/AttributeBuffers.d.ts +9 -79
  243. package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
  244. package/lib/esm/render/webgl/AttributeBuffers.js +16 -144
  245. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  246. package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  247. package/lib/esm/render/webgl/BackgroundMapDrape.js +0 -3
  248. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  249. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  250. package/lib/esm/render/webgl/BranchUniforms.js +0 -8
  251. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  252. package/lib/esm/render/webgl/ClipStack.d.ts +0 -1
  253. package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
  254. package/lib/esm/render/webgl/ClipStack.js +2 -6
  255. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  256. package/lib/esm/render/webgl/ClipVolume.d.ts.map +1 -1
  257. package/lib/esm/render/webgl/ClipVolume.js +1 -5
  258. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  259. package/lib/esm/render/webgl/ClippingProgram.d.ts +3 -2
  260. package/lib/esm/render/webgl/ClippingProgram.d.ts.map +1 -1
  261. package/lib/esm/render/webgl/ClippingProgram.js +10 -37
  262. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  263. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
  264. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  265. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  266. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  267. package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
  268. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  269. package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
  270. package/lib/esm/render/webgl/FloatRGBA.js +0 -4
  271. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  272. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  273. package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
  274. package/lib/esm/render/webgl/GLTimer.js +2 -35
  275. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  276. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  277. package/lib/esm/render/webgl/PlanarClassifier.js +13 -71
  278. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  279. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  280. package/lib/esm/render/webgl/PointCloud.js +1 -3
  281. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  282. package/lib/esm/render/webgl/RenderBuffer.d.ts +1 -1
  283. package/lib/esm/render/webgl/RenderBuffer.d.ts.map +1 -1
  284. package/lib/esm/render/webgl/RenderBuffer.js +2 -3
  285. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  286. package/lib/esm/render/webgl/RenderFlags.d.ts +1 -2
  287. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  288. package/lib/esm/render/webgl/RenderFlags.js +4 -6
  289. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  290. package/lib/esm/render/webgl/SceneCompositor.d.ts +0 -2
  291. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  292. package/lib/esm/render/webgl/SceneCompositor.js +756 -1137
  293. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  294. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  295. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  296. package/lib/esm/render/webgl/ShaderBuilder.d.ts +1 -2
  297. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  298. package/lib/esm/render/webgl/ShaderBuilder.js +13 -48
  299. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  300. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -2
  301. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  302. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  303. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  304. package/lib/esm/render/webgl/SolarShadowMap.js +5 -26
  305. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  306. package/lib/esm/render/webgl/System.d.ts +10 -10
  307. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  308. package/lib/esm/render/webgl/System.js +41 -124
  309. package/lib/esm/render/webgl/System.js.map +1 -1
  310. package/lib/esm/render/webgl/Technique.d.ts +4 -5
  311. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  312. package/lib/esm/render/webgl/Technique.js +5 -29
  313. package/lib/esm/render/webgl/Technique.js.map +1 -1
  314. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  315. package/lib/esm/render/webgl/Texture.js +14 -18
  316. package/lib/esm/render/webgl/Texture.js.map +1 -1
  317. package/lib/esm/render/webgl/ThematicSensors.d.ts +4 -3
  318. package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
  319. package/lib/esm/render/webgl/ThematicSensors.js +9 -50
  320. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  321. package/lib/esm/render/webgl/ThematicUniforms.js +1 -1
  322. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  323. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  324. package/lib/esm/render/webgl/UniformHandle.js +1 -4
  325. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  326. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  327. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  328. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  329. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  330. package/lib/esm/render/webgl/glsl/Animation.d.ts +1 -2
  331. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  332. package/lib/esm/render/webgl/glsl/Animation.js +23 -26
  333. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  334. package/lib/esm/render/webgl/glsl/Blur.d.ts +1 -2
  335. package/lib/esm/render/webgl/glsl/Blur.d.ts.map +1 -1
  336. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  337. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  338. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  339. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -9
  340. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  341. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  342. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  343. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -10
  344. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  345. package/lib/esm/render/webgl/glsl/Clipping.d.ts +1 -1
  346. package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
  347. package/lib/esm/render/webgl/glsl/Clipping.js +5 -36
  348. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  349. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  350. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  351. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  352. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts +1 -2
  353. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  354. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  355. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  356. package/lib/esm/render/webgl/glsl/Common.js +9 -55
  357. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  358. package/lib/esm/render/webgl/glsl/Composite.d.ts +1 -2
  359. package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
  360. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  361. package/lib/esm/render/webgl/glsl/CopyColor.d.ts +1 -2
  362. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  363. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  364. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  365. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  366. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +12 -19
  367. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  368. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts +4 -7
  369. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  370. package/lib/esm/render/webgl/glsl/CopyStencil.js +1 -37
  371. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  372. package/lib/esm/render/webgl/glsl/EDL.d.ts +4 -5
  373. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -1
  374. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  375. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  376. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  378. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  379. package/lib/esm/render/webgl/glsl/Edge.js +2 -2
  380. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  381. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  382. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +3 -24
  383. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  384. package/lib/esm/render/webgl/glsl/Fragment.d.ts +0 -7
  385. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  386. package/lib/esm/render/webgl/glsl/Fragment.js +4 -38
  387. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  388. package/lib/esm/render/webgl/glsl/Instancing.d.ts.map +1 -1
  389. package/lib/esm/render/webgl/glsl/Instancing.js +1 -5
  390. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  391. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  392. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  393. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  394. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  395. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  396. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -12
  397. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  398. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  399. package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -8
  400. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  401. package/lib/esm/render/webgl/glsl/SkyBox.d.ts +1 -2
  402. package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  403. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  404. package/lib/esm/render/webgl/glsl/SkySphere.d.ts +1 -2
  405. package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  406. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  407. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
  408. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  409. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  410. package/lib/esm/render/webgl/glsl/Surface.js +33 -57
  411. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  412. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  413. package/lib/esm/render/webgl/glsl/Thematic.js +3 -36
  414. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  415. package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
  416. package/lib/esm/render/webgl/glsl/Translucency.js +3 -13
  417. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  418. package/lib/esm/render/webgl/glsl/Vertex.d.ts +1 -2
  419. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  420. package/lib/esm/render/webgl/glsl/Vertex.js +16 -79
  421. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  422. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  423. package/lib/esm/render/webgl/glsl/Wiremesh.js +2 -5
  424. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  425. package/lib/esm/tile/PrimaryTileTree.d.ts +0 -3
  426. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  427. package/lib/esm/tile/PrimaryTileTree.js +8 -30
  428. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  429. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  430. package/lib/esm/tile/RealityTileTree.js +1 -2
  431. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  432. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  433. package/lib/esm/tile/TileAdmin.js +2 -2
  434. package/lib/esm/tile/TileAdmin.js.map +1 -1
  435. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
  436. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  437. package/lib/esm/tile/map/ImageryTileTree.js +10 -5
  438. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  439. package/lib/esm/tile/map/MapTile.d.ts +8 -0
  440. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  441. package/lib/esm/tile/map/MapTile.js +26 -2
  442. package/lib/esm/tile/map/MapTile.js.map +1 -1
  443. package/lib/esm/tile/map/MapTileTree.d.ts +2 -1
  444. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  445. package/lib/esm/tile/map/MapTileTree.js +11 -8
  446. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  447. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureOverrides.js","sourceRoot":"","sources":["../../../../src/render/webgl/FeatureOverrides.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, dispose, Id64 } from \"@itwin/core-bentley\";\r\nimport { PackedFeature, PackedFeatureTable } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { DisplayParams } from \"../primitives/DisplayParams\";\r\nimport { BatchOptions } from \"../GraphicBuilder\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { GL } from \"./GL\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { EmphasisFlags, OvrFlags, TextureUnit } from \"./RenderFlags\";\r\nimport { sync, SyncObserver } from \"./Sync\";\r\nimport { System } from \"./System\";\r\nimport { Hilites, Target } from \"./Target\";\r\nimport { Texture2DDataUpdater, Texture2DHandle, TextureHandle } from \"./Texture\";\r\n\r\nfunction computeWidthAndHeight(nEntries: number, nRgbaPerEntry: number, nExtraRgba: number = 0, nTables: number = 1): { width: number, height: number } {\r\n const maxSize = System.instance.capabilities.maxTextureSize;\r\n const nRgba = nEntries * nRgbaPerEntry * nTables + nExtraRgba;\r\n\r\n if (nRgba < maxSize)\r\n return { width: nRgba, height: 1 };\r\n\r\n // Make roughly square to reduce unused space in last row\r\n let width = Math.ceil(Math.sqrt(nRgba));\r\n\r\n // Ensure a given entry's RGBA values all fit on the same row.\r\n const remainder = width % nRgbaPerEntry;\r\n if (0 !== remainder) {\r\n width += nRgbaPerEntry - remainder;\r\n }\r\n\r\n // Compute height\r\n const height = Math.ceil(nRgba / width);\r\n\r\n assert(height <= maxSize);\r\n assert(width <= maxSize);\r\n assert(width * height >= nRgba);\r\n assert(Math.floor(height) === height);\r\n assert(Math.floor(width) === width);\r\n\r\n // Row padding should never be necessary...\r\n assert(0 === width % nRgbaPerEntry);\r\n\r\n return { width, height };\r\n}\r\n\r\nexport function isFeatureHilited(feature: PackedFeature, hilites: Hilites, isModelHilited: boolean): boolean {\r\n if (hilites.isEmpty)\r\n return false;\r\n\r\n if (\"union\" === hilites.modelSubCategoryMode)\r\n return isModelHilited || hilites.elements.hasPair(feature.elementId) || hilites.subcategories.hasPair(feature.subCategoryId);\r\n\r\n return hilites.elements.hasPair(feature.elementId) || (isModelHilited && hilites.subcategories.hasPair(feature.subCategoryId));\r\n}\r\n\r\n/** @internal */\r\nexport type FeatureOverridesCleanup = () => void;\r\n\r\n/** @internal */\r\nexport class FeatureOverrides implements WebGLDisposable {\r\n public readonly target: Target;\r\n private readonly _options: BatchOptions;\r\n private _lut?: Texture2DHandle;\r\n private _mostRecentSymbologyOverrides?: FeatureSymbology.Overrides;\r\n private _lastFlashId = Id64.invalid;\r\n private _hiliteSyncObserver: SyncObserver = {};\r\n private _anyOverridden = true;\r\n private _allHidden = true;\r\n private _anyTranslucent = true;\r\n private _anyViewIndependentTranslucent = true;\r\n private _anyOpaque = true;\r\n private _anyHilited = true;\r\n private _lutParams = new Float32Array(2);\r\n private _uniformSymbologyFlags: EmphasisFlags = EmphasisFlags.None;\r\n private _cleanup?: FeatureOverridesCleanup;\r\n\r\n public get anyOverridden() { return this._anyOverridden; }\r\n public get allHidden() { return this._allHidden; }\r\n public get anyTranslucent() { return this._anyTranslucent; }\r\n public get anyViewIndependentTranslucent() { return this._anyViewIndependentTranslucent; }\r\n public get anyOpaque() { return this._anyOpaque; }\r\n public get anyHilited() { return this._anyHilited; }\r\n\r\n /** For tests. */\r\n public get lutData(): Uint8Array | undefined { return this._lut?.dataBytes; }\r\n public get byteLength(): number { return undefined !== this._lut ? this._lut.bytesUsed : 0; }\r\n public get isUniform() { return 2 === this._lutParams[0] && 1 === this._lutParams[1]; }\r\n\r\n private updateUniformSymbologyFlags(): void {\r\n this._uniformSymbologyFlags = EmphasisFlags.None;\r\n if (!this.isUniform || !this._lut)\r\n return;\r\n\r\n let flags = this._lut.dataBytes![0];\r\n if (0 !== (flags & OvrFlags.Flashed))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Flashed;\r\n\r\n if (0 !== (flags & OvrFlags.NonLocatable))\r\n this._uniformSymbologyFlags |= EmphasisFlags.NonLocatable;\r\n\r\n if (!this._anyHilited)\r\n return;\r\n\r\n flags = this._lut.dataBytes![1] << 8;\r\n if (0 !== (flags & OvrFlags.Hilited))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Hilite;\r\n\r\n if (0 !== (flags & OvrFlags.Emphasized))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Emphasized;\r\n }\r\n\r\n public getUniformOverrides(): Uint8Array {\r\n assert(this.isUniform);\r\n assert(undefined !== this._lut);\r\n assert(undefined !== this._lut.dataBytes);\r\n return this._lut.dataBytes;\r\n }\r\n\r\n private _initialize(map: PackedFeatureTable, ovrs: FeatureSymbology.Overrides, hilite: Hilites, flashed?: Id64.Uint32Pair): Texture2DHandle | undefined {\r\n const nFeatures = map.numFeatures;\r\n const dims = computeWidthAndHeight(nFeatures, 2);\r\n const width = dims.width;\r\n const height = dims.height;\r\n assert(width * height >= nFeatures);\r\n\r\n this._lutParams[0] = width;\r\n this._lutParams[1] = height;\r\n\r\n const data = new Uint8Array(width * height * 4);\r\n const creator = new Texture2DDataUpdater(data);\r\n this.buildLookupTable(creator, map, ovrs, flashed, hilite);\r\n\r\n return TextureHandle.createForData(width, height, data, true, GL.Texture.WrapMode.ClampToEdge);\r\n }\r\n\r\n private _update(map: PackedFeatureTable, lut: Texture2DHandle, flashed?: Id64.Uint32Pair, hilites?: Hilites, ovrs?: FeatureSymbology.Overrides) {\r\n const updater = new Texture2DDataUpdater(lut.dataBytes!);\r\n\r\n if (undefined === ovrs) {\r\n this.updateFlashedAndHilited(updater, map, flashed, hilites);\r\n } else {\r\n assert(undefined !== hilites);\r\n this.buildLookupTable(updater, map, ovrs, flashed, hilites);\r\n }\r\n\r\n lut.update(updater);\r\n }\r\n\r\n private buildLookupTable(data: Texture2DDataUpdater, map: PackedFeatureTable, ovr: FeatureSymbology.Overrides, flashedIdParts: Id64.Uint32Pair | undefined, hilites: Hilites) {\r\n const allowHilite = true !== this._options.noHilite;\r\n const allowFlash = true !== this._options.noFlash;\r\n const allowEmphasis = true !== this._options.noEmphasis;\r\n\r\n const modelIdParts = Id64.getUint32Pair(map.modelId);\r\n const isModelHilited = allowHilite && hilites.models.hasPair(modelIdParts);\r\n\r\n this._anyOpaque = this._anyTranslucent = this._anyViewIndependentTranslucent = this._anyHilited = false;\r\n\r\n let nHidden = 0;\r\n let nOverridden = 0;\r\n\r\n // NB: We currently use 2 RGBA values per feature as follows:\r\n // [0]\r\n // RG = override flags (see OvrFlags enum)\r\n // B = line code\r\n // A = line weight (if we need an extra byte in future, could combine code+weight into a single byte).\r\n // [1]\r\n // RGB = rgb\r\n // A = alpha\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const feature = map.getPackedFeature(i);\r\n const dataIndex = i * 4 * 2;\r\n\r\n const app = this.target.currentBranch.getFeatureAppearance(\r\n ovr,\r\n feature.elementId.lower, feature.elementId.upper,\r\n feature.subCategoryId.lower, feature.subCategoryId.upper,\r\n feature.geometryClass,\r\n modelIdParts.lower, modelIdParts.upper,\r\n map.type, feature.animationNodeId);\r\n\r\n // NB: If the appearance is fully transparent, then:\r\n // - For normal (\"primary\") models, getAppearance() returns undefined.\r\n // - For classifier models, getAppearance() returns the appearance, and classification shader will discard fully-transparent classified pixels.\r\n // (The latter is how we clip the classified model using the classifiers).\r\n if (undefined === app) {\r\n // The feature is not visible. We don't care about any of the other overrides, because we're not going to render it.\r\n data.setOvrFlagsAtIndex(dataIndex, OvrFlags.Visibility);\r\n nHidden++;\r\n nOverridden++;\r\n continue;\r\n }\r\n\r\n let flags = app.nonLocatable ? OvrFlags.NonLocatable : OvrFlags.None;\r\n if (allowHilite && isFeatureHilited(feature, hilites, isModelHilited)) {\r\n flags |= OvrFlags.Hilited;\r\n this._anyHilited = true;\r\n }\r\n\r\n if (allowEmphasis && app.emphasized) {\r\n flags |= OvrFlags.Emphasized;\r\n this._anyHilited = true;\r\n }\r\n\r\n if (app.overridesRgb && app.rgb) {\r\n flags |= OvrFlags.Rgb;\r\n const rgb = app.rgb;\r\n data.setByteAtIndex(dataIndex + 4, rgb.r);\r\n data.setByteAtIndex(dataIndex + 5, rgb.g);\r\n data.setByteAtIndex(dataIndex + 6, rgb.b);\r\n }\r\n\r\n if (undefined !== app.transparency) {\r\n // transparency in range [0, 1]...convert to byte and invert so 0=transparent...\r\n flags |= OvrFlags.Alpha;\r\n let alpha = 1.0 - app.transparency;\r\n alpha = Math.floor(0xff * alpha + 0.5);\r\n if ((0xff - alpha) < DisplayParams.minTransparency)\r\n alpha = 0xff;\r\n\r\n data.setByteAtIndex(dataIndex + 7, alpha);\r\n if (0xff === alpha) {\r\n this._anyOpaque = true;\r\n } else {\r\n this._anyTranslucent = true;\r\n if (!app.viewDependentTransparency) {\r\n flags |= OvrFlags.ViewIndependentTransparency;\r\n this._anyViewIndependentTranslucent = true;\r\n }\r\n }\r\n }\r\n\r\n if (app.overridesWeight && app.weight) {\r\n flags |= OvrFlags.Weight;\r\n let weight = app.weight;\r\n weight = Math.min(31, weight);\r\n weight = Math.max(1, weight);\r\n data.setByteAtIndex(dataIndex + 3, weight);\r\n }\r\n\r\n if (app.overridesLinePixels && app.linePixels) {\r\n flags |= OvrFlags.LineCode;\r\n const lineCode = LineCode.valueFromLinePixels(app.linePixels);\r\n data.setByteAtIndex(dataIndex + 2, lineCode);\r\n }\r\n\r\n if (app.ignoresMaterial)\r\n flags |= OvrFlags.IgnoreMaterial;\r\n\r\n if (allowFlash && undefined !== flashedIdParts && feature.elementId.lower === flashedIdParts.lower && feature.elementId.upper === flashedIdParts.upper)\r\n flags |= OvrFlags.Flashed;\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, flags);\r\n if (OvrFlags.None !== flags)\r\n nOverridden++;\r\n }\r\n\r\n this._allHidden = (nHidden === map.numFeatures);\r\n this._anyOverridden = (nOverridden > 0);\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n // NB: If hilites is undefined, it means that the hilited set has not changed.\r\n private updateFlashedAndHilited(data: Texture2DDataUpdater, map: PackedFeatureTable, flashed?: Id64.Uint32Pair, hilites?: Hilites) {\r\n if (!hilites || true === this._options.noHilite) {\r\n this.updateFlashed(data, map, flashed);\r\n return;\r\n }\r\n\r\n const allowFlash = true !== this._options.noFlash;\r\n const intersect = \"intersection\" === hilites.modelSubCategoryMode;\r\n\r\n let isModelHilited = false;\r\n if (!hilites.models.isEmpty) {\r\n const modelId = Id64.getUint32Pair(map.modelId);\r\n isModelHilited = hilites.models.hasPair(modelId);\r\n }\r\n\r\n this._anyOverridden = this._anyHilited = false;\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const dataIndex = i* 4 * 2;\r\n const oldFlags = data.getOvrFlagsAtIndex(dataIndex);\r\n if (OvrFlags.None !== (oldFlags & OvrFlags.Visibility)) {\r\n // If it's invisible, none of the other flags matter. We can't flash it and don't want to hilite it.\r\n this._anyOverridden = true;\r\n continue;\r\n }\r\n\r\n let elemId;\r\n let isHilited = isModelHilited && !intersect;\r\n if (!isHilited && !hilites.elements.isEmpty) {\r\n elemId = map.getElementIdPair(i);\r\n isHilited = hilites.elements.hasPair(elemId);\r\n }\r\n\r\n if (!isHilited && !hilites.subcategories.isEmpty) {\r\n if (isModelHilited || !intersect) {\r\n const subcat = map.getSubCategoryIdPair(i);\r\n isHilited = hilites.subcategories.hasPair(subcat);\r\n }\r\n }\r\n\r\n let isFlashed = false;\r\n if (flashed && allowFlash) {\r\n elemId = elemId ?? map.getElementIdPair(i);\r\n isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;\r\n }\r\n\r\n let newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\r\n newFlags = isHilited ? (newFlags | OvrFlags.Hilited) : (newFlags & ~OvrFlags.Hilited);\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, newFlags);\r\n if (OvrFlags.None !== newFlags) {\r\n this._anyOverridden = true;\r\n this._anyHilited = this._anyHilited || isHilited || OvrFlags.None !== (newFlags & OvrFlags.Emphasized);\r\n }\r\n }\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n private updateFlashed(data: Texture2DDataUpdater, map: PackedFeatureTable, flashed?: Id64.Uint32Pair): void {\r\n if (true === this._options.noFlash)\r\n return;\r\n\r\n this._anyOverridden = false;\r\n\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const dataIndex = i * 4 * 2;\r\n const oldFlags = data.getOvrFlagsAtIndex(dataIndex);\r\n if (OvrFlags.None !== (oldFlags & OvrFlags.Visibility)) {\r\n // If it's invisible, none of the other flags matter and we can't flash it.\r\n this._anyOverridden = true;\r\n continue;\r\n }\r\n\r\n let isFlashed = false;\r\n if (flashed) {\r\n const elemId = map.getElementIdPair(i);\r\n isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;\r\n }\r\n\r\n const newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\r\n data.setOvrFlagsAtIndex(dataIndex, newFlags);\r\n if (OvrFlags.None !== newFlags)\r\n this._anyOverridden = true;\r\n }\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n private constructor(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined) {\r\n this.target = target;\r\n this._options = options;\r\n this._cleanup = cleanup;\r\n }\r\n\r\n public static createFromTarget(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined) {\r\n return new FeatureOverrides(target, options, cleanup);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._lut; }\r\n\r\n public dispose() {\r\n this._lut = dispose(this._lut);\r\n if (this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n }\r\n\r\n public initFromMap(map: PackedFeatureTable) {\r\n const nFeatures = map.numFeatures;\r\n assert(0 < nFeatures);\r\n\r\n this._lut = dispose(this._lut);\r\n\r\n const ovrs: FeatureSymbology.Overrides = this.target.currentFeatureSymbologyOverrides;\r\n this._mostRecentSymbologyOverrides = ovrs;\r\n const hilite = this.target.hilites;\r\n this._lut = this._initialize(map, ovrs, hilite, this.target.flashed);\r\n this._lastFlashId = Id64.invalid;\r\n this._hiliteSyncObserver = {};\r\n }\r\n\r\n public update(features: PackedFeatureTable) {\r\n let ovrs: FeatureSymbology.Overrides | undefined = this.target.currentFeatureSymbologyOverrides;\r\n const ovrsUpdated = ovrs !== this._mostRecentSymbologyOverrides;\r\n if (ovrsUpdated)\r\n this._mostRecentSymbologyOverrides = ovrs;\r\n else\r\n ovrs = undefined;\r\n\r\n const flashedId = this.target.flashedId;\r\n\r\n const hiliteSyncTarget = this.target.hiliteSyncTarget;\r\n const hiliteUpdated = !sync(hiliteSyncTarget, this._hiliteSyncObserver);\r\n\r\n const hilite = this.target.hilites;\r\n if (ovrsUpdated || hiliteUpdated || flashedId !== this._lastFlashId) {\r\n // _lut can be undefined if context was lost, (gl.createTexture returns null)\r\n if (this._lut)\r\n this._update(features, this._lut, this.target.flashed, undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs);\r\n\r\n this._lastFlashId = flashedId;\r\n }\r\n }\r\n\r\n public bindLUTParams(uniform: UniformHandle): void {\r\n uniform.setUniform2fv(this._lutParams);\r\n }\r\n\r\n public bindLUT(uniform: UniformHandle): void {\r\n if (this._lut)\r\n this._lut.bindSampler(uniform, TextureUnit.FeatureSymbology);\r\n }\r\n\r\n public bindUniformSymbologyFlags(uniform: UniformHandle): void {\r\n uniform.setUniform1f(this._uniformSymbologyFlags);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FeatureOverrides.js","sourceRoot":"","sources":["../../../../src/render/webgl/FeatureOverrides.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, dispose, Id64 } from \"@itwin/core-bentley\";\r\nimport { PackedFeature, PackedFeatureTable } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { DisplayParams } from \"../primitives/DisplayParams\";\r\nimport { BatchOptions } from \"../GraphicBuilder\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { GL } from \"./GL\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { EmphasisFlags, OvrFlags, TextureUnit } from \"./RenderFlags\";\r\nimport { sync, SyncObserver } from \"./Sync\";\r\nimport { System } from \"./System\";\r\nimport { Hilites, Target } from \"./Target\";\r\nimport { Texture2DDataUpdater, Texture2DHandle, TextureHandle } from \"./Texture\";\r\n\r\nfunction computeWidthAndHeight(nEntries: number, nRgbaPerEntry: number, nExtraRgba: number = 0, nTables: number = 1): { width: number, height: number } {\r\n const maxSize = System.instance.maxTextureSize;\r\n const nRgba = nEntries * nRgbaPerEntry * nTables + nExtraRgba;\r\n\r\n if (nRgba < maxSize)\r\n return { width: nRgba, height: 1 };\r\n\r\n // Make roughly square to reduce unused space in last row\r\n let width = Math.ceil(Math.sqrt(nRgba));\r\n\r\n // Ensure a given entry's RGBA values all fit on the same row.\r\n const remainder = width % nRgbaPerEntry;\r\n if (0 !== remainder) {\r\n width += nRgbaPerEntry - remainder;\r\n }\r\n\r\n // Compute height\r\n const height = Math.ceil(nRgba / width);\r\n\r\n assert(height <= maxSize);\r\n assert(width <= maxSize);\r\n assert(width * height >= nRgba);\r\n assert(Math.floor(height) === height);\r\n assert(Math.floor(width) === width);\r\n\r\n // Row padding should never be necessary...\r\n assert(0 === width % nRgbaPerEntry);\r\n\r\n return { width, height };\r\n}\r\n\r\nexport function isFeatureHilited(feature: PackedFeature, hilites: Hilites, isModelHilited: boolean): boolean {\r\n if (hilites.isEmpty)\r\n return false;\r\n\r\n if (\"union\" === hilites.modelSubCategoryMode)\r\n return isModelHilited || hilites.elements.hasPair(feature.elementId) || hilites.subcategories.hasPair(feature.subCategoryId);\r\n\r\n return hilites.elements.hasPair(feature.elementId) || (isModelHilited && hilites.subcategories.hasPair(feature.subCategoryId));\r\n}\r\n\r\n/** @internal */\r\nexport type FeatureOverridesCleanup = () => void;\r\n\r\n/** @internal */\r\nexport class FeatureOverrides implements WebGLDisposable {\r\n public readonly target: Target;\r\n private readonly _options: BatchOptions;\r\n private _lut?: Texture2DHandle;\r\n private _mostRecentSymbologyOverrides?: FeatureSymbology.Overrides;\r\n private _lastFlashId = Id64.invalid;\r\n private _hiliteSyncObserver: SyncObserver = {};\r\n private _anyOverridden = true;\r\n private _allHidden = true;\r\n private _anyTranslucent = true;\r\n private _anyViewIndependentTranslucent = true;\r\n private _anyOpaque = true;\r\n private _anyHilited = true;\r\n private _lutParams = new Float32Array(2);\r\n private _uniformSymbologyFlags: EmphasisFlags = EmphasisFlags.None;\r\n private _cleanup?: FeatureOverridesCleanup;\r\n\r\n public get anyOverridden() { return this._anyOverridden; }\r\n public get allHidden() { return this._allHidden; }\r\n public get anyTranslucent() { return this._anyTranslucent; }\r\n public get anyViewIndependentTranslucent() { return this._anyViewIndependentTranslucent; }\r\n public get anyOpaque() { return this._anyOpaque; }\r\n public get anyHilited() { return this._anyHilited; }\r\n\r\n /** For tests. */\r\n public get lutData(): Uint8Array | undefined { return this._lut?.dataBytes; }\r\n public get byteLength(): number { return undefined !== this._lut ? this._lut.bytesUsed : 0; }\r\n public get isUniform() { return 2 === this._lutParams[0] && 1 === this._lutParams[1]; }\r\n\r\n private updateUniformSymbologyFlags(): void {\r\n this._uniformSymbologyFlags = EmphasisFlags.None;\r\n if (!this.isUniform || !this._lut)\r\n return;\r\n\r\n let flags = this._lut.dataBytes![0];\r\n if (0 !== (flags & OvrFlags.Flashed))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Flashed;\r\n\r\n if (0 !== (flags & OvrFlags.NonLocatable))\r\n this._uniformSymbologyFlags |= EmphasisFlags.NonLocatable;\r\n\r\n if (!this._anyHilited)\r\n return;\r\n\r\n flags = this._lut.dataBytes![1] << 8;\r\n if (0 !== (flags & OvrFlags.Hilited))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Hilite;\r\n\r\n if (0 !== (flags & OvrFlags.Emphasized))\r\n this._uniformSymbologyFlags |= EmphasisFlags.Emphasized;\r\n }\r\n\r\n public getUniformOverrides(): Uint8Array {\r\n assert(this.isUniform);\r\n assert(undefined !== this._lut);\r\n assert(undefined !== this._lut.dataBytes);\r\n return this._lut.dataBytes;\r\n }\r\n\r\n private _initialize(map: PackedFeatureTable, ovrs: FeatureSymbology.Overrides, hilite: Hilites, flashed?: Id64.Uint32Pair): Texture2DHandle | undefined {\r\n const nFeatures = map.numFeatures;\r\n const dims = computeWidthAndHeight(nFeatures, 2);\r\n const width = dims.width;\r\n const height = dims.height;\r\n assert(width * height >= nFeatures);\r\n\r\n this._lutParams[0] = width;\r\n this._lutParams[1] = height;\r\n\r\n const data = new Uint8Array(width * height * 4);\r\n const creator = new Texture2DDataUpdater(data);\r\n this.buildLookupTable(creator, map, ovrs, flashed, hilite);\r\n\r\n return TextureHandle.createForData(width, height, data, true, GL.Texture.WrapMode.ClampToEdge);\r\n }\r\n\r\n private _update(map: PackedFeatureTable, lut: Texture2DHandle, flashed?: Id64.Uint32Pair, hilites?: Hilites, ovrs?: FeatureSymbology.Overrides) {\r\n const updater = new Texture2DDataUpdater(lut.dataBytes!);\r\n\r\n if (undefined === ovrs) {\r\n this.updateFlashedAndHilited(updater, map, flashed, hilites);\r\n } else {\r\n assert(undefined !== hilites);\r\n this.buildLookupTable(updater, map, ovrs, flashed, hilites);\r\n }\r\n\r\n lut.update(updater);\r\n }\r\n\r\n private buildLookupTable(data: Texture2DDataUpdater, map: PackedFeatureTable, ovr: FeatureSymbology.Overrides, flashedIdParts: Id64.Uint32Pair | undefined, hilites: Hilites) {\r\n const allowHilite = true !== this._options.noHilite;\r\n const allowFlash = true !== this._options.noFlash;\r\n const allowEmphasis = true !== this._options.noEmphasis;\r\n\r\n const modelIdParts = Id64.getUint32Pair(map.modelId);\r\n const isModelHilited = allowHilite && hilites.models.hasPair(modelIdParts);\r\n\r\n this._anyOpaque = this._anyTranslucent = this._anyViewIndependentTranslucent = this._anyHilited = false;\r\n\r\n let nHidden = 0;\r\n let nOverridden = 0;\r\n\r\n // NB: We currently use 2 RGBA values per feature as follows:\r\n // [0]\r\n // RG = override flags (see OvrFlags enum)\r\n // B = line code\r\n // A = line weight (if we need an extra byte in future, could combine code+weight into a single byte).\r\n // [1]\r\n // RGB = rgb\r\n // A = alpha\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const feature = map.getPackedFeature(i);\r\n const dataIndex = i * 4 * 2;\r\n\r\n const app = this.target.currentBranch.getFeatureAppearance(\r\n ovr,\r\n feature.elementId.lower, feature.elementId.upper,\r\n feature.subCategoryId.lower, feature.subCategoryId.upper,\r\n feature.geometryClass,\r\n modelIdParts.lower, modelIdParts.upper,\r\n map.type, feature.animationNodeId);\r\n\r\n // NB: If the appearance is fully transparent, then:\r\n // - For normal (\"primary\") models, getAppearance() returns undefined.\r\n // - For classifier models, getAppearance() returns the appearance, and classification shader will discard fully-transparent classified pixels.\r\n // (The latter is how we clip the classified model using the classifiers).\r\n if (undefined === app) {\r\n // The feature is not visible. We don't care about any of the other overrides, because we're not going to render it.\r\n data.setOvrFlagsAtIndex(dataIndex, OvrFlags.Visibility);\r\n nHidden++;\r\n nOverridden++;\r\n continue;\r\n }\r\n\r\n let flags = app.nonLocatable ? OvrFlags.NonLocatable : OvrFlags.None;\r\n if (allowHilite && isFeatureHilited(feature, hilites, isModelHilited)) {\r\n flags |= OvrFlags.Hilited;\r\n this._anyHilited = true;\r\n }\r\n\r\n if (allowEmphasis && app.emphasized) {\r\n flags |= OvrFlags.Emphasized;\r\n this._anyHilited = true;\r\n }\r\n\r\n if (app.overridesRgb && app.rgb) {\r\n flags |= OvrFlags.Rgb;\r\n const rgb = app.rgb;\r\n data.setByteAtIndex(dataIndex + 4, rgb.r);\r\n data.setByteAtIndex(dataIndex + 5, rgb.g);\r\n data.setByteAtIndex(dataIndex + 6, rgb.b);\r\n }\r\n\r\n if (undefined !== app.transparency) {\r\n // transparency in range [0, 1]...convert to byte and invert so 0=transparent...\r\n flags |= OvrFlags.Alpha;\r\n let alpha = 1.0 - app.transparency;\r\n alpha = Math.floor(0xff * alpha + 0.5);\r\n if ((0xff - alpha) < DisplayParams.minTransparency)\r\n alpha = 0xff;\r\n\r\n data.setByteAtIndex(dataIndex + 7, alpha);\r\n if (0xff === alpha) {\r\n this._anyOpaque = true;\r\n } else {\r\n this._anyTranslucent = true;\r\n if (!app.viewDependentTransparency) {\r\n flags |= OvrFlags.ViewIndependentTransparency;\r\n this._anyViewIndependentTranslucent = true;\r\n }\r\n }\r\n }\r\n\r\n if (app.overridesWeight && app.weight) {\r\n flags |= OvrFlags.Weight;\r\n let weight = app.weight;\r\n weight = Math.min(31, weight);\r\n weight = Math.max(1, weight);\r\n data.setByteAtIndex(dataIndex + 3, weight);\r\n }\r\n\r\n if (app.overridesLinePixels && app.linePixels) {\r\n flags |= OvrFlags.LineCode;\r\n const lineCode = LineCode.valueFromLinePixels(app.linePixels);\r\n data.setByteAtIndex(dataIndex + 2, lineCode);\r\n }\r\n\r\n if (app.ignoresMaterial)\r\n flags |= OvrFlags.IgnoreMaterial;\r\n\r\n if (allowFlash && undefined !== flashedIdParts && feature.elementId.lower === flashedIdParts.lower && feature.elementId.upper === flashedIdParts.upper)\r\n flags |= OvrFlags.Flashed;\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, flags);\r\n if (OvrFlags.None !== flags)\r\n nOverridden++;\r\n }\r\n\r\n this._allHidden = (nHidden === map.numFeatures);\r\n this._anyOverridden = (nOverridden > 0);\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n // NB: If hilites is undefined, it means that the hilited set has not changed.\r\n private updateFlashedAndHilited(data: Texture2DDataUpdater, map: PackedFeatureTable, flashed?: Id64.Uint32Pair, hilites?: Hilites) {\r\n if (!hilites || true === this._options.noHilite) {\r\n this.updateFlashed(data, map, flashed);\r\n return;\r\n }\r\n\r\n const allowFlash = true !== this._options.noFlash;\r\n const intersect = \"intersection\" === hilites.modelSubCategoryMode;\r\n\r\n let isModelHilited = false;\r\n if (!hilites.models.isEmpty) {\r\n const modelId = Id64.getUint32Pair(map.modelId);\r\n isModelHilited = hilites.models.hasPair(modelId);\r\n }\r\n\r\n this._anyOverridden = this._anyHilited = false;\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const dataIndex = i* 4 * 2;\r\n const oldFlags = data.getOvrFlagsAtIndex(dataIndex);\r\n if (OvrFlags.None !== (oldFlags & OvrFlags.Visibility)) {\r\n // If it's invisible, none of the other flags matter. We can't flash it and don't want to hilite it.\r\n this._anyOverridden = true;\r\n continue;\r\n }\r\n\r\n let elemId;\r\n let isHilited = isModelHilited && !intersect;\r\n if (!isHilited && !hilites.elements.isEmpty) {\r\n elemId = map.getElementIdPair(i);\r\n isHilited = hilites.elements.hasPair(elemId);\r\n }\r\n\r\n if (!isHilited && !hilites.subcategories.isEmpty) {\r\n if (isModelHilited || !intersect) {\r\n const subcat = map.getSubCategoryIdPair(i);\r\n isHilited = hilites.subcategories.hasPair(subcat);\r\n }\r\n }\r\n\r\n let isFlashed = false;\r\n if (flashed && allowFlash) {\r\n elemId = elemId ?? map.getElementIdPair(i);\r\n isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;\r\n }\r\n\r\n let newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\r\n newFlags = isHilited ? (newFlags | OvrFlags.Hilited) : (newFlags & ~OvrFlags.Hilited);\r\n\r\n data.setOvrFlagsAtIndex(dataIndex, newFlags);\r\n if (OvrFlags.None !== newFlags) {\r\n this._anyOverridden = true;\r\n this._anyHilited = this._anyHilited || isHilited || OvrFlags.None !== (newFlags & OvrFlags.Emphasized);\r\n }\r\n }\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n private updateFlashed(data: Texture2DDataUpdater, map: PackedFeatureTable, flashed?: Id64.Uint32Pair): void {\r\n if (true === this._options.noFlash)\r\n return;\r\n\r\n this._anyOverridden = false;\r\n\r\n for (let i = 0; i < map.numFeatures; i++) {\r\n const dataIndex = i * 4 * 2;\r\n const oldFlags = data.getOvrFlagsAtIndex(dataIndex);\r\n if (OvrFlags.None !== (oldFlags & OvrFlags.Visibility)) {\r\n // If it's invisible, none of the other flags matter and we can't flash it.\r\n this._anyOverridden = true;\r\n continue;\r\n }\r\n\r\n let isFlashed = false;\r\n if (flashed) {\r\n const elemId = map.getElementIdPair(i);\r\n isFlashed = elemId.lower === flashed.lower && elemId.upper === flashed.upper;\r\n }\r\n\r\n const newFlags = isFlashed ? (oldFlags | OvrFlags.Flashed) : (oldFlags & ~OvrFlags.Flashed);\r\n data.setOvrFlagsAtIndex(dataIndex, newFlags);\r\n if (OvrFlags.None !== newFlags)\r\n this._anyOverridden = true;\r\n }\r\n\r\n this.updateUniformSymbologyFlags();\r\n }\r\n\r\n private constructor(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined) {\r\n this.target = target;\r\n this._options = options;\r\n this._cleanup = cleanup;\r\n }\r\n\r\n public static createFromTarget(target: Target, options: BatchOptions, cleanup: FeatureOverridesCleanup | undefined) {\r\n return new FeatureOverrides(target, options, cleanup);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this._lut; }\r\n\r\n public dispose() {\r\n this._lut = dispose(this._lut);\r\n if (this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n }\r\n\r\n public initFromMap(map: PackedFeatureTable) {\r\n const nFeatures = map.numFeatures;\r\n assert(0 < nFeatures);\r\n\r\n this._lut = dispose(this._lut);\r\n\r\n const ovrs: FeatureSymbology.Overrides = this.target.currentFeatureSymbologyOverrides;\r\n this._mostRecentSymbologyOverrides = ovrs;\r\n const hilite = this.target.hilites;\r\n this._lut = this._initialize(map, ovrs, hilite, this.target.flashed);\r\n this._lastFlashId = Id64.invalid;\r\n this._hiliteSyncObserver = {};\r\n }\r\n\r\n public update(features: PackedFeatureTable) {\r\n let ovrs: FeatureSymbology.Overrides | undefined = this.target.currentFeatureSymbologyOverrides;\r\n const ovrsUpdated = ovrs !== this._mostRecentSymbologyOverrides;\r\n if (ovrsUpdated)\r\n this._mostRecentSymbologyOverrides = ovrs;\r\n else\r\n ovrs = undefined;\r\n\r\n const flashedId = this.target.flashedId;\r\n\r\n const hiliteSyncTarget = this.target.hiliteSyncTarget;\r\n const hiliteUpdated = !sync(hiliteSyncTarget, this._hiliteSyncObserver);\r\n\r\n const hilite = this.target.hilites;\r\n if (ovrsUpdated || hiliteUpdated || flashedId !== this._lastFlashId) {\r\n // _lut can be undefined if context was lost, (gl.createTexture returns null)\r\n if (this._lut)\r\n this._update(features, this._lut, this.target.flashed, undefined !== ovrs || hiliteUpdated ? hilite : undefined, ovrs);\r\n\r\n this._lastFlashId = flashedId;\r\n }\r\n }\r\n\r\n public bindLUTParams(uniform: UniformHandle): void {\r\n uniform.setUniform2fv(this._lutParams);\r\n }\r\n\r\n public bindLUT(uniform: UniformHandle): void {\r\n if (this._lut)\r\n this._lut.bindSampler(uniform, TextureUnit.FeatureSymbology);\r\n }\r\n\r\n public bindUniformSymbologyFlags(uniform: UniformHandle): void {\r\n uniform.setUniform1f(this._uniformSymbologyFlags);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatRGBA.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/FloatRGBA.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAYhD,8BAAsB,UAAU;IAC9B,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAS;IAEtB,SAAS,aAAa,aAAa,EAAE,MAAM;IAK3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IACjD,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAElF,IAAW,GAAG,WAAkC;IAChD,IAAW,KAAK,WAAkC;IAClD,IAAW,IAAI,WAAkC;IACjD,IAAW,IAAI,WAAyB;IACxC,IAAW,OAAO,YAA0E;IAErF,WAAW,CAAC,GAAG,EAAE,QAAQ;IAIzB,WAAW,CAAC,GAAG,EAAE,QAAQ;IAIzB,OAAO,CAAC,IAAI,EAAE,MAAM;IAU3B,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAMjE,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;CAW9E;AAED,qBAAa,QAAS,SAAQ,UAAU;;IAKtC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAI/B,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAI5D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAInC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;WAI3B,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ;WAIrC,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ;WAIrC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ;WAM/C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;CAK/C;AAED,qBAAa,SAAU,SAAQ,UAAU;;IAMvC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAI/B,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAK3D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAIrD,IAAW,KAAK,IAAI,MAAM,CAAgC;IAC1D,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAAkC;IAChE,IAAW,eAAe,IAAI,OAAO,CAA+B;IAE7D,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;WAI3B,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS;WAItC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;WAMjC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAMlE,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS;CAOzC"}
1
+ {"version":3,"file":"FloatRGBA.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/FloatRGBA.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAUhD,8BAAsB,UAAU;IAC9B,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAS;IAEtB,SAAS,aAAa,aAAa,EAAE,MAAM;IAK3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IACjD,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAElF,IAAW,GAAG,WAAkC;IAChD,IAAW,KAAK,WAAkC;IAClD,IAAW,IAAI,WAAkC;IACjD,IAAW,IAAI,WAAyB;IACxC,IAAW,OAAO,YAA0E;IAErF,WAAW,CAAC,GAAG,EAAE,QAAQ;IAIzB,WAAW,CAAC,GAAG,EAAE,QAAQ;IAIzB,OAAO,CAAC,IAAI,EAAE,MAAM;IAU3B,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAMjE,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;CAU9E;AAED,qBAAa,QAAS,SAAQ,UAAU;;IAKtC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAI/B,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAI5D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAInC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;WAI3B,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ;WAIrC,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ;WAIrC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ;WAM/C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;CAK/C;AAED,qBAAa,SAAU,SAAQ,UAAU;;IAMvC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAI/B,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAK3D,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAIrD,IAAW,KAAK,IAAI,MAAM,CAAgC;IAC1D,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAAkC;IAChE,IAAW,eAAe,IAAI,OAAO,CAA+B;IAE7D,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;WAI3B,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS;WAItC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;WAMjC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAMlE,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,SAAS;CAOzC"}
@@ -8,14 +8,11 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.FloatRgba = exports.FloatRgb = exports.FloatColor = void 0;
11
- const core_bentley_1 = require("@itwin/core-bentley");
12
11
  const core_common_1 = require("@itwin/core-common");
13
12
  function clamp(norm) {
14
- (0, core_bentley_1.assert)(() => norm >= 0 && norm <= 1);
15
13
  return Math.max(0, Math.min(1, norm));
16
14
  }
17
15
  function scale(norm) {
18
- (0, core_bentley_1.assert)(() => norm >= 0 && norm <= 1);
19
16
  return Math.floor(norm * 255 + 0.5);
20
17
  }
21
18
  class FloatColor {
@@ -48,7 +45,6 @@ class FloatColor {
48
45
  this._components[2] = b;
49
46
  }
50
47
  setRgbaComponents(r, g, b, a) {
51
- (0, core_bentley_1.assert)(() => r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1 && a >= 0 && a <= 1);
52
48
  r = clamp(r);
53
49
  g = clamp(g);
54
50
  b = clamp(b);
@@ -1 +1 @@
1
- {"version":3,"file":"FloatRGBA.js","sourceRoot":"","sources":["../../../../src/render/webgl/FloatRGBA.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 { ColorDef, RgbColor } from \"@itwin/core-common\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\n\r\nfunction clamp(norm: number): number {\r\n assert(() => norm >= 0 && norm <= 1);\r\n return Math.max(0, Math.min(1, norm));\r\n}\r\n\r\nfunction scale(norm: number): number {\r\n assert(() => norm >= 0 && norm <= 1);\r\n return Math.floor(norm * 255 + 0.5);\r\n}\r\n\r\nexport abstract class FloatColor {\r\n protected readonly _components: Float32Array;\r\n private _tbgr: number;\r\n\r\n protected constructor(numComponents: number) {\r\n this._components = new Float32Array(numComponents);\r\n this._tbgr = 0;\r\n }\r\n\r\n protected abstract maskTbgr(tbgr: number): number;\r\n protected abstract setComponents(r: number, g: number, b: number, a: number): void;\r\n\r\n public get red() { return this._components[0]; }\r\n public get green() { return this._components[1]; }\r\n public get blue() { return this._components[2]; }\r\n public get tbgr() { return this._tbgr; }\r\n public get isWhite() { return 1.0 === this.red && 1.0 === this.green && 1.0 === this.blue; }\r\n\r\n public setColorDef(def: ColorDef) {\r\n this.setTbgr(def.tbgr);\r\n }\r\n\r\n public setRgbColor(rgb: RgbColor) {\r\n this.setTbgr((rgb.r | (rgb.g << 8) | (rgb.b << 16)) >>> 0);\r\n }\r\n\r\n public setTbgr(tbgr: number) {\r\n tbgr = this.maskTbgr(tbgr);\r\n if (tbgr === this.tbgr)\r\n return;\r\n\r\n const c = ColorDef.getColors(tbgr);\r\n this.setComponents(c.r / 255, c.g / 255, c.b / 255, 1.0 - c.t / 255);\r\n this._tbgr = tbgr;\r\n }\r\n\r\n protected setRgbComponents(r: number, g: number, b: number): void {\r\n this._components[0] = r;\r\n this._components[1] = g;\r\n this._components[2] = b;\r\n }\r\n\r\n protected setRgbaComponents(r: number, g: number, b: number, a: number): void {\r\n assert(() => r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1 && a >= 0 && a <= 1);\r\n r = clamp(r);\r\n g = clamp(g);\r\n b = clamp(b);\r\n a = clamp(a);\r\n\r\n const tbgr = (scale(r) | (scale(g) << 8) | (scale(b) << 16) | (scale(1 - a) << 24)) >>> 0;\r\n this._tbgr = this.maskTbgr(tbgr);\r\n this.setComponents(r, g, b, a);\r\n }\r\n}\r\n\r\nexport class FloatRgb extends FloatColor {\r\n public constructor() {\r\n super(3);\r\n }\r\n\r\n protected maskTbgr(tbgr: number) {\r\n return (tbgr & 0x00ffffff) >>> 0;\r\n }\r\n\r\n protected setComponents(r: number, g: number, b: number, _a: number) {\r\n this.setRgbComponents(r, g, b);\r\n }\r\n\r\n public set(r: number, g: number, b: number) {\r\n this.setRgbaComponents(r, g, b, 1);\r\n }\r\n\r\n public bind(uniform: UniformHandle): void {\r\n uniform.setUniform3fv(this._components);\r\n }\r\n\r\n public static fromColorDef(def: ColorDef): FloatRgb {\r\n return FloatRgb.fromTbgr(def.tbgr);\r\n }\r\n\r\n public static fromRgbColor(rgb: RgbColor): FloatRgb {\r\n return FloatRgb.from(rgb.r / 255, rgb.g / 255, rgb.b / 255);\r\n }\r\n\r\n public static from(r: number, g: number, b: number): FloatRgb {\r\n const rgb = new FloatRgb();\r\n rgb.set(r, g, b);\r\n return rgb;\r\n }\r\n\r\n public static fromTbgr(tbgr: number): FloatRgb {\r\n const rgb = new FloatRgb();\r\n rgb.setTbgr(tbgr);\r\n return rgb;\r\n }\r\n}\r\n\r\nexport class FloatRgba extends FloatColor {\r\n public constructor() {\r\n super(4);\r\n this._components[3] = 1.0;\r\n }\r\n\r\n protected maskTbgr(tbgr: number) {\r\n return tbgr;\r\n }\r\n\r\n protected setComponents(r: number, g: number, b: number, a: number) {\r\n this.setRgbComponents(r, g, b);\r\n this._components[3] = a;\r\n }\r\n\r\n public set(r: number, g: number, b: number, a: number) {\r\n this.setRgbaComponents(r, g, b, a);\r\n }\r\n\r\n public get alpha(): number { return this._components[3]; }\r\n public set alpha(alpha: number) { this._components[3] = alpha; }\r\n public get hasTranslucency(): boolean { return 1.0 !== this.alpha; }\r\n\r\n public bind(uniform: UniformHandle): void {\r\n uniform.setUniform4fv(this._components);\r\n }\r\n\r\n public static fromColorDef(def: ColorDef): FloatRgba {\r\n return FloatRgba.fromTbgr(def.tbgr);\r\n }\r\n\r\n public static fromTbgr(tbgr: number): FloatRgba {\r\n const rgba = new FloatRgba();\r\n rgba.setTbgr(tbgr);\r\n return rgba;\r\n }\r\n\r\n public static from(r: number, g: number, b: number, a: number): FloatRgba {\r\n const rgba = new FloatRgba();\r\n rgba.set(r, g, b, a);\r\n return rgba;\r\n }\r\n\r\n public clone(out?: FloatRgba): FloatRgba {\r\n if (undefined === out)\r\n return FloatRgba.from(this.red, this.green, this.blue, this.alpha);\r\n\r\n out.set(this.red, this.green, this.blue, this.alpha);\r\n return out;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FloatRGBA.js","sourceRoot":"","sources":["../../../../src/render/webgl/FloatRGBA.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAAwD;AAGxD,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,MAAsB,UAAU;IAI9B,YAAsB,aAAqB;QACzC,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAKD,IAAW,GAAG,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAW,KAAK,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,IAAW,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,IAAW,OAAO,KAAK,OAAO,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAErF,WAAW,CAAC,GAAa;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEM,WAAW,CAAC,GAAa;QAC9B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEM,OAAO,CAAC,IAAY;QACzB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;YACpB,OAAO;QAET,MAAM,CAAC,GAAG,sBAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAES,gBAAgB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACxD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAES,iBAAiB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QACpE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEb,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;CACF;AApDD,gCAoDC;AAED,MAAa,QAAS,SAAQ,UAAU;IACtC;QACE,KAAK,CAAC,CAAC,CAAC,CAAC;IACX,CAAC;IAES,QAAQ,CAAC,IAAY;QAC7B,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAES,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU;QACjE,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;IAEM,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACxC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAEM,IAAI,CAAC,OAAsB;QAChC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,GAAa;QACtC,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,GAAa;QACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAChD,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjB,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAxCD,4BAwCC;AAED,MAAa,SAAU,SAAQ,UAAU;IACvC;QACE,KAAK,CAAC,CAAC,CAAC,CAAC;QACT,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5B,CAAC;IAES,QAAQ,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAES,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAChE,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAEM,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QACnD,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAW,KAAK,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAW,KAAK,CAAC,KAAa,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAChE,IAAW,eAAe,KAAc,OAAO,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAE7D,IAAI,CAAC,OAAsB;QAChC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,GAAa;QACtC,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC3D,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,GAAe;QAC1B,IAAI,SAAS,KAAK,GAAG;YACnB,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAErE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAlDD,8BAkDC","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 { ColorDef, RgbColor } from \"@itwin/core-common\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\n\r\nfunction clamp(norm: number): number {\r\n return Math.max(0, Math.min(1, norm));\r\n}\r\n\r\nfunction scale(norm: number): number {\r\n return Math.floor(norm * 255 + 0.5);\r\n}\r\n\r\nexport abstract class FloatColor {\r\n protected readonly _components: Float32Array;\r\n private _tbgr: number;\r\n\r\n protected constructor(numComponents: number) {\r\n this._components = new Float32Array(numComponents);\r\n this._tbgr = 0;\r\n }\r\n\r\n protected abstract maskTbgr(tbgr: number): number;\r\n protected abstract setComponents(r: number, g: number, b: number, a: number): void;\r\n\r\n public get red() { return this._components[0]; }\r\n public get green() { return this._components[1]; }\r\n public get blue() { return this._components[2]; }\r\n public get tbgr() { return this._tbgr; }\r\n public get isWhite() { return 1.0 === this.red && 1.0 === this.green && 1.0 === this.blue; }\r\n\r\n public setColorDef(def: ColorDef) {\r\n this.setTbgr(def.tbgr);\r\n }\r\n\r\n public setRgbColor(rgb: RgbColor) {\r\n this.setTbgr((rgb.r | (rgb.g << 8) | (rgb.b << 16)) >>> 0);\r\n }\r\n\r\n public setTbgr(tbgr: number) {\r\n tbgr = this.maskTbgr(tbgr);\r\n if (tbgr === this.tbgr)\r\n return;\r\n\r\n const c = ColorDef.getColors(tbgr);\r\n this.setComponents(c.r / 255, c.g / 255, c.b / 255, 1.0 - c.t / 255);\r\n this._tbgr = tbgr;\r\n }\r\n\r\n protected setRgbComponents(r: number, g: number, b: number): void {\r\n this._components[0] = r;\r\n this._components[1] = g;\r\n this._components[2] = b;\r\n }\r\n\r\n protected setRgbaComponents(r: number, g: number, b: number, a: number): void {\r\n r = clamp(r);\r\n g = clamp(g);\r\n b = clamp(b);\r\n a = clamp(a);\r\n\r\n const tbgr = (scale(r) | (scale(g) << 8) | (scale(b) << 16) | (scale(1 - a) << 24)) >>> 0;\r\n this._tbgr = this.maskTbgr(tbgr);\r\n this.setComponents(r, g, b, a);\r\n }\r\n}\r\n\r\nexport class FloatRgb extends FloatColor {\r\n public constructor() {\r\n super(3);\r\n }\r\n\r\n protected maskTbgr(tbgr: number) {\r\n return (tbgr & 0x00ffffff) >>> 0;\r\n }\r\n\r\n protected setComponents(r: number, g: number, b: number, _a: number) {\r\n this.setRgbComponents(r, g, b);\r\n }\r\n\r\n public set(r: number, g: number, b: number) {\r\n this.setRgbaComponents(r, g, b, 1);\r\n }\r\n\r\n public bind(uniform: UniformHandle): void {\r\n uniform.setUniform3fv(this._components);\r\n }\r\n\r\n public static fromColorDef(def: ColorDef): FloatRgb {\r\n return FloatRgb.fromTbgr(def.tbgr);\r\n }\r\n\r\n public static fromRgbColor(rgb: RgbColor): FloatRgb {\r\n return FloatRgb.from(rgb.r / 255, rgb.g / 255, rgb.b / 255);\r\n }\r\n\r\n public static from(r: number, g: number, b: number): FloatRgb {\r\n const rgb = new FloatRgb();\r\n rgb.set(r, g, b);\r\n return rgb;\r\n }\r\n\r\n public static fromTbgr(tbgr: number): FloatRgb {\r\n const rgb = new FloatRgb();\r\n rgb.setTbgr(tbgr);\r\n return rgb;\r\n }\r\n}\r\n\r\nexport class FloatRgba extends FloatColor {\r\n public constructor() {\r\n super(4);\r\n this._components[3] = 1.0;\r\n }\r\n\r\n protected maskTbgr(tbgr: number) {\r\n return tbgr;\r\n }\r\n\r\n protected setComponents(r: number, g: number, b: number, a: number) {\r\n this.setRgbComponents(r, g, b);\r\n this._components[3] = a;\r\n }\r\n\r\n public set(r: number, g: number, b: number, a: number) {\r\n this.setRgbaComponents(r, g, b, a);\r\n }\r\n\r\n public get alpha(): number { return this._components[3]; }\r\n public set alpha(alpha: number) { this._components[3] = alpha; }\r\n public get hasTranslucency(): boolean { return 1.0 !== this.alpha; }\r\n\r\n public bind(uniform: UniformHandle): void {\r\n uniform.setUniform4fv(this._components);\r\n }\r\n\r\n public static fromColorDef(def: ColorDef): FloatRgba {\r\n return FloatRgba.fromTbgr(def.tbgr);\r\n }\r\n\r\n public static fromTbgr(tbgr: number): FloatRgba {\r\n const rgba = new FloatRgba();\r\n rgba.setTbgr(tbgr);\r\n return rgba;\r\n }\r\n\r\n public static from(r: number, g: number, b: number, a: number): FloatRgba {\r\n const rgba = new FloatRgba();\r\n rgba.set(r, g, b, a);\r\n return rgba;\r\n }\r\n\r\n public clone(out?: FloatRgba): FloatRgba {\r\n if (undefined === out)\r\n return FloatRgba.from(this.red, this.green, this.blue, this.alpha);\r\n\r\n out.set(this.red, this.green, this.blue, this.alpha);\r\n return out;\r\n }\r\n}\r\n"]}
@@ -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 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"]}
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;\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 +1 @@
1
- {"version":3,"file":"GLTimer.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/GLTimer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAmFlC;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,OAAO;WAWO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI7C,IAAW,WAAW,IAAI,OAAO,CAAwC;IAEzE,IAAW,eAAe,CAAC,QAAQ,EAAE,qBAAqB,GAAG,SAAS,EAKrE;IAEM,cAAc,CAAC,KAAK,EAAE,MAAM;IAO5B,YAAY;IASZ,UAAU;IAWV,QAAQ;IA8Cf,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,QAAQ;CAOjB"}
1
+ {"version":3,"file":"GLTimer.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/GLTimer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAqClC;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,OAAO;WAQO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI7C,IAAW,WAAW,IAAI,OAAO,CAAwC;IAEzE,IAAW,eAAe,CAAC,QAAQ,EAAE,qBAAqB,GAAG,SAAS,EAKrE;IAEM,cAAc,CAAC,KAAK,EAAE,MAAM;IAO5B,YAAY;IASZ,UAAU;IAWV,QAAQ;IA8Cf,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,QAAQ;CAOjB"}
@@ -8,38 +8,8 @@ exports.GLTimer = void 0;
8
8
  const core_bentley_1 = require("@itwin/core-bentley");
9
9
  const core_common_1 = require("@itwin/core-common");
10
10
  class DisjointTimerExtension {
11
- }
12
- class DisjointTimerExtensionWebGL1 extends DisjointTimerExtension {
13
11
  constructor(system) {
14
- super();
15
- this._e = system.capabilities.queryExtensionObject("EXT_disjoint_timer_query");
16
- this._context = system.context;
17
- }
18
- get isSupported() { return this._e !== undefined; }
19
- didDisjointEventHappen() {
20
- return this._context.getParameter(this._e.GPU_DISJOINT_EXT);
21
- }
22
- createQuery() { return this._e.createQueryEXT(); }
23
- deleteQuery(q) { this._e.deleteQueryEXT(q); }
24
- beginQuery(q) { this._e.beginQueryEXT(this._e.TIME_ELAPSED_EXT, q); }
25
- endQuery() { this._e.endQueryEXT(this._e.TIME_ELAPSED_EXT); }
26
- isResultAvailable(q) {
27
- return this._e.getQueryObjectEXT(q, this._e.QUERY_RESULT_AVAILABLE_EXT);
28
- }
29
- getResult(q) {
30
- return this._e.getQueryObjectEXT(q, this._e.QUERY_RESULT_EXT);
31
- }
32
- }
33
- class DisjointTimerExtensionWebGL2 extends DisjointTimerExtension {
34
- constructor(system) {
35
- super();
36
- if (system.capabilities.isWebGL2) {
37
- this._e = system.capabilities.queryExtensionObject("EXT_disjoint_timer_query_webgl2");
38
- if (this._e === undefined) // If webgl2 timer doesn't work, attempt to use the older disjoint timer
39
- this._e = system.capabilities.queryExtensionObject("EXT_disjoint_timer_query");
40
- }
41
- else
42
- this._e = undefined;
12
+ this._e = system.disjointTimerQuery;
43
13
  this._context = system.context;
44
14
  }
45
15
  get isSupported() { return this._e !== undefined; }
@@ -73,10 +43,7 @@ class DisjointTimerExtensionWebGL2 extends DisjointTimerExtension {
73
43
  */
74
44
  class GLTimer {
75
45
  constructor(system) {
76
- if (system.capabilities.isWebGL2)
77
- this._extension = new DisjointTimerExtensionWebGL2(system);
78
- else
79
- this._extension = new DisjointTimerExtensionWebGL1(system);
46
+ this._extension = new DisjointTimerExtension(system);
80
47
  this._queryStack = [];
81
48
  this._resultsCallback = undefined;
82
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GLTimer.js","sourceRoot":"","sources":["../../../../src/render/webgl/GLTimer.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAoD;AACpD,oDAAiD;AAIjD,MAAe,sBAAsB;CASpC;AAED,MAAM,4BAA6B,SAAQ,sBAAsB;IAI/D,YAAmB,MAAc;QAC/B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAM,0BAA0B,CAAC,CAAC;QACpF,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,IAAW,WAAW,KAAc,OAAO,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC;IAE5D,sBAAsB;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC9D,CAAC;IAEM,WAAW,KAAiB,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,EAAgB,CAAC,CAAC,CAAC;IAC5E,WAAW,CAAC,CAAa,IAAI,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,UAAU,CAAC,CAAa,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAE7D,iBAAiB,CAAC,CAAa;QACpC,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC;IAC1E,CAAC;IACM,SAAS,CAAC,CAAa;QAC5B,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAChE,CAAC;CACF;AACD,MAAM,4BAA6B,SAAQ,sBAAsB;IAI/D,YAAmB,MAAc;QAC/B,KAAK,EAAE,CAAC;QACR,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;YAChC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAM,iCAAiC,CAAC,CAAC;YAC3F,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,wEAAwE;gBACjG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAM,0BAA0B,CAAC,CAAC;SACvF;;YACC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAiC,CAAC;IAC3D,CAAC;IAED,IAAW,WAAW,KAAc,OAAO,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC;IAE5D,sBAAsB;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC9D,CAAC;IAEM,WAAW,KAAiB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAgB,CAAC,CAAC,CAAC;IAC/E,WAAW,CAAC,CAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,UAAU,CAAC,CAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAEhE,iBAAiB,CAAC,CAAa;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAClF,CAAC;IACM,SAAS,CAAC,CAAa;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC;CACF;AAQD;;;;;;;;;;;;;GAaG;AACH,MAAa,OAAO;IAKlB,YAAoB,MAAc;QAChC,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC;;YAE3D,IAAI,CAAC,UAAU,GAAG,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,kGAAkG;IAClG,wDAAwD;IACjD,MAAM,CAAC,MAAM,CAAC,MAAc;QACjC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAW,WAAW,KAAc,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAEzE,IAAW,eAAe,CAAC,QAA2C;QACpE,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAC/B,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,gEAAgE,CAAC,CAAC;QAE/G,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACnC,CAAC;IAEM,cAAc,CAAC,KAAa;QACjC,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACxB,OAAO;QAET,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEM,YAAY;QACjB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACxB,OAAO;QACT,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAC/B,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,iDAAiD,CAAC,CAAC;QAEhG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACxB,OAAO;QACT,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAC/B,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC;QAErF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACxB,OAAO;QACT,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAC/B,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,wCAAwC,CAAC,CAAC;QAEvF,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE3C,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,IAAI,CAAC,UAAU,CAAC,sBAAsB,EAAE,EAAE;gBAC5C,yEAAyE;gBACzE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;gBACrC,OAAO;aACR;YAED,oEAAoE;YACpE,gFAAgF;YAChF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAClD,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;gBAC7B,OAAO;aACR;YAED,MAAM,iBAAiB,GAAG,CAAC,UAAsB,EAAiB,EAAE;gBAClE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAE9C,MAAM,MAAM,GAAkB,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;gBAC7E,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS;oBACnC,OAAO,MAAM,CAAC;gBAEhB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;gBACrB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE;oBACvC,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAClC,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW,CAAC;iBAC/C;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;YAEF,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC;QACF,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAEO,yBAAyB,CAAC,UAAsB;QACtD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ;YACtB,OAAO;QACT,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ;YACrC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClE,MAAM,UAAU,GAAe,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAElC,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS;YACpC,WAAW,CAAC,QAAQ,GAAG,CAAC,UAAU,CAAC,CAAC;;YAEpC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;QAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CACF;AArID,0BAqIC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { IModelError } from \"@itwin/core-common\";\r\nimport { GLTimerResult, GLTimerResultCallback } from \"../RenderSystem\";\r\nimport { System } from \"./System\";\r\n\r\nabstract class DisjointTimerExtension {\r\n public abstract get isSupported(): boolean;\r\n public abstract didDisjointEventHappen(): boolean;\r\n public abstract createQuery(): WebGLQuery;\r\n public abstract deleteQuery(q: WebGLQuery): void;\r\n public abstract beginQuery(q: WebGLQuery): void;\r\n public abstract endQuery(): void;\r\n public abstract isResultAvailable(q: WebGLQuery): boolean;\r\n public abstract getResult(q: WebGLQuery): number;\r\n}\r\n\r\nclass DisjointTimerExtensionWebGL1 extends DisjointTimerExtension {\r\n private _e: any; // EXT_disjoint_timer_query, not available in lib.dom.d.ts\r\n private _context: WebGLRenderingContext;\r\n\r\n public constructor(system: System) {\r\n super();\r\n this._e = system.capabilities.queryExtensionObject<any>(\"EXT_disjoint_timer_query\");\r\n this._context = system.context;\r\n }\r\n\r\n public get isSupported(): boolean { return this._e !== undefined; }\r\n\r\n public didDisjointEventHappen(): boolean {\r\n return this._context.getParameter(this._e.GPU_DISJOINT_EXT);\r\n }\r\n\r\n public createQuery(): WebGLQuery { return this._e.createQueryEXT() as WebGLQuery; }\r\n public deleteQuery(q: WebGLQuery) { this._e.deleteQueryEXT(q); }\r\n\r\n public beginQuery(q: WebGLQuery) { this._e.beginQueryEXT(this._e.TIME_ELAPSED_EXT, q); }\r\n public endQuery() { this._e.endQueryEXT(this._e.TIME_ELAPSED_EXT); }\r\n\r\n public isResultAvailable(q: WebGLQuery): boolean {\r\n return this._e.getQueryObjectEXT(q, this._e.QUERY_RESULT_AVAILABLE_EXT);\r\n }\r\n public getResult(q: WebGLQuery): number {\r\n return this._e.getQueryObjectEXT(q, this._e.QUERY_RESULT_EXT);\r\n }\r\n}\r\nclass DisjointTimerExtensionWebGL2 extends DisjointTimerExtension {\r\n private _e: any; // EXT_disjoint_timer_query, not available in lib.dom.d.ts\r\n private _context: WebGL2RenderingContext;\r\n\r\n public constructor(system: System) {\r\n super();\r\n if (system.capabilities.isWebGL2) {\r\n this._e = system.capabilities.queryExtensionObject<any>(\"EXT_disjoint_timer_query_webgl2\");\r\n if (this._e === undefined) // If webgl2 timer doesn't work, attempt to use the older disjoint timer\r\n this._e = system.capabilities.queryExtensionObject<any>(\"EXT_disjoint_timer_query\");\r\n } else\r\n this._e = undefined;\r\n this._context = system.context as WebGL2RenderingContext;\r\n }\r\n\r\n public get isSupported(): boolean { return this._e !== undefined; }\r\n\r\n public didDisjointEventHappen(): boolean {\r\n return this._context.getParameter(this._e.GPU_DISJOINT_EXT);\r\n }\r\n\r\n public createQuery(): WebGLQuery { return this._context.createQuery() as WebGLQuery; }\r\n public deleteQuery(q: WebGLQuery) { this._context.deleteQuery(q); }\r\n\r\n public beginQuery(q: WebGLQuery) { this._context.beginQuery(this._e.TIME_ELAPSED_EXT, q); }\r\n public endQuery() { this._context.endQuery(this._e.TIME_ELAPSED_EXT); }\r\n\r\n public isResultAvailable(q: WebGLQuery): boolean {\r\n return this._context.getQueryParameter(q, this._context.QUERY_RESULT_AVAILABLE);\r\n }\r\n public getResult(q: WebGLQuery): number {\r\n return this._context.getQueryParameter(q, this._context.QUERY_RESULT);\r\n }\r\n}\r\n\r\ninterface QueryEntry {\r\n label: string;\r\n query: WebGLQuery;\r\n children?: QueryEntry[];\r\n}\r\n\r\n/** Record GPU hardware queries to profile independent of CPU.\r\n *\r\n * This is a wrapper around EXT_disjoint_timer_query. The extension should be available in the following browsers:\r\n * * Chrome 67 and later\r\n * * Chromium-based Edge\r\n * * Firefox (with webgl.enable-privileged-extensions set to true in about:config)\r\n *\r\n * EXT_disjoint_timer_query only supports one active query per context without nesting. This wrapper keeps an internal stack to make\r\n * nesting work.\r\n *\r\n * The extension API makes timestamps look like a better solution than disjoint timers, but they are not actually supported.\r\n * See https://bugs.chromium.org/p/chromium/issues/detail?id=595172\r\n * @internal\r\n */\r\nexport class GLTimer {\r\n private _extension: DisjointTimerExtension;\r\n private _queryStack: QueryEntry[];\r\n private _resultsCallback?: GLTimerResultCallback;\r\n\r\n private constructor(system: System) {\r\n if (system.capabilities.isWebGL2)\r\n this._extension = new DisjointTimerExtensionWebGL2(system);\r\n else\r\n this._extension = new DisjointTimerExtensionWebGL1(system);\r\n this._queryStack = [];\r\n this._resultsCallback = undefined;\r\n }\r\n\r\n // This class is necessarily a singleton per context because of the underlying extension it wraps.\r\n // System is expected to call create in its constructor.\r\n public static create(system: System): GLTimer {\r\n return new GLTimer(system);\r\n }\r\n\r\n public get isSupported(): boolean { return this._extension.isSupported; }\r\n\r\n public set resultsCallback(callback: GLTimerResultCallback | undefined) {\r\n if (this._queryStack.length !== 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Do not set resultsCallback when a frame is already being drawn\");\r\n\r\n this._resultsCallback = callback;\r\n }\r\n\r\n public beginOperation(label: string) {\r\n if (!this._resultsCallback)\r\n return;\r\n\r\n this.pushQuery(label);\r\n }\r\n\r\n public endOperation() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length === 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Mismatched calls to beginOperation/endOperation\");\r\n\r\n this.popQuery();\r\n }\r\n\r\n public beginFrame() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length !== 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Already recording timing for a frame\");\r\n\r\n const query = this._extension.createQuery();\r\n this._extension.beginQuery(query);\r\n this._queryStack.push({ label: \"Total\", query, children: [] });\r\n }\r\n\r\n public endFrame() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length !== 1)\r\n throw new IModelError(BentleyStatus.ERROR, \"Missing at least one endOperation call\");\r\n\r\n this._extension.endQuery();\r\n const root = this._queryStack.pop()!;\r\n const userCallback = this._resultsCallback;\r\n\r\n const queryCallback = () => {\r\n if (this._extension.didDisjointEventHappen()) {\r\n // Have to throw away results for this frame after disjoint event occurs.\r\n this.cleanupAfterDisjointEvent(root);\r\n return;\r\n }\r\n\r\n // It takes more one or more frames for results to become available.\r\n // Only checking time for root since it will always be the last query completed.\r\n if (!this._extension.isResultAvailable(root.query)) {\r\n setTimeout(queryCallback, 0);\r\n return;\r\n }\r\n\r\n const processQueryEntry = (queryEntry: QueryEntry): GLTimerResult => {\r\n const time = this._extension.getResult(queryEntry.query);\r\n this._extension.deleteQuery(queryEntry.query);\r\n\r\n const result: GLTimerResult = { label: queryEntry.label, nanoseconds: time };\r\n if (queryEntry.children === undefined)\r\n return result;\r\n\r\n result.children = [];\r\n for (const child of queryEntry.children) {\r\n const childResult = processQueryEntry(child);\r\n result.children.push(childResult);\r\n result.nanoseconds += childResult.nanoseconds;\r\n }\r\n return result;\r\n };\r\n\r\n userCallback(processQueryEntry(root));\r\n };\r\n setTimeout(queryCallback, 0);\r\n }\r\n\r\n private cleanupAfterDisjointEvent(queryEntry: QueryEntry) {\r\n this._extension.deleteQuery(queryEntry.query);\r\n if (!queryEntry.children)\r\n return;\r\n for (const child of queryEntry.children)\r\n this.cleanupAfterDisjointEvent(child);\r\n }\r\n\r\n private pushQuery(label: string) {\r\n this._extension.endQuery();\r\n\r\n const query = this._extension.createQuery();\r\n this._extension.beginQuery(query);\r\n\r\n const activeQuery = this._queryStack[this._queryStack.length - 1];\r\n const queryEntry: QueryEntry = { label, query };\r\n this._queryStack.push(queryEntry);\r\n\r\n if (activeQuery.children === undefined)\r\n activeQuery.children = [queryEntry];\r\n else\r\n activeQuery.children.push(queryEntry);\r\n }\r\n\r\n private popQuery() {\r\n this._extension.endQuery();\r\n this._queryStack.pop();\r\n\r\n const activeQuery = this._queryStack[this._queryStack.length - 1];\r\n this._extension.beginQuery(activeQuery.query);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"GLTimer.js","sourceRoot":"","sources":["../../../../src/render/webgl/GLTimer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { IModelError } from \"@itwin/core-common\";\r\nimport { GLTimerResult, GLTimerResultCallback } from \"../RenderSystem\";\r\nimport { System } from \"./System\";\r\n\r\nclass DisjointTimerExtension {\r\n private _e: any; // EXT_disjoint_timer_query, not available in lib.dom.d.ts\r\n private _context: WebGL2RenderingContext;\r\n\r\n public constructor(system: System) {\r\n this._e = system.disjointTimerQuery;\r\n this._context = system.context;\r\n }\r\n\r\n public get isSupported(): boolean { return this._e !== undefined; }\r\n\r\n public didDisjointEventHappen(): boolean {\r\n return this._context.getParameter(this._e.GPU_DISJOINT_EXT);\r\n }\r\n\r\n public createQuery(): WebGLQuery { return this._context.createQuery() as WebGLQuery; }\r\n public deleteQuery(q: WebGLQuery) { this._context.deleteQuery(q); }\r\n\r\n public beginQuery(q: WebGLQuery) { this._context.beginQuery(this._e.TIME_ELAPSED_EXT, q); }\r\n public endQuery() { this._context.endQuery(this._e.TIME_ELAPSED_EXT); }\r\n\r\n public isResultAvailable(q: WebGLQuery): boolean {\r\n return this._context.getQueryParameter(q, this._context.QUERY_RESULT_AVAILABLE);\r\n }\r\n public getResult(q: WebGLQuery): number {\r\n return this._context.getQueryParameter(q, this._context.QUERY_RESULT);\r\n }\r\n}\r\n\r\ninterface QueryEntry {\r\n label: string;\r\n query: WebGLQuery;\r\n children?: QueryEntry[];\r\n}\r\n\r\n/** Record GPU hardware queries to profile independent of CPU.\r\n *\r\n * This is a wrapper around EXT_disjoint_timer_query. The extension should be available in the following browsers:\r\n * * Chrome 67 and later\r\n * * Chromium-based Edge\r\n * * Firefox (with webgl.enable-privileged-extensions set to true in about:config)\r\n *\r\n * EXT_disjoint_timer_query only supports one active query per context without nesting. This wrapper keeps an internal stack to make\r\n * nesting work.\r\n *\r\n * The extension API makes timestamps look like a better solution than disjoint timers, but they are not actually supported.\r\n * See https://bugs.chromium.org/p/chromium/issues/detail?id=595172\r\n * @internal\r\n */\r\nexport class GLTimer {\r\n private _extension: DisjointTimerExtension;\r\n private _queryStack: QueryEntry[];\r\n private _resultsCallback?: GLTimerResultCallback;\r\n\r\n private constructor(system: System) {\r\n this._extension = new DisjointTimerExtension(system);\r\n this._queryStack = [];\r\n this._resultsCallback = undefined;\r\n }\r\n\r\n // This class is necessarily a singleton per context because of the underlying extension it wraps.\r\n // System is expected to call create in its constructor.\r\n public static create(system: System): GLTimer {\r\n return new GLTimer(system);\r\n }\r\n\r\n public get isSupported(): boolean { return this._extension.isSupported; }\r\n\r\n public set resultsCallback(callback: GLTimerResultCallback | undefined) {\r\n if (this._queryStack.length !== 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Do not set resultsCallback when a frame is already being drawn\");\r\n\r\n this._resultsCallback = callback;\r\n }\r\n\r\n public beginOperation(label: string) {\r\n if (!this._resultsCallback)\r\n return;\r\n\r\n this.pushQuery(label);\r\n }\r\n\r\n public endOperation() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length === 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Mismatched calls to beginOperation/endOperation\");\r\n\r\n this.popQuery();\r\n }\r\n\r\n public beginFrame() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length !== 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Already recording timing for a frame\");\r\n\r\n const query = this._extension.createQuery();\r\n this._extension.beginQuery(query);\r\n this._queryStack.push({ label: \"Total\", query, children: [] });\r\n }\r\n\r\n public endFrame() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length !== 1)\r\n throw new IModelError(BentleyStatus.ERROR, \"Missing at least one endOperation call\");\r\n\r\n this._extension.endQuery();\r\n const root = this._queryStack.pop()!;\r\n const userCallback = this._resultsCallback;\r\n\r\n const queryCallback = () => {\r\n if (this._extension.didDisjointEventHappen()) {\r\n // Have to throw away results for this frame after disjoint event occurs.\r\n this.cleanupAfterDisjointEvent(root);\r\n return;\r\n }\r\n\r\n // It takes more one or more frames for results to become available.\r\n // Only checking time for root since it will always be the last query completed.\r\n if (!this._extension.isResultAvailable(root.query)) {\r\n setTimeout(queryCallback, 0);\r\n return;\r\n }\r\n\r\n const processQueryEntry = (queryEntry: QueryEntry): GLTimerResult => {\r\n const time = this._extension.getResult(queryEntry.query);\r\n this._extension.deleteQuery(queryEntry.query);\r\n\r\n const result: GLTimerResult = { label: queryEntry.label, nanoseconds: time };\r\n if (queryEntry.children === undefined)\r\n return result;\r\n\r\n result.children = [];\r\n for (const child of queryEntry.children) {\r\n const childResult = processQueryEntry(child);\r\n result.children.push(childResult);\r\n result.nanoseconds += childResult.nanoseconds;\r\n }\r\n return result;\r\n };\r\n\r\n userCallback(processQueryEntry(root));\r\n };\r\n setTimeout(queryCallback, 0);\r\n }\r\n\r\n private cleanupAfterDisjointEvent(queryEntry: QueryEntry) {\r\n this._extension.deleteQuery(queryEntry.query);\r\n if (!queryEntry.children)\r\n return;\r\n for (const child of queryEntry.children)\r\n this.cleanupAfterDisjointEvent(child);\r\n }\r\n\r\n private pushQuery(label: string) {\r\n this._extension.endQuery();\r\n\r\n const query = this._extension.createQuery();\r\n this._extension.beginQuery(query);\r\n\r\n const activeQuery = this._queryStack[this._queryStack.length - 1];\r\n const queryEntry: QueryEntry = { label, query };\r\n this._queryStack.push(queryEntry);\r\n\r\n if (activeQuery.children === undefined)\r\n activeQuery.children = [queryEntry];\r\n else\r\n activeQuery.children.push(queryEntry);\r\n }\r\n\r\n private popQuery() {\r\n this._extension.endQuery();\r\n this._queryStack.pop();\r\n\r\n const activeQuery = this._queryStack[this._queryStack.length - 1];\r\n this._extension.beginQuery(activeQuery.query);\r\n }\r\n}\r\n"]}
@@ -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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"}