@downdraft/engine 0.1.1 → 0.1.2-alpha.5
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/app/README.md +11 -0
- package/app/src/renderer/bootstrap.ts +295 -19
- package/app/src/renderer/game-module.ts +60 -12
- package/app/src/renderer/hooks.ts +9 -1
- package/app/src/renderer/hot-reload.ts +9 -9
- package/app/src/renderer/mcp-harness.ts +2 -2
- package/app/src/renderer/standard-automation-tools.ts +104 -3
- package/app/src/shared/feature-log.ts +2 -1
- package/app/src/shared/mcp-discovery.ts +8 -3
- package/app/src/shared/mcp-proxy.ts +2 -2
- package/asset-bake/README.md +22 -0
- package/core/README.md +25 -0
- package/core/src/animation/skeleton-animator.ts +23 -5
- package/core/src/assets/manager.ts +4 -4
- package/core/src/ecs/events.ts +1 -1
- package/core/src/ecs/schedule.ts +1 -1
- package/core/src/ecs/world.ts +1 -1
- package/core/src/index.ts +3 -4
- package/core/src/library/host.ts +27 -13
- package/core/src/library/library.ts +13 -5
- package/core/src/module/cross-thread.ts +6 -0
- package/core/src/module/diagnostics.ts +10 -6
- package/core/src/module/host.ts +65 -18
- package/core/src/module/index.ts +1 -0
- package/core/src/module/module.ts +11 -5
- package/core/src/module/renderer-module.ts +15 -0
- package/core/src/physics/safety.ts +1 -1
- package/core/src/platform/bun-preload.ts +7 -2
- package/core/src/platform/glob-polyfill.ts +17 -8
- package/core/src/platform/pkg-root.ts +27 -0
- package/core/src/platform/runtime.ts +29 -0
- package/core/src/plugin/discovery.ts +1 -1
- package/core/src/plugin/extension-loaders.ts +6 -4
- package/core/src/plugin/host.ts +13 -13
- package/core/src/plugin/loader-asset.ts +5 -5
- package/core/src/plugin/loader-quickjs.ts +1 -1
- package/core/src/plugin/loader-wasm.ts +3 -3
- package/core/src/plugin/loader-worker.ts +1 -1
- package/core/src/plugin/manifest.ts +8 -3
- package/core/src/plugin/workshop.ts +3 -3
- package/core/src/profiling/index.ts +1 -1
- package/core/src/profiling/profiling-sab.ts +19 -0
- package/core/src/profiling/warnings.ts +1 -1
- package/core/src/profiling/worker-prelude.ts +1 -1
- package/core/src/render/bindless/frame-bindings.ts +1 -1
- package/core/src/render/bindless/material-manager.ts +2 -2
- package/core/src/render/bindless/texture-registry.ts +2 -2
- package/core/src/render/device.ts +5 -5
- package/core/src/render/frame-graph.ts +2 -2
- package/core/src/render/game-renderer.ts +42 -18
- package/core/src/render/hot-reload.ts +3 -3
- package/core/src/render/renderer-module-host.ts +32 -12
- package/core/src/render/shader-validator.ts +7 -7
- package/core/src/render/surface.ts +1 -1
- package/core/src/sab/errors.ts +1 -1
- package/core/src/sab/sab-polyfill.ts +1 -1
- package/core/src/save/migration-registry.ts +4 -4
- package/core/src/save/schema.ts +1 -1
- package/core/src/scene/prefab.ts +1 -1
- package/core/src/scene/scene-manager.ts +2 -2
- package/core/src/scene/scene.ts +4 -4
- package/core/src/scene/streaming.ts +2 -2
- package/core/src/scripting/hot-reload.ts +2 -2
- package/core/src/sim/hot-reload-pipeline.ts +30 -6
- package/core/src/sim/sim-state-helper.ts +1 -1
- package/core/src/sim/transient-state-registry.ts +1 -1
- package/core/src/sim/worker-loop.ts +2 -2
- package/core/src/telemetry/gpu-profiler.ts +3 -3
- package/core/src/util/index.ts +1 -1
- package/core/src/util/logger.ts +36 -5
- package/core/src/version.ts +13 -0
- package/core/src/worker/base-worker-host.ts +87 -25
- package/core/src/worker/buffer-sync.ts +1 -1
- package/core/src/worker/crash-recovery.ts +2 -2
- package/core/src/worker/instrumented-worker-host.ts +3 -3
- package/core/src/worker/rpc.ts +62 -11
- package/core/src/worker/sim-worker-base.ts +3 -8
- package/core/src/worker/task-pool.ts +2 -2
- package/dist/.dd-manifest.json +4119 -0
- package/dist/app/src/index.js +9 -0
- package/dist/app/src/renderer/bootstrap.js +446 -0
- package/dist/app/src/renderer/downdraft-base.css +93 -0
- package/dist/app/src/renderer/feature-log.js +180 -0
- package/dist/app/src/renderer/game-module.js +562 -0
- package/dist/app/src/renderer/hooks.js +82 -0
- package/dist/app/src/renderer/hot-reload.js +158 -0
- package/dist/app/src/renderer/import-cache.js +77 -0
- package/dist/app/src/renderer/index.js +149 -0
- package/dist/app/src/renderer/mcp-harness.js +112 -0
- package/dist/app/src/renderer/save-store-factory.js +180 -0
- package/dist/app/src/renderer/sim-bridge.js +138 -0
- package/dist/app/src/renderer/standard-automation-tools.js +720 -0
- package/dist/app/src/shared/feature-log.js +54 -0
- package/dist/app/src/shared/gpu-info.js +74 -0
- package/dist/app/src/shared/import-cache-store.js +123 -0
- package/dist/app/src/shared/index.js +4 -0
- package/dist/app/src/shared/mcp-discovery.js +55 -0
- package/dist/app/src/shared/mcp-proxy.js +71 -0
- package/dist/app/src/shared/types.js +13 -0
- package/dist/asset-bake/src/bake-audio.js +103 -0
- package/dist/asset-bake/src/bake-gltf.js +141 -0
- package/dist/asset-bake/src/bake.js +63 -0
- package/dist/asset-bake/src/cache.js +147 -0
- package/dist/asset-bake/src/config.js +93 -0
- package/dist/asset-bake/src/index.js +25 -0
- package/dist/core/src/animation/animation-event.js +24 -0
- package/dist/core/src/animation/bone-mask.js +103 -0
- package/dist/core/src/animation/clip.js +210 -0
- package/dist/core/src/animation/index.js +13 -0
- package/dist/core/src/animation/mixamo.js +78 -0
- package/dist/core/src/animation/morph-target.js +37 -0
- package/dist/core/src/animation/player.js +621 -0
- package/dist/core/src/animation/retarget.js +101 -0
- package/dist/core/src/animation/skeleton-animator.js +1361 -0
- package/dist/core/src/animation/skeleton.js +166 -0
- package/dist/core/src/animation/state-machine.js +252 -0
- package/dist/core/src/assets/blob-store.js +14 -0
- package/dist/core/src/assets/cache.js +168 -0
- package/dist/core/src/assets/cubemap-converter.js +129 -0
- package/dist/core/src/assets/environment-manager.js +84 -0
- package/dist/core/src/assets/import-cache.js +36 -0
- package/dist/core/src/assets/import-settings.js +34 -0
- package/dist/core/src/assets/importer.js +78 -0
- package/dist/core/src/assets/index.js +29 -0
- package/dist/core/src/assets/irradiance-generator.js +179 -0
- package/dist/core/src/assets/loader-audio.js +70 -0
- package/dist/core/src/assets/loader-cubemap.js +141 -0
- package/dist/core/src/assets/loader-dds.js +185 -0
- package/dist/core/src/assets/loader-hdr.js +430 -0
- package/dist/core/src/assets/loader-mesh.js +47 -0
- package/dist/core/src/assets/loader-shader.js +61 -0
- package/dist/core/src/assets/loader-texture.js +264 -0
- package/dist/core/src/assets/lod.js +150 -0
- package/dist/core/src/assets/manager.js +401 -0
- package/dist/core/src/assets/manifest.js +57 -0
- package/dist/core/src/assets/material-bridge.js +160 -0
- package/dist/core/src/assets/model-importer.js +32 -0
- package/dist/core/src/assets/model-normalizer.js +213 -0
- package/dist/core/src/assets/model-to-gpu.js +44 -0
- package/dist/core/src/assets/model-to-mesh.js +171 -0
- package/dist/core/src/assets/prefilter-generator.js +220 -0
- package/dist/core/src/audio/engine.js +153 -0
- package/dist/core/src/audio/interface.js +8 -0
- package/dist/core/src/audio/listener.js +19 -0
- package/dist/core/src/audio/mixer.js +124 -0
- package/dist/core/src/audio/registry.js +43 -0
- package/dist/core/src/audio/sab.js +74 -0
- package/dist/core/src/audio/source.js +60 -0
- package/dist/core/src/change-detection/atomics.js +1 -0
- package/dist/core/src/change-detection/tracker.js +26 -0
- package/dist/core/src/debug-draw/lines.js +27 -0
- package/dist/core/src/debug-draw/points.js +9 -0
- package/dist/core/src/debug-draw/queue.js +77 -0
- package/dist/core/src/debug-draw/text.js +12 -0
- package/dist/core/src/ecs/archetype.js +271 -0
- package/dist/core/src/ecs/component.js +109 -0
- package/dist/core/src/ecs/entity.js +11 -0
- package/dist/core/src/ecs/events.js +73 -0
- package/dist/core/src/ecs/hierarchy.js +104 -0
- package/dist/core/src/ecs/hmr-swap-registry.js +15 -0
- package/dist/core/src/ecs/index.js +14 -0
- package/dist/core/src/ecs/query.js +110 -0
- package/dist/core/src/ecs/resource.js +3 -0
- package/dist/core/src/ecs/schedule.js +157 -0
- package/dist/core/src/ecs/system-params.js +45 -0
- package/dist/core/src/ecs/system.js +18 -0
- package/dist/core/src/ecs/world.js +292 -0
- package/dist/core/src/index.js +191 -0
- package/dist/core/src/input/context.js +69 -0
- package/dist/core/src/input/dom-handler.js +288 -0
- package/dist/core/src/input/local-player-manager.js +145 -0
- package/dist/core/src/input/mapping.js +36 -0
- package/dist/core/src/input/multi-sab-bridge.js +224 -0
- package/dist/core/src/input/multi-state.js +48 -0
- package/dist/core/src/input/sab-bridge.js +66 -0
- package/dist/core/src/input/state.js +108 -0
- package/dist/core/src/input/ui-router.js +76 -0
- package/dist/core/src/library/host.js +291 -0
- package/dist/core/src/library/index.js +1 -0
- package/dist/core/src/library/library.js +20 -0
- package/dist/core/src/material/compiler.js +73 -0
- package/dist/core/src/material/graph-bridge.js +119 -0
- package/dist/core/src/material/index.js +6 -0
- package/dist/core/src/material/library.js +414 -0
- package/dist/core/src/material/material.js +120 -0
- package/dist/core/src/material/variants.js +37 -0
- package/dist/core/src/math/mat4.js +198 -0
- package/dist/core/src/math/perlin-noise-2d.js +66 -0
- package/dist/core/src/math/perlin-noise-3d.js +76 -0
- package/dist/core/src/math/quat.js +29 -0
- package/dist/core/src/math/rng.js +25 -0
- package/dist/core/src/math/trig.js +42 -0
- package/dist/core/src/math/value-noise.js +49 -0
- package/dist/core/src/mesh/builder.js +137 -0
- package/dist/core/src/mesh/csg.js +250 -0
- package/dist/core/src/mesh/greased-line.js +102 -0
- package/dist/core/src/mesh/mesh.js +6 -0
- package/dist/core/src/mesh/parametric.js +392 -0
- package/dist/core/src/mesh/skinning.js +30 -0
- package/dist/core/src/mesh/vertex-layout.js +65 -0
- package/dist/core/src/module/cross-thread.js +126 -0
- package/dist/core/src/module/diagnostics.js +99 -0
- package/dist/core/src/module/host.js +449 -0
- package/dist/core/src/module/index.js +6 -0
- package/dist/core/src/module/module.js +1 -0
- package/dist/core/src/module/registry.js +83 -0
- package/dist/core/src/module/renderer-module.js +13 -0
- package/dist/core/src/module/ts-loader.js +20 -0
- package/dist/core/src/particles/compute-pass.js +329 -0
- package/dist/core/src/particles/emitter.js +113 -0
- package/dist/core/src/particles/index.js +7 -0
- package/dist/core/src/particles/particle-data.js +33 -0
- package/dist/core/src/particles/render-pass.js +338 -0
- package/dist/core/src/particles/simulator.js +224 -0
- package/dist/core/src/particles/system.js +157 -0
- package/dist/core/src/physics/body.js +25 -0
- package/dist/core/src/physics/ccd-heuristic.js +46 -0
- package/dist/core/src/physics/character.js +184 -0
- package/dist/core/src/physics/collider.js +36 -0
- package/dist/core/src/physics/collision-system.js +62 -0
- package/dist/core/src/physics/events.js +74 -0
- package/dist/core/src/physics/index.js +24 -0
- package/dist/core/src/physics/interface.js +14 -0
- package/dist/core/src/physics/interpolation-buffer.js +182 -0
- package/dist/core/src/physics/lifecycle.js +66 -0
- package/dist/core/src/physics/load-shedder.js +155 -0
- package/dist/core/src/physics/physics-accumulator.js +94 -0
- package/dist/core/src/physics/physics-system.js +142 -0
- package/dist/core/src/physics/ragdoll-presets.js +248 -0
- package/dist/core/src/physics/ragdoll-system.js +193 -0
- package/dist/core/src/physics/ragdoll.js +117 -0
- package/dist/core/src/physics/raycast.js +97 -0
- package/dist/core/src/physics/realm-manager.js +431 -0
- package/dist/core/src/physics/realm-worker-pool.js +181 -0
- package/dist/core/src/physics/realm-worker.js +91 -0
- package/dist/core/src/physics/realm.js +137 -0
- package/dist/core/src/physics/registry.js +43 -0
- package/dist/core/src/physics/safety.js +211 -0
- package/dist/core/src/physics/snapshot-manager.js +118 -0
- package/dist/core/src/physics/worker-protocol.js +1 -0
- package/dist/core/src/platform/bun-preload.js +175 -0
- package/dist/core/src/platform/css-stub.js +4 -0
- package/dist/core/src/platform/glob-polyfill.js +137 -0
- package/dist/core/src/platform/hidpi.js +52 -0
- package/dist/core/src/platform/pkg-root.js +27 -0
- package/dist/core/src/platform/render-surface.js +15 -0
- package/dist/core/src/platform/rpc.js +82 -0
- package/dist/core/src/platform/runtime.js +93 -0
- package/dist/core/src/plugin/context.js +144 -0
- package/dist/core/src/plugin/diagnostics.js +20 -0
- package/dist/core/src/plugin/discovery.js +124 -0
- package/dist/core/src/plugin/extension-loaders.js +111 -0
- package/dist/core/src/plugin/host.js +542 -0
- package/dist/core/src/plugin/index.js +19 -0
- package/dist/core/src/plugin/loader-asset.js +105 -0
- package/dist/core/src/plugin/loader-quickjs.js +67 -0
- package/dist/core/src/plugin/loader-wasm.js +385 -0
- package/dist/core/src/plugin/loader-worker.js +228 -0
- package/dist/core/src/plugin/manifest.js +424 -0
- package/dist/core/src/plugin/material-registry.js +44 -0
- package/dist/core/src/plugin/mcp-tools.js +147 -0
- package/dist/core/src/plugin/permissions.js +152 -0
- package/dist/core/src/plugin/quickjs-bridge.js +219 -0
- package/dist/core/src/plugin/registry.js +92 -0
- package/dist/core/src/plugin/sandbox-shim.js +79 -0
- package/dist/core/src/plugin/sandbox-worker.js +194 -0
- package/dist/core/src/plugin/wasm-abi.js +62 -0
- package/dist/core/src/plugin/wasm-worker.js +234 -0
- package/dist/core/src/plugin/workshop.js +131 -0
- package/dist/core/src/profiling/event-loop.js +164 -0
- package/dist/core/src/profiling/index.js +23 -0
- package/dist/core/src/profiling/iops/idb-patch.js +211 -0
- package/dist/core/src/profiling/iops/opfs-patch.js +206 -0
- package/dist/core/src/profiling/profiling-sab.js +632 -0
- package/dist/core/src/profiling/task-latency.js +118 -0
- package/dist/core/src/profiling/thread-metrics.js +103 -0
- package/dist/core/src/profiling/trace-event-writer.js +165 -0
- package/dist/core/src/profiling/warnings.js +304 -0
- package/dist/core/src/profiling/worker-prelude.js +281 -0
- package/dist/core/src/render/bind-group.js +33 -0
- package/dist/core/src/render/bindless/bindless-struct.js +39 -0
- package/dist/core/src/render/bindless/bindless.wgsl.js +163 -0
- package/dist/core/src/render/bindless/frame-bindings.js +142 -0
- package/dist/core/src/render/bindless/index.js +6 -0
- package/dist/core/src/render/bindless/material-manager.js +182 -0
- package/dist/core/src/render/bindless/texture-registry.js +498 -0
- package/dist/core/src/render/buffer.js +74 -0
- package/dist/core/src/render/camera-2d.js +151 -0
- package/dist/core/src/render/camera-controller.js +370 -0
- package/dist/core/src/render/camera.js +332 -0
- package/dist/core/src/render/canvas-resize-watcher.js +36 -0
- package/dist/core/src/render/compute-kernel.js +130 -0
- package/dist/core/src/render/constants.js +2 -0
- package/dist/core/src/render/device.js +91 -0
- package/dist/core/src/render/frame-graph.js +594 -0
- package/dist/core/src/render/frustum.js +152 -0
- package/dist/core/src/render/fullscreen-vs.js +24 -0
- package/dist/core/src/render/g-buffer.js +156 -0
- package/dist/core/src/render/game-renderer.js +1165 -0
- package/dist/core/src/render/gpu-driven/cull-pass.js +352 -0
- package/dist/core/src/render/gpu-driven/hzb.js +183 -0
- package/dist/core/src/render/gpu-driven/index.js +6 -0
- package/dist/core/src/render/gpu-driven/indirect-draw-pass.js +300 -0
- package/dist/core/src/render/gpu-driven/instance-buffer.js +150 -0
- package/dist/core/src/render/gpu-driven/mesh-table.js +130 -0
- package/dist/core/src/render/gpu-driven/passes/hzb-build-pass.js +39 -0
- package/dist/core/src/render/gpu-utils.js +72 -0
- package/dist/core/src/render/hdr.js +69 -0
- package/dist/core/src/render/hot-reload.js +236 -0
- package/dist/core/src/render/ibl-bind-group.js +232 -0
- package/dist/core/src/render/ibl.js +148 -0
- package/dist/core/src/render/index.js +86 -0
- package/dist/core/src/render/input-manager.js +224 -0
- package/dist/core/src/render/lighting/area-light.js +142 -0
- package/dist/core/src/render/lighting/cluster-grid.js +255 -0
- package/dist/core/src/render/lighting/cluster-types.js +87 -0
- package/dist/core/src/render/lighting/ies-parser.js +111 -0
- package/dist/core/src/render/lighting.js +300 -0
- package/dist/core/src/render/material-types/depth.wgsl +44 -0
- package/dist/core/src/render/material-types/line.wgsl +50 -0
- package/dist/core/src/render/material-types/matcap.wgsl +51 -0
- package/dist/core/src/render/material-types/normal.wgsl +41 -0
- package/dist/core/src/render/material-types/physical.wgsl +152 -0
- package/dist/core/src/render/material-types/sprite.wgsl +46 -0
- package/dist/core/src/render/material-types/sss.wgsl +79 -0
- package/dist/core/src/render/material-types/toon.wgsl +79 -0
- package/dist/core/src/render/passes/README.md +121 -0
- package/dist/core/src/render/passes/atmosphere.js +107 -0
- package/dist/core/src/render/passes/cluster-lighting-pass.js +441 -0
- package/dist/core/src/render/passes/csm.js +338 -0
- package/dist/core/src/render/passes/cubemap-capture.js +93 -0
- package/dist/core/src/render/passes/debug-viz.js +248 -0
- package/dist/core/src/render/passes/debug.js +500 -0
- package/dist/core/src/render/passes/decal-mesh.js +86 -0
- package/dist/core/src/render/passes/decal-pass.js +344 -0
- package/dist/core/src/render/passes/deferred-lighting.js +406 -0
- package/dist/core/src/render/passes/depth-prepass.js +148 -0
- package/dist/core/src/render/passes/dome-360.js +68 -0
- package/dist/core/src/render/passes/fluid-render.js +116 -0
- package/dist/core/src/render/passes/gi-types.js +78 -0
- package/dist/core/src/render/passes/graph-compute.js +251 -0
- package/dist/core/src/render/passes/greased-line-pass.js +218 -0
- package/dist/core/src/render/passes/morph-target.js +35 -0
- package/dist/core/src/render/passes/opaque.js +966 -0
- package/dist/core/src/render/passes/point-light-shadow.js +221 -0
- package/dist/core/src/render/passes/procedural-texture.js +142 -0
- package/dist/core/src/render/passes/reflection-probe.js +100 -0
- package/dist/core/src/render/passes/rsm-pass.js +228 -0
- package/dist/core/src/render/passes/sdf-text.js +114 -0
- package/dist/core/src/render/passes/shadow-map.js +121 -0
- package/dist/core/src/render/passes/shadow.js +191 -0
- package/dist/core/src/render/passes/skinning-vs.js +102 -0
- package/dist/core/src/render/passes/skinning.js +282 -0
- package/dist/core/src/render/passes/sky-dome.js +380 -0
- package/dist/core/src/render/passes/skybox.js +146 -0
- package/dist/core/src/render/passes/spot-light-shadow.js +223 -0
- package/dist/core/src/render/passes/terrain.js +303 -0
- package/dist/core/src/render/passes/transparent.js +323 -0
- package/dist/core/src/render/passes/underwater-fog.js +173 -0
- package/dist/core/src/render/passes/video-texture.js +58 -0
- package/dist/core/src/render/passes/volumetric-pass.js +278 -0
- package/dist/core/src/render/passes/volumetric-types.js +96 -0
- package/dist/core/src/render/passes/water.js +697 -0
- package/dist/core/src/render/pbr.js +257 -0
- package/dist/core/src/render/pipeline.js +49 -0
- package/dist/core/src/render/render-pass.js +13 -0
- package/dist/core/src/render/renderer-input-bus.js +176 -0
- package/dist/core/src/render/renderer-module-host.js +539 -0
- package/dist/core/src/render/resource-tracker.js +59 -0
- package/dist/core/src/render/sab-canvas-overlay.js +83 -0
- package/dist/core/src/render/shader-validator.js +172 -0
- package/dist/core/src/render/shaders/debug/debug-line.wgsl +27 -0
- package/dist/core/src/render/shaders/debug/debug-point.wgsl +30 -0
- package/dist/core/src/render/shaders/debug/debug-text.wgsl +42 -0
- package/dist/core/src/render/shaders/debug-viz/aabb.wgsl +20 -0
- package/dist/core/src/render/shaders/debug-viz/depth.wgsl +29 -0
- package/dist/core/src/render/shaders/debug-viz/lod.wgsl +38 -0
- package/dist/core/src/render/shaders/debug-viz/normals.wgsl +30 -0
- package/dist/core/src/render/shaders/debug-viz/overdraw.wgsl +21 -0
- package/dist/core/src/render/shaders/debug-viz/tangents.wgsl +29 -0
- package/dist/core/src/render/shaders/debug-viz/wireframe.wgsl +33 -0
- package/dist/core/src/render/shaders/shadow-chunks.js +133 -0
- package/dist/core/src/render/skybox.js +123 -0
- package/dist/core/src/render/splitscreen.js +60 -0
- package/dist/core/src/render/surface.js +63 -0
- package/dist/core/src/render/tonemap.js +171 -0
- package/dist/core/src/render/tracked-render-pass.js +115 -0
- package/dist/core/src/render/viewport.js +81 -0
- package/dist/core/src/render/wgsl-hmr.js +66 -0
- package/dist/core/src/sab/core-input-channel.js +22 -0
- package/dist/core/src/sab/define.js +127 -0
- package/dist/core/src/sab/errors.js +60 -0
- package/dist/core/src/sab/game-input.js +299 -0
- package/dist/core/src/sab/gamepad-devices.js +205 -0
- package/dist/core/src/sab/grid-buffer.js +91 -0
- package/dist/core/src/sab/input.js +38 -0
- package/dist/core/src/sab/layout.js +160 -0
- package/dist/core/src/sab/multi-input-channel.js +39 -0
- package/dist/core/src/sab/record-buffer.js +130 -0
- package/dist/core/src/sab/sab-polyfill.js +47 -0
- package/dist/core/src/sab/sim-channel.js +397 -0
- package/dist/core/src/sab/slot-buffer.js +140 -0
- package/dist/core/src/sab/types.js +1 -0
- package/dist/core/src/safety/bounds.js +71 -0
- package/dist/core/src/safety/json.js +70 -0
- package/dist/core/src/safety/path.js +151 -0
- package/dist/core/src/save/binary-format.js +95 -0
- package/dist/core/src/save/game-save-system.js +101 -0
- package/dist/core/src/save/grid-save-system.js +102 -0
- package/dist/core/src/save/migrate.js +35 -0
- package/dist/core/src/save/migration-registry.js +66 -0
- package/dist/core/src/save/persist-types.js +4 -0
- package/dist/core/src/save/schema.js +36 -0
- package/dist/core/src/save/serializer.js +139 -0
- package/dist/core/src/scene/builder.js +31 -0
- package/dist/core/src/scene/camera.js +118 -0
- package/dist/core/src/scene/checkpoint.js +84 -0
- package/dist/core/src/scene/game-loop.js +155 -0
- package/dist/core/src/scene/index.js +14 -0
- package/dist/core/src/scene/layer.js +7 -0
- package/dist/core/src/scene/prefab.js +97 -0
- package/dist/core/src/scene/scene-manager.js +141 -0
- package/dist/core/src/scene/scene.js +147 -0
- package/dist/core/src/scene/sky.js +179 -0
- package/dist/core/src/scene/spatial-grid.js +140 -0
- package/dist/core/src/scene/streaming.js +247 -0
- package/dist/core/src/scene/vegetation.js +107 -0
- package/dist/core/src/scene/world.js +66 -0
- package/dist/core/src/scripting/binding.js +85 -0
- package/dist/core/src/scripting/hot-reload.js +123 -0
- package/dist/core/src/scripting/script.js +68 -0
- package/dist/core/src/sim/hot-reload-pipeline.js +65 -0
- package/dist/core/src/sim/sim-state-helper.js +40 -0
- package/dist/core/src/sim/transient-state-registry.js +63 -0
- package/dist/core/src/sim/types.js +4 -0
- package/dist/core/src/sim/worker-loop.js +168 -0
- package/dist/core/src/stores/game-store.js +81 -0
- package/dist/core/src/stores/hot-reload-store.js +19 -0
- package/dist/core/src/telemetry/collector.js +303 -0
- package/dist/core/src/telemetry/gc-controller.js +365 -0
- package/dist/core/src/telemetry/gc-profiler.js +82 -0
- package/dist/core/src/telemetry/gc-tracker.js +63 -0
- package/dist/core/src/telemetry/gpu-profiler.js +554 -0
- package/dist/core/src/telemetry/gpu-resource-tracker.js +234 -0
- package/dist/core/src/telemetry/gpu-timer-pool.js +223 -0
- package/dist/core/src/telemetry/gpu-timer.js +117 -0
- package/dist/core/src/telemetry/gpu-timestamp-gate.js +22 -0
- package/dist/core/src/telemetry/reporter.js +56 -0
- package/dist/core/src/types/engine-types.js +21 -0
- package/dist/core/src/ui-font-scale.js +111 -0
- package/dist/core/src/util/broad-phase-grid.js +77 -0
- package/dist/core/src/util/feature-log.js +176 -0
- package/dist/core/src/util/index.js +4 -0
- package/dist/core/src/util/logger.js +596 -0
- package/dist/core/src/version.js +11 -0
- package/dist/core/src/webgpu-destroy-augmentation.d.ts +25 -0
- package/dist/core/src/worker/base-worker-host.js +212 -0
- package/dist/core/src/worker/buffer-sync.js +454 -0
- package/dist/core/src/worker/crash-recovery.js +153 -0
- package/dist/core/src/worker/entity-sim-worker-host.js +128 -0
- package/dist/core/src/worker/instrumented-worker-host.js +139 -0
- package/dist/core/src/worker/rpc.js +244 -0
- package/dist/core/src/worker/sim-worker-base.js +558 -0
- package/dist/core/src/worker/sim-worker-host.js +271 -0
- package/dist/core/src/worker/task-pool.js +205 -0
- package/dist/core/src/worker/task-worker.js +77 -0
- package/dist/libraries/asset-browser/src/index.js +10 -0
- package/dist/libraries/asset-browser/src/software-thumbnails.js +940 -0
- package/dist/libraries/audio-kira/src/backend.js +405 -0
- package/dist/libraries/audio-kira/src/index.js +4 -0
- package/dist/libraries/audio-kira/src/library.js +54 -0
- package/dist/libraries/blitz-ui/src/index.js +13 -0
- package/dist/libraries/blitz-ui/src/native-module.js +162 -0
- package/dist/libraries/blitz-ui/src/native-osr-ffi.js +409 -0
- package/dist/libraries/blitz-ui/src/router.js +82 -0
- package/dist/libraries/blitz-ui/src/shaders/ui-blit.wgsl.js +32 -0
- package/dist/libraries/blitz-ui/src/ui-blit-pass.js +108 -0
- package/dist/libraries/character/src/character-animator.js +323 -0
- package/dist/libraries/character/src/customization.js +464 -0
- package/dist/libraries/character/src/index.js +19 -0
- package/dist/libraries/character/src/inspectable.js +77 -0
- package/dist/libraries/character/src/loader.js +336 -0
- package/dist/libraries/character/src/locomotion.js +84 -0
- package/dist/libraries/character/src/preview.js +280 -0
- package/dist/libraries/devtools/src/backend.js +449 -0
- package/dist/libraries/devtools/src/cdp-bridge.js +293 -0
- package/dist/libraries/devtools/src/collectors.js +318 -0
- package/dist/libraries/devtools/src/index.js +31 -0
- package/dist/libraries/devtools/src/native-providers.js +749 -0
- package/dist/libraries/devtools/src/snapshot.js +35 -0
- package/dist/libraries/devtools/src/verify.js +139 -0
- package/dist/libraries/devtools/src/web/browser.js +94 -0
- package/dist/libraries/devtools/src/web/host.js +183 -0
- package/dist/libraries/devtools/src/web/mirror.js +26 -0
- package/dist/libraries/devtools/src/web/server.js +187 -0
- package/dist/libraries/entities/src/index.js +3 -0
- package/dist/libraries/entities/src/library.js +46 -0
- package/dist/libraries/entities/src/model-renderer.js +1307 -0
- package/dist/libraries/entities/src/shaders/model.wgsl +375 -0
- package/dist/libraries/gamepad/src/feed-input.js +54 -0
- package/dist/libraries/gamepad/src/filters.js +44 -0
- package/dist/libraries/gamepad/src/glyphs.js +83 -0
- package/dist/libraries/gamepad/src/hub.js +164 -0
- package/dist/libraries/gamepad/src/index.js +10 -0
- package/dist/libraries/gamepad/src/library.js +56 -0
- package/dist/libraries/gamepad/src/source-sab.js +62 -0
- package/dist/libraries/gamepad/src/sysfs-enrich.js +125 -0
- package/dist/libraries/gaussian-splats/src/gpu-sort.js +506 -0
- package/dist/libraries/gaussian-splats/src/index.js +8 -0
- package/dist/libraries/gaussian-splats/src/library.js +44 -0
- package/dist/libraries/gaussian-splats/src/parser.js +297 -0
- package/dist/libraries/gaussian-splats/src/renderer.js +368 -0
- package/dist/libraries/gaussian-splats/src/sh-eval.js +196 -0
- package/dist/libraries/gaussian-splats/src/sorter.js +76 -0
- package/dist/libraries/gaussian-splats/src/tile-raster.js +424 -0
- package/dist/libraries/gpu-kernels/src/index.js +8 -0
- package/dist/libraries/gpu-kernels/src/kernel.js +591 -0
- package/dist/libraries/gpu-kernels/src/transpile.js +896 -0
- package/dist/libraries/html-ui-kit/src/behaviors.js +231 -0
- package/dist/libraries/html-ui-kit/src/components.js +219 -0
- package/dist/libraries/html-ui-kit/src/index.js +17 -0
- package/dist/libraries/html-ui-kit/src/nav/nav-controller.js +215 -0
- package/dist/libraries/html-ui-kit/src/nav/nav-input.js +138 -0
- package/dist/libraries/html-ui-kit/src/nav/osk.js +135 -0
- package/dist/libraries/html-ui-kit/src/nav/router.js +152 -0
- package/dist/libraries/html-ui-kit/src/nav/vcursor.js +177 -0
- package/dist/libraries/html-ui-kit/src/ten-foot.js +138 -0
- package/dist/libraries/html-ui-kit/src/theme.js +235 -0
- package/dist/libraries/inspectable/src/index.js +6 -0
- package/dist/libraries/inspectable/src/inspectable.js +205 -0
- package/dist/libraries/lighting/src/index.js +4 -0
- package/dist/libraries/lighting/src/library.js +48 -0
- package/dist/libraries/lighting/src/light-system.js +395 -0
- package/dist/libraries/lighting/src/lighting-system.js +57 -0
- package/dist/libraries/lighting/src/shaders/light-debug.wgsl +30 -0
- package/dist/libraries/marching-cubes/src/chunked-field.js +130 -0
- package/dist/libraries/marching-cubes/src/deformation.js +41 -0
- package/dist/libraries/marching-cubes/src/generator.js +356 -0
- package/dist/libraries/marching-cubes/src/index.js +13 -0
- package/dist/libraries/marching-cubes/src/library.js +54 -0
- package/dist/libraries/marching-cubes/src/lod.js +95 -0
- package/dist/libraries/marching-cubes/src/marching-tetrahedra.js +261 -0
- package/dist/libraries/marching-cubes/src/sab.js +40 -0
- package/dist/libraries/marching-cubes/src/streaming-config.js +28 -0
- package/dist/libraries/marching-cubes/src/streaming-manager.js +490 -0
- package/dist/libraries/marching-cubes/src/tables.js +314 -0
- package/dist/libraries/marching-cubes/src/types.js +1 -0
- package/dist/libraries/models/src/bake-node-transforms.js +146 -0
- package/dist/libraries/models/src/bind-unskinned-meshes.js +145 -0
- package/dist/libraries/models/src/codecs/basisu-codec.js +134 -0
- package/dist/libraries/models/src/codecs/draco-codec.js +236 -0
- package/dist/libraries/models/src/codecs/draco3dgltf.d.ts +40 -0
- package/dist/libraries/models/src/codecs/index.js +5 -0
- package/dist/libraries/models/src/codecs/meshopt-codec.js +59 -0
- package/dist/libraries/models/src/codecs/registry.js +111 -0
- package/dist/libraries/models/src/dae.js +665 -0
- package/dist/libraries/models/src/default-part-selection.js +58 -0
- package/dist/libraries/models/src/dxf.js +235 -0
- package/dist/libraries/models/src/fbx/index.js +438 -0
- package/dist/libraries/models/src/fbx/interpreter/animation.js +369 -0
- package/dist/libraries/models/src/fbx/interpreter/blend-shapes.js +283 -0
- package/dist/libraries/models/src/fbx/interpreter/connections.js +158 -0
- package/dist/libraries/models/src/fbx/interpreter/diagnostics.js +48 -0
- package/dist/libraries/models/src/fbx/interpreter/geometry.js +430 -0
- package/dist/libraries/models/src/fbx/interpreter/global-settings.js +77 -0
- package/dist/libraries/models/src/fbx/interpreter/materials.js +231 -0
- package/dist/libraries/models/src/fbx/interpreter/nodes.js +168 -0
- package/dist/libraries/models/src/fbx/interpreter/skeleton.js +454 -0
- package/dist/libraries/models/src/fbx/parsers/binary-parser.js +217 -0
- package/dist/libraries/models/src/fbx/types.js +88 -0
- package/dist/libraries/models/src/gltf-extensions.js +121 -0
- package/dist/libraries/models/src/gltf.js +724 -0
- package/dist/libraries/models/src/index.js +46 -0
- package/dist/libraries/models/src/library.js +44 -0
- package/dist/libraries/models/src/loader.js +218 -0
- package/dist/libraries/models/src/material-adapter.js +82 -0
- package/dist/libraries/models/src/mini-xml.js +145 -0
- package/dist/libraries/models/src/normalize.js +168 -0
- package/dist/libraries/models/src/obj.js +247 -0
- package/dist/libraries/models/src/off.js +94 -0
- package/dist/libraries/models/src/ply.js +329 -0
- package/dist/libraries/models/src/pose-sampler.js +183 -0
- package/dist/libraries/models/src/sidecar/blender-extras.js +32 -0
- package/dist/libraries/models/src/sidecar/ddmeta.js +98 -0
- package/dist/libraries/models/src/sidecar/godot-import.js +76 -0
- package/dist/libraries/models/src/sidecar/resolver.js +112 -0
- package/dist/libraries/models/src/sidecar/types.js +8 -0
- package/dist/libraries/models/src/sidecar/unity-meta.js +46 -0
- package/dist/libraries/models/src/skeleton-synthesis.js +122 -0
- package/dist/libraries/models/src/stl.js +129 -0
- package/dist/libraries/models/src/threeds.js +312 -0
- package/dist/libraries/models/src/threemf.js +203 -0
- package/dist/libraries/models/src/types.js +33 -0
- package/dist/libraries/models/src/vtk.js +242 -0
- package/dist/libraries/navmesh/src/crowd-system.js +207 -0
- package/dist/libraries/navmesh/src/debug-viz.js +52 -0
- package/dist/libraries/navmesh/src/index.js +7 -0
- package/dist/libraries/navmesh/src/library.js +47 -0
- package/dist/libraries/navmesh/src/navmesh-generator.js +364 -0
- package/dist/libraries/navmesh/src/navmesh.js +141 -0
- package/dist/libraries/navmesh/src/pathfinder.js +221 -0
- package/dist/libraries/navmesh/src/types.js +1 -0
- package/dist/libraries/networking/src/authority.js +107 -0
- package/dist/libraries/networking/src/connection.js +107 -0
- package/dist/libraries/networking/src/discovery.js +314 -0
- package/dist/libraries/networking/src/enhanced-replication.js +282 -0
- package/dist/libraries/networking/src/epic-adapter.js +101 -0
- package/dist/libraries/networking/src/index.js +16 -0
- package/dist/libraries/networking/src/library.js +45 -0
- package/dist/libraries/networking/src/lobby.js +84 -0
- package/dist/libraries/networking/src/platform-adapter.js +92 -0
- package/dist/libraries/networking/src/rcs-adapter.js +100 -0
- package/dist/libraries/networking/src/remote-input.js +162 -0
- package/dist/libraries/networking/src/replication.js +273 -0
- package/dist/libraries/networking/src/rpc.js +172 -0
- package/dist/libraries/networking/src/session.js +129 -0
- package/dist/libraries/networking/src/transport.js +156 -0
- package/dist/libraries/networking/src/webrtc.js +266 -0
- package/dist/libraries/pathfinding-2d/src/astar-grid.js +255 -0
- package/dist/libraries/pathfinding-2d/src/index.js +9 -0
- package/dist/libraries/persistence/src/autosave-manager.js +94 -0
- package/dist/libraries/persistence/src/binary-record-store.js +205 -0
- package/dist/libraries/persistence/src/browser.js +16 -0
- package/dist/libraries/persistence/src/file-save-store.js +507 -0
- package/dist/libraries/persistence/src/hash-utils.js +54 -0
- package/dist/libraries/persistence/src/index.js +17 -0
- package/dist/libraries/persistence/src/library.js +51 -0
- package/dist/libraries/persistence/src/mock-opfs.js +114 -0
- package/dist/libraries/persistence/src/node-fs-directory-handle.js +168 -0
- package/dist/libraries/persistence/src/opfs-save-store.js +584 -0
- package/dist/libraries/persistence/src/save-worker-proxy.js +96 -0
- package/dist/libraries/persistence/src/save-worker.js +76 -0
- package/dist/libraries/persistence/src/xxh3-ts.d.ts +10 -0
- package/dist/libraries/physics-native/src/backend.js +960 -0
- package/dist/libraries/physics-native/src/broadphase.js +79 -0
- package/dist/libraries/physics-native/src/index.js +6 -0
- package/dist/libraries/physics-native/src/library.js +57 -0
- package/dist/libraries/physics-native/src/narrowphase-shapes.js +348 -0
- package/dist/libraries/physics-native/src/narrowphase.js +60 -0
- package/dist/libraries/physics-native/src/solver.js +105 -0
- package/dist/libraries/physics-native/src/types.js +4 -0
- package/dist/libraries/physics-rapier/src/api.js +352 -0
- package/dist/libraries/physics-rapier/src/auto-backend.js +54 -0
- package/dist/libraries/physics-rapier/src/backend.js +1066 -0
- package/dist/libraries/physics-rapier/src/bulk-ops.js +46 -0
- package/dist/libraries/physics-rapier/src/ffi-backend.js +17 -0
- package/dist/libraries/physics-rapier/src/ffi-lib.js +605 -0
- package/dist/libraries/physics-rapier/src/index.js +9 -0
- package/dist/libraries/physics-rapier/src/library.js +71 -0
- package/dist/libraries/physics-rapier/src/rapier-backend.js +1102 -0
- package/dist/libraries/physics-rapier/src/realm-worker-script.js +233 -0
- package/dist/libraries/postfx/src/index.js +14 -0
- package/dist/libraries/postfx/src/library.js +207 -0
- package/dist/libraries/postfx/src/post-process-stack.js +1641 -0
- package/dist/libraries/postfx/src/shaders/post-process/afterimage.wgsl +14 -0
- package/dist/libraries/postfx/src/shaders/post-process/ascii.wgsl +24 -0
- package/dist/libraries/postfx/src/shaders/post-process/blit.wgsl +12 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-blur.wgsl +21 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-bright.wgsl +15 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-composite.wgsl +14 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-downsample.wgsl +60 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-soft.wgsl +46 -0
- package/dist/libraries/postfx/src/shaders/post-process/bloom-upsample.wgsl +51 -0
- package/dist/libraries/postfx/src/shaders/post-process/channel-mixer.wgsl +36 -0
- package/dist/libraries/postfx/src/shaders/post-process/chromatic-aberration.wgsl +37 -0
- package/dist/libraries/postfx/src/shaders/post-process/dithering.wgsl +64 -0
- package/dist/libraries/postfx/src/shaders/post-process/dof.wgsl +131 -0
- package/dist/libraries/postfx/src/shaders/post-process/edges.wgsl +45 -0
- package/dist/libraries/postfx/src/shaders/post-process/fullscreen-vs.wgsl +15 -0
- package/dist/libraries/postfx/src/shaders/post-process/fxaa.wgsl +102 -0
- package/dist/libraries/postfx/src/shaders/post-process/gaussian-blur.wgsl +37 -0
- package/dist/libraries/postfx/src/shaders/post-process/glow-blur.wgsl +33 -0
- package/dist/libraries/postfx/src/shaders/post-process/glow-composite.wgsl +25 -0
- package/dist/libraries/postfx/src/shaders/post-process/grain.wgsl +37 -0
- package/dist/libraries/postfx/src/shaders/post-process/halftone.wgsl +80 -0
- package/dist/libraries/postfx/src/shaders/post-process/highlight-blur.wgsl +33 -0
- package/dist/libraries/postfx/src/shaders/post-process/highlight-composite.wgsl +32 -0
- package/dist/libraries/postfx/src/shaders/post-process/lens-distortion.wgsl +43 -0
- package/dist/libraries/postfx/src/shaders/post-process/lens-flare.wgsl +68 -0
- package/dist/libraries/postfx/src/shaders/post-process/lut.wgsl +30 -0
- package/dist/libraries/postfx/src/shaders/post-process/motion-blur.wgsl +55 -0
- package/dist/libraries/postfx/src/shaders/post-process/occluder-chunk.wgsl +28 -0
- package/dist/libraries/postfx/src/shaders/post-process/outline.wgsl +51 -0
- package/dist/libraries/postfx/src/shaders/post-process/pixelation.wgsl +47 -0
- package/dist/libraries/postfx/src/shaders/post-process/sharpen.wgsl +32 -0
- package/dist/libraries/postfx/src/shaders/post-process/sobel.wgsl +26 -0
- package/dist/libraries/postfx/src/shaders/post-process/split-tone.wgsl +36 -0
- package/dist/libraries/postfx/src/shaders/post-process/ssao-blur.wgsl +38 -0
- package/dist/libraries/postfx/src/shaders/post-process/ssao-composite.wgsl +25 -0
- package/dist/libraries/postfx/src/shaders/post-process/ssao.wgsl +147 -0
- package/dist/libraries/postfx/src/shaders/post-process/ssr.wgsl +155 -0
- package/dist/libraries/postfx/src/shaders/post-process/taa.wgsl +98 -0
- package/dist/libraries/postfx/src/shaders/post-process/tonemap.wgsl +40 -0
- package/dist/libraries/postfx/src/shaders/post-process/watercolor.wgsl +82 -0
- package/dist/libraries/postfx/src/shaders/post-process/white-balance.wgsl +41 -0
- package/dist/libraries/recast/src/backend.js +124 -0
- package/dist/libraries/recast/src/crowd-system.js +310 -0
- package/dist/libraries/recast/src/index.js +4 -0
- package/dist/libraries/recast/src/library.js +59 -0
- package/dist/libraries/recast/src/types.js +4 -0
- package/dist/libraries/sand/src/cell.js +32 -0
- package/dist/libraries/sand/src/fields.js +27 -0
- package/dist/libraries/sand/src/fluid-grid.js +267 -0
- package/dist/libraries/sand/src/grid-dims.js +47 -0
- package/dist/libraries/sand/src/grid-sim-buffer.js +184 -0
- package/dist/libraries/sand/src/index.js +20 -0
- package/dist/libraries/sand/src/library.js +67 -0
- package/dist/libraries/sand/src/materials.js +437 -0
- package/dist/libraries/sand/src/palette.js +87 -0
- package/dist/libraries/sand/src/particles.js +163 -0
- package/dist/libraries/sand/src/render/sand-grid-pass.js +377 -0
- package/dist/libraries/sand/src/rng.js +44 -0
- package/dist/libraries/sand/src/rules/builtin-rules.js +125 -0
- package/dist/libraries/sand/src/rules/rule-compiler.js +164 -0
- package/dist/libraries/sand/src/rules/rule-engine.js +210 -0
- package/dist/libraries/sand/src/rules/rule-types.js +27 -0
- package/dist/libraries/sand/src/sand-step-pool.js +458 -0
- package/dist/libraries/sand/src/sand-step-worker.js +101 -0
- package/dist/libraries/sand/src/sand-world.js +3382 -0
- package/dist/libraries/stickman/src/index.js +7 -0
- package/dist/libraries/stickman/src/library.js +44 -0
- package/dist/libraries/stickman/src/proportions.js +40 -0
- package/dist/libraries/stickman/src/shader.js +113 -0
- package/dist/libraries/stickman/src/skeleton.js +163 -0
- package/dist/libraries/stickman/src/stickman-pass.js +210 -0
- package/dist/libraries/stickman/src/thick-line.js +120 -0
- package/dist/libraries/surface-nets/src/chunked-field.js +5 -0
- package/dist/libraries/surface-nets/src/deformation.js +29 -0
- package/dist/libraries/surface-nets/src/index.js +15 -0
- package/dist/libraries/surface-nets/src/library.js +41 -0
- package/dist/libraries/surface-nets/src/lod.js +6 -0
- package/dist/libraries/surface-nets/src/sab.js +4 -0
- package/dist/libraries/surface-nets/src/streaming-config.js +4 -0
- package/dist/libraries/surface-nets/src/streaming-manager.js +9 -0
- package/dist/libraries/surface-nets/src/surface-nets.js +361 -0
- package/dist/libraries/surface-nets/src/types.js +1 -0
- package/dist/libraries/water/src/buoyancy.js +80 -0
- package/dist/libraries/water/src/index.js +12 -0
- package/dist/libraries/water/src/library.js +65 -0
- package/dist/libraries/water/src/shore-damping.js +70 -0
- package/dist/libraries/water/src/water-buffer.js +78 -0
- package/dist/libraries/water/src/water-chunks.js +5 -0
- package/dist/libraries/water/src/water-physics.js +315 -0
- package/dist/libraries/water/src/water-renderer.js +736 -0
- package/dist/libraries/water/src/water-sab.js +138 -0
- package/dist/libraries/water/src/wave-sources.js +45 -0
- package/dist/libraries/weather/src/index.js +5 -0
- package/dist/libraries/weather/src/library.js +48 -0
- package/dist/libraries/weather/src/types.js +29 -0
- package/dist/libraries/weather/src/weather-blend.js +108 -0
- package/dist/libraries/weather/src/weather-system.js +275 -0
- package/dist/libraries/weatherfx/src/cloud-provider.js +5 -0
- package/dist/libraries/weatherfx/src/cloud-system.js +294 -0
- package/dist/libraries/weatherfx/src/index.js +4 -0
- package/dist/libraries/weatherfx/src/library.js +41 -0
- package/dist/libraries/weatherfx/src/particle-system.js +350 -0
- package/dist/libraries/weatherfx/src/shaders/cloud.wgsl +111 -0
- package/dist/libraries/weatherfx/src/shaders/particle-compute.wgsl +187 -0
- package/dist/libraries/weatherfx/src/shaders/particle-render.wgsl +95 -0
- package/dist/mcp/src/client.js +669 -0
- package/dist/mcp/src/engine-context.js +99 -0
- package/dist/mcp/src/http-transport.js +423 -0
- package/dist/mcp/src/index.js +5 -0
- package/dist/mcp/src/prompts/add-entity.js +39 -0
- package/dist/mcp/src/prompts/create-scene.js +41 -0
- package/dist/mcp/src/prompts/debug-frame.js +36 -0
- package/dist/mcp/src/prompts/index.js +10 -0
- package/dist/mcp/src/resources/asset-list.js +28 -0
- package/dist/mcp/src/resources/checkpoint-list.js +29 -0
- package/dist/mcp/src/resources/entity-state.js +45 -0
- package/dist/mcp/src/resources/gpu-info.js +90 -0
- package/dist/mcp/src/resources/index.js +51 -0
- package/dist/mcp/src/resources/performance.js +33 -0
- package/dist/mcp/src/resources/scene-tree.js +37 -0
- package/dist/mcp/src/server.js +307 -0
- package/dist/mcp/src/tools/animation.js +102 -0
- package/dist/mcp/src/tools/asset.js +146 -0
- package/dist/mcp/src/tools/audio.js +80 -0
- package/dist/mcp/src/tools/build.js +128 -0
- package/dist/mcp/src/tools/camera.js +157 -0
- package/dist/mcp/src/tools/checkpoint.js +90 -0
- package/dist/mcp/src/tools/component.js +176 -0
- package/dist/mcp/src/tools/debug.js +273 -0
- package/dist/mcp/src/tools/entity.js +309 -0
- package/dist/mcp/src/tools/inspect.js +192 -0
- package/dist/mcp/src/tools/lighting.js +239 -0
- package/dist/mcp/src/tools/material.js +225 -0
- package/dist/mcp/src/tools/mesh.js +210 -0
- package/dist/mcp/src/tools/physics.js +251 -0
- package/dist/mcp/src/tools/scene.js +139 -0
- package/dist/mcp/src/tools/script.js +114 -0
- package/dist/mcp/src/types.js +9 -0
- package/dist/mcp/src/undo-redo.js +64 -0
- package/dist/modules/camera-controls/src/index.js +116 -0
- package/dist/modules/controller-ui/src/index.js +149 -0
- package/dist/modules/devtools/src/api.js +317 -0
- package/dist/modules/devtools/src/asset-utils.js +102 -0
- package/dist/modules/devtools/src/bind-debug-store.js +34 -0
- package/dist/modules/devtools/src/blitz/host.js +391 -0
- package/dist/modules/devtools/src/blitz/module.js +65 -0
- package/dist/modules/devtools/src/blitz/panels/console.js +217 -0
- package/dist/modules/devtools/src/blitz/panels/elements.js +79 -0
- package/dist/modules/devtools/src/blitz/panels/gpu.js +61 -0
- package/dist/modules/devtools/src/blitz/panels/performance.js +113 -0
- package/dist/modules/devtools/src/blitz/panels/snapshot.js +141 -0
- package/dist/modules/devtools/src/blitz/panels/types.js +55 -0
- package/dist/modules/devtools/src/blitz/theme.js +167 -0
- package/dist/modules/devtools/src/data-bridge.js +247 -0
- package/dist/modules/devtools/src/debug-overlay.js +181 -0
- package/dist/modules/devtools/src/debug-raycast.js +296 -0
- package/dist/modules/devtools/src/debug-store.js +28 -0
- package/dist/modules/devtools/src/debug-view-descriptors.js +24 -0
- package/dist/modules/devtools/src/doctor-panel.js +163 -0
- package/dist/modules/devtools/src/gizmo-module.js +95 -0
- package/dist/modules/devtools/src/graph-model.js +387 -0
- package/dist/modules/devtools/src/grid-renderer.js +145 -0
- package/dist/modules/devtools/src/height-ruler-renderer.js +189 -0
- package/dist/modules/devtools/src/index.js +46 -0
- package/dist/modules/devtools/src/init.js +204 -0
- package/dist/modules/devtools/src/label-overlay.js +129 -0
- package/dist/modules/devtools/src/material-stats-panel.js +171 -0
- package/dist/modules/devtools/src/profiling-bridge.js +288 -0
- package/dist/modules/devtools/src/profiling-hooks.js +63 -0
- package/dist/modules/devtools/src/renderer-adapter.js +61 -0
- package/dist/modules/devtools/src/scene-inspector.js +571 -0
- package/dist/modules/devtools/src/scene-store.js +212 -0
- package/dist/modules/devtools/src/scene-sync.js +92 -0
- package/dist/modules/devtools/src/shaders/transform-gizmo.wgsl +38 -0
- package/dist/modules/devtools/src/sim-stats-panel.js +250 -0
- package/dist/modules/devtools/src/sim-stats-provider.js +73 -0
- package/dist/modules/devtools/src/skeleton-renderer.js +326 -0
- package/dist/modules/devtools/src/transform-gizmo.js +677 -0
- package/dist/modules/devtools/src/types.js +5 -0
- package/dist/modules/devtools/src/worker-expose.js +59 -0
- package/dist/modules/devtools/src/worker-sync.js +115 -0
- package/dist/modules/editor/src/commands/component.js +151 -0
- package/dist/modules/editor/src/commands/entity.js +253 -0
- package/dist/modules/editor/src/commands/hierarchy.js +79 -0
- package/dist/modules/editor/src/commands/index.js +57 -0
- package/dist/modules/editor/src/commands/prefab.js +149 -0
- package/dist/modules/editor/src/commands/registry.js +246 -0
- package/dist/modules/editor/src/commands/scene-io.js +206 -0
- package/dist/modules/editor/src/commands/selection.js +71 -0
- package/dist/modules/editor/src/commands/transform.js +88 -0
- package/dist/modules/editor/src/ddscene.js +189 -0
- package/dist/modules/editor/src/document.js +96 -0
- package/dist/modules/editor/src/editor-context.js +115 -0
- package/dist/modules/editor/src/index.js +11 -0
- package/dist/modules/editor/src/mcp.js +91 -0
- package/dist/modules/editor/src/module.js +115 -0
- package/dist/modules/editor/src/selection.js +60 -0
- package/dist/modules/editor/src/shell.js +397 -0
- package/dist/modules/editor/src/viewport.js +186 -0
- package/dist/modules/html-ui/src/composite.js +116 -0
- package/dist/modules/html-ui/src/create-html-ui.js +137 -0
- package/dist/modules/html-ui/src/doc-backend.js +518 -0
- package/dist/modules/html-ui/src/host.js +819 -0
- package/dist/modules/html-ui/src/index.js +5 -0
- package/dist/modules/html-ui/src/jsx-dev-runtime.js +9 -0
- package/dist/modules/html-ui/src/jsx-runtime.js +121 -0
- package/dist/modules/html-ui/src/protocol.js +6 -0
- package/dist/modules/html-ui/src/ui-worker.js +10 -0
- package/dist/modules/mcp/src/index.js +62 -0
- package/dist/modules/movement-2d/src/grid-character.js +345 -0
- package/dist/modules/movement-2d/src/index.js +27 -0
- package/dist/modules/movement-3d/src/character-motor.js +166 -0
- package/dist/modules/movement-3d/src/index.js +27 -0
- package/dist/modules/native-osr/src/index.js +12 -0
- package/dist/modules/native-osr/src/input-router.js +335 -0
- package/dist/modules/native-osr/src/native-osr-manager.js +210 -0
- package/dist/modules/native-osr/src/native-texture-source.js +66 -0
- package/dist/modules/native-osr/src/types.js +8 -0
- package/dist/modules/native-osr/src/world-space-ui-pass.js +313 -0
- package/dist/modules/sailing/src/index.js +39 -0
- package/dist/modules/terrain/src/index.js +44 -0
- package/dist/modules/vitals/src/index.js +25 -0
- package/dist/modules/vitals/src/vitals.js +195 -0
- package/dist/modules/xr/src/camera-rig.js +119 -0
- package/dist/modules/xr/src/debug.js +45 -0
- package/dist/modules/xr/src/frame-loop.js +139 -0
- package/dist/modules/xr/src/index.js +10 -0
- package/dist/modules/xr/src/input.js +164 -0
- package/dist/modules/xr/src/layer.js +100 -0
- package/dist/modules/xr/src/session.js +133 -0
- package/dist/modules/xr/src/sim-module.js +21 -0
- package/dist/modules/xr/src/types.js +4 -0
- package/dist/modules/xr/src/webxr.d.ts +182 -0
- package/dist/modules/xr/src/xr-module.js +134 -0
- package/dist/shader-graph/src/chunks.js +340 -0
- package/dist/shader-graph/src/compiler.js +639 -0
- package/dist/shader-graph/src/compute-compiler.js +384 -0
- package/dist/shader-graph/src/compute-graph.js +55 -0
- package/dist/shader-graph/src/compute-profiles.js +39 -0
- package/dist/shader-graph/src/graph.js +38 -0
- package/dist/shader-graph/src/index.js +15 -0
- package/dist/shader-graph/src/profiles.js +305 -0
- package/dist/shader-graph/src/validator.js +42 -0
- package/dist/shader-graph/src/wgsl-binding-validator.js +110 -0
- package/dist/shader-graph/src/wgsl-struct-validator.js +222 -0
- package/dist/shader-graph/src/wgsl-struct.js +251 -0
- package/dist/test/src/index.js +1 -0
- package/dist/test/src/vision-test.js +228 -0
- package/libraries/asset-browser/src/software-thumbnails.ts +2 -2
- package/libraries/audio-kira/src/backend.ts +2 -1
- package/libraries/blitz-ui/native/src/shell.rs +35 -1
- package/libraries/blitz-ui/native-osr/Cargo.toml +8 -0
- package/libraries/blitz-ui/native-osr/src/lib.rs +213 -22
- package/libraries/blitz-ui/native-osr/src/mutate.rs +109 -14
- package/libraries/blitz-ui/src/native-osr-ffi.ts +71 -8
- package/libraries/blitz-ui/src/router.ts +3 -1
- package/libraries/blitz-ui/src/ui-blit-pass.ts +1 -1
- package/libraries/character/src/character-animator.ts +1 -1
- package/libraries/character/src/customization.ts +513 -0
- package/libraries/character/src/index.ts +6 -0
- package/libraries/character/src/inspectable.ts +111 -0
- package/libraries/character/src/loader.ts +38 -13
- package/libraries/character/src/locomotion.ts +13 -1
- package/libraries/character/src/preview.ts +94 -24
- package/libraries/devtools/README.md +16 -18
- package/libraries/devtools/src/backend.ts +505 -0
- package/libraries/devtools/src/cdp-bridge.ts +8 -8
- package/libraries/devtools/src/collectors.ts +41 -37
- package/libraries/devtools/src/index.ts +32 -14
- package/libraries/devtools/src/native-providers.ts +20 -12
- package/libraries/devtools/src/snapshot.ts +77 -0
- package/libraries/devtools/src/web/host.ts +11 -12
- package/libraries/devtools/src/web/mirror.ts +14 -405
- package/libraries/devtools/src/web/server.ts +4 -3
- package/libraries/entities/src/model-renderer.ts +96 -23
- package/libraries/gamepad/src/library.ts +2 -1
- package/libraries/inspectable/src/index.ts +11 -0
- package/libraries/inspectable/src/inspectable.ts +277 -0
- package/libraries/marching-cubes/src/streaming-manager.ts +4 -4
- package/libraries/models/src/bind-unskinned-meshes.ts +131 -0
- package/libraries/models/src/index.ts +1 -0
- package/libraries/models/src/types.ts +22 -0
- package/libraries/persistence/src/autosave-manager.ts +1 -1
- package/libraries/persistence/src/binary-record-store.ts +1 -1
- package/libraries/persistence/src/file-save-store.ts +4 -4
- package/libraries/persistence/src/library.ts +1 -1
- package/libraries/persistence/src/opfs-save-store.ts +5 -5
- package/libraries/persistence/src/save-worker.ts +13 -14
- package/libraries/physics-rapier/src/ffi-lib.ts +2 -1
- package/libraries/postfx/src/post-process-stack.ts +1 -1
- package/libraries/sand/src/sand-step-pool.ts +5 -0
- package/libraries/water/src/water-renderer.ts +1 -1
- package/libraries/weatherfx/src/cloud-system.ts +3 -3
- package/mcp/README.md +20 -0
- package/mcp/src/client.ts +75 -22
- package/mcp/src/undo-redo.ts +2 -2
- package/modules/devtools/src/blitz/host.ts +430 -0
- package/modules/devtools/src/blitz/module.ts +101 -0
- package/modules/devtools/src/blitz/panels/console.ts +223 -0
- package/modules/devtools/src/blitz/panels/elements.ts +92 -0
- package/modules/devtools/src/blitz/panels/gpu.ts +70 -0
- package/modules/devtools/src/blitz/panels/performance.ts +120 -0
- package/modules/devtools/src/blitz/panels/snapshot.ts +152 -0
- package/modules/devtools/src/blitz/panels/types.ts +120 -0
- package/modules/devtools/src/blitz/theme.ts +168 -0
- package/modules/devtools/src/data-bridge.ts +1 -1
- package/modules/devtools/src/index.ts +6 -0
- package/modules/devtools/src/profiling-bridge.ts +17 -13
- package/modules/devtools/src/profiling-hooks.ts +22 -13
- package/modules/devtools/src/scene-inspector.ts +1 -1
- package/modules/devtools/src/worker-sync.ts +9 -1
- package/modules/editor/src/commands/registry.ts +2 -2
- package/modules/editor/src/module.ts +1 -1
- package/modules/html-ui/src/composite.ts +1 -1
- package/modules/html-ui/src/create-html-ui.ts +21 -9
- package/modules/html-ui/src/doc-backend.ts +189 -10
- package/modules/html-ui/src/host.ts +354 -40
- package/modules/html-ui/src/index.ts +1 -1
- package/modules/html-ui/src/jsx-runtime.ts +1 -1
- package/modules/html-ui/src/protocol.ts +53 -6
- package/modules/mcp/README.md +6 -0
- package/modules/mcp/src/index.ts +70 -3
- package/modules/movement-3d/src/character-motor.ts +83 -10
- package/package.json +838 -165
- package/shader-graph/README.md +25 -0
- package/test/README.md +16 -0
- package/libraries/blitz-ui/native-osr-spike.ts +0 -70
- package/libraries/devtools/native/Cargo.toml +0 -12
- package/libraries/devtools/native/src/lib.rs +0 -1646
- package/libraries/devtools/native/src/panels/console.rs +0 -338
- package/libraries/devtools/native/src/panels/dom_tree.rs +0 -47
- package/libraries/devtools/native/src/panels/generic.rs +0 -317
- package/libraries/devtools/native/src/panels/gpu.rs +0 -107
- package/libraries/devtools/native/src/panels/input.rs +0 -88
- package/libraries/devtools/native/src/panels/mod.rs +0 -154
- package/libraries/devtools/native/src/panels/perf_metrics.rs +0 -91
- package/libraries/devtools/native/src/panels/perf_recorder.rs +0 -158
- package/libraries/devtools/native/src/panels/scene.rs +0 -72
- package/libraries/devtools/native/src/state.rs +0 -394
- package/libraries/devtools/src/egui-ffi.ts +0 -804
- package/libraries/devtools/src/egui-renderer.ts +0 -407
- package/libraries/devtools/src/host.ts +0 -363
- package/libraries/devtools/src/mirror.ts +0 -794
- package/libraries/models/test-fixtures/fbx/LICENSE-notice.txt +0 -24
- package/libraries/models/test-fixtures/fbx/README.md +0 -46
- package/libraries/models/test-fixtures/fbx/m01_cube_phong.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m02_geo_ngons.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m03_normals.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m04_material_properties.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m05_external_diffuse.png +0 -0
- package/libraries/models/test-fixtures/fbx/m05_textures.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m06_uv_transform.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m07_multimaterial.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m08_transforms.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m09_skinning.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m10_morph.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m11_node_anim.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m12_skeletal_anim.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m13_morph_anim.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m14_multiclip.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m15_camera_lights.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m16_axis_yup.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m16_axis_zup.fbx +0 -0
- package/libraries/models/test-fixtures/fbx/m16_units_254.fbx +0 -0
- package/libraries/physics-native/src/ffi-spike-worker.ts +0 -71
- package/libraries/physics-rapier/bench/ffi-bench.ts +0 -79
- package/libraries/physics-rapier/bench/wasm-baseline.ts +0 -90
|
@@ -71,8 +71,10 @@ export interface ModAssetExtension {
|
|
|
71
71
|
kind: "mesh" | "texture" | "pbr-material" | "texture-pipeline";
|
|
72
72
|
/** Logical asset id (namespaced, e.g. "my-mod:crate"). */
|
|
73
73
|
id: string;
|
|
74
|
-
/** Path to the file relative to the mod dir.
|
|
75
|
-
|
|
74
|
+
/** Path to the file relative to the mod dir. Required for all kinds except
|
|
75
|
+
* "mesh" — a pathless mesh registers a procedural primitive prop whose
|
|
76
|
+
* shape/physics come entirely from the extension's meta fields. */
|
|
77
|
+
path?: string;
|
|
76
78
|
/** pbr-material: descriptor fields (baseColor, metallic, roughness, texture refs). */
|
|
77
79
|
/** texture-pipeline: pipeline descriptor. Extra fields are pass-through. */
|
|
78
80
|
[key: string]: unknown;
|
|
@@ -561,7 +563,10 @@ function validateAssetExtension(a: unknown, i: number, errors: string[]): void {
|
|
|
561
563
|
if (typeof ext.id !== "string" || !ext.id) {
|
|
562
564
|
errors.push(`extensions.assets[${i}].id: required string`);
|
|
563
565
|
}
|
|
564
|
-
|
|
566
|
+
// `path` is optional for mesh assets: a pathless mesh means "procedural
|
|
567
|
+
// primitive prop" (shape/physics meta only, no file). All other kinds
|
|
568
|
+
// still require a file path.
|
|
569
|
+
if (ext.kind !== "mesh" && (typeof ext.path !== "string" || !ext.path)) {
|
|
565
570
|
errors.push(`extensions.assets[${i}].path: required string`);
|
|
566
571
|
}
|
|
567
572
|
}
|
|
@@ -78,18 +78,18 @@ export class WorkshopFetcher {
|
|
|
78
78
|
try {
|
|
79
79
|
rawManifest = await source.store.get(source.manifestKey);
|
|
80
80
|
} catch (e) {
|
|
81
|
-
log.error("
|
|
81
|
+
log.error("workshop-fetcher", `Failed to fetch workshop manifest: ${(e as Error).message}`);
|
|
82
82
|
continue;
|
|
83
83
|
}
|
|
84
84
|
let parsed: unknown;
|
|
85
85
|
try {
|
|
86
86
|
parsed = JSON.parse(new TextDecoder().decode(rawManifest));
|
|
87
87
|
} catch (e) {
|
|
88
|
-
log.error("
|
|
88
|
+
log.error("workshop-fetcher", `Workshop manifest is not valid JSON: ${(e as Error).message}`);
|
|
89
89
|
continue;
|
|
90
90
|
}
|
|
91
91
|
if (!validateManifest(parsed)) {
|
|
92
|
-
log.error("
|
|
92
|
+
log.error("workshop-fetcher", `Workshop manifest failed schema validation`);
|
|
93
93
|
continue;
|
|
94
94
|
}
|
|
95
95
|
const assetManifest = parsed as AssetManifest;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// SAB layout + reader/writer
|
|
9
9
|
export {
|
|
10
10
|
allocateProfilingSAB,
|
|
11
|
-
claimSlot, computeProfilingSABLayout, fnv1a32, METRIC_CPU_PERCENT, METRIC_CUSTOM, METRIC_GC_PAUSE, METRIC_GPU_TIME, METRIC_HEAP_PERCENT, METRIC_HEAP_USAGE, METRIC_IOPS_LATENCY, METRIC_LONGTASK, METRIC_RAF_JITTER, METRIC_TASK_LATENCY, METRIC_TICK_LATENCY, PROFILING_IOPS_RING_CAP, PROFILING_MAGIC, PROFILING_MAX_SLOTS, PROFILING_STRING_MAX_LEN, PROFILING_STRING_TABLE_CAP, PROFILING_VERSION, PROFILING_WARNING_RING_CAP, ProfilingSABReader, ProfilingSABWriter, releaseSlot, RUNTIME_JS,
|
|
11
|
+
claimSlot, computeProfilingSABLayout, fnv1a32, METRIC_CPU_PERCENT, METRIC_CUSTOM, METRIC_GC_PAUSE, METRIC_GPU_TIME, METRIC_HEAP_PERCENT, METRIC_HEAP_USAGE, METRIC_IOPS_LATENCY, METRIC_LONGTASK, METRIC_RAF_JITTER, METRIC_TASK_LATENCY, METRIC_TICK_LATENCY, PROFILING_IOPS_RING_CAP, PROFILING_MAGIC, PROFILING_MAX_SLOTS, PROFILING_STRING_MAX_LEN, PROFILING_STRING_TABLE_CAP, PROFILING_VERSION, PROFILING_WARNING_RING_CAP, profilingLayoutFromSab, ProfilingSABReader, ProfilingSABWriter, releaseSlot, RUNTIME_JS,
|
|
12
12
|
RUNTIME_QUICKJS,
|
|
13
13
|
RUNTIME_WASM, SEVERITY_CRITICAL, SEVERITY_ERROR, SEVERITY_INFO,
|
|
14
14
|
SEVERITY_WARN, STORE_IDB, STORE_OPFS
|
|
@@ -322,6 +322,25 @@ export function allocateProfilingSAB(
|
|
|
322
322
|
return { sab, layout };
|
|
323
323
|
}
|
|
324
324
|
|
|
325
|
+
/**
|
|
326
|
+
* Derive the SAB layout from a live buffer's header — readers should prefer
|
|
327
|
+
* this over computeProfilingSABLayout() defaults so they work regardless of
|
|
328
|
+
* the allocator's maxSlots. Returns null when the buffer isn't a valid
|
|
329
|
+
* ProfilingSAB. Ring/table caps aren't stored in the header — they must
|
|
330
|
+
* match the engine defaults (allocateProfilingSAB / ProfilingBridge use them).
|
|
331
|
+
*/
|
|
332
|
+
export function profilingLayoutFromSab(sab: SharedArrayBuffer): ProfilingSABLayout | null {
|
|
333
|
+
if (sab.byteLength < HEADER_SIZE) return null;
|
|
334
|
+
const u32 = new Uint32Array(sab);
|
|
335
|
+
if (u32[HDR.MAGIC] !== PROFILING_MAGIC) return null;
|
|
336
|
+
const maxSlots = u32[HDR.MAX_SLOTS];
|
|
337
|
+
if (maxSlots <= 0 || maxSlots > 4096) return null;
|
|
338
|
+
const layout = computeProfilingSABLayout(maxSlots);
|
|
339
|
+
// Strict match: a custom ring/table cap shifts every slot offset — reading
|
|
340
|
+
// with the wrong layout produces garbage rather than a clean miss.
|
|
341
|
+
return layout.byteLength === sab.byteLength ? layout : null;
|
|
342
|
+
}
|
|
343
|
+
|
|
325
344
|
// ─── ProfilingSABWriter (worker side) ───────────────────────────────────────
|
|
326
345
|
|
|
327
346
|
/**
|
|
@@ -284,7 +284,7 @@ export class WarningEngine {
|
|
|
284
284
|
cb(record, ctx);
|
|
285
285
|
} catch (err) {
|
|
286
286
|
// Don't let a callback error stop other callbacks
|
|
287
|
-
log.error("
|
|
287
|
+
log.error("warning-engine", `callback error for rule "${rule.id}": ${err}`);
|
|
288
288
|
}
|
|
289
289
|
});
|
|
290
290
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Worker prelude — imported at the top of every instrumented worker.
|
|
3
3
|
//
|
|
4
4
|
// On load (worker realm only):
|
|
5
|
-
// 1.
|
|
5
|
+
// 1. Takes the worker tag passed by the host's attachProfilingSAB RPC.
|
|
6
6
|
// 2. If a ProfilingSAB has been attached (via attachProfilingSAB called from
|
|
7
7
|
// the host's init RPC), claims a slot, initializes ThreadMetricsWriter +
|
|
8
8
|
// IopsRingWriter + worker-side WarningEngine + EventLoopMonitor.
|
|
@@ -143,7 +143,7 @@ export class BindlessFrameBindings {
|
|
|
143
143
|
this.bindGroup = this.device.createBindGroup({ layout, entries });
|
|
144
144
|
this.cachedLayoutVersion = layoutVersion;
|
|
145
145
|
this.cachedBufferVersion = bufferVersion;
|
|
146
|
-
log.debug("
|
|
146
|
+
log.debug("bindless", `material bind group rebuilt (layout v${layoutVersion}, buffer v${bufferVersion})`);
|
|
147
147
|
return this.bindGroup;
|
|
148
148
|
}
|
|
149
149
|
|
|
@@ -146,7 +146,7 @@ export class BindlessMaterialManager {
|
|
|
146
146
|
/** Update an existing material's params in place (no reallocation). */
|
|
147
147
|
updateMaterial(index: number, params: MaterialParams): void {
|
|
148
148
|
if (index < 0 || index >= this.nextSlot) {
|
|
149
|
-
log.warn("
|
|
149
|
+
log.warn("bindless", `updateMaterial: index ${index} out of range (nextSlot=${this.nextSlot})`);
|
|
150
150
|
return;
|
|
151
151
|
}
|
|
152
152
|
this.writeMaterial(index, params);
|
|
@@ -243,7 +243,7 @@ export class BindlessMaterialManager {
|
|
|
243
243
|
this.backingU32 = new Uint32Array(newBacking.buffer);
|
|
244
244
|
this.capacity = newCapacity;
|
|
245
245
|
this.bufferVersion++;
|
|
246
|
-
log.debug("
|
|
246
|
+
log.debug("bindless", `material SSBO grew to capacity ${newCapacity}`);
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
|
|
@@ -190,7 +190,7 @@ export class BindlessTextureRegistry {
|
|
|
190
190
|
const reg = b.sources.get(sourceId);
|
|
191
191
|
if (!reg) continue;
|
|
192
192
|
if (b.key.width !== bitmap.width || b.key.height !== bitmap.height) {
|
|
193
|
-
log.warn("
|
|
193
|
+
log.warn("bindless", `updateFromImageBitmap dimension mismatch for ${String(sourceId)}: bucket ${b.key.width}x${b.key.height} vs bitmap ${bitmap.width}x${bitmap.height}`);
|
|
194
194
|
return false;
|
|
195
195
|
}
|
|
196
196
|
this.copyImageBitmapIntoLayer(bitmap, b, reg.pageIndex, reg.layerIndex, b.key);
|
|
@@ -510,7 +510,7 @@ fn fs(@builtin(position) pos: vec4f) -> @location(0) vec4f {
|
|
|
510
510
|
|
|
511
511
|
private appendPage(b: Bucket): void {
|
|
512
512
|
if (b.pages.length >= this.maxPagesPerBucket) {
|
|
513
|
-
log.error("
|
|
513
|
+
log.error("bindless", `bucket ${b.keyStr} exhausted maxPages=${this.maxPagesPerBucket}; texture registration failed`);
|
|
514
514
|
throw new Error(`BindlessTextureRegistry: bucket ${b.keyStr} full (maxPages=${this.maxPagesPerBucket})`);
|
|
515
515
|
}
|
|
516
516
|
const tex = this.device.createTexture({
|
|
@@ -42,7 +42,7 @@ export class GPUDeviceManager {
|
|
|
42
42
|
|
|
43
43
|
async requestDevice(): Promise<GPUDevice | null> {
|
|
44
44
|
if (!navigator.gpu) {
|
|
45
|
-
log.error("
|
|
45
|
+
log.error("gpu", "WebGPU not available");
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -51,7 +51,7 @@ export class GPUDeviceManager {
|
|
|
51
51
|
});
|
|
52
52
|
|
|
53
53
|
if (!this.adapter) {
|
|
54
|
-
log.error("
|
|
54
|
+
log.error("gpu", "No suitable GPU adapter found");
|
|
55
55
|
return null;
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -67,12 +67,12 @@ export class GPUDeviceManager {
|
|
|
67
67
|
|
|
68
68
|
this.device.lost.then((info: GPUDeviceLostInfo) => {
|
|
69
69
|
this.deviceLost = true;
|
|
70
|
-
log.error("
|
|
70
|
+
log.error("gpu", `GPU device lost: ${info?.message ?? "unknown reason"}. Application should attempt recovery or notify the user.`);
|
|
71
71
|
for (let i = 0; i < this.lostHandlers.length; i++) {
|
|
72
72
|
try {
|
|
73
73
|
this.lostHandlers[i](info);
|
|
74
74
|
} catch (err) {
|
|
75
|
-
log.error("
|
|
75
|
+
log.error("gpu", `Device lost handler threw: ${err}`);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
});
|
|
@@ -98,7 +98,7 @@ export class GPUDeviceManager {
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
async reinit(): Promise<GPUDevice | null> {
|
|
101
|
-
log.warn("
|
|
101
|
+
log.warn("gpu", "Device lost — reinitializing GPU device. Pass-specific resources (pipelines, bind groups, textures) are NOT recreated and must be rebuilt by the application.");
|
|
102
102
|
this.deviceLost = false;
|
|
103
103
|
this.device = null;
|
|
104
104
|
this.adapter = null;
|
|
@@ -722,7 +722,7 @@ export class FrameGraph {
|
|
|
722
722
|
}
|
|
723
723
|
|
|
724
724
|
if (result.length !== n) {
|
|
725
|
-
log.error("
|
|
725
|
+
log.error("frame-graph", "Cycle detected in render graph, falling back to registration order");
|
|
726
726
|
return this.passes;
|
|
727
727
|
}
|
|
728
728
|
|
|
@@ -745,7 +745,7 @@ export class FrameGraph {
|
|
|
745
745
|
});
|
|
746
746
|
|
|
747
747
|
if (errors.length > 0) {
|
|
748
|
-
log.warn("
|
|
748
|
+
log.warn("frame-graph", `Validation errors:\n${errors.join("\n")}`);
|
|
749
749
|
}
|
|
750
750
|
}
|
|
751
751
|
|
|
@@ -52,11 +52,19 @@ export interface GameRendererLike {
|
|
|
52
52
|
/** Render one frame on demand while the loop is stopped (or running). */
|
|
53
53
|
renderOnce?(): void;
|
|
54
54
|
getSurface?(): RenderSurface;
|
|
55
|
+
/** @deprecated Use getSurface — the surface is not necessarily a DOM canvas. */
|
|
55
56
|
getCanvas?(): RenderSurface;
|
|
56
57
|
getDevice?(): GPUDevice | null;
|
|
57
58
|
getFormat?(): GPUTextureFormat;
|
|
58
59
|
getFPS?(): number;
|
|
59
60
|
useRendererModule?(module: RendererModule): void;
|
|
61
|
+
/**
|
|
62
|
+
* The renderer's module host, when the renderer supports renderer modules.
|
|
63
|
+
* `startGame()` uses it to wire EngineLibrary DI provides — renderers
|
|
64
|
+
* that omit it silently drop library-provided resources (a warning is
|
|
65
|
+
* logged when libraries are declared but no host exists).
|
|
66
|
+
*/
|
|
67
|
+
getRendererModuleHost?(): RendererModuleHost | null;
|
|
60
68
|
getWorkerHost?(): unknown;
|
|
61
69
|
}
|
|
62
70
|
|
|
@@ -342,7 +350,7 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
342
350
|
// below).
|
|
343
351
|
const adapter = borrowedAdapter ?? await this.requestAdapterWithFallback();
|
|
344
352
|
if (!adapter && !borrowedDevice) {
|
|
345
|
-
log.error("
|
|
353
|
+
log.error("game-renderer", "No GPU adapter found — check GPU drivers and /dev/dri permissions");
|
|
346
354
|
return false;
|
|
347
355
|
}
|
|
348
356
|
this.device = borrowedDevice ?? await this.requestDeviceFromAdapter(adapter!);
|
|
@@ -367,7 +375,7 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
367
375
|
this.format = navigator.gpu.getPreferredCanvasFormat();
|
|
368
376
|
this.gpuProfiler = new GPUProfiler();
|
|
369
377
|
this.gpuProfiler.init(this.device, adapterInfo, this.format, 32);
|
|
370
|
-
log.
|
|
378
|
+
log.debug("game-renderer", `GPU timer pool supported: ${this.gpuProfiler.isGpuTimerSupported()} features: ${Array.from(this.device.features).join(", ")}`);
|
|
371
379
|
|
|
372
380
|
// Device lost handler
|
|
373
381
|
this.device.lost.then((info: GPUDeviceLostInfo) => {
|
|
@@ -426,10 +434,10 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
426
434
|
// Initial viewport layout
|
|
427
435
|
this.updateViewports(1);
|
|
428
436
|
|
|
429
|
-
log.info("
|
|
437
|
+
log.info("game-renderer", "initialized");
|
|
430
438
|
return true;
|
|
431
439
|
} catch (err) {
|
|
432
|
-
log.error("
|
|
440
|
+
log.error("game-renderer", `Init failed: ${err}`);
|
|
433
441
|
return false;
|
|
434
442
|
}
|
|
435
443
|
}
|
|
@@ -442,13 +450,13 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
442
450
|
powerPreference: "high-performance",
|
|
443
451
|
});
|
|
444
452
|
if (!adapter) {
|
|
445
|
-
log.warn("
|
|
453
|
+
log.warn("game-renderer", "No high-performance GPU adapter, trying low-power...");
|
|
446
454
|
adapter = await navigator.gpu.requestAdapter({
|
|
447
455
|
powerPreference: "low-power",
|
|
448
456
|
});
|
|
449
457
|
}
|
|
450
458
|
if (!adapter) {
|
|
451
|
-
log.warn("
|
|
459
|
+
log.warn("game-renderer", "No low-power adapter, trying any...");
|
|
452
460
|
adapter = await navigator.gpu.requestAdapter({});
|
|
453
461
|
}
|
|
454
462
|
return adapter;
|
|
@@ -471,9 +479,9 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
471
479
|
private handleDeviceLost(info: GPUDeviceLostInfo): void {
|
|
472
480
|
if (this.deviceLost || this.recoveringDevice) return; // already handled
|
|
473
481
|
this.deviceLost = true;
|
|
474
|
-
log.error("
|
|
482
|
+
log.error("game-renderer", `WebGPU device lost: ${info?.reason ?? "unknown"} — ${info?.message ?? ""}`);
|
|
475
483
|
try { this.callbacks.onDeviceLost?.(info); } catch (err) {
|
|
476
|
-
log.error("
|
|
484
|
+
log.error("game-renderer", `onDeviceLost callback threw: ${err}`);
|
|
477
485
|
}
|
|
478
486
|
|
|
479
487
|
if (
|
|
@@ -516,7 +524,7 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
516
524
|
try { nativeWin.requestQuit?.(); } catch { /* best-effort */ }
|
|
517
525
|
return;
|
|
518
526
|
}
|
|
519
|
-
log.warn("
|
|
527
|
+
log.warn("game-renderer", "Attempting page reload for GPU recovery...");
|
|
520
528
|
window.location.reload();
|
|
521
529
|
}, 2000);
|
|
522
530
|
}
|
|
@@ -567,9 +575,9 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
567
575
|
await this.callbacks.onDeviceRecovered?.(device);
|
|
568
576
|
|
|
569
577
|
this.deviceLost = false;
|
|
570
|
-
log.warn("
|
|
578
|
+
log.warn("game-renderer", "GPU device recovered — rendering resumed without reload");
|
|
571
579
|
} catch (err) {
|
|
572
|
-
log.error("
|
|
580
|
+
log.error("game-renderer", `Device recovery failed: ${err}`);
|
|
573
581
|
this.reloadForDeviceLoss();
|
|
574
582
|
} finally {
|
|
575
583
|
this.recoveringDevice = false;
|
|
@@ -606,7 +614,7 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
606
614
|
// an offscreen-render + upscale path to work here; for now it is a
|
|
607
615
|
// no-op rather than a brick.
|
|
608
616
|
if (this.resolutionScale < 1) {
|
|
609
|
-
log.warn("
|
|
617
|
+
log.warn("game-renderer", "resolutionScale is not supported on the native surface (swapchain must match the window size) — ignoring");
|
|
610
618
|
}
|
|
611
619
|
}
|
|
612
620
|
if (this.lastCssW > 0) this.onResize(this.lastCssW, this.lastCssH, this.lastRawDpr);
|
|
@@ -789,7 +797,7 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
789
797
|
try {
|
|
790
798
|
this.renderFrame();
|
|
791
799
|
} catch (err) {
|
|
792
|
-
log.error("
|
|
800
|
+
log.error("game-renderer", `Render loop error: ${(err as Error).message}\n${(err as Error).stack}`);
|
|
793
801
|
if (this.device?.lost) {
|
|
794
802
|
this.device.lost.then((info: GPUDeviceLostInfo) => {
|
|
795
803
|
this.handleDeviceLost(info);
|
|
@@ -904,6 +912,16 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
904
912
|
this.callbacks.afterViewports?.(dt, this.elapsedTime);
|
|
905
913
|
this.rendererModuleHost?.dispatchFrame("afterViewports", dt, this.elapsedTime);
|
|
906
914
|
|
|
915
|
+
// Worker-produced passes (postPass → "preSubmit" slot on the native
|
|
916
|
+
// host's GpuPassMailbox) join this frame's submit batch — refs that
|
|
917
|
+
// arrived since the last drain execute after the owner's buffers.
|
|
918
|
+
// Stale-tolerant by design: a worker that misses the drain lands next
|
|
919
|
+
// frame instead of rendezvousing the render thread.
|
|
920
|
+
const passMailbox = getNativeHost()?.passMailbox;
|
|
921
|
+
if (passMailbox) {
|
|
922
|
+
frameCommandBuffers.push(...passMailbox.drain("preSubmit"));
|
|
923
|
+
}
|
|
924
|
+
|
|
907
925
|
// Submit all command buffers for this frame in a single queue.submit() call
|
|
908
926
|
if (frameCommandBuffers.length > 0) {
|
|
909
927
|
this.device!.queue.submit(frameCommandBuffers);
|
|
@@ -972,7 +990,9 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
972
990
|
// the afterFrame callback, so drawing UI earlier would put it underneath
|
|
973
991
|
// their clear pass.
|
|
974
992
|
if (!gpuError && this.device && this.context) {
|
|
975
|
-
const compositors = [...this.uiCompositors]
|
|
993
|
+
const compositors = [...this.uiCompositors]
|
|
994
|
+
.filter((c) => c.hasContent())
|
|
995
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
|
|
976
996
|
const uiCanvasView = compositors.length > 0
|
|
977
997
|
? this.getSurfaceTexture()?.createView()
|
|
978
998
|
: undefined;
|
|
@@ -988,7 +1008,9 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
988
1008
|
});
|
|
989
1009
|
compositors.forEach((c) => { c.render(uiPass, this.canvas.width, this.canvas.height); });
|
|
990
1010
|
uiPass.end();
|
|
991
|
-
|
|
1011
|
+
// "preUi" slot — worker passes ordered ahead of the UI-composite
|
|
1012
|
+
// submit so their output is visible to the compositor this frame.
|
|
1013
|
+
this.device.queue.submit([...(passMailbox?.drain("preUi") ?? []), uiEncoder.finish()]);
|
|
992
1014
|
}
|
|
993
1015
|
}
|
|
994
1016
|
|
|
@@ -1000,7 +1022,7 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
1000
1022
|
}
|
|
1001
1023
|
|
|
1002
1024
|
const __rfTotal = performance.now() - now;
|
|
1003
|
-
if (this.config.debugTimingWarnings && __rfTotal > 20) log.warn("
|
|
1025
|
+
if (this.config.debugTimingWarnings && __rfTotal > 20) log.warn("game-renderer", `renderFrame took ${__rfTotal.toFixed(1)}ms`);
|
|
1004
1026
|
// NOTE: renderFrame() intentionally does NOT schedule the next frame —
|
|
1005
1027
|
// render() owns the rAF chain so one-shot callers (renderOnce, MCP
|
|
1006
1028
|
// screenshot capture) can't leak parallel loops.
|
|
@@ -1087,7 +1109,7 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
1087
1109
|
// window, transient failure) — skip this viewport's GPU work; game
|
|
1088
1110
|
// callbacks already ran above and the loop stays alive for next frame.
|
|
1089
1111
|
if (!colorView) return null;
|
|
1090
|
-
if (this.config.debugTimingWarnings && __ctMs > 20) log.warn("
|
|
1112
|
+
if (this.config.debugTimingWarnings && __ctMs > 20) log.warn("game-renderer", `getCurrentTexture took ${__ctMs.toFixed(1)}ms`);
|
|
1091
1113
|
|
|
1092
1114
|
const depthView = xrProvider
|
|
1093
1115
|
? xrProvider.getDepthView(viewportIdx, origViewport.w, origViewport.h)
|
|
@@ -1292,7 +1314,9 @@ export class GameRenderer implements CanvasResizeHandler {
|
|
|
1292
1314
|
* this helper only runs the compositors.
|
|
1293
1315
|
*/
|
|
1294
1316
|
protected renderScreenUiCompositors(): void {
|
|
1295
|
-
const compositors = [...this.uiCompositors]
|
|
1317
|
+
const compositors = [...this.uiCompositors]
|
|
1318
|
+
.filter((c) => c.hasContent())
|
|
1319
|
+
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
|
|
1296
1320
|
if (compositors.length === 0 || !this.device || !this.context) return;
|
|
1297
1321
|
const canvasView = this.getSurfaceTexture()?.createView();
|
|
1298
1322
|
if (!canvasView) return;
|
|
@@ -200,7 +200,7 @@ export class MaterialHotReloader {
|
|
|
200
200
|
this.pipelineCache.invalidate(material.pipelineKey);
|
|
201
201
|
}
|
|
202
202
|
} catch (e) {
|
|
203
|
-
log.warn("
|
|
203
|
+
log.warn("hot-reloader", `Failed to reload shader: ${path} ${e}`);
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
|
|
@@ -214,7 +214,7 @@ export class MaterialHotReloader {
|
|
|
214
214
|
onReload(result.meshes[0]);
|
|
215
215
|
}
|
|
216
216
|
} catch (e) {
|
|
217
|
-
log.warn("
|
|
217
|
+
log.warn("hot-reloader", `Failed to reload mesh: ${path} ${e}`);
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
|
|
@@ -243,7 +243,7 @@ export class MaterialHotReloader {
|
|
|
243
243
|
);
|
|
244
244
|
watched.onReload(gpuTexture);
|
|
245
245
|
} catch (e) {
|
|
246
|
-
log.warn("
|
|
246
|
+
log.warn("hot-reloader", `Failed to reload texture: ${path} ${e}`);
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
|
|
@@ -28,6 +28,7 @@ import type {
|
|
|
28
28
|
ResizeHook,
|
|
29
29
|
} from "../module/renderer-module";
|
|
30
30
|
import type { RenderSurface } from "../platform/render-surface";
|
|
31
|
+
import { getNativeHost } from "../platform/runtime";
|
|
31
32
|
import { createLogger } from "../util/logger";
|
|
32
33
|
import type { CameraState } from "./camera";
|
|
33
34
|
import type { FrameGraph, SlotRegistry } from "./frame-graph";
|
|
@@ -101,7 +102,11 @@ export class RendererModuleHost {
|
|
|
101
102
|
private renderPassHooks: OwnedRenderPassHook[] = [];
|
|
102
103
|
|
|
103
104
|
private cameraController: CameraControllerLike | null = null;
|
|
105
|
+
/** Name of the module that installed the current camera controller (for unload cleanup). */
|
|
106
|
+
private cameraControllerOwner: string | null = null;
|
|
104
107
|
private viewportCameraProvider: ((viewportIdx: number, dt: number, elapsedTime: number) => CameraViewportInfo | null) | null = null;
|
|
108
|
+
/** Name of the module that installed the current viewport camera provider (for unload cleanup). */
|
|
109
|
+
private viewportCameraProviderOwner: string | null = null;
|
|
105
110
|
private _devtools: ModuleDevToolsAPI | null = null;
|
|
106
111
|
|
|
107
112
|
constructor(canvas: RenderSurface, callbacks: RendererModuleHostCallbacks) {
|
|
@@ -328,7 +333,7 @@ export class RendererModuleHost {
|
|
|
328
333
|
try {
|
|
329
334
|
active.disposeFns[i]();
|
|
330
335
|
} catch (err) {
|
|
331
|
-
log.error("
|
|
336
|
+
log.error("renderer-module-host", `Dispose error in plugin "${name}": ${err}`);
|
|
332
337
|
}
|
|
333
338
|
}
|
|
334
339
|
// Remove this plugin's hooks.
|
|
@@ -338,11 +343,17 @@ export class RendererModuleHost {
|
|
|
338
343
|
this.frameHooks.afterFrame = this.frameHooks.afterFrame.filter((h) => h.owner !== name);
|
|
339
344
|
this.resizeHooks = this.resizeHooks.filter((h) => h.owner !== name);
|
|
340
345
|
this.renderPassHooks = this.renderPassHooks.filter((h) => h.owner !== name);
|
|
341
|
-
// If this plugin owned the camera controller
|
|
342
|
-
//
|
|
343
|
-
//
|
|
344
|
-
|
|
345
|
-
|
|
346
|
+
// If this plugin owned the camera controller / viewport camera provider,
|
|
347
|
+
// clear it so a disposed object isn't invoked on the next frame. (If
|
|
348
|
+
// another plugin overwrote the slot later, its ownership is preserved.)
|
|
349
|
+
if (this.cameraControllerOwner === name) {
|
|
350
|
+
this.cameraController = null;
|
|
351
|
+
this.cameraControllerOwner = null;
|
|
352
|
+
}
|
|
353
|
+
if (this.viewportCameraProviderOwner === name) {
|
|
354
|
+
this.viewportCameraProvider = null;
|
|
355
|
+
this.viewportCameraProviderOwner = null;
|
|
356
|
+
}
|
|
346
357
|
this.active.delete(name);
|
|
347
358
|
this.plugins.delete(name);
|
|
348
359
|
this.pending.delete(name);
|
|
@@ -356,6 +367,9 @@ export class RendererModuleHost {
|
|
|
356
367
|
names.forEach((name) => { this.unloadModule(name);; });
|
|
357
368
|
this.inputBus.destroy();
|
|
358
369
|
this.cameraController = null;
|
|
370
|
+
this.cameraControllerOwner = null;
|
|
371
|
+
this.viewportCameraProvider = null;
|
|
372
|
+
this.viewportCameraProviderOwner = null;
|
|
359
373
|
}
|
|
360
374
|
|
|
361
375
|
// ── Getters ──
|
|
@@ -419,7 +433,7 @@ export class RendererModuleHost {
|
|
|
419
433
|
try {
|
|
420
434
|
hooks[i].fn(dt, elapsedTime);
|
|
421
435
|
} catch (err) {
|
|
422
|
-
log.error("
|
|
436
|
+
log.error("renderer-module-host", `Frame hook error (${phase}) in "${hooks[i].owner}": ${err}`);
|
|
423
437
|
}
|
|
424
438
|
}
|
|
425
439
|
}
|
|
@@ -429,7 +443,7 @@ export class RendererModuleHost {
|
|
|
429
443
|
try {
|
|
430
444
|
this.resizeHooks[i].fn(cssWidth, cssHeight, dpr);
|
|
431
445
|
} catch (err) {
|
|
432
|
-
log.error("
|
|
446
|
+
log.error("renderer-module-host", `Resize hook error in "${this.resizeHooks[i].owner}": ${err}`);
|
|
433
447
|
}
|
|
434
448
|
}
|
|
435
449
|
this.cameraController?.setAspect(
|
|
@@ -447,7 +461,7 @@ export class RendererModuleHost {
|
|
|
447
461
|
try {
|
|
448
462
|
this.renderPassHooks[i].fn(passEncoder, camera, viewportIdx);
|
|
449
463
|
} catch (err) {
|
|
450
|
-
log.error("
|
|
464
|
+
log.error("renderer-module-host", `Render-pass hook error in "${this.renderPassHooks[i].owner}": ${err}`);
|
|
451
465
|
}
|
|
452
466
|
}
|
|
453
467
|
}
|
|
@@ -462,7 +476,7 @@ export class RendererModuleHost {
|
|
|
462
476
|
try {
|
|
463
477
|
return this.cameraController.getCameraState(viewportIdx);
|
|
464
478
|
} catch (err) {
|
|
465
|
-
log.error("
|
|
479
|
+
log.error("renderer-module-host", `Camera controller error: ${err}`);
|
|
466
480
|
return null;
|
|
467
481
|
}
|
|
468
482
|
}
|
|
@@ -478,7 +492,7 @@ export class RendererModuleHost {
|
|
|
478
492
|
try {
|
|
479
493
|
return this.viewportCameraProvider(viewportIdx, dt, elapsedTime);
|
|
480
494
|
} catch (err) {
|
|
481
|
-
log.error("
|
|
495
|
+
log.error("renderer-module-host", `Viewport camera provider error: ${err}`);
|
|
482
496
|
return null;
|
|
483
497
|
}
|
|
484
498
|
}
|
|
@@ -538,6 +552,7 @@ export class RendererModuleHost {
|
|
|
538
552
|
// ── Per-plugin context facade ──
|
|
539
553
|
|
|
540
554
|
private makeContext(name: string, active: ActiveRendererModule): RendererModuleContext {
|
|
555
|
+
const devtoolsApi = () => this._devtools ?? NoopRendererDevToolsAPI;
|
|
541
556
|
return {
|
|
542
557
|
name,
|
|
543
558
|
|
|
@@ -554,6 +569,8 @@ export class RendererModuleHost {
|
|
|
554
569
|
registerUiCompositor: this.callbacks.registerUiCompositor
|
|
555
570
|
? (c) => this.callbacks.registerUiCompositor!(c)
|
|
556
571
|
: undefined,
|
|
572
|
+
// The mailbox lives on the native host — null on browser/standalone.
|
|
573
|
+
getGpuPassMailbox: () => getNativeHost()?.passMailbox ?? null,
|
|
557
574
|
|
|
558
575
|
onFrame: (phase, fn) => {
|
|
559
576
|
const entry: OwnedFrameHook = { owner: name, fn };
|
|
@@ -587,11 +604,13 @@ export class RendererModuleHost {
|
|
|
587
604
|
// Only one active controller at a time. Last writer wins; a plugin
|
|
588
605
|
// should null this in its dispose fn if it wants to release the slot.
|
|
589
606
|
this.cameraController = controller;
|
|
607
|
+
this.cameraControllerOwner = controller ? name : null;
|
|
590
608
|
},
|
|
591
609
|
getCameraController: () => this.cameraController,
|
|
592
610
|
|
|
593
611
|
setViewportCameraProvider: (provider) => {
|
|
594
612
|
this.viewportCameraProvider = provider;
|
|
613
|
+
this.viewportCameraProviderOwner = provider ? name : null;
|
|
595
614
|
},
|
|
596
615
|
|
|
597
616
|
setViewportCount: (count) => this.callbacks.setViewportCount(count),
|
|
@@ -600,7 +619,8 @@ export class RendererModuleHost {
|
|
|
600
619
|
setRenderTargetProvider: (provider) => this.callbacks.setRenderTargetProvider(provider),
|
|
601
620
|
setRAFSource: (src, cancel) => this.callbacks.setRAFSource(src, cancel),
|
|
602
621
|
|
|
603
|
-
|
|
622
|
+
// Lazy — the DevTools API may be injected after register() runs.
|
|
623
|
+
get devtools() { return devtoolsApi(); },
|
|
604
624
|
|
|
605
625
|
provide: <T>(token: ResourceToken<T>, value: T) => this.provideResource(name, token, value, active),
|
|
606
626
|
inject: <T>(token: ResourceToken<T>): T => this.injectResource(token),
|
|
@@ -76,17 +76,17 @@ function processCompilationInfo(
|
|
|
76
76
|
const fullMsg = `[${label}] ${msg.message}${location}`;
|
|
77
77
|
|
|
78
78
|
if (msg.type === "error") {
|
|
79
|
-
log.fatal("
|
|
79
|
+
log.fatal("shader", fullMsg);
|
|
80
80
|
errors.push(fullMsg);
|
|
81
81
|
} else if (msg.type === "warning") {
|
|
82
|
-
log.warn("
|
|
82
|
+
log.warn("shader", fullMsg);
|
|
83
83
|
} else {
|
|
84
|
-
log.debug("
|
|
84
|
+
log.debug("shader", fullMsg);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
if (suppressedCount > 0 && suppressedCount % SUPPRESS_THRESHOLD === 0) {
|
|
89
|
-
log.warn("
|
|
89
|
+
log.warn("shader", `[${label}] ${suppressedCount} duplicate shader messages suppressed`);
|
|
90
90
|
}
|
|
91
91
|
})
|
|
92
92
|
.catch(() => {
|
|
@@ -145,12 +145,12 @@ export async function createValidatedShaderModuleAsync(
|
|
|
145
145
|
const fullMsg = `[${label}] ${msg.message}${location}`;
|
|
146
146
|
|
|
147
147
|
if (msg.type === "error") {
|
|
148
|
-
log.fatal("
|
|
148
|
+
log.fatal("shader", fullMsg);
|
|
149
149
|
errors.push(fullMsg);
|
|
150
150
|
} else if (msg.type === "warning") {
|
|
151
|
-
log.warn("
|
|
151
|
+
log.warn("shader", fullMsg);
|
|
152
152
|
} else {
|
|
153
|
-
log.debug("
|
|
153
|
+
log.debug("shader", fullMsg);
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
|
|
@@ -25,7 +25,7 @@ export class SurfaceManager {
|
|
|
25
25
|
this.canvas = canvas;
|
|
26
26
|
this.context = canvas.getContext("webgpu") as GPUCanvasContext;
|
|
27
27
|
if (!this.context) {
|
|
28
|
-
log.error("
|
|
28
|
+
log.error("gpu", "Failed to get WebGPU context from canvas");
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
31
|
|
package/core/src/sab/errors.ts
CHANGED
|
@@ -48,7 +48,7 @@ if (!usingRealSAB) {
|
|
|
48
48
|
// Debug identifier — detectable from console/devtools.
|
|
49
49
|
(globalThis as any).__DOWNDRAFT_SAB_POLYFILL = true;
|
|
50
50
|
log.warn(
|
|
51
|
-
"
|
|
51
|
+
"sab-polyfill",
|
|
52
52
|
"SharedArrayBuffer is not available — using copy-based buffer sync protocol.\n" +
|
|
53
53
|
"If you see this on a runtime that should have real SABs, COOP/COEP\n" +
|
|
54
54
|
"headers may be missing.",
|