@zephyr3d/scene 0.7.0 → 0.7.1

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 (319) hide show
  1. package/dist/animation/animation.js +4 -15
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +22 -9
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +1 -0
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +0 -1
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +7 -1
  10. package/dist/animation/morphtarget.js.map +1 -1
  11. package/dist/animation/morphtrack.js +3 -3
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/proptrack.js +37 -41
  14. package/dist/animation/proptrack.js.map +1 -1
  15. package/dist/animation/rotationtrack.js +0 -1
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +0 -1
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +7 -14
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +0 -1
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +13 -4
  24. package/dist/app/api.js.map +1 -1
  25. package/dist/app/app.js +13 -1
  26. package/dist/app/app.js.map +1 -1
  27. package/dist/app/engine.js +33 -45
  28. package/dist/app/engine.js.map +1 -1
  29. package/dist/app/inputmgr.js.map +1 -1
  30. package/dist/app/runtimescript.js.map +1 -1
  31. package/dist/app/screen.js +318 -0
  32. package/dist/app/screen.js.map +1 -0
  33. package/dist/app/scriptingsystem.js +10 -6
  34. package/dist/app/scriptingsystem.js.map +1 -1
  35. package/dist/app/scriptregistry.js +11 -22
  36. package/dist/app/scriptregistry.js.map +1 -1
  37. package/dist/asset/assetmanager.js +79 -58
  38. package/dist/asset/assetmanager.js.map +1 -1
  39. package/dist/asset/builtin.js +5 -5
  40. package/dist/asset/builtin.js.map +1 -1
  41. package/dist/asset/loaders/dds/dds.js +6 -2
  42. package/dist/asset/loaders/dds/dds.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds_loader.js +1 -1
  44. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  45. package/dist/asset/loaders/gltf/gltf_loader.js +14 -6
  46. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/helpers.js +6 -2
  48. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  49. package/dist/asset/loaders/hdr/hdr.js +22 -15
  50. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  51. package/dist/asset/loaders/image/tga_Loader.js +2 -1
  52. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  53. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  54. package/dist/asset/loaders/loader.js +2 -2
  55. package/dist/asset/loaders/loader.js.map +1 -1
  56. package/dist/asset/model.js +2 -2
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/blitter/bilateralblur.js.map +1 -1
  59. package/dist/blitter/blitter.js +9 -11
  60. package/dist/blitter/blitter.js.map +1 -1
  61. package/dist/blitter/box.js +0 -1
  62. package/dist/blitter/box.js.map +1 -1
  63. package/dist/blitter/copy.js.map +1 -1
  64. package/dist/blitter/gaussianblur.js.map +1 -1
  65. package/dist/camera/base.js +1 -3
  66. package/dist/camera/base.js.map +1 -1
  67. package/dist/camera/camera.js +121 -37
  68. package/dist/camera/camera.js.map +1 -1
  69. package/dist/camera/fps.js +19 -17
  70. package/dist/camera/fps.js.map +1 -1
  71. package/dist/camera/orbit.js +45 -43
  72. package/dist/camera/orbit.js.map +1 -1
  73. package/dist/camera/orthocamera.js +27 -21
  74. package/dist/camera/orthocamera.js.map +1 -1
  75. package/dist/camera/perspectivecamera.js +26 -17
  76. package/dist/camera/perspectivecamera.js.map +1 -1
  77. package/dist/index.d.ts +14453 -15609
  78. package/dist/index.js +17 -11
  79. package/dist/index.js.map +1 -1
  80. package/dist/material/blinn.js.map +1 -1
  81. package/dist/material/grassmaterial.js.map +1 -1
  82. package/dist/material/lambert.js.map +1 -1
  83. package/dist/material/material.js +11 -5
  84. package/dist/material/material.js.map +1 -1
  85. package/dist/material/meshmaterial.js +10 -9
  86. package/dist/material/meshmaterial.js.map +1 -1
  87. package/dist/material/mixins/albedocolor.js.map +1 -1
  88. package/dist/material/mixins/foliage.js.map +1 -1
  89. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  90. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  91. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +7 -0
  92. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  93. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  94. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  95. package/dist/material/mixins/lit.js +3 -3
  96. package/dist/material/mixins/lit.js.map +1 -1
  97. package/dist/material/mixins/pbr/brdf.js.map +1 -1
  98. package/dist/material/mixins/pbr/common.js.map +1 -1
  99. package/dist/material/mixins/texture.js +3 -0
  100. package/dist/material/mixins/texture.js.map +1 -1
  101. package/dist/material/mixins/vertexcolor.js.map +1 -1
  102. package/dist/material/particle.js.map +1 -1
  103. package/dist/material/pbrblueprint.js +180 -22
  104. package/dist/material/pbrblueprint.js.map +1 -1
  105. package/dist/material/pbrmr.js.map +1 -1
  106. package/dist/material/pbrsg.js.map +1 -1
  107. package/dist/material/shader/helper.js +36 -53
  108. package/dist/material/shader/helper.js.map +1 -1
  109. package/dist/material/sprite.js +301 -0
  110. package/dist/material/sprite.js.map +1 -0
  111. package/dist/material/sprite3d.js +301 -0
  112. package/dist/material/sprite3d.js.map +1 -0
  113. package/dist/material/sprite3d_std.js +116 -0
  114. package/dist/material/sprite3d_std.js.map +1 -0
  115. package/dist/material/sprite3dblueprint.js +235 -0
  116. package/dist/material/sprite3dblueprint.js.map +1 -0
  117. package/dist/material/sprite_std.js +116 -0
  118. package/dist/material/sprite_std.js.map +1 -0
  119. package/dist/material/spriteblueprint.js +235 -0
  120. package/dist/material/spriteblueprint.js.map +1 -0
  121. package/dist/material/terrain-cm.js +0 -1
  122. package/dist/material/terrain-cm.js.map +1 -1
  123. package/dist/material/unlit.js.map +1 -1
  124. package/dist/material/water.js.map +1 -1
  125. package/dist/posteffect/bloom.js.map +1 -1
  126. package/dist/posteffect/compositor.js.map +1 -1
  127. package/dist/posteffect/fxaa.js.map +1 -1
  128. package/dist/posteffect/grayscale.js.map +1 -1
  129. package/dist/posteffect/motionblur.js.map +1 -1
  130. package/dist/posteffect/posteffect.js.map +1 -1
  131. package/dist/posteffect/sao.js.map +1 -1
  132. package/dist/posteffect/ssr.js +7 -5
  133. package/dist/posteffect/ssr.js.map +1 -1
  134. package/dist/posteffect/taa.js.map +1 -1
  135. package/dist/posteffect/tonemap.js.map +1 -1
  136. package/dist/render/abuffer_oit.js +8 -6
  137. package/dist/render/abuffer_oit.js.map +1 -1
  138. package/dist/render/clipmap.js +0 -10
  139. package/dist/render/clipmap.js.map +1 -1
  140. package/dist/render/cluster_light.js +4 -4
  141. package/dist/render/cluster_light.js.map +1 -1
  142. package/dist/render/cull_visitor.js +15 -17
  143. package/dist/render/cull_visitor.js.map +1 -1
  144. package/dist/render/depthpass.js +3 -4
  145. package/dist/render/depthpass.js.map +1 -1
  146. package/dist/render/drawable.js +15 -0
  147. package/dist/render/drawable.js.map +1 -0
  148. package/dist/render/drawable_mixin.js +8 -4
  149. package/dist/render/drawable_mixin.js.map +1 -1
  150. package/dist/render/envlight.js.map +1 -1
  151. package/dist/render/fbm_wavegenerator.js +3 -1
  152. package/dist/render/fbm_wavegenerator.js.map +1 -1
  153. package/dist/render/fft_wavegenerator.js +67 -64
  154. package/dist/render/fft_wavegenerator.js.map +1 -1
  155. package/dist/render/fullscreenquad.js.map +1 -1
  156. package/dist/render/gerstner_wavegenerator.js +3 -1
  157. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  158. package/dist/render/globalbindgroup_allocator.js +3 -1
  159. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  160. package/dist/render/hzb.js +1 -2
  161. package/dist/render/hzb.js.map +1 -1
  162. package/dist/render/lightpass.js +13 -13
  163. package/dist/render/lightpass.js.map +1 -1
  164. package/dist/render/objectcolorpass.js +4 -7
  165. package/dist/render/objectcolorpass.js.map +1 -1
  166. package/dist/render/primitive.js +4 -5
  167. package/dist/render/primitive.js.map +1 -1
  168. package/dist/render/render_queue.js +10 -5
  169. package/dist/render/render_queue.js.map +1 -1
  170. package/dist/render/renderer.js +16 -22
  171. package/dist/render/renderer.js.map +1 -1
  172. package/dist/render/renderpass.js +27 -52
  173. package/dist/render/renderpass.js.map +1 -1
  174. package/dist/render/rendertarget.js +5 -0
  175. package/dist/render/rendertarget.js.map +1 -0
  176. package/dist/render/screenrendertarget.js +56 -0
  177. package/dist/render/screenrendertarget.js.map +1 -0
  178. package/dist/render/shadowmap_pass.js +4 -5
  179. package/dist/render/shadowmap_pass.js.map +1 -1
  180. package/dist/render/sky.js +16 -14
  181. package/dist/render/sky.js.map +1 -1
  182. package/dist/render/weightedblended_oit.js.map +1 -1
  183. package/dist/scene/basesprite.js +296 -0
  184. package/dist/scene/basesprite.js.map +1 -0
  185. package/dist/scene/batchgroup.js +4 -2
  186. package/dist/scene/batchgroup.js.map +1 -1
  187. package/dist/scene/environment.js +9 -10
  188. package/dist/scene/environment.js.map +1 -1
  189. package/dist/scene/graph_node.js.map +1 -1
  190. package/dist/scene/light.js +22 -4
  191. package/dist/scene/light.js.map +1 -1
  192. package/dist/scene/mesh.js +93 -15
  193. package/dist/scene/mesh.js.map +1 -1
  194. package/dist/scene/octree.js.map +1 -1
  195. package/dist/scene/particlesys.js +25 -22
  196. package/dist/scene/particlesys.js.map +1 -1
  197. package/dist/scene/raycast_visitor.js +0 -16
  198. package/dist/scene/raycast_visitor.js.map +1 -1
  199. package/dist/scene/scene.js +7 -4
  200. package/dist/scene/scene.js.map +1 -1
  201. package/dist/scene/scene_node.js +20 -35
  202. package/dist/scene/scene_node.js.map +1 -1
  203. package/dist/scene/sprite.js +18 -0
  204. package/dist/scene/sprite.js.map +1 -0
  205. package/dist/scene/sprite3d.js +18 -0
  206. package/dist/scene/sprite3d.js.map +1 -0
  207. package/dist/scene/terrain-cm/grass.js +5 -4
  208. package/dist/scene/terrain-cm/grass.js.map +1 -1
  209. package/dist/scene/terrain-cm/grassmaterial.js +3 -1
  210. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  211. package/dist/scene/terrain-cm/terrain-cm.js +65 -48
  212. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  213. package/dist/scene/water.js +35 -30
  214. package/dist/scene/water.js.map +1 -1
  215. package/dist/shaders/atmosphere.js +17 -29
  216. package/dist/shaders/atmosphere.js.map +1 -1
  217. package/dist/shaders/fog.js.map +1 -1
  218. package/dist/shaders/misc.js.map +1 -1
  219. package/dist/shaders/noise.js.map +1 -1
  220. package/dist/shaders/pbr.js.map +1 -1
  221. package/dist/shaders/shadow.js.map +1 -1
  222. package/dist/shaders/ssr.js.map +1 -1
  223. package/dist/shaders/temporal.js.map +1 -1
  224. package/dist/shaders/water.js.map +1 -1
  225. package/dist/shadow/esm.js +1 -1
  226. package/dist/shadow/esm.js.map +1 -1
  227. package/dist/shadow/pcf_opt.js.map +1 -1
  228. package/dist/shadow/pcf_pd.js.map +1 -1
  229. package/dist/shadow/shader.js +3 -1
  230. package/dist/shadow/shader.js.map +1 -1
  231. package/dist/shadow/shadow_impl.js.map +1 -1
  232. package/dist/shadow/shadowmapper.js +6 -18
  233. package/dist/shadow/shadowmapper.js.map +1 -1
  234. package/dist/shadow/ssm.js.map +1 -1
  235. package/dist/shadow/vsm.js.map +1 -1
  236. package/dist/shapes/box.js +9 -3
  237. package/dist/shapes/box.js.map +1 -1
  238. package/dist/shapes/cylinder.js +2 -2
  239. package/dist/shapes/cylinder.js.map +1 -1
  240. package/dist/shapes/plane.js +2 -2
  241. package/dist/shapes/plane.js.map +1 -1
  242. package/dist/shapes/shape.js +2 -1
  243. package/dist/shapes/shape.js.map +1 -1
  244. package/dist/shapes/sphere.js +2 -2
  245. package/dist/shapes/sphere.js.map +1 -1
  246. package/dist/shapes/tetrahedron.js +5 -6
  247. package/dist/shapes/tetrahedron.js.map +1 -1
  248. package/dist/shapes/torus.js +2 -2
  249. package/dist/shapes/torus.js.map +1 -1
  250. package/dist/utility/aabbtree.js +1 -1
  251. package/dist/utility/aabbtree.js.map +1 -1
  252. package/dist/utility/blueprint/common/constants.js +578 -104
  253. package/dist/utility/blueprint/common/constants.js.map +1 -1
  254. package/dist/utility/blueprint/common/math.js +471 -9
  255. package/dist/utility/blueprint/common/math.js.map +1 -1
  256. package/dist/utility/blueprint/common.js +1 -1
  257. package/dist/utility/blueprint/common.js.map +1 -1
  258. package/dist/utility/blueprint/material/func.js +9 -5
  259. package/dist/utility/blueprint/material/func.js.map +1 -1
  260. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  261. package/dist/utility/blueprint/material/ir.js +288 -80
  262. package/dist/utility/blueprint/material/ir.js.map +1 -1
  263. package/dist/utility/blueprint/material/pbr.js +92 -4
  264. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  265. package/dist/utility/blueprint/material/texture.js +62 -45
  266. package/dist/utility/blueprint/material/texture.js.map +1 -1
  267. package/dist/utility/blueprint/node.js +28 -1
  268. package/dist/utility/blueprint/node.js.map +1 -1
  269. package/dist/utility/bounding_volume.js.map +1 -1
  270. package/dist/utility/debug.js.map +1 -1
  271. package/dist/utility/draco/decoder.js.map +1 -1
  272. package/dist/utility/misc.js +1 -1
  273. package/dist/utility/misc.js.map +1 -1
  274. package/dist/utility/panorama.js.map +1 -1
  275. package/dist/utility/pmrem.js.map +1 -1
  276. package/dist/utility/rendermipmap.js.map +1 -1
  277. package/dist/utility/serialization/json.js +19 -15
  278. package/dist/utility/serialization/json.js.map +1 -1
  279. package/dist/utility/serialization/manager.js +89 -22
  280. package/dist/utility/serialization/manager.js.map +1 -1
  281. package/dist/utility/serialization/scene/animation.js +23 -21
  282. package/dist/utility/serialization/scene/animation.js.map +1 -1
  283. package/dist/utility/serialization/scene/batch.js +4 -3
  284. package/dist/utility/serialization/scene/batch.js.map +1 -1
  285. package/dist/utility/serialization/scene/camera.js +97 -9
  286. package/dist/utility/serialization/scene/camera.js.map +1 -1
  287. package/dist/utility/serialization/scene/common.js +102 -28
  288. package/dist/utility/serialization/scene/common.js.map +1 -1
  289. package/dist/utility/serialization/scene/light.js +14 -12
  290. package/dist/utility/serialization/scene/light.js.map +1 -1
  291. package/dist/utility/serialization/scene/material.js +154 -26
  292. package/dist/utility/serialization/scene/material.js.map +1 -1
  293. package/dist/utility/serialization/scene/mesh.js +71 -100
  294. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  295. package/dist/utility/serialization/scene/misc.js +3 -2
  296. package/dist/utility/serialization/scene/misc.js.map +1 -1
  297. package/dist/utility/serialization/scene/node.js +42 -9
  298. package/dist/utility/serialization/scene/node.js.map +1 -1
  299. package/dist/utility/serialization/scene/particle.js +7 -5
  300. package/dist/utility/serialization/scene/particle.js.map +1 -1
  301. package/dist/utility/serialization/scene/primitive.js +18 -15
  302. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  303. package/dist/utility/serialization/scene/scene.js +3 -2
  304. package/dist/utility/serialization/scene/scene.js.map +1 -1
  305. package/dist/utility/serialization/scene/sprite.js +164 -0
  306. package/dist/utility/serialization/scene/sprite.js.map +1 -0
  307. package/dist/utility/serialization/scene/terrain.js +8 -6
  308. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  309. package/dist/utility/serialization/scene/water.js +11 -9
  310. package/dist/utility/serialization/scene/water.js.map +1 -1
  311. package/dist/utility/serialization/types.js +6 -0
  312. package/dist/utility/serialization/types.js.map +1 -0
  313. package/dist/utility/shprojector.js.map +1 -1
  314. package/dist/utility/textures/ggxlut.js.map +1 -1
  315. package/dist/utility/textures/gradientnoise.js.map +1 -1
  316. package/dist/utility/textures/randomnoise.js.map +1 -1
  317. package/dist/values.js +14 -14
  318. package/dist/values.js.map +1 -1
  319. package/package.json +80 -80
