@forgeax/engine-render 0.1.6 → 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 +279 -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 +19 -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/material/assembly.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.d.ts +1 -0
- package/dist/authoring.d.ts.map +1 -1
- 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-LOSO4CTV.mjs +901 -0
- 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-QC4VW3XJ.mjs → chunk-RXZ3RGOU.mjs} +4 -30
- 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-SCRSAK5B.mjs → chunk-YTQ5C7YQ.mjs} +231 -127
- 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 +5 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/lines.d.ts +5 -0
- package/dist/components/lines.d.ts.map +1 -0
- package/dist/components/motion-blur.d.ts +7 -0
- package/dist/components/motion-blur.d.ts.map +1 -0
- package/dist/components/points.d.ts +15 -0
- package/dist/components/points.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 +11419 -16442
- 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 +217 -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 +7 -2
- 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-driven/production-raster.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 +21 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +8 -4
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +46 -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 +12 -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/points-lines/admission.d.ts +36 -0
- package/dist/points-lines/admission.d.ts.map +1 -0
- package/dist/points-lines/bounds.d.ts +8 -0
- package/dist/points-lines/bounds.d.ts.map +1 -0
- package/dist/points-lines/expansion-cache.d.ts +28 -0
- package/dist/points-lines/expansion-cache.d.ts.map +1 -0
- package/dist/points-lines/inspection.d.ts +53 -0
- package/dist/points-lines/inspection.d.ts.map +1 -0
- package/dist/points-lines/prepare.d.ts +67 -0
- package/dist/points-lines/prepare.d.ts.map +1 -0
- package/dist/points-lines/record.d.ts +60 -0
- package/dist/points-lines/record.d.ts.map +1 -0
- package/dist/points-lines/snapshot.d.ts +49 -0
- package/dist/points-lines/snapshot.d.ts.map +1 -0
- package/dist/record/frame-lighting.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 +18 -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 +93 -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 +10 -1
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/render-contract.d.ts +102 -10
- 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 +32 -5
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +27 -5
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +3 -0
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +43 -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__/authoring-path.unit.test.ts +9 -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-indirect-raster-evidence.ts +12 -2
- 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 -124
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +28 -28
- 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 +15 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
- package/src/__tests__/render-error-exhaustive.test-d.ts +22 -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 +433 -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 +1295 -507
- package/src/assembly/host-contract.ts +4 -0
- package/src/assembly/material/assembly.ts +2 -5
- 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/authoring.ts +1 -0
- package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
- package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
- package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -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 +10 -0
- package/src/components/lines.ts +18 -0
- package/src/components/motion-blur.ts +8 -0
- package/src/components/points.ts +40 -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 +429 -1
- 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 +24 -4
- 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-driven/production-raster.ts +6 -1
- package/src/gpu-scene.ts +24 -0
- package/src/ibl/skylight-bind-group.ts +30 -38
- package/src/index.ts +83 -6
- package/src/inspection-types.ts +52 -0
- package/src/internal.ts +5 -0
- package/src/materials.ts +119 -24
- package/src/pbr-pipeline.ts +66 -20
- 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 +6 -0
- package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
- package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
- package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
- package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
- package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
- package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
- package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
- package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
- package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
- package/src/points-lines/admission.ts +238 -0
- package/src/points-lines/bounds.ts +23 -0
- package/src/points-lines/expansion-cache.ts +215 -0
- package/src/points-lines/inspection.ts +97 -0
- package/src/points-lines/prepare.ts +177 -0
- package/src/points-lines/record.ts +125 -0
- package/src/points-lines/snapshot.ts +130 -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-lighting.ts +14 -2
- package/src/record/frame-snapshot.ts +129 -5
- package/src/record/frame-targets.ts +15 -6
- package/src/record/frame.ts +119 -4
- package/src/record/main-pass-geometry.ts +178 -40
- package/src/record/main-pass-material.ts +114 -66
- package/src/record/main-pass-sprite-draws.ts +79 -102
- package/src/record/main-pass.ts +83 -7
- package/src/record/mesh-ssbo.ts +22 -3
- package/src/record/render-context.ts +209 -23
- package/src/record/shadow-pass.ts +129 -28
- package/src/record/skybox-post-pass.ts +99 -42
- package/src/record/typed-frame-graph.ts +582 -42
- package/src/record/view-ubo.ts +99 -4
- package/src/render-contract.ts +121 -7
- package/src/render-graph-primitives.ts +18 -1
- package/src/render-pipeline.ts +100 -27
- package/src/render-system-extract.ts +264 -77
- package/src/render-system.ts +786 -43
- package/src/scene/render-scene-types.ts +3 -0
- package/src/scene/render-scene.ts +307 -9
- 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-QC4VW3XJ.mjs.map +0 -1
- package/dist/chunk-SCRSAK5B.mjs.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/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/record/view-ubo.ts
CHANGED
|
@@ -8,16 +8,25 @@
|
|
|
8
8
|
|
|
9
9
|
import { mat4 } from '@forgeax/engine-math';
|
|
10
10
|
import type { Buffer, RhiQueue } from '@forgeax/engine-rhi';
|
|
11
|
+
import type { FogFrame } from '../extract/environment';
|
|
12
|
+
import type { PointsLinesStyle } from '../points-lines/snapshot';
|
|
11
13
|
import type { CameraSnapshot } from '../render-contract';
|
|
12
14
|
import type {
|
|
13
15
|
DirectionalLightSnapshot,
|
|
14
16
|
ExtractedLights,
|
|
15
17
|
SpotLightSnapshot,
|
|
16
18
|
} from '../render-system-extract';
|
|
19
|
+
import type { TemporalView as LegacyTemporalView } from '../temporal/temporal-view';
|
|
20
|
+
import type { TemporalView } from '../temporal/view';
|
|
17
21
|
import { clampPcfKernelSize } from './frame-snapshot';
|
|
18
22
|
import { computeProjectionMatrix, computeViewMatrix } from './helpers';
|
|
19
23
|
|
|
20
24
|
export const VIEW_UNIFORM_BYTES = 960;
|
|
25
|
+
export const POINTS_LINES_VIEW_BYTES = 160;
|
|
26
|
+
export const POINTS_LINES_VIEW_SLOT_STRIDE = 256;
|
|
27
|
+
export const POINTS_LINES_VIEW_SLOT_COUNT = 1024;
|
|
28
|
+
export const POINTS_LINES_VIEW_BUFFER_SIZE =
|
|
29
|
+
POINTS_LINES_VIEW_SLOT_STRIDE * POINTS_LINES_VIEW_SLOT_COUNT;
|
|
21
30
|
export const VIEW_UNIFORM_SLOT_STRIDE = 1024;
|
|
22
31
|
export const POINT_SHADOW_VIEW_SLOT_COUNT = 24;
|
|
23
32
|
export const VIEW_UNIFORM_BUFFER_SIZE =
|
|
@@ -27,6 +36,47 @@ export function pointShadowViewOffset(layer: number, face: number): number {
|
|
|
27
36
|
return VIEW_UNIFORM_SLOT_STRIDE * (1 + layer * 6 + face);
|
|
28
37
|
}
|
|
29
38
|
|
|
39
|
+
export function writePointsLinesViewUbo(
|
|
40
|
+
queue: RhiQueue,
|
|
41
|
+
buffer: Buffer,
|
|
42
|
+
camera: CameraSnapshot,
|
|
43
|
+
width: number,
|
|
44
|
+
height: number,
|
|
45
|
+
model?: ArrayLike<number>,
|
|
46
|
+
style?: PointsLinesStyle,
|
|
47
|
+
byteOffset = 0,
|
|
48
|
+
): void {
|
|
49
|
+
const projection = computeProjectionMatrix(camera);
|
|
50
|
+
const view = computeViewMatrix(camera);
|
|
51
|
+
const worldViewProj = mat4.create();
|
|
52
|
+
mat4.multiply(worldViewProj, projection, view);
|
|
53
|
+
const payload = new Float32Array(40);
|
|
54
|
+
payload.set(worldViewProj);
|
|
55
|
+
if (model === undefined) {
|
|
56
|
+
payload[16] = 1;
|
|
57
|
+
payload[21] = 1;
|
|
58
|
+
payload[26] = 1;
|
|
59
|
+
payload[31] = 1;
|
|
60
|
+
} else {
|
|
61
|
+
for (let index = 0; index < 16; index += 1) {
|
|
62
|
+
payload[16 + index] = model[index] ?? 0;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
payload[32] = width;
|
|
66
|
+
payload[33] = height;
|
|
67
|
+
if (style?.kind === 'points') {
|
|
68
|
+
payload[36] = style.sizePx;
|
|
69
|
+
payload[38] = style.shape === 'circle' ? 1 : 0;
|
|
70
|
+
} else if (style?.kind === 'lines') {
|
|
71
|
+
payload[36] = style.widthPx;
|
|
72
|
+
payload[37] = 1;
|
|
73
|
+
} else {
|
|
74
|
+
payload[36] = 1;
|
|
75
|
+
}
|
|
76
|
+
const uploaded = queue.writeBuffer(buffer, byteOffset, payload);
|
|
77
|
+
if (!uploaded.ok) throw uploaded.error;
|
|
78
|
+
}
|
|
79
|
+
|
|
30
80
|
/**
|
|
31
81
|
* feat-20260704 M3/w18: assemble + upload the per-frame View UBO payload.
|
|
32
82
|
*
|
|
@@ -63,16 +113,34 @@ export function writeViewUbo(
|
|
|
63
113
|
light: DirectionalLightSnapshot,
|
|
64
114
|
lights: ExtractedLights,
|
|
65
115
|
spotShadowSnapshots: readonly SpotLightSnapshot[],
|
|
116
|
+
fogOrTemporal?: FogFrame | TemporalView | LegacyTemporalView,
|
|
117
|
+
temporal?: TemporalView,
|
|
66
118
|
): void {
|
|
119
|
+
const isTemporal =
|
|
120
|
+
fogOrTemporal !== undefined &&
|
|
121
|
+
('currentJitterUv' in fogOrTemporal || 'currentUnjitteredViewProjection' in fogOrTemporal);
|
|
122
|
+
const fog = isTemporal ? undefined : fogOrTemporal;
|
|
123
|
+
const resolvedTemporal = temporal ?? (isTemporal ? fogOrTemporal : undefined);
|
|
67
124
|
// Compose worldViewProj once per frame (view * proj).
|
|
68
125
|
const projMatrix = computeProjectionMatrix(camera);
|
|
69
126
|
const viewMatrix = computeViewMatrix(camera);
|
|
70
|
-
const
|
|
71
|
-
mat4.multiply(
|
|
127
|
+
const unjitteredViewProjection = mat4.create();
|
|
128
|
+
mat4.multiply(unjitteredViewProjection, projMatrix, viewMatrix);
|
|
129
|
+
const jitteredProjection = mat4.create();
|
|
130
|
+
if (resolvedTemporal?.currentJitterUv !== undefined) {
|
|
131
|
+
const jitter = mat4.identity(mat4.create());
|
|
132
|
+
jitter[12] = resolvedTemporal.currentJitterUv[0] * 2;
|
|
133
|
+
jitter[13] = resolvedTemporal.currentJitterUv[1] * -2;
|
|
134
|
+
mat4.multiply(jitteredProjection, jitter, projMatrix);
|
|
135
|
+
} else {
|
|
136
|
+
for (let i = 0; i < 16; i += 1) jitteredProjection[i] = projMatrix[i] ?? 0;
|
|
137
|
+
}
|
|
138
|
+
const mainProjection = mat4.create();
|
|
139
|
+
mat4.multiply(mainProjection, jitteredProjection, viewMatrix);
|
|
72
140
|
|
|
73
141
|
const VIEW_PAYLOAD_FLOATS = 240;
|
|
74
142
|
const viewPayload = new Float32Array(VIEW_PAYLOAD_FLOATS);
|
|
75
|
-
for (let i = 0; i < 16; i++) viewPayload[i] =
|
|
143
|
+
for (let i = 0; i < 16; i++) viewPayload[i] = mainProjection[i] ?? 0;
|
|
76
144
|
viewPayload[16] = (light.direction[0] ?? 0) * light.intensity;
|
|
77
145
|
viewPayload[17] = (light.direction[1] ?? -1) * light.intensity;
|
|
78
146
|
viewPayload[18] = (light.direction[2] ?? 0) * light.intensity;
|
|
@@ -90,7 +158,7 @@ export function writeViewUbo(
|
|
|
90
158
|
// Host pre-computes mat4.invert so the skybox fragment shader avoids
|
|
91
159
|
// per-pixel matrix inversion (charter P4 consistent abstraction).
|
|
92
160
|
const inverseViewProj = mat4.create();
|
|
93
|
-
mat4.invert(inverseViewProj,
|
|
161
|
+
mat4.invert(inverseViewProj, mainProjection);
|
|
94
162
|
for (let i = 0; i < 16; i++) viewPayload[44 + i] = inverseViewProj[i] ?? 0;
|
|
95
163
|
// lightViewProj[1..3] at [60..107].
|
|
96
164
|
if (lights.lightViewProj !== undefined) {
|
|
@@ -102,6 +170,21 @@ export function writeViewUbo(
|
|
|
102
170
|
}
|
|
103
171
|
}
|
|
104
172
|
}
|
|
173
|
+
|
|
174
|
+
// Temporal ABI tail: current and last-successful unjittered projections
|
|
175
|
+
// stay separate from the jittered main projection and never advance on a
|
|
176
|
+
// failed submission. The fixed 240-float payload already reserves these
|
|
177
|
+
// 36 slots at byte offsets 784..920.
|
|
178
|
+
const previous = resolvedTemporal?.previousUnjitteredViewProjection;
|
|
179
|
+
for (let i = 0; i < 16; i += 1) {
|
|
180
|
+
viewPayload[196 + i] = unjitteredViewProjection[i] ?? 0;
|
|
181
|
+
// No previous successful frame exists on first frame/reset. Keep this
|
|
182
|
+
// lane zeroed instead of copying current state into a history slot.
|
|
183
|
+
viewPayload[212 + i] = previous?.[i] ?? 0;
|
|
184
|
+
}
|
|
185
|
+
viewPayload[228] = camera.near;
|
|
186
|
+
viewPayload[229] = camera.far;
|
|
187
|
+
viewPayload[230] = camera.projection === 'orthographic' ? 1 : 0;
|
|
105
188
|
// splitPlanes at [108], [112], [116], [120] (vec4 stride = 4 floats).
|
|
106
189
|
if (lights.splitPlanes !== undefined) {
|
|
107
190
|
for (let s = 0; s < 4; s++) {
|
|
@@ -155,6 +238,18 @@ export function writeViewUbo(
|
|
|
155
238
|
}
|
|
156
239
|
}
|
|
157
240
|
|
|
241
|
+
// Fog is a resource-owner semantic carried by the shared View ABI. Keep the
|
|
242
|
+
// disabled payload zeroed and write only the selected frame facts so both
|
|
243
|
+
// direct and clustered lanes consume the same owner projection.
|
|
244
|
+
if (fog !== undefined) {
|
|
245
|
+
viewPayload[232] = fog.color[0] ?? 0;
|
|
246
|
+
viewPayload[233] = fog.color[1] ?? 0;
|
|
247
|
+
viewPayload[234] = fog.color[2] ?? 0;
|
|
248
|
+
viewPayload[235] = fog.density;
|
|
249
|
+
viewPayload[236] = fog.heightFalloff;
|
|
250
|
+
viewPayload[237] = fog.maxOpacity;
|
|
251
|
+
}
|
|
252
|
+
|
|
158
253
|
const viewUploadResult = queue.writeBuffer(viewUniformBuffer, 0, viewPayload);
|
|
159
254
|
if (!viewUploadResult.ok) throw viewUploadResult.error;
|
|
160
255
|
|
package/src/render-contract.ts
CHANGED
|
@@ -3,11 +3,12 @@ import type { World } from '@forgeax/engine-ecs';
|
|
|
3
3
|
import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
|
|
4
4
|
import type { Vec3 } from '@forgeax/engine-math';
|
|
5
5
|
import type { ProfileFrameToken, Profiler } from '@forgeax/engine-profiler';
|
|
6
|
-
import type { RenderGraphError } from '@forgeax/engine-render-graph';
|
|
6
|
+
import type { ColorValueDomain, RenderGraphError } from '@forgeax/engine-render-graph';
|
|
7
7
|
import type {
|
|
8
8
|
BindGroupLayout,
|
|
9
9
|
Buffer,
|
|
10
10
|
Result,
|
|
11
|
+
RhiCanvasSurfacePresentationProof,
|
|
11
12
|
RhiCaps,
|
|
12
13
|
RhiCommandEncoder,
|
|
13
14
|
RhiDevice,
|
|
@@ -23,13 +24,26 @@ import type { SkinError } from '@forgeax/engine-skinning';
|
|
|
23
24
|
import type { ImageError } from '@forgeax/engine-types';
|
|
24
25
|
import type { RhiBackendInstrumentation } from './assembly/backend-contract';
|
|
25
26
|
import type { Antialias, BloomEnabled, Tonemap } from './components/camera';
|
|
27
|
+
import type { EnvironmentInspection } from './environment/inspection';
|
|
26
28
|
import type { RenderError } from './errors/render';
|
|
27
|
-
import type { RenderFeature } from './features/types';
|
|
29
|
+
import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
|
|
28
30
|
import type { PostProcessShaderEntry } from './fullscreen-post-process-pass';
|
|
29
|
-
import type {
|
|
31
|
+
import type {
|
|
32
|
+
BloomInspection,
|
|
33
|
+
MotionBlurInspection,
|
|
34
|
+
RenderSceneInspection,
|
|
35
|
+
TemporalTargetInspection,
|
|
36
|
+
TransmissionInspection,
|
|
37
|
+
} from './inspection-types';
|
|
38
|
+
import type { TemporalInspection } from './temporal/inspection';
|
|
39
|
+
|
|
40
|
+
export type { TransmissionInspection } from './inspection-types';
|
|
41
|
+
export type { PointsLinesInspection } from './points-lines/inspection';
|
|
42
|
+
|
|
30
43
|
import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
|
|
31
44
|
import type { StandardProfile } from './pipeline/standard-profile';
|
|
32
45
|
import type { PostProcessError } from './post-process-errors';
|
|
46
|
+
import type { TemporalView } from './temporal/view';
|
|
33
47
|
|
|
34
48
|
export type RenderResult<T, E> =
|
|
35
49
|
| { readonly ok: true; readonly value: T }
|
|
@@ -48,6 +62,10 @@ export type RenderWorldLease = RenderReadLease;
|
|
|
48
62
|
export interface CameraSnapshot {
|
|
49
63
|
/** Stable ECS identity used by the frame plan's camera authority fact. */
|
|
50
64
|
readonly entityKey?: number;
|
|
65
|
+
/** World index supplied by the multi-world extract merge. */
|
|
66
|
+
readonly worldId?: number;
|
|
67
|
+
/** Camera-owned history generation forwarded into the frame plan. */
|
|
68
|
+
readonly historyVersion?: number;
|
|
51
69
|
/** World-space camera translation (mat4.getTranslation of Transform.world). */
|
|
52
70
|
readonly position: Vec3;
|
|
53
71
|
/** Resolved world-space camera mat4, copied from Transform.world. */
|
|
@@ -71,10 +89,26 @@ export interface CameraSnapshot {
|
|
|
71
89
|
readonly bloomIntensity: number;
|
|
72
90
|
readonly bloomBlurRadius: number;
|
|
73
91
|
readonly clearColor: readonly [number, number, number, number];
|
|
92
|
+
/** Renderer-owned temporal projection used by Standard's TAA producer. */
|
|
93
|
+
readonly temporal?: TemporalView;
|
|
94
|
+
/** Active-camera motion blur parameters, present only when demanded. */
|
|
95
|
+
readonly motionBlur?: {
|
|
96
|
+
readonly shutterAngle: number;
|
|
97
|
+
readonly maxRadiusPixels: number;
|
|
98
|
+
readonly sampleCount: number;
|
|
99
|
+
};
|
|
74
100
|
}
|
|
75
101
|
|
|
76
|
-
/** Stable identity owned by the Standard feature host for
|
|
77
|
-
export const
|
|
102
|
+
/** Stable identity owned by the Standard feature host for output transform. */
|
|
103
|
+
export const STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = 'forgeax::standard::output-transform';
|
|
104
|
+
|
|
105
|
+
export type {
|
|
106
|
+
EnvironmentFrame,
|
|
107
|
+
EnvironmentSource,
|
|
108
|
+
FogFrame,
|
|
109
|
+
FramePlan,
|
|
110
|
+
} from './extract/environment';
|
|
111
|
+
export type { TemporalView } from './temporal/view';
|
|
78
112
|
|
|
79
113
|
/**
|
|
80
114
|
* Render-graph state exposed to pipeline declarations. Concrete pipeline
|
|
@@ -172,7 +206,13 @@ export type RendererEvent =
|
|
|
172
206
|
readonly previous: RendererState;
|
|
173
207
|
readonly current: RendererState;
|
|
174
208
|
}
|
|
175
|
-
| { readonly kind: 'error'; readonly error: RenderError }
|
|
209
|
+
| { readonly kind: 'error'; readonly error: RenderError }
|
|
210
|
+
/** Emitted only after the renderer's sole submit path returns a receipt. */
|
|
211
|
+
| {
|
|
212
|
+
readonly kind: 'frame-submitted';
|
|
213
|
+
readonly frameId: number;
|
|
214
|
+
readonly deviceGeneration: number;
|
|
215
|
+
};
|
|
176
216
|
|
|
177
217
|
/** Package-local listener alias used by the renderer assembly implementation. */
|
|
178
218
|
export type RendererEventListener = (event: RendererEvent) => void;
|
|
@@ -236,6 +276,57 @@ export interface FrameReceiptObservation {
|
|
|
236
276
|
readonly include: readonly ('timings' | 'draws' | 'bindings')[];
|
|
237
277
|
}
|
|
238
278
|
|
|
279
|
+
/** Stable backend facts for the Standard output transform projection. */
|
|
280
|
+
export interface RenderOutputInspection {
|
|
281
|
+
readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
|
|
282
|
+
readonly displayEncoded: boolean;
|
|
283
|
+
readonly intermediateFormat?: TextureFormat;
|
|
284
|
+
/** Concrete surface route committed by configureSurface. */
|
|
285
|
+
readonly surfaceProfile?: 'dual-view' | 'raw-only';
|
|
286
|
+
/** Pass names from the same committed graph as the output facts. */
|
|
287
|
+
readonly graphPassNames: readonly string[];
|
|
288
|
+
/** Detached descriptor for the graph-owned output target, when present. */
|
|
289
|
+
readonly standardOutputColor?: RenderStandardOutputColorInspection;
|
|
290
|
+
readonly surfaceStorage: TextureFormat;
|
|
291
|
+
readonly surfaceDisplay: TextureFormat;
|
|
292
|
+
readonly endpoint: 'surface.storage.raw';
|
|
293
|
+
readonly capability: 'rgba16float-renderable' | 'surface-raw-endpoint' | 'unavailable';
|
|
294
|
+
readonly presentationProof?: RhiCanvasSurfacePresentationProof;
|
|
295
|
+
readonly error:
|
|
296
|
+
| {
|
|
297
|
+
readonly code: string;
|
|
298
|
+
readonly expected: string;
|
|
299
|
+
readonly hint: string;
|
|
300
|
+
readonly detail?: unknown;
|
|
301
|
+
}
|
|
302
|
+
| undefined;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/** Detached descriptor for the graph-owned display-encoded intermediate. */
|
|
306
|
+
export interface RenderStandardOutputColorInspection {
|
|
307
|
+
readonly format: TextureFormat;
|
|
308
|
+
readonly domain?: ColorValueDomain;
|
|
309
|
+
readonly width: number;
|
|
310
|
+
readonly height: number;
|
|
311
|
+
readonly sampleCount: number;
|
|
312
|
+
readonly usage: number;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/** Stable identity refs for a renderer-owned frame observation. */
|
|
316
|
+
export interface RenderObservationInspection {
|
|
317
|
+
readonly observationId: string;
|
|
318
|
+
readonly frameId: number;
|
|
319
|
+
/** Camera antialias mode used by the frame carrying this observation. */
|
|
320
|
+
readonly antialias?: Antialias;
|
|
321
|
+
/** Surface route committed for the same frame graph. */
|
|
322
|
+
readonly surfaceProfile?: 'dual-view' | 'raw-only';
|
|
323
|
+
/** Capability fact used when resolving a raw-only float target. */
|
|
324
|
+
readonly rgba16floatRenderable?: boolean;
|
|
325
|
+
/** Exact pass names and target descriptor from the committed graph. */
|
|
326
|
+
readonly passNames: readonly string[];
|
|
327
|
+
readonly standardOutputColor?: RenderStandardOutputColorInspection;
|
|
328
|
+
}
|
|
329
|
+
|
|
239
330
|
/**
|
|
240
331
|
* Detached renderer facts for host diagnostics and capability selection.
|
|
241
332
|
*
|
|
@@ -252,15 +343,37 @@ export interface RenderInspection {
|
|
|
252
343
|
readonly deviceGeneration: number;
|
|
253
344
|
};
|
|
254
345
|
readonly features: readonly string[];
|
|
346
|
+
/** Truthful lifecycle facts for every registered declarative feature. */
|
|
347
|
+
readonly featureDiagnostics: readonly RenderFeatureDiagnostics[];
|
|
255
348
|
readonly frustumStats: { readonly culled: number; readonly total: number };
|
|
256
349
|
readonly visibilityStats: { readonly explicitlyHidden: number };
|
|
257
350
|
readonly renderScene: RenderSceneInspection;
|
|
351
|
+
/** Last completed transmission candidate facts, detached from GPU handles. */
|
|
352
|
+
readonly transmission?: TransmissionInspection;
|
|
258
353
|
readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
|
|
259
354
|
readonly perFramePassNames: readonly string[];
|
|
260
355
|
readonly bindGroupCounts: {
|
|
261
356
|
readonly createBindGroup: number;
|
|
262
357
|
readonly keys: readonly string[];
|
|
263
358
|
};
|
|
359
|
+
/** Output transform facts; never includes fixture metrics or pixel bytes. */
|
|
360
|
+
readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
|
|
361
|
+
readonly displayEncoded: boolean;
|
|
362
|
+
readonly intermediateFormat?: TextureFormat;
|
|
363
|
+
readonly surfaceStorage: TextureFormat;
|
|
364
|
+
readonly surfaceDisplay: TextureFormat;
|
|
365
|
+
readonly endpoint: 'surface.storage.raw';
|
|
366
|
+
readonly capability: RenderOutputInspection['capability'];
|
|
367
|
+
readonly presentationProof?: RhiCanvasSurfacePresentationProof;
|
|
368
|
+
readonly error: RenderOutputInspection['error'];
|
|
369
|
+
readonly observation: RenderObservationInspection;
|
|
370
|
+
readonly environment: EnvironmentInspection;
|
|
371
|
+
readonly temporal: TemporalInspection;
|
|
372
|
+
readonly bloom: BloomInspection;
|
|
373
|
+
/** Semantic Standard temporal target metadata; no graph or RHI handles. */
|
|
374
|
+
readonly temporalTarget?: TemporalTargetInspection;
|
|
375
|
+
/** Renderer-owned Motion Blur facts; absent when no component is active. */
|
|
376
|
+
readonly motionBlur?: MotionBlurInspection;
|
|
264
377
|
}
|
|
265
378
|
|
|
266
379
|
/** Backend marker — single-element union preserved for future extensibility (D-2). */
|
|
@@ -368,7 +481,8 @@ export const RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
|
|
|
368
481
|
'record/graph-execute/forward/material-bind-groups',
|
|
369
482
|
'record/graph-execute/forward/pipeline-selection',
|
|
370
483
|
'record/graph-execute/forward/draw-submit',
|
|
371
|
-
'record/graph-execute/
|
|
484
|
+
'record/graph-execute/output-transform',
|
|
485
|
+
'record/graph-execute/present',
|
|
372
486
|
'record/graph-execute/debug-overlay',
|
|
373
487
|
'record/graph-execute/shadow',
|
|
374
488
|
'record/graph-execute/spot-shadow',
|
|
@@ -665,7 +665,10 @@ function dispatchFullscreenPass(
|
|
|
665
665
|
// the swap-chain path uses the backend-selected surface view format.
|
|
666
666
|
let writeFormat = ctx.pipelineState?.colorAttachmentFormat ?? 'rgba8unorm-srgb';
|
|
667
667
|
if (graphPass !== undefined) {
|
|
668
|
-
|
|
668
|
+
// Typed graph passes must write their declared output target. The frame
|
|
669
|
+
// surface view is only the fallback for legacy passes; using it here
|
|
670
|
+
// leaves a typed output target cleared while the next pass samples it.
|
|
671
|
+
writeView = (resolveCtx?.resolve(color) as TextureView | undefined) ?? ctx.view;
|
|
669
672
|
writeFormat = graphOutputFormat ?? writeFormat;
|
|
670
673
|
} else if (rawSwapchainOutput && color === 'swapchain') {
|
|
671
674
|
const rawViewRes = ctx.runtime.device.createTextureView(ctx.currentTexture, {});
|
|
@@ -733,6 +736,20 @@ function dispatchFullscreenPass(
|
|
|
733
736
|
paramsBuffer,
|
|
734
737
|
depthTexView,
|
|
735
738
|
depthSampler,
|
|
739
|
+
built.extraColorBindings.map((binding, index) => {
|
|
740
|
+
const read = entry.reads?.filter(
|
|
741
|
+
(candidate) => typeof candidate === 'string' || candidate.sampleType !== 'depth',
|
|
742
|
+
)[index + 1];
|
|
743
|
+
const key = typeof read === 'string' ? read : read?.key;
|
|
744
|
+
const view = key === undefined ? undefined : resolveCtx?.resolve(key);
|
|
745
|
+
if (view === undefined) {
|
|
746
|
+
throw new PostProcessError({
|
|
747
|
+
code: 'fullscreen-input-not-found',
|
|
748
|
+
detail: { readsKey: key ?? 'additional-read', passName: name },
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
return { binding, view: view as TextureView };
|
|
752
|
+
}),
|
|
736
753
|
);
|
|
737
754
|
if (bindGroup === null) return;
|
|
738
755
|
|
package/src/render-pipeline.ts
CHANGED
|
@@ -26,7 +26,13 @@ import type {
|
|
|
26
26
|
RenderGraphError,
|
|
27
27
|
RenderGraphFrame,
|
|
28
28
|
} from '@forgeax/engine-render-graph';
|
|
29
|
-
import type {
|
|
29
|
+
import type {
|
|
30
|
+
BindGroup,
|
|
31
|
+
RhiCaps,
|
|
32
|
+
RhiError,
|
|
33
|
+
RhiRenderPassEncoder,
|
|
34
|
+
TextureFormat,
|
|
35
|
+
} from '@forgeax/engine-rhi';
|
|
30
36
|
import { ok, type Result } from '@forgeax/engine-types';
|
|
31
37
|
import type { Tonemap } from './components/camera';
|
|
32
38
|
import type { RenderError } from './errors/render';
|
|
@@ -35,8 +41,10 @@ import {
|
|
|
35
41
|
GPU_TEXTURE_USAGE_COPY_SRC,
|
|
36
42
|
GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
|
|
37
43
|
} from './gpu-texture-usage';
|
|
38
|
-
import type
|
|
44
|
+
import { STANDARD_POST_STAGE_NAMES, type StandardProfile } from './pipeline/standard-profile';
|
|
45
|
+
import type { SurfaceProfile } from './record/render-context';
|
|
39
46
|
import type { RenderPipelineContext } from './render-contract';
|
|
47
|
+
import type { TransmissionDemand } from './transmission/projection';
|
|
40
48
|
|
|
41
49
|
export type { RenderPipelineContext } from './render-contract';
|
|
42
50
|
|
|
@@ -50,7 +58,7 @@ export interface ToneOutputContract {
|
|
|
50
58
|
readonly exposureStage: 'linearHdr' | 'none';
|
|
51
59
|
}
|
|
52
60
|
|
|
53
|
-
export type RenderPostStageName =
|
|
61
|
+
export type RenderPostStageName = (typeof STANDARD_POST_STAGE_NAMES)[number];
|
|
54
62
|
export type RenderPostDomainStage = readonly [
|
|
55
63
|
RenderPostStageName,
|
|
56
64
|
ColorValueDomain,
|
|
@@ -60,18 +68,21 @@ export type RenderPostDomainStage = readonly [
|
|
|
60
68
|
/**
|
|
61
69
|
* Single post-stage domain contract shared by the Standard lighting lanes.
|
|
62
70
|
* The selected scene domain for transparent geometry is explicit; every later
|
|
63
|
-
* stage follows the same linear blend,
|
|
71
|
+
* stage follows the same linear blend, output-transform, anti-alias, post-effect, and present sequence.
|
|
64
72
|
*/
|
|
65
73
|
export function resolvePostColorDomainContract(
|
|
66
74
|
sceneDomain: 'linear-ldr' | 'linear-hdr',
|
|
67
75
|
): readonly RenderPostDomainStage[] {
|
|
68
76
|
const scene: ColorValueDomain = sceneDomain;
|
|
77
|
+
const [transparentBlend, bloom, outputTransform, fxaa, postEffect, present] =
|
|
78
|
+
STANDARD_POST_STAGE_NAMES;
|
|
69
79
|
return [
|
|
70
|
-
[
|
|
71
|
-
[
|
|
72
|
-
[
|
|
73
|
-
[
|
|
74
|
-
[
|
|
80
|
+
[transparentBlend, scene, scene],
|
|
81
|
+
[bloom, 'linear-hdr', 'linear-hdr'],
|
|
82
|
+
[outputTransform, scene, 'display-encoded'],
|
|
83
|
+
[fxaa, 'display-encoded', 'display-encoded'],
|
|
84
|
+
[postEffect, 'display-encoded', 'display-encoded'],
|
|
85
|
+
[present, 'display-encoded', 'display-encoded'],
|
|
75
86
|
];
|
|
76
87
|
}
|
|
77
88
|
|
|
@@ -104,13 +115,25 @@ export interface RenderPipelineTopology {
|
|
|
104
115
|
readonly pipelineId: string;
|
|
105
116
|
readonly standardProfile?: StandardProfile | undefined;
|
|
106
117
|
readonly config: import('@forgeax/engine-types').RenderPipelineAsset['config'];
|
|
118
|
+
/**
|
|
119
|
+
* The record stage had no Camera and injected the synthetic clear-only
|
|
120
|
+
* snapshot. Keep that fact explicit so a normal no-tone Camera still uses
|
|
121
|
+
* the float Output Transform while the empty-scene contract can write its
|
|
122
|
+
* clear directly to the surface.
|
|
123
|
+
*/
|
|
124
|
+
readonly clearOnly?: boolean | undefined;
|
|
107
125
|
readonly surface: {
|
|
108
126
|
readonly width: number;
|
|
109
127
|
readonly height: number;
|
|
110
128
|
readonly storageFormat: import('@forgeax/engine-rhi').TextureFormat;
|
|
111
129
|
readonly viewFormat: import('@forgeax/engine-rhi').TextureFormat;
|
|
130
|
+
readonly profile?: SurfaceProfile | undefined;
|
|
112
131
|
};
|
|
113
132
|
readonly camera: Pick<RenderPipelineContext['camera'], 'tonemap' | 'antialias' | 'bloom'>;
|
|
133
|
+
readonly temporal?: {
|
|
134
|
+
readonly taa: boolean;
|
|
135
|
+
readonly motionBlur: boolean;
|
|
136
|
+
};
|
|
114
137
|
readonly shadow: {
|
|
115
138
|
readonly mapSize: number;
|
|
116
139
|
readonly cascadeCount: 1 | 2 | 3 | 4;
|
|
@@ -126,6 +149,8 @@ export interface RenderPipelineTopology {
|
|
|
126
149
|
};
|
|
127
150
|
readonly featureTopologySignature: string;
|
|
128
151
|
readonly gpuDrivenTopologySignature: string;
|
|
152
|
+
/** Internal graph fact; renderer callers do not configure transmission demand. */
|
|
153
|
+
readonly transmissionDemand?: TransmissionDemand | undefined;
|
|
129
154
|
}
|
|
130
155
|
|
|
131
156
|
export interface RenderPipelineFrame extends RenderPipelineContext, RenderGraphFrame {}
|
|
@@ -135,6 +160,7 @@ export interface RenderPipelineTarget {
|
|
|
135
160
|
readonly view: GraphTextureView;
|
|
136
161
|
readonly format: TextureFormat;
|
|
137
162
|
readonly sampleCount: 1 | 4;
|
|
163
|
+
readonly domain?: ColorValueDomain | undefined;
|
|
138
164
|
readonly resolveTarget?: GraphTextureView | undefined;
|
|
139
165
|
}
|
|
140
166
|
|
|
@@ -153,6 +179,7 @@ export function createRenderPipelineTarget(
|
|
|
153
179
|
view: view.value,
|
|
154
180
|
format: viewDescriptor.format ?? descriptor.format,
|
|
155
181
|
sampleCount: descriptor.sampleCount === 4 ? 4 : 1,
|
|
182
|
+
...(descriptor.domain === undefined ? {} : { domain: descriptor.domain }),
|
|
156
183
|
});
|
|
157
184
|
}
|
|
158
185
|
|
|
@@ -160,7 +187,7 @@ export function importRenderPipelineSurface(
|
|
|
160
187
|
graph: RenderGraphBuilder<RenderPipelineFrame>,
|
|
161
188
|
topology: RenderPipelineTopology,
|
|
162
189
|
): Result<
|
|
163
|
-
{ readonly display
|
|
190
|
+
{ readonly display?: RenderPipelineTarget; readonly storage: RenderPipelineTarget },
|
|
164
191
|
RenderGraphError
|
|
165
192
|
> {
|
|
166
193
|
const texture = graph.importTexture(
|
|
@@ -168,21 +195,32 @@ export function importRenderPipelineSurface(
|
|
|
168
195
|
{
|
|
169
196
|
format: topology.surface.storageFormat,
|
|
170
197
|
size: 'surface',
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
198
|
+
// The imported surface is the final encoded endpoint. Keeping this
|
|
199
|
+
// semantic fact on the graph resource lets detached inspection project
|
|
200
|
+
// from the compiled graph instead of re-inferring it from format names.
|
|
201
|
+
domain: 'display-encoded',
|
|
202
|
+
usage:
|
|
203
|
+
GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
|
|
204
|
+
(topology.surface.profile?.kind === 'raw-only' ? 0 : GPU_TEXTURE_USAGE_COPY_SRC),
|
|
205
|
+
viewFormats: [
|
|
206
|
+
...(topology.surface.profile?.viewFormats ??
|
|
207
|
+
(topology.surface.storageFormat === topology.surface.viewFormat
|
|
208
|
+
? []
|
|
209
|
+
: [topology.surface.viewFormat])),
|
|
210
|
+
],
|
|
176
211
|
},
|
|
177
212
|
(frame) => frame.currentTexture,
|
|
178
213
|
);
|
|
179
214
|
if (!texture.ok) return texture;
|
|
180
|
-
const display =
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
215
|
+
const display =
|
|
216
|
+
topology.surface.profile?.hasDisplayEndpoint === false
|
|
217
|
+
? undefined
|
|
218
|
+
: graph.importView(
|
|
219
|
+
texture.value,
|
|
220
|
+
{ label: 'surface.display', format: topology.surface.viewFormat },
|
|
221
|
+
(frame) => frame.view,
|
|
222
|
+
);
|
|
223
|
+
if (display !== undefined && !display.ok) return display;
|
|
186
224
|
const storage = graph.importView(
|
|
187
225
|
texture.value,
|
|
188
226
|
{ label: 'surface.storage', format: topology.surface.storageFormat },
|
|
@@ -197,17 +235,23 @@ export function importRenderPipelineSurface(
|
|
|
197
235
|
);
|
|
198
236
|
if (!storage.ok) return storage;
|
|
199
237
|
return ok({
|
|
200
|
-
display
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
238
|
+
...(display === undefined
|
|
239
|
+
? {}
|
|
240
|
+
: {
|
|
241
|
+
display: {
|
|
242
|
+
texture: texture.value,
|
|
243
|
+
view: display.value,
|
|
244
|
+
format: topology.surface.viewFormat,
|
|
245
|
+
sampleCount: 1 as const,
|
|
246
|
+
domain: 'display-encoded' as const,
|
|
247
|
+
},
|
|
248
|
+
}),
|
|
206
249
|
storage: {
|
|
207
250
|
texture: texture.value,
|
|
208
251
|
view: storage.value,
|
|
209
252
|
format: topology.surface.storageFormat,
|
|
210
253
|
sampleCount: 1,
|
|
254
|
+
domain: 'display-encoded',
|
|
211
255
|
},
|
|
212
256
|
});
|
|
213
257
|
}
|
|
@@ -232,13 +276,42 @@ export interface RenderPipelineGpuDrivenProjection {
|
|
|
232
276
|
|
|
233
277
|
export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame> {
|
|
234
278
|
readonly graph: RenderGraphBuilder<FrameCtx>;
|
|
279
|
+
/**
|
|
280
|
+
* Renderer-owned capability facts needed for admission decisions. The
|
|
281
|
+
* Standard temporal producer must use the live device probe rather than
|
|
282
|
+
* inferring rgba16float support from the selected surface format.
|
|
283
|
+
*/
|
|
284
|
+
readonly capabilities?: Pick<RhiCaps, 'rgba16floatRenderable'>;
|
|
285
|
+
/**
|
|
286
|
+
* Renderer-owned TAA history targets. The graph sees only imported typed
|
|
287
|
+
* targets; opaque RHI handles remain inside RenderFrameState.
|
|
288
|
+
*/
|
|
289
|
+
readonly taaHistory?: {
|
|
290
|
+
readonly currentColor: RenderPipelineTarget;
|
|
291
|
+
readonly previousColor: RenderPipelineTarget;
|
|
292
|
+
readonly currentTemporal: RenderPipelineTarget;
|
|
293
|
+
readonly previousTemporal: RenderPipelineTarget;
|
|
294
|
+
};
|
|
295
|
+
/** Renderer-owned, prewarmed encoder for one graph mip level. */
|
|
296
|
+
readonly encodeTransmissionMip?: (input: {
|
|
297
|
+
readonly pass: RhiRenderPassEncoder;
|
|
298
|
+
readonly frame: FrameCtx;
|
|
299
|
+
readonly resources: GraphResourceResolver;
|
|
300
|
+
readonly source: GraphTextureView;
|
|
301
|
+
readonly destination: GraphTextureView;
|
|
302
|
+
readonly level: number;
|
|
303
|
+
}) => void;
|
|
235
304
|
projectGpuDriven(target: {
|
|
236
305
|
readonly format: TextureFormat;
|
|
237
306
|
readonly sampleCount: 1 | 4;
|
|
238
307
|
}): Result<RenderPipelineGpuDrivenProjection | undefined, RenderPipelineBuildError>;
|
|
239
308
|
contributeFeatures(
|
|
240
309
|
targets: readonly RenderPipelineFeatureTarget[],
|
|
310
|
+
semanticTargets?: readonly RenderPipelineTarget[],
|
|
311
|
+
namedTargets?: Readonly<Record<string, RenderPipelineTarget>>,
|
|
241
312
|
): Result<void, RenderPipelineBuildError>;
|
|
313
|
+
/** Whether a producer-owned feature is installed for this graph build. */
|
|
314
|
+
hasFeature?(identity: string): boolean;
|
|
242
315
|
}
|
|
243
316
|
|
|
244
317
|
export type RenderPipelineBuildError = RenderGraphError | RenderError | RhiError;
|