@itwin/core-frontend 4.0.0-dev.1 → 4.0.0-dev.4

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 (417) 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 +6 -18
  82. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  83. package/lib/cjs/render/webgl/System.d.ts +11 -10
  84. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  85. package/lib/cjs/render/webgl/System.js +40 -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/TileAdmin.d.ts.map +1 -1
  207. package/lib/cjs/tile/TileAdmin.js +2 -2
  208. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  209. package/lib/esm/IModelApp.d.ts +1 -0
  210. package/lib/esm/IModelApp.d.ts.map +1 -1
  211. package/lib/esm/IModelApp.js +2 -4
  212. package/lib/esm/IModelApp.js.map +1 -1
  213. package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
  214. package/lib/esm/SubCategoriesCache.js +0 -1
  215. package/lib/esm/SubCategoriesCache.js.map +1 -1
  216. package/lib/esm/render/RealityMeshParams.d.ts +4 -1
  217. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  218. package/lib/esm/render/RealityMeshParams.js +14 -4
  219. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  220. package/lib/esm/render/RenderSystem.d.ts +5 -16
  221. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  222. package/lib/esm/render/RenderSystem.js +0 -6
  223. package/lib/esm/render/RenderSystem.js.map +1 -1
  224. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  225. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  226. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  227. package/lib/esm/render/webgl/AttributeBuffers.d.ts +9 -79
  228. package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
  229. package/lib/esm/render/webgl/AttributeBuffers.js +16 -144
  230. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  231. package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  232. package/lib/esm/render/webgl/BackgroundMapDrape.js +0 -3
  233. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  234. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  235. package/lib/esm/render/webgl/BranchUniforms.js +0 -8
  236. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  237. package/lib/esm/render/webgl/ClipStack.d.ts +0 -1
  238. package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
  239. package/lib/esm/render/webgl/ClipStack.js +2 -6
  240. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  241. package/lib/esm/render/webgl/ClipVolume.d.ts.map +1 -1
  242. package/lib/esm/render/webgl/ClipVolume.js +1 -5
  243. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  244. package/lib/esm/render/webgl/ClippingProgram.d.ts +3 -2
  245. package/lib/esm/render/webgl/ClippingProgram.d.ts.map +1 -1
  246. package/lib/esm/render/webgl/ClippingProgram.js +10 -37
  247. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  248. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
  249. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  250. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  251. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  252. package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
  253. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  254. package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
  255. package/lib/esm/render/webgl/FloatRGBA.js +0 -4
  256. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  257. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  258. package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
  259. package/lib/esm/render/webgl/GLTimer.js +2 -35
  260. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  261. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  262. package/lib/esm/render/webgl/PlanarClassifier.js +13 -71
  263. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  264. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  265. package/lib/esm/render/webgl/PointCloud.js +1 -3
  266. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  267. package/lib/esm/render/webgl/RenderBuffer.d.ts +1 -1
  268. package/lib/esm/render/webgl/RenderBuffer.d.ts.map +1 -1
  269. package/lib/esm/render/webgl/RenderBuffer.js +2 -3
  270. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  271. package/lib/esm/render/webgl/RenderFlags.d.ts +1 -2
  272. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  273. package/lib/esm/render/webgl/RenderFlags.js +4 -6
  274. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  275. package/lib/esm/render/webgl/SceneCompositor.d.ts +0 -2
  276. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  277. package/lib/esm/render/webgl/SceneCompositor.js +756 -1137
  278. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  279. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  280. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  281. package/lib/esm/render/webgl/ShaderBuilder.d.ts +1 -2
  282. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  283. package/lib/esm/render/webgl/ShaderBuilder.js +13 -48
  284. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  285. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -2
  286. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  287. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  288. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  289. package/lib/esm/render/webgl/SolarShadowMap.js +6 -18
  290. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  291. package/lib/esm/render/webgl/System.d.ts +11 -10
  292. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  293. package/lib/esm/render/webgl/System.js +42 -124
  294. package/lib/esm/render/webgl/System.js.map +1 -1
  295. package/lib/esm/render/webgl/Technique.d.ts +4 -5
  296. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  297. package/lib/esm/render/webgl/Technique.js +5 -29
  298. package/lib/esm/render/webgl/Technique.js.map +1 -1
  299. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  300. package/lib/esm/render/webgl/Texture.js +14 -18
  301. package/lib/esm/render/webgl/Texture.js.map +1 -1
  302. package/lib/esm/render/webgl/ThematicSensors.d.ts +4 -3
  303. package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
  304. package/lib/esm/render/webgl/ThematicSensors.js +9 -50
  305. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  306. package/lib/esm/render/webgl/ThematicUniforms.js +1 -1
  307. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  308. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  309. package/lib/esm/render/webgl/UniformHandle.js +1 -4
  310. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  311. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  312. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  313. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  314. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  315. package/lib/esm/render/webgl/glsl/Animation.d.ts +1 -2
  316. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  317. package/lib/esm/render/webgl/glsl/Animation.js +23 -26
  318. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  319. package/lib/esm/render/webgl/glsl/Blur.d.ts +1 -2
  320. package/lib/esm/render/webgl/glsl/Blur.d.ts.map +1 -1
  321. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  322. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  323. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  324. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -9
  325. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  326. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  327. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  328. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -10
  329. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  330. package/lib/esm/render/webgl/glsl/Clipping.d.ts +1 -1
  331. package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
  332. package/lib/esm/render/webgl/glsl/Clipping.js +5 -36
  333. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  334. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  335. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  336. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  337. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts +1 -2
  338. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  339. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  340. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  341. package/lib/esm/render/webgl/glsl/Common.js +9 -55
  342. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  343. package/lib/esm/render/webgl/glsl/Composite.d.ts +1 -2
  344. package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
  345. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  346. package/lib/esm/render/webgl/glsl/CopyColor.d.ts +1 -2
  347. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  348. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  349. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  350. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  351. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +12 -19
  352. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  353. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts +4 -7
  354. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  355. package/lib/esm/render/webgl/glsl/CopyStencil.js +1 -37
  356. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  357. package/lib/esm/render/webgl/glsl/EDL.d.ts +4 -5
  358. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -1
  359. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  360. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  361. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  362. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  363. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  364. package/lib/esm/render/webgl/glsl/Edge.js +2 -2
  365. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  366. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  367. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +3 -24
  368. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  369. package/lib/esm/render/webgl/glsl/Fragment.d.ts +0 -7
  370. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  371. package/lib/esm/render/webgl/glsl/Fragment.js +4 -38
  372. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  373. package/lib/esm/render/webgl/glsl/Instancing.d.ts.map +1 -1
  374. package/lib/esm/render/webgl/glsl/Instancing.js +1 -5
  375. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  376. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  378. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  379. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  380. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  381. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -12
  382. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  383. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  384. package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -8
  385. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  386. package/lib/esm/render/webgl/glsl/SkyBox.d.ts +1 -2
  387. package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  388. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  389. package/lib/esm/render/webgl/glsl/SkySphere.d.ts +1 -2
  390. package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  391. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  392. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
  393. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  394. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  395. package/lib/esm/render/webgl/glsl/Surface.js +33 -57
  396. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  397. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  398. package/lib/esm/render/webgl/glsl/Thematic.js +3 -36
  399. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  400. package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
  401. package/lib/esm/render/webgl/glsl/Translucency.js +3 -13
  402. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  403. package/lib/esm/render/webgl/glsl/Vertex.d.ts +1 -2
  404. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  405. package/lib/esm/render/webgl/glsl/Vertex.js +16 -79
  406. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  407. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  408. package/lib/esm/render/webgl/glsl/Wiremesh.js +2 -5
  409. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  410. package/lib/esm/tile/PrimaryTileTree.d.ts +0 -3
  411. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  412. package/lib/esm/tile/PrimaryTileTree.js +8 -30
  413. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  414. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  415. package/lib/esm/tile/TileAdmin.js +2 -2
  416. package/lib/esm/tile/TileAdmin.js.map +1 -1
  417. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"BranchUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/BranchUniforms.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 { ClipVector, Matrix3d, Matrix4d, Point3d, Transform, XYZ } from \"@itwin/core-geometry\";\r\nimport { ClipStyle, HiddenLine, ViewFlags } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { CachedGeometry } from \"./CachedGeometry\";\r\nimport { Branch } from \"./Graphic\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { desync, sync, SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { ClipStack } from \"./ClipStack\";\r\n\r\nfunction equalXYZs(a: XYZ | undefined, b: XYZ | undefined): boolean {\r\n if (a === b)\r\n return true;\r\n\r\n if ((undefined === a) !== (undefined === b))\r\n return false;\r\n\r\n if (undefined !== a && undefined !== b)\r\n return a.isExactEqual(b);\r\n\r\n assert(undefined === a && undefined === b);\r\n return true;\r\n}\r\n\r\n/** Maintains uniform variable state associated with the Branch currently being drawn by a Target.\r\n * @internal\r\n */\r\nexport class BranchUniforms {\r\n public readonly clipStack: ClipStack;\r\n private _viewClipEnabled = false;\r\n\r\n // The model-view and model-view-projection matrices depend on the frustum.\r\n public syncToken?: SyncToken;\r\n public syncKey = 0;\r\n private readonly _stack = new BranchStack();\r\n private readonly _target: Target;\r\n\r\n // Parameters that affect synchronization.\r\n private _isInstanced = false;\r\n private _viewIndependentOrigin?: Point3d;\r\n\r\n // CPU state\r\n private readonly _mv = Matrix4d.createIdentity();\r\n private readonly _mvp = Matrix4d.createIdentity();\r\n\r\n // GPU state\r\n private readonly _mv32 = new Matrix4();\r\n private readonly _mvp32 = new Matrix4();\r\n private readonly _m32 = new Matrix4();\r\n private readonly _v32 = new Matrix3();\r\n private readonly _mvn32 = new Matrix3();\r\n\r\n // Working state\r\n private readonly _scratchTransform = Transform.createIdentity();\r\n private readonly _scratchTransform2 = Transform.createIdentity();\r\n private readonly _scratchViewToWorld = Matrix3d.createIdentity();\r\n private readonly _scratchVIModelMatrix = Transform.createIdentity();\r\n private readonly _zeroPoint = new Point3d(0, 0, 0);\r\n\r\n public get stack(): BranchStack { return this._stack; }\r\n\r\n public constructor(target: Target) {\r\n this._target = target;\r\n this.clipStack = new ClipStack(\r\n () => target.uniforms.frustum.viewMatrix,\r\n () => this._viewClipEnabled && this.top.viewFlags.clipVolume,\r\n );\r\n }\r\n\r\n public createBatchState(): BatchState {\r\n return new BatchState(this._stack);\r\n }\r\n\r\n public createRenderCommands(batchState: BatchState): RenderCommands {\r\n return new RenderCommands(this._target, this._stack, batchState);\r\n }\r\n\r\n public get modelViewMatrix(): Matrix4d {\r\n return this._mv;\r\n }\r\n\r\n public get top(): BranchState {\r\n return this._stack.top;\r\n }\r\n\r\n public get length(): number {\r\n return this._stack.length;\r\n }\r\n\r\n public pushBranch(branch: Branch): void {\r\n desync(this);\r\n this._stack.pushBranch(branch);\r\n if (this.top.clipVolume)\r\n this.clipStack.push(this.top.clipVolume);\r\n\r\n if (branch.branch.realityModelDisplaySettings)\r\n this._target.uniforms.realityModel.update(branch.branch.realityModelDisplaySettings);\r\n }\r\n\r\n public pushState(state: BranchState): void {\r\n desync(this);\r\n this._stack.pushState(state);\r\n if (this.top.clipVolume)\r\n this.clipStack.push(this.top.clipVolume);\r\n\r\n if (state.realityModelDisplaySettings)\r\n this._target.uniforms.realityModel.update(state.realityModelDisplaySettings);\r\n }\r\n\r\n public pop(): void {\r\n desync(this);\r\n if (this.top.clipVolume)\r\n this.clipStack.pop();\r\n\r\n this._stack.pop();\r\n }\r\n\r\n public pushViewClip(): void {\r\n assert(!this._viewClipEnabled);\r\n this._viewClipEnabled = true;\r\n\r\n // Target.readPixels() pushes another BranchState before pushing view clip...\r\n assert((this._target.isReadPixelsInProgress ? 2 : 1) === this._stack.length);\r\n }\r\n\r\n public popViewClip(): void {\r\n assert(this._viewClipEnabled);\r\n this._viewClipEnabled = false;\r\n assert((this._target.isReadPixelsInProgress ? 2 : 1) === this._stack.length);\r\n }\r\n\r\n public changeRenderPlan(vf: ViewFlags, is3d: boolean, hline: HiddenLine.Settings | undefined): void {\r\n this._stack.changeRenderPlan(vf, is3d, hline);\r\n }\r\n\r\n public updateViewClip(clip: ClipVector | undefined, style: ClipStyle): void {\r\n this.clipStack.setViewClip(clip, style);\r\n }\r\n\r\n public overrideFeatureSymbology(ovr: FeatureSymbology.Overrides): void {\r\n this._stack.setSymbologyOverrides(ovr);\r\n }\r\n\r\n public bindModelViewMatrix(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean): void {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix4(this._mv32);\r\n }\r\n\r\n public bindModelViewProjectionMatrix(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean): void {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix4(this._mvp32);\r\n }\r\n\r\n public bindModelToWorldTransform(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean) {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix4(this._m32);\r\n }\r\n\r\n public bindWorldToViewNTransform(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean) {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix3(this._v32);\r\n }\r\n\r\n public bindModelViewNTransform(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean) {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix3(this._mvn32);\r\n }\r\n\r\n private update(uniform: UniformHandle, geometry: CachedGeometry, isViewCoords: boolean): boolean {\r\n const uniforms = this._target.uniforms[isViewCoords ? \"viewRect\" : \"frustum\"];\r\n if (!sync(uniforms, this))\r\n desync(this);\r\n\r\n const instancedGeom = geometry.asInstanced;\r\n if (undefined !== instancedGeom || this._isInstanced) {\r\n this._isInstanced = undefined !== instancedGeom;\r\n desync(this);\r\n }\r\n\r\n const vio = geometry.viewIndependentOrigin;\r\n if (!equalXYZs(vio, this._viewIndependentOrigin)) {\r\n this._viewIndependentOrigin = vio;\r\n desync(this);\r\n }\r\n\r\n if (sync(this, uniform))\r\n return false;\r\n\r\n let mv;\r\n const modelMatrix = this._target.currentTransform;\r\n if (isViewCoords) {\r\n // Zero out Z for silly clipping tools...\r\n mv = modelMatrix.clone(this._scratchTransform);\r\n mv.matrix.coffs[2] = mv.matrix.coffs[5] = mv.matrix.coffs[8] = 0.0;\r\n if (instancedGeom)\r\n mv = instancedGeom.getRtcModelTransform(mv);\r\n\r\n // Scale based on device-pixel ratio.\r\n const scale = this._target.devicePixelRatio;\r\n const viewMatrix = Transform.createScaleAboutPoint(this._zeroPoint, scale, this._scratchTransform2);\r\n viewMatrix.multiplyTransformTransform(mv, mv);\r\n } else {\r\n const viewMatrix = this._target.uniforms.frustum.viewMatrix;\r\n mv = viewMatrix.clone(this._scratchTransform);\r\n\r\n if (undefined !== instancedGeom) {\r\n // For instanced geometry, the \"model view\" matrix is really a transform from center of instanced geometry range to view.\r\n // Shader will compute final model-view matrix based on this and the per-instance transform.\r\n if (vio) {\r\n const viewToWorldRot = viewMatrix.matrix.inverse(this._scratchViewToWorld)!;\r\n const rotateAboutOrigin = Transform.createFixedPointAndMatrix(vio, viewToWorldRot, this._scratchTransform2);\r\n const viModelMatrix = rotateAboutOrigin.multiplyTransformTransform(instancedGeom.getRtcModelTransform(modelMatrix), this._scratchVIModelMatrix);\r\n mv.multiplyTransformTransform(viModelMatrix, mv);\r\n } else {\r\n mv.multiplyTransformTransform(instancedGeom.getRtcModelTransform(modelMatrix), mv);\r\n }\r\n } else {\r\n if (undefined !== vio) {\r\n const viewToWorldRot = viewMatrix.matrix.inverse(this._scratchViewToWorld)!;\r\n const rotateAboutOrigin = Transform.createFixedPointAndMatrix(vio, viewToWorldRot, this._scratchTransform2);\r\n const viModelMatrix = rotateAboutOrigin.multiplyTransformTransform(modelMatrix, this._scratchVIModelMatrix);\r\n mv.multiplyTransformTransform(viModelMatrix, mv);\r\n } else {\r\n mv = mv.multiplyTransformTransform(modelMatrix, mv);\r\n }\r\n }\r\n }\r\n\r\n if (this._target.wantThematicDisplay) {\r\n this._m32.initFromTransform(modelMatrix);\r\n this._v32.initFromMatrix3d(this._target.uniforms.frustum.viewMatrix.matrix);\r\n }\r\n\r\n Matrix4d.createTransform(mv, this._mv);\r\n this._mv32.initFromTransform(mv);\r\n\r\n // Don't bother computing mvp for instanced geometry - it's not used.\r\n if (!this._isInstanced) {\r\n uniforms.projectionMatrix.multiplyMatrixMatrix(this._mv, this._mvp);\r\n this._mvp32.initFromMatrix4d(this._mvp);\r\n if (!System.instance.capabilities.isWebGL2) { // inverse model to view is only used if not instanced and not WebGL2\r\n const inv = this._mv.createInverse();\r\n if (undefined !== inv) {\r\n const invTr = inv.cloneTransposed();\r\n this._mvn32.initFromMatrix3d(invTr.matrixPart());\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BranchUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/BranchUniforms.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 { ClipVector, Matrix3d, Matrix4d, Point3d, Transform, XYZ } from \"@itwin/core-geometry\";\r\nimport { ClipStyle, HiddenLine, ViewFlags } from \"@itwin/core-common\";\r\nimport { FeatureSymbology } from \"../FeatureSymbology\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport { BranchStack } from \"./BranchStack\";\r\nimport { BatchState } from \"./BatchState\";\r\nimport { CachedGeometry } from \"./CachedGeometry\";\r\nimport { Branch } from \"./Graphic\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { RenderCommands } from \"./RenderCommands\";\r\nimport { desync, sync, SyncToken } from \"./Sync\";\r\nimport { Target } from \"./Target\";\r\nimport { ClipStack } from \"./ClipStack\";\r\n\r\nfunction equalXYZs(a: XYZ | undefined, b: XYZ | undefined): boolean {\r\n if (a === b)\r\n return true;\r\n\r\n if ((undefined === a) !== (undefined === b))\r\n return false;\r\n\r\n if (undefined !== a && undefined !== b)\r\n return a.isExactEqual(b);\r\n\r\n assert(undefined === a && undefined === b);\r\n return true;\r\n}\r\n\r\n/** Maintains uniform variable state associated with the Branch currently being drawn by a Target.\r\n * @internal\r\n */\r\nexport class BranchUniforms {\r\n public readonly clipStack: ClipStack;\r\n private _viewClipEnabled = false;\r\n\r\n // The model-view and model-view-projection matrices depend on the frustum.\r\n public syncToken?: SyncToken;\r\n public syncKey = 0;\r\n private readonly _stack = new BranchStack();\r\n private readonly _target: Target;\r\n\r\n // Parameters that affect synchronization.\r\n private _isInstanced = false;\r\n private _viewIndependentOrigin?: Point3d;\r\n\r\n // CPU state\r\n private readonly _mv = Matrix4d.createIdentity();\r\n private readonly _mvp = Matrix4d.createIdentity();\r\n\r\n // GPU state\r\n private readonly _mv32 = new Matrix4();\r\n private readonly _mvp32 = new Matrix4();\r\n private readonly _m32 = new Matrix4();\r\n private readonly _v32 = new Matrix3();\r\n private readonly _mvn32 = new Matrix3();\r\n\r\n // Working state\r\n private readonly _scratchTransform = Transform.createIdentity();\r\n private readonly _scratchTransform2 = Transform.createIdentity();\r\n private readonly _scratchViewToWorld = Matrix3d.createIdentity();\r\n private readonly _scratchVIModelMatrix = Transform.createIdentity();\r\n private readonly _zeroPoint = new Point3d(0, 0, 0);\r\n\r\n public get stack(): BranchStack { return this._stack; }\r\n\r\n public constructor(target: Target) {\r\n this._target = target;\r\n this.clipStack = new ClipStack(\r\n () => target.uniforms.frustum.viewMatrix,\r\n () => this._viewClipEnabled && this.top.viewFlags.clipVolume,\r\n );\r\n }\r\n\r\n public createBatchState(): BatchState {\r\n return new BatchState(this._stack);\r\n }\r\n\r\n public createRenderCommands(batchState: BatchState): RenderCommands {\r\n return new RenderCommands(this._target, this._stack, batchState);\r\n }\r\n\r\n public get modelViewMatrix(): Matrix4d {\r\n return this._mv;\r\n }\r\n\r\n public get top(): BranchState {\r\n return this._stack.top;\r\n }\r\n\r\n public get length(): number {\r\n return this._stack.length;\r\n }\r\n\r\n public pushBranch(branch: Branch): void {\r\n desync(this);\r\n this._stack.pushBranch(branch);\r\n if (this.top.clipVolume)\r\n this.clipStack.push(this.top.clipVolume);\r\n\r\n if (branch.branch.realityModelDisplaySettings)\r\n this._target.uniforms.realityModel.update(branch.branch.realityModelDisplaySettings);\r\n }\r\n\r\n public pushState(state: BranchState): void {\r\n desync(this);\r\n this._stack.pushState(state);\r\n if (this.top.clipVolume)\r\n this.clipStack.push(this.top.clipVolume);\r\n\r\n if (state.realityModelDisplaySettings)\r\n this._target.uniforms.realityModel.update(state.realityModelDisplaySettings);\r\n }\r\n\r\n public pop(): void {\r\n desync(this);\r\n if (this.top.clipVolume)\r\n this.clipStack.pop();\r\n\r\n this._stack.pop();\r\n }\r\n\r\n public pushViewClip(): void {\r\n assert(!this._viewClipEnabled);\r\n this._viewClipEnabled = true;\r\n\r\n // Target.readPixels() pushes another BranchState before pushing view clip...\r\n assert((this._target.isReadPixelsInProgress ? 2 : 1) === this._stack.length);\r\n }\r\n\r\n public popViewClip(): void {\r\n assert(this._viewClipEnabled);\r\n this._viewClipEnabled = false;\r\n assert((this._target.isReadPixelsInProgress ? 2 : 1) === this._stack.length);\r\n }\r\n\r\n public changeRenderPlan(vf: ViewFlags, is3d: boolean, hline: HiddenLine.Settings | undefined): void {\r\n this._stack.changeRenderPlan(vf, is3d, hline);\r\n }\r\n\r\n public updateViewClip(clip: ClipVector | undefined, style: ClipStyle): void {\r\n this.clipStack.setViewClip(clip, style);\r\n }\r\n\r\n public overrideFeatureSymbology(ovr: FeatureSymbology.Overrides): void {\r\n this._stack.setSymbologyOverrides(ovr);\r\n }\r\n\r\n public bindModelViewMatrix(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean): void {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix4(this._mv32);\r\n }\r\n\r\n public bindModelViewProjectionMatrix(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean): void {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix4(this._mvp32);\r\n }\r\n\r\n public bindModelToWorldTransform(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean) {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix4(this._m32);\r\n }\r\n\r\n public bindWorldToViewNTransform(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean) {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix3(this._v32);\r\n }\r\n\r\n public bindModelViewNTransform(uniform: UniformHandle, geom: CachedGeometry, isViewCoords: boolean) {\r\n if (this.update(uniform, geom, isViewCoords))\r\n uniform.setMatrix3(this._mvn32);\r\n }\r\n\r\n private update(uniform: UniformHandle, geometry: CachedGeometry, isViewCoords: boolean): boolean {\r\n const uniforms = this._target.uniforms[isViewCoords ? \"viewRect\" : \"frustum\"];\r\n if (!sync(uniforms, this))\r\n desync(this);\r\n\r\n const instancedGeom = geometry.asInstanced;\r\n if (undefined !== instancedGeom || this._isInstanced) {\r\n this._isInstanced = undefined !== instancedGeom;\r\n desync(this);\r\n }\r\n\r\n const vio = geometry.viewIndependentOrigin;\r\n if (!equalXYZs(vio, this._viewIndependentOrigin)) {\r\n this._viewIndependentOrigin = vio;\r\n desync(this);\r\n }\r\n\r\n if (sync(this, uniform))\r\n return false;\r\n\r\n let mv;\r\n const modelMatrix = this._target.currentTransform;\r\n if (isViewCoords) {\r\n // Zero out Z for silly clipping tools...\r\n mv = modelMatrix.clone(this._scratchTransform);\r\n mv.matrix.coffs[2] = mv.matrix.coffs[5] = mv.matrix.coffs[8] = 0.0;\r\n if (instancedGeom)\r\n mv = instancedGeom.getRtcModelTransform(mv);\r\n\r\n // Scale based on device-pixel ratio.\r\n const scale = this._target.devicePixelRatio;\r\n const viewMatrix = Transform.createScaleAboutPoint(this._zeroPoint, scale, this._scratchTransform2);\r\n viewMatrix.multiplyTransformTransform(mv, mv);\r\n } else {\r\n const viewMatrix = this._target.uniforms.frustum.viewMatrix;\r\n mv = viewMatrix.clone(this._scratchTransform);\r\n\r\n if (undefined !== instancedGeom) {\r\n // For instanced geometry, the \"model view\" matrix is really a transform from center of instanced geometry range to view.\r\n // Shader will compute final model-view matrix based on this and the per-instance transform.\r\n if (vio) {\r\n const viewToWorldRot = viewMatrix.matrix.inverse(this._scratchViewToWorld)!;\r\n const rotateAboutOrigin = Transform.createFixedPointAndMatrix(vio, viewToWorldRot, this._scratchTransform2);\r\n const viModelMatrix = rotateAboutOrigin.multiplyTransformTransform(instancedGeom.getRtcModelTransform(modelMatrix), this._scratchVIModelMatrix);\r\n mv.multiplyTransformTransform(viModelMatrix, mv);\r\n } else {\r\n mv.multiplyTransformTransform(instancedGeom.getRtcModelTransform(modelMatrix), mv);\r\n }\r\n } else {\r\n if (undefined !== vio) {\r\n const viewToWorldRot = viewMatrix.matrix.inverse(this._scratchViewToWorld)!;\r\n const rotateAboutOrigin = Transform.createFixedPointAndMatrix(vio, viewToWorldRot, this._scratchTransform2);\r\n const viModelMatrix = rotateAboutOrigin.multiplyTransformTransform(modelMatrix, this._scratchVIModelMatrix);\r\n mv.multiplyTransformTransform(viModelMatrix, mv);\r\n } else {\r\n mv = mv.multiplyTransformTransform(modelMatrix, mv);\r\n }\r\n }\r\n }\r\n\r\n if (this._target.wantThematicDisplay) {\r\n this._m32.initFromTransform(modelMatrix);\r\n this._v32.initFromMatrix3d(this._target.uniforms.frustum.viewMatrix.matrix);\r\n }\r\n\r\n Matrix4d.createTransform(mv, this._mv);\r\n this._mv32.initFromTransform(mv);\r\n\r\n // Don't bother computing mvp for instanced geometry - it's not used.\r\n if (!this._isInstanced) {\r\n uniforms.projectionMatrix.multiplyMatrixMatrix(this._mv, this._mvp);\r\n this._mvp32.initFromMatrix4d(this._mvp);\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}
