@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.
- package/dist/animation/animationset.js +2 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +94 -46
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +4 -4
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +13 -40
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +22 -1
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +60 -60
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +1 -1
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +795 -266
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +3 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/shader/helper.js +281 -278
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +195 -115
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +25 -5
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +81 -97
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +228 -228
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +94 -66
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/src/blitter/bilateralblur.js +221 -0
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/src/utility/textures/ggxlut.js +213 -0
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +4 -4
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/manager.js +299 -268
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +49 -53
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
|
@@ -1,27 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Manages cross-frame history resources
|
|
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.
|
|
6
|
-
*
|
|
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
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
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
|
-
|
|
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
|
-
*
|
|
36
|
+
* Get the previous-frame texture resolved by the current render graph pass.
|
|
42
37
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
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 -
|
|
47
|
-
* @
|
|
48
|
-
* @
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
*
|
|
53
|
+
* Check whether a valid history resource exists and matches the descriptor.
|
|
61
54
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* @
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
*
|
|
71
|
+
* Import the latest committed texture for a history resource into the graph.
|
|
82
72
|
*
|
|
83
|
-
*
|
|
73
|
+
* Returns null when the resource has no valid previous frame.
|
|
84
74
|
*
|
|
85
|
-
* @param
|
|
86
|
-
* @
|
|
87
|
-
* @
|
|
88
|
-
*/
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
84
|
+
const handle = graph.importTexture(`history:${name}:previous`);
|
|
85
|
+
this._pendingImports.set(handle, texture);
|
|
86
|
+
return handle;
|
|
94
87
|
}
|
|
95
88
|
/**
|
|
96
|
-
*
|
|
89
|
+
* Import the latest committed texture only when it matches the expected shape.
|
|
97
90
|
*
|
|
98
|
-
* This is
|
|
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
|
|
101
|
-
* @
|
|
102
|
-
* @
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
*
|
|
104
|
+
* Bind all history imports created for this frame to the executor.
|
|
112
105
|
*
|
|
113
|
-
* @param
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
*
|
|
113
|
+
* Make resolved history textures available to code executing inside a pass.
|
|
120
114
|
*
|
|
121
|
-
* @param
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
129
|
+
* Queue a current-frame texture to become the next previous-frame history.
|
|
134
130
|
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
146
|
-
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
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
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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 @@
|
|
|
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;;;;"}
|