@zephyr3d/scene 0.6.0 → 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 (723) hide show
  1. package/README.md +1 -1
  2. package/dist/animation/animation.js +149 -27
  3. package/dist/animation/animation.js.map +1 -1
  4. package/dist/animation/animationset.js +173 -73
  5. package/dist/animation/animationset.js.map +1 -1
  6. package/dist/animation/animationtrack.js +65 -10
  7. package/dist/animation/animationtrack.js.map +1 -1
  8. package/dist/animation/eulerrotationtrack.js +41 -20
  9. package/dist/animation/eulerrotationtrack.js.map +1 -1
  10. package/dist/animation/morphtarget.js +14 -38
  11. package/dist/animation/morphtarget.js.map +1 -1
  12. package/dist/animation/morphtrack.js +59 -22
  13. package/dist/animation/morphtrack.js.map +1 -1
  14. package/dist/animation/proptrack.js +190 -0
  15. package/dist/animation/proptrack.js.map +1 -0
  16. package/dist/animation/rotationtrack.js +29 -11
  17. package/dist/animation/rotationtrack.js.map +1 -1
  18. package/dist/animation/scaletrack.js +29 -11
  19. package/dist/animation/scaletrack.js.map +1 -1
  20. package/dist/animation/skeleton.js +241 -78
  21. package/dist/animation/skeleton.js.map +1 -1
  22. package/dist/animation/translationtrack.js +30 -11
  23. package/dist/animation/translationtrack.js.map +1 -1
  24. package/dist/app/api.js +43 -0
  25. package/dist/app/api.js.map +1 -0
  26. package/dist/app/app.js +153 -0
  27. package/dist/app/app.js.map +1 -0
  28. package/dist/app/engine.js +312 -0
  29. package/dist/app/engine.js.map +1 -0
  30. package/dist/app/inputmgr.js +351 -0
  31. package/dist/app/inputmgr.js.map +1 -0
  32. package/dist/app/runtimescript.js +62 -0
  33. package/dist/app/runtimescript.js.map +1 -0
  34. package/dist/app/scriptingsystem.js +220 -0
  35. package/dist/app/scriptingsystem.js.map +1 -0
  36. package/dist/app/scriptregistry.js +432 -0
  37. package/dist/app/scriptregistry.js.map +1 -0
  38. package/dist/asset/assetmanager.js +772 -291
  39. package/dist/asset/assetmanager.js.map +1 -1
  40. package/dist/asset/builtin.js +7 -43
  41. package/dist/asset/builtin.js.map +1 -1
  42. package/dist/asset/loaders/dds/dds.js +17 -93
  43. package/dist/asset/loaders/dds/dds.js.map +1 -1
  44. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  45. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  46. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  47. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  48. package/dist/asset/loaders/gltf/helpers.js +27 -14
  49. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  50. package/dist/asset/loaders/hdr/hdr.js +17 -12
  51. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  52. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  53. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  54. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  55. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  56. package/dist/asset/loaders/loader.js.map +1 -1
  57. package/dist/asset/model.js +158 -4
  58. package/dist/asset/model.js.map +1 -1
  59. package/dist/blitter/bilateralblur.js +0 -1
  60. package/dist/blitter/bilateralblur.js.map +1 -1
  61. package/dist/blitter/blitter.js +22 -23
  62. package/dist/blitter/blitter.js.map +1 -1
  63. package/dist/blitter/box.js.map +1 -1
  64. package/dist/blitter/copy.js.map +1 -1
  65. package/dist/blitter/gaussianblur.js +23 -23
  66. package/dist/blitter/gaussianblur.js.map +1 -1
  67. package/dist/camera/base.js +141 -34
  68. package/dist/camera/base.js.map +1 -1
  69. package/dist/camera/camera.js +653 -149
  70. package/dist/camera/camera.js.map +1 -1
  71. package/dist/camera/fps.js +2 -10
  72. package/dist/camera/fps.js.map +1 -1
  73. package/dist/camera/orbit.js +132 -59
  74. package/dist/camera/orbit.js.map +1 -1
  75. package/dist/camera/orthocamera.js +37 -12
  76. package/dist/camera/orthocamera.js.map +1 -1
  77. package/dist/camera/perspectivecamera.js +37 -20
  78. package/dist/camera/perspectivecamera.js.map +1 -1
  79. package/dist/index.d.ts +18268 -6982
  80. package/dist/index.js +49 -16
  81. package/dist/index.js.map +1 -1
  82. package/dist/material/blinn.js +5 -0
  83. package/dist/material/blinn.js.map +1 -1
  84. package/dist/material/grassmaterial.js +6 -1
  85. package/dist/material/grassmaterial.js.map +1 -1
  86. package/dist/material/lambert.js +6 -1
  87. package/dist/material/lambert.js.map +1 -1
  88. package/dist/material/material.js +346 -73
  89. package/dist/material/material.js.map +1 -1
  90. package/dist/material/meshmaterial.js +498 -156
  91. package/dist/material/meshmaterial.js.map +1 -1
  92. package/dist/material/mixins/albedocolor.js +5 -1
  93. package/dist/material/mixins/albedocolor.js.map +1 -1
  94. package/dist/material/mixins/foliage.js +3 -3
  95. package/dist/material/mixins/foliage.js.map +1 -1
  96. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  97. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  98. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  99. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  101. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  103. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  105. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  106. package/dist/material/mixins/lit.js +16 -4
  107. package/dist/material/mixins/lit.js.map +1 -1
  108. package/dist/material/mixins/pbr/brdf.js +134 -0
  109. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  110. package/dist/material/mixins/pbr/common.js +68 -85
  111. package/dist/material/mixins/pbr/common.js.map +1 -1
  112. package/dist/material/mixins/texture.js +98 -83
  113. package/dist/material/mixins/texture.js.map +1 -1
  114. package/dist/material/mixins/vertexcolor.js +6 -2
  115. package/dist/material/mixins/vertexcolor.js.map +1 -1
  116. package/dist/material/particle.js +272 -0
  117. package/dist/material/particle.js.map +1 -0
  118. package/dist/material/pbrblueprint.js +186 -0
  119. package/dist/material/pbrblueprint.js.map +1 -0
  120. package/dist/material/pbrmr.js +10 -0
  121. package/dist/material/pbrmr.js.map +1 -1
  122. package/dist/material/pbrsg.js +10 -0
  123. package/dist/material/pbrsg.js.map +1 -1
  124. package/dist/material/shader/helper.js +521 -287
  125. package/dist/material/shader/helper.js.map +1 -1
  126. package/dist/material/terrain-cm.js +607 -0
  127. package/dist/material/terrain-cm.js.map +1 -0
  128. package/dist/material/terrainmaterial.js +59 -54
  129. package/dist/material/terrainmaterial.js.map +1 -1
  130. package/dist/material/unlit.js +5 -0
  131. package/dist/material/unlit.js.map +1 -1
  132. package/dist/material/water.js +415 -0
  133. package/dist/material/water.js.map +1 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  141. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  143. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  144. package/dist/posteffect/bloom.js +39 -54
  145. package/dist/posteffect/bloom.js.map +1 -1
  146. package/dist/posteffect/compositor.js +95 -128
  147. package/dist/posteffect/compositor.js.map +1 -1
  148. package/dist/posteffect/fxaa.js +10 -18
  149. package/dist/posteffect/fxaa.js.map +1 -1
  150. package/dist/posteffect/grayscale.js +9 -17
  151. package/dist/posteffect/grayscale.js.map +1 -1
  152. package/dist/posteffect/motionblur.js +105 -0
  153. package/dist/posteffect/motionblur.js.map +1 -0
  154. package/dist/posteffect/posteffect.js +66 -35
  155. package/dist/posteffect/posteffect.js.map +1 -1
  156. package/dist/posteffect/sao.js +13 -21
  157. package/dist/posteffect/sao.js.map +1 -1
  158. package/dist/posteffect/ssr.js +60 -100
  159. package/dist/posteffect/ssr.js.map +1 -1
  160. package/dist/posteffect/taa.js +175 -0
  161. package/dist/posteffect/taa.js.map +1 -0
  162. package/dist/posteffect/tonemap.js +12 -20
  163. package/dist/posteffect/tonemap.js.map +1 -1
  164. package/dist/render/abuffer_oit.js +30 -19
  165. package/dist/render/abuffer_oit.js.map +1 -1
  166. package/dist/render/clipmap.js +429 -101
  167. package/dist/render/clipmap.js.map +1 -1
  168. package/dist/render/cluster_light.js +7 -5
  169. package/dist/render/cluster_light.js.map +1 -1
  170. package/dist/render/cull_visitor.js +43 -3
  171. package/dist/render/cull_visitor.js.map +1 -1
  172. package/dist/render/depthpass.js +14 -5
  173. package/dist/render/depthpass.js.map +1 -1
  174. package/dist/render/drawable_mixin.js +113 -40
  175. package/dist/render/drawable_mixin.js.map +1 -1
  176. package/dist/render/envlight.js +86 -141
  177. package/dist/render/envlight.js.map +1 -1
  178. package/dist/render/fbm_wavegenerator.js +234 -0
  179. package/dist/render/fbm_wavegenerator.js.map +1 -0
  180. package/dist/render/fft_wavegenerator.js +64 -50
  181. package/dist/render/fft_wavegenerator.js.map +1 -1
  182. package/dist/render/fullscreenquad.js +2 -2
  183. package/dist/render/fullscreenquad.js.map +1 -1
  184. package/dist/render/gerstner_wavegenerator.js +98 -48
  185. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  186. package/dist/render/globalbindgroup_allocator.js +4 -2
  187. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  188. package/dist/render/hzb.js +6 -3
  189. package/dist/render/hzb.js.map +1 -1
  190. package/dist/render/lightpass.js +19 -18
  191. package/dist/render/lightpass.js.map +1 -1
  192. package/dist/render/objectcolorpass.js +4 -4
  193. package/dist/render/objectcolorpass.js.map +1 -1
  194. package/dist/render/primitive.js +213 -104
  195. package/dist/render/primitive.js.map +1 -1
  196. package/dist/render/render_queue.js +40 -20
  197. package/dist/render/render_queue.js.map +1 -1
  198. package/dist/render/renderbundle_wrapper.js +65 -15
  199. package/dist/render/renderbundle_wrapper.js.map +1 -1
  200. package/dist/render/renderer.js +326 -185
  201. package/dist/render/renderer.js.map +1 -1
  202. package/dist/render/renderpass.js +20 -36
  203. package/dist/render/renderpass.js.map +1 -1
  204. package/dist/render/shadowmap_pass.js +3 -3
  205. package/dist/render/shadowmap_pass.js.map +1 -1
  206. package/dist/render/sky.js +864 -541
  207. package/dist/render/sky.js.map +1 -1
  208. package/dist/render/weightedblended_oit.js +13 -15
  209. package/dist/render/weightedblended_oit.js.map +1 -1
  210. package/dist/scene/batchgroup.js +18 -5
  211. package/dist/scene/batchgroup.js.map +1 -1
  212. package/dist/scene/environment.js +78 -48
  213. package/dist/scene/environment.js.map +1 -1
  214. package/dist/scene/graph_node.js +2 -3
  215. package/dist/scene/graph_node.js.map +1 -1
  216. package/dist/scene/light.js +28 -89
  217. package/dist/scene/light.js.map +1 -1
  218. package/dist/scene/mesh.js +218 -87
  219. package/dist/scene/mesh.js.map +1 -1
  220. package/dist/scene/octree.js +371 -162
  221. package/dist/scene/octree.js.map +1 -1
  222. package/dist/scene/particlesys.js +684 -0
  223. package/dist/scene/particlesys.js.map +1 -0
  224. package/dist/scene/raycast_visitor.js +34 -5
  225. package/dist/scene/raycast_visitor.js.map +1 -1
  226. package/dist/scene/scene.js +309 -85
  227. package/dist/scene/scene.js.map +1 -1
  228. package/dist/scene/scene_node.js +675 -102
  229. package/dist/scene/scene_node.js.map +1 -1
  230. package/dist/scene/terrain/grass.js +48 -49
  231. package/dist/scene/terrain/grass.js.map +1 -1
  232. package/dist/scene/terrain/heightfield.js +46 -44
  233. package/dist/scene/terrain/heightfield.js.map +1 -1
  234. package/dist/scene/terrain/patch.js +20 -29
  235. package/dist/scene/terrain/patch.js.map +1 -1
  236. package/dist/scene/terrain/quadtree.js +58 -27
  237. package/dist/scene/terrain/quadtree.js.map +1 -1
  238. package/dist/scene/terrain/terrain.js +31 -45
  239. package/dist/scene/terrain/terrain.js.map +1 -1
  240. package/dist/scene/terrain-cm/grass.js +603 -0
  241. package/dist/scene/terrain-cm/grass.js.map +1 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  243. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  245. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  246. package/dist/scene/water.js +378 -0
  247. package/dist/scene/water.js.map +1 -0
  248. package/dist/shaders/atmosphere.js +957 -0
  249. package/dist/shaders/atmosphere.js.map +1 -0
  250. package/dist/shaders/fog.js +116 -0
  251. package/dist/shaders/fog.js.map +1 -0
  252. package/dist/shaders/misc.js.map +1 -1
  253. package/dist/shaders/noise.js +217 -8
  254. package/dist/shaders/noise.js.map +1 -1
  255. package/dist/shaders/pbr.js.map +1 -1
  256. package/dist/shaders/shadow.js +8 -8
  257. package/dist/shaders/shadow.js.map +1 -1
  258. package/dist/shaders/ssr.js +87 -39
  259. package/dist/shaders/ssr.js.map +1 -1
  260. package/dist/shaders/temporal.js +216 -0
  261. package/dist/shaders/temporal.js.map +1 -0
  262. package/dist/shaders/water.js +42 -20
  263. package/dist/shaders/water.js.map +1 -1
  264. package/dist/shadow/esm.js +31 -13
  265. package/dist/shadow/esm.js.map +1 -1
  266. package/dist/shadow/pcf_opt.js +12 -13
  267. package/dist/shadow/pcf_opt.js.map +1 -1
  268. package/dist/shadow/pcf_pd.js +12 -13
  269. package/dist/shadow/pcf_pd.js.map +1 -1
  270. package/dist/shadow/shader.js +38 -0
  271. package/dist/shadow/shader.js.map +1 -0
  272. package/dist/shadow/shadow_impl.js.map +1 -1
  273. package/dist/shadow/shadowmapper.js +67 -26
  274. package/dist/shadow/shadowmapper.js.map +1 -1
  275. package/dist/shadow/ssm.js +15 -16
  276. package/dist/shadow/ssm.js.map +1 -1
  277. package/dist/shadow/vsm.js +33 -16
  278. package/dist/shadow/vsm.js.map +1 -1
  279. package/dist/shapes/box.js +181 -83
  280. package/dist/shapes/box.js.map +1 -1
  281. package/dist/shapes/cylinder.js +101 -43
  282. package/dist/shapes/cylinder.js.map +1 -1
  283. package/dist/shapes/plane.js +70 -29
  284. package/dist/shapes/plane.js.map +1 -1
  285. package/dist/shapes/shape.js +120 -17
  286. package/dist/shapes/shape.js.map +1 -1
  287. package/dist/shapes/sphere.js +78 -44
  288. package/dist/shapes/sphere.js.map +1 -1
  289. package/dist/shapes/tetrahedron.js +256 -0
  290. package/dist/shapes/tetrahedron.js.map +1 -0
  291. package/dist/shapes/torus.js +76 -55
  292. package/dist/shapes/torus.js.map +1 -1
  293. package/dist/src/animation/animation.js +127 -0
  294. package/dist/src/animation/animation.js.map +1 -0
  295. package/dist/src/animation/animationset.js +255 -0
  296. package/dist/src/animation/animationset.js.map +1 -0
  297. package/dist/src/animation/animationtrack.js +34 -0
  298. package/dist/src/animation/animationtrack.js.map +1 -0
  299. package/dist/src/animation/eulerrotationtrack.js +52 -0
  300. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  301. package/dist/src/animation/morphtarget.js +93 -0
  302. package/dist/src/animation/morphtarget.js.map +1 -0
  303. package/dist/src/animation/morphtrack.js +70 -0
  304. package/dist/src/animation/morphtrack.js.map +1 -0
  305. package/dist/src/animation/proptrack.js +161 -0
  306. package/dist/src/animation/proptrack.js.map +1 -0
  307. package/dist/src/animation/rotationtrack.js +51 -0
  308. package/dist/src/animation/rotationtrack.js.map +1 -0
  309. package/dist/src/animation/scaletrack.js +50 -0
  310. package/dist/src/animation/scaletrack.js.map +1 -0
  311. package/dist/src/animation/skeleton.js +204 -0
  312. package/dist/src/animation/skeleton.js.map +1 -0
  313. package/dist/src/animation/translationtrack.js +50 -0
  314. package/dist/src/animation/translationtrack.js.map +1 -0
  315. package/dist/{app.js → src/app/app.js} +18 -40
  316. package/dist/src/app/app.js.map +1 -0
  317. package/dist/{input → src/app}/inputmgr.js +41 -16
  318. package/dist/src/app/inputmgr.js.map +1 -0
  319. package/dist/src/asset/assetmanager.js +404 -0
  320. package/dist/src/asset/assetmanager.js.map +1 -0
  321. package/dist/src/asset/builtin.js +337 -0
  322. package/dist/src/asset/builtin.js.map +1 -0
  323. package/dist/src/asset/loaders/dds/dds.js +470 -0
  324. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  326. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  328. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  330. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  332. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  334. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  336. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  337. package/dist/src/asset/loaders/loader.js +45 -0
  338. package/dist/src/asset/loaders/loader.js.map +1 -0
  339. package/dist/src/asset/model.js +414 -0
  340. package/dist/src/asset/model.js.map +1 -0
  341. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  342. package/dist/src/blitter/bilateralblur.js.map +1 -0
  343. package/dist/src/blitter/blitter.js +390 -0
  344. package/dist/src/blitter/blitter.js.map +1 -0
  345. package/dist/src/blitter/box.js +118 -0
  346. package/dist/src/blitter/box.js.map +1 -0
  347. package/dist/src/blitter/copy.js +22 -0
  348. package/dist/src/blitter/copy.js.map +1 -0
  349. package/dist/src/blitter/gaussianblur.js +228 -0
  350. package/dist/src/blitter/gaussianblur.js.map +1 -0
  351. package/dist/src/camera/base.js +92 -0
  352. package/dist/src/camera/base.js.map +1 -0
  353. package/dist/src/camera/camera.js +1005 -0
  354. package/dist/src/camera/camera.js.map +1 -0
  355. package/dist/src/camera/fps.js +238 -0
  356. package/dist/src/camera/fps.js.map +1 -0
  357. package/dist/src/camera/orbit.js +245 -0
  358. package/dist/src/camera/orbit.js.map +1 -0
  359. package/dist/src/camera/orthocamera.js +167 -0
  360. package/dist/src/camera/orthocamera.js.map +1 -0
  361. package/dist/src/camera/perspectivecamera.js +141 -0
  362. package/dist/src/camera/perspectivecamera.js.map +1 -0
  363. package/dist/src/index.js +120 -0
  364. package/dist/src/index.js.map +1 -0
  365. package/dist/src/material/blinn.js +81 -0
  366. package/dist/src/material/blinn.js.map +1 -0
  367. package/dist/src/material/grassmaterial.js +113 -0
  368. package/dist/src/material/grassmaterial.js.map +1 -0
  369. package/dist/src/material/lambert.js +92 -0
  370. package/dist/src/material/lambert.js.map +1 -0
  371. package/dist/src/material/material.js +301 -0
  372. package/dist/src/material/material.js.map +1 -0
  373. package/dist/src/material/meshmaterial.js +704 -0
  374. package/dist/src/material/meshmaterial.js.map +1 -0
  375. package/dist/src/material/mixins/albedocolor.js +76 -0
  376. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  377. package/dist/src/material/mixins/foliage.js +47 -0
  378. package/dist/src/material/mixins/foliage.js.map +1 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  380. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  382. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  384. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  386. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  387. package/dist/src/material/mixins/lit.js +476 -0
  388. package/dist/src/material/mixins/lit.js.map +1 -0
  389. package/dist/src/material/mixins/pbr/common.js +918 -0
  390. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  391. package/dist/src/material/mixins/texture.js +172 -0
  392. package/dist/src/material/mixins/texture.js.map +1 -0
  393. package/dist/src/material/mixins/vertexcolor.js +56 -0
  394. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  395. package/dist/src/material/particle.js +178 -0
  396. package/dist/src/material/particle.js.map +1 -0
  397. package/dist/src/material/pbrmr.js +97 -0
  398. package/dist/src/material/pbrmr.js.map +1 -0
  399. package/dist/src/material/pbrsg.js +97 -0
  400. package/dist/src/material/pbrsg.js.map +1 -0
  401. package/dist/src/material/shader/helper.js +1209 -0
  402. package/dist/src/material/shader/helper.js.map +1 -0
  403. package/dist/src/material/terrain-cm.js +606 -0
  404. package/dist/src/material/terrain-cm.js.map +1 -0
  405. package/dist/src/material/terrainmaterial.js +375 -0
  406. package/dist/src/material/terrainmaterial.js.map +1 -0
  407. package/dist/src/material/unlit.js +41 -0
  408. package/dist/src/material/unlit.js.map +1 -0
  409. package/dist/src/material/water.js +417 -0
  410. package/dist/src/material/water.js.map +1 -0
  411. package/dist/src/posteffect/bloom.js +361 -0
  412. package/dist/src/posteffect/bloom.js.map +1 -0
  413. package/dist/src/posteffect/compositor.js +226 -0
  414. package/dist/src/posteffect/compositor.js.map +1 -0
  415. package/dist/src/posteffect/fxaa.js +273 -0
  416. package/dist/src/posteffect/fxaa.js.map +1 -0
  417. package/dist/src/posteffect/grayscale.js +69 -0
  418. package/dist/src/posteffect/grayscale.js.map +1 -0
  419. package/dist/src/posteffect/motionblur.js +96 -0
  420. package/dist/src/posteffect/motionblur.js.map +1 -0
  421. package/dist/src/posteffect/posteffect.js +126 -0
  422. package/dist/src/posteffect/posteffect.js.map +1 -0
  423. package/dist/src/posteffect/sao.js +324 -0
  424. package/dist/src/posteffect/sao.js.map +1 -0
  425. package/dist/src/posteffect/ssr.js +489 -0
  426. package/dist/src/posteffect/ssr.js.map +1 -0
  427. package/dist/src/posteffect/taa.js +172 -0
  428. package/dist/src/posteffect/taa.js.map +1 -0
  429. package/dist/src/posteffect/tonemap.js +94 -0
  430. package/dist/src/posteffect/tonemap.js.map +1 -0
  431. package/dist/src/render/abuffer_oit.js +361 -0
  432. package/dist/src/render/abuffer_oit.js.map +1 -0
  433. package/dist/src/render/clipmap.js +851 -0
  434. package/dist/src/render/clipmap.js.map +1 -0
  435. package/dist/src/render/cluster_light.js +333 -0
  436. package/dist/src/render/cluster_light.js.map +1 -0
  437. package/dist/src/render/cull_visitor.js +187 -0
  438. package/dist/src/render/cull_visitor.js.map +1 -0
  439. package/dist/src/render/depthpass.js +68 -0
  440. package/dist/src/render/depthpass.js.map +1 -0
  441. package/dist/src/render/drawable_mixin.js +227 -0
  442. package/dist/src/render/drawable_mixin.js.map +1 -0
  443. package/dist/src/render/envlight.js +463 -0
  444. package/dist/src/render/envlight.js.map +1 -0
  445. package/dist/src/render/fbm_wavegenerator.js +251 -0
  446. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  447. package/dist/src/render/fft_wavegenerator.js +1006 -0
  448. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  449. package/dist/src/render/fullscreenquad.js +38 -0
  450. package/dist/src/render/fullscreenquad.js.map +1 -0
  451. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  452. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  453. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  454. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  455. package/dist/src/render/hzb.js +273 -0
  456. package/dist/src/render/hzb.js.map +1 -0
  457. package/dist/src/render/lightpass.js +172 -0
  458. package/dist/src/render/lightpass.js.map +1 -0
  459. package/dist/src/render/objectcolorpass.js +51 -0
  460. package/dist/src/render/objectcolorpass.js.map +1 -0
  461. package/dist/src/render/primitive.js +364 -0
  462. package/dist/src/render/primitive.js.map +1 -0
  463. package/dist/src/render/render_queue.js +467 -0
  464. package/dist/src/render/render_queue.js.map +1 -0
  465. package/dist/src/render/renderbundle_wrapper.js +152 -0
  466. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  467. package/dist/src/render/renderer.js +455 -0
  468. package/dist/src/render/renderer.js.map +1 -0
  469. package/dist/src/render/renderpass.js +200 -0
  470. package/dist/src/render/renderpass.js.map +1 -0
  471. package/dist/src/render/shadowmap_pass.js +56 -0
  472. package/dist/src/render/shadowmap_pass.js.map +1 -0
  473. package/dist/src/render/sky.js +1103 -0
  474. package/dist/src/render/sky.js.map +1 -0
  475. package/dist/src/render/weightedblended_oit.js +168 -0
  476. package/dist/src/render/weightedblended_oit.js.map +1 -0
  477. package/dist/src/scene/batchgroup.js +162 -0
  478. package/dist/src/scene/batchgroup.js.map +1 -0
  479. package/dist/src/scene/environment.js +209 -0
  480. package/dist/src/scene/environment.js.map +1 -0
  481. package/dist/src/scene/graph_node.js +72 -0
  482. package/dist/src/scene/graph_node.js.map +1 -0
  483. package/dist/src/scene/light.js +416 -0
  484. package/dist/src/scene/light.js.map +1 -0
  485. package/dist/src/scene/mesh.js +341 -0
  486. package/dist/src/scene/mesh.js.map +1 -0
  487. package/dist/src/scene/octree.js +649 -0
  488. package/dist/src/scene/octree.js.map +1 -0
  489. package/dist/src/scene/particlesys.js +738 -0
  490. package/dist/src/scene/particlesys.js.map +1 -0
  491. package/dist/src/scene/raycast_visitor.js +103 -0
  492. package/dist/src/scene/raycast_visitor.js.map +1 -0
  493. package/dist/src/scene/scene.js +284 -0
  494. package/dist/src/scene/scene.js.map +1 -0
  495. package/dist/src/scene/scene_node.js +732 -0
  496. package/dist/src/scene/scene_node.js.map +1 -0
  497. package/dist/src/scene/terrain/grass.js +278 -0
  498. package/dist/src/scene/terrain/grass.js.map +1 -0
  499. package/dist/src/scene/terrain/heightfield.js +475 -0
  500. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  501. package/dist/src/scene/terrain/patch.js +530 -0
  502. package/dist/src/scene/terrain/patch.js.map +1 -0
  503. package/dist/src/scene/terrain/quadtree.js +461 -0
  504. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  505. package/dist/src/scene/terrain/terrain.js +246 -0
  506. package/dist/src/scene/terrain/terrain.js.map +1 -0
  507. package/dist/src/scene/terrain-cm/grass.js +594 -0
  508. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  510. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  512. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  513. package/dist/src/scene/water.js +374 -0
  514. package/dist/src/scene/water.js.map +1 -0
  515. package/dist/src/shaders/atmosphere.js +957 -0
  516. package/dist/src/shaders/atmosphere.js.map +1 -0
  517. package/dist/src/shaders/fog.js +112 -0
  518. package/dist/src/shaders/fog.js.map +1 -0
  519. package/dist/src/shaders/misc.js +266 -0
  520. package/dist/src/shaders/misc.js.map +1 -0
  521. package/dist/src/shaders/noise.js +222 -0
  522. package/dist/src/shaders/noise.js.map +1 -0
  523. package/dist/src/shaders/pbr.js +51 -0
  524. package/dist/src/shaders/pbr.js.map +1 -0
  525. package/dist/src/shaders/shadow.js +636 -0
  526. package/dist/src/shaders/shadow.js.map +1 -0
  527. package/dist/src/shaders/ssr.js +490 -0
  528. package/dist/src/shaders/ssr.js.map +1 -0
  529. package/dist/src/shaders/temporal.js +215 -0
  530. package/dist/src/shaders/temporal.js.map +1 -0
  531. package/dist/src/shaders/water.js +756 -0
  532. package/dist/src/shaders/water.js.map +1 -0
  533. package/dist/src/shadow/esm.js +237 -0
  534. package/dist/src/shadow/esm.js.map +1 -0
  535. package/dist/src/shadow/pcf_opt.js +181 -0
  536. package/dist/src/shadow/pcf_opt.js.map +1 -0
  537. package/dist/src/shadow/pcf_pd.js +189 -0
  538. package/dist/src/shadow/pcf_pd.js.map +1 -0
  539. package/dist/src/shadow/shader.js +37 -0
  540. package/dist/src/shadow/shader.js.map +1 -0
  541. package/dist/src/shadow/shadow_impl.js +15 -0
  542. package/dist/src/shadow/shadow_impl.js.map +1 -0
  543. package/dist/src/shadow/shadowmapper.js +790 -0
  544. package/dist/src/shadow/shadowmapper.js.map +1 -0
  545. package/dist/src/shadow/ssm.js +159 -0
  546. package/dist/src/shadow/ssm.js.map +1 -0
  547. package/dist/src/shadow/vsm.js +297 -0
  548. package/dist/src/shadow/vsm.js.map +1 -0
  549. package/dist/src/shapes/box.js +386 -0
  550. package/dist/src/shapes/box.js.map +1 -0
  551. package/dist/src/shapes/cylinder.js +125 -0
  552. package/dist/src/shapes/cylinder.js.map +1 -0
  553. package/dist/src/shapes/plane.js +88 -0
  554. package/dist/src/shapes/plane.js.map +1 -0
  555. package/dist/src/shapes/shape.js +87 -0
  556. package/dist/src/shapes/shape.js.map +1 -0
  557. package/dist/src/shapes/sphere.js +114 -0
  558. package/dist/src/shapes/sphere.js.map +1 -0
  559. package/dist/src/shapes/tetrahedron.js +188 -0
  560. package/dist/src/shapes/tetrahedron.js.map +1 -0
  561. package/dist/src/shapes/torus.js +111 -0
  562. package/dist/src/shapes/torus.js.map +1 -0
  563. package/dist/src/utility/aabbtree.js +400 -0
  564. package/dist/src/utility/aabbtree.js.map +1 -0
  565. package/dist/src/utility/bounding_volume.js +29 -0
  566. package/dist/src/utility/bounding_volume.js.map +1 -0
  567. package/dist/src/utility/debug.js +28 -0
  568. package/dist/src/utility/debug.js.map +1 -0
  569. package/dist/src/utility/draco/decoder.js +116 -0
  570. package/dist/src/utility/draco/decoder.js.map +1 -0
  571. package/dist/src/utility/misc.js +105 -0
  572. package/dist/src/utility/misc.js.map +1 -0
  573. package/dist/src/utility/panorama.js +163 -0
  574. package/dist/src/utility/panorama.js.map +1 -0
  575. package/dist/src/utility/pmrem.js +354 -0
  576. package/dist/src/utility/pmrem.js.map +1 -0
  577. package/dist/src/utility/rendermipmap.js +115 -0
  578. package/dist/src/utility/rendermipmap.js.map +1 -0
  579. package/dist/src/utility/serialization/json.js +402 -0
  580. package/dist/src/utility/serialization/json.js.map +1 -0
  581. package/dist/src/utility/serialization/manager.js +623 -0
  582. package/dist/src/utility/serialization/manager.js.map +1 -0
  583. package/dist/src/utility/serialization/scene/animation.js +248 -0
  584. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  585. package/dist/src/utility/serialization/scene/batch.js +59 -0
  586. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  587. package/dist/src/utility/serialization/scene/camera.js +790 -0
  588. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  589. package/dist/src/utility/serialization/scene/common.js +222 -0
  590. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  591. package/dist/src/utility/serialization/scene/light.js +575 -0
  592. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  593. package/dist/src/utility/serialization/scene/material.js +1111 -0
  594. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  595. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  596. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  597. package/dist/src/utility/serialization/scene/misc.js +39 -0
  598. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  599. package/dist/src/utility/serialization/scene/node.js +451 -0
  600. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  601. package/dist/src/utility/serialization/scene/particle.js +425 -0
  602. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  603. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  604. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  605. package/dist/src/utility/serialization/scene/scene.js +704 -0
  606. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  607. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  608. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  609. package/dist/src/utility/serialization/scene/water.js +465 -0
  610. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  611. package/dist/src/utility/shprojector.js +297 -0
  612. package/dist/src/utility/shprojector.js.map +1 -0
  613. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  614. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  615. package/dist/src/utility/textures/gradientnoise.js +62 -0
  616. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  617. package/dist/src/utility/textures/randomnoise.js +41 -0
  618. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  619. package/dist/src/values.js +162 -0
  620. package/dist/src/values.js.map +1 -0
  621. package/dist/utility/aabbtree.js +15 -5
  622. package/dist/utility/aabbtree.js.map +1 -1
  623. package/dist/utility/blueprint/common/constants.js +851 -0
  624. package/dist/utility/blueprint/common/constants.js.map +1 -0
  625. package/dist/utility/blueprint/common/math.js +2045 -0
  626. package/dist/utility/blueprint/common/math.js.map +1 -0
  627. package/dist/utility/blueprint/common.js +7 -0
  628. package/dist/utility/blueprint/common.js.map +1 -0
  629. package/dist/utility/blueprint/material/common.js +7 -0
  630. package/dist/utility/blueprint/material/common.js.map +1 -0
  631. package/dist/utility/blueprint/material/func.js +521 -0
  632. package/dist/utility/blueprint/material/func.js.map +1 -0
  633. package/dist/utility/blueprint/material/inputs.js +1659 -0
  634. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  635. package/dist/utility/blueprint/material/ir.js +1311 -0
  636. package/dist/utility/blueprint/material/ir.js.map +1 -0
  637. package/dist/utility/blueprint/material/pbr.js +362 -0
  638. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  639. package/dist/utility/blueprint/material/texture.js +1099 -0
  640. package/dist/utility/blueprint/material/texture.js.map +1 -0
  641. package/dist/utility/blueprint/node.js +187 -0
  642. package/dist/utility/blueprint/node.js.map +1 -0
  643. package/dist/utility/bounding_volume.js +0 -1
  644. package/dist/utility/bounding_volume.js.map +1 -1
  645. package/dist/utility/debug.js +26 -0
  646. package/dist/utility/debug.js.map +1 -0
  647. package/dist/utility/draco/decoder.js +1 -1
  648. package/dist/utility/draco/decoder.js.map +1 -1
  649. package/dist/utility/misc.js +18 -6
  650. package/dist/utility/misc.js.map +1 -1
  651. package/dist/utility/panorama.js +8 -6
  652. package/dist/utility/panorama.js.map +1 -1
  653. package/dist/utility/pmrem.js +30 -18
  654. package/dist/utility/pmrem.js.map +1 -1
  655. package/dist/utility/rendermipmap.js +116 -0
  656. package/dist/utility/rendermipmap.js.map +1 -0
  657. package/dist/utility/serialization/blueprint/constants.js +255 -0
  658. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  660. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  662. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  663. package/dist/utility/serialization/json.js +402 -0
  664. package/dist/utility/serialization/json.js.map +1 -0
  665. package/dist/utility/serialization/manager.js +1176 -0
  666. package/dist/utility/serialization/manager.js.map +1 -0
  667. package/dist/utility/serialization/scene/animation.js +699 -0
  668. package/dist/utility/serialization/scene/animation.js.map +1 -0
  669. package/dist/utility/serialization/scene/batch.js +53 -0
  670. package/dist/utility/serialization/scene/batch.js.map +1 -0
  671. package/dist/utility/serialization/scene/camera.js +808 -0
  672. package/dist/utility/serialization/scene/camera.js.map +1 -0
  673. package/dist/utility/serialization/scene/common.js +224 -0
  674. package/dist/utility/serialization/scene/common.js.map +1 -0
  675. package/dist/utility/serialization/scene/light.js +589 -0
  676. package/dist/utility/serialization/scene/light.js.map +1 -0
  677. package/dist/utility/serialization/scene/material.js +942 -0
  678. package/dist/utility/serialization/scene/material.js.map +1 -0
  679. package/dist/utility/serialization/scene/mesh.js +374 -0
  680. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  681. package/dist/utility/serialization/scene/misc.js +39 -0
  682. package/dist/utility/serialization/scene/misc.js.map +1 -0
  683. package/dist/utility/serialization/scene/node.js +391 -0
  684. package/dist/utility/serialization/scene/node.js.map +1 -0
  685. package/dist/utility/serialization/scene/particle.js +425 -0
  686. package/dist/utility/serialization/scene/particle.js.map +1 -0
  687. package/dist/utility/serialization/scene/primitive.js +582 -0
  688. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  689. package/dist/utility/serialization/scene/scene.js +763 -0
  690. package/dist/utility/serialization/scene/scene.js.map +1 -0
  691. package/dist/utility/serialization/scene/terrain.js +495 -0
  692. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  693. package/dist/utility/serialization/scene/water.js +465 -0
  694. package/dist/utility/serialization/scene/water.js.map +1 -0
  695. package/dist/utility/shprojector.js +313 -0
  696. package/dist/utility/shprojector.js.map +1 -0
  697. package/dist/utility/textures/ggxlut.js +4 -5
  698. package/dist/utility/textures/ggxlut.js.map +1 -1
  699. package/dist/utility/textures/gradientnoise.js +2 -1
  700. package/dist/utility/textures/gradientnoise.js.map +1 -1
  701. package/dist/utility/textures/randomnoise.js +1 -0
  702. package/dist/utility/textures/randomnoise.js.map +1 -1
  703. package/dist/values.js +91 -4
  704. package/dist/values.js.map +1 -1
  705. package/package.json +29 -15
  706. package/dist/app.js.map +0 -1
  707. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  708. package/dist/input/inputmgr.js.map +0 -1
  709. package/dist/material/mixins/ggxlut.js.map +0 -1
  710. package/dist/posteffect/water.js +0 -508
  711. package/dist/posteffect/water.js.map +0 -1
  712. package/dist/render/oit.js +0 -16
  713. package/dist/render/oit.js.map +0 -1
  714. package/dist/render/scatteringlut.js +0 -634
  715. package/dist/render/scatteringlut.js.map +0 -1
  716. package/dist/render/watermesh.js +0 -193
  717. package/dist/render/watermesh.js.map +0 -1
  718. package/dist/render/wavegenerator.js +0 -8
  719. package/dist/render/wavegenerator.js.map +0 -1
  720. package/dist/scene/xform.js +0 -247
  721. package/dist/scene/xform.js.map +0 -1
  722. package/dist/utility/shprojection.js +0 -442
  723. package/dist/utility/shprojection.js.map +0 -1
