@zephyr3d/scene 0.7.0 → 0.8.0

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 (368) hide show
  1. package/dist/animation/animation.js +4 -33
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +24 -11
  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/ik/ccd_solver.js +372 -0
  10. package/dist/animation/ik/ccd_solver.js.map +1 -0
  11. package/dist/animation/ik/fabrik_solver.js +399 -0
  12. package/dist/animation/ik/fabrik_solver.js.map +1 -0
  13. package/dist/animation/ik/ik_angle_constraint.js +181 -0
  14. package/dist/animation/ik/ik_angle_constraint.js.map +1 -0
  15. package/dist/animation/ik/ik_chain.js +163 -0
  16. package/dist/animation/ik/ik_chain.js.map +1 -0
  17. package/dist/animation/ik/ik_chain_builder.js +68 -0
  18. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  19. package/dist/animation/ik/ik_constraint.js +25 -0
  20. package/dist/animation/ik/ik_constraint.js.map +1 -0
  21. package/dist/animation/ik/ik_pole_constraint.js +123 -0
  22. package/dist/animation/ik/ik_pole_constraint.js.map +1 -0
  23. package/dist/animation/ik/ik_solver.js +48 -0
  24. package/dist/animation/ik/ik_solver.js.map +1 -0
  25. package/dist/animation/ik/ik_track.js +96 -0
  26. package/dist/animation/ik/ik_track.js.map +1 -0
  27. package/dist/animation/ik/ik_utils.js +270 -0
  28. package/dist/animation/ik/ik_utils.js.map +1 -0
  29. package/dist/animation/ik/two_bone_ik_solver.js +332 -0
  30. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -0
  31. package/dist/animation/ik_modifier.js +61 -0
  32. package/dist/animation/ik_modifier.js.map +1 -0
  33. package/dist/animation/ik_postprocessor.js +71 -0
  34. package/dist/animation/ik_postprocessor.js.map +1 -0
  35. package/dist/animation/manual_transform_processor.js +156 -0
  36. package/dist/animation/manual_transform_processor.js.map +1 -0
  37. package/dist/animation/morphtarget.js +7 -1
  38. package/dist/animation/morphtarget.js.map +1 -1
  39. package/dist/animation/morphtrack.js +3 -3
  40. package/dist/animation/morphtrack.js.map +1 -1
  41. package/dist/animation/proptrack.js +37 -41
  42. package/dist/animation/proptrack.js.map +1 -1
  43. package/dist/animation/rotationtrack.js +0 -1
  44. package/dist/animation/rotationtrack.js.map +1 -1
  45. package/dist/animation/scaletrack.js +0 -1
  46. package/dist/animation/scaletrack.js.map +1 -1
  47. package/dist/animation/skeleton.js +57 -60
  48. package/dist/animation/skeleton.js.map +1 -1
  49. package/dist/animation/skeleton_modifier.js +38 -0
  50. package/dist/animation/skeleton_modifier.js.map +1 -0
  51. package/dist/animation/skeleton_postprocessor.js +50 -0
  52. package/dist/animation/skeleton_postprocessor.js.map +1 -0
  53. package/dist/animation/spring/multi_chain_spring_system.js +503 -0
  54. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -0
  55. package/dist/animation/spring/spring_chain.js +103 -0
  56. package/dist/animation/spring/spring_chain.js.map +1 -0
  57. package/dist/animation/spring/spring_collider.js +247 -0
  58. package/dist/animation/spring/spring_collider.js.map +1 -0
  59. package/dist/animation/spring/spring_constraint.js +21 -0
  60. package/dist/animation/spring/spring_constraint.js.map +1 -0
  61. package/dist/animation/spring/spring_particle.js +20 -0
  62. package/dist/animation/spring/spring_particle.js.map +1 -0
  63. package/dist/animation/spring/spring_system.js +526 -0
  64. package/dist/animation/spring/spring_system.js.map +1 -0
  65. package/dist/animation/spring_modifier.js +45 -0
  66. package/dist/animation/spring_modifier.js.map +1 -0
  67. package/dist/animation/spring_postprocessor.js +54 -0
  68. package/dist/animation/spring_postprocessor.js.map +1 -0
  69. package/dist/animation/translationtrack.js +0 -1
  70. package/dist/animation/translationtrack.js.map +1 -1
  71. package/dist/app/api.js +13 -4
  72. package/dist/app/api.js.map +1 -1
  73. package/dist/app/app.js +13 -1
  74. package/dist/app/app.js.map +1 -1
  75. package/dist/app/engine.js +33 -45
  76. package/dist/app/engine.js.map +1 -1
  77. package/dist/app/inputmgr.js.map +1 -1
  78. package/dist/app/runtimescript.js.map +1 -1
  79. package/dist/app/screen.js +318 -0
  80. package/dist/app/screen.js.map +1 -0
  81. package/dist/app/scriptingsystem.js +10 -6
  82. package/dist/app/scriptingsystem.js.map +1 -1
  83. package/dist/app/scriptregistry.js +11 -22
  84. package/dist/app/scriptregistry.js.map +1 -1
  85. package/dist/asset/assetmanager.js +79 -58
  86. package/dist/asset/assetmanager.js.map +1 -1
  87. package/dist/asset/builtin.js +5 -5
  88. package/dist/asset/builtin.js.map +1 -1
  89. package/dist/asset/loaders/dds/dds.js +6 -2
  90. package/dist/asset/loaders/dds/dds.js.map +1 -1
  91. package/dist/asset/loaders/dds/dds_loader.js +1 -1
  92. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  93. package/dist/asset/loaders/gltf/gltf_loader.js +14 -6
  94. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  95. package/dist/asset/loaders/gltf/helpers.js +6 -2
  96. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  97. package/dist/asset/loaders/hdr/hdr.js +22 -15
  98. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  99. package/dist/asset/loaders/image/tga_Loader.js +2 -1
  100. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  101. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  102. package/dist/asset/loaders/loader.js +2 -2
  103. package/dist/asset/loaders/loader.js.map +1 -1
  104. package/dist/asset/model.js +9 -5
  105. package/dist/asset/model.js.map +1 -1
  106. package/dist/blitter/bilateralblur.js.map +1 -1
  107. package/dist/blitter/blitter.js +9 -11
  108. package/dist/blitter/blitter.js.map +1 -1
  109. package/dist/blitter/box.js +0 -1
  110. package/dist/blitter/box.js.map +1 -1
  111. package/dist/blitter/copy.js.map +1 -1
  112. package/dist/blitter/gaussianblur.js.map +1 -1
  113. package/dist/camera/base.js +1 -3
  114. package/dist/camera/base.js.map +1 -1
  115. package/dist/camera/camera.js +121 -37
  116. package/dist/camera/camera.js.map +1 -1
  117. package/dist/camera/fps.js +19 -17
  118. package/dist/camera/fps.js.map +1 -1
  119. package/dist/camera/orbit.js +45 -43
  120. package/dist/camera/orbit.js.map +1 -1
  121. package/dist/camera/orthocamera.js +27 -21
  122. package/dist/camera/orthocamera.js.map +1 -1
  123. package/dist/camera/perspectivecamera.js +28 -19
  124. package/dist/camera/perspectivecamera.js.map +1 -1
  125. package/dist/index.d.ts +15802 -15577
  126. package/dist/index.js +33 -11
  127. package/dist/index.js.map +1 -1
  128. package/dist/material/blinn.js.map +1 -1
  129. package/dist/material/grassmaterial.js.map +1 -1
  130. package/dist/material/lambert.js.map +1 -1
  131. package/dist/material/material.js +11 -5
  132. package/dist/material/material.js.map +1 -1
  133. package/dist/material/meshmaterial.js +10 -9
  134. package/dist/material/meshmaterial.js.map +1 -1
  135. package/dist/material/mixins/albedocolor.js.map +1 -1
  136. package/dist/material/mixins/foliage.js.map +1 -1
  137. package/dist/material/mixins/lightmodel/blinnphong.js +66 -4
  138. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  139. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  140. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +7 -0
  141. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  142. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  143. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  144. package/dist/material/mixins/lit.js +3 -3
  145. package/dist/material/mixins/lit.js.map +1 -1
  146. package/dist/material/mixins/pbr/brdf.js.map +1 -1
  147. package/dist/material/mixins/pbr/common.js.map +1 -1
  148. package/dist/material/mixins/texture.js +3 -0
  149. package/dist/material/mixins/texture.js.map +1 -1
  150. package/dist/material/mixins/vertexcolor.js.map +1 -1
  151. package/dist/material/particle.js.map +1 -1
  152. package/dist/material/pbrblueprint.js +180 -22
  153. package/dist/material/pbrblueprint.js.map +1 -1
  154. package/dist/material/pbrmr.js.map +1 -1
  155. package/dist/material/pbrsg.js.map +1 -1
  156. package/dist/material/shader/helper.js +41 -56
  157. package/dist/material/shader/helper.js.map +1 -1
  158. package/dist/material/sprite.js +301 -0
  159. package/dist/material/sprite.js.map +1 -0
  160. package/dist/material/sprite3d.js +301 -0
  161. package/dist/material/sprite3d.js.map +1 -0
  162. package/dist/material/sprite3d_std.js +116 -0
  163. package/dist/material/sprite3d_std.js.map +1 -0
  164. package/dist/material/sprite3dblueprint.js +235 -0
  165. package/dist/material/sprite3dblueprint.js.map +1 -0
  166. package/dist/material/sprite_std.js +116 -0
  167. package/dist/material/sprite_std.js.map +1 -0
  168. package/dist/material/spriteblueprint.js +235 -0
  169. package/dist/material/spriteblueprint.js.map +1 -0
  170. package/dist/material/terrain-cm.js +0 -1
  171. package/dist/material/terrain-cm.js.map +1 -1
  172. package/dist/material/unlit.js.map +1 -1
  173. package/dist/material/water.js.map +1 -1
  174. package/dist/posteffect/bloom.js.map +1 -1
  175. package/dist/posteffect/compositor.js.map +1 -1
  176. package/dist/posteffect/fxaa.js.map +1 -1
  177. package/dist/posteffect/grayscale.js.map +1 -1
  178. package/dist/posteffect/motionblur.js.map +1 -1
  179. package/dist/posteffect/posteffect.js.map +1 -1
  180. package/dist/posteffect/sao.js.map +1 -1
  181. package/dist/posteffect/ssr.js +7 -5
  182. package/dist/posteffect/ssr.js.map +1 -1
  183. package/dist/posteffect/taa.js.map +1 -1
  184. package/dist/posteffect/tonemap.js.map +1 -1
  185. package/dist/render/abuffer_oit.js +8 -6
  186. package/dist/render/abuffer_oit.js.map +1 -1
  187. package/dist/render/clipmap.js +0 -10
  188. package/dist/render/clipmap.js.map +1 -1
  189. package/dist/render/cluster_light.js +4 -4
  190. package/dist/render/cluster_light.js.map +1 -1
  191. package/dist/render/cull_visitor.js +15 -17
  192. package/dist/render/cull_visitor.js.map +1 -1
  193. package/dist/render/depthpass.js +3 -4
  194. package/dist/render/depthpass.js.map +1 -1
  195. package/dist/render/drawable.js +15 -0
  196. package/dist/render/drawable.js.map +1 -0
  197. package/dist/render/drawable_mixin.js +8 -4
  198. package/dist/render/drawable_mixin.js.map +1 -1
  199. package/dist/render/envlight.js.map +1 -1
  200. package/dist/render/fbm_wavegenerator.js +3 -1
  201. package/dist/render/fbm_wavegenerator.js.map +1 -1
  202. package/dist/render/fft_wavegenerator.js +67 -64
  203. package/dist/render/fft_wavegenerator.js.map +1 -1
  204. package/dist/render/fullscreenquad.js.map +1 -1
  205. package/dist/render/gerstner_wavegenerator.js +3 -1
  206. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  207. package/dist/render/globalbindgroup_allocator.js +3 -1
  208. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  209. package/dist/render/hzb.js +1 -2
  210. package/dist/render/hzb.js.map +1 -1
  211. package/dist/render/lightpass.js +13 -13
  212. package/dist/render/lightpass.js.map +1 -1
  213. package/dist/render/objectcolorpass.js +4 -7
  214. package/dist/render/objectcolorpass.js.map +1 -1
  215. package/dist/render/primitive.js +4 -5
  216. package/dist/render/primitive.js.map +1 -1
  217. package/dist/render/render_queue.js +10 -5
  218. package/dist/render/render_queue.js.map +1 -1
  219. package/dist/render/renderer.js +16 -22
  220. package/dist/render/renderer.js.map +1 -1
  221. package/dist/render/renderpass.js +27 -52
  222. package/dist/render/renderpass.js.map +1 -1
  223. package/dist/render/rendertarget.js +5 -0
  224. package/dist/render/rendertarget.js.map +1 -0
  225. package/dist/render/screenrendertarget.js +56 -0
  226. package/dist/render/screenrendertarget.js.map +1 -0
  227. package/dist/render/shadowmap_pass.js +4 -5
  228. package/dist/render/shadowmap_pass.js.map +1 -1
  229. package/dist/render/sky.js +16 -14
  230. package/dist/render/sky.js.map +1 -1
  231. package/dist/render/weightedblended_oit.js.map +1 -1
  232. package/dist/scene/basesprite.js +296 -0
  233. package/dist/scene/basesprite.js.map +1 -0
  234. package/dist/scene/batchgroup.js +4 -2
  235. package/dist/scene/batchgroup.js.map +1 -1
  236. package/dist/scene/environment.js +9 -10
  237. package/dist/scene/environment.js.map +1 -1
  238. package/dist/scene/graph_node.js.map +1 -1
  239. package/dist/scene/light.js +22 -4
  240. package/dist/scene/light.js.map +1 -1
  241. package/dist/scene/mesh.js +96 -26
  242. package/dist/scene/mesh.js.map +1 -1
  243. package/dist/scene/octree.js.map +1 -1
  244. package/dist/scene/particlesys.js +25 -22
  245. package/dist/scene/particlesys.js.map +1 -1
  246. package/dist/scene/raycast_visitor.js +0 -16
  247. package/dist/scene/raycast_visitor.js.map +1 -1
  248. package/dist/scene/scene.js +7 -4
  249. package/dist/scene/scene.js.map +1 -1
  250. package/dist/scene/scene_node.js +20 -35
  251. package/dist/scene/scene_node.js.map +1 -1
  252. package/dist/scene/sprite.js +18 -0
  253. package/dist/scene/sprite.js.map +1 -0
  254. package/dist/scene/sprite3d.js +18 -0
  255. package/dist/scene/sprite3d.js.map +1 -0
  256. package/dist/scene/terrain-cm/grass.js +5 -4
  257. package/dist/scene/terrain-cm/grass.js.map +1 -1
  258. package/dist/scene/terrain-cm/grassmaterial.js +3 -1
  259. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  260. package/dist/scene/terrain-cm/terrain-cm.js +65 -48
  261. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  262. package/dist/scene/water.js +35 -30
  263. package/dist/scene/water.js.map +1 -1
  264. package/dist/shaders/atmosphere.js +17 -29
  265. package/dist/shaders/atmosphere.js.map +1 -1
  266. package/dist/shaders/fog.js.map +1 -1
  267. package/dist/shaders/misc.js.map +1 -1
  268. package/dist/shaders/noise.js.map +1 -1
  269. package/dist/shaders/pbr.js.map +1 -1
  270. package/dist/shaders/shadow.js.map +1 -1
  271. package/dist/shaders/ssr.js.map +1 -1
  272. package/dist/shaders/temporal.js.map +1 -1
  273. package/dist/shaders/water.js.map +1 -1
  274. package/dist/shadow/esm.js +1 -1
  275. package/dist/shadow/esm.js.map +1 -1
  276. package/dist/shadow/pcf_opt.js.map +1 -1
  277. package/dist/shadow/pcf_pd.js.map +1 -1
  278. package/dist/shadow/shader.js +3 -1
  279. package/dist/shadow/shader.js.map +1 -1
  280. package/dist/shadow/shadow_impl.js.map +1 -1
  281. package/dist/shadow/shadowmapper.js +6 -18
  282. package/dist/shadow/shadowmapper.js.map +1 -1
  283. package/dist/shadow/ssm.js.map +1 -1
  284. package/dist/shadow/vsm.js.map +1 -1
  285. package/dist/shapes/box.js +9 -3
  286. package/dist/shapes/box.js.map +1 -1
  287. package/dist/shapes/cylinder.js +2 -2
  288. package/dist/shapes/cylinder.js.map +1 -1
  289. package/dist/shapes/plane.js +2 -2
  290. package/dist/shapes/plane.js.map +1 -1
  291. package/dist/shapes/shape.js +2 -1
  292. package/dist/shapes/shape.js.map +1 -1
  293. package/dist/shapes/sphere.js +2 -2
  294. package/dist/shapes/sphere.js.map +1 -1
  295. package/dist/shapes/tetrahedron.js +5 -6
  296. package/dist/shapes/tetrahedron.js.map +1 -1
  297. package/dist/shapes/torus.js +2 -2
  298. package/dist/shapes/torus.js.map +1 -1
  299. package/dist/utility/aabbtree.js +1 -1
  300. package/dist/utility/aabbtree.js.map +1 -1
  301. package/dist/utility/blueprint/common/constants.js +578 -104
  302. package/dist/utility/blueprint/common/constants.js.map +1 -1
  303. package/dist/utility/blueprint/common/math.js +471 -9
  304. package/dist/utility/blueprint/common/math.js.map +1 -1
  305. package/dist/utility/blueprint/common.js +1 -1
  306. package/dist/utility/blueprint/common.js.map +1 -1
  307. package/dist/utility/blueprint/material/func.js +9 -5
  308. package/dist/utility/blueprint/material/func.js.map +1 -1
  309. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  310. package/dist/utility/blueprint/material/ir.js +288 -80
  311. package/dist/utility/blueprint/material/ir.js.map +1 -1
  312. package/dist/utility/blueprint/material/pbr.js +92 -4
  313. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  314. package/dist/utility/blueprint/material/texture.js +62 -45
  315. package/dist/utility/blueprint/material/texture.js.map +1 -1
  316. package/dist/utility/blueprint/node.js +28 -1
  317. package/dist/utility/blueprint/node.js.map +1 -1
  318. package/dist/utility/bounding_volume.js.map +1 -1
  319. package/dist/utility/debug.js.map +1 -1
  320. package/dist/utility/draco/decoder.js.map +1 -1
  321. package/dist/utility/misc.js +1 -1
  322. package/dist/utility/misc.js.map +1 -1
  323. package/dist/utility/panorama.js.map +1 -1
  324. package/dist/utility/pmrem.js.map +1 -1
  325. package/dist/utility/rendermipmap.js.map +1 -1
  326. package/dist/utility/serialization/json.js +19 -15
  327. package/dist/utility/serialization/json.js.map +1 -1
  328. package/dist/utility/serialization/manager.js +89 -22
  329. package/dist/utility/serialization/manager.js.map +1 -1
  330. package/dist/utility/serialization/scene/animation.js +44 -41
  331. package/dist/utility/serialization/scene/animation.js.map +1 -1
  332. package/dist/utility/serialization/scene/batch.js +4 -3
  333. package/dist/utility/serialization/scene/batch.js.map +1 -1
  334. package/dist/utility/serialization/scene/camera.js +97 -9
  335. package/dist/utility/serialization/scene/camera.js.map +1 -1
  336. package/dist/utility/serialization/scene/common.js +102 -28
  337. package/dist/utility/serialization/scene/common.js.map +1 -1
  338. package/dist/utility/serialization/scene/light.js +14 -12
  339. package/dist/utility/serialization/scene/light.js.map +1 -1
  340. package/dist/utility/serialization/scene/material.js +216 -26
  341. package/dist/utility/serialization/scene/material.js.map +1 -1
  342. package/dist/utility/serialization/scene/mesh.js +71 -100
  343. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  344. package/dist/utility/serialization/scene/misc.js +3 -2
  345. package/dist/utility/serialization/scene/misc.js.map +1 -1
  346. package/dist/utility/serialization/scene/node.js +42 -9
  347. package/dist/utility/serialization/scene/node.js.map +1 -1
  348. package/dist/utility/serialization/scene/particle.js +7 -5
  349. package/dist/utility/serialization/scene/particle.js.map +1 -1
  350. package/dist/utility/serialization/scene/primitive.js +18 -15
  351. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  352. package/dist/utility/serialization/scene/scene.js +3 -2
  353. package/dist/utility/serialization/scene/scene.js.map +1 -1
  354. package/dist/utility/serialization/scene/sprite.js +164 -0
  355. package/dist/utility/serialization/scene/sprite.js.map +1 -0
  356. package/dist/utility/serialization/scene/terrain.js +8 -6
  357. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  358. package/dist/utility/serialization/scene/water.js +11 -9
  359. package/dist/utility/serialization/scene/water.js.map +1 -1
  360. package/dist/utility/serialization/types.js +6 -0
  361. package/dist/utility/serialization/types.js.map +1 -0
  362. package/dist/utility/shprojector.js.map +1 -1
  363. package/dist/utility/textures/ggxlut.js.map +1 -1
  364. package/dist/utility/textures/gradientnoise.js.map +1 -1
  365. package/dist/utility/textures/randomnoise.js.map +1 -1
  366. package/dist/values.js +14 -14
  367. package/dist/values.js.map +1 -1
  368. package/package.json +80 -80
