@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
|
@@ -25,40 +25,24 @@ function expectValidatedOrderedLoop(
|
|
|
25
25
|
expect(body).toContain(`${dynamicOffsetBindGroup}, [${indexName} * MESH_PER_ENTITY_STRIDE]`);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
function expectShadowEntriesLoop(signature: string, dynamicOffsetBindGroup: string): void {
|
|
29
|
-
const body = sourceAfter(signature);
|
|
30
|
-
expect(body).toContain('for (const { entry, validatedIndex: ei } of shadowEntries)');
|
|
31
|
-
expect(body).toContain(`${dynamicOffsetBindGroup}, [ei * MESH_PER_ENTITY_STRIDE]`);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
28
|
describe('shadow mesh SSBO order', () => {
|
|
35
|
-
it('uses the upload order for directional, point, and spot shadow offsets', () => {
|
|
29
|
+
it('uses the upload order for typed directional, point, and spot shadow offsets', () => {
|
|
36
30
|
expectValidatedOrderedLoop(
|
|
37
31
|
'function recordShadowCasterDraws(',
|
|
38
32
|
'i',
|
|
39
33
|
'shadowPass.setBindGroup(2, shadowMeshBindGroup',
|
|
40
34
|
);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
'pass.setBindGroup(2, meshBindGroup',
|
|
48
|
-
);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('keeps directional candidate union out of legacy point/spot caster domains', () => {
|
|
52
|
-
const point = sourceAfter('export function recordPointShadowPass(');
|
|
53
|
-
const spot = sourceAfter('function recordSpotShadowGeometry(');
|
|
54
|
-
expect(shadowPass).toContain(
|
|
35
|
+
expect(shadowPass).toContain('export function encodeDirectionalShadowPass(');
|
|
36
|
+
expect(shadowPass).toContain('export function encodePointShadowPass(');
|
|
37
|
+
expect(shadowPass).toContain('export function encodeSpotShadowPass(');
|
|
38
|
+
const spotBody = sourceAfter('export function encodeSpotShadowPass(');
|
|
39
|
+
expect(spotBody).toContain('recordShadowCasterDraws(');
|
|
40
|
+
expect(spotBody).toContain(
|
|
55
41
|
"buildMatchedRenderableIndices(c.dispatch, { LightMode: ['ShadowCaster'] })",
|
|
56
42
|
);
|
|
57
|
-
expect(
|
|
58
|
-
expect(
|
|
59
|
-
expect(
|
|
60
|
-
expect(
|
|
61
|
-
expect(spot).toContain('c.validatedShadowEntries ??');
|
|
62
|
-
expect(spot).toContain('isMainShadowRenderable(entry, mainMembership)');
|
|
43
|
+
expect(shadowPass).not.toContain('export function recordShadowPass(');
|
|
44
|
+
expect(shadowPass).not.toContain('export function recordPointShadowPass(');
|
|
45
|
+
expect(shadowPass).not.toContain('export function recordSpotShadowPass(');
|
|
46
|
+
expect(shadowPass).not.toContain('function recordSpotShadowGeometry(');
|
|
63
47
|
});
|
|
64
48
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SkinMaterialMismatchError } from '@forgeax/engine-render/internal';
|
|
2
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { SkinMaterialMismatchError } from '../../../render/src/errors/render';
|
|
3
3
|
|
|
4
4
|
describe('render skin errors stay outside skinning binding', () => {
|
|
5
5
|
it('retains material failures in runtime render error cluster', () => {
|
|
@@ -12,12 +12,14 @@ const extractPath = (() => {
|
|
|
12
12
|
return join(here, '..', '..', '..', 'render', 'src', 'render-system-extract.ts');
|
|
13
13
|
})();
|
|
14
14
|
|
|
15
|
-
describe('
|
|
16
|
-
it('keeps skin and instance hot fields on
|
|
15
|
+
describe('_getArrayView count (AC-03 gate)', () => {
|
|
16
|
+
it('keeps skin and instance hot fields on column views', () => {
|
|
17
17
|
const src = readFileSync(extractPath, 'utf8');
|
|
18
|
-
expect(src).
|
|
19
|
-
expect(src).toContain(
|
|
20
|
-
expect(src).toContain(
|
|
18
|
+
expect(src).toContain("_getArrayView(jointEntity, Transform, 'world')");
|
|
19
|
+
expect(src).toContain("_getArrayView(entity, Instances, 'transforms')");
|
|
20
|
+
expect(src).toContain("_getArrayView(entity, SpriteInstances, 'transforms')");
|
|
21
|
+
expect(src).toContain("_getArrayView(entity, SpriteInstances, 'regions')");
|
|
22
|
+
expect(src).not.toMatch(/^\s*const\s+\w+\s*=\s*world\.get\(jointEntity, Transform\)/m);
|
|
21
23
|
expect(src).not.toMatch(/^\s*const\s+\w+\s*=\s*world\.get\(entity, Instances\)/m);
|
|
22
24
|
});
|
|
23
25
|
});
|
|
@@ -22,18 +22,19 @@
|
|
|
22
22
|
|
|
23
23
|
import type { World as WorldType } from '@forgeax/engine-ecs';
|
|
24
24
|
import { World } from '@forgeax/engine-ecs';
|
|
25
|
+
import type { RhiCaps } from '@forgeax/engine-rhi';
|
|
26
|
+
import type { EquirectAsset, Handle } from '@forgeax/engine-types';
|
|
27
|
+
import { toShared } from '@forgeax/engine-types';
|
|
28
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
29
|
+
import { DeviceScope } from '../../../render/src/device/device-scope';
|
|
30
|
+
import { GpuResidencyCache } from '../../../render/src/device/gpu-residency';
|
|
31
|
+
import { RhiErrorListenerRegistry } from '../../../render/src/lifecycle';
|
|
25
32
|
import {
|
|
26
33
|
driveLazyEquirectProjection,
|
|
27
|
-
GpuResourceStore,
|
|
28
|
-
RhiErrorListenerRegistry,
|
|
29
34
|
selectLazyEquirectHandle,
|
|
30
35
|
warnMultiSkybox,
|
|
31
36
|
warnMultiSkylight,
|
|
32
|
-
} from '
|
|
33
|
-
import type { RhiCaps } from '@forgeax/engine-rhi';
|
|
34
|
-
import type { EquirectAsset, Handle } from '@forgeax/engine-types';
|
|
35
|
-
import { toShared } from '@forgeax/engine-types';
|
|
36
|
-
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
37
|
+
} from '../../../render/src/record/helpers';
|
|
37
38
|
|
|
38
39
|
// ── caps probes ──────────────────────────────────────────────────────────────
|
|
39
40
|
|
|
@@ -73,7 +74,18 @@ function makeReadyDevice(probe: DeviceProbe): any {
|
|
|
73
74
|
createPipelineLayout: () => okShim({ __mock: 'layout' }),
|
|
74
75
|
createRenderPipeline: () => okShim({ __mock: 'pipeline' }),
|
|
75
76
|
createBindGroup: () => okShim({ __mock: 'bindGroup' }),
|
|
76
|
-
createCommandEncoder: () =>
|
|
77
|
+
createCommandEncoder: () =>
|
|
78
|
+
okShim({
|
|
79
|
+
__mock: 'encoder',
|
|
80
|
+
beginRenderPass: () => ({
|
|
81
|
+
setPipeline: () => undefined,
|
|
82
|
+
setBindGroup: () => undefined,
|
|
83
|
+
setVertexBuffer: () => undefined,
|
|
84
|
+
draw: () => undefined,
|
|
85
|
+
end: () => undefined,
|
|
86
|
+
}),
|
|
87
|
+
finish: () => okShim({ __mock: 'command-buffer' }),
|
|
88
|
+
}),
|
|
77
89
|
createBuffer: (desc: { size?: number }) => okShim({ __mock: 'buffer', size: desc.size ?? 0 }),
|
|
78
90
|
createTexture: () => {
|
|
79
91
|
probe.textures += 1;
|
|
@@ -84,9 +96,9 @@ function makeReadyDevice(probe: DeviceProbe): any {
|
|
|
84
96
|
},
|
|
85
97
|
createTextureView: () => okShim({ __mock: 'view' }),
|
|
86
98
|
queue: {
|
|
87
|
-
writeTexture: () => undefined,
|
|
88
|
-
writeBuffer: () => undefined,
|
|
89
|
-
submit: () => undefined,
|
|
99
|
+
writeTexture: () => okShim(undefined),
|
|
100
|
+
writeBuffer: () => okShim(undefined),
|
|
101
|
+
submit: () => okShim(undefined),
|
|
90
102
|
},
|
|
91
103
|
};
|
|
92
104
|
}
|
|
@@ -98,7 +110,11 @@ function makeFailingDevice(): any {
|
|
|
98
110
|
createShaderModule: () => okShim({ __mock: 'shader' }),
|
|
99
111
|
createTexture: () => ({ ok: false as const, error: undefined }),
|
|
100
112
|
createTextureView: () => ({ ok: false as const, error: undefined }),
|
|
101
|
-
queue: {
|
|
113
|
+
queue: {
|
|
114
|
+
writeTexture: () => okShim(undefined),
|
|
115
|
+
writeBuffer: () => okShim(undefined),
|
|
116
|
+
submit: () => okShim(undefined),
|
|
117
|
+
},
|
|
102
118
|
};
|
|
103
119
|
}
|
|
104
120
|
|
|
@@ -123,8 +139,8 @@ function equirectPod(width = 4, height = 2): EquirectAsset {
|
|
|
123
139
|
// by recordMainPass off the global cache views (out of scope for this unit test,
|
|
124
140
|
// covered by the dawn IBL readback test). This unit test asserts the lazy
|
|
125
141
|
// trigger's launch / dedup / caps-gate / fail-once-and-no-retry bookkeeping.
|
|
126
|
-
function configuredStore(device: unknown, caps: RhiCaps):
|
|
127
|
-
const store = new
|
|
142
|
+
function configuredStore(device: unknown, caps: RhiCaps): GpuResidencyCache {
|
|
143
|
+
const store = new GpuResidencyCache();
|
|
128
144
|
let next = 9000;
|
|
129
145
|
store.configureGpuDevice(
|
|
130
146
|
// biome-ignore lint/suspicious/noExplicitAny: mock device satisfies MipmapBlitDevice structurally
|
|
@@ -133,13 +149,18 @@ function configuredStore(device: unknown, caps: RhiCaps): GpuResourceStore {
|
|
|
133
149
|
(() => okShim(toShared<'EquirectAsset'>(next++))) as never,
|
|
134
150
|
caps,
|
|
135
151
|
);
|
|
152
|
+
store.configureIblDevice(
|
|
153
|
+
device as import('@forgeax/engine-rhi').RhiDevice,
|
|
154
|
+
async (_device, desc) => okShim({ __mock: 'shader', label: desc.label ?? '' }) as never,
|
|
155
|
+
);
|
|
156
|
+
store.bindDeviceScope(DeviceScope.create(0, 'skylight-lazy-test'));
|
|
136
157
|
return store;
|
|
137
158
|
}
|
|
138
159
|
|
|
139
160
|
// Minimal RenderSystemInternals surface driveLazyEquirectProjection touches:
|
|
140
161
|
// gpuStore, errorRegistry, device.caps. Everything else is unused by the arm.
|
|
141
162
|
function makeInternals(
|
|
142
|
-
store:
|
|
163
|
+
store: GpuResidencyCache,
|
|
143
164
|
errorRegistry: RhiErrorListenerRegistry,
|
|
144
165
|
caps: RhiCaps,
|
|
145
166
|
) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { AssetRegistry } from '@forgeax/engine-assets-runtime';
|
|
1
2
|
import { defineComponent, World } from '@forgeax/engine-ecs';
|
|
2
|
-
import
|
|
3
|
-
import { worldInstantiateScene } from '@forgeax/engine-scene';
|
|
3
|
+
import * as SceneOwner from '@forgeax/engine-scene';
|
|
4
4
|
import { describe, expect, it } from 'vitest';
|
|
5
5
|
import { rootsToSceneAsset } from '../collect-scene-asset';
|
|
6
6
|
import { registerSceneComponents } from './helpers/register-scene-components';
|
|
@@ -22,8 +22,8 @@ describe('sparse tag scene persistence', () => {
|
|
|
22
22
|
const entity = source
|
|
23
23
|
.spawn({ component: Selected, data: {} }, { component: RuntimeOnly, data: {} })
|
|
24
24
|
.unwrap();
|
|
25
|
-
const
|
|
26
|
-
const collected = rootsToSceneAsset(
|
|
25
|
+
const registry = {} as AssetRegistry;
|
|
26
|
+
const collected = rootsToSceneAsset(registry, source, [entity]).unwrap();
|
|
27
27
|
const components = collected.entities[0]?.components as
|
|
28
28
|
| Record<string, Record<string, unknown>>
|
|
29
29
|
| undefined;
|
|
@@ -34,7 +34,7 @@ describe('sparse tag scene persistence', () => {
|
|
|
34
34
|
const target = new World();
|
|
35
35
|
registerSceneComponents(target, [Selected, RuntimeOnly]);
|
|
36
36
|
const handle = target.allocSharedRef('SceneAsset', collected);
|
|
37
|
-
worldInstantiateScene(target, handle).unwrap();
|
|
37
|
+
SceneOwner.worldInstantiateScene(target, handle).unwrap();
|
|
38
38
|
expect(
|
|
39
39
|
Array.from(target.query({ with: [Selected] }).unwrap(), (row) => row.entity),
|
|
40
40
|
).toHaveLength(1);
|
|
@@ -20,19 +20,19 @@
|
|
|
20
20
|
// Anchors: plan-tasks m2-t5; plan-strategy §D-8 (sprite cullMode 'none')
|
|
21
21
|
// + §R-5 (sprite single-frame baseline non-degradation).
|
|
22
22
|
|
|
23
|
+
import { HANDLE_QUAD } from '@forgeax/engine-assets-runtime';
|
|
23
24
|
import { World } from '@forgeax/engine-ecs';
|
|
24
|
-
import { createPrimitiveMesh } from '@forgeax/engine-geometry';
|
|
25
|
-
import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from '@forgeax/engine-render/authoring';
|
|
26
25
|
import {
|
|
27
26
|
ANTIALIAS_NONE,
|
|
28
27
|
Camera,
|
|
29
28
|
MeshFilter,
|
|
30
29
|
MeshRenderer,
|
|
31
30
|
TONEMAP_NONE,
|
|
32
|
-
} from '@forgeax/engine-render
|
|
31
|
+
} from '@forgeax/engine-render';
|
|
32
|
+
import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from '@forgeax/engine-render/authoring';
|
|
33
33
|
import { Transform } from '@forgeax/engine-scene';
|
|
34
34
|
import { describe, expect, it } from 'vitest';
|
|
35
|
-
import {
|
|
35
|
+
import { constructRuntimeRendererHost } from '../renderer-host';
|
|
36
36
|
|
|
37
37
|
const WIDTH = 256;
|
|
38
38
|
const HEIGHT = 256;
|
|
@@ -94,7 +94,6 @@ function spawnFlippedSpriteScene(
|
|
|
94
94
|
sx: number,
|
|
95
95
|
sy: number,
|
|
96
96
|
): void {
|
|
97
|
-
const quadHandle = world.internSharedRef('MeshAsset', createPrimitiveMesh('quad').unwrap());
|
|
98
97
|
world.spawn(
|
|
99
98
|
{
|
|
100
99
|
component: Transform,
|
|
@@ -104,7 +103,7 @@ function spawnFlippedSpriteScene(
|
|
|
104
103
|
scale: [sx, sy, 1],
|
|
105
104
|
},
|
|
106
105
|
},
|
|
107
|
-
{ component: MeshFilter, data: { assetHandle:
|
|
106
|
+
{ component: MeshFilter, data: { assetHandle: HANDLE_QUAD } },
|
|
108
107
|
{ component: MeshRenderer, data: { materials: [spriteMaterial as never] } },
|
|
109
108
|
);
|
|
110
109
|
world.spawn(
|
|
@@ -207,21 +206,24 @@ describe('feat-20260608 M2 m2-t5: sprite pipeline cullMode "none" lets H/V flipp
|
|
|
207
206
|
removeEventListener() {},
|
|
208
207
|
} as unknown as HTMLCanvasElement;
|
|
209
208
|
|
|
210
|
-
let
|
|
209
|
+
let host: Awaited<ReturnType<typeof constructRuntimeRendererHost>>;
|
|
211
210
|
try {
|
|
212
|
-
|
|
211
|
+
host = await constructRuntimeRendererHost(
|
|
212
|
+
mockCanvas,
|
|
213
|
+
{},
|
|
214
|
+
{
|
|
215
|
+
shaderManifestUrl: ENGINE_MANIFEST_URL,
|
|
216
|
+
},
|
|
217
|
+
);
|
|
213
218
|
} finally {
|
|
214
219
|
globalThis.navigator.gpu.requestAdapter = originalRequestAdapter;
|
|
215
220
|
}
|
|
216
|
-
expect(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
221
|
+
expect(host.ok).toBe(true);
|
|
222
|
+
if (!host.ok) throw host.error;
|
|
223
|
+
const { renderer } = host.value;
|
|
224
|
+
expect(renderer.inspect().state).toBe('alive');
|
|
220
225
|
const device = sharedDevice;
|
|
221
226
|
if (device === undefined) throw new Error('GPUDevice not captured');
|
|
222
|
-
|
|
223
|
-
const assets = renderer.assets;
|
|
224
|
-
if (assets === null) throw new Error('AssetRegistry is null');
|
|
225
227
|
const worldFlip = new World();
|
|
226
228
|
|
|
227
229
|
const synth = buildSyntheticRgba();
|
|
@@ -235,17 +237,6 @@ describe('feat-20260608 M2 m2-t5: sprite pipeline cullMode "none" lets H/V flipp
|
|
|
235
237
|
mipmap: false,
|
|
236
238
|
};
|
|
237
239
|
const textureHandle = worldFlip.allocSharedRef('TextureAsset', synthPod as never);
|
|
238
|
-
const uploadRes = await renderer.store.uploadTexture(textureHandle, synthPod as never, {
|
|
239
|
-
bytes: synth.data,
|
|
240
|
-
width: synth.width,
|
|
241
|
-
height: synth.height,
|
|
242
|
-
mime: 'image/png',
|
|
243
|
-
colorSpace: 'srgb',
|
|
244
|
-
mipmap: false,
|
|
245
|
-
});
|
|
246
|
-
expect(uploadRes.ok, 'sprite texture upload').toBe(true);
|
|
247
|
-
if (!uploadRes.ok) return;
|
|
248
|
-
|
|
249
240
|
const samplerHandle = worldFlip.allocSharedRef('SamplerAsset', {
|
|
250
241
|
kind: 'sampler',
|
|
251
242
|
magFilter: 'linear',
|
|
@@ -281,14 +272,7 @@ describe('feat-20260608 M2 m2-t5: sprite pipeline cullMode "none" lets H/V flipp
|
|
|
281
272
|
// pivotAndSize / baseColorTexture). The legacy baseColor / texture /
|
|
282
273
|
// pivot field names lose their backwards-compat fold post-R1.
|
|
283
274
|
colorTint: [1.0, 1.0, 1.0, 1.0],
|
|
284
|
-
baseColorTexture:
|
|
285
|
-
texture: textureHandle,
|
|
286
|
-
coordinates: {
|
|
287
|
-
set: 0,
|
|
288
|
-
transform: { offset: [0, 0], scale: [1, 1], rotation: 0 },
|
|
289
|
-
physicalUvScale: [1, 1],
|
|
290
|
-
},
|
|
291
|
-
},
|
|
275
|
+
baseColorTexture: textureHandle,
|
|
292
276
|
sampler: samplerHandle,
|
|
293
277
|
region: [0, 0, 1, 1],
|
|
294
278
|
pivotAndSize: [0.5, 0.5, 1, 1],
|
|
@@ -298,9 +282,15 @@ describe('feat-20260608 M2 m2-t5: sprite pipeline cullMode "none" lets H/V flipp
|
|
|
298
282
|
// Render an H-flipped sprite (scale.x < 0). With cullMode='back' this
|
|
299
283
|
// would be culled and the centre would stay clear-colour-black.
|
|
300
284
|
spawnFlippedSpriteScene(worldFlip, spriteMaterial, /* sx= */ -1, /* sy= */ 1);
|
|
301
|
-
|
|
285
|
+
const attachment = renderer.attach(worldFlip);
|
|
286
|
+
expect(attachment.ok).toBe(true);
|
|
287
|
+
if (!attachment.ok) throw attachment.error;
|
|
302
288
|
worldFlip.update(1 / 60).unwrap();
|
|
303
|
-
const drawn = renderer.draw(
|
|
289
|
+
const drawn = renderer.draw({
|
|
290
|
+
leases: [attachment.value],
|
|
291
|
+
camera: { lease: attachment.value },
|
|
292
|
+
environment: { lease: attachment.value },
|
|
293
|
+
});
|
|
304
294
|
await device.queue.onSubmittedWorkDone();
|
|
305
295
|
expect(drawn.ok, 'H-flipped sprite draw').toBe(true);
|
|
306
296
|
|
|
@@ -369,21 +359,24 @@ describe('feat-20260608 M2 m2-t5: sprite pipeline cullMode "none" lets H/V flipp
|
|
|
369
359
|
removeEventListener() {},
|
|
370
360
|
} as unknown as HTMLCanvasElement;
|
|
371
361
|
|
|
372
|
-
let
|
|
362
|
+
let host: Awaited<ReturnType<typeof constructRuntimeRendererHost>>;
|
|
373
363
|
try {
|
|
374
|
-
|
|
364
|
+
host = await constructRuntimeRendererHost(
|
|
365
|
+
mockCanvas,
|
|
366
|
+
{},
|
|
367
|
+
{
|
|
368
|
+
shaderManifestUrl: ENGINE_MANIFEST_URL,
|
|
369
|
+
},
|
|
370
|
+
);
|
|
375
371
|
} finally {
|
|
376
372
|
globalThis.navigator.gpu.requestAdapter = originalRequestAdapter;
|
|
377
373
|
}
|
|
378
|
-
expect(
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
374
|
+
expect(host.ok).toBe(true);
|
|
375
|
+
if (!host.ok) throw host.error;
|
|
376
|
+
const { renderer } = host.value;
|
|
377
|
+
expect(renderer.inspect().state).toBe('alive');
|
|
382
378
|
const device = sharedDevice;
|
|
383
379
|
if (device === undefined) throw new Error('GPUDevice not captured');
|
|
384
|
-
|
|
385
|
-
const assets = renderer.assets;
|
|
386
|
-
if (assets === null) throw new Error('AssetRegistry is null');
|
|
387
380
|
const worldFlipBoth = new World();
|
|
388
381
|
|
|
389
382
|
const synth = buildSyntheticRgba();
|
|
@@ -397,15 +390,6 @@ describe('feat-20260608 M2 m2-t5: sprite pipeline cullMode "none" lets H/V flipp
|
|
|
397
390
|
mipmap: false,
|
|
398
391
|
};
|
|
399
392
|
const textureHandle = worldFlipBoth.allocSharedRef('TextureAsset', synthPod as never);
|
|
400
|
-
await renderer.store.uploadTexture(textureHandle, synthPod as never, {
|
|
401
|
-
bytes: synth.data,
|
|
402
|
-
width: synth.width,
|
|
403
|
-
height: synth.height,
|
|
404
|
-
mime: 'image/png',
|
|
405
|
-
colorSpace: 'srgb',
|
|
406
|
-
mipmap: false,
|
|
407
|
-
});
|
|
408
|
-
|
|
409
393
|
const samplerHandle = worldFlipBoth.allocSharedRef('SamplerAsset', {
|
|
410
394
|
kind: 'sampler',
|
|
411
395
|
magFilter: 'linear',
|
|
@@ -441,14 +425,7 @@ describe('feat-20260608 M2 m2-t5: sprite pipeline cullMode "none" lets H/V flipp
|
|
|
441
425
|
// pivotAndSize / baseColorTexture). The legacy baseColor / texture /
|
|
442
426
|
// pivot field names lose their backwards-compat fold post-R1.
|
|
443
427
|
colorTint: [1.0, 1.0, 1.0, 1.0],
|
|
444
|
-
baseColorTexture:
|
|
445
|
-
texture: textureHandle,
|
|
446
|
-
coordinates: {
|
|
447
|
-
set: 0,
|
|
448
|
-
transform: { offset: [0, 0], scale: [1, 1], rotation: 0 },
|
|
449
|
-
physicalUvScale: [1, 1],
|
|
450
|
-
},
|
|
451
|
-
},
|
|
428
|
+
baseColorTexture: textureHandle,
|
|
452
429
|
sampler: samplerHandle,
|
|
453
430
|
region: [0, 0, 1, 1],
|
|
454
431
|
pivotAndSize: [0.5, 0.5, 1, 1],
|
|
@@ -456,9 +433,15 @@ describe('feat-20260608 M2 m2-t5: sprite pipeline cullMode "none" lets H/V flipp
|
|
|
456
433
|
} as never);
|
|
457
434
|
|
|
458
435
|
spawnFlippedSpriteScene(worldFlipBoth, spriteMaterial, /* sx= */ -1, /* sy= */ -1);
|
|
459
|
-
|
|
436
|
+
const attachmentBoth = renderer.attach(worldFlipBoth);
|
|
437
|
+
expect(attachmentBoth.ok).toBe(true);
|
|
438
|
+
if (!attachmentBoth.ok) throw attachmentBoth.error;
|
|
460
439
|
worldFlipBoth.update(1 / 60).unwrap();
|
|
461
|
-
const drawn = renderer.draw(
|
|
440
|
+
const drawn = renderer.draw({
|
|
441
|
+
leases: [attachmentBoth.value],
|
|
442
|
+
camera: { lease: attachmentBoth.value },
|
|
443
|
+
environment: { lease: attachmentBoth.value },
|
|
444
|
+
});
|
|
462
445
|
await device.queue.onSubmittedWorkDone();
|
|
463
446
|
expect(drawn.ok).toBe(true);
|
|
464
447
|
|
|
@@ -15,14 +15,15 @@
|
|
|
15
15
|
// white texture; BGL JSON unchanged across sprite vs sprite-lit)
|
|
16
16
|
// - requirements AC-07
|
|
17
17
|
|
|
18
|
-
import
|
|
18
|
+
import { describe, expect, it } from 'vitest';
|
|
19
|
+
import { mergeSkylightIntoMaterialBgl } from '../../../render/src/ibl/skylight-bind-group';
|
|
19
20
|
import {
|
|
20
|
-
|
|
21
|
+
appendInjection,
|
|
21
22
|
buildPbrMaterialUserRegionEntries,
|
|
22
23
|
buildPbrViewBglEntries,
|
|
23
|
-
|
|
24
|
-
} from '
|
|
25
|
-
import {
|
|
24
|
+
} from '../../../render/src/pbr-pipeline';
|
|
25
|
+
import type { PipelineSpec } from '../../../render/src/pipeline-spec';
|
|
26
|
+
import { buildBindGroupLayoutDescriptor } from '../../../render/src/pipeline-spec';
|
|
26
27
|
|
|
27
28
|
function makeSpec(shaderId: string): PipelineSpec {
|
|
28
29
|
return {
|
|
@@ -46,7 +47,7 @@ function makeSpec(shaderId: string): PipelineSpec {
|
|
|
46
47
|
|
|
47
48
|
describe('sprite-lit BGL byte-identical to sprite (AC-07, w4/w5 close)', () => {
|
|
48
49
|
describe('pbr-view BGL (light buffers; binding 1+2)', () => {
|
|
49
|
-
it('sprite-lit vs sprite share the same
|
|
50
|
+
it('sprite-lit vs sprite share the same 10-entry pbr-view BGL under storage-buffer caps', () => {
|
|
50
51
|
const spriteSpec = makeSpec('forgeax::sprite');
|
|
51
52
|
const spriteLitSpec = makeSpec('forgeax::sprite-lit');
|
|
52
53
|
const sprite = buildBindGroupLayoutDescriptor(spriteSpec, {
|
|
@@ -58,10 +59,10 @@ describe('sprite-lit BGL byte-identical to sprite (AC-07, w4/w5 close)', () => {
|
|
|
58
59
|
caps: { storageBuffer: true },
|
|
59
60
|
});
|
|
60
61
|
expect(JSON.stringify(spriteLit)).toBe(JSON.stringify(sprite));
|
|
61
|
-
expect(spriteLit.entries.length).toBe(
|
|
62
|
+
expect(spriteLit.entries.length).toBe(10); // binding 10 is the shared Points/Lines view UBO
|
|
62
63
|
});
|
|
63
64
|
|
|
64
|
-
it('sprite-lit vs sprite share the same
|
|
65
|
+
it('sprite-lit vs sprite share the same 10-entry pbr-view BGL under uniform fallback caps (AC-10)', () => {
|
|
65
66
|
const spriteSpec = makeSpec('forgeax::sprite');
|
|
66
67
|
const spriteLitSpec = makeSpec('forgeax::sprite-lit');
|
|
67
68
|
const sprite = buildBindGroupLayoutDescriptor(spriteSpec, {
|
|
@@ -119,22 +120,22 @@ describe('sprite-lit BGL byte-identical to sprite (AC-07, w4/w5 close)', () => {
|
|
|
119
120
|
describe('material BGL congruence (pbr-material-merged / unlit-material)', () => {
|
|
120
121
|
it('pbr-material-user-region entries are 13 (PBR layout reused by sprite & sprite-lit)', () => {
|
|
121
122
|
// sprite + sprite-lit use the default standard-PBR user-region
|
|
122
|
-
// schema (
|
|
123
|
+
// schema (5 user fields produce 7 BGL entries after std140 merge).
|
|
123
124
|
// Both share the same userRegion shape and therefore the same BGL.
|
|
124
125
|
const base = buildPbrMaterialUserRegionEntries();
|
|
125
126
|
expect(base.length).toBe(13);
|
|
126
127
|
});
|
|
127
128
|
|
|
128
|
-
it('pbr-material-merged stays
|
|
129
|
+
it('pbr-material-merged stays 24 entries (sprite/sprite-lit do not change material BGL shape)', () => {
|
|
129
130
|
const merged = buildBindGroupLayoutDescriptor(makeSpec('forgeax::sprite-lit'), {
|
|
130
131
|
kind: 'pbr-material-merged',
|
|
131
132
|
});
|
|
132
|
-
expect(merged.entries.length).toBe(
|
|
133
|
-
// mergeSkylightIntoMaterialBgl
|
|
134
|
-
//
|
|
133
|
+
expect(merged.entries.length).toBe(24);
|
|
134
|
+
// mergeSkylightIntoMaterialBgl + lightmap injection must stay
|
|
135
|
+
// append-only against the 7-entry PBR base.
|
|
135
136
|
const base = buildPbrMaterialUserRegionEntries();
|
|
136
137
|
const afterSky = mergeSkylightIntoMaterialBgl(base);
|
|
137
|
-
const expected = afterSky;
|
|
138
|
+
const expected = [...afterSky, ...appendInjection(afterSky, 'lightmap')];
|
|
138
139
|
expect(merged.entries).toEqual(expected);
|
|
139
140
|
});
|
|
140
141
|
});
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
// - requirements AC-01 / AC-02 (post-rewrite)
|
|
27
27
|
|
|
28
28
|
import { fileURLToPath } from 'node:url';
|
|
29
|
-
import type { MaterialSnapshot } from '@forgeax/engine-render/internal';
|
|
30
29
|
import { describe, expect, it } from 'vitest';
|
|
30
|
+
import type { MaterialSnapshot } from '../../../render/src/render-system-extract';
|
|
31
31
|
|
|
32
32
|
describe('sprite-lit extract branch (D-9 remap, AC-02 + AC-01)', () => {
|
|
33
33
|
describe('sprite-lit routes via materialShaderId (AC-01 D-10 remap)', () => {
|
|
@@ -113,7 +113,7 @@ describe('sprite-lit pipeline cache-key string isolation (D-11 remap, AC-08)', (
|
|
|
113
113
|
// recognised material shader.
|
|
114
114
|
const fs = await import('node:fs');
|
|
115
115
|
const src = fs.readFileSync(
|
|
116
|
-
fileURLToPath(new URL('../../../render/src/
|
|
116
|
+
fileURLToPath(new URL('../../../render/src/assembly/factory.ts', import.meta.url)),
|
|
117
117
|
'utf8',
|
|
118
118
|
);
|
|
119
119
|
// Once t7 wires it, both literals appear (sprite already in tree).
|
|
@@ -22,15 +22,6 @@
|
|
|
22
22
|
// the existing 5-entry assertions in pipeline.unit.test.ts are migrated
|
|
23
23
|
// holistically (one-cut, no v1/v2 dual fixture).
|
|
24
24
|
|
|
25
|
-
import type { HdrpBuffers, RenderSystemRuntime } from '@forgeax/engine-render/internal';
|
|
26
|
-
import {
|
|
27
|
-
createHdrpBindGroupLayoutDescriptor,
|
|
28
|
-
createHdrpClusterMembershipBindGroup,
|
|
29
|
-
createHdrpClusterMembershipBindGroupLayoutDescriptor,
|
|
30
|
-
createHdrpUnifiedBindGroup,
|
|
31
|
-
getOrCreateSsaoFallbackTexture,
|
|
32
|
-
packClusterUniform,
|
|
33
|
-
} from '@forgeax/engine-render/internal';
|
|
34
25
|
import type {
|
|
35
26
|
BindGroupLayout,
|
|
36
27
|
Buffer,
|
|
@@ -40,6 +31,16 @@ import type {
|
|
|
40
31
|
TextureView,
|
|
41
32
|
} from '@forgeax/engine-rhi';
|
|
42
33
|
import { describe, expect, it, vi } from 'vitest';
|
|
34
|
+
import type { HdrpBuffers } from '../../../render/src/hdrp-buffers';
|
|
35
|
+
import {
|
|
36
|
+
createHdrpClusterMembershipBindGroup,
|
|
37
|
+
createHdrpClusterMembershipBindGroupLayoutDescriptor,
|
|
38
|
+
createHdrpUnifiedBindGroup,
|
|
39
|
+
getOrCreateSsaoFallbackTexture,
|
|
40
|
+
packClusterUniform,
|
|
41
|
+
} from '../../../render/src/hdrp-buffers';
|
|
42
|
+
import { createHdrpBindGroupLayoutDescriptor } from '../../../render/src/pipeline-spec';
|
|
43
|
+
import type { RenderSystemRuntime } from '../../../render/src/render-system';
|
|
43
44
|
|
|
44
45
|
const FRAGMENT_VISIBILITY = 0x2;
|
|
45
46
|
const COMPUTE_VISIBILITY = 0x4;
|
|
@@ -160,6 +161,12 @@ describe('HDRP GPU membership producer bind-group contract', () => {
|
|
|
160
161
|
expect(storagePayload[3]).toBe(256);
|
|
161
162
|
});
|
|
162
163
|
|
|
164
|
+
it('keeps enabled SSAO intensity in the zero-punctual-light uniform path', () => {
|
|
165
|
+
const payload = new Float32Array(packClusterUniform({ x: 16, y: 9, z: 24 }, 0.1, 50, 1, 0));
|
|
166
|
+
expect(payload[3]).toBe(0);
|
|
167
|
+
expect(payload[7]).toBe(1);
|
|
168
|
+
});
|
|
169
|
+
|
|
163
170
|
it('uses four compute-only bindings with read-write membership output', () => {
|
|
164
171
|
const desc = createHdrpClusterMembershipBindGroupLayoutDescriptor();
|
|
165
172
|
expect(desc.entries?.map((entry) => entry.binding)).toEqual([0, 1, 2, 3]);
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
//
|
|
10
10
|
// AC-05 anchor: lazy alloc + hdrp-ssao-* labels + call-count assertions.
|
|
11
11
|
|
|
12
|
-
import type { RenderSystemRuntime } from '@forgeax/engine-render/internal';
|
|
13
|
-
import { getOrCreateSsaoBuffers } from '@forgeax/engine-render/internal';
|
|
14
12
|
import type { Buffer, RhiCaps, RhiDevice, Texture } from '@forgeax/engine-rhi';
|
|
15
13
|
import { describe, expect, it, vi } from 'vitest';
|
|
14
|
+
import type { RenderSystemRuntime } from '../../../render/src/render-system';
|
|
15
|
+
import { getOrCreateSsaoBuffers } from '../../../render/src/ssao-buffers';
|
|
16
16
|
|
|
17
17
|
function mockTexture(label?: string): Texture {
|
|
18
18
|
return { label: label ?? 'mock-tex' } as unknown as Texture;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// ssao-
|
|
1
|
+
// ssao-kernel.test.ts -- M1 / w1: kernel distribution test (TDD red phase).
|
|
2
2
|
//
|
|
3
3
|
// Asserts:
|
|
4
4
|
// - generateSsaoKernel() returns 64 vec3 samples.
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
//
|
|
11
11
|
// AC-03 anchor: kernel length 64 + distribution properties.
|
|
12
12
|
|
|
13
|
-
import { generateSsaoKernel, generateSsaoNoise } from '@forgeax/engine-render/internal';
|
|
14
13
|
import { describe, expect, it } from 'vitest';
|
|
14
|
+
import { generateSsaoKernel, generateSsaoNoise } from '../../../render/src/ssao-buffers';
|
|
15
15
|
|
|
16
16
|
function readFloat(v: Float32Array, idx: number): number {
|
|
17
17
|
const val = v[idx];
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
// RED before w10 (SSAO codes not yet added to PostProcessErrorCode).
|
|
18
18
|
// GREEN after w10 extends the union.
|
|
19
19
|
|
|
20
|
-
import { PostProcessError } from '@forgeax/engine-render/internal';
|
|
21
20
|
import { describe, expect, it } from 'vitest';
|
|
21
|
+
import { PostProcessError } from '../../../render/src/post-process-errors';
|
|
22
22
|
|
|
23
23
|
describe('SSAO PostProcessErrorCode exhaustive switch (M2 / w9)', () => {
|
|
24
24
|
it('(a) PostProcessErrorCode union has the 2 SSAO validation members', () => {
|