@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
|
@@ -2,9 +2,10 @@ import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
|
2
2
|
import { componentId } from '@forgeax/engine-ecs/internal';
|
|
3
3
|
import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
|
|
4
4
|
import { box3, frustum, mat4 } from '@forgeax/engine-math';
|
|
5
|
-
import type
|
|
5
|
+
import { type RhiDevice, RhiError } from '@forgeax/engine-rhi';
|
|
6
6
|
import { ChildOf, Transform } from '@forgeax/engine-scene';
|
|
7
7
|
import { Skin } from '@forgeax/engine-skinning';
|
|
8
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
8
9
|
import {
|
|
9
10
|
Camera,
|
|
10
11
|
DirectionalLight,
|
|
@@ -35,9 +36,17 @@ import type { CameraSnapshot } from '../render-contract';
|
|
|
35
36
|
import type {
|
|
36
37
|
DispatchEntry,
|
|
37
38
|
ExtractedFrame,
|
|
39
|
+
MaterialSnapshot,
|
|
38
40
|
MaterialSnapshotCachesByWorld,
|
|
41
|
+
RenderableReactiveReason,
|
|
39
42
|
RenderableSnapshot,
|
|
43
|
+
RenderableTemporalSnapshot,
|
|
40
44
|
} from '../render-system-extract';
|
|
45
|
+
import {
|
|
46
|
+
PersistentTransmissionDemandProjection,
|
|
47
|
+
type TransmissionDemand,
|
|
48
|
+
type TransmissionDemandOperation,
|
|
49
|
+
} from '../transmission/projection';
|
|
41
50
|
import type {
|
|
42
51
|
RenderSceneApplyResult,
|
|
43
52
|
RenderSceneBounds,
|
|
@@ -69,13 +78,63 @@ interface PendingIdentity {
|
|
|
69
78
|
removed: boolean;
|
|
70
79
|
}
|
|
71
80
|
|
|
81
|
+
export interface RenderSceneSubmissionCapture {
|
|
82
|
+
readonly revision: number;
|
|
83
|
+
readonly slots: readonly {
|
|
84
|
+
readonly slot: number;
|
|
85
|
+
readonly current: RenderSceneSlot | undefined;
|
|
86
|
+
}[];
|
|
87
|
+
readonly visible: ReadonlySet<string>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface RenderSceneSubmissionDelta {
|
|
91
|
+
readonly epoch: number;
|
|
92
|
+
readonly slots: readonly number[];
|
|
93
|
+
}
|
|
94
|
+
|
|
72
95
|
function identityKey(worldId: number, entityKey: number): string {
|
|
73
96
|
return `${worldId}:${entityKey}`;
|
|
74
97
|
}
|
|
75
98
|
|
|
99
|
+
const STANDARD_TRANSMISSION_SHADER = 'forgeax::default-standard-pbr';
|
|
100
|
+
|
|
101
|
+
function transmissionValue(material: MaterialSnapshot): number {
|
|
102
|
+
const value = material.paramSnapshot?.transmission;
|
|
103
|
+
return typeof value === 'number' ? value : 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function transmissionRoughness(material: MaterialSnapshot): number {
|
|
107
|
+
const value = material.paramSnapshot?.roughness;
|
|
108
|
+
return typeof value === 'number' ? value : material.roughness;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function transmissionDemandOperations(
|
|
112
|
+
renderables: readonly RenderableSnapshot[],
|
|
113
|
+
): readonly TransmissionDemandOperation[] {
|
|
114
|
+
const operations: TransmissionDemandOperation[] = [];
|
|
115
|
+
for (const renderable of renderables) {
|
|
116
|
+
for (const [materialIndex, material] of renderable.materials.entries()) {
|
|
117
|
+
operations.push({
|
|
118
|
+
kind: 'upsert',
|
|
119
|
+
key: `${renderable.worldId}:${renderable.entityKey}:${materialIndex}`,
|
|
120
|
+
candidate: {
|
|
121
|
+
attached: true,
|
|
122
|
+
ready:
|
|
123
|
+
material.materialShaderId === STANDARD_TRANSMISSION_SHADER &&
|
|
124
|
+
material.paramSnapshot !== undefined,
|
|
125
|
+
transmission: transmissionValue(material),
|
|
126
|
+
roughness: transmissionRoughness(material),
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return operations;
|
|
132
|
+
}
|
|
133
|
+
|
|
76
134
|
function ownSnapshot(snapshot: RenderableSnapshot): RenderableSnapshot {
|
|
135
|
+
const { temporal: _temporal, ...current } = snapshot;
|
|
77
136
|
return {
|
|
78
|
-
...
|
|
137
|
+
...current,
|
|
79
138
|
transform: { ...snapshot.transform, world: new Float32Array(snapshot.transform.world) },
|
|
80
139
|
...(snapshot.localAabb === undefined
|
|
81
140
|
? {}
|
|
@@ -169,10 +228,14 @@ function worldBounds(snapshot: RenderableSnapshot): RenderSceneBounds | undefine
|
|
|
169
228
|
*/
|
|
170
229
|
export class RenderScene {
|
|
171
230
|
private readonly slots: Array<RenderSceneSlot | undefined> = [];
|
|
231
|
+
private readonly lastSubmittedSlots: Array<RenderSceneSlot | undefined> = [];
|
|
172
232
|
private readonly generations: number[] = [];
|
|
173
233
|
private readonly freeSlots: number[] = [];
|
|
174
234
|
private readonly slotsByWorld = new Map<number, Map<number, number>>();
|
|
175
235
|
private readonly slotsByMaterial = new Map<number, Set<number>>();
|
|
236
|
+
private readonly dirtySinceSubmitted = new Set<number>();
|
|
237
|
+
private lastSubmittedVisible = new Set<string>();
|
|
238
|
+
private submittedEpoch = 0;
|
|
176
239
|
// World bounds are a pure projection of each immutable snapshot. Cache the
|
|
177
240
|
// derived value by snapshot identity so repeated view queries do not redo
|
|
178
241
|
// the eight-corner transform for every view in the same frame.
|
|
@@ -188,6 +251,11 @@ export class RenderScene {
|
|
|
188
251
|
private resyncs = 0;
|
|
189
252
|
private lastResyncReason: RenderSceneResyncReason | undefined;
|
|
190
253
|
|
|
254
|
+
/** Bounded current-scene facts for the Standard temporal producer. */
|
|
255
|
+
temporalContributorCount(): number {
|
|
256
|
+
return this.orderedSlots.length;
|
|
257
|
+
}
|
|
258
|
+
|
|
191
259
|
apply(operations: readonly RenderSceneOperation[]): RenderSceneApplyResult {
|
|
192
260
|
if (operations.length === 0) {
|
|
193
261
|
this.noChangeFrames += 1;
|
|
@@ -253,19 +321,25 @@ export class RenderScene {
|
|
|
253
321
|
for (const pending of pendingOrder) {
|
|
254
322
|
if (pending.initial === undefined) {
|
|
255
323
|
if (pending.current === undefined) continue;
|
|
256
|
-
|
|
324
|
+
const createdSlot = this.allocate(pending.current);
|
|
325
|
+
this.dirtySinceSubmitted.add(createdSlot.slot);
|
|
326
|
+
createdSlots.push(createdSlot);
|
|
257
327
|
created += 1;
|
|
258
328
|
continue;
|
|
259
329
|
}
|
|
260
330
|
if (pending.current === undefined) {
|
|
331
|
+
this.dirtySinceSubmitted.add(pending.initial.slot);
|
|
261
332
|
this.release(pending.initial);
|
|
262
333
|
removedSlots.push(pending.initial);
|
|
263
334
|
removed += 1;
|
|
264
335
|
continue;
|
|
265
336
|
}
|
|
266
337
|
if (pending.removed) {
|
|
338
|
+
this.dirtySinceSubmitted.add(pending.initial.slot);
|
|
267
339
|
this.release(pending.initial);
|
|
268
|
-
|
|
340
|
+
const recreatedSlot = this.allocate(pending.current);
|
|
341
|
+
this.dirtySinceSubmitted.add(recreatedSlot.slot);
|
|
342
|
+
recreatedSlots.push(recreatedSlot);
|
|
269
343
|
recreated += 1;
|
|
270
344
|
continue;
|
|
271
345
|
}
|
|
@@ -276,6 +350,7 @@ export class RenderScene {
|
|
|
276
350
|
this.unindexMaterials(pending.initial);
|
|
277
351
|
this.slots[pending.initial.slot] = updatedSlot;
|
|
278
352
|
this.indexMaterials(updatedSlot);
|
|
353
|
+
this.dirtySinceSubmitted.add(updatedSlot.slot);
|
|
279
354
|
updatedSlots.push(updatedSlot);
|
|
280
355
|
updated += 1;
|
|
281
356
|
}
|
|
@@ -316,6 +391,12 @@ export class RenderScene {
|
|
|
316
391
|
|
|
317
392
|
/** Reconcile the current identity set while retaining slots for survivors. */
|
|
318
393
|
reset(snapshots: readonly RenderableSnapshot[], countAsRebuild = true): void {
|
|
394
|
+
// A full reconciliation is a temporal cut. Survivors may keep their
|
|
395
|
+
// stable slot, but no prior slot is valid until this frame submits.
|
|
396
|
+
this.lastSubmittedSlots.length = 0;
|
|
397
|
+
this.lastSubmittedVisible.clear();
|
|
398
|
+
this.dirtySinceSubmitted.clear();
|
|
399
|
+
this.submittedEpoch = 0;
|
|
319
400
|
const desired = new Map<string, RenderableSnapshot>();
|
|
320
401
|
for (const snapshot of snapshots) {
|
|
321
402
|
desired.set(identityKey(snapshot.worldId, snapshot.entityKey), snapshot);
|
|
@@ -330,7 +411,8 @@ export class RenderScene {
|
|
|
330
411
|
for (const snapshot of desired.values()) {
|
|
331
412
|
const existing = this.lookup(snapshot.worldId, snapshot.entityKey);
|
|
332
413
|
if (existing === undefined) {
|
|
333
|
-
this.allocate(snapshot);
|
|
414
|
+
const created = this.allocate(snapshot);
|
|
415
|
+
this.dirtySinceSubmitted.add(created.slot);
|
|
334
416
|
continue;
|
|
335
417
|
}
|
|
336
418
|
const updated: RenderSceneSlot = {
|
|
@@ -340,6 +422,7 @@ export class RenderScene {
|
|
|
340
422
|
this.unindexMaterials(existing);
|
|
341
423
|
this.slots[existing.slot] = updated;
|
|
342
424
|
this.indexMaterials(updated);
|
|
425
|
+
this.dirtySinceSubmitted.add(updated.slot);
|
|
343
426
|
this.orderedSlots.push(existing.slot);
|
|
344
427
|
}
|
|
345
428
|
|
|
@@ -363,6 +446,59 @@ export class RenderScene {
|
|
|
363
446
|
return this.materialized;
|
|
364
447
|
}
|
|
365
448
|
|
|
449
|
+
lastSubmittedSlotByIndex(slot: number): RenderSceneSlot | undefined {
|
|
450
|
+
return this.lastSubmittedSlots[slot];
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
temporalSnapshotBySlot(slot: number): RenderableTemporalSnapshot | undefined {
|
|
454
|
+
const current = this.slots[slot];
|
|
455
|
+
return current === undefined ? undefined : this.temporalSnapshot(current);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
withTemporal(snapshot: RenderableSnapshot): RenderableSnapshot {
|
|
459
|
+
const slot = this.lookup(snapshot.worldId, snapshot.entityKey);
|
|
460
|
+
return slot === undefined ? snapshot : { ...snapshot, temporal: this.temporalSnapshot(slot) };
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
wasLastSubmittedVisible(slot: number, generation: number): boolean {
|
|
464
|
+
return this.lastSubmittedVisible.has(`${slot}:${generation}`);
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
captureSubmission(
|
|
468
|
+
visible: readonly Pick<RenderableSnapshot, 'worldId' | 'entityKey'>[],
|
|
469
|
+
): RenderSceneSubmissionCapture {
|
|
470
|
+
const visibleSlots = new Set<string>();
|
|
471
|
+
for (const snapshot of visible) {
|
|
472
|
+
const slot = this.lookup(snapshot.worldId, snapshot.entityKey);
|
|
473
|
+
if (slot !== undefined) visibleSlots.add(`${slot.slot}:${slot.generation}`);
|
|
474
|
+
}
|
|
475
|
+
return {
|
|
476
|
+
revision: this.revision,
|
|
477
|
+
slots: [...this.dirtySinceSubmitted].map((slot) => ({
|
|
478
|
+
slot,
|
|
479
|
+
current: this.slots[slot],
|
|
480
|
+
})),
|
|
481
|
+
visible: visibleSlots,
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
commitSubmission(capture: RenderSceneSubmissionCapture): RenderSceneSubmissionDelta {
|
|
486
|
+
if (capture.revision !== this.revision) {
|
|
487
|
+
throw new RangeError('render scene changed while its temporal submission was active');
|
|
488
|
+
}
|
|
489
|
+
for (const update of capture.slots) {
|
|
490
|
+
this.lastSubmittedSlots[update.slot] = update.current;
|
|
491
|
+
this.dirtySinceSubmitted.delete(update.slot);
|
|
492
|
+
}
|
|
493
|
+
this.lastSubmittedVisible = new Set(capture.visible);
|
|
494
|
+
this.submittedEpoch += 1;
|
|
495
|
+
this.invalidateSnapshots();
|
|
496
|
+
return {
|
|
497
|
+
epoch: this.submittedEpoch,
|
|
498
|
+
slots: capture.slots.map((update) => update.slot),
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
|
|
366
502
|
slotsSnapshot(): readonly RenderSceneSlot[] {
|
|
367
503
|
if (this.slotSnapshot !== undefined) return this.slotSnapshot;
|
|
368
504
|
const records: RenderSceneSlot[] = [];
|
|
@@ -522,6 +658,49 @@ export class RenderScene {
|
|
|
522
658
|
}
|
|
523
659
|
}
|
|
524
660
|
|
|
661
|
+
private temporalSnapshot(slot: RenderSceneSlot): RenderableTemporalSnapshot {
|
|
662
|
+
const submitted = this.lastSubmittedSlots[slot.slot];
|
|
663
|
+
const sameGeneration = submitted?.generation === slot.generation;
|
|
664
|
+
const wasVisible =
|
|
665
|
+
sameGeneration && this.lastSubmittedVisible.has(`${slot.slot}:${slot.generation}`);
|
|
666
|
+
const reasons: RenderableReactiveReason[] = [];
|
|
667
|
+
if (!sameGeneration) {
|
|
668
|
+
reasons.push(submitted === undefined ? 'new-slot' : 'generation-reuse');
|
|
669
|
+
} else if (!wasVisible) {
|
|
670
|
+
reasons.push('reentered');
|
|
671
|
+
}
|
|
672
|
+
if (
|
|
673
|
+
sameGeneration &&
|
|
674
|
+
submitted !== undefined &&
|
|
675
|
+
submitted.snapshot.assetHandle !== slot.snapshot.assetHandle
|
|
676
|
+
) {
|
|
677
|
+
reasons.push('geometry-revision');
|
|
678
|
+
}
|
|
679
|
+
if (
|
|
680
|
+
sameGeneration &&
|
|
681
|
+
submitted !== undefined &&
|
|
682
|
+
submitted.snapshot.materials !== slot.snapshot.materials
|
|
683
|
+
) {
|
|
684
|
+
reasons.push('material-revision');
|
|
685
|
+
}
|
|
686
|
+
const seedCurrent =
|
|
687
|
+
!sameGeneration ||
|
|
688
|
+
!wasVisible ||
|
|
689
|
+
reasons.includes('geometry-revision') ||
|
|
690
|
+
reasons.includes('material-revision');
|
|
691
|
+
const previous = seedCurrent || submitted === undefined ? slot.snapshot : submitted.snapshot;
|
|
692
|
+
return {
|
|
693
|
+
previousEpoch: seedCurrent ? undefined : this.submittedEpoch,
|
|
694
|
+
previousSource: seedCurrent ? 'current-seed' : 'last-submitted',
|
|
695
|
+
reactive: reasons.length > 0,
|
|
696
|
+
reactiveReasons: reasons,
|
|
697
|
+
previousTransform: previous.transform,
|
|
698
|
+
previousInstances: previous.instances,
|
|
699
|
+
previousSkin: previous.skin,
|
|
700
|
+
previousMorphWeights: previous.morph?.weights,
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
|
|
525
704
|
private invalidateSnapshots(): void {
|
|
526
705
|
this.materialized = undefined;
|
|
527
706
|
this.slotSnapshot = undefined;
|
|
@@ -554,6 +733,7 @@ interface PersistentCompositionEntry {
|
|
|
554
733
|
readonly resourceOwner: number;
|
|
555
734
|
readonly projection: RenderScene;
|
|
556
735
|
readonly topology: BatchTopology;
|
|
736
|
+
readonly transmissionDemand: PersistentTransmissionDemandProjection;
|
|
557
737
|
readonly readCursors: number[];
|
|
558
738
|
readonly leaseIdentities: readonly string[];
|
|
559
739
|
catalogEpoch: number;
|
|
@@ -693,6 +873,9 @@ export class PersistentRenderScene {
|
|
|
693
873
|
private gpuDevice: RhiDevice | undefined;
|
|
694
874
|
private gpuStatus: 'inactive' | 'unsupported' | 'resident' | 'rebuild-pending' | 'error' =
|
|
695
875
|
'inactive';
|
|
876
|
+
private temporalCapture:
|
|
877
|
+
| { readonly projection: RenderScene; readonly capture: RenderSceneSubmissionCapture }
|
|
878
|
+
| undefined;
|
|
696
879
|
private pointsLinesInspections: readonly PointsLinesInspection[] = [];
|
|
697
880
|
|
|
698
881
|
constructor(private readonly options: PersistentRenderSceneOptions = {}) {}
|
|
@@ -817,7 +1000,11 @@ export class PersistentRenderScene {
|
|
|
817
1000
|
});
|
|
818
1001
|
continue;
|
|
819
1002
|
}
|
|
1003
|
+
// Camera snapshots are rebuilt from the current candidate frame and
|
|
1004
|
+
// drive culling there; moving a camera must not invalidate the
|
|
1005
|
+
// retained scene projection or recreate its GPU tables.
|
|
820
1006
|
if (
|
|
1007
|
+
!world.hasComponent(entity, Camera) &&
|
|
821
1008
|
NON_RENDERABLE_TRANSFORM_CONSUMERS.some((component) =>
|
|
822
1009
|
world.hasComponent(entity, component),
|
|
823
1010
|
)
|
|
@@ -848,6 +1035,7 @@ export class PersistentRenderScene {
|
|
|
848
1035
|
|
|
849
1036
|
invalidate(): void {
|
|
850
1037
|
this.composition = undefined;
|
|
1038
|
+
this.temporalCapture = undefined;
|
|
851
1039
|
this.lastResyncReason = 'explicit-invalidate';
|
|
852
1040
|
}
|
|
853
1041
|
|
|
@@ -864,6 +1052,7 @@ export class PersistentRenderScene {
|
|
|
864
1052
|
? this.composition
|
|
865
1053
|
: undefined;
|
|
866
1054
|
if (detachedComposition !== undefined) this.composition = undefined;
|
|
1055
|
+
if (detachedComposition !== undefined) this.temporalCapture = undefined;
|
|
867
1056
|
if (this.gpuOwner !== world && this.gpuOwner !== detachedComposition?.token) return;
|
|
868
1057
|
this.gpuScene?.dispose();
|
|
869
1058
|
this.gpuScene = undefined;
|
|
@@ -896,6 +1085,7 @@ export class PersistentRenderScene {
|
|
|
896
1085
|
this.gpuDevice = undefined;
|
|
897
1086
|
this.gpuStatus = 'inactive';
|
|
898
1087
|
this.composition = undefined;
|
|
1088
|
+
this.temporalCapture = undefined;
|
|
899
1089
|
this.pointsLinesInspections = [];
|
|
900
1090
|
}
|
|
901
1091
|
|
|
@@ -937,6 +1127,40 @@ export class PersistentRenderScene {
|
|
|
937
1127
|
};
|
|
938
1128
|
}
|
|
939
1129
|
|
|
1130
|
+
/** Publish renderer-owned previous transforms after queue submission. */
|
|
1131
|
+
commitTemporalFrame(): Result<void, RhiError> {
|
|
1132
|
+
const gpuCommit = this.gpuScene?.commitTemporalFrame();
|
|
1133
|
+
if (gpuCommit !== undefined && !gpuCommit.ok) return gpuCommit;
|
|
1134
|
+
const temporalCapture = this.temporalCapture;
|
|
1135
|
+
if (temporalCapture !== undefined) {
|
|
1136
|
+
try {
|
|
1137
|
+
temporalCapture.projection.commitSubmission(temporalCapture.capture);
|
|
1138
|
+
} catch (cause) {
|
|
1139
|
+
void cause;
|
|
1140
|
+
return err(
|
|
1141
|
+
new RhiError({
|
|
1142
|
+
code: 'internal-error',
|
|
1143
|
+
expected: 'render scene remains unchanged while a submitted temporal frame commits',
|
|
1144
|
+
hint: 'retry the temporal frame after the renderer-owned scene snapshot is stable',
|
|
1145
|
+
}),
|
|
1146
|
+
);
|
|
1147
|
+
}
|
|
1148
|
+
this.temporalCapture = undefined;
|
|
1149
|
+
}
|
|
1150
|
+
return ok(undefined);
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
/** Capture current CPU scene facts; commitTemporalFrame publishes them only after submit. */
|
|
1154
|
+
prepareTemporalFrame(
|
|
1155
|
+
visible: readonly Pick<RenderableSnapshot, 'worldId' | 'entityKey'>[],
|
|
1156
|
+
): void {
|
|
1157
|
+
const projection = this.composition?.projection;
|
|
1158
|
+
this.temporalCapture =
|
|
1159
|
+
projection === undefined
|
|
1160
|
+
? undefined
|
|
1161
|
+
: { projection, capture: projection.captureSubmission(visible) };
|
|
1162
|
+
}
|
|
1163
|
+
|
|
940
1164
|
pointsLinesSnapshots(): readonly PointsLinesRetainedSnapshot[] {
|
|
941
1165
|
return this.composition?.projection.pointsLinesSnapshots() ?? [];
|
|
942
1166
|
}
|
|
@@ -961,9 +1185,12 @@ export class PersistentRenderScene {
|
|
|
961
1185
|
leases?: readonly RenderReadLease[],
|
|
962
1186
|
): ExtractedFrame {
|
|
963
1187
|
const candidateFrame = buildCandidateFrame();
|
|
1188
|
+
this.temporalCapture = undefined;
|
|
964
1189
|
this.worldEntitiesScanned = candidateFrame.renderables.length;
|
|
965
1190
|
const projection = new RenderScene();
|
|
966
1191
|
projection.reset(candidateFrame.renderables);
|
|
1192
|
+
const transmissionDemand = new PersistentTransmissionDemandProjection();
|
|
1193
|
+
transmissionDemand.apply(transmissionDemandOperations(candidateFrame.renderables));
|
|
967
1194
|
const topology = new BatchTopology();
|
|
968
1195
|
topology.rebuild(projection.slotsSnapshot());
|
|
969
1196
|
const token = {};
|
|
@@ -974,6 +1201,7 @@ export class PersistentRenderScene {
|
|
|
974
1201
|
resourceOwner: owner.resourceOwner,
|
|
975
1202
|
projection,
|
|
976
1203
|
topology,
|
|
1204
|
+
transmissionDemand,
|
|
977
1205
|
readCursors:
|
|
978
1206
|
leases === undefined || leases.length !== worlds.length
|
|
979
1207
|
? []
|
|
@@ -991,7 +1219,20 @@ export class PersistentRenderScene {
|
|
|
991
1219
|
this.syncGpuOwner(token, projection, undefined, true);
|
|
992
1220
|
this.fullRebuilds += 1;
|
|
993
1221
|
this.lastResyncReason = 'attach';
|
|
994
|
-
|
|
1222
|
+
const candidates = projection
|
|
1223
|
+
.materialize()
|
|
1224
|
+
.map((snapshot) => projection.withTemporal(snapshot));
|
|
1225
|
+
return cullPersistentFrame({ ...candidateFrame, renderables: [...candidates] }, candidates);
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
/** Internal topology fact; the renderer does not expose demand as public API. */
|
|
1229
|
+
transmissionTopologyDemand(): TransmissionDemand {
|
|
1230
|
+
return (
|
|
1231
|
+
this.composition?.transmissionDemand.inspect() ?? {
|
|
1232
|
+
activeCount: 0,
|
|
1233
|
+
needsRoughMips: false,
|
|
1234
|
+
}
|
|
1235
|
+
);
|
|
995
1236
|
}
|
|
996
1237
|
|
|
997
1238
|
/**
|
|
@@ -1003,7 +1244,9 @@ export class PersistentRenderScene {
|
|
|
1003
1244
|
buildCandidateFrame: () => ExtractedFrame,
|
|
1004
1245
|
): ExtractedFrame {
|
|
1005
1246
|
const candidateFrame = buildCandidateFrame();
|
|
1006
|
-
const candidates = entry.projection
|
|
1247
|
+
const candidates = entry.projection
|
|
1248
|
+
.materialize()
|
|
1249
|
+
.map((snapshot) => entry.projection.withTemporal(snapshot));
|
|
1007
1250
|
return cullPersistentFrame({ ...candidateFrame, renderables: [...candidates] }, candidates);
|
|
1008
1251
|
}
|
|
1009
1252
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { RhiDevice } from '@forgeax/engine-rhi';
|
|
2
|
+
import { rhi } from '@forgeax/engine-rhi-null';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
import { createTaaHistoryResources, type TaaHistoryResources } from '../taa-history-resources';
|
|
5
|
+
|
|
6
|
+
async function nullDevice(): Promise<RhiDevice> {
|
|
7
|
+
const adapter = await rhi.requestAdapter();
|
|
8
|
+
if (!adapter.ok) throw adapter.error;
|
|
9
|
+
const device = await adapter.value.requestDevice();
|
|
10
|
+
if (!device.ok) throw device.error;
|
|
11
|
+
return device.value;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
describe('TAA GPU history resources', () => {
|
|
15
|
+
it('allocates two rgba16float slots with sampled/render/copy usage', async () => {
|
|
16
|
+
const device = await nullDevice();
|
|
17
|
+
const resources = createTaaHistoryResources(device, 64, 32);
|
|
18
|
+
expect(resources.ok).toBe(true);
|
|
19
|
+
if (!resources.ok) return;
|
|
20
|
+
expect(resources.value.slots).toHaveLength(2);
|
|
21
|
+
expect(resources.value.descriptor.format).toBe('rgba16float');
|
|
22
|
+
expect(resources.value.descriptor.usage).toBe(0x17);
|
|
23
|
+
resources.value.dispose();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('swaps only on commit and preserves the previous slot on abort', async () => {
|
|
27
|
+
const device = await nullDevice();
|
|
28
|
+
const resources = createTaaHistoryResources(device, 8, 8);
|
|
29
|
+
expect(resources.ok).toBe(true);
|
|
30
|
+
if (!resources.ok) return;
|
|
31
|
+
const state: TaaHistoryResources = resources.value;
|
|
32
|
+
expect(state.previousIndex).toBe(1);
|
|
33
|
+
expect(state.valid).toBe(false);
|
|
34
|
+
state.beginFrame();
|
|
35
|
+
state.abortFrame();
|
|
36
|
+
expect(state.currentIndex).toBe(0);
|
|
37
|
+
expect(state.valid).toBe(false);
|
|
38
|
+
state.beginFrame();
|
|
39
|
+
state.commitFrame();
|
|
40
|
+
expect(state.currentIndex).toBe(1);
|
|
41
|
+
expect(state.previousIndex).toBe(0);
|
|
42
|
+
expect(state.valid).toBe(true);
|
|
43
|
+
state.dispose();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { SceneDataLane, SceneDataSchemaId } from './scene-data';
|
|
2
|
+
|
|
3
|
+
export interface SceneDataCoverage {
|
|
4
|
+
readonly schema: SceneDataSchemaId;
|
|
5
|
+
readonly lane: SceneDataLane;
|
|
6
|
+
readonly producerId: string;
|
|
7
|
+
readonly complete: boolean;
|
|
8
|
+
readonly contributorIds: readonly string[];
|
|
9
|
+
readonly exactContributorIds: readonly string[];
|
|
10
|
+
readonly reactiveContributorIds: readonly string[];
|
|
11
|
+
readonly missingContributorIds: readonly string[];
|
|
12
|
+
readonly omittedMissingContributorCount: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface TemporalCoverage {
|
|
16
|
+
readonly width: number;
|
|
17
|
+
readonly height: number;
|
|
18
|
+
readonly bytes: number;
|
|
19
|
+
readonly fullScreen: true;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function createTemporalCoverage(width: number, height: number): TemporalCoverage {
|
|
23
|
+
if (!Number.isSafeInteger(width) || width <= 0) throw new RangeError('width must be positive.');
|
|
24
|
+
if (!Number.isSafeInteger(height) || height <= 0)
|
|
25
|
+
throw new RangeError('height must be positive.');
|
|
26
|
+
return Object.freeze({ width, height, bytes: 32 * width * height, fullScreen: true as const });
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type SceneDataContributorKind = 'exact' | 'reactive';
|
|
30
|
+
export interface SceneDataContributor {
|
|
31
|
+
readonly id: string;
|
|
32
|
+
readonly kind: SceneDataContributorKind;
|
|
33
|
+
}
|
|
34
|
+
export function classifySceneDataCoverage(input: {
|
|
35
|
+
readonly contributors: readonly SceneDataContributor[];
|
|
36
|
+
readonly requiredContributorIds: readonly string[];
|
|
37
|
+
}): {
|
|
38
|
+
readonly exactContributorIds: readonly string[];
|
|
39
|
+
readonly reactiveContributorIds: readonly string[];
|
|
40
|
+
readonly missingContributorIds: readonly string[];
|
|
41
|
+
readonly omittedMissingContributorCount: number;
|
|
42
|
+
readonly complete: boolean;
|
|
43
|
+
} {
|
|
44
|
+
const exactContributorIds = input.contributors.filter((c) => c.kind === 'exact').map((c) => c.id);
|
|
45
|
+
const reactiveContributorIds = input.contributors
|
|
46
|
+
.filter((c) => c.kind === 'reactive')
|
|
47
|
+
.map((c) => c.id);
|
|
48
|
+
const available = new Set(input.contributors.map((c) => c.id));
|
|
49
|
+
const missing = input.requiredContributorIds.filter((id) => !available.has(id));
|
|
50
|
+
return {
|
|
51
|
+
exactContributorIds: Object.freeze(exactContributorIds),
|
|
52
|
+
reactiveContributorIds: Object.freeze(reactiveContributorIds),
|
|
53
|
+
missingContributorIds: Object.freeze(missing.slice(0, 32)),
|
|
54
|
+
omittedMissingContributorCount: Math.max(0, missing.length - 32),
|
|
55
|
+
complete: missing.length === 0,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function scanSceneDataCoverage(input: {
|
|
59
|
+
readonly schema: SceneDataSchemaId;
|
|
60
|
+
readonly lane: SceneDataLane;
|
|
61
|
+
readonly producerId: string;
|
|
62
|
+
readonly contributorIds: readonly string[];
|
|
63
|
+
readonly requiredContributorIds: readonly string[];
|
|
64
|
+
}): SceneDataCoverage {
|
|
65
|
+
const classification = classifySceneDataCoverage({
|
|
66
|
+
contributors: input.contributorIds.map((id) => ({ id, kind: 'exact' as const })),
|
|
67
|
+
requiredContributorIds: input.requiredContributorIds,
|
|
68
|
+
});
|
|
69
|
+
return Object.freeze({
|
|
70
|
+
schema: input.schema,
|
|
71
|
+
lane: input.lane,
|
|
72
|
+
producerId: input.producerId,
|
|
73
|
+
...classification,
|
|
74
|
+
contributorIds: Object.freeze([...input.contributorIds]),
|
|
75
|
+
});
|
|
76
|
+
}
|