@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
|
@@ -30,35 +30,11 @@
|
|
|
30
30
|
// plan-strategy §2 D-3 (explicit `{ cameraOwner, resourceOwner }` required
|
|
31
31
|
// indices) + §5.3 key test point + §3.3 interface example
|
|
32
32
|
|
|
33
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
34
|
-
import { dirname, resolve } from 'node:path';
|
|
35
|
-
import { fileURLToPath } from 'node:url';
|
|
36
33
|
import { World } from '@forgeax/engine-ecs';
|
|
37
|
-
import { Camera,
|
|
34
|
+
import { Camera, Skylight } from '@forgeax/engine-render';
|
|
38
35
|
import { Transform } from '@forgeax/engine-scene';
|
|
39
36
|
import { describe, expect, it } from 'vitest';
|
|
40
|
-
|
|
41
|
-
const TEST_DIR = dirname(fileURLToPath(import.meta.url));
|
|
42
|
-
const REPO_ROOT = resolve(TEST_DIR, '../../../..');
|
|
43
|
-
const LEGACY_EXTRACT_PATH = resolve(REPO_ROOT, 'packages/render/src/extract/render-system.ts');
|
|
44
|
-
const CANONICAL_EXTRACT_PATH = resolve(REPO_ROOT, 'packages/render/src/render-system-extract.ts');
|
|
45
|
-
const EXTRACT_GATE_PATH = resolve(
|
|
46
|
-
REPO_ROOT,
|
|
47
|
-
'scripts/forgeax/check-render-extract-single-query.mjs',
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
describe('render extract M1-R0 cohesion gate', () => {
|
|
51
|
-
it('requires the extract owner to live below src/extract', () => {
|
|
52
|
-
expect(existsSync(CANONICAL_EXTRACT_PATH)).toBe(true);
|
|
53
|
-
expect(existsSync(LEGACY_EXTRACT_PATH)).toBe(false);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('points the single-query gate at the canonical extract owner', () => {
|
|
57
|
-
const gate = readFileSync(EXTRACT_GATE_PATH, 'utf8');
|
|
58
|
-
expect(gate).toContain('packages/render/src/render-system-extract.ts');
|
|
59
|
-
expect(gate).not.toContain('packages/render/src/extract/render-system.ts');
|
|
60
|
-
});
|
|
61
|
-
});
|
|
37
|
+
import { extractFrames } from '../../../render/src/render-system-extract';
|
|
62
38
|
|
|
63
39
|
// The two-index owner shape w4-w6 will introduce. Declared locally so this
|
|
64
40
|
// test states the contract independent of the (not-yet-updated) source type.
|
|
@@ -131,8 +107,9 @@ describe('extractFrames camera-owner / resource-owner split contract (w1, AC-08)
|
|
|
131
107
|
// Skylight is surfaced from B (resourceOwner=1) — recognisable by intensity.
|
|
132
108
|
// If skylight were (wrongly) read from cameraOwner world A, it would be
|
|
133
109
|
// undefined (A has no skylight), so this assertion has discriminating power.
|
|
134
|
-
expect(frame.
|
|
135
|
-
expect(frame.
|
|
110
|
+
expect(frame.skylight).toBeDefined();
|
|
111
|
+
expect(frame.skylight?.intensity).toBeCloseTo(SKYLIGHT_B_INTENSITY);
|
|
112
|
+
expect(frame.skylightCount).toBe(1);
|
|
136
113
|
});
|
|
137
114
|
|
|
138
115
|
// ── Combination 2: same world is both owners (degenerate — old owner semantics) ──
|
|
@@ -173,10 +150,10 @@ describe('extractFrames camera-owner / resource-owner split contract (w1, AC-08)
|
|
|
173
150
|
// Both camera and singleton resource resolve from world 0 only.
|
|
174
151
|
expect(frame.cameras.length).toBe(1);
|
|
175
152
|
expect(frame.cameras[0]?.far).toBe(CAMERA_A_FAR);
|
|
176
|
-
expect(frame.
|
|
153
|
+
expect(frame.skylight?.intensity).toBeCloseTo(SKYLIGHT_B_INTENSITY);
|
|
177
154
|
// skylightCount reports the OWNER (resource) world's live skylight count,
|
|
178
155
|
// not the other world's — proves no cross-world leak in the degenerate case.
|
|
179
|
-
expect(frame.
|
|
156
|
+
expect(frame.skylightCount).toBe(1);
|
|
180
157
|
});
|
|
181
158
|
|
|
182
159
|
// ── Combination 3: owners swapped — camera from B, resource from A ──
|
|
@@ -194,7 +171,8 @@ describe('extractFrames camera-owner / resource-owner split contract (w1, AC-08)
|
|
|
194
171
|
// Skylight surfaced from world0 (resourceOwner=0). If the code read skylight
|
|
195
172
|
// from cameraOwner (world1, no skylight) this would be undefined — so the
|
|
196
173
|
// swap direction is genuinely exercised.
|
|
197
|
-
expect(frame.
|
|
198
|
-
expect(frame.
|
|
174
|
+
expect(frame.skylight).toBeDefined();
|
|
175
|
+
expect(frame.skylight?.intensity).toBeCloseTo(SKYLIGHT_B_INTENSITY);
|
|
176
|
+
expect(frame.skylightCount).toBe(1);
|
|
199
177
|
});
|
|
200
178
|
});
|
|
@@ -33,7 +33,6 @@ import type { World as WorldType } from '@forgeax/engine-ecs';
|
|
|
33
33
|
import type { Renderer as RendererType } from '@forgeax/engine-render';
|
|
34
34
|
import type { Handle, MaterialAsset, MeshAsset, TextureAsset } from '@forgeax/engine-types';
|
|
35
35
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
36
|
-
import { registerRuntimeComponents } from './helpers/register-runtime-components';
|
|
37
36
|
|
|
38
37
|
function canonicalTestMeshAttributes(vertexCount: number) {
|
|
39
38
|
return {
|
|
@@ -236,22 +235,52 @@ function buildManifestDataUrl(): string {
|
|
|
236
235
|
}
|
|
237
236
|
|
|
238
237
|
interface RendererLike {
|
|
239
|
-
|
|
238
|
+
subscribe: RendererType['subscribe'];
|
|
240
239
|
draw: (worlds: unknown, opts: { cameraOwner: number; resourceOwner: number }) => void;
|
|
241
|
-
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function unwrapRendererError(value: unknown): { code: string; detail?: unknown } {
|
|
243
|
+
let current = value as { code: string; detail?: unknown };
|
|
244
|
+
while (
|
|
245
|
+
current.detail !== undefined &&
|
|
246
|
+
typeof current.detail === 'object' &&
|
|
247
|
+
current.detail !== null
|
|
248
|
+
) {
|
|
249
|
+
const cause = (current.detail as { cause?: unknown }).cause;
|
|
250
|
+
if (
|
|
251
|
+
cause === undefined ||
|
|
252
|
+
typeof cause !== 'object' ||
|
|
253
|
+
cause === null ||
|
|
254
|
+
typeof (cause as { code?: unknown }).code !== 'string'
|
|
255
|
+
) {
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
current = cause as { code: string; detail?: unknown };
|
|
259
|
+
}
|
|
260
|
+
return current;
|
|
242
261
|
}
|
|
243
262
|
|
|
244
263
|
async function importEngine(): Promise<{
|
|
245
|
-
createRenderer: (
|
|
264
|
+
createRenderer: (...args: readonly unknown[]) => Promise<RendererLike>;
|
|
246
265
|
}> {
|
|
247
|
-
|
|
266
|
+
const engine = (await import('../createRenderer')) as {
|
|
267
|
+
createRenderer: (...args: readonly unknown[]) => Promise<unknown>;
|
|
268
|
+
};
|
|
269
|
+
return {
|
|
270
|
+
createRenderer: async (...args: readonly unknown[]) => {
|
|
271
|
+
const result = (await engine.createRenderer(...args)) as
|
|
272
|
+
| { readonly ok: true; readonly value: unknown }
|
|
273
|
+
| { readonly ok: false; readonly error: unknown };
|
|
274
|
+
if (!result.ok) throw result.error;
|
|
275
|
+
return result.value as RendererLike;
|
|
276
|
+
},
|
|
277
|
+
};
|
|
248
278
|
}
|
|
249
279
|
|
|
250
280
|
async function importEcs(): Promise<{
|
|
251
281
|
World: new () => {
|
|
252
282
|
spawn: (...componentDatas: unknown[]) => unknown;
|
|
253
283
|
allocSharedRef: <Target extends string, T>(target: Target, payload: T) => number;
|
|
254
|
-
components: WorldType['components'];
|
|
255
284
|
};
|
|
256
285
|
}> {
|
|
257
286
|
return (await import('@forgeax/engine-ecs')) as never;
|
|
@@ -265,7 +294,7 @@ async function importComponents(): Promise<{
|
|
|
265
294
|
DirectionalLight: unknown;
|
|
266
295
|
}> {
|
|
267
296
|
return {
|
|
268
|
-
...(await import('@forgeax/engine-render
|
|
297
|
+
...(await import('@forgeax/engine-render')),
|
|
269
298
|
...(await import('@forgeax/engine-scene')),
|
|
270
299
|
} as never;
|
|
271
300
|
}
|
|
@@ -354,7 +383,6 @@ async function setupRenderer(
|
|
|
354
383
|
shaderManifestUrl: buildManifestDataUrl(),
|
|
355
384
|
},
|
|
356
385
|
);
|
|
357
|
-
await renderer.ready;
|
|
358
386
|
return { renderer };
|
|
359
387
|
}
|
|
360
388
|
|
|
@@ -362,7 +390,6 @@ async function spawnPbrMultiMaterialScene(): Promise<unknown> {
|
|
|
362
390
|
const { World } = await importEcs();
|
|
363
391
|
const C = await importComponents();
|
|
364
392
|
const world = new World();
|
|
365
|
-
registerRuntimeComponents(world);
|
|
366
393
|
|
|
367
394
|
// Mint the 3-submesh mesh as a user-tier column handle.
|
|
368
395
|
const meshHandle = world.allocSharedRef('MeshAsset', threeSubmeshMesh()) as unknown as Handle<
|
|
@@ -383,6 +410,12 @@ async function spawnPbrMultiMaterialScene(): Promise<unknown> {
|
|
|
383
410
|
>,
|
|
384
411
|
);
|
|
385
412
|
}
|
|
413
|
+
// Use numeric handles directly in values. Strings are not resolved
|
|
414
|
+
// by render-system-extract (which gates on
|
|
415
|
+
// `typeof pv.baseColorTexture === 'number'`); only the disk-pack
|
|
416
|
+
// materialLoader resolves refs[]-index. Tests targeting the in-memory
|
|
417
|
+
// extract path must pass numeric handles.
|
|
418
|
+
|
|
386
419
|
// Mint 3 distinct PBR materials, each pointing at a different
|
|
387
420
|
// baseColorTexture handle. shadingModel is 'standard' so the non-sprite
|
|
388
421
|
// branch in record fires; this is the branch that builds the BG with
|
|
@@ -402,14 +435,7 @@ async function spawnPbrMultiMaterialScene(): Promise<unknown> {
|
|
|
402
435
|
baseColor: [1, 1, 1],
|
|
403
436
|
metallic: 0,
|
|
404
437
|
roughness: 0.5,
|
|
405
|
-
baseColorTexture:
|
|
406
|
-
texture: textureHandles[i] as unknown as string,
|
|
407
|
-
coordinates: {
|
|
408
|
-
set: 0,
|
|
409
|
-
transform: { offset: [0, 0], scale: [1, 1], rotation: 0 },
|
|
410
|
-
physicalUvScale: [1, 1],
|
|
411
|
-
},
|
|
412
|
-
},
|
|
438
|
+
baseColorTexture: textureHandles[i] as unknown as number,
|
|
413
439
|
},
|
|
414
440
|
} as unknown as MaterialAsset) as unknown as Handle<'MaterialAsset', 'shared'>;
|
|
415
441
|
materialHandles.push(matHandle);
|
|
@@ -433,7 +459,7 @@ async function spawnPbrMultiMaterialScene(): Promise<unknown> {
|
|
|
433
459
|
{ component: C.Transform, data: cameraTransform() },
|
|
434
460
|
);
|
|
435
461
|
world.spawn(
|
|
436
|
-
{ component: C.DirectionalLight, data: {
|
|
462
|
+
{ component: C.DirectionalLight, data: {} },
|
|
437
463
|
{ component: C.Transform, data: cameraTransform() },
|
|
438
464
|
);
|
|
439
465
|
world.spawn(
|
|
@@ -458,16 +484,18 @@ describe('record: per-submesh PBR material BG textureView (bug-20260610 D2 regre
|
|
|
458
484
|
const spies = makeSpies();
|
|
459
485
|
const { renderer } = await setupRenderer(spies);
|
|
460
486
|
const errors: string[] = [];
|
|
461
|
-
renderer.
|
|
487
|
+
renderer.subscribe((event) => {
|
|
488
|
+
if (event.kind === 'error') errors.push(event.error.code);
|
|
489
|
+
});
|
|
462
490
|
|
|
463
491
|
const world = await spawnPbrMultiMaterialScene();
|
|
464
|
-
if (!(renderer as unknown as RendererType).
|
|
492
|
+
if (!(renderer as unknown as RendererType).attach(world as WorldType).ok) {
|
|
465
493
|
throw new Error('World attachment failed');
|
|
466
494
|
}
|
|
467
495
|
(world as WorldType).update().unwrap();
|
|
468
496
|
renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
|
|
469
497
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
470
|
-
if (!(renderer as unknown as RendererType).
|
|
498
|
+
if (!(renderer as unknown as RendererType).attach(world as WorldType).ok) {
|
|
471
499
|
throw new Error('World attachment failed');
|
|
472
500
|
}
|
|
473
501
|
(world as WorldType).update().unwrap();
|
|
@@ -484,14 +512,6 @@ describe('record: per-submesh PBR material BG textureView (bug-20260610 D2 regre
|
|
|
484
512
|
// GREEN at C3: 3 calls, one per submesh's distinct material.
|
|
485
513
|
expect(pbrBgCalls.length).toBeGreaterThanOrEqual(3);
|
|
486
514
|
|
|
487
|
-
// Compact authored material values still bind the full shared PBR UBO;
|
|
488
|
-
// binding a 32-byte authored slot against the 288-byte shader layout
|
|
489
|
-
// invalidates the command buffer before any pixels are produced.
|
|
490
|
-
for (const call of pbrBgCalls) {
|
|
491
|
-
const binding0 = call.entries.find((e) => e.binding === 0);
|
|
492
|
-
expect(binding0?.resource).toMatchObject({ size: 288 });
|
|
493
|
-
}
|
|
494
|
-
|
|
495
515
|
// Assertion (b): the binding-2 (baseColor) textureView resources are
|
|
496
516
|
// pairwise distinct across the 3 calls. RED at C2: only one call exists
|
|
497
517
|
// so the set size is 1; GREEN at C3: each call's binding-2 references a
|
|
@@ -530,12 +550,11 @@ describe('record: per-submesh PBR material BG textureView (bug-20260610 D2 regre
|
|
|
530
550
|
// to the 1x1 white view silently -- rendering flat with no warn / RhiError,
|
|
531
551
|
// which is exactly what made the "GLB renders flat" symptom undiagnosable.
|
|
532
552
|
// The record path now mirrors the sprite telemetry: warn-once console.warn +
|
|
533
|
-
// per-frame RhiError('asset-not-registered') +
|
|
553
|
+
// per-frame RhiError('asset-not-registered') + debug-pink baseColor override.
|
|
534
554
|
async function spawnPbrMissingTextureScene(): Promise<unknown> {
|
|
535
555
|
const { World } = await importEcs();
|
|
536
556
|
const C = await importComponents();
|
|
537
557
|
const world = new World();
|
|
538
|
-
registerRuntimeComponents(world);
|
|
539
558
|
|
|
540
559
|
// Single-submesh mesh so materials.length (1) matches submeshes.length (1)
|
|
541
560
|
// and the entity passes the material-count-mismatch gate to reach the
|
|
@@ -562,7 +581,7 @@ async function spawnPbrMissingTextureScene(): Promise<unknown> {
|
|
|
562
581
|
// maxTextureDimension2D of 1 while this texture is 2x2. This is the exact
|
|
563
582
|
// "handle present, GPU capability refusal" condition the record-stage
|
|
564
583
|
// telemetry guards -- the structured ImageError must survive alongside the
|
|
565
|
-
//
|
|
584
|
+
// existing debug-pink fallback.
|
|
566
585
|
const unresidentTexture = {
|
|
567
586
|
kind: 'texture',
|
|
568
587
|
width: 2,
|
|
@@ -590,14 +609,7 @@ async function spawnPbrMissingTextureScene(): Promise<unknown> {
|
|
|
590
609
|
baseColor: [1, 1, 1],
|
|
591
610
|
metallic: 0,
|
|
592
611
|
roughness: 0.5,
|
|
593
|
-
baseColorTexture:
|
|
594
|
-
texture: badTexHandleId as unknown as string,
|
|
595
|
-
coordinates: {
|
|
596
|
-
set: 0,
|
|
597
|
-
transform: { offset: [0, 0], scale: [1, 1], rotation: 0 },
|
|
598
|
-
physicalUvScale: [1, 1],
|
|
599
|
-
},
|
|
600
|
-
},
|
|
612
|
+
baseColorTexture: badTexHandleId,
|
|
601
613
|
},
|
|
602
614
|
} as unknown as MaterialAsset) as unknown as Handle<'MaterialAsset', 'shared'>;
|
|
603
615
|
|
|
@@ -619,7 +631,7 @@ async function spawnPbrMissingTextureScene(): Promise<unknown> {
|
|
|
619
631
|
{ component: C.Transform, data: cameraTransform() },
|
|
620
632
|
);
|
|
621
633
|
world.spawn(
|
|
622
|
-
{ component: C.DirectionalLight, data: {
|
|
634
|
+
{ component: C.DirectionalLight, data: {} },
|
|
623
635
|
{ component: C.Transform, data: cameraTransform() },
|
|
624
636
|
);
|
|
625
637
|
world.spawn(
|
|
@@ -644,7 +656,9 @@ describe('record: PBR missing baseColorTexture telemetry (feat-future-pbr-missin
|
|
|
644
656
|
const spies = makeSpies();
|
|
645
657
|
const { renderer } = await setupRenderer(spies, 1);
|
|
646
658
|
const errors: Array<{ code: string; detail?: unknown }> = [];
|
|
647
|
-
renderer.
|
|
659
|
+
renderer.subscribe((event) => {
|
|
660
|
+
if (event.kind === 'error') errors.push(unwrapRendererError(event.error));
|
|
661
|
+
});
|
|
648
662
|
|
|
649
663
|
const { world, badTexHandleId } = (await spawnPbrMissingTextureScene()) as {
|
|
650
664
|
world: unknown;
|
|
@@ -654,12 +668,12 @@ describe('record: PBR missing baseColorTexture telemetry (feat-future-pbr-missin
|
|
|
654
668
|
// Two frames: the RhiError fires per-frame (machine-readable signal), but
|
|
655
669
|
// the console.warn fires exactly once (warn-once across RenderSystem
|
|
656
670
|
// lifetime -- signal/noise floor, charter P3).
|
|
657
|
-
if (!(renderer as unknown as RendererType).
|
|
671
|
+
if (!(renderer as unknown as RendererType).attach(world as WorldType).ok) {
|
|
658
672
|
throw new Error('World attachment failed');
|
|
659
673
|
}
|
|
660
674
|
(world as WorldType).update().unwrap();
|
|
661
675
|
renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
|
|
662
|
-
if (!(renderer as unknown as RendererType).
|
|
676
|
+
if (!(renderer as unknown as RendererType).attach(world as WorldType).ok) {
|
|
663
677
|
throw new Error('World attachment failed');
|
|
664
678
|
}
|
|
665
679
|
(world as WorldType).update().unwrap();
|
|
@@ -676,7 +690,7 @@ describe('record: PBR missing baseColorTexture telemetry (feat-future-pbr-missin
|
|
|
676
690
|
String(c[0]).includes('baseColor texture'),
|
|
677
691
|
);
|
|
678
692
|
expect(baseColorWarns.length).toBe(1);
|
|
679
|
-
expect(String(baseColorWarns[0]?.[0])).toContain('
|
|
693
|
+
expect(String(baseColorWarns[0]?.[0])).toContain('debug pink');
|
|
680
694
|
} finally {
|
|
681
695
|
warnSpy.mockRestore();
|
|
682
696
|
}
|
|
@@ -26,7 +26,6 @@ import type { World as WorldType } from '@forgeax/engine-ecs';
|
|
|
26
26
|
import type { Renderer as RendererType } from '@forgeax/engine-render';
|
|
27
27
|
import type { Handle, MaterialAsset, MeshAsset, TextureAsset } from '@forgeax/engine-types';
|
|
28
28
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
29
|
-
import { registerRuntimeComponents } from './helpers/register-runtime-components';
|
|
30
29
|
|
|
31
30
|
function canonicalTestMeshAttributes(vertexCount: number) {
|
|
32
31
|
return {
|
|
@@ -200,21 +199,30 @@ function buildManifestDataUrl(): string {
|
|
|
200
199
|
}
|
|
201
200
|
|
|
202
201
|
interface RendererLike {
|
|
203
|
-
|
|
202
|
+
subscribe: RendererType['subscribe'];
|
|
204
203
|
draw: (worlds: unknown, opts: { cameraOwner: number; resourceOwner: number }) => void;
|
|
205
|
-
onError: (cb: (err: { code: string }) => void) => () => void;
|
|
206
204
|
}
|
|
207
205
|
|
|
208
206
|
async function importEngine(): Promise<{
|
|
209
|
-
createRenderer: (
|
|
207
|
+
createRenderer: (...args: readonly unknown[]) => Promise<RendererLike>;
|
|
210
208
|
}> {
|
|
211
|
-
|
|
209
|
+
const engine = (await import('../createRenderer')) as {
|
|
210
|
+
createRenderer: (...args: readonly unknown[]) => Promise<unknown>;
|
|
211
|
+
};
|
|
212
|
+
return {
|
|
213
|
+
createRenderer: async (...args: readonly unknown[]) => {
|
|
214
|
+
const result = (await engine.createRenderer(...args)) as
|
|
215
|
+
| { readonly ok: true; readonly value: unknown }
|
|
216
|
+
| { readonly ok: false; readonly error: unknown };
|
|
217
|
+
if (!result.ok) throw result.error;
|
|
218
|
+
return result.value as RendererLike;
|
|
219
|
+
},
|
|
220
|
+
};
|
|
212
221
|
}
|
|
213
222
|
async function importEcs(): Promise<{
|
|
214
223
|
World: new () => {
|
|
215
224
|
spawn: (...componentDatas: unknown[]) => unknown;
|
|
216
225
|
allocSharedRef: <Target extends string, T>(target: Target, payload: T) => number;
|
|
217
|
-
components: WorldType['components'];
|
|
218
226
|
};
|
|
219
227
|
}> {
|
|
220
228
|
return (await import('@forgeax/engine-ecs')) as never;
|
|
@@ -227,7 +235,7 @@ async function importComponents(): Promise<{
|
|
|
227
235
|
DirectionalLight: unknown;
|
|
228
236
|
}> {
|
|
229
237
|
return {
|
|
230
|
-
...(await import('@forgeax/engine-render
|
|
238
|
+
...(await import('@forgeax/engine-render')),
|
|
231
239
|
...(await import('@forgeax/engine-scene')),
|
|
232
240
|
} as never;
|
|
233
241
|
}
|
|
@@ -290,7 +298,6 @@ async function setupRenderer(spies: DeviceSpies): Promise<{ renderer: RendererLi
|
|
|
290
298
|
{},
|
|
291
299
|
{ shaderManifestUrl: buildManifestDataUrl() },
|
|
292
300
|
);
|
|
293
|
-
await renderer.ready;
|
|
294
301
|
return { renderer };
|
|
295
302
|
}
|
|
296
303
|
|
|
@@ -304,7 +311,6 @@ async function spawnMixedTransparentScene(): Promise<{
|
|
|
304
311
|
const { World } = await importEcs();
|
|
305
312
|
const C = await importComponents();
|
|
306
313
|
const world = new World();
|
|
307
|
-
registerRuntimeComponents(world);
|
|
308
314
|
|
|
309
315
|
const meshHandle = world.allocSharedRef('MeshAsset', twoSubmeshMesh()) as unknown as Handle<
|
|
310
316
|
'MeshAsset',
|
|
@@ -327,14 +333,7 @@ async function spawnMixedTransparentScene(): Promise<{
|
|
|
327
333
|
baseColor: [1, 1, 1],
|
|
328
334
|
metallic: 0,
|
|
329
335
|
roughness: 0.5,
|
|
330
|
-
baseColorTexture:
|
|
331
|
-
texture: opaqueTexHandle as unknown as string,
|
|
332
|
-
coordinates: {
|
|
333
|
-
set: 0,
|
|
334
|
-
transform: { offset: [0, 0], scale: [1, 1], rotation: 0 },
|
|
335
|
-
physicalUvScale: [1, 1],
|
|
336
|
-
},
|
|
337
|
-
},
|
|
336
|
+
baseColorTexture: opaqueTexHandle,
|
|
338
337
|
},
|
|
339
338
|
} as unknown as MaterialAsset) as unknown as Handle<'MaterialAsset', 'shared'>;
|
|
340
339
|
|
|
@@ -363,14 +362,7 @@ async function spawnMixedTransparentScene(): Promise<{
|
|
|
363
362
|
baseColor: [1, 1, 1],
|
|
364
363
|
metallic: 0,
|
|
365
364
|
roughness: 0.5,
|
|
366
|
-
baseColorTexture:
|
|
367
|
-
texture: blendTexHandle as unknown as string,
|
|
368
|
-
coordinates: {
|
|
369
|
-
set: 0,
|
|
370
|
-
transform: { offset: [0, 0], scale: [1, 1], rotation: 0 },
|
|
371
|
-
physicalUvScale: [1, 1],
|
|
372
|
-
},
|
|
373
|
-
},
|
|
365
|
+
baseColorTexture: blendTexHandle,
|
|
374
366
|
},
|
|
375
367
|
} as unknown as MaterialAsset) as unknown as Handle<'MaterialAsset', 'shared'>;
|
|
376
368
|
|
|
@@ -392,7 +384,7 @@ async function spawnMixedTransparentScene(): Promise<{
|
|
|
392
384
|
{ component: C.Transform, data: cameraTransform() },
|
|
393
385
|
);
|
|
394
386
|
world.spawn(
|
|
395
|
-
{ component: C.DirectionalLight, data: {
|
|
387
|
+
{ component: C.DirectionalLight, data: {} },
|
|
396
388
|
{ component: C.Transform, data: cameraTransform() },
|
|
397
389
|
);
|
|
398
390
|
world.spawn(
|
|
@@ -419,16 +411,18 @@ describe('record: per-submesh transparency (feat-city-glb Bug 5)', () => {
|
|
|
419
411
|
const spies = makeSpies();
|
|
420
412
|
const { renderer } = await setupRenderer(spies);
|
|
421
413
|
const errors: string[] = [];
|
|
422
|
-
renderer.
|
|
414
|
+
renderer.subscribe((event) => {
|
|
415
|
+
if (event.kind === 'error') errors.push(event.error.code);
|
|
416
|
+
});
|
|
423
417
|
|
|
424
418
|
const { world } = await spawnMixedTransparentScene();
|
|
425
|
-
if (!(renderer as unknown as RendererType).
|
|
419
|
+
if (!(renderer as unknown as RendererType).attach(world as WorldType).ok) {
|
|
426
420
|
throw new Error('World attachment failed');
|
|
427
421
|
}
|
|
428
422
|
(world as WorldType).update().unwrap();
|
|
429
423
|
renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
|
|
430
424
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
431
|
-
if (!(renderer as unknown as RendererType).
|
|
425
|
+
if (!(renderer as unknown as RendererType).attach(world as WorldType).ok) {
|
|
432
426
|
throw new Error('World attachment failed');
|
|
433
427
|
}
|
|
434
428
|
(world as WorldType).update().unwrap();
|