@forgeax/engine-render 0.1.7 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/assembly/backend-contract.d.ts +12 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/factory.d.ts +12 -2
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +4 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
- package/dist/assembly/renderer-inspection.d.ts +22 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -0
- package/dist/assembly/renderer-lifecycle.d.ts +4 -0
- package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
- package/dist/authoring.mjs +4 -2
- package/dist/authoring.mjs.map +1 -1
- package/dist/chunk-FJ6P52EE.mjs +46 -0
- package/dist/chunk-FJ6P52EE.mjs.map +1 -0
- package/dist/chunk-IPXCABEP.mjs +73 -0
- package/dist/chunk-IPXCABEP.mjs.map +1 -0
- package/dist/chunk-JDWARUOI.mjs +44 -0
- package/dist/chunk-JDWARUOI.mjs.map +1 -0
- package/dist/{chunk-YEJIUW7D.mjs → chunk-LOSO4CTV.mjs} +296 -547
- package/dist/chunk-LOSO4CTV.mjs.map +1 -0
- package/dist/chunk-PCHBPYML.mjs +385 -0
- package/dist/chunk-PCHBPYML.mjs.map +1 -0
- package/dist/chunk-RJRUS55L.mjs +9323 -0
- package/dist/chunk-RJRUS55L.mjs.map +1 -0
- package/dist/chunk-RXZ3RGOU.mjs +53 -0
- package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
- package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
- package/dist/chunk-VFPLTKCU.mjs.map +1 -0
- package/dist/chunk-YTQ5C7YQ.mjs +584 -0
- package/dist/chunk-YTQ5C7YQ.mjs.map +1 -0
- package/dist/components/atmosphere.d.ts +9 -0
- package/dist/components/atmosphere.d.ts.map +1 -0
- package/dist/components/camera.d.ts +2 -1
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/fog.d.ts +8 -0
- package/dist/components/fog.d.ts.map +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/motion-blur.d.ts +7 -0
- package/dist/components/motion-blur.d.ts.map +1 -0
- package/dist/construct-renderer.d.ts +2 -2
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +10914 -16392
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +4 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/environment/frame.d.ts +60 -0
- package/dist/environment/frame.d.ts.map +1 -0
- package/dist/environment/generation.d.ts +21 -0
- package/dist/environment/generation.d.ts.map +1 -0
- package/dist/environment/graph.d.ts +4 -0
- package/dist/environment/graph.d.ts.map +1 -0
- package/dist/environment/inspection.d.ts +48 -0
- package/dist/environment/inspection.d.ts.map +1 -0
- package/dist/environment/lifecycle.d.ts +39 -0
- package/dist/environment/lifecycle.d.ts.map +1 -0
- package/dist/environment/signature.d.ts +25 -0
- package/dist/environment/signature.d.ts.map +1 -0
- package/dist/errors/render.d.ts +136 -1
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts +5 -0
- package/dist/extract/camera.d.ts.map +1 -0
- package/dist/extract/environment.d.ts +74 -0
- package/dist/extract/environment.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts +1 -1
- package/dist/extract/visibility.d.ts.map +1 -1
- package/dist/features/host.d.ts +9 -2
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
- package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
- package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
- package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
- package/dist/features/plan.d.ts +17 -2
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +3 -1
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +2 -1
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +2 -1
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/targets.d.ts +3 -0
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +12 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +7 -1
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +2 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +5 -6
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +17 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +6 -4
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +43 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +2 -0
- package/dist/materials.d.ts +22 -0
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +10 -6
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-pipeline.d.ts +3 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts +48 -0
- package/dist/pipeline/standard-post.d.ts.map +1 -0
- package/dist/pipeline/standard-profile.d.ts +3 -6
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +18 -0
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +100 -5
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +4 -2
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +11 -0
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +8 -5
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +8 -1
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +2 -0
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +76 -18
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -11
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +26 -2
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +4 -1
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/render-contract.d.ts +92 -8
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +50 -6
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +29 -5
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +23 -4
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +36 -2
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/temporal/coverage.d.ts +42 -0
- package/dist/temporal/coverage.d.ts.map +1 -0
- package/dist/temporal/frame-coordinator.d.ts +99 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -0
- package/dist/temporal/gpu.d.ts +39 -0
- package/dist/temporal/gpu.d.ts.map +1 -0
- package/dist/temporal/history.d.ts +37 -0
- package/dist/temporal/history.d.ts.map +1 -0
- package/dist/temporal/index.d.ts +7 -0
- package/dist/temporal/index.d.ts.map +1 -0
- package/dist/temporal/index.mjs +8 -0
- package/dist/temporal/index.mjs.map +1 -0
- package/dist/temporal/inspection.d.ts +36 -0
- package/dist/temporal/inspection.d.ts.map +1 -0
- package/dist/temporal/scene-data-catalog.d.ts +48 -0
- package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
- package/dist/temporal/scene-data.d.ts +43 -0
- package/dist/temporal/scene-data.d.ts.map +1 -0
- package/dist/temporal/standard-scene-data.d.ts +61 -0
- package/dist/temporal/standard-scene-data.d.ts.map +1 -0
- package/dist/temporal/taa-history-resources.d.ts +22 -0
- package/dist/temporal/taa-history-resources.d.ts.map +1 -0
- package/dist/temporal/taa-history-store.d.ts +27 -0
- package/dist/temporal/taa-history-store.d.ts.map +1 -0
- package/dist/temporal/taa-resolve.d.ts +15 -0
- package/dist/temporal/taa-resolve.d.ts.map +1 -0
- package/dist/temporal/temporal-view.d.ts +40 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -0
- package/dist/temporal/transaction.d.ts +9 -0
- package/dist/temporal/transaction.d.ts.map +1 -0
- package/dist/temporal/view.d.ts +56 -0
- package/dist/temporal/view.d.ts.map +1 -0
- package/dist/transmission/backdrop.d.ts +147 -0
- package/dist/transmission/backdrop.d.ts.map +1 -0
- package/dist/transmission/inspection.d.ts +57 -0
- package/dist/transmission/inspection.d.ts.map +1 -0
- package/dist/transmission/oracle.d.ts +42 -0
- package/dist/transmission/oracle.d.ts.map +1 -0
- package/dist/transmission/projection.d.ts +37 -0
- package/dist/transmission/projection.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +25 -2
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/package.json +24 -19
- package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
- package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
- package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
- package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
- package/src/__tests__/detached-inspection.integration.test.ts +177 -0
- package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
- package/src/__tests__/environment-generation.integration.test.ts +141 -0
- package/src/__tests__/environment-selection.unit.test.ts +245 -0
- package/src/__tests__/factory-contract.integration.test.ts +1380 -9
- package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
- package/src/__tests__/gpu-scene.unit.test.ts +10 -0
- package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
- package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
- package/src/__tests__/material-cooked-projection.unit.test.ts +18 -146
- package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
- package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
- package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
- package/src/__tests__/public-surface.test-d.ts +15 -1
- package/src/__tests__/render-error-code-owner.test-d.ts +9 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
- package/src/__tests__/render-error-exhaustive.test-d.ts +3 -0
- package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
- package/src/__tests__/render-feature-plan.test-d.ts +22 -89
- package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
- package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
- package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +395 -1
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
- package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
- package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
- package/src/__tests__/scene-data-contract.test-d.ts +35 -0
- package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
- package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
- package/src/__tests__/shader-manifest-fixture.ts +111 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +102 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
- package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
- package/src/__tests__/standard-profile-oracle.unit.test.ts +10 -2
- package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
- package/src/__tests__/surface-configuration.unit.test.ts +211 -12
- package/src/__tests__/taa-transaction.integration.test.ts +30 -0
- package/src/__tests__/temporal-admission.integration.test.ts +40 -0
- package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
- package/src/__tests__/temporal-demand.unit.test.ts +44 -0
- package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
- package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
- package/src/__tests__/temporal-performance.integration.test.ts +615 -0
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
- package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
- package/src/__tests__/temporal-view.unit.test.ts +152 -0
- package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
- package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
- package/src/__tests__/visibility-extract.integration.test.ts +27 -1
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
- package/src/assembly/backend-contract.ts +47 -1
- package/src/assembly/factory.ts +1224 -505
- package/src/assembly/host-contract.ts +4 -0
- package/src/assembly/renderer-frame-transaction.ts +75 -0
- package/src/assembly/renderer-inspection.ts +112 -0
- package/src/assembly/renderer-lifecycle.ts +6 -0
- package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
- package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
- package/src/components/atmosphere.ts +10 -0
- package/src/components/camera.ts +2 -1
- package/src/components/fog.ts +9 -0
- package/src/components/index.ts +3 -0
- package/src/components/motion-blur.ts +8 -0
- package/src/construct-renderer.ts +40 -3
- package/src/device/device-scope.ts +15 -1
- package/src/environment/frame.ts +185 -0
- package/src/environment/generation.ts +23 -0
- package/src/environment/graph.ts +9 -0
- package/src/environment/inspection.ts +87 -0
- package/src/environment/lifecycle.ts +250 -0
- package/src/environment/signature.ts +55 -0
- package/src/errors/render.ts +285 -0
- package/src/extract/camera.ts +78 -0
- package/src/extract/environment.ts +171 -0
- package/src/extract/visibility.ts +38 -19
- package/src/features/host.ts +36 -5
- package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
- package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
- package/src/features/motion-blur/motion-blur-feature.ts +119 -0
- package/src/features/motion-blur/motion-blur-params.ts +89 -0
- package/src/features/plan.ts +32 -3
- package/src/features/prepared-gpu-work.ts +21 -6
- package/src/features/prepared-graphics.ts +2 -1
- package/src/features/render-graph-raster.ts +2 -1
- package/src/features/targets.ts +24 -2
- package/src/features/types.ts +13 -0
- package/src/fullscreen-post-process-pass.ts +34 -4
- package/src/gpu-scene.ts +24 -0
- package/src/ibl/skylight-bind-group.ts +30 -38
- package/src/index.ts +66 -6
- package/src/inspection-types.ts +48 -0
- package/src/internal.ts +5 -0
- package/src/materials.ts +119 -24
- package/src/pbr-pipeline.ts +58 -19
- package/src/pipeline/standard-forward-lane.ts +158 -101
- package/src/pipeline/standard-pipeline.ts +156 -105
- package/src/pipeline/standard-post.ts +373 -0
- package/src/pipeline/standard-profile.ts +11 -11
- package/src/pipeline-builder.ts +102 -12
- package/src/pipeline-spec.ts +9 -0
- package/src/plugin.ts +2 -0
- package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
- package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
- package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
- package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
- package/src/record/frame-snapshot.ts +129 -5
- package/src/record/frame-targets.ts +15 -6
- package/src/record/frame.ts +107 -3
- package/src/record/main-pass-geometry.ts +86 -40
- package/src/record/main-pass-material.ts +114 -66
- package/src/record/main-pass-sprite-draws.ts +78 -101
- package/src/record/main-pass.ts +77 -4
- package/src/record/mesh-ssbo.ts +22 -3
- package/src/record/render-context.ts +189 -23
- package/src/record/shadow-pass.ts +113 -23
- package/src/record/skybox-post-pass.ts +97 -41
- package/src/record/typed-frame-graph.ts +565 -26
- package/src/record/view-ubo.ts +52 -4
- package/src/render-contract.ts +109 -6
- package/src/render-graph-primitives.ts +18 -1
- package/src/render-pipeline.ts +100 -27
- package/src/render-system-extract.ts +193 -69
- package/src/render-system.ts +482 -41
- package/src/scene/render-scene.ts +250 -7
- package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
- package/src/temporal/coverage.ts +76 -0
- package/src/temporal/frame-coordinator.ts +311 -0
- package/src/temporal/gpu.ts +287 -0
- package/src/temporal/history.ts +92 -0
- package/src/temporal/index.ts +6 -0
- package/src/temporal/inspection.ts +97 -0
- package/src/temporal/scene-data-catalog.ts +200 -0
- package/src/temporal/scene-data.ts +149 -0
- package/src/temporal/standard-scene-data.ts +182 -0
- package/src/temporal/taa-history-resources.ts +128 -0
- package/src/temporal/taa-history-store.ts +79 -0
- package/src/temporal/taa-resolve.ts +34 -0
- package/src/temporal/temporal-view.ts +169 -0
- package/src/temporal/transaction.ts +17 -0
- package/src/temporal/view.ts +161 -0
- package/src/transmission/__tests__/capability.unit.test.ts +83 -0
- package/src/transmission/__tests__/composition.integration.test.ts +161 -0
- package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
- package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
- package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
- package/src/transmission/__tests__/projection.unit.test.ts +71 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +438 -0
- package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
- package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
- package/src/transmission/backdrop.ts +572 -0
- package/src/transmission/inspection.ts +190 -0
- package/src/transmission/oracle.ts +141 -0
- package/src/transmission/projection.ts +83 -0
- package/src/typed-render-graph-primitives.ts +162 -9
- package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
- package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
- package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
- package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
- package/dist/__tests__/cluster-binner.test.d.ts +0 -2
- package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
- package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
- package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
- package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
- package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
- package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
- package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
- package/dist/__tests__/public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
- package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
- package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
- package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
- package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
- package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
- package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
- package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
- package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
- package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
- package/dist/chunk-CQXZC5XI.mjs.map +0 -1
- package/dist/chunk-HCOGPHKS.mjs +0 -93
- package/dist/chunk-HCOGPHKS.mjs.map +0 -1
- package/dist/chunk-YEJIUW7D.mjs.map +0 -1
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +0 -2
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +0 -2
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
- package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/points-lines.bench.d.ts +0 -2
- package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +0 -1
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
|
@@ -6,6 +6,7 @@ import type { ObservationUnavailableError, RenderError } from '../errors/render'
|
|
|
6
6
|
import type { RenderFeature, RenderFeatureDiagnostics } from '../features/types';
|
|
7
7
|
import type { MeshMaterialBindingObservation } from '../mesh-material-bindings';
|
|
8
8
|
import type { FrameObservation, FrameObservationOptions } from '../record/frame';
|
|
9
|
+
import type { CurrentGraphTarget, GraphTargetCaptureRequest } from '../record/frame-snapshot';
|
|
9
10
|
import type {
|
|
10
11
|
DrawOwnerOptions,
|
|
11
12
|
FrameObservationRequest,
|
|
@@ -81,6 +82,9 @@ export interface RendererLegacyHostAdapter {
|
|
|
81
82
|
observeCurrentFrame(
|
|
82
83
|
options: FrameObservationOptions,
|
|
83
84
|
): Promise<RenderResult<FrameObservation, ObservationUnavailableError>>;
|
|
85
|
+
/** @internal Test-only current compiled graph target diagnostic. */
|
|
86
|
+
getCurrentGraphTarget(name: string): CurrentGraphTarget | undefined;
|
|
87
|
+
requestGraphTargetCapture(request: GraphTargetCaptureRequest): void;
|
|
84
88
|
onLost(listener: RendererLostListener): () => void;
|
|
85
89
|
onError(listener: RendererErrorListener): () => void;
|
|
86
90
|
health(): HealthSnapshot;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/** Staged frame state committed only after the renderer submit barrier. */
|
|
2
|
+
export interface RendererFrameTransaction<T> {
|
|
3
|
+
readonly candidate: T;
|
|
4
|
+
readonly commit: () => T;
|
|
5
|
+
readonly abort: () => void;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function stageRendererFrame<T>(
|
|
9
|
+
candidate: T,
|
|
10
|
+
onAbort: () => void = () => undefined,
|
|
11
|
+
): RendererFrameTransaction<T> {
|
|
12
|
+
let closed = false;
|
|
13
|
+
return {
|
|
14
|
+
candidate,
|
|
15
|
+
commit: () => {
|
|
16
|
+
if (closed) throw new Error('renderer frame transaction is closed');
|
|
17
|
+
closed = true;
|
|
18
|
+
return candidate;
|
|
19
|
+
},
|
|
20
|
+
abort: () => {
|
|
21
|
+
if (closed) return;
|
|
22
|
+
closed = true;
|
|
23
|
+
onAbort();
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type RendererFrameStage = 'build' | 'execute' | 'finish' | 'submit';
|
|
29
|
+
|
|
30
|
+
export interface RendererFrameStageFailure {
|
|
31
|
+
readonly stage: RendererFrameStage;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type RendererFrameStageResult<T> =
|
|
35
|
+
| { readonly ok: true; readonly value: T }
|
|
36
|
+
| { readonly ok: false; readonly stage: RendererFrameStage };
|
|
37
|
+
|
|
38
|
+
export interface RendererFrameTransactionSteps<T> {
|
|
39
|
+
readonly build: () => RendererFrameStageResult<T>;
|
|
40
|
+
readonly execute: (candidate: T) => RendererFrameStageResult<void>;
|
|
41
|
+
readonly finish: (candidate: T) => RendererFrameStageResult<void>;
|
|
42
|
+
readonly submit: (candidate: T) => RendererFrameStageResult<void>;
|
|
43
|
+
readonly commit: (candidate: T) => void;
|
|
44
|
+
readonly abort?: (failure: RendererFrameStageFailure) => void;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Run the four renderer stages behind one commit barrier. A stage can expose
|
|
49
|
+
* only a structured failure; the candidate is never published until submit
|
|
50
|
+
* has returned success, so a failed frame cannot advance last-known-good state.
|
|
51
|
+
*/
|
|
52
|
+
export function executeRendererFrameTransaction<T>(
|
|
53
|
+
steps: RendererFrameTransactionSteps<T>,
|
|
54
|
+
):
|
|
55
|
+
| { readonly ok: true; readonly value: T }
|
|
56
|
+
| { readonly ok: false; readonly error: RendererFrameStageFailure } {
|
|
57
|
+
const fail = (
|
|
58
|
+
stage: RendererFrameStage,
|
|
59
|
+
): { readonly ok: false; readonly error: RendererFrameStageFailure } => {
|
|
60
|
+
const error = { stage } as const;
|
|
61
|
+
steps.abort?.(error);
|
|
62
|
+
return { ok: false, error };
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const built = steps.build();
|
|
66
|
+
if (!built.ok) return fail('build');
|
|
67
|
+
const executed = steps.execute(built.value);
|
|
68
|
+
if (!executed.ok) return fail('execute');
|
|
69
|
+
const finished = steps.finish(built.value);
|
|
70
|
+
if (!finished.ok) return fail('finish');
|
|
71
|
+
const submitted = steps.submit(built.value);
|
|
72
|
+
if (!submitted.ok) return fail('submit');
|
|
73
|
+
steps.commit(built.value);
|
|
74
|
+
return { ok: true, value: built.value };
|
|
75
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { CompiledRenderGraphInfo } from '@forgeax/engine-render-graph';
|
|
2
|
+
import type { RhiCanvasSurfacePresentationProof, TextureFormat } from '@forgeax/engine-rhi';
|
|
3
|
+
import {
|
|
4
|
+
type RenderOutputInspection,
|
|
5
|
+
type RenderStandardOutputColorInspection,
|
|
6
|
+
STANDARD_OUTPUT_TRANSFORM_FEATURE_ID,
|
|
7
|
+
} from '../render-contract';
|
|
8
|
+
|
|
9
|
+
/** Inputs owned by the renderer assembly for one detached output projection. */
|
|
10
|
+
export interface RendererOutputInspectionInput {
|
|
11
|
+
readonly graph: CompiledRenderGraphInfo | undefined;
|
|
12
|
+
readonly surfaceAvailable: boolean;
|
|
13
|
+
readonly surfaceStorage: TextureFormat;
|
|
14
|
+
readonly surfaceDisplay: TextureFormat;
|
|
15
|
+
readonly surfaceProfile?: 'dual-view' | 'raw-only';
|
|
16
|
+
readonly rgba16floatRenderable: boolean;
|
|
17
|
+
readonly presentationProof?: RhiCanvasSurfacePresentationProof | undefined;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function isSrgbFormat(format: TextureFormat): boolean {
|
|
21
|
+
return format === 'rgba8unorm-srgb' || format === 'bgra8unorm-srgb';
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function writesSurface(pass: CompiledRenderGraphInfo['passes'][number]): boolean {
|
|
25
|
+
return pass.accesses.some(
|
|
26
|
+
(access) =>
|
|
27
|
+
(access.resource === 'surface' || access.resource.startsWith('surface.')) &&
|
|
28
|
+
access.usage === 'color-attachment',
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Project output facts from the committed graph and physical surface only.
|
|
34
|
+
* Profile fields are deliberately not consulted: a transform pass, a real
|
|
35
|
+
* intermediate target, and the final endpoint/domain are graph facts.
|
|
36
|
+
*/
|
|
37
|
+
export function projectRendererOutputInspection(
|
|
38
|
+
input: RendererOutputInspectionInput,
|
|
39
|
+
): RenderOutputInspection {
|
|
40
|
+
const graph = input.graph;
|
|
41
|
+
const outputTransformPass = graph?.passes.find(
|
|
42
|
+
(pass) => pass.name === 'output-transform' || pass.name === 'present',
|
|
43
|
+
);
|
|
44
|
+
const surfaceResource = graph?.resources.find(
|
|
45
|
+
(resource) => resource.kind === 'texture' && resource.label === 'surface',
|
|
46
|
+
);
|
|
47
|
+
const writesFinalSurface = graph?.passes.some(writesSurface) === true;
|
|
48
|
+
const surfaceDomain =
|
|
49
|
+
surfaceResource?.descriptor?.kind === 'texture' ? surfaceResource.descriptor.domain : undefined;
|
|
50
|
+
const directEncodedSurface =
|
|
51
|
+
writesFinalSurface && surfaceDomain === 'display-encoded' && isSrgbFormat(input.surfaceDisplay);
|
|
52
|
+
const displayEncoded =
|
|
53
|
+
input.surfaceAvailable &&
|
|
54
|
+
writesFinalSurface &&
|
|
55
|
+
(outputTransformPass !== undefined || directEncodedSurface);
|
|
56
|
+
const intermediate = graph?.resources.find(
|
|
57
|
+
(resource) =>
|
|
58
|
+
resource.kind === 'texture' &&
|
|
59
|
+
resource.label === 'standard-output-color' &&
|
|
60
|
+
resource.descriptor?.kind === 'texture',
|
|
61
|
+
);
|
|
62
|
+
const standardOutputColor: RenderStandardOutputColorInspection | undefined =
|
|
63
|
+
intermediate?.descriptor?.kind === 'texture'
|
|
64
|
+
? {
|
|
65
|
+
format: intermediate.descriptor.format,
|
|
66
|
+
...(intermediate.descriptor.domain === undefined
|
|
67
|
+
? {}
|
|
68
|
+
: { domain: intermediate.descriptor.domain }),
|
|
69
|
+
width: intermediate.descriptor.width,
|
|
70
|
+
height: intermediate.descriptor.height,
|
|
71
|
+
sampleCount: intermediate.descriptor.sampleCount,
|
|
72
|
+
usage: intermediate.derivedUsage,
|
|
73
|
+
}
|
|
74
|
+
: undefined;
|
|
75
|
+
const outputReady = input.surfaceAvailable && displayEncoded;
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
...(outputTransformPass === undefined
|
|
79
|
+
? {}
|
|
80
|
+
: { outputTransform: STANDARD_OUTPUT_TRANSFORM_FEATURE_ID }),
|
|
81
|
+
displayEncoded,
|
|
82
|
+
...(intermediate?.descriptor?.kind === 'texture'
|
|
83
|
+
? { intermediateFormat: intermediate.descriptor.format }
|
|
84
|
+
: {}),
|
|
85
|
+
...(input.surfaceProfile === undefined ? {} : { surfaceProfile: input.surfaceProfile }),
|
|
86
|
+
graphPassNames: graph?.passes.map((pass) => pass.name) ?? [],
|
|
87
|
+
...(standardOutputColor === undefined ? {} : { standardOutputColor }),
|
|
88
|
+
surfaceStorage: input.surfaceStorage,
|
|
89
|
+
surfaceDisplay: input.surfaceDisplay,
|
|
90
|
+
endpoint: 'surface.storage.raw',
|
|
91
|
+
capability: outputReady
|
|
92
|
+
? input.rgba16floatRenderable
|
|
93
|
+
? 'rgba16float-renderable'
|
|
94
|
+
: 'surface-raw-endpoint'
|
|
95
|
+
: 'unavailable',
|
|
96
|
+
...(input.presentationProof === undefined
|
|
97
|
+
? {}
|
|
98
|
+
: { presentationProof: input.presentationProof }),
|
|
99
|
+
error: outputReady
|
|
100
|
+
? undefined
|
|
101
|
+
: {
|
|
102
|
+
code: 'inspection-facts-unavailable',
|
|
103
|
+
expected: 'a committed graph writes an encoded surface endpoint',
|
|
104
|
+
hint: 'draw a frame before consuming output inspection facts',
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Detached inspection projection helper; live renderer objects never cross this boundary. */
|
|
110
|
+
export function detachRendererInspection<T extends object>(inspection: T): Readonly<T> {
|
|
111
|
+
return Object.freeze({ ...inspection });
|
|
112
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { MotionBlur } from '../motion-blur';
|
|
3
|
+
|
|
4
|
+
describe('MotionBlur component schema', () => {
|
|
5
|
+
it('is a single-semantic component with bounded authoring fields', () => {
|
|
6
|
+
expect(MotionBlur.name).toBe('MotionBlur');
|
|
7
|
+
expect(MotionBlur.fields).toMatchObject({
|
|
8
|
+
shutterAngle: { type: 'f32', default: 180 },
|
|
9
|
+
maxRadiusPixels: { type: 'f32', default: 32 },
|
|
10
|
+
sampleCount: { type: 'f32', default: 8 },
|
|
11
|
+
});
|
|
12
|
+
expect(MotionBlur.fields).not.toHaveProperty('enabled');
|
|
13
|
+
});
|
|
14
|
+
});
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { Camera, DirectionalLight, MeshFilter } from '../index';
|
|
2
|
+
import { ANTIALIAS_TAA, Atmosphere, Camera, DirectionalLight, Fog, MeshFilter } from '../index';
|
|
3
3
|
|
|
4
4
|
describe('canonical render schema owners', () => {
|
|
5
5
|
it('keeps mesh, light, and camera facts on their component owners', () => {
|
|
6
6
|
expect(MeshFilter.fields.assetHandle.type).toBe('shared<MeshAsset>');
|
|
7
7
|
expect(DirectionalLight.fields.direction.type).toBe('array<f32, 3>');
|
|
8
8
|
expect(Camera.fields.projection.default).toBe(0);
|
|
9
|
+
expect(Camera.fields.antialias.default).toBe(0);
|
|
10
|
+
expect(Camera.fields.historyVersion.default).toBe(0);
|
|
11
|
+
expect(ANTIALIAS_TAA).toBe(3);
|
|
12
|
+
expect(Atmosphere.fields.turbidity.type).toBe('f32');
|
|
13
|
+
expect(Fog.fields.density.type).toBe('f32');
|
|
9
14
|
});
|
|
10
15
|
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { defineComponent } from '@forgeax/engine-ecs';
|
|
2
|
+
|
|
3
|
+
/** Analytic atmosphere authoring facts; the directional light supplies the sun. */
|
|
4
|
+
export const Atmosphere = defineComponent('Atmosphere', {
|
|
5
|
+
turbidity: { type: 'f32', default: 2 },
|
|
6
|
+
rayleigh: { type: 'f32', default: 1 },
|
|
7
|
+
mieCoefficient: { type: 'f32', default: 0.005 },
|
|
8
|
+
mieDirectionalG: { type: 'f32', default: 0.8 },
|
|
9
|
+
sunAngularRadius: { type: 'f32', default: 0.004675 },
|
|
10
|
+
});
|
package/src/components/camera.ts
CHANGED
|
@@ -349,7 +349,8 @@ export const Camera = defineComponent('Camera', {
|
|
|
349
349
|
// token's schema, which is itself derived from Camera.fields[k].type (D-A7).
|
|
350
350
|
// This replaces the hand-maintained CameraDataPod interface — the field set
|
|
351
351
|
// lives exclusively in the Camera component definition above.
|
|
352
|
-
type
|
|
352
|
+
export type CameraData = ShapeOf<SchemaOf<typeof Camera>>;
|
|
353
|
+
type CameraPod = CameraData;
|
|
353
354
|
|
|
354
355
|
// ─── Camera factory functions (w13 SSOT refactoring) ─────────────────────
|
|
355
356
|
//
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { defineComponent } from '@forgeax/engine-ecs';
|
|
2
|
+
|
|
3
|
+
/** Optional height-aware aerial fog, independent from environment source. */
|
|
4
|
+
export const Fog = defineComponent('Fog', {
|
|
5
|
+
color: { type: 'array<f32, 3>', default: new Float32Array([0.5, 0.5, 0.5]) },
|
|
6
|
+
density: { type: 'f32', default: 0.01 },
|
|
7
|
+
heightFalloff: { type: 'f32', default: 0 },
|
|
8
|
+
maxOpacity: { type: 'f32', default: 1 },
|
|
9
|
+
});
|
package/src/components/index.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
export * from './atmosphere';
|
|
1
2
|
export * from './camera';
|
|
2
3
|
export * from './directional-light';
|
|
4
|
+
export * from './fog';
|
|
3
5
|
export { Instances, type InstancesData } from './instances';
|
|
4
6
|
export { Layer } from './layer';
|
|
5
7
|
export { Lines } from './lines';
|
|
6
8
|
export * from './mesh-filter';
|
|
7
9
|
export * from './mesh-renderer';
|
|
10
|
+
export { MotionBlur } from './motion-blur';
|
|
8
11
|
export { PointLight } from './point-light';
|
|
9
12
|
export { PointLightShadow } from './point-light-shadow';
|
|
10
13
|
export {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { defineComponent } from '@forgeax/engine-ecs';
|
|
2
|
+
|
|
3
|
+
/** Active-camera motion blur authoring data; presence enables the feature. */
|
|
4
|
+
export const MotionBlur = defineComponent('MotionBlur', {
|
|
5
|
+
shutterAngle: { type: 'f32', default: 180 },
|
|
6
|
+
maxRadiusPixels: { type: 'f32', default: 32 },
|
|
7
|
+
sampleCount: { type: 'f32', default: 8 },
|
|
8
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AssetRegistry } from '@forgeax/engine-assets-runtime';
|
|
2
|
-
import type
|
|
2
|
+
import { EngineEnvironmentError, type RhiBackendPack } from './assembly/backend-contract';
|
|
3
3
|
import type { BundlerOptions } from './assembly/factory';
|
|
4
4
|
import { createRenderer, exposeRenderer } from './assembly/factory';
|
|
5
5
|
import type {
|
|
@@ -30,12 +30,46 @@ export interface RendererHostAssembly {
|
|
|
30
30
|
readonly assets: AssetRegistry;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
function describeRendererInitializationFailure(error: unknown): string {
|
|
34
|
+
const candidate = error as unknown as {
|
|
35
|
+
readonly code?: unknown;
|
|
36
|
+
readonly hint?: unknown;
|
|
37
|
+
readonly detail?: unknown;
|
|
38
|
+
};
|
|
39
|
+
const detail = candidate.detail;
|
|
40
|
+
if (typeof detail === 'object' && detail !== null && 'compilerMessages' in detail) {
|
|
41
|
+
const messages = (detail as { readonly compilerMessages?: unknown }).compilerMessages;
|
|
42
|
+
if (Array.isArray(messages)) {
|
|
43
|
+
const compilerMessages = messages.map((message) => {
|
|
44
|
+
const value = message as {
|
|
45
|
+
readonly message?: unknown;
|
|
46
|
+
readonly type?: unknown;
|
|
47
|
+
readonly lineNum?: unknown;
|
|
48
|
+
readonly linePos?: unknown;
|
|
49
|
+
readonly offset?: unknown;
|
|
50
|
+
readonly length?: unknown;
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
message: value.message,
|
|
54
|
+
type: value.type,
|
|
55
|
+
lineNum: value.lineNum,
|
|
56
|
+
linePos: value.linePos,
|
|
57
|
+
offset: value.offset,
|
|
58
|
+
length: value.length,
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
return `${String(candidate.code)}: ${String(candidate.hint)}; detail=${JSON.stringify({ compilerMessages })}`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return `${String(candidate.code)}: ${String(candidate.hint)}; detail=${JSON.stringify(detail)}`;
|
|
65
|
+
}
|
|
66
|
+
|
|
33
67
|
export async function constructRendererHost(
|
|
34
68
|
canvas: unknown,
|
|
35
69
|
options?: RendererOptions,
|
|
36
70
|
bundler?: BundlerOptions,
|
|
37
71
|
backend?: RhiBackendPack,
|
|
38
|
-
): Promise<RenderResult<RendererHostAssembly, RenderError>> {
|
|
72
|
+
): Promise<RenderResult<RendererHostAssembly, RenderError | EngineEnvironmentError>> {
|
|
39
73
|
try {
|
|
40
74
|
const implementation = await createRenderer(canvas, options, bundler, backend);
|
|
41
75
|
const ready = await implementation.initialization;
|
|
@@ -44,7 +78,7 @@ export async function constructRendererHost(
|
|
|
44
78
|
ok: false,
|
|
45
79
|
error: new RendererContractFailureError(
|
|
46
80
|
'construct',
|
|
47
|
-
|
|
81
|
+
describeRendererInitializationFailure(ready.error),
|
|
48
82
|
),
|
|
49
83
|
};
|
|
50
84
|
}
|
|
@@ -58,6 +92,9 @@ export async function constructRendererHost(
|
|
|
58
92
|
},
|
|
59
93
|
};
|
|
60
94
|
} catch (cause) {
|
|
95
|
+
if (cause instanceof EngineEnvironmentError) {
|
|
96
|
+
return { ok: false, error: cause };
|
|
97
|
+
}
|
|
61
98
|
const detail = cause instanceof Error ? cause.message : String(cause);
|
|
62
99
|
return {
|
|
63
100
|
ok: false,
|
|
@@ -77,6 +77,15 @@ export class DeviceScope {
|
|
|
77
77
|
return [...this.children];
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
/** Create a renderer-owned child scope without exposing a second device owner. */
|
|
81
|
+
createChild(owner: string): DeviceScope {
|
|
82
|
+
if (this.lifecycleState !== 'active') {
|
|
83
|
+
throw new Error('Cannot create a child DeviceScope from an inactive scope.');
|
|
84
|
+
}
|
|
85
|
+
if (owner.length === 0) throw new TypeError('DeviceScope child owner must not be empty.');
|
|
86
|
+
return new DeviceScope(this.generation, owner, this);
|
|
87
|
+
}
|
|
88
|
+
|
|
80
89
|
ref<T>(kind: DeviceResourceKind, value: T): ResourceRef<T> {
|
|
81
90
|
const ref = new DeviceResourceRef(kind, this.owner, this.generation, value);
|
|
82
91
|
this.resources.push({ ref: ref as DeviceResourceRef<unknown>, cleanup: () => undefined });
|
|
@@ -128,8 +137,13 @@ export class DeviceScope {
|
|
|
128
137
|
return resources;
|
|
129
138
|
}
|
|
130
139
|
|
|
140
|
+
/** Mark an active child as retiring without releasing in-flight resources. */
|
|
141
|
+
beginRetire(): void {
|
|
142
|
+
if (this.lifecycleState === 'active') this.lifecycleState = 'retiring';
|
|
143
|
+
}
|
|
144
|
+
|
|
131
145
|
retire(): void {
|
|
132
|
-
if (this.lifecycleState !== 'active') return;
|
|
146
|
+
if (this.lifecycleState !== 'active' && this.lifecycleState !== 'retiring') return;
|
|
133
147
|
this.lifecycleState = 'retiring';
|
|
134
148
|
this._clearResources();
|
|
135
149
|
this.lifecycleState = 'retired';
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
2
|
+
import { EnvironmentSourceConflictError, FogCardinalityError } from '../errors/render';
|
|
3
|
+
import type {
|
|
4
|
+
EnvironmentCandidate,
|
|
5
|
+
EnvironmentFrame,
|
|
6
|
+
EnvironmentSource,
|
|
7
|
+
FogCandidate,
|
|
8
|
+
FogFrame,
|
|
9
|
+
} from '../extract/environment';
|
|
10
|
+
import { validateAtmosphereParameters } from '../extract/environment';
|
|
11
|
+
import { environmentFactSignatures } from './signature';
|
|
12
|
+
|
|
13
|
+
export type { EnvironmentCandidate, EnvironmentFrame, EnvironmentSource, FogCandidate, FogFrame };
|
|
14
|
+
|
|
15
|
+
export interface SunCandidate {
|
|
16
|
+
readonly entityKey: number;
|
|
17
|
+
readonly direction: readonly [number, number, number];
|
|
18
|
+
readonly color: readonly [number, number, number];
|
|
19
|
+
readonly intensity: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface EnvironmentSelectionInput {
|
|
23
|
+
readonly environments: readonly EnvironmentCandidate[];
|
|
24
|
+
readonly fogs: readonly FogCandidate[];
|
|
25
|
+
readonly suns: readonly SunCandidate[];
|
|
26
|
+
readonly lane: 'direct' | 'clustered';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface EnvironmentSelectionParameterDetail {
|
|
30
|
+
readonly field: string;
|
|
31
|
+
readonly value: number;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class EnvironmentSelectionParameterError extends Error {
|
|
35
|
+
readonly code = 'environment-selection-invalid' as const;
|
|
36
|
+
readonly expected: string;
|
|
37
|
+
readonly hint: string;
|
|
38
|
+
readonly detail: EnvironmentSelectionParameterDetail;
|
|
39
|
+
|
|
40
|
+
constructor(field: string, value: number, expected: string) {
|
|
41
|
+
super(`environment selection field ${field} is invalid`);
|
|
42
|
+
this.name = 'EnvironmentSelectionParameterError';
|
|
43
|
+
this.expected = expected;
|
|
44
|
+
this.hint = `set ${field} to a finite value satisfying ${expected}`;
|
|
45
|
+
this.detail = { field, value };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface SunCardinalityDetail {
|
|
50
|
+
readonly field: 'sun';
|
|
51
|
+
readonly value: number;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export class SunCardinalityError extends Error {
|
|
55
|
+
readonly code = 'sun-cardinality' as const;
|
|
56
|
+
readonly expected = 'atmosphere has exactly one sun owner';
|
|
57
|
+
readonly hint = 'add exactly one DirectionalLight sun for the atmosphere owner';
|
|
58
|
+
readonly detail: SunCardinalityDetail;
|
|
59
|
+
|
|
60
|
+
constructor(value: number) {
|
|
61
|
+
super(`atmosphere sun cardinality is ${value}`);
|
|
62
|
+
this.name = 'SunCardinalityError';
|
|
63
|
+
this.detail = { field: 'sun', value };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface EnvironmentSelectionErrorDetail {
|
|
68
|
+
readonly owners?: readonly {
|
|
69
|
+
readonly kind: 'image' | 'atmosphere';
|
|
70
|
+
readonly entityKey: number;
|
|
71
|
+
readonly sourceKey: string;
|
|
72
|
+
}[];
|
|
73
|
+
readonly field?: string;
|
|
74
|
+
readonly value?: number;
|
|
75
|
+
readonly count?: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface EnvironmentSelectionError {
|
|
79
|
+
readonly code:
|
|
80
|
+
| 'environment-source-conflict'
|
|
81
|
+
| 'fog-cardinality'
|
|
82
|
+
| 'environment-selection-invalid'
|
|
83
|
+
| 'atmosphere-invalid-parameter'
|
|
84
|
+
| 'sun-cardinality';
|
|
85
|
+
readonly expected: string;
|
|
86
|
+
readonly hint: string;
|
|
87
|
+
readonly detail: EnvironmentSelectionErrorDetail;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface SelectedEnvironmentFrame extends EnvironmentFrame {
|
|
91
|
+
readonly sun: SunCandidate | undefined;
|
|
92
|
+
readonly lane: 'direct' | 'clustered';
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function freezeCandidate<T extends object>(candidate: T): T {
|
|
96
|
+
return Object.freeze(candidate);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function freezeFog(candidate: FogCandidate): FogFrame {
|
|
100
|
+
return Object.freeze({
|
|
101
|
+
...candidate,
|
|
102
|
+
color: Object.freeze([...candidate.color] as unknown as FogFrame['color']),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function validFog(candidate: FogCandidate): boolean {
|
|
107
|
+
return (
|
|
108
|
+
candidate.color.every(Number.isFinite) &&
|
|
109
|
+
Number.isFinite(candidate.density) &&
|
|
110
|
+
candidate.density >= 0 &&
|
|
111
|
+
Number.isFinite(candidate.heightFalloff) &&
|
|
112
|
+
candidate.heightFalloff >= 0 &&
|
|
113
|
+
Number.isFinite(candidate.maxOpacity) &&
|
|
114
|
+
candidate.maxOpacity >= 0 &&
|
|
115
|
+
candidate.maxOpacity <= 1
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Select one immutable frame fact set for both Standard lighting lanes. */
|
|
120
|
+
export function selectEnvironment(
|
|
121
|
+
input: EnvironmentSelectionInput,
|
|
122
|
+
): Result<SelectedEnvironmentFrame, EnvironmentSelectionError> {
|
|
123
|
+
if (input.environments.length > 1) {
|
|
124
|
+
return err(
|
|
125
|
+
new EnvironmentSourceConflictError(
|
|
126
|
+
[...input.environments]
|
|
127
|
+
.sort((left, right) => left.entityKey - right.entityKey)
|
|
128
|
+
.map(({ kind, entityKey, sourceKey }) => ({ kind, entityKey, sourceKey })),
|
|
129
|
+
),
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
if (input.fogs.length > 1) return err(new FogCardinalityError(input.fogs.length));
|
|
133
|
+
const selectedFog = input.fogs[0];
|
|
134
|
+
if (selectedFog !== undefined && !validFog(selectedFog)) {
|
|
135
|
+
const field =
|
|
136
|
+
!Number.isFinite(selectedFog.density) || selectedFog.density < 0
|
|
137
|
+
? 'density'
|
|
138
|
+
: !Number.isFinite(selectedFog.heightFalloff) || selectedFog.heightFalloff < 0
|
|
139
|
+
? 'heightFalloff'
|
|
140
|
+
: 'maxOpacity';
|
|
141
|
+
return err(
|
|
142
|
+
new EnvironmentSelectionParameterError(field, selectedFog[field], 'finite and in range'),
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
const selected = input.environments[0];
|
|
146
|
+
if (selected?.kind === 'atmosphere') {
|
|
147
|
+
const invalid = validateAtmosphereParameters(selected.atmosphere);
|
|
148
|
+
if (invalid !== undefined) return err(invalid);
|
|
149
|
+
}
|
|
150
|
+
if (selected?.kind === 'atmosphere' && input.suns.length !== 1) {
|
|
151
|
+
return err(new SunCardinalityError(input.suns.length));
|
|
152
|
+
}
|
|
153
|
+
const source: EnvironmentSource =
|
|
154
|
+
selected === undefined
|
|
155
|
+
? { kind: 'none' }
|
|
156
|
+
: selected.kind === 'atmosphere'
|
|
157
|
+
? {
|
|
158
|
+
kind: 'atmosphere',
|
|
159
|
+
entityKey: selected.entityKey,
|
|
160
|
+
sourceKey: selected.sourceKey,
|
|
161
|
+
atmosphere: Object.freeze({ ...selected.atmosphere }),
|
|
162
|
+
}
|
|
163
|
+
: {
|
|
164
|
+
kind: 'image',
|
|
165
|
+
entityKey: selected.entityKey,
|
|
166
|
+
sourceKey: selected.sourceKey,
|
|
167
|
+
};
|
|
168
|
+
const sun = input.suns[0] === undefined ? undefined : freezeCandidate({ ...input.suns[0] });
|
|
169
|
+
const fog = selectedFog === undefined ? undefined : freezeFog(selectedFog);
|
|
170
|
+
const signatureInput = {
|
|
171
|
+
environments: selected === undefined ? [] : [selected],
|
|
172
|
+
fogs: selectedFog === undefined ? [] : [selectedFog],
|
|
173
|
+
suns: input.suns,
|
|
174
|
+
};
|
|
175
|
+
const signatures = environmentFactSignatures(signatureInput);
|
|
176
|
+
const result = {
|
|
177
|
+
source: Object.freeze(source),
|
|
178
|
+
fog,
|
|
179
|
+
...signatures,
|
|
180
|
+
revision: 0,
|
|
181
|
+
sun,
|
|
182
|
+
} as SelectedEnvironmentFrame;
|
|
183
|
+
Object.defineProperty(result, 'lane', { value: input.lane, enumerable: false });
|
|
184
|
+
return ok(Object.freeze(result));
|
|
185
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DeviceScope } from '../device/device-scope';
|
|
2
|
+
import type { EnvironmentFrame } from './frame';
|
|
3
|
+
|
|
4
|
+
export interface EnvironmentGeneration {
|
|
5
|
+
readonly signature: string;
|
|
6
|
+
readonly generation: number;
|
|
7
|
+
readonly lane: 'direct' | 'clustered';
|
|
8
|
+
readonly scope: DeviceScope;
|
|
9
|
+
readonly liveHandle: object;
|
|
10
|
+
readonly resourceCount: number;
|
|
11
|
+
readonly resourceBytes: number;
|
|
12
|
+
retired: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface EnvironmentGenerationFailure {
|
|
16
|
+
readonly failureAt?: 'prepare' | 'build' | 'execute' | 'finish' | 'submit';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface EnvironmentGenerationState {
|
|
20
|
+
readonly frame: EnvironmentFrame;
|
|
21
|
+
readonly scope: DeviceScope;
|
|
22
|
+
readonly generation: number;
|
|
23
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EnvironmentFrame } from './frame';
|
|
2
|
+
|
|
3
|
+
/** Both Standard lanes consume the same selected CPU environment facts. */
|
|
4
|
+
export function sharedEnvironmentFrame(
|
|
5
|
+
frame: EnvironmentFrame,
|
|
6
|
+
_lane: 'direct' | 'clustered',
|
|
7
|
+
): EnvironmentFrame {
|
|
8
|
+
return frame;
|
|
9
|
+
}
|