@@ -21,7 +21,6 @@ export declare class ClipStack {
21
21
  /** A view of the encoded buffer in the format expected by the GPU. */
22
22
  protected _gpuBuffer: Texture2DData;
23
23
  protected _texture?: Texture2DHandle;
24
- protected readonly _isFloatTexture: boolean;
25
24
  /** The maximum number of rows we have ever required. Determines the texture height. Grows as needed, reallocating a larger texture, but never shrinks. */
26
25
  protected _numTotalRows: number;
27
26
  /** The number of rows in the texture actually required to encode the current contents of the stack. */
@@ -1 +1 @@
1
- {"version":3,"file":"ClipStack.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ClipStack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClipStack.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ClipStack.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAwB,UAAU,EAAW,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1E,UAAU,IAAI;IACZ,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,UAAU,CAAC;CACxD;AAiBD;;;;GAIG;AACH,qBAAa,SAAS;IACpB,+FAA+F;IAC/F,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IACjC,sEAAsE;IACtE,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;IACrC,0JAA0J;IAC1J,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,uGAAuG;IACvG,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,4GAA4G;IAC5G,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAe;IAChD,gDAAgD;IAChD,SAAS,CAAC,aAAa,UAAS;IAChC,+EAA+E;IAC/E,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,SAAS,CAAC;IAClD,6EAA6E;IAC7E,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;IAChD,+EAA+E;IAC/E,SAAS,CAAC,QAAQ,CAAC,YAAY,YAA8B;IAC7D,gFAAgF;IAChF,SAAS,CAAC,QAAQ,CAAC,aAAa,YAA8B;IAC9D,kGAAkG;IAClG,SAAS,CAAC,QAAQ,CAAC,cAAc,YAA0B;gBAExC,YAAY,EAAE,MAAM,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO;IAS7E,IAAW,WAAW,IAAI,SAAS,CAElC;IAED,IAAW,YAAY,IAAI,SAAS,CAEnC;IAED,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAEM,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE;QAAE,WAAW,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,IAAI;IAyC3G,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IASlC,GAAG,IAAI,IAAI;IAMlB,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,IAAW,UAAU,IAAI,MAAM,CAG9B;IAED,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,IAAW,OAAO,IAAI,aAAa,GAAG,SAAS,CAG9C;IAEM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO;IAiBpE,kCAAkC;IAClC,IAAW,KAAK,IAAI,aAAa,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAErD;IAED,kCAAkC;IAClC,WAAkB,aAAa;;;MAE9B;IAED,SAAS,CAAC,aAAa,IAAI,IAAI;IAgB/B,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAoBlC,SAAS,CAAC,aAAa,IAAI,IAAI;IAS/B,SAAS,CAAC,iBAAiB,IAAI,aAAa;IAI5C,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;CAKxE"}
@@ -15,7 +15,6 @@ const FloatRGBA_1 = require("./FloatRGBA");
15
15
  const Texture_1 = require("./Texture");
16
16
  const ClipVolume_1 = require("./ClipVolume");
17
17
  const GL_1 = require("./GL");
18
- const System_1 = require("./System");
19
18
  const emptyClipData = new Uint8Array(0);
20
19
  const emptyClip = {
21
20
  numRows: 0,
@@ -47,7 +46,6 @@ class ClipStack {
47
46
  this._prevTransform = core_geometry_1.Transform.createZero();
48
47
  this._getTransform = getTransform;
49
48
  this._wantViewClip = wantViewClip;
50
- this._isFloatTexture = System_1.System.instance.capabilities.supportsTextureFloat;
51
49
  this._numTotalRows = this._numRowsInUse = 0;
52
50
  this._cpuBuffer = new Uint8Array(this._numTotalRows);
53
51
  this._gpuBuffer = this.allocateGpuBuffer();
@@ -193,13 +191,11 @@ class ClipStack {
193
191
  if (this._texture)
194
192
  this._texture.replaceTextureData(this._gpuBuffer);
195
193
  else
196
- this._texture = Texture_1.Texture2DHandle.createForData(this._isFloatTexture ? 1 : 4, this._numTotalRows, this._gpuBuffer, false, GL_1.GL.Texture.WrapMode.ClampToEdge, GL_1.GL.Texture.Format.Rgba);
194
+ this._texture = Texture_1.Texture2DHandle.createForData(1, this._numTotalRows, this._gpuBuffer, false, GL_1.GL.Texture.WrapMode.ClampToEdge, GL_1.GL.Texture.Format.Rgba);
197
195
  (0, core_bentley_1.assert)(this._texture.height === this._numTotalRows);
198
196
  }
199
197
  allocateGpuBuffer() {
200
- if (this._isFloatTexture)
201
- return new Float32Array(this._cpuBuffer.buffer);
202
- return this._cpuBuffer;
198
+ return new Float32Array(this._cpuBuffer.buffer);
203
199
  }
204
200
  updateColor(rgb, rgba) {
205
201
  rgba.alpha = undefined !== rgb ? 1 : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"ClipStack.js","sourceRoot":"","sources":["../../../../src/render/webgl/ClipStack.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 } from \"@itwin/core-bentley\";\r\nimport { ClipPlaneContainment, ClipVector, Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport { RgbColor } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { RenderClipVolume } from \"../RenderClipVolume\";\r\nimport { FloatRgba } from \"./FloatRGBA\";\r\nimport { Texture2DData, Texture2DHandle, TextureHandle } from \"./Texture\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\nimport { GL } from \"./GL\";\r\nimport { System } from \"./System\";\r\n\r\ninterface Clip {\r\n readonly numRows: number;\r\n readonly getData: (transform: Transform) => Uint8Array;\r\n}\r\n\r\nconst emptyClipData = new Uint8Array(0);\r\nconst emptyClip = {\r\n numRows: 0,\r\n getData: () => emptyClipData,\r\n};\r\n\r\nconst scratchRangeCorners = [\r\n new Point3d(), new Point3d(), new Point3d(), new Point3d(),\r\n new Point3d(), new Point3d(), new Point3d(), new Point3d(),\r\n];\r\n\r\nfunction getRangeCorners(r: Range3d): Point3d[] {\r\n return r.corners(scratchRangeCorners);\r\n}\r\n\r\n/** Maintains a stack of ClipVolumes. The volumes nest such that the stack represents the intersection of all the volumes.\r\n * The bottom of the stack represents the view's clip volume and is always present even if the view has no clip.\r\n * It also maintains the inside/outside clip colors, where the alpha component is 1 if the color should be applied and 0 if not.\r\n * @internal\r\n */\r\nexport class ClipStack {\r\n /** Encoded data for all clips on the stack, update when the stack or the transform changes. */\r\n protected _cpuBuffer: Uint8Array;\r\n /** A view of the encoded buffer in the format expected by the GPU. */\r\n protected _gpuBuffer: Texture2DData;\r\n protected _texture?: Texture2DHandle;\r\n protected readonly _isFloatTexture: boolean;\r\n /** The maximum number of rows we have ever required. Determines the texture height. Grows as needed, reallocating a larger texture, but never shrinks. */\r\n protected _numTotalRows: number;\r\n /** The number of rows in the texture actually required to encode the current contents of the stack. */\r\n protected _numRowsInUse: number;\r\n /** The first entry always represents the view clip. The rest are pushed and popped with GraphicBranches. */\r\n protected readonly _stack: Clip[] = [emptyClip];\r\n /** True if we need to recompute the texture. */\r\n protected _isStackDirty = false;\r\n /** Obtain the transform to be applied to the clips - i.e., the view matrix. */\r\n protected readonly _getTransform: () => Transform;\r\n /** If this returns false, the clip at the bottom of the stack is ignored. */\r\n protected readonly _wantViewClip: () => boolean;\r\n /** If alpha is 1 then geometry inside the clip will be drawn in this color. */\r\n protected readonly _insideColor = FloatRgba.from(0, 0, 0, 0);\r\n /** If alpha is 1 then geometry outside the clip will be drawn in this color. */\r\n protected readonly _outsideColor = FloatRgba.from(0, 0, 0, 0);\r\n /** For detecting whether the transform changed from one invocation of setViewClip to the next. */\r\n protected readonly _prevTransform = Transform.createZero();\r\n\r\n public constructor(getTransform: () => Transform, wantViewClip: () => boolean) {\r\n this._getTransform = getTransform;\r\n this._wantViewClip = wantViewClip;\r\n\r\n this._isFloatTexture = System.instance.capabilities.supportsTextureFloat;\r\n this._numTotalRows = this._numRowsInUse = 0;\r\n this._cpuBuffer = new Uint8Array(this._numTotalRows);\r\n this._gpuBuffer = this.allocateGpuBuffer();\r\n }\r\n\r\n public get insideColor(): FloatRgba {\r\n return this._insideColor;\r\n }\r\n\r\n public get outsideColor(): FloatRgba {\r\n return this._outsideColor;\r\n }\r\n\r\n public get hasOutsideColor(): boolean {\r\n return this.outsideColor.alpha !== 0;\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._texture ? this._texture.bytesUsed : 0;\r\n }\r\n\r\n public setViewClip(clip: ClipVector | undefined, style: { insideColor?: RgbColor, outsideColor?: RgbColor }): void {\r\n assert(this._stack.length === 1);\r\n\r\n this.updateColor(style.insideColor, this._insideColor);\r\n this.updateColor(style.outsideColor, this._outsideColor);\r\n\r\n const transform = this._getTransform();\r\n if (!transform.isAlmostEqual(this._prevTransform)) {\r\n transform.clone(this._prevTransform);\r\n this._isStackDirty = true;\r\n }\r\n\r\n const cur = this._stack[0];\r\n if (cur === emptyClip) {\r\n if (!clip)\r\n return; // no change.\r\n } else if (!clip) {\r\n this._stack[0] = emptyClip;\r\n this._numRowsInUse = 0;\r\n this._isStackDirty = true;\r\n return;\r\n } else {\r\n assert(cur instanceof ClipVolume);\r\n if (cur.clipVector === clip) {\r\n // We assume that the active view's ClipVector is never mutated in place, so if we are given the same ClipVector, we expect our RenderClipVolume to match it.\r\n return;\r\n }\r\n }\r\n\r\n // ClipVector has changed.\r\n const newClip = IModelApp.renderSystem.createClipVolume(clip);\r\n if (!newClip) {\r\n this._isStackDirty = this._stack[0] !== emptyClip;\r\n this._stack[0] = emptyClip;\r\n this._numRowsInUse = 0;\r\n } else {\r\n this.pop();\r\n this.push(newClip);\r\n }\r\n }\r\n\r\n public push(clip: RenderClipVolume): void {\r\n assert(clip instanceof ClipVolume);\r\n\r\n this._stack.push(clip);\r\n this._numRowsInUse += clip.numRows;\r\n this._numTotalRows = Math.max(this._numRowsInUse, this._numTotalRows);\r\n this._isStackDirty = true;\r\n }\r\n\r\n public pop(): void {\r\n assert(this._stack.length > 0);\r\n const clip = this._stack.pop();\r\n this._numRowsInUse -= (clip ? clip.numRows : 0);\r\n }\r\n\r\n public get hasClip(): boolean {\r\n return this.startIndex < this.endIndex;\r\n }\r\n\r\n public get hasViewClip(): boolean {\r\n return emptyClip !== this._stack[0] && this._wantViewClip();\r\n }\r\n\r\n public get startIndex(): number {\r\n assert(this._stack.length > 0);\r\n return this._wantViewClip() ? 0 : this._stack[0].numRows;\r\n }\r\n\r\n public get endIndex(): number {\r\n return this._numRowsInUse;\r\n }\r\n\r\n public get textureHeight(): number {\r\n return this._numTotalRows;\r\n }\r\n\r\n public get texture(): TextureHandle | undefined {\r\n this.updateTexture();\r\n return this._texture;\r\n }\r\n\r\n public isRangeClipped(range: Range3d, transform: Transform): boolean {\r\n if (this.hasOutsideColor || !this.hasClip)\r\n return false;\r\n\r\n range = transform.multiplyRange(range, range);\r\n const corners = getRangeCorners(range);\r\n const startIndex = this._wantViewClip() && emptyClip !== this._stack[0] ? 0 : 1;\r\n for (let i = startIndex; i < this._stack.length; i++) {\r\n const clip = this._stack[i];\r\n assert(clip instanceof ClipVolume);\r\n if (ClipPlaneContainment.StronglyOutside === clip.clipVector.classifyPointContainment(corners))\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public get clips(): ReadonlyArray<{ numRows: number }> {\r\n return this._stack;\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public static get emptyViewClip() {\r\n return emptyClip;\r\n }\r\n\r\n protected updateTexture(): void {\r\n if (this._numTotalRows > 0 && (!this._texture || this._texture.height < this._numTotalRows)) {\r\n // We need to resize the texture.\r\n assert(this._isStackDirty);\r\n this._isStackDirty = true;\r\n this._texture = dispose(this._texture);\r\n this._cpuBuffer = new Uint8Array(this._numTotalRows * 4 * 4);\r\n this._gpuBuffer = this.allocateGpuBuffer();\r\n }\r\n\r\n if (this._isStackDirty) {\r\n this._isStackDirty = false;\r\n this.recomputeTexture();\r\n }\r\n }\r\n\r\n protected recomputeTexture(): void {\r\n // Copy each clip's data to the buffer, recording whether the buffer's contents actually changed.\r\n let bufferDirty = false;\r\n const transform = this._getTransform();\r\n let bufferIndex = 0;\r\n for (const clip of this._stack) {\r\n const data = clip.getData(transform);\r\n for (let i = 0; i < data.byteLength; i++) {\r\n const byte = data[i];\r\n bufferDirty = bufferDirty || byte !== this._cpuBuffer[bufferIndex];\r\n this._cpuBuffer[bufferIndex++] = byte;\r\n }\r\n }\r\n\r\n // If the contents have changed, upload the new texture data to the GPU.\r\n if (bufferDirty) {\r\n this.uploadTexture();\r\n }\r\n }\r\n\r\n protected uploadTexture(): void {\r\n if (this._texture)\r\n this._texture.replaceTextureData(this._gpuBuffer);\r\n else\r\n this._texture = Texture2DHandle.createForData(this._isFloatTexture ? 1 : 4, this._numTotalRows, this._gpuBuffer, false, GL.Texture.WrapMode.ClampToEdge, GL.Texture.Format.Rgba);\r\n\r\n assert(this._texture!.height === this._numTotalRows);\r\n }\r\n\r\n protected allocateGpuBuffer(): Texture2DData {\r\n if (this._isFloatTexture)\r\n return new Float32Array(this._cpuBuffer.buffer);\r\n\r\n return this._cpuBuffer;\r\n }\r\n\r\n protected updateColor(rgb: RgbColor | undefined, rgba: FloatRgba): void {\r\n rgba.alpha = undefined !== rgb ? 1 : 0;\r\n if (rgb)\r\n rgba.setRgbColor(rgb);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ClipStack.js","sourceRoot":"","sources":["../../../../src/render/webgl/ClipStack.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 } from \"@itwin/core-bentley\";\r\nimport { ClipPlaneContainment, ClipVector, Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport { RgbColor } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { RenderClipVolume } from \"../RenderClipVolume\";\r\nimport { FloatRgba } from \"./FloatRGBA\";\r\nimport { Texture2DData, Texture2DHandle, TextureHandle } from \"./Texture\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\nimport { GL } from \"./GL\";\r\n\r\ninterface Clip {\r\n readonly numRows: number;\r\n readonly getData: (transform: Transform) => Uint8Array;\r\n}\r\n\r\nconst emptyClipData = new Uint8Array(0);\r\nconst emptyClip = {\r\n numRows: 0,\r\n getData: () => emptyClipData,\r\n};\r\n\r\nconst scratchRangeCorners = [\r\n new Point3d(), new Point3d(), new Point3d(), new Point3d(),\r\n new Point3d(), new Point3d(), new Point3d(), new Point3d(),\r\n];\r\n\r\nfunction getRangeCorners(r: Range3d): Point3d[] {\r\n return r.corners(scratchRangeCorners);\r\n}\r\n\r\n/** Maintains a stack of ClipVolumes. The volumes nest such that the stack represents the intersection of all the volumes.\r\n * The bottom of the stack represents the view's clip volume and is always present even if the view has no clip.\r\n * It also maintains the inside/outside clip colors, where the alpha component is 1 if the color should be applied and 0 if not.\r\n * @internal\r\n */\r\nexport class ClipStack {\r\n /** Encoded data for all clips on the stack, update when the stack or the transform changes. */\r\n protected _cpuBuffer: Uint8Array;\r\n /** A view of the encoded buffer in the format expected by the GPU. */\r\n protected _gpuBuffer: Texture2DData;\r\n protected _texture?: Texture2DHandle;\r\n /** The maximum number of rows we have ever required. Determines the texture height. Grows as needed, reallocating a larger texture, but never shrinks. */\r\n protected _numTotalRows: number;\r\n /** The number of rows in the texture actually required to encode the current contents of the stack. */\r\n protected _numRowsInUse: number;\r\n /** The first entry always represents the view clip. The rest are pushed and popped with GraphicBranches. */\r\n protected readonly _stack: Clip[] = [emptyClip];\r\n /** True if we need to recompute the texture. */\r\n protected _isStackDirty = false;\r\n /** Obtain the transform to be applied to the clips - i.e., the view matrix. */\r\n protected readonly _getTransform: () => Transform;\r\n /** If this returns false, the clip at the bottom of the stack is ignored. */\r\n protected readonly _wantViewClip: () => boolean;\r\n /** If alpha is 1 then geometry inside the clip will be drawn in this color. */\r\n protected readonly _insideColor = FloatRgba.from(0, 0, 0, 0);\r\n /** If alpha is 1 then geometry outside the clip will be drawn in this color. */\r\n protected readonly _outsideColor = FloatRgba.from(0, 0, 0, 0);\r\n /** For detecting whether the transform changed from one invocation of setViewClip to the next. */\r\n protected readonly _prevTransform = Transform.createZero();\r\n\r\n public constructor(getTransform: () => Transform, wantViewClip: () => boolean) {\r\n this._getTransform = getTransform;\r\n this._wantViewClip = wantViewClip;\r\n\r\n this._numTotalRows = this._numRowsInUse = 0;\r\n this._cpuBuffer = new Uint8Array(this._numTotalRows);\r\n this._gpuBuffer = this.allocateGpuBuffer();\r\n }\r\n\r\n public get insideColor(): FloatRgba {\r\n return this._insideColor;\r\n }\r\n\r\n public get outsideColor(): FloatRgba {\r\n return this._outsideColor;\r\n }\r\n\r\n public get hasOutsideColor(): boolean {\r\n return this.outsideColor.alpha !== 0;\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._texture ? this._texture.bytesUsed : 0;\r\n }\r\n\r\n public setViewClip(clip: ClipVector | undefined, style: { insideColor?: RgbColor, outsideColor?: RgbColor }): void {\r\n assert(this._stack.length === 1);\r\n\r\n this.updateColor(style.insideColor, this._insideColor);\r\n this.updateColor(style.outsideColor, this._outsideColor);\r\n\r\n const transform = this._getTransform();\r\n if (!transform.isAlmostEqual(this._prevTransform)) {\r\n transform.clone(this._prevTransform);\r\n this._isStackDirty = true;\r\n }\r\n\r\n const cur = this._stack[0];\r\n if (cur === emptyClip) {\r\n if (!clip)\r\n return; // no change.\r\n } else if (!clip) {\r\n this._stack[0] = emptyClip;\r\n this._numRowsInUse = 0;\r\n this._isStackDirty = true;\r\n return;\r\n } else {\r\n assert(cur instanceof ClipVolume);\r\n if (cur.clipVector === clip) {\r\n // We assume that the active view's ClipVector is never mutated in place, so if we are given the same ClipVector, we expect our RenderClipVolume to match it.\r\n return;\r\n }\r\n }\r\n\r\n // ClipVector has changed.\r\n const newClip = IModelApp.renderSystem.createClipVolume(clip);\r\n if (!newClip) {\r\n this._isStackDirty = this._stack[0] !== emptyClip;\r\n this._stack[0] = emptyClip;\r\n this._numRowsInUse = 0;\r\n } else {\r\n this.pop();\r\n this.push(newClip);\r\n }\r\n }\r\n\r\n public push(clip: RenderClipVolume): void {\r\n assert(clip instanceof ClipVolume);\r\n\r\n this._stack.push(clip);\r\n this._numRowsInUse += clip.numRows;\r\n this._numTotalRows = Math.max(this._numRowsInUse, this._numTotalRows);\r\n this._isStackDirty = true;\r\n }\r\n\r\n public pop(): void {\r\n assert(this._stack.length > 0);\r\n const clip = this._stack.pop();\r\n this._numRowsInUse -= (clip ? clip.numRows : 0);\r\n }\r\n\r\n public get hasClip(): boolean {\r\n return this.startIndex < this.endIndex;\r\n }\r\n\r\n public get hasViewClip(): boolean {\r\n return emptyClip !== this._stack[0] && this._wantViewClip();\r\n }\r\n\r\n public get startIndex(): number {\r\n assert(this._stack.length > 0);\r\n return this._wantViewClip() ? 0 : this._stack[0].numRows;\r\n }\r\n\r\n public get endIndex(): number {\r\n return this._numRowsInUse;\r\n }\r\n\r\n public get textureHeight(): number {\r\n return this._numTotalRows;\r\n }\r\n\r\n public get texture(): TextureHandle | undefined {\r\n this.updateTexture();\r\n return this._texture;\r\n }\r\n\r\n public isRangeClipped(range: Range3d, transform: Transform): boolean {\r\n if (this.hasOutsideColor || !this.hasClip)\r\n return false;\r\n\r\n range = transform.multiplyRange(range, range);\r\n const corners = getRangeCorners(range);\r\n const startIndex = this._wantViewClip() && emptyClip !== this._stack[0] ? 0 : 1;\r\n for (let i = startIndex; i < this._stack.length; i++) {\r\n const clip = this._stack[i];\r\n assert(clip instanceof ClipVolume);\r\n if (ClipPlaneContainment.StronglyOutside === clip.clipVector.classifyPointContainment(corners))\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public get clips(): ReadonlyArray<{ numRows: number }> {\r\n return this._stack;\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public static get emptyViewClip() {\r\n return emptyClip;\r\n }\r\n\r\n protected updateTexture(): void {\r\n if (this._numTotalRows > 0 && (!this._texture || this._texture.height < this._numTotalRows)) {\r\n // We need to resize the texture.\r\n assert(this._isStackDirty);\r\n this._isStackDirty = true;\r\n this._texture = dispose(this._texture);\r\n this._cpuBuffer = new Uint8Array(this._numTotalRows * 4 * 4);\r\n this._gpuBuffer = this.allocateGpuBuffer();\r\n }\r\n\r\n if (this._isStackDirty) {\r\n this._isStackDirty = false;\r\n this.recomputeTexture();\r\n }\r\n }\r\n\r\n protected recomputeTexture(): void {\r\n // Copy each clip's data to the buffer, recording whether the buffer's contents actually changed.\r\n let bufferDirty = false;\r\n const transform = this._getTransform();\r\n let bufferIndex = 0;\r\n for (const clip of this._stack) {\r\n const data = clip.getData(transform);\r\n for (let i = 0; i < data.byteLength; i++) {\r\n const byte = data[i];\r\n bufferDirty = bufferDirty || byte !== this._cpuBuffer[bufferIndex];\r\n this._cpuBuffer[bufferIndex++] = byte;\r\n }\r\n }\r\n\r\n // If the contents have changed, upload the new texture data to the GPU.\r\n if (bufferDirty) {\r\n this.uploadTexture();\r\n }\r\n }\r\n\r\n protected uploadTexture(): void {\r\n if (this._texture)\r\n this._texture.replaceTextureData(this._gpuBuffer);\r\n else\r\n this._texture = Texture2DHandle.createForData(1, this._numTotalRows, this._gpuBuffer, false, GL.Texture.WrapMode.ClampToEdge, GL.Texture.Format.Rgba);\r\n\r\n assert(this._texture!.height === this._numTotalRows);\r\n }\r\n\r\n protected allocateGpuBuffer(): Texture2DData {\r\n return new Float32Array(this._cpuBuffer.buffer);\r\n }\r\n\r\n protected updateColor(rgb: RgbColor | undefined, rgba: FloatRgba): void {\r\n rgba.alpha = undefined !== rgb ? 1 : 0;\r\n if (rgb)\r\n rgba.setRgbColor(rgb);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ClipVolume.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ClipVolume.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EACL,UAAU,EAAW,SAAS,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAwJvD;;GAEG;AACH,qBAAa,UAAW,SAAQ,gBAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAE3C,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IAEM,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU;WAInC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS;IAmC9D,OAAO;CAIR"}
1
+ {"version":3,"file":"ClipVolume.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ClipVolume.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EACL,UAAU,EAAW,SAAS,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAoJvD;;GAEG;AACH,qBAAa,UAAW,SAAQ,gBAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAE3C,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IAEM,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU;WAInC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS;IAmC9D,OAAO;CAIR"}
@@ -11,7 +11,6 @@ exports.ClipVolume = void 0;
11
11
  const core_bentley_1 = require("@itwin/core-bentley");
12
12
  const core_geometry_1 = require("@itwin/core-geometry");
13
13
  const RenderClipVolume_1 = require("../RenderClipVolume");
14
- const System_1 = require("./System");
15
14
  const scratch = {
16
15
  normal: new core_geometry_1.Vector3d(),
17
16
  dir: new core_geometry_1.Vector3d(),
@@ -32,10 +31,7 @@ class ClipPlanesBuffer {
32
31
  this._view = new DataView(this._data.buffer);
33
32
  this._clips = clips;
34
33
  this.numRows = numRows;
35
- if (System_1.System.instance.capabilities.supportsTextureFloat)
36
- this._append = (value) => this.appendFloat(value);
37
- else
38
- this._append = (value) => this.appendEncodedFloat(value);
34
+ this._append = (value) => this.appendFloat(value);
39
35
  }
40
36
  getData(viewMatrix) {
41
37
  if (!viewMatrix.isAlmostEqual(this._viewMatrix))
@@ -1 +1 @@
1
- {"version":3,"file":"ClipVolume.js","sourceRoot":"","sources":["../../../../src/render/webgl/ClipVolume.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 {\r\n ClipVector, Point3d, Transform, UnionOfConvexClipPlaneSets, Vector3d,\r\n} from \"@itwin/core-geometry\";\r\nimport { RenderClipVolume } from \"../RenderClipVolume\";\r\nimport { System } from \"./System\";\r\n\r\nconst scratch = {\r\n normal: new Vector3d(),\r\n dir: new Vector3d(),\r\n pos: new Point3d(),\r\n v0: new Vector3d(),\r\n};\r\n\r\n/** Maintains an ArrayBuffer to serve as texture data for a ClipVector.\r\n * The clip planes are in view coordinates, so the data must be updated whenever the view\r\n * matrix changes.\r\n */\r\nclass ClipPlanesBuffer {\r\n /** Most recently-applied view matrix. */\r\n private readonly _viewMatrix = Transform.createZero();\r\n /** For writing to the ArrayBuffer. */\r\n private readonly _view: DataView;\r\n /** For inspecting the data in the ArrayBuffer. */\r\n private readonly _data: Uint8Array;\r\n /** The current write position. */\r\n private _curPos = 0;\r\n private readonly _clips: UnionOfConvexClipPlaneSets[];\r\n private readonly _append: (value: number) => void;\r\n /** The number of rows of data. Each row corresponds to a clipping plane, or to mark a boundary between two ClipPlaneSets or UnionOfConvexClipPlaneSets.\r\n * The final row is *always* a union boundary, to enable multiple clips to be concatenated - this is how nested clip volumes work.\r\n */\r\n public readonly numRows: number;\r\n\r\n public getData(viewMatrix: Transform): Uint8Array {\r\n if (!viewMatrix.isAlmostEqual(this._viewMatrix))\r\n this.updateData(viewMatrix);\r\n\r\n return this._data;\r\n }\r\n\r\n public get byteLength(): number {\r\n return this._view.buffer.byteLength;\r\n }\r\n\r\n public static create(clips: UnionOfConvexClipPlaneSets[], numRows: number): ClipPlanesBuffer {\r\n assert(numRows > 1); // at least one plane, plus a union boundary.\r\n return new ClipPlanesBuffer(clips, numRows);\r\n }\r\n\r\n private constructor(clips: UnionOfConvexClipPlaneSets[], numRows: number) {\r\n this._data = new Uint8Array(numRows * 4 * 4);\r\n this._view = new DataView(this._data.buffer);\r\n this._clips = clips;\r\n this.numRows = numRows;\r\n\r\n if (System.instance.capabilities.supportsTextureFloat)\r\n this._append = (value: number) => this.appendFloat(value);\r\n else\r\n this._append = (value: number) => this.appendEncodedFloat(value);\r\n }\r\n\r\n private appendFloat(value: number): void {\r\n this._view.setFloat32(this._curPos, value, true);\r\n this.advance(4);\r\n }\r\n\r\n private appendUint8(value: number): void {\r\n this._view.setUint8(this._curPos, value);\r\n this.advance(1);\r\n }\r\n\r\n private appendValues(a: number, b: number, c: number, d: number): void {\r\n this._append(a);\r\n this._append(b);\r\n this._append(c);\r\n this._append(d);\r\n }\r\n\r\n private appendPlane(normal: Vector3d, distance: number): void {\r\n this.appendValues(normal.x, normal.y, normal.z, distance);\r\n }\r\n\r\n private appendSetBoundary(): void {\r\n this.appendValues(0, 0, 0, 0);\r\n }\r\n\r\n private appendUnionBoundary(): void {\r\n this.appendValues(2, 2, 2, 0);\r\n }\r\n\r\n private appendEncodedFloat(value: number) {\r\n const sign = value < 0 ? 1 : 0;\r\n value = Math.abs(value);\r\n const exponent = Math.floor(Math.log10(value)) + 1;\r\n value = value / Math.pow(10, exponent);\r\n\r\n const bias = 38;\r\n let temp = value * 256;\r\n const b0 = Math.floor(temp);\r\n temp = (temp - b0) * 256;\r\n const b1 = Math.floor(temp);\r\n temp = (temp - b1) * 256;\r\n const b2 = Math.floor(temp);\r\n const b3 = (exponent + bias) * 2 + sign;\r\n\r\n this.appendUint8(b0);\r\n this.appendUint8(b1);\r\n this.appendUint8(b2);\r\n this.appendUint8(b3);\r\n }\r\n\r\n private advance(numBytes: number): void {\r\n this._curPos += numBytes;\r\n }\r\n\r\n private reset(): void {\r\n this._curPos = 0;\r\n }\r\n\r\n private updateData(transform: Transform): void {\r\n this.reset();\r\n transform.clone(this._viewMatrix);\r\n\r\n const { normal, dir, pos, v0 } = { ...scratch };\r\n for (const clip of this._clips) {\r\n for (let j = 0; j < clip.convexSets.length; j++) {\r\n const set = clip.convexSets[j];\r\n if (0 === set.planes.length)\r\n continue;\r\n\r\n if (j > 0)\r\n this.appendSetBoundary();\r\n\r\n for (const plane of set.planes) {\r\n plane.inwardNormalRef.clone(normal);\r\n let distance = plane.distance;\r\n\r\n const norm = normal;\r\n transform.matrix.multiplyVector(norm, dir);\r\n dir.normalizeInPlace();\r\n\r\n transform.multiplyPoint3d(norm.scale(distance, v0), pos);\r\n v0.setFromPoint3d(pos);\r\n\r\n normal.set(dir.x, dir.y, dir.z);\r\n distance = -v0.dotProduct(dir);\r\n this.appendPlane(normal, distance);\r\n }\r\n }\r\n\r\n this.appendUnionBoundary();\r\n }\r\n }\r\n}\r\n\r\n/** A ClipVector encoded for transmission to the GPU as a texture.\r\n * @internal\r\n */\r\nexport class ClipVolume extends RenderClipVolume {\r\n private readonly _buffer: ClipPlanesBuffer;\r\n\r\n public get numRows(): number {\r\n return this._buffer.numRows;\r\n }\r\n\r\n public get byteLength(): number {\r\n return this._buffer.byteLength;\r\n }\r\n\r\n public getData(viewMatrix: Transform): Uint8Array {\r\n return this._buffer.getData(viewMatrix);\r\n }\r\n\r\n public static create(clip: ClipVector): ClipVolume | undefined {\r\n if (!clip.isValid)\r\n return undefined;\r\n\r\n // Compute how many rows of data we need.\r\n const unions = [];\r\n let numRows = 0;\r\n for (const primitive of clip.clips) {\r\n const union = primitive.fetchClipPlanesRef();\r\n if (!union)\r\n continue;\r\n\r\n let numSets = 0;\r\n for (const set of union.convexSets) {\r\n const setLength = set.planes.length;\r\n if (setLength > 0) {\r\n ++numSets;\r\n numRows += setLength;\r\n }\r\n }\r\n\r\n if (numSets > 0) {\r\n unions.push(union);\r\n numRows += numSets - 1; // Additional boundary rows between sets.\r\n }\r\n }\r\n\r\n if (unions.length === 0)\r\n return undefined;\r\n\r\n numRows += unions.length; // Additional boundary row after each union - *including* the last union.\r\n const buffer = ClipPlanesBuffer.create(unions, numRows);\r\n return new ClipVolume(clip, buffer);\r\n }\r\n\r\n private constructor(clip: ClipVector, buffer: ClipPlanesBuffer) {\r\n super(clip);\r\n this._buffer = buffer;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ClipVolume.js","sourceRoot":"","sources":["../../../../src/render/webgl/ClipVolume.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6C;AAC7C,wDAE8B;AAC9B,0DAAuD;AAEvD,MAAM,OAAO,GAAG;IACd,MAAM,EAAE,IAAI,wBAAQ,EAAE;IACtB,GAAG,EAAE,IAAI,wBAAQ,EAAE;IACnB,GAAG,EAAE,IAAI,uBAAO,EAAE;IAClB,EAAE,EAAE,IAAI,wBAAQ,EAAE;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,gBAAgB;IAgCpB,YAAoB,KAAmC,EAAE,OAAe;QA/BxE,yCAAyC;QACxB,gBAAW,GAAG,yBAAS,CAAC,UAAU,EAAE,CAAC;QAKtD,kCAAkC;QAC1B,YAAO,GAAG,CAAC,CAAC;QAyBlB,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAvBM,OAAO,CAAC,UAAqB;QAClC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAmC,EAAE,OAAe;QACvE,IAAA,qBAAM,EAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,6CAA6C;QAClE,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAWO,WAAW,CAAC,KAAa;QAC/B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAEO,YAAY,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC7D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAEO,WAAW,CAAC,MAAgB,EAAE,QAAgB;QACpD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;IAEO,kBAAkB,CAAC,KAAa;QACtC,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAI,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAEO,OAAO,CAAC,QAAgB;QAC9B,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;IAC3B,CAAC;IAEO,KAAK;QACX,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAEO,UAAU,CAAC,SAAoB;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAElC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM;oBACzB,SAAS;gBAEX,IAAI,CAAC,GAAG,CAAC;oBACP,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAE3B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;oBAC9B,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACpC,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;oBAE9B,MAAM,IAAI,GAAG,MAAM,CAAC;oBACpB,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC3C,GAAG,CAAC,gBAAgB,EAAE,CAAC;oBAEvB,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;oBACzD,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;oBAEvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;oBAChC,QAAQ,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;iBACpC;aACF;YAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAa,UAAW,SAAQ,mCAAgB;IAkD9C,YAAoB,IAAgB,EAAE,MAAwB;QAC5D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAlDD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACjC,CAAC;IAEM,OAAO,CAAC,UAAqB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAgB;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO;YACf,OAAO,SAAS,CAAC;QAEnB,yCAAyC;QACzC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;YAClC,MAAM,KAAK,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK;gBACR,SAAS;YAEX,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;gBAClC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;gBACpC,IAAI,SAAS,GAAG,CAAC,EAAE;oBACjB,EAAE,OAAO,CAAC;oBACV,OAAO,IAAI,SAAS,CAAC;iBACtB;aACF;YAED,IAAI,OAAO,GAAG,CAAC,EAAE;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,yCAAyC;aAClE;SACF;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,SAAS,CAAC;QAEnB,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,yEAAyE;QACnG,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;CAMF;AAtDD,gCAsDC","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 {\r\n ClipVector, Point3d, Transform, UnionOfConvexClipPlaneSets, Vector3d,\r\n} from \"@itwin/core-geometry\";\r\nimport { RenderClipVolume } from \"../RenderClipVolume\";\r\n\r\nconst scratch = {\r\n normal: new Vector3d(),\r\n dir: new Vector3d(),\r\n pos: new Point3d(),\r\n v0: new Vector3d(),\r\n};\r\n\r\n/** Maintains an ArrayBuffer to serve as texture data for a ClipVector.\r\n * The clip planes are in view coordinates, so the data must be updated whenever the view\r\n * matrix changes.\r\n */\r\nclass ClipPlanesBuffer {\r\n /** Most recently-applied view matrix. */\r\n private readonly _viewMatrix = Transform.createZero();\r\n /** For writing to the ArrayBuffer. */\r\n private readonly _view: DataView;\r\n /** For inspecting the data in the ArrayBuffer. */\r\n private readonly _data: Uint8Array;\r\n /** The current write position. */\r\n private _curPos = 0;\r\n private readonly _clips: UnionOfConvexClipPlaneSets[];\r\n private readonly _append: (value: number) => void;\r\n /** The number of rows of data. Each row corresponds to a clipping plane, or to mark a boundary between two ClipPlaneSets or UnionOfConvexClipPlaneSets.\r\n * The final row is *always* a union boundary, to enable multiple clips to be concatenated - this is how nested clip volumes work.\r\n */\r\n public readonly numRows: number;\r\n\r\n public getData(viewMatrix: Transform): Uint8Array {\r\n if (!viewMatrix.isAlmostEqual(this._viewMatrix))\r\n this.updateData(viewMatrix);\r\n\r\n return this._data;\r\n }\r\n\r\n public get byteLength(): number {\r\n return this._view.buffer.byteLength;\r\n }\r\n\r\n public static create(clips: UnionOfConvexClipPlaneSets[], numRows: number): ClipPlanesBuffer {\r\n assert(numRows > 1); // at least one plane, plus a union boundary.\r\n return new ClipPlanesBuffer(clips, numRows);\r\n }\r\n\r\n private constructor(clips: UnionOfConvexClipPlaneSets[], numRows: number) {\r\n this._data = new Uint8Array(numRows * 4 * 4);\r\n this._view = new DataView(this._data.buffer);\r\n this._clips = clips;\r\n this.numRows = numRows;\r\n\r\n this._append = (value: number) => this.appendFloat(value);\r\n }\r\n\r\n private appendFloat(value: number): void {\r\n this._view.setFloat32(this._curPos, value, true);\r\n this.advance(4);\r\n }\r\n\r\n private appendUint8(value: number): void {\r\n this._view.setUint8(this._curPos, value);\r\n this.advance(1);\r\n }\r\n\r\n private appendValues(a: number, b: number, c: number, d: number): void {\r\n this._append(a);\r\n this._append(b);\r\n this._append(c);\r\n this._append(d);\r\n }\r\n\r\n private appendPlane(normal: Vector3d, distance: number): void {\r\n this.appendValues(normal.x, normal.y, normal.z, distance);\r\n }\r\n\r\n private appendSetBoundary(): void {\r\n this.appendValues(0, 0, 0, 0);\r\n }\r\n\r\n private appendUnionBoundary(): void {\r\n this.appendValues(2, 2, 2, 0);\r\n }\r\n\r\n private appendEncodedFloat(value: number) {\r\n const sign = value < 0 ? 1 : 0;\r\n value = Math.abs(value);\r\n const exponent = Math.floor(Math.log10(value)) + 1;\r\n value = value / Math.pow(10, exponent);\r\n\r\n const bias = 38;\r\n let temp = value * 256;\r\n const b0 = Math.floor(temp);\r\n temp = (temp - b0) * 256;\r\n const b1 = Math.floor(temp);\r\n temp = (temp - b1) * 256;\r\n const b2 = Math.floor(temp);\r\n const b3 = (exponent + bias) * 2 + sign;\r\n\r\n this.appendUint8(b0);\r\n this.appendUint8(b1);\r\n this.appendUint8(b2);\r\n this.appendUint8(b3);\r\n }\r\n\r\n private advance(numBytes: number): void {\r\n this._curPos += numBytes;\r\n }\r\n\r\n private reset(): void {\r\n this._curPos = 0;\r\n }\r\n\r\n private updateData(transform: Transform): void {\r\n this.reset();\r\n transform.clone(this._viewMatrix);\r\n\r\n const { normal, dir, pos, v0 } = { ...scratch };\r\n for (const clip of this._clips) {\r\n for (let j = 0; j < clip.convexSets.length; j++) {\r\n const set = clip.convexSets[j];\r\n if (0 === set.planes.length)\r\n continue;\r\n\r\n if (j > 0)\r\n this.appendSetBoundary();\r\n\r\n for (const plane of set.planes) {\r\n plane.inwardNormalRef.clone(normal);\r\n let distance = plane.distance;\r\n\r\n const norm = normal;\r\n transform.matrix.multiplyVector(norm, dir);\r\n dir.normalizeInPlace();\r\n\r\n transform.multiplyPoint3d(norm.scale(distance, v0), pos);\r\n v0.setFromPoint3d(pos);\r\n\r\n normal.set(dir.x, dir.y, dir.z);\r\n distance = -v0.dotProduct(dir);\r\n this.appendPlane(normal, distance);\r\n }\r\n }\r\n\r\n this.appendUnionBoundary();\r\n }\r\n }\r\n}\r\n\r\n/** A ClipVector encoded for transmission to the GPU as a texture.\r\n * @internal\r\n */\r\nexport class ClipVolume extends RenderClipVolume {\r\n private readonly _buffer: ClipPlanesBuffer;\r\n\r\n public get numRows(): number {\r\n return this._buffer.numRows;\r\n }\r\n\r\n public get byteLength(): number {\r\n return this._buffer.byteLength;\r\n }\r\n\r\n public getData(viewMatrix: Transform): Uint8Array {\r\n return this._buffer.getData(viewMatrix);\r\n }\r\n\r\n public static create(clip: ClipVector): ClipVolume | undefined {\r\n if (!clip.isValid)\r\n return undefined;\r\n\r\n // Compute how many rows of data we need.\r\n const unions = [];\r\n let numRows = 0;\r\n for (const primitive of clip.clips) {\r\n const union = primitive.fetchClipPlanesRef();\r\n if (!union)\r\n continue;\r\n\r\n let numSets = 0;\r\n for (const set of union.convexSets) {\r\n const setLength = set.planes.length;\r\n if (setLength > 0) {\r\n ++numSets;\r\n numRows += setLength;\r\n }\r\n }\r\n\r\n if (numSets > 0) {\r\n unions.push(union);\r\n numRows += numSets - 1; // Additional boundary rows between sets.\r\n }\r\n }\r\n\r\n if (unions.length === 0)\r\n return undefined;\r\n\r\n numRows += unions.length; // Additional boundary row after each union - *including* the last union.\r\n const buffer = ClipPlanesBuffer.create(unions, numRows);\r\n return new ClipVolume(clip, buffer);\r\n }\r\n\r\n private constructor(clip: ClipVector, buffer: ClipPlanesBuffer) {\r\n super(clip);\r\n this._buffer = buffer;\r\n }\r\n}\r\n"]}
@@ -4,10 +4,11 @@
4
4
  import { ProgramBuilder } from "./ShaderBuilder";
5
5
  import { ShaderProgram } from "./ShaderProgram";
6
6
  /** @internal */
7
- export declare abstract class ClippingProgram {
7
+ export declare class ClippingProgram {
8
8
  protected _program?: ShaderProgram;
9
- abstract getProgram(numPlanes: number): ShaderProgram | undefined;
10
9
  compile(): boolean;
10
+ constructor(src: ProgramBuilder);
11
+ getProgram(numPlanes: number): ShaderProgram | undefined;
11
12
  dispose(): void;
12
13
  }
13
14
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"ClippingProgram.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ClippingProgram.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAiB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAY/D,gBAAgB;AAChB,8BAAsB,eAAe;IACnC,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;aAEnB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IACjE,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,IAAI;CAGvB;AA2CD,gBAAgB;AAChB,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CAE9E"}
1
+ {"version":3,"file":"ClippingProgram.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ClippingProgram.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAiB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAY/D,gBAAgB;AAChB,qBAAa,eAAe;IAC1B,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAE5B,OAAO,IAAI,OAAO;gBAIN,GAAG,EAAE,cAAc;IAK/B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIxD,OAAO,IAAI,IAAI;CAGvB;AAED,gBAAgB;AAChB,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CAE9E"}
@@ -11,60 +11,33 @@ exports.createClippingProgram = exports.ClippingProgram = void 0;
11
11
  const core_bentley_1 = require("@itwin/core-bentley");
12
12
  const System_1 = require("./System");
13
13
  const Clipping_1 = require("./glsl/Clipping");
14
- function createClippingBuilder(src, isWebGL2) {
14
+ function createClippingBuilder(src) {
15
15
  const builder = src.clone();
16
16
  builder.vert.headerComment += "-Clip";
17
17
  builder.frag.headerComment += "-Clip";
18
- (0, Clipping_1.addClipping)(builder, isWebGL2);
18
+ (0, Clipping_1.addClipping)(builder);
19
19
  return builder;
20
20
  }
21
21
  /** @internal */
22
22
  class ClippingProgram {
23
+ constructor(src) {
24
+ const builder = createClippingBuilder(src);
25
+ this._program = builder.buildProgram(System_1.System.instance.context);
26
+ }
23
27
  compile() {
24
28
  return undefined === this._program || 0 /* Success */ === this._program.compile();
25
29
  }
30
+ getProgram(numPlanes) {
31
+ return numPlanes > 0 ? this._program : undefined;
32
+ }
26
33
  dispose() {
27
34
  this._program = (0, core_bentley_1.dispose)(this._program);
28
35
  }
29
36
  }
30
37
  exports.ClippingProgram = ClippingProgram;
31
- /** WebGL 1 requires that the loop variable be a compile-time constant. If caller requests a number of planes greater than the maximum our current program
32
- * supports, recompile the program with sufficient maximum number of planes.
33
- */
34
- class WebGL1ClippingProgram extends ClippingProgram {
35
- constructor(src) {
36
- super();
37
- this._maxClippingPlanes = 0;
38
- this._builder = createClippingBuilder(src, false);
39
- }
40
- getProgram(numPlanes) {
41
- var _a;
42
- if (numPlanes <= 0)
43
- return undefined;
44
- if (!this._program || this._maxClippingPlanes < numPlanes) {
45
- (_a = this._program) === null || _a === void 0 ? void 0 : _a.endUse();
46
- this.dispose();
47
- this._builder.frag.addDefine("MAX_CLIPPING_PLANES", numPlanes.toString());
48
- this._program = this._builder.buildProgram(System_1.System.instance.context);
49
- this._maxClippingPlanes = numPlanes;
50
- }
51
- return this._program;
52
- }
53
- }
54
- /** WebGL 2 permits looping on a uniform. */
55
- class WebGL2ClippingProgram extends ClippingProgram {
56
- constructor(src) {
57
- super();
58
- const builder = createClippingBuilder(src, true);
59
- this._program = builder.buildProgram(System_1.System.instance.context);
60
- }
61
- getProgram(numPlanes) {
62
- return numPlanes > 0 ? this._program : undefined;
63
- }
64
- }
65
38
  /** @internal */
66
39
  function createClippingProgram(builder) {
67
- return System_1.System.instance.isWebGL2 ? new WebGL2ClippingProgram(builder) : new WebGL1ClippingProgram(builder);
40
+ return new ClippingProgram(builder);
68
41
  }
69
42
  exports.createClippingProgram = createClippingProgram;
70
43
  //# sourceMappingURL=ClippingProgram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClippingProgram.js","sourceRoot":"","sources":["../../../../src/render/webgl/ClippingProgram.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA8C;AAG9C,qCAAkC;AAClC,8CAA8C;AAE9C,SAAS,qBAAqB,CAAC,GAAmB,EAAE,QAAiB;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC;IACtC,IAAA,sBAAW,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,MAAsB,eAAe;IAI5B,OAAO;QACZ,OAAO,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,oBAA0B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1F,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF;AAXD,0CAWC;AAED;;GAEG;AACH,MAAM,qBAAsB,SAAQ,eAAe;IAIjD,YAAmB,GAAmB;QACpC,KAAK,EAAE,CAAC;QAHF,uBAAkB,GAAG,CAAC,CAAC;QAI7B,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEM,UAAU,CAAC,SAAiB;;QACjC,IAAI,SAAS,IAAI,CAAC;YAChB,OAAO,SAAS,CAAC;QAEnB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,GAAG,SAAS,EAAE;YACzD,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;SACrC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAED,4CAA4C;AAC5C,MAAM,qBAAsB,SAAQ,eAAe;IACjD,YAAmB,GAAmB;QACpC,KAAK,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAEM,UAAU,CAAC,SAAiB;QACjC,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;CACF;AAED,gBAAgB;AAChB,SAAgB,qBAAqB,CAAC,OAAuB;IAC3D,OAAO,eAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC5G,CAAC;AAFD,sDAEC","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 { dispose } from \"@itwin/core-bentley\";\r\nimport { ProgramBuilder } from \"./ShaderBuilder\";\r\nimport { CompileStatus, ShaderProgram } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { addClipping } from \"./glsl/Clipping\";\r\n\r\nfunction createClippingBuilder(src: ProgramBuilder, isWebGL2: boolean): ProgramBuilder {\r\n const builder = src.clone();\r\n builder.vert.headerComment += \"-Clip\";\r\n builder.frag.headerComment += \"-Clip\";\r\n addClipping(builder, isWebGL2);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport abstract class ClippingProgram {\r\n protected _program?: ShaderProgram;\r\n\r\n public abstract getProgram(numPlanes: number): ShaderProgram | undefined;\r\n public compile(): boolean {\r\n return undefined === this._program || CompileStatus.Success === this._program.compile();\r\n }\r\n\r\n public dispose(): void {\r\n this._program = dispose(this._program);\r\n }\r\n}\r\n\r\n/** WebGL 1 requires that the loop variable be a compile-time constant. If caller requests a number of planes greater than the maximum our current program\r\n * supports, recompile the program with sufficient maximum number of planes.\r\n */\r\nclass WebGL1ClippingProgram extends ClippingProgram {\r\n private _builder: ProgramBuilder;\r\n private _maxClippingPlanes = 0;\r\n\r\n public constructor(src: ProgramBuilder) {\r\n super();\r\n this._builder = createClippingBuilder(src, false);\r\n }\r\n\r\n public getProgram(numPlanes: number): ShaderProgram | undefined {\r\n if (numPlanes <= 0)\r\n return undefined;\r\n\r\n if (!this._program || this._maxClippingPlanes < numPlanes) {\r\n this._program?.endUse();\r\n this.dispose();\r\n this._builder.frag.addDefine(\"MAX_CLIPPING_PLANES\", numPlanes.toString());\r\n this._program = this._builder.buildProgram(System.instance.context);\r\n this._maxClippingPlanes = numPlanes;\r\n }\r\n\r\n return this._program;\r\n }\r\n}\r\n\r\n/** WebGL 2 permits looping on a uniform. */\r\nclass WebGL2ClippingProgram extends ClippingProgram {\r\n public constructor(src: ProgramBuilder) {\r\n super();\r\n const builder = createClippingBuilder(src, true);\r\n this._program = builder.buildProgram(System.instance.context);\r\n }\r\n\r\n public getProgram(numPlanes: number): ShaderProgram | undefined {\r\n return numPlanes > 0 ? this._program : undefined;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createClippingProgram(builder: ProgramBuilder): ClippingProgram {\r\n return System.instance.isWebGL2 ? new WebGL2ClippingProgram(builder) : new WebGL1ClippingProgram(builder);\r\n}\r\n"]}
1
+ {"version":3,"file":"ClippingProgram.js","sourceRoot":"","sources":["../../../../src/render/webgl/ClippingProgram.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA8C;AAG9C,qCAAkC;AAClC,8CAA8C;AAE9C,SAAS,qBAAqB,CAAC,GAAmB;IAChD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC;IACtC,IAAA,sBAAW,EAAC,OAAO,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,MAAa,eAAe;IAO1B,YAAmB,GAAmB;QACpC,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAPM,OAAO;QACZ,OAAO,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,oBAA0B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1F,CAAC;IAOM,UAAU,CAAC,SAAiB;QACjC,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF;AAnBD,0CAmBC;AAED,gBAAgB;AAChB,SAAgB,qBAAqB,CAAC,OAAuB;IAC3D,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAFD,sDAEC","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 { dispose } from \"@itwin/core-bentley\";\r\nimport { ProgramBuilder } from \"./ShaderBuilder\";\r\nimport { CompileStatus, ShaderProgram } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { addClipping } from \"./glsl/Clipping\";\r\n\r\nfunction createClippingBuilder(src: ProgramBuilder): ProgramBuilder {\r\n const builder = src.clone();\r\n builder.vert.headerComment += \"-Clip\";\r\n builder.frag.headerComment += \"-Clip\";\r\n addClipping(builder);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport class ClippingProgram {\r\n protected _program?: ShaderProgram;\r\n\r\n public compile(): boolean {\r\n return undefined === this._program || CompileStatus.Success === this._program.compile();\r\n }\r\n\r\n public constructor(src: ProgramBuilder) {\r\n const builder = createClippingBuilder(src);\r\n this._program = builder.buildProgram(System.instance.context);\r\n }\r\n\r\n public getProgram(numPlanes: number): ShaderProgram | undefined {\r\n return numPlanes > 0 ? this._program : undefined;\r\n }\r\n\r\n public dispose(): void {\r\n this._program = dispose(this._program);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createClippingProgram(builder: ProgramBuilder): ClippingProgram {\r\n return new ClippingProgram(builder);\r\n}\r\n"]}
@@ -21,7 +21,7 @@ export declare class ShaderProgramParams {
21
21
  bindProjectionMatrix(uniform: UniformHandle): void;
22
22
  get isViewCoords(): boolean;
23
23
  get isOverlayPass(): boolean;
24
- get context(): import("@itwin/webgl-compatibility").WebGLContext;
24
+ get context(): WebGL2RenderingContext;
25
25
  init(target: Target, pass?: RenderPass): void;
26
26
  }
27
27
  /** @internal */
@@ -35,7 +35,7 @@ export declare class DrawParams {
35
35
  get projectionMatrix(): import("./Matrix").Matrix4;
36
36
  get isViewCoords(): boolean;
37
37
  get isOverlayPass(): boolean;
38
- get context(): import("@itwin/webgl-compatibility").WebGLContext;
38
+ get context(): WebGL2RenderingContext;
39
39
  init(programParams: ShaderProgramParams, geometry: CachedGeometry): void;
40
40
  }
41
41
  /** Defines operation associated with pushing or popping a branch
@@ -1 +1 @@
1
- {"version":3,"file":"DrawCommand.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/DrawCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DrawCommand.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/DrawCommand.ts"],"names":[],"mappings":"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"}
@@ -174,7 +174,7 @@ class PrimitiveCommand {
174
174
  // Point clouds do not support hillshade or slope mode for thematic display.
175
175
  if (isThematic && (undefined !== this.primitive.cachedGeometry.asPointCloud) && (target.uniforms.thematic.wantSlopeMode || target.uniforms.thematic.wantHillShadeMode))
176
176
  isThematic = 0 /* No */;
177
- const wiremesh = target.currentViewFlags.wiremesh && System_1.System.instance.isWebGL2 && (techniqueId === 0 /* Surface */ || techniqueId === 7 /* RealityMesh */);
177
+ const wiremesh = target.currentViewFlags.wiremesh && (techniqueId === 0 /* Surface */ || techniqueId === 7 /* RealityMesh */);
178
178
  const isWiremesh = wiremesh ? 1 /* Yes */ : 0 /* No */;
179
179
  const flags = PrimitiveCommand._scratchTechniqueFlags;
180
180
  const posType = this.primitive.cachedGeometry.usesQuantizedPositions ? "quantized" : "unquantized";
@@ -1 +1 @@
1
- {"version":3,"file":"DrawCommand.js","sourceRoot":"","sources":["../../../../src/render/webgl/DrawCommand.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, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport { CachedGeometry } from \"./CachedGeometry\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\nimport { isFeatureHilited } from \"./FeatureOverrides\";\r\nimport { Batch, Branch } from \"./Graphic\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { Pass, RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { Hilites, Target } from \"./Target\";\r\nimport { IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, IsWiremesh, TechniqueFlags } from \"./TechniqueFlags\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport class ShaderProgramParams {\r\n private _target?: Target;\r\n private _renderPass: RenderPass = RenderPass.None;\r\n\r\n public get target(): Target {\r\n assert(undefined !== this._target);\r\n return this._target;\r\n }\r\n\r\n public get renderPass() { return this._renderPass; }\r\n\r\n public get projectionMatrix() { return this.target.uniforms.getProjectionMatrix32(this.isViewCoords); }\r\n public bindProjectionMatrix(uniform: UniformHandle) { this.target.uniforms.bindProjectionMatrix(uniform, this.isViewCoords); }\r\n\r\n public get isViewCoords() { return RenderPass.ViewOverlay === this.renderPass || RenderPass.Background === this.renderPass; }\r\n public get isOverlayPass() { return RenderPass.WorldOverlay === this.renderPass || RenderPass.ViewOverlay === this.renderPass; }\r\n public get context() { return System.instance.context; }\r\n\r\n public init(target: Target, pass: RenderPass = RenderPass.OpaqueGeneral) {\r\n this._renderPass = pass;\r\n this._target = target;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class DrawParams {\r\n private _programParams?: ShaderProgramParams;\r\n private _geometry?: CachedGeometry;\r\n\r\n public get geometry(): CachedGeometry {\r\n assert(undefined !== this._geometry);\r\n return this._geometry;\r\n }\r\n\r\n public get programParams(): ShaderProgramParams {\r\n assert(undefined !== this._programParams);\r\n return this._programParams;\r\n }\r\n\r\n public get target() { return this.programParams.target; }\r\n public get renderPass() { return this.programParams.renderPass; }\r\n public get projectionMatrix() { return this.programParams.projectionMatrix; }\r\n public get isViewCoords() {\r\n return this.programParams.isViewCoords || this.target.currentBranch.forceViewCoords;\r\n }\r\n public get isOverlayPass() { return this.programParams.isOverlayPass; }\r\n public get context() { return this.programParams.context; }\r\n\r\n public init(programParams: ShaderProgramParams, geometry: CachedGeometry) {\r\n this._programParams = programParams;\r\n this._geometry = geometry;\r\n }\r\n}\r\n\r\n/** Defines operation associated with pushing or popping a branch\r\n * @internal\r\n */\r\nexport const enum PushOrPop {\r\n Push,\r\n Pop,\r\n}\r\n\r\n/** Represents a command to be executed within a RenderPass. The most common command is\r\n * to draw a primitive; others involve state changes such as pushing/popping transforms\r\n * and symbology overrides, which require that commands be executed in order.\r\n * @internal\r\n */\r\nexport enum DrawOpCode {\r\n Primitive = \"drawPrimitive\", // eslint-disable-line @typescript-eslint/no-shadow\r\n PushBranch = \"pushBranch\",\r\n PopBranch = \"popBranch\",\r\n PushBatch = \"pushBatch\",\r\n PopBatch = \"popBatch\",\r\n PushState = \"pushState\",\r\n PushClip = \"pushClip\",\r\n PopClip = \"popClip\",\r\n}\r\n\r\n/** @internal */\r\nexport class PopBatchCommand {\r\n public readonly opcode = \"popBatch\";\r\n\r\n private constructor() { }\r\n\r\n public static instance = new PopBatchCommand();\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.popBatch();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PushBatchCommand {\r\n public readonly opcode = \"pushBatch\";\r\n\r\n public constructor(public readonly batch: Batch) { }\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.pushBatch(this.batch);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PushStateCommand {\r\n public readonly opcode = \"pushState\";\r\n\r\n public constructor(public readonly state: BranchState) { }\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.pushState(this.state);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PushBranchCommand {\r\n public readonly opcode = \"pushBranch\";\r\n\r\n public constructor(public readonly branch: Branch) { }\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.pushBranch(this.branch);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PopBranchCommand {\r\n public readonly opcode = \"popBranch\";\r\n\r\n private constructor() { }\r\n\r\n public static instance = new PopBranchCommand();\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.popBranch();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PushClipCommand {\r\n public readonly opcode = \"pushClip\";\r\n\r\n public constructor(public readonly clip: ClipVolume) { }\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.uniforms.branch.clipStack.push(this.clip);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PopClipCommand {\r\n public readonly opcode = \"popClip\";\r\n\r\n private constructor() { }\r\n\r\n public static instance = new PopClipCommand();\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.uniforms.branch.clipStack.pop();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PrimitiveCommand {\r\n public readonly opcode = \"drawPrimitive\";\r\n\r\n public constructor(public readonly primitive: Primitive) { }\r\n\r\n private static readonly _scratchTechniqueFlags = new TechniqueFlags();\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n if (exec.target.isGeometryOutsideActiveVolume(this.primitive.cachedGeometry))\r\n return;\r\n\r\n const techniqueId = this.primitive.techniqueId;\r\n if (TechniqueId.Invalid === techniqueId)\r\n return;\r\n\r\n const target = exec.target;\r\n const thematic = this.primitive.cachedGeometry.supportsThematicDisplay && target.wantThematicDisplay;\r\n const shadowable = (techniqueId === TechniqueId.Surface || techniqueId === TechniqueId.RealityMesh) && target.solarShadowMap.isReady && target.currentViewFlags.shadows && !thematic;\r\n const isShadowable = shadowable ? IsShadowable.Yes : IsShadowable.No;\r\n let isThematic = thematic ? IsThematic.Yes : IsThematic.No;\r\n const isClassified = (undefined !== target.currentPlanarClassifierOrDrape || undefined !== target.activeVolumeClassifierTexture) ? IsClassified.Yes : IsClassified.No;\r\n const isInstanced = this.primitive.isInstanced ? IsInstanced.Yes : IsInstanced.No;\r\n const isAnimated = this.primitive.hasAnimation ? IsAnimated.Yes : IsAnimated.No;\r\n\r\n // Point clouds do not support hillshade or slope mode for thematic display.\r\n if (isThematic && (undefined !== this.primitive.cachedGeometry.asPointCloud) && (target.uniforms.thematic.wantSlopeMode || target.uniforms.thematic.wantHillShadeMode))\r\n isThematic = IsThematic.No;\r\n\r\n const wiremesh = target.currentViewFlags.wiremesh && System.instance.isWebGL2 && (techniqueId === TechniqueId.Surface || techniqueId === TechniqueId.RealityMesh);\r\n const isWiremesh = wiremesh ? IsWiremesh.Yes : IsWiremesh.No;\r\n const flags = PrimitiveCommand._scratchTechniqueFlags;\r\n const posType = this.primitive.cachedGeometry.usesQuantizedPositions ? \"quantized\" : \"unquantized\";\r\n flags.init(target, exec.renderPass, isInstanced, isAnimated, isClassified, isShadowable, isThematic, isWiremesh, posType);\r\n\r\n const technique = target.techniques.getTechnique(techniqueId);\r\n const program = technique.getShader(flags);\r\n\r\n if (exec.setProgram(program))\r\n exec.target.compositor.drawPrimitive(this.primitive, exec, program.outputsToPick);\r\n }\r\n\r\n public get hasFeatures(): boolean { return this.primitive.hasFeatures; }\r\n public get renderOrder(): RenderOrder { return this.primitive.renderOrder; }\r\n\r\n public getPass(target: Target): Pass {\r\n return this.primitive.getPass(target);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type PushCommand = PushBranchCommand | PushBatchCommand | PushStateCommand | PushClipCommand;\r\n/** @internal */\r\nexport type PopCommand = PopBranchCommand | PopBatchCommand | PopClipCommand;\r\n/** @internal */\r\nexport type DrawCommand = PushCommand | PopCommand | PrimitiveCommand;\r\n\r\n/** For a single RenderPass, an ordered list of commands to be executed during that pass.\r\n * @internal\r\n */\r\nexport type DrawCommands = DrawCommand[];\r\n\r\n/** Extracts the commands for rendering the flashed classifier (if any) from the by-index set of volume classifier commands.\r\n * NB: Cmds will be sets of some pushes, a primitive, and then some pops (equal to number of pushes).\r\n * The primitive should be right in the middle of a set. We need to find the set which matches the flashID.\r\n * @internal\r\n */\r\nexport function extractFlashedVolumeClassifierCommands(flashedId: Id64String, cmds: DrawCommands, numCmdsPerClassifier: number): DrawCommands | undefined {\r\n if (!Id64.isValid(flashedId) || 0 === numCmdsPerClassifier)\r\n return undefined;\r\n\r\n const firstPrim = (numCmdsPerClassifier - 1) / 2;\r\n for (let i = firstPrim; i < cmds.length; i += numCmdsPerClassifier) {\r\n assert(\"drawPrimitive\" === cmds[i].opcode, \"Command list not configured as expected.\");\r\n const pc: PrimitiveCommand = cmds[i] as PrimitiveCommand;\r\n const surface = pc.primitive.cachedGeometry.asSurface;\r\n if (undefined !== surface && undefined !== surface.mesh.uniformFeatureId) {\r\n let j = i - 1;\r\n while (j >= 0 && \"pushBatch\" !== cmds[j].opcode) // Find batch for this primitive\r\n j--;\r\n if (j < 0)\r\n continue;\r\n\r\n const pushBatch = cmds[j] as PushBatchCommand;\r\n const elemId = pushBatch.batch.featureTable.findElementId(surface.mesh.uniformFeatureId);\r\n if (undefined !== elemId && elemId === flashedId) {\r\n return cmds.slice(i - firstPrim, i + firstPrim + 1);\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/** @internal */\r\nexport function extractHilitedVolumeClassifierCommands(hilites: Hilites, cmds: DrawCommands): DrawCommands {\r\n // TODO: This could really be done at the time the HiliteClassification render pass commands are being generated\r\n // by just not putting the ones which are not hilited into the ClassificationHilite command list.\r\n const result: DrawCommand[] = [];\r\n\r\n let batch;\r\n for (const cmd of cmds) {\r\n switch (cmd.opcode) {\r\n case \"popBranch\":\r\n if (result.length > 0 && \"pushBranch\" === result[result.length - 1].opcode) {\r\n result.pop(); // remove empty push/pop pairs\r\n continue;\r\n }\r\n break;\r\n case \"popBatch\":\r\n batch = undefined;\r\n if (result.length > 0 && \"pushBatch\" === result[result.length - 1].opcode) {\r\n result.pop(); // remove empty push/pop pairs\r\n continue;\r\n }\r\n break;\r\n case \"pushBatch\":\r\n batch = cmd.batch;\r\n break;\r\n case \"drawPrimitive\":\r\n if (undefined !== batch) {\r\n // Skip any primitives that are not hilited.\r\n const surface = cmd.primitive.cachedGeometry.asSurface;\r\n if (undefined === surface || undefined === surface.mesh.uniformFeatureId)\r\n continue;\r\n\r\n const feature = batch.featureTable.getPackedFeature(surface.mesh.uniformFeatureId);\r\n if (undefined === feature || !isFeatureHilited(feature, hilites, hilites.models.hasId(batch.featureTable.modelId)))\r\n continue;\r\n\r\n break;\r\n }\r\n }\r\n\r\n result.push(cmd);\r\n }\r\n\r\n return result;\r\n}\r\n"]}
1
+ {"version":3,"file":"DrawCommand.js","sourceRoot":"","sources":["../../../../src/render/webgl/DrawCommand.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA+D;AAI/D,yDAAsD;AAMtD,qCAAkC;AAElC,qDAA+H;AAG/H,yCAAyC;AAEzC,gBAAgB;AAChB,MAAa,mBAAmB;IAAhC;QAEU,gBAAW,kBAA+B;IAoBpD,CAAC;IAlBC,IAAW,MAAM;QACf,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEpD,IAAW,gBAAgB,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChG,oBAAoB,CAAC,OAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAE9H,IAAW,YAAY,KAAK,OAAO,yBAA2B,IAAI,CAAC,UAAU,IAAI,uBAA0B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7H,IAAW,aAAa,KAAK,OAAO,0BAA4B,IAAI,CAAC,UAAU,IAAI,yBAA2B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAChI,IAAW,OAAO,KAAK,OAAO,eAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAc,EAAE,4BAA2C;QACrE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;CACF;AAtBD,kDAsBC;AAED,gBAAgB;AAChB,MAAa,UAAU;IAIrB,IAAW,QAAQ;QACjB,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAW,aAAa;QACtB,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,IAAW,gBAAgB,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7E,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC;IACtF,CAAC;IACD,IAAW,aAAa,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpD,IAAI,CAAC,aAAkC,EAAE,QAAwB;QACtE,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;CACF;AA3BD,gCA2BC;AAUD;;;;GAIG;AACH,IAAY,UASX;AATD,WAAY,UAAU;IACpB,yCAA2B,CAAA;IAC3B,uCAAyB,CAAA;IACzB,qCAAuB,CAAA;IACvB,qCAAuB,CAAA;IACvB,mCAAqB,CAAA;IACrB,qCAAuB,CAAA;IACvB,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;AACrB,CAAC,EATW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QASrB;AAED,gBAAgB;AAChB,MAAa,eAAe;IAG1B;QAFgB,WAAM,GAAG,UAAU,CAAC;IAEZ,CAAC;IAIlB,OAAO,CAAC,IAA2B;QACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;;AATH,0CAUC;AALe,wBAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;AAOjD,gBAAgB;AAChB,MAAa,gBAAgB;IAG3B,YAAmC,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAF/B,WAAM,GAAG,WAAW,CAAC;IAEc,CAAC;IAE7C,OAAO,CAAC,IAA2B;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF;AARD,4CAQC;AAED,gBAAgB;AAChB,MAAa,gBAAgB;IAG3B,YAAmC,KAAkB;QAAlB,UAAK,GAAL,KAAK,CAAa;QAFrC,WAAM,GAAG,WAAW,CAAC;IAEoB,CAAC;IAEnD,OAAO,CAAC,IAA2B;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF;AARD,4CAQC;AAED,gBAAgB;AAChB,MAAa,iBAAiB;IAG5B,YAAmC,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAFjC,WAAM,GAAG,YAAY,CAAC;IAEe,CAAC;IAE/C,OAAO,CAAC,IAA2B;QACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF;AARD,8CAQC;AAED,gBAAgB;AAChB,MAAa,gBAAgB;IAG3B;QAFgB,WAAM,GAAG,WAAW,CAAC;IAEb,CAAC;IAIlB,OAAO,CAAC,IAA2B;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;;AATH,4CAUC;AALe,yBAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAOlD,gBAAgB;AAChB,MAAa,eAAe;IAG1B,YAAmC,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;QAFnC,WAAM,GAAG,UAAU,CAAC;IAEmB,CAAC;IAEjD,OAAO,CAAC,IAA2B;QACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;CACF;AARD,0CAQC;AAED,gBAAgB;AAChB,MAAa,cAAc;IAGzB;QAFgB,WAAM,GAAG,SAAS,CAAC;IAEX,CAAC;IAIlB,OAAO,CAAC,IAA2B;QACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;IAC9C,CAAC;;AATH,wCAUC;AALe,uBAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;AAOhD,gBAAgB;AAChB,MAAa,gBAAgB;IAG3B,YAAmC,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QAFvC,WAAM,GAAG,eAAe,CAAC;IAEkB,CAAC;IAIrD,OAAO,CAAC,IAA2B;QACxC,IAAI,IAAI,CAAC,MAAM,CAAC,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;YAC1E,OAAO;QAET,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QAC/C,IAAI,qBAAwB,WAAW;YACrC,OAAO;QAET,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,uBAAuB,IAAI,MAAM,CAAC,mBAAmB,CAAC;QACrG,MAAM,UAAU,GAAG,CAAC,WAAW,oBAAwB,IAAI,WAAW,wBAA4B,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC;QACrL,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,aAAkB,CAAC,WAAgB,CAAC;QACrE,IAAI,UAAU,GAAG,QAAQ,CAAC,CAAC,aAAgB,CAAC,WAAc,CAAC;QAC3D,MAAM,YAAY,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,8BAA8B,IAAI,SAAS,KAAK,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,aAAkB,CAAC,WAAgB,CAAC;QACtK,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,aAAiB,CAAC,WAAe,CAAC;QAClF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,aAAgB,CAAC,WAAc,CAAC;QAEhF,4EAA4E;QAC5E,IAAI,UAAU,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACpK,UAAU,aAAgB,CAAC;QAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,IAAI,CAAC,WAAW,oBAAwB,IAAI,WAAW,wBAA4B,CAAC,CAAC;QACtI,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,aAAgB,CAAC,WAAc,CAAC;QAC7D,MAAM,KAAK,GAAG,gBAAgB,CAAC,sBAAsB,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;QACnG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAE1H,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACtF,CAAC;IAED,IAAW,WAAW,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACxE,IAAW,WAAW,KAAkB,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAErE,OAAO,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;;AA9CH,4CA+CC;AA1CyB,uCAAsB,GAAG,IAAI,+BAAc,EAAE,CAAC;AAwDxE;;;;GAIG;AACH,SAAgB,sCAAsC,CAAC,SAAqB,EAAE,IAAkB,EAAE,oBAA4B;IAC5H,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,oBAAoB;QACxD,OAAO,SAAS,CAAC;IAEnB,MAAM,SAAS,GAAG,CAAC,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,oBAAoB,EAAE;QAClE,IAAA,qBAAM,EAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QACvF,MAAM,EAAE,GAAqB,IAAI,CAAC,CAAC,CAAqB,CAAC;QACzD,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;QACtD,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,gCAAgC;gBAC/E,CAAC,EAAE,CAAC;YACN,IAAI,CAAC,GAAG,CAAC;gBACP,SAAS;YAEX,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAqB,CAAC;YAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzF,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE;gBAChD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;aACrD;SACF;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAzBD,wFAyBC;AAED,gBAAgB;AAChB,SAAgB,sCAAsC,CAAC,OAAgB,EAAE,IAAkB;IACzF,gHAAgH;IAChH,uGAAuG;IACvG,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC;IACV,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,QAAQ,GAAG,CAAC,MAAM,EAAE;YAClB,KAAK,WAAW;gBACd,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;oBAC1E,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,8BAA8B;oBAC5C,SAAS;iBACV;gBACD,MAAM;YACR,KAAK,UAAU;gBACb,KAAK,GAAG,SAAS,CAAC;gBAClB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;oBACzE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,8BAA8B;oBAC5C,SAAS;iBACV;gBACD,MAAM;YACR,KAAK,WAAW;gBACd,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;gBAClB,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,SAAS,KAAK,KAAK,EAAE;oBACvB,4CAA4C;oBAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;oBACvD,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,gBAAgB;wBACtE,SAAS;oBAEX,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACnF,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,IAAA,mCAAgB,EAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;wBAChH,SAAS;oBAEX,MAAM;iBACP;SACJ;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA3CD,wFA2CC","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, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { BranchState } from \"./BranchState\";\r\nimport { CachedGeometry } from \"./CachedGeometry\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\nimport { isFeatureHilited } from \"./FeatureOverrides\";\r\nimport { Batch, Branch } from \"./Graphic\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { Primitive } from \"./Primitive\";\r\nimport { Pass, RenderOrder, RenderPass } from \"./RenderFlags\";\r\nimport { ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { Hilites, Target } from \"./Target\";\r\nimport { IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, IsWiremesh, TechniqueFlags } from \"./TechniqueFlags\";\r\nimport { TechniqueId } from \"./TechniqueId\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport class ShaderProgramParams {\r\n private _target?: Target;\r\n private _renderPass: RenderPass = RenderPass.None;\r\n\r\n public get target(): Target {\r\n assert(undefined !== this._target);\r\n return this._target;\r\n }\r\n\r\n public get renderPass() { return this._renderPass; }\r\n\r\n public get projectionMatrix() { return this.target.uniforms.getProjectionMatrix32(this.isViewCoords); }\r\n public bindProjectionMatrix(uniform: UniformHandle) { this.target.uniforms.bindProjectionMatrix(uniform, this.isViewCoords); }\r\n\r\n public get isViewCoords() { return RenderPass.ViewOverlay === this.renderPass || RenderPass.Background === this.renderPass; }\r\n public get isOverlayPass() { return RenderPass.WorldOverlay === this.renderPass || RenderPass.ViewOverlay === this.renderPass; }\r\n public get context() { return System.instance.context; }\r\n\r\n public init(target: Target, pass: RenderPass = RenderPass.OpaqueGeneral) {\r\n this._renderPass = pass;\r\n this._target = target;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class DrawParams {\r\n private _programParams?: ShaderProgramParams;\r\n private _geometry?: CachedGeometry;\r\n\r\n public get geometry(): CachedGeometry {\r\n assert(undefined !== this._geometry);\r\n return this._geometry;\r\n }\r\n\r\n public get programParams(): ShaderProgramParams {\r\n assert(undefined !== this._programParams);\r\n return this._programParams;\r\n }\r\n\r\n public get target() { return this.programParams.target; }\r\n public get renderPass() { return this.programParams.renderPass; }\r\n public get projectionMatrix() { return this.programParams.projectionMatrix; }\r\n public get isViewCoords() {\r\n return this.programParams.isViewCoords || this.target.currentBranch.forceViewCoords;\r\n }\r\n public get isOverlayPass() { return this.programParams.isOverlayPass; }\r\n public get context() { return this.programParams.context; }\r\n\r\n public init(programParams: ShaderProgramParams, geometry: CachedGeometry) {\r\n this._programParams = programParams;\r\n this._geometry = geometry;\r\n }\r\n}\r\n\r\n/** Defines operation associated with pushing or popping a branch\r\n * @internal\r\n */\r\nexport const enum PushOrPop {\r\n Push,\r\n Pop,\r\n}\r\n\r\n/** Represents a command to be executed within a RenderPass. The most common command is\r\n * to draw a primitive; others involve state changes such as pushing/popping transforms\r\n * and symbology overrides, which require that commands be executed in order.\r\n * @internal\r\n */\r\nexport enum DrawOpCode {\r\n Primitive = \"drawPrimitive\", // eslint-disable-line @typescript-eslint/no-shadow\r\n PushBranch = \"pushBranch\",\r\n PopBranch = \"popBranch\",\r\n PushBatch = \"pushBatch\",\r\n PopBatch = \"popBatch\",\r\n PushState = \"pushState\",\r\n PushClip = \"pushClip\",\r\n PopClip = \"popClip\",\r\n}\r\n\r\n/** @internal */\r\nexport class PopBatchCommand {\r\n public readonly opcode = \"popBatch\";\r\n\r\n private constructor() { }\r\n\r\n public static instance = new PopBatchCommand();\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.popBatch();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PushBatchCommand {\r\n public readonly opcode = \"pushBatch\";\r\n\r\n public constructor(public readonly batch: Batch) { }\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.pushBatch(this.batch);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PushStateCommand {\r\n public readonly opcode = \"pushState\";\r\n\r\n public constructor(public readonly state: BranchState) { }\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.pushState(this.state);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PushBranchCommand {\r\n public readonly opcode = \"pushBranch\";\r\n\r\n public constructor(public readonly branch: Branch) { }\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.pushBranch(this.branch);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PopBranchCommand {\r\n public readonly opcode = \"popBranch\";\r\n\r\n private constructor() { }\r\n\r\n public static instance = new PopBranchCommand();\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.popBranch();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PushClipCommand {\r\n public readonly opcode = \"pushClip\";\r\n\r\n public constructor(public readonly clip: ClipVolume) { }\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.uniforms.branch.clipStack.push(this.clip);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PopClipCommand {\r\n public readonly opcode = \"popClip\";\r\n\r\n private constructor() { }\r\n\r\n public static instance = new PopClipCommand();\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n exec.target.uniforms.branch.clipStack.pop();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PrimitiveCommand {\r\n public readonly opcode = \"drawPrimitive\";\r\n\r\n public constructor(public readonly primitive: Primitive) { }\r\n\r\n private static readonly _scratchTechniqueFlags = new TechniqueFlags();\r\n\r\n public execute(exec: ShaderProgramExecutor): void {\r\n if (exec.target.isGeometryOutsideActiveVolume(this.primitive.cachedGeometry))\r\n return;\r\n\r\n const techniqueId = this.primitive.techniqueId;\r\n if (TechniqueId.Invalid === techniqueId)\r\n return;\r\n\r\n const target = exec.target;\r\n const thematic = this.primitive.cachedGeometry.supportsThematicDisplay && target.wantThematicDisplay;\r\n const shadowable = (techniqueId === TechniqueId.Surface || techniqueId === TechniqueId.RealityMesh) && target.solarShadowMap.isReady && target.currentViewFlags.shadows && !thematic;\r\n const isShadowable = shadowable ? IsShadowable.Yes : IsShadowable.No;\r\n let isThematic = thematic ? IsThematic.Yes : IsThematic.No;\r\n const isClassified = (undefined !== target.currentPlanarClassifierOrDrape || undefined !== target.activeVolumeClassifierTexture) ? IsClassified.Yes : IsClassified.No;\r\n const isInstanced = this.primitive.isInstanced ? IsInstanced.Yes : IsInstanced.No;\r\n const isAnimated = this.primitive.hasAnimation ? IsAnimated.Yes : IsAnimated.No;\r\n\r\n // Point clouds do not support hillshade or slope mode for thematic display.\r\n if (isThematic && (undefined !== this.primitive.cachedGeometry.asPointCloud) && (target.uniforms.thematic.wantSlopeMode || target.uniforms.thematic.wantHillShadeMode))\r\n isThematic = IsThematic.No;\r\n\r\n const wiremesh = target.currentViewFlags.wiremesh && (techniqueId === TechniqueId.Surface || techniqueId === TechniqueId.RealityMesh);\r\n const isWiremesh = wiremesh ? IsWiremesh.Yes : IsWiremesh.No;\r\n const flags = PrimitiveCommand._scratchTechniqueFlags;\r\n const posType = this.primitive.cachedGeometry.usesQuantizedPositions ? \"quantized\" : \"unquantized\";\r\n flags.init(target, exec.renderPass, isInstanced, isAnimated, isClassified, isShadowable, isThematic, isWiremesh, posType);\r\n\r\n const technique = target.techniques.getTechnique(techniqueId);\r\n const program = technique.getShader(flags);\r\n\r\n if (exec.setProgram(program))\r\n exec.target.compositor.drawPrimitive(this.primitive, exec, program.outputsToPick);\r\n }\r\n\r\n public get hasFeatures(): boolean { return this.primitive.hasFeatures; }\r\n public get renderOrder(): RenderOrder { return this.primitive.renderOrder; }\r\n\r\n public getPass(target: Target): Pass {\r\n return this.primitive.getPass(target);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type PushCommand = PushBranchCommand | PushBatchCommand | PushStateCommand | PushClipCommand;\r\n/** @internal */\r\nexport type PopCommand = PopBranchCommand | PopBatchCommand | PopClipCommand;\r\n/** @internal */\r\nexport type DrawCommand = PushCommand | PopCommand | PrimitiveCommand;\r\n\r\n/** For a single RenderPass, an ordered list of commands to be executed during that pass.\r\n * @internal\r\n */\r\nexport type DrawCommands = DrawCommand[];\r\n\r\n/** Extracts the commands for rendering the flashed classifier (if any) from the by-index set of volume classifier commands.\r\n * NB: Cmds will be sets of some pushes, a primitive, and then some pops (equal to number of pushes).\r\n * The primitive should be right in the middle of a set. We need to find the set which matches the flashID.\r\n * @internal\r\n */\r\nexport function extractFlashedVolumeClassifierCommands(flashedId: Id64String, cmds: DrawCommands, numCmdsPerClassifier: number): DrawCommands | undefined {\r\n if (!Id64.isValid(flashedId) || 0 === numCmdsPerClassifier)\r\n return undefined;\r\n\r\n const firstPrim = (numCmdsPerClassifier - 1) / 2;\r\n for (let i = firstPrim; i < cmds.length; i += numCmdsPerClassifier) {\r\n assert(\"drawPrimitive\" === cmds[i].opcode, \"Command list not configured as expected.\");\r\n const pc: PrimitiveCommand = cmds[i] as PrimitiveCommand;\r\n const surface = pc.primitive.cachedGeometry.asSurface;\r\n if (undefined !== surface && undefined !== surface.mesh.uniformFeatureId) {\r\n let j = i - 1;\r\n while (j >= 0 && \"pushBatch\" !== cmds[j].opcode) // Find batch for this primitive\r\n j--;\r\n if (j < 0)\r\n continue;\r\n\r\n const pushBatch = cmds[j] as PushBatchCommand;\r\n const elemId = pushBatch.batch.featureTable.findElementId(surface.mesh.uniformFeatureId);\r\n if (undefined !== elemId && elemId === flashedId) {\r\n return cmds.slice(i - firstPrim, i + firstPrim + 1);\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/** @internal */\r\nexport function extractHilitedVolumeClassifierCommands(hilites: Hilites, cmds: DrawCommands): DrawCommands {\r\n // TODO: This could really be done at the time the HiliteClassification render pass commands are being generated\r\n // by just not putting the ones which are not hilited into the ClassificationHilite command list.\r\n const result: DrawCommand[] = [];\r\n\r\n let batch;\r\n for (const cmd of cmds) {\r\n switch (cmd.opcode) {\r\n case \"popBranch\":\r\n if (result.length > 0 && \"pushBranch\" === result[result.length - 1].opcode) {\r\n result.pop(); // remove empty push/pop pairs\r\n continue;\r\n }\r\n break;\r\n case \"popBatch\":\r\n batch = undefined;\r\n if (result.length > 0 && \"pushBatch\" === result[result.length - 1].opcode) {\r\n result.pop(); // remove empty push/pop pairs\r\n continue;\r\n }\r\n break;\r\n case \"pushBatch\":\r\n batch = cmd.batch;\r\n break;\r\n case \"drawPrimitive\":\r\n if (undefined !== batch) {\r\n // Skip any primitives that are not hilited.\r\n const surface = cmd.primitive.cachedGeometry.asSurface;\r\n if (undefined === surface || undefined === surface.mesh.uniformFeatureId)\r\n continue;\r\n\r\n const feature = batch.featureTable.getPackedFeature(surface.mesh.uniformFeatureId);\r\n if (undefined === feature || !isFeatureHilited(feature, hilites, hilites.models.hasId(batch.featureTable.modelId)))\r\n continue;\r\n\r\n break;\r\n }\r\n }\r\n\r\n result.push(cmd);\r\n }\r\n\r\n return result;\r\n}\r\n"]}
@@ -17,7 +17,7 @@ const Sync_1 = require("./Sync");
17
17
  const System_1 = require("./System");
18
18
  const Texture_1 = require("./Texture");
19
19
  function computeWidthAndHeight(nEntries, nRgbaPerEntry, nExtraRgba = 0, nTables = 1) {
20
- const maxSize = System_1.System.instance.capabilities.maxTextureSize;
20
+ const maxSize = System_1.System.instance.maxTextureSize;
21
21
  const nRgba = nEntries * nRgbaPerEntry * nTables + nExtraRgba;
22
22
  if (nRgba < maxSize)
23
23
  return { width: nRgba, height: 1 };