@@ -1 +1 @@
1
- {"version":3,"file":"abuffer_oit.js","sources":["../../src/render/abuffer_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n DeviceViewport,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport type { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { ShaderHelper } from '../material';\r\nimport { Disposable } from '@zephyr3d/base';\r\n\r\n/**\r\n * per-pixel linked list OIT renderer using ABuffer.\r\n *\r\n * @remarks\r\n * The ABuffer OIT renderer only supports WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class ABufferOIT extends Disposable implements OIT {\r\n /** Type name of ABufferOIT */\r\n public static readonly type = 'ab';\r\n public static readonly usePremultipliedAlpha = true;\r\n private static readonly MAX_FRAGMENT_LAYERS = 75;\r\n private static _compositeProgram: GPUProgram = null;\r\n private static _compositeBindGroup: BindGroup = null;\r\n private static _compositeRenderStates: RenderStateSet = null;\r\n private static _ubAlignment = 0;\r\n private _nodeBuffer: GPUDataBuffer;\r\n private _headStagingBuffer: GPUDataBuffer;\r\n private _headBuffer: GPUDataBuffer;\r\n private _scissorOffsetBuffer: GPUDataBuffer;\r\n private readonly _numLayers: number;\r\n private _screenSize: Uint32Array<ArrayBuffer>;\r\n private _hash: string;\r\n private readonly _debug: boolean;\r\n private _scissorSlices: number;\r\n private _scissorHeight: number;\r\n private _currentPass: number;\r\n private _savedScissor: DeviceViewport;\r\n /**\r\n * Creates an instance of ABufferOIT class\r\n *\r\n * @param numLayers - How many transparent layers, default is 16\r\n */\r\n constructor(numLayers = 16) {\r\n super();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer = null;\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer = null;\r\n this._numLayers = numLayers;\r\n this._screenSize = new Uint32Array([0xffffffff, 0xffffffff]);\r\n this._hash = null;\r\n this._debug = false;\r\n this._scissorSlices = 0;\r\n this._scissorHeight = 0;\r\n this._savedScissor = null;\r\n this._currentPass = 0;\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType(): string {\r\n return ABufferOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(deviceType: string): boolean {\r\n return deviceType === 'webgpu';\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return ABufferOIT.usePremultipliedAlpha;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(ctx: DrawContext): number {\r\n const device = ctx.device;\r\n this._savedScissor = device.getScissor();\r\n const ubAlignment = (ABufferOIT._ubAlignment =\r\n device.getDeviceCaps().shaderCaps.uniformBufferOffsetAlignment);\r\n const viewport = device.getViewport();\r\n const screenWidth = device.screenToDevice(viewport.width);\r\n const screenHeight = device.screenToDevice(Math.max(viewport.height, 1));\r\n if (screenWidth !== this._screenSize[0] || screenHeight !== this._screenSize[1]) {\r\n // Resize buffers if viewport was changed\r\n this._screenSize[0] = screenWidth;\r\n this._screenSize[1] = screenHeight;\r\n // compute scissor slices\r\n const maxBufferSize = device.getDeviceCaps().shaderCaps.maxStorageBufferSize;\r\n const bytesPerLine = screenWidth * 4 * 4 * this._numLayers;\r\n this._scissorHeight = (maxBufferSize / bytesPerLine) >> 0;\r\n this._scissorSlices = Math.ceil(screenHeight / this._scissorHeight);\r\n const offsetBufferSize = ubAlignment * this._scissorSlices;\r\n const offsetBuffer = new Uint32Array(offsetBufferSize >> 2);\r\n for (let i = 0; i < this._scissorSlices; i++) {\r\n offsetBuffer[i * (ubAlignment >> 2)] = i * this._scissorHeight;\r\n }\r\n if (!this._scissorOffsetBuffer || this._scissorOffsetBuffer.byteLength < offsetBuffer.byteLength) {\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = device.createBuffer(offsetBuffer.byteLength, { usage: 'uniform' });\r\n }\r\n this._scissorOffsetBuffer.bufferSubData(0, offsetBuffer);\r\n // resize node buffer\r\n const size = screenWidth * this._scissorHeight * 4;\r\n const nodeBufferSize = size * 4 * this._numLayers;\r\n if (!this._nodeBuffer || nodeBufferSize > this._nodeBuffer.byteLength) {\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = device.createBuffer(nodeBufferSize, { storage: true, usage: 'uniform' });\r\n }\r\n // resize head buffer\r\n const headBufferSize = size + 4;\r\n if (!this._headBuffer || headBufferSize > this._headBuffer.byteLength) {\r\n this._headBuffer?.dispose();\r\n this._headBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n const tmpArray = new Uint32Array(headBufferSize >> 2);\r\n tmpArray.fill(0xffffffff);\r\n this._headStagingBuffer.bufferSubData(0, tmpArray);\r\n }\r\n }\r\n return this._scissorSlices;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(ctx: DrawContext) {\r\n // Restore scissor rect\r\n ctx.device.setScissor(this._savedScissor);\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.Z_AB_scissorOffset = pb.uint().uniformBuffer(2);\r\n scope.Z_AB_nodeBuffer = pb.uvec4[0]().storageBuffer(2);\r\n scope.Z_AB_headImage = pb.atomic_uint[0]().storageBuffer(2);\r\n scope.Z_AB_screenSize = pb.uint().uniform(2);\r\n scope.Z_AB_depthTexture = pb.tex2D().uniform(2);\r\n scope.$outputs.outColor = pb.vec4();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, pass: number) {\r\n this._currentPass = pass;\r\n const device = ctx.device;\r\n const scissorY = pass * this._scissorHeight;\r\n const scissorH =\r\n Math.min((pass + 1) * this._scissorHeight, this._screenSize[1]) - pass * this._scissorHeight;\r\n device.setScissor([\r\n 0,\r\n device.deviceToScreen(this._screenSize[1] - scissorY - scissorH),\r\n device.deviceToScreen(this._screenSize[0]),\r\n device.deviceToScreen(scissorH)\r\n ]);\r\n device.copyBuffer(this._headStagingBuffer, this._headBuffer, 0, 0, this._headStagingBuffer.byteLength);\r\n // Update render hash\r\n this._hash = `${this.getType()}#${this._nodeBuffer.uid}#${this._headBuffer.uid}#${\r\n this._scissorOffsetBuffer.uid\r\n }#${pass}`;\r\n if (this._debug) {\r\n const data = new Uint8Array(this._headBuffer.byteLength);\r\n const readBuffer = device.createBuffer(this._headBuffer.byteLength, { usage: 'read' });\r\n device.copyBuffer(this._headBuffer, readBuffer, 0, 0, this._headBuffer.byteLength);\r\n readBuffer.getBufferSubData(data).then(() => {\r\n const uint = new Uint32Array(data.buffer);\r\n for (let i = 0; i < uint.length; i++) {\r\n if (uint[i] !== 0) {\r\n console.error('Clear head buffer failed');\r\n break;\r\n }\r\n }\r\n readBuffer.dispose();\r\n });\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, pass: number) {\r\n const device = ctx.device;\r\n ABufferOIT.getCompositeProgram(device);\r\n const lastBindGroup = device.getBindGroup(0);\r\n device.setProgram(ABufferOIT.getCompositeProgram(device));\r\n const bindGroup = ABufferOIT._compositeBindGroup;\r\n bindGroup.setBuffer(\r\n 'scissorOffset',\r\n this._scissorOffsetBuffer,\r\n 0,\r\n pass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('headBuffer', this._headBuffer);\r\n bindGroup.setBuffer('nodeBuffer', this._nodeBuffer);\r\n bindGroup.setValue('screenWidth', this._screenSize[0]);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad(ABufferOIT._compositeRenderStates);\r\n device.setBindGroup(0, lastBindGroup[0], lastBindGroup[1]);\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash(): string {\r\n return this._hash;\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(ctx: DrawContext, bindGroup: BindGroup) {\r\n bindGroup.setBuffer('Z_AB_nodeBuffer', this._nodeBuffer);\r\n bindGroup.setBuffer(\r\n 'Z_AB_scissorOffset',\r\n this._scissorOffsetBuffer,\r\n 0,\r\n this._currentPass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('Z_AB_headImage', this._headBuffer);\r\n bindGroup.setValue('Z_AB_screenSize', this._screenSize[0]);\r\n bindGroup.setTexture('Z_AB_depthTexture', ctx.linearDepthTexture);\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n // linear depth of current fragment\r\n scope.$l.fragDepth = ShaderHelper.nonLinearDepthToLinearNormalized(scope, scope.$builtins.fragCoord.z);\r\n // linear depth in depth texture\r\n scope.$l.linearDepth = pb.textureLoad(\r\n scope.Z_AB_depthTexture,\r\n pb.ivec2(scope.$builtins.fragCoord.xy),\r\n 0\r\n ).r;\r\n // saved to buffer only if nothing is infront\r\n scope.$if(pb.lessThan(scope.fragDepth, scope.linearDepth), function () {\r\n this.$l.Z_AB_pixelCount = pb.atomicAdd(this.Z_AB_headImage.at(0), 1);\r\n this.$l.Z_AB_nodeOffset = this.Z_AB_pixelCount;\r\n // save if index not exceeded\r\n this.$if(pb.lessThan(this.Z_AB_nodeOffset, pb.arrayLength(this.Z_AB_nodeBuffer)), function () {\r\n this.$l.Z_AB_headOffset = pb.add(\r\n pb.mul(this.Z_AB_screenSize, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.Z_AB_scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n this.$l.Z_AB_oldHead = pb.atomicExchange(\r\n this.Z_AB_headImage.at(pb.add(this.Z_AB_headOffset, 1)),\r\n this.Z_AB_nodeOffset\r\n );\r\n this.$l.Z_AB_colorScale = pb.floatBitsToUint(pb.length(color.rgb));\r\n this.$l.Z_AB_color = pb.pack4x8unorm(pb.vec4(pb.normalize(color.rgb), pb.clamp(color.a, 0, 1)));\r\n this.$l.Z_AB_depth = pb.floatBitsToUint(this.fragDepth);\r\n this.Z_AB_nodeBuffer.setAt(\r\n this.Z_AB_nodeOffset,\r\n pb.uvec4(this.Z_AB_color, this.Z_AB_colorScale, this.Z_AB_depth, this.Z_AB_oldHead)\r\n );\r\n pb.discard();\r\n });\r\n });\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const stencilStates = rs.useStencilState();\r\n stencilStates.enable(true);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(1);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.scissorOffset = pb.uint().uniformBuffer(0);\r\n this.headBuffer = pb.uint[0]().storageBuffer(0);\r\n this.nodeBuffer = pb.uvec4[0]().storageBuffer(0);\r\n this.screenWidth = pb.uint().uniform(0);\r\n pb.func('unpackColor', [pb.uvec4('x')], function () {\r\n this.$l.colorNorm = pb.unpack4x8unorm(this.x.x);\r\n this.$l.colorScale = pb.uintBitsToFloat(this.x.y);\r\n this.$return(pb.vec4(pb.mul(this.colorNorm.rgb, this.colorScale), this.colorNorm.a));\r\n });\r\n pb.main(function () {\r\n this.$l.fragmentArray = pb.uvec4[ABufferOIT.MAX_FRAGMENT_LAYERS]();\r\n this.$l.fragmentArrayLen = pb.uint(0);\r\n this.$l.offset = pb.add(\r\n pb.mul(this.screenWidth, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n //this.$l.head = this.headBuffer.at(this.offset);\r\n this.$l.head = this.headBuffer.at(pb.add(this.offset, 1));\r\n this.$while(\r\n pb.and(\r\n pb.lessThan(this.fragmentArrayLen, ABufferOIT.MAX_FRAGMENT_LAYERS),\r\n pb.notEqual(this.head, 0xffffffff)\r\n ),\r\n function () {\r\n this.fragmentArray.setAt(this.fragmentArrayLen, this.nodeBuffer.at(this.head));\r\n this.head = this.fragmentArray.at(this.fragmentArrayLen).w;\r\n this.fragmentArrayLen = pb.add(this.fragmentArrayLen, 1);\r\n }\r\n );\r\n this.$if(pb.equal(this.fragmentArrayLen, 0), function () {\r\n this.$outputs.outColor = pb.vec4(0, 0, 0, 1);\r\n }).$else(function () {\r\n // bubble sort\r\n this.$for(pb.uint('i'), 0, pb.sub(this.fragmentArrayLen, 1), function () {\r\n this.$for(pb.uint('j'), 0, pb.sub(pb.sub(this.fragmentArrayLen, 1), this.i), function () {\r\n this.$l.a = this.fragmentArray.at(this.j);\r\n this.$l.b = this.fragmentArray.at(pb.add(this.j, 1));\r\n this.$if(pb.greaterThan(this.a.z, this.b.z), function () {\r\n this.fragmentArray.setAt(this.j, this.b);\r\n this.fragmentArray.setAt(pb.add(this.j, 1), this.a);\r\n });\r\n });\r\n });\r\n // under operator blending\r\n this.$l.c0 = this.unpackColor(this.fragmentArray[0]);\r\n this.$l.c_dst = ABufferOIT.usePremultipliedAlpha ? this.c0.rgb : pb.mul(this.c0.rgb, this.c0.a);\r\n this.$l.a_dst = pb.sub(1, this.c0.a);\r\n this.$for(pb.uint('i'), 1, this.fragmentArrayLen, function () {\r\n this.$l.c = this.unpackColor(this.fragmentArray.at(this.i));\r\n if (ABufferOIT.usePremultipliedAlpha) {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.a_dst));\r\n } else {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.c.a, this.a_dst));\r\n }\r\n this.a_dst = pb.mul(this.a_dst, pb.sub(1, this.c.a));\r\n });\r\n this.$outputs.outColor = pb.vec4(this.c_dst, this.a_dst);\r\n });\r\n });\r\n }\r\n });\r\n this._compositeProgram.name = '@ABufferOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n const stencilStates = this._compositeRenderStates.useStencilState();\r\n stencilStates.enable(false);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(0);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n return this._compositeProgram;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = null;\r\n this._headBuffer?.dispose();\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = null;\r\n this._hash = null;\r\n this._savedScissor = null;\r\n }\r\n}\r\n"],"names":["ABufferOIT","Disposable","type","usePremultipliedAlpha","MAX_FRAGMENT_LAYERS","_compositeProgram","_compositeBindGroup","_compositeRenderStates","_ubAlignment","_nodeBuffer","_headStagingBuffer","_headBuffer","_scissorOffsetBuffer","_numLayers","_screenSize","_hash","_debug","_scissorSlices","_scissorHeight","_currentPass","_savedScissor","numLayers","Uint32Array","getType","supportDevice","deviceType","wantsPremultipliedAlpha","begin","ctx","device","getScissor","ubAlignment","getDeviceCaps","shaderCaps","uniformBufferOffsetAlignment","viewport","getViewport","screenWidth","screenToDevice","width","screenHeight","Math","max","height","maxBufferSize","maxStorageBufferSize","bytesPerLine","ceil","offsetBufferSize","offsetBuffer","i","byteLength","dispose","createBuffer","usage","bufferSubData","size","nodeBufferSize","storage","headBufferSize","tmpArray","fill","end","setScissor","setupFragmentOutput","scope","pb","$builder","Z_AB_scissorOffset","uint","uniformBuffer","Z_AB_nodeBuffer","uvec4","storageBuffer","Z_AB_headImage","atomic_uint","Z_AB_screenSize","uniform","Z_AB_depthTexture","tex2D","$outputs","outColor","vec4","beginPass","pass","scissorY","scissorH","min","deviceToScreen","copyBuffer","uid","data","Uint8Array","readBuffer","getBufferSubData","then","buffer","length","console","error","endPass","getCompositeProgram","lastBindGroup","getBindGroup","setProgram","bindGroup","setBuffer","setValue","setBindGroup","drawFullscreenQuad","calculateHash","applyUniforms","setTexture","linearDepthTexture","outputFragmentColor","color","$l","fragDepth","ShaderHelper","nonLinearDepthToLinearNormalized","$builtins","fragCoord","z","linearDepth","textureLoad","ivec2","xy","r","$if","lessThan","Z_AB_pixelCount","atomicAdd","at","Z_AB_nodeOffset","arrayLength","Z_AB_headOffset","add","mul","sub","y","x","Z_AB_oldHead","atomicExchange","Z_AB_colorScale","floatBitsToUint","rgb","Z_AB_color","pack4x8unorm","normalize","clamp","a","Z_AB_depth","setAt","discard","setRenderStates","rs","stencilStates","useStencilState","enable","setFrontCompareFunc","setBackCompareFunc","setFrontOp","setBackOp","setReference","setReadMask","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","neg","fragment","scissorOffset","headBuffer","nodeBuffer","func","colorNorm","unpack4x8unorm","colorScale","uintBitsToFloat","$return","fragmentArray","fragmentArrayLen","offset","head","$while","and","notEqual","w","equal","$else","$for","j","b","greaterThan","c0","unpackColor","c_dst","a_dst","c","name","createBindGroup","bindGroupLayouts","createRenderStateSet","useBlendingState","setBlendFuncRGB","setBlendFuncAlpha","useDepthState","enableTest","enableWrite","onDispose"],"mappings":";;;;;;;;;;;;;;;;;AAiBA;;;;;;;IAQO,MAAMA,UAAmBC,SAAAA,UAAAA,CAAAA;mCAE9B,OAAuBC,IAAAA,GAAO,IAAK;AACnC,IAAA,OAAuBC,wBAAwB,IAAK;AACpD,IAAA,OAAwBC,sBAAsB,EAAG;AACjD,IAAA,OAAeC,oBAAgC,IAAK;AACpD,IAAA,OAAeC,sBAAiC,IAAK;AACrD,IAAA,OAAeC,yBAAyC,IAAK;AAC7D,IAAA,OAAeC,eAAe,CAAE;IACxBC,WAA2B;IAC3BC,kBAAkC;IAClCC,WAA2B;IAC3BC,oBAAoC;IAC3BC,UAAmB;IAC5BC,WAAsC;IACtCC,KAAc;IACLC,MAAgB;IACzBC,cAAuB;IACvBC,cAAuB;IACvBC,YAAqB;IACrBC,aAA8B;AACtC;;;;MAKA,WAAA,CAAYC,SAAY,GAAA,EAAE,CAAE;QAC1B,KAAK,EAAA;QACL,IAAI,CAACZ,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,kBAAkB,GAAG,IAAA;QAC1B,IAAI,CAACC,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,oBAAoB,GAAG,IAAA;QAC5B,IAAI,CAACC,UAAU,GAAGQ,SAAAA;AAClB,QAAA,IAAI,CAACP,WAAW,GAAG,IAAIQ,WAAY,CAAA;AAAC,YAAA,UAAA;AAAY,YAAA;AAAW,SAAA,CAAA;QAC3D,IAAI,CAACP,KAAK,GAAG,IAAA;QACb,IAAI,CAACC,MAAM,GAAG,KAAA;QACd,IAAI,CAACC,cAAc,GAAG,CAAA;QACtB,IAAI,CAACC,cAAc,GAAG,CAAA;QACtB,IAAI,CAACE,aAAa,GAAG,IAAA;QACrB,IAAI,CAACD,YAAY,GAAG,CAAA;AACtB;AACA;;AAEC,MACDI,OAAkB,GAAA;AAChB,QAAA,OAAOvB,WAAWE,IAAI;AACxB;AACA;;MAGAsB,aAAAA,CAAcC,UAAkB,EAAW;AACzC,QAAA,OAAOA,UAAe,KAAA,QAAA;AACxB;AACA;;AAEC,MACDC,uBAA0B,GAAA;AACxB,QAAA,OAAO1B,WAAWG,qBAAqB;AACzC;AACA;;MAGAwB,KAAAA,CAAMC,GAAgB,EAAU;QAC9B,MAAMC,MAAAA,GAASD,IAAIC,MAAM;AACzB,QAAA,IAAI,CAACT,aAAa,GAAGS,MAAAA,CAAOC,UAAU,EAAA;QACtC,MAAMC,WAAAA,GAAe/B,WAAWQ,YAAY,GAC1CqB,OAAOG,aAAa,EAAA,CAAGC,UAAU,CAACC,4BAA4B;QAChE,MAAMC,QAAAA,GAAWN,OAAOO,WAAW,EAAA;AACnC,QAAA,MAAMC,WAAcR,GAAAA,MAAAA,CAAOS,cAAc,CAACH,SAASI,KAAK,CAAA;QACxD,MAAMC,YAAAA,GAAeX,OAAOS,cAAc,CAACG,KAAKC,GAAG,CAACP,QAASQ,CAAAA,MAAM,EAAE,CAAA,CAAA,CAAA;AACrE,QAAA,IAAIN,WAAgB,KAAA,IAAI,CAACvB,WAAW,CAAC,CAAA,CAAE,IAAI0B,YAAAA,KAAiB,IAAI,CAAC1B,WAAW,CAAC,EAAE,EAAE;;AAE/E,YAAA,IAAI,CAACA,WAAW,CAAC,CAAA,CAAE,GAAGuB,WAAAA;AACtB,YAAA,IAAI,CAACvB,WAAW,CAAC,CAAA,CAAE,GAAG0B,YAAAA;;AAEtB,YAAA,MAAMI,gBAAgBf,MAAOG,CAAAA,aAAa,EAAGC,CAAAA,UAAU,CAACY,oBAAoB;AAC5E,YAAA,MAAMC,eAAeT,WAAc,GAAA,CAAA,GAAI,CAAI,GAAA,IAAI,CAACxB,UAAU;AAC1D,YAAA,IAAI,CAACK,cAAc,GAAI0B,gBAAgBE,YAAiB,IAAA,CAAA;YACxD,IAAI,CAAC7B,cAAc,GAAGwB,IAAAA,CAAKM,IAAI,CAACP,YAAAA,GAAe,IAAI,CAACtB,cAAc,CAAA;AAClE,YAAA,MAAM8B,gBAAmBjB,GAAAA,WAAAA,GAAc,IAAI,CAACd,cAAc;YAC1D,MAAMgC,YAAAA,GAAe,IAAI3B,WAAAA,CAAY0B,gBAAoB,IAAA,CAAA,CAAA;YACzD,IAAK,IAAIE,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAI,CAACjC,cAAc,EAAEiC,CAAK,EAAA,CAAA;gBAC5CD,YAAY,CAACC,CAAKnB,IAAAA,WAAe,IAAA,CAAA,EAAG,GAAGmB,CAAAA,GAAI,IAAI,CAAChC,cAAc;AAChE;AACA,YAAA,IAAI,CAAC,IAAI,CAACN,oBAAoB,IAAI,IAAI,CAACA,oBAAoB,CAACuC,UAAU,GAAGF,YAAAA,CAAaE,UAAU,EAAE;gBAChG,IAAI,CAACvC,oBAAoB,EAAEwC,OAAAA,EAAAA;gBAC3B,IAAI,CAACxC,oBAAoB,GAAGiB,MAAAA,CAAOwB,YAAY,CAACJ,YAAAA,CAAaE,UAAU,EAAE;oBAAEG,KAAO,EAAA;AAAU,iBAAA,CAAA;AAC9F;AACA,YAAA,IAAI,CAAC1C,oBAAoB,CAAC2C,aAAa,CAAC,CAAGN,EAAAA,YAAAA,CAAAA;;AAE3C,YAAA,MAAMO,IAAOnB,GAAAA,WAAAA,GAAc,IAAI,CAACnB,cAAc,GAAG,CAAA;AACjD,YAAA,MAAMuC,cAAiBD,GAAAA,IAAAA,GAAO,CAAI,GAAA,IAAI,CAAC3C,UAAU;YACjD,IAAI,CAAC,IAAI,CAACJ,WAAW,IAAIgD,cAAiB,GAAA,IAAI,CAAChD,WAAW,CAAC0C,UAAU,EAAE;gBACrE,IAAI,CAAC1C,WAAW,EAAE2C,OAAAA,EAAAA;AAClB,gBAAA,IAAI,CAAC3C,WAAW,GAAGoB,MAAOwB,CAAAA,YAAY,CAACI,cAAgB,EAAA;oBAAEC,OAAS,EAAA,IAAA;oBAAMJ,KAAO,EAAA;AAAU,iBAAA,CAAA;AAC3F;;AAEA,YAAA,MAAMK,iBAAiBH,IAAO,GAAA,CAAA;YAC9B,IAAI,CAAC,IAAI,CAAC7C,WAAW,IAAIgD,cAAiB,GAAA,IAAI,CAAChD,WAAW,CAACwC,UAAU,EAAE;gBACrE,IAAI,CAACxC,WAAW,EAAEyC,OAAAA,EAAAA;AAClB,gBAAA,IAAI,CAACzC,WAAW,GAAGkB,MAAOwB,CAAAA,YAAY,CAACM,cAAgB,EAAA;oBAAED,OAAS,EAAA,IAAA;oBAAMJ,KAAO,EAAA;AAAU,iBAAA,CAAA;gBACzF,IAAI,CAAC5C,kBAAkB,EAAE0C,OAAAA,EAAAA;AACzB,gBAAA,IAAI,CAAC1C,kBAAkB,GAAGmB,MAAOwB,CAAAA,YAAY,CAACM,cAAgB,EAAA;oBAAED,OAAS,EAAA,IAAA;oBAAMJ,KAAO,EAAA;AAAU,iBAAA,CAAA;gBAChG,MAAMM,QAAAA,GAAW,IAAItC,WAAAA,CAAYqC,cAAkB,IAAA,CAAA,CAAA;AACnDC,gBAAAA,QAAAA,CAASC,IAAI,CAAC,UAAA,CAAA;AACd,gBAAA,IAAI,CAACnD,kBAAkB,CAAC6C,aAAa,CAAC,CAAGK,EAAAA,QAAAA,CAAAA;AAC3C;AACF;QACA,OAAO,IAAI,CAAC3C,cAAc;AAC5B;AACA;;MAGA6C,GAAAA,CAAIlC,GAAgB,EAAE;;AAEpBA,QAAAA,GAAAA,CAAIC,MAAM,CAACkC,UAAU,CAAC,IAAI,CAAC3C,aAAa,CAAA;AAC1C;AACA;;MAGA4C,mBAAAA,CAAoBC,KAAoB,EAAE;QACxC,MAAMC,EAAAA,GAAKD,MAAME,QAAQ;AACzBF,QAAAA,KAAAA,CAAMG,kBAAkB,GAAGF,EAAAA,CAAGG,IAAI,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;QACnDL,KAAMM,CAAAA,eAAe,GAAGL,EAAGM,CAAAA,KAAK,CAAC,CAAE,CAAA,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;QACpDR,KAAMS,CAAAA,cAAc,GAAGR,EAAGS,CAAAA,WAAW,CAAC,CAAE,CAAA,EAAA,CAAGF,aAAa,CAAC,CAAA,CAAA;AACzDR,QAAAA,KAAAA,CAAMW,eAAe,GAAGV,EAAAA,CAAGG,IAAI,EAAA,CAAGQ,OAAO,CAAC,CAAA,CAAA;AAC1CZ,QAAAA,KAAAA,CAAMa,iBAAiB,GAAGZ,EAAAA,CAAGa,KAAK,EAAA,CAAGF,OAAO,CAAC,CAAA,CAAA;AAC7CZ,QAAAA,KAAAA,CAAMe,QAAQ,CAACC,QAAQ,GAAGf,GAAGgB,IAAI,EAAA;AACnC;AACA;;AAEC,MACDC,SAAUvD,CAAAA,GAAgB,EAAEwD,IAAY,EAAE;QACxC,IAAI,CAACjE,YAAY,GAAGiE,IAAAA;QACpB,MAAMvD,MAAAA,GAASD,IAAIC,MAAM;AACzB,QAAA,MAAMwD,QAAWD,GAAAA,IAAAA,GAAO,IAAI,CAAClE,cAAc;QAC3C,MAAMoE,QAAAA,GACJ7C,KAAK8C,GAAG,CAAC,CAACH,IAAAA,GAAO,CAAA,IAAK,IAAI,CAAClE,cAAc,EAAE,IAAI,CAACJ,WAAW,CAAC,EAAE,CAAIsE,GAAAA,IAAAA,GAAO,IAAI,CAAClE,cAAc;AAC9FW,QAAAA,MAAAA,CAAOkC,UAAU,CAAC;AAChB,YAAA,CAAA;YACAlC,MAAO2D,CAAAA,cAAc,CAAC,IAAI,CAAC1E,WAAW,CAAC,CAAA,CAAE,GAAGuE,QAAWC,GAAAA,QAAAA,CAAAA;AACvDzD,YAAAA,MAAAA,CAAO2D,cAAc,CAAC,IAAI,CAAC1E,WAAW,CAAC,CAAE,CAAA,CAAA;AACzCe,YAAAA,MAAAA,CAAO2D,cAAc,CAACF,QAAAA;AACvB,SAAA,CAAA;AACDzD,QAAAA,MAAAA,CAAO4D,UAAU,CAAC,IAAI,CAAC/E,kBAAkB,EAAE,IAAI,CAACC,WAAW,EAAE,GAAG,CAAG,EAAA,IAAI,CAACD,kBAAkB,CAACyC,UAAU,CAAA;;AAErG,QAAA,IAAI,CAACpC,KAAK,GAAG,CAAA,EAAG,IAAI,CAACQ,OAAO,EAAG,CAAA,CAAC,EAAE,IAAI,CAACd,WAAW,CAACiF,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC/E,WAAW,CAAC+E,GAAG,CAAC,CAAC,EAC9E,IAAI,CAAC9E,oBAAoB,CAAC8E,GAAG,CAC9B,CAAC,EAAEN,IAAM,CAAA,CAAA;QACV,IAAI,IAAI,CAACpE,MAAM,EAAE;AACf,YAAA,MAAM2E,OAAO,IAAIC,UAAAA,CAAW,IAAI,CAACjF,WAAW,CAACwC,UAAU,CAAA;YACvD,MAAM0C,UAAAA,GAAahE,OAAOwB,YAAY,CAAC,IAAI,CAAC1C,WAAW,CAACwC,UAAU,EAAE;gBAAEG,KAAO,EAAA;AAAO,aAAA,CAAA;AACpFzB,YAAAA,MAAAA,CAAO4D,UAAU,CAAC,IAAI,CAAC9E,WAAW,EAAEkF,UAAY,EAAA,CAAA,EAAG,CAAG,EAAA,IAAI,CAAClF,WAAW,CAACwC,UAAU,CAAA;AACjF0C,YAAAA,UAAAA,CAAWC,gBAAgB,CAACH,IAAMI,CAAAA,CAAAA,IAAI,CAAC,IAAA;AACrC,gBAAA,MAAM1B,IAAO,GAAA,IAAI/C,WAAYqE,CAAAA,IAAAA,CAAKK,MAAM,CAAA;AACxC,gBAAA,IAAK,IAAI9C,CAAI,GAAA,CAAA,EAAGA,IAAImB,IAAK4B,CAAAA,MAAM,EAAE/C,CAAK,EAAA,CAAA;AACpC,oBAAA,IAAImB,IAAI,CAACnB,CAAE,CAAA,KAAK,CAAG,EAAA;AACjBgD,wBAAAA,OAAAA,CAAQC,KAAK,CAAC,0BAAA,CAAA;AACd,wBAAA;AACF;AACF;AACAN,gBAAAA,UAAAA,CAAWzC,OAAO,EAAA;AACpB,aAAA,CAAA;AACF;QACA,OAAO,IAAA;AACT;AACA;;AAEC,MACDgD,OAAQxE,CAAAA,GAAgB,EAAEwD,IAAY,EAAE;QACtC,MAAMvD,MAAAA,GAASD,IAAIC,MAAM;AACzB7B,QAAAA,UAAAA,CAAWqG,mBAAmB,CAACxE,MAAAA,CAAAA;QAC/B,MAAMyE,aAAAA,GAAgBzE,MAAO0E,CAAAA,YAAY,CAAC,CAAA,CAAA;AAC1C1E,QAAAA,MAAAA,CAAO2E,UAAU,CAACxG,UAAWqG,CAAAA,mBAAmB,CAACxE,MAAAA,CAAAA,CAAAA;QACjD,MAAM4E,SAAAA,GAAYzG,WAAWM,mBAAmB;AAChDmG,QAAAA,SAAAA,CAAUC,SAAS,CACjB,eACA,EAAA,IAAI,CAAC9F,oBAAoB,EACzB,CAAA,EACAwE,IAAOpF,GAAAA,UAAAA,CAAWQ,YAAY,EAC9BR,WAAWQ,YAAY,CAAA;AAEzBiG,QAAAA,SAAAA,CAAUC,SAAS,CAAC,YAAc,EAAA,IAAI,CAAC/F,WAAW,CAAA;AAClD8F,QAAAA,SAAAA,CAAUC,SAAS,CAAC,YAAc,EAAA,IAAI,CAACjG,WAAW,CAAA;AAClDgG,QAAAA,SAAAA,CAAUE,QAAQ,CAAC,aAAA,EAAe,IAAI,CAAC7F,WAAW,CAAC,CAAE,CAAA,CAAA;QACrDe,MAAO+E,CAAAA,YAAY,CAAC,CAAGH,EAAAA,SAAAA,CAAAA;AACvBI,QAAAA,kBAAAA,CAAmB7G,WAAWO,sBAAsB,CAAA;QACpDsB,MAAO+E,CAAAA,YAAY,CAAC,CAAGN,EAAAA,aAAa,CAAC,CAAE,CAAA,EAAEA,aAAa,CAAC,CAAE,CAAA,CAAA;AAC3D;AACA;;AAEC,MACDQ,aAAwB,GAAA;QACtB,OAAO,IAAI,CAAC/F,KAAK;AACnB;AACA;;AAEC,MACDgG,aAAcnF,CAAAA,GAAgB,EAAE6E,SAAoB,EAAE;AACpDA,QAAAA,SAAAA,CAAUC,SAAS,CAAC,iBAAmB,EAAA,IAAI,CAACjG,WAAW,CAAA;AACvDgG,QAAAA,SAAAA,CAAUC,SAAS,CACjB,oBAAA,EACA,IAAI,CAAC9F,oBAAoB,EACzB,CAAA,EACA,IAAI,CAACO,YAAY,GAAGnB,UAAAA,CAAWQ,YAAY,EAC3CR,WAAWQ,YAAY,CAAA;AAEzBiG,QAAAA,SAAAA,CAAUC,SAAS,CAAC,gBAAkB,EAAA,IAAI,CAAC/F,WAAW,CAAA;AACtD8F,QAAAA,SAAAA,CAAUE,QAAQ,CAAC,iBAAA,EAAmB,IAAI,CAAC7F,WAAW,CAAC,CAAE,CAAA,CAAA;AACzD2F,QAAAA,SAAAA,CAAUO,UAAU,CAAC,mBAAqBpF,EAAAA,GAAAA,CAAIqF,kBAAkB,CAAA;AAClE;AACA;;AAEC,MACDC,mBAAoBjD,CAAAA,KAA4B,EAAEkD,KAAkB,EAAE;QACpE,MAAMjD,EAAAA,GAAKD,MAAME,QAAQ;;AAEzBF,QAAAA,KAAAA,CAAMmD,EAAE,CAACC,SAAS,GAAGC,YAAaC,CAAAA,gCAAgC,CAACtD,KAAAA,EAAOA,KAAMuD,CAAAA,SAAS,CAACC,SAAS,CAACC,CAAC,CAAA;;QAErGzD,KAAMmD,CAAAA,EAAE,CAACO,WAAW,GAAGzD,GAAG0D,WAAW,CACnC3D,MAAMa,iBAAiB,EACvBZ,GAAG2D,KAAK,CAAC5D,MAAMuD,SAAS,CAACC,SAAS,CAACK,EAAE,CACrC,EAAA,CAAA,CAAA,CACAC,CAAC;;QAEH9D,KAAM+D,CAAAA,GAAG,CAAC9D,EAAAA,CAAG+D,QAAQ,CAAChE,MAAMoD,SAAS,EAAEpD,KAAM0D,CAAAA,WAAW,CAAG,EAAA,WAAA;AACzD,YAAA,IAAI,CAACP,EAAE,CAACc,eAAe,GAAGhE,EAAGiE,CAAAA,SAAS,CAAC,IAAI,CAACzD,cAAc,CAAC0D,EAAE,CAAC,CAAI,CAAA,EAAA,CAAA,CAAA;AAClE,YAAA,IAAI,CAAChB,EAAE,CAACiB,eAAe,GAAG,IAAI,CAACH,eAAe;;AAE9C,YAAA,IAAI,CAACF,GAAG,CAAC9D,EAAG+D,CAAAA,QAAQ,CAAC,IAAI,CAACI,eAAe,EAAEnE,GAAGoE,WAAW,CAAC,IAAI,CAAC/D,eAAe,CAAI,CAAA,EAAA,WAAA;AAChF,gBAAA,IAAI,CAAC6C,EAAE,CAACmB,eAAe,GAAGrE,EAAAA,CAAGsE,GAAG,CAC9BtE,EAAAA,CAAGuE,GAAG,CAAC,IAAI,CAAC7D,eAAe,EAAEV,GAAGwE,GAAG,CAACxE,GAAGG,IAAI,CAAC,IAAI,CAACmD,SAAS,CAACC,SAAS,CAACkB,CAAC,CAAA,EAAG,IAAI,CAACvE,kBAAkB,IAChGF,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmD,SAAS,CAACC,SAAS,CAACmB,CAAC,CAAA,CAAA;gBAEpC,IAAI,CAACxB,EAAE,CAACyB,YAAY,GAAG3E,GAAG4E,cAAc,CACtC,IAAI,CAACpE,cAAc,CAAC0D,EAAE,CAAClE,EAAAA,CAAGsE,GAAG,CAAC,IAAI,CAACD,eAAe,EAAE,CAAA,CAAA,CAAA,EACpD,IAAI,CAACF,eAAe,CAAA;AAEtB,gBAAA,IAAI,CAACjB,EAAE,CAAC2B,eAAe,GAAG7E,EAAAA,CAAG8E,eAAe,CAAC9E,EAAG+B,CAAAA,MAAM,CAACkB,KAAAA,CAAM8B,GAAG,CAAA,CAAA;gBAChE,IAAI,CAAC7B,EAAE,CAAC8B,UAAU,GAAGhF,EAAGiF,CAAAA,YAAY,CAACjF,EAAAA,CAAGgB,IAAI,CAAChB,GAAGkF,SAAS,CAACjC,KAAM8B,CAAAA,GAAG,CAAG/E,EAAAA,EAAAA,CAAGmF,KAAK,CAAClC,KAAAA,CAAMmC,CAAC,EAAE,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;gBAC3F,IAAI,CAAClC,EAAE,CAACmC,UAAU,GAAGrF,GAAG8E,eAAe,CAAC,IAAI,CAAC3B,SAAS,CAAA;gBACtD,IAAI,CAAC9C,eAAe,CAACiF,KAAK,CACxB,IAAI,CAACnB,eAAe,EACpBnE,EAAGM,CAAAA,KAAK,CAAC,IAAI,CAAC0E,UAAU,EAAE,IAAI,CAACH,eAAe,EAAE,IAAI,CAACQ,UAAU,EAAE,IAAI,CAACV,YAAY,CAAA,CAAA;AAEpF3E,gBAAAA,EAAAA,CAAGuF,OAAO,EAAA;AACZ,aAAA,CAAA;AACF,SAAA,CAAA;QACA,OAAO,IAAA;AACT;AACA;;MAGAC,eAAAA,CAAgBC,EAAkB,EAAE;QAClC,MAAMC,aAAAA,GAAgBD,GAAGE,eAAe,EAAA;AACxCD,QAAAA,aAAAA,CAAcE,MAAM,CAAC,IAAA,CAAA;AACrBF,QAAAA,aAAAA,CAAcG,mBAAmB,CAAC,QAAA,CAAA;AAClCH,QAAAA,aAAAA,CAAcI,kBAAkB,CAAC,QAAA,CAAA;QACjCJ,aAAcK,CAAAA,UAAU,CAAC,MAAA,EAAQ,MAAQ,EAAA,SAAA,CAAA;QACzCL,aAAcM,CAAAA,SAAS,CAAC,MAAA,EAAQ,MAAQ,EAAA,SAAA,CAAA;AACxCN,QAAAA,aAAAA,CAAcO,YAAY,CAAC,CAAA,CAAA;AAC3BP,QAAAA,aAAAA,CAAcQ,WAAW,CAAC,IAAA,CAAA;AAC5B;AACA,qBACA,OAAe/D,mBAAoBxE,CAAAA,MAAsB,EAAE;AACzD,QAAA,IAAI,CAAC,IAAI,CAACxB,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAACA,iBAAiB,GAAGwB,MAAAA,CAAOwI,kBAAkB,CAAC;AACjDC,gBAAAA,MAAAA,CAAAA,CAAOpG,EAAE,EAAA;oBACP,IAAI,CAACqG,OAAO,CAACC,GAAG,GAAGtG,EAAGuG,CAAAA,IAAI,EAAGC,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,oBAAA,IAAI,CAAC1F,QAAQ,CAAC2F,EAAE,GAAGzG,GAAGuG,IAAI,EAAA;AAC1BvG,oBAAAA,EAAAA,CAAG0G,IAAI,CAAC,WAAA;AACN,wBAAA,IAAI,CAACpD,SAAS,CAACqD,QAAQ,GAAG3G,EAAGgB,CAAAA,IAAI,CAAC,IAAI,CAACqF,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;wBACvD,IAAI,CAACxF,QAAQ,CAAC2F,EAAE,GAAGzG,EAAGsE,CAAAA,GAAG,CAACtE,EAAAA,CAAGuE,GAAG,CAAC,IAAI,CAAC8B,OAAO,CAACC,GAAG,CAAC1C,EAAE,EAAE,GAAA,CAAA,EAAM5D,EAAGuG,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;wBACpE,IAAI5I,MAAAA,CAAO3B,IAAI,KAAK,QAAU,EAAA;AAC5B,4BAAA,IAAI,CAACsH,SAAS,CAACqD,QAAQ,CAAClC,CAAC,GAAGzE,EAAAA,CAAG4G,GAAG,CAAC,IAAI,CAACtD,SAAS,CAACqD,QAAQ,CAAClC,CAAC,CAAA;AAC9D;AACF,qBAAA,CAAA;AACF,iBAAA;AACAoC,gBAAAA,QAAAA,CAAAA,CAAS7G,EAAE,EAAA;AACT,oBAAA,IAAI,CAACc,QAAQ,CAACC,QAAQ,GAAGf,GAAGgB,IAAI,EAAA;AAChC,oBAAA,IAAI,CAAC8F,aAAa,GAAG9G,GAAGG,IAAI,EAAA,CAAGC,aAAa,CAAC,CAAA,CAAA;oBAC7C,IAAI,CAAC2G,UAAU,GAAG/G,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAE,EAAGI,CAAAA,aAAa,CAAC,CAAA,CAAA;oBAC7C,IAAI,CAACyG,UAAU,GAAGhH,EAAAA,CAAGM,KAAK,CAAC,CAAA,CAAE,EAAGC,CAAAA,aAAa,CAAC,CAAA,CAAA;AAC9C,oBAAA,IAAI,CAACpC,WAAW,GAAG6B,GAAGG,IAAI,EAAA,CAAGQ,OAAO,CAAC,CAAA,CAAA;oBACrCX,EAAGiH,CAAAA,IAAI,CAAC,aAAe,EAAA;AAACjH,wBAAAA,EAAAA,CAAGM,KAAK,CAAC,GAAA;qBAAK,EAAE,WAAA;AACtC,wBAAA,IAAI,CAAC4C,EAAE,CAACgE,SAAS,GAAGlH,EAAAA,CAAGmH,cAAc,CAAC,IAAI,CAACzC,CAAC,CAACA,CAAC,CAAA;AAC9C,wBAAA,IAAI,CAACxB,EAAE,CAACkE,UAAU,GAAGpH,EAAAA,CAAGqH,eAAe,CAAC,IAAI,CAAC3C,CAAC,CAACD,CAAC,CAAA;wBAChD,IAAI,CAAC6C,OAAO,CAACtH,EAAAA,CAAGgB,IAAI,CAAChB,EAAAA,CAAGuE,GAAG,CAAC,IAAI,CAAC2C,SAAS,CAACnC,GAAG,EAAE,IAAI,CAACqC,UAAU,GAAG,IAAI,CAACF,SAAS,CAAC9B,CAAC,CAAA,CAAA;AACpF,qBAAA,CAAA;AACApF,oBAAAA,EAAAA,CAAG0G,IAAI,CAAC,WAAA;wBACN,IAAI,CAACxD,EAAE,CAACqE,aAAa,GAAGvH,GAAGM,KAAK,CAACxE,UAAWI,CAAAA,mBAAmB,CAAC,EAAA;AAChE,wBAAA,IAAI,CAACgH,EAAE,CAACsE,gBAAgB,GAAGxH,EAAAA,CAAGG,IAAI,CAAC,CAAA,CAAA;AACnC,wBAAA,IAAI,CAAC+C,EAAE,CAACuE,MAAM,GAAGzH,EAAAA,CAAGsE,GAAG,CACrBtE,EAAAA,CAAGuE,GAAG,CAAC,IAAI,CAACpG,WAAW,EAAE6B,GAAGwE,GAAG,CAACxE,GAAGG,IAAI,CAAC,IAAI,CAACmD,SAAS,CAACC,SAAS,CAACkB,CAAC,CAAA,EAAG,IAAI,CAACqC,aAAa,IACvF9G,EAAGG,CAAAA,IAAI,CAAC,IAAI,CAACmD,SAAS,CAACC,SAAS,CAACmB,CAAC,CAAA,CAAA;;AAGpC,wBAAA,IAAI,CAACxB,EAAE,CAACwE,IAAI,GAAG,IAAI,CAACX,UAAU,CAAC7C,EAAE,CAAClE,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACmD,MAAM,EAAE,CAAA,CAAA,CAAA;wBACtD,IAAI,CAACE,MAAM,CACT3H,EAAAA,CAAG4H,GAAG,CACJ5H,EAAAA,CAAG+D,QAAQ,CAAC,IAAI,CAACyD,gBAAgB,EAAE1L,UAAAA,CAAWI,mBAAmB,CAAA,EACjE8D,EAAG6H,CAAAA,QAAQ,CAAC,IAAI,CAACH,IAAI,EAAE,UAEzB,CAAA,CAAA,EAAA,WAAA;AACE,4BAAA,IAAI,CAACH,aAAa,CAACjC,KAAK,CAAC,IAAI,CAACkC,gBAAgB,EAAE,IAAI,CAACR,UAAU,CAAC9C,EAAE,CAAC,IAAI,CAACwD,IAAI,CAAA,CAAA;AAC5E,4BAAA,IAAI,CAACA,IAAI,GAAG,IAAI,CAACH,aAAa,CAACrD,EAAE,CAAC,IAAI,CAACsD,gBAAgB,EAAEM,CAAC;4BAC1D,IAAI,CAACN,gBAAgB,GAAGxH,EAAAA,CAAGsE,GAAG,CAAC,IAAI,CAACkD,gBAAgB,EAAE,CAAA,CAAA;AACxD,yBAAA,CAAA;wBAEF,IAAI,CAAC1D,GAAG,CAAC9D,EAAG+H,CAAAA,KAAK,CAAC,IAAI,CAACP,gBAAgB,EAAE,CAAI,CAAA,EAAA,WAAA;4BAC3C,IAAI,CAAC1G,QAAQ,CAACC,QAAQ,GAAGf,GAAGgB,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA;AAC5C,yBAAA,CAAA,CAAGgH,KAAK,CAAC,WAAA;;AAEP,4BAAA,IAAI,CAACC,IAAI,CAACjI,EAAAA,CAAGG,IAAI,CAAC,GAAA,CAAA,EAAM,CAAGH,EAAAA,EAAAA,CAAGwE,GAAG,CAAC,IAAI,CAACgD,gBAAgB,EAAE,CAAI,CAAA,EAAA,WAAA;gCAC3D,IAAI,CAACS,IAAI,CAACjI,EAAAA,CAAGG,IAAI,CAAC,GAAA,CAAA,EAAM,CAAGH,EAAAA,EAAAA,CAAGwE,GAAG,CAACxE,GAAGwE,GAAG,CAAC,IAAI,CAACgD,gBAAgB,EAAE,CAAI,CAAA,EAAA,IAAI,CAACxI,CAAC,CAAG,EAAA,WAAA;AAC3E,oCAAA,IAAI,CAACkE,EAAE,CAACkC,CAAC,GAAG,IAAI,CAACmC,aAAa,CAACrD,EAAE,CAAC,IAAI,CAACgE,CAAC,CAAA;AACxC,oCAAA,IAAI,CAAChF,EAAE,CAACiF,CAAC,GAAG,IAAI,CAACZ,aAAa,CAACrD,EAAE,CAAClE,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAAC4D,CAAC,EAAE,CAAA,CAAA,CAAA;AACjD,oCAAA,IAAI,CAACpE,GAAG,CAAC9D,EAAGoI,CAAAA,WAAW,CAAC,IAAI,CAAChD,CAAC,CAAC5B,CAAC,EAAE,IAAI,CAAC2E,CAAC,CAAC3E,CAAC,CAAG,EAAA,WAAA;wCAC3C,IAAI,CAAC+D,aAAa,CAACjC,KAAK,CAAC,IAAI,CAAC4C,CAAC,EAAE,IAAI,CAACC,CAAC,CAAA;AACvC,wCAAA,IAAI,CAACZ,aAAa,CAACjC,KAAK,CAACtF,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAAC4D,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC9C,CAAC,CAAA;AACpD,qCAAA,CAAA;AACF,iCAAA,CAAA;AACF,6BAAA,CAAA;;AAEA,4BAAA,IAAI,CAAClC,EAAE,CAACmF,EAAE,GAAG,IAAI,CAACC,WAAW,CAAC,IAAI,CAACf,aAAa,CAAC,CAAE,CAAA,CAAA;4BACnD,IAAI,CAACrE,EAAE,CAACqF,KAAK,GAAGzM,UAAWG,CAAAA,qBAAqB,GAAG,IAAI,CAACoM,EAAE,CAACtD,GAAG,GAAG/E,EAAAA,CAAGuE,GAAG,CAAC,IAAI,CAAC8D,EAAE,CAACtD,GAAG,EAAE,IAAI,CAACsD,EAAE,CAACjD,CAAC,CAAA;AAC9F,4BAAA,IAAI,CAAClC,EAAE,CAACsF,KAAK,GAAGxI,EAAAA,CAAGwE,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC6D,EAAE,CAACjD,CAAC,CAAA;4BACnC,IAAI,CAAC6C,IAAI,CAACjI,EAAGG,CAAAA,IAAI,CAAC,GAAA,CAAA,EAAM,CAAG,EAAA,IAAI,CAACqH,gBAAgB,EAAE,WAAA;AAChD,gCAAA,IAAI,CAACtE,EAAE,CAACuF,CAAC,GAAG,IAAI,CAACH,WAAW,CAAC,IAAI,CAACf,aAAa,CAACrD,EAAE,CAAC,IAAI,CAAClF,CAAC,CAAA,CAAA;gCACzD,IAAIlD,UAAAA,CAAWG,qBAAqB,EAAE;oCACpC,IAAI,CAACsM,KAAK,GAAGvI,EAAAA,CAAGsE,GAAG,CAAC,IAAI,CAACiE,KAAK,EAAEvI,GAAGuE,GAAG,CAAC,IAAI,CAACkE,CAAC,CAAC1D,GAAG,EAAE,IAAI,CAACyD,KAAK,CAAA,CAAA;iCACxD,MAAA;oCACL,IAAI,CAACD,KAAK,GAAGvI,EAAGsE,CAAAA,GAAG,CAAC,IAAI,CAACiE,KAAK,EAAEvI,EAAAA,CAAGuE,GAAG,CAAC,IAAI,CAACkE,CAAC,CAAC1D,GAAG,EAAE,IAAI,CAAC0D,CAAC,CAACrD,CAAC,EAAE,IAAI,CAACoD,KAAK,CAAA,CAAA;AACzE;AACA,gCAAA,IAAI,CAACA,KAAK,GAAGxI,GAAGuE,GAAG,CAAC,IAAI,CAACiE,KAAK,EAAExI,EAAAA,CAAGwE,GAAG,CAAC,CAAA,EAAG,IAAI,CAACiE,CAAC,CAACrD,CAAC,CAAA,CAAA;AACpD,6BAAA,CAAA;AACA,4BAAA,IAAI,CAACtE,QAAQ,CAACC,QAAQ,GAAGf,EAAGgB,CAAAA,IAAI,CAAC,IAAI,CAACuH,KAAK,EAAE,IAAI,CAACC,KAAK,CAAA;AACzD,yBAAA,CAAA;AACF,qBAAA,CAAA;AACF;AACF,aAAA,CAAA;AACA,YAAA,IAAI,CAACrM,iBAAiB,CAACuM,IAAI,GAAG,uBAAA;AAC9B,YAAA,IAAI,CAACtM,mBAAmB,GAAGuB,MAAAA,CAAOgL,eAAe,CAAC,IAAI,CAACxM,iBAAiB,CAACyM,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAC5F,YAAA,IAAI,CAACvM,sBAAsB,GAAGsB,MAAAA,CAAOkL,oBAAoB,EAAA;AACzD,YAAA,IAAI,CAACxM,sBAAsB,CACxByM,gBAAgB,GAChBlD,MAAM,CAAC,IACPmD,CAAAA,CAAAA,eAAe,CAAC,KAAA,EAAO,WACvBC,CAAAA,CAAAA,iBAAiB,CAAC,MAAQ,EAAA,KAAA,CAAA;YAC7B,IAAI,CAAC3M,sBAAsB,CAAC4M,aAAa,GAAGC,UAAU,CAAC,KAAOC,CAAAA,CAAAA,WAAW,CAAC,KAAA,CAAA;AAC1E,YAAA,MAAMzD,aAAgB,GAAA,IAAI,CAACrJ,sBAAsB,CAACsJ,eAAe,EAAA;AACjED,YAAAA,aAAAA,CAAcE,MAAM,CAAC,KAAA,CAAA;AACrBF,YAAAA,aAAAA,CAAcG,mBAAmB,CAAC,QAAA,CAAA;AAClCH,YAAAA,aAAAA,CAAcI,kBAAkB,CAAC,QAAA,CAAA;YACjCJ,aAAcK,CAAAA,UAAU,CAAC,MAAA,EAAQ,MAAQ,EAAA,SAAA,CAAA;YACzCL,aAAcM,CAAAA,SAAS,CAAC,MAAA,EAAQ,MAAQ,EAAA,SAAA,CAAA;AACxCN,YAAAA,aAAAA,CAAcO,YAAY,CAAC,CAAA,CAAA;AAC3BP,YAAAA,aAAAA,CAAcQ,WAAW,CAAC,IAAA,CAAA;AAC5B;QACA,OAAO,IAAI,CAAC/J,iBAAiB;AAC/B;IACUiN,SAAY,GAAA;AACpB,QAAA,KAAK,CAACA,SAAAA,EAAAA;QACN,IAAI,CAAC7M,WAAW,EAAE2C,OAAAA,EAAAA;QAClB,IAAI,CAAC3C,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,kBAAkB,EAAE0C,OAAAA,EAAAA;QACzB,IAAI,CAAC1C,kBAAkB,GAAG,IAAA;QAC1B,IAAI,CAACC,WAAW,EAAEyC,OAAAA,EAAAA;QAClB,IAAI,CAACzC,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,oBAAoB,EAAEwC,OAAAA,EAAAA;QAC3B,IAAI,CAACxC,oBAAoB,GAAG,IAAA;QAC5B,IAAI,CAACG,KAAK,GAAG,IAAA;QACb,IAAI,CAACK,aAAa,GAAG,IAAA;AACvB;AACF;;;;"}
1
+ {"version":3,"file":"abuffer_oit.js","sources":["../../src/render/abuffer_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n DeviceViewport,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport type { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { ShaderHelper } from '../material';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Disposable } from '@zephyr3d/base';\r\n\r\n/**\r\n * per-pixel linked list OIT renderer using ABuffer.\r\n *\r\n * @remarks\r\n * The ABuffer OIT renderer only supports WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class ABufferOIT extends Disposable implements OIT {\r\n /** Type name of ABufferOIT */\r\n public static readonly type = 'ab';\r\n public static readonly usePremultipliedAlpha = true;\r\n private static readonly MAX_FRAGMENT_LAYERS = 75;\r\n private static _compositeProgram: Nullable<GPUProgram> = null;\r\n private static _compositeBindGroup: Nullable<BindGroup> = null;\r\n private static _compositeRenderStates: Nullable<RenderStateSet> = null;\r\n private static _ubAlignment = 0;\r\n private _nodeBuffer: Nullable<GPUDataBuffer>;\r\n private _headStagingBuffer: Nullable<GPUDataBuffer>;\r\n private _headBuffer: Nullable<GPUDataBuffer>;\r\n private _scissorOffsetBuffer: Nullable<GPUDataBuffer>;\r\n private readonly _numLayers: number;\r\n private _screenSize: Uint32Array<ArrayBuffer>;\r\n private _hash: Nullable<string>;\r\n private readonly _debug: boolean;\r\n private _scissorSlices: number;\r\n private _scissorHeight: number;\r\n private _currentPass: number;\r\n private _savedScissor: Nullable<DeviceViewport>;\r\n /**\r\n * Creates an instance of ABufferOIT class\r\n *\r\n * @param numLayers - How many transparent layers, default is 16\r\n */\r\n constructor(numLayers = 16) {\r\n super();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer = null;\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer = null;\r\n this._numLayers = numLayers;\r\n this._screenSize = new Uint32Array([0xffffffff, 0xffffffff]);\r\n this._hash = null;\r\n this._debug = false;\r\n this._scissorSlices = 0;\r\n this._scissorHeight = 0;\r\n this._savedScissor = null;\r\n this._currentPass = 0;\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType() {\r\n return ABufferOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(deviceType: string) {\r\n return deviceType === 'webgpu';\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return ABufferOIT.usePremultipliedAlpha;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(ctx: DrawContext) {\r\n const device = ctx.device;\r\n this._savedScissor = device.getScissor();\r\n const ubAlignment = (ABufferOIT._ubAlignment =\r\n device.getDeviceCaps().shaderCaps.uniformBufferOffsetAlignment);\r\n const viewport = device.getViewport();\r\n const screenWidth = device.screenXToDevice(viewport.width);\r\n const screenHeight = device.screenYToDevice(Math.max(viewport.height, 1));\r\n if (screenWidth !== this._screenSize[0] || screenHeight !== this._screenSize[1]) {\r\n // Resize buffers if viewport was changed\r\n this._screenSize[0] = screenWidth;\r\n this._screenSize[1] = screenHeight;\r\n // compute scissor slices\r\n const maxBufferSize = device.getDeviceCaps().shaderCaps.maxStorageBufferSize;\r\n const bytesPerLine = screenWidth * 4 * 4 * this._numLayers;\r\n this._scissorHeight = (maxBufferSize / bytesPerLine) >> 0;\r\n this._scissorSlices = Math.ceil(screenHeight / this._scissorHeight);\r\n const offsetBufferSize = ubAlignment * this._scissorSlices;\r\n const offsetBuffer = new Uint32Array(offsetBufferSize >> 2);\r\n for (let i = 0; i < this._scissorSlices; i++) {\r\n offsetBuffer[i * (ubAlignment >> 2)] = i * this._scissorHeight;\r\n }\r\n if (!this._scissorOffsetBuffer || this._scissorOffsetBuffer.byteLength < offsetBuffer.byteLength) {\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = device.createBuffer(offsetBuffer.byteLength, { usage: 'uniform' });\r\n }\r\n this._scissorOffsetBuffer.bufferSubData(0, offsetBuffer);\r\n // resize node buffer\r\n const size = screenWidth * this._scissorHeight * 4;\r\n const nodeBufferSize = size * 4 * this._numLayers;\r\n if (!this._nodeBuffer || nodeBufferSize > this._nodeBuffer.byteLength) {\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = device.createBuffer(nodeBufferSize, { storage: true, usage: 'uniform' });\r\n }\r\n // resize head buffer\r\n const headBufferSize = size + 4;\r\n if (!this._headBuffer || headBufferSize > this._headBuffer.byteLength) {\r\n this._headBuffer?.dispose();\r\n this._headBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n const tmpArray = new Uint32Array(headBufferSize >> 2);\r\n tmpArray.fill(0xffffffff);\r\n this._headStagingBuffer.bufferSubData(0, tmpArray);\r\n }\r\n }\r\n return this._scissorSlices;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(ctx: DrawContext) {\r\n // Restore scissor rect\r\n ctx.device.setScissor(this._savedScissor);\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.Z_AB_scissorOffset = pb.uint().uniformBuffer(2);\r\n scope.Z_AB_nodeBuffer = pb.uvec4[0]().storageBuffer(2);\r\n scope.Z_AB_headImage = pb.atomic_uint[0]().storageBuffer(2);\r\n scope.Z_AB_screenSize = pb.uint().uniform(2);\r\n scope.Z_AB_depthTexture = pb.tex2D().uniform(2);\r\n scope.$outputs.outColor = pb.vec4();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, pass: number) {\r\n this._currentPass = pass;\r\n const device = ctx.device;\r\n const scissorY = pass * this._scissorHeight;\r\n const scissorH =\r\n Math.min((pass + 1) * this._scissorHeight, this._screenSize[1]) - pass * this._scissorHeight;\r\n device.setScissor([\r\n 0,\r\n device.deviceYToScreen(this._screenSize[1] - scissorY - scissorH),\r\n device.deviceXToScreen(this._screenSize[0]),\r\n device.deviceYToScreen(scissorH)\r\n ]);\r\n device.copyBuffer(this._headStagingBuffer!, this._headBuffer!, 0, 0, this._headStagingBuffer!.byteLength);\r\n // Update render hash\r\n this._hash = `${this.getType()}#${this._nodeBuffer!.uid}#${this._headBuffer!.uid}#${\r\n this._scissorOffsetBuffer!.uid\r\n }#${pass}`;\r\n if (this._debug) {\r\n const data = new Uint8Array(this._headBuffer!.byteLength);\r\n const readBuffer = device.createBuffer(this._headBuffer!.byteLength, { usage: 'read' });\r\n device.copyBuffer(this._headBuffer!, readBuffer, 0, 0, this._headBuffer!.byteLength);\r\n readBuffer.getBufferSubData(data).then(() => {\r\n const uint = new Uint32Array(data.buffer);\r\n for (let i = 0; i < uint.length; i++) {\r\n if (uint[i] !== 0) {\r\n console.error('Clear head buffer failed');\r\n break;\r\n }\r\n }\r\n readBuffer.dispose();\r\n });\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, pass: number) {\r\n const device = ctx.device;\r\n ABufferOIT.getCompositeProgram(device);\r\n const lastBindGroup = device.getBindGroup(0);\r\n device.setProgram(ABufferOIT.getCompositeProgram(device));\r\n const bindGroup = ABufferOIT._compositeBindGroup!;\r\n bindGroup.setBuffer(\r\n 'scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n pass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('headBuffer', this._headBuffer!);\r\n bindGroup.setBuffer('nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setValue('screenWidth', this._screenSize[0]);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad(ABufferOIT._compositeRenderStates!);\r\n device.setBindGroup(0, lastBindGroup[0], lastBindGroup[1]);\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash() {\r\n return this._hash!;\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(ctx: DrawContext, bindGroup: BindGroup) {\r\n bindGroup.setBuffer('Z_AB_nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setBuffer(\r\n 'Z_AB_scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n this._currentPass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('Z_AB_headImage', this._headBuffer!);\r\n bindGroup.setValue('Z_AB_screenSize', this._screenSize[0]);\r\n bindGroup.setTexture('Z_AB_depthTexture', ctx.linearDepthTexture!);\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n // linear depth of current fragment\r\n scope.$l.fragDepth = ShaderHelper.nonLinearDepthToLinearNormalized(scope, scope.$builtins.fragCoord.z);\r\n // linear depth in depth texture\r\n scope.$l.linearDepth = pb.textureLoad(\r\n scope.Z_AB_depthTexture,\r\n pb.ivec2(scope.$builtins.fragCoord.xy),\r\n 0\r\n ).r;\r\n // saved to buffer only if nothing is infront\r\n scope.$if(pb.lessThan(scope.fragDepth, scope.linearDepth), function () {\r\n this.$l.Z_AB_pixelCount = pb.atomicAdd(this.Z_AB_headImage.at(0), 1);\r\n this.$l.Z_AB_nodeOffset = this.Z_AB_pixelCount;\r\n // save if index not exceeded\r\n this.$if(pb.lessThan(this.Z_AB_nodeOffset, pb.arrayLength(this.Z_AB_nodeBuffer)), function () {\r\n this.$l.Z_AB_headOffset = pb.add(\r\n pb.mul(this.Z_AB_screenSize, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.Z_AB_scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n this.$l.Z_AB_oldHead = pb.atomicExchange(\r\n this.Z_AB_headImage.at(pb.add(this.Z_AB_headOffset, 1)),\r\n this.Z_AB_nodeOffset\r\n );\r\n this.$l.Z_AB_colorScale = pb.floatBitsToUint(pb.length(color.rgb));\r\n this.$l.Z_AB_color = pb.pack4x8unorm(pb.vec4(pb.normalize(color.rgb), pb.clamp(color.a, 0, 1)));\r\n this.$l.Z_AB_depth = pb.floatBitsToUint(this.fragDepth);\r\n this.Z_AB_nodeBuffer.setAt(\r\n this.Z_AB_nodeOffset,\r\n pb.uvec4(this.Z_AB_color, this.Z_AB_colorScale, this.Z_AB_depth, this.Z_AB_oldHead)\r\n );\r\n pb.discard();\r\n });\r\n });\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const stencilStates = rs.useStencilState();\r\n stencilStates.enable(true);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(1);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.scissorOffset = pb.uint().uniformBuffer(0);\r\n this.headBuffer = pb.uint[0]().storageBuffer(0);\r\n this.nodeBuffer = pb.uvec4[0]().storageBuffer(0);\r\n this.screenWidth = pb.uint().uniform(0);\r\n pb.func('unpackColor', [pb.uvec4('x')], function () {\r\n this.$l.colorNorm = pb.unpack4x8unorm(this.x.x);\r\n this.$l.colorScale = pb.uintBitsToFloat(this.x.y);\r\n this.$return(pb.vec4(pb.mul(this.colorNorm.rgb, this.colorScale), this.colorNorm.a));\r\n });\r\n pb.main(function () {\r\n this.$l.fragmentArray = pb.uvec4[ABufferOIT.MAX_FRAGMENT_LAYERS]();\r\n this.$l.fragmentArrayLen = pb.uint(0);\r\n this.$l.offset = pb.add(\r\n pb.mul(this.screenWidth, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n //this.$l.head = this.headBuffer.at(this.offset);\r\n this.$l.head = this.headBuffer.at(pb.add(this.offset, 1));\r\n this.$while(\r\n pb.and(\r\n pb.lessThan(this.fragmentArrayLen, ABufferOIT.MAX_FRAGMENT_LAYERS),\r\n pb.notEqual(this.head, 0xffffffff)\r\n ),\r\n function () {\r\n this.fragmentArray.setAt(this.fragmentArrayLen, this.nodeBuffer.at(this.head));\r\n this.head = this.fragmentArray.at(this.fragmentArrayLen).w;\r\n this.fragmentArrayLen = pb.add(this.fragmentArrayLen, 1);\r\n }\r\n );\r\n this.$if(pb.equal(this.fragmentArrayLen, 0), function () {\r\n this.$outputs.outColor = pb.vec4(0, 0, 0, 1);\r\n }).$else(function () {\r\n // bubble sort\r\n this.$for(pb.uint('i'), 0, pb.sub(this.fragmentArrayLen, 1), function () {\r\n this.$for(pb.uint('j'), 0, pb.sub(pb.sub(this.fragmentArrayLen, 1), this.i), function () {\r\n this.$l.a = this.fragmentArray.at(this.j);\r\n this.$l.b = this.fragmentArray.at(pb.add(this.j, 1));\r\n this.$if(pb.greaterThan(this.a.z, this.b.z), function () {\r\n this.fragmentArray.setAt(this.j, this.b);\r\n this.fragmentArray.setAt(pb.add(this.j, 1), this.a);\r\n });\r\n });\r\n });\r\n // under operator blending\r\n this.$l.c0 = this.unpackColor(this.fragmentArray[0]);\r\n this.$l.c_dst = ABufferOIT.usePremultipliedAlpha ? this.c0.rgb : pb.mul(this.c0.rgb, this.c0.a);\r\n this.$l.a_dst = pb.sub(1, this.c0.a);\r\n this.$for(pb.uint('i'), 1, this.fragmentArrayLen, function () {\r\n this.$l.c = this.unpackColor(this.fragmentArray.at(this.i));\r\n if (ABufferOIT.usePremultipliedAlpha) {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.a_dst));\r\n } else {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.c.a, this.a_dst));\r\n }\r\n this.a_dst = pb.mul(this.a_dst, pb.sub(1, this.c.a));\r\n });\r\n this.$outputs.outColor = pb.vec4(this.c_dst, this.a_dst);\r\n });\r\n });\r\n }\r\n })!;\r\n this._compositeProgram.name = '@ABufferOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n const stencilStates = this._compositeRenderStates.useStencilState();\r\n stencilStates.enable(false);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(0);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n return this._compositeProgram;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = null;\r\n this._headBuffer?.dispose();\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = null;\r\n this._hash = null;\r\n this._savedScissor = null;\r\n }\r\n}\r\n"],"names":["ABufferOIT","Disposable","type","usePremultipliedAlpha","MAX_FRAGMENT_LAYERS","_compositeProgram","_compositeBindGroup","_compositeRenderStates","_ubAlignment","_nodeBuffer","_headStagingBuffer","_headBuffer","_scissorOffsetBuffer","_numLayers","_screenSize","_hash","_debug","_scissorSlices","_scissorHeight","_currentPass","_savedScissor","numLayers","Uint32Array","getType","supportDevice","deviceType","wantsPremultipliedAlpha","begin","ctx","device","getScissor","ubAlignment","getDeviceCaps","shaderCaps","uniformBufferOffsetAlignment","viewport","getViewport","screenWidth","screenXToDevice","width","screenHeight","screenYToDevice","Math","max","height","maxBufferSize","maxStorageBufferSize","bytesPerLine","ceil","offsetBufferSize","offsetBuffer","i","byteLength","dispose","createBuffer","usage","bufferSubData","size","nodeBufferSize","storage","headBufferSize","tmpArray","fill","end","setScissor","setupFragmentOutput","scope","pb","$builder","Z_AB_scissorOffset","uint","uniformBuffer","Z_AB_nodeBuffer","uvec4","storageBuffer","Z_AB_headImage","atomic_uint","Z_AB_screenSize","uniform","Z_AB_depthTexture","tex2D","$outputs","outColor","vec4","beginPass","pass","scissorY","scissorH","min","deviceYToScreen","deviceXToScreen","copyBuffer","uid","data","Uint8Array","readBuffer","getBufferSubData","then","buffer","length","console","error","endPass","getCompositeProgram","lastBindGroup","getBindGroup","setProgram","bindGroup","setBuffer","setValue","setBindGroup","drawFullscreenQuad","calculateHash","applyUniforms","setTexture","linearDepthTexture","outputFragmentColor","color","$l","fragDepth","ShaderHelper","nonLinearDepthToLinearNormalized","$builtins","fragCoord","z","linearDepth","textureLoad","ivec2","xy","r","$if","lessThan","Z_AB_pixelCount","atomicAdd","at","Z_AB_nodeOffset","arrayLength","Z_AB_headOffset","add","mul","sub","y","x","Z_AB_oldHead","atomicExchange","Z_AB_colorScale","floatBitsToUint","rgb","Z_AB_color","pack4x8unorm","normalize","clamp","a","Z_AB_depth","setAt","discard","setRenderStates","rs","stencilStates","useStencilState","enable","setFrontCompareFunc","setBackCompareFunc","setFrontOp","setBackOp","setReference","setReadMask","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","neg","fragment","scissorOffset","headBuffer","nodeBuffer","func","colorNorm","unpack4x8unorm","colorScale","uintBitsToFloat","$return","fragmentArray","fragmentArrayLen","offset","head","$while","and","notEqual","w","equal","$else","$for","j","b","greaterThan","c0","unpackColor","c_dst","a_dst","c","name","createBindGroup","bindGroupLayouts","createRenderStateSet","useBlendingState","setBlendFuncRGB","setBlendFuncAlpha","useDepthState","enableTest","enableWrite","onDispose"],"mappings":"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"}
@@ -761,25 +761,15 @@ const rotationValues = [
761
761
  /** Disposes the clipmap and release all meshes */ onDispose() {
762
762
  super.onDispose();
763
763
  this._crossMesh.dispose();
764
- this._crossMesh = null;
765
764
  this._crossMeshLines.dispose();
766
- this._crossMeshLines = null;
767
765
  this._fillerMesh.dispose();
768
- this._fillerMesh = null;
769
766
  this._fillerMeshLines.dispose();
770
- this._fillerMeshLines = null;
771
767
  this._seamMesh.dispose();
772
- this._seamMesh = null;
773
768
  this._seamMeshLines.dispose();
774
- this._seamMeshLines = null;
775
769
  this._trimMesh.dispose();
776
- this._trimMesh = null;
777
770
  this._trimMeshLines.dispose();
778
- this._trimMeshLines = null;
779
771
  this._tileMesh.dispose();
780
- this._tileMesh = null;
781
772
  this._tileMeshLines.dispose();
782
- this._tileMeshLines = null;
783
773
  }
784
774
  }
785
775