@@ -1 +1 @@
1
- {"version":3,"file":"clipmap.js","sources":["../../src/render/clipmap.ts"],"sourcesContent":["/**\r\n * copy from http://git.mikejsavage.co.uk/medfall/file/clipmap.cc.html#l197\r\n */\r\n\r\nimport type { Vector4 } from '@zephyr3d/base';\r\nimport { AABB, ClipState, Disposable, Matrix4x4, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from '../camera';\r\nimport { Primitive } from './primitive';\r\nimport {\r\n getVertexAttributeFormat,\r\n getVertexAttributeIndex,\r\n VERTEX_ATTRIB_POSITION,\r\n VERTEX_ATTRIB_TEXCOORD0,\r\n type VertexAttribFormat\r\n} from '@zephyr3d/device';\r\n\r\nconst tmpAABB = new AABB();\r\nconst tmpV3 = new Vector3();\r\nconst rotationValues = [0, Math.PI * 1.5, Math.PI * 0.5, Math.PI] as const;\r\n\r\n/** @internal */\r\nexport type PrimitiveInstanceInfo = {\r\n primitive: Primitive;\r\n numInstances: number;\r\n instanceDatas: Float32Array<ArrayBuffer>;\r\n mipLevels: Float32Array<ArrayBuffer>;\r\n maxMiplevel: number;\r\n};\r\n/** @internal */\r\nexport interface ClipmapGatherContext {\r\n camera: Camera;\r\n gridScale: number;\r\n minMaxWorldPos: Vector4;\r\n userData: unknown;\r\n frustumCulling: boolean;\r\n calcAABB(\r\n userData: unknown,\r\n minX: number,\r\n maxX: number,\r\n minZ: number,\r\n maxZ: number,\r\n outAABB: AABB,\r\n level: number\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport interface ClipmapDrawContext extends ClipmapGatherContext {\r\n drawPrimitive(\r\n prim: Primitive,\r\n rotation: number,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n level: number\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport class Clipmap extends Disposable {\r\n private readonly _instanceDataPool: Float32Array<ArrayBuffer>[];\r\n private _instanceDataPoolSize: number;\r\n private readonly _mipLevelDataPool: Float32Array<ArrayBuffer>[];\r\n private _mipLevelDataPoolSize: number;\r\n private readonly _nonInstanceDataPool: Float32Array<ArrayBuffer>[];\r\n private _nonInstanceDataPoolSize: number;\r\n private readonly _nonInstanceMipLevelDataPool: Float32Array<ArrayBuffer>[];\r\n private _nonInstanceMipLevelDataPoolSize: number;\r\n private readonly _extraInstanceBuffers: VertexAttribFormat[];\r\n private _tileResolution: number;\r\n private readonly _maxMipLevels: number;\r\n\r\n private _tileMesh: Primitive;\r\n private _tileMeshLines: Primitive;\r\n private _tileMeshBBox: AABB;\r\n\r\n private _fillerMesh: Primitive;\r\n private _fillerMeshLines: Primitive;\r\n private _fillerMeshAABB: AABB;\r\n\r\n private _trimMesh: Primitive;\r\n private _trimMeshLines: Primitive;\r\n private _trimMeshAABB: AABB;\r\n\r\n private _crossMesh: Primitive;\r\n private _crossMeshLines: Primitive;\r\n private _crossMeshAABB: AABB;\r\n\r\n private _seamMesh: Primitive;\r\n private _seamMeshLines: Primitive;\r\n private _seamMeshAABB: AABB;\r\n\r\n private _wireframe: boolean;\r\n\r\n constructor(resolution: number, extraInstanceBuffers: VertexAttribFormat[], maxMipLevels = 64) {\r\n super();\r\n if (\r\n extraInstanceBuffers &&\r\n extraInstanceBuffers.findIndex(\r\n (val) =>\r\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_POSITION ||\r\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_TEXCOORD0 ||\r\n getVertexAttributeFormat(val) !== 'f32'\r\n ) >= 0\r\n ) {\r\n throw new Error(\r\n 'Extra instance buffers must be f32 format and cannot have vertex attribute of POSITOIN and TEXCOORD0'\r\n );\r\n }\r\n this._extraInstanceBuffers = extraInstanceBuffers?.slice() ?? [];\r\n this._tileResolution = resolution;\r\n this._maxMipLevels = Math.min(64, Math.max(1, maxMipLevels >>> 0));\r\n this._instanceDataPool = [];\r\n this._instanceDataPoolSize = 0;\r\n this._mipLevelDataPool = [];\r\n this._mipLevelDataPoolSize = 0;\r\n this._nonInstanceDataPool = [];\r\n this._nonInstanceDataPoolSize = 0;\r\n this._nonInstanceMipLevelDataPool = [];\r\n this._nonInstanceMipLevelDataPoolSize = 0;\r\n this._wireframe = false;\r\n this.generateCrossMesh();\r\n this.generateFillerMesh();\r\n this.generateSeamMesh();\r\n this.generateTileMesh();\r\n this.generateTrimMesh();\r\n }\r\n get wireframe() {\r\n return this._wireframe;\r\n }\r\n set wireframe(val: boolean) {\r\n this._wireframe = !!val;\r\n }\r\n get tileResolution() {\r\n return this._tileResolution;\r\n }\r\n set tileResolution(val: number) {\r\n if (val !== this._tileResolution) {\r\n this._tileResolution = val;\r\n this.generateCrossMesh();\r\n this.generateFillerMesh();\r\n this.generateSeamMesh();\r\n this.generateTileMesh();\r\n this.generateTrimMesh();\r\n }\r\n }\r\n private allocInstanceBuffer(): Float32Array<ArrayBuffer> {\r\n if (this._instanceDataPoolSize === 0) {\r\n const buffer = new Float32Array(this._maxMipLevels * 16 * 4);\r\n this._instanceDataPool.push(buffer);\r\n return buffer;\r\n } else {\r\n return this._instanceDataPool[--this._instanceDataPoolSize];\r\n }\r\n }\r\n private allocNonInstanceBuffer(x: number, y: number, z: number, w: number): Float32Array<ArrayBuffer> {\r\n let buffer: Float32Array<ArrayBuffer>;\r\n if (this._nonInstanceDataPoolSize === 0) {\r\n buffer = new Float32Array(4);\r\n this._nonInstanceDataPool.push(buffer);\r\n } else {\r\n buffer = this._nonInstanceDataPool[--this._nonInstanceDataPoolSize];\r\n }\r\n buffer[0] = x;\r\n buffer[1] = y;\r\n buffer[2] = z;\r\n buffer[3] = w;\r\n return buffer;\r\n }\r\n private allocMipLevelBuffer(): Float32Array<ArrayBuffer> {\r\n if (this._mipLevelDataPoolSize === 0) {\r\n const buffer = new Float32Array(this._maxMipLevels * 16);\r\n this._mipLevelDataPool.push(buffer);\r\n return buffer;\r\n } else {\r\n return this._mipLevelDataPool[--this._mipLevelDataPoolSize];\r\n }\r\n }\r\n private allocNonInstanceMipLevelBuffer(val: number): Float32Array<ArrayBuffer> {\r\n let buffer: Float32Array<ArrayBuffer>;\r\n if (this._nonInstanceMipLevelDataPoolSize === 0) {\r\n buffer = new Float32Array(1);\r\n this._nonInstanceMipLevelDataPool.push(buffer);\r\n } else {\r\n buffer = this._nonInstanceMipLevelDataPool[--this._nonInstanceMipLevelDataPoolSize];\r\n }\r\n buffer[0] = val;\r\n return buffer;\r\n }\r\n private patch2d(tileResolution: number, x: number, y: number) {\r\n return y * (tileResolution + 1) + x;\r\n }\r\n private calcAABB(vertices: Float32Array): AABB {\r\n let maxX = -Number.MAX_VALUE;\r\n let maxY = -Number.MAX_VALUE;\r\n let minX = Number.MAX_VALUE;\r\n let minY = Number.MAX_VALUE;\r\n for (let i = 0; i < vertices.length / 3; i++) {\r\n const x = vertices[i * 3 + 0];\r\n const y = vertices[i * 3 + 1];\r\n if (x > maxX) {\r\n maxX = x;\r\n }\r\n if (x < minX) {\r\n minX = x;\r\n }\r\n if (y > maxY) {\r\n maxY = y;\r\n }\r\n if (y < minY) {\r\n minY = y;\r\n }\r\n }\r\n return new AABB(new Vector3(minX, minY, 0), new Vector3(maxX, maxY, 0));\r\n }\r\n generateTileMesh() {\r\n this._tileMesh?.dispose();\r\n this._tileMesh = new Primitive();\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * patchVertResolution * 3);\r\n let n = 0;\r\n for (let y = 0; y < patchVertResolution; y++) {\r\n for (let x = 0; x < patchVertResolution; x++) {\r\n vertices[n++] = x;\r\n vertices[n++] = y;\r\n vertices[n++] = 0;\r\n }\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * this._tileResolution * 6);\r\n for (let y = 0; y < this._tileResolution; y++) {\r\n for (let x = 0; x < this._tileResolution; x++) {\r\n indices[n++] = this.patch2d(this._tileResolution, x, y);\r\n indices[n++] = this.patch2d(this._tileResolution, x, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x, y);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y);\r\n }\r\n }\r\n this._tileMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._tileMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._tileMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._tileMesh.createAndSetIndexBuffer(indices);\r\n this._tileMesh.indexStart = 0;\r\n this._tileMesh.indexCount = indices.length;\r\n this._tileMesh.primitiveType = 'triangle-list';\r\n this._tileMeshBBox = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._tileMeshLines?.dispose();\r\n this._tileMeshLines = new Primitive();\r\n this._tileMeshLines.setVertexBuffer(this._tileMesh.getVertexBuffer('position'));\r\n this._tileMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._tileMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._tileMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._tileMeshLines.indexStart = 0;\r\n this._tileMeshLines.indexCount = indicesLines.length;\r\n this._tileMeshLines.primitiveType = 'line-list';\r\n }\r\n generateFillerMesh() {\r\n this._fillerMesh?.dispose();\r\n this._fillerMesh = new Primitive();\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\r\n let n = 0;\r\n const offset = this._tileResolution;\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = 1;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = 0;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * 24);\r\n for (let i = 0; i < this._tileResolution * 4; i++) {\r\n const arm = (i / this._tileResolution) >> 0;\r\n const bl = (arm + i) * 2 + 0;\r\n const br = (arm + i) * 2 + 1;\r\n const tl = (arm + i) * 2 + 2;\r\n const tr = (arm + i) * 2 + 3;\r\n if (arm % 2 === 0) {\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = bl;\r\n indices[n++] = bl;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n } else {\r\n indices[n++] = br;\r\n indices[n++] = tl;\r\n indices[n++] = bl;\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n }\r\n }\r\n this._fillerMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._fillerMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._fillerMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._fillerMesh.createAndSetIndexBuffer(indices);\r\n this._fillerMesh.indexStart = 0;\r\n this._fillerMesh.indexCount = indices.length;\r\n this._fillerMesh.primitiveType = 'triangle-list';\r\n this._fillerMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._fillerMeshLines?.dispose();\r\n this._fillerMeshLines = new Primitive();\r\n this._fillerMeshLines.setVertexBuffer(this._fillerMesh.getVertexBuffer('position'));\r\n this._fillerMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._fillerMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._fillerMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._fillerMeshLines.indexStart = 0;\r\n this._fillerMeshLines.indexCount = indicesLines.length;\r\n this._fillerMeshLines.primitiveType = 'line-list';\r\n }\r\n generateTrimMesh() {\r\n this._trimMesh?.dispose();\r\n this._trimMesh = new Primitive();\r\n const clipmapVertResolution = this._tileResolution * 4 + 2;\r\n const vertices = new Float32Array((clipmapVertResolution * 2 + 1) * 2 * 3);\r\n let n = 0;\r\n const d = 0.5 * (clipmapVertResolution + 1);\r\n for (let i = 0; i < clipmapVertResolution + 1; i++) {\r\n vertices[n++] = 0 - d;\r\n vertices[n++] = clipmapVertResolution - i - d;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1 - d;\r\n vertices[n++] = clipmapVertResolution - i - d;\r\n vertices[n++] = 0;\r\n }\r\n const startOfHorizonal = n / 3;\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n vertices[n++] = i + 1 - d;\r\n vertices[n++] = 0 - d;\r\n vertices[n++] = 0;\r\n vertices[n++] = i + 1 - d;\r\n vertices[n++] = 1 - d;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array((clipmapVertResolution * 2 - 1) * 6);\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n indices[n++] = (i + 0) * 2 + 1;\r\n indices[n++] = (i + 1) * 2 + 0;\r\n indices[n++] = (i + 0) * 2 + 0;\r\n indices[n++] = (i + 1) * 2 + 1;\r\n indices[n++] = (i + 1) * 2 + 0;\r\n indices[n++] = (i + 0) * 2 + 1;\r\n }\r\n for (let i = 0; i < clipmapVertResolution - 1; i++) {\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 1;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\r\n }\r\n this._trimMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._trimMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._trimMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._trimMesh.createAndSetIndexBuffer(indices);\r\n this._trimMesh.indexStart = 0;\r\n this._trimMesh.indexCount = indices.length;\r\n this._trimMesh.primitiveType = 'triangle-list';\r\n this._trimMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._trimMeshLines?.dispose();\r\n this._trimMeshLines = new Primitive();\r\n this._trimMeshLines.setVertexBuffer(this._trimMesh.getVertexBuffer('position'));\r\n this._trimMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._trimMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._trimMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._trimMeshLines.indexStart = 0;\r\n this._trimMeshLines.indexCount = indicesLines.length;\r\n this._trimMeshLines.primitiveType = 'line-list';\r\n }\r\n generateCrossMesh() {\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\r\n let n = 0;\r\n for (let i = 0; i < patchVertResolution * 2; i++) {\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n }\r\n const startOfVertical = n / 3;\r\n for (let i = 0; i < patchVertResolution * 2; i++) {\r\n vertices[n++] = 0;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * 24 + 6);\r\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\r\n const bl = i * 2 + 0;\r\n const br = i * 2 + 1;\r\n const tl = i * 2 + 2;\r\n const tr = i * 2 + 3;\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = bl;\r\n indices[n++] = bl;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n }\r\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\r\n if (i === this._tileResolution) {\r\n continue;\r\n }\r\n const bl = i * 2 + 0;\r\n const br = i * 2 + 1;\r\n const tl = i * 2 + 2;\r\n const tr = i * 2 + 3;\r\n indices[n++] = startOfVertical + br;\r\n indices[n++] = startOfVertical + bl;\r\n indices[n++] = startOfVertical + tr;\r\n indices[n++] = startOfVertical + bl;\r\n indices[n++] = startOfVertical + tl;\r\n indices[n++] = startOfVertical + tr;\r\n }\r\n this._crossMesh?.dispose();\r\n this._crossMesh = new Primitive();\r\n this._crossMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._crossMesh.createAndSetVertexBuffer(\r\n 'tex0_f32x4',\r\n this.allocNonInstanceBuffer(0, 0, 0, 0),\r\n 'instance'\r\n );\r\n this._nonInstanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._crossMesh.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\r\n this._nonInstanceDataPoolSize++;\r\n }\r\n this._crossMesh.createAndSetIndexBuffer(indices);\r\n this._crossMesh.indexStart = 0;\r\n this._crossMesh.indexCount = indices.length;\r\n this._crossMesh.primitiveType = 'triangle-list';\r\n this._crossMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._crossMeshLines?.dispose();\r\n this._crossMeshLines = new Primitive();\r\n this._crossMeshLines.setVertexBuffer(this._crossMesh.getVertexBuffer('position'));\r\n this._crossMeshLines.createAndSetVertexBuffer(\r\n 'tex0_f32x4',\r\n this.allocNonInstanceBuffer(0, 0, 0, 0),\r\n 'instance'\r\n );\r\n this._nonInstanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._crossMeshLines.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\r\n this._nonInstanceDataPoolSize++;\r\n }\r\n this._crossMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._crossMeshLines.indexStart = 0;\r\n this._crossMeshLines.indexCount = indicesLines.length;\r\n this._crossMeshLines.primitiveType = 'line-list';\r\n }\r\n generateSeamMesh() {\r\n this._seamMesh?.dispose();\r\n this._seamMesh = new Primitive();\r\n const clipmapVertResolution = this._tileResolution * 4 + 2;\r\n const vertices = new Float32Array(clipmapVertResolution * 4 * 3);\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 0] = i;\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 1] = 0;\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 0] = clipmapVertResolution;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 1] = i;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 0] = clipmapVertResolution - i;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 1] = clipmapVertResolution;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 0] = 0;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 1] = clipmapVertResolution - i;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 2] = 0;\r\n }\r\n const indices = new Uint16Array(clipmapVertResolution * 6);\r\n let n = 0;\r\n for (let i = 0; i < clipmapVertResolution * 4; i += 2) {\r\n indices[n++] = i + 1;\r\n indices[n++] = i + 2;\r\n indices[n++] = i;\r\n }\r\n indices[indices.length - 1] = 0;\r\n this._seamMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._seamMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._seamMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._seamMesh.createAndSetIndexBuffer(indices);\r\n this._seamMesh.indexStart = 0;\r\n this._seamMesh.indexCount = indices.length;\r\n this._seamMesh.primitiveType = 'triangle-list';\r\n this._seamMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._seamMeshLines?.dispose();\r\n this._seamMeshLines = new Primitive();\r\n this._seamMeshLines.setVertexBuffer(this._seamMesh.getVertexBuffer('position'));\r\n this._seamMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._seamMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._seamMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._seamMeshLines.indexStart = 0;\r\n this._seamMeshLines.indexCount = indicesLines.length;\r\n this._seamMeshLines.primitiveType = 'line-list';\r\n }\r\n private intervalsOverlap(a0: number, a1: number, b0: number, b1: number) {\r\n return a0 <= b1 && b0 <= a1;\r\n }\r\n private updateAABB(\r\n aabb: AABB,\r\n rotation: number,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n outAABB: AABB\r\n ) {\r\n if (!rotation) {\r\n tmpAABB.minPoint.set(aabb.minPoint);\r\n tmpAABB.maxPoint.set(aabb.maxPoint);\r\n } else {\r\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\r\n }\r\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\r\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\r\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\r\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\r\n if (minX < outAABB.minPoint.x) {\r\n outAABB.minPoint.x = minX;\r\n }\r\n if (maxX > outAABB.maxPoint.x) {\r\n outAABB.maxPoint.x = maxX;\r\n }\r\n if (minZ < outAABB.minPoint.z) {\r\n outAABB.minPoint.z = minZ;\r\n }\r\n if (maxZ > outAABB.maxPoint.z) {\r\n outAABB.maxPoint.z = maxZ;\r\n }\r\n }\r\n private visible(\r\n ctx: ClipmapGatherContext,\r\n aabb: AABB,\r\n camera: Camera,\r\n rotation: number,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n level: number\r\n ) {\r\n if (!rotation) {\r\n tmpAABB.minPoint.set(aabb.minPoint);\r\n tmpAABB.maxPoint.set(aabb.maxPoint);\r\n } else {\r\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\r\n }\r\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\r\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\r\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\r\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\r\n ctx.calcAABB(ctx.userData, minX, maxX, minZ, maxZ, tmpAABB, level);\r\n return tmpAABB.getClipStateWithFrustum(camera.frustum) !== ClipState.NOT_CLIPPED;\r\n }\r\n calcLevelAABB(camera: Camera, minMaxWorldPos: Vector4, gridScale: number): AABB[] {\r\n const mipLevels = this.calcMipLevels(camera, minMaxWorldPos, gridScale);\r\n camera.getWorldPosition(tmpV3);\r\n\r\n const snappedPos = new Vector2();\r\n const tileSize = new Vector2();\r\n const base = new Vector2();\r\n const offset = new Vector2();\r\n\r\n const posX = tmpV3.x / gridScale;\r\n const posY = tmpV3.z / gridScale;\r\n\r\n const outAABB: AABB[] = [];\r\n for (let i = 0; i < mipLevels; i++) {\r\n const aabb = new AABB();\r\n aabb.beginExtend();\r\n outAABB.push(aabb);\r\n }\r\n\r\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\r\n\r\n // cross\r\n this.updateAABB(this._crossMeshAABB, null, snappedPos, 1, gridScale, outAABB[0]);\r\n\r\n for (let l = 0; l < mipLevels; l++) {\r\n const aabb = outAABB[l];\r\n const scale = 1 << l;\r\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\r\n // draw tiles\r\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\r\n base.setXY(\r\n snappedPos.x - (this._tileResolution << (l + 1)),\r\n snappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n for (let x = 0; x < 4; x++) {\r\n for (let y = 0; y < 4; y++) {\r\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\r\n continue;\r\n }\r\n const fillX = x >= 2 ? scale : 0;\r\n const fillY = y >= 2 ? scale : 0;\r\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\r\n this.updateAABB(this._tileMeshBBox, null, offset, scale, gridScale, aabb);\r\n }\r\n }\r\n // draw filler\r\n this.updateAABB(this._fillerMeshAABB, null, snappedPos, scale, gridScale, aabb);\r\n\r\n const nextScale = scale * 2;\r\n const nextSnappedPos = new Vector2(\r\n Math.floor(posX / nextScale) * nextScale,\r\n Math.floor(posY / nextScale) * nextScale\r\n );\r\n // draw trim\r\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\r\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\r\n let r = 0;\r\n r |= d.x >= scale ? 0 : 2;\r\n r |= d.y >= scale ? 0 : 1;\r\n this.updateAABB(this._trimMeshAABB, rotationValues[r], tileCentre, scale, gridScale, aabb);\r\n // draw seam\r\n const nextBase = new Vector2(\r\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\r\n nextSnappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n this.updateAABB(this._seamMeshAABB, null, nextBase, scale, gridScale, aabb);\r\n }\r\n return outAABB;\r\n }\r\n private calcMipLevels(camera: Camera, minMaxWorldPos: Vector4, gridScale: number) {\r\n camera.getWorldPosition(tmpV3);\r\n const distX = Math.max(Math.abs(tmpV3.x - minMaxWorldPos.x), Math.abs(tmpV3.x - minMaxWorldPos.z));\r\n const distY = Math.max(Math.abs(tmpV3.z - minMaxWorldPos.y), Math.abs(tmpV3.z - minMaxWorldPos.w));\r\n const maxDist = Math.min(Math.max(distX, distY), camera.getFarPlane());\r\n return Math.min(\r\n Math.max(Math.ceil(Math.log2(maxDist / (this._tileResolution * gridScale))), 0) + 1,\r\n this._maxMipLevels\r\n );\r\n }\r\n private addInstance(\r\n info: PrimitiveInstanceInfo,\r\n rotation: number,\r\n offsetX: number,\r\n offsetY: number,\r\n scale: number,\r\n mipLevel: number\r\n ) {\r\n info.mipLevels[info.numInstances] = mipLevel;\r\n info.instanceDatas[info.numInstances * 4 + 0] = rotation;\r\n info.instanceDatas[info.numInstances * 4 + 1] = scale;\r\n info.instanceDatas[info.numInstances * 4 + 2] = offsetX;\r\n info.instanceDatas[info.numInstances * 4 + 3] = offsetY;\r\n info.maxMiplevel = mipLevel;\r\n info.numInstances++;\r\n }\r\n\r\n gather(context: ClipmapGatherContext): PrimitiveInstanceInfo[] {\r\n this._instanceDataPoolSize = this._instanceDataPool.length;\r\n this._mipLevelDataPoolSize = this._mipLevelDataPool.length;\r\n this._nonInstanceDataPoolSize = this._nonInstanceDataPool.length;\r\n this._nonInstanceMipLevelDataPoolSize = this._nonInstanceMipLevelDataPool.length;\r\n const renderData: PrimitiveInstanceInfo[] = [];\r\n const mipLevels = this.calcMipLevels(context.camera, context.minMaxWorldPos, context.gridScale);\r\n context.camera.getWorldPosition(tmpV3);\r\n\r\n const snappedPos = new Vector2();\r\n const tileSize = new Vector2();\r\n const base = new Vector2();\r\n const offset = new Vector2();\r\n\r\n const posX = tmpV3.x / context.gridScale;\r\n const posY = tmpV3.z / context.gridScale;\r\n\r\n // draw cross\r\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(context, this._crossMeshAABB, context.camera, null, snappedPos, 1, context.gridScale, 0)\r\n ) {\r\n const crossPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._crossMeshLines : this._crossMesh,\r\n numInstances: 1,\r\n instanceDatas: this.allocNonInstanceBuffer(rotationValues[0], 1, snappedPos.x, snappedPos.y),\r\n mipLevels: this.allocNonInstanceMipLevelBuffer(0),\r\n maxMiplevel: 0\r\n };\r\n renderData.push(crossPrimitives);\r\n }\r\n\r\n const tilePrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._tileMeshLines : this._tileMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const fillerPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._fillerMeshLines : this._fillerMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const trimPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._trimMeshLines : this._trimMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const seamPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._seamMeshLines : this._seamMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n\r\n for (let l = 0; l < mipLevels; l++) {\r\n const scale = 1 << l;\r\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\r\n // draw tiles\r\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\r\n base.setXY(\r\n snappedPos.x - (this._tileResolution << (l + 1)),\r\n snappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n for (let x = 0; x < 4; x++) {\r\n for (let y = 0; y < 4; y++) {\r\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\r\n continue;\r\n }\r\n const fillX = x >= 2 ? scale : 0;\r\n const fillY = y >= 2 ? scale : 0;\r\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\r\n if (\r\n this.intervalsOverlap(\r\n offset.x * context.gridScale,\r\n (offset.x + tileSize.x) * context.gridScale,\r\n context.minMaxWorldPos.x,\r\n context.minMaxWorldPos.z\r\n ) &&\r\n this.intervalsOverlap(\r\n offset.y * context.gridScale,\r\n (offset.y + tileSize.y) * context.gridScale,\r\n context.minMaxWorldPos.y,\r\n context.minMaxWorldPos.w\r\n )\r\n ) {\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._tileMeshBBox,\r\n context.camera,\r\n null,\r\n offset,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(tilePrimitives, rotationValues[0], offset.x, offset.y, scale, l);\r\n }\r\n }\r\n }\r\n }\r\n // draw filler\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._fillerMeshAABB,\r\n context.camera,\r\n null,\r\n snappedPos,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(fillerPrimitives, rotationValues[0], snappedPos.x, snappedPos.y, scale, l);\r\n }\r\n\r\n if (l !== mipLevels - 1) {\r\n const nextScale = scale * 2;\r\n const nextSnappedPos = new Vector2(\r\n Math.floor(posX / nextScale) * nextScale,\r\n Math.floor(posY / nextScale) * nextScale\r\n );\r\n // draw trim\r\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\r\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\r\n let r = 0;\r\n r |= d.x >= scale ? 0 : 2;\r\n r |= d.y >= scale ? 0 : 1;\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._trimMeshAABB,\r\n context.camera,\r\n rotationValues[r],\r\n tileCentre,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(trimPrimitives, rotationValues[r], tileCentre.x, tileCentre.y, scale, l);\r\n }\r\n // draw seam\r\n const nextBase = new Vector2(\r\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\r\n nextSnappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._seamMeshAABB,\r\n context.camera,\r\n null,\r\n nextBase,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(seamPrimitives, rotationValues[0], nextBase.x, nextBase.y, scale, l);\r\n }\r\n }\r\n }\r\n if (tilePrimitives.numInstances > 0) {\r\n renderData.push(tilePrimitives);\r\n }\r\n if (fillerPrimitives.numInstances > 0) {\r\n renderData.push(fillerPrimitives);\r\n }\r\n if (trimPrimitives.numInstances > 0) {\r\n renderData.push(trimPrimitives);\r\n }\r\n if (seamPrimitives.numInstances > 0) {\r\n renderData.push(seamPrimitives);\r\n }\r\n for (const info of renderData) {\r\n info.primitive\r\n .getVertexBuffer('texCoord0')\r\n .bufferSubData(0, info.instanceDatas, 0, info.numInstances * 4);\r\n }\r\n return renderData;\r\n }\r\n /** Disposes the clipmap and release all meshes */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._crossMesh.dispose();\r\n this._crossMesh = null;\r\n this._crossMeshLines.dispose();\r\n this._crossMeshLines = null;\r\n this._fillerMesh.dispose();\r\n this._fillerMesh = null;\r\n this._fillerMeshLines.dispose();\r\n this._fillerMeshLines = null;\r\n this._seamMesh.dispose();\r\n this._seamMesh = null;\r\n this._seamMeshLines.dispose();\r\n this._seamMeshLines = null;\r\n this._trimMesh.dispose();\r\n this._trimMesh = null;\r\n this._trimMeshLines.dispose();\r\n this._trimMeshLines = null;\r\n this._tileMesh.dispose();\r\n this._tileMesh = null;\r\n this._tileMeshLines.dispose();\r\n this._tileMeshLines = null;\r\n }\r\n}\r\n"],"names":["tmpAABB","AABB","tmpV3","Vector3","rotationValues","Math","PI","Clipmap","Disposable","_instanceDataPool","_instanceDataPoolSize","_mipLevelDataPool","_mipLevelDataPoolSize","_nonInstanceDataPool","_nonInstanceDataPoolSize","_nonInstanceMipLevelDataPool","_nonInstanceMipLevelDataPoolSize","_extraInstanceBuffers","_tileResolution","_maxMipLevels","_tileMesh","_tileMeshLines","_tileMeshBBox","_fillerMesh","_fillerMeshLines","_fillerMeshAABB","_trimMesh","_trimMeshLines","_trimMeshAABB","_crossMesh","_crossMeshLines","_crossMeshAABB","_seamMesh","_seamMeshLines","_seamMeshAABB","_wireframe","resolution","extraInstanceBuffers","maxMipLevels","findIndex","val","getVertexAttributeIndex","VERTEX_ATTRIB_POSITION","VERTEX_ATTRIB_TEXCOORD0","getVertexAttributeFormat","Error","slice","min","max","generateCrossMesh","generateFillerMesh","generateSeamMesh","generateTileMesh","generateTrimMesh","wireframe","tileResolution","allocInstanceBuffer","buffer","Float32Array","push","allocNonInstanceBuffer","x","y","z","w","allocMipLevelBuffer","allocNonInstanceMipLevelBuffer","patch2d","calcAABB","vertices","maxX","Number","MAX_VALUE","maxY","minX","minY","i","length","dispose","Primitive","patchVertResolution","n","indices","Uint16Array","createAndSetVertexBuffer","fmt","createAndSetIndexBuffer","indexStart","indexCount","primitiveType","indicesLines","setVertexBuffer","getVertexBuffer","offset","arm","bl","br","tl","tr","clipmapVertResolution","d","startOfHorizonal","startOfVertical","intervalsOverlap","a0","a1","b0","b1","updateAABB","aabb","rotation","scale","gridScale","outAABB","minPoint","set","maxPoint","transform","Matrix4x4","rotationZ","minZ","maxZ","visible","ctx","camera","level","userData","getClipStateWithFrustum","frustum","ClipState","NOT_CLIPPED","calcLevelAABB","minMaxWorldPos","mipLevels","calcMipLevels","getWorldPosition","snappedPos","Vector2","tileSize","base","posX","posY","beginExtend","setXY","floor","l","fillX","fillY","nextScale","nextSnappedPos","tileCentre","r","nextBase","distX","abs","distY","maxDist","getFarPlane","ceil","log2","addInstance","info","offsetX","offsetY","mipLevel","numInstances","instanceDatas","maxMiplevel","gather","context","renderData","frustumCulling","crossPrimitives","primitive","tilePrimitives","fillerPrimitives","trimPrimitives","seamPrimitives","bufferSubData","onDispose"],"mappings":"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"}
1
+ {"version":3,"file":"clipmap.js","sources":["../../src/render/clipmap.ts"],"sourcesContent":["/**\r\n * copy from http://git.mikejsavage.co.uk/medfall/file/clipmap.cc.html#l197\r\n */\r\n\r\nimport type { Nullable, Vector4 } from '@zephyr3d/base';\r\nimport { AABB, ClipState, Disposable, Matrix4x4, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from '../camera';\r\nimport { Primitive } from './primitive';\r\nimport {\r\n getVertexAttributeFormat,\r\n getVertexAttributeIndex,\r\n VERTEX_ATTRIB_POSITION,\r\n VERTEX_ATTRIB_TEXCOORD0,\r\n type VertexAttribFormat\r\n} from '@zephyr3d/device';\r\n\r\nconst tmpAABB = new AABB();\r\nconst tmpV3 = new Vector3();\r\nconst rotationValues = [0, Math.PI * 1.5, Math.PI * 0.5, Math.PI] as const;\r\n\r\n/** @internal */\r\nexport type PrimitiveInstanceInfo = {\r\n primitive: Primitive;\r\n numInstances: number;\r\n instanceDatas: Float32Array<ArrayBuffer>;\r\n mipLevels: Float32Array<ArrayBuffer>;\r\n maxMiplevel: number;\r\n};\r\n/** @internal */\r\nexport interface ClipmapGatherContext {\r\n camera: Camera;\r\n gridScale: number;\r\n minMaxWorldPos: Vector4;\r\n userData: unknown;\r\n frustumCulling: boolean;\r\n calcAABB(\r\n userData: unknown,\r\n minX: number,\r\n maxX: number,\r\n minZ: number,\r\n maxZ: number,\r\n outAABB: AABB,\r\n level: number\r\n ): void;\r\n}\r\n\r\n/** @internal */\r\nexport interface ClipmapDrawContext extends ClipmapGatherContext {\r\n drawPrimitive(\r\n prim: Primitive,\r\n rotation: number,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n level: number\r\n ): void;\r\n}\r\n\r\n/** @internal */\r\nexport class Clipmap extends Disposable {\r\n private readonly _instanceDataPool: Float32Array<ArrayBuffer>[];\r\n private _instanceDataPoolSize: number;\r\n private readonly _mipLevelDataPool: Float32Array<ArrayBuffer>[];\r\n private _mipLevelDataPoolSize: number;\r\n private readonly _nonInstanceDataPool: Float32Array<ArrayBuffer>[];\r\n private _nonInstanceDataPoolSize: number;\r\n private readonly _nonInstanceMipLevelDataPool: Float32Array<ArrayBuffer>[];\r\n private _nonInstanceMipLevelDataPoolSize: number;\r\n private readonly _extraInstanceBuffers: VertexAttribFormat[];\r\n private _tileResolution: number;\r\n private readonly _maxMipLevels: number;\r\n\r\n private _tileMesh!: Primitive;\r\n private _tileMeshLines!: Primitive;\r\n private _tileMeshBBox!: AABB;\r\n\r\n private _fillerMesh!: Primitive;\r\n private _fillerMeshLines!: Primitive;\r\n private _fillerMeshAABB!: AABB;\r\n\r\n private _trimMesh!: Primitive;\r\n private _trimMeshLines!: Primitive;\r\n private _trimMeshAABB!: AABB;\r\n\r\n private _crossMesh!: Primitive;\r\n private _crossMeshLines!: Primitive;\r\n private _crossMeshAABB!: AABB;\r\n\r\n private _seamMesh!: Primitive;\r\n private _seamMeshLines!: Primitive;\r\n private _seamMeshAABB!: AABB;\r\n\r\n private _wireframe: boolean;\r\n\r\n constructor(resolution: number, extraInstanceBuffers: VertexAttribFormat[], maxMipLevels = 64) {\r\n super();\r\n if (\r\n extraInstanceBuffers &&\r\n extraInstanceBuffers.findIndex(\r\n (val) =>\r\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_POSITION ||\r\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_TEXCOORD0 ||\r\n getVertexAttributeFormat(val) !== 'f32'\r\n ) >= 0\r\n ) {\r\n throw new Error(\r\n 'Extra instance buffers must be f32 format and cannot have vertex attribute of POSITOIN and TEXCOORD0'\r\n );\r\n }\r\n this._extraInstanceBuffers = extraInstanceBuffers?.slice() ?? [];\r\n this._tileResolution = resolution;\r\n this._maxMipLevels = Math.min(64, Math.max(1, maxMipLevels >>> 0));\r\n this._instanceDataPool = [];\r\n this._instanceDataPoolSize = 0;\r\n this._mipLevelDataPool = [];\r\n this._mipLevelDataPoolSize = 0;\r\n this._nonInstanceDataPool = [];\r\n this._nonInstanceDataPoolSize = 0;\r\n this._nonInstanceMipLevelDataPool = [];\r\n this._nonInstanceMipLevelDataPoolSize = 0;\r\n this._wireframe = false;\r\n this.generateCrossMesh();\r\n this.generateFillerMesh();\r\n this.generateSeamMesh();\r\n this.generateTileMesh();\r\n this.generateTrimMesh();\r\n }\r\n get wireframe() {\r\n return this._wireframe;\r\n }\r\n set wireframe(val: boolean) {\r\n this._wireframe = !!val;\r\n }\r\n get tileResolution() {\r\n return this._tileResolution;\r\n }\r\n set tileResolution(val: number) {\r\n if (val !== this._tileResolution) {\r\n this._tileResolution = val;\r\n this.generateCrossMesh();\r\n this.generateFillerMesh();\r\n this.generateSeamMesh();\r\n this.generateTileMesh();\r\n this.generateTrimMesh();\r\n }\r\n }\r\n private allocInstanceBuffer() {\r\n if (this._instanceDataPoolSize === 0) {\r\n const buffer = new Float32Array(this._maxMipLevels * 16 * 4);\r\n this._instanceDataPool.push(buffer);\r\n return buffer;\r\n } else {\r\n return this._instanceDataPool[--this._instanceDataPoolSize];\r\n }\r\n }\r\n private allocNonInstanceBuffer(x: number, y: number, z: number, w: number) {\r\n let buffer: Float32Array<ArrayBuffer>;\r\n if (this._nonInstanceDataPoolSize === 0) {\r\n buffer = new Float32Array(4);\r\n this._nonInstanceDataPool.push(buffer);\r\n } else {\r\n buffer = this._nonInstanceDataPool[--this._nonInstanceDataPoolSize];\r\n }\r\n buffer[0] = x;\r\n buffer[1] = y;\r\n buffer[2] = z;\r\n buffer[3] = w;\r\n return buffer;\r\n }\r\n private allocMipLevelBuffer() {\r\n if (this._mipLevelDataPoolSize === 0) {\r\n const buffer = new Float32Array(this._maxMipLevels * 16);\r\n this._mipLevelDataPool.push(buffer);\r\n return buffer;\r\n } else {\r\n return this._mipLevelDataPool[--this._mipLevelDataPoolSize];\r\n }\r\n }\r\n private allocNonInstanceMipLevelBuffer(val: number) {\r\n let buffer: Float32Array<ArrayBuffer>;\r\n if (this._nonInstanceMipLevelDataPoolSize === 0) {\r\n buffer = new Float32Array(1);\r\n this._nonInstanceMipLevelDataPool.push(buffer);\r\n } else {\r\n buffer = this._nonInstanceMipLevelDataPool[--this._nonInstanceMipLevelDataPoolSize];\r\n }\r\n buffer[0] = val;\r\n return buffer;\r\n }\r\n private patch2d(tileResolution: number, x: number, y: number) {\r\n return y * (tileResolution + 1) + x;\r\n }\r\n private calcAABB(vertices: Float32Array) {\r\n let maxX = -Number.MAX_VALUE;\r\n let maxY = -Number.MAX_VALUE;\r\n let minX = Number.MAX_VALUE;\r\n let minY = Number.MAX_VALUE;\r\n for (let i = 0; i < vertices.length / 3; i++) {\r\n const x = vertices[i * 3 + 0];\r\n const y = vertices[i * 3 + 1];\r\n if (x > maxX) {\r\n maxX = x;\r\n }\r\n if (x < minX) {\r\n minX = x;\r\n }\r\n if (y > maxY) {\r\n maxY = y;\r\n }\r\n if (y < minY) {\r\n minY = y;\r\n }\r\n }\r\n return new AABB(new Vector3(minX, minY, 0), new Vector3(maxX, maxY, 0));\r\n }\r\n generateTileMesh() {\r\n this._tileMesh?.dispose();\r\n this._tileMesh = new Primitive();\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * patchVertResolution * 3);\r\n let n = 0;\r\n for (let y = 0; y < patchVertResolution; y++) {\r\n for (let x = 0; x < patchVertResolution; x++) {\r\n vertices[n++] = x;\r\n vertices[n++] = y;\r\n vertices[n++] = 0;\r\n }\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * this._tileResolution * 6);\r\n for (let y = 0; y < this._tileResolution; y++) {\r\n for (let x = 0; x < this._tileResolution; x++) {\r\n indices[n++] = this.patch2d(this._tileResolution, x, y);\r\n indices[n++] = this.patch2d(this._tileResolution, x, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x, y);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\r\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y);\r\n }\r\n }\r\n this._tileMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._tileMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._tileMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._tileMesh.createAndSetIndexBuffer(indices);\r\n this._tileMesh.indexStart = 0;\r\n this._tileMesh.indexCount = indices.length;\r\n this._tileMesh.primitiveType = 'triangle-list';\r\n this._tileMeshBBox = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._tileMeshLines?.dispose();\r\n this._tileMeshLines = new Primitive();\r\n this._tileMeshLines.setVertexBuffer(this._tileMesh.getVertexBuffer('position')!);\r\n this._tileMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._tileMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._tileMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._tileMeshLines.indexStart = 0;\r\n this._tileMeshLines.indexCount = indicesLines.length;\r\n this._tileMeshLines.primitiveType = 'line-list';\r\n }\r\n generateFillerMesh() {\r\n this._fillerMesh?.dispose();\r\n this._fillerMesh = new Primitive();\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\r\n let n = 0;\r\n const offset = this._tileResolution;\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = 1;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = offset + i + 1;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n }\r\n for (let i = 0; i < patchVertResolution; i++) {\r\n vertices[n++] = 0;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1;\r\n vertices[n++] = -offset - i;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * 24);\r\n for (let i = 0; i < this._tileResolution * 4; i++) {\r\n const arm = (i / this._tileResolution) >> 0;\r\n const bl = (arm + i) * 2 + 0;\r\n const br = (arm + i) * 2 + 1;\r\n const tl = (arm + i) * 2 + 2;\r\n const tr = (arm + i) * 2 + 3;\r\n if (arm % 2 === 0) {\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = bl;\r\n indices[n++] = bl;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n } else {\r\n indices[n++] = br;\r\n indices[n++] = tl;\r\n indices[n++] = bl;\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n }\r\n }\r\n this._fillerMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._fillerMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._fillerMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._fillerMesh.createAndSetIndexBuffer(indices);\r\n this._fillerMesh.indexStart = 0;\r\n this._fillerMesh.indexCount = indices.length;\r\n this._fillerMesh.primitiveType = 'triangle-list';\r\n this._fillerMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._fillerMeshLines?.dispose();\r\n this._fillerMeshLines = new Primitive();\r\n this._fillerMeshLines.setVertexBuffer(this._fillerMesh.getVertexBuffer('position')!);\r\n this._fillerMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._fillerMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._fillerMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._fillerMeshLines.indexStart = 0;\r\n this._fillerMeshLines.indexCount = indicesLines.length;\r\n this._fillerMeshLines.primitiveType = 'line-list';\r\n }\r\n generateTrimMesh() {\r\n this._trimMesh?.dispose();\r\n this._trimMesh = new Primitive();\r\n const clipmapVertResolution = this._tileResolution * 4 + 2;\r\n const vertices = new Float32Array((clipmapVertResolution * 2 + 1) * 2 * 3);\r\n let n = 0;\r\n const d = 0.5 * (clipmapVertResolution + 1);\r\n for (let i = 0; i < clipmapVertResolution + 1; i++) {\r\n vertices[n++] = 0 - d;\r\n vertices[n++] = clipmapVertResolution - i - d;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1 - d;\r\n vertices[n++] = clipmapVertResolution - i - d;\r\n vertices[n++] = 0;\r\n }\r\n const startOfHorizonal = n / 3;\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n vertices[n++] = i + 1 - d;\r\n vertices[n++] = 0 - d;\r\n vertices[n++] = 0;\r\n vertices[n++] = i + 1 - d;\r\n vertices[n++] = 1 - d;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array((clipmapVertResolution * 2 - 1) * 6);\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n indices[n++] = (i + 0) * 2 + 1;\r\n indices[n++] = (i + 1) * 2 + 0;\r\n indices[n++] = (i + 0) * 2 + 0;\r\n indices[n++] = (i + 1) * 2 + 1;\r\n indices[n++] = (i + 1) * 2 + 0;\r\n indices[n++] = (i + 0) * 2 + 1;\r\n }\r\n for (let i = 0; i < clipmapVertResolution - 1; i++) {\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 1;\r\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\r\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\r\n }\r\n this._trimMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._trimMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._trimMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._trimMesh.createAndSetIndexBuffer(indices);\r\n this._trimMesh.indexStart = 0;\r\n this._trimMesh.indexCount = indices.length;\r\n this._trimMesh.primitiveType = 'triangle-list';\r\n this._trimMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._trimMeshLines?.dispose();\r\n this._trimMeshLines = new Primitive();\r\n this._trimMeshLines.setVertexBuffer(this._trimMesh.getVertexBuffer('position')!);\r\n this._trimMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._trimMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._trimMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._trimMeshLines.indexStart = 0;\r\n this._trimMeshLines.indexCount = indicesLines.length;\r\n this._trimMeshLines.primitiveType = 'line-list';\r\n }\r\n generateCrossMesh() {\r\n const patchVertResolution = this._tileResolution + 1;\r\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\r\n let n = 0;\r\n for (let i = 0; i < patchVertResolution * 2; i++) {\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n vertices[n++] = 0;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 1;\r\n vertices[n++] = 0;\r\n }\r\n const startOfVertical = n / 3;\r\n for (let i = 0; i < patchVertResolution * 2; i++) {\r\n vertices[n++] = 0;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n vertices[n++] = 1;\r\n vertices[n++] = i - this._tileResolution;\r\n vertices[n++] = 0;\r\n }\r\n n = 0;\r\n const indices = new Uint16Array(this._tileResolution * 24 + 6);\r\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\r\n const bl = i * 2 + 0;\r\n const br = i * 2 + 1;\r\n const tl = i * 2 + 2;\r\n const tr = i * 2 + 3;\r\n indices[n++] = br;\r\n indices[n++] = tr;\r\n indices[n++] = bl;\r\n indices[n++] = bl;\r\n indices[n++] = tr;\r\n indices[n++] = tl;\r\n }\r\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\r\n if (i === this._tileResolution) {\r\n continue;\r\n }\r\n const bl = i * 2 + 0;\r\n const br = i * 2 + 1;\r\n const tl = i * 2 + 2;\r\n const tr = i * 2 + 3;\r\n indices[n++] = startOfVertical + br;\r\n indices[n++] = startOfVertical + bl;\r\n indices[n++] = startOfVertical + tr;\r\n indices[n++] = startOfVertical + bl;\r\n indices[n++] = startOfVertical + tl;\r\n indices[n++] = startOfVertical + tr;\r\n }\r\n this._crossMesh?.dispose();\r\n this._crossMesh = new Primitive();\r\n this._crossMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._crossMesh.createAndSetVertexBuffer(\r\n 'tex0_f32x4',\r\n this.allocNonInstanceBuffer(0, 0, 0, 0),\r\n 'instance'\r\n );\r\n this._nonInstanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._crossMesh.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\r\n this._nonInstanceDataPoolSize++;\r\n }\r\n this._crossMesh.createAndSetIndexBuffer(indices);\r\n this._crossMesh.indexStart = 0;\r\n this._crossMesh.indexCount = indices.length;\r\n this._crossMesh.primitiveType = 'triangle-list';\r\n this._crossMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._crossMeshLines?.dispose();\r\n this._crossMeshLines = new Primitive();\r\n this._crossMeshLines.setVertexBuffer(this._crossMesh.getVertexBuffer('position')!);\r\n this._crossMeshLines.createAndSetVertexBuffer(\r\n 'tex0_f32x4',\r\n this.allocNonInstanceBuffer(0, 0, 0, 0),\r\n 'instance'\r\n );\r\n this._nonInstanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._crossMeshLines.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\r\n this._nonInstanceDataPoolSize++;\r\n }\r\n this._crossMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._crossMeshLines.indexStart = 0;\r\n this._crossMeshLines.indexCount = indicesLines.length;\r\n this._crossMeshLines.primitiveType = 'line-list';\r\n }\r\n generateSeamMesh() {\r\n this._seamMesh?.dispose();\r\n this._seamMesh = new Primitive();\r\n const clipmapVertResolution = this._tileResolution * 4 + 2;\r\n const vertices = new Float32Array(clipmapVertResolution * 4 * 3);\r\n for (let i = 0; i < clipmapVertResolution; i++) {\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 0] = i;\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 1] = 0;\r\n vertices[(clipmapVertResolution * 0 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 0] = clipmapVertResolution;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 1] = i;\r\n vertices[(clipmapVertResolution * 1 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 0] = clipmapVertResolution - i;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 1] = clipmapVertResolution;\r\n vertices[(clipmapVertResolution * 2 + i) * 3 + 2] = 0;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 0] = 0;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 1] = clipmapVertResolution - i;\r\n vertices[(clipmapVertResolution * 3 + i) * 3 + 2] = 0;\r\n }\r\n const indices = new Uint16Array(clipmapVertResolution * 6);\r\n let n = 0;\r\n for (let i = 0; i < clipmapVertResolution * 4; i += 2) {\r\n indices[n++] = i + 1;\r\n indices[n++] = i + 2;\r\n indices[n++] = i;\r\n }\r\n indices[indices.length - 1] = 0;\r\n this._seamMesh.createAndSetVertexBuffer('position_f32x3', vertices);\r\n this._seamMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._seamMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._seamMesh.createAndSetIndexBuffer(indices);\r\n this._seamMesh.indexStart = 0;\r\n this._seamMesh.indexCount = indices.length;\r\n this._seamMesh.primitiveType = 'triangle-list';\r\n this._seamMeshAABB = this.calcAABB(vertices);\r\n\r\n const indicesLines = new Uint16Array(indices.length * 2);\r\n for (let i = 0; i < indices.length / 3; i++) {\r\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\r\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\r\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\r\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\r\n }\r\n this._seamMeshLines?.dispose();\r\n this._seamMeshLines = new Primitive();\r\n this._seamMeshLines.setVertexBuffer(this._seamMesh.getVertexBuffer('position')!);\r\n this._seamMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n for (const fmt of this._extraInstanceBuffers) {\r\n this._seamMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\r\n this._instanceDataPoolSize++;\r\n }\r\n this._seamMeshLines.createAndSetIndexBuffer(indicesLines);\r\n this._seamMeshLines.indexStart = 0;\r\n this._seamMeshLines.indexCount = indicesLines.length;\r\n this._seamMeshLines.primitiveType = 'line-list';\r\n }\r\n private intervalsOverlap(a0: number, a1: number, b0: number, b1: number) {\r\n return a0 <= b1 && b0 <= a1;\r\n }\r\n private updateAABB(\r\n aabb: AABB,\r\n rotation: Nullable<number>,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n outAABB: AABB\r\n ) {\r\n if (!rotation) {\r\n tmpAABB.minPoint.set(aabb.minPoint);\r\n tmpAABB.maxPoint.set(aabb.maxPoint);\r\n } else {\r\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\r\n }\r\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\r\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\r\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\r\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\r\n if (minX < outAABB.minPoint.x) {\r\n outAABB.minPoint.x = minX;\r\n }\r\n if (maxX > outAABB.maxPoint.x) {\r\n outAABB.maxPoint.x = maxX;\r\n }\r\n if (minZ < outAABB.minPoint.z) {\r\n outAABB.minPoint.z = minZ;\r\n }\r\n if (maxZ > outAABB.maxPoint.z) {\r\n outAABB.maxPoint.z = maxZ;\r\n }\r\n }\r\n private visible(\r\n ctx: ClipmapGatherContext,\r\n aabb: AABB,\r\n camera: Camera,\r\n rotation: Nullable<number>,\r\n offset: Vector2,\r\n scale: number,\r\n gridScale: number,\r\n level: number\r\n ) {\r\n if (!rotation) {\r\n tmpAABB.minPoint.set(aabb.minPoint);\r\n tmpAABB.maxPoint.set(aabb.maxPoint);\r\n } else {\r\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\r\n }\r\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\r\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\r\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\r\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\r\n ctx.calcAABB(ctx.userData, minX, maxX, minZ, maxZ, tmpAABB, level);\r\n return tmpAABB.getClipStateWithFrustum(camera.frustum) !== ClipState.NOT_CLIPPED;\r\n }\r\n calcLevelAABB(camera: Camera, minMaxWorldPos: Vector4, gridScale: number) {\r\n const mipLevels = this.calcMipLevels(camera, minMaxWorldPos, gridScale);\r\n camera.getWorldPosition(tmpV3);\r\n\r\n const snappedPos = new Vector2();\r\n const tileSize = new Vector2();\r\n const base = new Vector2();\r\n const offset = new Vector2();\r\n\r\n const posX = tmpV3.x / gridScale;\r\n const posY = tmpV3.z / gridScale;\r\n\r\n const outAABB: AABB[] = [];\r\n for (let i = 0; i < mipLevels; i++) {\r\n const aabb = new AABB();\r\n aabb.beginExtend();\r\n outAABB.push(aabb);\r\n }\r\n\r\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\r\n\r\n // cross\r\n this.updateAABB(this._crossMeshAABB, null, snappedPos, 1, gridScale, outAABB[0]);\r\n\r\n for (let l = 0; l < mipLevels; l++) {\r\n const aabb = outAABB[l];\r\n const scale = 1 << l;\r\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\r\n // draw tiles\r\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\r\n base.setXY(\r\n snappedPos.x - (this._tileResolution << (l + 1)),\r\n snappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n for (let x = 0; x < 4; x++) {\r\n for (let y = 0; y < 4; y++) {\r\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\r\n continue;\r\n }\r\n const fillX = x >= 2 ? scale : 0;\r\n const fillY = y >= 2 ? scale : 0;\r\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\r\n this.updateAABB(this._tileMeshBBox, null, offset, scale, gridScale, aabb);\r\n }\r\n }\r\n // draw filler\r\n this.updateAABB(this._fillerMeshAABB, null, snappedPos, scale, gridScale, aabb);\r\n\r\n const nextScale = scale * 2;\r\n const nextSnappedPos = new Vector2(\r\n Math.floor(posX / nextScale) * nextScale,\r\n Math.floor(posY / nextScale) * nextScale\r\n );\r\n // draw trim\r\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\r\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\r\n let r = 0;\r\n r |= d.x >= scale ? 0 : 2;\r\n r |= d.y >= scale ? 0 : 1;\r\n this.updateAABB(this._trimMeshAABB, rotationValues[r], tileCentre, scale, gridScale, aabb);\r\n // draw seam\r\n const nextBase = new Vector2(\r\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\r\n nextSnappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n this.updateAABB(this._seamMeshAABB, null, nextBase, scale, gridScale, aabb);\r\n }\r\n return outAABB;\r\n }\r\n private calcMipLevels(camera: Camera, minMaxWorldPos: Vector4, gridScale: number) {\r\n camera.getWorldPosition(tmpV3);\r\n const distX = Math.max(Math.abs(tmpV3.x - minMaxWorldPos.x), Math.abs(tmpV3.x - minMaxWorldPos.z));\r\n const distY = Math.max(Math.abs(tmpV3.z - minMaxWorldPos.y), Math.abs(tmpV3.z - minMaxWorldPos.w));\r\n const maxDist = Math.min(Math.max(distX, distY), camera.getFarPlane());\r\n return Math.min(\r\n Math.max(Math.ceil(Math.log2(maxDist / (this._tileResolution * gridScale))), 0) + 1,\r\n this._maxMipLevels\r\n );\r\n }\r\n private addInstance(\r\n info: PrimitiveInstanceInfo,\r\n rotation: number,\r\n offsetX: number,\r\n offsetY: number,\r\n scale: number,\r\n mipLevel: number\r\n ) {\r\n info.mipLevels[info.numInstances] = mipLevel;\r\n info.instanceDatas[info.numInstances * 4 + 0] = rotation;\r\n info.instanceDatas[info.numInstances * 4 + 1] = scale;\r\n info.instanceDatas[info.numInstances * 4 + 2] = offsetX;\r\n info.instanceDatas[info.numInstances * 4 + 3] = offsetY;\r\n info.maxMiplevel = mipLevel;\r\n info.numInstances++;\r\n }\r\n\r\n gather(context: ClipmapGatherContext) {\r\n this._instanceDataPoolSize = this._instanceDataPool.length;\r\n this._mipLevelDataPoolSize = this._mipLevelDataPool.length;\r\n this._nonInstanceDataPoolSize = this._nonInstanceDataPool.length;\r\n this._nonInstanceMipLevelDataPoolSize = this._nonInstanceMipLevelDataPool.length;\r\n const renderData: PrimitiveInstanceInfo[] = [];\r\n const mipLevels = this.calcMipLevels(context.camera, context.minMaxWorldPos, context.gridScale);\r\n context.camera.getWorldPosition(tmpV3);\r\n\r\n const snappedPos = new Vector2();\r\n const tileSize = new Vector2();\r\n const base = new Vector2();\r\n const offset = new Vector2();\r\n\r\n const posX = tmpV3.x / context.gridScale;\r\n const posY = tmpV3.z / context.gridScale;\r\n\r\n // draw cross\r\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(context, this._crossMeshAABB, context.camera, null, snappedPos, 1, context.gridScale, 0)\r\n ) {\r\n const crossPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._crossMeshLines : this._crossMesh,\r\n numInstances: 1,\r\n instanceDatas: this.allocNonInstanceBuffer(rotationValues[0], 1, snappedPos.x, snappedPos.y),\r\n mipLevels: this.allocNonInstanceMipLevelBuffer(0),\r\n maxMiplevel: 0\r\n };\r\n renderData.push(crossPrimitives);\r\n }\r\n\r\n const tilePrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._tileMeshLines : this._tileMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const fillerPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._fillerMeshLines : this._fillerMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const trimPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._trimMeshLines : this._trimMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n const seamPrimitives: PrimitiveInstanceInfo = {\r\n primitive: this._wireframe ? this._seamMeshLines : this._seamMesh,\r\n numInstances: 0,\r\n instanceDatas: this.allocInstanceBuffer(),\r\n mipLevels: this.allocMipLevelBuffer(),\r\n maxMiplevel: 0\r\n };\r\n\r\n for (let l = 0; l < mipLevels; l++) {\r\n const scale = 1 << l;\r\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\r\n // draw tiles\r\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\r\n base.setXY(\r\n snappedPos.x - (this._tileResolution << (l + 1)),\r\n snappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n for (let x = 0; x < 4; x++) {\r\n for (let y = 0; y < 4; y++) {\r\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\r\n continue;\r\n }\r\n const fillX = x >= 2 ? scale : 0;\r\n const fillY = y >= 2 ? scale : 0;\r\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\r\n if (\r\n this.intervalsOverlap(\r\n offset.x * context.gridScale,\r\n (offset.x + tileSize.x) * context.gridScale,\r\n context.minMaxWorldPos.x,\r\n context.minMaxWorldPos.z\r\n ) &&\r\n this.intervalsOverlap(\r\n offset.y * context.gridScale,\r\n (offset.y + tileSize.y) * context.gridScale,\r\n context.minMaxWorldPos.y,\r\n context.minMaxWorldPos.w\r\n )\r\n ) {\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._tileMeshBBox,\r\n context.camera,\r\n null,\r\n offset,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(tilePrimitives, rotationValues[0], offset.x, offset.y, scale, l);\r\n }\r\n }\r\n }\r\n }\r\n // draw filler\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._fillerMeshAABB,\r\n context.camera,\r\n null,\r\n snappedPos,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(fillerPrimitives, rotationValues[0], snappedPos.x, snappedPos.y, scale, l);\r\n }\r\n\r\n if (l !== mipLevels - 1) {\r\n const nextScale = scale * 2;\r\n const nextSnappedPos = new Vector2(\r\n Math.floor(posX / nextScale) * nextScale,\r\n Math.floor(posY / nextScale) * nextScale\r\n );\r\n // draw trim\r\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\r\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\r\n let r = 0;\r\n r |= d.x >= scale ? 0 : 2;\r\n r |= d.y >= scale ? 0 : 1;\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._trimMeshAABB,\r\n context.camera,\r\n rotationValues[r],\r\n tileCentre,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(trimPrimitives, rotationValues[r], tileCentre.x, tileCentre.y, scale, l);\r\n }\r\n // draw seam\r\n const nextBase = new Vector2(\r\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\r\n nextSnappedPos.y - (this._tileResolution << (l + 1))\r\n );\r\n if (\r\n !context.frustumCulling ||\r\n this.visible(\r\n context,\r\n this._seamMeshAABB,\r\n context.camera,\r\n null,\r\n nextBase,\r\n scale,\r\n context.gridScale,\r\n l\r\n )\r\n ) {\r\n this.addInstance(seamPrimitives, rotationValues[0], nextBase.x, nextBase.y, scale, l);\r\n }\r\n }\r\n }\r\n if (tilePrimitives.numInstances > 0) {\r\n renderData.push(tilePrimitives);\r\n }\r\n if (fillerPrimitives.numInstances > 0) {\r\n renderData.push(fillerPrimitives);\r\n }\r\n if (trimPrimitives.numInstances > 0) {\r\n renderData.push(trimPrimitives);\r\n }\r\n if (seamPrimitives.numInstances > 0) {\r\n renderData.push(seamPrimitives);\r\n }\r\n for (const info of renderData) {\r\n info.primitive\r\n .getVertexBuffer('texCoord0')!\r\n .bufferSubData(0, info.instanceDatas, 0, info.numInstances * 4);\r\n }\r\n return renderData;\r\n }\r\n /** Disposes the clipmap and release all meshes */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._crossMesh.dispose();\r\n this._crossMeshLines.dispose();\r\n this._fillerMesh.dispose();\r\n this._fillerMeshLines.dispose();\r\n this._seamMesh.dispose();\r\n this._seamMeshLines.dispose();\r\n this._trimMesh.dispose();\r\n this._trimMeshLines.dispose();\r\n this._tileMesh.dispose();\r\n this._tileMeshLines.dispose();\r\n }\r\n}\r\n"],"names":["tmpAABB","AABB","tmpV3","Vector3","rotationValues","Math","PI","Clipmap","Disposable","_instanceDataPool","_instanceDataPoolSize","_mipLevelDataPool","_mipLevelDataPoolSize","_nonInstanceDataPool","_nonInstanceDataPoolSize","_nonInstanceMipLevelDataPool","_nonInstanceMipLevelDataPoolSize","_extraInstanceBuffers","_tileResolution","_maxMipLevels","_tileMesh","_tileMeshLines","_tileMeshBBox","_fillerMesh","_fillerMeshLines","_fillerMeshAABB","_trimMesh","_trimMeshLines","_trimMeshAABB","_crossMesh","_crossMeshLines","_crossMeshAABB","_seamMesh","_seamMeshLines","_seamMeshAABB","_wireframe","resolution","extraInstanceBuffers","maxMipLevels","findIndex","val","getVertexAttributeIndex","VERTEX_ATTRIB_POSITION","VERTEX_ATTRIB_TEXCOORD0","getVertexAttributeFormat","Error","slice","min","max","generateCrossMesh","generateFillerMesh","generateSeamMesh","generateTileMesh","generateTrimMesh","wireframe","tileResolution","allocInstanceBuffer","buffer","Float32Array","push","allocNonInstanceBuffer","x","y","z","w","allocMipLevelBuffer","allocNonInstanceMipLevelBuffer","patch2d","calcAABB","vertices","maxX","Number","MAX_VALUE","maxY","minX","minY","i","length","dispose","Primitive","patchVertResolution","n","indices","Uint16Array","createAndSetVertexBuffer","fmt","createAndSetIndexBuffer","indexStart","indexCount","primitiveType","indicesLines","setVertexBuffer","getVertexBuffer","offset","arm","bl","br","tl","tr","clipmapVertResolution","d","startOfHorizonal","startOfVertical","intervalsOverlap","a0","a1","b0","b1","updateAABB","aabb","rotation","scale","gridScale","outAABB","minPoint","set","maxPoint","transform","Matrix4x4","rotationZ","minZ","maxZ","visible","ctx","camera","level","userData","getClipStateWithFrustum","frustum","ClipState","NOT_CLIPPED","calcLevelAABB","minMaxWorldPos","mipLevels","calcMipLevels","getWorldPosition","snappedPos","Vector2","tileSize","base","posX","posY","beginExtend","setXY","floor","l","fillX","fillY","nextScale","nextSnappedPos","tileCentre","r","nextBase","distX","abs","distY","maxDist","getFarPlane","ceil","log2","addInstance","info","offsetX","offsetY","mipLevel","numInstances","instanceDatas","maxMiplevel","gather","context","renderData","frustumCulling","crossPrimitives","primitive","tilePrimitives","fillerPrimitives","trimPrimitives","seamPrimitives","bufferSubData","onDispose"],"mappings":";;;;AAgBA,MAAMA,UAAU,IAAIC,IAAAA,EAAAA;AACpB,MAAMC,QAAQ,IAAIC,OAAAA,EAAAA;AAClB,MAAMC,cAAiB,GAAA;AAAC,IAAA,CAAA;AAAGC,IAAAA,IAAAA,CAAKC,EAAE,GAAG,GAAA;AAAKD,IAAAA,IAAAA,CAAKC,EAAE,GAAG,GAAA;AAAKD,IAAAA,IAAAA,CAAKC;AAAG,CAAA;AAwCjE,iBACO,MAAMC,OAAgBC,SAAAA,UAAAA,CAAAA;IACVC,iBAA+C;IACxDC,qBAA8B;IACrBC,iBAA+C;IACxDC,qBAA8B;IACrBC,oBAAkD;IAC3DC,wBAAiC;IACxBC,4BAA0D;IACnEC,gCAAyC;IAChCC,qBAA4C;IACrDC,eAAwB;IACfC,aAAsB;IAE/BC,SAAsB;IACtBC,cAA2B;IAC3BC,aAAqB;IAErBC,WAAwB;IACxBC,gBAA6B;IAC7BC,eAAuB;IAEvBC,SAAsB;IACtBC,cAA2B;IAC3BC,aAAqB;IAErBC,UAAuB;IACvBC,eAA4B;IAC5BC,cAAsB;IAEtBC,SAAsB;IACtBC,cAA2B;IAC3BC,aAAqB;IAErBC,UAAoB;AAE5B,IAAA,WAAA,CAAYC,UAAkB,EAAEC,oBAA0C,EAAEC,YAAAA,GAAe,EAAE,CAAE;QAC7F,KAAK,EAAA;AACL,QAAA,IACED,oBACAA,IAAAA,oBAAAA,CAAqBE,SAAS,CAC5B,CAACC,GACCC,GAAAA,uBAAAA,CAAwBD,GAASE,CAAAA,KAAAA,sBAAAA,IACjCD,wBAAwBD,GAASG,CAAAA,KAAAA,uBAAAA,IACjCC,wBAAyBJ,CAAAA,GAAAA,CAAAA,KAAS,UACjC,CACL,EAAA;AACA,YAAA,MAAM,IAAIK,KACR,CAAA,sGAAA,CAAA;AAEJ;AACA,QAAA,IAAI,CAAC5B,qBAAqB,GAAGoB,oBAAAA,EAAsBS,WAAW,EAAE;QAChE,IAAI,CAAC5B,eAAe,GAAGkB,UAAAA;QACvB,IAAI,CAACjB,aAAa,GAAGd,IAAK0C,CAAAA,GAAG,CAAC,EAAA,EAAI1C,IAAK2C,CAAAA,GAAG,CAAC,CAAA,EAAGV,YAAiB,KAAA,CAAA,CAAA,CAAA;QAC/D,IAAI,CAAC7B,iBAAiB,GAAG,EAAE;QAC3B,IAAI,CAACC,qBAAqB,GAAG,CAAA;QAC7B,IAAI,CAACC,iBAAiB,GAAG,EAAE;QAC3B,IAAI,CAACC,qBAAqB,GAAG,CAAA;QAC7B,IAAI,CAACC,oBAAoB,GAAG,EAAE;QAC9B,IAAI,CAACC,wBAAwB,GAAG,CAAA;QAChC,IAAI,CAACC,4BAA4B,GAAG,EAAE;QACtC,IAAI,CAACC,gCAAgC,GAAG,CAAA;QACxC,IAAI,CAACmB,UAAU,GAAG,KAAA;AAClB,QAAA,IAAI,CAACc,iBAAiB,EAAA;AACtB,QAAA,IAAI,CAACC,kBAAkB,EAAA;AACvB,QAAA,IAAI,CAACC,gBAAgB,EAAA;AACrB,QAAA,IAAI,CAACC,gBAAgB,EAAA;AACrB,QAAA,IAAI,CAACC,gBAAgB,EAAA;AACvB;AACA,IAAA,IAAIC,SAAY,GAAA;QACd,OAAO,IAAI,CAACnB,UAAU;AACxB;IACA,IAAImB,SAAAA,CAAUd,GAAY,EAAE;AAC1B,QAAA,IAAI,CAACL,UAAU,GAAG,CAAC,CAACK,GAAAA;AACtB;AACA,IAAA,IAAIe,cAAiB,GAAA;QACnB,OAAO,IAAI,CAACrC,eAAe;AAC7B;IACA,IAAIqC,cAAAA,CAAef,GAAW,EAAE;AAC9B,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACtB,eAAe,EAAE;YAChC,IAAI,CAACA,eAAe,GAAGsB,GAAAA;AACvB,YAAA,IAAI,CAACS,iBAAiB,EAAA;AACtB,YAAA,IAAI,CAACC,kBAAkB,EAAA;AACvB,YAAA,IAAI,CAACC,gBAAgB,EAAA;AACrB,YAAA,IAAI,CAACC,gBAAgB,EAAA;AACrB,YAAA,IAAI,CAACC,gBAAgB,EAAA;AACvB;AACF;IACQG,mBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC9C,qBAAqB,KAAK,CAAG,EAAA;AACpC,YAAA,MAAM+C,SAAS,IAAIC,YAAAA,CAAa,IAAI,CAACvC,aAAa,GAAG,EAAK,GAAA,CAAA,CAAA;AAC1D,YAAA,IAAI,CAACV,iBAAiB,CAACkD,IAAI,CAACF,MAAAA,CAAAA;YAC5B,OAAOA,MAAAA;SACF,MAAA;YACL,OAAO,IAAI,CAAChD,iBAAiB,CAAC,EAAE,IAAI,CAACC,qBAAqB,CAAC;AAC7D;AACF;AACQkD,IAAAA,sBAAAA,CAAuBC,CAAS,EAAEC,CAAS,EAAEC,CAAS,EAAEC,CAAS,EAAE;QACzE,IAAIP,MAAAA;AACJ,QAAA,IAAI,IAAI,CAAC3C,wBAAwB,KAAK,CAAG,EAAA;AACvC2C,YAAAA,MAAAA,GAAS,IAAIC,YAAa,CAAA,CAAA,CAAA;AAC1B,YAAA,IAAI,CAAC7C,oBAAoB,CAAC8C,IAAI,CAACF,MAAAA,CAAAA;SAC1B,MAAA;YACLA,MAAS,GAAA,IAAI,CAAC5C,oBAAoB,CAAC,EAAE,IAAI,CAACC,wBAAwB,CAAC;AACrE;QACA2C,MAAM,CAAC,EAAE,GAAGI,CAAAA;QACZJ,MAAM,CAAC,EAAE,GAAGK,CAAAA;QACZL,MAAM,CAAC,EAAE,GAAGM,CAAAA;QACZN,MAAM,CAAC,EAAE,GAAGO,CAAAA;QACZ,OAAOP,MAAAA;AACT;IACQQ,mBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAACrD,qBAAqB,KAAK,CAAG,EAAA;AACpC,YAAA,MAAM6C,SAAS,IAAIC,YAAAA,CAAa,IAAI,CAACvC,aAAa,GAAG,EAAA,CAAA;AACrD,YAAA,IAAI,CAACR,iBAAiB,CAACgD,IAAI,CAACF,MAAAA,CAAAA;YAC5B,OAAOA,MAAAA;SACF,MAAA;YACL,OAAO,IAAI,CAAC9C,iBAAiB,CAAC,EAAE,IAAI,CAACC,qBAAqB,CAAC;AAC7D;AACF;AACQsD,IAAAA,8BAAAA,CAA+B1B,GAAW,EAAE;QAClD,IAAIiB,MAAAA;AACJ,QAAA,IAAI,IAAI,CAACzC,gCAAgC,KAAK,CAAG,EAAA;AAC/CyC,YAAAA,MAAAA,GAAS,IAAIC,YAAa,CAAA,CAAA,CAAA;AAC1B,YAAA,IAAI,CAAC3C,4BAA4B,CAAC4C,IAAI,CAACF,MAAAA,CAAAA;SAClC,MAAA;YACLA,MAAS,GAAA,IAAI,CAAC1C,4BAA4B,CAAC,EAAE,IAAI,CAACC,gCAAgC,CAAC;AACrF;QACAyC,MAAM,CAAC,EAAE,GAAGjB,GAAAA;QACZ,OAAOiB,MAAAA;AACT;AACQU,IAAAA,OAAAA,CAAQZ,cAAsB,EAAEM,CAAS,EAAEC,CAAS,EAAE;AAC5D,QAAA,OAAOA,CAAKP,IAAAA,cAAiB,GAAA,CAAA,CAAKM,GAAAA,CAAAA;AACpC;AACQO,IAAAA,QAAAA,CAASC,QAAsB,EAAE;QACvC,IAAIC,IAAAA,GAAO,CAACC,MAAAA,CAAOC,SAAS;QAC5B,IAAIC,IAAAA,GAAO,CAACF,MAAAA,CAAOC,SAAS;QAC5B,IAAIE,IAAAA,GAAOH,OAAOC,SAAS;QAC3B,IAAIG,IAAAA,GAAOJ,OAAOC,SAAS;QAC3B,IAAK,IAAII,IAAI,CAAGA,EAAAA,CAAAA,GAAIP,SAASQ,MAAM,GAAG,GAAGD,CAAK,EAAA,CAAA;AAC5C,YAAA,MAAMf,CAAIQ,GAAAA,QAAQ,CAACO,CAAAA,GAAI,IAAI,CAAE,CAAA;AAC7B,YAAA,MAAMd,CAAIO,GAAAA,QAAQ,CAACO,CAAAA,GAAI,IAAI,CAAE,CAAA;AAC7B,YAAA,IAAIf,IAAIS,IAAM,EAAA;gBACZA,IAAOT,GAAAA,CAAAA;AACT;AACA,YAAA,IAAIA,IAAIa,IAAM,EAAA;gBACZA,IAAOb,GAAAA,CAAAA;AACT;AACA,YAAA,IAAIC,IAAIW,IAAM,EAAA;gBACZA,IAAOX,GAAAA,CAAAA;AACT;AACA,YAAA,IAAIA,IAAIa,IAAM,EAAA;gBACZA,IAAOb,GAAAA,CAAAA;AACT;AACF;QACA,OAAO,IAAI7D,IAAK,CAAA,IAAIE,OAAQuE,CAAAA,IAAAA,EAAMC,MAAM,CAAI,CAAA,EAAA,IAAIxE,OAAQmE,CAAAA,IAAAA,EAAMG,IAAM,EAAA,CAAA,CAAA,CAAA;AACtE;IACArB,gBAAmB,GAAA;QACjB,IAAI,CAAChC,SAAS,EAAE0D,OAAAA,EAAAA;QAChB,IAAI,CAAC1D,SAAS,GAAG,IAAI2D,SAAAA,EAAAA;AACrB,QAAA,MAAMC,mBAAsB,GAAA,IAAI,CAAC9D,eAAe,GAAG,CAAA;AACnD,QAAA,MAAMmD,QAAW,GAAA,IAAIX,YAAasB,CAAAA,mBAAAA,GAAsBA,mBAAsB,GAAA,CAAA,CAAA;AAC9E,QAAA,IAAIC,CAAI,GAAA,CAAA;AACR,QAAA,IAAK,IAAInB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIkB,qBAAqBlB,CAAK,EAAA,CAAA;AAC5C,YAAA,IAAK,IAAID,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAImB,qBAAqBnB,CAAK,EAAA,CAAA;gBAC5CQ,QAAQ,CAACY,IAAI,GAAGpB,CAAAA;gBAChBQ,QAAQ,CAACY,IAAI,GAAGnB,CAAAA;gBAChBO,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;AACF;QACAA,CAAI,GAAA,CAAA;QACJ,MAAMC,OAAAA,GAAU,IAAIC,WAAAA,CAAY,IAAI,CAACjE,eAAe,GAAG,IAAI,CAACA,eAAe,GAAG,CAAA,CAAA;QAC9E,IAAK,IAAI4C,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAI,CAAC5C,eAAe,EAAE4C,CAAK,EAAA,CAAA;YAC7C,IAAK,IAAID,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAI,CAAC3C,eAAe,EAAE2C,CAAK,EAAA,CAAA;gBAC7CqB,OAAO,CAACD,CAAI,EAAA,CAAA,GAAG,IAAI,CAACd,OAAO,CAAC,IAAI,CAACjD,eAAe,EAAE2C,CAAGC,EAAAA,CAAAA,CAAAA;AACrDoB,gBAAAA,OAAO,CAACD,CAAAA,EAAAA,CAAI,GAAG,IAAI,CAACd,OAAO,CAAC,IAAI,CAACjD,eAAe,EAAE2C,CAAAA,EAAGC,CAAI,GAAA,CAAA,CAAA;AACzDoB,gBAAAA,OAAO,CAACD,CAAAA,EAAAA,CAAI,GAAG,IAAI,CAACd,OAAO,CAAC,IAAI,CAACjD,eAAe,EAAE2C,CAAAA,GAAI,GAAGC,CAAI,GAAA,CAAA,CAAA;gBAC7DoB,OAAO,CAACD,CAAI,EAAA,CAAA,GAAG,IAAI,CAACd,OAAO,CAAC,IAAI,CAACjD,eAAe,EAAE2C,CAAGC,EAAAA,CAAAA,CAAAA;AACrDoB,gBAAAA,OAAO,CAACD,CAAAA,EAAAA,CAAI,GAAG,IAAI,CAACd,OAAO,CAAC,IAAI,CAACjD,eAAe,EAAE2C,CAAAA,GAAI,GAAGC,CAAI,GAAA,CAAA,CAAA;AAC7DoB,gBAAAA,OAAO,CAACD,CAAAA,EAAAA,CAAI,GAAG,IAAI,CAACd,OAAO,CAAC,IAAI,CAACjD,eAAe,EAAE2C,CAAAA,GAAI,CAAGC,EAAAA,CAAAA,CAAAA;AAC3D;AACF;AACA,QAAA,IAAI,CAAC1C,SAAS,CAACgE,wBAAwB,CAAC,gBAAkBf,EAAAA,QAAAA,CAAAA;QAC1D,IAAI,CAACjD,SAAS,CAACgE,wBAAwB,CAAC,YAAc,EAAA,IAAI,CAAC5B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AAClF,QAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC1B,QAAA,KAAK,MAAM2E,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;YAC5C,IAAI,CAACG,SAAS,CAACgE,wBAAwB,CAACC,GAAK,EAAA,IAAI,CAAC7B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AACzE,YAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC5B;AACA,QAAA,IAAI,CAACU,SAAS,CAACkE,uBAAuB,CAACJ,OAAAA,CAAAA;AACvC,QAAA,IAAI,CAAC9D,SAAS,CAACmE,UAAU,GAAG,CAAA;AAC5B,QAAA,IAAI,CAACnE,SAAS,CAACoE,UAAU,GAAGN,QAAQL,MAAM;AAC1C,QAAA,IAAI,CAACzD,SAAS,CAACqE,aAAa,GAAG,eAAA;AAC/B,QAAA,IAAI,CAACnE,aAAa,GAAG,IAAI,CAAC8C,QAAQ,CAACC,QAAAA,CAAAA;AAEnC,QAAA,MAAMqB,YAAe,GAAA,IAAIP,WAAYD,CAAAA,OAAAA,CAAQL,MAAM,GAAG,CAAA,CAAA;QACtD,IAAK,IAAID,IAAI,CAAGA,EAAAA,CAAAA,GAAIM,QAAQL,MAAM,GAAG,GAAGD,CAAK,EAAA,CAAA;YAC3Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;AAC9C;QACA,IAAI,CAACvD,cAAc,EAAEyD,OAAAA,EAAAA;QACrB,IAAI,CAACzD,cAAc,GAAG,IAAI0D,SAAAA,EAAAA;QAC1B,IAAI,CAAC1D,cAAc,CAACsE,eAAe,CAAC,IAAI,CAACvE,SAAS,CAACwE,eAAe,CAAC,UAAA,CAAA,CAAA;QACnE,IAAI,CAACvE,cAAc,CAAC+D,wBAAwB,CAAC,YAAc,EAAA,IAAI,CAAC5B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AACvF,QAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC1B,QAAA,KAAK,MAAM2E,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;YAC5C,IAAI,CAACI,cAAc,CAAC+D,wBAAwB,CAACC,GAAK,EAAA,IAAI,CAAC7B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AAC9E,YAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC5B;AACA,QAAA,IAAI,CAACW,cAAc,CAACiE,uBAAuB,CAACI,YAAAA,CAAAA;AAC5C,QAAA,IAAI,CAACrE,cAAc,CAACkE,UAAU,GAAG,CAAA;AACjC,QAAA,IAAI,CAAClE,cAAc,CAACmE,UAAU,GAAGE,aAAab,MAAM;AACpD,QAAA,IAAI,CAACxD,cAAc,CAACoE,aAAa,GAAG,WAAA;AACtC;IACAvC,kBAAqB,GAAA;QACnB,IAAI,CAAC3B,WAAW,EAAEuD,OAAAA,EAAAA;QAClB,IAAI,CAACvD,WAAW,GAAG,IAAIwD,SAAAA,EAAAA;AACvB,QAAA,MAAMC,mBAAsB,GAAA,IAAI,CAAC9D,eAAe,GAAG,CAAA;AACnD,QAAA,MAAMmD,QAAW,GAAA,IAAIX,YAAasB,CAAAA,mBAAAA,GAAsB,CAAI,GAAA,CAAA,CAAA;AAC5D,QAAA,IAAIC,CAAI,GAAA,CAAA;QACR,MAAMY,MAAAA,GAAS,IAAI,CAAC3E,eAAe;AACnC,QAAA,IAAK,IAAI0D,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAII,qBAAqBJ,CAAK,EAAA,CAAA;AAC5CP,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAGY,MAAAA,GAASjB,CAAI,GAAA,CAAA;YAC7BP,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAGY,MAAAA,GAASjB,CAAI,GAAA,CAAA;YAC7BP,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;AACA,QAAA,IAAK,IAAIL,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAII,qBAAqBJ,CAAK,EAAA,CAAA;YAC5CP,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAGY,MAAAA,GAASjB,CAAI,GAAA,CAAA;YAC7BP,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAGY,MAAAA,GAASjB,CAAI,GAAA,CAAA;YAC7BP,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;AACA,QAAA,IAAK,IAAIL,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAII,qBAAqBJ,CAAK,EAAA,CAAA;AAC5CP,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAG,CAACY,MAASjB,GAAAA,CAAAA;YAC1BP,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAG,CAACY,MAASjB,GAAAA,CAAAA;YAC1BP,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;AACA,QAAA,IAAK,IAAIL,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAII,qBAAqBJ,CAAK,EAAA,CAAA;YAC5CP,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAG,CAACY,MAASjB,GAAAA,CAAAA;YAC1BP,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAG,CAACY,MAASjB,GAAAA,CAAAA;YAC1BP,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;QACAA,CAAI,GAAA,CAAA;AACJ,QAAA,MAAMC,UAAU,IAAIC,WAAAA,CAAY,IAAI,CAACjE,eAAe,GAAG,EAAA,CAAA;QACvD,IAAK,IAAI0D,IAAI,CAAGA,EAAAA,CAAAA,GAAI,IAAI,CAAC1D,eAAe,GAAG,CAAA,EAAG0D,CAAK,EAAA,CAAA;AACjD,YAAA,MAAMkB,MAAM,CAAClB,GAAI,IAAI,CAAC1D,eAAe,IAAK,CAAA;AAC1C,YAAA,MAAM6E,KAAK,CAACD,GAAMlB,GAAAA,CAAAA,IAAK,CAAI,GAAA,CAAA;AAC3B,YAAA,MAAMoB,KAAK,CAACF,GAAMlB,GAAAA,CAAAA,IAAK,CAAI,GAAA,CAAA;AAC3B,YAAA,MAAMqB,KAAK,CAACH,GAAMlB,GAAAA,CAAAA,IAAK,CAAI,GAAA,CAAA;AAC3B,YAAA,MAAMsB,KAAK,CAACJ,GAAMlB,GAAAA,CAAAA,IAAK,CAAI,GAAA,CAAA;YAC3B,IAAIkB,GAAAA,GAAM,MAAM,CAAG,EAAA;gBACjBZ,OAAO,CAACD,IAAI,GAAGe,EAAAA;gBACfd,OAAO,CAACD,IAAI,GAAGiB,EAAAA;gBACfhB,OAAO,CAACD,IAAI,GAAGc,EAAAA;gBACfb,OAAO,CAACD,IAAI,GAAGc,EAAAA;gBACfb,OAAO,CAACD,IAAI,GAAGiB,EAAAA;gBACfhB,OAAO,CAACD,IAAI,GAAGgB,EAAAA;aACV,MAAA;gBACLf,OAAO,CAACD,IAAI,GAAGe,EAAAA;gBACfd,OAAO,CAACD,IAAI,GAAGgB,EAAAA;gBACff,OAAO,CAACD,IAAI,GAAGc,EAAAA;gBACfb,OAAO,CAACD,IAAI,GAAGe,EAAAA;gBACfd,OAAO,CAACD,IAAI,GAAGiB,EAAAA;gBACfhB,OAAO,CAACD,IAAI,GAAGgB,EAAAA;AACjB;AACF;AACA,QAAA,IAAI,CAAC1E,WAAW,CAAC6D,wBAAwB,CAAC,gBAAkBf,EAAAA,QAAAA,CAAAA;QAC5D,IAAI,CAAC9C,WAAW,CAAC6D,wBAAwB,CAAC,YAAc,EAAA,IAAI,CAAC5B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AACpF,QAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC1B,QAAA,KAAK,MAAM2E,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;YAC5C,IAAI,CAACM,WAAW,CAAC6D,wBAAwB,CAACC,GAAK,EAAA,IAAI,CAAC7B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AAC3E,YAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC5B;AACA,QAAA,IAAI,CAACa,WAAW,CAAC+D,uBAAuB,CAACJ,OAAAA,CAAAA;AACzC,QAAA,IAAI,CAAC3D,WAAW,CAACgE,UAAU,GAAG,CAAA;AAC9B,QAAA,IAAI,CAAChE,WAAW,CAACiE,UAAU,GAAGN,QAAQL,MAAM;AAC5C,QAAA,IAAI,CAACtD,WAAW,CAACkE,aAAa,GAAG,eAAA;AACjC,QAAA,IAAI,CAAChE,eAAe,GAAG,IAAI,CAAC2C,QAAQ,CAACC,QAAAA,CAAAA;AAErC,QAAA,MAAMqB,YAAe,GAAA,IAAIP,WAAYD,CAAAA,OAAAA,CAAQL,MAAM,GAAG,CAAA,CAAA;QACtD,IAAK,IAAID,IAAI,CAAGA,EAAAA,CAAAA,GAAIM,QAAQL,MAAM,GAAG,GAAGD,CAAK,EAAA,CAAA;YAC3Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;AAC9C;QACA,IAAI,CAACpD,gBAAgB,EAAEsD,OAAAA,EAAAA;QACvB,IAAI,CAACtD,gBAAgB,GAAG,IAAIuD,SAAAA,EAAAA;QAC5B,IAAI,CAACvD,gBAAgB,CAACmE,eAAe,CAAC,IAAI,CAACpE,WAAW,CAACqE,eAAe,CAAC,UAAA,CAAA,CAAA;QACvE,IAAI,CAACpE,gBAAgB,CAAC4D,wBAAwB,CAAC,YAAc,EAAA,IAAI,CAAC5B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AACzF,QAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC1B,QAAA,KAAK,MAAM2E,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;YAC5C,IAAI,CAACO,gBAAgB,CAAC4D,wBAAwB,CAACC,GAAK,EAAA,IAAI,CAAC7B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AAChF,YAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC5B;AACA,QAAA,IAAI,CAACc,gBAAgB,CAAC8D,uBAAuB,CAACI,YAAAA,CAAAA;AAC9C,QAAA,IAAI,CAAClE,gBAAgB,CAAC+D,UAAU,GAAG,CAAA;AACnC,QAAA,IAAI,CAAC/D,gBAAgB,CAACgE,UAAU,GAAGE,aAAab,MAAM;AACtD,QAAA,IAAI,CAACrD,gBAAgB,CAACiE,aAAa,GAAG,WAAA;AACxC;IACApC,gBAAmB,GAAA;QACjB,IAAI,CAAC3B,SAAS,EAAEoD,OAAAA,EAAAA;QAChB,IAAI,CAACpD,SAAS,GAAG,IAAIqD,SAAAA,EAAAA;AACrB,QAAA,MAAMoB,qBAAwB,GAAA,IAAI,CAACjF,eAAe,GAAG,CAAI,GAAA,CAAA;QACzD,MAAMmD,QAAAA,GAAW,IAAIX,YAAa,CAACyC,CAAAA,qBAAwB,GAAA,CAAA,GAAI,CAAA,IAAK,CAAI,GAAA,CAAA,CAAA;AACxE,QAAA,IAAIlB,CAAI,GAAA,CAAA;AACR,QAAA,MAAMmB,CAAI,GAAA,GAAA,IAAOD,qBAAAA,GAAwB,CAAA,CAAA;AACzC,QAAA,IAAK,IAAIvB,CAAI,GAAA,CAAA,EAAGA,CAAIuB,GAAAA,qBAAAA,GAAwB,GAAGvB,CAAK,EAAA,CAAA;YAClDP,QAAQ,CAACY,CAAI,EAAA,CAAA,GAAG,CAAImB,GAAAA,CAAAA;AACpB/B,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAGkB,qBAAAA,GAAwBvB,CAAIwB,GAAAA,CAAAA;YAC5C/B,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,CAAI,EAAA,CAAA,GAAG,CAAImB,GAAAA,CAAAA;AACpB/B,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAGkB,qBAAAA,GAAwBvB,CAAIwB,GAAAA,CAAAA;YAC5C/B,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;AACA,QAAA,MAAMoB,mBAAmBpB,CAAI,GAAA,CAAA;AAC7B,QAAA,IAAK,IAAIL,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIuB,uBAAuBvB,CAAK,EAAA,CAAA;AAC9CP,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAGL,CAAAA,GAAI,CAAIwB,GAAAA,CAAAA;YACxB/B,QAAQ,CAACY,CAAI,EAAA,CAAA,GAAG,CAAImB,GAAAA,CAAAA;YACpB/B,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAAA,EAAAA,CAAI,GAAGL,CAAAA,GAAI,CAAIwB,GAAAA,CAAAA;YACxB/B,QAAQ,CAACY,CAAI,EAAA,CAAA,GAAG,CAAImB,GAAAA,CAAAA;YACpB/B,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;QACAA,CAAI,GAAA,CAAA;QACJ,MAAMC,OAAAA,GAAU,IAAIC,WAAY,CAACgB,CAAAA,qBAAwB,GAAA,CAAA,GAAI,CAAA,IAAK,CAAA,CAAA;AAClE,QAAA,IAAK,IAAIvB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIuB,uBAAuBvB,CAAK,EAAA,CAAA;YAC9CM,OAAO,CAACD,IAAI,GAAIL,CAAAA,CAAI,GAAA,CAAA,IAAK,CAAI,GAAA,CAAA;YAC7BM,OAAO,CAACD,IAAI,GAAIL,CAAAA,CAAI,GAAA,CAAA,IAAK,CAAI,GAAA,CAAA;YAC7BM,OAAO,CAACD,IAAI,GAAIL,CAAAA,CAAI,GAAA,CAAA,IAAK,CAAI,GAAA,CAAA;YAC7BM,OAAO,CAACD,IAAI,GAAIL,CAAAA,CAAI,GAAA,CAAA,IAAK,CAAI,GAAA,CAAA;YAC7BM,OAAO,CAACD,IAAI,GAAIL,CAAAA,CAAI,GAAA,CAAA,IAAK,CAAI,GAAA,CAAA;YAC7BM,OAAO,CAACD,IAAI,GAAIL,CAAAA,CAAI,GAAA,CAAA,IAAK,CAAI,GAAA,CAAA;AAC/B;AACA,QAAA,IAAK,IAAIA,CAAI,GAAA,CAAA,EAAGA,CAAIuB,GAAAA,qBAAAA,GAAwB,GAAGvB,CAAK,EAAA,CAAA;YAClDM,OAAO,CAACD,IAAI,GAAGoB,gBAAAA,GAAmB,CAACzB,CAAAA,GAAI,CAAA,IAAK,CAAI,GAAA,CAAA;YAChDM,OAAO,CAACD,IAAI,GAAGoB,gBAAAA,GAAmB,CAACzB,CAAAA,GAAI,CAAA,IAAK,CAAI,GAAA,CAAA;YAChDM,OAAO,CAACD,IAAI,GAAGoB,gBAAAA,GAAmB,CAACzB,CAAAA,GAAI,CAAA,IAAK,CAAI,GAAA,CAAA;YAChDM,OAAO,CAACD,IAAI,GAAGoB,gBAAAA,GAAmB,CAACzB,CAAAA,GAAI,CAAA,IAAK,CAAI,GAAA,CAAA;YAChDM,OAAO,CAACD,IAAI,GAAGoB,gBAAAA,GAAmB,CAACzB,CAAAA,GAAI,CAAA,IAAK,CAAI,GAAA,CAAA;YAChDM,OAAO,CAACD,IAAI,GAAGoB,gBAAAA,GAAmB,CAACzB,CAAAA,GAAI,CAAA,IAAK,CAAI,GAAA,CAAA;AAClD;AACA,QAAA,IAAI,CAAClD,SAAS,CAAC0D,wBAAwB,CAAC,gBAAkBf,EAAAA,QAAAA,CAAAA;QAC1D,IAAI,CAAC3C,SAAS,CAAC0D,wBAAwB,CAAC,YAAc,EAAA,IAAI,CAAC5B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AAClF,QAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC1B,QAAA,KAAK,MAAM2E,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;YAC5C,IAAI,CAACS,SAAS,CAAC0D,wBAAwB,CAACC,GAAK,EAAA,IAAI,CAAC7B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AACzE,YAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC5B;AACA,QAAA,IAAI,CAACgB,SAAS,CAAC4D,uBAAuB,CAACJ,OAAAA,CAAAA;AACvC,QAAA,IAAI,CAACxD,SAAS,CAAC6D,UAAU,GAAG,CAAA;AAC5B,QAAA,IAAI,CAAC7D,SAAS,CAAC8D,UAAU,GAAGN,QAAQL,MAAM;AAC1C,QAAA,IAAI,CAACnD,SAAS,CAAC+D,aAAa,GAAG,eAAA;AAC/B,QAAA,IAAI,CAAC7D,aAAa,GAAG,IAAI,CAACwC,QAAQ,CAACC,QAAAA,CAAAA;AAEnC,QAAA,MAAMqB,YAAe,GAAA,IAAIP,WAAYD,CAAAA,OAAAA,CAAQL,MAAM,GAAG,CAAA,CAAA;QACtD,IAAK,IAAID,IAAI,CAAGA,EAAAA,CAAAA,GAAIM,QAAQL,MAAM,GAAG,GAAGD,CAAK,EAAA,CAAA;YAC3Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;AAC9C;QACA,IAAI,CAACjD,cAAc,EAAEmD,OAAAA,EAAAA;QACrB,IAAI,CAACnD,cAAc,GAAG,IAAIoD,SAAAA,EAAAA;QAC1B,IAAI,CAACpD,cAAc,CAACgE,eAAe,CAAC,IAAI,CAACjE,SAAS,CAACkE,eAAe,CAAC,UAAA,CAAA,CAAA;QACnE,IAAI,CAACjE,cAAc,CAACyD,wBAAwB,CAAC,YAAc,EAAA,IAAI,CAAC5B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AACvF,QAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC1B,QAAA,KAAK,MAAM2E,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;YAC5C,IAAI,CAACU,cAAc,CAACyD,wBAAwB,CAACC,GAAK,EAAA,IAAI,CAAC7B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AAC9E,YAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC5B;AACA,QAAA,IAAI,CAACiB,cAAc,CAAC2D,uBAAuB,CAACI,YAAAA,CAAAA;AAC5C,QAAA,IAAI,CAAC/D,cAAc,CAAC4D,UAAU,GAAG,CAAA;AACjC,QAAA,IAAI,CAAC5D,cAAc,CAAC6D,UAAU,GAAGE,aAAab,MAAM;AACpD,QAAA,IAAI,CAAClD,cAAc,CAAC8D,aAAa,GAAG,WAAA;AACtC;IACAxC,iBAAoB,GAAA;AAClB,QAAA,MAAM+B,mBAAsB,GAAA,IAAI,CAAC9D,eAAe,GAAG,CAAA;AACnD,QAAA,MAAMmD,QAAW,GAAA,IAAIX,YAAasB,CAAAA,mBAAAA,GAAsB,CAAI,GAAA,CAAA,CAAA;AAC5D,QAAA,IAAIC,CAAI,GAAA,CAAA;AACR,QAAA,IAAK,IAAIL,CAAI,GAAA,CAAA,EAAGA,CAAII,GAAAA,mBAAAA,GAAsB,GAAGJ,CAAK,EAAA,CAAA;AAChDP,YAAAA,QAAQ,CAACY,CAAI,EAAA,CAAA,GAAGL,CAAI,GAAA,IAAI,CAAC1D,eAAe;YACxCmD,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAI,EAAA,CAAA,GAAGL,CAAI,GAAA,IAAI,CAAC1D,eAAe;YACxCmD,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;AACA,QAAA,MAAMqB,kBAAkBrB,CAAI,GAAA,CAAA;AAC5B,QAAA,IAAK,IAAIL,CAAI,GAAA,CAAA,EAAGA,CAAII,GAAAA,mBAAAA,GAAsB,GAAGJ,CAAK,EAAA,CAAA;YAChDP,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAI,EAAA,CAAA,GAAGL,CAAI,GAAA,IAAI,CAAC1D,eAAe;YACxCmD,QAAQ,CAACY,IAAI,GAAG,CAAA;YAChBZ,QAAQ,CAACY,IAAI,GAAG,CAAA;AAChBZ,YAAAA,QAAQ,CAACY,CAAI,EAAA,CAAA,GAAGL,CAAI,GAAA,IAAI,CAAC1D,eAAe;YACxCmD,QAAQ,CAACY,IAAI,GAAG,CAAA;AAClB;QACAA,CAAI,GAAA,CAAA;AACJ,QAAA,MAAMC,UAAU,IAAIC,WAAAA,CAAY,IAAI,CAACjE,eAAe,GAAG,EAAK,GAAA,CAAA,CAAA;QAC5D,IAAK,IAAI0D,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAAC1D,eAAe,GAAG,CAAI,GAAA,CAAA,EAAG0D,CAAK,EAAA,CAAA;YACrD,MAAMmB,EAAAA,GAAKnB,IAAI,CAAI,GAAA,CAAA;YACnB,MAAMoB,EAAAA,GAAKpB,IAAI,CAAI,GAAA,CAAA;YACnB,MAAMqB,EAAAA,GAAKrB,IAAI,CAAI,GAAA,CAAA;YACnB,MAAMsB,EAAAA,GAAKtB,IAAI,CAAI,GAAA,CAAA;YACnBM,OAAO,CAACD,IAAI,GAAGe,EAAAA;YACfd,OAAO,CAACD,IAAI,GAAGiB,EAAAA;YACfhB,OAAO,CAACD,IAAI,GAAGc,EAAAA;YACfb,OAAO,CAACD,IAAI,GAAGc,EAAAA;YACfb,OAAO,CAACD,IAAI,GAAGiB,EAAAA;YACfhB,OAAO,CAACD,IAAI,GAAGgB,EAAAA;AACjB;QACA,IAAK,IAAIrB,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAAC1D,eAAe,GAAG,CAAI,GAAA,CAAA,EAAG0D,CAAK,EAAA,CAAA;AACrD,YAAA,IAAIA,CAAM,KAAA,IAAI,CAAC1D,eAAe,EAAE;AAC9B,gBAAA;AACF;YACA,MAAM6E,EAAAA,GAAKnB,IAAI,CAAI,GAAA,CAAA;YACnB,MAAMoB,EAAAA,GAAKpB,IAAI,CAAI,GAAA,CAAA;YACnB,MAAMqB,EAAAA,GAAKrB,IAAI,CAAI,GAAA,CAAA;YACnB,MAAMsB,EAAAA,GAAKtB,IAAI,CAAI,GAAA,CAAA;YACnBM,OAAO,CAACD,CAAI,EAAA,CAAA,GAAGqB,eAAkBN,GAAAA,EAAAA;YACjCd,OAAO,CAACD,CAAI,EAAA,CAAA,GAAGqB,eAAkBP,GAAAA,EAAAA;YACjCb,OAAO,CAACD,CAAI,EAAA,CAAA,GAAGqB,eAAkBJ,GAAAA,EAAAA;YACjChB,OAAO,CAACD,CAAI,EAAA,CAAA,GAAGqB,eAAkBP,GAAAA,EAAAA;YACjCb,OAAO,CAACD,CAAI,EAAA,CAAA,GAAGqB,eAAkBL,GAAAA,EAAAA;YACjCf,OAAO,CAACD,CAAI,EAAA,CAAA,GAAGqB,eAAkBJ,GAAAA,EAAAA;AACnC;QACA,IAAI,CAACrE,UAAU,EAAEiD,OAAAA,EAAAA;QACjB,IAAI,CAACjD,UAAU,GAAG,IAAIkD,SAAAA,EAAAA;AACtB,QAAA,IAAI,CAAClD,UAAU,CAACuD,wBAAwB,CAAC,gBAAkBf,EAAAA,QAAAA,CAAAA;AAC3D,QAAA,IAAI,CAACxC,UAAU,CAACuD,wBAAwB,CACtC,YAAA,EACA,IAAI,CAACxB,sBAAsB,CAAC,CAAG,EAAA,CAAA,EAAG,GAAG,CACrC,CAAA,EAAA,UAAA,CAAA;AAEF,QAAA,IAAI,CAAC9C,wBAAwB,EAAA;AAC7B,QAAA,KAAK,MAAMuE,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;AAC5C,YAAA,IAAI,CAACY,UAAU,CAACuD,wBAAwB,CAACC,GAAAA,EAAK,IAAI,CAACzB,sBAAsB,CAAC,CAAG,EAAA,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,UAAA,CAAA;AACvF,YAAA,IAAI,CAAC9C,wBAAwB,EAAA;AAC/B;AACA,QAAA,IAAI,CAACe,UAAU,CAACyD,uBAAuB,CAACJ,OAAAA,CAAAA;AACxC,QAAA,IAAI,CAACrD,UAAU,CAAC0D,UAAU,GAAG,CAAA;AAC7B,QAAA,IAAI,CAAC1D,UAAU,CAAC2D,UAAU,GAAGN,QAAQL,MAAM;AAC3C,QAAA,IAAI,CAAChD,UAAU,CAAC4D,aAAa,GAAG,eAAA;AAChC,QAAA,IAAI,CAAC1D,cAAc,GAAG,IAAI,CAACqC,QAAQ,CAACC,QAAAA,CAAAA;AAEpC,QAAA,MAAMqB,YAAe,GAAA,IAAIP,WAAYD,CAAAA,OAAAA,CAAQL,MAAM,GAAG,CAAA,CAAA;QACtD,IAAK,IAAID,IAAI,CAAGA,EAAAA,CAAAA,GAAIM,QAAQL,MAAM,GAAG,GAAGD,CAAK,EAAA,CAAA;YAC3Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;AAC9C;QACA,IAAI,CAAC9C,eAAe,EAAEgD,OAAAA,EAAAA;QACtB,IAAI,CAAChD,eAAe,GAAG,IAAIiD,SAAAA,EAAAA;QAC3B,IAAI,CAACjD,eAAe,CAAC6D,eAAe,CAAC,IAAI,CAAC9D,UAAU,CAAC+D,eAAe,CAAC,UAAA,CAAA,CAAA;AACrE,QAAA,IAAI,CAAC9D,eAAe,CAACsD,wBAAwB,CAC3C,YAAA,EACA,IAAI,CAACxB,sBAAsB,CAAC,CAAG,EAAA,CAAA,EAAG,GAAG,CACrC,CAAA,EAAA,UAAA,CAAA;AAEF,QAAA,IAAI,CAAC9C,wBAAwB,EAAA;AAC7B,QAAA,KAAK,MAAMuE,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;AAC5C,YAAA,IAAI,CAACa,eAAe,CAACsD,wBAAwB,CAACC,GAAAA,EAAK,IAAI,CAACzB,sBAAsB,CAAC,CAAG,EAAA,CAAA,EAAG,GAAG,CAAI,CAAA,EAAA,UAAA,CAAA;AAC5F,YAAA,IAAI,CAAC9C,wBAAwB,EAAA;AAC/B;AACA,QAAA,IAAI,CAACgB,eAAe,CAACwD,uBAAuB,CAACI,YAAAA,CAAAA;AAC7C,QAAA,IAAI,CAAC5D,eAAe,CAACyD,UAAU,GAAG,CAAA;AAClC,QAAA,IAAI,CAACzD,eAAe,CAAC0D,UAAU,GAAGE,aAAab,MAAM;AACrD,QAAA,IAAI,CAAC/C,eAAe,CAAC2D,aAAa,GAAG,WAAA;AACvC;IACAtC,gBAAmB,GAAA;QACjB,IAAI,CAACnB,SAAS,EAAE8C,OAAAA,EAAAA;QAChB,IAAI,CAAC9C,SAAS,GAAG,IAAI+C,SAAAA,EAAAA;AACrB,QAAA,MAAMoB,qBAAwB,GAAA,IAAI,CAACjF,eAAe,GAAG,CAAI,GAAA,CAAA;AACzD,QAAA,MAAMmD,QAAW,GAAA,IAAIX,YAAayC,CAAAA,qBAAAA,GAAwB,CAAI,GAAA,CAAA,CAAA;AAC9D,QAAA,IAAK,IAAIvB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIuB,uBAAuBvB,CAAK,EAAA,CAAA;YAC9CP,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAGA,CAAAA;YACpDP,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;YACpDP,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;YACpDP,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAGuB,qBAAAA;YACpD9B,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAGA,CAAAA;YACpDP,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;YACpDP,QAAQ,CAAC,CAAC8B,qBAAwB,GAAA,CAAA,GAAIvB,CAAAA,IAAK,CAAA,GAAI,CAAE,CAAA,GAAGuB,qBAAwBvB,GAAAA,CAAAA;YAC5EP,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAGuB,qBAAAA;YACpD9B,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;YACpDP,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;YACpDP,QAAQ,CAAC,CAAC8B,qBAAwB,GAAA,CAAA,GAAIvB,CAAAA,IAAK,CAAA,GAAI,CAAE,CAAA,GAAGuB,qBAAwBvB,GAAAA,CAAAA;YAC5EP,QAAQ,CAAC,CAAC8B,qBAAAA,GAAwB,IAAIvB,CAAAA,IAAK,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACtD;QACA,MAAMM,OAAAA,GAAU,IAAIC,WAAAA,CAAYgB,qBAAwB,GAAA,CAAA,CAAA;AACxD,QAAA,IAAIlB,CAAI,GAAA,CAAA;AACR,QAAA,IAAK,IAAIL,CAAI,GAAA,CAAA,EAAGA,IAAIuB,qBAAwB,GAAA,CAAA,EAAGvB,KAAK,CAAG,CAAA;YACrDM,OAAO,CAACD,CAAI,EAAA,CAAA,GAAGL,CAAI,GAAA,CAAA;YACnBM,OAAO,CAACD,CAAI,EAAA,CAAA,GAAGL,CAAI,GAAA,CAAA;YACnBM,OAAO,CAACD,IAAI,GAAGL,CAAAA;AACjB;AACAM,QAAAA,OAAO,CAACA,OAAAA,CAAQL,MAAM,GAAG,EAAE,GAAG,CAAA;AAC9B,QAAA,IAAI,CAAC7C,SAAS,CAACoD,wBAAwB,CAAC,gBAAkBf,EAAAA,QAAAA,CAAAA;QAC1D,IAAI,CAACrC,SAAS,CAACoD,wBAAwB,CAAC,YAAc,EAAA,IAAI,CAAC5B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AAClF,QAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC1B,QAAA,KAAK,MAAM2E,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;YAC5C,IAAI,CAACe,SAAS,CAACoD,wBAAwB,CAACC,GAAK,EAAA,IAAI,CAAC7B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AACzE,YAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC5B;AACA,QAAA,IAAI,CAACsB,SAAS,CAACsD,uBAAuB,CAACJ,OAAAA,CAAAA;AACvC,QAAA,IAAI,CAAClD,SAAS,CAACuD,UAAU,GAAG,CAAA;AAC5B,QAAA,IAAI,CAACvD,SAAS,CAACwD,UAAU,GAAGN,QAAQL,MAAM;AAC1C,QAAA,IAAI,CAAC7C,SAAS,CAACyD,aAAa,GAAG,eAAA;AAC/B,QAAA,IAAI,CAACvD,aAAa,GAAG,IAAI,CAACkC,QAAQ,CAACC,QAAAA,CAAAA;AAEnC,QAAA,MAAMqB,YAAe,GAAA,IAAIP,WAAYD,CAAAA,OAAAA,CAAQL,MAAM,GAAG,CAAA,CAAA;QACtD,IAAK,IAAID,IAAI,CAAGA,EAAAA,CAAAA,GAAIM,QAAQL,MAAM,GAAG,GAAGD,CAAK,EAAA,CAAA;YAC3Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;YAC5Cc,YAAY,CAACd,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGM,OAAO,CAACN,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA;AAC9C;QACA,IAAI,CAAC3C,cAAc,EAAE6C,OAAAA,EAAAA;QACrB,IAAI,CAAC7C,cAAc,GAAG,IAAI8C,SAAAA,EAAAA;QAC1B,IAAI,CAAC9C,cAAc,CAAC0D,eAAe,CAAC,IAAI,CAAC3D,SAAS,CAAC4D,eAAe,CAAC,UAAA,CAAA,CAAA;QACnE,IAAI,CAAC3D,cAAc,CAACmD,wBAAwB,CAAC,YAAc,EAAA,IAAI,CAAC5B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AACvF,QAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC1B,QAAA,KAAK,MAAM2E,GAAAA,IAAO,IAAI,CAACpE,qBAAqB,CAAE;YAC5C,IAAI,CAACgB,cAAc,CAACmD,wBAAwB,CAACC,GAAK,EAAA,IAAI,CAAC7B,mBAAmB,EAAI,EAAA,UAAA,CAAA;AAC9E,YAAA,IAAI,CAAC9C,qBAAqB,EAAA;AAC5B;AACA,QAAA,IAAI,CAACuB,cAAc,CAACqD,uBAAuB,CAACI,YAAAA,CAAAA;AAC5C,QAAA,IAAI,CAACzD,cAAc,CAACsD,UAAU,GAAG,CAAA;AACjC,QAAA,IAAI,CAACtD,cAAc,CAACuD,UAAU,GAAGE,aAAab,MAAM;AACpD,QAAA,IAAI,CAAC5C,cAAc,CAACwD,aAAa,GAAG,WAAA;AACtC;AACQc,IAAAA,gBAAAA,CAAiBC,EAAU,EAAEC,EAAU,EAAEC,EAAU,EAAEC,EAAU,EAAE;QACvE,OAAOH,EAAAA,IAAMG,MAAMD,EAAMD,IAAAA,EAAAA;AAC3B;IACQG,UACNC,CAAAA,IAAU,EACVC,QAA0B,EAC1BjB,MAAe,EACfkB,KAAa,EACbC,SAAiB,EACjBC,OAAa,EACb;AACA,QAAA,IAAI,CAACH,QAAU,EAAA;AACb9G,YAAAA,OAAAA,CAAQkH,QAAQ,CAACC,GAAG,CAACN,KAAKK,QAAQ,CAAA;AAClClH,YAAAA,OAAAA,CAAQoH,QAAQ,CAACD,GAAG,CAACN,KAAKO,QAAQ,CAAA;SAC7B,MAAA;AACLnH,YAAAA,IAAAA,CAAKoH,SAAS,CAACR,IAAAA,EAAMS,SAAUC,CAAAA,SAAS,CAACT,QAAW9G,CAAAA,EAAAA,OAAAA,CAAAA;AACtD;AACA,QAAA,MAAM0E,IAAO,GAAC1E,CAAAA,OAAAA,CAAQkH,QAAQ,CAACrD,CAAC,GAAGkD,KAAQlB,GAAAA,MAAAA,CAAOhC,CAAAA,IAAKmD,SAAAA;AACvD,QAAA,MAAM1C,IAAO,GAACtE,CAAAA,OAAAA,CAAQoH,QAAQ,CAACvD,CAAC,GAAGkD,KAAQlB,GAAAA,MAAAA,CAAOhC,CAAAA,IAAKmD,SAAAA;AACvD,QAAA,MAAMQ,IAAO,GAACxH,CAAAA,OAAAA,CAAQkH,QAAQ,CAACpD,CAAC,GAAGiD,KAAQlB,GAAAA,MAAAA,CAAO/B,CAAAA,IAAKkD,SAAAA;AACvD,QAAA,MAAMS,IAAO,GAACzH,CAAAA,OAAAA,CAAQoH,QAAQ,CAACtD,CAAC,GAAGiD,KAAQlB,GAAAA,MAAAA,CAAO/B,CAAAA,IAAKkD,SAAAA;AACvD,QAAA,IAAItC,IAAOuC,GAAAA,OAAAA,CAAQC,QAAQ,CAACrD,CAAC,EAAE;YAC7BoD,OAAQC,CAAAA,QAAQ,CAACrD,CAAC,GAAGa,IAAAA;AACvB;AACA,QAAA,IAAIJ,IAAO2C,GAAAA,OAAAA,CAAQG,QAAQ,CAACvD,CAAC,EAAE;YAC7BoD,OAAQG,CAAAA,QAAQ,CAACvD,CAAC,GAAGS,IAAAA;AACvB;AACA,QAAA,IAAIkD,IAAOP,GAAAA,OAAAA,CAAQC,QAAQ,CAACnD,CAAC,EAAE;YAC7BkD,OAAQC,CAAAA,QAAQ,CAACnD,CAAC,GAAGyD,IAAAA;AACvB;AACA,QAAA,IAAIC,IAAOR,GAAAA,OAAAA,CAAQG,QAAQ,CAACrD,CAAC,EAAE;YAC7BkD,OAAQG,CAAAA,QAAQ,CAACrD,CAAC,GAAG0D,IAAAA;AACvB;AACF;AACQC,IAAAA,OAAAA,CACNC,GAAyB,EACzBd,IAAU,EACVe,MAAc,EACdd,QAA0B,EAC1BjB,MAAe,EACfkB,KAAa,EACbC,SAAiB,EACjBa,KAAa,EACb;AACA,QAAA,IAAI,CAACf,QAAU,EAAA;AACb9G,YAAAA,OAAAA,CAAQkH,QAAQ,CAACC,GAAG,CAACN,KAAKK,QAAQ,CAAA;AAClClH,YAAAA,OAAAA,CAAQoH,QAAQ,CAACD,GAAG,CAACN,KAAKO,QAAQ,CAAA;SAC7B,MAAA;AACLnH,YAAAA,IAAAA,CAAKoH,SAAS,CAACR,IAAAA,EAAMS,SAAUC,CAAAA,SAAS,CAACT,QAAW9G,CAAAA,EAAAA,OAAAA,CAAAA;AACtD;AACA,QAAA,MAAM0E,IAAO,GAAC1E,CAAAA,OAAAA,CAAQkH,QAAQ,CAACrD,CAAC,GAAGkD,KAAQlB,GAAAA,MAAAA,CAAOhC,CAAAA,IAAKmD,SAAAA;AACvD,QAAA,MAAM1C,IAAO,GAACtE,CAAAA,OAAAA,CAAQoH,QAAQ,CAACvD,CAAC,GAAGkD,KAAQlB,GAAAA,MAAAA,CAAOhC,CAAAA,IAAKmD,SAAAA;AACvD,QAAA,MAAMQ,IAAO,GAACxH,CAAAA,OAAAA,CAAQkH,QAAQ,CAACpD,CAAC,GAAGiD,KAAQlB,GAAAA,MAAAA,CAAO/B,CAAAA,IAAKkD,SAAAA;AACvD,QAAA,MAAMS,IAAO,GAACzH,CAAAA,OAAAA,CAAQoH,QAAQ,CAACtD,CAAC,GAAGiD,KAAQlB,GAAAA,MAAAA,CAAO/B,CAAAA,IAAKkD,SAAAA;QACvDW,GAAIvD,CAAAA,QAAQ,CAACuD,GAAIG,CAAAA,QAAQ,EAAEpD,IAAMJ,EAAAA,IAAAA,EAAMkD,IAAMC,EAAAA,IAAAA,EAAMzH,OAAS6H,EAAAA,KAAAA,CAAAA;AAC5D,QAAA,OAAO7H,QAAQ+H,uBAAuB,CAACH,OAAOI,OAAO,CAAA,KAAMC,UAAUC,WAAW;AAClF;AACAC,IAAAA,aAAAA,CAAcP,MAAc,EAAEQ,cAAuB,EAAEpB,SAAiB,EAAE;AACxE,QAAA,MAAMqB,YAAY,IAAI,CAACC,aAAa,CAACV,QAAQQ,cAAgBpB,EAAAA,SAAAA,CAAAA;AAC7DY,QAAAA,MAAAA,CAAOW,gBAAgB,CAACrI,KAAAA,CAAAA;AAExB,QAAA,MAAMsI,aAAa,IAAIC,OAAAA,EAAAA;AACvB,QAAA,MAAMC,WAAW,IAAID,OAAAA,EAAAA;AACrB,QAAA,MAAME,OAAO,IAAIF,OAAAA,EAAAA;AACjB,QAAA,MAAM5C,SAAS,IAAI4C,OAAAA,EAAAA;QAEnB,MAAMG,IAAAA,GAAO1I,KAAM2D,CAAAA,CAAC,GAAGmD,SAAAA;QACvB,MAAM6B,IAAAA,GAAO3I,KAAM6D,CAAAA,CAAC,GAAGiD,SAAAA;AAEvB,QAAA,MAAMC,UAAkB,EAAE;AAC1B,QAAA,IAAK,IAAIrC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIyD,WAAWzD,CAAK,EAAA,CAAA;AAClC,YAAA,MAAMiC,OAAO,IAAI5G,IAAAA,EAAAA;AACjB4G,YAAAA,IAAAA,CAAKiC,WAAW,EAAA;AAChB7B,YAAAA,OAAAA,CAAQtD,IAAI,CAACkD,IAAAA,CAAAA;AACf;QAEA2B,UAAWO,CAAAA,KAAK,CAAC1I,IAAK2I,CAAAA,KAAK,CAACJ,IAAOvI,CAAAA,EAAAA,IAAAA,CAAK2I,KAAK,CAACH,IAAAA,CAAAA,CAAAA;;AAG9C,QAAA,IAAI,CAACjC,UAAU,CAAC,IAAI,CAAC7E,cAAc,EAAE,IAAA,EAAMyG,UAAY,EAAA,CAAA,EAAGxB,SAAWC,EAAAA,OAAO,CAAC,CAAE,CAAA,CAAA;AAE/E,QAAA,IAAK,IAAIgC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIZ,WAAWY,CAAK,EAAA,CAAA;YAClC,MAAMpC,IAAAA,GAAOI,OAAO,CAACgC,CAAE,CAAA;AACvB,YAAA,MAAMlC,QAAQ,CAAKkC,IAAAA,CAAAA;AACnBT,YAAAA,UAAAA,CAAWO,KAAK,CAAC1I,IAAK2I,CAAAA,KAAK,CAACJ,IAAAA,GAAO7B,KAASA,CAAAA,GAAAA,KAAAA,EAAO1G,IAAK2I,CAAAA,KAAK,CAACH,IAAAA,GAAO9B,KAASA,CAAAA,GAAAA,KAAAA,CAAAA;;YAE9E2B,QAASK,CAAAA,KAAK,CAAC,IAAI,CAAC7H,eAAe,IAAI+H,CAAG,EAAA,IAAI,CAAC/H,eAAe,IAAI+H,CAAAA,CAAAA;YAClEN,IAAKI,CAAAA,KAAK,CACRP,UAAW3E,CAAAA,CAAC,IAAI,IAAI,CAAC3C,eAAe,IAAK+H,CAAAA,GAAI,CAAC,CAC9CT,EAAAA,UAAAA,CAAW1E,CAAC,IAAI,IAAI,CAAC5C,eAAe,IAAK+H,CAAAA,GAAI,CAAC,CAAA,CAAA;AAEhD,YAAA,IAAK,IAAIpF,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,gBAAA,IAAK,IAAIC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,oBAAA,IAAImF,CAAM,KAAA,CAAA,KAAMpF,CAAAA,KAAM,CAAKA,IAAAA,CAAAA,KAAM,CAAA,CAAA,KAAOC,CAAAA,KAAM,CAAKA,IAAAA,CAAAA,KAAM,CAAA,CAAI,EAAA;AAC3D,wBAAA;AACF;oBACA,MAAMoF,KAAAA,GAAQrF,CAAK,IAAA,CAAA,GAAIkD,KAAQ,GAAA,CAAA;oBAC/B,MAAMoC,KAAAA,GAAQrF,CAAK,IAAA,CAAA,GAAIiD,KAAQ,GAAA,CAAA;AAC/BlB,oBAAAA,MAAAA,CAAOkD,KAAK,CAACJ,IAAAA,CAAK9E,CAAC,GAAGA,IAAI6E,QAAS7E,CAAAA,CAAC,GAAGqF,KAAAA,EAAOP,KAAK7E,CAAC,GAAGA,CAAI4E,GAAAA,QAAAA,CAAS5E,CAAC,GAAGqF,KAAAA,CAAAA;oBACxE,IAAI,CAACvC,UAAU,CAAC,IAAI,CAACtF,aAAa,EAAE,IAAA,EAAMuE,MAAQkB,EAAAA,KAAAA,EAAOC,SAAWH,EAAAA,IAAAA,CAAAA;AACtE;AACF;;YAEA,IAAI,CAACD,UAAU,CAAC,IAAI,CAACnF,eAAe,EAAE,IAAA,EAAM+G,UAAYzB,EAAAA,KAAAA,EAAOC,SAAWH,EAAAA,IAAAA,CAAAA;AAE1E,YAAA,MAAMuC,YAAYrC,KAAQ,GAAA,CAAA;AAC1B,YAAA,MAAMsC,cAAiB,GAAA,IAAIZ,OACzBpI,CAAAA,IAAAA,CAAK2I,KAAK,CAACJ,IAAOQ,GAAAA,SAAAA,CAAAA,GAAaA,SAC/B/I,EAAAA,IAAAA,CAAK2I,KAAK,CAACH,OAAOO,SAAaA,CAAAA,GAAAA,SAAAA,CAAAA;;YAGjC,MAAME,UAAAA,GAAa,IAAIb,OAAAA,CAAQD,UAAW3E,CAAAA,CAAC,GAAGkD,KAAAA,GAAQ,GAAKyB,EAAAA,UAAAA,CAAW1E,CAAC,GAAGiD,KAAQ,GAAA,GAAA,CAAA;YAClF,MAAMX,CAAAA,GAAI,IAAIqC,OAAQG,CAAAA,IAAAA,GAAOS,eAAexF,CAAC,EAAEgF,IAAOQ,GAAAA,cAAAA,CAAevF,CAAC,CAAA;AACtE,YAAA,IAAIyF,CAAI,GAAA,CAAA;AACRA,YAAAA,CAAAA,IAAKnD,CAAEvC,CAAAA,CAAC,IAAIkD,KAAAA,GAAQ,CAAI,GAAA,CAAA;AACxBwC,YAAAA,CAAAA,IAAKnD,CAAEtC,CAAAA,CAAC,IAAIiD,KAAAA,GAAQ,CAAI,GAAA,CAAA;AACxB,YAAA,IAAI,CAACH,UAAU,CAAC,IAAI,CAAChF,aAAa,EAAExB,cAAc,CAACmJ,CAAAA,CAAE,EAAED,UAAAA,EAAYvC,OAAOC,SAAWH,EAAAA,IAAAA,CAAAA;;YAErF,MAAM2C,QAAAA,GAAW,IAAIf,OACnBY,CAAAA,cAAAA,CAAexF,CAAC,IAAI,IAAI,CAAC3C,eAAe,IAAK+H,IAAI,CAAC,CAAA,EAClDI,cAAevF,CAAAA,CAAC,IAAI,IAAI,CAAC5C,eAAe,IAAK+H,CAAAA,GAAI,CAAC,CAAA,CAAA;YAEpD,IAAI,CAACrC,UAAU,CAAC,IAAI,CAAC1E,aAAa,EAAE,IAAA,EAAMsH,QAAUzC,EAAAA,KAAAA,EAAOC,SAAWH,EAAAA,IAAAA,CAAAA;AACxE;QACA,OAAOI,OAAAA;AACT;AACQqB,IAAAA,aAAAA,CAAcV,MAAc,EAAEQ,cAAuB,EAAEpB,SAAiB,EAAE;AAChFY,QAAAA,MAAAA,CAAOW,gBAAgB,CAACrI,KAAAA,CAAAA;QACxB,MAAMuJ,KAAAA,GAAQpJ,KAAK2C,GAAG,CAAC3C,KAAKqJ,GAAG,CAACxJ,MAAM2D,CAAC,GAAGuE,eAAevE,CAAC,CAAA,EAAGxD,KAAKqJ,GAAG,CAACxJ,MAAM2D,CAAC,GAAGuE,eAAerE,CAAC,CAAA,CAAA;QAChG,MAAM4F,KAAAA,GAAQtJ,KAAK2C,GAAG,CAAC3C,KAAKqJ,GAAG,CAACxJ,MAAM6D,CAAC,GAAGqE,eAAetE,CAAC,CAAA,EAAGzD,KAAKqJ,GAAG,CAACxJ,MAAM6D,CAAC,GAAGqE,eAAepE,CAAC,CAAA,CAAA;QAChG,MAAM4F,OAAAA,GAAUvJ,IAAK0C,CAAAA,GAAG,CAAC1C,IAAAA,CAAK2C,GAAG,CAACyG,KAAAA,EAAOE,KAAQ/B,CAAAA,EAAAA,MAAAA,CAAOiC,WAAW,EAAA,CAAA;QACnE,OAAOxJ,IAAAA,CAAK0C,GAAG,CACb1C,IAAK2C,CAAAA,GAAG,CAAC3C,IAAKyJ,CAAAA,IAAI,CAACzJ,IAAAA,CAAK0J,IAAI,CAACH,WAAW,IAAI,CAAC1I,eAAe,GAAG8F,SAAQ,KAAM,CAAK,CAAA,GAAA,CAAA,EAClF,IAAI,CAAC7F,aAAa,CAAA;AAEtB;IACQ6I,WACNC,CAAAA,IAA2B,EAC3BnD,QAAgB,EAChBoD,OAAe,EACfC,OAAe,EACfpD,KAAa,EACbqD,QAAgB,EAChB;AACAH,QAAAA,IAAAA,CAAK5B,SAAS,CAAC4B,IAAKI,CAAAA,YAAY,CAAC,GAAGD,QAAAA;AACpCH,QAAAA,IAAAA,CAAKK,aAAa,CAACL,IAAAA,CAAKI,YAAY,GAAG,CAAA,GAAI,EAAE,GAAGvD,QAAAA;AAChDmD,QAAAA,IAAAA,CAAKK,aAAa,CAACL,IAAAA,CAAKI,YAAY,GAAG,CAAA,GAAI,EAAE,GAAGtD,KAAAA;AAChDkD,QAAAA,IAAAA,CAAKK,aAAa,CAACL,IAAAA,CAAKI,YAAY,GAAG,CAAA,GAAI,EAAE,GAAGH,OAAAA;AAChDD,QAAAA,IAAAA,CAAKK,aAAa,CAACL,IAAAA,CAAKI,YAAY,GAAG,CAAA,GAAI,EAAE,GAAGF,OAAAA;AAChDF,QAAAA,IAAAA,CAAKM,WAAW,GAAGH,QAAAA;AACnBH,QAAAA,IAAAA,CAAKI,YAAY,EAAA;AACnB;AAEAG,IAAAA,MAAAA,CAAOC,OAA6B,EAAE;AACpC,QAAA,IAAI,CAAC/J,qBAAqB,GAAG,IAAI,CAACD,iBAAiB,CAACoE,MAAM;AAC1D,QAAA,IAAI,CAACjE,qBAAqB,GAAG,IAAI,CAACD,iBAAiB,CAACkE,MAAM;AAC1D,QAAA,IAAI,CAAC/D,wBAAwB,GAAG,IAAI,CAACD,oBAAoB,CAACgE,MAAM;AAChE,QAAA,IAAI,CAAC7D,gCAAgC,GAAG,IAAI,CAACD,4BAA4B,CAAC8D,MAAM;AAChF,QAAA,MAAM6F,aAAsC,EAAE;AAC9C,QAAA,MAAMrC,SAAY,GAAA,IAAI,CAACC,aAAa,CAACmC,OAAAA,CAAQ7C,MAAM,EAAE6C,OAAQrC,CAAAA,cAAc,EAAEqC,OAAAA,CAAQzD,SAAS,CAAA;QAC9FyD,OAAQ7C,CAAAA,MAAM,CAACW,gBAAgB,CAACrI,KAAAA,CAAAA;AAEhC,QAAA,MAAMsI,aAAa,IAAIC,OAAAA,EAAAA;AACvB,QAAA,MAAMC,WAAW,IAAID,OAAAA,EAAAA;AACrB,QAAA,MAAME,OAAO,IAAIF,OAAAA,EAAAA;AACjB,QAAA,MAAM5C,SAAS,IAAI4C,OAAAA,EAAAA;AAEnB,QAAA,MAAMG,IAAO1I,GAAAA,KAAAA,CAAM2D,CAAC,GAAG4G,QAAQzD,SAAS;AACxC,QAAA,MAAM6B,IAAO3I,GAAAA,KAAAA,CAAM6D,CAAC,GAAG0G,QAAQzD,SAAS;;QAGxCwB,UAAWO,CAAAA,KAAK,CAAC1I,IAAK2I,CAAAA,KAAK,CAACJ,IAAOvI,CAAAA,EAAAA,IAAAA,CAAK2I,KAAK,CAACH,IAAAA,CAAAA,CAAAA;QAC9C,IACE,CAAC4B,QAAQE,cAAc,IACvB,IAAI,CAACjD,OAAO,CAAC+C,OAAAA,EAAS,IAAI,CAAC1I,cAAc,EAAE0I,OAAAA,CAAQ7C,MAAM,EAAE,IAAA,EAAMY,YAAY,CAAGiC,EAAAA,OAAAA,CAAQzD,SAAS,EAAE,CACnG,CAAA,EAAA;AACA,YAAA,MAAM4D,eAAyC,GAAA;gBAC7CC,SAAW,EAAA,IAAI,CAAC1I,UAAU,GAAG,IAAI,CAACL,eAAe,GAAG,IAAI,CAACD,UAAU;gBACnEwI,YAAc,EAAA,CAAA;AACdC,gBAAAA,aAAAA,EAAe,IAAI,CAAC1G,sBAAsB,CAACxD,cAAc,CAAC,CAAE,CAAA,EAAE,CAAGoI,EAAAA,UAAAA,CAAW3E,CAAC,EAAE2E,WAAW1E,CAAC,CAAA;gBAC3FuE,SAAW,EAAA,IAAI,CAACnE,8BAA8B,CAAC,CAAA,CAAA;gBAC/CqG,WAAa,EAAA;AACf,aAAA;AACAG,YAAAA,UAAAA,CAAW/G,IAAI,CAACiH,eAAAA,CAAAA;AAClB;AAEA,QAAA,MAAME,cAAwC,GAAA;YAC5CD,SAAW,EAAA,IAAI,CAAC1I,UAAU,GAAG,IAAI,CAACd,cAAc,GAAG,IAAI,CAACD,SAAS;YACjEiJ,YAAc,EAAA,CAAA;YACdC,aAAe,EAAA,IAAI,CAAC9G,mBAAmB,EAAA;YACvC6E,SAAW,EAAA,IAAI,CAACpE,mBAAmB,EAAA;YACnCsG,WAAa,EAAA;AACf,SAAA;AACA,QAAA,MAAMQ,gBAA0C,GAAA;YAC9CF,SAAW,EAAA,IAAI,CAAC1I,UAAU,GAAG,IAAI,CAACX,gBAAgB,GAAG,IAAI,CAACD,WAAW;YACrE8I,YAAc,EAAA,CAAA;YACdC,aAAe,EAAA,IAAI,CAAC9G,mBAAmB,EAAA;YACvC6E,SAAW,EAAA,IAAI,CAACpE,mBAAmB,EAAA;YACnCsG,WAAa,EAAA;AACf,SAAA;AACA,QAAA,MAAMS,cAAwC,GAAA;YAC5CH,SAAW,EAAA,IAAI,CAAC1I,UAAU,GAAG,IAAI,CAACR,cAAc,GAAG,IAAI,CAACD,SAAS;YACjE2I,YAAc,EAAA,CAAA;YACdC,aAAe,EAAA,IAAI,CAAC9G,mBAAmB,EAAA;YACvC6E,SAAW,EAAA,IAAI,CAACpE,mBAAmB,EAAA;YACnCsG,WAAa,EAAA;AACf,SAAA;AACA,QAAA,MAAMU,cAAwC,GAAA;YAC5CJ,SAAW,EAAA,IAAI,CAAC1I,UAAU,GAAG,IAAI,CAACF,cAAc,GAAG,IAAI,CAACD,SAAS;YACjEqI,YAAc,EAAA,CAAA;YACdC,aAAe,EAAA,IAAI,CAAC9G,mBAAmB,EAAA;YACvC6E,SAAW,EAAA,IAAI,CAACpE,mBAAmB,EAAA;YACnCsG,WAAa,EAAA;AACf,SAAA;AAEA,QAAA,IAAK,IAAItB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIZ,WAAWY,CAAK,EAAA,CAAA;AAClC,YAAA,MAAMlC,QAAQ,CAAKkC,IAAAA,CAAAA;AACnBT,YAAAA,UAAAA,CAAWO,KAAK,CAAC1I,IAAK2I,CAAAA,KAAK,CAACJ,IAAAA,GAAO7B,KAASA,CAAAA,GAAAA,KAAAA,EAAO1G,IAAK2I,CAAAA,KAAK,CAACH,IAAAA,GAAO9B,KAASA,CAAAA,GAAAA,KAAAA,CAAAA;;YAE9E2B,QAASK,CAAAA,KAAK,CAAC,IAAI,CAAC7H,eAAe,IAAI+H,CAAG,EAAA,IAAI,CAAC/H,eAAe,IAAI+H,CAAAA,CAAAA;YAClEN,IAAKI,CAAAA,KAAK,CACRP,UAAW3E,CAAAA,CAAC,IAAI,IAAI,CAAC3C,eAAe,IAAK+H,CAAAA,GAAI,CAAC,CAC9CT,EAAAA,UAAAA,CAAW1E,CAAC,IAAI,IAAI,CAAC5C,eAAe,IAAK+H,CAAAA,GAAI,CAAC,CAAA,CAAA;AAEhD,YAAA,IAAK,IAAIpF,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,gBAAA,IAAK,IAAIC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,oBAAA,IAAImF,CAAM,KAAA,CAAA,KAAMpF,CAAAA,KAAM,CAAKA,IAAAA,CAAAA,KAAM,CAAA,CAAA,KAAOC,CAAAA,KAAM,CAAKA,IAAAA,CAAAA,KAAM,CAAA,CAAI,EAAA;AAC3D,wBAAA;AACF;oBACA,MAAMoF,KAAAA,GAAQrF,CAAK,IAAA,CAAA,GAAIkD,KAAQ,GAAA,CAAA;oBAC/B,MAAMoC,KAAAA,GAAQrF,CAAK,IAAA,CAAA,GAAIiD,KAAQ,GAAA,CAAA;AAC/BlB,oBAAAA,MAAAA,CAAOkD,KAAK,CAACJ,IAAAA,CAAK9E,CAAC,GAAGA,IAAI6E,QAAS7E,CAAAA,CAAC,GAAGqF,KAAAA,EAAOP,KAAK7E,CAAC,GAAGA,CAAI4E,GAAAA,QAAAA,CAAS5E,CAAC,GAAGqF,KAAAA,CAAAA;AACxE,oBAAA,IACE,IAAI,CAAC5C,gBAAgB,CACnBV,MAAOhC,CAAAA,CAAC,GAAG4G,OAAAA,CAAQzD,SAAS,EAC5B,CAACnB,MAAOhC,CAAAA,CAAC,GAAG6E,QAAAA,CAAS7E,CAAAA,IAAK4G,OAAAA,CAAQzD,SAAS,EAC3CyD,OAAQrC,CAAAA,cAAc,CAACvE,CAAC,EACxB4G,OAAAA,CAAQrC,cAAc,CAACrE,CAAC,CAE1B,IAAA,IAAI,CAACwC,gBAAgB,CACnBV,MAAAA,CAAO/B,CAAC,GAAG2G,OAAQzD,CAAAA,SAAS,EAC3BnB,CAAAA,MAAAA,CAAO/B,CAAC,GAAG4E,QAAAA,CAAS5E,CAAAA,IAAK2G,OAAAA,CAAQzD,SAAS,EAC3CyD,OAAQrC,CAAAA,cAAc,CAACtE,CAAC,EACxB2G,OAAAA,CAAQrC,cAAc,CAACpE,CAAC,CAE1B,EAAA;wBACA,IACE,CAACyG,QAAQE,cAAc,IACvB,IAAI,CAACjD,OAAO,CACV+C,OAAAA,EACA,IAAI,CAACnJ,aAAa,EAClBmJ,OAAAA,CAAQ7C,MAAM,EACd,IAAA,EACA/B,QACAkB,KACA0D,EAAAA,OAAAA,CAAQzD,SAAS,EACjBiC,CAEF,CAAA,EAAA;AACA,4BAAA,IAAI,CAACe,WAAW,CAACc,cAAAA,EAAgB1K,cAAc,CAAC,CAAA,CAAE,EAAEyF,MAAAA,CAAOhC,CAAC,EAAEgC,MAAO/B,CAAAA,CAAC,EAAEiD,KAAOkC,EAAAA,CAAAA,CAAAA;AACjF;AACF;AACF;AACF;;YAEA,IACE,CAACwB,QAAQE,cAAc,IACvB,IAAI,CAACjD,OAAO,CACV+C,OAAAA,EACA,IAAI,CAAChJ,eAAe,EACpBgJ,OAAAA,CAAQ7C,MAAM,EACd,IAAA,EACAY,YACAzB,KACA0D,EAAAA,OAAAA,CAAQzD,SAAS,EACjBiC,CAEF,CAAA,EAAA;AACA,gBAAA,IAAI,CAACe,WAAW,CAACe,gBAAAA,EAAkB3K,cAAc,CAAC,CAAA,CAAE,EAAEoI,UAAAA,CAAW3E,CAAC,EAAE2E,UAAW1E,CAAAA,CAAC,EAAEiD,KAAOkC,EAAAA,CAAAA,CAAAA;AAC3F;YAEA,IAAIA,CAAAA,KAAMZ,YAAY,CAAG,EAAA;AACvB,gBAAA,MAAMe,YAAYrC,KAAQ,GAAA,CAAA;AAC1B,gBAAA,MAAMsC,cAAiB,GAAA,IAAIZ,OACzBpI,CAAAA,IAAAA,CAAK2I,KAAK,CAACJ,IAAOQ,GAAAA,SAAAA,CAAAA,GAAaA,SAC/B/I,EAAAA,IAAAA,CAAK2I,KAAK,CAACH,OAAOO,SAAaA,CAAAA,GAAAA,SAAAA,CAAAA;;gBAGjC,MAAME,UAAAA,GAAa,IAAIb,OAAAA,CAAQD,UAAW3E,CAAAA,CAAC,GAAGkD,KAAAA,GAAQ,GAAKyB,EAAAA,UAAAA,CAAW1E,CAAC,GAAGiD,KAAQ,GAAA,GAAA,CAAA;gBAClF,MAAMX,CAAAA,GAAI,IAAIqC,OAAQG,CAAAA,IAAAA,GAAOS,eAAexF,CAAC,EAAEgF,IAAOQ,GAAAA,cAAAA,CAAevF,CAAC,CAAA;AACtE,gBAAA,IAAIyF,CAAI,GAAA,CAAA;AACRA,gBAAAA,CAAAA,IAAKnD,CAAEvC,CAAAA,CAAC,IAAIkD,KAAAA,GAAQ,CAAI,GAAA,CAAA;AACxBwC,gBAAAA,CAAAA,IAAKnD,CAAEtC,CAAAA,CAAC,IAAIiD,KAAAA,GAAQ,CAAI,GAAA,CAAA;gBACxB,IACE,CAAC0D,OAAQE,CAAAA,cAAc,IACvB,IAAI,CAACjD,OAAO,CACV+C,OACA,EAAA,IAAI,CAAC7I,aAAa,EAClB6I,OAAQ7C,CAAAA,MAAM,EACdxH,cAAc,CAACmJ,CAAAA,CAAE,EACjBD,UAAAA,EACAvC,KACA0D,EAAAA,OAAAA,CAAQzD,SAAS,EACjBiC,CAEF,CAAA,EAAA;AACA,oBAAA,IAAI,CAACe,WAAW,CAACgB,cAAAA,EAAgB5K,cAAc,CAACmJ,CAAAA,CAAE,EAAED,UAAAA,CAAWzF,CAAC,EAAEyF,UAAWxF,CAAAA,CAAC,EAAEiD,KAAOkC,EAAAA,CAAAA,CAAAA;AACzF;;gBAEA,MAAMO,QAAAA,GAAW,IAAIf,OACnBY,CAAAA,cAAAA,CAAexF,CAAC,IAAI,IAAI,CAAC3C,eAAe,IAAK+H,IAAI,CAAC,CAAA,EAClDI,cAAevF,CAAAA,CAAC,IAAI,IAAI,CAAC5C,eAAe,IAAK+H,CAAAA,GAAI,CAAC,CAAA,CAAA;gBAEpD,IACE,CAACwB,QAAQE,cAAc,IACvB,IAAI,CAACjD,OAAO,CACV+C,OAAAA,EACA,IAAI,CAACvI,aAAa,EAClBuI,OAAAA,CAAQ7C,MAAM,EACd,IAAA,EACA4B,UACAzC,KACA0D,EAAAA,OAAAA,CAAQzD,SAAS,EACjBiC,CAEF,CAAA,EAAA;AACA,oBAAA,IAAI,CAACe,WAAW,CAACiB,cAAAA,EAAgB7K,cAAc,CAAC,CAAA,CAAE,EAAEoJ,QAAAA,CAAS3F,CAAC,EAAE2F,QAAS1F,CAAAA,CAAC,EAAEiD,KAAOkC,EAAAA,CAAAA,CAAAA;AACrF;AACF;AACF;QACA,IAAI6B,cAAAA,CAAeT,YAAY,GAAG,CAAG,EAAA;AACnCK,YAAAA,UAAAA,CAAW/G,IAAI,CAACmH,cAAAA,CAAAA;AAClB;QACA,IAAIC,gBAAAA,CAAiBV,YAAY,GAAG,CAAG,EAAA;AACrCK,YAAAA,UAAAA,CAAW/G,IAAI,CAACoH,gBAAAA,CAAAA;AAClB;QACA,IAAIC,cAAAA,CAAeX,YAAY,GAAG,CAAG,EAAA;AACnCK,YAAAA,UAAAA,CAAW/G,IAAI,CAACqH,cAAAA,CAAAA;AAClB;QACA,IAAIC,cAAAA,CAAeZ,YAAY,GAAG,CAAG,EAAA;AACnCK,YAAAA,UAAAA,CAAW/G,IAAI,CAACsH,cAAAA,CAAAA;AAClB;QACA,KAAK,MAAMhB,QAAQS,UAAY,CAAA;AAC7BT,YAAAA,IAAAA,CAAKY,SAAS,CACXjF,eAAe,CAAC,aAChBsF,aAAa,CAAC,CAAGjB,EAAAA,IAAAA,CAAKK,aAAa,EAAE,CAAGL,EAAAA,IAAAA,CAAKI,YAAY,GAAG,CAAA,CAAA;AACjE;QACA,OAAOK,UAAAA;AACT;uDAEA,SAAsB,GAAA;AACpB,QAAA,KAAK,CAACS,SAAAA,EAAAA;QACN,IAAI,CAACtJ,UAAU,CAACiD,OAAO,EAAA;QACvB,IAAI,CAAChD,eAAe,CAACgD,OAAO,EAAA;QAC5B,IAAI,CAACvD,WAAW,CAACuD,OAAO,EAAA;QACxB,IAAI,CAACtD,gBAAgB,CAACsD,OAAO,EAAA;QAC7B,IAAI,CAAC9C,SAAS,CAAC8C,OAAO,EAAA;QACtB,IAAI,CAAC7C,cAAc,CAAC6C,OAAO,EAAA;QAC3B,IAAI,CAACpD,SAAS,CAACoD,OAAO,EAAA;QACtB,IAAI,CAACnD,cAAc,CAACmD,OAAO,EAAA;QAC3B,IAAI,CAAC1D,SAAS,CAAC0D,OAAO,EAAA;QACtB,IAAI,CAACzD,cAAc,CAACyD,OAAO,EAAA;AAC7B;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { Vector4, Matrix4x4 } from '@zephyr3d/base';
1
+ import { Vector4 } from '@zephyr3d/base';
2
2
  import { MAX_CLUSTERED_LIGHTS } from '../values.js';
3
3
  import { ShaderHelper } from '../material/shader/helper.js';
4
4
  import { getDevice } from '../app/api.js';
@@ -282,8 +282,8 @@ class ClusteredLight {
282
282
  this.createRenderState(device);
283
283
  }
284
284
  const viewport = device.getViewport();
285
- const vw = device.screenToDevice(viewport.width);
286
- const vh = device.screenToDevice(viewport.height);
285
+ const vw = device.screenXToDevice(viewport.width);
286
+ const vh = device.screenYToDevice(viewport.height);
287
287
  const scale = this._tileCountZ / Math.log2(camera.getFarPlane() / camera.getNearPlane());
288
288
  const bias = -(this._tileCountZ * Math.log2(camera.getNearPlane()) / Math.log2(camera.getFarPlane() / camera.getNearPlane()));
289
289
  this._clusterParam.setXYZW(vw, vh, scale, bias);
@@ -299,7 +299,7 @@ class ClusteredLight {
299
299
  this._countParam[1] = this._tileCountY;
300
300
  this._countParam[2] = this._tileCountZ;
301
301
  this._countParam[3] = numLights + 1;
302
- this._bindGroup.setValue('invProjMatrix', Matrix4x4.invert(camera.getProjectionMatrix()));
302
+ this._bindGroup.setValue('invProjMatrix', camera.getInvProjectionMatrix());
303
303
  this._bindGroup.setValue('viewMatrix', camera.viewMatrix);
304
304
  this._bindGroup.setValue('sizeParam', this._sizeParam);
305
305
  this._bindGroup.setValue('countParam', this._countParam);