@zephyr3d/scene 0.6.1 → 0.7.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 (722) hide show
  1. package/dist/animation/animation.js +149 -27
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +173 -73
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +65 -10
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +41 -20
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +14 -38
  10. package/dist/animation/morphtarget.js.map +1 -1
  11. package/dist/animation/morphtrack.js +59 -22
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/proptrack.js +190 -0
  14. package/dist/animation/proptrack.js.map +1 -0
  15. package/dist/animation/rotationtrack.js +29 -11
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +29 -11
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +241 -78
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +30 -11
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +43 -0
  24. package/dist/app/api.js.map +1 -0
  25. package/dist/app/app.js +153 -0
  26. package/dist/app/app.js.map +1 -0
  27. package/dist/app/engine.js +312 -0
  28. package/dist/app/engine.js.map +1 -0
  29. package/dist/app/inputmgr.js +351 -0
  30. package/dist/app/inputmgr.js.map +1 -0
  31. package/dist/app/runtimescript.js +62 -0
  32. package/dist/app/runtimescript.js.map +1 -0
  33. package/dist/app/scriptingsystem.js +220 -0
  34. package/dist/app/scriptingsystem.js.map +1 -0
  35. package/dist/app/scriptregistry.js +432 -0
  36. package/dist/app/scriptregistry.js.map +1 -0
  37. package/dist/asset/assetmanager.js +772 -291
  38. package/dist/asset/assetmanager.js.map +1 -1
  39. package/dist/asset/builtin.js +7 -43
  40. package/dist/asset/builtin.js.map +1 -1
  41. package/dist/asset/loaders/dds/dds.js +17 -93
  42. package/dist/asset/loaders/dds/dds.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  44. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  45. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  46. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/helpers.js +27 -14
  48. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  49. package/dist/asset/loaders/hdr/hdr.js +17 -12
  50. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  51. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  52. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  53. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  54. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  55. package/dist/asset/loaders/loader.js.map +1 -1
  56. package/dist/asset/model.js +158 -4
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/blitter/bilateralblur.js +0 -1
  59. package/dist/blitter/bilateralblur.js.map +1 -1
  60. package/dist/blitter/blitter.js +22 -23
  61. package/dist/blitter/blitter.js.map +1 -1
  62. package/dist/blitter/box.js.map +1 -1
  63. package/dist/blitter/copy.js.map +1 -1
  64. package/dist/blitter/gaussianblur.js +23 -23
  65. package/dist/blitter/gaussianblur.js.map +1 -1
  66. package/dist/camera/base.js +141 -34
  67. package/dist/camera/base.js.map +1 -1
  68. package/dist/camera/camera.js +653 -149
  69. package/dist/camera/camera.js.map +1 -1
  70. package/dist/camera/fps.js +2 -10
  71. package/dist/camera/fps.js.map +1 -1
  72. package/dist/camera/orbit.js +132 -59
  73. package/dist/camera/orbit.js.map +1 -1
  74. package/dist/camera/orthocamera.js +37 -12
  75. package/dist/camera/orthocamera.js.map +1 -1
  76. package/dist/camera/perspectivecamera.js +37 -20
  77. package/dist/camera/perspectivecamera.js.map +1 -1
  78. package/dist/index.d.ts +18268 -6982
  79. package/dist/index.js +49 -16
  80. package/dist/index.js.map +1 -1
  81. package/dist/material/blinn.js +5 -0
  82. package/dist/material/blinn.js.map +1 -1
  83. package/dist/material/grassmaterial.js +6 -1
  84. package/dist/material/grassmaterial.js.map +1 -1
  85. package/dist/material/lambert.js +6 -1
  86. package/dist/material/lambert.js.map +1 -1
  87. package/dist/material/material.js +346 -73
  88. package/dist/material/material.js.map +1 -1
  89. package/dist/material/meshmaterial.js +498 -156
  90. package/dist/material/meshmaterial.js.map +1 -1
  91. package/dist/material/mixins/albedocolor.js +5 -1
  92. package/dist/material/mixins/albedocolor.js.map +1 -1
  93. package/dist/material/mixins/foliage.js +3 -3
  94. package/dist/material/mixins/foliage.js.map +1 -1
  95. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  96. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  97. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  98. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  99. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  101. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  103. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  105. package/dist/material/mixins/lit.js +16 -4
  106. package/dist/material/mixins/lit.js.map +1 -1
  107. package/dist/material/mixins/pbr/brdf.js +134 -0
  108. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  109. package/dist/material/mixins/pbr/common.js +68 -85
  110. package/dist/material/mixins/pbr/common.js.map +1 -1
  111. package/dist/material/mixins/texture.js +98 -83
  112. package/dist/material/mixins/texture.js.map +1 -1
  113. package/dist/material/mixins/vertexcolor.js +6 -2
  114. package/dist/material/mixins/vertexcolor.js.map +1 -1
  115. package/dist/material/particle.js +272 -0
  116. package/dist/material/particle.js.map +1 -0
  117. package/dist/material/pbrblueprint.js +186 -0
  118. package/dist/material/pbrblueprint.js.map +1 -0
  119. package/dist/material/pbrmr.js +10 -0
  120. package/dist/material/pbrmr.js.map +1 -1
  121. package/dist/material/pbrsg.js +10 -0
  122. package/dist/material/pbrsg.js.map +1 -1
  123. package/dist/material/shader/helper.js +521 -287
  124. package/dist/material/shader/helper.js.map +1 -1
  125. package/dist/material/terrain-cm.js +607 -0
  126. package/dist/material/terrain-cm.js.map +1 -0
  127. package/dist/material/terrainmaterial.js +59 -54
  128. package/dist/material/terrainmaterial.js.map +1 -1
  129. package/dist/material/unlit.js +5 -0
  130. package/dist/material/unlit.js.map +1 -1
  131. package/dist/material/water.js +415 -0
  132. package/dist/material/water.js.map +1 -0
  133. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  141. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  143. package/dist/posteffect/bloom.js +39 -54
  144. package/dist/posteffect/bloom.js.map +1 -1
  145. package/dist/posteffect/compositor.js +95 -128
  146. package/dist/posteffect/compositor.js.map +1 -1
  147. package/dist/posteffect/fxaa.js +10 -18
  148. package/dist/posteffect/fxaa.js.map +1 -1
  149. package/dist/posteffect/grayscale.js +9 -17
  150. package/dist/posteffect/grayscale.js.map +1 -1
  151. package/dist/posteffect/motionblur.js +105 -0
  152. package/dist/posteffect/motionblur.js.map +1 -0
  153. package/dist/posteffect/posteffect.js +66 -35
  154. package/dist/posteffect/posteffect.js.map +1 -1
  155. package/dist/posteffect/sao.js +13 -21
  156. package/dist/posteffect/sao.js.map +1 -1
  157. package/dist/posteffect/ssr.js +60 -100
  158. package/dist/posteffect/ssr.js.map +1 -1
  159. package/dist/posteffect/taa.js +175 -0
  160. package/dist/posteffect/taa.js.map +1 -0
  161. package/dist/posteffect/tonemap.js +12 -20
  162. package/dist/posteffect/tonemap.js.map +1 -1
  163. package/dist/render/abuffer_oit.js +30 -19
  164. package/dist/render/abuffer_oit.js.map +1 -1
  165. package/dist/render/clipmap.js +429 -101
  166. package/dist/render/clipmap.js.map +1 -1
  167. package/dist/render/cluster_light.js +7 -5
  168. package/dist/render/cluster_light.js.map +1 -1
  169. package/dist/render/cull_visitor.js +43 -3
  170. package/dist/render/cull_visitor.js.map +1 -1
  171. package/dist/render/depthpass.js +14 -5
  172. package/dist/render/depthpass.js.map +1 -1
  173. package/dist/render/drawable_mixin.js +113 -40
  174. package/dist/render/drawable_mixin.js.map +1 -1
  175. package/dist/render/envlight.js +86 -141
  176. package/dist/render/envlight.js.map +1 -1
  177. package/dist/render/fbm_wavegenerator.js +234 -0
  178. package/dist/render/fbm_wavegenerator.js.map +1 -0
  179. package/dist/render/fft_wavegenerator.js +64 -50
  180. package/dist/render/fft_wavegenerator.js.map +1 -1
  181. package/dist/render/fullscreenquad.js +2 -2
  182. package/dist/render/fullscreenquad.js.map +1 -1
  183. package/dist/render/gerstner_wavegenerator.js +98 -48
  184. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  185. package/dist/render/globalbindgroup_allocator.js +4 -2
  186. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  187. package/dist/render/hzb.js +6 -3
  188. package/dist/render/hzb.js.map +1 -1
  189. package/dist/render/lightpass.js +19 -18
  190. package/dist/render/lightpass.js.map +1 -1
  191. package/dist/render/objectcolorpass.js +4 -4
  192. package/dist/render/objectcolorpass.js.map +1 -1
  193. package/dist/render/primitive.js +213 -104
  194. package/dist/render/primitive.js.map +1 -1
  195. package/dist/render/render_queue.js +40 -20
  196. package/dist/render/render_queue.js.map +1 -1
  197. package/dist/render/renderbundle_wrapper.js +65 -15
  198. package/dist/render/renderbundle_wrapper.js.map +1 -1
  199. package/dist/render/renderer.js +326 -185
  200. package/dist/render/renderer.js.map +1 -1
  201. package/dist/render/renderpass.js +20 -36
  202. package/dist/render/renderpass.js.map +1 -1
  203. package/dist/render/shadowmap_pass.js +3 -3
  204. package/dist/render/shadowmap_pass.js.map +1 -1
  205. package/dist/render/sky.js +864 -541
  206. package/dist/render/sky.js.map +1 -1
  207. package/dist/render/weightedblended_oit.js +13 -15
  208. package/dist/render/weightedblended_oit.js.map +1 -1
  209. package/dist/scene/batchgroup.js +18 -5
  210. package/dist/scene/batchgroup.js.map +1 -1
  211. package/dist/scene/environment.js +78 -48
  212. package/dist/scene/environment.js.map +1 -1
  213. package/dist/scene/graph_node.js +2 -3
  214. package/dist/scene/graph_node.js.map +1 -1
  215. package/dist/scene/light.js +28 -89
  216. package/dist/scene/light.js.map +1 -1
  217. package/dist/scene/mesh.js +218 -87
  218. package/dist/scene/mesh.js.map +1 -1
  219. package/dist/scene/octree.js +371 -162
  220. package/dist/scene/octree.js.map +1 -1
  221. package/dist/scene/particlesys.js +684 -0
  222. package/dist/scene/particlesys.js.map +1 -0
  223. package/dist/scene/raycast_visitor.js +34 -5
  224. package/dist/scene/raycast_visitor.js.map +1 -1
  225. package/dist/scene/scene.js +309 -85
  226. package/dist/scene/scene.js.map +1 -1
  227. package/dist/scene/scene_node.js +675 -102
  228. package/dist/scene/scene_node.js.map +1 -1
  229. package/dist/scene/terrain/grass.js +48 -49
  230. package/dist/scene/terrain/grass.js.map +1 -1
  231. package/dist/scene/terrain/heightfield.js +46 -44
  232. package/dist/scene/terrain/heightfield.js.map +1 -1
  233. package/dist/scene/terrain/patch.js +20 -29
  234. package/dist/scene/terrain/patch.js.map +1 -1
  235. package/dist/scene/terrain/quadtree.js +58 -27
  236. package/dist/scene/terrain/quadtree.js.map +1 -1
  237. package/dist/scene/terrain/terrain.js +31 -45
  238. package/dist/scene/terrain/terrain.js.map +1 -1
  239. package/dist/scene/terrain-cm/grass.js +603 -0
  240. package/dist/scene/terrain-cm/grass.js.map +1 -0
  241. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  243. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  245. package/dist/scene/water.js +378 -0
  246. package/dist/scene/water.js.map +1 -0
  247. package/dist/shaders/atmosphere.js +957 -0
  248. package/dist/shaders/atmosphere.js.map +1 -0
  249. package/dist/shaders/fog.js +116 -0
  250. package/dist/shaders/fog.js.map +1 -0
  251. package/dist/shaders/misc.js.map +1 -1
  252. package/dist/shaders/noise.js +217 -8
  253. package/dist/shaders/noise.js.map +1 -1
  254. package/dist/shaders/pbr.js.map +1 -1
  255. package/dist/shaders/shadow.js +8 -8
  256. package/dist/shaders/shadow.js.map +1 -1
  257. package/dist/shaders/ssr.js +87 -39
  258. package/dist/shaders/ssr.js.map +1 -1
  259. package/dist/shaders/temporal.js +216 -0
  260. package/dist/shaders/temporal.js.map +1 -0
  261. package/dist/shaders/water.js +42 -20
  262. package/dist/shaders/water.js.map +1 -1
  263. package/dist/shadow/esm.js +31 -13
  264. package/dist/shadow/esm.js.map +1 -1
  265. package/dist/shadow/pcf_opt.js +12 -13
  266. package/dist/shadow/pcf_opt.js.map +1 -1
  267. package/dist/shadow/pcf_pd.js +12 -13
  268. package/dist/shadow/pcf_pd.js.map +1 -1
  269. package/dist/shadow/shader.js +38 -0
  270. package/dist/shadow/shader.js.map +1 -0
  271. package/dist/shadow/shadow_impl.js.map +1 -1
  272. package/dist/shadow/shadowmapper.js +67 -26
  273. package/dist/shadow/shadowmapper.js.map +1 -1
  274. package/dist/shadow/ssm.js +15 -16
  275. package/dist/shadow/ssm.js.map +1 -1
  276. package/dist/shadow/vsm.js +33 -16
  277. package/dist/shadow/vsm.js.map +1 -1
  278. package/dist/shapes/box.js +181 -83
  279. package/dist/shapes/box.js.map +1 -1
  280. package/dist/shapes/cylinder.js +101 -43
  281. package/dist/shapes/cylinder.js.map +1 -1
  282. package/dist/shapes/plane.js +70 -29
  283. package/dist/shapes/plane.js.map +1 -1
  284. package/dist/shapes/shape.js +120 -17
  285. package/dist/shapes/shape.js.map +1 -1
  286. package/dist/shapes/sphere.js +78 -44
  287. package/dist/shapes/sphere.js.map +1 -1
  288. package/dist/shapes/tetrahedron.js +256 -0
  289. package/dist/shapes/tetrahedron.js.map +1 -0
  290. package/dist/shapes/torus.js +76 -55
  291. package/dist/shapes/torus.js.map +1 -1
  292. package/dist/src/animation/animation.js +127 -0
  293. package/dist/src/animation/animation.js.map +1 -0
  294. package/dist/src/animation/animationset.js +255 -0
  295. package/dist/src/animation/animationset.js.map +1 -0
  296. package/dist/src/animation/animationtrack.js +34 -0
  297. package/dist/src/animation/animationtrack.js.map +1 -0
  298. package/dist/src/animation/eulerrotationtrack.js +52 -0
  299. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  300. package/dist/src/animation/morphtarget.js +93 -0
  301. package/dist/src/animation/morphtarget.js.map +1 -0
  302. package/dist/src/animation/morphtrack.js +70 -0
  303. package/dist/src/animation/morphtrack.js.map +1 -0
  304. package/dist/src/animation/proptrack.js +161 -0
  305. package/dist/src/animation/proptrack.js.map +1 -0
  306. package/dist/src/animation/rotationtrack.js +51 -0
  307. package/dist/src/animation/rotationtrack.js.map +1 -0
  308. package/dist/src/animation/scaletrack.js +50 -0
  309. package/dist/src/animation/scaletrack.js.map +1 -0
  310. package/dist/src/animation/skeleton.js +204 -0
  311. package/dist/src/animation/skeleton.js.map +1 -0
  312. package/dist/src/animation/translationtrack.js +50 -0
  313. package/dist/src/animation/translationtrack.js.map +1 -0
  314. package/dist/{app.js → src/app/app.js} +18 -40
  315. package/dist/src/app/app.js.map +1 -0
  316. package/dist/{input → src/app}/inputmgr.js +41 -16
  317. package/dist/src/app/inputmgr.js.map +1 -0
  318. package/dist/src/asset/assetmanager.js +404 -0
  319. package/dist/src/asset/assetmanager.js.map +1 -0
  320. package/dist/src/asset/builtin.js +337 -0
  321. package/dist/src/asset/builtin.js.map +1 -0
  322. package/dist/src/asset/loaders/dds/dds.js +470 -0
  323. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  324. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  326. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  328. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  330. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  332. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  334. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  336. package/dist/src/asset/loaders/loader.js +45 -0
  337. package/dist/src/asset/loaders/loader.js.map +1 -0
  338. package/dist/src/asset/model.js +414 -0
  339. package/dist/src/asset/model.js.map +1 -0
  340. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  341. package/dist/src/blitter/bilateralblur.js.map +1 -0
  342. package/dist/src/blitter/blitter.js +390 -0
  343. package/dist/src/blitter/blitter.js.map +1 -0
  344. package/dist/src/blitter/box.js +118 -0
  345. package/dist/src/blitter/box.js.map +1 -0
  346. package/dist/src/blitter/copy.js +22 -0
  347. package/dist/src/blitter/copy.js.map +1 -0
  348. package/dist/src/blitter/gaussianblur.js +228 -0
  349. package/dist/src/blitter/gaussianblur.js.map +1 -0
  350. package/dist/src/camera/base.js +92 -0
  351. package/dist/src/camera/base.js.map +1 -0
  352. package/dist/src/camera/camera.js +1005 -0
  353. package/dist/src/camera/camera.js.map +1 -0
  354. package/dist/src/camera/fps.js +238 -0
  355. package/dist/src/camera/fps.js.map +1 -0
  356. package/dist/src/camera/orbit.js +245 -0
  357. package/dist/src/camera/orbit.js.map +1 -0
  358. package/dist/src/camera/orthocamera.js +167 -0
  359. package/dist/src/camera/orthocamera.js.map +1 -0
  360. package/dist/src/camera/perspectivecamera.js +141 -0
  361. package/dist/src/camera/perspectivecamera.js.map +1 -0
  362. package/dist/src/index.js +120 -0
  363. package/dist/src/index.js.map +1 -0
  364. package/dist/src/material/blinn.js +81 -0
  365. package/dist/src/material/blinn.js.map +1 -0
  366. package/dist/src/material/grassmaterial.js +113 -0
  367. package/dist/src/material/grassmaterial.js.map +1 -0
  368. package/dist/src/material/lambert.js +92 -0
  369. package/dist/src/material/lambert.js.map +1 -0
  370. package/dist/src/material/material.js +301 -0
  371. package/dist/src/material/material.js.map +1 -0
  372. package/dist/src/material/meshmaterial.js +704 -0
  373. package/dist/src/material/meshmaterial.js.map +1 -0
  374. package/dist/src/material/mixins/albedocolor.js +76 -0
  375. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  376. package/dist/src/material/mixins/foliage.js +47 -0
  377. package/dist/src/material/mixins/foliage.js.map +1 -0
  378. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  380. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  382. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  384. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  386. package/dist/src/material/mixins/lit.js +476 -0
  387. package/dist/src/material/mixins/lit.js.map +1 -0
  388. package/dist/src/material/mixins/pbr/common.js +918 -0
  389. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  390. package/dist/src/material/mixins/texture.js +172 -0
  391. package/dist/src/material/mixins/texture.js.map +1 -0
  392. package/dist/src/material/mixins/vertexcolor.js +56 -0
  393. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  394. package/dist/src/material/particle.js +178 -0
  395. package/dist/src/material/particle.js.map +1 -0
  396. package/dist/src/material/pbrmr.js +97 -0
  397. package/dist/src/material/pbrmr.js.map +1 -0
  398. package/dist/src/material/pbrsg.js +97 -0
  399. package/dist/src/material/pbrsg.js.map +1 -0
  400. package/dist/src/material/shader/helper.js +1209 -0
  401. package/dist/src/material/shader/helper.js.map +1 -0
  402. package/dist/src/material/terrain-cm.js +606 -0
  403. package/dist/src/material/terrain-cm.js.map +1 -0
  404. package/dist/src/material/terrainmaterial.js +375 -0
  405. package/dist/src/material/terrainmaterial.js.map +1 -0
  406. package/dist/src/material/unlit.js +41 -0
  407. package/dist/src/material/unlit.js.map +1 -0
  408. package/dist/src/material/water.js +417 -0
  409. package/dist/src/material/water.js.map +1 -0
  410. package/dist/src/posteffect/bloom.js +361 -0
  411. package/dist/src/posteffect/bloom.js.map +1 -0
  412. package/dist/src/posteffect/compositor.js +226 -0
  413. package/dist/src/posteffect/compositor.js.map +1 -0
  414. package/dist/src/posteffect/fxaa.js +273 -0
  415. package/dist/src/posteffect/fxaa.js.map +1 -0
  416. package/dist/src/posteffect/grayscale.js +69 -0
  417. package/dist/src/posteffect/grayscale.js.map +1 -0
  418. package/dist/src/posteffect/motionblur.js +96 -0
  419. package/dist/src/posteffect/motionblur.js.map +1 -0
  420. package/dist/src/posteffect/posteffect.js +126 -0
  421. package/dist/src/posteffect/posteffect.js.map +1 -0
  422. package/dist/src/posteffect/sao.js +324 -0
  423. package/dist/src/posteffect/sao.js.map +1 -0
  424. package/dist/src/posteffect/ssr.js +489 -0
  425. package/dist/src/posteffect/ssr.js.map +1 -0
  426. package/dist/src/posteffect/taa.js +172 -0
  427. package/dist/src/posteffect/taa.js.map +1 -0
  428. package/dist/src/posteffect/tonemap.js +94 -0
  429. package/dist/src/posteffect/tonemap.js.map +1 -0
  430. package/dist/src/render/abuffer_oit.js +361 -0
  431. package/dist/src/render/abuffer_oit.js.map +1 -0
  432. package/dist/src/render/clipmap.js +851 -0
  433. package/dist/src/render/clipmap.js.map +1 -0
  434. package/dist/src/render/cluster_light.js +333 -0
  435. package/dist/src/render/cluster_light.js.map +1 -0
  436. package/dist/src/render/cull_visitor.js +187 -0
  437. package/dist/src/render/cull_visitor.js.map +1 -0
  438. package/dist/src/render/depthpass.js +68 -0
  439. package/dist/src/render/depthpass.js.map +1 -0
  440. package/dist/src/render/drawable_mixin.js +227 -0
  441. package/dist/src/render/drawable_mixin.js.map +1 -0
  442. package/dist/src/render/envlight.js +463 -0
  443. package/dist/src/render/envlight.js.map +1 -0
  444. package/dist/src/render/fbm_wavegenerator.js +251 -0
  445. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  446. package/dist/src/render/fft_wavegenerator.js +1006 -0
  447. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  448. package/dist/src/render/fullscreenquad.js +38 -0
  449. package/dist/src/render/fullscreenquad.js.map +1 -0
  450. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  451. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  452. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  453. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  454. package/dist/src/render/hzb.js +273 -0
  455. package/dist/src/render/hzb.js.map +1 -0
  456. package/dist/src/render/lightpass.js +172 -0
  457. package/dist/src/render/lightpass.js.map +1 -0
  458. package/dist/src/render/objectcolorpass.js +51 -0
  459. package/dist/src/render/objectcolorpass.js.map +1 -0
  460. package/dist/src/render/primitive.js +364 -0
  461. package/dist/src/render/primitive.js.map +1 -0
  462. package/dist/src/render/render_queue.js +467 -0
  463. package/dist/src/render/render_queue.js.map +1 -0
  464. package/dist/src/render/renderbundle_wrapper.js +152 -0
  465. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  466. package/dist/src/render/renderer.js +455 -0
  467. package/dist/src/render/renderer.js.map +1 -0
  468. package/dist/src/render/renderpass.js +200 -0
  469. package/dist/src/render/renderpass.js.map +1 -0
  470. package/dist/src/render/shadowmap_pass.js +56 -0
  471. package/dist/src/render/shadowmap_pass.js.map +1 -0
  472. package/dist/src/render/sky.js +1103 -0
  473. package/dist/src/render/sky.js.map +1 -0
  474. package/dist/src/render/weightedblended_oit.js +168 -0
  475. package/dist/src/render/weightedblended_oit.js.map +1 -0
  476. package/dist/src/scene/batchgroup.js +162 -0
  477. package/dist/src/scene/batchgroup.js.map +1 -0
  478. package/dist/src/scene/environment.js +209 -0
  479. package/dist/src/scene/environment.js.map +1 -0
  480. package/dist/src/scene/graph_node.js +72 -0
  481. package/dist/src/scene/graph_node.js.map +1 -0
  482. package/dist/src/scene/light.js +416 -0
  483. package/dist/src/scene/light.js.map +1 -0
  484. package/dist/src/scene/mesh.js +341 -0
  485. package/dist/src/scene/mesh.js.map +1 -0
  486. package/dist/src/scene/octree.js +649 -0
  487. package/dist/src/scene/octree.js.map +1 -0
  488. package/dist/src/scene/particlesys.js +738 -0
  489. package/dist/src/scene/particlesys.js.map +1 -0
  490. package/dist/src/scene/raycast_visitor.js +103 -0
  491. package/dist/src/scene/raycast_visitor.js.map +1 -0
  492. package/dist/src/scene/scene.js +284 -0
  493. package/dist/src/scene/scene.js.map +1 -0
  494. package/dist/src/scene/scene_node.js +732 -0
  495. package/dist/src/scene/scene_node.js.map +1 -0
  496. package/dist/src/scene/terrain/grass.js +278 -0
  497. package/dist/src/scene/terrain/grass.js.map +1 -0
  498. package/dist/src/scene/terrain/heightfield.js +475 -0
  499. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  500. package/dist/src/scene/terrain/patch.js +530 -0
  501. package/dist/src/scene/terrain/patch.js.map +1 -0
  502. package/dist/src/scene/terrain/quadtree.js +461 -0
  503. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  504. package/dist/src/scene/terrain/terrain.js +246 -0
  505. package/dist/src/scene/terrain/terrain.js.map +1 -0
  506. package/dist/src/scene/terrain-cm/grass.js +594 -0
  507. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  508. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  510. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  512. package/dist/src/scene/water.js +374 -0
  513. package/dist/src/scene/water.js.map +1 -0
  514. package/dist/src/shaders/atmosphere.js +957 -0
  515. package/dist/src/shaders/atmosphere.js.map +1 -0
  516. package/dist/src/shaders/fog.js +112 -0
  517. package/dist/src/shaders/fog.js.map +1 -0
  518. package/dist/src/shaders/misc.js +266 -0
  519. package/dist/src/shaders/misc.js.map +1 -0
  520. package/dist/src/shaders/noise.js +222 -0
  521. package/dist/src/shaders/noise.js.map +1 -0
  522. package/dist/src/shaders/pbr.js +51 -0
  523. package/dist/src/shaders/pbr.js.map +1 -0
  524. package/dist/src/shaders/shadow.js +636 -0
  525. package/dist/src/shaders/shadow.js.map +1 -0
  526. package/dist/src/shaders/ssr.js +490 -0
  527. package/dist/src/shaders/ssr.js.map +1 -0
  528. package/dist/src/shaders/temporal.js +215 -0
  529. package/dist/src/shaders/temporal.js.map +1 -0
  530. package/dist/src/shaders/water.js +756 -0
  531. package/dist/src/shaders/water.js.map +1 -0
  532. package/dist/src/shadow/esm.js +237 -0
  533. package/dist/src/shadow/esm.js.map +1 -0
  534. package/dist/src/shadow/pcf_opt.js +181 -0
  535. package/dist/src/shadow/pcf_opt.js.map +1 -0
  536. package/dist/src/shadow/pcf_pd.js +189 -0
  537. package/dist/src/shadow/pcf_pd.js.map +1 -0
  538. package/dist/src/shadow/shader.js +37 -0
  539. package/dist/src/shadow/shader.js.map +1 -0
  540. package/dist/src/shadow/shadow_impl.js +15 -0
  541. package/dist/src/shadow/shadow_impl.js.map +1 -0
  542. package/dist/src/shadow/shadowmapper.js +790 -0
  543. package/dist/src/shadow/shadowmapper.js.map +1 -0
  544. package/dist/src/shadow/ssm.js +159 -0
  545. package/dist/src/shadow/ssm.js.map +1 -0
  546. package/dist/src/shadow/vsm.js +297 -0
  547. package/dist/src/shadow/vsm.js.map +1 -0
  548. package/dist/src/shapes/box.js +386 -0
  549. package/dist/src/shapes/box.js.map +1 -0
  550. package/dist/src/shapes/cylinder.js +125 -0
  551. package/dist/src/shapes/cylinder.js.map +1 -0
  552. package/dist/src/shapes/plane.js +88 -0
  553. package/dist/src/shapes/plane.js.map +1 -0
  554. package/dist/src/shapes/shape.js +87 -0
  555. package/dist/src/shapes/shape.js.map +1 -0
  556. package/dist/src/shapes/sphere.js +114 -0
  557. package/dist/src/shapes/sphere.js.map +1 -0
  558. package/dist/src/shapes/tetrahedron.js +188 -0
  559. package/dist/src/shapes/tetrahedron.js.map +1 -0
  560. package/dist/src/shapes/torus.js +111 -0
  561. package/dist/src/shapes/torus.js.map +1 -0
  562. package/dist/src/utility/aabbtree.js +400 -0
  563. package/dist/src/utility/aabbtree.js.map +1 -0
  564. package/dist/src/utility/bounding_volume.js +29 -0
  565. package/dist/src/utility/bounding_volume.js.map +1 -0
  566. package/dist/src/utility/debug.js +28 -0
  567. package/dist/src/utility/debug.js.map +1 -0
  568. package/dist/src/utility/draco/decoder.js +116 -0
  569. package/dist/src/utility/draco/decoder.js.map +1 -0
  570. package/dist/src/utility/misc.js +105 -0
  571. package/dist/src/utility/misc.js.map +1 -0
  572. package/dist/src/utility/panorama.js +163 -0
  573. package/dist/src/utility/panorama.js.map +1 -0
  574. package/dist/src/utility/pmrem.js +354 -0
  575. package/dist/src/utility/pmrem.js.map +1 -0
  576. package/dist/src/utility/rendermipmap.js +115 -0
  577. package/dist/src/utility/rendermipmap.js.map +1 -0
  578. package/dist/src/utility/serialization/json.js +402 -0
  579. package/dist/src/utility/serialization/json.js.map +1 -0
  580. package/dist/src/utility/serialization/manager.js +623 -0
  581. package/dist/src/utility/serialization/manager.js.map +1 -0
  582. package/dist/src/utility/serialization/scene/animation.js +248 -0
  583. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  584. package/dist/src/utility/serialization/scene/batch.js +59 -0
  585. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  586. package/dist/src/utility/serialization/scene/camera.js +790 -0
  587. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  588. package/dist/src/utility/serialization/scene/common.js +222 -0
  589. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  590. package/dist/src/utility/serialization/scene/light.js +575 -0
  591. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  592. package/dist/src/utility/serialization/scene/material.js +1111 -0
  593. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  594. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  595. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  596. package/dist/src/utility/serialization/scene/misc.js +39 -0
  597. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  598. package/dist/src/utility/serialization/scene/node.js +451 -0
  599. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  600. package/dist/src/utility/serialization/scene/particle.js +425 -0
  601. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  602. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  603. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  604. package/dist/src/utility/serialization/scene/scene.js +704 -0
  605. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  606. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  607. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  608. package/dist/src/utility/serialization/scene/water.js +465 -0
  609. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  610. package/dist/src/utility/shprojector.js +297 -0
  611. package/dist/src/utility/shprojector.js.map +1 -0
  612. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  613. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  614. package/dist/src/utility/textures/gradientnoise.js +62 -0
  615. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  616. package/dist/src/utility/textures/randomnoise.js +41 -0
  617. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  618. package/dist/src/values.js +162 -0
  619. package/dist/src/values.js.map +1 -0
  620. package/dist/utility/aabbtree.js +15 -5
  621. package/dist/utility/aabbtree.js.map +1 -1
  622. package/dist/utility/blueprint/common/constants.js +851 -0
  623. package/dist/utility/blueprint/common/constants.js.map +1 -0
  624. package/dist/utility/blueprint/common/math.js +2045 -0
  625. package/dist/utility/blueprint/common/math.js.map +1 -0
  626. package/dist/utility/blueprint/common.js +7 -0
  627. package/dist/utility/blueprint/common.js.map +1 -0
  628. package/dist/utility/blueprint/material/common.js +7 -0
  629. package/dist/utility/blueprint/material/common.js.map +1 -0
  630. package/dist/utility/blueprint/material/func.js +521 -0
  631. package/dist/utility/blueprint/material/func.js.map +1 -0
  632. package/dist/utility/blueprint/material/inputs.js +1659 -0
  633. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  634. package/dist/utility/blueprint/material/ir.js +1311 -0
  635. package/dist/utility/blueprint/material/ir.js.map +1 -0
  636. package/dist/utility/blueprint/material/pbr.js +362 -0
  637. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  638. package/dist/utility/blueprint/material/texture.js +1099 -0
  639. package/dist/utility/blueprint/material/texture.js.map +1 -0
  640. package/dist/utility/blueprint/node.js +187 -0
  641. package/dist/utility/blueprint/node.js.map +1 -0
  642. package/dist/utility/bounding_volume.js +0 -1
  643. package/dist/utility/bounding_volume.js.map +1 -1
  644. package/dist/utility/debug.js +26 -0
  645. package/dist/utility/debug.js.map +1 -0
  646. package/dist/utility/draco/decoder.js +1 -1
  647. package/dist/utility/draco/decoder.js.map +1 -1
  648. package/dist/utility/misc.js +18 -6
  649. package/dist/utility/misc.js.map +1 -1
  650. package/dist/utility/panorama.js +8 -6
  651. package/dist/utility/panorama.js.map +1 -1
  652. package/dist/utility/pmrem.js +30 -18
  653. package/dist/utility/pmrem.js.map +1 -1
  654. package/dist/utility/rendermipmap.js +116 -0
  655. package/dist/utility/rendermipmap.js.map +1 -0
  656. package/dist/utility/serialization/blueprint/constants.js +255 -0
  657. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  658. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  660. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  662. package/dist/utility/serialization/json.js +402 -0
  663. package/dist/utility/serialization/json.js.map +1 -0
  664. package/dist/utility/serialization/manager.js +1176 -0
  665. package/dist/utility/serialization/manager.js.map +1 -0
  666. package/dist/utility/serialization/scene/animation.js +699 -0
  667. package/dist/utility/serialization/scene/animation.js.map +1 -0
  668. package/dist/utility/serialization/scene/batch.js +53 -0
  669. package/dist/utility/serialization/scene/batch.js.map +1 -0
  670. package/dist/utility/serialization/scene/camera.js +808 -0
  671. package/dist/utility/serialization/scene/camera.js.map +1 -0
  672. package/dist/utility/serialization/scene/common.js +224 -0
  673. package/dist/utility/serialization/scene/common.js.map +1 -0
  674. package/dist/utility/serialization/scene/light.js +589 -0
  675. package/dist/utility/serialization/scene/light.js.map +1 -0
  676. package/dist/utility/serialization/scene/material.js +942 -0
  677. package/dist/utility/serialization/scene/material.js.map +1 -0
  678. package/dist/utility/serialization/scene/mesh.js +374 -0
  679. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  680. package/dist/utility/serialization/scene/misc.js +39 -0
  681. package/dist/utility/serialization/scene/misc.js.map +1 -0
  682. package/dist/utility/serialization/scene/node.js +391 -0
  683. package/dist/utility/serialization/scene/node.js.map +1 -0
  684. package/dist/utility/serialization/scene/particle.js +425 -0
  685. package/dist/utility/serialization/scene/particle.js.map +1 -0
  686. package/dist/utility/serialization/scene/primitive.js +582 -0
  687. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  688. package/dist/utility/serialization/scene/scene.js +763 -0
  689. package/dist/utility/serialization/scene/scene.js.map +1 -0
  690. package/dist/utility/serialization/scene/terrain.js +495 -0
  691. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  692. package/dist/utility/serialization/scene/water.js +465 -0
  693. package/dist/utility/serialization/scene/water.js.map +1 -0
  694. package/dist/utility/shprojector.js +313 -0
  695. package/dist/utility/shprojector.js.map +1 -0
  696. package/dist/utility/textures/ggxlut.js +4 -5
  697. package/dist/utility/textures/ggxlut.js.map +1 -1
  698. package/dist/utility/textures/gradientnoise.js +2 -1
  699. package/dist/utility/textures/gradientnoise.js.map +1 -1
  700. package/dist/utility/textures/randomnoise.js +1 -0
  701. package/dist/utility/textures/randomnoise.js.map +1 -1
  702. package/dist/values.js +91 -4
  703. package/dist/values.js.map +1 -1
  704. package/package.json +29 -15
  705. package/dist/app.js.map +0 -1
  706. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  707. package/dist/input/inputmgr.js.map +0 -1
  708. package/dist/material/mixins/ggxlut.js.map +0 -1
  709. package/dist/posteffect/water.js +0 -508
  710. package/dist/posteffect/water.js.map +0 -1
  711. package/dist/render/oit.js +0 -16
  712. package/dist/render/oit.js.map +0 -1
  713. package/dist/render/scatteringlut.js +0 -634
  714. package/dist/render/scatteringlut.js.map +0 -1
  715. package/dist/render/watermesh.js +0 -193
  716. package/dist/render/watermesh.js.map +0 -1
  717. package/dist/render/wavegenerator.js +0 -8
  718. package/dist/render/wavegenerator.js.map +0 -1
  719. package/dist/scene/xform.js +0 -247
  720. package/dist/scene/xform.js.map +0 -1
  721. package/dist/utility/shprojection.js +0 -442
  722. package/dist/utility/shprojection.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"lightpass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"lightpass.js","sources":["../../src/render/lightpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { MaterialVaryingFlags, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_LIGHT } from '../values';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { RenderItemListBundle, RenderQueue } from './render_queue';\r\nimport type { PunctualLight } from '../scene/light';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { PostEffectLayer } from '../posteffect/posteffect';\r\n\r\n/**\r\n * Forward render pass\r\n * @internal\r\n */\r\nexport class LightPass extends RenderPass {\r\n /** @internal */\r\n protected _shadowMapHash: string;\r\n /** @internal */\r\n protected _transmission: boolean;\r\n /**\r\n * Creates an instance of ForwardRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_LIGHT);\r\n this._shadowMapHash = null;\r\n this._clearColor = Vector4.zero();\r\n }\r\n /** @internal */\r\n get transmission(): boolean {\r\n return this._transmission;\r\n }\r\n set transmission(val: boolean) {\r\n this._transmission = val;\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${this._shadowMapHash}:${ctx.oit?.calculateHash() ?? ''}:${ctx.env.getHash(ctx)}:${\r\n ctx.materialFlags\r\n }:${ctx.linearDepthTexture?.uid ?? 0}:${ctx.sceneColorTexture?.uid ?? 0}:${ctx.HiZTexture?.uid ?? 0}`;\r\n }\r\n /** @internal */\r\n protected renderLightPass(\r\n ctx: DrawContext,\r\n itemList: RenderItemListBundle,\r\n lights: PunctualLight[],\r\n flags: any\r\n ) {\r\n const baseLightPass = !ctx.lightBlending;\r\n ctx.drawEnvLight =\r\n baseLightPass &&\r\n ctx.env.light.type !== 'none' &&\r\n (ctx.env.light.envLight.hasRadiance() || ctx.env.light.envLight.hasIrradiance());\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n if (!flags.cameraSet[ctx.renderPassHash]) {\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, !!ctx.device.getFramebuffer());\r\n flags.cameraSet[ctx.renderPassHash] = 1;\r\n }\r\n if (ctx.currentShadowLight) {\r\n ShaderHelper.setLightUniformsShadow(bindGroup, ctx, lights[0]);\r\n } else {\r\n if (!flags.lightSet[ctx.renderPassHash]) {\r\n ShaderHelper.setLightUniforms(\r\n bindGroup,\r\n ctx,\r\n ctx.clusteredLight.clusterParam,\r\n ctx.clusteredLight.countParam,\r\n ctx.clusteredLight.lightBuffer,\r\n ctx.clusteredLight.lightIndexTexture\r\n );\r\n flags.lightSet[ctx.renderPassHash] = 1;\r\n }\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.APPLY_FOG && !flags.fogSet[ctx.renderPassHash]) {\r\n ShaderHelper.setFogUniforms(\r\n bindGroup,\r\n ctx.env.sky.skyType === 'scatter' ? 1 : 0,\r\n ctx.env.sky.mappedFogType,\r\n baseLightPass ? 0 : 1,\r\n ctx.env.sky.atmosphereParams,\r\n ctx.env.sky.heightFogParams,\r\n ctx.env.sky.getAerialPerspectiveLUT(ctx),\r\n ctx.env.sky.getSkyDistantLightLUT(ctx)\r\n );\r\n flags.fogSet[ctx.renderPassHash] = 1;\r\n }\r\n ctx.device.setBindGroup(0, bindGroup);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const lit of itemList.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n if (!ctx.lightBlending) {\r\n for (const unlit of itemList.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n ctx.fogFlags = 0;\r\n ctx.renderPassHash = null;\r\n ctx.env = ctx.scene.env;\r\n ctx.drawEnvLight = false;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n const ssr = !!(ctx.materialFlags & MaterialVaryingFlags.SSR_STORE_ROUGHNESS);\r\n const tmpFramebuffer = ssr\r\n ? ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n ctx.device.getDrawingBufferWidth(),\r\n ctx.device.getDrawingBufferHeight(),\r\n ctx.device.getFramebuffer().getColorAttachments()[0],\r\n ctx.device.getFramebuffer().getDepthAttachment()\r\n )\r\n : null;\r\n const oit =\r\n renderQueue.drawTransparent &&\r\n ctx.primaryCamera.oit &&\r\n ctx.primaryCamera.oit.supportDevice(ctx.device.type)\r\n ? ctx.primaryCamera.oit\r\n : null;\r\n if (!oit && renderQueue.drawTransparent) {\r\n renderQueue.sortTransparentItems(ctx.primaryCamera.getWorldPosition());\r\n }\r\n const flags: any = {\r\n lightSet: {},\r\n cameraSet: {},\r\n fogSet: {}\r\n };\r\n const items = renderQueue.itemList;\r\n const lists = this._transmission\r\n ? [items?.transmission, items?.transmission_trans, items?.transparent]\r\n : [items?.opaque, items?.transparent];\r\n const transparentPass = lists.length - 1;\r\n for (let i = 0; i < lists.length; i++) {\r\n if (lists[i]) {\r\n ctx.queue = i === 0 ? QUEUE_OPAQUE : QUEUE_TRANSPARENT;\r\n ctx.oit = i === 0 || !items ? null : oit;\r\n if ((ctx.queue === QUEUE_TRANSPARENT || this._transmission) && ctx.scene.env.sky.fogPresents) {\r\n ctx.materialFlags |= MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n const numOitPasses = ctx.oit ? ctx.oit.begin(ctx) : 1;\r\n for (let p = 0; p < numOitPasses; p++) {\r\n if (ctx.oit) {\r\n if (!ctx.oit.beginPass(ctx, p)) {\r\n continue;\r\n }\r\n }\r\n let lightIndex = 0;\r\n if (ctx.shadowMapInfo) {\r\n for (const k of ctx.shadowMapInfo.keys()) {\r\n ctx.currentShadowLight = k;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = ctx.shadowMapInfo.get(k).shaderHash;\r\n this.renderLightPass(ctx, lists[i], [k], flags);\r\n lightIndex++;\r\n }\r\n }\r\n if (lightIndex === 0 || renderQueue.unshadowedLights.length > 0) {\r\n ctx.currentShadowLight = null;\r\n ctx.lightBlending = lightIndex > 0;\r\n this._shadowMapHash = '';\r\n if (ctx.lightBlending && tmpFramebuffer) {\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n this.renderLightPass(ctx, lists[i], renderQueue.unshadowedLights, flags);\r\n if (ctx.lightBlending && tmpFramebuffer) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSR_STORE_ROUGHNESS;\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.endPass(ctx, p);\r\n }\r\n }\r\n if (ctx.oit) {\r\n ctx.oit.end(ctx);\r\n }\r\n ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;\r\n }\r\n if (i === 0 && !ctx.sceneColorTexture) {\r\n if (tmpFramebuffer) {\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setFramebuffer(tmpFramebuffer);\r\n }\r\n ctx.env.sky.skyWorldMatrix = ctx.scene.rootNode.worldMatrix;\r\n ctx.env.sky.renderSky(ctx);\r\n if (ctx.env.sky.fogPresents) {\r\n ctx.env.sky.renderFog(ctx.camera);\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.popDeviceStates();\r\n }\r\n }\r\n if (!renderQueue.needSceneColor() || ctx.sceneColorTexture) {\r\n if (i === 0 || i === transparentPass) {\r\n ctx.compositor?.drawPostEffects(\r\n ctx,\r\n i === 0 ? PostEffectLayer.opaque : PostEffectLayer.transparent,\r\n ctx.linearDepthTexture\r\n );\r\n }\r\n }\r\n }\r\n if (tmpFramebuffer) {\r\n ctx.device.pool.releaseFrameBuffer(tmpFramebuffer);\r\n }\r\n }\r\n}\r\n"],"names":["LightPass","RenderPass","RENDER_PASS_TYPE_LIGHT","_shadowMapHash","_clearColor","Vector4","zero","transmission","_transmission","val","_getGlobalBindGroupHash","ctx","oit","calculateHash","env","getHash","materialFlags","linearDepthTexture","uid","sceneColorTexture","HiZTexture","renderLightPass","itemList","lights","flags","baseLightPass","lightBlending","drawEnvLight","light","type","envLight","hasRadiance","hasIrradiance","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","cameraSet","ShaderHelper","setCameraUniforms","device","getFramebuffer","currentShadowLight","setLightUniformsShadow","lightSet","setLightUniforms","clusteredLight","clusterParam","countParam","lightBuffer","lightIndexTexture","MaterialVaryingFlags","APPLY_FOG","fogSet","setFogUniforms","sky","skyType","mappedFogType","atmosphereParams","heightFogParams","getAerialPerspectiveLUT","getSkyDistantLightLUT","setBindGroup","reverseWinding","camera","worldMatrixDet","lit","drawItemList","unlit","renderItems","renderQueue","fogFlags","scene","flip","isAutoFlip","ssr","SSR_STORE_ROUGHNESS","tmpFramebuffer","pool","fetchTemporalFramebuffer","getDrawingBufferWidth","getDrawingBufferHeight","getColorAttachments","getDepthAttachment","drawTransparent","primaryCamera","supportDevice","sortTransparentItems","getWorldPosition","items","lists","transmission_trans","transparent","opaque","transparentPass","length","i","queue","QUEUE_OPAQUE","QUEUE_TRANSPARENT","fogPresents","numOitPasses","begin","p","beginPass","lightIndex","shadowMapInfo","k","keys","get","shaderHash","unshadowedLights","pushDeviceStates","setFramebuffer","popDeviceStates","endPass","end","skyWorldMatrix","rootNode","worldMatrix","renderSky","renderFog","needSceneColor","compositor","drawPostEffects","PostEffectLayer","releaseFrameBuffer"],"mappings":"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"}
@@ -11,13 +11,13 @@ import { ShaderHelper } from '../material/shader/helper.js';
11
11
  */ constructor(){
12
12
  super(RENDER_PASS_TYPE_OBJECT_COLOR);
13
13
  }
14
- /** @internal */ _getGlobalBindGroupHash(ctx) {
15
- return 'ocp';
14
+ /** @internal */ _getGlobalBindGroupHash(_ctx) {
15
+ return '';
16
16
  }
17
17
  /** @internal */ renderItems(ctx, renderQueue) {
18
18
  const items = renderQueue.itemList;
19
19
  if (items) {
20
- ctx.applyFog = null;
20
+ ctx.fogFlags = 0;
21
21
  ctx.drawEnvLight = false;
22
22
  ctx.env = null;
23
23
  ctx.picking = true;
@@ -25,7 +25,7 @@ import { ShaderHelper } from '../material/shader/helper.js';
25
25
  ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);
26
26
  const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
27
27
  ctx.device.setBindGroup(0, bindGroup);
28
- ShaderHelper.setCameraUniforms(bindGroup, ctx.camera, ctx.flip, true);
28
+ ShaderHelper.setCameraUniforms(bindGroup, ctx, true);
29
29
  const reverseWinding = ctx.camera.worldMatrixDet < 0;
30
30
  for (const list of [
31
31
  items.opaque,
@@ -1 +1 @@
1
- {"version":3,"file":"objectcolorpass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"objectcolorpass.js","sources":["../../src/render/objectcolorpass.ts"],"sourcesContent":["import { RenderPass } from './renderpass';\r\nimport { RENDER_PASS_TYPE_OBJECT_COLOR } from '../values';\r\nimport type { RenderQueue } from './render_queue';\r\nimport type { DrawContext } from './drawable';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\n/**\r\n * Object color render pass\r\n * @internal\r\n */\r\nexport class ObjectColorPass extends RenderPass {\r\n /**\r\n * Creates an instance of ForwardRenderPass\r\n */\r\n constructor() {\r\n super(RENDER_PASS_TYPE_OBJECT_COLOR);\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(_ctx: DrawContext) {\r\n return '';\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, renderQueue: RenderQueue) {\r\n const items = renderQueue.itemList;\r\n if (items) {\r\n ctx.fogFlags = 0;\r\n ctx.drawEnvLight = false;\r\n ctx.env = null;\r\n ctx.picking = true;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, true);\r\n const reverseWinding = ctx.camera.worldMatrixDet < 0;\r\n for (const list of [items.opaque, items.transmission, items.transparent, items.transmission_trans]) {\r\n if (list) {\r\n for (const lit of list.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of list.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n }\r\n ctx.picking = false;\r\n }\r\n }\r\n}\r\n"],"names":["ObjectColorPass","RenderPass","RENDER_PASS_TYPE_OBJECT_COLOR","_getGlobalBindGroupHash","_ctx","renderItems","ctx","renderQueue","items","itemList","fogFlags","drawEnvLight","env","picking","flip","isAutoFlip","renderPassHash","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setCameraUniforms","reverseWinding","camera","worldMatrixDet","list","opaque","transmission","transparent","transmission_trans","lit","drawItemList","unlit"],"mappings":";;;;AAMA;;;IAIO,MAAMA,eAAwBC,SAAAA,UAAAA,CAAAA;AACnC;;AAEC,MACD,WAAc,EAAA;AACZ,QAAA,KAAK,CAACC,6BAAAA,CAAAA;AACR;AACA,qBACUC,uBAAwBC,CAAAA,IAAiB,EAAE;QACnD,OAAO,EAAA;AACT;AACA,qBACA,WAAUC,CAAYC,GAAgB,EAAEC,WAAwB,EAAE;QAChE,MAAMC,KAAAA,GAAQD,YAAYE,QAAQ;AAClC,QAAA,IAAID,KAAO,EAAA;AACTF,YAAAA,GAAAA,CAAII,QAAQ,GAAG,CAAA;AACfJ,YAAAA,GAAAA,CAAIK,YAAY,GAAG,KAAA;AACnBL,YAAAA,GAAAA,CAAIM,GAAG,GAAG,IAAA;AACVN,YAAAA,GAAAA,CAAIO,OAAO,GAAG,IAAA;AACdP,YAAAA,GAAAA,CAAIQ,IAAI,GAAG,IAAI,CAACC,UAAU,CAACT,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIU,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACX,GAAAA,CAAAA;AACjD,YAAA,MAAMY,SAAYZ,GAAAA,GAAAA,CAAIa,wBAAwB,CAACC,kBAAkB,CAACd,GAAAA,CAAAA;AAClEA,YAAAA,GAAAA,CAAIe,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;YAC3BK,YAAaC,CAAAA,iBAAiB,CAACN,SAAAA,EAAWZ,GAAK,EAAA,IAAA,CAAA;AAC/C,YAAA,MAAMmB,cAAiBnB,GAAAA,GAAAA,CAAIoB,MAAM,CAACC,cAAc,GAAG,CAAA;AACnD,YAAA,KAAK,MAAMC,IAAQ,IAAA;AAACpB,gBAAAA,KAAAA,CAAMqB,MAAM;AAAErB,gBAAAA,KAAAA,CAAMsB,YAAY;AAAEtB,gBAAAA,KAAAA,CAAMuB,WAAW;AAAEvB,gBAAAA,KAAAA,CAAMwB;aAAmB,CAAE;AAClG,gBAAA,IAAIJ,IAAM,EAAA;AACR,oBAAA,KAAK,MAAMK,GAAAA,IAAOL,IAAKK,CAAAA,GAAG,CAAE;AAC1B,wBAAA,IAAI,CAACC,YAAY,CAACD,GAAAA,EAAK3B,GAAKmB,EAAAA,cAAAA,CAAAA;AAC9B;AACA,oBAAA,KAAK,MAAMU,KAAAA,IAASP,IAAKO,CAAAA,KAAK,CAAE;AAC9B,wBAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAO7B,GAAKmB,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;AACAnB,YAAAA,GAAAA,CAAIO,OAAO,GAAG,KAAA;AAChB;AACF;AACF;;;;"}
@@ -1,24 +1,46 @@
1
- import { PBPrimitiveType } from '@zephyr3d/device';
2
- import { Application } from '../app.js';
1
+ import { makeObservable, Disposable, releaseObject, retainObject } from '@zephyr3d/base';
2
+ import { PBPrimitiveType, matchVertexBuffer } from '@zephyr3d/device';
3
+ import { RenderBundleWrapper } from './renderbundle_wrapper.js';
4
+ import { getDevice } from '../app/api.js';
3
5
 
4
6
  /**
5
- * Primitive contains only the vertex and index data of a mesh
7
+ * Holds vertex/index data and draw parameters for a mesh geometry.
8
+ *
9
+ * Responsibilities:
10
+ * - Owns one or more vertex buffers and an optional index buffer.
11
+ * - Defines primitive topology, draw range (start/count), and vertex layout.
12
+ * - Provides utilities to create/set/remove buffers and query vertex/face counts.
13
+ * - Tracks changes via a change tag and notifies render-bundle caching.
14
+ * - Optionally stores a bounding volume and supports ray intersection tests.
15
+ *
16
+ * Ownership and lifecycle:
17
+ * - When adding buffers (`setVertexBuffer`, `setIndexBuffer`), the primitive retains them.
18
+ * - When removing/overwriting buffers, the primitive releases the previous buffers.
19
+ * - Disposing the primitive also disposes the internal `VertexLayout` and releases retained buffers.
20
+ *
6
21
  * @public
7
- */ class Primitive {
8
- /** @internal */ _vertexLayout;
9
- /** @internal */ _vertexLayoutOptions;
10
- /** @internal */ _primitiveType;
11
- /** @internal */ _indexStart;
12
- /** @internal */ _indexCount;
13
- /** @internal */ _defaultIndexCount;
14
- /** @internal */ _vertexLayoutDirty;
15
- /** @internal */ static _nextId = 0;
16
- /** @internal */ _id;
17
- /** @internal */ _bbox;
18
- /** @internal */ _bboxChangeCallback;
22
+ */ class Primitive extends makeObservable(Disposable)() {
23
+ /** @internal Current vertex layout object (created lazily from options). */ _vertexLayout;
24
+ /** @internal Mutable options used to build the vertex layout. */ _vertexLayoutOptions;
25
+ /** @internal Primitive topology (e.g., 'triangle-list', 'line-strip'). */ _primitiveType;
26
+ /** @internal First index/vertex to draw. */ _indexStart;
27
+ /** @internal Number of indices/vertices to draw (computed lazily if null). */ _indexCount;
28
+ /** @internal Cached default index count (derived when needed). */ _defaultIndexCount;
29
+ /** @internal Marks layout dirty when buffers/topology change. */ _vertexLayoutDirty;
30
+ /** @internal Monotonic runtime id. */ static _nextId = 0;
31
+ /** @internal Unique runtime id for the instance. */ _id;
32
+ /** @internal Optional bounding volume for culling/raycast. */ _bbox;
33
+ /** @internal Change tag increments when draw-affecting state changes. */ _changeTag;
19
34
  /**
20
- * Creates an instance of a primitive
35
+ * Create an empty primitive.
36
+ *
37
+ * Defaults:
38
+ * - Primitive type: 'triangle-list'
39
+ * - `indexStart = 0`, `indexCount = null` (auto-computed)
40
+ * - No vertex/index buffers attached
41
+ * - No bounding volume
21
42
  */ constructor(){
43
+ super();
22
44
  this._vertexLayout = null;
23
45
  this._vertexLayoutOptions = {
24
46
  vertexBuffers: []
@@ -29,61 +51,106 @@ import { Application } from '../app.js';
29
51
  this._defaultIndexCount = 0;
30
52
  this._vertexLayoutDirty = false;
31
53
  this._id = ++Primitive._nextId;
54
+ this._changeTag = 0;
32
55
  this._bbox = null;
33
- this._bboxChangeCallback = [];
34
56
  }
35
57
  /**
36
- * Unique identifier of the primitive
58
+ * Unique runtime identifier of this primitive.
59
+ *
60
+ * @returns The numeric instance id.
37
61
  * @internal
38
62
  */ get id() {
39
63
  return this._id;
40
64
  }
41
65
  /**
42
- * Adds a callback function that will be called whenever the bounding box of the primitive changes.
43
- * @param cb - The callback function
66
+ * Change tag that increments whenever draw-affecting state changes.
67
+ * Useful for invalidating cached render bundles.
44
68
  *
45
- * @internal
46
- */ addBoundingboxChangeCallback(cb) {
47
- cb && this._bboxChangeCallback.push(cb);
69
+ * @returns The current change tag value.
70
+ */ get changeTag() {
71
+ return this._changeTag;
72
+ }
73
+ /**
74
+ * Create a shallow clone: copies topology, draw range, and buffers.
75
+ *
76
+ * Note: Buffers are re-retained on the new primitive.
77
+ *
78
+ * @returns A cloned Primitive instance.
79
+ */ clone() {
80
+ const other = new Primitive();
81
+ other.copyFrom(this);
82
+ return other;
48
83
  }
49
84
  /**
50
- * Removes a callback function for bounding box changing
51
- * @param cb - The callback function to be removed
52
- */ removeBoundingboxChangeCallback(cb) {
53
- const index = this._bboxChangeCallback.indexOf(cb);
54
- if (index >= 0) {
55
- this._bboxChangeCallback.splice(index, 1);
85
+ * Copy from another primitive.
86
+ *
87
+ * Copies:
88
+ * - All vertex buffers and the index buffer
89
+ * - Primitive type, index start, index count
90
+ *
91
+ * @param other - The source primitive to copy from.
92
+ * @returns void
93
+ */ copyFrom(other) {
94
+ for (const info of other._vertexLayoutOptions.vertexBuffers){
95
+ this.setVertexBuffer(info.buffer, info.stepMode);
56
96
  }
97
+ this.setIndexBuffer(other._vertexLayoutOptions.indexBuffer);
98
+ this.primitiveType = other.primitiveType;
99
+ this.indexStart = other.indexStart;
100
+ this.indexCount = other.indexCount;
57
101
  }
58
- /** Primitive type */ get primitiveType() {
102
+ /**
103
+ * Primitive topology.
104
+ */ get primitiveType() {
59
105
  return this._primitiveType;
60
106
  }
61
107
  set primitiveType(type) {
62
- this._primitiveType = type;
108
+ if (type !== this._primitiveType) {
109
+ this._primitiveType = type;
110
+ this._changeTag++;
111
+ RenderBundleWrapper.primitiveChanged(this);
112
+ }
63
113
  }
64
- /** Start index for drawing */ get indexStart() {
114
+ /**
115
+ * Starting index/vertex for drawing.
116
+ */ get indexStart() {
65
117
  return this._indexStart;
66
118
  }
67
119
  set indexStart(val) {
68
- this._indexStart = val;
120
+ if (val !== this._indexStart) {
121
+ this._indexStart = val;
122
+ this._changeTag++;
123
+ RenderBundleWrapper.primitiveChanged(this);
124
+ }
69
125
  }
70
- /** The number of the indices or vertices to be drawn */ get indexCount() {
126
+ /**
127
+ * Number of indices/vertices to draw.
128
+ */ get indexCount() {
71
129
  this._indexCount = this._indexCount ?? this.calcDefaultIndexCount();
72
130
  return this._indexCount;
73
131
  }
74
132
  set indexCount(val) {
75
- this._indexCount = val;
133
+ if (val !== this._indexCount) {
134
+ this._indexCount = val;
135
+ this._changeTag++;
136
+ RenderBundleWrapper.primitiveChanged(this);
137
+ }
76
138
  }
77
139
  /**
78
- * Query total vertex count
79
- * @returns Total vertex count, 0 if no position vertex buffer set
140
+ * Query total vertex count from the position buffer, if present.
141
+ *
142
+ * @returns Total vertex count; 0 if no position buffer is set.
80
143
  */ getNumVertices() {
81
144
  const posInfo = this.getVertexBufferInfo('position');
82
145
  return posInfo?.buffer ? posInfo.buffer.byteLength / posInfo.stride >> 0 : 0;
83
146
  }
84
147
  /**
85
- * Query total face count
86
- * @returns Total face count
148
+ * Query total face/segment count based on topology and buffer size.
149
+ *
150
+ * - For indexed geometry: derived from index buffer.
151
+ * - For non-indexed: derived from position vertex count.
152
+ *
153
+ * @returns Total primitive count for the current topology.
87
154
  */ getNumFaces() {
88
155
  const ib = this.getIndexBuffer();
89
156
  const count = ib ? ib.byteLength >> (ib.indexType.primitiveType === PBPrimitiveType.U16 ? 1 : 2) : this.getNumVertices();
@@ -105,63 +172,91 @@ import { Application } from '../app.js';
105
172
  }
106
173
  }
107
174
  /**
108
- * Removes a vertex buffer from the primitive
109
- * @param buffer - The vertex buffer to be removed
110
- */ removeVertexBuffer(buffer) {
111
- for(let loc = 0; loc < this._vertexLayoutOptions.vertexBuffers.length; loc++){
112
- const info = this._vertexLayoutOptions.vertexBuffers[loc];
113
- if (info?.buffer === buffer) {
114
- info[loc] = null;
175
+ * Remove all vertex buffers that match a given semantic.
176
+ *
177
+ * This releases retained buffers, marks the layout dirty, and invalidates bundles.
178
+ *
179
+ * @param semantic - The vertex semantic to remove (e.g., 'position', 'normal').
180
+ * @returns void
181
+ */ removeVertexBuffer(semantic) {
182
+ for(let i = this._vertexLayoutOptions.vertexBuffers.length - 1; i >= 0; i--){
183
+ const info = this._vertexLayoutOptions.vertexBuffers[i];
184
+ if (matchVertexBuffer(info.buffer, semantic)) {
185
+ releaseObject(info.buffer);
186
+ this._vertexLayoutOptions.vertexBuffers.splice(i, 1);
115
187
  this._vertexLayoutDirty = true;
116
188
  }
117
189
  }
190
+ if (this._vertexLayoutDirty) {
191
+ this._changeTag++;
192
+ RenderBundleWrapper.primitiveChanged(this);
193
+ }
118
194
  }
119
195
  /**
120
- * Gets the vertex buffer by a given semantic
121
- * @param semantic - The semantic of the vertex buffer
122
- * @returns The vertex buffer which semantic matches the given value
196
+ * Get the vertex buffer that matches a given semantic.
197
+ *
198
+ * @param semantic - The vertex semantic to look up.
199
+ * @returns The matching vertex buffer, or `null` if not found.
123
200
  */ getVertexBuffer(semantic) {
124
- this.checkVertexLayout();
125
- return this._vertexLayout.getVertexBuffer(semantic);
201
+ for (const info of this._vertexLayoutOptions.vertexBuffers){
202
+ if (info.buffer && matchVertexBuffer(info.buffer, semantic)) {
203
+ return info.buffer;
204
+ }
205
+ }
206
+ return null;
126
207
  }
127
208
  /**
128
- * Gets the vertex buffer information by a given semantic
129
- * @param semantic - The semantic of the vertex buffer
130
- * @returns The vertex buffer information of the given semantic
209
+ * Get vertex buffer information for a given semantic.
210
+ *
211
+ * @param semantic - The vertex semantic to look up.
212
+ * @returns The `VertexBufferInfo`, or `null` if not found.
131
213
  */ getVertexBufferInfo(semantic) {
132
214
  this.checkVertexLayout();
133
- return this._vertexLayout.getVertexBufferInfo(semantic);
215
+ return this._vertexLayout?.getVertexBufferInfo(semantic) ?? null;
134
216
  }
135
217
  /**
136
- * Creates a vertex buffer from the given options and then adds it to the primitive
137
- * @param format - Vertex format for the vertex buffer
138
- * @param data - Contents of the vertex buffer
139
- * @param stepMode - Step mode of the vertex buffer
140
- * @returns The created vertex buffer
218
+ * Create a vertex buffer from data and add it to the primitive.
219
+ *
220
+ * - For interleaved layouts, pass an array of `VertexAttribFormat`.
221
+ * - For a single attribute, pass a single `VertexAttribFormat`.
222
+ *
223
+ * @param format - Vertex attribute format(s).
224
+ * @param data - Typed array with vertex data.
225
+ * @param stepMode - Optional step mode (e.g., 'vertex', 'instance').
226
+ * @returns The created `StructuredBuffer`.
141
227
  */ createAndSetVertexBuffer(format, data, stepMode) {
142
- const buffer = Application.instance.device.createVertexBuffer(format, data);
228
+ const device = getDevice();
229
+ const buffer = Array.isArray(format) ? device.createInterleavedVertexBuffer(format, data) : device.createVertexBuffer(format, data);
143
230
  return this.setVertexBuffer(buffer, stepMode);
144
231
  }
145
232
  /**
146
- * Adds a vertex buffer to the primitive
147
- * @param buffer - The vertex buffer to be added
148
- * @param stepMode - Step mode of the vertex buffer
149
- * @returns The added vertex buffer
233
+ * Add an existing vertex buffer to the primitive.
234
+ *
235
+ * Ownership note: The primitive retains the buffer; it will be released or disposed when replaced or on dispose.
236
+ *
237
+ * @param buffer - The vertex buffer to add.
238
+ * @param stepMode - Optional step mode for the buffer.
239
+ * @returns The same buffer.
150
240
  */ setVertexBuffer(buffer, stepMode) {
241
+ retainObject(buffer);
151
242
  this._vertexLayoutOptions.vertexBuffers.push({
152
243
  buffer,
153
244
  stepMode
154
245
  });
155
246
  this._vertexLayoutDirty = true;
247
+ this._changeTag++;
248
+ RenderBundleWrapper.primitiveChanged(this);
156
249
  return buffer;
157
250
  }
158
251
  /**
159
- * Creates an index buffer from the given options and then adds it to the prmitive
160
- * @param data - Contents of the index buffer
161
- * @param dynamic - true if the index buffer is dynamic
162
- * @returns The created index buffer
252
+ * Create an index buffer from data and set it on the primitive.
253
+ *
254
+ * @param data - Index data as Uint16Array or Uint32Array.
255
+ * @param dynamic - Whether the index buffer is dynamic (unmanaged).
256
+ * @returns The created `IndexBuffer`.
163
257
  */ createAndSetIndexBuffer(data, dynamic) {
164
- const buffer = Application.instance.device.createIndexBuffer(data, {
258
+ const device = getDevice();
259
+ const buffer = device.createIndexBuffer(data, {
165
260
  dynamic: !!dynamic,
166
261
  managed: !dynamic
167
262
  });
@@ -169,22 +264,34 @@ import { Application } from '../app.js';
169
264
  return buffer;
170
265
  }
171
266
  /**
172
- * Adds an index buffer to the primitive
173
- * @param buffer - The index buffer to be added
267
+ * Set or replace the index buffer.
268
+ *
269
+ * Ownership note: The primitive retains the buffer; previous buffer is released.
270
+ * Marks the vertex layout dirty and invalidates bundles.
271
+ *
272
+ * @param buffer - The index buffer to set (non-null).
273
+ * @returns void
174
274
  */ setIndexBuffer(buffer) {
175
275
  if (this._vertexLayoutOptions.indexBuffer !== buffer) {
276
+ retainObject(buffer);
277
+ releaseObject(this._vertexLayoutOptions.indexBuffer);
176
278
  this._vertexLayoutOptions.indexBuffer = buffer;
177
279
  this._vertexLayoutDirty = true;
280
+ this._changeTag++;
281
+ RenderBundleWrapper.primitiveChanged(this);
178
282
  }
179
283
  }
180
284
  /**
181
- * Gets the index buffer of the primitive
182
- * @returns The index buffer of the primitive
285
+ * Get the current index buffer.
286
+ *
287
+ * @returns The index buffer, or `undefined`/`null` if none set.
183
288
  */ getIndexBuffer() {
184
289
  return this._vertexLayoutOptions.indexBuffer;
185
290
  }
186
291
  /**
187
- * Draw the prmitive
292
+ * Issue a non-instanced draw for the current topology and range.
293
+ *
294
+ * Preconditions: A valid vertex layout and `indexCount > 0`.
188
295
  */ draw() {
189
296
  this.checkVertexLayout();
190
297
  if (this.indexCount > 0) {
@@ -192,8 +299,11 @@ import { Application } from '../app.js';
192
299
  }
193
300
  }
194
301
  /**
195
- * Draw multiple instances of the primitive
196
- * @param numInstances - How many instances of the primitive should be drawn
302
+ * Issue an instanced draw for the current topology and range.
303
+ *
304
+ * Preconditions: A valid vertex layout and `indexCount > 0`.
305
+ *
306
+ * @param numInstances - Number of instances to draw.
197
307
  */ drawInstanced(numInstances) {
198
308
  this.checkVertexLayout();
199
309
  if (this.indexCount > 0) {
@@ -201,24 +311,18 @@ import { Application } from '../app.js';
201
311
  }
202
312
  }
203
313
  /**
204
- * Disposes the primitive
205
- *
206
- * @remarks
207
- * The vertex buffers and index buffer will also be disposed.
208
- * To prevent specific vertex buffer or index buffer to be disposed,
209
- * call removeVertexBuffer() or setIndexBuffer(null) first.
210
- */ dispose() {
211
- if (this._vertexLayout) {
212
- const vertexBuffers = this._vertexLayout.vertexBuffers;
213
- for(const k in vertexBuffers){
214
- vertexBuffers[k]?.buffer?.dispose();
314
+ * Dispose this primitive and release associated GPU resources.
315
+ */ onDispose() {
316
+ super.onDispose();
317
+ this._vertexLayout?.dispose();
318
+ this._vertexLayout = null;
319
+ if (this._vertexLayoutOptions) {
320
+ releaseObject(this._vertexLayoutOptions.indexBuffer);
321
+ for (const info of this._vertexLayoutOptions.vertexBuffers){
322
+ releaseObject(info.buffer);
215
323
  }
216
- this._vertexLayout.indexBuffer?.dispose();
217
- this._vertexLayout.dispose();
218
- this._vertexLayout = null;
324
+ this._vertexLayoutOptions = null;
219
325
  }
220
- this._indexCount = null;
221
- this._indexStart = 0;
222
326
  }
223
327
  /*
224
328
  createAABBTree(): AABBTree {
@@ -229,26 +333,30 @@ import { Application } from '../app.js';
229
333
  return aabbtree;
230
334
  }
231
335
  */ /**
232
- * Gets the bounding volume of the primitive
233
- * @returns The bounding volume of the primitive, or null if no bounding volume set
336
+ * Get the bounding volume associated with this primitive.
337
+ *
338
+ * @returns The current bounding volume, or `null` if not set.
234
339
  */ getBoundingVolume() {
235
340
  return this._bbox;
236
341
  }
237
342
  /**
238
- * Sets the bounding volume of the primitive
239
- * @param bv - The bounding volume to be set
343
+ * Set or replace the bounding volume of this primitive.
344
+ *
345
+ * Triggers registered bounding-volume change callbacks.
346
+ *
347
+ * @param bv - The bounding volume to set.
348
+ * @returns void
240
349
  */ setBoundingVolume(bv) {
241
350
  if (bv !== this._bbox) {
242
351
  this._bbox = bv;
243
- for (const cb of this._bboxChangeCallback){
244
- cb();
245
- }
352
+ this.dispatchEvent('bv_changed');
246
353
  }
247
354
  }
248
355
  /**
249
- * Ray intersection test
250
- * @param ray - Ray object used to do intersection test with this object
251
- * @returns The distance from ray origin to the intersection point if ray intersects with this object, otherwise null
356
+ * Test intersection against the current axis-aligned bounding box (AABB).
357
+ *
358
+ * @param ray - Ray to test against the primitive's AABB (derived from its bounding volume).
359
+ * @returns The distance from ray origin to the intersection, or `null` if no hit or no AABB.
252
360
  */ raycast(ray) {
253
361
  const aabb = this.getBoundingVolume()?.toAABB();
254
362
  return aabb ? ray.bboxIntersectionTestEx(aabb) : null;
@@ -256,7 +364,8 @@ import { Application } from '../app.js';
256
364
  /** @internal */ checkVertexLayout() {
257
365
  if (this._vertexLayoutDirty) {
258
366
  this._vertexLayout?.dispose();
259
- this._vertexLayout = Application.instance.device.createVertexLayout(this._vertexLayoutOptions);
367
+ const device = getDevice();
368
+ this._vertexLayout = device.createVertexLayout(this._vertexLayoutOptions);
260
369
  this._vertexLayoutDirty = false;
261
370
  }
262
371
  }
@@ -1 +1 @@
1
- {"version":3,"file":"primitive.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"primitive.js","sources":["../../src/render/primitive.ts"],"sourcesContent":["import {\r\n Disposable,\r\n makeObservable,\r\n releaseObject,\r\n retainObject,\r\n type Clonable,\r\n type Ray,\r\n type TypedArray\r\n} from '@zephyr3d/base';\r\nimport {\r\n type VertexStepMode,\r\n type VertexLayout,\r\n type VertexLayoutOptions,\r\n type PrimitiveType,\r\n type StructuredBuffer,\r\n type IndexBuffer,\r\n type VertexSemantic,\r\n type VertexAttribFormat,\r\n type VertexBufferInfo,\r\n PBPrimitiveType,\r\n matchVertexBuffer\r\n} from '@zephyr3d/device';\r\nimport type { BoundingVolume } from '../utility/bounding_volume';\r\nimport { RenderBundleWrapper } from './renderbundle_wrapper';\r\nimport { getDevice } from '../app/api';\r\n\r\n/**\r\n * Holds vertex/index data and draw parameters for a mesh geometry.\r\n *\r\n * Responsibilities:\r\n * - Owns one or more vertex buffers and an optional index buffer.\r\n * - Defines primitive topology, draw range (start/count), and vertex layout.\r\n * - Provides utilities to create/set/remove buffers and query vertex/face counts.\r\n * - Tracks changes via a change tag and notifies render-bundle caching.\r\n * - Optionally stores a bounding volume and supports ray intersection tests.\r\n *\r\n * Ownership and lifecycle:\r\n * - When adding buffers (`setVertexBuffer`, `setIndexBuffer`), the primitive retains them.\r\n * - When removing/overwriting buffers, the primitive releases the previous buffers.\r\n * - Disposing the primitive also disposes the internal `VertexLayout` and releases retained buffers.\r\n *\r\n * @public\r\n */\r\nexport class Primitive\r\n extends makeObservable(Disposable)<{\r\n bv_changed: [];\r\n }>()\r\n implements Clonable<Primitive>\r\n{\r\n /** @internal Current vertex layout object (created lazily from options). */\r\n protected _vertexLayout: VertexLayout;\r\n /** @internal Mutable options used to build the vertex layout. */\r\n protected _vertexLayoutOptions: VertexLayoutOptions;\r\n /** @internal Primitive topology (e.g., 'triangle-list', 'line-strip'). */\r\n protected _primitiveType: PrimitiveType;\r\n /** @internal First index/vertex to draw. */\r\n protected _indexStart: number;\r\n /** @internal Number of indices/vertices to draw (computed lazily if null). */\r\n protected _indexCount: number;\r\n /** @internal Cached default index count (derived when needed). */\r\n protected _defaultIndexCount: number;\r\n /** @internal Marks layout dirty when buffers/topology change. */\r\n protected _vertexLayoutDirty: boolean;\r\n /** @internal Monotonic runtime id. */\r\n private static _nextId = 0;\r\n /** @internal Unique runtime id for the instance. */\r\n protected _id: number;\r\n /** @internal Optional bounding volume for culling/raycast. */\r\n protected _bbox: BoundingVolume;\r\n /** @internal Change tag increments when draw-affecting state changes. */\r\n private _changeTag: number;\r\n /**\r\n * Create an empty primitive.\r\n *\r\n * Defaults:\r\n * - Primitive type: 'triangle-list'\r\n * - `indexStart = 0`, `indexCount = null` (auto-computed)\r\n * - No vertex/index buffers attached\r\n * - No bounding volume\r\n */\r\n constructor() {\r\n super();\r\n this._vertexLayout = null;\r\n this._vertexLayoutOptions = { vertexBuffers: [] };\r\n this._primitiveType = 'triangle-list';\r\n this._indexStart = 0;\r\n this._indexCount = null;\r\n this._defaultIndexCount = 0;\r\n this._vertexLayoutDirty = false;\r\n this._id = ++Primitive._nextId;\r\n this._changeTag = 0;\r\n this._bbox = null;\r\n }\r\n /**\r\n * Unique runtime identifier of this primitive.\r\n *\r\n * @returns The numeric instance id.\r\n * @internal\r\n */\r\n get id(): number {\r\n return this._id;\r\n }\r\n /**\r\n * Change tag that increments whenever draw-affecting state changes.\r\n * Useful for invalidating cached render bundles.\r\n *\r\n * @returns The current change tag value.\r\n */\r\n get changeTag() {\r\n return this._changeTag;\r\n }\r\n /**\r\n * Create a shallow clone: copies topology, draw range, and buffers.\r\n *\r\n * Note: Buffers are re-retained on the new primitive.\r\n *\r\n * @returns A cloned Primitive instance.\r\n */\r\n clone(): Primitive {\r\n const other = new Primitive();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n /**\r\n * Copy from another primitive.\r\n *\r\n * Copies:\r\n * - All vertex buffers and the index buffer\r\n * - Primitive type, index start, index count\r\n *\r\n * @param other - The source primitive to copy from.\r\n * @returns void\r\n */\r\n copyFrom(other: this) {\r\n for (const info of other._vertexLayoutOptions.vertexBuffers) {\r\n this.setVertexBuffer(info.buffer, info.stepMode);\r\n }\r\n this.setIndexBuffer(other._vertexLayoutOptions.indexBuffer);\r\n this.primitiveType = other.primitiveType;\r\n this.indexStart = other.indexStart;\r\n this.indexCount = other.indexCount;\r\n }\r\n /**\r\n * Primitive topology.\r\n */\r\n get primitiveType() {\r\n return this._primitiveType;\r\n }\r\n set primitiveType(type) {\r\n if (type !== this._primitiveType) {\r\n this._primitiveType = type;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Starting index/vertex for drawing.\r\n */\r\n get indexStart() {\r\n return this._indexStart;\r\n }\r\n set indexStart(val) {\r\n if (val !== this._indexStart) {\r\n this._indexStart = val;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Number of indices/vertices to draw.\r\n */\r\n get indexCount() {\r\n this._indexCount = this._indexCount ?? this.calcDefaultIndexCount();\r\n return this._indexCount;\r\n }\r\n set indexCount(val) {\r\n if (val !== this._indexCount) {\r\n this._indexCount = val;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Query total vertex count from the position buffer, if present.\r\n *\r\n * @returns Total vertex count; 0 if no position buffer is set.\r\n */\r\n getNumVertices(): number {\r\n const posInfo = this.getVertexBufferInfo('position');\r\n return posInfo?.buffer ? (posInfo.buffer.byteLength / posInfo.stride) >> 0 : 0;\r\n }\r\n /**\r\n * Query total face/segment count based on topology and buffer size.\r\n *\r\n * - For indexed geometry: derived from index buffer.\r\n * - For non-indexed: derived from position vertex count.\r\n *\r\n * @returns Total primitive count for the current topology.\r\n */\r\n getNumFaces(): number {\r\n const ib = this.getIndexBuffer();\r\n const count = ib\r\n ? ib.byteLength >> (ib.indexType.primitiveType === PBPrimitiveType.U16 ? 1 : 2)\r\n : this.getNumVertices();\r\n switch (this.primitiveType) {\r\n case 'line-list':\r\n return count >> 1;\r\n case 'point-list':\r\n return count;\r\n case 'line-strip':\r\n return count - 1;\r\n case 'triangle-fan':\r\n return count - 2;\r\n case 'triangle-strip':\r\n return count - 2;\r\n case 'triangle-list':\r\n return (count / 3) >> 0;\r\n default:\r\n return 0;\r\n }\r\n }\r\n /**\r\n * Remove all vertex buffers that match a given semantic.\r\n *\r\n * This releases retained buffers, marks the layout dirty, and invalidates bundles.\r\n *\r\n * @param semantic - The vertex semantic to remove (e.g., 'position', 'normal').\r\n * @returns void\r\n */\r\n removeVertexBuffer(semantic: VertexSemantic): void {\r\n for (let i = this._vertexLayoutOptions.vertexBuffers.length - 1; i >= 0; i--) {\r\n const info = this._vertexLayoutOptions.vertexBuffers[i];\r\n if (matchVertexBuffer(info.buffer, semantic)) {\r\n releaseObject(info.buffer);\r\n this._vertexLayoutOptions.vertexBuffers.splice(i, 1);\r\n this._vertexLayoutDirty = true;\r\n }\r\n }\r\n if (this._vertexLayoutDirty) {\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Get the vertex buffer that matches a given semantic.\r\n *\r\n * @param semantic - The vertex semantic to look up.\r\n * @returns The matching vertex buffer, or `null` if not found.\r\n */\r\n getVertexBuffer(semantic: VertexSemantic): StructuredBuffer {\r\n for (const info of this._vertexLayoutOptions.vertexBuffers) {\r\n if (info.buffer && matchVertexBuffer(info.buffer, semantic)) {\r\n return info.buffer;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Get vertex buffer information for a given semantic.\r\n *\r\n * @param semantic - The vertex semantic to look up.\r\n * @returns The `VertexBufferInfo`, or `null` if not found.\r\n */\r\n getVertexBufferInfo(semantic: VertexSemantic): VertexBufferInfo {\r\n this.checkVertexLayout();\r\n return this._vertexLayout?.getVertexBufferInfo(semantic) ?? null;\r\n }\r\n /**\r\n * Create a vertex buffer from data and add it to the primitive.\r\n *\r\n * - For interleaved layouts, pass an array of `VertexAttribFormat`.\r\n * - For a single attribute, pass a single `VertexAttribFormat`.\r\n *\r\n * @param format - Vertex attribute format(s).\r\n * @param data - Typed array with vertex data.\r\n * @param stepMode - Optional step mode (e.g., 'vertex', 'instance').\r\n * @returns The created `StructuredBuffer`.\r\n */\r\n createAndSetVertexBuffer(\r\n format: VertexAttribFormat[] | VertexAttribFormat,\r\n data: TypedArray,\r\n stepMode?: VertexStepMode\r\n ): StructuredBuffer {\r\n const device = getDevice();\r\n const buffer = Array.isArray(format)\r\n ? device.createInterleavedVertexBuffer(format, data)\r\n : device.createVertexBuffer(format, data);\r\n return this.setVertexBuffer(buffer, stepMode);\r\n }\r\n /**\r\n * Add an existing vertex buffer to the primitive.\r\n *\r\n * Ownership note: The primitive retains the buffer; it will be released or disposed when replaced or on dispose.\r\n *\r\n * @param buffer - The vertex buffer to add.\r\n * @param stepMode - Optional step mode for the buffer.\r\n * @returns The same buffer.\r\n */\r\n setVertexBuffer(buffer: StructuredBuffer, stepMode?: VertexStepMode) {\r\n retainObject(buffer);\r\n this._vertexLayoutOptions.vertexBuffers.push({\r\n buffer,\r\n stepMode\r\n });\r\n this._vertexLayoutDirty = true;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n return buffer;\r\n }\r\n /**\r\n * Create an index buffer from data and set it on the primitive.\r\n *\r\n * @param data - Index data as Uint16Array or Uint32Array.\r\n * @param dynamic - Whether the index buffer is dynamic (unmanaged).\r\n * @returns The created `IndexBuffer`.\r\n */\r\n createAndSetIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n dynamic?: boolean\r\n ): IndexBuffer {\r\n const device = getDevice();\r\n const buffer = device.createIndexBuffer(data, {\r\n dynamic: !!dynamic,\r\n managed: !dynamic\r\n });\r\n this.setIndexBuffer(buffer);\r\n return buffer;\r\n }\r\n /**\r\n * Set or replace the index buffer.\r\n *\r\n * Ownership note: The primitive retains the buffer; previous buffer is released.\r\n * Marks the vertex layout dirty and invalidates bundles.\r\n *\r\n * @param buffer - The index buffer to set (non-null).\r\n * @returns void\r\n */\r\n setIndexBuffer(buffer: IndexBuffer): void {\r\n if (this._vertexLayoutOptions.indexBuffer !== buffer) {\r\n retainObject(buffer);\r\n releaseObject(this._vertexLayoutOptions.indexBuffer);\r\n this._vertexLayoutOptions.indexBuffer = buffer;\r\n this._vertexLayoutDirty = true;\r\n this._changeTag++;\r\n RenderBundleWrapper.primitiveChanged(this);\r\n }\r\n }\r\n /**\r\n * Get the current index buffer.\r\n *\r\n * @returns The index buffer, or `undefined`/`null` if none set.\r\n */\r\n getIndexBuffer(): IndexBuffer {\r\n return this._vertexLayoutOptions.indexBuffer;\r\n }\r\n /**\r\n * Issue a non-instanced draw for the current topology and range.\r\n *\r\n * Preconditions: A valid vertex layout and `indexCount > 0`.\r\n */\r\n draw() {\r\n this.checkVertexLayout();\r\n if (this.indexCount > 0) {\r\n this._vertexLayout?.draw(this._primitiveType, this._indexStart, this.indexCount);\r\n }\r\n }\r\n /**\r\n * Issue an instanced draw for the current topology and range.\r\n *\r\n * Preconditions: A valid vertex layout and `indexCount > 0`.\r\n *\r\n * @param numInstances - Number of instances to draw.\r\n */\r\n drawInstanced(numInstances: number): void {\r\n this.checkVertexLayout();\r\n if (this.indexCount > 0) {\r\n this._vertexLayout?.drawInstanced(this._primitiveType, this._indexStart, this.indexCount, numInstances);\r\n }\r\n }\r\n /**\r\n * Dispose this primitive and release associated GPU resources.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._vertexLayout?.dispose();\r\n this._vertexLayout = null;\r\n if (this._vertexLayoutOptions) {\r\n releaseObject(this._vertexLayoutOptions.indexBuffer);\r\n for (const info of this._vertexLayoutOptions.vertexBuffers) {\r\n releaseObject(info.buffer);\r\n }\r\n this._vertexLayoutOptions = null;\r\n }\r\n }\r\n /*\r\n createAABBTree(): AABBTree {\r\n const indices = this.getIndexBuffer() ? this.getIndexBuffer().getData() : null;\r\n const vertices = (this.getVertexBuffer(VERTEX_ATTRIB_POSITION)?.getData() as Float32Array) || null;\r\n const aabbtree = new AABBTree();\r\n aabbtree.buildFromPrimitives(vertices, indices, this._primitiveType);\r\n return aabbtree;\r\n }\r\n */\r\n /**\r\n * Get the bounding volume associated with this primitive.\r\n *\r\n * @returns The current bounding volume, or `null` if not set.\r\n */\r\n getBoundingVolume(): BoundingVolume {\r\n return this._bbox;\r\n }\r\n /**\r\n * Set or replace the bounding volume of this primitive.\r\n *\r\n * Triggers registered bounding-volume change callbacks.\r\n *\r\n * @param bv - The bounding volume to set.\r\n * @returns void\r\n */\r\n setBoundingVolume(bv: BoundingVolume): void {\r\n if (bv !== this._bbox) {\r\n this._bbox = bv;\r\n this.dispatchEvent('bv_changed');\r\n }\r\n }\r\n /**\r\n * Test intersection against the current axis-aligned bounding box (AABB).\r\n *\r\n * @param ray - Ray to test against the primitive's AABB (derived from its bounding volume).\r\n * @returns The distance from ray origin to the intersection, or `null` if no hit or no AABB.\r\n */\r\n raycast(ray: Ray): number {\r\n const aabb = this.getBoundingVolume()?.toAABB();\r\n return aabb ? ray.bboxIntersectionTestEx(aabb) : null;\r\n }\r\n /** @internal */\r\n private checkVertexLayout() {\r\n if (this._vertexLayoutDirty) {\r\n this._vertexLayout?.dispose();\r\n const device = getDevice();\r\n this._vertexLayout = device.createVertexLayout(this._vertexLayoutOptions);\r\n this._vertexLayoutDirty = false;\r\n }\r\n }\r\n /** @internal */\r\n private calcDefaultIndexCount(): number {\r\n const indexBuffer = this.getIndexBuffer();\r\n if (indexBuffer) {\r\n return Math.max(0, indexBuffer.length - this._indexStart);\r\n }\r\n const info = this.getVertexBufferInfo('position');\r\n if (info) {\r\n return Math.max(\r\n 0,\r\n Math.floor((info.buffer.byteLength - info.drawOffset) / info.stride) - this._indexStart\r\n );\r\n }\r\n return 0;\r\n }\r\n}\r\n"],"names":["Primitive","makeObservable","Disposable","_nextId","_vertexLayout","_vertexLayoutOptions","vertexBuffers","_primitiveType","_indexStart","_indexCount","_defaultIndexCount","_vertexLayoutDirty","_id","_changeTag","_bbox","id","changeTag","clone","other","copyFrom","info","setVertexBuffer","buffer","stepMode","setIndexBuffer","indexBuffer","primitiveType","indexStart","indexCount","type","RenderBundleWrapper","primitiveChanged","val","calcDefaultIndexCount","getNumVertices","posInfo","getVertexBufferInfo","byteLength","stride","getNumFaces","ib","getIndexBuffer","count","indexType","PBPrimitiveType","U16","removeVertexBuffer","semantic","i","length","matchVertexBuffer","releaseObject","splice","getVertexBuffer","checkVertexLayout","createAndSetVertexBuffer","format","data","device","getDevice","Array","isArray","createInterleavedVertexBuffer","createVertexBuffer","retainObject","push","createAndSetIndexBuffer","dynamic","createIndexBuffer","managed","draw","drawInstanced","numInstances","onDispose","dispose","getBoundingVolume","setBoundingVolume","bv","dispatchEvent","raycast","ray","aabb","toAABB","bboxIntersectionTestEx","createVertexLayout","Math","max","floor","drawOffset"],"mappings":";;;;;AA0BA;;;;;;;;;;;;;;;;IAiBO,MAAMA,SAAAA,SACHC,cAAeC,CAAAA,UAAAA,CAAAA,EAAAA,CAAAA;iFAMvB,aAAsC;sEAEtC,oBAAoD;+EAEpD,cAAwC;iDAExC,WAA8B;mFAE9B,WAA8B;uEAE9B,kBAAqC;sEAErC,kBAAsC;2CAEtC,OAAeC,OAAAA,GAAU,CAAE;yDAE3B,GAAsB;mEAEtB,KAAgC;8EAEhC,UAA2B;AAC3B;;;;;;;;AAQC,MACD,WAAc,EAAA;QACZ,KAAK,EAAA;QACL,IAAI,CAACC,aAAa,GAAG,IAAA;QACrB,IAAI,CAACC,oBAAoB,GAAG;AAAEC,YAAAA,aAAAA,EAAe;AAAG,SAAA;QAChD,IAAI,CAACC,cAAc,GAAG,eAAA;QACtB,IAAI,CAACC,WAAW,GAAG,CAAA;QACnB,IAAI,CAACC,WAAW,GAAG,IAAA;QACnB,IAAI,CAACC,kBAAkB,GAAG,CAAA;QAC1B,IAAI,CAACC,kBAAkB,GAAG,KAAA;AAC1B,QAAA,IAAI,CAACC,GAAG,GAAG,EAAEZ,UAAUG,OAAO;QAC9B,IAAI,CAACU,UAAU,GAAG,CAAA;QAClB,IAAI,CAACC,KAAK,GAAG,IAAA;AACf;AACA;;;;;AAKC,MACD,IAAIC,EAAa,GAAA;QACf,OAAO,IAAI,CAACH,GAAG;AACjB;AACA;;;;;AAKC,MACD,IAAII,SAAY,GAAA;QACd,OAAO,IAAI,CAACH,UAAU;AACxB;AACA;;;;;;AAMC,MACDI,KAAmB,GAAA;AACjB,QAAA,MAAMC,QAAQ,IAAIlB,SAAAA,EAAAA;QAClBkB,KAAMC,CAAAA,QAAQ,CAAC,IAAI,CAAA;QACnB,OAAOD,KAAAA;AACT;AACA;;;;;;;;;MAUAC,QAAAA,CAASD,KAAW,EAAE;AACpB,QAAA,KAAK,MAAME,IAAQF,IAAAA,KAAAA,CAAMb,oBAAoB,CAACC,aAAa,CAAE;AAC3D,YAAA,IAAI,CAACe,eAAe,CAACD,KAAKE,MAAM,EAAEF,KAAKG,QAAQ,CAAA;AACjD;AACA,QAAA,IAAI,CAACC,cAAc,CAACN,KAAMb,CAAAA,oBAAoB,CAACoB,WAAW,CAAA;AAC1D,QAAA,IAAI,CAACC,aAAa,GAAGR,KAAAA,CAAMQ,aAAa;AACxC,QAAA,IAAI,CAACC,UAAU,GAAGT,KAAAA,CAAMS,UAAU;AAClC,QAAA,IAAI,CAACC,UAAU,GAAGV,KAAAA,CAAMU,UAAU;AACpC;AACA;;AAEC,MACD,IAAIF,aAAgB,GAAA;QAClB,OAAO,IAAI,CAACnB,cAAc;AAC5B;IACA,IAAImB,aAAAA,CAAcG,IAAI,EAAE;AACtB,QAAA,IAAIA,IAAS,KAAA,IAAI,CAACtB,cAAc,EAAE;YAChC,IAAI,CAACA,cAAc,GAAGsB,IAAAA;AACtB,YAAA,IAAI,CAAChB,UAAU,EAAA;YACfiB,mBAAoBC,CAAAA,gBAAgB,CAAC,IAAI,CAAA;AAC3C;AACF;AACA;;AAEC,MACD,IAAIJ,UAAa,GAAA;QACf,OAAO,IAAI,CAACnB,WAAW;AACzB;IACA,IAAImB,UAAAA,CAAWK,GAAG,EAAE;AAClB,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACxB,WAAW,EAAE;YAC5B,IAAI,CAACA,WAAW,GAAGwB,GAAAA;AACnB,YAAA,IAAI,CAACnB,UAAU,EAAA;YACfiB,mBAAoBC,CAAAA,gBAAgB,CAAC,IAAI,CAAA;AAC3C;AACF;AACA;;AAEC,MACD,IAAIH,UAAa,GAAA;QACf,IAAI,CAACnB,WAAW,GAAG,IAAI,CAACA,WAAW,IAAI,IAAI,CAACwB,qBAAqB,EAAA;QACjE,OAAO,IAAI,CAACxB,WAAW;AACzB;IACA,IAAImB,UAAAA,CAAWI,GAAG,EAAE;AAClB,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACvB,WAAW,EAAE;YAC5B,IAAI,CAACA,WAAW,GAAGuB,GAAAA;AACnB,YAAA,IAAI,CAACnB,UAAU,EAAA;YACfiB,mBAAoBC,CAAAA,gBAAgB,CAAC,IAAI,CAAA;AAC3C;AACF;AACA;;;;AAIC,MACDG,cAAyB,GAAA;AACvB,QAAA,MAAMC,OAAU,GAAA,IAAI,CAACC,mBAAmB,CAAC,UAAA,CAAA;QACzC,OAAOD,OAAAA,EAASb,MAAS,GAACa,OAAQb,CAAAA,MAAM,CAACe,UAAU,GAAGF,OAAAA,CAAQG,MAAM,IAAK,CAAI,GAAA,CAAA;AAC/E;AACA;;;;;;;AAOC,MACDC,WAAsB,GAAA;QACpB,MAAMC,EAAAA,GAAK,IAAI,CAACC,cAAc,EAAA;AAC9B,QAAA,MAAMC,QAAQF,EACVA,GAAAA,EAAAA,CAAGH,UAAU,KAAKG,GAAGG,SAAS,CAACjB,aAAa,KAAKkB,eAAAA,CAAgBC,GAAG,GAAG,CAAA,GAAI,CAAA,CAC3E,GAAA,IAAI,CAACX,cAAc,EAAA;QACvB,OAAQ,IAAI,CAACR,aAAa;YACxB,KAAK,WAAA;AACH,gBAAA,OAAOgB,KAAS,IAAA,CAAA;YAClB,KAAK,YAAA;gBACH,OAAOA,KAAAA;YACT,KAAK,YAAA;AACH,gBAAA,OAAOA,KAAQ,GAAA,CAAA;YACjB,KAAK,cAAA;AACH,gBAAA,OAAOA,KAAQ,GAAA,CAAA;YACjB,KAAK,gBAAA;AACH,gBAAA,OAAOA,KAAQ,GAAA,CAAA;YACjB,KAAK,eAAA;gBACH,OAAQA,QAAQ,CAAM,IAAA,CAAA;AACxB,YAAA;gBACE,OAAO,CAAA;AACX;AACF;AACA;;;;;;;MAQAI,kBAAAA,CAAmBC,QAAwB,EAAQ;AACjD,QAAA,IAAK,IAAIC,CAAAA,GAAI,IAAI,CAAC3C,oBAAoB,CAACC,aAAa,CAAC2C,MAAM,GAAG,CAAGD,EAAAA,CAAAA,IAAK,GAAGA,CAAK,EAAA,CAAA;AAC5E,YAAA,MAAM5B,OAAO,IAAI,CAACf,oBAAoB,CAACC,aAAa,CAAC0C,CAAE,CAAA;AACvD,YAAA,IAAIE,iBAAkB9B,CAAAA,IAAAA,CAAKE,MAAM,EAAEyB,QAAW,CAAA,EAAA;AAC5CI,gBAAAA,aAAAA,CAAc/B,KAAKE,MAAM,CAAA;AACzB,gBAAA,IAAI,CAACjB,oBAAoB,CAACC,aAAa,CAAC8C,MAAM,CAACJ,CAAG,EAAA,CAAA,CAAA;gBAClD,IAAI,CAACrC,kBAAkB,GAAG,IAAA;AAC5B;AACF;QACA,IAAI,IAAI,CAACA,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAACE,UAAU,EAAA;YACfiB,mBAAoBC,CAAAA,gBAAgB,CAAC,IAAI,CAAA;AAC3C;AACF;AACA;;;;;MAMAsB,eAAAA,CAAgBN,QAAwB,EAAoB;AAC1D,QAAA,KAAK,MAAM3B,IAAQ,IAAA,IAAI,CAACf,oBAAoB,CAACC,aAAa,CAAE;AAC1D,YAAA,IAAIc,KAAKE,MAAM,IAAI4B,kBAAkB9B,IAAKE,CAAAA,MAAM,EAAEyB,QAAW,CAAA,EAAA;AAC3D,gBAAA,OAAO3B,KAAKE,MAAM;AACpB;AACF;QACA,OAAO,IAAA;AACT;AACA;;;;;MAMAc,mBAAAA,CAAoBW,QAAwB,EAAoB;AAC9D,QAAA,IAAI,CAACO,iBAAiB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAClD,aAAa,EAAEgC,oBAAoBW,QAAa,CAAA,IAAA,IAAA;AAC9D;AACA;;;;;;;;;;AAUC,MACDQ,yBACEC,MAAiD,EACjDC,IAAgB,EAChBlC,QAAyB,EACP;AAClB,QAAA,MAAMmC,MAASC,GAAAA,SAAAA,EAAAA;AACf,QAAA,MAAMrC,MAASsC,GAAAA,KAAAA,CAAMC,OAAO,CAACL,MACzBE,CAAAA,GAAAA,MAAAA,CAAOI,6BAA6B,CAACN,MAAQC,EAAAA,IAAAA,CAAAA,GAC7CC,MAAOK,CAAAA,kBAAkB,CAACP,MAAQC,EAAAA,IAAAA,CAAAA;AACtC,QAAA,OAAO,IAAI,CAACpC,eAAe,CAACC,MAAQC,EAAAA,QAAAA,CAAAA;AACtC;AACA;;;;;;;;AAQC,MACDF,eAAgBC,CAAAA,MAAwB,EAAEC,QAAyB,EAAE;QACnEyC,YAAa1C,CAAAA,MAAAA,CAAAA;AACb,QAAA,IAAI,CAACjB,oBAAoB,CAACC,aAAa,CAAC2D,IAAI,CAAC;AAC3C3C,YAAAA,MAAAA;AACAC,YAAAA;AACF,SAAA,CAAA;QACA,IAAI,CAACZ,kBAAkB,GAAG,IAAA;AAC1B,QAAA,IAAI,CAACE,UAAU,EAAA;QACfiB,mBAAoBC,CAAAA,gBAAgB,CAAC,IAAI,CAAA;QACzC,OAAOT,MAAAA;AACT;AACA;;;;;;AAMC,MACD4C,uBACET,CAAAA,IAAyD,EACzDU,OAAiB,EACJ;AACb,QAAA,MAAMT,MAASC,GAAAA,SAAAA,EAAAA;AACf,QAAA,MAAMrC,MAASoC,GAAAA,MAAAA,CAAOU,iBAAiB,CAACX,IAAM,EAAA;AAC5CU,YAAAA,OAAAA,EAAS,CAAC,CAACA,OAAAA;AACXE,YAAAA,OAAAA,EAAS,CAACF;AACZ,SAAA,CAAA;QACA,IAAI,CAAC3C,cAAc,CAACF,MAAAA,CAAAA;QACpB,OAAOA,MAAAA;AACT;AACA;;;;;;;;MASAE,cAAAA,CAAeF,MAAmB,EAAQ;AACxC,QAAA,IAAI,IAAI,CAACjB,oBAAoB,CAACoB,WAAW,KAAKH,MAAQ,EAAA;YACpD0C,YAAa1C,CAAAA,MAAAA,CAAAA;AACb6B,YAAAA,aAAAA,CAAc,IAAI,CAAC9C,oBAAoB,CAACoB,WAAW,CAAA;AACnD,YAAA,IAAI,CAACpB,oBAAoB,CAACoB,WAAW,GAAGH,MAAAA;YACxC,IAAI,CAACX,kBAAkB,GAAG,IAAA;AAC1B,YAAA,IAAI,CAACE,UAAU,EAAA;YACfiB,mBAAoBC,CAAAA,gBAAgB,CAAC,IAAI,CAAA;AAC3C;AACF;AACA;;;;AAIC,MACDU,cAA8B,GAAA;AAC5B,QAAA,OAAO,IAAI,CAACpC,oBAAoB,CAACoB,WAAW;AAC9C;AACA;;;;AAIC,MACD6C,IAAO,GAAA;AACL,QAAA,IAAI,CAAChB,iBAAiB,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC1B,UAAU,GAAG,CAAG,EAAA;AACvB,YAAA,IAAI,CAACxB,aAAa,EAAEkE,IAAAA,CAAK,IAAI,CAAC/D,cAAc,EAAE,IAAI,CAACC,WAAW,EAAE,IAAI,CAACoB,UAAU,CAAA;AACjF;AACF;AACA;;;;;;MAOA2C,aAAAA,CAAcC,YAAoB,EAAQ;AACxC,QAAA,IAAI,CAAClB,iBAAiB,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC1B,UAAU,GAAG,CAAG,EAAA;AACvB,YAAA,IAAI,CAACxB,aAAa,EAAEmE,aAAAA,CAAc,IAAI,CAAChE,cAAc,EAAE,IAAI,CAACC,WAAW,EAAE,IAAI,CAACoB,UAAU,EAAE4C,YAAAA,CAAAA;AAC5F;AACF;AACA;;AAEC,MACD,SAAsB,GAAA;AACpB,QAAA,KAAK,CAACC,SAAAA,EAAAA;QACN,IAAI,CAACrE,aAAa,EAAEsE,OAAAA,EAAAA;QACpB,IAAI,CAACtE,aAAa,GAAG,IAAA;QACrB,IAAI,IAAI,CAACC,oBAAoB,EAAE;AAC7B8C,YAAAA,aAAAA,CAAc,IAAI,CAAC9C,oBAAoB,CAACoB,WAAW,CAAA;AACnD,YAAA,KAAK,MAAML,IAAQ,IAAA,IAAI,CAACf,oBAAoB,CAACC,aAAa,CAAE;AAC1D6C,gBAAAA,aAAAA,CAAc/B,KAAKE,MAAM,CAAA;AAC3B;YACA,IAAI,CAACjB,oBAAoB,GAAG,IAAA;AAC9B;AACF;AACA;;;;;;;;;;;;AAaC,MACDsE,iBAAoC,GAAA;QAClC,OAAO,IAAI,CAAC7D,KAAK;AACnB;AACA;;;;;;;MAQA8D,iBAAAA,CAAkBC,EAAkB,EAAQ;AAC1C,QAAA,IAAIA,EAAO,KAAA,IAAI,CAAC/D,KAAK,EAAE;YACrB,IAAI,CAACA,KAAK,GAAG+D,EAAAA;YACb,IAAI,CAACC,aAAa,CAAC,YAAA,CAAA;AACrB;AACF;AACA;;;;;MAMAC,OAAAA,CAAQC,GAAQ,EAAU;AACxB,QAAA,MAAMC,IAAO,GAAA,IAAI,CAACN,iBAAiB,EAAIO,EAAAA,MAAAA,EAAAA;AACvC,QAAA,OAAOD,IAAOD,GAAAA,GAAAA,CAAIG,sBAAsB,CAACF,IAAQ,CAAA,GAAA,IAAA;AACnD;qBAEA,iBAA4B,GAAA;QAC1B,IAAI,IAAI,CAACtE,kBAAkB,EAAE;YAC3B,IAAI,CAACP,aAAa,EAAEsE,OAAAA,EAAAA;AACpB,YAAA,MAAMhB,MAASC,GAAAA,SAAAA,EAAAA;YACf,IAAI,CAACvD,aAAa,GAAGsD,MAAAA,CAAO0B,kBAAkB,CAAC,IAAI,CAAC/E,oBAAoB,CAAA;YACxE,IAAI,CAACM,kBAAkB,GAAG,KAAA;AAC5B;AACF;qBAEA,qBAAwC,GAAA;QACtC,MAAMc,WAAAA,GAAc,IAAI,CAACgB,cAAc,EAAA;AACvC,QAAA,IAAIhB,WAAa,EAAA;YACf,OAAO4D,IAAAA,CAAKC,GAAG,CAAC,CAAA,EAAG7D,YAAYwB,MAAM,GAAG,IAAI,CAACzC,WAAW,CAAA;AAC1D;AACA,QAAA,MAAMY,IAAO,GAAA,IAAI,CAACgB,mBAAmB,CAAC,UAAA,CAAA;AACtC,QAAA,IAAIhB,IAAM,EAAA;YACR,OAAOiE,IAAAA,CAAKC,GAAG,CACb,CAAA,EACAD,KAAKE,KAAK,CAAC,CAACnE,IAAKE,CAAAA,MAAM,CAACe,UAAU,GAAGjB,IAAKoE,CAAAA,UAAU,IAAIpE,KAAKkB,MAAM,CAAA,GAAI,IAAI,CAAC9B,WAAW,CAAA;AAE3F;QACA,OAAO,CAAA;AACT;AACF;;;;"}