@forgeax/engine-runtime 0.0.0-dev.8d955ade1c79
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/LICENSE +202 -0
- package/README.md +165 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/active-camera.unit.test.d.ts +2 -0
- package/dist/__tests__/active-camera.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-add.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-add.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-asset-union.test-d.d.ts +2 -0
- package/dist/__tests__/animation-graph-asset-union.test-d.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-blend.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-blend.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-build.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-build.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-clip-missing.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-clip-missing.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-clip.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-clip.unit.test.d.ts.map +1 -0
- 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-default-path.integration.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-default-path.integration.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-describe.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-describe.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-errors.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-nesting.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-nesting.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-graph-orthogonal-weight.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-orthogonal-weight.unit.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__/animation-graph-slot-fill.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-graph-slot-fill.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-nslot.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-nslot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/animation-slot-length-guard.unit.test.d.ts +2 -0
- package/dist/__tests__/animation-slot-length-guard.unit.test.d.ts.map +1 -0
- package/dist/__tests__/append-injection.test.d.ts +2 -0
- package/dist/__tests__/append-injection.test.d.ts.map +1 -0
- package/dist/__tests__/asi-world-baseline-export.unit.test.d.ts +2 -0
- package/dist/__tests__/asi-world-baseline-export.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asi-world-ci-config.unit.test.d.ts +2 -0
- package/dist/__tests__/asi-world-ci-config.unit.test.d.ts.map +1 -0
- package/dist/__tests__/asi-world-smoke.unit.test.d.ts +2 -0
- package/dist/__tests__/asi-world-smoke.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-scene.test-d.d.ts +2 -0
- package/dist/__tests__/asset-registry-scene.test-d.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__/bind-group-cache-keying.test.d.ts +2 -0
- package/dist/__tests__/bind-group-cache-keying.test.d.ts.map +1 -0
- package/dist/__tests__/block-upload-math.unit.test.d.ts +2 -0
- package/dist/__tests__/block-upload-math.unit.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__/builtin-shader-register-e2e.test.d.ts +2 -0
- package/dist/__tests__/builtin-shader-register-e2e.test.d.ts.map +1 -0
- package/dist/__tests__/cache-false-eviction.test.d.ts +2 -0
- package/dist/__tests__/cache-false-eviction.test.d.ts.map +1 -0
- package/dist/__tests__/cache-isolation-matrix.test.d.ts +2 -0
- package/dist/__tests__/cache-isolation-matrix.test.d.ts.map +1 -0
- package/dist/__tests__/camera-clear-snapshot-equivalence.unit.test.d.ts +2 -0
- package/dist/__tests__/camera-clear-snapshot-equivalence.unit.test.d.ts.map +1 -0
- package/dist/__tests__/clamp-to-last.e2e.browser.test.d.ts +2 -0
- package/dist/__tests__/clamp-to-last.e2e.browser.test.d.ts.map +1 -0
- package/dist/__tests__/clamp-to-last.e2e.dawn.test.d.ts +2 -0
- package/dist/__tests__/clamp-to-last.e2e.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/collect-scene-asset.test.d.ts +2 -0
- package/dist/__tests__/collect-scene-asset.test.d.ts.map +1 -0
- 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-subtree.unit.test.d.ts +2 -0
- package/dist/__tests__/collect-subtree.unit.test.d.ts.map +1 -0
- package/dist/__tests__/collect-transient-children-absent.test.d.ts +2 -0
- package/dist/__tests__/collect-transient-children-absent.test.d.ts.map +1 -0
- package/dist/__tests__/collect-transient-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/collect-transient-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/collect-transient-skip.test.d.ts +2 -0
- package/dist/__tests__/collect-transient-skip.test.d.ts.map +1 -0
- package/dist/__tests__/components.test-d.d.ts +2 -0
- package/dist/__tests__/components.test-d.d.ts.map +1 -0
- package/dist/__tests__/components.unit.test.d.ts +2 -0
- package/dist/__tests__/components.unit.test.d.ts.map +1 -0
- package/dist/__tests__/composite-skybox-cross-world.browser.test.d.ts +2 -0
- package/dist/__tests__/composite-skybox-cross-world.browser.test.d.ts.map +1 -0
- 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__/create-renderer-assembly.integration.test.d.ts +2 -0
- package/dist/__tests__/create-renderer-assembly.integration.test.d.ts.map +1 -0
- package/dist/__tests__/createRenderer-dispose.test.d.ts +2 -0
- package/dist/__tests__/createRenderer-dispose.test.d.ts.map +1 -0
- package/dist/__tests__/createRenderer-requiredFeatures.unit.test.d.ts +2 -0
- package/dist/__tests__/createRenderer-requiredFeatures.unit.test.d.ts.map +1 -0
- package/dist/__tests__/createRenderer.browser-no-webgpu.test.d.ts +2 -0
- package/dist/__tests__/createRenderer.browser-no-webgpu.test.d.ts.map +1 -0
- package/dist/__tests__/createRenderer.unit.test.d.ts +2 -0
- package/dist/__tests__/createRenderer.unit.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/ibl-compose.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/ibl-compose.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/ibl-modules-compose.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/ibl-modules-compose.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/ibl-precompute-readback.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/ibl-precompute-readback.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/instances-per-instance-pbr.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/instances-per-instance-pbr.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/instances-shadow.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/instances-shadow.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/instances-uniform-fallback.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/instances-uniform-fallback.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/material-alpha.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/material-alpha.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/material-cooked-fixture.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/material-cooked-fixture.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.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/mipmap-srgb-linear.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/mipmap-srgb-linear.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/tonemap.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/tonemap.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__/dawn/user-handle-mesh-render.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/user-handle-mesh-render.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/user-mesh-upload.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/user-mesh-upload.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dawn/zero-manifest-ready.dawn.test.d.ts +2 -0
- package/dist/__tests__/dawn/zero-manifest-ready.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/demo-sortscope-migration.unit.test.d.ts +2 -0
- package/dist/__tests__/demo-sortscope-migration.unit.test.d.ts.map +1 -0
- package/dist/__tests__/derive-bgl-integration.test.d.ts +2 -0
- package/dist/__tests__/derive-bgl-integration.test.d.ts.map +1 -0
- package/dist/__tests__/derive-render-data-skin.unit.test.d.ts +2 -0
- package/dist/__tests__/derive-render-data-skin.unit.test.d.ts.map +1 -0
- package/dist/__tests__/draw-published.d.ts +5 -0
- package/dist/__tests__/draw-published.d.ts.map +1 -0
- 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__/environment-error-exhaustive.test-d.d.ts +8 -0
- package/dist/__tests__/environment-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/equirect-bc6h.integration.test.d.ts +2 -0
- package/dist/__tests__/equirect-bc6h.integration.test.d.ts.map +1 -0
- package/dist/__tests__/error-exhaustive.test.d.ts +2 -0
- package/dist/__tests__/error-exhaustive.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-frames-graceful-degradation.test.d.ts +2 -0
- package/dist/__tests__/extract-frames-graceful-degradation.test.d.ts.map +1 -0
- package/dist/__tests__/extract-frames-merge.test.d.ts +2 -0
- package/dist/__tests__/extract-frames-merge.test.d.ts.map +1 -0
- package/dist/__tests__/extract-frames-reset.test.d.ts +2 -0
- package/dist/__tests__/extract-frames-reset.test.d.ts.map +1 -0
- package/dist/__tests__/extract-record-no-hardcoded-texture-fields.test.d.ts +2 -0
- package/dist/__tests__/extract-record-no-hardcoded-texture-fields.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__/frame-targets-shadow-regression.unit.test.d.ts +2 -0
- package/dist/__tests__/frame-targets-shadow-regression.unit.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__/fullscreen-post-bgl-depth.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-post-bgl-depth.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-post-depth-params-arity.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-post-depth-params-arity.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-post-process-pass.dawn.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-post-process-pass.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-post-process-pass.unit.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-post-process-pass.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fxaa-pixel-diff.dawn.test.d.ts +2 -0
- package/dist/__tests__/fxaa-pixel-diff.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/fxaa-validation-and-resize.dawn.test.d.ts +2 -0
- package/dist/__tests__/fxaa-validation-and-resize.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/fxaa-zero-overhead.dawn.test.d.ts +2 -0
- package/dist/__tests__/fxaa-zero-overhead.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/geometry.unit.test.d.ts +2 -0
- package/dist/__tests__/geometry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/glyph-tilemap-worldid.test.d.ts +2 -0
- package/dist/__tests__/glyph-tilemap-worldid.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-resource-cow-survivor.test.d.ts +2 -0
- package/dist/__tests__/gpu-resource-cow-survivor.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__/hello-tilemap-smoke-upgrade.unit.test.d.ts +2 -0
- package/dist/__tests__/hello-tilemap-smoke-upgrade.unit.test.d.ts.map +1 -0
- package/dist/__tests__/helpers/mock-shader-registry.d.ts +11 -0
- package/dist/__tests__/helpers/mock-shader-registry.d.ts.map +1 -0
- package/dist/__tests__/helpers/register-runtime-components.d.ts +4 -0
- package/dist/__tests__/helpers/register-runtime-components.d.ts.map +1 -0
- package/dist/__tests__/helpers/register-scene-components.d.ts +4 -0
- package/dist/__tests__/helpers/register-scene-components.d.ts.map +1 -0
- package/dist/__tests__/helpers/tilemap-assets.d.ts +6 -0
- package/dist/__tests__/helpers/tilemap-assets.d.ts.map +1 -0
- 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__/instances.test-d.d.ts +2 -0
- package/dist/__tests__/instances.test-d.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__/light-attenuation-formula.test.d.ts +2 -0
- package/dist/__tests__/light-attenuation-formula.test.d.ts.map +1 -0
- package/dist/__tests__/light-casters-9-light.browser.test.d.ts +2 -0
- package/dist/__tests__/light-casters-9-light.browser.test.d.ts.map +1 -0
- package/dist/__tests__/light-gpu-byte-neutral.unit.test.d.ts +2 -0
- package/dist/__tests__/light-gpu-byte-neutral.unit.test.d.ts.map +1 -0
- package/dist/__tests__/light-snapshot.test-d.d.ts +2 -0
- package/dist/__tests__/light-snapshot.test-d.d.ts.map +1 -0
- package/dist/__tests__/lights-vec-negative.unit.test.d.ts +2 -0
- package/dist/__tests__/lights-vec-negative.unit.test.d.ts.map +1 -0
- package/dist/__tests__/lights.unit.test.d.ts +2 -0
- package/dist/__tests__/lights.unit.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__/m3-vec-negative.unit.test.d.ts +2 -0
- package/dist/__tests__/m3-vec-negative.unit.test.d.ts.map +1 -0
- package/dist/__tests__/m5-browser-dawn-sweep.integration.test.d.ts +2 -0
- package/dist/__tests__/m5-browser-dawn-sweep.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-texture-uv-scale.unit.test.d.ts +2 -0
- package/dist/__tests__/material-texture-uv-scale.unit.test.d.ts.map +1 -0
- package/dist/__tests__/materials.unit.test.d.ts +2 -0
- package/dist/__tests__/materials.unit.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__/mesh-ssbo-grow.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-ssbo-grow.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mip-gate.unit.test.d.ts +2 -0
- package/dist/__tests__/mip-gate.unit.test.d.ts.map +1 -0
- package/dist/__tests__/msaa-sprite-pixel-diff.dawn.test.d.ts +2 -0
- package/dist/__tests__/msaa-sprite-pixel-diff.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/multi-uv-8set.e2e.dawn.test.d.ts +2 -0
- package/dist/__tests__/multi-uv-8set.e2e.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/name.unit.test.d.ts +2 -0
- package/dist/__tests__/name.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__/pass-selector.unit.test.d.ts +2 -0
- package/dist/__tests__/pass-selector.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pbr-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/pbr-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-builder-msaa.unit.test.d.ts +2 -0
- package/dist/__tests__/pipeline-builder-msaa.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-cache-keying.unit.test.d.ts +2 -0
- package/dist/__tests__/pipeline-cache-keying.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-spec.test.d.ts +2 -0
- package/dist/__tests__/pipeline-spec.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/point-light-shadow.browser.test.d.ts +2 -0
- package/dist/__tests__/point-light-shadow.browser.test.d.ts.map +1 -0
- package/dist/__tests__/point-light-shadow.dawn.test.d.ts +2 -0
- package/dist/__tests__/point-light-shadow.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/point-light-shadow.unit.test.d.ts +2 -0
- package/dist/__tests__/point-light-shadow.unit.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-error-codes.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-error-codes.unit.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-params-component.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-params-component.unit.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-params-extract.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-params-extract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/postprocess-camera-consistency.test.d.ts +2 -0
- package/dist/__tests__/postprocess-camera-consistency.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-assembly.integration.test.d.ts +2 -0
- package/dist/__tests__/profiler-assembly.integration.test.d.ts.map +1 -0
- package/dist/__tests__/propagate-transforms.dawn.test.d.ts +2 -0
- package/dist/__tests__/propagate-transforms.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/record-worldid-isolation.test.d.ts +2 -0
- package/dist/__tests__/record-worldid-isolation.test.d.ts.map +1 -0
- package/dist/__tests__/recover-error-exhaustive.test-d.d.ts +11 -0
- package/dist/__tests__/recover-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +11 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.browser.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.dawn.test.d.ts.map +1 -0
- 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-feature-prepared-graphics.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.regression.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.regression.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-recover.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-recover.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-runtime-surface.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-runtime-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-schema-consumer.integration.test.d.ts +2 -0
- package/dist/__tests__/render-schema-consumer.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-schema-owner-boundary.unit.test.d.ts +2 -0
- package/dist/__tests__/render-schema-owner-boundary.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-cross-world-overlay-queue.test.d.ts +2 -0
- package/dist/__tests__/render-system-cross-world-overlay-queue.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-extract-dispatch-ordering.test.d.ts +2 -0
- package/dist/__tests__/render-system-extract-dispatch-ordering.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-extract.test.d.ts +2 -0
- package/dist/__tests__/render-system-extract.test.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__/render-system-fold-bucket.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-bucket.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-fallback.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-fallback.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-material.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-material.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-metrics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-metrics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-modegate.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-modegate.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold-scene-instances.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold-scene-instances.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-fold.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-system-fold.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-mega.test.d.ts +2 -0
- package/dist/__tests__/render-system-mega.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-owner-split-contract.test.d.ts +2 -0
- package/dist/__tests__/render-system-owner-split-contract.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-record-multi-material-textureview.test.d.ts +2 -0
- package/dist/__tests__/render-system-record-multi-material-textureview.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-record-per-submesh-transparency.test.d.ts +2 -0
- package/dist/__tests__/render-system-record-per-submesh-transparency.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-record.test.d.ts +2 -0
- package/dist/__tests__/render-system-record.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-record.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-record.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-system-skin-bg.unit.test.d.ts +2 -0
- package/dist/__tests__/render-system-skin-bg.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-consumer.test-d.d.ts +2 -0
- package/dist/__tests__/renderer-consumer.test-d.d.ts.map +1 -0
- package/dist/__tests__/renderer-health.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-health.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +2 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-recover.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-recover.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-result.test-d.d.ts +2 -0
- package/dist/__tests__/renderer-result.test-d.d.ts.map +1 -0
- package/dist/__tests__/renderer-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-surface.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__/resolve-depth-only-view.test.d.ts +2 -0
- package/dist/__tests__/resolve-depth-only-view.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__/rhi-null-command-flow.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-null-command-flow.unit.test.d.ts.map +1 -0
- package/dist/__tests__/rhi-null-noop-behavior.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-null-noop-behavior.unit.test.d.ts.map +1 -0
- package/dist/__tests__/rhi-null-renderer-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-null-renderer-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/roots-to-scene-asset.test.d.ts +2 -0
- package/dist/__tests__/roots-to-scene-asset.test.d.ts.map +1 -0
- package/dist/__tests__/roundtrip-primitive.test.d.ts +2 -0
- package/dist/__tests__/roundtrip-primitive.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-authority-scan.unit.test.d.ts +2 -0
- package/dist/__tests__/runtime-authority-scan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-domain-residue.unit.test.d.ts +2 -0
- package/dist/__tests__/runtime-domain-residue.unit.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-equirect-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/scene-equirect-roundtrip.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-instance-bridge.integration.test.d.ts +2 -0
- package/dist/__tests__/scene-instance-bridge.integration.test.d.ts.map +1 -0
- package/dist/__tests__/scene-instance-component.test.d.ts +2 -0
- package/dist/__tests__/scene-instance-component.test.d.ts.map +1 -0
- package/dist/__tests__/scene-instantiate-cycle-runtime.test.d.ts +2 -0
- package/dist/__tests__/scene-instantiate-cycle-runtime.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 +2 -0
- package/dist/__tests__/serialize-scene-asset.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-caster-empty-schema.test.d.ts +2 -0
- package/dist/__tests__/shadow-caster-empty-schema.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-atlas.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-atlas.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-blend.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-blend.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-cascade-loadop.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-cascade-loadop.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-component.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-component.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-extract.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-extract.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-orthoz.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-orthoz.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-runtime-vary.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-runtime-vary.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-shader.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-shader.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-tile-consistency.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-tile-consistency.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-ubo.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-ubo.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-ubo.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-ubo.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-csm-viewport.browser.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-viewport.browser.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-fields-observable.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-fields-observable.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-m1.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-m1.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-mesh-ssbo-order.test.d.ts +2 -0
- package/dist/__tests__/shadow-mesh-ssbo-order.test.d.ts.map +1 -0
- package/dist/__tests__/skin-error-exhaustive.test-d.d.ts +11 -0
- package/dist/__tests__/skin-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/skin-errors.unit.test.d.ts +2 -0
- package/dist/__tests__/skin-errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/skin-extract-getarrayview-count.unit.test.d.ts +2 -0
- package/dist/__tests__/skin-extract-getarrayview-count.unit.test.d.ts.map +1 -0
- package/dist/__tests__/skin-parented-double-transform.test.d.ts +14 -0
- package/dist/__tests__/skin-parented-double-transform.test.d.ts.map +1 -0
- package/dist/__tests__/skylight-lazy-projection.test.d.ts +2 -0
- package/dist/__tests__/skylight-lazy-projection.test.d.ts.map +1 -0
- package/dist/__tests__/sparse-tag-scene-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/sparse-tag-scene-roundtrip.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-cullmode-flip.dawn.test.d.ts +2 -0
- package/dist/__tests__/sprite-cullmode-flip.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-lit-bgl-byte-identical.test.d.ts +2 -0
- package/dist/__tests__/sprite-lit-bgl-byte-identical.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-lit-extract-branch.test.d.ts +2 -0
- package/dist/__tests__/sprite-lit-extract-branch.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-lit-pipeline-cache-key.test.d.ts +2 -0
- package/dist/__tests__/sprite-lit-pipeline-cache-key.test.d.ts.map +1 -0
- package/dist/__tests__/sprite-param-values.test-d.d.ts +2 -0
- package/dist/__tests__/sprite-param-values.test-d.d.ts.map +1 -0
- package/dist/__tests__/ssao-bgl.test.d.ts +2 -0
- package/dist/__tests__/ssao-bgl.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-buffers.test.d.ts +2 -0
- package/dist/__tests__/ssao-buffers.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-data.test.d.ts +2 -0
- package/dist/__tests__/ssao-data.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-errors.test.d.ts +2 -0
- package/dist/__tests__/ssao-errors.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-manifest.test.d.ts +2 -0
- package/dist/__tests__/ssao-manifest.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-passes.test.d.ts +2 -0
- package/dist/__tests__/ssao-passes.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-pipelines.test.d.ts +2 -0
- package/dist/__tests__/ssao-pipelines.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-uniform-layout.test.d.ts +2 -0
- package/dist/__tests__/ssao-uniform-layout.test.d.ts.map +1 -0
- package/dist/__tests__/static-rig.integration.test.d.ts +2 -0
- package/dist/__tests__/static-rig.integration.test.d.ts.map +1 -0
- package/dist/__tests__/stencil-outline-pixel.dawn.test.d.ts +2 -0
- package/dist/__tests__/stencil-outline-pixel.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/swap-chain-format.unit.test.d.ts +2 -0
- package/dist/__tests__/swap-chain-format.unit.test.d.ts.map +1 -0
- package/dist/__tests__/systems.unit.test.d.ts +2 -0
- package/dist/__tests__/systems.unit.test.d.ts.map +1 -0
- 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__/text.unit.test.d.ts +2 -0
- package/dist/__tests__/text.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-childed-despawn.test.d.ts +2 -0
- package/dist/__tests__/tilemap-childed-despawn.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.overhang-bounds.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.overhang-bounds.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.propagate-order.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.propagate-order.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-extract.unit.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-extract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-chunk-y-sort-bench.unit.test.d.ts +2 -0
- package/dist/__tests__/tilemap-chunk-y-sort-bench.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-dirty-rebuild.test.d.ts +2 -0
- package/dist/__tests__/tilemap-dirty-rebuild.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-material-cache.test.d.ts +2 -0
- package/dist/__tests__/tilemap-material-cache.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-multi-atlas.test.d.ts +2 -0
- package/dist/__tests__/tilemap-multi-atlas.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-owner-boundary.unit.test.d.ts +2 -0
- package/dist/__tests__/tilemap-owner-boundary.unit.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-region-pack.test.d.ts +2 -0
- package/dist/__tests__/tilemap-region-pack.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-spawn-flip-pivot.test.d.ts +2 -0
- package/dist/__tests__/tilemap-spawn-flip-pivot.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-uv-inset.test.d.ts +2 -0
- package/dist/__tests__/tilemap-uv-inset.test.d.ts.map +1 -0
- package/dist/__tests__/tilemap-validate.test.d.ts +2 -0
- package/dist/__tests__/tilemap-validate.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__/transform-hierarchy-pixel-diff.dawn.test.d.ts +2 -0
- package/dist/__tests__/transform-hierarchy-pixel-diff.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/transient-fields-collect.test.d.ts +2 -0
- package/dist/__tests__/transient-fields-collect.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__/transitional-authoring.integration.test.d.ts +2 -0
- package/dist/__tests__/transitional-authoring.integration.test.d.ts.map +1 -0
- package/dist/__tests__/transparent-sort-tilemap-sprite-interleave.test.d.ts +2 -0
- package/dist/__tests__/transparent-sort-tilemap-sprite-interleave.test.d.ts.map +1 -0
- package/dist/__tests__/variant-selection.unit.test.d.ts +2 -0
- package/dist/__tests__/variant-selection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vertex-attribute-layout.test.d.ts +2 -0
- package/dist/__tests__/vertex-attribute-layout.test.d.ts.map +1 -0
- package/dist/__tests__/video-extract-bindgroup.dawn.test.d.ts +2 -0
- package/dist/__tests__/video-extract-bindgroup.dawn.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/__tests__/view-ubo-layout.browser.test.d.ts +2 -0
- package/dist/__tests__/view-ubo-layout.browser.test.d.ts.map +1 -0
- package/dist/__tests__/world-entity-key.test.d.ts +2 -0
- package/dist/__tests__/world-entity-key.test.d.ts.map +1 -0
- package/dist/__tests__/world-scene-despawn.test.d.ts +2 -0
- package/dist/__tests__/world-scene-despawn.test.d.ts.map +1 -0
- package/dist/__tests__/world-scene-instantiate.test.d.ts +2 -0
- package/dist/__tests__/world-scene-instantiate.test.d.ts.map +1 -0
- package/dist/__tests__/world-scene-nested.test.d.ts +2 -0
- package/dist/__tests__/world-scene-nested.test.d.ts.map +1 -0
- package/dist/__tests__/world-scene-override.test.d.ts +2 -0
- package/dist/__tests__/world-scene-override.test.d.ts.map +1 -0
- package/dist/__tests__/zero-compression-zero-load.integration.test.d.ts +2 -0
- package/dist/__tests__/zero-compression-zero-load.integration.test.d.ts.map +1 -0
- package/dist/asset-contributions.d.ts +3 -0
- package/dist/asset-contributions.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 +19 -0
- package/dist/collect-scene-asset.d.ts.map +1 -0
- package/dist/components/__tests__/camera.test-d.d.ts +2 -0
- package/dist/components/__tests__/camera.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/camera.test.d.ts +2 -0
- package/dist/components/__tests__/camera.test.d.ts.map +1 -0
- package/dist/components/__tests__/child-of.test.d.ts +2 -0
- package/dist/components/__tests__/child-of.test.d.ts.map +1 -0
- package/dist/components/__tests__/sprite-animation.test-d.d.ts +2 -0
- package/dist/components/__tests__/sprite-animation.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/sprite-instances.unit.test.d.ts +2 -0
- package/dist/components/__tests__/sprite-instances.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/sprite-region-override.test-d.d.ts +2 -0
- package/dist/components/__tests__/sprite-region-override.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/tile-layer.test-d.d.ts +2 -0
- package/dist/components/__tests__/tile-layer.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/tile-layer.unit.test.d.ts +2 -0
- package/dist/components/__tests__/tile-layer.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/tilemap.test-d.d.ts +2 -0
- package/dist/components/__tests__/tilemap.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/transform-vec-schema.test.d.ts +2 -0
- package/dist/components/__tests__/transform-vec-schema.test.d.ts.map +1 -0
- package/dist/create-renderer-env-classify.d.ts +21 -0
- package/dist/create-renderer-env-classify.d.ts.map +1 -0
- package/dist/createRenderer.d.ts +15 -0
- package/dist/createRenderer.d.ts.map +1 -0
- package/dist/dev-import-transport.d.ts +24 -0
- package/dist/dev-import-transport.d.ts.map +1 -0
- package/dist/errors/environment.d.ts +2 -0
- package/dist/errors/environment.d.ts.map +1 -0
- package/dist/index.d.ts +218 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +813 -0
- package/dist/index.mjs.map +1 -0
- 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/__tests__/post-spawn-resolve-joints.unit.test.d.ts +2 -0
- package/dist/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.d.ts.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 +15 -0
- package/dist/scene-utils/mount-override-fold.d.ts.map +1 -0
- package/dist/sprite-param-values.d.ts +62 -0
- package/dist/sprite-param-values.d.ts.map +1 -0
- package/dist/systems/__tests__/_xorshift.d.ts +28 -0
- package/dist/systems/__tests__/_xorshift.d.ts.map +1 -0
- package/dist/systems/__tests__/argsort-in-place.test.d.ts +2 -0
- package/dist/systems/__tests__/argsort-in-place.test.d.ts.map +1 -0
- package/dist/systems/__tests__/transparent-sort.bench.d.ts +2 -0
- package/dist/systems/__tests__/transparent-sort.bench.d.ts.map +1 -0
- package/dist/systems/sprite-animation-tick.d.ts +50 -0
- package/dist/systems/sprite-animation-tick.d.ts.map +1 -0
- package/dist/systems/tonemap.d.ts +27 -0
- package/dist/systems/tonemap.d.ts.map +1 -0
- package/dist/systems/transparent-sort.d.ts +50 -0
- package/dist/systems/transparent-sort.d.ts.map +1 -0
- package/dist/tilemap-register-validate.d.ts +21 -0
- package/dist/tilemap-register-validate.d.ts.map +1 -0
- package/package.json +101 -0
- package/src/__tests__/active-camera.unit.test.ts +203 -0
- package/src/__tests__/animation-graph-add.unit.test.ts +67 -0
- package/src/__tests__/animation-graph-asset-union.test-d.ts +83 -0
- package/src/__tests__/animation-graph-blend.unit.test.ts +66 -0
- package/src/__tests__/animation-graph-build.unit.test.ts +100 -0
- package/src/__tests__/animation-graph-clip-missing.unit.test.ts +62 -0
- package/src/__tests__/animation-graph-clip.unit.test.ts +77 -0
- package/src/__tests__/animation-graph-collect-roundtrip.test.ts +213 -0
- package/src/__tests__/animation-graph-default-path.integration.test.ts +65 -0
- package/src/__tests__/animation-graph-describe.unit.test.ts +68 -0
- package/src/__tests__/animation-graph-errors.unit.test.ts +75 -0
- package/src/__tests__/animation-graph-nesting.unit.test.ts +84 -0
- package/src/__tests__/animation-graph-orthogonal-weight.unit.test.ts +98 -0
- package/src/__tests__/animation-graph-serialize.unit.test.ts +171 -0
- package/src/__tests__/animation-graph-slot-fill.unit.test.ts +95 -0
- package/src/__tests__/animation-nslot.unit.test.ts +63 -0
- package/src/__tests__/animation-slot-length-guard.unit.test.ts +81 -0
- package/src/__tests__/append-injection.test.ts +105 -0
- package/src/__tests__/asi-world-baseline-export.unit.test.ts +173 -0
- package/src/__tests__/asi-world-ci-config.unit.test.ts +186 -0
- package/src/__tests__/asi-world-smoke.unit.test.ts +192 -0
- 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-scene.test-d.ts +49 -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 +295 -0
- package/src/__tests__/block-upload-math.unit.test.ts +192 -0
- package/src/__tests__/builtin-asset-registry.unit.test.ts +112 -0
- package/src/__tests__/builtin-shader-register-e2e.test.ts +151 -0
- package/src/__tests__/cache-false-eviction.test.ts +127 -0
- package/src/__tests__/cache-isolation-matrix.test.ts +183 -0
- package/src/__tests__/camera-clear-snapshot-equivalence.unit.test.ts +75 -0
- package/src/__tests__/clamp-to-last.e2e.browser.test.ts +193 -0
- package/src/__tests__/clamp-to-last.e2e.dawn.test.ts +325 -0
- package/src/__tests__/collect-scene-asset.test.ts +873 -0
- package/src/__tests__/collect-scene-mount-collapse.test.ts +391 -0
- package/src/__tests__/collect-subtree.unit.test.ts +75 -0
- package/src/__tests__/collect-transient-children-absent.test.ts +168 -0
- package/src/__tests__/collect-transient-roundtrip.test.ts +269 -0
- package/src/__tests__/collect-transient-skip.test.ts +176 -0
- package/src/__tests__/components.test-d.ts +231 -0
- package/src/__tests__/components.unit.test.ts +2666 -0
- package/src/__tests__/composite-skybox-cross-world.browser.test.ts +410 -0
- package/src/__tests__/compressed-texture-physical-extent.integration.test.ts +139 -0
- package/src/__tests__/create-renderer-assembly.integration.test.ts +55 -0
- package/src/__tests__/createRenderer-dispose.test.ts +49 -0
- package/src/__tests__/createRenderer-requiredFeatures.unit.test.ts +134 -0
- package/src/__tests__/createRenderer.browser-no-webgpu.test.ts +54 -0
- package/src/__tests__/createRenderer.unit.test.ts +231 -0
- package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +357 -0
- package/src/__tests__/dawn/ibl-compose.dawn.test.ts +151 -0
- package/src/__tests__/dawn/ibl-modules-compose.dawn.test.ts +223 -0
- package/src/__tests__/dawn/ibl-precompute-readback.dawn.test.ts +250 -0
- package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +631 -0
- package/src/__tests__/dawn/instances-shadow.dawn.test.ts +454 -0
- package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +312 -0
- package/src/__tests__/dawn/material-alpha.dawn.test.ts +296 -0
- package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +79 -0
- package/src/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.ts +106 -0
- package/src/__tests__/dawn/mesh-update-dawn.test.ts +250 -0
- package/src/__tests__/dawn/mipmap-srgb-linear.dawn.test.ts +124 -0
- package/src/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.ts +555 -0
- package/src/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.ts +235 -0
- package/src/__tests__/dawn/tonemap.dawn.test.ts +107 -0
- package/src/__tests__/dawn/upload-texture.dawn.test.ts +198 -0
- package/src/__tests__/dawn/user-handle-mesh-render.dawn.test.ts +289 -0
- package/src/__tests__/dawn/user-mesh-upload.dawn.test.ts +209 -0
- package/src/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.ts +119 -0
- package/src/__tests__/dawn/zero-manifest-ready.dawn.test.ts +98 -0
- package/src/__tests__/demo-sortscope-migration.unit.test.ts +115 -0
- package/src/__tests__/derive-bgl-integration.test.ts +388 -0
- package/src/__tests__/derive-render-data-skin.unit.test.ts +90 -0
- package/src/__tests__/draw-published.ts +17 -0
- package/src/__tests__/dynamic-texture-store.unit.test.ts +190 -0
- package/src/__tests__/environment-error-exhaustive.test-d.ts +28 -0
- package/src/__tests__/equirect-bc6h.integration.test.ts +158 -0
- package/src/__tests__/error-exhaustive.test.ts +220 -0
- package/src/__tests__/errors.unit.test.ts +1227 -0
- package/src/__tests__/extract-frames-graceful-degradation.test.ts +294 -0
- package/src/__tests__/extract-frames-merge.test.ts +656 -0
- package/src/__tests__/extract-frames-reset.test.ts +158 -0
- package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +81 -0
- 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 +28 -0
- package/src/__tests__/fullscreen-feature-host.dawn.test.ts +80 -0
- package/src/__tests__/fullscreen-post-bgl-depth.test.ts +133 -0
- package/src/__tests__/fullscreen-post-depth-params-arity.test.ts +84 -0
- package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +336 -0
- package/src/__tests__/fullscreen-post-process-pass.unit.test.ts +109 -0
- package/src/__tests__/fxaa-pixel-diff.dawn.test.ts +303 -0
- package/src/__tests__/fxaa-validation-and-resize.dawn.test.ts +369 -0
- package/src/__tests__/fxaa-zero-overhead.dawn.test.ts +258 -0
- package/src/__tests__/geometry.unit.test.ts +2631 -0
- package/src/__tests__/glyph-tilemap-worldid.test.ts +146 -0
- package/src/__tests__/gpu-resource-cow-survivor.test.ts +390 -0
- package/src/__tests__/guid-for-asset.unit.test.ts +102 -0
- package/src/__tests__/handle-migration.test.ts +136 -0
- package/src/__tests__/hello-tilemap-smoke-upgrade.unit.test.ts +147 -0
- package/src/__tests__/helpers/mock-shader-registry.ts +139 -0
- package/src/__tests__/helpers/register-runtime-components.ts +71 -0
- package/src/__tests__/helpers/register-scene-components.ts +10 -0
- package/src/__tests__/helpers/tilemap-assets.ts +29 -0
- 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 +61 -0
- package/src/__tests__/instantiate-mount-deferred-wiring.test.ts +112 -0
- package/src/__tests__/light-attenuation-formula.test.ts +171 -0
- package/src/__tests__/light-casters-9-light.browser.test.ts +877 -0
- package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +160 -0
- package/src/__tests__/light-snapshot.test-d.ts +84 -0
- package/src/__tests__/lights-vec-negative.unit.test.ts +52 -0
- package/src/__tests__/lights.unit.test.ts +2456 -0
- 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 +46 -0
- package/src/__tests__/m5-browser-dawn-sweep.integration.test.ts +8 -0
- package/src/__tests__/material-texture-uv-scale.unit.test.ts +119 -0
- package/src/__tests__/materials.unit.test.ts +254 -0
- 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 +244 -0
- package/src/__tests__/mip-gate.unit.test.ts +79 -0
- package/src/__tests__/msaa-sprite-pixel-diff.dawn.test.ts +367 -0
- package/src/__tests__/multi-uv-8set.e2e.dawn.test.ts +296 -0
- package/src/__tests__/name.unit.test.ts +123 -0
- package/src/__tests__/new-kind-refs-contract.test.ts +132 -0
- package/src/__tests__/node-shims.d.ts +31 -0
- 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 +102 -0
- package/src/__tests__/pbr-pipeline.unit.test.ts +200 -0
- package/src/__tests__/pipeline-builder-msaa.unit.test.ts +221 -0
- package/src/__tests__/pipeline-cache-keying.unit.test.ts +313 -0
- package/src/__tests__/pipeline-spec.test.ts +900 -0
- package/src/__tests__/pipeline.unit.test.ts +5435 -0
- package/src/__tests__/point-light-shadow.browser.test.ts +278 -0
- package/src/__tests__/point-light-shadow.dawn.test.ts +813 -0
- package/src/__tests__/point-light-shadow.unit.test.ts +675 -0
- package/src/__tests__/post-process-error-codes.unit.test.ts +161 -0
- package/src/__tests__/post-process-params-component.unit.test.ts +153 -0
- package/src/__tests__/post-process-params-extract.unit.test.ts +97 -0
- package/src/__tests__/postprocess-camera-consistency.test.ts +375 -0
- package/src/__tests__/profiler-assembly.integration.test.ts +74 -0
- package/src/__tests__/propagate-transforms.dawn.test.ts +254 -0
- package/src/__tests__/record-worldid-isolation.test.ts +225 -0
- package/src/__tests__/recover-error-exhaustive.test-d.ts +35 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +291 -0
- package/src/__tests__/render-feature-assembly.test-d.ts +39 -0
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +126 -0
- package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +88 -0
- package/src/__tests__/render-feature-prepared-graphics.dawn.test.ts +115 -0
- package/src/__tests__/render-feature-prepared-graphics.fixture.ts +104 -0
- package/src/__tests__/render-feature-prepared-graphics.integration.test.ts +56 -0
- package/src/__tests__/render-feature-prepared-graphics.regression.integration.test.ts +104 -0
- package/src/__tests__/render-feature-recover.integration.test.ts +102 -0
- package/src/__tests__/render-feature-runtime-surface.test-d.ts +42 -0
- package/src/__tests__/render-schema-consumer.integration.test.ts +32 -0
- package/src/__tests__/render-schema-owner-boundary.unit.test.ts +22 -0
- package/src/__tests__/render-system-cross-world-overlay-queue.test.ts +172 -0
- package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +307 -0
- package/src/__tests__/render-system-extract.test.ts +1384 -0
- package/src/__tests__/render-system-extract.unit.test.ts +360 -0
- package/src/__tests__/render-system-fold-bucket.unit.test.ts +286 -0
- package/src/__tests__/render-system-fold-fallback.unit.test.ts +151 -0
- package/src/__tests__/render-system-fold-material.unit.test.ts +143 -0
- package/src/__tests__/render-system-fold-metrics.unit.test.ts +170 -0
- package/src/__tests__/render-system-fold-modegate.unit.test.ts +166 -0
- package/src/__tests__/render-system-fold-scene-instances.unit.test.ts +51 -0
- package/src/__tests__/render-system-fold.dawn.test.ts +308 -0
- package/src/__tests__/render-system-mega.test.ts +1680 -0
- package/src/__tests__/render-system-owner-split-contract.test.ts +178 -0
- package/src/__tests__/render-system-record-multi-material-textureview.test.ts +698 -0
- package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +458 -0
- package/src/__tests__/render-system-record.test.ts +1668 -0
- package/src/__tests__/render-system-record.unit.test.ts +269 -0
- package/src/__tests__/render-system-skin-bg.unit.test.ts +143 -0
- package/src/__tests__/renderer-consumer.test-d.ts +18 -0
- package/src/__tests__/renderer-health.unit.test.ts +45 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +42 -0
- package/src/__tests__/renderer-recover.unit.test.ts +55 -0
- package/src/__tests__/renderer-result.test-d.ts +36 -0
- package/src/__tests__/renderer-surface.unit.test.ts +414 -0
- 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 +173 -0
- 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 +69 -0
- package/src/__tests__/rhi-null-noop-behavior.unit.test.ts +196 -0
- package/src/__tests__/rhi-null-renderer-lifecycle.unit.test.ts +54 -0
- package/src/__tests__/roots-to-scene-asset.test.ts +711 -0
- package/src/__tests__/roundtrip-primitive.test.ts +351 -0
- package/src/__tests__/runtime-authority-scan.unit.test.ts +19 -0
- package/src/__tests__/runtime-domain-residue.unit.test.ts +13 -0
- package/src/__tests__/scene-bare-guid-refs-instantiate.test.ts +123 -0
- package/src/__tests__/scene-equirect-roundtrip.test.ts +120 -0
- package/src/__tests__/scene-instance-authoring.integration.test.ts +8 -0
- package/src/__tests__/scene-instance-bridge.integration.test.ts +8 -0
- package/src/__tests__/scene-instance-component.test.ts +45 -0
- package/src/__tests__/scene-instantiate-cycle-runtime.test.ts +66 -0
- 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 +533 -0
- package/src/__tests__/shadow-caster-empty-schema.test.ts +83 -0
- package/src/__tests__/shadow-csm-atlas.test.ts +178 -0
- package/src/__tests__/shadow-csm-blend.dawn.test.ts +230 -0
- package/src/__tests__/shadow-csm-cascade-loadop.test.ts +354 -0
- package/src/__tests__/shadow-csm-component.test.ts +284 -0
- package/src/__tests__/shadow-csm-extract.test.ts +236 -0
- package/src/__tests__/shadow-csm-orthoz.test.ts +137 -0
- package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +203 -0
- package/src/__tests__/shadow-csm-shader.dawn.test.ts +358 -0
- package/src/__tests__/shadow-csm-tile-consistency.test.ts +425 -0
- package/src/__tests__/shadow-csm-ubo.dawn.test.ts +252 -0
- package/src/__tests__/shadow-csm-ubo.test.ts +278 -0
- package/src/__tests__/shadow-csm-viewport.browser.test.ts +85 -0
- package/src/__tests__/shadow-fields-observable.dawn.test.ts +626 -0
- package/src/__tests__/shadow-m1.dawn.test.ts +104 -0
- package/src/__tests__/shadow-mesh-ssbo-order.test.ts +48 -0
- package/src/__tests__/skin-error-exhaustive.test-d.ts +74 -0
- package/src/__tests__/skin-errors.unit.test.ts +10 -0
- package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +25 -0
- package/src/__tests__/skin-parented-double-transform.test.ts +268 -0
- package/src/__tests__/skylight-lazy-projection.test.ts +380 -0
- package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +43 -0
- package/src/__tests__/sprite-cullmode-flip.dawn.test.ts +453 -0
- package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +142 -0
- package/src/__tests__/sprite-lit-extract-branch.test.ts +117 -0
- package/src/__tests__/sprite-lit-pipeline-cache-key.test.ts +123 -0
- package/src/__tests__/sprite-param-values.test-d.ts +104 -0
- package/src/__tests__/ssao-bgl.test.ts +354 -0
- package/src/__tests__/ssao-buffers.test.ts +211 -0
- package/src/__tests__/ssao-data.test.ts +121 -0
- package/src/__tests__/ssao-errors.test.ts +162 -0
- package/src/__tests__/ssao-manifest.test.ts +109 -0
- package/src/__tests__/ssao-passes.test.ts +905 -0
- package/src/__tests__/ssao-pipelines.test.ts +275 -0
- package/src/__tests__/ssao-uniform-layout.test.ts +180 -0
- package/src/__tests__/static-rig.integration.test.ts +9 -0
- package/src/__tests__/stencil-outline-pixel.dawn.test.ts +303 -0
- package/src/__tests__/swap-chain-format.unit.test.ts +115 -0
- package/src/__tests__/systems.unit.test.ts +9167 -0
- package/src/__tests__/template-game-default-api-contract.test.ts +362 -0
- package/src/__tests__/text.unit.test.ts +489 -0
- package/src/__tests__/tilemap-childed-despawn.test.ts +462 -0
- package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +310 -0
- package/src/__tests__/tilemap-chunk-extract.propagate-order.test.ts +81 -0
- package/src/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.ts +424 -0
- package/src/__tests__/tilemap-chunk-extract.test.ts +232 -0
- package/src/__tests__/tilemap-chunk-extract.unit.test.ts +383 -0
- package/src/__tests__/tilemap-chunk-y-sort-bench.unit.test.ts +109 -0
- package/src/__tests__/tilemap-dirty-rebuild.test.ts +296 -0
- package/src/__tests__/tilemap-material-cache.test.ts +132 -0
- package/src/__tests__/tilemap-multi-atlas.test.ts +217 -0
- package/src/__tests__/tilemap-owner-boundary.unit.test.ts +66 -0
- package/src/__tests__/tilemap-region-pack.test.ts +149 -0
- package/src/__tests__/tilemap-spawn-flip-pivot.test.ts +270 -0
- package/src/__tests__/tilemap-uv-inset.test.ts +201 -0
- package/src/__tests__/tilemap-validate.test.ts +201 -0
- 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 +282 -0
- package/src/__tests__/transient-fields-collect.test.ts +210 -0
- package/src/__tests__/transient-runtime-behavior.test.ts +227 -0
- package/src/__tests__/transitional-authoring.integration.test.ts +7 -0
- package/src/__tests__/transparent-sort-tilemap-sprite-interleave.test.ts +227 -0
- package/src/__tests__/variant-selection.unit.test.ts +21 -0
- package/src/__tests__/vertex-attribute-layout.test.ts +324 -0
- package/src/__tests__/video-extract-bindgroup.dawn.test.ts +403 -0
- 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 +161 -0
- package/src/__tests__/world-entity-key.test.ts +92 -0
- package/src/__tests__/world-scene-despawn.test.ts +132 -0
- package/src/__tests__/world-scene-instantiate.test.ts +194 -0
- package/src/__tests__/world-scene-nested.test.ts +230 -0
- package/src/__tests__/world-scene-override.test.ts +199 -0
- package/src/__tests__/zero-compression-zero-load.integration.test.ts +107 -0
- package/src/asset-contributions.ts +48 -0
- package/src/backend-selection.ts +69 -0
- package/src/collect-scene-asset.ts +701 -0
- package/src/components/__tests__/camera.test-d.ts +57 -0
- package/src/components/__tests__/camera.test.ts +95 -0
- package/src/components/__tests__/child-of.test.ts +35 -0
- package/src/components/__tests__/sprite-animation.test-d.ts +160 -0
- package/src/components/__tests__/sprite-instances.unit.test.ts +108 -0
- package/src/components/__tests__/sprite-region-override.test-d.ts +101 -0
- package/src/components/__tests__/tile-layer.test-d.ts +33 -0
- package/src/components/__tests__/tile-layer.unit.test.ts +125 -0
- package/src/components/__tests__/tilemap.test-d.ts +35 -0
- package/src/components/__tests__/transform-vec-schema.test.ts +121 -0
- package/src/create-renderer-env-classify.ts +110 -0
- package/src/createRenderer.ts +49 -0
- package/src/dev-import-transport.ts +97 -0
- package/src/errors/environment.ts +6 -0
- package/src/index.ts +380 -0
- package/src/renderer-host.ts +33 -0
- package/src/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.ts +183 -0
- package/src/scene-instances/index.ts +4 -0
- package/src/scene-utils/mount-override-fold.ts +213 -0
- package/src/sprite-param-values.ts +61 -0
- package/src/systems/__tests__/_xorshift.ts +83 -0
- package/src/systems/__tests__/argsort-in-place.test.ts +155 -0
- package/src/systems/__tests__/transparent-sort.bench.ts +218 -0
- package/src/systems/sprite-animation-tick.ts +302 -0
- package/src/systems/tonemap.ts +68 -0
- package/src/systems/transparent-sort.ts +434 -0
- package/src/tilemap-register-validate.ts +100 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// transparent-sort.bench.ts -- transparent-bucket sort 10k-entity p95 gate
|
|
2
|
+
// (feat-20260520-2d-sprite-layer-mvp / M-4 / w27; AC-14).
|
|
3
|
+
//
|
|
4
|
+
// Scope (3 cases x 100 iterations each):
|
|
5
|
+
// - mode=0 layer-z (horizontal side-scroller; sortValue = posZ)
|
|
6
|
+
// - mode=1 layer-y (JRPG Y-sort foot pivot; sortValue = -(posY - pivotY * sizeY))
|
|
7
|
+
// - mode=2 layer-yz (Don't-Starve / isometric blend;
|
|
8
|
+
// sortValue = (posY - pivotY * sizeY) + yzAlpha * posZ)
|
|
9
|
+
//
|
|
10
|
+
// AC-14 contract (3 reproducibility anchors):
|
|
11
|
+
// 1. deterministic seed via `createXorshift32(0xCAFE2026)` so the
|
|
12
|
+
// bench number is a function of the algorithm, not the test data
|
|
13
|
+
// (w26 + plan-strategy D-3 SSOT, zero npm dep).
|
|
14
|
+
// 2. >= 100 iterations -> tinybench reports a stable p95 across the
|
|
15
|
+
// whole sample window; `BENCH_OPTS_RUNTIME` pins iterations: 100
|
|
16
|
+
// so KUBEELA_BENCH=fast does not silently shrink the sample below
|
|
17
|
+
// the AC floor.
|
|
18
|
+
// 3. Working baseline (implementation phase, R1 F-2 audit trail):
|
|
19
|
+
// p95 ~ 3 ms / 10k entities on GitHub Actions ubuntu-latest 6 vCPU.
|
|
20
|
+
// Root cause is V8 closure overhead in Array.prototype.sort + JS
|
|
21
|
+
// comparator (10k * log2(10k) ~ 140k comparator invocations per
|
|
22
|
+
// iteration; each crosses the JS<->C++ bridge ~ 20-30 ns).
|
|
23
|
+
// package.json forgeax.metrics.bench.baseline.threshold = 5 ms
|
|
24
|
+
// (5_000_000 ns/op) tracks this working baseline.
|
|
25
|
+
//
|
|
26
|
+
// plan-strategy §2 D-3's 0.5 ms p95 target is DEFERRED to
|
|
27
|
+
// `feat-future-transparent-sort-radix` (todos.json todo-140).
|
|
28
|
+
// The future algorithm rewrite (composite-key BigInt64Array.sort
|
|
29
|
+
// over `(layer << 32) | (sortValueQuantizedInt32 ^ 0x80000000)`,
|
|
30
|
+
// or a radix sort over the same packed int64) replaces the JS
|
|
31
|
+
// comparator with a typed-array sort that stays inside C++ and
|
|
32
|
+
// should clear the 0.5 ms bar. Until that lands, the bench guards
|
|
33
|
+
// the 5 ms working ceiling — a regression past 5 ms still fails
|
|
34
|
+
// `pnpm metrics:run` and surfaces a real perf cliff.
|
|
35
|
+
//
|
|
36
|
+
// Closed-loop trail: ImplementReviewer R1 F-2 (judged "defer +
|
|
37
|
+
// todo + JSDoc audit trail") in
|
|
38
|
+
// `.forgeax-harness/forgeax-loop/feat-20260520-2d-sprite-layer-
|
|
39
|
+
// mvp/implement-review.md` §5 closes here.
|
|
40
|
+
//
|
|
41
|
+
// Fixture shape (10k entries; structurally identical to a real M-4 record
|
|
42
|
+
// stage transparent bucket but with synthetic numbers):
|
|
43
|
+
// - layer ~ uniform i32 in [-1000, 1000]
|
|
44
|
+
// - posX/Y/Z ~ uniform f64 in [0, 100)
|
|
45
|
+
// - pivotY ~ uniform f64 in [0, 1] (matches SpriteMaterialAsset.pivot[1] range)
|
|
46
|
+
// - sizeY ~ uniform f64 in [0.5, 2] (matches world-scale-ish sprites)
|
|
47
|
+
// - sortKey -- undefined for the base bench; the AC-14 measurement
|
|
48
|
+
// does NOT inject overrides because the comparator must
|
|
49
|
+
// evaluate the mode formula for every entry to measure
|
|
50
|
+
// the worst case.
|
|
51
|
+
//
|
|
52
|
+
// Anchor: requirements §3 AC-14 + plan-strategy §2 D-3 / §5.4 verdict
|
|
53
|
+
// gate / §7 M-4 acceptanceCheck. The active threshold SSOT lives in
|
|
54
|
+
// packages/runtime/package.json#forgeax.metrics.bench.baseline.threshold
|
|
55
|
+
// (5_000_000 ns/op working baseline; R1 F-2 defer note above).
|
|
56
|
+
|
|
57
|
+
import { World } from '@forgeax/engine-ecs';
|
|
58
|
+
import { bench, describe } from 'vitest';
|
|
59
|
+
import type { TransparentEntry } from '../../../../render/src/systems/transparent-sort-config';
|
|
60
|
+
import {
|
|
61
|
+
setTransparentSortConfig,
|
|
62
|
+
TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
63
|
+
TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
64
|
+
TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
65
|
+
} from '../../../../render/src/systems/transparent-sort-config';
|
|
66
|
+
import { transparentSortEntries } from '../transparent-sort';
|
|
67
|
+
import { createXorshift32 } from './_xorshift';
|
|
68
|
+
|
|
69
|
+
// AC-14 sample size + iterations (plan-strategy D-3 SSOT). Vitest 4.x
|
|
70
|
+
// forwards `iterations` straight to tinybench so the p95 statistic is
|
|
71
|
+
// computed from a >= 100-sample window.
|
|
72
|
+
const N_ENTITIES = 10_000;
|
|
73
|
+
const BENCH_OPTS_RUNTIME = { iterations: 100 } as const;
|
|
74
|
+
|
|
75
|
+
// Build the synthetic fixture once outside the bench body so allocation
|
|
76
|
+
// cost stays out of the comparator-loop hot path (the math bench files
|
|
77
|
+
// use the same closure pattern via vec3.create(...) above the bench
|
|
78
|
+
// block). The same fixture is shared across all 3 mode benches so a
|
|
79
|
+
// regression in one mode is directly comparable to the others.
|
|
80
|
+
function buildEntries(): readonly TransparentEntry[] {
|
|
81
|
+
const rng = createXorshift32(0xcafe2026);
|
|
82
|
+
const out: TransparentEntry[] = new Array(N_ENTITIES);
|
|
83
|
+
for (let i = 0; i < N_ENTITIES; i++) {
|
|
84
|
+
const layer = Math.floor(rng() * 2001) - 1000;
|
|
85
|
+
out[i] = {
|
|
86
|
+
entityIndex: i,
|
|
87
|
+
materialHandle: 1024 + (i % 256),
|
|
88
|
+
layer,
|
|
89
|
+
posX: rng() * 100,
|
|
90
|
+
posY: rng() * 100,
|
|
91
|
+
posZ: rng() * 100,
|
|
92
|
+
pivotY: rng(),
|
|
93
|
+
sizeY: 0.5 + rng() * 1.5,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const ENTRIES = buildEntries();
|
|
100
|
+
|
|
101
|
+
// Separate RNG for the mode=3 bench so the camera position does not
|
|
102
|
+
// consume entropy from the entry pool. A second entries fixture with
|
|
103
|
+
// a different seed avoids JIT-coupling the mode=3 bench noise to the
|
|
104
|
+
// mode=0/1/2 bench noise.
|
|
105
|
+
function buildEntriesDist(): readonly TransparentEntry[] {
|
|
106
|
+
const rng = createXorshift32(0x2dda7a6e);
|
|
107
|
+
const out: TransparentEntry[] = new Array(N_ENTITIES);
|
|
108
|
+
for (let i = 0; i < N_ENTITIES; i++) {
|
|
109
|
+
const layer = Math.floor(rng() * 2001) - 1000;
|
|
110
|
+
out[i] = {
|
|
111
|
+
entityIndex: i,
|
|
112
|
+
materialHandle: 1024 + (i % 256),
|
|
113
|
+
layer,
|
|
114
|
+
posX: rng() * 100,
|
|
115
|
+
posY: rng() * 100,
|
|
116
|
+
posZ: rng() * 100,
|
|
117
|
+
pivotY: rng(),
|
|
118
|
+
sizeY: 0.5 + rng() * 1.5,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const ENTRIES_DIST = buildEntriesDist();
|
|
125
|
+
|
|
126
|
+
// independent RNG for per-iteration camera positions
|
|
127
|
+
const rngDist = createXorshift32(0x9a88_e5b3);
|
|
128
|
+
|
|
129
|
+
function makeWorld(mode: number): World {
|
|
130
|
+
const world = new World();
|
|
131
|
+
const r = setTransparentSortConfig(world, { mode, yzAlpha: 1.0 });
|
|
132
|
+
if (!r.ok) {
|
|
133
|
+
// Should be unreachable -- the three constants are by construction
|
|
134
|
+
// members of the valid {0, 1, 2} set. If this fires the fixture
|
|
135
|
+
// setup is broken at the harness level; bail loudly so a bench
|
|
136
|
+
// regression report is not silently meaningless.
|
|
137
|
+
throw new Error(`[transparent-sort.bench] setTransparentSortConfig failed: ${r.error.code}`);
|
|
138
|
+
}
|
|
139
|
+
return world;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
describe('transparent-sort 10k entities', () => {
|
|
143
|
+
const worldZ = makeWorld(TRANSPARENT_SORT_MODE_LAYER_Z);
|
|
144
|
+
const worldY = makeWorld(TRANSPARENT_SORT_MODE_LAYER_Y);
|
|
145
|
+
const worldYZ = makeWorld(TRANSPARENT_SORT_MODE_LAYER_YZ);
|
|
146
|
+
const worldDist = makeWorld(3);
|
|
147
|
+
// Sink pattern (wiki/vitest-bench section 7.1): forces JIT to keep the
|
|
148
|
+
// sort result reachable; an unread return value is a dead-store
|
|
149
|
+
// candidate and the optimiser may then short-circuit the comparator
|
|
150
|
+
// visits inside Array.prototype.sort. The `_sink` prefix tags it
|
|
151
|
+
// explicitly as "write-only inside the loop, read once at teardown"
|
|
152
|
+
// so biome's noUnusedVariables rule does not flag it (we DO read it
|
|
153
|
+
// once below to satisfy lint + keep V8 from dead-storing).
|
|
154
|
+
let _sink = 0;
|
|
155
|
+
|
|
156
|
+
bench(
|
|
157
|
+
'mode=0 layer-z (horizontal)',
|
|
158
|
+
() => {
|
|
159
|
+
const out = transparentSortEntries(ENTRIES, worldZ);
|
|
160
|
+
// `?.entityIndex ?? 0` keeps the read total under
|
|
161
|
+
// noUncheckedIndexedAccess; `| 0` is the canonical int32 sink.
|
|
162
|
+
_sink ^= (out[0]?.entityIndex ?? 0) | 0;
|
|
163
|
+
},
|
|
164
|
+
BENCH_OPTS_RUNTIME,
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
bench(
|
|
168
|
+
'mode=1 layer-y (JRPG)',
|
|
169
|
+
() => {
|
|
170
|
+
const out = transparentSortEntries(ENTRIES, worldY);
|
|
171
|
+
_sink ^= (out[0]?.entityIndex ?? 0) | 0;
|
|
172
|
+
},
|
|
173
|
+
BENCH_OPTS_RUNTIME,
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
bench(
|
|
177
|
+
"mode=2 layer-yz (isometric / Don't-Starve)",
|
|
178
|
+
() => {
|
|
179
|
+
const out = transparentSortEntries(ENTRIES, worldYZ);
|
|
180
|
+
_sink ^= (out[0]?.entityIndex ?? 0) | 0;
|
|
181
|
+
},
|
|
182
|
+
BENCH_OPTS_RUNTIME,
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
// ─── w3: mode=3 distance bench (TDD red phase) ─────────────────────
|
|
186
|
+
|
|
187
|
+
// Red: setTransparentSortConfig rejects mode=3 (not yet in VALID_MODES).
|
|
188
|
+
// When green, the extra cost of 3 squared-distance ops per entry should
|
|
189
|
+
// add <0.05ms vs the ~3ms p95 baseline on 10k entries (research E4(c)).
|
|
190
|
+
|
|
191
|
+
bench(
|
|
192
|
+
'mode=3 distance (back-to-front squared-distance)',
|
|
193
|
+
() => {
|
|
194
|
+
const cameraPos: readonly [number, number, number] = [
|
|
195
|
+
rngDist() * 100,
|
|
196
|
+
rngDist() * 100,
|
|
197
|
+
rngDist() * 100,
|
|
198
|
+
];
|
|
199
|
+
// Red: 3-arg signature does not exist yet; cast bridges the red gap.
|
|
200
|
+
const out = (
|
|
201
|
+
transparentSortEntries as (
|
|
202
|
+
entries: readonly TransparentEntry[],
|
|
203
|
+
world: World,
|
|
204
|
+
cameraPos?: readonly [number, number, number],
|
|
205
|
+
) => readonly TransparentEntry[]
|
|
206
|
+
)(ENTRIES_DIST, worldDist, cameraPos);
|
|
207
|
+
_sink ^= (out[0]?.entityIndex ?? 0) | 0;
|
|
208
|
+
},
|
|
209
|
+
BENCH_OPTS_RUNTIME,
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
// Single teardown-time read keeps `_sink` from being a strict
|
|
213
|
+
// write-only target (lint + JIT both observe the value); the read
|
|
214
|
+
// path lives inside an arrow predicate so tinybench's harness
|
|
215
|
+
// never invokes it during the measurement window. Sink pattern
|
|
216
|
+
// (wiki/vitest-bench section 7.1).
|
|
217
|
+
void [() => _sink];
|
|
218
|
+
});
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
// @forgeax/engine-runtime - sprite-animation tick system (M4 / T-23).
|
|
2
|
+
//
|
|
3
|
+
// Walks every entity that carries `SpriteAnimation`, advances its dt
|
|
4
|
+
// accumulator clock per Time.delta, and writes the current frame's UV slice
|
|
5
|
+
// into the entity's `SpriteRegionOverride` column (auto-adding the
|
|
6
|
+
// component on first observation when the entity does not yet carry it).
|
|
7
|
+
// Designed to sit between `input` / `time` and `RenderSystem.extract` in
|
|
8
|
+
// the schedule (plan-strategy section 2 D-7); the M3 sprite-bucket
|
|
9
|
+
// extract branch (`render-system-extract.ts:861-870`) reads the override
|
|
10
|
+
// column to materialise per-entity UV in the sprite snapshot.
|
|
11
|
+
//
|
|
12
|
+
// Why a stand-alone tick system instead of folding the dt accumulator
|
|
13
|
+
// into the renderer? Charter P5 producer/consumer separation: the
|
|
14
|
+
// renderer is a consumer of presentation state and never writes ECS
|
|
15
|
+
// columns; the tick system owns the per-entity write so the
|
|
16
|
+
// `SpriteRegionOverride.region` slot has exactly one writer (the tick
|
|
17
|
+
// system) and zero readers in the writer tree (the extract branch is a
|
|
18
|
+
// disjoint consumer). Plan-strategy section 1 + section 5 constraint #1
|
|
19
|
+
// pin the boundary; this file is the producer half.
|
|
20
|
+
//
|
|
21
|
+
// Schedule positioning (informational; the App schedule is wired by the
|
|
22
|
+
// host, not this file): input / time -> spriteAnimationTickSystem ->
|
|
23
|
+
// RenderSystem.extract. The tick is `void`-returning under the
|
|
24
|
+
// `Result<void, SpriteAnimationInvalidError>` shape so the schedule's
|
|
25
|
+
// Layer-3 ErrorHandler observes a structured first-error signal without
|
|
26
|
+
// the system aborting mid-pass on healthy entities (charter P3 explicit
|
|
27
|
+
// failure + P4 consistent abstraction with `setTransparentSortConfig`'s
|
|
28
|
+
// `Result<void, ResourceInvalidValueError>` shape).
|
|
29
|
+
//
|
|
30
|
+
// Invariants checked per-entity (AC-09 fail-fast paths; M1 T-05 added
|
|
31
|
+
// `SpriteAnimationInvalidError`):
|
|
32
|
+
// - `regions.length === frameCount * 4` -> detail.field='regions-length'
|
|
33
|
+
// - `frameDuration > 0` -> detail.field='frame-duration'
|
|
34
|
+
// First error wins; subsequent invalid entities still skip advance but
|
|
35
|
+
// only the first surfaces in the returned Result.err. Healthy entities
|
|
36
|
+
// continue to advance regardless of an invalid sibling (T-19 second
|
|
37
|
+
// it() block locks this).
|
|
38
|
+
//
|
|
39
|
+
// Time.delta sourcing: `world.getResource(Time).delta`. When
|
|
40
|
+
// the resource is missing (e.g. the tick system is invoked outside an
|
|
41
|
+
// `App` rAF loop), dt defaults to 0 and the system runs as a no-op
|
|
42
|
+
// schedule pass. Time.delta is already frame-loop clamped to a sane
|
|
43
|
+
// ceiling by `@forgeax/engine-app frame-loop.ts`; the tick system MUST
|
|
44
|
+
// NOT second-clamp (research F-3 + plan-strategy R-TIME-1). T-22 case
|
|
45
|
+
// (1) feeds dt=30s directly to lock that contract.
|
|
46
|
+
//
|
|
47
|
+
// playbackMode dispatch: the per-entity `playbackMode: u32` column is
|
|
48
|
+
// translated through `spritePlaybackModeFromU32` (M1 SSOT) into the
|
|
49
|
+
// closed `'loop' | 'clamp'` literal union. The advance arm is selected
|
|
50
|
+
// per-tick per-entity so AI users can mutate playbackMode at runtime
|
|
51
|
+
// (e.g. swap LOOP for CLAMP on a death animation) and observe the
|
|
52
|
+
// behavioural switch on the very next tick.
|
|
53
|
+
//
|
|
54
|
+
// Anchors: plan-strategy section 2 D-1 + D-5 + D-6 + D-7 + section 3.1
|
|
55
|
+
// TICK + section 3.2 sequence diagram Tick->Ovr block + section 4 risk
|
|
56
|
+
// R-TIME-1; plan-tasks.json T-23; requirements section 2.1 C system
|
|
57
|
+
// surface + section AC-04 / AC-05 / AC-09 + section 7 boundary table;
|
|
58
|
+
// charter P3 + P4 + P5 + F1.
|
|
59
|
+
|
|
60
|
+
import { type EntityHandle, Time, type World } from '@forgeax/engine-ecs';
|
|
61
|
+
import { SpriteAnimationInvalidError } from '@forgeax/engine-ecs/projection';
|
|
62
|
+
import {
|
|
63
|
+
SpriteAnimation,
|
|
64
|
+
SpriteRegionOverride,
|
|
65
|
+
spritePlaybackModeFromU32,
|
|
66
|
+
} from '@forgeax/engine-render/authoring';
|
|
67
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Walk every entity carrying `SpriteAnimation`, advance its dt
|
|
71
|
+
* accumulator, and write the current frame's UV slice to the entity's
|
|
72
|
+
* `SpriteRegionOverride` column.
|
|
73
|
+
*
|
|
74
|
+
* Returns `Result<void, SpriteAnimationInvalidError>`:
|
|
75
|
+
*
|
|
76
|
+
* - `ok(void)` when every observed entity satisfies both invariants
|
|
77
|
+
* (`regions.length === frameCount * 4` and `frameDuration > 0`) — the
|
|
78
|
+
* pass advanced every entity normally.
|
|
79
|
+
* - `err(SpriteAnimationInvalidError)` carrying the FIRST entity-level
|
|
80
|
+
* invariant violation observed during the pass. The offending entity
|
|
81
|
+
* does not advance (its `currentFrame` / `accumDt` columns stay
|
|
82
|
+
* untouched); every other healthy entity in the same pass still
|
|
83
|
+
* advances normally so AI users observe a "fail one, advance the
|
|
84
|
+
* rest" semantics rather than an all-or-nothing abort.
|
|
85
|
+
*
|
|
86
|
+
* The returned error is the canonical 4-field structured payload
|
|
87
|
+
* (`.code` / `.expected` / `.hint` / `.detail`) — narrow on
|
|
88
|
+
* `err.detail.field` (`'regions-length'` | `'frame-duration'`) to reach
|
|
89
|
+
* the per-arm recovery hint without parsing the message string
|
|
90
|
+
* (charter P3 + P4).
|
|
91
|
+
*
|
|
92
|
+
* @example Wire into an App schedule between input/time and the renderer:
|
|
93
|
+
* ```ts
|
|
94
|
+
* import { createApp } from '@forgeax/engine-app';
|
|
95
|
+
* import { spriteAnimationTickSystem } from '@forgeax/engine-runtime';
|
|
96
|
+
*
|
|
97
|
+
* const app = createApp({ canvas, schedule: { update: [
|
|
98
|
+
* spriteAnimationTickSystem,
|
|
99
|
+
* // ... other systems
|
|
100
|
+
* ] } });
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* @example Handle the first-error-wins surface:
|
|
104
|
+
* ```ts
|
|
105
|
+
* const r = spriteAnimationTickSystem(world);
|
|
106
|
+
* if (!r.ok) {
|
|
107
|
+
* // r.error.code === 'sprite-animation-invalid'
|
|
108
|
+
* if (r.error.detail.field === 'regions-length') {
|
|
109
|
+
* console.warn(`fix regions buffer length to ${r.error.detail.frameCount * 4}`);
|
|
110
|
+
* }
|
|
111
|
+
* }
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export function spriteAnimationTickSystem(world: World): Result<void, SpriteAnimationInvalidError> {
|
|
115
|
+
const dt = world.getResource(Time).delta;
|
|
116
|
+
|
|
117
|
+
// Query filters entities carrying SpriteAnimation, so a World that never
|
|
118
|
+
// spawned the component naturally yields an empty entity set (the pass is a
|
|
119
|
+
// no-op).
|
|
120
|
+
// Two-pass to avoid mid-iteration archetype migration. The auto-add
|
|
121
|
+
// of `SpriteRegionOverride` migrates the entity into a new archetype
|
|
122
|
+
// (SA + SRO) which a single-pass query would re-visit later in the same
|
|
123
|
+
// pass — yielding double-advance
|
|
124
|
+
// for any entity that did not yet carry the override. Collecting
|
|
125
|
+
// every Entity handle first gives each entity a single tick.
|
|
126
|
+
const entities = collectAnimEntities(world);
|
|
127
|
+
|
|
128
|
+
let firstError: SpriteAnimationInvalidError | null = null;
|
|
129
|
+
for (const entity of entities) {
|
|
130
|
+
const entryError = tickEntity(world, entity, dt);
|
|
131
|
+
if (entryError !== null && firstError === null) {
|
|
132
|
+
firstError = entryError;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (firstError !== null) {
|
|
137
|
+
return err(firstError);
|
|
138
|
+
}
|
|
139
|
+
return ok(undefined);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* First pass: collect every Entity handle from the ECS Query projection.
|
|
144
|
+
* Handles remain valid across subsequent migrations because they are stable
|
|
145
|
+
* index+generation identities, not archetype-row pointers.
|
|
146
|
+
*/
|
|
147
|
+
function collectAnimEntities(world: World): EntityHandle[] {
|
|
148
|
+
const queryResult = world.query({ with: [SpriteAnimation] });
|
|
149
|
+
if (!queryResult.ok) return [];
|
|
150
|
+
const entities: EntityHandle[] = [];
|
|
151
|
+
for (const row of queryResult.value) entities.push(row.entity);
|
|
152
|
+
return entities;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Second pass: validate one entity's `SpriteAnimation` invariants,
|
|
157
|
+
* advance its dt accumulator, and write the per-frame UV slice into
|
|
158
|
+
* `SpriteRegionOverride`. Returns `null` when the entity advanced
|
|
159
|
+
* normally; returns a structured `SpriteAnimationInvalidError` instance
|
|
160
|
+
* when the entity's row violates an invariant (the caller stitches the
|
|
161
|
+
* first such error into the system's Result.err).
|
|
162
|
+
*/
|
|
163
|
+
function tickEntity(
|
|
164
|
+
world: World,
|
|
165
|
+
entity: EntityHandle,
|
|
166
|
+
dt: number,
|
|
167
|
+
): SpriteAnimationInvalidError | null {
|
|
168
|
+
const snapRes = world.get(entity, SpriteAnimation);
|
|
169
|
+
if (!snapRes.ok) {
|
|
170
|
+
// Defensive: the alive-record check inside world.get already guards
|
|
171
|
+
// stale handles; reaching here means something racier (component
|
|
172
|
+
// sweep removed the column mid-pass). Skip silently — the route is
|
|
173
|
+
// engine-internal, not an AI-user-visible failure mode.
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
const snap = snapRes.value;
|
|
177
|
+
const frameCount = snap.frameCount;
|
|
178
|
+
const frameDuration = snap.frameDuration;
|
|
179
|
+
const regions = snap.regions;
|
|
180
|
+
|
|
181
|
+
// Invariant: regions.length === frameCount * 4 (D-1 fail-fast,
|
|
182
|
+
// T-19 covers).
|
|
183
|
+
if (regions.length !== frameCount * 4) {
|
|
184
|
+
return new SpriteAnimationInvalidError({
|
|
185
|
+
field: 'regions-length',
|
|
186
|
+
regionsLength: regions.length,
|
|
187
|
+
frameCount,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
// Invariant: frameDuration > 0 (covers both === 0 and < 0; T-20 +
|
|
191
|
+
// T-21 lock both arms to the same .detail.field='frame-duration'
|
|
192
|
+
// branch — charter P4 consistent abstraction).
|
|
193
|
+
if (!(frameDuration > 0)) {
|
|
194
|
+
return new SpriteAnimationInvalidError({
|
|
195
|
+
field: 'frame-duration',
|
|
196
|
+
frameDuration,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const advanced = advanceFrame(
|
|
201
|
+
snap.currentFrame,
|
|
202
|
+
snap.accumDt + dt,
|
|
203
|
+
frameDuration,
|
|
204
|
+
frameCount,
|
|
205
|
+
snap.playbackMode,
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
// Write the new clock state. Partial set leaves regions / frameCount
|
|
209
|
+
// / frameDuration / playbackMode untouched (world.set iterates
|
|
210
|
+
// Object.keys(value)).
|
|
211
|
+
const writeAnim = world.set(entity, SpriteAnimation, {
|
|
212
|
+
currentFrame: advanced.currentFrame,
|
|
213
|
+
accumDt: advanced.accumDt,
|
|
214
|
+
});
|
|
215
|
+
if (!writeAnim.ok) return null;
|
|
216
|
+
|
|
217
|
+
// Materialise the per-frame UV slice into SpriteRegionOverride.
|
|
218
|
+
// The slice is guaranteed to be 4 floats by the regions-length
|
|
219
|
+
// invariant above. A fresh Float32Array is allocated per write so
|
|
220
|
+
// the column owner's BufferPool slot does not alias the
|
|
221
|
+
// SpriteAnimation.regions backing array (charter P5 producer
|
|
222
|
+
// boundary: the override slot is a snapshot, not a view).
|
|
223
|
+
const sliceStart = advanced.currentFrame * 4;
|
|
224
|
+
const region = new Float32Array([
|
|
225
|
+
regions[sliceStart] ?? 0,
|
|
226
|
+
regions[sliceStart + 1] ?? 0,
|
|
227
|
+
regions[sliceStart + 2] ?? 0,
|
|
228
|
+
regions[sliceStart + 3] ?? 0,
|
|
229
|
+
]);
|
|
230
|
+
writeOverride(world, entity, region);
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Advance `currentFrame` / `accumDt` per the dt accumulator clock model
|
|
236
|
+
* (research F-3 + plan-strategy section 2 D-5). `dt` is the
|
|
237
|
+
* already-frame-loop-clamped Time.delta; the inner while-loop drains
|
|
238
|
+
* frameDuration units one at a time. The playbackMode discriminator
|
|
239
|
+
* picks LOOP (wrap) vs CLAMP (halt at last frame) per-tick per-entity
|
|
240
|
+
* (D-5).
|
|
241
|
+
*/
|
|
242
|
+
function advanceFrame(
|
|
243
|
+
currentFrameIn: number,
|
|
244
|
+
accumDtIn: number,
|
|
245
|
+
frameDuration: number,
|
|
246
|
+
frameCount: number,
|
|
247
|
+
playbackModeRaw: number,
|
|
248
|
+
): { currentFrame: number; accumDt: number } {
|
|
249
|
+
let currentFrame = currentFrameIn;
|
|
250
|
+
let accumDt = accumDtIn;
|
|
251
|
+
const playback = spritePlaybackModeFromU32(playbackModeRaw);
|
|
252
|
+
while (accumDt >= frameDuration) {
|
|
253
|
+
accumDt -= frameDuration;
|
|
254
|
+
switch (playback) {
|
|
255
|
+
case 'loop': {
|
|
256
|
+
currentFrame = (currentFrame + 1) % frameCount;
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
case 'clamp': {
|
|
260
|
+
// `min(currentFrame + 1, frameCount - 1)`; once at the last
|
|
261
|
+
// frame the index stops advancing. The accumDt subtraction
|
|
262
|
+
// continues so the residue does not pile up across ticks (T-18
|
|
263
|
+
// second it() block + T-22 case (2b) lock the halt).
|
|
264
|
+
if (currentFrame < frameCount - 1) {
|
|
265
|
+
currentFrame += 1;
|
|
266
|
+
}
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return { currentFrame, accumDt };
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Write the per-entity UV region into `SpriteRegionOverride`,
|
|
276
|
+
* add-or-set with no registration-concept probe.
|
|
277
|
+
*
|
|
278
|
+
* `addComponent` is the registration-agnostic entry point: it auto-adds
|
|
279
|
+
* the `SpriteRegionOverride` column on first use, so a World that only ever
|
|
280
|
+
* spawned `SpriteAnimation` reaches the override column through this single
|
|
281
|
+
* call (requirements section 7 boundary table row 2 / charter P3). When the
|
|
282
|
+
* entity already carries the column, `addComponent` returns
|
|
283
|
+
* `err(component-already-present)` — the steady-state signal — and we
|
|
284
|
+
* `set` the region in place. `SpriteRegionOverride` declares no
|
|
285
|
+
* relationship, so the exclusive auto-reparent arm of `addComponent`
|
|
286
|
+
* never fires and `component-already-present` is the only present-case
|
|
287
|
+
* outcome.
|
|
288
|
+
*
|
|
289
|
+
* This replaces the former `_getComponentByName` registration gate: the
|
|
290
|
+
* "is it registered" question is no longer asked at all — `addComponent`
|
|
291
|
+
* owns registration, and column presence is read from its structured
|
|
292
|
+
* `Result` rather than a per-World registry lookup.
|
|
293
|
+
*/
|
|
294
|
+
function writeOverride(world: World, entity: EntityHandle, region: Float32Array): void {
|
|
295
|
+
const added = world.addComponent(entity, {
|
|
296
|
+
component: SpriteRegionOverride,
|
|
297
|
+
data: { region },
|
|
298
|
+
});
|
|
299
|
+
if (!added.ok && added.error.code === 'component-already-present') {
|
|
300
|
+
world.set(entity, SpriteRegionOverride, { region });
|
|
301
|
+
}
|
|
302
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// @forgeax/engine-runtime - TS port of the WGSL luminance Reinhard
|
|
2
|
+
// extended tonemap (feat-20260519-tonemap-reinhard-mvp / M3 / T-M3.2).
|
|
3
|
+
//
|
|
4
|
+
// Mirrors the fragment-stage formula in `packages/shader/src/tonemap.wgsl`
|
|
5
|
+
// byte-for-byte so AI users (and tests) can predict GPU output without
|
|
6
|
+
// allocating a device:
|
|
7
|
+
//
|
|
8
|
+
// exposed = L_in * exposure
|
|
9
|
+
// Y = dot(exposed, vec3(0.2126, 0.7152, 0.0722)) // Rec. 709
|
|
10
|
+
// Y_prime = Y * (1 + Y / (Lw * Lw)) / (1 + Y)
|
|
11
|
+
// scale = Y_prime / max(Y, TONEMAP_LUMINANCE_EPSILON)
|
|
12
|
+
// L_out = exposed * scale
|
|
13
|
+
//
|
|
14
|
+
// The `max(Y, TONEMAP_LUMINANCE_EPSILON)` floor keeps the divisor finite
|
|
15
|
+
// at degenerate inputs (`Y = 0` from black pixels, `Y < 0` from numerical
|
|
16
|
+
// artefacts). The constant is shared with the WGSL fragment via
|
|
17
|
+
// `@forgeax/engine-shader#TONEMAP_LUMINANCE_EPSILON` (D-O3 single SSOT;
|
|
18
|
+
// `1e-5`).
|
|
19
|
+
|
|
20
|
+
import { TONEMAP_LUMINANCE_EPSILON } from '@forgeax/engine-shader';
|
|
21
|
+
|
|
22
|
+
/** Rec. 709 luminance weights — match the `vec3(0.2126, 0.7152, 0.0722)`
|
|
23
|
+
* literal in `packages/shader/src/tonemap.wgsl` byte-for-byte. */
|
|
24
|
+
export const REC709_LUMA_WEIGHTS = Object.freeze([0.2126, 0.7152, 0.0722] as const);
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Compute the post-tonemap LDR colour for a single linear HDR sample.
|
|
28
|
+
*
|
|
29
|
+
* Pure function: no GPU device, no allocation cost beyond the 3-element
|
|
30
|
+
* tuple return. Tests use this to assert the shader-side formula without
|
|
31
|
+
* spinning up a real adapter (charter proposition 5 consistent abstraction
|
|
32
|
+
* — TS port and WGSL fragment share the constant + the formula).
|
|
33
|
+
*
|
|
34
|
+
* @param l_in Linear HDR sample as `[r, g, b]` (typically read out of
|
|
35
|
+
* an `rgba16float` colour attachment).
|
|
36
|
+
* @param exposure Pre-multiplier applied before the luminance computation.
|
|
37
|
+
* Values <= 0 are still safe — the floor on Y guarantees
|
|
38
|
+
* a finite result (NaN / Inf cannot escape).
|
|
39
|
+
* @param whitePoint Bright-end break point Lw. Values <= 0 fall through
|
|
40
|
+
* the same floor; large values approach the basic
|
|
41
|
+
* Reinhard curve `Y / (1 + Y)`.
|
|
42
|
+
*
|
|
43
|
+
* @returns Tonemapped LDR colour as `[r, g, b]`. Each channel is finite
|
|
44
|
+
* provided `l_in` is finite; clamp to `[0, 1]` at the call site
|
|
45
|
+
* if the consumer needs strict swap-chain bounds.
|
|
46
|
+
*/
|
|
47
|
+
export function tonemapReinhardLuminance(
|
|
48
|
+
l_in: readonly [number, number, number],
|
|
49
|
+
exposure: number,
|
|
50
|
+
whitePoint: number,
|
|
51
|
+
): [number, number, number] {
|
|
52
|
+
const exposedR = (l_in[0] ?? 0) * exposure;
|
|
53
|
+
const exposedG = (l_in[1] ?? 0) * exposure;
|
|
54
|
+
const exposedB = (l_in[2] ?? 0) * exposure;
|
|
55
|
+
|
|
56
|
+
const wR = REC709_LUMA_WEIGHTS[0];
|
|
57
|
+
const wG = REC709_LUMA_WEIGHTS[1];
|
|
58
|
+
const wB = REC709_LUMA_WEIGHTS[2];
|
|
59
|
+
|
|
60
|
+
const luma = exposedR * wR + exposedG * wG + exposedB * wB;
|
|
61
|
+
const lwSq = whitePoint * whitePoint;
|
|
62
|
+
const lumaPrime = (luma * (1 + luma / lwSq)) / (1 + luma);
|
|
63
|
+
const scale = lumaPrime / Math.max(luma, TONEMAP_LUMINANCE_EPSILON);
|
|
64
|
+
|
|
65
|
+
return [exposedR * scale, exposedG * scale, exposedB * scale];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { TONEMAP_LUMINANCE_EPSILON } from '@forgeax/engine-shader';
|