@zephyr3d/scene 0.9.1 → 0.9.3

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 (522) hide show
  1. package/dist/animation/animationset.js +2 -0
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +9 -1
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  5. package/dist/animation/fixed_geometry_cache_track.js +5 -1
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  7. package/dist/animation/geometry_cache_utils.js +20 -4
  8. package/dist/animation/geometry_cache_utils.js.map +1 -1
  9. package/dist/animation/ik/ik_angle_constraint.js +2 -6
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
  11. package/dist/animation/ik/ik_chain_builder.js +68 -0
  12. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  13. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  14. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  15. package/dist/animation/ik/two_bone_ik_solver.js +2 -6
  16. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  17. package/dist/animation/joint_dynamics/collision.js +60 -12
  18. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  19. package/dist/animation/joint_dynamics/constraints.js +20 -4
  20. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  21. package/dist/animation/joint_dynamics/controller.js +94 -46
  22. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  23. package/dist/animation/joint_dynamics/math.js +16 -0
  24. package/dist/animation/joint_dynamics/math.js.map +1 -0
  25. package/dist/animation/joint_dynamics/solver.js +21 -11
  26. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  27. package/dist/animation/joint_dynamics/types.js +15 -3
  28. package/dist/animation/joint_dynamics/types.js.map +1 -1
  29. package/dist/animation/pca_geometry_cache_track.js +5 -1
  30. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  31. package/dist/animation/skeleton.js +2 -2
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +2 -6
  34. package/dist/animation/skeleton_modifier.js.map +1 -1
  35. package/dist/animation/spring/spring_particle.js +4 -4
  36. package/dist/animation/spring/spring_particle.js.map +1 -1
  37. package/dist/animation/spring/spring_system.js +13 -40
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring2/constraints.js.map +1 -1
  40. package/dist/animation/spring2/controller.js +64 -64
  41. package/dist/animation/spring2/controller.js.map +1 -1
  42. package/dist/animation/spring2/math.js.map +1 -1
  43. package/dist/animation/spring2/spring_system.js +8 -8
  44. package/dist/animation/spring2/spring_system.js.map +1 -1
  45. package/dist/app/app.js.map +1 -1
  46. package/dist/app/engine.js +1 -1
  47. package/dist/app/engine.js.map +1 -1
  48. package/dist/app/screen.js +4 -4
  49. package/dist/app/screen.js.map +1 -1
  50. package/dist/app/scriptingsystem.js +24 -1
  51. package/dist/app/scriptingsystem.js.map +1 -1
  52. package/dist/app/scriptregistry.js +22 -1
  53. package/dist/app/scriptregistry.js.map +1 -1
  54. package/dist/asset/assetmanager.js +2 -2
  55. package/dist/asset/assetmanager.js.map +1 -1
  56. package/dist/asset/model.js +60 -60
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/camera/camera.js +1 -1
  59. package/dist/camera/camera.js.map +1 -1
  60. package/dist/camera/orbit.js.map +1 -1
  61. package/dist/index.d.ts +795 -266
  62. package/dist/index.js +3 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/material/material.js +3 -1
  65. package/dist/material/material.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  67. package/dist/material/shader/helper.js +281 -278
  68. package/dist/material/shader/helper.js.map +1 -1
  69. package/dist/material/sprite.js +6 -6
  70. package/dist/material/sprite.js.map +1 -1
  71. package/dist/material/terrain-cm.js +2 -2
  72. package/dist/material/terrain-cm.js.map +1 -1
  73. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  74. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  75. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  76. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  77. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  78. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  79. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  80. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  81. package/dist/posteffect/taa.js +31 -39
  82. package/dist/posteffect/taa.js.map +1 -1
  83. package/dist/render/cluster_light.js +3 -4
  84. package/dist/render/cluster_light.js.map +1 -1
  85. package/dist/render/drawable.js +5 -1
  86. package/dist/render/drawable.js.map +1 -1
  87. package/dist/render/rendergraph/device_pool_allocator.js +29 -3
  88. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  89. package/dist/render/rendergraph/executor.js +283 -33
  90. package/dist/render/rendergraph/executor.js.map +1 -1
  91. package/dist/render/rendergraph/forward_plus_builder.js +338 -108
  92. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  93. package/dist/render/rendergraph/history_resource_manager.js +195 -115
  94. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  95. package/dist/render/rendergraph/history_resources.js +10 -0
  96. package/dist/render/rendergraph/history_resources.js.map +1 -0
  97. package/dist/render/rendergraph/rendergraph.js +162 -35
  98. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  99. package/dist/render/rendergraph/types.js +25 -5
  100. package/dist/render/rendergraph/types.js.map +1 -1
  101. package/dist/render/rendertarget.js +5 -1
  102. package/dist/render/rendertarget.js.map +1 -1
  103. package/dist/render/screenrendertarget.js +5 -1
  104. package/dist/render/screenrendertarget.js.map +1 -1
  105. package/dist/render/sky.js +4 -4
  106. package/dist/render/sky.js.map +1 -1
  107. package/dist/scene/basesprite.js +2 -2
  108. package/dist/scene/basesprite.js.map +1 -1
  109. package/dist/scene/graph_node.js +1 -1
  110. package/dist/scene/graph_node.js.map +1 -1
  111. package/dist/scene/mesh.js +81 -97
  112. package/dist/scene/mesh.js.map +1 -1
  113. package/dist/scene/particlesys.js +1 -1
  114. package/dist/scene/particlesys.js.map +1 -1
  115. package/dist/scene/scene_node.js +228 -228
  116. package/dist/scene/scene_node.js.map +1 -1
  117. package/dist/scene/script_attachment.js +15 -3
  118. package/dist/scene/script_attachment.js.map +1 -1
  119. package/dist/scene/terrain-cm/terrain-cm.js +3 -3
  120. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  121. package/dist/shadow/shadowmapper.js.map +1 -1
  122. package/dist/shapes/box.js +1 -1
  123. package/dist/shapes/box.js.map +1 -1
  124. package/dist/shapes/capsule.js +0 -3
  125. package/dist/shapes/capsule.js.map +1 -1
  126. package/dist/shapes/cylinder.js +0 -3
  127. package/dist/shapes/cylinder.js.map +1 -1
  128. package/dist/shapes/plane.js +0 -3
  129. package/dist/shapes/plane.js.map +1 -1
  130. package/dist/shapes/tetrahedron.js +3 -9
  131. package/dist/shapes/tetrahedron.js.map +1 -1
  132. package/dist/shapes/torus.js +94 -66
  133. package/dist/shapes/torus.js.map +1 -1
  134. package/dist/src/animation/animation.js +127 -0
  135. package/dist/src/animation/animation.js.map +1 -0
  136. package/dist/src/animation/animationset.js +255 -0
  137. package/dist/src/animation/animationset.js.map +1 -0
  138. package/dist/src/animation/animationtrack.js +34 -0
  139. package/dist/src/animation/animationtrack.js.map +1 -0
  140. package/dist/src/animation/eulerrotationtrack.js +52 -0
  141. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  142. package/dist/src/animation/morphtarget.js +93 -0
  143. package/dist/src/animation/morphtarget.js.map +1 -0
  144. package/dist/src/animation/morphtrack.js +70 -0
  145. package/dist/src/animation/morphtrack.js.map +1 -0
  146. package/dist/src/animation/proptrack.js +161 -0
  147. package/dist/src/animation/proptrack.js.map +1 -0
  148. package/dist/src/animation/rotationtrack.js +51 -0
  149. package/dist/src/animation/rotationtrack.js.map +1 -0
  150. package/dist/src/animation/scaletrack.js +50 -0
  151. package/dist/src/animation/scaletrack.js.map +1 -0
  152. package/dist/src/animation/skeleton.js +204 -0
  153. package/dist/src/animation/skeleton.js.map +1 -0
  154. package/dist/src/animation/translationtrack.js +50 -0
  155. package/dist/src/animation/translationtrack.js.map +1 -0
  156. package/dist/src/app/app.js +129 -0
  157. package/dist/src/app/app.js.map +1 -0
  158. package/dist/src/app/inputmgr.js +267 -0
  159. package/dist/src/app/inputmgr.js.map +1 -0
  160. package/dist/src/asset/assetmanager.js +404 -0
  161. package/dist/src/asset/assetmanager.js.map +1 -0
  162. package/dist/src/asset/builtin.js +337 -0
  163. package/dist/src/asset/builtin.js.map +1 -0
  164. package/dist/src/asset/loaders/dds/dds.js +470 -0
  165. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  166. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  167. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  168. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  169. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  170. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  171. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  172. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  173. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  174. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  175. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  176. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  177. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  178. package/dist/src/asset/loaders/loader.js +45 -0
  179. package/dist/src/asset/loaders/loader.js.map +1 -0
  180. package/dist/src/asset/model.js +414 -0
  181. package/dist/src/asset/model.js.map +1 -0
  182. package/dist/src/blitter/bilateralblur.js +221 -0
  183. package/dist/src/blitter/bilateralblur.js.map +1 -0
  184. package/dist/src/blitter/blitter.js +390 -0
  185. package/dist/src/blitter/blitter.js.map +1 -0
  186. package/dist/src/blitter/box.js +118 -0
  187. package/dist/src/blitter/box.js.map +1 -0
  188. package/dist/src/blitter/copy.js +22 -0
  189. package/dist/src/blitter/copy.js.map +1 -0
  190. package/dist/src/blitter/gaussianblur.js +228 -0
  191. package/dist/src/blitter/gaussianblur.js.map +1 -0
  192. package/dist/src/camera/base.js +92 -0
  193. package/dist/src/camera/base.js.map +1 -0
  194. package/dist/src/camera/camera.js +1005 -0
  195. package/dist/src/camera/camera.js.map +1 -0
  196. package/dist/src/camera/fps.js +238 -0
  197. package/dist/src/camera/fps.js.map +1 -0
  198. package/dist/src/camera/orbit.js +245 -0
  199. package/dist/src/camera/orbit.js.map +1 -0
  200. package/dist/src/camera/orthocamera.js +167 -0
  201. package/dist/src/camera/orthocamera.js.map +1 -0
  202. package/dist/src/camera/perspectivecamera.js +141 -0
  203. package/dist/src/camera/perspectivecamera.js.map +1 -0
  204. package/dist/src/index.js +120 -0
  205. package/dist/src/index.js.map +1 -0
  206. package/dist/src/material/blinn.js +81 -0
  207. package/dist/src/material/blinn.js.map +1 -0
  208. package/dist/src/material/grassmaterial.js +113 -0
  209. package/dist/src/material/grassmaterial.js.map +1 -0
  210. package/dist/src/material/lambert.js +92 -0
  211. package/dist/src/material/lambert.js.map +1 -0
  212. package/dist/src/material/material.js +301 -0
  213. package/dist/src/material/material.js.map +1 -0
  214. package/dist/src/material/meshmaterial.js +704 -0
  215. package/dist/src/material/meshmaterial.js.map +1 -0
  216. package/dist/src/material/mixins/albedocolor.js +76 -0
  217. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  218. package/dist/src/material/mixins/foliage.js +47 -0
  219. package/dist/src/material/mixins/foliage.js.map +1 -0
  220. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  221. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  222. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  223. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  224. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  225. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  226. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  227. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  228. package/dist/src/material/mixins/lit.js +476 -0
  229. package/dist/src/material/mixins/lit.js.map +1 -0
  230. package/dist/src/material/mixins/pbr/common.js +918 -0
  231. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  232. package/dist/src/material/mixins/texture.js +172 -0
  233. package/dist/src/material/mixins/texture.js.map +1 -0
  234. package/dist/src/material/mixins/vertexcolor.js +56 -0
  235. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  236. package/dist/src/material/particle.js +178 -0
  237. package/dist/src/material/particle.js.map +1 -0
  238. package/dist/src/material/pbrmr.js +97 -0
  239. package/dist/src/material/pbrmr.js.map +1 -0
  240. package/dist/src/material/pbrsg.js +97 -0
  241. package/dist/src/material/pbrsg.js.map +1 -0
  242. package/dist/src/material/shader/helper.js +1209 -0
  243. package/dist/src/material/shader/helper.js.map +1 -0
  244. package/dist/src/material/terrain-cm.js +606 -0
  245. package/dist/src/material/terrain-cm.js.map +1 -0
  246. package/dist/src/material/terrainmaterial.js +375 -0
  247. package/dist/src/material/terrainmaterial.js.map +1 -0
  248. package/dist/src/material/unlit.js +41 -0
  249. package/dist/src/material/unlit.js.map +1 -0
  250. package/dist/src/material/water.js +417 -0
  251. package/dist/src/material/water.js.map +1 -0
  252. package/dist/src/posteffect/bloom.js +361 -0
  253. package/dist/src/posteffect/bloom.js.map +1 -0
  254. package/dist/src/posteffect/compositor.js +226 -0
  255. package/dist/src/posteffect/compositor.js.map +1 -0
  256. package/dist/src/posteffect/fxaa.js +273 -0
  257. package/dist/src/posteffect/fxaa.js.map +1 -0
  258. package/dist/src/posteffect/grayscale.js +69 -0
  259. package/dist/src/posteffect/grayscale.js.map +1 -0
  260. package/dist/src/posteffect/motionblur.js +96 -0
  261. package/dist/src/posteffect/motionblur.js.map +1 -0
  262. package/dist/src/posteffect/posteffect.js +126 -0
  263. package/dist/src/posteffect/posteffect.js.map +1 -0
  264. package/dist/src/posteffect/sao.js +324 -0
  265. package/dist/src/posteffect/sao.js.map +1 -0
  266. package/dist/src/posteffect/ssr.js +489 -0
  267. package/dist/src/posteffect/ssr.js.map +1 -0
  268. package/dist/src/posteffect/taa.js +172 -0
  269. package/dist/src/posteffect/taa.js.map +1 -0
  270. package/dist/src/posteffect/tonemap.js +94 -0
  271. package/dist/src/posteffect/tonemap.js.map +1 -0
  272. package/dist/src/render/abuffer_oit.js +361 -0
  273. package/dist/src/render/abuffer_oit.js.map +1 -0
  274. package/dist/src/render/clipmap.js +851 -0
  275. package/dist/src/render/clipmap.js.map +1 -0
  276. package/dist/src/render/cluster_light.js +333 -0
  277. package/dist/src/render/cluster_light.js.map +1 -0
  278. package/dist/src/render/cull_visitor.js +187 -0
  279. package/dist/src/render/cull_visitor.js.map +1 -0
  280. package/dist/src/render/depthpass.js +68 -0
  281. package/dist/src/render/depthpass.js.map +1 -0
  282. package/dist/src/render/drawable_mixin.js +227 -0
  283. package/dist/src/render/drawable_mixin.js.map +1 -0
  284. package/dist/src/render/envlight.js +463 -0
  285. package/dist/src/render/envlight.js.map +1 -0
  286. package/dist/src/render/fbm_wavegenerator.js +251 -0
  287. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  288. package/dist/src/render/fft_wavegenerator.js +1006 -0
  289. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  290. package/dist/src/render/fullscreenquad.js +38 -0
  291. package/dist/src/render/fullscreenquad.js.map +1 -0
  292. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  293. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  294. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  295. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  296. package/dist/src/render/hzb.js +273 -0
  297. package/dist/src/render/hzb.js.map +1 -0
  298. package/dist/src/render/lightpass.js +172 -0
  299. package/dist/src/render/lightpass.js.map +1 -0
  300. package/dist/src/render/objectcolorpass.js +51 -0
  301. package/dist/src/render/objectcolorpass.js.map +1 -0
  302. package/dist/src/render/primitive.js +364 -0
  303. package/dist/src/render/primitive.js.map +1 -0
  304. package/dist/src/render/render_queue.js +467 -0
  305. package/dist/src/render/render_queue.js.map +1 -0
  306. package/dist/src/render/renderbundle_wrapper.js +152 -0
  307. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  308. package/dist/src/render/renderer.js +455 -0
  309. package/dist/src/render/renderer.js.map +1 -0
  310. package/dist/src/render/renderpass.js +200 -0
  311. package/dist/src/render/renderpass.js.map +1 -0
  312. package/dist/src/render/shadowmap_pass.js +56 -0
  313. package/dist/src/render/shadowmap_pass.js.map +1 -0
  314. package/dist/src/render/sky.js +1103 -0
  315. package/dist/src/render/sky.js.map +1 -0
  316. package/dist/src/render/weightedblended_oit.js +168 -0
  317. package/dist/src/render/weightedblended_oit.js.map +1 -0
  318. package/dist/src/scene/batchgroup.js +162 -0
  319. package/dist/src/scene/batchgroup.js.map +1 -0
  320. package/dist/src/scene/environment.js +209 -0
  321. package/dist/src/scene/environment.js.map +1 -0
  322. package/dist/src/scene/graph_node.js +72 -0
  323. package/dist/src/scene/graph_node.js.map +1 -0
  324. package/dist/src/scene/light.js +416 -0
  325. package/dist/src/scene/light.js.map +1 -0
  326. package/dist/src/scene/mesh.js +341 -0
  327. package/dist/src/scene/mesh.js.map +1 -0
  328. package/dist/src/scene/octree.js +649 -0
  329. package/dist/src/scene/octree.js.map +1 -0
  330. package/dist/src/scene/particlesys.js +738 -0
  331. package/dist/src/scene/particlesys.js.map +1 -0
  332. package/dist/src/scene/raycast_visitor.js +103 -0
  333. package/dist/src/scene/raycast_visitor.js.map +1 -0
  334. package/dist/src/scene/scene.js +284 -0
  335. package/dist/src/scene/scene.js.map +1 -0
  336. package/dist/src/scene/scene_node.js +732 -0
  337. package/dist/src/scene/scene_node.js.map +1 -0
  338. package/dist/src/scene/terrain/grass.js +278 -0
  339. package/dist/src/scene/terrain/grass.js.map +1 -0
  340. package/dist/src/scene/terrain/heightfield.js +475 -0
  341. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  342. package/dist/src/scene/terrain/patch.js +530 -0
  343. package/dist/src/scene/terrain/patch.js.map +1 -0
  344. package/dist/src/scene/terrain/quadtree.js +461 -0
  345. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  346. package/dist/src/scene/terrain/terrain.js +246 -0
  347. package/dist/src/scene/terrain/terrain.js.map +1 -0
  348. package/dist/src/scene/terrain-cm/grass.js +594 -0
  349. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  350. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  351. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  352. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  353. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  354. package/dist/src/scene/water.js +374 -0
  355. package/dist/src/scene/water.js.map +1 -0
  356. package/dist/src/shaders/atmosphere.js +957 -0
  357. package/dist/src/shaders/atmosphere.js.map +1 -0
  358. package/dist/src/shaders/fog.js +112 -0
  359. package/dist/src/shaders/fog.js.map +1 -0
  360. package/dist/src/shaders/misc.js +266 -0
  361. package/dist/src/shaders/misc.js.map +1 -0
  362. package/dist/src/shaders/noise.js +222 -0
  363. package/dist/src/shaders/noise.js.map +1 -0
  364. package/dist/src/shaders/pbr.js +51 -0
  365. package/dist/src/shaders/pbr.js.map +1 -0
  366. package/dist/src/shaders/shadow.js +636 -0
  367. package/dist/src/shaders/shadow.js.map +1 -0
  368. package/dist/src/shaders/ssr.js +490 -0
  369. package/dist/src/shaders/ssr.js.map +1 -0
  370. package/dist/src/shaders/temporal.js +215 -0
  371. package/dist/src/shaders/temporal.js.map +1 -0
  372. package/dist/src/shaders/water.js +756 -0
  373. package/dist/src/shaders/water.js.map +1 -0
  374. package/dist/src/shadow/esm.js +237 -0
  375. package/dist/src/shadow/esm.js.map +1 -0
  376. package/dist/src/shadow/pcf_opt.js +181 -0
  377. package/dist/src/shadow/pcf_opt.js.map +1 -0
  378. package/dist/src/shadow/pcf_pd.js +189 -0
  379. package/dist/src/shadow/pcf_pd.js.map +1 -0
  380. package/dist/src/shadow/shader.js +37 -0
  381. package/dist/src/shadow/shader.js.map +1 -0
  382. package/dist/src/shadow/shadow_impl.js +15 -0
  383. package/dist/src/shadow/shadow_impl.js.map +1 -0
  384. package/dist/src/shadow/shadowmapper.js +790 -0
  385. package/dist/src/shadow/shadowmapper.js.map +1 -0
  386. package/dist/src/shadow/ssm.js +159 -0
  387. package/dist/src/shadow/ssm.js.map +1 -0
  388. package/dist/src/shadow/vsm.js +297 -0
  389. package/dist/src/shadow/vsm.js.map +1 -0
  390. package/dist/src/shapes/box.js +386 -0
  391. package/dist/src/shapes/box.js.map +1 -0
  392. package/dist/src/shapes/cylinder.js +125 -0
  393. package/dist/src/shapes/cylinder.js.map +1 -0
  394. package/dist/src/shapes/plane.js +88 -0
  395. package/dist/src/shapes/plane.js.map +1 -0
  396. package/dist/src/shapes/shape.js +87 -0
  397. package/dist/src/shapes/shape.js.map +1 -0
  398. package/dist/src/shapes/sphere.js +114 -0
  399. package/dist/src/shapes/sphere.js.map +1 -0
  400. package/dist/src/shapes/tetrahedron.js +188 -0
  401. package/dist/src/shapes/tetrahedron.js.map +1 -0
  402. package/dist/src/shapes/torus.js +111 -0
  403. package/dist/src/shapes/torus.js.map +1 -0
  404. package/dist/src/utility/aabbtree.js +400 -0
  405. package/dist/src/utility/aabbtree.js.map +1 -0
  406. package/dist/src/utility/bounding_volume.js +29 -0
  407. package/dist/src/utility/bounding_volume.js.map +1 -0
  408. package/dist/src/utility/debug.js +28 -0
  409. package/dist/src/utility/debug.js.map +1 -0
  410. package/dist/src/utility/draco/decoder.js +116 -0
  411. package/dist/src/utility/draco/decoder.js.map +1 -0
  412. package/dist/src/utility/misc.js +105 -0
  413. package/dist/src/utility/misc.js.map +1 -0
  414. package/dist/src/utility/panorama.js +163 -0
  415. package/dist/src/utility/panorama.js.map +1 -0
  416. package/dist/src/utility/pmrem.js +354 -0
  417. package/dist/src/utility/pmrem.js.map +1 -0
  418. package/dist/src/utility/rendermipmap.js +115 -0
  419. package/dist/src/utility/rendermipmap.js.map +1 -0
  420. package/dist/src/utility/serialization/json.js +402 -0
  421. package/dist/src/utility/serialization/json.js.map +1 -0
  422. package/dist/src/utility/serialization/manager.js +623 -0
  423. package/dist/src/utility/serialization/manager.js.map +1 -0
  424. package/dist/src/utility/serialization/scene/animation.js +248 -0
  425. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  426. package/dist/src/utility/serialization/scene/batch.js +59 -0
  427. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  428. package/dist/src/utility/serialization/scene/camera.js +790 -0
  429. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  430. package/dist/src/utility/serialization/scene/common.js +222 -0
  431. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  432. package/dist/src/utility/serialization/scene/light.js +575 -0
  433. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  434. package/dist/src/utility/serialization/scene/material.js +1111 -0
  435. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  436. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  437. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  438. package/dist/src/utility/serialization/scene/misc.js +39 -0
  439. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  440. package/dist/src/utility/serialization/scene/node.js +451 -0
  441. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  442. package/dist/src/utility/serialization/scene/particle.js +425 -0
  443. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  444. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  445. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  446. package/dist/src/utility/serialization/scene/scene.js +704 -0
  447. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  448. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  449. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  450. package/dist/src/utility/serialization/scene/water.js +465 -0
  451. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  452. package/dist/src/utility/shprojector.js +297 -0
  453. package/dist/src/utility/shprojector.js.map +1 -0
  454. package/dist/src/utility/textures/ggxlut.js +213 -0
  455. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  456. package/dist/src/utility/textures/gradientnoise.js +62 -0
  457. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  458. package/dist/src/utility/textures/randomnoise.js +41 -0
  459. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  460. package/dist/src/values.js +162 -0
  461. package/dist/src/values.js.map +1 -0
  462. package/dist/utility/blueprint/material/common.js +7 -0
  463. package/dist/utility/blueprint/material/common.js.map +1 -0
  464. package/dist/utility/blueprint/material/inputs.js +3 -3
  465. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  466. package/dist/utility/blueprint/material/ir.js +4 -4
  467. package/dist/utility/blueprint/material/ir.js.map +1 -1
  468. package/dist/utility/serialization/blueprint/constants.js +255 -0
  469. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  470. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  471. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  472. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  473. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  474. package/dist/utility/serialization/manager.js +299 -268
  475. package/dist/utility/serialization/manager.js.map +1 -1
  476. package/dist/utility/serialization/scene/animation.js +45 -0
  477. package/dist/utility/serialization/scene/animation.js.map +1 -1
  478. package/dist/utility/serialization/scene/camera.js +53 -0
  479. package/dist/utility/serialization/scene/camera.js.map +1 -1
  480. package/dist/utility/serialization/scene/common.js +10 -0
  481. package/dist/utility/serialization/scene/common.js.map +1 -1
  482. package/dist/utility/serialization/scene/light.js +30 -0
  483. package/dist/utility/serialization/scene/light.js.map +1 -1
  484. package/dist/utility/serialization/scene/material.js +63 -0
  485. package/dist/utility/serialization/scene/material.js.map +1 -1
  486. package/dist/utility/serialization/scene/mesh.js +11 -0
  487. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  488. package/dist/utility/serialization/scene/misc.js +2 -0
  489. package/dist/utility/serialization/scene/misc.js.map +1 -1
  490. package/dist/utility/serialization/scene/node.js +19 -0
  491. package/dist/utility/serialization/scene/node.js.map +1 -1
  492. package/dist/utility/serialization/scene/particle.js +22 -0
  493. package/dist/utility/serialization/scene/particle.js.map +1 -1
  494. package/dist/utility/serialization/scene/primitive.js +33 -0
  495. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  496. package/dist/utility/serialization/scene/scene.js +39 -0
  497. package/dist/utility/serialization/scene/scene.js.map +1 -1
  498. package/dist/utility/serialization/scene/script.js +2 -0
  499. package/dist/utility/serialization/scene/script.js.map +1 -1
  500. package/dist/utility/serialization/scene/sprite.js +6 -0
  501. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  502. package/dist/utility/serialization/scene/terrain.js +9 -0
  503. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  504. package/dist/utility/serialization/scene/water.js +21 -0
  505. package/dist/utility/serialization/scene/water.js.map +1 -1
  506. package/dist/utility/serialization/types.js +5 -1
  507. package/dist/utility/serialization/types.js.map +1 -1
  508. package/dist/values.js +49 -53
  509. package/dist/values.js.map +1 -1
  510. package/package.json +2 -2
  511. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  512. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  513. package/dist/animation/spring/spring_bone.js +0 -240
  514. package/dist/animation/spring/spring_bone.js.map +0 -1
  515. package/dist/animation/spring/spring_bone_collider.js +0 -198
  516. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  517. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  518. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  519. package/dist/animation/spring/spring_bone_system.js +0 -328
  520. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  521. package/dist/render/sky_motion_vector.js +0 -85
  522. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -1,27 +1,20 @@
