@thunderclap-engine/engine 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +390 -0
- package/LICENSE +21 -0
- package/README.md +333 -2
- package/dist/analytics/analytics.d.ts +80 -0
- package/dist/analytics/analytics.js +129 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.js +1 -0
- package/dist/anim/aim.d.ts +43 -0
- package/dist/anim/aim.js +157 -0
- package/dist/anim/clip.d.ts +98 -0
- package/dist/anim/clip.js +282 -0
- package/dist/anim/compress.d.ts +65 -0
- package/dist/anim/compress.js +339 -0
- package/dist/anim/foot-ik.d.ts +74 -0
- package/dist/anim/foot-ik.js +241 -0
- package/dist/anim/graph.d.ts +153 -0
- package/dist/anim/graph.js +532 -0
- package/dist/anim/ik.d.ts +105 -0
- package/dist/anim/ik.js +435 -0
- package/dist/anim/index.d.ts +36 -0
- package/dist/anim/index.js +21 -0
- package/dist/anim/match.d.ts +66 -0
- package/dist/anim/match.js +153 -0
- package/dist/anim/mixer.d.ts +113 -0
- package/dist/anim/mixer.js +314 -0
- package/dist/anim/morph.d.ts +41 -0
- package/dist/anim/morph.js +94 -0
- package/dist/anim/pose.d.ts +74 -0
- package/dist/anim/pose.js +254 -0
- package/dist/anim/quat.d.ts +44 -0
- package/dist/anim/quat.js +187 -0
- package/dist/anim/retarget.d.ts +97 -0
- package/dist/anim/retarget.js +366 -0
- package/dist/anim/root-motion.d.ts +44 -0
- package/dist/anim/root-motion.js +224 -0
- package/dist/anim/skin-pose.d.ts +39 -0
- package/dist/anim/skin-pose.js +53 -0
- package/dist/anim/socket.d.ts +47 -0
- package/dist/anim/socket.js +84 -0
- package/dist/anim/spring-chain.d.ts +73 -0
- package/dist/anim/spring-chain.js +294 -0
- package/dist/assets/atlas.d.ts +90 -0
- package/dist/assets/atlas.js +212 -0
- package/dist/assets/baked.d.ts +33 -0
- package/dist/assets/baked.js +38 -0
- package/dist/assets/bundle.d.ts +88 -0
- package/dist/assets/bundle.js +464 -0
- package/dist/assets/cache.d.ts +56 -0
- package/dist/assets/cache.js +123 -0
- package/dist/assets/gltf-load.d.ts +252 -0
- package/dist/assets/gltf-load.js +661 -0
- package/dist/assets/gltf-skin.d.ts +36 -0
- package/dist/assets/gltf-skin.js +109 -0
- package/dist/assets/gltf.d.ts +706 -0
- package/dist/assets/gltf.js +1376 -0
- package/dist/assets/index.d.ts +20 -0
- package/dist/assets/index.js +10 -0
- package/dist/assets/ktx2.d.ts +71 -0
- package/dist/assets/ktx2.js +213 -0
- package/dist/assets/manifest.d.ts +79 -0
- package/dist/assets/manifest.js +7 -0
- package/dist/assets/meshopt.d.ts +23 -0
- package/dist/assets/meshopt.js +403 -0
- package/dist/audio/audio.d.ts +733 -0
- package/dist/audio/audio.js +2013 -0
- package/dist/audio/dsp.d.ts +61 -0
- package/dist/audio/dsp.js +159 -0
- package/dist/audio/duck.d.ts +44 -0
- package/dist/audio/duck.js +101 -0
- package/dist/audio/envelope.d.ts +53 -0
- package/dist/audio/envelope.js +106 -0
- package/dist/audio/index.d.ts +13 -0
- package/dist/audio/index.js +14 -0
- package/dist/audio/music.d.ts +113 -0
- package/dist/audio/music.js +548 -0
- package/dist/audio/occlusion.d.ts +55 -0
- package/dist/audio/occlusion.js +61 -0
- package/dist/audio/persist.d.ts +23 -0
- package/dist/audio/persist.js +27 -0
- package/dist/audio/recipes.d.ts +55 -0
- package/dist/audio/recipes.js +227 -0
- package/dist/audio/send.d.ts +41 -0
- package/dist/audio/send.js +118 -0
- package/dist/audio/sprites.d.ts +59 -0
- package/dist/audio/sprites.js +43 -0
- package/dist/audio/synth.d.ts +103 -0
- package/dist/audio/synth.js +197 -0
- package/dist/audio/variations.d.ts +25 -0
- package/dist/audio/variations.js +55 -0
- package/dist/audio/zones.d.ts +100 -0
- package/dist/audio/zones.js +167 -0
- package/dist/core/detached-surface.d.ts +44 -0
- package/dist/core/detached-surface.js +104 -0
- package/dist/core/events.d.ts +24 -0
- package/dist/core/events.js +43 -0
- package/dist/core/game.d.ts +409 -0
- package/dist/core/game.js +530 -0
- package/dist/core/hash.d.ts +24 -0
- package/dist/core/hash.js +49 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.js +9 -0
- package/dist/core/loop.d.ts +113 -0
- package/dist/core/loop.js +185 -0
- package/dist/core/math.d.ts +58 -0
- package/dist/core/math.js +210 -0
- package/dist/core/noise.d.ts +40 -0
- package/dist/core/noise.js +247 -0
- package/dist/core/pool.d.ts +42 -0
- package/dist/core/pool.js +85 -0
- package/dist/core/random.d.ts +61 -0
- package/dist/core/random.js +199 -0
- package/dist/core/scene.d.ts +79 -0
- package/dist/core/scene.js +195 -0
- package/dist/core/timer.d.ts +66 -0
- package/dist/core/timer.js +286 -0
- package/dist/fx/billboard-wgsl.d.ts +29 -0
- package/dist/fx/billboard-wgsl.js +158 -0
- package/dist/fx/billboard.d.ts +249 -0
- package/dist/fx/billboard.js +702 -0
- package/dist/fx/debug-draw.d.ts +127 -0
- package/dist/fx/debug-draw.js +523 -0
- package/dist/fx/debug-wgsl.d.ts +7 -0
- package/dist/fx/debug-wgsl.js +32 -0
- package/dist/fx/decals-wgsl.d.ts +15 -0
- package/dist/fx/decals-wgsl.js +173 -0
- package/dist/fx/decals.d.ts +216 -0
- package/dist/fx/decals.js +607 -0
- package/dist/fx/effect.d.ts +129 -0
- package/dist/fx/effect.js +349 -0
- package/dist/fx/effects/hit-spark.json +48 -0
- package/dist/fx/effects/index.d.ts +8 -0
- package/dist/fx/effects/index.js +9 -0
- package/dist/fx/effects/magic-aura.json +47 -0
- package/dist/fx/effects/smoke-puff.json +34 -0
- package/dist/fx/emit-surface.d.ts +40 -0
- package/dist/fx/emit-surface.js +124 -0
- package/dist/fx/flicker.d.ts +30 -0
- package/dist/fx/flicker.js +42 -0
- package/dist/fx/index.d.ts +31 -0
- package/dist/fx/index.js +20 -0
- package/dist/fx/particles-wgsl.d.ts +57 -0
- package/dist/fx/particles-wgsl.js +828 -0
- package/dist/fx/particles.d.ts +566 -0
- package/dist/fx/particles.js +1533 -0
- package/dist/fx/random.d.ts +15 -0
- package/dist/fx/random.js +20 -0
- package/dist/fx/sky-wgsl.d.ts +23 -0
- package/dist/fx/sky-wgsl.js +127 -0
- package/dist/fx/sky.d.ts +96 -0
- package/dist/fx/sky.js +175 -0
- package/dist/fx/text-atlas.d.ts +143 -0
- package/dist/fx/text-atlas.js +327 -0
- package/dist/fx/trail-wgsl.d.ts +11 -0
- package/dist/fx/trail-wgsl.js +42 -0
- package/dist/fx/trail.d.ts +194 -0
- package/dist/fx/trail.js +555 -0
- package/dist/fx/water-wgsl.d.ts +34 -0
- package/dist/fx/water-wgsl.js +197 -0
- package/dist/fx/water.d.ts +176 -0
- package/dist/fx/water.js +371 -0
- package/dist/geom/collide/bvh.d.ts +151 -0
- package/dist/geom/collide/bvh.js +493 -0
- package/dist/geom/collide/debug.d.ts +14 -0
- package/dist/geom/collide/debug.js +74 -0
- package/dist/geom/collide/grid.d.ts +26 -0
- package/dist/geom/collide/grid.js +91 -0
- package/dist/geom/collide/index.d.ts +8 -0
- package/dist/geom/collide/index.js +8 -0
- package/dist/geom/collide/queries.d.ts +70 -0
- package/dist/geom/collide/queries.js +583 -0
- package/dist/geom/collide/serialize.d.ts +14 -0
- package/dist/geom/collide/serialize.js +145 -0
- package/dist/geom/collide/shapes.d.ts +161 -0
- package/dist/geom/collide/shapes.js +686 -0
- package/dist/geom/collide/slide.d.ts +66 -0
- package/dist/geom/collide/slide.js +375 -0
- package/dist/geom/collide/tile-slide.d.ts +88 -0
- package/dist/geom/collide/tile-slide.js +255 -0
- package/dist/geom/geometry.d.ts +95 -0
- package/dist/geom/geometry.js +322 -0
- package/dist/geom/heightfield.d.ts +72 -0
- package/dist/geom/heightfield.js +295 -0
- package/dist/geom/hull.d.ts +27 -0
- package/dist/geom/hull.js +279 -0
- package/dist/geom/index.d.ts +35 -0
- package/dist/geom/index.js +23 -0
- package/dist/geom/iso.d.ts +74 -0
- package/dist/geom/iso.js +89 -0
- package/dist/geom/lod.d.ts +29 -0
- package/dist/geom/lod.js +27 -0
- package/dist/geom/ops.d.ts +47 -0
- package/dist/geom/ops.js +285 -0
- package/dist/geom/primitives.d.ts +97 -0
- package/dist/geom/primitives.js +359 -0
- package/dist/geom/shapes.d.ts +43 -0
- package/dist/geom/shapes.js +88 -0
- package/dist/geom/simplify.d.ts +38 -0
- package/dist/geom/simplify.js +519 -0
- package/dist/geom/split.d.ts +37 -0
- package/dist/geom/split.js +413 -0
- package/dist/geom/sweep.d.ts +83 -0
- package/dist/geom/sweep.js +534 -0
- package/dist/geom/tangents.d.ts +16 -0
- package/dist/geom/tangents.js +124 -0
- package/dist/geom/triangulate.d.ts +19 -0
- package/dist/geom/triangulate.js +147 -0
- package/dist/host/default.d.ts +10 -0
- package/dist/host/default.js +10 -0
- package/dist/host/index.d.ts +4 -0
- package/dist/host/index.js +3 -0
- package/dist/host/types.d.ts +144 -0
- package/dist/host/types.js +1 -0
- package/dist/host/web-links.d.ts +38 -0
- package/dist/host/web-links.js +110 -0
- package/dist/host/web.d.ts +30 -0
- package/dist/host/web.js +216 -0
- package/dist/host/xr.d.ts +24 -0
- package/dist/host/xr.js +59 -0
- package/dist/i18n/i18n.d.ts +59 -0
- package/dist/i18n/i18n.js +241 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/message.d.ts +72 -0
- package/dist/i18n/message.js +369 -0
- package/dist/i18n/negotiate.d.ts +17 -0
- package/dist/i18n/negotiate.js +58 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1 -0
- package/dist/input/bindings.d.ts +31 -0
- package/dist/input/bindings.js +141 -0
- package/dist/input/clock.d.ts +44 -0
- package/dist/input/clock.js +49 -0
- package/dist/input/follow.d.ts +133 -0
- package/dist/input/follow.js +218 -0
- package/dist/input/gestures.d.ts +281 -0
- package/dist/input/gestures.js +662 -0
- package/dist/input/glyphs.d.ts +35 -0
- package/dist/input/glyphs.js +216 -0
- package/dist/input/gyro.d.ts +85 -0
- package/dist/input/gyro.js +140 -0
- package/dist/input/index.d.ts +19 -0
- package/dist/input/index.js +16 -0
- package/dist/input/input.d.ts +543 -0
- package/dist/input/input.js +1492 -0
- package/dist/input/look.d.ts +327 -0
- package/dist/input/look.js +681 -0
- package/dist/input/magnify.d.ts +177 -0
- package/dist/input/magnify.js +131 -0
- package/dist/input/pointer-dispatch.d.ts +138 -0
- package/dist/input/pointer-dispatch.js +180 -0
- package/dist/input/pointer-router.d.ts +204 -0
- package/dist/input/pointer-router.js +533 -0
- package/dist/input/pointer-sources.d.ts +164 -0
- package/dist/input/pointer-sources.js +306 -0
- package/dist/input/rays.d.ts +138 -0
- package/dist/input/rays.js +615 -0
- package/dist/input/record.d.ts +209 -0
- package/dist/input/record.js +601 -0
- package/dist/input/touch-zones.d.ts +147 -0
- package/dist/input/touch-zones.js +300 -0
- package/dist/input/types.d.ts +158 -0
- package/dist/input/types.js +1 -0
- package/dist/input/xr-source.d.ts +53 -0
- package/dist/input/xr-source.js +164 -0
- package/dist/nav/astar.d.ts +45 -0
- package/dist/nav/astar.js +182 -0
- package/dist/nav/corridor.d.ts +40 -0
- package/dist/nav/corridor.js +95 -0
- package/dist/nav/crowd.d.ts +94 -0
- package/dist/nav/crowd.js +624 -0
- package/dist/nav/flow.d.ts +61 -0
- package/dist/nav/flow.js +193 -0
- package/dist/nav/grid.d.ts +108 -0
- package/dist/nav/grid.js +210 -0
- package/dist/nav/heap.d.ts +22 -0
- package/dist/nav/heap.js +92 -0
- package/dist/nav/index.d.ts +37 -0
- package/dist/nav/index.js +19 -0
- package/dist/nav/mesh/areas.d.ts +44 -0
- package/dist/nav/mesh/areas.js +98 -0
- package/dist/nav/mesh/bake-options.d.ts +33 -0
- package/dist/nav/mesh/bake-options.js +76 -0
- package/dist/nav/mesh/contour.d.ts +22 -0
- package/dist/nav/mesh/contour.js +323 -0
- package/dist/nav/mesh/flow3.d.ts +35 -0
- package/dist/nav/mesh/flow3.js +229 -0
- package/dist/nav/mesh/links.d.ts +38 -0
- package/dist/nav/mesh/links.js +72 -0
- package/dist/nav/mesh/mesh-path.d.ts +152 -0
- package/dist/nav/mesh/mesh-path.js +643 -0
- package/dist/nav/mesh/mesh-reach.d.ts +78 -0
- package/dist/nav/mesh/mesh-reach.js +450 -0
- package/dist/nav/mesh/navmesh.d.ts +117 -0
- package/dist/nav/mesh/navmesh.js +647 -0
- package/dist/nav/mesh/polymesh.d.ts +24 -0
- package/dist/nav/mesh/polymesh.js +384 -0
- package/dist/nav/mesh/regions.d.ts +12 -0
- package/dist/nav/mesh/regions.js +367 -0
- package/dist/nav/mesh/serialize.d.ts +13 -0
- package/dist/nav/mesh/serialize.js +197 -0
- package/dist/nav/mesh/voxelize.d.ts +111 -0
- package/dist/nav/mesh/voxelize.js +552 -0
- package/dist/nav/obstacles.d.ts +75 -0
- package/dist/nav/obstacles.js +294 -0
- package/dist/nav/path.d.ts +59 -0
- package/dist/nav/path.js +177 -0
- package/dist/nav/query-queue.d.ts +46 -0
- package/dist/nav/query-queue.js +308 -0
- package/dist/nav/reach.d.ts +53 -0
- package/dist/nav/reach.js +148 -0
- package/dist/nav/steer.d.ts +36 -0
- package/dist/nav/steer.js +78 -0
- package/dist/platform/boot.d.ts +28 -0
- package/dist/platform/boot.js +43 -0
- package/dist/platform/device-mode.d.ts +40 -0
- package/dist/platform/device-mode.js +104 -0
- package/dist/platform/device.d.ts +31 -0
- package/dist/platform/device.js +91 -0
- package/dist/platform/environment.d.ts +42 -0
- package/dist/platform/environment.js +82 -0
- package/dist/platform/gpu.d.ts +40 -0
- package/dist/platform/gpu.js +57 -0
- package/dist/platform/index.d.ts +18 -0
- package/dist/platform/index.js +10 -0
- package/dist/platform/letterbox.d.ts +43 -0
- package/dist/platform/letterbox.js +57 -0
- package/dist/platform/links.d.ts +20 -0
- package/dist/platform/links.js +43 -0
- package/dist/platform/screens.d.ts +36 -0
- package/dist/platform/screens.js +138 -0
- package/dist/platform/surface.d.ts +72 -0
- package/dist/platform/surface.js +157 -0
- package/dist/platform/xr-fake.d.ts +168 -0
- package/dist/platform/xr-fake.js +434 -0
- package/dist/platform/xr-surface.d.ts +120 -0
- package/dist/platform/xr-surface.js +214 -0
- package/dist/platform/xr-types.d.ts +262 -0
- package/dist/post/ao.d.ts +12 -0
- package/dist/post/ao.js +136 -0
- package/dist/post/blend.d.ts +27 -0
- package/dist/post/blend.js +129 -0
- package/dist/post/depth-pass.d.ts +43 -0
- package/dist/post/depth-pass.js +118 -0
- package/dist/post/dof.d.ts +1 -0
- package/dist/post/dof.js +66 -0
- package/dist/post/exposure.d.ts +80 -0
- package/dist/post/exposure.js +322 -0
- package/dist/post/index.d.ts +12 -0
- package/dist/post/index.js +11 -0
- package/dist/post/lens-dirt.d.ts +13 -0
- package/dist/post/lens-dirt.js +91 -0
- package/dist/post/lut.d.ts +19 -0
- package/dist/post/lut.js +50 -0
- package/dist/post/motion-blur.d.ts +9 -0
- package/dist/post/motion-blur.js +78 -0
- package/dist/post/post-stack.d.ts +302 -0
- package/dist/post/post-stack.js +1137 -0
- package/dist/post/settings.d.ts +485 -0
- package/dist/post/settings.js +416 -0
- package/dist/post/shaders.d.ts +25 -0
- package/dist/post/shaders.js +410 -0
- package/dist/post/ssr.d.ts +16 -0
- package/dist/post/ssr.js +155 -0
- package/dist/post/taa.d.ts +74 -0
- package/dist/post/taa.js +235 -0
- package/dist/post/white-balance.d.ts +25 -0
- package/dist/post/white-balance.js +98 -0
- package/dist/render/bindings.d.ts +98 -0
- package/dist/render/bindings.js +281 -0
- package/dist/render/blend.d.ts +13 -0
- package/dist/render/blend.js +26 -0
- package/dist/render/camera-2d.d.ts +72 -0
- package/dist/render/camera-2d.js +92 -0
- package/dist/render/camera.d.ts +302 -0
- package/dist/render/camera.js +671 -0
- package/dist/render/color.d.ts +16 -0
- package/dist/render/color.js +41 -0
- package/dist/render/compressed.d.ts +104 -0
- package/dist/render/compressed.js +248 -0
- package/dist/render/diagnostics.d.ts +15 -0
- package/dist/render/diagnostics.js +43 -0
- package/dist/render/dynamic-resolution.d.ts +70 -0
- package/dist/render/dynamic-resolution.js +126 -0
- package/dist/render/fake-gpu.d.ts +204 -0
- package/dist/render/fake-gpu.js +426 -0
- package/dist/render/flipbook.d.ts +56 -0
- package/dist/render/flipbook.js +87 -0
- package/dist/render/frame.d.ts +278 -0
- package/dist/render/frame.js +174 -0
- package/dist/render/fullscreen.d.ts +54 -0
- package/dist/render/fullscreen.js +91 -0
- package/dist/render/gpu-timer.d.ts +73 -0
- package/dist/render/gpu-timer.js +186 -0
- package/dist/render/index.d.ts +53 -0
- package/dist/render/index.js +29 -0
- package/dist/render/instance-list.d.ts +185 -0
- package/dist/render/instance-list.js +547 -0
- package/dist/render/lights.d.ts +181 -0
- package/dist/render/lights.js +233 -0
- package/dist/render/lod.d.ts +54 -0
- package/dist/render/lod.js +52 -0
- package/dist/render/material.d.ts +165 -0
- package/dist/render/material.js +292 -0
- package/dist/render/mesh.d.ts +284 -0
- package/dist/render/mesh.js +472 -0
- package/dist/render/mipmap.d.ts +16 -0
- package/dist/render/mipmap.js +121 -0
- package/dist/render/parallax.d.ts +50 -0
- package/dist/render/parallax.js +47 -0
- package/dist/render/pbr-wgsl.d.ts +31 -0
- package/dist/render/pbr-wgsl.js +119 -0
- package/dist/render/ping-pong.d.ts +42 -0
- package/dist/render/ping-pong.js +74 -0
- package/dist/render/renderer.d.ts +741 -0
- package/dist/render/renderer.js +2486 -0
- package/dist/render/scene-pipelines.d.ts +44 -0
- package/dist/render/scene-pipelines.js +92 -0
- package/dist/render/scene-target.d.ts +170 -0
- package/dist/render/scene-target.js +450 -0
- package/dist/render/shadow.d.ts +74 -0
- package/dist/render/shadow.js +208 -0
- package/dist/render/skin.d.ts +112 -0
- package/dist/render/skin.js +240 -0
- package/dist/render/snapshot.d.ts +36 -0
- package/dist/render/snapshot.js +34 -0
- package/dist/render/standard.d.ts +162 -0
- package/dist/render/standard.js +263 -0
- package/dist/render/texture.d.ts +142 -0
- package/dist/render/texture.js +228 -0
- package/dist/render/tile-layer.d.ts +110 -0
- package/dist/render/tile-layer.js +304 -0
- package/dist/render/transform.d.ts +115 -0
- package/dist/render/transform.js +318 -0
- package/dist/render/wgsl.d.ts +131 -0
- package/dist/render/wgsl.js +528 -0
- package/dist/save/codec.d.ts +49 -0
- package/dist/save/codec.js +169 -0
- package/dist/save/index.d.ts +8 -0
- package/dist/save/index.js +8 -0
- package/dist/save/journal.d.ts +24 -0
- package/dist/save/journal.js +102 -0
- package/dist/save/migrate.d.ts +15 -0
- package/dist/save/migrate.js +37 -0
- package/dist/save/schema.d.ts +72 -0
- package/dist/save/schema.js +154 -0
- package/dist/save/settings.d.ts +28 -0
- package/dist/save/settings.js +59 -0
- package/dist/save/slots.d.ts +56 -0
- package/dist/save/slots.js +200 -0
- package/dist/save/storage.d.ts +35 -0
- package/dist/save/storage.js +62 -0
- package/dist/save/store.d.ts +114 -0
- package/dist/save/store.js +269 -0
- package/dist/testing/fake-host.d.ts +103 -0
- package/dist/testing/fake-host.js +163 -0
- package/dist/testing/fixed-clock.d.ts +25 -0
- package/dist/testing/fixed-clock.js +30 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/test-game.d.ts +76 -0
- package/dist/testing/test-game.js +92 -0
- package/dist/tween/ease.d.ts +77 -0
- package/dist/tween/ease.js +192 -0
- package/dist/tween/index.d.ts +8 -0
- package/dist/tween/index.js +7 -0
- package/dist/tween/timeline.d.ts +78 -0
- package/dist/tween/timeline.js +269 -0
- package/dist/tween/tween.d.ts +168 -0
- package/dist/tween/tween.js +320 -0
- package/dist/ui/anchor.d.ts +206 -0
- package/dist/ui/anchor.js +307 -0
- package/dist/ui/caption.d.ts +122 -0
- package/dist/ui/caption.js +286 -0
- package/dist/ui/cursor.d.ts +105 -0
- package/dist/ui/cursor.js +261 -0
- package/dist/ui/dom.d.ts +30 -0
- package/dist/ui/dom.js +92 -0
- package/dist/ui/floats.d.ts +86 -0
- package/dist/ui/floats.js +260 -0
- package/dist/ui/hud.d.ts +198 -0
- package/dist/ui/hud.js +431 -0
- package/dist/ui/index.d.ts +37 -0
- package/dist/ui/index.js +34 -0
- package/dist/ui/inventory-card.d.ts +52 -0
- package/dist/ui/inventory-card.js +173 -0
- package/dist/ui/inventory-context.d.ts +29 -0
- package/dist/ui/inventory-context.js +125 -0
- package/dist/ui/inventory-drag.d.ts +63 -0
- package/dist/ui/inventory-drag.js +394 -0
- package/dist/ui/inventory-grid.d.ts +66 -0
- package/dist/ui/inventory-grid.js +625 -0
- package/dist/ui/inventory-radial.d.ts +39 -0
- package/dist/ui/inventory-radial.js +168 -0
- package/dist/ui/inventory.d.ts +128 -0
- package/dist/ui/inventory.js +154 -0
- package/dist/ui/layout.d.ts +356 -0
- package/dist/ui/layout.js +856 -0
- package/dist/ui/link.d.ts +64 -0
- package/dist/ui/link.js +155 -0
- package/dist/ui/loading.d.ts +40 -0
- package/dist/ui/loading.js +157 -0
- package/dist/ui/loupe.d.ts +74 -0
- package/dist/ui/loupe.js +164 -0
- package/dist/ui/menu-nav.d.ts +33 -0
- package/dist/ui/menu-nav.js +28 -0
- package/dist/ui/minimap-canvas.d.ts +145 -0
- package/dist/ui/minimap-canvas.js +460 -0
- package/dist/ui/notify.d.ts +40 -0
- package/dist/ui/notify.js +141 -0
- package/dist/ui/orb.d.ts +53 -0
- package/dist/ui/orb.js +304 -0
- package/dist/ui/overlay.d.ts +213 -0
- package/dist/ui/overlay.js +394 -0
- package/dist/ui/padnav.d.ts +53 -0
- package/dist/ui/padnav.js +146 -0
- package/dist/ui/perf.d.ts +130 -0
- package/dist/ui/perf.js +329 -0
- package/dist/ui/rotate-card.d.ts +54 -0
- package/dist/ui/rotate-card.js +97 -0
- package/dist/ui/stack.d.ts +128 -0
- package/dist/ui/stack.js +312 -0
- package/dist/ui/styles.d.ts +13 -0
- package/dist/ui/styles.js +200 -0
- package/dist/ui/text-scale.d.ts +67 -0
- package/dist/ui/text-scale.js +102 -0
- package/dist/ui/theme.d.ts +70 -0
- package/dist/ui/theme.js +98 -0
- package/dist/ui/toast.d.ts +23 -0
- package/dist/ui/toast.js +46 -0
- package/dist/ui/tooltip.d.ts +89 -0
- package/dist/ui/tooltip.js +333 -0
- package/dist/ui/widgets-2.d.ts +134 -0
- package/dist/ui/widgets-2.js +399 -0
- package/dist/ui/widgets-3.d.ts +91 -0
- package/dist/ui/widgets-3.js +212 -0
- package/dist/ui/widgets.d.ts +34 -0
- package/dist/ui/widgets.js +50 -0
- package/dist/ui/world-panel/index.d.ts +5 -0
- package/dist/ui/world-panel/index.js +5 -0
- package/dist/ui/world-panel/layout.d.ts +38 -0
- package/dist/ui/world-panel/layout.js +68 -0
- package/dist/ui/world-panel/paint.d.ts +96 -0
- package/dist/ui/world-panel/paint.js +136 -0
- package/dist/ui/world-panel/panel.d.ts +235 -0
- package/dist/ui/world-panel/panel.js +762 -0
- package/dist/ui/world-panel/wgsl.d.ts +10 -0
- package/dist/ui/world-panel/wgsl.js +52 -0
- package/dist/ui/world-panel/widgets.d.ts +207 -0
- package/dist/ui/world-panel/widgets.js +569 -0
- package/dist/voxel/chunks.d.ts +77 -0
- package/dist/voxel/chunks.js +149 -0
- package/dist/voxel/grid.d.ts +84 -0
- package/dist/voxel/grid.js +223 -0
- package/dist/voxel/index.d.ts +22 -0
- package/dist/voxel/index.js +7 -0
- package/dist/voxel/mesher-worker.d.ts +14 -0
- package/dist/voxel/mesher-worker.js +47 -0
- package/dist/voxel/mesher.d.ts +73 -0
- package/dist/voxel/mesher.js +306 -0
- package/dist/voxel/ray.d.ts +32 -0
- package/dist/voxel/ray.js +73 -0
- package/dist/voxel/wgsl.d.ts +16 -0
- package/dist/voxel/wgsl.js +28 -0
- package/dist/voxel/worker-client.d.ts +79 -0
- package/dist/voxel/worker-client.js +122 -0
- package/package.json +177 -3
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Wrapped parallax offset: `camera - (camera × factor mod wrap)`, in `camera - wrap .. camera`. */
|
|
2
|
+
export function parallaxOffset(camera, factor, wrap) {
|
|
3
|
+
if (wrap === undefined || !(wrap > 0))
|
|
4
|
+
return camera * (1 - factor);
|
|
5
|
+
const scroll = camera * factor;
|
|
6
|
+
return camera - (((scroll % wrap) + wrap) % wrap);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Make a `Parallax` over layers built on `renderer`. Each layer's `origin` at this moment is its
|
|
10
|
+
* base position. Allocates once.
|
|
11
|
+
*/
|
|
12
|
+
export function createParallax(_renderer, layers) {
|
|
13
|
+
const list = layers.map((l) => ({
|
|
14
|
+
layer: l.layer,
|
|
15
|
+
factorX: l.factorX,
|
|
16
|
+
factorY: l.factorY,
|
|
17
|
+
wrapW: l.wrapW,
|
|
18
|
+
wrapH: l.wrapH,
|
|
19
|
+
params: l.params,
|
|
20
|
+
baseX: l.layer.origin.x,
|
|
21
|
+
baseY: l.layer.origin.y,
|
|
22
|
+
offsetX: 0,
|
|
23
|
+
offsetY: 0,
|
|
24
|
+
}));
|
|
25
|
+
return {
|
|
26
|
+
layers: list,
|
|
27
|
+
update(cameraX, cameraY) {
|
|
28
|
+
for (let i = 0; i < list.length; i++) {
|
|
29
|
+
const l = list[i];
|
|
30
|
+
l.offsetX = parallaxOffset(cameraX, l.factorX, l.wrapW);
|
|
31
|
+
l.offsetY = parallaxOffset(cameraY, l.factorY, l.wrapH);
|
|
32
|
+
l.layer.origin.x = l.baseX + l.offsetX;
|
|
33
|
+
l.layer.origin.y = l.baseY + l.offsetY;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
draw(frame) {
|
|
37
|
+
for (let i = 0; i < list.length; i++) {
|
|
38
|
+
const l = list[i];
|
|
39
|
+
l.layer.draw(frame, l.params);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
destroy() {
|
|
43
|
+
for (const l of list)
|
|
44
|
+
l.layer.destroy();
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Physically based shading helpers for custom materials (`WGSL_PBR`). Appended by
|
|
3
|
+
* `createStandardMaterial`; a game's own material appends the same text after the prelude and
|
|
4
|
+
* calls `engine_pbr` from its `fs_main`. Everything here reads the engine's lighting block
|
|
5
|
+
* (`lights`, `engine_shadow`, `engine_fog` from `WGSL_LIGHTS`) and the camera block, so it only
|
|
6
|
+
* compiles after `materialPrelude`.
|
|
7
|
+
*
|
|
8
|
+
* Model: GGX normal distribution (`engine_d_ggx`), height-correlated Smith-GGX visibility
|
|
9
|
+
* (`engine_v_smith_ggx`), Schlick Fresnel (`engine_f_schlick`) and Lambert diffuse. Radiance is
|
|
10
|
+
* in the same units as `engine_lambert`: a light of colour `c` on a white rough dielectric facing
|
|
11
|
+
* it returns about `c` (the specular lobe is scaled by π to match, so a PBR material and a Lambert
|
|
12
|
+
* one agree on brightness under the same `Lights`).
|
|
13
|
+
*
|
|
14
|
+
* `engine_pbr_layers(base, metallic, roughness, N, V, world_pos, ao, emissive, layer_mask)` sums
|
|
15
|
+
* ambient × `ao` (diffuse plus a roughness-aware Fresnel term so metals are not black in the
|
|
16
|
+
* dark), every light of the block whose `layers` share a bit with `layer_mask` through
|
|
17
|
+
* `engine_pbr_accum` (the engine light loop, `wgslLightLoop` with `engine_brdf`: the sun ×
|
|
18
|
+
* `engine_shadow`, the point lights with the `(1 - d/radius)²` falloff of `engine_point_lights`,
|
|
19
|
+
* the spot lights with that falloff × `engine_spot_cone`) and `emissive`, then applies
|
|
20
|
+
* `engine_fog`. `N` and `V` are unit world-space vectors; `V` points from the surface to the eye.
|
|
21
|
+
* `engine_pbr(base, metallic, roughness, N, V, world_pos, ao, emissive)` is the same over every
|
|
22
|
+
* layer (`0xffffffffu`); the standard material passes `engine_instance_layers(in.flags)`.
|
|
23
|
+
*
|
|
24
|
+
* `engine_perturb_normal(n, world_pos, uv, map, scale)` applies a tangent-space normal map
|
|
25
|
+
* (`map` is the decoded texel, 0..1; +Y is up in the image, the OpenGL / glTF convention; `scale`
|
|
26
|
+
* scales its xy) using a tangent frame built from screen-space derivatives (`dpdx` / `dpdy` of the
|
|
27
|
+
* world position and the uv), so meshes need no tangent attribute: `VERTEX_LAYOUT_3D` has none
|
|
28
|
+
* (xyz, normal, uv, rgba). It is fragment-stage only. When the uv has no screen-space change
|
|
29
|
+
* (a collapsed uv rect, a sliver) it returns `n`.
|
|
30
|
+
*/
|
|
31
|
+
export declare const WGSL_PBR: string;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { wgslLightLoop } from './wgsl.js';
|
|
2
|
+
/**
|
|
3
|
+
* Physically based shading helpers for custom materials (`WGSL_PBR`). Appended by
|
|
4
|
+
* `createStandardMaterial`; a game's own material appends the same text after the prelude and
|
|
5
|
+
* calls `engine_pbr` from its `fs_main`. Everything here reads the engine's lighting block
|
|
6
|
+
* (`lights`, `engine_shadow`, `engine_fog` from `WGSL_LIGHTS`) and the camera block, so it only
|
|
7
|
+
* compiles after `materialPrelude`.
|
|
8
|
+
*
|
|
9
|
+
* Model: GGX normal distribution (`engine_d_ggx`), height-correlated Smith-GGX visibility
|
|
10
|
+
* (`engine_v_smith_ggx`), Schlick Fresnel (`engine_f_schlick`) and Lambert diffuse. Radiance is
|
|
11
|
+
* in the same units as `engine_lambert`: a light of colour `c` on a white rough dielectric facing
|
|
12
|
+
* it returns about `c` (the specular lobe is scaled by π to match, so a PBR material and a Lambert
|
|
13
|
+
* one agree on brightness under the same `Lights`).
|
|
14
|
+
*
|
|
15
|
+
* `engine_pbr_layers(base, metallic, roughness, N, V, world_pos, ao, emissive, layer_mask)` sums
|
|
16
|
+
* ambient × `ao` (diffuse plus a roughness-aware Fresnel term so metals are not black in the
|
|
17
|
+
* dark), every light of the block whose `layers` share a bit with `layer_mask` through
|
|
18
|
+
* `engine_pbr_accum` (the engine light loop, `wgslLightLoop` with `engine_brdf`: the sun ×
|
|
19
|
+
* `engine_shadow`, the point lights with the `(1 - d/radius)²` falloff of `engine_point_lights`,
|
|
20
|
+
* the spot lights with that falloff × `engine_spot_cone`) and `emissive`, then applies
|
|
21
|
+
* `engine_fog`. `N` and `V` are unit world-space vectors; `V` points from the surface to the eye.
|
|
22
|
+
* `engine_pbr(base, metallic, roughness, N, V, world_pos, ao, emissive)` is the same over every
|
|
23
|
+
* layer (`0xffffffffu`); the standard material passes `engine_instance_layers(in.flags)`.
|
|
24
|
+
*
|
|
25
|
+
* `engine_perturb_normal(n, world_pos, uv, map, scale)` applies a tangent-space normal map
|
|
26
|
+
* (`map` is the decoded texel, 0..1; +Y is up in the image, the OpenGL / glTF convention; `scale`
|
|
27
|
+
* scales its xy) using a tangent frame built from screen-space derivatives (`dpdx` / `dpdy` of the
|
|
28
|
+
* world position and the uv), so meshes need no tangent attribute: `VERTEX_LAYOUT_3D` has none
|
|
29
|
+
* (xyz, normal, uv, rgba). It is fragment-stage only. When the uv has no screen-space change
|
|
30
|
+
* (a collapsed uv rect, a sliver) it returns `n`.
|
|
31
|
+
*/
|
|
32
|
+
export const WGSL_PBR = /* wgsl */ `
|
|
33
|
+
const ENGINE_PI: f32 = 3.14159265;
|
|
34
|
+
const ENGINE_MIN_ROUGHNESS: f32 = 0.045;
|
|
35
|
+
|
|
36
|
+
fn engine_d_ggx(n_dot_h: f32, a2: f32) -> f32 {
|
|
37
|
+
let d = n_dot_h * n_dot_h * (a2 - 1.0) + 1.0;
|
|
38
|
+
return a2 / (ENGINE_PI * d * d + 1e-7);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
fn engine_v_smith_ggx(n_dot_v: f32, n_dot_l: f32, a2: f32) -> f32 {
|
|
42
|
+
let gv = n_dot_l * sqrt(n_dot_v * n_dot_v * (1.0 - a2) + a2);
|
|
43
|
+
let gl = n_dot_v * sqrt(n_dot_l * n_dot_l * (1.0 - a2) + a2);
|
|
44
|
+
return 0.5 / (gv + gl + 1e-5);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
fn engine_f_schlick(f0: vec3f, v_dot_h: f32) -> vec3f {
|
|
48
|
+
let f = pow(1.0 - v_dot_h, 5.0);
|
|
49
|
+
return f0 + (vec3f(1.0) - f0) * f;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** One light's reflected radiance factor: (diffuse + specular) × N·L, before the light colour. */
|
|
53
|
+
fn engine_brdf(
|
|
54
|
+
n: vec3f, v: vec3f, l: vec3f, diffuse_color: vec3f, f0: vec3f, a2: f32, n_dot_v: f32,
|
|
55
|
+
) -> vec3f {
|
|
56
|
+
let n_dot_l = dot(n, l);
|
|
57
|
+
if (n_dot_l <= 0.0) { return vec3f(0.0); }
|
|
58
|
+
let h = normalize(l + v);
|
|
59
|
+
let n_dot_h = saturate(dot(n, h));
|
|
60
|
+
let v_dot_h = saturate(dot(v, h));
|
|
61
|
+
let d = engine_d_ggx(n_dot_h, a2);
|
|
62
|
+
let vis = engine_v_smith_ggx(n_dot_v, n_dot_l, a2);
|
|
63
|
+
let f = engine_f_schlick(f0, v_dot_h);
|
|
64
|
+
let specular = (d * vis * ENGINE_PI) * f;
|
|
65
|
+
return (diffuse_color + specular) * n_dot_l;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
${wgslLightLoop('engine_pbr_accum', 'engine_brdf(normal, v, l, diffuse_color, f0, a2, n_dot_v)', ', v: vec3f, diffuse_color: vec3f, f0: vec3f, a2: f32, n_dot_v: f32')}
|
|
69
|
+
|
|
70
|
+
fn engine_pbr_layers(
|
|
71
|
+
base: vec3f, metallic: f32, roughness: f32, n: vec3f, v: vec3f, world_pos: vec3f,
|
|
72
|
+
ao: f32, emissive: vec3f, layer_mask: u32,
|
|
73
|
+
) -> vec3f {
|
|
74
|
+
let r = clamp(roughness, ENGINE_MIN_ROUGHNESS, 1.0);
|
|
75
|
+
let a = r * r;
|
|
76
|
+
let a2 = a * a;
|
|
77
|
+
let m = saturate(metallic);
|
|
78
|
+
let f0 = mix(vec3f(0.04), base, m);
|
|
79
|
+
let diffuse_color = base * (1.0 - m);
|
|
80
|
+
let n_dot_v = max(dot(n, v), 1e-4);
|
|
81
|
+
// Ambient: diffuse plus a roughness-aware Fresnel so metals keep their colour in the dark.
|
|
82
|
+
let fr = max(vec3f(1.0 - r), f0) - f0;
|
|
83
|
+
let ambient_spec = f0 + fr * pow(1.0 - n_dot_v, 5.0);
|
|
84
|
+
var color = lights.ambient * ao * (diffuse_color + ambient_spec);
|
|
85
|
+
color += engine_pbr_accum(world_pos, n, layer_mask, v, diffuse_color, f0, a2, n_dot_v);
|
|
86
|
+
color += emissive;
|
|
87
|
+
return engine_fog(color, world_pos);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
fn engine_pbr(
|
|
91
|
+
base: vec3f, metallic: f32, roughness: f32, n: vec3f, v: vec3f, world_pos: vec3f,
|
|
92
|
+
ao: f32, emissive: vec3f,
|
|
93
|
+
) -> vec3f {
|
|
94
|
+
return engine_pbr_layers(base, metallic, roughness, n, v, world_pos, ao, emissive, 0xffffffffu);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
fn engine_perturb_normal(n: vec3f, world_pos: vec3f, uv: vec2f, map: vec3f, scale: f32) -> vec3f {
|
|
98
|
+
let dp1 = dpdx(world_pos);
|
|
99
|
+
let dp2 = dpdy(world_pos);
|
|
100
|
+
let duv1 = dpdx(uv);
|
|
101
|
+
let duv2 = dpdy(uv);
|
|
102
|
+
// Solve dp1 = t du1 + b dv1, dp2 = t du2 + b dv2 for t and b (times |det|: only the sign of
|
|
103
|
+
// the determinant matters, the lengths are normalised away below). Unlike the cross-product
|
|
104
|
+
// frame this does not assume cross(dp1, dp2) points along n, which it does not with a y-down
|
|
105
|
+
// framebuffer.
|
|
106
|
+
let det = duv1.x * duv2.y - duv2.x * duv1.y;
|
|
107
|
+
let s = select(-1.0, 1.0, det >= 0.0);
|
|
108
|
+
var t = (dp1 * duv2.y - dp2 * duv1.y) * s;
|
|
109
|
+
var b = (dp2 * duv1.x - dp1 * duv2.x) * s;
|
|
110
|
+
t -= n * dot(n, t);
|
|
111
|
+
b -= n * dot(n, b);
|
|
112
|
+
let m2 = max(dot(t, t), dot(b, b));
|
|
113
|
+
if (m2 < 1e-16) { return n; }
|
|
114
|
+
let inv = inverseSqrt(m2);
|
|
115
|
+
// uv v runs down the image, so the map's +Y (up in the image) is -b.
|
|
116
|
+
let tn = (map * 2.0 - 1.0) * vec3f(scale, scale, 1.0);
|
|
117
|
+
return normalize(t * inv * tn.x - b * inv * tn.y + n * tn.z);
|
|
118
|
+
}
|
|
119
|
+
`;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { FullscreenPass } from './fullscreen.js';
|
|
2
|
+
import { Texture, type TextureDesc } from './texture.js';
|
|
3
|
+
export interface PingPongStepOptions {
|
|
4
|
+
/** Texture slot of `pass` that reads the previous state. Default 0. */
|
|
5
|
+
slot?: number;
|
|
6
|
+
/** Clear colour for the write target; `null` loads it. Default transparent black. */
|
|
7
|
+
clear?: GPUColor | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Two same-sized render targets for feedback effects (fluid sims, trails, blur chains):
|
|
11
|
+
* each `step` runs a fullscreen pass that reads `read` and writes `write`, then swaps.
|
|
12
|
+
* Alternating textures reuses cached bind groups, so a steady ping-pong allocates nothing.
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* const sim = renderer.createPingPong({ width: 256, height: 256, label: 'sim' });
|
|
16
|
+
* frame.prePass(stepSim); // a stable function:
|
|
17
|
+
* function stepSim(enc: GPUCommandEncoder) {
|
|
18
|
+
* sim.step(enc, simPass); // simPass samples slot 0 = previous state
|
|
19
|
+
* material.setTexture(0, sim.read); // sample the newest state in this frame's draws
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare class PingPong {
|
|
24
|
+
private readonly device;
|
|
25
|
+
private readonly desc;
|
|
26
|
+
private a;
|
|
27
|
+
private b;
|
|
28
|
+
constructor(device: GPUDevice, desc: TextureDesc);
|
|
29
|
+
/** The latest state (written by the last `step`). Sample this. */
|
|
30
|
+
get read(): Texture;
|
|
31
|
+
/** The target the next `step` writes. */
|
|
32
|
+
get write(): Texture;
|
|
33
|
+
get width(): number;
|
|
34
|
+
get height(): number;
|
|
35
|
+
swap(): void;
|
|
36
|
+
/** Encode `pass` reading `read` (texture `slot`) into `write`, then swap. */
|
|
37
|
+
step(encoder: GPUCommandEncoder, pass: FullscreenPass, opts?: PingPongStepOptions): void;
|
|
38
|
+
/** Recreate both targets at a new size (contents are lost). No-op when unchanged. */
|
|
39
|
+
resize(width: number, height: number): void;
|
|
40
|
+
destroy(): void;
|
|
41
|
+
private make;
|
|
42
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Texture } from './texture.js';
|
|
2
|
+
/**
|
|
3
|
+
* Two same-sized render targets for feedback effects (fluid sims, trails, blur chains):
|
|
4
|
+
* each `step` runs a fullscreen pass that reads `read` and writes `write`, then swaps.
|
|
5
|
+
* Alternating textures reuses cached bind groups, so a steady ping-pong allocates nothing.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* const sim = renderer.createPingPong({ width: 256, height: 256, label: 'sim' });
|
|
9
|
+
* frame.prePass(stepSim); // a stable function:
|
|
10
|
+
* function stepSim(enc: GPUCommandEncoder) {
|
|
11
|
+
* sim.step(enc, simPass); // simPass samples slot 0 = previous state
|
|
12
|
+
* material.setTexture(0, sim.read); // sample the newest state in this frame's draws
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class PingPong {
|
|
17
|
+
device;
|
|
18
|
+
desc;
|
|
19
|
+
a;
|
|
20
|
+
b;
|
|
21
|
+
constructor(device, desc) {
|
|
22
|
+
this.device = device;
|
|
23
|
+
this.desc = desc;
|
|
24
|
+
this.a = this.make('a');
|
|
25
|
+
this.b = this.make('b');
|
|
26
|
+
}
|
|
27
|
+
/** The latest state (written by the last `step`). Sample this. */
|
|
28
|
+
get read() {
|
|
29
|
+
return this.a;
|
|
30
|
+
}
|
|
31
|
+
/** The target the next `step` writes. */
|
|
32
|
+
get write() {
|
|
33
|
+
return this.b;
|
|
34
|
+
}
|
|
35
|
+
get width() {
|
|
36
|
+
return this.a.width;
|
|
37
|
+
}
|
|
38
|
+
get height() {
|
|
39
|
+
return this.a.height;
|
|
40
|
+
}
|
|
41
|
+
swap() {
|
|
42
|
+
const t = this.a;
|
|
43
|
+
this.a = this.b;
|
|
44
|
+
this.b = t;
|
|
45
|
+
}
|
|
46
|
+
/** Encode `pass` reading `read` (texture `slot`) into `write`, then swap. */
|
|
47
|
+
step(encoder, pass, opts = {}) {
|
|
48
|
+
pass.setTexture(opts.slot ?? 0, this.a);
|
|
49
|
+
pass.encode(encoder, this.b.view, { clear: opts.clear });
|
|
50
|
+
this.swap();
|
|
51
|
+
}
|
|
52
|
+
/** Recreate both targets at a new size (contents are lost). No-op when unchanged. */
|
|
53
|
+
resize(width, height) {
|
|
54
|
+
const w = Math.max(1, Math.floor(width));
|
|
55
|
+
const h = Math.max(1, Math.floor(height));
|
|
56
|
+
if (w === this.a.width && h === this.a.height)
|
|
57
|
+
return;
|
|
58
|
+
this.destroy();
|
|
59
|
+
this.desc.width = w;
|
|
60
|
+
this.desc.height = h;
|
|
61
|
+
this.a = this.make('a');
|
|
62
|
+
this.b = this.make('b');
|
|
63
|
+
}
|
|
64
|
+
destroy() {
|
|
65
|
+
this.a.destroy();
|
|
66
|
+
this.b.destroy();
|
|
67
|
+
}
|
|
68
|
+
make(which) {
|
|
69
|
+
return new Texture(this.device, {
|
|
70
|
+
...this.desc,
|
|
71
|
+
label: `${this.desc.label ?? 'ping-pong'}:${which}`,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|