@@ -1,10 +1,10 @@
1
- import { Vector4, PRNG, Vector2 } from '@zephyr3d/base';
2
- import { WaveGenerator } from './wavegenerator.js';
1
+ import { Disposable, Vector4, PRNG, Vector2 } from '@zephyr3d/base';
3
2
  import { Primitive } from './primitive.js';
4
- import { Application } from '../app.js';
5
3
  import '@zephyr3d/device';
6
4
  import { createProgramH0, createProgramHk, createProgramFFT2H, createProgramFFT2V, createProgramPostFFT2 } from '../shaders/water.js';
5
+ import '../shaders/atmosphere.js';
7
6
  import { fetchSampler } from '../utility/misc.js';
7
+ import { getDevice } from '../app/api.js';
8
8
 
9
9
  function getDefaultBuildParams() {
10
10
  return {
@@ -45,7 +45,7 @@ const THREAD_GROUP_SIZE = 16;
45
45
  /**
46
46
  * This class generates a 2D ocean field using the Fast Fourier Transform (FFT) algorithm.
47
47
  * @public
48
- */ class FFTWaveGenerator extends WaveGenerator {
48
+ */ class FFTWaveGenerator extends Disposable {
49
49
  static _globals = null;
50
50
  _useComputeShader;
51
51
  _h0BindGroup;
@@ -73,6 +73,7 @@ const THREAD_GROUP_SIZE = 16;
73
73
  _ifftTextures;
74
74
  _cascades;
75
75
  _paramsChanged;
76
+ _version;
76
77
  _resolutionChanged;
77
78
  _textureFormat;
78
79
  _h0TextureFormat;
@@ -83,7 +84,7 @@ const THREAD_GROUP_SIZE = 16;
83
84
  * @param params - Ocean field build parameters. If not provided, default parameters will be used.
84
85
  */ constructor(params){
85
86
  super();
86
- const device = Application.instance.device;
87
+ const device = getDevice();
87
88
  const renderTargetFloat16 = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;
88
89
  const maxDrawBuffers = /*device.type !== 'webgl' && */ renderTargetFloat16 ? device.getDeviceCaps().framebufferCaps.maxDrawBuffers : 0;
89
90
  this._textureFormat = 'rgba16f';
@@ -115,7 +116,7 @@ const THREAD_GROUP_SIZE = 16;
115
116
  postfft2Program2: this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, null, 2) : null,
116
117
  postfft2Program4: this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, null, 4) : null
117
118
  },
118
- quad: FFTWaveGenerator.createQuad(device),
119
+ quad: FFTWaveGenerator.createQuad(),
119
120
  noiseTextures: new Map(),
120
121
  butterflyTextures: new Map()
121
122
  };
@@ -172,12 +173,19 @@ const THREAD_GROUP_SIZE = 16;
172
173
  new Vector4(),
173
174
  new Vector4()
174
175
  ];