1
1
  /**
2
- * Manages cross-frame history resources with automatic ping-pong buffering.
2
+ * Manages cross-frame history resources that can be imported into a render graph.
3
3
  *
4
4
  * History resources are textures that persist across frames for temporal effects
5
- * like TAA, motion blur, or temporal upscaling. The manager maintains two copies
6
- * of each resource and automatically swaps them at frame boundaries.
5
+ * like TAA, motion blur, or temporal upscaling. Previous-frame textures can be
6
+ * imported into a {@link RenderGraph}, and current-frame textures are committed
7
+ * only after graph execution succeeds.
7
8
  *
8
9
  * Usage:
9
10
  * ```ts
10
11
  * const historyMgr = new HistoryResourceManager(allocator);
11
- *
12
- * // Register a history resource (typically once at initialization)
13
- * historyMgr.register('taaHistory', {
14
- * format: TextureFormat.RGBA16F,
15
- * width: 1920,
16
- * height: 1080
17
- * }, { width: 1920, height: 1080 });
18
- *
19
- * // In your render pass:
20
- * const prevFrame = historyMgr.getPrevious('taaHistory'); // Read from previous frame
21
- * const currentFrame = historyMgr.getCurrent('taaHistory'); // Write to current frame
22
- *
23
- * // At frame end:
24
- * historyMgr.swap(); // Swap current and previous
12
+ * historyMgr.beginFrame();
13
+ * const prev = historyMgr.importPrevious(graph, 'taaColor');
14
+ * // declare builder.read(prev) if non-null
15
+ * historyMgr.bindImportedTextures(executor);
16
+ * // after successful execution:
17
+ * historyMgr.commitFrame();
25
18
  * ```
26
19
  *
27
20
  * @typeParam TTexture - The concrete texture type (e.g. `Texture2D`).
@@ -29,7 +22,9 @@
29
22
  */ class HistoryResourceManager {
30
23
  _resources = new Map();
31
24
  _allocator;
32
- _frameIndex = 0;
25
+ _pendingImports = new Map();
26
+ _pendingCommits = new Map();
27
+ _readScopeStack = [];
33
28
  /**
34
29
  * Create a new history resource manager.
35
30
  *
@@ -38,139 +33,224 @@
38
33
  this._allocator = allocator;
39
34
  }
40
35
  /**
41
- * Register a new history resource with ping-pong buffering.
36
+ * Get the previous-frame texture resolved by the current render graph pass.
42
37
  *
43
- * Allocates two textures matching the given descriptor. If a resource
44
- * with the same name already exists, this is a no-op.
38
+ * The resource must have been imported with {@link HistoryResourceManager.importPrevious} or
39
+ * {@link HistoryResourceManager.importPreviousIfCompatible}, declared as a pass read, and bound with
40
+ * {@link HistoryResourceManager.beginReadScope} before this method is called.
45
41
  *
46
- * @param name - Unique identifier for this history resource.
47
- * @param desc - Texture descriptor (format, size, etc.).
48
- * @param size - Resolved pixel dimensions.
49
- */ register(name, desc, size) {
50
- if (!this._resources.has(name)) {
51
- const tex0 = this._allocator.allocate(desc, size);
52
- const tex1 = this._allocator.allocate(desc, size);
53
- this._resources.set(name, [
54
- tex0,
55
- tex1
56
- ]);
42
+ * @param name - Name of the history resource.
43
+ * @returns The graph-resolved previous-frame texture.
44
+ * @throws If no read scope is active for the resource.
45
+ */ getPrevious(name) {
46
+ const scoped = this._getScopedRead(name);
47
+ if (scoped) {
48
+ return scoped;
57
49
  }
50
+ throw new Error(`History resource '${name}' is not available in the current render graph read scope. ` + `Import it and declare a pass read before accessing it.`);
58
51
  }
59
52
  /**
60
- * Register a new history resource with an existing texture (zero-copy).
53
+ * Check whether a valid history resource exists and matches the descriptor.
61
54
  *
62
- * This is more efficient than register() + updateCurrent() for first-frame setup,
63
- * as it avoids allocating dummy textures that are immediately replaced.
64
- *
65
- * @param name - Unique identifier for this history resource.
66
- * @param desc - Texture descriptor (format, size, etc.).
67
- * @param size - Resolved pixel dimensions.
68
- * @param initialTexture - The initial texture to use as current frame.
69
- */ registerWithTexture(name, desc, size, initialTexture) {
70
- if (!this._resources.has(name)) {
71
- // Allocate only one texture for the "previous" slot
72
- const prevTexture = this._allocator.allocate(desc, size);
73
- // Use the provided texture as "current"
74
- this._resources.set(name, [
75
- initialTexture,
76
- prevTexture
77
- ]);
78
- }
55
+ * @param name - Name of the history resource.
56
+ * @param desc - Expected texture descriptor.
57
+ * @param size - Expected resolved size.
58
+ * @returns True if the resource exists, is valid, and matches.
59
+ */ isCompatible(name, desc, size) {
60
+ const resource = this._resources.get(name);
61
+ return !!resource?.valid && this._matches(resource, desc, size);
62
+ }
63
+ /**
64
+ * Start collecting graph imports and deferred commits for a new frame.
65
+ */ beginFrame() {
66
+ this.discardFrame();
67
+ this._pendingImports.clear();
68
+ this._readScopeStack.length = 0;
79
69
  }
80
70
  /**
81
- * Get the current frame's texture for a history resource.
71
+ * Import the latest committed texture for a history resource into the graph.
82
72
  *
83
- * This is typically used as the write target in render passes.
73
+ * Returns null when the resource has no valid previous frame.
84
74
  *
85
- * @param name - Name of the history resource.
86
- * @returns The current frame's texture.
87
- * @throws If the resource has not been registered.
88
- */ getCurrent(name) {
89
- const textures = this._resources.get(name);
90
- if (!textures) {
91
- throw new Error(`History resource '${name}' not found. Did you forget to call register()?`);
75
+ * @param graph - Render graph to import into.
76
+ * @param name - History resource name.
77
+ * @returns Imported graph handle, or null when no valid previous texture exists.
78
+ */ importPrevious(graph, name) {
79
+ const resource = this._resources.get(name);
80
+ const texture = resource?.valid ? resource.textures[resource.currentIndex] : null;
81
+ if (!texture) {
82
+ return null;
92
83
  }
93
- return textures[this._frameIndex % 2];
84
+ const handle = graph.importTexture(`history:${name}:previous`);
85
+ this._pendingImports.set(handle, texture);
86
+ return handle;
94
87
  }
95
88
  /**
96
- * Get the previous frame's texture for a history resource.
89
+ * Import the latest committed texture only when it matches the expected shape.
97
90
  *
98
- * This is typically used as a read input in temporal effects like TAA.
91
+ * This is the preferred API for effects that can declare their history reads
92
+ * while building the graph: incompatible history is treated as absent, so the
93
+ * pass does not declare stale reads after resize or format changes.
99
94
  *
100
- * @param name - Name of the history resource.
101
- * @returns The previous frame's texture.
102
- * @throws If the resource has not been registered.
103
- */ getPrevious(name) {
104
- const textures = this._resources.get(name);
105
- if (!textures) {
106
- throw new Error(`History resource '${name}' not found. Did you forget to call register()?`);
107
- }
108
- return textures[(this._frameIndex + 1) % 2];
95
+ * @param graph - Render graph to import into.
96
+ * @param name - History resource name.
97
+ * @param desc - Expected texture descriptor.
98
+ * @param size - Expected resolved size.
99
+ * @returns Imported graph handle, or null when no compatible history exists.
100
+ */ importPreviousIfCompatible(graph, name, desc, size) {
101
+ return this.isCompatible(name, desc, size) ? this.importPrevious(graph, name) : null;
109
102
  }
110
103
  /**
111
- * Check if a history resource exists.
104
+ * Bind all history imports created for this frame to the executor.
112
105
  *
113
- * @param name - Name of the history resource.
114
- * @returns True if the resource has been registered.
115
- */ has(name) {
116
- return this._resources.has(name);
106
+ * @param executor - Render graph executor for the current frame.
107
+ */ bindImportedTextures(executor) {
108
+ for (const [handle, texture] of this._pendingImports){
109
+ executor.setImportedTexture(handle, texture);
110
+ }
117
111
  }
118
112
  /**
119
- * Unregister a history resource and release its textures.
113
+ * Make resolved history textures available to code executing inside a pass.
120
114
  *
121
- * @param name - Name of the history resource to remove.
122
- * @returns True if the resource was found and removed.
123
- */ unregister(name) {
124
- const textures = this._resources.get(name);
125
- if (textures) {
126
- textures.forEach((tex)=>this._allocator.release(tex));
127
- this._resources.delete(name);
128
- return true;
115
+ * @param bindings - History name to resolved texture bindings.
116
+ */ beginReadScope(bindings) {
117
+ const scope = new Map();
118
+ for (const binding of bindings){
119
+ scope.set(binding.name, binding.texture);
129
120
  }
130
- return false;
121
+ this._readScopeStack.push(scope);
122
+ }
123
+ /**
124
+ * End the most recent history read scope.
125
+ */ endReadScope() {
126
+ this._readScopeStack.pop();
131
127
  }
132
128
  /**
133
- * Swap current and previous textures for all history resources.
129
+ * Queue a current-frame texture to become the next previous-frame history.
134
130
  *
135
- * Call this at the end of each frame to advance the ping-pong buffers.
136
- * After swapping, what was "current" becomes "previous" for the next frame.
137
- */ swap() {
138
- this._frameIndex++;
131
+ * The texture is committed only when {@link HistoryResourceManager.commitFrame} is called. If the
132
+ * frame fails, {@link HistoryResourceManager.discardFrame} releases owned pending textures instead.
133
+ *
134
+ * @param name - History resource name.
135
+ * @param desc - Texture descriptor.
136
+ * @param size - Resolved texture size.
137
+ * @param texture - Texture produced by the current frame.
138
+ * @param ownsTexture - Whether this manager should release the texture later.
139
+ */ queueCommit(name, desc, size, texture, ownsTexture = true) {
140
+ const existing = this._pendingCommits.get(name);
141
+ if (existing?.ownsTexture) {
142
+ this._allocator.release(existing.texture);
143
+ }
144
+ this._pendingCommits.set(name, {
145
+ desc: {
146
+ ...desc
147
+ },
148
+ size: {
149
+ ...size
150
+ },
151
+ texture,
152
+ ownsTexture
153
+ });
154
+ }
155
+ /**
156
+ * Commit all current-frame history writes.
157
+ */ commitFrame() {
158
+ for (const [name, pending] of this._pendingCommits){
159
+ let resource = this._resources.get(name);
160
+ if (resource && !this._matches(resource, pending.desc, pending.size)) {
161
+ this._releaseResource(resource);
162
+ this._resources.delete(name);
163
+ resource = undefined;
164
+ }
165
+ if (!resource) {
166
+ resource = {
167
+ desc: {
168
+ ...pending.desc
169
+ },
170
+ size: {
171
+ ...pending.size
172
+ },
173
+ textures: [
174
+ null,
175
+ null
176
+ ],
177
+ ownsTexture: [
178
+ false,
179
+ false
180
+ ],
181
+ currentIndex: 0,
182
+ valid: false
183
+ };
184
+ this._resources.set(name, resource);
185
+ }
186
+ const writeIndex = resource.valid ? 1 - resource.currentIndex : resource.currentIndex;
187
+ this._releaseSlot(resource, writeIndex);
188
+ resource.textures[writeIndex] = pending.texture;
189
+ resource.ownsTexture[writeIndex] = pending.ownsTexture;
190
+ resource.desc = {
191
+ ...pending.desc
192
+ };
193
+ resource.size = {
194
+ ...pending.size
195
+ };
196
+ resource.currentIndex = writeIndex;
197
+ resource.valid = true;
198
+ }
199
+ this._pendingCommits.clear();
200
+ this._pendingImports.clear();
201
+ this._readScopeStack.length = 0;
202
+ }
203
+ /**
204
+ * Discard all uncommitted frame history writes.
205
+ */ discardFrame() {
206
+ for (const pending of this._pendingCommits.values()){
207
+ if (pending.ownsTexture) {
208
+ this._allocator.release(pending.texture);
209
+ }
210
+ }
211
+ this._pendingCommits.clear();
212
+ this._pendingImports.clear();
213
+ this._readScopeStack.length = 0;
139
214
  }
140
215
  /**
141
216
  * Release all history resources and clear the manager.
142
217
  *
143
218
  * Call this when disposing the render context or when history is no longer needed.
144
219
  */ dispose() {
145
- for (const textures of this._resources.values()){
146
- textures.forEach((tex)=>this._allocator.release(tex));
220
+ this.discardFrame();
221
+ for (const resource of this._resources.values()){
222
+ this._releaseResource(resource);
147
223
  }
148
224
  this._resources.clear();
149
- this._frameIndex = 0;
150
225
  }
151
- /**
152
- * Update the current frame's texture with an external texture (for zero-copy workflows).
153
- *
154
- * This is useful when you want to use the output of a render pass directly as history,
155
- * without copying. The manager will release the old texture and use the new one.
156
- *
157
- * @param name - Name of the history resource.
158
- * @param texture - The new texture to use as current frame.
159
- */ updateCurrent(name, texture) {
160
- const textures = this._resources.get(name);
161
- if (!textures) {
162
- throw new Error(`History resource '${name}' not found. Did you forget to call register()?`);
226
+ /** @internal */ _getScopedRead(name) {
227
+ for(let i = this._readScopeStack.length - 1; i >= 0; i--){
228
+ const texture = this._readScopeStack[i].get(name);
229
+ if (texture) {
230
+ return texture;
231
+ }
163
232
  }
164
- // Release the old current texture
165
- const oldTexture = textures[this._frameIndex % 2];
166
- this._allocator.release(oldTexture);
167
- // Replace with new texture
168
- textures[this._frameIndex % 2] = texture;
233
+ return null;
169
234
  }
170
- /**
171
- * Get the number of registered history resources.
172
- */ get size() {
173
- return this._resources.size;
235
+ /** @internal */ _matches(resource, desc, size) {
236
+ return resource.desc.format === desc.format && (resource.desc.mipLevels ?? 1) === (desc.mipLevels ?? 1) && resource.size.width === size.width && resource.size.height === size.height;
237
+ }
238
+ /** @internal */ _releaseResource(resource) {
239
+ this._releaseSlot(resource, 0);
240
+ this._releaseSlot(resource, 1);
241
+ resource.valid = false;
242
+ }
243
+ /** @internal */ _releaseSlot(resource, index) {
244
+ const texture = resource.textures[index];
245
+ if (!texture) {
246
+ return;
247
+ }
248
+ const otherIndex = 1 - index;
249
+ if (resource.ownsTexture[index] && resource.textures[otherIndex] !== texture) {
250
+ this._allocator.release(texture);
251
+ }
252
+ resource.textures[index] = null;
253
+ resource.ownsTexture[index] = false;
174
254
  }
175
255
  }
176
256
 
@@ -1 +1 @@
1
- {"version":3,"file":"history_resource_manager.js","sources":["../../../src/render/rendergraph/history_resource_manager.ts"],"sourcesContent":["import type { Texture2D } from '@zephyr3d/device';\r\nimport type { RGTextureAllocator, RGTextureDesc, RGResolvedSize } from './types';\r\n\r\n/**\r\n * Manages cross-frame history resources with automatic ping-pong buffering.\r\n *\r\n * History resources are textures that persist across frames for temporal effects\r\n * like TAA, motion blur, or temporal upscaling. The manager maintains two copies\r\n * of each resource and automatically swaps them at frame boundaries.\r\n *\r\n * Usage:\r\n * ```ts\r\n * const historyMgr = new HistoryResourceManager(allocator);\r\n *\r\n * // Register a history resource (typically once at initialization)\r\n * historyMgr.register('taaHistory', {\r\n * format: TextureFormat.RGBA16F,\r\n * width: 1920,\r\n * height: 1080\r\n * }, { width: 1920, height: 1080 });\r\n *\r\n * // In your render pass:\r\n * const prevFrame = historyMgr.getPrevious('taaHistory'); // Read from previous frame\r\n * const currentFrame = historyMgr.getCurrent('taaHistory'); // Write to current frame\r\n *\r\n * // At frame end:\r\n * historyMgr.swap(); // Swap current and previous\r\n * ```\r\n *\r\n * @typeParam TTexture - The concrete texture type (e.g. `Texture2D`).\r\n * @public\r\n */\r\nexport class HistoryResourceManager<TTexture = Texture2D> {\r\n private _resources: Map<string, TTexture[]> = new Map();\r\n private _allocator: RGTextureAllocator<TTexture>;\r\n private _frameIndex = 0;\r\n\r\n /**\r\n * Create a new history resource manager.\r\n *\r\n * @param allocator - Texture allocator for creating history textures.\r\n */\r\n constructor(allocator: RGTextureAllocator<TTexture>) {\r\n this._allocator = allocator;\r\n }\r\n\r\n /**\r\n * Register a new history resource with ping-pong buffering.\r\n *\r\n * Allocates two textures matching the given descriptor. If a resource\r\n * with the same name already exists, this is a no-op.\r\n *\r\n * @param name - Unique identifier for this history resource.\r\n * @param desc - Texture descriptor (format, size, etc.).\r\n * @param size - Resolved pixel dimensions.\r\n */\r\n register(name: string, desc: RGTextureDesc, size: RGResolvedSize): void {\r\n if (!this._resources.has(name)) {\r\n const tex0 = this._allocator.allocate(desc, size);\r\n const tex1 = this._allocator.allocate(desc, size);\r\n this._resources.set(name, [tex0, tex1]);\r\n }\r\n }\r\n\r\n /**\r\n * Register a new history resource with an existing texture (zero-copy).\r\n *\r\n * This is more efficient than register() + updateCurrent() for first-frame setup,\r\n * as it avoids allocating dummy textures that are immediately replaced.\r\n *\r\n * @param name - Unique identifier for this history resource.\r\n * @param desc - Texture descriptor (format, size, etc.).\r\n * @param size - Resolved pixel dimensions.\r\n * @param initialTexture - The initial texture to use as current frame.\r\n */\r\n registerWithTexture(\r\n name: string,\r\n desc: RGTextureDesc,\r\n size: RGResolvedSize,\r\n initialTexture: TTexture\r\n ): void {\r\n if (!this._resources.has(name)) {\r\n // Allocate only one texture for the \"previous\" slot\r\n const prevTexture = this._allocator.allocate(desc, size);\r\n // Use the provided texture as \"current\"\r\n this._resources.set(name, [initialTexture, prevTexture]);\r\n }\r\n }\r\n\r\n /**\r\n * Get the current frame's texture for a history resource.\r\n *\r\n * This is typically used as the write target in render passes.\r\n *\r\n * @param name - Name of the history resource.\r\n * @returns The current frame's texture.\r\n * @throws If the resource has not been registered.\r\n */\r\n getCurrent(name: string): TTexture {\r\n const textures = this._resources.get(name);\r\n if (!textures) {\r\n throw new Error(`History resource '${name}' not found. Did you forget to call register()?`);\r\n }\r\n return textures[this._frameIndex % 2];\r\n }\r\n\r\n /**\r\n * Get the previous frame's texture for a history resource.\r\n *\r\n * This is typically used as a read input in temporal effects like TAA.\r\n *\r\n * @param name - Name of the history resource.\r\n * @returns The previous frame's texture.\r\n * @throws If the resource has not been registered.\r\n */\r\n getPrevious(name: string): TTexture {\r\n const textures = this._resources.get(name);\r\n if (!textures) {\r\n throw new Error(`History resource '${name}' not found. Did you forget to call register()?`);\r\n }\r\n return textures[(this._frameIndex + 1) % 2];\r\n }\r\n\r\n /**\r\n * Check if a history resource exists.\r\n *\r\n * @param name - Name of the history resource.\r\n * @returns True if the resource has been registered.\r\n */\r\n has(name: string): boolean {\r\n return this._resources.has(name);\r\n }\r\n\r\n /**\r\n * Unregister a history resource and release its textures.\r\n *\r\n * @param name - Name of the history resource to remove.\r\n * @returns True if the resource was found and removed.\r\n */\r\n unregister(name: string): boolean {\r\n const textures = this._resources.get(name);\r\n if (textures) {\r\n textures.forEach((tex) => this._allocator.release(tex));\r\n this._resources.delete(name);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Swap current and previous textures for all history resources.\r\n *\r\n * Call this at the end of each frame to advance the ping-pong buffers.\r\n * After swapping, what was \"current\" becomes \"previous\" for the next frame.\r\n */\r\n swap(): void {\r\n this._frameIndex++;\r\n }\r\n\r\n /**\r\n * Release all history resources and clear the manager.\r\n *\r\n * Call this when disposing the render context or when history is no longer needed.\r\n */\r\n dispose(): void {\r\n for (const textures of this._resources.values()) {\r\n textures.forEach((tex) => this._allocator.release(tex));\r\n }\r\n this._resources.clear();\r\n this._frameIndex = 0;\r\n }\r\n\r\n /**\r\n * Update the current frame's texture with an external texture (for zero-copy workflows).\r\n *\r\n * This is useful when you want to use the output of a render pass directly as history,\r\n * without copying. The manager will release the old texture and use the new one.\r\n *\r\n * @param name - Name of the history resource.\r\n * @param texture - The new texture to use as current frame.\r\n */\r\n updateCurrent(name: string, texture: TTexture): void {\r\n const textures = this._resources.get(name);\r\n if (!textures) {\r\n throw new Error(`History resource '${name}' not found. Did you forget to call register()?`);\r\n }\r\n\r\n // Release the old current texture\r\n const oldTexture = textures[this._frameIndex % 2];\r\n this._allocator.release(oldTexture);\r\n\r\n // Replace with new texture\r\n textures[this._frameIndex % 2] = texture;\r\n }\r\n\r\n /**\r\n * Get the number of registered history resources.\r\n */\r\n get size(): number {\r\n return this._resources.size;\r\n }\r\n}\r\n"],"names":["HistoryResourceManager","_resources","Map","_allocator","_frameIndex","allocator","register","name","desc","size","has","tex0","allocate","tex1","set","registerWithTexture","initialTexture","prevTexture","getCurrent","textures","get","Error","getPrevious","unregister","forEach","tex","release","delete","swap","dispose","values","clear","updateCurrent","texture","oldTexture"],"mappings":"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"}
1
+ {"version":3,"file":"history_resource_manager.js","sources":["../../../src/render/rendergraph/history_resource_manager.ts"],"sourcesContent":["import type { Texture2D } from '@zephyr3d/device';\r\nimport type { RenderGraph } from './rendergraph';\r\nimport type { RenderGraphExecutor } from './executor';\r\nimport type { RGHandle, RGTextureAllocator, RGTextureDesc, RGResolvedSize } from './types';\r\n\r\ninterface HistoryResource<TTexture> {\r\n desc: RGTextureDesc;\r\n size: RGResolvedSize;\r\n textures: [TTexture | null, TTexture | null];\r\n ownsTexture: [boolean, boolean];\r\n currentIndex: number;\r\n valid: boolean;\r\n}\r\n\r\ninterface PendingHistoryCommit<TTexture> {\r\n desc: RGTextureDesc;\r\n size: RGResolvedSize;\r\n texture: TTexture;\r\n ownsTexture: boolean;\r\n}\r\n\r\n/**\r\n * Manages cross-frame history resources that can be imported into a render graph.\r\n *\r\n * History resources are textures that persist across frames for temporal effects\r\n * like TAA, motion blur, or temporal upscaling. Previous-frame textures can be\r\n * imported into a {@link RenderGraph}, and current-frame textures are committed\r\n * only after graph execution succeeds.\r\n *\r\n * Usage:\r\n * ```ts\r\n * const historyMgr = new HistoryResourceManager(allocator);\r\n * historyMgr.beginFrame();\r\n * const prev = historyMgr.importPrevious(graph, 'taaColor');\r\n * // declare builder.read(prev) if non-null\r\n * historyMgr.bindImportedTextures(executor);\r\n * // after successful execution:\r\n * historyMgr.commitFrame();\r\n * ```\r\n *\r\n * @typeParam TTexture - The concrete texture type (e.g. `Texture2D`).\r\n * @public\r\n */\r\nexport class HistoryResourceManager<TTexture = Texture2D> {\r\n private _resources: Map<string, HistoryResource<TTexture>> = new Map();\r\n private _allocator: RGTextureAllocator<TTexture>;\r\n private _pendingImports: Map<RGHandle, TTexture> = new Map();\r\n private _pendingCommits: Map<string, PendingHistoryCommit<TTexture>> = new Map();\r\n private _readScopeStack: Array<Map<string, TTexture>> = [];\r\n\r\n /**\r\n * Create a new history resource manager.\r\n *\r\n * @param allocator - Texture allocator for creating history textures.\r\n */\r\n constructor(allocator: RGTextureAllocator<TTexture>) {\r\n this._allocator = allocator;\r\n }\r\n\r\n /**\r\n * Get the previous-frame texture resolved by the current render graph pass.\r\n *\r\n * The resource must have been imported with {@link HistoryResourceManager.importPrevious} or\r\n * {@link HistoryResourceManager.importPreviousIfCompatible}, declared as a pass read, and bound with\r\n * {@link HistoryResourceManager.beginReadScope} before this method is called.\r\n *\r\n * @param name - Name of the history resource.\r\n * @returns The graph-resolved previous-frame texture.\r\n * @throws If no read scope is active for the resource.\r\n */\r\n getPrevious(name: string): TTexture {\r\n const scoped = this._getScopedRead(name);\r\n if (scoped) {\r\n return scoped;\r\n }\r\n throw new Error(\r\n `History resource '${name}' is not available in the current render graph read scope. ` +\r\n `Import it and declare a pass read before accessing it.`\r\n );\r\n }\r\n\r\n /**\r\n * Check whether a valid history resource exists and matches the descriptor.\r\n *\r\n * @param name - Name of the history resource.\r\n * @param desc - Expected texture descriptor.\r\n * @param size - Expected resolved size.\r\n * @returns True if the resource exists, is valid, and matches.\r\n */\r\n isCompatible(name: string, desc: RGTextureDesc, size: RGResolvedSize): boolean {\r\n const resource = this._resources.get(name);\r\n return !!resource?.valid && this._matches(resource, desc, size);\r\n }\r\n\r\n /**\r\n * Start collecting graph imports and deferred commits for a new frame.\r\n */\r\n beginFrame(): void {\r\n this.discardFrame();\r\n this._pendingImports.clear();\r\n this._readScopeStack.length = 0;\r\n }\r\n\r\n /**\r\n * Import the latest committed texture for a history resource into the graph.\r\n *\r\n * Returns null when the resource has no valid previous frame.\r\n *\r\n * @param graph - Render graph to import into.\r\n * @param name - History resource name.\r\n * @returns Imported graph handle, or null when no valid previous texture exists.\r\n */\r\n importPrevious(graph: RenderGraph, name: string): RGHandle | null {\r\n const resource = this._resources.get(name);\r\n const texture = resource?.valid ? resource.textures[resource.currentIndex] : null;\r\n if (!texture) {\r\n return null;\r\n }\r\n const handle = graph.importTexture(`history:${name}:previous`);\r\n this._pendingImports.set(handle, texture);\r\n return handle;\r\n }\r\n\r\n /**\r\n * Import the latest committed texture only when it matches the expected shape.\r\n *\r\n * This is the preferred API for effects that can declare their history reads\r\n * while building the graph: incompatible history is treated as absent, so the\r\n * pass does not declare stale reads after resize or format changes.\r\n *\r\n * @param graph - Render graph to import into.\r\n * @param name - History resource name.\r\n * @param desc - Expected texture descriptor.\r\n * @param size - Expected resolved size.\r\n * @returns Imported graph handle, or null when no compatible history exists.\r\n */\r\n importPreviousIfCompatible(\r\n graph: RenderGraph,\r\n name: string,\r\n desc: RGTextureDesc,\r\n size: RGResolvedSize\r\n ): RGHandle | null {\r\n return this.isCompatible(name, desc, size) ? this.importPrevious(graph, name) : null;\r\n }\r\n\r\n /**\r\n * Bind all history imports created for this frame to the executor.\r\n *\r\n * @param executor - Render graph executor for the current frame.\r\n */\r\n bindImportedTextures(executor: Pick<RenderGraphExecutor<TTexture>, 'setImportedTexture'>): void {\r\n for (const [handle, texture] of this._pendingImports) {\r\n executor.setImportedTexture(handle, texture);\r\n }\r\n }\r\n\r\n /**\r\n * Make resolved history textures available to code executing inside a pass.\r\n *\r\n * @param bindings - History name to resolved texture bindings.\r\n */\r\n beginReadScope(bindings: Array<{ name: string; texture: TTexture }>): void {\r\n const scope = new Map<string, TTexture>();\r\n for (const binding of bindings) {\r\n scope.set(binding.name, binding.texture);\r\n }\r\n this._readScopeStack.push(scope);\r\n }\r\n\r\n /**\r\n * End the most recent history read scope.\r\n */\r\n endReadScope(): void {\r\n this._readScopeStack.pop();\r\n }\r\n\r\n /**\r\n * Queue a current-frame texture to become the next previous-frame history.\r\n *\r\n * The texture is committed only when {@link HistoryResourceManager.commitFrame} is called. If the\r\n * frame fails, {@link HistoryResourceManager.discardFrame} releases owned pending textures instead.\r\n *\r\n * @param name - History resource name.\r\n * @param desc - Texture descriptor.\r\n * @param size - Resolved texture size.\r\n * @param texture - Texture produced by the current frame.\r\n * @param ownsTexture - Whether this manager should release the texture later.\r\n */\r\n queueCommit(\r\n name: string,\r\n desc: RGTextureDesc,\r\n size: RGResolvedSize,\r\n texture: TTexture,\r\n ownsTexture = true\r\n ): void {\r\n const existing = this._pendingCommits.get(name);\r\n if (existing?.ownsTexture) {\r\n this._allocator.release(existing.texture);\r\n }\r\n this._pendingCommits.set(name, {\r\n desc: { ...desc },\r\n size: { ...size },\r\n texture,\r\n ownsTexture\r\n });\r\n }\r\n\r\n /**\r\n * Commit all current-frame history writes.\r\n */\r\n commitFrame(): void {\r\n for (const [name, pending] of this._pendingCommits) {\r\n let resource = this._resources.get(name);\r\n if (resource && !this._matches(resource, pending.desc, pending.size)) {\r\n this._releaseResource(resource);\r\n this._resources.delete(name);\r\n resource = undefined;\r\n }\r\n if (!resource) {\r\n resource = {\r\n desc: { ...pending.desc },\r\n size: { ...pending.size },\r\n textures: [null, null],\r\n ownsTexture: [false, false],\r\n currentIndex: 0,\r\n valid: false\r\n };\r\n this._resources.set(name, resource);\r\n }\r\n\r\n const writeIndex = resource.valid ? 1 - resource.currentIndex : resource.currentIndex;\r\n this._releaseSlot(resource, writeIndex);\r\n resource.textures[writeIndex] = pending.texture;\r\n resource.ownsTexture[writeIndex] = pending.ownsTexture;\r\n resource.desc = { ...pending.desc };\r\n resource.size = { ...pending.size };\r\n resource.currentIndex = writeIndex;\r\n resource.valid = true;\r\n }\r\n this._pendingCommits.clear();\r\n this._pendingImports.clear();\r\n this._readScopeStack.length = 0;\r\n }\r\n\r\n /**\r\n * Discard all uncommitted frame history writes.\r\n */\r\n discardFrame(): void {\r\n for (const pending of this._pendingCommits.values()) {\r\n if (pending.ownsTexture) {\r\n this._allocator.release(pending.texture);\r\n }\r\n }\r\n this._pendingCommits.clear();\r\n this._pendingImports.clear();\r\n this._readScopeStack.length = 0;\r\n }\r\n\r\n /**\r\n * Release all history resources and clear the manager.\r\n *\r\n * Call this when disposing the render context or when history is no longer needed.\r\n */\r\n dispose(): void {\r\n this.discardFrame();\r\n for (const resource of this._resources.values()) {\r\n this._releaseResource(resource);\r\n }\r\n this._resources.clear();\r\n }\r\n\r\n /** @internal */\r\n private _getScopedRead(name: string): TTexture | null {\r\n for (let i = this._readScopeStack.length - 1; i >= 0; i--) {\r\n const texture = this._readScopeStack[i].get(name);\r\n if (texture) {\r\n return texture;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /** @internal */\r\n private _matches(resource: HistoryResource<TTexture>, desc: RGTextureDesc, size: RGResolvedSize): boolean {\r\n return (\r\n resource.desc.format === desc.format &&\r\n (resource.desc.mipLevels ?? 1) === (desc.mipLevels ?? 1) &&\r\n resource.size.width === size.width &&\r\n resource.size.height === size.height\r\n );\r\n }\r\n\r\n /** @internal */\r\n private _releaseResource(resource: HistoryResource<TTexture>): void {\r\n this._releaseSlot(resource, 0);\r\n this._releaseSlot(resource, 1);\r\n resource.valid = false;\r\n }\r\n\r\n /** @internal */\r\n private _releaseSlot(resource: HistoryResource<TTexture>, index: number): void {\r\n const texture = resource.textures[index];\r\n if (!texture) {\r\n return;\r\n }\r\n const otherIndex = 1 - index;\r\n if (resource.ownsTexture[index] && resource.textures[otherIndex] !== texture) {\r\n this._allocator.release(texture);\r\n }\r\n resource.textures[index] = null;\r\n resource.ownsTexture[index] = false;\r\n }\r\n}\r\n"],"names":["HistoryResourceManager","_resources","Map","_allocator","_pendingImports","_pendingCommits","_readScopeStack","allocator","getPrevious","name","scoped","_getScopedRead","Error","isCompatible","desc","size","resource","get","valid","_matches","beginFrame","discardFrame","clear","length","importPrevious","graph","texture","textures","currentIndex","handle","importTexture","set","importPreviousIfCompatible","bindImportedTextures","executor","setImportedTexture","beginReadScope","bindings","scope","binding","push","endReadScope","pop","queueCommit","ownsTexture","existing","release","commitFrame","pending","_releaseResource","delete","undefined","writeIndex","_releaseSlot","values","dispose","i","format","mipLevels","width","height","index","otherIndex"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Resource names for render graph history resources.
3
+ * @public
4
+ */ const RGHistoryResources = {
5
+ TAA_COLOR: 'taaColor',
6
+ TAA_MOTION_VECTOR: 'taaMotionVector'
7
+ };
8
+
9
+ export { RGHistoryResources };
10
+ //# sourceMappingURL=history_resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history_resources.js","sources":["../../../src/render/rendergraph/history_resources.ts"],"sourcesContent":["/**\r\n * Resource names for render graph history resources.\r\n * @public\r\n */\r\nexport const RGHistoryResources = {\r\n TAA_COLOR: 'taaColor',\r\n TAA_MOTION_VECTOR: 'taaMotionVector'\r\n} as const;\r\n"],"names":["RGHistoryResources","TAA_COLOR","TAA_MOTION_VECTOR"],"mappings":"AAAA;;;UAIaA,kBAAqB,GAAA;IAChCC,SAAW,EAAA,UAAA;IACXC,iBAAmB,EAAA;AACrB;;;;"}