@forgeax/engine-runtime 0.1.4 → 0.1.7
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/README.md +65 -83
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-serialize.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-serialize.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts +2 -0
- package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts.map +1 -0
- package/dist/__tests__/asset-error-exhaustive.test-d.d.ts +11 -0
- package/dist/__tests__/asset-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-guid-reverse.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-guid-reverse.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry-mounts.test.d.ts +2 -0
- package/dist/__tests__/asset-registry-mounts.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.browser.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.browser.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.dawn.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.listCatalog.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.listCatalog.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.mesh-bin.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.mesh-bin.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.recursive.spec.d.ts +2 -0
- package/dist/__tests__/asset-registry.recursive.spec.d.ts.map +1 -0
- package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
- package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asset.unit.test.d.ts +2 -0
- package/dist/__tests__/asset.unit.test.d.ts.map +1 -0
- package/dist/__tests__/audio-load-by-guid.unit.test.d.ts +2 -0
- package/dist/__tests__/audio-load-by-guid.unit.test.d.ts.map +1 -0
- package/dist/__tests__/backend-selection.integration.test.d.ts +2 -0
- package/dist/__tests__/backend-selection.integration.test.d.ts.map +1 -0
- package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts +2 -0
- package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts.map +1 -0
- package/dist/__tests__/builtin-asset-registry.unit.test.d.ts +2 -0
- package/dist/__tests__/builtin-asset-registry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/collect-scene-asset.test.d.ts +1 -2
- package/dist/__tests__/collect-scene-asset.test.d.ts.map +1 -1
- package/dist/__tests__/collect-scene-mount-collapse.test.d.ts +2 -0
- package/dist/__tests__/collect-scene-mount-collapse.test.d.ts.map +1 -0
- package/dist/__tests__/collect-transient-roundtrip.test.d.ts +1 -1
- package/dist/__tests__/collect-transient-roundtrip.test.d.ts.map +1 -1
- package/dist/__tests__/collect-transient-skip.test.d.ts +1 -2
- package/dist/__tests__/collect-transient-skip.test.d.ts.map +1 -1
- package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts +2 -0
- package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/draw-published.d.ts +2 -2
- package/dist/__tests__/draw-published.d.ts.map +1 -1
- package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
- package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/errors.unit.test.d.ts +2 -0
- package/dist/__tests__/errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts +2 -0
- package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fetch-binary-decompress.test.d.ts +2 -0
- package/dist/__tests__/fetch-binary-decompress.test.d.ts.map +1 -0
- package/dist/__tests__/four-path-compression.integration.test.d.ts +2 -0
- package/dist/__tests__/four-path-compression.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/guid-for-asset.unit.test.d.ts +2 -0
- package/dist/__tests__/guid-for-asset.unit.test.d.ts.map +1 -0
- package/dist/__tests__/handle-migration.test.d.ts +2 -0
- package/dist/__tests__/handle-migration.test.d.ts.map +1 -0
- package/dist/__tests__/helpers/register-runtime-components.d.ts.map +1 -1
- package/dist/__tests__/host-custom-kind-contract.test-d.d.ts +2 -0
- package/dist/__tests__/host-custom-kind-contract.test-d.d.ts.map +1 -0
- package/dist/__tests__/host-custom-kind-contract.test.d.ts +2 -0
- package/dist/__tests__/host-custom-kind-contract.test.d.ts.map +1 -0
- package/dist/__tests__/inspect-name.test.d.ts +2 -0
- package/dist/__tests__/inspect-name.test.d.ts.map +1 -0
- package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts +2 -0
- package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts.map +1 -0
- package/dist/__tests__/loadbyguid-payload.unit.test.d.ts +2 -0
- package/dist/__tests__/loadbyguid-payload.unit.test.d.ts.map +1 -0
- package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts +2 -0
- package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts.map +1 -0
- package/dist/__tests__/loader-extract-graceful.test.d.ts +2 -0
- package/dist/__tests__/loader-extract-graceful.test.d.ts.map +1 -0
- package/dist/__tests__/loader-name-survival.test.d.ts +2 -0
- package/dist/__tests__/loader-name-survival.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-bin-contract.test.d.ts +2 -0
- package/dist/__tests__/mesh-bin-contract.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-bin.test.d.ts +2 -0
- package/dist/__tests__/mesh-bin.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/new-kind-refs-contract.test.d.ts +2 -0
- package/dist/__tests__/new-kind-refs-contract.test.d.ts.map +1 -0
- package/dist/__tests__/package-promotion.test.d.ts +2 -0
- package/dist/__tests__/package-promotion.test.d.ts.map +1 -0
- package/dist/__tests__/package-rename.test.d.ts +2 -0
- package/dist/__tests__/package-rename.test.d.ts.map +1 -0
- package/dist/__tests__/recover-error-exhaustive.test-d.d.ts +1 -1
- package/dist/__tests__/recover-error-exhaustive.test-d.d.ts.map +1 -1
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +1 -1
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -1
- package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts +10 -0
- package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts.map +1 -0
- package/dist/__tests__/render-system-extract.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-extract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-test-utils.d.ts +10 -0
- package/dist/__tests__/renderer-test-utils.d.ts.map +1 -0
- package/dist/__tests__/renderer.test-d.d.ts +2 -0
- package/dist/__tests__/renderer.test-d.d.ts.map +1 -0
- package/dist/__tests__/resolve-asset-handle-err.test.d.ts +2 -0
- package/dist/__tests__/resolve-asset-handle-err.test.d.ts.map +1 -0
- package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
- package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/resolveName-fallback.test.d.ts +2 -0
- package/dist/__tests__/resolveName-fallback.test.d.ts.map +1 -0
- package/dist/__tests__/resolveName-null-package.test.d.ts +2 -0
- package/dist/__tests__/resolveName-null-package.test.d.ts.map +1 -0
- package/dist/__tests__/resolveName-unified-entry.test.d.ts +2 -0
- package/dist/__tests__/resolveName-unified-entry.test.d.ts.map +1 -0
- package/dist/__tests__/resolveName.test.d.ts +2 -0
- package/dist/__tests__/resolveName.test.d.ts.map +1 -0
- package/dist/__tests__/roots-to-scene-asset.test.d.ts +1 -1
- package/dist/__tests__/roots-to-scene-asset.test.d.ts.map +1 -1
- package/dist/__tests__/roundtrip-primitive.test.d.ts +2 -0
- package/dist/__tests__/roundtrip-primitive.test.d.ts.map +1 -0
- package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts +2 -0
- package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts.map +1 -0
- package/dist/__tests__/scene-instance-authoring.integration.test.d.ts +2 -0
- package/dist/__tests__/scene-instance-authoring.integration.test.d.ts.map +1 -0
- package/dist/__tests__/scene-mount-fixed-point.test.d.ts +2 -0
- package/dist/__tests__/scene-mount-fixed-point.test.d.ts.map +1 -0
- package/dist/__tests__/scene-mount-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/scene-mount-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/scene-sugar-instantiate.test.d.ts +2 -0
- package/dist/__tests__/scene-sugar-instantiate.test.d.ts.map +1 -0
- package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/serialize-scene-asset.test.d.ts +1 -1
- package/dist/__tests__/serialize-scene-asset.test.d.ts.map +1 -1
- package/dist/__tests__/template-game-default-api-contract.test.d.ts +2 -0
- package/dist/__tests__/template-game-default-api-contract.test.d.ts.map +1 -0
- package/dist/__tests__/tileset-asset-validate.test.d.ts +2 -0
- package/dist/__tests__/tileset-asset-validate.test.d.ts.map +1 -0
- package/dist/__tests__/transcode-fallback.unit.test.d.ts +2 -0
- package/dist/__tests__/transcode-fallback.unit.test.d.ts.map +1 -0
- package/dist/__tests__/transient-runtime-behavior.test.d.ts +2 -0
- package/dist/__tests__/transient-runtime-behavior.test.d.ts.map +1 -0
- package/dist/__tests__/video-loader-consumption.test.d.ts +2 -0
- package/dist/__tests__/video-loader-consumption.test.d.ts.map +1 -0
- package/dist/__tests__/video-loader-smoke.dawn.test.d.ts +2 -0
- package/dist/__tests__/video-loader-smoke.dawn.test.d.ts.map +1 -0
- package/dist/backend-selection.d.ts +13 -0
- package/dist/backend-selection.d.ts.map +1 -0
- package/dist/collect-scene-asset.d.ts +7 -4
- package/dist/collect-scene-asset.d.ts.map +1 -1
- package/dist/createRenderer.d.ts +14 -2
- package/dist/createRenderer.d.ts.map +1 -1
- package/dist/errors/environment.d.ts +1 -1
- package/dist/errors/environment.d.ts.map +1 -1
- package/dist/index.d.ts +20 -82
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +107 -108
- package/dist/index.mjs.map +1 -1
- package/dist/renderer-host.d.ts +9 -0
- package/dist/renderer-host.d.ts.map +1 -0
- package/dist/renderer-host.mjs +62 -0
- package/dist/renderer-host.mjs.map +1 -0
- package/dist/scene-instances/index.d.ts +2 -0
- package/dist/scene-instances/index.d.ts.map +1 -0
- package/dist/scene-utils/mount-override-fold.d.ts +1 -2
- package/dist/scene-utils/mount-override-fold.d.ts.map +1 -1
- package/dist/systems/sprite-animation-tick.d.ts +1 -1
- package/dist/systems/sprite-animation-tick.d.ts.map +1 -1
- package/dist/systems/transparent-sort.d.ts +1 -2
- package/dist/systems/transparent-sort.d.ts.map +1 -1
- package/dist/tilemap-register-validate.d.ts.map +1 -1
- package/package.json +34 -33
- package/src/__tests__/active-camera.unit.test.ts +19 -9
- package/src/__tests__/animation-graph-collect-roundtrip.test.ts +213 -0
- package/src/__tests__/animation-graph-serialize.unit.test.ts +171 -0
- package/src/__tests__/append-injection.test.ts +1 -1
- package/src/__tests__/asset-brand-and-name-retirement.test.ts +102 -0
- package/src/__tests__/asset-error-exhaustive.test-d.ts +62 -0
- package/src/__tests__/asset-registry-guid-reverse.test.ts +608 -0
- package/src/__tests__/asset-registry-hdr-equirect.test.ts +78 -0
- package/src/__tests__/asset-registry-mesh-pack-payload.dawn.test.ts +232 -0
- package/src/__tests__/asset-registry-mounts.test.ts +806 -0
- package/src/__tests__/asset-registry.browser.test.ts +81 -0
- package/src/__tests__/asset-registry.dawn.test.ts +94 -0
- package/src/__tests__/asset-registry.listCatalog.test.ts +170 -0
- package/src/__tests__/asset-registry.mesh-bin.test.ts +316 -0
- package/src/__tests__/asset-registry.pack-cache.test.ts +969 -0
- package/src/__tests__/asset-registry.raw-container-failfast.test.ts +225 -0
- package/src/__tests__/asset-registry.recursive.spec.ts +1397 -0
- package/src/__tests__/asset-registry.unit.test.ts +1030 -0
- package/src/__tests__/asset.unit.test.ts +7107 -0
- package/src/__tests__/audio-load-by-guid.unit.test.ts +126 -0
- package/src/__tests__/backend-selection.integration.test.ts +11 -0
- package/src/__tests__/basis-catalog-dispatch.integration.test.ts +320 -0
- package/src/__tests__/bind-group-cache-keying.test.ts +4 -4
- package/src/__tests__/block-upload-math.unit.test.ts +2 -2
- package/src/__tests__/builtin-asset-registry.unit.test.ts +112 -0
- package/src/__tests__/builtin-shader-register-e2e.test.ts +1 -1
- package/src/__tests__/cache-false-eviction.test.ts +2 -1
- package/src/__tests__/cache-isolation-matrix.test.ts +2 -1
- package/src/__tests__/camera-clear-snapshot-equivalence.unit.test.ts +5 -6
- package/src/__tests__/clamp-to-last.e2e.browser.test.ts +29 -19
- package/src/__tests__/collect-scene-asset.test.ts +49 -52
- package/src/__tests__/collect-scene-mount-collapse.test.ts +391 -0
- package/src/__tests__/collect-subtree.unit.test.ts +1 -2
- package/src/__tests__/collect-transient-children-absent.test.ts +24 -10
- package/src/__tests__/collect-transient-roundtrip.test.ts +44 -20
- package/src/__tests__/collect-transient-skip.test.ts +24 -13
- package/src/__tests__/components.test-d.ts +1 -6
- package/src/__tests__/components.unit.test.ts +20 -19
- package/src/__tests__/composite-skybox-cross-world.browser.test.ts +59 -27
- package/src/__tests__/compressed-texture-physical-extent.integration.test.ts +139 -0
- package/src/__tests__/create-renderer-assembly.integration.test.ts +42 -29
- package/src/__tests__/createRenderer-dispose.test.ts +35 -402
- package/src/__tests__/createRenderer.browser-no-webgpu.test.ts +25 -30
- package/src/__tests__/createRenderer.unit.test.ts +1 -1
- package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +27 -63
- package/src/__tests__/dawn/ibl-precompute-readback.dawn.test.ts +56 -47
- package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +49 -29
- package/src/__tests__/dawn/instances-shadow.dawn.test.ts +26 -15
- package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +13 -14
- package/src/__tests__/dawn/material-alpha.dawn.test.ts +23 -31
- package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +24 -9
- package/src/__tests__/dawn/{mesh-update.dawn.test.ts → mesh-update-dawn.test.ts} +42 -134
- package/src/__tests__/dawn/mipmap-srgb-linear.dawn.test.ts +14 -7
- package/src/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.ts +16 -28
- package/src/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.ts +23 -39
- package/src/__tests__/dawn/upload-texture.dawn.test.ts +198 -0
- package/src/__tests__/dawn/user-handle-mesh-render.dawn.test.ts +12 -14
- package/src/__tests__/dawn/user-mesh-upload.dawn.test.ts +27 -22
- package/src/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.ts +25 -28
- package/src/__tests__/dawn/zero-manifest-ready.dawn.test.ts +10 -11
- package/src/__tests__/demo-sortscope-migration.unit.test.ts +5 -5
- package/src/__tests__/derive-bgl-integration.test.ts +34 -44
- package/src/__tests__/derive-render-data-skin.unit.test.ts +1 -1
- package/src/__tests__/draw-published.ts +11 -4
- package/src/__tests__/dynamic-texture-store.unit.test.ts +190 -0
- package/src/__tests__/equirect-bc6h.integration.test.ts +144 -21
- package/src/__tests__/errors.unit.test.ts +1227 -0
- package/src/__tests__/extract-frames-graceful-degradation.test.ts +3 -7
- package/src/__tests__/extract-frames-merge.test.ts +35 -22
- package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +5 -16
- package/src/__tests__/extract-skin-mismatch.unit.test.ts +322 -0
- package/src/__tests__/fetch-binary-decompress.test.ts +356 -0
- package/src/__tests__/four-path-compression.integration.test.ts +395 -0
- package/src/__tests__/frame-targets-shadow-regression.unit.test.ts +1 -1
- package/src/__tests__/fullscreen-feature-host.dawn.test.ts +80 -0
- package/src/__tests__/fullscreen-post-bgl-depth.test.ts +4 -2
- package/src/__tests__/fullscreen-post-depth-params-arity.test.ts +3 -3
- package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +39 -23
- package/src/__tests__/fullscreen-post-process-pass.unit.test.ts +4 -2
- package/src/__tests__/fxaa-pixel-diff.dawn.test.ts +28 -17
- package/src/__tests__/fxaa-validation-and-resize.dawn.test.ts +29 -18
- package/src/__tests__/fxaa-zero-overhead.dawn.test.ts +16 -12
- package/src/__tests__/geometry.unit.test.ts +525 -159
- package/src/__tests__/glyph-tilemap-worldid.test.ts +1 -1
- package/src/__tests__/gpu-resource-cow-survivor.test.ts +6 -4
- package/src/__tests__/guid-for-asset.unit.test.ts +102 -0
- package/src/__tests__/handle-migration.test.ts +136 -0
- package/src/__tests__/helpers/register-runtime-components.ts +4 -2
- package/src/__tests__/helpers/register-scene-components.ts +1 -1
- package/src/__tests__/host-custom-kind-contract.test-d.ts +47 -0
- package/src/__tests__/host-custom-kind-contract.test.ts +578 -0
- package/src/__tests__/inspect-name.test.ts +139 -0
- package/src/__tests__/instances.test-d.ts +1 -1
- package/src/__tests__/instantiate-mount-deferred-wiring.test.ts +112 -0
- package/src/__tests__/light-casters-9-light.browser.test.ts +73 -76
- package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +7 -10
- package/src/__tests__/light-snapshot.test-d.ts +2 -2
- package/src/__tests__/lights-vec-negative.unit.test.ts +1 -1
- package/src/__tests__/lights.unit.test.ts +31 -511
- package/src/__tests__/loadbyguid-payload.unit.test.ts +117 -0
- package/src/__tests__/loadbyguid-texture-intern.unit.test.ts +213 -0
- package/src/__tests__/loader-extract-graceful.test.ts +146 -0
- package/src/__tests__/loader-name-survival.test.ts +213 -0
- package/src/__tests__/m3-vec-negative.unit.test.ts +3 -2
- package/src/__tests__/material-texture-uv-scale.unit.test.ts +101 -31
- package/src/__tests__/materials.unit.test.ts +10 -27
- package/src/__tests__/mesh-bin-contract.test.ts +28 -0
- package/src/__tests__/mesh-bin-skin-roundtrip.unit.test.ts +149 -0
- package/src/__tests__/mesh-bin.test.ts +38 -0
- package/src/__tests__/mesh-loader-skin-contract.unit.test.ts +120 -0
- package/src/__tests__/mesh-ssbo-grow.unit.test.ts +3 -3
- package/src/__tests__/mip-gate.unit.test.ts +1 -1
- package/src/__tests__/msaa-sprite-pixel-diff.dawn.test.ts +29 -68
- package/src/__tests__/new-kind-refs-contract.test.ts +132 -0
- package/src/__tests__/node-shims.d.ts +4 -6
- package/src/__tests__/package-promotion.test.ts +88 -0
- package/src/__tests__/package-rename.test.ts +103 -0
- package/src/__tests__/pass-selector.unit.test.ts +2 -2
- package/src/__tests__/pbr-pipeline.unit.test.ts +21 -25
- package/src/__tests__/pipeline-builder-msaa.unit.test.ts +6 -9
- package/src/__tests__/pipeline-cache-keying.unit.test.ts +6 -9
- package/src/__tests__/pipeline-spec.test.ts +16 -177
- package/src/__tests__/pipeline.unit.test.ts +154 -1693
- package/src/__tests__/point-light-shadow.dawn.test.ts +33 -42
- package/src/__tests__/point-light-shadow.unit.test.ts +19 -60
- package/src/__tests__/post-process-error-codes.unit.test.ts +4 -1
- package/src/__tests__/post-process-params-component.unit.test.ts +1 -1
- package/src/__tests__/post-process-params-extract.unit.test.ts +2 -5
- package/src/__tests__/postprocess-camera-consistency.test.ts +4 -7
- package/src/__tests__/profiler-assembly.integration.test.ts +1 -1
- package/src/__tests__/propagate-transforms.dawn.test.ts +12 -11
- package/src/__tests__/record-worldid-isolation.test.ts +7 -29
- package/src/__tests__/recover-error-exhaustive.test-d.ts +1 -1
- package/src/__tests__/render-error-exhaustive.test-d.ts +117 -71
- package/src/__tests__/render-feature-assembly.test-d.ts +20 -9
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +8 -6
- package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +65 -559
- package/src/__tests__/render-feature-prepared-graphics.dawn.test.ts +57 -544
- package/src/__tests__/render-feature-prepared-graphics.fixture.ts +104 -0
- package/src/__tests__/render-feature-prepared-graphics.integration.test.ts +40 -248
- package/src/__tests__/render-feature-prepared-graphics.regression.integration.test.ts +83 -340
- package/src/__tests__/render-feature-recover.integration.test.ts +9 -49
- package/src/__tests__/render-feature-runtime-surface.test-d.ts +17 -20
- package/src/__tests__/render-schema-consumer.integration.test.ts +20 -13
- package/src/__tests__/render-schema-owner-boundary.unit.test.ts +2 -6
- package/src/__tests__/render-system-cross-world-overlay-queue.test.ts +5 -5
- package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +16 -31
- package/src/__tests__/render-system-extract.test.ts +36 -51
- package/src/__tests__/render-system-extract.unit.test.ts +360 -0
- package/src/__tests__/render-system-fold-bucket.unit.test.ts +3 -5
- package/src/__tests__/render-system-fold-fallback.unit.test.ts +6 -3
- package/src/__tests__/render-system-fold-material.unit.test.ts +3 -5
- package/src/__tests__/render-system-fold-metrics.unit.test.ts +5 -5
- package/src/__tests__/render-system-fold-modegate.unit.test.ts +6 -6
- package/src/__tests__/render-system-fold.dawn.test.ts +7 -5
- package/src/__tests__/render-system-mega.test.ts +292 -190
- package/src/__tests__/render-system-owner-split-contract.test.ts +10 -32
- package/src/__tests__/render-system-record-multi-material-textureview.test.ts +59 -45
- package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +23 -29
- package/src/__tests__/render-system-record.test.ts +398 -235
- package/src/__tests__/render-system-record.unit.test.ts +25 -26
- package/src/__tests__/render-system-skin-bg.unit.test.ts +8 -12
- package/src/__tests__/renderer-consumer.test-d.ts +16 -3
- package/src/__tests__/renderer-health.unit.test.ts +26 -916
- package/src/__tests__/renderer-lifecycle.integration.test.ts +19 -6
- package/src/__tests__/renderer-recover.unit.test.ts +49 -1069
- package/src/__tests__/renderer-result.test-d.ts +19 -9
- package/src/__tests__/renderer-surface.unit.test.ts +3 -5
- package/src/__tests__/renderer-test-utils.ts +56 -0
- package/src/__tests__/renderer.test-d.ts +61 -0
- package/src/__tests__/resolve-asset-handle-err.test.ts +111 -0
- package/src/__tests__/resolve-asset-handle.unit.test.ts +64 -0
- package/src/__tests__/resolve-depth-only-view.test.ts +1 -1
- package/src/__tests__/resolveName-fallback.test.ts +64 -0
- package/src/__tests__/resolveName-null-package.test.ts +38 -0
- package/src/__tests__/resolveName-unified-entry.test.ts +65 -0
- package/src/__tests__/resolveName.test.ts +64 -0
- package/src/__tests__/rhi-null-command-flow.unit.test.ts +56 -260
- package/src/__tests__/rhi-null-renderer-lifecycle.unit.test.ts +41 -169
- package/src/__tests__/roots-to-scene-asset.test.ts +199 -93
- package/src/__tests__/roundtrip-primitive.test.ts +351 -0
- package/src/__tests__/scene-bare-guid-refs-instantiate.test.ts +123 -0
- package/src/__tests__/scene-equirect-roundtrip.test.ts +103 -16
- package/src/__tests__/scene-instance-authoring.integration.test.ts +8 -0
- package/src/__tests__/scene-instance-bridge.integration.test.ts +1 -1
- package/src/__tests__/scene-instance-component.test.ts +1 -1
- package/src/__tests__/scene-mount-fixed-point.test.ts +257 -0
- package/src/__tests__/scene-mount-roundtrip.test.ts +987 -0
- package/src/__tests__/scene-mount-wrapper-roundtrip.test.ts +202 -0
- package/src/__tests__/scene-sugar-instantiate.test.ts +324 -0
- package/src/__tests__/serialize-mounts-roundtrip.test.ts +533 -0
- package/src/__tests__/serialize-scene-asset.test.ts +219 -22
- package/src/__tests__/shadow-caster-empty-schema.test.ts +3 -3
- package/src/__tests__/shadow-csm-cascade-loadop.test.ts +37 -17
- package/src/__tests__/shadow-csm-component.test.ts +3 -5
- package/src/__tests__/shadow-csm-extract.test.ts +2 -100
- package/src/__tests__/shadow-csm-orthoz.test.ts +2 -16
- package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +19 -14
- package/src/__tests__/shadow-csm-tile-consistency.test.ts +32 -26
- package/src/__tests__/shadow-csm-ubo.dawn.test.ts +8 -49
- package/src/__tests__/shadow-csm-ubo.test.ts +3 -25
- package/src/__tests__/shadow-csm-viewport.browser.test.ts +1 -1
- package/src/__tests__/shadow-fields-observable.dawn.test.ts +67 -56
- package/src/__tests__/shadow-m1.dawn.test.ts +8 -9
- package/src/__tests__/shadow-mesh-ssbo-order.test.ts +11 -27
- package/src/__tests__/skin-errors.unit.test.ts +1 -1
- package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +7 -5
- package/src/__tests__/skylight-lazy-projection.test.ts +36 -15
- package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +5 -5
- package/src/__tests__/sprite-cullmode-flip.dawn.test.ts +47 -64
- package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +15 -14
- package/src/__tests__/sprite-lit-extract-branch.test.ts +1 -1
- package/src/__tests__/sprite-lit-pipeline-cache-key.test.ts +1 -1
- package/src/__tests__/ssao-bgl.test.ts +16 -9
- package/src/__tests__/ssao-buffers.test.ts +2 -2
- package/src/__tests__/ssao-data.test.ts +2 -2
- package/src/__tests__/ssao-errors.test.ts +1 -1
- package/src/__tests__/ssao-passes.test.ts +68 -392
- package/src/__tests__/ssao-pipelines.test.ts +1 -1
- package/src/__tests__/ssao-uniform-layout.test.ts +8 -6
- package/src/__tests__/stencil-outline-pixel.dawn.test.ts +25 -17
- package/src/__tests__/swap-chain-format.unit.test.ts +5 -7
- package/src/__tests__/systems.unit.test.ts +536 -1326
- package/src/__tests__/template-game-default-api-contract.test.ts +362 -0
- package/src/__tests__/text.unit.test.ts +56 -33
- package/src/__tests__/tilemap-childed-despawn.test.ts +8 -14
- package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +8 -12
- package/src/__tests__/tilemap-chunk-extract.propagate-order.test.ts +2 -1
- package/src/__tests__/tilemap-chunk-extract.test.ts +13 -17
- package/src/__tests__/tilemap-dirty-rebuild.test.ts +7 -11
- package/src/__tests__/tilemap-material-cache.test.ts +8 -13
- package/src/__tests__/tilemap-multi-atlas.test.ts +12 -32
- package/src/__tests__/tilemap-owner-boundary.unit.test.ts +5 -2
- package/src/__tests__/tilemap-region-pack.test.ts +8 -12
- package/src/__tests__/tilemap-spawn-flip-pivot.test.ts +8 -12
- package/src/__tests__/tilemap-uv-inset.test.ts +11 -14
- package/src/__tests__/tilemap-validate.test.ts +1 -1
- package/src/__tests__/tileset-asset-validate.test.ts +638 -0
- package/src/__tests__/transcode-fallback.unit.test.ts +207 -0
- package/src/__tests__/transform-hierarchy-pixel-diff.dawn.test.ts +36 -28
- package/src/__tests__/transient-fields-collect.test.ts +28 -21
- package/src/__tests__/transient-runtime-behavior.test.ts +227 -0
- package/src/__tests__/transparent-sort-tilemap-sprite-interleave.test.ts +4 -4
- package/src/__tests__/variant-selection.unit.test.ts +1 -1
- package/src/__tests__/video-extract-bindgroup.dawn.test.ts +89 -136
- package/src/__tests__/video-loader-consumption.test.ts +86 -0
- package/src/__tests__/video-loader-smoke.dawn.test.ts +60 -0
- package/src/__tests__/view-ubo-layout.browser.test.ts +0 -22
- package/src/__tests__/world-entity-key.test.ts +1 -1
- package/src/__tests__/world-scene-despawn.test.ts +1 -1
- package/src/__tests__/world-scene-instantiate.test.ts +2 -36
- package/src/__tests__/world-scene-nested.test.ts +1 -1
- package/src/__tests__/world-scene-override.test.ts +1 -1
- package/src/backend-selection.ts +69 -0
- package/src/collect-scene-asset.ts +35 -23
- package/src/components/__tests__/camera.test-d.ts +1 -1
- package/src/components/__tests__/camera.test.ts +1 -1
- package/src/components/__tests__/sprite-animation.test-d.ts +2 -2
- package/src/components/__tests__/tile-layer.test-d.ts +1 -1
- package/src/components/__tests__/tile-layer.unit.test.ts +2 -2
- package/src/createRenderer.ts +24 -36
- package/src/errors/environment.ts +1 -1
- package/src/index.ts +51 -113
- package/src/renderer-host.ts +33 -0
- package/src/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.ts +1 -1
- package/src/scene-instances/index.ts +4 -0
- package/src/scene-utils/mount-override-fold.ts +3 -7
- package/src/systems/__tests__/transparent-sort.bench.ts +3 -3
- package/src/systems/sprite-animation-tick.ts +1 -1
- package/src/systems/transparent-sort.ts +38 -38
- package/src/tilemap-register-validate.ts +4 -4
- package/dist/__tests__/bind-group-cache-binding.test.d.ts +0 -2
- package/dist/__tests__/bind-group-cache-binding.test.d.ts.map +0 -1
- package/dist/__tests__/bind-group-cache-frame.test.d.ts +0 -2
- package/dist/__tests__/bind-group-cache-frame.test.d.ts.map +0 -1
- package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts +0 -2
- package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts +0 -2
- package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts +0 -2
- package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts +0 -2
- package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts +0 -2
- package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts.map +0 -1
- package/dist/__tests__/fog-producer-manifest.d.ts +0 -131
- package/dist/__tests__/fog-producer-manifest.d.ts.map +0 -1
- package/dist/__tests__/fog-producer-pixel-probe.d.ts +0 -42
- package/dist/__tests__/fog-producer-pixel-probe.d.ts.map +0 -1
- package/dist/__tests__/fog-producer-pixel.browser.test.d.ts +0 -2
- package/dist/__tests__/fog-producer-pixel.browser.test.d.ts.map +0 -1
- package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts +0 -2
- package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/fog-producer-real-fixture.d.ts +0 -5
- package/dist/__tests__/fog-producer-real-fixture.d.ts.map +0 -1
- package/dist/__tests__/fog-producer-vfx-effect.d.ts +0 -3
- package/dist/__tests__/fog-producer-vfx-effect.d.ts.map +0 -1
- package/dist/__tests__/fog-scene-asset.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-scene-asset.integration.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts +0 -2
- package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-resource.test.d.ts +0 -2
- package/dist/__tests__/gpu-resource.test.d.ts.map +0 -1
- package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts +0 -2
- package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts.map +0 -1
- package/dist/__tests__/hdrp-buffers.unit.test.d.ts +0 -2
- package/dist/__tests__/hdrp-buffers.unit.test.d.ts.map +0 -1
- package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts +0 -2
- package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts.map +0 -1
- package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts +0 -2
- package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts.map +0 -1
- package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts +0 -2
- package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts.map +0 -1
- package/dist/__tests__/hdrp-ssao-boundary.test.d.ts +0 -2
- package/dist/__tests__/hdrp-ssao-boundary.test.d.ts.map +0 -1
- package/dist/__tests__/hdrp-ssao-falsification.test.d.ts +0 -2
- package/dist/__tests__/hdrp-ssao-falsification.test.d.ts.map +0 -1
- package/dist/__tests__/helpers/primitive-world.d.ts +0 -8
- package/dist/__tests__/helpers/primitive-world.d.ts.map +0 -1
- package/dist/__tests__/helpers/render-asset-port.d.ts +0 -15
- package/dist/__tests__/helpers/render-asset-port.d.ts.map +0 -1
- package/dist/__tests__/helpers/scene-asset-port.d.ts +0 -9
- package/dist/__tests__/helpers/scene-asset-port.d.ts.map +0 -1
- package/dist/__tests__/material-derived-coordinates.integration.test.d.ts +0 -2
- package/dist/__tests__/material-derived-coordinates.integration.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-layout-selection.test.d.ts +0 -2
- package/dist/__tests__/pipeline-layout-selection.test.d.ts.map +0 -1
- package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts +0 -2
- package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts.map +0 -1
- package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts +0 -2
- package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts +0 -2
- package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-csm-caster-membership.test.d.ts +0 -2
- package/dist/__tests__/shadow-csm-caster-membership.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-csm-pssm.test.d.ts +0 -2
- package/dist/__tests__/shadow-csm-pssm.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts +0 -2
- package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-csm-viewport.test.d.ts +0 -2
- package/dist/__tests__/shadow-csm-viewport.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-m2.dawn.test.d.ts +0 -2
- package/dist/__tests__/shadow-m2.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts +0 -2
- package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-m3-calibrate.d.ts +0 -83
- package/dist/__tests__/shadow-m3-calibrate.d.ts.map +0 -1
- package/dist/__tests__/shadow-m3.dawn.test.d.ts +0 -2
- package/dist/__tests__/shadow-m3.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts +0 -2
- package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts +0 -2
- package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/temporal-off-path.unit.test.d.ts +0 -2
- package/dist/__tests__/temporal-off-path.unit.test.d.ts.map +0 -1
- package/dist/__tests__/video-cache-regression.unit.test.d.ts +0 -2
- package/dist/__tests__/video-cache-regression.unit.test.d.ts.map +0 -1
- package/dist/asset-kind.d.ts +0 -4
- package/dist/asset-kind.d.ts.map +0 -1
- package/dist/errors/sprite-animation.d.ts +0 -3
- package/dist/errors/sprite-animation.d.ts.map +0 -1
- package/dist/scene-asset-port.d.ts +0 -17
- package/dist/scene-asset-port.d.ts.map +0 -1
- package/dist/scene-collect-errors.d.ts +0 -22
- package/dist/scene-collect-errors.d.ts.map +0 -1
- package/dist/shadow-m3-calibrate.d.ts +0 -40
- package/dist/shadow-m3-calibrate.d.ts.map +0 -1
- package/src/__tests__/bind-group-cache-binding.test.ts +0 -2513
- package/src/__tests__/bind-group-cache-frame.test.ts +0 -1511
- package/src/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.ts +0 -204
- package/src/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.ts +0 -297
- package/src/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.ts +0 -271
- package/src/__tests__/dispatch-fullscreen-pass-params.unit.test.ts +0 -321
- package/src/__tests__/fog-producer-manifest.ts +0 -162
- package/src/__tests__/fog-producer-pixel-probe.ts +0 -263
- package/src/__tests__/fog-producer-pixel.browser.test.ts +0 -26
- package/src/__tests__/fog-producer-pixel.dawn.test.ts +0 -55
- package/src/__tests__/fog-producer-real-fixture.ts +0 -805
- package/src/__tests__/fog-producer-vfx-effect.ts +0 -272
- package/src/__tests__/fog-scene-asset.integration.test.ts +0 -123
- package/src/__tests__/gpu-resource-store-cubemap-status.test.ts +0 -207
- package/src/__tests__/gpu-resource.test.ts +0 -1206
- package/src/__tests__/hdrp-bgl-slots.browser.test.ts +0 -50
- package/src/__tests__/hdrp-buffers.unit.test.ts +0 -70
- package/src/__tests__/hdrp-execute-filter.unit.test.ts +0 -200
- package/src/__tests__/hdrp-gbuffer-attachments.browser.test.ts +0 -64
- package/src/__tests__/hdrp-pipeline-asset-type.test-d.ts +0 -139
- package/src/__tests__/hdrp-ssao-boundary.test.ts +0 -237
- package/src/__tests__/hdrp-ssao-falsification.test.ts +0 -289
- package/src/__tests__/helpers/primitive-world.ts +0 -91
- package/src/__tests__/helpers/render-asset-port.ts +0 -65
- package/src/__tests__/helpers/scene-asset-port.ts +0 -23
- package/src/__tests__/material-derived-coordinates.integration.test.ts +0 -100
- package/src/__tests__/pipeline-layout-selection.test.ts +0 -298
- package/src/__tests__/post-process-reads-narrowing.test-d.ts +0 -52
- package/src/__tests__/post-process-register-roundtrip.dawn.test.ts +0 -230
- package/src/__tests__/render-feature-zero-feature.browser.test.ts +0 -152
- package/src/__tests__/render-pipeline-trivial.dawn.test.ts +0 -525
- package/src/__tests__/shadow-csm-caster-membership.test.ts +0 -232
- package/src/__tests__/shadow-csm-pssm.test.ts +0 -142
- package/src/__tests__/shadow-csm-temporal.browser.test.ts +0 -145
- package/src/__tests__/shadow-csm-viewport.test.ts +0 -74
- package/src/__tests__/shadow-m2.dawn.test.ts +0 -394
- package/src/__tests__/shadow-m3-calibrate-run.dawn.test.ts +0 -248
- package/src/__tests__/shadow-m3-calibrate.ts +0 -203
- package/src/__tests__/shadow-m3.dawn.test.ts +0 -288
- package/src/__tests__/shadow-probe-control-flow.dawn.test.ts +0 -264
- package/src/__tests__/shadow-quality-metrics.dawn.test.ts +0 -324
- package/src/__tests__/temporal-off-path.unit.test.ts +0 -69
- package/src/__tests__/video-cache-regression.unit.test.ts +0 -186
- package/src/asset-kind.ts +0 -7
- package/src/errors/sprite-animation.ts +0 -5
- package/src/scene-asset-port.ts +0 -32
- package/src/scene-collect-errors.ts +0 -30
- package/src/shadow-m3-calibrate.ts +0 -171
package/src/createRenderer.ts
CHANGED
|
@@ -1,61 +1,49 @@
|
|
|
1
1
|
// Runtime is the host assembly facade. Concrete Renderer construction and
|
|
2
|
-
// frame interpretation live in
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
2
|
+
// frame interpretation live in the render owner assembly.
|
|
3
|
+
import type { RenderError, Renderer, RendererOptions } from '@forgeax/engine-render';
|
|
4
|
+
import type { BundlerOptions } from '@forgeax/engine-render/internal/construct-renderer';
|
|
5
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
5
6
|
import { EngineEnvironmentError } from './errors/environment';
|
|
7
|
+
import { constructRuntimeRendererHost } from './renderer-host';
|
|
6
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Assemble the sole public renderer host.
|
|
11
|
+
*
|
|
12
|
+
* Runtime owns backend selection and partial-construction cleanup. Render owns
|
|
13
|
+
* the scene/frame contract; successful construction returns the host that
|
|
14
|
+
* exposes attach, draw, inspect, observe, and recover. Expected failures are
|
|
15
|
+
* structured Result errors at the owning boundary; environment failures retain
|
|
16
|
+
* EngineEnvironmentError recovery guidance for the caller.
|
|
17
|
+
*/
|
|
7
18
|
export async function createRenderer(
|
|
8
19
|
canvas: HTMLCanvasElement | OffscreenCanvas,
|
|
9
20
|
options?: RendererOptions,
|
|
10
21
|
bundler?: BundlerOptions,
|
|
11
|
-
): Promise<Renderer
|
|
22
|
+
): Promise<Result<Renderer, EngineEnvironmentError | RenderError>> {
|
|
12
23
|
if (options !== undefined && 'rhi' in options && options.rhi === undefined) {
|
|
13
|
-
|
|
24
|
+
return err(new EngineEnvironmentError('no usable rendering backend'));
|
|
14
25
|
}
|
|
15
26
|
const rendererOptions: RendererOptions | undefined =
|
|
16
27
|
options === undefined
|
|
17
28
|
? undefined
|
|
18
29
|
: {
|
|
19
30
|
...(options.rhi === undefined ? {} : { rhi: options.rhi }),
|
|
20
|
-
...(options.rawDeviceForContextConfigure === undefined
|
|
21
|
-
? {}
|
|
22
|
-
: { rawDeviceForContextConfigure: options.rawDeviceForContextConfigure }),
|
|
23
31
|
...(options.features === undefined ? {} : { features: options.features }),
|
|
24
32
|
...(options.profiler === undefined ? {} : { profiler: options.profiler }),
|
|
25
|
-
...(options.membershipTiming === undefined
|
|
26
|
-
? {}
|
|
27
|
-
: { membershipTiming: options.membershipTiming }),
|
|
28
33
|
...(options.rhiInstrumentation === undefined
|
|
29
34
|
? {}
|
|
30
35
|
: { rhiInstrumentation: options.rhiInstrumentation }),
|
|
36
|
+
...(options.standardProfile === undefined
|
|
37
|
+
? {}
|
|
38
|
+
: { standardProfile: options.standardProfile }),
|
|
31
39
|
};
|
|
32
40
|
try {
|
|
33
|
-
|
|
41
|
+
const constructed = await constructRuntimeRendererHost(canvas, rendererOptions, bundler);
|
|
42
|
+
if (!constructed.ok) return err(constructed.error);
|
|
43
|
+
return ok(constructed.value.renderer);
|
|
34
44
|
} catch (cause) {
|
|
35
|
-
if (
|
|
36
|
-
if (cause instanceof EngineEnvironmentError) throw cause;
|
|
45
|
+
if (cause instanceof EngineEnvironmentError) return err(cause);
|
|
37
46
|
const detail = cause instanceof Error ? cause : new Error(String(cause));
|
|
38
|
-
|
|
47
|
+
return err(new EngineEnvironmentError('renderer construction failed', { webgpuError: detail }));
|
|
39
48
|
}
|
|
40
49
|
}
|
|
41
|
-
|
|
42
|
-
function isStructuredRenderError(value: unknown): value is Error & {
|
|
43
|
-
readonly code: string;
|
|
44
|
-
readonly expected: string;
|
|
45
|
-
readonly hint: string;
|
|
46
|
-
readonly detail: unknown;
|
|
47
|
-
} {
|
|
48
|
-
if (!(value instanceof Error)) return false;
|
|
49
|
-
const candidate = value as Partial<{
|
|
50
|
-
code: unknown;
|
|
51
|
-
expected: unknown;
|
|
52
|
-
hint: unknown;
|
|
53
|
-
detail: unknown;
|
|
54
|
-
}>;
|
|
55
|
-
return (
|
|
56
|
-
typeof candidate.code === 'string' &&
|
|
57
|
-
typeof candidate.expected === 'string' &&
|
|
58
|
-
typeof candidate.hint === 'string' &&
|
|
59
|
-
candidate.detail !== undefined
|
|
60
|
-
);
|
|
61
|
-
}
|
package/src/index.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
// @forgeax/engine-runtime — public API surface (M3).
|
|
2
2
|
//
|
|
3
3
|
// Surface (K-4):
|
|
4
|
-
// - createRenderer(canvas, options?) — async factory; uses WebGPU
|
|
5
|
-
// exclusively
|
|
6
|
-
// - Renderer / RendererOptions /
|
|
4
|
+
// - createRenderer(canvas, options?) — async Result factory; uses WebGPU
|
|
5
|
+
// exclusively and returns EngineEnvironmentError or RenderError on failure.
|
|
6
|
+
// - Renderer / RendererOptions / RendererLostInfo /
|
|
7
7
|
// RendererLostListener — types for callers.
|
|
8
|
-
// - EngineEnvironmentError —
|
|
8
|
+
// - EngineEnvironmentError — returned when no backend is usable.
|
|
9
9
|
//
|
|
10
10
|
// What is **NOT** here, by design (acceptance grep checks negative existence):
|
|
11
11
|
// - any internal backend module — locked by `package.json#exports`
|
|
12
12
|
// entry `"./internal/*": null`.
|
|
13
13
|
|
|
14
|
-
import { createRenderer as _createRendererForEngineAlias } from './createRenderer';
|
|
15
|
-
|
|
16
14
|
/**
|
|
17
15
|
* `acquireCanvasContext` facade re-export (M3 D-P3 / w15).
|
|
18
16
|
*
|
|
@@ -27,7 +25,6 @@ import { createRenderer as _createRendererForEngineAlias } from './createRendere
|
|
|
27
25
|
*/
|
|
28
26
|
export { acquireCanvasContext } from '@forgeax/engine-rhi-webgpu';
|
|
29
27
|
export { defaultAssetDecoderContributions } from './asset-contributions';
|
|
30
|
-
export { builtinAssetKind } from './asset-kind';
|
|
31
28
|
export { createRenderer } from './createRenderer';
|
|
32
29
|
|
|
33
30
|
// feat-20260704-runtime-tier1-decomposition M2 / w10 (D-3 / D-9): the top-level
|
|
@@ -38,53 +35,17 @@ export { createRenderer } from './createRenderer';
|
|
|
38
35
|
// ./errors/<cluster> (NOT the transitional errors.ts barrel, deleted in w15;
|
|
39
36
|
// NOT the @forgeax/engine-types zombie RuntimeErrorCode -- D-9).
|
|
40
37
|
|
|
41
|
-
//
|
|
42
|
-
//
|
|
38
|
+
// feat-20260705-runtime-tier2-decomposition M1 / w14: the asset cluster error
|
|
39
|
+
// re-exports (AssetRuntimeError / *Detail types + MaterialResolvedEmptyPasses /
|
|
40
|
+
// SceneCollect* classes) moved to @forgeax/engine-assets-runtime. Consumers
|
|
41
|
+
// import them from that package directly (AC-105: runtime barrel exports zero
|
|
42
|
+
// asset-cluster symbols).
|
|
43
43
|
// -- environment cluster --
|
|
44
44
|
export { EngineEnvironmentError } from './errors/environment';
|
|
45
|
-
export {
|
|
46
|
-
type SpriteAnimationErrorCode,
|
|
47
|
-
SpriteAnimationInvalidError,
|
|
48
|
-
} from './errors/sprite-animation';
|
|
49
45
|
// -- recover cluster --
|
|
50
46
|
// -- render cluster --
|
|
51
47
|
// -- skin cluster --
|
|
52
48
|
|
|
53
|
-
/**
|
|
54
|
-
* `Engine` namespace alias for `createRenderer` (w55 round 2 fix-up F-3
|
|
55
|
-
* closure). Plan-strategy §7.1 / §7.2 / §7.4 + requirements.md §AI User
|
|
56
|
-
* Affordances reference the factory in `Engine.create({ canvas })` form;
|
|
57
|
-
* the concrete code-level entry is `createRenderer(canvas, options?)`. To
|
|
58
|
-
* keep both call sites valid without forcing a doc-wide rewrite (the
|
|
59
|
-
* plan/requirements text is appended-only audit history per architecture
|
|
60
|
-
* principle 7), the namespace alias re-exports `createRenderer` under the
|
|
61
|
-
* `Engine.create` shape — AI users can write either form and TypeScript
|
|
62
|
-
* resolution lands on the same factory.
|
|
63
|
-
*
|
|
64
|
-
* Single SSOT: the runtime behaviour, signatures, and JSDoc all live on
|
|
65
|
-
* `createRenderer`; `Engine.create` is a thin re-export (charter
|
|
66
|
-
* proposition 1 progressive disclosure — both names are grep-able + lead
|
|
67
|
-
* to the same body; proposition 5 consistent abstraction — the alias does
|
|
68
|
-
* not introduce a second factory shape).
|
|
69
|
-
*
|
|
70
|
-
* Usage parity:
|
|
71
|
-
*
|
|
72
|
-
* import { createRenderer } from '@forgeax/engine-runtime';
|
|
73
|
-
* const renderer = await createRenderer(canvas, { ... }, bundler?);
|
|
74
|
-
*
|
|
75
|
-
* // identical:
|
|
76
|
-
* import { Engine } from '@forgeax/engine-runtime';
|
|
77
|
-
* const renderer = await Engine.create(canvas, { ... }, bundler?);
|
|
78
|
-
*
|
|
79
|
-
* feat-20260608-create-app-param-surface-trim / M2 / R-8: Engine.create
|
|
80
|
-
* is a thin re-export of createRenderer; the third BundlerOptions arg
|
|
81
|
-
* forwards verbatim through the alias (no separate Engine.create
|
|
82
|
-
* implementation -- `create: createRenderer` shape).
|
|
83
|
-
*/
|
|
84
|
-
export const Engine = {
|
|
85
|
-
create: _createRendererForEngineAlias,
|
|
86
|
-
} as const;
|
|
87
|
-
|
|
88
49
|
// ─── ECS render bridge (feat-20260509-ecs-render-bridge-mvp) ────────────────
|
|
89
50
|
//
|
|
90
51
|
// Single-import surface for the 5-component schema set + builtin asset handles
|
|
@@ -110,20 +71,19 @@ export const Engine = {
|
|
|
110
71
|
* Read both fields directly through typed property access after the
|
|
111
72
|
* `code === 'limit-exceeded'` discriminant narrows `err.detail`.
|
|
112
73
|
*
|
|
113
|
-
* The `Renderer.
|
|
114
|
-
* `
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* widened from `RhiError` only, dropping the prior `as any` fan-out cast).
|
|
118
|
-
* The disjoint `RhiErrorCode` / `RuntimeErrorCode` literal sets let
|
|
119
|
-
* `switch (e.code)` narrow each arm to the concrete class without a default.
|
|
74
|
+
* The `Renderer.subscribe` channel projects renderer-owned failures through
|
|
75
|
+
* one `RendererEvent` union. The public operation error is always `RenderError`;
|
|
76
|
+
* lower-layer causes remain structured in its detail instead of creating a
|
|
77
|
+
* second listener/error authority.
|
|
120
78
|
*
|
|
121
79
|
* @example
|
|
122
80
|
* import {
|
|
123
81
|
* RhiError, type RhiErrorCode, type LimitExceededDetail,
|
|
124
82
|
* } from '@forgeax/engine-runtime';
|
|
125
|
-
* import { type
|
|
126
|
-
* renderer.
|
|
83
|
+
* import { type RenderError } from '@forgeax/engine-render';
|
|
84
|
+
* renderer.subscribe((event) => {
|
|
85
|
+
* if (event.kind !== 'error') return;
|
|
86
|
+
* const e: RenderError = event.error;
|
|
127
87
|
* switch (e.code) {
|
|
128
88
|
* case 'limit-exceeded': {
|
|
129
89
|
* const detail = e.detail as LimitExceededDetail;
|
|
@@ -148,20 +108,6 @@ export {
|
|
|
148
108
|
type RhiShaderCompileDetail,
|
|
149
109
|
type RhiWebgpuRuntimeDetail,
|
|
150
110
|
} from '@forgeax/engine-rhi';
|
|
151
|
-
/**
|
|
152
|
-
* feat-20260527-sprite-nineslice M4 / w16 (D-5 + AC-16): per-Renderer
|
|
153
|
-
* EngineMetrics counter. Surfaced through `renderer.metrics`; exported here
|
|
154
|
-
* so AI users can grep `EngineMetrics` and reach the public type for ts
|
|
155
|
-
* generics, and so test utilities can construct a free-standing instance.
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* const renderer = await createRenderer(canvas);
|
|
159
|
-
* // ...later, after the world has rendered for a few frames...
|
|
160
|
-
* const counts = renderer.metrics.snapshot();
|
|
161
|
-
* if (counts['nineslice.scale-too-small'] !== undefined) {
|
|
162
|
-
* // surface a once-per-session UI hint, run a regression bench, etc.
|
|
163
|
-
* }
|
|
164
|
-
*/
|
|
165
111
|
/**
|
|
166
112
|
* Asset system SSOT re-exports (feat-20260511-asset-system-v1 / w30 / D-P7 +
|
|
167
113
|
* plan-strategy §7.4 discoverability dual-entry).
|
|
@@ -170,7 +116,7 @@ export {
|
|
|
170
116
|
* 4-member union + `AssetError` class + `ASSET_ERROR_HINTS` per-code hint table);
|
|
171
117
|
* this barrel is a thin re-export so AI users can write a single-line import —
|
|
172
118
|
*
|
|
173
|
-
* import type { Asset } from '@forgeax/engine-
|
|
119
|
+
* import type { Asset } from '@forgeax/engine-assets-runtime';
|
|
174
120
|
* import type { Handle } from '@forgeax/engine-types';
|
|
175
121
|
* import { AssetError } from '@forgeax/engine-runtime';
|
|
176
122
|
*
|
|
@@ -191,9 +137,14 @@ export {
|
|
|
191
137
|
type TextureAsset,
|
|
192
138
|
type VertexAttributeMap,
|
|
193
139
|
} from '@forgeax/engine-types';
|
|
194
|
-
//
|
|
195
|
-
//
|
|
196
|
-
//
|
|
140
|
+
// feat-20260705-runtime-tier2-decomposition M1 / w14: Asset / MeshAsset types
|
|
141
|
+
// moved to @forgeax/engine-assets-runtime (AC-105).
|
|
142
|
+
// feat-20260705-runtime-tier2-decomposition M1 / w14: AssetRegistry + the
|
|
143
|
+
// HANDLE_* builtin mesh handles moved to @forgeax/engine-assets-runtime (AC-105).
|
|
144
|
+
// feat-20260705-runtime-tier2-decomposition M1 / w14: the process-static
|
|
145
|
+
// BuiltinAssetRegistry tier (BUILTIN_* payloads) moved to
|
|
146
|
+
// @forgeax/engine-assets-runtime (AC-105). Geometry owns the shared runtime
|
|
147
|
+
// vertex layout.
|
|
197
148
|
// Runtime-specific authoring components remain here. Domain authorities are
|
|
198
149
|
// imported directly from @forgeax/engine-scene, @forgeax/engine-animation,
|
|
199
150
|
// @forgeax/engine-skinning, and @forgeax/engine-render.
|
|
@@ -233,9 +184,8 @@ export { createDevImportTransport } from './dev-import-transport';
|
|
|
233
184
|
* glyphTextLayoutSystem (feat-20260531-world-space-msdf-text-rendering) -- lays
|
|
234
185
|
* out + bakes every `GlyphText` entity, attaching MeshFilter + MeshRenderer on
|
|
235
186
|
* first observation and re-baking in place on a text / size / color change.
|
|
236
|
-
* `
|
|
237
|
-
* first
|
|
238
|
-
* `createApp` performs the attachment automatically.
|
|
187
|
+
* `createApp` attaches the World and owns the returned render lease before
|
|
188
|
+
* the first frame; `Renderer.draw` consumes only that lease-bound request.
|
|
239
189
|
*/
|
|
240
190
|
/**
|
|
241
191
|
* GpuBuffer / GpuTexture runtime wrappers + GpuResource union
|
|
@@ -253,12 +203,10 @@ export { createDevImportTransport } from './dev-import-transport';
|
|
|
253
203
|
* `Result.err({ code: 'destroy-after-destroy' })`.
|
|
254
204
|
*/
|
|
255
205
|
/**
|
|
256
|
-
* feat-20260601-gpu-resource-store-extraction M1: the GPU residency store.
|
|
257
|
-
* Reachable as `renderer.store`; exported here so AI users can construct one
|
|
258
|
-
* directly for tests and `grep GpuResourceStore` discovers it.
|
|
259
206
|
*/
|
|
260
|
-
//
|
|
261
|
-
//
|
|
207
|
+
// feat-20260705-runtime-tier2-decomposition M1 / w14: the loader-injection
|
|
208
|
+
// surface (LoaderRegistry / wireDefaultLoaders / createDefaultLoaderRegistry)
|
|
209
|
+
// moved to @forgeax/engine-assets-runtime (AC-105).
|
|
262
210
|
// feat-20260705-runtime-tier2-decomposition M2 / w25: the picking cluster
|
|
263
211
|
// (pick / pickVertex / pickVertexOnEntity / pickTile + PickHit / VertexHit /
|
|
264
212
|
// PickError / PickErrorCode / PickTileError / PickTileHit) moved to
|
|
@@ -278,10 +226,10 @@ export { createDevImportTransport } from './dev-import-transport';
|
|
|
278
226
|
* Camera, DirectionalLight, MeshFilter, MeshRenderer,
|
|
279
227
|
* } from '@forgeax/engine-render';
|
|
280
228
|
* import { Transform } from '@forgeax/engine-scene';
|
|
281
|
-
* import {
|
|
229
|
+
* import { AssetRegistry, HANDLE_CUBE, HANDLE_TRIANGLE } from '@forgeax/engine-assets-runtime';
|
|
282
230
|
*/
|
|
283
|
-
//
|
|
284
|
-
//
|
|
231
|
+
// feat-20260705-runtime-tier2-decomposition M1 / w14: resolveAssetHandle moved
|
|
232
|
+
// to @forgeax/engine-assets-runtime (AC-105).
|
|
285
233
|
export type { SpriteParamValues } from './sprite-param-values';
|
|
286
234
|
// feat-20260630-viewport-2x2-run-x-display-redesign M2 / w12 / plan-strategy D-2:
|
|
287
235
|
// engine-neutral by-entity-id active camera selection (no editor concept).
|
|
@@ -303,7 +251,7 @@ export type { SpriteParamValues } from './sprite-param-values';
|
|
|
303
251
|
* TRANSPARENT_SORT_CONFIG_KEY,
|
|
304
252
|
* TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
305
253
|
* setTransparentSortConfig,
|
|
306
|
-
* } from '@forgeax/engine-render/
|
|
254
|
+
* } from '@forgeax/engine-render/authoring';
|
|
307
255
|
* const r = setTransparentSortConfig(world,
|
|
308
256
|
* { mode: TRANSPARENT_SORT_MODE_LAYER_Y, yzAlpha: 1.0 });
|
|
309
257
|
*/
|
|
@@ -337,8 +285,9 @@ export { spriteAnimationTickSystem } from './systems/sprite-animation-tick';
|
|
|
337
285
|
// / probeVideoHighPerfUpload / VideoCapabilityDevice) moved to
|
|
338
286
|
// @forgeax/engine-graphics-extras (AC-303). Zero shim -- import from that
|
|
339
287
|
// package.
|
|
340
|
-
//
|
|
341
|
-
//
|
|
288
|
+
// feat-20260705-runtime-tier2-decomposition M1 / w14: createDefaultLoaderRegistry
|
|
289
|
+
// + wireDefaultLoaders moved to @forgeax/engine-assets-runtime. Consumers import
|
|
290
|
+
// them from that package directly (AC-105).
|
|
342
291
|
|
|
343
292
|
// ─── Math namespace re-export (M2 / w15) ────────────────────────────────
|
|
344
293
|
|
|
@@ -377,16 +326,11 @@ export { quat } from '@forgeax/engine-math';
|
|
|
377
326
|
// collectSceneAsset removed — replaced by rootsToSceneAsset (forest entry,
|
|
378
327
|
// schema-derived field dispatch, engine-self-contained GUID resolution).
|
|
379
328
|
// serializeSceneAssetToPack now uses schema-derived refs[] index (D-1/D-2).
|
|
380
|
-
export { rootsToSceneAsset, serializeSceneAssetToPack } from './collect-scene-asset';
|
|
381
329
|
export {
|
|
382
|
-
|
|
383
|
-
type
|
|
384
|
-
|
|
385
|
-
} from './scene-asset
|
|
386
|
-
export {
|
|
387
|
-
SceneCollectAssetGuidUnresolvedError,
|
|
388
|
-
SceneCollectEntityRefOutOfClosureError,
|
|
389
|
-
} from './scene-collect-errors';
|
|
330
|
+
rootsToSceneAsset,
|
|
331
|
+
type SceneAssetGuidLookup,
|
|
332
|
+
serializeSceneAssetToPack,
|
|
333
|
+
} from './collect-scene-asset';
|
|
390
334
|
// feat-20260626 M6 / m6-4: debug-draw auto-attach glue is re-exported from the
|
|
391
335
|
// main barrel (was a separate tsup entry). The separate entry produced a SECOND
|
|
392
336
|
// module copy of the mutable `registeredDebugDraw` registry: createApp set it on
|
|
@@ -414,26 +358,20 @@ export {
|
|
|
414
358
|
// alongside the existing fullscreen post-process register / not-found /
|
|
415
359
|
// reads-not-found codes. AI users `switch (err.code)` over the closed
|
|
416
360
|
// 6-member union without `default`; .detail narrows per-code per charter P3.
|
|
417
|
-
// feat-20260604 M3 / w19: render-graph-primitives —
|
|
418
|
-
//
|
|
419
|
-
//
|
|
420
|
-
// addFullscreenPass). The urp pipeline (w21) and any custom
|
|
421
|
-
// pipeline use these factories — the dogfood proof of D-5.
|
|
361
|
+
// feat-20260604 M3 / w19: render-graph-primitives — low-level typed record helpers
|
|
362
|
+
// used by the Standard feature graph. Graph topology is declared by RenderFeaturePlan;
|
|
363
|
+
// recordSsao* and encodeFullscreenPass remain the executable RHI-facing leaves.
|
|
422
364
|
// feat-20260601-customizable-render-pipeline-seam-and-dogfood-rend M1.
|
|
423
365
|
/**
|
|
424
|
-
* Render
|
|
425
|
-
*
|
|
426
|
-
*
|
|
427
|
-
*
|
|
428
|
-
* example - it is dogfooded through the same public channel inside `createRenderer`.
|
|
366
|
+
* Render surface. The renderer host assembles one Standard pipeline and
|
|
367
|
+
* accepts closed RenderFeature declarations at App construction. Pipelines,
|
|
368
|
+
* device handles, and asset registries remain owner-internal implementation
|
|
369
|
+
* details rather than renderer methods.
|
|
429
370
|
*
|
|
430
371
|
* @example
|
|
431
|
-
* import {
|
|
432
|
-
*
|
|
433
|
-
* PipelineError, type PipelineErrorCode,
|
|
434
|
-
* URP_PIPELINE_ID,
|
|
372
|
+
* import type {
|
|
373
|
+
* RenderFeaturePlan,
|
|
435
374
|
* } from '@forgeax/engine-render';
|
|
436
|
-
* // urpPipeline remains an engine-internal implementation.
|
|
437
375
|
*/
|
|
438
376
|
// RenderPipelineContext is barrel-exported for typed pass encode closures.
|
|
439
377
|
// feat-20260701-rootstosceneasset verify minor-edit (F2): collectSubtree is a
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AssetRegistry } from '@forgeax/engine-assets-runtime';
|
|
2
|
+
import type { RenderError, RendererOptions, RenderResult } from '@forgeax/engine-render';
|
|
3
|
+
import type {
|
|
4
|
+
BundlerOptions,
|
|
5
|
+
RendererHostAssembly,
|
|
6
|
+
} from '@forgeax/engine-render/internal/construct-renderer';
|
|
7
|
+
import { constructRendererHost } from '@forgeax/engine-render/internal/construct-renderer';
|
|
8
|
+
import { loadBackendPack } from './backend-selection';
|
|
9
|
+
|
|
10
|
+
export type {
|
|
11
|
+
BundlerOptions,
|
|
12
|
+
RendererHostAssembly,
|
|
13
|
+
} from '@forgeax/engine-render/internal/construct-renderer';
|
|
14
|
+
|
|
15
|
+
/** Assemble renderer plus asset services in the Runtime-owned backend host. */
|
|
16
|
+
export async function constructRuntimeRendererHost(
|
|
17
|
+
canvas: unknown,
|
|
18
|
+
options?: RendererOptions,
|
|
19
|
+
bundler?: BundlerOptions,
|
|
20
|
+
): Promise<RenderResult<RendererHostAssembly, RenderError>> {
|
|
21
|
+
const first = await loadBackendPack(options);
|
|
22
|
+
if (!first.ok) throw first.error;
|
|
23
|
+
const constructed = await constructRendererHost(canvas, options, bundler, first.value);
|
|
24
|
+
if (constructed.ok || options?.rhi !== undefined || typeof globalThis === 'undefined') {
|
|
25
|
+
return constructed;
|
|
26
|
+
}
|
|
27
|
+
const fallback = await loadBackendPack(options, true);
|
|
28
|
+
if (!fallback.ok) return constructed;
|
|
29
|
+
return constructRendererHost(canvas, options, bundler, fallback.value);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { loadRhiPack } from './backend-selection';
|
|
33
|
+
export type { AssetRegistry };
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
// - missing joint inside subtree: structured error 'skin-joint-path-unresolved'.
|
|
8
8
|
|
|
9
9
|
import { World } from '@forgeax/engine-ecs';
|
|
10
|
-
import { postSpawnResolveJoints } from '@forgeax/engine-render/internal';
|
|
11
10
|
import { ChildOf, Name } from '@forgeax/engine-scene';
|
|
12
11
|
import { Skin } from '@forgeax/engine-skinning';
|
|
13
12
|
import type { SkinAsset } from '@forgeax/engine-types';
|
|
14
13
|
import { describe, expect, it, vi } from 'vitest';
|
|
14
|
+
import { postSpawnResolveJoints } from '../../../../render/src/scene-instances/post-spawn-resolve-joints';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Build a 3-joint linear chain `Root -> Spine -> Hip` rooted at a fresh entity,
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
// member land in the PARENT anchor's state, not the folded child anchor's; the
|
|
41
41
|
// child anchor's own mountTimeOverrides is empty. See the M5 implement report.)
|
|
42
42
|
|
|
43
|
+
import { resolveAssetHandle } from '@forgeax/engine-assets-runtime';
|
|
43
44
|
import {
|
|
44
45
|
componentDefinition,
|
|
45
46
|
type Component as EcsComponent,
|
|
@@ -55,7 +56,6 @@ import type {
|
|
|
55
56
|
SceneAsset,
|
|
56
57
|
SceneEntity,
|
|
57
58
|
} from '@forgeax/engine-types';
|
|
58
|
-
import type { SceneAssetPort } from '../scene-asset-port';
|
|
59
59
|
|
|
60
60
|
/** Minimal structural view of a SceneInstanceState the fold reads (D-4 boundary:
|
|
61
61
|
* `world.getSceneInstanceState(root).value` is structurally assignable). */
|
|
@@ -143,12 +143,8 @@ function liveFields(
|
|
|
143
143
|
* MountOverride[] (child-namespace localIds, live value domain). See file
|
|
144
144
|
* header for the full contract. Returns [] when nothing differs from source.
|
|
145
145
|
*/
|
|
146
|
-
export function foldMountOverrides(
|
|
147
|
-
|
|
148
|
-
assets: SceneAssetPort,
|
|
149
|
-
state: FoldSceneInstanceState,
|
|
150
|
-
): MountOverride[] {
|
|
151
|
-
const sourceRes = assets.resolve<SceneAsset>(
|
|
146
|
+
export function foldMountOverrides(world: World, state: FoldSceneInstanceState): MountOverride[] {
|
|
147
|
+
const sourceRes = resolveAssetHandle<SceneAsset>(
|
|
152
148
|
world,
|
|
153
149
|
state.source as unknown as Handle<string, 'shared'>,
|
|
154
150
|
);
|
|
@@ -55,14 +55,14 @@
|
|
|
55
55
|
// (5_000_000 ns/op working baseline; R1 F-2 defer note above).
|
|
56
56
|
|
|
57
57
|
import { World } from '@forgeax/engine-ecs';
|
|
58
|
+
import { bench, describe } from 'vitest';
|
|
59
|
+
import type { TransparentEntry } from '../../../../render/src/systems/transparent-sort-config';
|
|
58
60
|
import {
|
|
59
61
|
setTransparentSortConfig,
|
|
60
62
|
TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
61
63
|
TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
62
64
|
TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
63
|
-
} from '
|
|
64
|
-
import { bench, describe } from 'vitest';
|
|
65
|
-
import type { TransparentEntry } from '../transparent-sort';
|
|
65
|
+
} from '../../../../render/src/systems/transparent-sort-config';
|
|
66
66
|
import { transparentSortEntries } from '../transparent-sort';
|
|
67
67
|
import { createXorshift32 } from './_xorshift';
|
|
68
68
|
|
|
@@ -58,13 +58,13 @@
|
|
|
58
58
|
// charter P3 + P4 + P5 + F1.
|
|
59
59
|
|
|
60
60
|
import { type EntityHandle, Time, type World } from '@forgeax/engine-ecs';
|
|
61
|
+
import { SpriteAnimationInvalidError } from '@forgeax/engine-ecs/projection';
|
|
61
62
|
import {
|
|
62
63
|
SpriteAnimation,
|
|
63
64
|
SpriteRegionOverride,
|
|
64
65
|
spritePlaybackModeFromU32,
|
|
65
66
|
} from '@forgeax/engine-render/authoring';
|
|
66
67
|
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
67
|
-
import { SpriteAnimationInvalidError } from '../errors/sprite-animation';
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
70
|
* Walk every entity carrying `SpriteAnimation`, advance its dt
|
|
@@ -10,14 +10,15 @@
|
|
|
10
10
|
// budget):
|
|
11
11
|
//
|
|
12
12
|
// 1. Walk `entries` once and project each into:
|
|
13
|
-
// - `layers :
|
|
13
|
+
// - `layers : Int32Array(n)` — primary sort key (Layer.value).
|
|
14
14
|
// - `sortVals : Float64Array(n)` — predicted sort value per entry,
|
|
15
15
|
// derived from `mode` + `yzAlpha` + per-entry inputs OR the
|
|
16
16
|
// per-entity `sortKey` override.
|
|
17
|
-
// - `indices :
|
|
18
|
-
// 2.
|
|
19
|
-
//
|
|
20
|
-
//
|
|
17
|
+
// - `indices : number[]` — initially `[0..n)`.
|
|
18
|
+
// 2. `indices.sort((a, b) => ...)` with the composite comparator
|
|
19
|
+
// `(layers[a] - layers[b]) || (sortVals[a] - sortVals[b])`.
|
|
20
|
+
// Array.prototype.sort has been stable since ES2019; tie-breakers
|
|
21
|
+
// fall back to insertion order (charter F1 deterministic output).
|
|
21
22
|
// 3. Return entries reordered by the sorted indices.
|
|
22
23
|
//
|
|
23
24
|
// Why SoA over Object-of-Structs comparator: V8's PSP / TimSort visits
|
|
@@ -58,29 +59,14 @@
|
|
|
58
59
|
// archetypeStorage layout).
|
|
59
60
|
|
|
60
61
|
import type { World } from '@forgeax/engine-ecs';
|
|
61
|
-
import type { TransparentEntry } from '
|
|
62
|
+
import type { TransparentEntry } from '../../../render/src/systems/transparent-sort-config';
|
|
62
63
|
import {
|
|
63
64
|
getTransparentSortConfig,
|
|
64
65
|
TRANSPARENT_SORT_MODE_DISTANCE,
|
|
65
66
|
TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
66
67
|
TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
67
68
|
TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
68
|
-
} from '
|
|
69
|
-
|
|
70
|
-
export type { TransparentEntry } from '@forgeax/engine-render/internal';
|
|
71
|
-
|
|
72
|
-
let transparentSortLayers = new Float64Array(0);
|
|
73
|
-
let transparentSortValues = new Float64Array(0);
|
|
74
|
-
let transparentSortMaterials = new Float64Array(0);
|
|
75
|
-
let transparentSortIndices = new Int32Array(0);
|
|
76
|
-
|
|
77
|
-
function ensureTransparentSortCapacity(n: number): void {
|
|
78
|
-
if (transparentSortIndices.length >= n) return;
|
|
79
|
-
transparentSortLayers = new Float64Array(n);
|
|
80
|
-
transparentSortValues = new Float64Array(n);
|
|
81
|
-
transparentSortMaterials = new Float64Array(n);
|
|
82
|
-
transparentSortIndices = new Int32Array(n);
|
|
83
|
-
}
|
|
69
|
+
} from '../../../render/src/systems/transparent-sort-config';
|
|
84
70
|
|
|
85
71
|
/**
|
|
86
72
|
* Sort the transparent-bucket entries by `(layer ASC, sortValue ASC,
|
|
@@ -121,28 +107,42 @@ export function transparentSortEntries(
|
|
|
121
107
|
const mode = cfg.mode;
|
|
122
108
|
const yzAlpha = cfg.yzAlpha;
|
|
123
109
|
|
|
124
|
-
// SoA pre-projection columns.
|
|
125
|
-
//
|
|
126
|
-
|
|
127
|
-
const layers =
|
|
128
|
-
const sortVals =
|
|
129
|
-
const materials = transparentSortMaterials;
|
|
130
|
-
const indices = transparentSortIndices.subarray(0, n);
|
|
110
|
+
// SoA pre-projection columns. Float64Array gives sub-ms / 10k bench
|
|
111
|
+
// headroom over Object-of-Structs comparator (D-8); Int32Array carries
|
|
112
|
+
// the signed i32 Layer.value verbatim (negatives preserved).
|
|
113
|
+
const layers = new Int32Array(n);
|
|
114
|
+
const sortVals = new Float64Array(n);
|
|
131
115
|
for (let i = 0; i < n; i++) {
|
|
132
116
|
const e = entries[i] as TransparentEntry;
|
|
133
117
|
layers[i] = e.layer;
|
|
134
118
|
sortVals[i] = computeSortValue(e, mode, yzAlpha, cameraPos);
|
|
135
|
-
materials[i] = e.materialHandle;
|
|
136
|
-
indices[i] = i;
|
|
137
119
|
}
|
|
138
120
|
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
121
|
+
// indices argsort — Array.prototype.sort stability (ES2019+) preserves
|
|
122
|
+
// insertion order when the comparator returns 0. We avoid TypedArray.sort
|
|
123
|
+
// because its stability is not specified by the ECMAScript standard.
|
|
124
|
+
const indices: number[] = new Array(n);
|
|
125
|
+
for (let i = 0; i < n; i++) indices[i] = i;
|
|
126
|
+
indices.sort((a, b) => {
|
|
127
|
+
const la = layers[a] as number;
|
|
128
|
+
const lb = layers[b] as number;
|
|
129
|
+
if (la !== lb) return la - lb;
|
|
130
|
+
const va = sortVals[a] as number;
|
|
131
|
+
const vb = sortVals[b] as number;
|
|
132
|
+
if (va !== vb) return va < vb ? -1 : 1;
|
|
133
|
+
// Tertiary tiebreaker for modes 0/1/2: group same-materialHandle entries
|
|
134
|
+
// together so consecutive equal-(layer, sortVal, materialHandle) runs can
|
|
135
|
+
// collapse into fold buckets. Matches sortTransparentDispatch semantics.
|
|
136
|
+
// Not applied for DISTANCE (mode 3) — ties at exact same camera distance
|
|
137
|
+
// are undefined in depth order; stable insertion order is preserved there.
|
|
138
|
+
if (mode !== TRANSPARENT_SORT_MODE_DISTANCE) {
|
|
139
|
+
return (
|
|
140
|
+
(entries[a] as TransparentEntry).materialHandle -
|
|
141
|
+
(entries[b] as TransparentEntry).materialHandle
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
return 0;
|
|
145
|
+
});
|
|
146
146
|
|
|
147
147
|
const sorted: TransparentEntry[] = new Array(n);
|
|
148
148
|
for (let i = 0; i < n; i++) {
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
// state, no further migration to a tilemap feature package).
|
|
12
12
|
|
|
13
13
|
import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
14
|
-
import {
|
|
15
|
-
TileLayer as runtimeTileLayer,
|
|
16
|
-
Tilemap as runtimeTilemap,
|
|
17
|
-
} from '@forgeax/engine-render/authoring';
|
|
18
14
|
import { err, ok, type Result } from '@forgeax/engine-rhi';
|
|
19
15
|
import { ChildOf } from '@forgeax/engine-scene';
|
|
20
16
|
import { ASSET_ERROR_HINTS, AssetError } from '@forgeax/engine-types';
|
|
17
|
+
import {
|
|
18
|
+
TileLayer as runtimeTileLayer,
|
|
19
|
+
Tilemap as runtimeTilemap,
|
|
20
|
+
} from '../../render/src/components';
|
|
21
21
|
|
|
22
22
|
function invalidValue(field: string, value: unknown, reason: string): AssetError {
|
|
23
23
|
return new AssetError({
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bind-group-cache-binding.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/bind-group-cache-binding.test.ts"],"names":[],"mappings":""}
|