175
- this._updateRenderStates = Application.instance.device.createRenderStateSet();
176
+ this._updateRenderStates = getDevice().createRenderStateSet();
176
177
  this._updateRenderStates.useRasterizerState().setCullMode('none');
177
178
  this._updateRenderStates.useDepthState().enableTest(false).enableWrite(false);
178
- this._paramsChanged = true;
179
+ this._version = 0;
180
+ this.paramsChanged();
179
181
  }
180
182
  }
183
+ get version() {
184
+ return this._version;
185
+ }
186
+ clone() {
187
+ return new FFTWaveGenerator(this._params);
188
+ }
181
189
  /*
182
190
  get params() {
183
191
  return this._params;
@@ -190,6 +198,7 @@ const THREAD_GROUP_SIZE = 16;
190
198
  }
191
199
  */ paramsChanged() {
192
200
  this._paramsChanged = true;
201
+ this._version++;
193
202
  }
194
203
  /** Gets the wave alighment */ get alignment() {
195
204
  return this._params.alignment;
@@ -214,13 +223,19 @@ const THREAD_GROUP_SIZE = 16;
214
223
  return this._params.foamParams.x;
215
224
  }
216
225
  set foamWidth(val) {
217
- this._params.foamParams.x = val;
226
+ if (val !== this._params.foamParams.x) {
227
+ this._params.foamParams.x = val;
228
+ this.paramsChanged();
229
+ }
218
230
  }
