@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
package/src/errors/render.ts
CHANGED
|
@@ -13,6 +13,11 @@
|
|
|
13
13
|
// SpotLight / PointLightShadow component validators (forward cross-directory
|
|
14
14
|
// import, no cycle -- research Finding C2).
|
|
15
15
|
|
|
16
|
+
import type {
|
|
17
|
+
RenderSurfaceFailureDetail,
|
|
18
|
+
SurfaceFailureCode,
|
|
19
|
+
SurfaceFailureKind,
|
|
20
|
+
} from '@forgeax/engine-render-graph';
|
|
16
21
|
import type { DeviceResourceKind, DeviceScopeReceipt } from '../device/resource-types';
|
|
17
22
|
import type {
|
|
18
23
|
PreparedKind,
|
|
@@ -20,6 +25,8 @@ import type {
|
|
|
20
25
|
RenderFeatureRecovery,
|
|
21
26
|
RenderFeatureStage,
|
|
22
27
|
} from '../features/vocabulary';
|
|
28
|
+
import type { SceneDataLane, SceneDataSchemaId } from '../temporal/scene-data';
|
|
29
|
+
import type { TransmissionCapabilityFact } from '../transmission/backdrop';
|
|
23
30
|
|
|
24
31
|
export interface LifecycleConstructionFailureDetail {
|
|
25
32
|
readonly owner: string;
|
|
@@ -47,6 +54,68 @@ export class LifecycleConstructionError extends Error {
|
|
|
47
54
|
}
|
|
48
55
|
}
|
|
49
56
|
|
|
57
|
+
const SURFACE_FAILURE_POLICY: Readonly<
|
|
58
|
+
Record<SurfaceFailureCode, { readonly expected: string; readonly hint: string }>
|
|
59
|
+
> = {
|
|
60
|
+
'surface-allocation-failed': {
|
|
61
|
+
expected: 'the required surface resource can be allocated with its declared format and usage',
|
|
62
|
+
hint: 'inspect the capability detail, release transient resources, and retry the candidate graph',
|
|
63
|
+
},
|
|
64
|
+
'surface-attachment-failed': {
|
|
65
|
+
expected: 'the float target is renderable as the declared attachment',
|
|
66
|
+
hint: 'verify float color attachment support and retry without hiding the failure',
|
|
67
|
+
},
|
|
68
|
+
'surface-sampled-read-failed': {
|
|
69
|
+
expected: 'the float target can be sampled by the next post-processing stage',
|
|
70
|
+
hint: 'verify sampled-read support for the declared format before rebuilding the graph',
|
|
71
|
+
},
|
|
72
|
+
'surface-view-domain-failed': {
|
|
73
|
+
expected: 'surface storage and display views preserve their declared color domains',
|
|
74
|
+
hint: 'repair the explicit format/domain pair and retry the candidate graph',
|
|
75
|
+
},
|
|
76
|
+
'surface-raw-endpoint-failed': {
|
|
77
|
+
expected: 'the surface presentation endpoint has descriptor, acquisition, and validation proof',
|
|
78
|
+
hint: 'run the concrete presentation probe; keep the last-known-good surface when proof is absent',
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/** Render-surface failure with an exhaustive code and actionable detail. */
|
|
83
|
+
export class RenderSurfaceError<
|
|
84
|
+
Code extends SurfaceFailureCode = SurfaceFailureCode,
|
|
85
|
+
> extends Error {
|
|
86
|
+
readonly code: Code;
|
|
87
|
+
readonly expected: string;
|
|
88
|
+
readonly hint: string;
|
|
89
|
+
readonly detail: RenderSurfaceFailureDetail;
|
|
90
|
+
|
|
91
|
+
constructor(code: Code, detail: RenderSurfaceFailureDetail) {
|
|
92
|
+
const policy = SURFACE_FAILURE_POLICY[code];
|
|
93
|
+
if (policy === undefined) {
|
|
94
|
+
throw new Error(`unknown render surface failure code: ${code}`);
|
|
95
|
+
}
|
|
96
|
+
super(`[RenderSurfaceError ${code}] expected: ${policy.expected}; hint: ${policy.hint}`);
|
|
97
|
+
this.name = 'RenderSurfaceError';
|
|
98
|
+
this.code = code;
|
|
99
|
+
this.expected = policy.expected;
|
|
100
|
+
this.hint = policy.hint;
|
|
101
|
+
this.detail = detail;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export type { RenderSurfaceFailureDetail, SurfaceFailureCode, SurfaceFailureKind };
|
|
106
|
+
|
|
107
|
+
export type RenderSurfaceExpectedError = {
|
|
108
|
+
readonly [Code in SurfaceFailureCode]: RenderSurfaceError<Code>;
|
|
109
|
+
}[SurfaceFailureCode];
|
|
110
|
+
|
|
111
|
+
/** Construct the closed surface error from its failure-stage discriminant. */
|
|
112
|
+
export function createRenderSurfaceError(
|
|
113
|
+
kind: SurfaceFailureKind,
|
|
114
|
+
detail: RenderSurfaceFailureDetail,
|
|
115
|
+
): RenderSurfaceExpectedError {
|
|
116
|
+
return new RenderSurfaceError(`surface-${kind}-failed` as SurfaceFailureCode, detail);
|
|
117
|
+
}
|
|
118
|
+
|
|
50
119
|
// ── ShadowInvalidConfigError ──────────────────────────────────────────────
|
|
51
120
|
|
|
52
121
|
/**
|
|
@@ -563,6 +632,36 @@ export class MaterialSkinAttrMissingError extends Error {
|
|
|
563
632
|
}
|
|
564
633
|
}
|
|
565
634
|
|
|
635
|
+
export interface TransmissionCapabilityMissingDetail {
|
|
636
|
+
readonly material: string;
|
|
637
|
+
readonly capability: 'transmission';
|
|
638
|
+
readonly stage: 'prepare' | 'record';
|
|
639
|
+
readonly lane: 'standard-forward';
|
|
640
|
+
readonly format: string;
|
|
641
|
+
readonly missing: readonly TransmissionCapabilityFact[];
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
export class TransmissionCapabilityMissingError extends Error {
|
|
645
|
+
readonly code = 'transmission-capability-missing' as const;
|
|
646
|
+
readonly expected = 'the renderer exposes the transmission capability for this material';
|
|
647
|
+
readonly hint = 'disable transmission or provide the renderer capability before drawing';
|
|
648
|
+
readonly detail: TransmissionCapabilityMissingDetail;
|
|
649
|
+
|
|
650
|
+
constructor(
|
|
651
|
+
material: string,
|
|
652
|
+
stage: 'prepare' | 'record',
|
|
653
|
+
evidence: {
|
|
654
|
+
readonly lane: 'standard-forward';
|
|
655
|
+
readonly format: string;
|
|
656
|
+
readonly missing: readonly TransmissionCapabilityFact[];
|
|
657
|
+
},
|
|
658
|
+
) {
|
|
659
|
+
super(`transmission capability is missing for material '${material}'`);
|
|
660
|
+
this.name = 'TransmissionCapabilityMissingError';
|
|
661
|
+
this.detail = { material, capability: 'transmission', stage, ...evidence };
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
566
665
|
// -- RenderFeature errors ---------------------------------------------------
|
|
567
666
|
|
|
568
667
|
export type RenderFeatureErrorCode =
|
|
@@ -931,6 +1030,63 @@ export class ObservationUnavailableError extends Error {
|
|
|
931
1030
|
}
|
|
932
1031
|
}
|
|
933
1032
|
|
|
1033
|
+
export type SceneDataUnavailableReason =
|
|
1034
|
+
| 'capability-missing'
|
|
1035
|
+
| 'producer-missing'
|
|
1036
|
+
| 'coverage-incomplete'
|
|
1037
|
+
| 'renderer-recovering';
|
|
1038
|
+
export interface SceneDataUnavailableDetail {
|
|
1039
|
+
readonly featureIdentity: string;
|
|
1040
|
+
readonly schema: SceneDataSchemaId;
|
|
1041
|
+
readonly lane: SceneDataLane;
|
|
1042
|
+
readonly reason: SceneDataUnavailableReason;
|
|
1043
|
+
readonly missingContributorIds: readonly string[];
|
|
1044
|
+
readonly omittedMissingContributorCount: number;
|
|
1045
|
+
readonly recovery: 'enable-capability' | 'next-frame' | 'renderer-recover';
|
|
1046
|
+
}
|
|
1047
|
+
export class SceneDataUnavailableError extends Error {
|
|
1048
|
+
readonly code = 'scene-data-unavailable' as const;
|
|
1049
|
+
readonly expected = 'the requested semantic scene data is available for the active plan';
|
|
1050
|
+
readonly hint: string;
|
|
1051
|
+
readonly detail: SceneDataUnavailableDetail;
|
|
1052
|
+
constructor(detail: SceneDataUnavailableDetail) {
|
|
1053
|
+
const hint =
|
|
1054
|
+
detail.recovery === 'enable-capability'
|
|
1055
|
+
? 'enable rgba16floatRenderable and retry the current frame'
|
|
1056
|
+
: detail.recovery === 'renderer-recover'
|
|
1057
|
+
? 'wait for renderer recovery, then retry the frame'
|
|
1058
|
+
: 'restore the producer coverage and retry on the next frame';
|
|
1059
|
+
super(`scene data '${detail.schema}' unavailable for '${detail.featureIdentity}'`);
|
|
1060
|
+
this.name = 'SceneDataUnavailableError';
|
|
1061
|
+
this.hint = hint;
|
|
1062
|
+
this.detail = Object.freeze({
|
|
1063
|
+
...detail,
|
|
1064
|
+
missingContributorIds: Object.freeze([...detail.missingContributorIds].slice(0, 32)),
|
|
1065
|
+
omittedMissingContributorCount: Math.max(
|
|
1066
|
+
detail.omittedMissingContributorCount,
|
|
1067
|
+
Math.max(0, detail.missingContributorIds.length - 32),
|
|
1068
|
+
),
|
|
1069
|
+
});
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
export class TaaUnavailableError extends Error {
|
|
1074
|
+
readonly code = 'taa-unavailable' as const;
|
|
1075
|
+
readonly expected =
|
|
1076
|
+
'Standard TAA has a renderable rgba16float target and a complete resolve path';
|
|
1077
|
+
readonly hint =
|
|
1078
|
+
'enable rgba16float rendering or select none/fxaa explicitly; do not treat TAA as no-AA';
|
|
1079
|
+
readonly detail: {
|
|
1080
|
+
readonly reason: 'capability' | 'topology' | 'history';
|
|
1081
|
+
readonly observed?: string;
|
|
1082
|
+
};
|
|
1083
|
+
constructor(reason: 'capability' | 'topology' | 'history', observed?: string) {
|
|
1084
|
+
super(`taa-unavailable: ${reason}`);
|
|
1085
|
+
this.name = 'TaaUnavailableError';
|
|
1086
|
+
this.detail = observed === undefined ? { reason } : { reason, observed };
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
1089
|
+
|
|
934
1090
|
export interface FrameReceiptStaleDetail {
|
|
935
1091
|
readonly frameId: number;
|
|
936
1092
|
readonly receiptGeneration: number;
|
|
@@ -970,6 +1126,126 @@ export class RendererContractFailureError extends Error {
|
|
|
970
1126
|
}
|
|
971
1127
|
}
|
|
972
1128
|
|
|
1129
|
+
export interface EnvironmentSourceConflictDetail {
|
|
1130
|
+
readonly owners: readonly {
|
|
1131
|
+
readonly kind: 'image' | 'atmosphere';
|
|
1132
|
+
readonly entityKey: number;
|
|
1133
|
+
readonly sourceKey: string;
|
|
1134
|
+
}[];
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
export class EnvironmentSourceConflictError extends Error {
|
|
1138
|
+
readonly code = 'environment-source-conflict' as const;
|
|
1139
|
+
readonly expected = 'exactly one environment source owns the frame';
|
|
1140
|
+
readonly hint = 'remove all but one image or atmosphere environment owner';
|
|
1141
|
+
readonly detail: EnvironmentSourceConflictDetail;
|
|
1142
|
+
|
|
1143
|
+
constructor(owners: readonly EnvironmentSourceConflictDetail['owners'][number][]) {
|
|
1144
|
+
super('environment source owners conflict');
|
|
1145
|
+
this.name = 'EnvironmentSourceConflictError';
|
|
1146
|
+
this.detail = { owners: owners.map((owner) => Object.freeze({ ...owner })) };
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
export interface FogCardinalityDetail {
|
|
1151
|
+
readonly count: number;
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
export class FogCardinalityError extends Error {
|
|
1155
|
+
readonly code = 'fog-cardinality' as const;
|
|
1156
|
+
readonly expected = 'zero or one Fog owner contributes to a frame';
|
|
1157
|
+
readonly hint = 'remove extra Fog owners so the resource owner has at most one';
|
|
1158
|
+
readonly detail: FogCardinalityDetail;
|
|
1159
|
+
|
|
1160
|
+
constructor(count: number) {
|
|
1161
|
+
super(`Fog owner cardinality is ${count}`);
|
|
1162
|
+
this.name = 'FogCardinalityError';
|
|
1163
|
+
this.detail = { count };
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1167
|
+
export interface TaaCapsInsufficientDetail {
|
|
1168
|
+
readonly required: readonly string[];
|
|
1169
|
+
readonly available: readonly string[];
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
export class TaaCapsInsufficientError extends Error {
|
|
1173
|
+
readonly code = 'taa-caps-insufficient' as const;
|
|
1174
|
+
readonly expected = 'the backend exposes the capabilities required by TAA';
|
|
1175
|
+
readonly hint = 'select a backend with the required TAA capabilities or disable TAA on Camera';
|
|
1176
|
+
readonly detail: TaaCapsInsufficientDetail;
|
|
1177
|
+
|
|
1178
|
+
constructor(required: readonly string[], available: readonly string[]) {
|
|
1179
|
+
super('TAA capabilities are insufficient');
|
|
1180
|
+
this.name = 'TaaCapsInsufficientError';
|
|
1181
|
+
this.detail = { required: [...required], available: [...available] };
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
export interface EnvironmentGenerationFailedDetail {
|
|
1186
|
+
readonly sourceKey: string;
|
|
1187
|
+
readonly stage: 'prepare' | 'build' | 'execute' | 'finish' | 'submit';
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
export class EnvironmentGenerationFailedError extends Error {
|
|
1191
|
+
readonly code = 'environment-generation-failed' as const;
|
|
1192
|
+
readonly expected = 'the selected environment generation completes its owner stage';
|
|
1193
|
+
readonly hint = 'inspect the stage and sourceKey, then retry after correcting the environment';
|
|
1194
|
+
readonly detail: EnvironmentGenerationFailedDetail;
|
|
1195
|
+
|
|
1196
|
+
constructor(sourceKey: string, stage: EnvironmentGenerationFailedDetail['stage']) {
|
|
1197
|
+
super(`environment generation failed during ${stage}`);
|
|
1198
|
+
this.name = 'EnvironmentGenerationFailedError';
|
|
1199
|
+
this.detail = { sourceKey, stage };
|
|
1200
|
+
}
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
export interface AtmosphereInvalidParameterDetail {
|
|
1204
|
+
readonly field: string;
|
|
1205
|
+
readonly value: number;
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
export interface AtmosphereParameterRange {
|
|
1209
|
+
readonly min: number;
|
|
1210
|
+
readonly max: number;
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
export class AtmosphereInvalidParameterError extends Error {
|
|
1214
|
+
readonly code = 'atmosphere-invalid-parameter' as const;
|
|
1215
|
+
readonly expected: string;
|
|
1216
|
+
readonly hint: string;
|
|
1217
|
+
readonly detail: AtmosphereInvalidParameterDetail;
|
|
1218
|
+
|
|
1219
|
+
constructor(field: string, value: number, range: AtmosphereParameterRange) {
|
|
1220
|
+
super(`Atmosphere.${field} is invalid`);
|
|
1221
|
+
this.name = 'AtmosphereInvalidParameterError';
|
|
1222
|
+
this.detail = { field, value };
|
|
1223
|
+
const rangeText = Number.isFinite(range.max)
|
|
1224
|
+
? `[${range.min}, ${range.max}]`
|
|
1225
|
+
: `>= ${range.min}`;
|
|
1226
|
+
this.expected = `Atmosphere.${field} must be finite and ${rangeText}`;
|
|
1227
|
+
this.hint = `set Atmosphere.${field} to a finite value ${rangeText}`;
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
export interface OwnerStageFailedDetail {
|
|
1232
|
+
readonly owner: 'environment' | 'temporal' | 'fog' | 'renderer';
|
|
1233
|
+
readonly stage: 'extract' | 'prepare' | 'record' | 'finish' | 'submit';
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
export class OwnerStageFailedError extends Error {
|
|
1237
|
+
readonly code = 'owner-stage-failed' as const;
|
|
1238
|
+
readonly expected = 'the owner completes its current frame stage';
|
|
1239
|
+
readonly hint = 'inspect the owner and stage, keep the last-known-good frame, and retry';
|
|
1240
|
+
readonly detail: OwnerStageFailedDetail;
|
|
1241
|
+
|
|
1242
|
+
constructor(owner: OwnerStageFailedDetail['owner'], stage: OwnerStageFailedDetail['stage']) {
|
|
1243
|
+
super(`${owner} owner failed during ${stage}`);
|
|
1244
|
+
this.name = 'OwnerStageFailedError';
|
|
1245
|
+
this.detail = { owner, stage };
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
|
|
973
1249
|
export interface RendererOperationCause {
|
|
974
1250
|
readonly code: string;
|
|
975
1251
|
readonly expected: string;
|
|
@@ -1256,6 +1532,8 @@ export type RenderError =
|
|
|
1256
1532
|
| FrameReceiptStaleError
|
|
1257
1533
|
| RendererContractFailureError
|
|
1258
1534
|
| ObservationUnavailableError
|
|
1535
|
+
| SceneDataUnavailableError
|
|
1536
|
+
| TaaUnavailableError
|
|
1259
1537
|
| ShadowInvalidConfigError
|
|
1260
1538
|
| EquirectProjectionFailedError
|
|
1261
1539
|
| HdrpLightBudgetExceededError
|
|
@@ -1269,6 +1547,7 @@ export type RenderError =
|
|
|
1269
1547
|
| SkinPaletteOverflowError
|
|
1270
1548
|
| SkinMaterialMismatchError
|
|
1271
1549
|
| MaterialSkinAttrMissingError
|
|
1550
|
+
| TransmissionCapabilityMissingError
|
|
1272
1551
|
| RenderFeatureRegistrationConflictError
|
|
1273
1552
|
| RenderFeatureStageFailedError
|
|
1274
1553
|
| RenderFeatureCapabilityMissingError
|
|
@@ -1276,6 +1555,12 @@ export type RenderError =
|
|
|
1276
1555
|
| RenderFeaturePreparationFailedError
|
|
1277
1556
|
| RenderFeaturePreparedStateMismatchError
|
|
1278
1557
|
| RenderFeatureDrawRecordingFailedError
|
|
1558
|
+
| EnvironmentSourceConflictError
|
|
1559
|
+
| FogCardinalityError
|
|
1560
|
+
| TaaCapsInsufficientError
|
|
1561
|
+
| EnvironmentGenerationFailedError
|
|
1562
|
+
| AtmosphereInvalidParameterError
|
|
1563
|
+
| OwnerStageFailedError
|
|
1279
1564
|
| PointsLinesInvalidStyleError
|
|
1280
1565
|
| PointsLinesTopologyMismatchError
|
|
1281
1566
|
| PointsLinesStyleUnsupportedError
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
2
|
+
import { readRenderArrayView } from '@forgeax/engine-ecs/projection';
|
|
3
|
+
import { mat4, vec3 } from '@forgeax/engine-math';
|
|
4
|
+
import { Transform } from '@forgeax/engine-scene';
|
|
5
|
+
import {
|
|
6
|
+
antialiasFromF32,
|
|
7
|
+
bloomEnabledFromF32,
|
|
8
|
+
Camera,
|
|
9
|
+
cameraProjectionFromF32,
|
|
10
|
+
tonemapFromF32,
|
|
11
|
+
} from '../components/camera';
|
|
12
|
+
import { MotionBlur } from '../components/motion-blur';
|
|
13
|
+
import type { CameraSnapshot } from '../render-contract';
|
|
14
|
+
import { getActiveCamera, selectActiveCameraIndex } from '../systems/active-camera';
|
|
15
|
+
|
|
16
|
+
function readWorldMatrix(world: World, entity: EntityHandle): Float32Array | undefined {
|
|
17
|
+
const view = readRenderArrayView(world, entity, Transform, 'world');
|
|
18
|
+
return view === undefined ? undefined : new Float32Array(view);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Extract the selected camera once at the frame boundary. */
|
|
22
|
+
export function extractCameraSnapshots(world: World): CameraSnapshot[] {
|
|
23
|
+
const cameras: CameraSnapshot[] = [];
|
|
24
|
+
const cameraEntities: number[] = [];
|
|
25
|
+
const cameraQuery = world
|
|
26
|
+
.query({ read: [Camera], optional: [MotionBlur], with: [Transform] })
|
|
27
|
+
.unwrap();
|
|
28
|
+
for (const row of cameraQuery) {
|
|
29
|
+
const cam = row.get(Camera);
|
|
30
|
+
const motionBlur = row.get(MotionBlur);
|
|
31
|
+
const entity = row.entity as EntityHandle;
|
|
32
|
+
const worldMat = readWorldMatrix(world, entity);
|
|
33
|
+
if (worldMat === undefined) continue;
|
|
34
|
+
cameras.push({
|
|
35
|
+
entityKey: entity as number,
|
|
36
|
+
historyVersion: cam.historyVersion,
|
|
37
|
+
position: mat4.getTranslation(vec3.create(), worldMat),
|
|
38
|
+
world: worldMat,
|
|
39
|
+
fov: cam.fov,
|
|
40
|
+
aspect: cam.aspect,
|
|
41
|
+
near: cam.near,
|
|
42
|
+
far: cam.far,
|
|
43
|
+
projection: cameraProjectionFromF32(cam.projection),
|
|
44
|
+
orthoLeft: cam.left,
|
|
45
|
+
orthoRight: cam.right,
|
|
46
|
+
orthoBottom: cam.bottom,
|
|
47
|
+
orthoTop: cam.top,
|
|
48
|
+
tonemap: tonemapFromF32(cam.tonemap),
|
|
49
|
+
exposure: cam.exposure,
|
|
50
|
+
whitePoint: cam.whitePoint,
|
|
51
|
+
antialias: antialiasFromF32(cam.antialias),
|
|
52
|
+
bloom: bloomEnabledFromF32(cam.bloom),
|
|
53
|
+
bloomThreshold: cam.bloomThreshold,
|
|
54
|
+
bloomIntensity: cam.bloomIntensity,
|
|
55
|
+
bloomBlurRadius: cam.bloomBlurRadius,
|
|
56
|
+
clearColor: [
|
|
57
|
+
cam.clearColor[0] ?? 0,
|
|
58
|
+
cam.clearColor[1] ?? 0,
|
|
59
|
+
cam.clearColor[2] ?? 0,
|
|
60
|
+
cam.clearColor[3] ?? 1,
|
|
61
|
+
],
|
|
62
|
+
...(motionBlur === undefined
|
|
63
|
+
? {}
|
|
64
|
+
: {
|
|
65
|
+
motionBlur: {
|
|
66
|
+
shutterAngle: motionBlur.shutterAngle,
|
|
67
|
+
maxRadiusPixels: motionBlur.maxRadiusPixels,
|
|
68
|
+
sampleCount: motionBlur.sampleCount,
|
|
69
|
+
},
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
72
|
+
cameraEntities.push(entity as number);
|
|
73
|
+
}
|
|
74
|
+
const selected = selectActiveCameraIndex(cameraEntities, getActiveCamera(world)?.entity);
|
|
75
|
+
if (selected < 0) return cameras;
|
|
76
|
+
const camera = cameras[selected];
|
|
77
|
+
return camera === undefined ? cameras : [camera];
|
|
78
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import type { World } from '@forgeax/engine-ecs';
|
|
2
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
3
|
+
import { environmentFactSignatures } from '../environment/signature';
|
|
4
|
+
import {
|
|
5
|
+
AtmosphereInvalidParameterError,
|
|
6
|
+
type AtmosphereParameterRange,
|
|
7
|
+
EnvironmentSourceConflictError,
|
|
8
|
+
FogCardinalityError,
|
|
9
|
+
type RenderError,
|
|
10
|
+
} from '../errors/render';
|
|
11
|
+
import type { TemporalView } from '../temporal/view';
|
|
12
|
+
|
|
13
|
+
/** The retained projection's environment extraction owner. */
|
|
14
|
+
export interface EnvironmentExtractionContext {
|
|
15
|
+
readonly resourceOwner: number;
|
|
16
|
+
readonly world: World;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Keep environment reads at the resource-owner frame boundary. */
|
|
20
|
+
export function createEnvironmentExtractionContext(
|
|
21
|
+
world: World,
|
|
22
|
+
resourceOwner: number,
|
|
23
|
+
): EnvironmentExtractionContext {
|
|
24
|
+
return Object.freeze({ world, resourceOwner });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type EnvironmentCandidate =
|
|
28
|
+
| { readonly kind: 'image'; readonly entityKey: number; readonly sourceKey: string }
|
|
29
|
+
| {
|
|
30
|
+
readonly kind: 'atmosphere';
|
|
31
|
+
readonly entityKey: number;
|
|
32
|
+
readonly sourceKey: string;
|
|
33
|
+
readonly atmosphere: AtmosphereParameters;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export interface AtmosphereParameters {
|
|
37
|
+
readonly turbidity: number;
|
|
38
|
+
readonly rayleigh: number;
|
|
39
|
+
readonly mieCoefficient: number;
|
|
40
|
+
readonly mieDirectionalG: number;
|
|
41
|
+
readonly sunAngularRadius: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Shared CPU contract for values accepted by the atmosphere shaders. */
|
|
45
|
+
export const ATMOSPHERE_PARAMETER_RANGES: Readonly<
|
|
46
|
+
Record<keyof AtmosphereParameters, AtmosphereParameterRange>
|
|
47
|
+
> = Object.freeze({
|
|
48
|
+
turbidity: Object.freeze({ min: 1, max: 20 }),
|
|
49
|
+
rayleigh: Object.freeze({ min: 0, max: Number.POSITIVE_INFINITY }),
|
|
50
|
+
mieCoefficient: Object.freeze({ min: 0, max: Number.POSITIVE_INFINITY }),
|
|
51
|
+
mieDirectionalG: Object.freeze({ min: 0, max: 0.999 }),
|
|
52
|
+
sunAngularRadius: Object.freeze({ min: 0, max: Number.POSITIVE_INFINITY }),
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
export interface FogCandidate {
|
|
56
|
+
readonly entityKey: number;
|
|
57
|
+
readonly color: readonly [number, number, number];
|
|
58
|
+
readonly density: number;
|
|
59
|
+
readonly heightFalloff: number;
|
|
60
|
+
readonly maxOpacity: number;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type EnvironmentSource =
|
|
64
|
+
| { readonly kind: 'none' }
|
|
65
|
+
| {
|
|
66
|
+
readonly kind: 'image';
|
|
67
|
+
readonly entityKey: number;
|
|
68
|
+
readonly sourceKey: string;
|
|
69
|
+
}
|
|
70
|
+
| {
|
|
71
|
+
readonly kind: 'atmosphere';
|
|
72
|
+
readonly entityKey: number;
|
|
73
|
+
readonly sourceKey: string;
|
|
74
|
+
readonly atmosphere: AtmosphereParameters;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export interface FogFrame extends FogCandidate {}
|
|
78
|
+
|
|
79
|
+
export interface EnvironmentFrame {
|
|
80
|
+
readonly source: EnvironmentSource;
|
|
81
|
+
/** Descriptor of the real environment resource adopted for this frame. */
|
|
82
|
+
readonly resourceDescriptor?: Readonly<{
|
|
83
|
+
readonly width: number;
|
|
84
|
+
readonly height: number;
|
|
85
|
+
readonly bytesPerPixel: number;
|
|
86
|
+
}>;
|
|
87
|
+
readonly fog: FogFrame | undefined;
|
|
88
|
+
readonly environmentSignature: string;
|
|
89
|
+
readonly fogSignature: string;
|
|
90
|
+
readonly signature: string;
|
|
91
|
+
readonly revision: number;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface FramePlan {
|
|
95
|
+
readonly environment: EnvironmentFrame;
|
|
96
|
+
readonly temporal: TemporalView;
|
|
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 freezeAtmosphere(parameters: AtmosphereParameters): AtmosphereParameters {
|
|
107
|
+
return Object.freeze({ ...parameters });
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Return the first invalid analytic atmosphere field at the extraction boundary. */
|
|
111
|
+
export function validateAtmosphereParameters(
|
|
112
|
+
parameters: AtmosphereParameters,
|
|
113
|
+
): AtmosphereInvalidParameterError | undefined {
|
|
114
|
+
for (const field of Object.keys(ATMOSPHERE_PARAMETER_RANGES) as (keyof AtmosphereParameters)[]) {
|
|
115
|
+
const value = parameters[field];
|
|
116
|
+
const range = ATMOSPHERE_PARAMETER_RANGES[field];
|
|
117
|
+
if (!Number.isFinite(value) || value < range.min || value > range.max) {
|
|
118
|
+
return new AtmosphereInvalidParameterError(field, value, range);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Select immutable environment and independent Fog facts at the frame boundary. */
|
|
125
|
+
export function selectEnvironmentFrame(
|
|
126
|
+
candidates: readonly EnvironmentCandidate[],
|
|
127
|
+
fogCandidates: readonly FogCandidate[],
|
|
128
|
+
): Result<EnvironmentFrame, RenderError> {
|
|
129
|
+
if (candidates.length > 1) {
|
|
130
|
+
return err(
|
|
131
|
+
new EnvironmentSourceConflictError(
|
|
132
|
+
candidates.map(({ kind, entityKey, sourceKey }) => ({ kind, entityKey, sourceKey })),
|
|
133
|
+
),
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
if (fogCandidates.length > 1) return err(new FogCardinalityError(fogCandidates.length));
|
|
137
|
+
const candidate = candidates[0];
|
|
138
|
+
if (candidate?.kind === 'atmosphere') {
|
|
139
|
+
const invalid = validateAtmosphereParameters(candidate.atmosphere);
|
|
140
|
+
if (invalid !== undefined) return err(invalid);
|
|
141
|
+
}
|
|
142
|
+
const source: EnvironmentSource =
|
|
143
|
+
candidate === undefined
|
|
144
|
+
? { kind: 'none' }
|
|
145
|
+
: candidate.kind === 'atmosphere'
|
|
146
|
+
? {
|
|
147
|
+
kind: 'atmosphere',
|
|
148
|
+
entityKey: candidate.entityKey,
|
|
149
|
+
sourceKey: candidate.sourceKey,
|
|
150
|
+
atmosphere: freezeAtmosphere(candidate.atmosphere),
|
|
151
|
+
}
|
|
152
|
+
: {
|
|
153
|
+
kind: 'image',
|
|
154
|
+
entityKey: candidate.entityKey,
|
|
155
|
+
sourceKey: candidate.sourceKey,
|
|
156
|
+
};
|
|
157
|
+
const fog = fogCandidates[0] === undefined ? undefined : freezeFog(fogCandidates[0]);
|
|
158
|
+
const signatures = environmentFactSignatures({
|
|
159
|
+
environments: candidate === undefined ? [] : [candidate],
|
|
160
|
+
fogs: fogCandidates,
|
|
161
|
+
suns: [],
|
|
162
|
+
});
|
|
163
|
+
return ok(
|
|
164
|
+
Object.freeze({
|
|
165
|
+
source: Object.freeze(source),
|
|
166
|
+
fog,
|
|
167
|
+
...signatures,
|
|
168
|
+
revision: 0,
|
|
169
|
+
}),
|
|
170
|
+
);
|
|
171
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
2
2
|
import {
|
|
3
3
|
projectHierarchy,
|
|
4
4
|
type SceneHierarchyDiagnostic,
|
|
@@ -45,34 +45,53 @@ export function resolveVisibility(
|
|
|
45
45
|
world: World,
|
|
46
46
|
hierarchy: SceneHierarchySnapshot = projectHierarchy(world),
|
|
47
47
|
): VisibilitySnapshot {
|
|
48
|
-
|
|
48
|
+
// Visibility is an opt-in component. Query only the owning archetypes
|
|
49
|
+
// instead of walking every Entity row with an optional column; the latter
|
|
50
|
+
// made a World with no visibility intents pay a full-scene scan on each
|
|
51
|
+
// extraction. QueryRow.entity is sourced from the essential Entity column,
|
|
52
|
+
// so the required Visibility read retains the same handle and intent
|
|
53
|
+
// semantics while keeping the hot path sparse.
|
|
54
|
+
const query = world.query({ read: [Visibility] });
|
|
55
|
+
const visitVisibilityRows = (visit: (entity: EntityHandle, rawState: number) => void): void => {
|
|
56
|
+
if (!query.ok) return;
|
|
57
|
+
// Dense component spans keep the per-frame summary on typed-array reads
|
|
58
|
+
// instead of allocating a QueryRow facade for every visibility-bearing
|
|
59
|
+
// entity. Keep the row path as a defensive fallback if a future storage
|
|
60
|
+
// mode cannot expose spans.
|
|
61
|
+
const spans = query.value.spans();
|
|
62
|
+
if (spans.ok) {
|
|
63
|
+
for (const span of spans.value) {
|
|
64
|
+
const states = span.get(Visibility).state;
|
|
65
|
+
for (let index = 0; index < span.length; index += 1) {
|
|
66
|
+
visit(span.entities[index] as EntityHandle, states[index] ?? 0);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
for (const row of query.value) {
|
|
72
|
+
visit(row.entity, row.get(Visibility).state);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
49
75
|
let intentCount = 0;
|
|
50
76
|
let hasAnyHiddenIntent = false;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
intentCount += 1;
|
|
56
|
-
if (visibility.state === VisibilityStateValue.hidden) {
|
|
57
|
-
hasAnyHiddenIntent = true;
|
|
58
|
-
}
|
|
77
|
+
visitVisibilityRows((_entity, rawState) => {
|
|
78
|
+
intentCount += 1;
|
|
79
|
+
if (rawState === VisibilityStateValue.hidden) {
|
|
80
|
+
hasAnyHiddenIntent = true;
|
|
59
81
|
}
|
|
60
|
-
}
|
|
82
|
+
});
|
|
61
83
|
|
|
62
84
|
let resolveEntity: ((entity: EntityHandle) => ResolutionState | undefined) | undefined;
|
|
63
85
|
let hasIntent: ((entity: EntityHandle) => boolean) | undefined;
|
|
64
86
|
const ensureResolver = (): void => {
|
|
65
87
|
if (resolveEntity !== undefined) return;
|
|
66
88
|
const intentByEntity = new Map<EntityHandle, VisibilityState>();
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (intent !== undefined) {
|
|
72
|
-
intentByEntity.set(row.entity, intent);
|
|
73
|
-
}
|
|
89
|
+
visitVisibilityRows((entity, rawState) => {
|
|
90
|
+
const intent = visibilityStateFromU32(rawState);
|
|
91
|
+
if (intent !== undefined) {
|
|
92
|
+
intentByEntity.set(entity, intent);
|
|
74
93
|
}
|
|
75
|
-
}
|
|
94
|
+
});
|
|
76
95
|
hasIntent = (entity: EntityHandle): boolean => intentByEntity.has(entity);
|
|
77
96
|
const resolved = new Map<EntityHandle, ResolutionState>();
|
|
78
97
|
const resolving = new Set<EntityHandle>();
|