@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
|
@@ -102,7 +102,7 @@ import {
|
|
|
102
102
|
resolveAssetHandle,
|
|
103
103
|
walkMaterialPassesOverSharedRefs,
|
|
104
104
|
} from '@forgeax/engine-assets-runtime';
|
|
105
|
-
import type { Component, ComponentSchema, EntityHandle, World } from '@forgeax/engine-ecs';
|
|
105
|
+
import type { Component, ComponentSchema, EntityHandle, Query, World } from '@forgeax/engine-ecs';
|
|
106
106
|
import {
|
|
107
107
|
InstanceTransformsStrideMismatchError,
|
|
108
108
|
readRenderArrayView,
|
|
@@ -152,33 +152,42 @@ import {
|
|
|
152
152
|
toShared,
|
|
153
153
|
} from '@forgeax/engine-types';
|
|
154
154
|
import {
|
|
155
|
-
|
|
156
|
-
bloomEnabledFromF32,
|
|
157
|
-
Camera,
|
|
158
|
-
cameraProjectionFromF32,
|
|
155
|
+
Atmosphere,
|
|
159
156
|
DirectionalLight,
|
|
157
|
+
Fog,
|
|
160
158
|
Instances,
|
|
161
159
|
Layer,
|
|
160
|
+
Lines,
|
|
162
161
|
MeshFilter,
|
|
163
162
|
MeshRenderer,
|
|
164
163
|
PointLight,
|
|
165
164
|
PointLightShadow,
|
|
165
|
+
Points,
|
|
166
166
|
PostProcessParams,
|
|
167
|
+
pointShapeFromU32,
|
|
167
168
|
SkyboxBackground,
|
|
168
169
|
Skylight,
|
|
170
|
+
SortKey,
|
|
169
171
|
SpotLight,
|
|
170
172
|
SpriteInstances,
|
|
171
173
|
SpriteRegionOverride,
|
|
172
|
-
tonemapFromF32,
|
|
173
174
|
tonemapToU32,
|
|
174
175
|
} from './components';
|
|
175
176
|
import { GlyphText } from './components/glyph-text';
|
|
176
177
|
import { computeInvRangeSquared, degToCos } from './components/light-helpers';
|
|
178
|
+
import { selectEnvironment } from './environment/frame';
|
|
177
179
|
import {
|
|
178
180
|
MaterialSkinAttrMissingError,
|
|
179
181
|
ShadowInvalidConfigError,
|
|
180
182
|
SkinMaterialMismatchError,
|
|
181
183
|
} from './errors/render';
|
|
184
|
+
import { extractCameraSnapshots } from './extract/camera';
|
|
185
|
+
import type {
|
|
186
|
+
EnvironmentCandidate,
|
|
187
|
+
EnvironmentFrame,
|
|
188
|
+
FogCandidate,
|
|
189
|
+
FogFrame,
|
|
190
|
+
} from './extract/environment';
|
|
182
191
|
import { resolveVisibility, type VisibilitySnapshot } from './extract/visibility';
|
|
183
192
|
import type {
|
|
184
193
|
RenderFeatureHiddenEntityReport,
|
|
@@ -191,9 +200,13 @@ import {
|
|
|
191
200
|
resolveMeshMaterialBindings,
|
|
192
201
|
} from './mesh-material-bindings';
|
|
193
202
|
import { isStandardPbrMaterialShader } from './pbr-pipeline';
|
|
194
|
-
import {
|
|
195
|
-
import {
|
|
203
|
+
import { expandPointsLinesBounds } from './points-lines/bounds';
|
|
204
|
+
import type { PointsLinesRetainedSnapshot, PointsLinesStyle } from './points-lines/snapshot';
|
|
205
|
+
import { type CameraSnapshot, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID } from './render-contract';
|
|
196
206
|
import { selectPasses } from './systems/pass-selector';
|
|
207
|
+
|
|
208
|
+
export { extractCameraSnapshots } from './extract/camera';
|
|
209
|
+
|
|
197
210
|
import type { SkinPaletteAllocator } from './systems/skin-palette-allocator';
|
|
198
211
|
import type { SkinPaletteSlice } from './systems/skin-palette-types';
|
|
199
212
|
|
|
@@ -598,6 +611,30 @@ export interface RenderableSnapshot {
|
|
|
598
611
|
* deltas and the record stage only receives this frozen POD snapshot.
|
|
599
612
|
*/
|
|
600
613
|
readonly morph?: MorphSnapshot;
|
|
614
|
+
/** Renderer-owned previous-frame facts attached during temporal projection. */
|
|
615
|
+
readonly temporal?: RenderableTemporalSnapshot;
|
|
616
|
+
/** Detached M2 authoring facts for the optional Points/Lines projection. */
|
|
617
|
+
readonly pointsLines?: PointsLinesRetainedSnapshot;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
export type RenderablePreviousSource = 'last-submitted' | 'current-seed';
|
|
621
|
+
export type RenderableReactiveReason =
|
|
622
|
+
| 'new-slot'
|
|
623
|
+
| 'generation-reuse'
|
|
624
|
+
| 'reentered'
|
|
625
|
+
| 'geometry-revision'
|
|
626
|
+
| 'material-revision'
|
|
627
|
+
| 'skinning-deformation'
|
|
628
|
+
| 'morph-deformation';
|
|
629
|
+
export interface RenderableTemporalSnapshot {
|
|
630
|
+
readonly previousEpoch: number | undefined;
|
|
631
|
+
readonly previousSource: RenderablePreviousSource;
|
|
632
|
+
readonly reactive: boolean;
|
|
633
|
+
readonly reactiveReasons: readonly RenderableReactiveReason[];
|
|
634
|
+
readonly previousTransform: TransformSnapshot;
|
|
635
|
+
readonly previousInstances: InstancesSnapshot | undefined;
|
|
636
|
+
readonly previousSkin: SkinPaletteSlice | undefined;
|
|
637
|
+
readonly previousMorphWeights: Float32Array | undefined;
|
|
601
638
|
}
|
|
602
639
|
|
|
603
640
|
export interface MorphSnapshot {
|
|
@@ -750,9 +787,9 @@ export interface MaterialSnapshot {
|
|
|
750
787
|
*
|
|
751
788
|
* Populated by iterating `textureFieldNames`; absent keys mean the
|
|
752
789
|
* paramValue was missing / mis-typed (record falls back to default white).
|
|
753
|
-
* `emissiveTexture` / `occlusionTexture` are
|
|
754
|
-
*
|
|
755
|
-
*
|
|
790
|
+
* `emissiveTexture` / `occlusionTexture` are included here as ordinary
|
|
791
|
+
* Standard user-region fields; the production layout does not duplicate
|
|
792
|
+
* them in a lightmap injection region.
|
|
756
793
|
*/
|
|
757
794
|
readonly textureHandles?: ReadonlyMap<string, Handle<'TextureAsset', 'shared'>> | undefined;
|
|
758
795
|
/**
|
|
@@ -870,7 +907,7 @@ function gpuDrivenMaterialResourceClass(material: MaterialSnapshot): string {
|
|
|
870
907
|
//
|
|
871
908
|
// Plan-strategy D-3: single dispatch list sorted by queue value,
|
|
872
909
|
// replacing the old three-bucket opaque/transparent/overlay dispatch.
|
|
873
|
-
// Each entry carries the per-pass render-state
|
|
910
|
+
// Each entry carries the per-pass render-state and entry-point
|
|
874
911
|
// data from the resolved MaterialPass so the record stage
|
|
875
912
|
// reads them without re-resolving the material.
|
|
876
913
|
|
|
@@ -948,7 +985,9 @@ function appendMaterialDispatchEntries(
|
|
|
948
985
|
layer,
|
|
949
986
|
tags: passState.tags ?? {},
|
|
950
987
|
renderState: pipelineRenderState(passState),
|
|
951
|
-
|
|
988
|
+
// Material module identity is already closed in the cooked program.
|
|
989
|
+
// It must never become a draw-time define map.
|
|
990
|
+
defines: undefined,
|
|
952
991
|
vertexEntry: pass.program.vertexEntry,
|
|
953
992
|
fragmentEntry: pass.program.fragmentEntry,
|
|
954
993
|
materialShaderId: runtimeMaterialShaderId(pass.program.module, pass.name),
|
|
@@ -963,6 +1002,10 @@ function appendMaterialDispatchEntries(
|
|
|
963
1002
|
export interface ExtractedFrame {
|
|
964
1003
|
readonly cameras: CameraSnapshot[];
|
|
965
1004
|
readonly lights: ExtractedLights;
|
|
1005
|
+
/** Resource-owner environment facts selected once at the extract boundary. */
|
|
1006
|
+
readonly environment: EnvironmentFrame | undefined;
|
|
1007
|
+
/** False when the resource-owner world failed environment/fog selection. */
|
|
1008
|
+
readonly environmentReady: boolean;
|
|
966
1009
|
readonly renderables: RenderableSnapshot[];
|
|
967
1010
|
/**
|
|
968
1011
|
* Single dispatch list sorted by queue value (ascending, stable sort).
|
|
@@ -974,6 +1017,8 @@ export interface ExtractedFrame {
|
|
|
974
1017
|
readonly skylightCount: number;
|
|
975
1018
|
readonly skybox: SkyboxSnapshot | undefined;
|
|
976
1019
|
readonly skyboxCount: number;
|
|
1020
|
+
/** Resource-owner Fog facts selected once at the frame boundary. */
|
|
1021
|
+
readonly fog: FogFrame | undefined;
|
|
977
1022
|
/**
|
|
978
1023
|
* feat-20260528-frustum-culling M3 / w11: frustum culling statistics
|
|
979
1024
|
* collected during the extract phase. `total` is the count of entities
|
|
@@ -1052,6 +1097,10 @@ const BUILTIN_USER_REGION_TEXTURE_FIELDS: readonly string[] = [
|
|
|
1052
1097
|
'metallicRoughnessTexture',
|
|
1053
1098
|
'normalTexture',
|
|
1054
1099
|
'specularTintTexture',
|
|
1100
|
+
'emissiveTexture',
|
|
1101
|
+
'occlusionTexture',
|
|
1102
|
+
'transmissionTexture',
|
|
1103
|
+
'thicknessTexture',
|
|
1055
1104
|
];
|
|
1056
1105
|
const BUILTIN_USER_REGION_TEXTURE_FIELD_SET = new Set(BUILTIN_USER_REGION_TEXTURE_FIELDS);
|
|
1057
1106
|
const BUILTIN_BASE_COLOR_TEXTURE_FIELD_SET = new Set(['baseColorTexture']);
|
|
@@ -1340,11 +1389,11 @@ function collectMaterialTextureSamplers(
|
|
|
1340
1389
|
* `AssetRegistry.materialShaderTextureFieldNames`). Each declared texture
|
|
1341
1390
|
* field whose paramValue resolves to a handle lands in the returned map keyed
|
|
1342
1391
|
* by field name; this is the single path through which an arbitrary number of user-region
|
|
1343
|
-
* textures (
|
|
1392
|
+
* textures (8 Standard or 9+ custom, e.g. parallax `heightTexture`) flow.
|
|
1344
1393
|
*
|
|
1345
|
-
* When the shader is not registered the built-in
|
|
1346
|
-
* standard materials still resolve.
|
|
1347
|
-
*
|
|
1394
|
+
* When the shader is not registered the built-in Standard field set is used
|
|
1395
|
+
* so standard materials still resolve. Emissive and occlusion are ordinary
|
|
1396
|
+
* schema-driven user-region textures in that set.
|
|
1348
1397
|
*
|
|
1349
1398
|
* feat-20260623-world-space-video-asset M4 / w14 (D-5): a field whose paramValue
|
|
1350
1399
|
* catalogues to a VideoAsset is routed into `videoOut` (a VideoAsset-branded
|
|
@@ -1405,9 +1454,8 @@ function materialParametersToParamSchema(
|
|
|
1405
1454
|
? ENGINE_INJECTED_TEXTURE_FIELDS
|
|
1406
1455
|
: undefined;
|
|
1407
1456
|
return parameters.flatMap((parameter): ParamSchemaEntry[] => {
|
|
1408
|
-
//
|
|
1409
|
-
|
|
1410
|
-
if (parameter.static || parameter.type === 'bool') return [];
|
|
1457
|
+
// Boolean material values are runtime-only and have no UBO representation.
|
|
1458
|
+
if (parameter.type === 'bool') return [];
|
|
1411
1459
|
if (parameter.type === 'texture') {
|
|
1412
1460
|
if (engineInjectedTextureFields?.has(parameter.name) === true) return [];
|
|
1413
1461
|
return [{ name: parameter.name, type: 'texture2d' }];
|
|
@@ -1656,8 +1704,7 @@ export function resolveMaterialSnapshot(
|
|
|
1656
1704
|
// feat-20260621-learn-render-5-5-parallax M2 / w7 (D-3): iterate the
|
|
1657
1705
|
// shader's derive(paramSchema).textureFieldNames SSOT instead of a hardcoded
|
|
1658
1706
|
// user-region field list, so an Nth texture (e.g. parallax heightTexture)
|
|
1659
|
-
// resolves through the same path
|
|
1660
|
-
// (lightmap) textures, NOT in textureFieldNames, so they keep named reads.
|
|
1707
|
+
// resolves through the same path, including emissive/occlusion fields.
|
|
1661
1708
|
const videoTextureFields = new Map<string, Handle<'VideoAsset', 'shared'>>();
|
|
1662
1709
|
const textureHandles = collectUserRegionTextureHandles(
|
|
1663
1710
|
pv,
|
|
@@ -2183,59 +2230,15 @@ export interface PreparedExtractContext {
|
|
|
2183
2230
|
readonly assets: AssetRegistry | null | undefined;
|
|
2184
2231
|
readonly pipelineState: ExtractPipelineSurface | null | undefined;
|
|
2185
2232
|
readonly materialSnapshotCache: MaterialSnapshotCache | undefined;
|
|
2233
|
+
/** `undefined` keeps direct extractFrame's local Fog semantics; `null` means
|
|
2234
|
+
* the frame owner already selected that no Fog is present for this world. */
|
|
2235
|
+
readonly resourceOwnerFog: FogFrame | null | undefined;
|
|
2186
2236
|
readonly cull: 'self' | 'none' | 'external';
|
|
2187
2237
|
readonly cullCameras: readonly CameraSnapshot[] | undefined;
|
|
2188
2238
|
readonly hierarchy: SceneHierarchySnapshot;
|
|
2189
2239
|
readonly visibility: VisibilitySnapshot;
|
|
2190
2240
|
}
|
|
2191
2241
|
|
|
2192
|
-
export function extractCameraSnapshots(world: World): CameraSnapshot[] {
|
|
2193
|
-
const worldInternal = createWorldInternalView(world);
|
|
2194
|
-
const cameras: CameraSnapshot[] = [];
|
|
2195
|
-
const cameraEntities: number[] = [];
|
|
2196
|
-
const cameraQuery = world.query({ read: [Camera], with: [Transform] }).unwrap();
|
|
2197
|
-
for (const row of cameraQuery) {
|
|
2198
|
-
const cam = row.get(Camera);
|
|
2199
|
-
const entity = row.entity;
|
|
2200
|
-
const view = worldInternal._getArrayView(entity, Transform, 'world');
|
|
2201
|
-
if (view === undefined) continue;
|
|
2202
|
-
const worldMat = new Float32Array(view);
|
|
2203
|
-
cameras.push({
|
|
2204
|
-
entityKey: entity as number,
|
|
2205
|
-
position: mat4.getTranslation(vec3.create(), worldMat),
|
|
2206
|
-
world: worldMat,
|
|
2207
|
-
fov: cam.fov,
|
|
2208
|
-
aspect: cam.aspect,
|
|
2209
|
-
near: cam.near,
|
|
2210
|
-
far: cam.far,
|
|
2211
|
-
projection: cameraProjectionFromF32(cam.projection),
|
|
2212
|
-
orthoLeft: cam.left,
|
|
2213
|
-
orthoRight: cam.right,
|
|
2214
|
-
orthoBottom: cam.bottom,
|
|
2215
|
-
orthoTop: cam.top,
|
|
2216
|
-
tonemap: tonemapFromF32(cam.tonemap),
|
|
2217
|
-
exposure: cam.exposure,
|
|
2218
|
-
whitePoint: cam.whitePoint,
|
|
2219
|
-
antialias: antialiasFromF32(cam.antialias),
|
|
2220
|
-
bloom: bloomEnabledFromF32(cam.bloom),
|
|
2221
|
-
bloomThreshold: cam.bloomThreshold,
|
|
2222
|
-
bloomIntensity: cam.bloomIntensity,
|
|
2223
|
-
bloomBlurRadius: cam.bloomBlurRadius,
|
|
2224
|
-
clearColor: [
|
|
2225
|
-
cam.clearColor[0] ?? 0,
|
|
2226
|
-
cam.clearColor[1] ?? 0,
|
|
2227
|
-
cam.clearColor[2] ?? 0,
|
|
2228
|
-
cam.clearColor[3] ?? 1,
|
|
2229
|
-
],
|
|
2230
|
-
});
|
|
2231
|
-
cameraEntities.push(entity as number);
|
|
2232
|
-
}
|
|
2233
|
-
const activeCameraIndex = selectActiveCameraIndex(cameraEntities, getActiveCamera(world)?.entity);
|
|
2234
|
-
if (activeCameraIndex < 0) return cameras;
|
|
2235
|
-
const selected = cameras[activeCameraIndex];
|
|
2236
|
-
return selected === undefined ? cameras : [selected];
|
|
2237
|
-
}
|
|
2238
|
-
|
|
2239
2242
|
function tonemapParams(camera: CameraSnapshot): Uint8Array {
|
|
2240
2243
|
const bytes = new ArrayBuffer(16);
|
|
2241
2244
|
const floats = new Float32Array(bytes);
|
|
@@ -2252,6 +2255,7 @@ export function prepareExtractContext(
|
|
|
2252
2255
|
readonly assets?: AssetRegistry | null;
|
|
2253
2256
|
readonly pipelineState?: ExtractPipelineSurface | null;
|
|
2254
2257
|
readonly materialSnapshotCache?: MaterialSnapshotCache;
|
|
2258
|
+
readonly resourceOwnerFog?: FogFrame | null;
|
|
2255
2259
|
readonly cull?: 'self' | 'none' | 'external';
|
|
2256
2260
|
readonly cullCameras?: readonly CameraSnapshot[];
|
|
2257
2261
|
} = {},
|
|
@@ -2261,6 +2265,7 @@ export function prepareExtractContext(
|
|
|
2261
2265
|
assets: options.assets,
|
|
2262
2266
|
pipelineState: options.pipelineState,
|
|
2263
2267
|
materialSnapshotCache: options.materialSnapshotCache,
|
|
2268
|
+
resourceOwnerFog: options.resourceOwnerFog,
|
|
2264
2269
|
cull: options.cull ?? 'self',
|
|
2265
2270
|
cullCameras: options.cullCameras,
|
|
2266
2271
|
hierarchy,
|
|
@@ -2268,6 +2273,41 @@ export function prepareExtractContext(
|
|
|
2268
2273
|
};
|
|
2269
2274
|
}
|
|
2270
2275
|
|
|
2276
|
+
const fogQueries = new WeakMap<World, Query<readonly [typeof Fog]>>();
|
|
2277
|
+
|
|
2278
|
+
function selectFogFrame(world: World): FogFrame | undefined {
|
|
2279
|
+
// Query compilation is owned once per World; Query refreshes its matched
|
|
2280
|
+
// tables when the ECS structure changes, while iteration reads current Fog
|
|
2281
|
+
// values. This keeps the frame boundary free of repeated descriptor work.
|
|
2282
|
+
const fogCandidates: FogCandidate[] = [];
|
|
2283
|
+
let fogQuery = fogQueries.get(world);
|
|
2284
|
+
if (fogQuery === undefined) {
|
|
2285
|
+
fogQuery = world.query({ read: [Fog] }).unwrap();
|
|
2286
|
+
fogQueries.set(world, fogQuery);
|
|
2287
|
+
}
|
|
2288
|
+
for (const row of fogQuery) {
|
|
2289
|
+
const value = row.get(Fog);
|
|
2290
|
+
fogCandidates.push({
|
|
2291
|
+
entityKey: row.entity,
|
|
2292
|
+
color: [value.color[0] ?? 0, value.color[1] ?? 0, value.color[2] ?? 0],
|
|
2293
|
+
density: value.density,
|
|
2294
|
+
heightFalloff: value.heightFalloff,
|
|
2295
|
+
maxOpacity: value.maxOpacity,
|
|
2296
|
+
});
|
|
2297
|
+
}
|
|
2298
|
+
const fogSelection = selectEnvironment({
|
|
2299
|
+
environments: [],
|
|
2300
|
+
fogs: fogCandidates,
|
|
2301
|
+
suns: [],
|
|
2302
|
+
lane: 'direct',
|
|
2303
|
+
});
|
|
2304
|
+
if (fogSelection.ok) return fogSelection.value.fog;
|
|
2305
|
+
routeWorldError(world, fogSelection.error, {
|
|
2306
|
+
systemName: 'RenderSystem.extract (fog-selection)',
|
|
2307
|
+
});
|
|
2308
|
+
throw fogSelection.error;
|
|
2309
|
+
}
|
|
2310
|
+
|
|
2271
2311
|
export function extractFrames(
|
|
2272
2312
|
worlds: readonly World[],
|
|
2273
2313
|
owner: number | ExtractFramesOwner,
|
|
@@ -2295,6 +2335,12 @@ export function extractFrames(
|
|
|
2295
2335
|
}
|
|
2296
2336
|
|
|
2297
2337
|
const failedWorlds = new Set<World>();
|
|
2338
|
+
// Resource-owner selection is a frame-level concern. Select Fog once before
|
|
2339
|
+
// per-world extraction so non-owner worlds do not scan their ECS tables for
|
|
2340
|
+
// a value that the merge layer will discard.
|
|
2341
|
+
const resourceOwnerWorld = worlds[resourceOwner];
|
|
2342
|
+
const resourceOwnerFog =
|
|
2343
|
+
resourceOwnerWorld === undefined ? null : (selectFogFrame(resourceOwnerWorld) ?? null);
|
|
2298
2344
|
// ── D-2: per-world extract with error isolation ────────────────────────
|
|
2299
2345
|
//
|
|
2300
2346
|
// Each world runs extractFrame over the final state published by
|
|
@@ -2325,6 +2371,7 @@ export function extractFrames(
|
|
|
2325
2371
|
const prepared = prepareExtractContext(world, {
|
|
2326
2372
|
...(assets !== undefined ? { assets } : {}),
|
|
2327
2373
|
...(pipelineState !== undefined ? { pipelineState } : {}),
|
|
2374
|
+
resourceOwnerFog: wi === resourceOwner ? resourceOwnerFog : null,
|
|
2328
2375
|
...(materialSnapshotCachesByWorld === undefined
|
|
2329
2376
|
? {}
|
|
2330
2377
|
: {
|
|
@@ -2387,7 +2434,11 @@ export function extractFrames(
|
|
|
2387
2434
|
}
|
|
2388
2435
|
hiddenEntityReports.push(...f.hiddenEntityReports);
|
|
2389
2436
|
for (const r of f.renderables) {
|
|
2390
|
-
renderables.push({
|
|
2437
|
+
renderables.push({
|
|
2438
|
+
...r,
|
|
2439
|
+
worldId: wId,
|
|
2440
|
+
...(r.pointsLines === undefined ? {} : { pointsLines: { ...r.pointsLines, worldId: wId } }),
|
|
2441
|
+
});
|
|
2391
2442
|
}
|
|
2392
2443
|
|
|
2393
2444
|
// D-3: dispatch — per-world renderableIndex rebased by base offset.
|
|
@@ -2518,6 +2569,8 @@ export function extractFrames(
|
|
|
2518
2569
|
const skylightCount = resourceOwnerFrame?.skylightCount ?? 0;
|
|
2519
2570
|
const skybox = resourceOwnerFrame?.skybox;
|
|
2520
2571
|
const skyboxCount = resourceOwnerFrame?.skyboxCount ?? 0;
|
|
2572
|
+
const fog = resourceOwnerFrame?.fog;
|
|
2573
|
+
const environment = resourceOwnerFrame?.environment;
|
|
2521
2574
|
// User-authored PostProcessParams entities are singleton scene resources, so
|
|
2522
2575
|
// they come from the resourceOwner world (holistic snapshot selection).
|
|
2523
2576
|
const postProcessParams = new Map(resourceOwnerFrame?.postProcessParams);
|
|
@@ -2536,16 +2589,16 @@ export function extractFrames(
|
|
|
2536
2589
|
// cameraOwner === resourceOwner this is a no-op (identical entry). The 'na'
|
|
2537
2590
|
// Standard tonemap identity mirrors the engine provider key set at the
|
|
2538
2591
|
// bottom of extractFrame (SSOT: same identity, same 16B layout).
|
|
2539
|
-
const
|
|
2540
|
-
const cameraTonemapParam = cameraOwnerFrame?.postProcessParams.get(
|
|
2592
|
+
const OUTPUT_TRANSFORM_PARAM_KEY = STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
|
|
2593
|
+
const cameraTonemapParam = cameraOwnerFrame?.postProcessParams.get(OUTPUT_TRANSFORM_PARAM_KEY);
|
|
2541
2594
|
if (cameraTonemapParam !== undefined) {
|
|
2542
|
-
postProcessParams.set(
|
|
2595
|
+
postProcessParams.set(OUTPUT_TRANSFORM_PARAM_KEY, cameraTonemapParam);
|
|
2543
2596
|
} else {
|
|
2544
2597
|
// The camera-owner world produced no tonemap param (no Camera surfaced
|
|
2545
2598
|
// there this frame); do not leave a stale resource-owner entry that would
|
|
2546
2599
|
// apply a foreign camera's exposure. Removing it lets the tonemap pass fall
|
|
2547
2600
|
// back to its param-less zero path only when genuinely no camera exists.
|
|
2548
|
-
postProcessParams.delete(
|
|
2601
|
+
postProcessParams.delete(OUTPUT_TRANSFORM_PARAM_KEY);
|
|
2549
2602
|
}
|
|
2550
2603
|
|
|
2551
2604
|
// D-3: frustumStats — culled/total summed across worlds.
|
|
@@ -2566,6 +2619,9 @@ export function extractFrames(
|
|
|
2566
2619
|
skylightCount,
|
|
2567
2620
|
skybox,
|
|
2568
2621
|
skyboxCount,
|
|
2622
|
+
fog,
|
|
2623
|
+
environment,
|
|
2624
|
+
environmentReady: resourceOwnerFrame !== undefined && environment !== undefined,
|
|
2569
2625
|
frustumStats,
|
|
2570
2626
|
visibilityStats,
|
|
2571
2627
|
postProcessParams,
|
|
@@ -2653,7 +2709,12 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
2653
2709
|
pipelineState,
|
|
2654
2710
|
materialSnapshotCache: persistentMaterialSnapshotCache,
|
|
2655
2711
|
cull: cullMode,
|
|
2712
|
+
resourceOwnerFog,
|
|
2656
2713
|
} = context;
|
|
2714
|
+
// Environment reads are owned by the retained resource projection and are
|
|
2715
|
+
// established at the frame boundary; record never revisits World state.
|
|
2716
|
+
const fog =
|
|
2717
|
+
resourceOwnerFog === undefined ? selectFogFrame(world) : (resourceOwnerFog ?? undefined);
|
|
2657
2718
|
const visibility = context.visibility.hasAnyHiddenIntent ? context.visibility : undefined;
|
|
2658
2719
|
const skinPaletteAllocator = pipelineState?.skinPaletteAllocator ?? null;
|
|
2659
2720
|
|
|
@@ -3131,6 +3192,79 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
3131
3192
|
}
|
|
3132
3193
|
}
|
|
3133
3194
|
|
|
3195
|
+
const environmentCandidates: EnvironmentCandidate[] = [];
|
|
3196
|
+
const imageEnvironment =
|
|
3197
|
+
skylight?.equirectHandle !== undefined && skylight.equirectHandle > 0
|
|
3198
|
+
? skylight
|
|
3199
|
+
: skybox?.equirectHandle !== undefined && skybox.equirectHandle > 0
|
|
3200
|
+
? skybox
|
|
3201
|
+
: undefined;
|
|
3202
|
+
if (imageEnvironment !== undefined) {
|
|
3203
|
+
environmentCandidates.push({
|
|
3204
|
+
kind: 'image',
|
|
3205
|
+
entityKey: imageEnvironment.entityHandle,
|
|
3206
|
+
sourceKey: `equirect:${imageEnvironment.equirectHandle}`,
|
|
3207
|
+
});
|
|
3208
|
+
}
|
|
3209
|
+
const atmosphereQuery = world.query({ read: [Atmosphere] }).unwrap();
|
|
3210
|
+
for (const row of atmosphereQuery) {
|
|
3211
|
+
const value = row.get(Atmosphere);
|
|
3212
|
+
const atmosphere = {
|
|
3213
|
+
turbidity: value.turbidity,
|
|
3214
|
+
rayleigh: value.rayleigh,
|
|
3215
|
+
mieCoefficient: value.mieCoefficient,
|
|
3216
|
+
mieDirectionalG: value.mieDirectionalG,
|
|
3217
|
+
sunAngularRadius: value.sunAngularRadius,
|
|
3218
|
+
} as const;
|
|
3219
|
+
environmentCandidates.push({
|
|
3220
|
+
kind: 'atmosphere',
|
|
3221
|
+
entityKey: row.entity,
|
|
3222
|
+
sourceKey: `atmosphere:${row.entity}`,
|
|
3223
|
+
atmosphere,
|
|
3224
|
+
});
|
|
3225
|
+
}
|
|
3226
|
+
const directionalDirection = directional?.direction;
|
|
3227
|
+
const directionalLength =
|
|
3228
|
+
directionalDirection === undefined
|
|
3229
|
+
? 0
|
|
3230
|
+
: Math.hypot(
|
|
3231
|
+
directionalDirection[0] ?? 0,
|
|
3232
|
+
directionalDirection[1] ?? 0,
|
|
3233
|
+
directionalDirection[2] ?? 0,
|
|
3234
|
+
);
|
|
3235
|
+
const sun =
|
|
3236
|
+
directional === undefined || directionalLength <= 1e-6
|
|
3237
|
+
? []
|
|
3238
|
+
: [
|
|
3239
|
+
{
|
|
3240
|
+
entityKey: 0,
|
|
3241
|
+
direction: [
|
|
3242
|
+
-(directionalDirection?.[0] ?? 0) / directionalLength,
|
|
3243
|
+
-(directionalDirection?.[1] ?? 0) / directionalLength,
|
|
3244
|
+
-(directionalDirection?.[2] ?? 0) / directionalLength,
|
|
3245
|
+
] as [number, number, number],
|
|
3246
|
+
color: [
|
|
3247
|
+
directional.color[0] ?? 0,
|
|
3248
|
+
directional.color[1] ?? 0,
|
|
3249
|
+
directional.color[2] ?? 0,
|
|
3250
|
+
] as [number, number, number],
|
|
3251
|
+
intensity: directional.intensity,
|
|
3252
|
+
},
|
|
3253
|
+
];
|
|
3254
|
+
const environmentSelection = selectEnvironment({
|
|
3255
|
+
environments: environmentCandidates,
|
|
3256
|
+
fogs: fog === undefined ? [] : [fog],
|
|
3257
|
+
suns: sun,
|
|
3258
|
+
lane: 'direct',
|
|
3259
|
+
});
|
|
3260
|
+
if (!environmentSelection.ok) {
|
|
3261
|
+
routeWorldError(world, environmentSelection.error, {
|
|
3262
|
+
systemName: 'RenderSystem.extract (environment-selection)',
|
|
3263
|
+
});
|
|
3264
|
+
throw environmentSelection.error;
|
|
3265
|
+
}
|
|
3266
|
+
const environment: EnvironmentFrame = environmentSelection.value;
|
|
3267
|
+
|
|
3134
3268
|
// feat-20260528-frustum-culling M3 / w10: precompute per-camera frustum
|
|
3135
3269
|
// planes so entities can be tested against all cameras in the inner loop.
|
|
3136
3270
|
// Cameras with degenerate projection parameters (e.g. zero fov, zero aspect)
|
|
@@ -3236,6 +3370,9 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
3236
3370
|
MorphWeights,
|
|
3237
3371
|
SpriteRegionOverride,
|
|
3238
3372
|
SpriteInstances,
|
|
3373
|
+
Points,
|
|
3374
|
+
Lines,
|
|
3375
|
+
SortKey,
|
|
3239
3376
|
],
|
|
3240
3377
|
})
|
|
3241
3378
|
.unwrap();
|
|
@@ -3288,6 +3425,11 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
3288
3425
|
// - 'sprite-instances-count-mismatch'
|
|
3289
3426
|
// (transforms.length / 16 !== regions.length / 4) — stride pair desync.
|
|
3290
3427
|
const hasSpriteInstances = row.has(SpriteInstances);
|
|
3428
|
+
const points = row.get(Points);
|
|
3429
|
+
const lines = row.get(Lines);
|
|
3430
|
+
const sortKey = row.get(SortKey)?.value;
|
|
3431
|
+
const pointsLinesComponent =
|
|
3432
|
+
points !== undefined ? 'Points' : lines !== undefined ? 'Lines' : undefined;
|
|
3291
3433
|
const isRenderable = hasTransform && hasMeshFilter;
|
|
3292
3434
|
|
|
3293
3435
|
// feat-20260601 D-3: the resolved world transform is read per-entity from
|
|
@@ -4342,6 +4484,38 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
4342
4484
|
}
|
|
4343
4485
|
}
|
|
4344
4486
|
|
|
4487
|
+
const pointsLinesStyle: PointsLinesStyle | undefined =
|
|
4488
|
+
points !== undefined
|
|
4489
|
+
? (() => {
|
|
4490
|
+
const shape = pointShapeFromU32(points.shape);
|
|
4491
|
+
return shape === undefined
|
|
4492
|
+
? undefined
|
|
4493
|
+
: { kind: 'points' as const, sizePx: points.sizePx, shape };
|
|
4494
|
+
})()
|
|
4495
|
+
: lines === undefined
|
|
4496
|
+
? undefined
|
|
4497
|
+
: { kind: 'lines' as const, widthPx: lines.widthPx };
|
|
4498
|
+
const cullingLocalAabb = expandPointsLinesBounds(localAabb ?? [], pointsLinesStyle);
|
|
4499
|
+
const pointsLines =
|
|
4500
|
+
pointsLinesComponent === undefined
|
|
4501
|
+
? undefined
|
|
4502
|
+
: ({
|
|
4503
|
+
worldId: 0,
|
|
4504
|
+
entityKey: entity,
|
|
4505
|
+
component: pointsLinesComponent,
|
|
4506
|
+
meshHandle: assetHandleRaw,
|
|
4507
|
+
meshGeneration: assets?.catalogEpoch ?? 0,
|
|
4508
|
+
materialHandle: handleRaw,
|
|
4509
|
+
materialGeneration: assets?.catalogEpoch ?? 0,
|
|
4510
|
+
style: pointsLinesStyle,
|
|
4511
|
+
layer: layerVal,
|
|
4512
|
+
sortKey,
|
|
4513
|
+
visible: true,
|
|
4514
|
+
sourceBounds: cullingLocalAabb,
|
|
4515
|
+
viewport: { width: 0, height: 0, dpr: 1 },
|
|
4516
|
+
projection: identityProjection(),
|
|
4517
|
+
} satisfies PointsLinesRetainedSnapshot);
|
|
4518
|
+
|
|
4345
4519
|
let nonIndexedFirst = 0;
|
|
4346
4520
|
const gpuDrivenDraws = gpuDrivenSubmeshes.flatMap((submesh) => {
|
|
4347
4521
|
const drawMaterial = materialsArr[submesh.materialSlot] ?? materialSnap;
|
|
@@ -4364,7 +4538,7 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
4364
4538
|
const baseRenderable: RenderableSnapshot = {
|
|
4365
4539
|
assetHandle: Math.round(fAssetHandle ?? 0),
|
|
4366
4540
|
transform: transformSnap,
|
|
4367
|
-
...(localAabb !== undefined ? { localAabb } : {}),
|
|
4541
|
+
...(localAabb !== undefined ? { localAabb: cullingLocalAabb } : {}),
|
|
4368
4542
|
material: materialSnap,
|
|
4369
4543
|
materials: materialsArr,
|
|
4370
4544
|
materialBindingSources,
|
|
@@ -4375,6 +4549,7 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
4375
4549
|
...(skinSlice !== undefined ? { skin: skinSlice } : {}),
|
|
4376
4550
|
...(morph !== undefined ? { morph } : {}),
|
|
4377
4551
|
...(spriteInstancesSnap !== undefined ? { spriteInstances: spriteInstancesSnap } : {}),
|
|
4552
|
+
...(pointsLines !== undefined ? { pointsLines } : {}),
|
|
4378
4553
|
};
|
|
4379
4554
|
|
|
4380
4555
|
// feat-20260528-frustum-culling M3 / w10: frustum culling check.
|
|
@@ -4388,7 +4563,7 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
4388
4563
|
// directly (no compose) -- same source the record stage feeds
|
|
4389
4564
|
// the mesh SSBO, so cull stays same-source with render (AC-05).
|
|
4390
4565
|
const worldAabb = box3.create();
|
|
4391
|
-
box3.transformBox3(worldAabb,
|
|
4566
|
+
box3.transformBox3(worldAabb, cullingLocalAabb, transformSnap.world);
|
|
4392
4567
|
|
|
4393
4568
|
// Test against all cameras. Entity is visible if one camera
|
|
4394
4569
|
// frustum intersects the world-space AABB (or planes are empty
|
|
@@ -4487,18 +4662,21 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
4487
4662
|
// recordFrame's `activeCameras[0]` selection.
|
|
4488
4663
|
const tonemapCamera = cameras[0];
|
|
4489
4664
|
if (tonemapCamera !== undefined) {
|
|
4490
|
-
postProcessParams.set(
|
|
4665
|
+
postProcessParams.set(STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, tonemapParams(tonemapCamera));
|
|
4491
4666
|
}
|
|
4492
4667
|
|
|
4493
4668
|
return {
|
|
4494
4669
|
cameras,
|
|
4495
4670
|
lights,
|
|
4671
|
+
environment,
|
|
4672
|
+
environmentReady: true,
|
|
4496
4673
|
renderables,
|
|
4497
4674
|
dispatch,
|
|
4498
4675
|
skylight,
|
|
4499
4676
|
skylightCount,
|
|
4500
4677
|
skybox,
|
|
4501
4678
|
skyboxCount,
|
|
4679
|
+
fog,
|
|
4502
4680
|
frustumStats: { culled: frustumCulled, total: frustumTotal },
|
|
4503
4681
|
visibilityStats: { explicitlyHidden: explicitlyHidden.size },
|
|
4504
4682
|
postProcessParams,
|
|
@@ -4520,3 +4698,12 @@ export function defaultMaterialSnapshot(materialHandle = 0): MaterialSnapshot {
|
|
|
4520
4698
|
materialHandle,
|
|
4521
4699
|
};
|
|
4522
4700
|
}
|
|
4701
|
+
|
|
4702
|
+
function identityProjection(): Float32Array {
|
|
4703
|
+
const projection = new Float32Array(16);
|
|
4704
|
+
projection[0] = 1;
|
|
4705
|
+
projection[5] = 1;
|
|
4706
|
+
projection[10] = 1;
|
|
4707
|
+
projection[15] = 1;
|
|
4708
|
+
return projection;
|
|
4709
|
+
}
|