219
231
  /** Gets the foam contrast */ get foamContrast() {
220
232
  return this._params.foamParams.y;
221
233
  }
222
234
  set foamContrast(val) {
223
- this._params.foamParams.y = val;
235
+ if (val !== this._params.foamParams.y) {
236
+ this._params.foamParams.y = val;
237
+ this.paramsChanged();
238
+ }
224
239
  }
225
240
  /** Gets the wave length for the specified cascade */ getWaveLength(cascade) {
226
241
  return this._params.cascades[cascade].size;
@@ -261,7 +276,7 @@ const THREAD_GROUP_SIZE = 16;
261
276
  this.paramsChanged();
262
277
  }
263
278
  }
264
- /** @internal */ static createQuad(device) {
279
+ /** @internal */ static createQuad() {
265
280
  const vertexData = new Float32Array([
266
281
  -1,
267
282
  -1,
@@ -293,26 +308,22 @@ const THREAD_GROUP_SIZE = 16;
293
308
  3
294
309
  ]);
295
310
  const prim = new Primitive();
296
- const vb = device.createInterleavedVertexBuffer([
311
+ prim.createAndSetVertexBuffer([
297
312
  'position_f32x3',
298
313
  'tex0_f32x2'
299
314
  ], vertexData);
300
- const ib = device.createIndexBuffer(indexData);
301
- prim.setVertexBuffer(vb);
302
- prim.setIndexBuffer(ib);
315
+ prim.createAndSetIndexBuffer(indexData);
303
316
  prim.primitiveType = 'triangle-list';
304
317
  prim.indexStart = 0;
305
- prim.indexCount = ib.length;
318
+ prim.indexCount = indexData.length;
306
319
  return prim;
307
320
  }
308
321
  /** @internal */ getButterflyTexture(size) {
309
- const device = Application.instance.device;
322
+ const device = getDevice();
310
323
  let tex = FFTWaveGenerator._globals.butterflyTextures.get(size);
311
324
  if (!tex) {
312
325
  tex = device.createTexture2D('rgba32f', Math.log2(size), size, {
313
- samplerOptions: {
314
- mipFilter: 'none'
315
- }
326
+ mipmapping: false
316
327
  });
317
328
  tex.name = `butterfly${size}`;
318
329
  tex.update(this.createButterflyTexture(size), 0, 0, tex.width, tex.height);
@@ -321,7 +332,7 @@ const THREAD_GROUP_SIZE = 16;
321
332
  return tex;
322
333
  }
323
334
  /** @internal */ generateInitialSpectrum() {
324
- const device = Application.instance.device;
335
+ const device = getDevice();
325
336
  const instanceData = this.getInstanceData();
326
337
  device.setProgram(FFTWaveGenerator._globals.programs.h0Program);
327
338
  device.setBindGroup(0, this._h0BindGroup);
@@ -348,13 +359,11 @@ const THREAD_GROUP_SIZE = 16;
348
359
  }
349
360
  }
350
361
  /** @internal */ getNoiseTexture(size, randomSeed) {
351
- const device = Application.instance.device;
362
+ const device = getDevice();
352
363
  let tex = FFTWaveGenerator._globals.noiseTextures.get(size);
353
364
  if (!tex) {
354
365
  tex = device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rg32f', size, size, {
355
- samplerOptions: {
356
- mipFilter: 'none'
357
- }
366
+ mipmapping: false
358
367
  });
359
368
  tex.name = `noiseTex${size}`;
360
369
  tex.update(this.getNoise2d(size, randomSeed, device.type === 'webgl'), 0, 0, size, size);
@@ -419,7 +428,7 @@ const THREAD_GROUP_SIZE = 16;
419
428
  }
420
429
  /** @internal */ getInstanceData() {
421
430
  if (!this._instanceData) {
422
- const device = Application.instance.device;
431
+ const device = getDevice();
423
432
  const h0Textures = this.createNTextures(device, this._h0TextureFormat, this._params.resolution, 3, 'Water-h0', false);
424
433
  const dataTextures = this.createNTextures(device, this._dataTextureFormat, this._params.resolution, 6, 'Water-data', true);
425
434
  const spectrumTextures = this.createNTextures(device, this._textureFormat, this._params.resolution, 6, 'Water-spectrum', true);
@@ -452,7 +461,8 @@ const THREAD_GROUP_SIZE = 16;
452
461
  addressU: 'repeat',
453
462
  addressV: 'repeat'
454
463
  },
455
- writable: !!this._useComputeShader
464
+ writable: !!this._useComputeShader,
465
+ mipmapping: false
456
466
  };
457
467
  if (this._useComputeShader) {
458
468
  const tex = device.createTexture2DArray(format, size, size, num, options);
@@ -469,7 +479,7 @@ const THREAD_GROUP_SIZE = 16;
469
479
  }
470
480
  }
471
481
  /** {@inheritDoc WaveGenerator.update} */ update(time) {
472
- const device = Application.instance.device;
482
+ const device = getDevice();
473
483
  device.pushDeviceStates();
474
484
  device.setRenderStates(this._updateRenderStates);
475
485
  if (this._resolutionChanged) {
@@ -495,6 +505,9 @@ const THREAD_GROUP_SIZE = 16;
495
505
  }
496
506
  device.popDeviceStates();
497
507
  }
508
+ /** {@inheritDoc WaveGenerator.needUpdate} */ needUpdate() {
509
+ return true;
510
+ }
498
511
  /** @internal */ disposeNTextures(texture) {
499
512
  if (Array.isArray(texture)) {
500
513
  texture.forEach((tex)=>tex.dispose());
@@ -526,7 +539,7 @@ const THREAD_GROUP_SIZE = 16;
526
539
  }
527
540
  }
528
541
  /** @internal */ generateSpectrum(time) {
529
- const device = Application.instance.device;
542
+ const device = getDevice();
530
543
  const instanceData = this.getInstanceData();
531
544
  const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');
532
545
  device.setProgram(FFTWaveGenerator._globals.programs.hkProgram);
@@ -550,7 +563,7 @@ const THREAD_GROUP_SIZE = 16;
550
563
  }
551
564
  }
552
565
  /** @internal */ generateSpectrumTwoPass(time) {
553
- const device = Application.instance.device;
566
+ const device = getDevice();
554
567
  const instanceData = this.getInstanceData();
555
568
  const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');
556
569
  device.setProgram(FFTWaveGenerator._globals.programs.hkProgram4);
@@ -578,7 +591,7 @@ const THREAD_GROUP_SIZE = 16;
578
591
  FFTWaveGenerator._globals.quad.draw();
579
592
  }
580
593
  /** @internal */ ifft2() {
581
- const device = Application.instance.device;
594
+ const device = getDevice();
582
595
  const instanceData = this.getInstanceData();
583
596
  const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');
584
597
  const phases = Math.log2(this._params.resolution);
@@ -680,7 +693,7 @@ const THREAD_GROUP_SIZE = 16;
680
693
  return bindGroup;
681
694
  }
682
695
  /** @internal */ ifft2TwoPass() {
683
- const device = Application.instance.device;
696
+ const device = getDevice();
684
697
  const instanceData = this.getInstanceData();
685
698
  const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');
686
699
  const phases = Math.log2(this._params.resolution);
@@ -771,7 +784,7 @@ const THREAD_GROUP_SIZE = 16;
771
784
  }
772
785
  }
