@forgeax/engine-runtime 0.1.2
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 +183 -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-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-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-registry-scene.test-d.d.ts +2 -0
- package/dist/__tests__/asset-registry-scene.test-d.d.ts.map +1 -0
- package/dist/__tests__/bind-group-cache-binding.test.d.ts +2 -0
- package/dist/__tests__/bind-group-cache-binding.test.d.ts.map +1 -0
- package/dist/__tests__/bind-group-cache-frame.test.d.ts +2 -0
- package/dist/__tests__/bind-group-cache-frame.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-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 +3 -0
- package/dist/__tests__/collect-scene-asset.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 +3 -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__/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/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__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts +2 -0
- package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts +2 -0
- package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts +2 -0
- package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts +2 -0
- package/dist/__tests__/dispatch-fullscreen-pass-params.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__/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__/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__/fog-producer-manifest.d.ts +131 -0
- package/dist/__tests__/fog-producer-manifest.d.ts.map +1 -0
- package/dist/__tests__/fog-producer-pixel-probe.d.ts +42 -0
- package/dist/__tests__/fog-producer-pixel-probe.d.ts.map +1 -0
- package/dist/__tests__/fog-producer-pixel.browser.test.d.ts +2 -0
- package/dist/__tests__/fog-producer-pixel.browser.test.d.ts.map +1 -0
- package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts +2 -0
- package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/fog-producer-real-fixture.d.ts +5 -0
- package/dist/__tests__/fog-producer-real-fixture.d.ts.map +1 -0
- package/dist/__tests__/fog-producer-vfx-effect.d.ts +3 -0
- package/dist/__tests__/fog-producer-vfx-effect.d.ts.map +1 -0
- package/dist/__tests__/fog-scene-asset.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-scene-asset.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-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__/gpu-resource-store-cubemap-status.test.d.ts +2 -0
- package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-resource.test.d.ts +2 -0
- package/dist/__tests__/gpu-resource.test.d.ts.map +1 -0
- package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts +2 -0
- package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts.map +1 -0
- package/dist/__tests__/hdrp-buffers.unit.test.d.ts +2 -0
- package/dist/__tests__/hdrp-buffers.unit.test.d.ts.map +1 -0
- package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts +2 -0
- package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts.map +1 -0
- package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts +2 -0
- package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts.map +1 -0
- package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts +2 -0
- package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts.map +1 -0
- package/dist/__tests__/hdrp-ssao-boundary.test.d.ts +2 -0
- package/dist/__tests__/hdrp-ssao-boundary.test.d.ts.map +1 -0
- package/dist/__tests__/hdrp-ssao-falsification.test.d.ts +2 -0
- package/dist/__tests__/hdrp-ssao-falsification.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/primitive-world.d.ts +8 -0
- package/dist/__tests__/helpers/primitive-world.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/render-asset-port.d.ts +15 -0
- package/dist/__tests__/helpers/render-asset-port.d.ts.map +1 -0
- package/dist/__tests__/helpers/scene-asset-port.d.ts +9 -0
- package/dist/__tests__/helpers/scene-asset-port.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__/instances.test-d.d.ts +2 -0
- package/dist/__tests__/instances.test-d.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__/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-derived-coordinates.integration.test.d.ts +2 -0
- package/dist/__tests__/material-derived-coordinates.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-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__/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-layout-selection.test.d.ts +2 -0
- package/dist/__tests__/pipeline-layout-selection.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__/post-process-reads-narrowing.test-d.d.ts +2 -0
- package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts.map +1 -0
- package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts +2 -0
- package/dist/__tests__/post-process-register-roundtrip.dawn.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.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-feature-zero-feature.browser.test.d.ts +2 -0
- package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-pipeline-trivial.dawn.test.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-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__/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__/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__/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-equirect-roundtrip.test.d.ts +2 -0
- package/dist/__tests__/scene-equirect-roundtrip.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__/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-caster-membership.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-caster-membership.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-pssm.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-pssm.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-temporal.browser.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-temporal.browser.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-csm-viewport.test.d.ts +2 -0
- package/dist/__tests__/shadow-csm-viewport.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-m2.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-m2.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-m3-calibrate.d.ts +83 -0
- package/dist/__tests__/shadow-m3-calibrate.d.ts.map +1 -0
- package/dist/__tests__/shadow-m3.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-m3.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__/shadow-probe-control-flow.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts +2 -0
- package/dist/__tests__/shadow-quality-metrics.dawn.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__/temporal-off-path.unit.test.d.ts +2 -0
- package/dist/__tests__/temporal-off-path.unit.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__/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__/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-cache-regression.unit.test.d.ts +2 -0
- package/dist/__tests__/video-cache-regression.unit.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__/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/asset-kind.d.ts +4 -0
- package/dist/asset-kind.d.ts.map +1 -0
- package/dist/collect-scene-asset.d.ts +16 -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 +3 -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/errors/sprite-animation.d.ts +3 -0
- package/dist/errors/sprite-animation.d.ts.map +1 -0
- package/dist/index.d.ts +280 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +814 -0
- package/dist/index.mjs.map +1 -0
- package/dist/scene-asset-port.d.ts +17 -0
- package/dist/scene-asset-port.d.ts.map +1 -0
- package/dist/scene-collect-errors.d.ts +22 -0
- package/dist/scene-collect-errors.d.ts.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-utils/mount-override-fold.d.ts +16 -0
- package/dist/scene-utils/mount-override-fold.d.ts.map +1 -0
- package/dist/shadow-m3-calibrate.d.ts +40 -0
- package/dist/shadow-m3-calibrate.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 +51 -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 +100 -0
- package/src/__tests__/active-camera.unit.test.ts +193 -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-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-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-registry-scene.test-d.ts +49 -0
- package/src/__tests__/bind-group-cache-binding.test.ts +2513 -0
- package/src/__tests__/bind-group-cache-frame.test.ts +1511 -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-shader-register-e2e.test.ts +151 -0
- package/src/__tests__/cache-false-eviction.test.ts +126 -0
- package/src/__tests__/cache-isolation-matrix.test.ts +182 -0
- package/src/__tests__/camera-clear-snapshot-equivalence.unit.test.ts +76 -0
- package/src/__tests__/clamp-to-last.e2e.browser.test.ts +183 -0
- package/src/__tests__/clamp-to-last.e2e.dawn.test.ts +325 -0
- package/src/__tests__/collect-scene-asset.test.ts +876 -0
- package/src/__tests__/collect-subtree.unit.test.ts +76 -0
- package/src/__tests__/collect-transient-children-absent.test.ts +154 -0
- package/src/__tests__/collect-transient-roundtrip.test.ts +245 -0
- package/src/__tests__/collect-transient-skip.test.ts +165 -0
- package/src/__tests__/components.test-d.ts +236 -0
- package/src/__tests__/components.unit.test.ts +2665 -0
- package/src/__tests__/composite-skybox-cross-world.browser.test.ts +378 -0
- package/src/__tests__/create-renderer-assembly.integration.test.ts +42 -0
- package/src/__tests__/createRenderer-dispose.test.ts +416 -0
- package/src/__tests__/createRenderer-requiredFeatures.unit.test.ts +134 -0
- package/src/__tests__/createRenderer.browser-no-webgpu.test.ts +59 -0
- package/src/__tests__/createRenderer.unit.test.ts +231 -0
- package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +393 -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 +241 -0
- package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +611 -0
- package/src/__tests__/dawn/instances-shadow.dawn.test.ts +443 -0
- package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +313 -0
- package/src/__tests__/dawn/material-alpha.dawn.test.ts +304 -0
- package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +64 -0
- package/src/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.ts +106 -0
- package/src/__tests__/dawn/mesh-update.dawn.test.ts +342 -0
- package/src/__tests__/dawn/mipmap-srgb-linear.dawn.test.ts +117 -0
- package/src/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.ts +567 -0
- package/src/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.ts +251 -0
- package/src/__tests__/dawn/tonemap.dawn.test.ts +107 -0
- package/src/__tests__/dawn/user-handle-mesh-render.dawn.test.ts +291 -0
- package/src/__tests__/dawn/user-mesh-upload.dawn.test.ts +204 -0
- package/src/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.ts +122 -0
- package/src/__tests__/dawn/zero-manifest-ready.dawn.test.ts +99 -0
- package/src/__tests__/demo-sortscope-migration.unit.test.ts +115 -0
- package/src/__tests__/derive-bgl-integration.test.ts +398 -0
- package/src/__tests__/derive-render-data-skin.unit.test.ts +90 -0
- package/src/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.ts +204 -0
- package/src/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.ts +297 -0
- package/src/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.ts +271 -0
- package/src/__tests__/dispatch-fullscreen-pass-params.unit.test.ts +321 -0
- package/src/__tests__/draw-published.ts +10 -0
- package/src/__tests__/environment-error-exhaustive.test-d.ts +28 -0
- package/src/__tests__/equirect-bc6h.integration.test.ts +35 -0
- package/src/__tests__/error-exhaustive.test.ts +220 -0
- package/src/__tests__/extract-frames-graceful-degradation.test.ts +298 -0
- package/src/__tests__/extract-frames-merge.test.ts +643 -0
- package/src/__tests__/extract-frames-reset.test.ts +158 -0
- package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +92 -0
- package/src/__tests__/fog-producer-manifest.ts +162 -0
- package/src/__tests__/fog-producer-pixel-probe.ts +263 -0
- package/src/__tests__/fog-producer-pixel.browser.test.ts +26 -0
- package/src/__tests__/fog-producer-pixel.dawn.test.ts +55 -0
- package/src/__tests__/fog-producer-real-fixture.ts +805 -0
- package/src/__tests__/fog-producer-vfx-effect.ts +272 -0
- package/src/__tests__/fog-scene-asset.integration.test.ts +123 -0
- package/src/__tests__/frame-targets-shadow-regression.unit.test.ts +28 -0
- package/src/__tests__/fullscreen-post-bgl-depth.test.ts +131 -0
- package/src/__tests__/fullscreen-post-depth-params-arity.test.ts +84 -0
- package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +320 -0
- package/src/__tests__/fullscreen-post-process-pass.unit.test.ts +107 -0
- package/src/__tests__/fxaa-pixel-diff.dawn.test.ts +292 -0
- package/src/__tests__/fxaa-validation-and-resize.dawn.test.ts +358 -0
- package/src/__tests__/fxaa-zero-overhead.dawn.test.ts +254 -0
- package/src/__tests__/geometry.unit.test.ts +2265 -0
- package/src/__tests__/glyph-tilemap-worldid.test.ts +146 -0
- package/src/__tests__/gpu-resource-cow-survivor.test.ts +388 -0
- package/src/__tests__/gpu-resource-store-cubemap-status.test.ts +207 -0
- package/src/__tests__/gpu-resource.test.ts +1206 -0
- package/src/__tests__/hdrp-bgl-slots.browser.test.ts +50 -0
- package/src/__tests__/hdrp-buffers.unit.test.ts +70 -0
- package/src/__tests__/hdrp-execute-filter.unit.test.ts +200 -0
- package/src/__tests__/hdrp-gbuffer-attachments.browser.test.ts +64 -0
- package/src/__tests__/hdrp-pipeline-asset-type.test-d.ts +139 -0
- package/src/__tests__/hdrp-ssao-boundary.test.ts +237 -0
- package/src/__tests__/hdrp-ssao-falsification.test.ts +289 -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/primitive-world.ts +91 -0
- package/src/__tests__/helpers/register-runtime-components.ts +69 -0
- package/src/__tests__/helpers/register-scene-components.ts +10 -0
- package/src/__tests__/helpers/render-asset-port.ts +65 -0
- package/src/__tests__/helpers/scene-asset-port.ts +23 -0
- package/src/__tests__/helpers/tilemap-assets.ts +29 -0
- package/src/__tests__/instances.test-d.ts +61 -0
- package/src/__tests__/light-attenuation-formula.test.ts +171 -0
- package/src/__tests__/light-casters-9-light.browser.test.ts +880 -0
- package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +163 -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 +2936 -0
- package/src/__tests__/m3-vec-negative.unit.test.ts +45 -0
- package/src/__tests__/m5-browser-dawn-sweep.integration.test.ts +8 -0
- package/src/__tests__/material-derived-coordinates.integration.test.ts +100 -0
- package/src/__tests__/material-texture-uv-scale.unit.test.ts +49 -0
- package/src/__tests__/materials.unit.test.ts +271 -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 +406 -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__/node-shims.d.ts +33 -0
- package/src/__tests__/pass-selector.unit.test.ts +102 -0
- package/src/__tests__/pbr-pipeline.unit.test.ts +204 -0
- package/src/__tests__/pipeline-builder-msaa.unit.test.ts +224 -0
- package/src/__tests__/pipeline-cache-keying.unit.test.ts +316 -0
- package/src/__tests__/pipeline-layout-selection.test.ts +298 -0
- package/src/__tests__/pipeline-spec.test.ts +1061 -0
- package/src/__tests__/pipeline.unit.test.ts +6974 -0
- package/src/__tests__/point-light-shadow.browser.test.ts +278 -0
- package/src/__tests__/point-light-shadow.dawn.test.ts +822 -0
- package/src/__tests__/point-light-shadow.unit.test.ts +716 -0
- package/src/__tests__/post-process-error-codes.unit.test.ts +158 -0
- package/src/__tests__/post-process-params-component.unit.test.ts +153 -0
- package/src/__tests__/post-process-params-extract.unit.test.ts +100 -0
- package/src/__tests__/post-process-reads-narrowing.test-d.ts +52 -0
- package/src/__tests__/post-process-register-roundtrip.dawn.test.ts +230 -0
- package/src/__tests__/postprocess-camera-consistency.test.ts +378 -0
- package/src/__tests__/profiler-assembly.integration.test.ts +74 -0
- package/src/__tests__/propagate-transforms.dawn.test.ts +253 -0
- package/src/__tests__/record-worldid-isolation.test.ts +247 -0
- package/src/__tests__/recover-error-exhaustive.test-d.ts +35 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +245 -0
- package/src/__tests__/render-feature-assembly.test-d.ts +28 -0
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +124 -0
- package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +582 -0
- package/src/__tests__/render-feature-prepared-graphics.dawn.test.ts +602 -0
- package/src/__tests__/render-feature-prepared-graphics.integration.test.ts +264 -0
- package/src/__tests__/render-feature-prepared-graphics.regression.integration.test.ts +361 -0
- package/src/__tests__/render-feature-recover.integration.test.ts +142 -0
- package/src/__tests__/render-feature-runtime-surface.test-d.ts +45 -0
- package/src/__tests__/render-feature-zero-feature.browser.test.ts +152 -0
- package/src/__tests__/render-pipeline-trivial.dawn.test.ts +525 -0
- package/src/__tests__/render-schema-consumer.integration.test.ts +25 -0
- package/src/__tests__/render-schema-owner-boundary.unit.test.ts +26 -0
- package/src/__tests__/render-system-cross-world-overlay-queue.test.ts +172 -0
- package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +322 -0
- package/src/__tests__/render-system-extract.test.ts +1399 -0
- package/src/__tests__/render-system-fold-bucket.unit.test.ts +288 -0
- package/src/__tests__/render-system-fold-fallback.unit.test.ts +148 -0
- package/src/__tests__/render-system-fold-material.unit.test.ts +145 -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 +306 -0
- package/src/__tests__/render-system-mega.test.ts +1578 -0
- package/src/__tests__/render-system-owner-split-contract.test.ts +200 -0
- package/src/__tests__/render-system-record-multi-material-textureview.test.ts +684 -0
- package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +464 -0
- package/src/__tests__/render-system-record.test.ts +1505 -0
- package/src/__tests__/render-system-record.unit.test.ts +270 -0
- package/src/__tests__/render-system-skin-bg.unit.test.ts +147 -0
- package/src/__tests__/renderer-consumer.test-d.ts +5 -0
- package/src/__tests__/renderer-health.unit.test.ts +935 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +29 -0
- package/src/__tests__/renderer-recover.unit.test.ts +1075 -0
- package/src/__tests__/renderer-result.test-d.ts +26 -0
- package/src/__tests__/renderer-surface.unit.test.ts +416 -0
- package/src/__tests__/resolve-depth-only-view.test.ts +173 -0
- package/src/__tests__/rhi-null-command-flow.unit.test.ts +273 -0
- package/src/__tests__/rhi-null-noop-behavior.unit.test.ts +196 -0
- package/src/__tests__/rhi-null-renderer-lifecycle.unit.test.ts +182 -0
- package/src/__tests__/roots-to-scene-asset.test.ts +605 -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-equirect-roundtrip.test.ts +33 -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__/serialize-scene-asset.test.ts +336 -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 +334 -0
- package/src/__tests__/shadow-csm-caster-membership.test.ts +232 -0
- package/src/__tests__/shadow-csm-component.test.ts +286 -0
- package/src/__tests__/shadow-csm-extract.test.ts +334 -0
- package/src/__tests__/shadow-csm-orthoz.test.ts +151 -0
- package/src/__tests__/shadow-csm-pssm.test.ts +142 -0
- package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +198 -0
- package/src/__tests__/shadow-csm-shader.dawn.test.ts +358 -0
- package/src/__tests__/shadow-csm-temporal.browser.test.ts +145 -0
- package/src/__tests__/shadow-csm-tile-consistency.test.ts +419 -0
- package/src/__tests__/shadow-csm-ubo.dawn.test.ts +293 -0
- package/src/__tests__/shadow-csm-ubo.test.ts +300 -0
- package/src/__tests__/shadow-csm-viewport.browser.test.ts +85 -0
- package/src/__tests__/shadow-csm-viewport.test.ts +74 -0
- package/src/__tests__/shadow-fields-observable.dawn.test.ts +615 -0
- package/src/__tests__/shadow-m1.dawn.test.ts +105 -0
- package/src/__tests__/shadow-m2.dawn.test.ts +394 -0
- package/src/__tests__/shadow-m3-calibrate-run.dawn.test.ts +248 -0
- package/src/__tests__/shadow-m3-calibrate.ts +203 -0
- package/src/__tests__/shadow-m3.dawn.test.ts +288 -0
- package/src/__tests__/shadow-mesh-ssbo-order.test.ts +64 -0
- package/src/__tests__/shadow-probe-control-flow.dawn.test.ts +264 -0
- package/src/__tests__/shadow-quality-metrics.dawn.test.ts +324 -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 +23 -0
- package/src/__tests__/skin-parented-double-transform.test.ts +268 -0
- package/src/__tests__/skylight-lazy-projection.test.ts +359 -0
- package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +43 -0
- package/src/__tests__/sprite-cullmode-flip.dawn.test.ts +470 -0
- package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +141 -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 +347 -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 +1229 -0
- package/src/__tests__/ssao-pipelines.test.ts +275 -0
- package/src/__tests__/ssao-uniform-layout.test.ts +178 -0
- package/src/__tests__/static-rig.integration.test.ts +9 -0
- package/src/__tests__/stencil-outline-pixel.dawn.test.ts +295 -0
- package/src/__tests__/swap-chain-format.unit.test.ts +117 -0
- package/src/__tests__/systems.unit.test.ts +9957 -0
- package/src/__tests__/temporal-off-path.unit.test.ts +69 -0
- package/src/__tests__/text.unit.test.ts +466 -0
- package/src/__tests__/tilemap-childed-despawn.test.ts +468 -0
- package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +314 -0
- package/src/__tests__/tilemap-chunk-extract.propagate-order.test.ts +80 -0
- package/src/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.ts +424 -0
- package/src/__tests__/tilemap-chunk-extract.test.ts +236 -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 +300 -0
- package/src/__tests__/tilemap-material-cache.test.ts +137 -0
- package/src/__tests__/tilemap-multi-atlas.test.ts +237 -0
- package/src/__tests__/tilemap-owner-boundary.unit.test.ts +63 -0
- package/src/__tests__/tilemap-region-pack.test.ts +153 -0
- package/src/__tests__/tilemap-spawn-flip-pivot.test.ts +274 -0
- package/src/__tests__/tilemap-uv-inset.test.ts +204 -0
- package/src/__tests__/tilemap-validate.test.ts +201 -0
- package/src/__tests__/transform-hierarchy-pixel-diff.dawn.test.ts +274 -0
- package/src/__tests__/transient-fields-collect.test.ts +203 -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-cache-regression.unit.test.ts +186 -0
- package/src/__tests__/video-extract-bindgroup.dawn.test.ts +450 -0
- package/src/__tests__/view-ubo-layout.browser.test.ts +183 -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 +228 -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/asset-kind.ts +7 -0
- package/src/collect-scene-asset.ts +689 -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 +61 -0
- package/src/dev-import-transport.ts +97 -0
- package/src/errors/environment.ts +6 -0
- package/src/errors/sprite-animation.ts +5 -0
- package/src/index.ts +442 -0
- package/src/scene-asset-port.ts +32 -0
- package/src/scene-collect-errors.ts +30 -0
- package/src/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.ts +183 -0
- package/src/scene-utils/mount-override-fold.ts +217 -0
- package/src/shadow-m3-calibrate.ts +171 -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,434 @@
|
|
|
1
|
+
// @forgeax/engine-runtime - transparent-sort.ts (feat-20260520-2d-sprite-
|
|
2
|
+
// layer-mvp / M-3 / w23). SoA Float64Array predicted-key sort consumed by
|
|
3
|
+
// the RenderSystem record stage (M-3 / w25) right before recording the
|
|
4
|
+
// transparent bucket.
|
|
5
|
+
//
|
|
6
|
+
// Algorithm (plan-strategy §2 next-tier decision D-8 SoA columnar
|
|
7
|
+
// Float64Array; chosen because pure JS Array.sort estimates 4 ms for 10k
|
|
8
|
+
// entries / 100 iter ((research §Finding D-2 estimate), and SoA Float64
|
|
9
|
+
// preset key sort estimates < 0.2 ms — well under the AC-14 0.5 ms p95
|
|
10
|
+
// budget):
|
|
11
|
+
//
|
|
12
|
+
// 1. Walk `entries` once and project each into:
|
|
13
|
+
// - `layers : Float64Array(n)` — primary sort key (Layer.value).
|
|
14
|
+
// - `sortVals : Float64Array(n)` — predicted sort value per entry,
|
|
15
|
+
// derived from `mode` + `yzAlpha` + per-entry inputs OR the
|
|
16
|
+
// per-entity `sortKey` override.
|
|
17
|
+
// - `indices : Int32Array(n)` — reusable `[0..n)` index buffer.
|
|
18
|
+
// 2. Stable radix passes sort `indices` by material, sort value, then
|
|
19
|
+
// layer. The least-significant-first order composes the same composite
|
|
20
|
+
// ordering without a boxed JS comparator or per-call index array.
|
|
21
|
+
// 3. Return entries reordered by the sorted indices.
|
|
22
|
+
//
|
|
23
|
+
// Why SoA over Object-of-Structs comparator: V8's PSP / TimSort visits
|
|
24
|
+
// the comparator O(n log n) times; pulling `entry.layer` + recomputing
|
|
25
|
+
// the mode formula per comparator call would multiply cache misses + JS
|
|
26
|
+
// engine bridge overhead. Pre-projecting into Int32 + Float64 typed
|
|
27
|
+
// arrays keeps the comparator a pair of typed-array index loads (cache
|
|
28
|
+
// hot) + 1 / 2 subtractions.
|
|
29
|
+
//
|
|
30
|
+
// 3-mode formulas (requirements §3 AC-10 + plan-strategy §3.3 sort path):
|
|
31
|
+
//
|
|
32
|
+
// | mode | mode constant | sortValue formula |
|
|
33
|
+
// |:-:|:----------------------------------|:----------------------------------------------------|
|
|
34
|
+
// | 0 | `TRANSPARENT_SORT_MODE_LAYER_Z` | `posZ` |
|
|
35
|
+
// | 1 | `TRANSPARENT_SORT_MODE_LAYER_Y` | `-(posY - pivotY * sizeY)` |
|
|
36
|
+
// | 2 | `TRANSPARENT_SORT_MODE_LAYER_YZ` | `(posY - pivotY * sizeY) + yzAlpha * posZ` |
|
|
37
|
+
// | 3 | `TRANSPARENT_SORT_MODE_DISTANCE` | `-(squared distance to cameraPos)` |
|
|
38
|
+
//
|
|
39
|
+
// SortKey override (requirements §3 AC-10 + AC-19 derivation row): when an
|
|
40
|
+
// entry carries `sortKey !== undefined`, its sortValue is REPLACED by the
|
|
41
|
+
// override - the layer remains the primary key, the mode formula is
|
|
42
|
+
// skipped. AI users use this to pin one sprite above / below the procedural
|
|
43
|
+
// ordering inside the same layer without reshaping the whole scene.
|
|
44
|
+
//
|
|
45
|
+
// @derives ECS archetypeStorage SoA column-of-arrays pattern (packages/ecs/
|
|
46
|
+
// src/component.ts:6-9) — typed-array columns indexed by row position,
|
|
47
|
+
// no per-row object allocation.
|
|
48
|
+
// @new-surface SoA Float64Array predicted-key sort over Object-of-Structs
|
|
49
|
+
// comparator (research §Finding D-2 path 3); estimated < 0.2 ms p95 for
|
|
50
|
+
// 10k entries vs the 4 ms pure-Array.sort baseline; M-4 bench (w27)
|
|
51
|
+
// validates against the 0.5 ms acceptance gate.
|
|
52
|
+
//
|
|
53
|
+
// charter mapping: F1 (single-import barrel — transparent-sort joins the
|
|
54
|
+
// existing render-system surface) + P3 (deterministic stable sort -
|
|
55
|
+
// charter "structured failure" extends to "deterministic ordering" inside
|
|
56
|
+
// the rendering pipeline; same-key entries preserve insertion order) + P4
|
|
57
|
+
// (consistent abstraction - the SoA columnar pattern mirrors the ECS
|
|
58
|
+
// archetypeStorage layout).
|
|
59
|
+
|
|
60
|
+
import type { World } from '@forgeax/engine-ecs';
|
|
61
|
+
import type { TransparentEntry } from '@forgeax/engine-render/internal';
|
|
62
|
+
import {
|
|
63
|
+
getTransparentSortConfig,
|
|
64
|
+
TRANSPARENT_SORT_MODE_DISTANCE,
|
|
65
|
+
TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
66
|
+
TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
67
|
+
TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
68
|
+
} from '@forgeax/engine-render/internal';
|
|
69
|
+
|
|
70
|
+
export type { TransparentEntry } from '@forgeax/engine-render/internal';
|
|
71
|
+
|
|
72
|
+
let transparentSortLayers = new Float64Array(0);
|
|
73
|
+
let transparentSortValues = new Float64Array(0);
|
|
74
|
+
let transparentSortMaterials = new Float64Array(0);
|
|
75
|
+
let transparentSortIndices = new Int32Array(0);
|
|
76
|
+
|
|
77
|
+
function ensureTransparentSortCapacity(n: number): void {
|
|
78
|
+
if (transparentSortIndices.length >= n) return;
|
|
79
|
+
transparentSortLayers = new Float64Array(n);
|
|
80
|
+
transparentSortValues = new Float64Array(n);
|
|
81
|
+
transparentSortMaterials = new Float64Array(n);
|
|
82
|
+
transparentSortIndices = new Int32Array(n);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Sort the transparent-bucket entries by `(layer ASC, sortValue ASC,
|
|
87
|
+
* insertion-order)` and return the reordered list.
|
|
88
|
+
*
|
|
89
|
+
* The world is consumed read-only for `getTransparentSortConfig(world)`
|
|
90
|
+
* (D-2 `hasResource` guard, never throws); no entity / component mutation.
|
|
91
|
+
*
|
|
92
|
+
* Sort stability: Array.prototype.sort is stable per ES2019 — entries that
|
|
93
|
+
* share `(layer, sortValue)` keep their insertion order. This matters for
|
|
94
|
+
* tests that spawn entities in a specific order and expect that order to
|
|
95
|
+
* survive the sort when no other ordering signal is present.
|
|
96
|
+
*
|
|
97
|
+
* @example mode=0 horizontal-z + 4 entries crossing 3 layers
|
|
98
|
+
* const out = transparentSortEntries(entries, world);
|
|
99
|
+
* // entries with lower layer first; within a layer, lower posZ first.
|
|
100
|
+
*
|
|
101
|
+
* @example mode=1 JRPG Y-sort, foot pivot
|
|
102
|
+
* world.insertResource(TRANSPARENT_SORT_CONFIG_KEY,
|
|
103
|
+
* { mode: TRANSPARENT_SORT_MODE_LAYER_Y, yzAlpha: 1.0 });
|
|
104
|
+
* const out = transparentSortEntries(entries, world);
|
|
105
|
+
* // entries with deeper foot-Y draw later (back-to-front).
|
|
106
|
+
*
|
|
107
|
+
* @example SortKey override
|
|
108
|
+
* // entry { layer: 0, posY: 10, pivotY: 0.5, sizeY: 1, sortKey: -99 }
|
|
109
|
+
* // -> uses sortValue = -99 instead of the mode formula, but layer
|
|
110
|
+
* // remains the primary key (foreground entries still draw last).
|
|
111
|
+
*/
|
|
112
|
+
export function transparentSortEntries(
|
|
113
|
+
entries: readonly TransparentEntry[],
|
|
114
|
+
world: World,
|
|
115
|
+
cameraPos?: readonly [number, number, number],
|
|
116
|
+
): readonly TransparentEntry[] {
|
|
117
|
+
const n = entries.length;
|
|
118
|
+
if (n === 0) return entries;
|
|
119
|
+
|
|
120
|
+
const cfg = getTransparentSortConfig(world);
|
|
121
|
+
const mode = cfg.mode;
|
|
122
|
+
const yzAlpha = cfg.yzAlpha;
|
|
123
|
+
|
|
124
|
+
// SoA pre-projection columns. Reuse the columns and the stable radix index
|
|
125
|
+
// buffer so steady-state sorting does not allocate a boxed index array.
|
|
126
|
+
ensureTransparentSortCapacity(n);
|
|
127
|
+
const layers = transparentSortLayers;
|
|
128
|
+
const sortVals = transparentSortValues;
|
|
129
|
+
const materials = transparentSortMaterials;
|
|
130
|
+
const indices = transparentSortIndices.subarray(0, n);
|
|
131
|
+
for (let i = 0; i < n; i++) {
|
|
132
|
+
const e = entries[i] as TransparentEntry;
|
|
133
|
+
layers[i] = e.layer;
|
|
134
|
+
sortVals[i] = computeSortValue(e, mode, yzAlpha, cameraPos);
|
|
135
|
+
materials[i] = e.materialHandle;
|
|
136
|
+
indices[i] = i;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Stable least-significant passes compose the same order as the former
|
|
140
|
+
// comparator: material is tertiary for modes 0/1/2, sortValue is secondary,
|
|
141
|
+
// and layer is primary. Distance intentionally omits material, preserving
|
|
142
|
+
// insertion order for exact distance ties.
|
|
143
|
+
if (mode !== TRANSPARENT_SORT_MODE_DISTANCE) argsortInPlace(materials, indices);
|
|
144
|
+
argsortInPlace(sortVals, indices);
|
|
145
|
+
argsortInPlace(layers, indices);
|
|
146
|
+
|
|
147
|
+
const sorted: TransparentEntry[] = new Array(n);
|
|
148
|
+
for (let i = 0; i < n; i++) {
|
|
149
|
+
sorted[i] = entries[indices[i] as number] as TransparentEntry;
|
|
150
|
+
}
|
|
151
|
+
return sorted;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Per-entry sortValue projection. The 3 mode formulas + the SortKey
|
|
156
|
+
* override are kept in a single branch ladder so V8 can inline the hot
|
|
157
|
+
* path (research §Finding D-2 sort-loop pinning).
|
|
158
|
+
*
|
|
159
|
+
* mode!=0/1/2 is impossible at the helper entry by construction:
|
|
160
|
+
* `setTransparentSortConfig` rejects out-of-range writes with
|
|
161
|
+
* `ResourceInvalidValueError` (M-2 / w13) so the KV resource always holds
|
|
162
|
+
* a valid mode; the `default` branch is a defensive fall-through to
|
|
163
|
+
* mode=0 (horizontal-z, safe default; mirrors `getTransparentSortConfig`'s
|
|
164
|
+
* KV-missing default).
|
|
165
|
+
*/
|
|
166
|
+
function computeSortValue(
|
|
167
|
+
e: TransparentEntry,
|
|
168
|
+
mode: number,
|
|
169
|
+
yzAlpha: number,
|
|
170
|
+
cameraPos?: readonly [number, number, number],
|
|
171
|
+
): number {
|
|
172
|
+
if (e.sortKey !== undefined) return e.sortKey;
|
|
173
|
+
if (mode === TRANSPARENT_SORT_MODE_LAYER_Y) {
|
|
174
|
+
return -(e.posY - e.pivotY * e.sizeY);
|
|
175
|
+
}
|
|
176
|
+
if (mode === TRANSPARENT_SORT_MODE_LAYER_YZ) {
|
|
177
|
+
return e.posY - e.pivotY * e.sizeY + yzAlpha * e.posZ;
|
|
178
|
+
}
|
|
179
|
+
if (mode === TRANSPARENT_SORT_MODE_DISTANCE) {
|
|
180
|
+
// Squared-distance back-to-front: far objects draw first.
|
|
181
|
+
// sortValue = -dist^2 so ASC comparator places far-first.
|
|
182
|
+
if (cameraPos !== undefined) {
|
|
183
|
+
const dx = e.posX - cameraPos[0];
|
|
184
|
+
const dy = e.posY - cameraPos[1];
|
|
185
|
+
const dz = e.posZ - cameraPos[2];
|
|
186
|
+
return -(dx * dx + dy * dy + dz * dz);
|
|
187
|
+
}
|
|
188
|
+
// cameraPos missing fallback: use mode=0 posZ (defensive;
|
|
189
|
+
// only reaches here when transparentSortEntries is called via
|
|
190
|
+
// the 2-arg legacy path with mode=3. The 3-arg path with an
|
|
191
|
+
// explicit cameraPos is the canonical API.)
|
|
192
|
+
return e.posZ;
|
|
193
|
+
}
|
|
194
|
+
// TRANSPARENT_SORT_MODE_LAYER_Z (mode=0) + defensive default for any
|
|
195
|
+
// out-of-range value that slipped past the helper guard.
|
|
196
|
+
if (mode !== TRANSPARENT_SORT_MODE_LAYER_Z) {
|
|
197
|
+
// Unreachable in practice — setTransparentSortConfig rejects writes
|
|
198
|
+
// outside {0, 1, 2, 3} with ResourceInvalidValueError. Fall through to
|
|
199
|
+
// the horizontal-z safe default (charter P3 explicit no-silent-coerce
|
|
200
|
+
// is enforced by setTransparentSortConfig, not here; this fallback is
|
|
201
|
+
// strictly defensive against direct world.insertResource writes that
|
|
202
|
+
// bypass the typed helper).
|
|
203
|
+
void mode;
|
|
204
|
+
}
|
|
205
|
+
return e.posZ;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// === argsortInPlace — feat-20260608-tilemap-object-layer-rendering M3 / m3-t2 ===
|
|
209
|
+
//
|
|
210
|
+
// In-place single-key argsort over a Float64Array key column. Reorders the
|
|
211
|
+
// caller's Int32Array `indices` so that `keys[indices[0]] <= keys[indices[1]]
|
|
212
|
+
// <= ... <= keys[indices[n-1]]`. Stable: equal-key entries preserve their
|
|
213
|
+
// original `indices` order. Does not mutate `keys`.
|
|
214
|
+
//
|
|
215
|
+
// Algorithm: 11-bit LSD radix sort (6 passes) over a 64-bit unsigned-
|
|
216
|
+
// monotonic encoding of each key (the IEEE-754 "sortable bits" trick: when
|
|
217
|
+
// the sign bit is set, flip all 64 bits; otherwise flip only the sign bit).
|
|
218
|
+
// The result is unsigned-comparable, so ascending raw-bit sort equals
|
|
219
|
+
// ascending key sort. NaN-bearing keys encode to the upper end of the
|
|
220
|
+
// unsigned space (above +Infinity) and therefore land at the tail in stable
|
|
221
|
+
// order without throwing. -0 and +0 collapse to the same encoded value and
|
|
222
|
+
// compare equal.
|
|
223
|
+
//
|
|
224
|
+
// Per-pass we permute only a position-counter `Int32Array` (4 bytes per
|
|
225
|
+
// entry) instead of the full (key + idx) tuple; the encoded key columns
|
|
226
|
+
// `kLo` / `kHi` (two `Uint32Array`s) let each pass read 11 contiguous bits
|
|
227
|
+
// via `>>>` + `&` without per-element BigInt allocation. Module-scoped
|
|
228
|
+
// scratch buffers (`argsortKey*` / `argsortPos*`) grow monotonically on
|
|
229
|
+
// demand so steady-state calls allocate zero bytes (plan-strategy §R-4).
|
|
230
|
+
//
|
|
231
|
+
// Performance anchor: this LSD radix path measures ~8-10x faster than a
|
|
232
|
+
// generic comparator argsort (V8 TimSort over an index array) at N=10_000
|
|
233
|
+
// keys, in process on the same CPU. The unit-bench in
|
|
234
|
+
// `__tests__/tilemap-chunk-y-sort-bench.unit.test.ts` (m3-t3) locks AC-17 as
|
|
235
|
+
// that machine-independent *ratio* (radix >= 3x faster than generic, wide
|
|
236
|
+
// jitter margin) rather than an absolute ms budget -- the original 0.5 ms
|
|
237
|
+
// floor flaked on slow CI runners (issue #477). The ratio is taken as the
|
|
238
|
+
// MIN of INTERLEAVED per-iteration timings (generic then radix back-to-back),
|
|
239
|
+
// which cancels both machine speed and transient contention; an earlier
|
|
240
|
+
// sequential-median ratio (PR #480) still flaked when a whole measurement
|
|
241
|
+
// block landed in a GC window (1.39x on CI). FALSIFY=generic-fallback swaps
|
|
242
|
+
// the candidate to the comparator path to prove the gate detects a
|
|
243
|
+
// fallback-to-O(n log n) regression.
|
|
244
|
+
//
|
|
245
|
+
// Charter mapping: P4 (sprite + tilemap-spawned cell entities consume one
|
|
246
|
+
// SoA argsort primitive) + P3 (NaN + out-of-range indices are encoded
|
|
247
|
+
// explicitly, never silently dropped — they land at the tail).
|
|
248
|
+
|
|
249
|
+
const ARGSORT_RADIX_BITS = 11;
|
|
250
|
+
const ARGSORT_BUCKETS = 1 << ARGSORT_RADIX_BITS; // 2048
|
|
251
|
+
const ARGSORT_FINAL_BUCKETS = 1 << 9; // 512 (final pass only carries 9 bits)
|
|
252
|
+
const ARGSORT_MASK = ARGSORT_BUCKETS - 1; // 0x7ff
|
|
253
|
+
const ARGSORT_FINAL_MASK = ARGSORT_FINAL_BUCKETS - 1; // 0x1ff
|
|
254
|
+
|
|
255
|
+
let argsortKeyLo = new Uint32Array(0);
|
|
256
|
+
let argsortKeyHi = new Uint32Array(0);
|
|
257
|
+
let argsortValueIdx = new Int32Array(0);
|
|
258
|
+
let argsortPosA = new Int32Array(0);
|
|
259
|
+
let argsortPosB = new Int32Array(0);
|
|
260
|
+
const argsortCounts = new Uint32Array(ARGSORT_BUCKETS);
|
|
261
|
+
const argsortOffsets = new Uint32Array(ARGSORT_BUCKETS);
|
|
262
|
+
|
|
263
|
+
const argsortKeyBuffer = new ArrayBuffer(8);
|
|
264
|
+
const argsortKeyF64View = new Float64Array(argsortKeyBuffer);
|
|
265
|
+
const argsortKeyU32View = new Uint32Array(argsortKeyBuffer);
|
|
266
|
+
|
|
267
|
+
function ensureArgsortCapacity(n: number): void {
|
|
268
|
+
if (argsortKeyLo.length < n) {
|
|
269
|
+
argsortKeyLo = new Uint32Array(n);
|
|
270
|
+
argsortKeyHi = new Uint32Array(n);
|
|
271
|
+
argsortValueIdx = new Int32Array(n);
|
|
272
|
+
argsortPosA = new Int32Array(n);
|
|
273
|
+
argsortPosB = new Int32Array(n);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* In-place stable argsort over a Float64 key column.
|
|
279
|
+
*
|
|
280
|
+
* @param keys immutable key column; `keys[i]` is the sort weight for the
|
|
281
|
+
* entry at original position `i`. Out-of-range positions
|
|
282
|
+
* referenced by `indices[i]` are treated as NaN (sort to tail
|
|
283
|
+
* in stable order).
|
|
284
|
+
* @param indices the index buffer to reorder in place. Each element is an
|
|
285
|
+
* index into `keys`; on return, `keys[indices[i]]` is
|
|
286
|
+
* non-decreasing as `i` grows. The buffer (including its
|
|
287
|
+
* underlying ArrayBuffer + byteOffset / length) is mutated in
|
|
288
|
+
* place — no re-allocation, callers can hold the reference.
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* const keys = new Float64Array([3.1, 1.2, 2.7]);
|
|
292
|
+
* const idx = new Int32Array([0, 1, 2]);
|
|
293
|
+
* argsortInPlace(keys, idx); // idx -> [1, 2, 0]
|
|
294
|
+
*/
|
|
295
|
+
export function argsortInPlace(keys: Float64Array, indices: Int32Array): void {
|
|
296
|
+
const n = indices.length;
|
|
297
|
+
if (n <= 1) return;
|
|
298
|
+
ensureArgsortCapacity(n);
|
|
299
|
+
const kLo = argsortKeyLo;
|
|
300
|
+
const kHi = argsortKeyHi;
|
|
301
|
+
const vIdx = argsortValueIdx;
|
|
302
|
+
let pCur = argsortPosA;
|
|
303
|
+
let pTmp = argsortPosB;
|
|
304
|
+
const cnts = argsortCounts;
|
|
305
|
+
const offs = argsortOffsets;
|
|
306
|
+
|
|
307
|
+
const keyLen = keys.length;
|
|
308
|
+
for (let i = 0; i < n; i++) {
|
|
309
|
+
const idxVal = indices[i] as number;
|
|
310
|
+
const k = idxVal >= 0 && idxVal < keyLen ? (keys[idxVal] as number) : Number.NaN;
|
|
311
|
+
argsortKeyF64View[0] = k;
|
|
312
|
+
let hi = argsortKeyU32View[1] as number;
|
|
313
|
+
let lo = argsortKeyU32View[0] as number;
|
|
314
|
+
// Normalise -0 to +0 before the sign-bit unsigned-monotonic flip so the
|
|
315
|
+
// two zeros collapse to a single encoded value (without this step the
|
|
316
|
+
// sortable-bits trick would land -0 just below +0 by ULP, breaking
|
|
317
|
+
// stable equality across the zero crossing).
|
|
318
|
+
if (lo === 0 && (hi & 0x7fffffff) === 0) {
|
|
319
|
+
hi = 0;
|
|
320
|
+
}
|
|
321
|
+
if (hi & 0x80000000) {
|
|
322
|
+
hi = ~hi >>> 0;
|
|
323
|
+
lo = ~lo >>> 0;
|
|
324
|
+
} else {
|
|
325
|
+
hi = (hi ^ 0x80000000) >>> 0;
|
|
326
|
+
}
|
|
327
|
+
kLo[i] = lo;
|
|
328
|
+
kHi[i] = hi;
|
|
329
|
+
vIdx[i] = idxVal;
|
|
330
|
+
pCur[i] = i;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// 11-bit radix LSD, 6 passes (64-bit key span; last pass is 9 bits):
|
|
334
|
+
// p0: kLo bits 0..10 (mask 0x7FF, 2048 buckets)
|
|
335
|
+
// p1: kLo bits 11..21 (mask 0x7FF)
|
|
336
|
+
// p2: kLo bits 22..31 + kHi bit 0 (mask 0x7FF, cross-word)
|
|
337
|
+
// p3: kHi bits 1..11 (mask 0x7FF)
|
|
338
|
+
// p4: kHi bits 12..22 (mask 0x7FF)
|
|
339
|
+
// p5: kHi bits 23..31 (mask 0x1FF, 512 buckets)
|
|
340
|
+
for (let pass = 0; pass < 6; pass++) {
|
|
341
|
+
cnts.fill(0);
|
|
342
|
+
if (pass === 0) {
|
|
343
|
+
for (let i = 0; i < n; i++) {
|
|
344
|
+
const w = (kLo[pCur[i] as number] as number) & ARGSORT_MASK;
|
|
345
|
+
cnts[w] = (cnts[w] as number) + 1;
|
|
346
|
+
}
|
|
347
|
+
} else if (pass === 1) {
|
|
348
|
+
for (let i = 0; i < n; i++) {
|
|
349
|
+
const w = ((kLo[pCur[i] as number] as number) >>> 11) & ARGSORT_MASK;
|
|
350
|
+
cnts[w] = (cnts[w] as number) + 1;
|
|
351
|
+
}
|
|
352
|
+
} else if (pass === 2) {
|
|
353
|
+
for (let i = 0; i < n; i++) {
|
|
354
|
+
const pi = pCur[i] as number;
|
|
355
|
+
const w = (((kLo[pi] as number) >>> 22) | ((kHi[pi] as number) << 10)) & ARGSORT_MASK;
|
|
356
|
+
cnts[w] = (cnts[w] as number) + 1;
|
|
357
|
+
}
|
|
358
|
+
} else if (pass === 3) {
|
|
359
|
+
for (let i = 0; i < n; i++) {
|
|
360
|
+
const w = ((kHi[pCur[i] as number] as number) >>> 1) & ARGSORT_MASK;
|
|
361
|
+
cnts[w] = (cnts[w] as number) + 1;
|
|
362
|
+
}
|
|
363
|
+
} else if (pass === 4) {
|
|
364
|
+
for (let i = 0; i < n; i++) {
|
|
365
|
+
const w = ((kHi[pCur[i] as number] as number) >>> 12) & ARGSORT_MASK;
|
|
366
|
+
cnts[w] = (cnts[w] as number) + 1;
|
|
367
|
+
}
|
|
368
|
+
} else {
|
|
369
|
+
for (let i = 0; i < n; i++) {
|
|
370
|
+
const w = ((kHi[pCur[i] as number] as number) >>> 23) & ARGSORT_FINAL_MASK;
|
|
371
|
+
cnts[w] = (cnts[w] as number) + 1;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
let acc = 0;
|
|
375
|
+
const buckets = pass === 5 ? ARGSORT_FINAL_BUCKETS : ARGSORT_BUCKETS;
|
|
376
|
+
for (let b = 0; b < buckets; b++) {
|
|
377
|
+
offs[b] = acc;
|
|
378
|
+
acc += cnts[b] as number;
|
|
379
|
+
}
|
|
380
|
+
if (pass === 0) {
|
|
381
|
+
for (let i = 0; i < n; i++) {
|
|
382
|
+
const pi = pCur[i] as number;
|
|
383
|
+
const w = (kLo[pi] as number) & ARGSORT_MASK;
|
|
384
|
+
const dst = offs[w] as number;
|
|
385
|
+
offs[w] = dst + 1;
|
|
386
|
+
pTmp[dst] = pi;
|
|
387
|
+
}
|
|
388
|
+
} else if (pass === 1) {
|
|
389
|
+
for (let i = 0; i < n; i++) {
|
|
390
|
+
const pi = pCur[i] as number;
|
|
391
|
+
const w = ((kLo[pi] as number) >>> 11) & ARGSORT_MASK;
|
|
392
|
+
const dst = offs[w] as number;
|
|
393
|
+
offs[w] = dst + 1;
|
|
394
|
+
pTmp[dst] = pi;
|
|
395
|
+
}
|
|
396
|
+
} else if (pass === 2) {
|
|
397
|
+
for (let i = 0; i < n; i++) {
|
|
398
|
+
const pi = pCur[i] as number;
|
|
399
|
+
const w = (((kLo[pi] as number) >>> 22) | ((kHi[pi] as number) << 10)) & ARGSORT_MASK;
|
|
400
|
+
const dst = offs[w] as number;
|
|
401
|
+
offs[w] = dst + 1;
|
|
402
|
+
pTmp[dst] = pi;
|
|
403
|
+
}
|
|
404
|
+
} else if (pass === 3) {
|
|
405
|
+
for (let i = 0; i < n; i++) {
|
|
406
|
+
const pi = pCur[i] as number;
|
|
407
|
+
const w = ((kHi[pi] as number) >>> 1) & ARGSORT_MASK;
|
|
408
|
+
const dst = offs[w] as number;
|
|
409
|
+
offs[w] = dst + 1;
|
|
410
|
+
pTmp[dst] = pi;
|
|
411
|
+
}
|
|
412
|
+
} else if (pass === 4) {
|
|
413
|
+
for (let i = 0; i < n; i++) {
|
|
414
|
+
const pi = pCur[i] as number;
|
|
415
|
+
const w = ((kHi[pi] as number) >>> 12) & ARGSORT_MASK;
|
|
416
|
+
const dst = offs[w] as number;
|
|
417
|
+
offs[w] = dst + 1;
|
|
418
|
+
pTmp[dst] = pi;
|
|
419
|
+
}
|
|
420
|
+
} else {
|
|
421
|
+
for (let i = 0; i < n; i++) {
|
|
422
|
+
const pi = pCur[i] as number;
|
|
423
|
+
const w = ((kHi[pi] as number) >>> 23) & ARGSORT_FINAL_MASK;
|
|
424
|
+
const dst = offs[w] as number;
|
|
425
|
+
offs[w] = dst + 1;
|
|
426
|
+
pTmp[dst] = pi;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
const tmp = pCur;
|
|
430
|
+
pCur = pTmp;
|
|
431
|
+
pTmp = tmp;
|
|
432
|
+
}
|
|
433
|
+
for (let i = 0; i < n; i++) indices[i] = vIdx[pCur[i] as number] as number;
|
|
434
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// @forgeax/engine-runtime — Tilemap / TileLayer register-time component
|
|
2
|
+
// validators (feat-20260705-runtime-tier2-decomposition M1 / w3, D-4 F1 block).
|
|
3
|
+
//
|
|
4
|
+
// These two validators are the ONLY code in the former asset-registry.ts that
|
|
5
|
+
// imports runtime ECS components (ChildOf / TileLayer / Tilemap — research F8).
|
|
6
|
+
// They have zero production callers inside AssetRegistry (only the
|
|
7
|
+
// tilemap-validate.test.ts unit test consumes them), so externalizing them into
|
|
8
|
+
// their own runtime-owned file severs the asset cluster -> components reverse
|
|
9
|
+
// edge (research F7 reverse edge #1) while keeping the validators on the runtime
|
|
10
|
+
// side of the M1 package split (requirements OOS-5: this file is the final
|
|
11
|
+
// state, no further migration to a tilemap feature package).
|
|
12
|
+
|
|
13
|
+
import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
14
|
+
import {
|
|
15
|
+
TileLayer as runtimeTileLayer,
|
|
16
|
+
Tilemap as runtimeTilemap,
|
|
17
|
+
} from '@forgeax/engine-render/authoring';
|
|
18
|
+
import { err, ok, type Result } from '@forgeax/engine-rhi';
|
|
19
|
+
import { ChildOf } from '@forgeax/engine-scene';
|
|
20
|
+
import { ASSET_ERROR_HINTS, AssetError } from '@forgeax/engine-types';
|
|
21
|
+
|
|
22
|
+
function invalidValue(field: string, value: unknown, reason: string): AssetError {
|
|
23
|
+
return new AssetError({
|
|
24
|
+
code: 'asset-invalid-value',
|
|
25
|
+
expected: `register-time invariant for ${field}`,
|
|
26
|
+
hint: `${ASSET_ERROR_HINTS['asset-invalid-value']} (${reason})`,
|
|
27
|
+
detail: { field, value, reason },
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Validate Tilemap component invariants on the spawned entity (M0 baseline).
|
|
33
|
+
*
|
|
34
|
+
* Checks: `cols / rows >= 1`, `chunkSize >= 1`, `tileset` GUID is non-empty.
|
|
35
|
+
* Returns `Result.ok(undefined)` when every invariant holds, otherwise
|
|
36
|
+
* `Result.err(AssetError 'asset-invalid-value')` with field-specific
|
|
37
|
+
* detail (charter P3 fail-fast + P4 consistent with `validateMeshPayload`).
|
|
38
|
+
*/
|
|
39
|
+
export function validateTilemapAtRegister(
|
|
40
|
+
world: World,
|
|
41
|
+
tilemapEntity: EntityHandle,
|
|
42
|
+
): Result<void, AssetError> {
|
|
43
|
+
const r = world.get(tilemapEntity, runtimeTilemap);
|
|
44
|
+
if (!r.ok) {
|
|
45
|
+
return err(invalidValue('Tilemap', tilemapEntity, 'tilemap-entity-missing-component'));
|
|
46
|
+
}
|
|
47
|
+
const cols = r.value.cols;
|
|
48
|
+
const rows = r.value.rows;
|
|
49
|
+
const chunkSize = r.value.chunkSize;
|
|
50
|
+
const tileset = r.value.tileset;
|
|
51
|
+
if (!(cols >= 1)) return err(invalidValue('Tilemap.cols', cols, 'cols-below-one'));
|
|
52
|
+
if (!(rows >= 1)) return err(invalidValue('Tilemap.rows', rows, 'rows-below-one'));
|
|
53
|
+
if (!(chunkSize >= 1)) {
|
|
54
|
+
return err(invalidValue('Tilemap.chunkSize', chunkSize, 'chunkSize-below-one'));
|
|
55
|
+
}
|
|
56
|
+
if (tileset.length === 0) {
|
|
57
|
+
return err(invalidValue('Tilemap.tileset', tileset, 'tileset-guid-empty'));
|
|
58
|
+
}
|
|
59
|
+
return ok(undefined);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Validate TileLayer component invariants on the spawned entity (M0 baseline).
|
|
64
|
+
*
|
|
65
|
+
* Checks: parent `ChildOf` points at a Tilemap-carrying entity AND
|
|
66
|
+
* `tiles.length === parent.cols * parent.rows` (M0 second-stage mutation
|
|
67
|
+
* recheck; the invariant must hold after every spawn-time mutation).
|
|
68
|
+
*/
|
|
69
|
+
export function validateTileLayerAtRegister(
|
|
70
|
+
world: World,
|
|
71
|
+
layerEntity: EntityHandle,
|
|
72
|
+
): Result<void, AssetError> {
|
|
73
|
+
const layer = world.get(layerEntity, runtimeTileLayer);
|
|
74
|
+
if (!layer.ok) {
|
|
75
|
+
return err(invalidValue('TileLayer', layerEntity, 'tilelayer-entity-missing-component'));
|
|
76
|
+
}
|
|
77
|
+
const child = world.get(layerEntity, ChildOf);
|
|
78
|
+
if (!child.ok) {
|
|
79
|
+
return err(invalidValue('TileLayer.ChildOf', layerEntity, 'tilelayer-missing-childof'));
|
|
80
|
+
}
|
|
81
|
+
const parentEntity = child.value.parent as EntityHandle;
|
|
82
|
+
const parentTilemap = world.get(parentEntity, runtimeTilemap);
|
|
83
|
+
if (!parentTilemap.ok) {
|
|
84
|
+
return err(
|
|
85
|
+
invalidValue('TileLayer.ChildOf.parent', parentEntity, 'tilelayer-parent-not-tilemap'),
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
const expectedLen = parentTilemap.value.cols * parentTilemap.value.rows;
|
|
89
|
+
const actualLen = layer.value.tiles.length;
|
|
90
|
+
if (actualLen !== expectedLen) {
|
|
91
|
+
return err(
|
|
92
|
+
invalidValue(
|
|
93
|
+
'TileLayer.tiles.length',
|
|
94
|
+
actualLen,
|
|
95
|
+
`tilelayer-tiles-length-mismatch (expected ${expectedLen}, got ${actualLen})`,
|
|
96
|
+
),
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
return ok(undefined);
|
|
100
|
+
}
|