773
786
  /** @internal */ postIfft2() {
774
- const device = Application.instance.device;
787
+ const device = getDevice();
775
788
  const instanceData = this.getInstanceData();
776
789
  const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');
777
790
  device.setProgram(FFTWaveGenerator._globals.programs.postfft2Program);
@@ -796,7 +809,7 @@ const THREAD_GROUP_SIZE = 16;
796
809
  }
797
810
  }
798
811
  /** @internal */ postIfft2TwoPass() {
799
- const device = Application.instance.device;
812
+ const device = getDevice();
800
813
  const instanceData = this.getInstanceData();
801
814
  const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');
802
815
  device.setFramebuffer(instanceData.postIfft2Framebuffer4);
@@ -822,22 +835,22 @@ const THREAD_GROUP_SIZE = 16;
822
835
  }
823
836
  FFTWaveGenerator._globals.quad.draw();
824
837
  }
825
- /** {@inheritDoc WaveGenerator.setupUniforms} */ setupUniforms(scope) {
838
+ /** {@inheritDoc WaveGenerator.setupUniforms} */ setupUniforms(scope, uniformGroup) {
826
839
  const pb = scope.$builder;
827
- scope.sizes = pb.vec4().uniform(0);
828
- scope.croppinesses = pb.vec4().uniform(0);
840
+ scope.sizes = pb.vec4().uniform(uniformGroup);
841
+ scope.croppinesses = pb.vec4().uniform(uniformGroup);
829
842
  if (this._useComputeShader) {
830
- scope.dataTexture = pb.tex2DArray().uniform(0);
843
+ scope.dataTexture = pb.tex2DArray().uniform(uniformGroup);
831
844
  } else {
832
- scope.dx_hy_dz_dxdz0 = pb.tex2D().uniform(0);
833
- scope.sx_sz_dxdx_dzdz0 = pb.tex2D().uniform(0);
834
- scope.dx_hy_dz_dxdz1 = pb.tex2D().uniform(0);
835
- scope.sx_sz_dxdx_dzdz1 = pb.tex2D().uniform(0);
836
- scope.dx_hy_dz_dxdz2 = pb.tex2D().uniform(0);
837
- scope.sx_sz_dxdx_dzdz2 = pb.tex2D().uniform(0);
845
+ scope.dx_hy_dz_dxdz0 = pb.tex2D().uniform(uniformGroup);
846
+ scope.sx_sz_dxdx_dzdz0 = pb.tex2D().uniform(uniformGroup);
847
+ scope.dx_hy_dz_dxdz1 = pb.tex2D().uniform(uniformGroup);
848
+ scope.sx_sz_dxdx_dzdz1 = pb.tex2D().uniform(uniformGroup);
849
+ scope.dx_hy_dz_dxdz2 = pb.tex2D().uniform(uniformGroup);
850
+ scope.sx_sz_dxdx_dzdz2 = pb.tex2D().uniform(uniformGroup);
838
851
  }
839
852
  if (pb.shaderKind === 'fragment') {
840
- scope.foamParams = pb.vec2().uniform(0);
853
+ scope.foamParams = pb.vec2().uniform(uniformGroup);
841
854
  }
842
855
  }
843
856
  /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */ calcVertexPositionAndNormal(scope, inPos, outPos, outNormal) {
@@ -867,7 +880,7 @@ const THREAD_GROUP_SIZE = 16;
867
880
  });
868
881
  scope.calcPositionAndNormal(inPos, outPos, outNormal);
869
882
  }
870
- /** {@inheritDoc WaveGenerator.calcFragmentNormal} */ calcFragmentNormal(scope, xz, vertexNormal) {
883
+ /** {@inheritDoc WaveGenerator.calcFragmentNormal} */ calcFragmentNormal(scope, xz, _vertexNormal) {
871
884
  const pb = scope.$builder;
872
885
  const that = this;
873
886
  pb.func('calcFragmentNormal', [
@@ -972,16 +985,17 @@ const THREAD_GROUP_SIZE = 16;
972
985
  bindGroup.setValue('sizes', this._sizes);
973
986
  bindGroup.setValue('croppinesses', this._croppinesses);
974
987
  }
975
- /** {@inheritDoc WaveGenerator.dispose} */ dispose() {
976
- this.disposeInstanceData();
977
- }
978
988
  /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */ calcClipmapTileAABB(minX, maxX, minZ, maxZ, y, outAABB) {
979
989
  const disturb = Math.max(Math.abs(this.wind.x), Math.abs(this.wind.y), 2);
980
990
  outAABB.minPoint.setXYZ(minX - 8 * disturb, y - 8 * disturb, minZ - 8 * disturb);
981
991
  outAABB.maxPoint.setXYZ(maxX + 8 * disturb, y + 8 * disturb, maxZ + 8 * disturb);
982
992
  }
983
993
  /** {@inheritDoc WaveGenerator.getHash} */ getHash() {
984
- return '';
994
+ return 'FFTWaveGenerator';
995
+ }
996
+ onDispose() {
997
+ super.onDispose();
998
+ this.disposeInstanceData();
985
999
  }
986
1000
  }
987
1001
 
@@ -1 +1 @@
1
- {"version":3,"file":"fft_wavegenerator.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fft_wavegenerator.js","sources":["../../src/render/fft_wavegenerator.ts"],"sourcesContent":["import type { AABB } from '@zephyr3d/base';\r\nimport { Disposable, PRNG, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCreationOptions,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from './primitive';\r\nimport {\r\n createProgramFFT2H,\r\n createProgramFFT2V,\r\n createProgramH0,\r\n createProgramHk,\r\n createProgramPostFFT2\r\n} from '../shaders';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype OceanFieldCascade = {\r\n /** The size of simulated patch of field. (in meters) */\r\n size: number;\r\n /** How \"croppy\" this pattern would be */\r\n croppiness: number;\r\n /** Strength factor for this pattern */\r\n strength: number;\r\n /** Min wave length. Kind of spectrum filter. (Waves less that this thresold are not involved in spectrum generation) */\r\n minWave: number;\r\n /** Max wave length. Kind of spectrum filter. */\r\n maxWave: number;\r\n};\r\n\r\ntype OceanFieldBuildParams = {\r\n /** Size of generated texture. Must be power of 2 */\r\n resolution: number;\r\n /** Ocean field sub-pattern options. */\r\n cascades: [OceanFieldCascade, OceanFieldCascade, OceanFieldCascade];\r\n /** Wind vector. Module correspond to wind force. */\r\n wind: Vector2;\r\n /** Parameter for waves motion. 0 means no wave motion */\r\n alignment: number;\r\n /** Foam parameters */\r\n foamParams: Vector2;\r\n /** Seed of random generator */\r\n randomSeed: number;\r\n};\r\n\r\nfunction getDefaultBuildParams(): OceanFieldBuildParams {\r\n return {\r\n cascades: [\r\n {\r\n size: 400.0,\r\n strength: 0.4,\r\n croppiness: -1.5,\r\n minWave: 0,\r\n maxWave: 100\r\n },\r\n {\r\n size: 100.0,\r\n strength: 0.4,\r\n croppiness: -1.2,\r\n minWave: 0,\r\n maxWave: 100\r\n },\r\n {\r\n size: 15,\r\n strength: 0.2,\r\n croppiness: -0.5,\r\n minWave: 0,\r\n maxWave: 7\r\n }\r\n ],\r\n resolution: 256,\r\n wind: new Vector2(2, 2),\r\n alignment: 1,\r\n foamParams: new Vector2(1.2, 7.2),\r\n randomSeed: 0\r\n };\r\n}\r\n\r\ntype Programs = {\r\n h0Program: GPUProgram;\r\n hkProgram: GPUProgram;\r\n hkProgram2: GPUProgram;\r\n hkProgram4: GPUProgram;\r\n fft2hProgram: GPUProgram;\r\n fft2hProgram2: GPUProgram;\r\n fft2hProgram4: GPUProgram;\r\n fft2vProgram: GPUProgram;\r\n fft2vProgram2: GPUProgram;\r\n fft2vProgram4: GPUProgram;\r\n postfft2Program: GPUProgram;\r\n postfft2Program2: GPUProgram;\r\n postfft2Program4: GPUProgram;\r\n};\r\n\r\ntype Globales = {\r\n programs: Programs;\r\n quad: Primitive;\r\n noiseTextures: Map<number, Texture2D>;\r\n butterflyTextures: Map<number, Texture2D>;\r\n};\r\n\r\ntype WaterInstanceData = {\r\n h0Framebuffer: FrameBuffer;\r\n h0Textures: Texture2D[] | Texture2DArray;\r\n spectrumFramebuffer: FrameBuffer;\r\n spectrumFramebuffer2: FrameBuffer;\r\n spectrumFramebuffer4: FrameBuffer;\r\n spectrumTextures: Texture2D[] | Texture2DArray;\r\n pingpongFramebuffer: FrameBuffer;\r\n pingpongFramebuffer2: FrameBuffer;\r\n pingpongFramebuffer4: FrameBuffer;\r\n pingpongTextures: Texture2D[] | Texture2DArray;\r\n postIfft2Framebuffer: FrameBuffer;\r\n postIfft2Framebuffer2: FrameBuffer;\r\n postIfft2Framebuffer4: FrameBuffer;\r\n dataTextures: Texture2D[] | Texture2DArray;\r\n};\r\n\r\nconst RENDER_NONE = 0;\r\nconst RENDER_NORMAL = 1;\r\nconst RENDER_TWO_PASS = 2;\r\n\r\nconst THREAD_GROUP_SIZE = 16;\r\n\r\n/**\r\n * This class generates a 2D ocean field using the Fast Fourier Transform (FFT) algorithm.\r\n * @public\r\n */\r\nexport class FFTWaveGenerator extends Disposable implements WaveGenerator {\r\n private static _globals: Globales = null;\r\n private readonly _useComputeShader: boolean;\r\n private readonly _h0BindGroup: BindGroup;\r\n private readonly _hkBindGroup: BindGroup;\r\n private readonly _hkBindGroup2: BindGroup;\r\n private readonly _hkBindGroup4: BindGroup;\r\n private readonly _fft2hBindGroup: BindGroup;\r\n private readonly _fft2vBindGroup: BindGroup;\r\n private readonly _fft2hBindGroup2Used: BindGroup[][];\r\n private readonly _fft2hBindGroup2Free: BindGroup[][];\r\n private readonly _fft2hBindGroup4Used: BindGroup[][];\r\n private readonly _fft2hBindGroup4Free: BindGroup[][];\r\n private readonly _fft2vBindGroup2Used: BindGroup[][];\r\n private readonly _fft2vBindGroup2Free: BindGroup[][];\r\n private readonly _fft2vBindGroup4Used: BindGroup[][];\r\n private readonly _fft2vBindGroup4Free: BindGroup[][];\r\n private readonly _postfft2BindGroup: BindGroup;\r\n private readonly _postfft2BindGroup2: BindGroup;\r\n private readonly _postfft2BindGroup4: BindGroup;\r\n private readonly _updateRenderStates: RenderStateSet;\r\n private _sizes: Vector4;\r\n private _croppinesses: Vector4;\r\n private readonly _params: OceanFieldBuildParams;\r\n private _instanceData: WaterInstanceData;\r\n private _ifftTextures: Texture2D[] | Texture2DArray;\r\n private readonly _cascades: Vector4[];\r\n private _paramsChanged: boolean;\r\n private _version: number;\r\n private _resolutionChanged: boolean;\r\n private readonly _textureFormat: TextureFormat;\r\n private readonly _h0TextureFormat: TextureFormat;\r\n private readonly _dataTextureFormat: TextureFormat;\r\n private readonly _renderMode: number;\r\n /**\r\n * Create a new instance of the FFTWaveGenerator class.\r\n * @param params - Ocean field build parameters. If not provided, default parameters will be used.\r\n */\r\n constructor(params?: OceanFieldBuildParams) {\r\n super();\r\n const device = getDevice();\r\n const renderTargetFloat16 = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;\r\n const maxDrawBuffers = /*device.type !== 'webgl' && */ renderTargetFloat16\r\n ? device.getDeviceCaps().framebufferCaps.maxDrawBuffers\r\n : 0;\r\n this._textureFormat = 'rgba16f';\r\n this._h0TextureFormat = 'rgba16f';\r\n this._dataTextureFormat = 'rgba16f';\r\n this._useComputeShader = device.type === 'webgpu';\r\n const maxSampleBytes = device.getDeviceCaps().framebufferCaps.maxColorAttachmentBytesPerSample;\r\n if (maxDrawBuffers === 0) {\r\n this._renderMode = RENDER_NONE;\r\n } else if (this._useComputeShader || maxSampleBytes >= 48) {\r\n this._renderMode = RENDER_NORMAL;\r\n } else {\r\n this._renderMode = RENDER_TWO_PASS;\r\n }\r\n if (this._renderMode !== RENDER_NONE) {\r\n FFTWaveGenerator._globals = FFTWaveGenerator._globals ?? {\r\n programs: {\r\n h0Program: createProgramH0(this._useComputeShader, THREAD_GROUP_SIZE, this._h0TextureFormat),\r\n hkProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramHk(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n hkProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, null, 2) : null,\r\n hkProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, null, 4) : null,\r\n fft2hProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2H(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2hProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, null, 2) : null,\r\n fft2hProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, null, 4) : null,\r\n fft2vProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2V(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2vProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, null, 2) : null,\r\n fft2vProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, null, 4) : null,\r\n postfft2Program:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramPostFFT2(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n postfft2Program2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, null, 2) : null,\r\n postfft2Program4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, null, 4) : null\r\n },\r\n quad: FFTWaveGenerator.createQuad(),\r\n noiseTextures: new Map(),\r\n butterflyTextures: new Map()\r\n };\r\n this._params = params ?? getDefaultBuildParams();\r\n const programs = FFTWaveGenerator._globals.programs;\r\n this._h0BindGroup = device.createBindGroup(programs.h0Program.bindGroupLayouts[0]);\r\n this._hkBindGroup = programs.hkProgram\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.hkProgram.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup2 = programs.hkProgram2\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.hkProgram2.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup4 = programs.hkProgram4\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.hkProgram4.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup = programs.fft2hProgram\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.fft2hProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2vBindGroup = programs.fft2vProgram\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.fft2vProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup2Used = [[], []];\r\n this._fft2hBindGroup2Free = [[], []];\r\n this._fft2hBindGroup4Used = [[], []];\r\n this._fft2hBindGroup4Free = [[], []];\r\n this._fft2vBindGroup2Used = [[], []];\r\n this._fft2vBindGroup2Free = [[], []];\r\n this._fft2vBindGroup4Used = [[], []];\r\n this._fft2vBindGroup4Free = [[], []];\r\n this._postfft2BindGroup = programs.postfft2Program\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.postfft2Program.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup2 = programs.postfft2Program2\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.postfft2Program2.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup4 = programs.postfft2Program4\r\n ? device.createBindGroup(FFTWaveGenerator._globals.programs.postfft2Program4.bindGroupLayouts[0])\r\n : null;\r\n this._instanceData = null;\r\n this._ifftTextures = null;\r\n this._sizes = new Vector4();\r\n this._croppinesses = new Vector4();\r\n this._cascades = [new Vector4(), new Vector4(), new Vector4(), new Vector4()];\r\n this._updateRenderStates = getDevice().createRenderStateSet();\r\n this._updateRenderStates.useRasterizerState().setCullMode('none');\r\n this._updateRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._version = 0;\r\n this.paramsChanged();\r\n }\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n clone(): this {\r\n return new FFTWaveGenerator(this._params) as this;\r\n }\r\n /*\r\n get params() {\r\n return this._params;\r\n }\r\n set params(val: OceanFieldBuildParams) {\r\n if (val && val !== this._params) {\r\n this._params = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n */\r\n private paramsChanged() {\r\n this._paramsChanged = true;\r\n this._version++;\r\n }\r\n /** Gets the wave alighment */\r\n get alignment(): number {\r\n return this._params.alignment;\r\n }\r\n set alignment(val: number) {\r\n if (this._params.alignment !== val) {\r\n this._params.alignment = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wind vector */\r\n get wind(): Vector2 {\r\n return this._params.wind;\r\n }\r\n set wind(val: Vector2) {\r\n if (val !== this._params.wind && (val.x !== this._params.wind.x || val.y !== this._params.wind.y)) {\r\n this._params.wind.x = val.x;\r\n this._params.wind.y = val.y;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam width */\r\n get foamWidth(): number {\r\n return this._params.foamParams.x;\r\n }\r\n set foamWidth(val: number) {\r\n if (val !== this._params.foamParams.x) {\r\n this._params.foamParams.x = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam contrast */\r\n get foamContrast(): number {\r\n return this._params.foamParams.y;\r\n }\r\n set foamContrast(val: number) {\r\n if (val !== this._params.foamParams.y) {\r\n this._params.foamParams.y = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave length for the specified cascade */\r\n getWaveLength(cascade: number) {\r\n return this._params.cascades[cascade].size;\r\n }\r\n /**\r\n * Sets the wave length for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param length - The new wave length for the specified cascade\r\n */\r\n setWaveLength(cascade: number, length: number) {\r\n if (this._params.cascades[cascade].size !== length) {\r\n this._params.cascades[cascade].size = length;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave strength for the specified cascade */\r\n getWaveStrength(cascade: number) {\r\n return this._params.cascades[cascade].strength;\r\n }\r\n /**\r\n * Sets the wave strength for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param strength - The new wave strength for the specified cascade\r\n */\r\n setWaveStrength(cascade: number, strength: number) {\r\n if (this._params.cascades[cascade].strength !== strength) {\r\n this._params.cascades[cascade].strength = strength;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave croppiness for the specified cascade */\r\n getWaveCroppiness(cascade: number) {\r\n return this._params.cascades[cascade].croppiness;\r\n }\r\n /**\r\n * Sets the wave croppiness for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param croppiness - The new wave croppiness for the specified cascade\r\n */\r\n setWaveCroppiness(cascade: number, croppiness: number) {\r\n if (this._params.cascades[cascade].croppiness !== croppiness) {\r\n this._params.cascades[cascade].croppiness = croppiness;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** @internal */\r\n private static createQuad(): Primitive {\r\n const vertexData = new Float32Array([\r\n -1, -1, 0, 0.0, 0.0, 1, -1, 0, 1.0, 0.0, 1, 1, 0, 1.0, 1.0, -1, 1, 0, 0.0, 1.0\r\n ]);\r\n const indexData = new Uint32Array([0, 1, 2, 0, 2, 3]);\r\n const prim = new Primitive();\r\n prim.createAndSetVertexBuffer(['position_f32x3', 'tex0_f32x2'], vertexData);\r\n prim.createAndSetIndexBuffer(indexData);\r\n prim.primitiveType = 'triangle-list';\r\n prim.indexStart = 0;\r\n prim.indexCount = indexData.length;\r\n return prim;\r\n }\r\n /** @internal */\r\n private getButterflyTexture(size: number) {\r\n const device = getDevice();\r\n let tex = FFTWaveGenerator._globals.butterflyTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D('rgba32f', Math.log2(size), size, {\r\n mipmapping: false\r\n });\r\n tex.name = `butterfly${size}`;\r\n tex.update(this.createButterflyTexture(size), 0, 0, tex.width, tex.height);\r\n FFTWaveGenerator._globals.butterflyTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private generateInitialSpectrum(): void {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n device.setProgram(FFTWaveGenerator._globals.programs.h0Program);\r\n device.setBindGroup(0, this._h0BindGroup);\r\n this._h0BindGroup.setTexture(\r\n 'noise',\r\n this.getNoiseTexture(this._params.resolution, this._params.randomSeed),\r\n fetchSampler('repeat_nearest_nomip')\r\n );\r\n this._h0BindGroup.setValue('resolution', this._params.resolution);\r\n this._h0BindGroup.setValue('wind', this._params.wind);\r\n this._h0BindGroup.setValue('alignment', this._params.alignment);\r\n for (let i = 0; i < this._params.cascades.length; i++) {\r\n this._cascades[i].x = this._params.cascades[i].size;\r\n this._cascades[i].y =\r\n (this._params.cascades[i].strength * 0.081) /\r\n (this._params.cascades[i].size * this._params.cascades[i].size);\r\n this._cascades[i].z = (2 * Math.PI) / this._params.cascades[i].maxWave;\r\n this._cascades[i].w = (2 * Math.PI) / this._params.cascades[i].minWave;\r\n }\r\n this._h0BindGroup.setValue('cascade0', this._cascades[0]);\r\n this._h0BindGroup.setValue('cascade1', this._cascades[1]);\r\n this._h0BindGroup.setValue('cascade2', this._cascades[2]);\r\n if (device.type === 'webgpu') {\r\n this._h0BindGroup.setTexture('spectrum', instanceData.h0Textures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(instanceData.h0Framebuffer);\r\n device.clearFrameBuffer(Vector4.zero(), null, null);\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private getNoiseTexture(size: number, randomSeed: number): Texture2D {\r\n const device = getDevice();\r\n let tex = FFTWaveGenerator._globals.noiseTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rg32f', size, size, {\r\n mipmapping: false\r\n });\r\n tex.name = `noiseTex${size}`;\r\n tex.update(this.getNoise2d(size, randomSeed, device.type === 'webgl'), 0, 0, size, size);\r\n FFTWaveGenerator._globals.noiseTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private getNoise2d(size: number, randomSeed: number, rgba: boolean) {\r\n const rand = new PRNG(randomSeed);\r\n if (rgba) {\r\n const array = new Float32Array(size * size * 4);\r\n for (let i = 0; i < size * size; i++) {\r\n array[i * 4 + 0] = rand.get();\r\n array[i * 4 + 1] = rand.get();\r\n }\r\n return array;\r\n } else {\r\n return Float32Array.from([...Array(size * size * 2)].map(() => rand.get()));\r\n }\r\n }\r\n /** @internal */\r\n private reverseBits(v: number, width: number): number {\r\n return parseInt(v.toString(2).padStart(width, '0').split('').reverse().join(''), 2);\r\n }\r\n /** @internal */\r\n private createButterflyTexture(size: number): Float32Array<ArrayBuffer> {\r\n const width = Math.log2(size);\r\n const height = size;\r\n const texture = new Float32Array(width * height * 4);\r\n const w = (2.0 * Math.PI) / size;\r\n const bitReversed = [...Array(size).keys()].map((v) => this.reverseBits(v, width));\r\n\r\n for (let j = 0; j < width; j++) {\r\n for (let i = 0; i < height; i++) {\r\n const k = i * (size >> (j + 1));\r\n const c = Math.cos(k * w);\r\n const s = Math.sin(k * w);\r\n const span = 2 ** j;\r\n const wing = i % 2 ** (j + 1) < span ? 0 : 1; // 0 - top wing, 1 - bottom wing\r\n const texel = new Vector4();\r\n if (j === 0) {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, bitReversed[i], bitReversed[i + 1]);\r\n } else {\r\n texel.setXYZW(c, s, bitReversed[i - 1], bitReversed[i]);\r\n }\r\n } else {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, i, i + span);\r\n } else {\r\n texel.setXYZW(c, s, i - span, i);\r\n }\r\n }\r\n\r\n texture[(width * i + j) * 4] = texel[0];\r\n texture[(width * i + j) * 4 + 1] = texel[1];\r\n texture[(width * i + j) * 4 + 2] = texel[2];\r\n texture[(width * i + j) * 4 + 3] = texel[3];\r\n }\r\n }\r\n return texture;\r\n }\r\n /** @internal */\r\n private getInstanceData(): WaterInstanceData {\r\n if (!this._instanceData) {\r\n const device = getDevice();\r\n const h0Textures = this.createNTextures(\r\n device,\r\n this._h0TextureFormat,\r\n this._params.resolution,\r\n 3,\r\n 'Water-h0',\r\n false\r\n );\r\n const dataTextures = this.createNTextures(\r\n device,\r\n this._dataTextureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-data',\r\n true\r\n );\r\n const spectrumTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-spectrum',\r\n true\r\n );\r\n const pingpongTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-pingpong',\r\n false\r\n );\r\n this._instanceData = {\r\n dataTextures,\r\n h0Textures: h0Textures,\r\n pingpongTextures: pingpongTextures,\r\n spectrumTextures: spectrumTextures,\r\n h0Framebuffer: this._useComputeShader\r\n ? null\r\n : device.createFrameBuffer(h0Textures as Texture2D[], null),\r\n spectrumFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(spectrumTextures as Texture2D[], null)\r\n : null,\r\n spectrumFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n spectrumFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n pingpongFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(pingpongTextures as Texture2D[], null)\r\n : null,\r\n pingpongFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n pingpongFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n postIfft2Framebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(dataTextures as Texture2D[], null)\r\n : null,\r\n postIfft2Framebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n postIfft2Framebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(0, 4), null)\r\n : null\r\n };\r\n }\r\n return this._instanceData;\r\n }\r\n /** @internal */\r\n private createNTextures(\r\n device: AbstractDevice,\r\n format: TextureFormat,\r\n size: number,\r\n num: number,\r\n name: string,\r\n linear: boolean\r\n ): Texture2D[] | Texture2DArray {\r\n const options: TextureCreationOptions = {\r\n samplerOptions: {\r\n minFilter: linear ? 'linear' : 'nearest',\r\n magFilter: linear ? 'linear' : 'nearest',\r\n mipFilter: 'none',\r\n addressU: 'repeat',\r\n addressV: 'repeat'\r\n },\r\n writable: !!this._useComputeShader,\r\n mipmapping: false\r\n };\r\n if (this._useComputeShader) {\r\n const tex = device.createTexture2DArray(format, size, size, num, options);\r\n tex.name = name;\r\n return tex;\r\n } else {\r\n return Array.from({ length: num }).map((val, index) => {\r\n const tex = device.createTexture2D(format, size, size, options);\r\n tex.name = `${name}-${index}`;\r\n return tex;\r\n });\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update(time: number): void {\r\n const device = getDevice();\r\n device.pushDeviceStates();\r\n device.setRenderStates(this._updateRenderStates);\r\n if (this._resolutionChanged) {\r\n this.disposeInstanceData();\r\n }\r\n if (this._paramsChanged) {\r\n this.generateInitialSpectrum();\r\n }\r\n this._resolutionChanged = false;\r\n this._paramsChanged = false;\r\n for (let i = 0; i < 3; i++) {\r\n this._sizes[i] = this._params.cascades[i].size;\r\n this._croppinesses[i] = this._params.cascades[i].croppiness;\r\n }\r\n if (this._renderMode === RENDER_NORMAL) {\r\n this.generateSpectrum(time);\r\n this.ifft2();\r\n this.postIfft2();\r\n } else {\r\n this.generateSpectrumTwoPass(time);\r\n this.ifft2TwoPass();\r\n this.postIfft2TwoPass();\r\n }\r\n device.popDeviceStates();\r\n }\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return true;\r\n }\r\n /** @internal */\r\n private disposeNTextures(texture: Texture2D[] | Texture2DArray) {\r\n if (Array.isArray(texture)) {\r\n texture.forEach((tex) => tex.dispose());\r\n } else if (texture) {\r\n texture.dispose();\r\n }\r\n }\r\n /** @internal */\r\n private disposeInstanceData(): void {\r\n if (this._instanceData) {\r\n this.disposeNTextures(this._instanceData.dataTextures);\r\n this._instanceData.dataTextures = null;\r\n this.disposeNTextures(this._instanceData.h0Textures);\r\n this._instanceData.h0Textures = null;\r\n this.disposeNTextures(this._instanceData.pingpongTextures);\r\n this._instanceData.pingpongTextures = null;\r\n this.disposeNTextures(this._instanceData.spectrumTextures);\r\n this._instanceData.spectrumTextures = null;\r\n this._instanceData.h0Framebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer2?.dispose();\r\n this._instanceData.pingpongFramebuffer4?.dispose();\r\n this._instanceData.spectrumFramebuffer?.dispose();\r\n this._instanceData.spectrumFramebuffer2?.dispose();\r\n this._instanceData.spectrumFramebuffer4?.dispose();\r\n this._instanceData.postIfft2Framebuffer?.dispose();\r\n this._instanceData.postIfft2Framebuffer2?.dispose();\r\n this._instanceData.postIfft2Framebuffer4?.dispose();\r\n this._instanceData = null;\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrum(time: number): void {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals.programs.hkProgram);\r\n device.setBindGroup(0, this._hkBindGroup);\r\n this._hkBindGroup.setValue('t', time);\r\n this._hkBindGroup.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup.setValue('sizes', this._sizes);\r\n if (this._useComputeShader) {\r\n this._hkBindGroup.setTexture('h0Texture', instanceData.h0Textures as Texture2DArray);\r\n this._hkBindGroup.setTexture('spectrum', instanceData.spectrumTextures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n this._hkBindGroup.setTexture('h0Texture0', instanceData.h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup.setTexture('h0Texture1', instanceData.h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup.setTexture('h0Texture2', instanceData.h0Textures[2], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup.setValue(\r\n 'h0TexSize',\r\n new Vector2(instanceData.h0Textures[0].width, instanceData.h0Textures[0].height)\r\n );\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer);\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrumTwoPass(time: number): void {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals.programs.hkProgram4);\r\n device.setBindGroup(0, this._hkBindGroup4);\r\n this._hkBindGroup4.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup4.setValue('sizes', this._sizes);\r\n this._hkBindGroup4.setTexture('h0Texture0', instanceData.h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup4.setTexture('h0Texture1', instanceData.h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup4.setValue('t', time);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup4.setValue(\r\n 'h0TexSize',\r\n new Vector2(instanceData.h0Textures[0].width, instanceData.h0Textures[0].height)\r\n );\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer4);\r\n FFTWaveGenerator._globals.quad.draw();\r\n\r\n device.setProgram(FFTWaveGenerator._globals.programs.hkProgram2);\r\n device.setBindGroup(0, this._hkBindGroup2);\r\n this._hkBindGroup2.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup2.setValue('sizes', this._sizes);\r\n this._hkBindGroup2.setTexture('h0Texture2', instanceData.h0Textures[2], nearestRepeatSampler);\r\n this._hkBindGroup2.setValue('t', time);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup2.setValue(\r\n 'h0TexSize',\r\n new Vector2(instanceData.h0Textures[0].width, instanceData.h0Textures[0].height)\r\n );\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer2);\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n /** @internal */\r\n private ifft2(): void {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures: [Texture2D[] | Texture2DArray, Texture2D[] | Texture2DArray] = [\r\n instanceData.spectrumTextures,\r\n instanceData.pingpongTextures\r\n ];\r\n const pingPongFramebuffers: [FrameBuffer | Texture2DArray, FrameBuffer | Texture2DArray] = this\r\n ._useComputeShader\r\n ? [instanceData.pingpongTextures as Texture2DArray, instanceData.spectrumTextures as Texture2DArray]\r\n : [instanceData.pingpongFramebuffer, instanceData.spectrumFramebuffer];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n let pingPong = 0;\r\n\r\n // horizontal ifft\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2hProgram);\r\n device.setBindGroup(0, this._fft2hBindGroup);\r\n this._fft2hBindGroup.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2hBindGroup.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2hBindGroup.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2hBindGroup.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2hBindGroup.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n this._fft2hBindGroup.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._fft2hBindGroup.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n pingPong = 1 - pingPong; //(pingPong + 1) % 2;\r\n }\r\n // vertical ifft\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2vProgram);\r\n device.setBindGroup(0, this._fft2vBindGroup);\r\n this._fft2vBindGroup.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2vBindGroup.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2vBindGroup.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2vBindGroup.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2vBindGroup.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n this._fft2vBindGroup.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._fft2vBindGroup.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n pingPong = 1 - pingPong;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup2(device: AbstractDevice, pingpong: number): BindGroup {\r\n let bindGroup = this._fft2hBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals.programs.fft2hProgram2.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup4(device: AbstractDevice, pingpong: number): BindGroup {\r\n let bindGroup = this._fft2hBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals.programs.fft2hProgram4.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup2(device: AbstractDevice, pingpong: number): BindGroup {\r\n let bindGroup = this._fft2vBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals.programs.fft2vProgram2.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup4(device: AbstractDevice, pingpong: number): BindGroup {\r\n let bindGroup = this._fft2vBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals.programs.fft2vProgram4.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private ifft2TwoPass(): void {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures = [\r\n instanceData.spectrumTextures as Texture2D[],\r\n instanceData.pingpongTextures as Texture2D[]\r\n ];\r\n const pingPongFramebuffers4: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer4,\r\n instanceData.spectrumFramebuffer4\r\n ];\r\n const pingPongFramebuffers2: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer2,\r\n instanceData.spectrumFramebuffer2\r\n ];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n // horizontal ifft\r\n let pingPong = 0;\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2hProgram4);\r\n const fft2hBindGroup4 = this.getFFT2hBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup4);\r\n fft2hBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup4.setValue('phase', phase);\r\n fft2hBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2hBindGroup4.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2hProgram2);\r\n const fft2hBindGroup2 = this.getFFT2hBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup2);\r\n fft2hBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup2.setValue('phase', phase);\r\n fft2hBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2hBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2hBindGroup2.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n\r\n // vertical ifft\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2vProgram4);\r\n const fft2vBindGroup4 = this.getFFT2vBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup4);\r\n fft2vBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup4.setValue('phase', phase);\r\n fft2vBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2vBindGroup4.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals.programs.fft2vProgram2);\r\n const fft2vBindGroup2 = this.getFFT2vBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup2);\r\n fft2vBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup2.setValue('phase', phase);\r\n fft2vBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2vBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2vBindGroup2.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n for (let i = 0; i < 2; i++) {\r\n this._fft2hBindGroup2Used[i].push(...this._fft2hBindGroup2Free[i]);\r\n this._fft2hBindGroup2Free[i].length = 0;\r\n this._fft2hBindGroup4Used[i].push(...this._fft2hBindGroup4Free[i]);\r\n this._fft2hBindGroup4Free[i].length = 0;\r\n this._fft2vBindGroup2Used[i].push(...this._fft2vBindGroup2Free[i]);\r\n this._fft2vBindGroup2Free[i].length = 0;\r\n this._fft2vBindGroup4Used[i].push(...this._fft2vBindGroup4Free[i]);\r\n this._fft2vBindGroup4Free[i].length = 0;\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2(): void {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals.programs.postfft2Program);\r\n device.setBindGroup(0, this._postfft2BindGroup);\r\n this._postfft2BindGroup.setValue('N2', this._params.resolution * this._params.resolution);\r\n if (this._useComputeShader) {\r\n this._postfft2BindGroup.setTexture('output', instanceData.dataTextures as Texture2DArray);\r\n this._postfft2BindGroup.setTexture('ifft', this._ifftTextures as Texture2DArray, nearestRepeatSampler);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer);\r\n this._postfft2BindGroup.setTexture('ifft0', this._ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft1', this._ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft2', this._ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft3', this._ifftTextures[3], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft4', this._ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup.setTexture('ifft5', this._ifftTextures[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup.setValue(\r\n 'ifftTexSize',\r\n new Vector2(this._ifftTextures[0].width, this._ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2TwoPass(): void {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer4);\r\n device.setProgram(FFTWaveGenerator._globals.programs.postfft2Program4);\r\n device.setBindGroup(0, this._postfft2BindGroup4);\r\n this._postfft2BindGroup4.setValue('N2', this._params.resolution * this._params.resolution);\r\n this._postfft2BindGroup4.setTexture('ifft0', this._ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup4.setTexture('ifft1', this._ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup4.setTexture('ifft2', this._ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup4.setTexture('ifft3', this._ifftTextures[3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup4.setValue(\r\n 'ifftTexSize',\r\n new Vector2(this._ifftTextures[0].width, this._ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer2);\r\n device.setProgram(FFTWaveGenerator._globals.programs.postfft2Program2);\r\n device.setBindGroup(0, this._postfft2BindGroup2);\r\n this._postfft2BindGroup2.setValue('N2', this._params.resolution * this._params.resolution);\r\n this._postfft2BindGroup2.setTexture('ifft4', this._ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup2.setTexture('ifft5', this._ifftTextures[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup2.setValue(\r\n 'ifftTexSize',\r\n new Vector2(this._ifftTextures[0].width, this._ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals.quad.draw();\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number): void {\r\n const pb = scope.$builder;\r\n scope.sizes = pb.vec4().uniform(uniformGroup);\r\n scope.croppinesses = pb.vec4().uniform(uniformGroup);\r\n if (this._useComputeShader) {\r\n scope.dataTexture = pb.tex2DArray().uniform(uniformGroup);\r\n } else {\r\n scope.dx_hy_dz_dxdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz2 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz2 = pb.tex2D().uniform(uniformGroup);\r\n }\r\n if (pb.shaderKind === 'fragment') {\r\n scope.foamParams = pb.vec2().uniform(uniformGroup);\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ): void {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.$l.xz = this.inPos.xz;\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l.a = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n } else {\r\n this.$l.a = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n }\r\n this.$l.displacement = pb.add(this.a, this.b, this.c);\r\n this.outPos = pb.add(this.inPos, this.displacement);\r\n this.outNormal = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n this.$return(this.normal);\r\n });\r\n return scope.calcFragmentNormal(xz);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(scope: PBInsideFunctionScope, xz: PBShaderExp): PBShaderExp {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('jacobian', [pb.float('dxdx'), pb.float('dxdz'), pb.float('dzdz')], function () {\r\n this.$l.Jxx = pb.add(this.dxdx, 1);\r\n this.$l.Jxz = this.dxdz;\r\n this.$l.Jzz = pb.add(this.dzdz, 1);\r\n this.$return(pb.vec4(this.Jxx, this.Jxz, this.Jxz, this.Jzz));\r\n });\r\n pb.func('det', [pb.vec4('jacobian')], function () {\r\n this.$return(\r\n pb.sub(pb.mul(this.jacobian.x, this.jacobian.w), pb.mul(this.jacobian.y, this.jacobian.z))\r\n );\r\n });\r\n pb.func('calcNormalAndFoam', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (that._useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n\r\n // foam\r\n this.$l.dxdx_dzdz0 = this._sx_sz_dxdx_dzdz0.zw;\r\n this.$l.dxdx_dzdz1 = this._sx_sz_dxdx_dzdz1.zw;\r\n this.$l.dxdx_dzdz2 = this._sx_sz_dxdx_dzdz2.zw;\r\n if (that._useComputeShader) {\r\n this.$l.dxdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).w;\r\n this.$l.dxdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).w;\r\n this.$l.dxdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).w;\r\n } else {\r\n this.$l.dxdz0 = pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).w;\r\n this.$l.dxdz1 = pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).w;\r\n this.$l.dxdz2 = pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).w;\r\n }\r\n this.$l.dxdz = pb.add(\r\n pb.mul(this.dxdz0, this.croppinesses.x),\r\n pb.mul(this.dxdz1, this.croppinesses.y),\r\n pb.mul(this.dxdz2, this.croppinesses.z)\r\n );\r\n this.$l.val = this.det(this.jacobian(this.dxdx_dzdz.x, this.dxdz, this.dxdx_dzdz.y));\r\n this.$l.foam = pb.abs(\r\n pb.pow(pb.neg(pb.min(0, pb.sub(this.val, this.foamParams.x))), this.foamParams.y)\r\n );\r\n this.$return(pb.vec4(this.normal, this.foam));\r\n });\r\n return scope.calcNormalAndFoam(xz);\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk(): boolean {\r\n return this._renderMode !== RENDER_NONE;\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup): void {\r\n const instanceData = this.getInstanceData();\r\n const linearRepeatSampler = fetchSampler('repeat_linear_nomip');\r\n if (this._useComputeShader) {\r\n bindGroup.setTexture('dataTexture', instanceData.dataTextures as Texture2DArray, linearRepeatSampler);\r\n } else {\r\n bindGroup.setTexture('dx_hy_dz_dxdz0', instanceData.dataTextures[0], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz0', instanceData.dataTextures[1], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz1', instanceData.dataTextures[2], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz1', instanceData.dataTextures[3], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz2', instanceData.dataTextures[4], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz2', instanceData.dataTextures[5], linearRepeatSampler);\r\n }\r\n bindGroup.setValue('foamParams', this._params.foamParams);\r\n bindGroup.setValue('sizes', this._sizes);\r\n bindGroup.setValue('croppinesses', this._croppinesses);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n const disturb = Math.max(Math.abs(this.wind.x), Math.abs(this.wind.y), 2);\r\n outAABB.minPoint.setXYZ(minX - 8 * disturb, y - 8 * disturb, minZ - 8 * disturb);\r\n outAABB.maxPoint.setXYZ(maxX + 8 * disturb, y + 8 * disturb, maxZ + 8 * disturb);\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash(): string {\r\n return 'FFTWaveGenerator';\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this.disposeInstanceData();\r\n }\r\n}\r\n"],"names":["getDefaultBuildParams","cascades","size","strength","croppiness","minWave","maxWave","resolution","wind","Vector2","alignment","foamParams","randomSeed","RENDER_NONE","RENDER_NORMAL","RENDER_TWO_PASS","THREAD_GROUP_SIZE","FFTWaveGenerator","Disposable","_globals","_useComputeShader","_h0BindGroup","_hkBindGroup","_hkBindGroup2","_hkBindGroup4","_fft2hBindGroup","_fft2vBindGroup","_fft2hBindGroup2Used","_fft2hBindGroup2Free","_fft2hBindGroup4Used","_fft2hBindGroup4Free","_fft2vBindGroup2Used","_fft2vBindGroup2Free","_fft2vBindGroup4Used","_fft2vBindGroup4Free","_postfft2BindGroup","_postfft2BindGroup2","_postfft2BindGroup4","_updateRenderStates","_sizes","_croppinesses","_params","_instanceData","_ifftTextures","_cascades","_paramsChanged","_version","_resolutionChanged","_textureFormat","_h0TextureFormat","_dataTextureFormat","_renderMode","params","device","getDevice","renderTargetFloat16","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","maxDrawBuffers","framebufferCaps","type","maxSampleBytes","maxColorAttachmentBytesPerSample","programs","h0Program","createProgramH0","hkProgram","createProgramHk","hkProgram2","hkProgram4","fft2hProgram","createProgramFFT2H","fft2hProgram2","fft2hProgram4","fft2vProgram","createProgramFFT2V","fft2vProgram2","fft2vProgram4","postfft2Program","createProgramPostFFT2","postfft2Program2","postfft2Program4","quad","createQuad","noiseTextures","Map","butterflyTextures","createBindGroup","bindGroupLayouts","Vector4","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","paramsChanged","version","clone","val","x","y","foamWidth","foamContrast","getWaveLength","cascade","setWaveLength","length","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","vertexData","Float32Array","indexData","Uint32Array","prim","Primitive","createAndSetVertexBuffer","createAndSetIndexBuffer","primitiveType","indexStart","indexCount","getButterflyTexture","tex","get","createTexture2D","Math","log2","mipmapping","name","update","createButterflyTexture","width","height","set","instanceData","getInstanceData","setProgram","setBindGroup","setTexture","getNoiseTexture","fetchSampler","setValue","i","z","PI","w","h0Textures","compute","setFramebuffer","h0Framebuffer","clearFrameBuffer","zero","draw","getNoise2d","rgba","rand","PRNG","array","from","Array","map","reverseBits","v","parseInt","toString","padStart","split","reverse","join","texture","bitReversed","keys","j","k","c","cos","s","sin","span","wing","texel","setXYZW","createNTextures","dataTextures","spectrumTextures","pingpongTextures","createFrameBuffer","spectrumFramebuffer","spectrumFramebuffer2","slice","spectrumFramebuffer4","pingpongFramebuffer","pingpongFramebuffer2","pingpongFramebuffer4","postIfft2Framebuffer","postIfft2Framebuffer2","postIfft2Framebuffer4","format","num","linear","options","samplerOptions","minFilter","magFilter","mipFilter","addressU","addressV","writable","createTexture2DArray","index","time","pushDeviceStates","setRenderStates","disposeInstanceData","generateInitialSpectrum","generateSpectrum","ifft2","postIfft2","generateSpectrumTwoPass","ifft2TwoPass","postIfft2TwoPass","popDeviceStates","needUpdate","disposeNTextures","isArray","forEach","dispose","nearestRepeatSampler","phases","pingPongTextures","pingPongFramebuffers","butterflyTex","pingPong","phase","getFFT2hBindGroup2","pingpong","bindGroup","pop","push","getFFT2hBindGroup4","getFFT2vBindGroup2","getFFT2vBindGroup4","pingPongFramebuffers4","pingPongFramebuffers2","fft2hBindGroup4","fft2hBindGroup2","fft2vBindGroup4","fft2vBindGroup2","setupUniforms","scope","uniformGroup","pb","$builder","sizes","vec4","uniform","croppinesses","dataTexture","tex2DArray","dx_hy_dz_dxdz0","tex2D","sx_sz_dxdx_dzdz0","dx_hy_dz_dxdz1","sx_sz_dxdx_dzdz1","dx_hy_dz_dxdz2","sx_sz_dxdx_dzdz2","shaderKind","vec2","calcVertexPositionAndNormal","inPos","outPos","outNormal","that","func","vec3","out","$l","xz","uv0","div","uv1","uv2","a","mul","textureArraySampleLevel","rgb","b","textureSampleLevel","displacement","add","calcPositionAndNormal","calcFragmentNormal","_vertexNormal","_sx_sz_dxdx_dzdz0","_sx_sz_dxdx_dzdz1","_sx_sz_dxdx_dzdz2","sx","sz","dxdx_dzdz","zw","slope","normal","normalize","neg","$return","calcFragmentNormalAndFoam","float","Jxx","dxdx","Jxz","dxdz","Jzz","dzdz","sub","jacobian","dxdx_dzdz0","dxdx_dzdz1","dxdx_dzdz2","dxdz0","dxdz1","dxdz2","det","foam","abs","pow","min","calcNormalAndFoam","isOk","applyWaterBindGroup","linearRepeatSampler","calcClipmapTileAABB","minX","maxX","minZ","maxZ","outAABB","disturb","max","minPoint","setXYZ","maxPoint","getHash","onDispose"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { Application } from '../app.js';
1
+ import { getDevice } from '../app/api.js';
2
2
 
3
3
  let quadVertexLayout = null;
4
4
  let quadRenderStateSet = null;
5
5
  function drawFullscreenQuad(renderStates) {
6
- const device = Application.instance.device;
6
+ const device = getDevice();
7
7
  if (!quadVertexLayout) {
8
8
  quadVertexLayout = device.createVertexLayout({
9
9
  vertexBuffers: [
@@ -1 +1 @@
1
- {"version":3,"file":"fullscreenquad.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fullscreenquad.js","sources":["../../src/render/fullscreenquad.ts"],"sourcesContent":["import type { RenderStateSet, VertexLayout } from '@zephyr3d/device';\r\nimport { getDevice } from '../app/api';\r\n\r\nlet quadVertexLayout: VertexLayout = null;\r\nlet quadRenderStateSet: RenderStateSet = null;\r\n\r\nexport function drawFullscreenQuad(renderStates?: RenderStateSet) {\r\n const device = getDevice();\r\n if (!quadVertexLayout) {\r\n quadVertexLayout = device.createVertexLayout({\r\n vertexBuffers: [\r\n {\r\n buffer: device.createVertexBuffer('position_f32x2', new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]))\r\n }\r\n ]\r\n });\r\n }\r\n if (!quadRenderStateSet) {\r\n quadRenderStateSet = device.createRenderStateSet();\r\n quadRenderStateSet.useRasterizerState().setCullMode('none');\r\n quadRenderStateSet.useDepthState().enableTest(false).enableWrite(false);\r\n }\r\n const saveRenderStateSet = device.getRenderStates();\r\n device.setRenderStates(renderStates ?? quadRenderStateSet);\r\n device.setVertexLayout(quadVertexLayout);\r\n device.draw('triangle-strip', 0, 4);\r\n device.setRenderStates(saveRenderStateSet);\r\n}\r\n"],"names":["quadVertexLayout","quadRenderStateSet","drawFullscreenQuad","renderStates","device","getDevice","createVertexLayout","vertexBuffers","buffer","createVertexBuffer","Float32Array","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","saveRenderStateSet","getRenderStates","setRenderStates","setVertexLayout","draw"],"mappings":";;AAGA,IAAIA,gBAAiC,GAAA,IAAA;AACrC,IAAIC,kBAAqC,GAAA,IAAA;AAElC,SAASC,mBAAmBC,YAA6B,EAAA;AAC9D,IAAA,MAAMC,MAASC,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAI,CAACL,gBAAkB,EAAA;QACrBA,gBAAmBI,GAAAA,MAAAA,CAAOE,kBAAkB,CAAC;YAC3CC,aAAe,EAAA;AACb,gBAAA;AACEC,oBAAAA,MAAAA,EAAQJ,MAAOK,CAAAA,kBAAkB,CAAC,gBAAA,EAAkB,IAAIC,YAAa,CAAA;wBAAC,EAAC;wBAAG,EAAC;AAAG,wBAAA,CAAA;wBAAG,EAAC;wBAAG,EAAC;AAAG,wBAAA,CAAA;AAAG,wBAAA,CAAA;AAAG,wBAAA;AAAE,qBAAA,CAAA;AACnG;AACD;AACH,SAAA,CAAA;AACF;AACA,IAAA,IAAI,CAACT,kBAAoB,EAAA;AACvBA,QAAAA,kBAAAA,GAAqBG,OAAOO,oBAAoB,EAAA;QAChDV,kBAAmBW,CAAAA,kBAAkB,EAAGC,CAAAA,WAAW,CAAC,MAAA,CAAA;AACpDZ,QAAAA,kBAAAA,CAAmBa,aAAa,EAAGC,CAAAA,UAAU,CAAC,KAAA,CAAA,CAAOC,WAAW,CAAC,KAAA,CAAA;AACnE;IACA,MAAMC,kBAAAA,GAAqBb,OAAOc,eAAe,EAAA;IACjDd,MAAOe,CAAAA,eAAe,CAAChB,YAAgBF,IAAAA,kBAAAA,CAAAA;AACvCG,IAAAA,MAAAA,CAAOgB,eAAe,CAACpB,gBAAAA,CAAAA;IACvBI,MAAOiB,CAAAA,IAAI,CAAC,gBAAA,EAAkB,CAAG,EAAA,CAAA,CAAA;AACjCjB,IAAAA,MAAAA,CAAOe,eAAe,CAACF,kBAAAA,CAAAA;AACzB;;;;"}