@forgeax/engine-render 0.1.21 → 0.1.23
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 +150 -29
- package/dist/assembly/backend-contract.d.ts +13 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/device-feature-admission.d.ts.map +1 -1
- package/dist/assembly/factory.d.ts +14 -6
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +10 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/authoring.mjs +1 -1
- package/dist/{chunk-PCHBPYML.mjs → chunk-4L3P6DT5.mjs} +2 -2
- package/dist/chunk-4L3P6DT5.mjs.map +1 -0
- package/dist/{chunk-VFPLTKCU.mjs → chunk-4NPUASZR.mjs} +15 -4
- package/dist/chunk-4NPUASZR.mjs.map +1 -0
- package/dist/chunk-DIYW3M5D.mjs +5085 -0
- package/dist/chunk-DIYW3M5D.mjs.map +1 -0
- package/dist/chunk-FBC4R44J.mjs +1003 -0
- package/dist/chunk-FBC4R44J.mjs.map +1 -0
- package/dist/{chunk-FS2KNUQH.mjs → chunk-FF7K3FSO.mjs} +253 -489
- package/dist/chunk-FF7K3FSO.mjs.map +1 -0
- package/dist/chunk-HZUPSYW7.mjs +1104 -0
- package/dist/chunk-HZUPSYW7.mjs.map +1 -0
- package/dist/{chunk-6OPXDQ2E.mjs → chunk-QODA5UKU.mjs} +33 -294
- package/dist/chunk-QODA5UKU.mjs.map +1 -0
- package/dist/chunk-YALPS44A.mjs +296 -0
- package/dist/chunk-YALPS44A.mjs.map +1 -0
- package/dist/{chunk-5YADUCA7.mjs → chunk-ZUWKAZ2I.mjs} +585 -991
- package/dist/chunk-ZUWKAZ2I.mjs.map +1 -0
- package/dist/cluster-binner.d.ts +5 -0
- package/dist/cluster-binner.d.ts.map +1 -1
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts +4 -0
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/light-probe.d.ts +9 -0
- package/dist/components/light-probe.d.ts.map +1 -0
- package/dist/components/rect-area-light.d.ts +12 -0
- package/dist/components/rect-area-light.d.ts.map +1 -0
- package/dist/components/scene-instance.d.ts +4 -0
- package/dist/components/scene-instance.d.ts.map +1 -1
- package/dist/components/spot-light.d.ts +3 -0
- package/dist/components/spot-light.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +10437 -10044
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +8 -1
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/device/lifecycle-transaction.d.ts +2 -0
- package/dist/device/lifecycle-transaction.d.ts.map +1 -0
- package/dist/environment/lifecycle.d.ts.map +1 -1
- package/dist/errors/gpu-driven.d.ts +26 -0
- package/dist/errors/gpu-driven.d.ts.map +1 -0
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/recover.d.ts +9 -1
- package/dist/errors/recover.d.ts.map +1 -1
- package/dist/errors/render.d.ts +26 -1
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/gpu-driven.d.ts +50 -0
- package/dist/extract/gpu-driven.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +34 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/prepared-draw.d.ts +63 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +98 -2
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/view-gpu.d.ts +64 -1
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene-schema.d.ts +14 -0
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +8 -1
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-usage.d.ts +0 -1
- package/dist/gpu-usage.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +3 -3
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +90 -5
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +163 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/internal.d.ts +9 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +23 -2
- package/dist/internal.mjs.map +1 -1
- package/dist/light-buffer-layout.d.ts +58 -149
- package/dist/light-buffer-layout.d.ts.map +1 -1
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +26 -12
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/graph.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/light-frame.d.ts +3 -3
- package/dist/pipeline/standard-lighting/light-frame.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/topology.d.ts +1 -1
- package/dist/pipeline/standard-lighting/topology.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/transport.d.ts.map +1 -1
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +2 -0
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +1 -1
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/prepare/extended-lighting/ltc-resources.d.ts +31 -0
- package/dist/prepare/extended-lighting/ltc-resources.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/resources.d.ts +72 -0
- package/dist/prepare/extended-lighting/resources.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/spot-modifiers.d.ts +42 -0
- package/dist/prepare/extended-lighting/spot-modifiers.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/state.d.ts +24 -0
- package/dist/prepare/extended-lighting/state.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +8 -6
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +50 -10
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame.d.ts +7 -3
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/gpu-timing.d.ts +19 -7
- package/dist/record/gpu-timing.d.ts.map +1 -1
- package/dist/record/helpers.d.ts +0 -20
- package/dist/record/helpers.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +6 -1
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +3 -1
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +57 -6
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +49 -2
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +1 -2
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/reflection/inspection.d.ts +10 -0
- package/dist/reflection/inspection.d.ts.map +1 -0
- package/dist/reflection/projection.d.ts +49 -0
- package/dist/reflection/projection.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts +60 -0
- package/dist/reflection/record-owner.d.ts.map +1 -0
- package/dist/render-contract.d.ts +14 -8
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +7 -0
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +104 -16
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +12 -1
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/probe-blend-record.d.ts +22 -0
- package/dist/scene/probe-blend-record.d.ts.map +1 -0
- package/dist/scene/probe-blend.d.ts +142 -0
- package/dist/scene/probe-blend.d.ts.map +1 -0
- package/dist/scene/render-scene-types.d.ts +0 -6
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +103 -9
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/visibility/bounds.d.ts +20 -0
- package/dist/scene/visibility/bounds.d.ts.map +1 -0
- package/dist/scene/visibility/budget.d.ts +16 -0
- package/dist/scene/visibility/budget.d.ts.map +1 -0
- package/dist/scene/visibility/facet.d.ts +73 -0
- package/dist/scene/visibility/facet.d.ts.map +1 -0
- package/dist/scene/visibility/gpu-frame-timing.d.ts +41 -0
- package/dist/scene/visibility/gpu-frame-timing.d.ts.map +1 -0
- package/dist/scene/visibility/gpu-lod.d.ts +46 -0
- package/dist/scene/visibility/gpu-lod.d.ts.map +1 -0
- package/dist/scene/visibility/inspection.d.ts +132 -0
- package/dist/scene/visibility/inspection.d.ts.map +1 -0
- package/dist/scene/visibility/lod-selector.d.ts +25 -0
- package/dist/scene/visibility/lod-selector.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-confidence.d.ts +81 -0
- package/dist/scene/visibility/occlusion-confidence.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-pass.d.ts +57 -0
- package/dist/scene/visibility/occlusion-pass.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-query-pool.d.ts +57 -0
- package/dist/scene/visibility/occlusion-query-pool.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-runtime.d.ts +96 -0
- package/dist/scene/visibility/occlusion-runtime.d.ts.map +1 -0
- package/dist/scene/visibility/types.d.ts +34 -0
- package/dist/scene/visibility/types.d.ts.map +1 -0
- package/dist/ssr/admission.d.ts +122 -0
- package/dist/ssr/admission.d.ts.map +1 -0
- package/dist/ssr/composition.d.ts +32 -0
- package/dist/ssr/composition.d.ts.map +1 -0
- package/dist/ssr/errors.d.ts +39 -0
- package/dist/ssr/errors.d.ts.map +1 -0
- package/dist/ssr/identity.d.ts +13 -0
- package/dist/ssr/identity.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +1 -1
- package/dist/temporal/frame-coordinator.d.ts +13 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/frame.d.ts +2 -0
- package/dist/temporal/frame.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -5
- package/dist/temporal/view.d.ts +7 -0
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/tilemap-chunk-extract-system.d.ts +1 -1
- package/dist/typed-render-graph-primitives.d.ts +4 -0
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/volume/passes.d.ts +8 -4
- package/dist/volume/passes.d.ts.map +1 -1
- package/package.json +20 -20
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +5 -0
- package/src/__tests__/detached-inspection.integration.test.ts +6 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +13 -1
- package/src/__tests__/direct-light-snapshot.unit.test.ts +59 -3
- package/src/__tests__/environment-generation.integration.test.ts +16 -0
- package/src/__tests__/evidence-identity.ts +13 -0
- package/src/__tests__/evidence-identity.unit.test.ts +24 -0
- package/src/__tests__/extended-lighting-recovery.browser.test.ts +14 -0
- package/src/__tests__/extended-lighting-recovery.dawn.test.ts +14 -0
- package/src/__tests__/extended-lighting-recovery.integration.test.ts +81 -0
- package/src/__tests__/extended-lighting-resources.unit.test.ts +51 -0
- package/src/__tests__/extended-lighting-zero-feature.integration.test.ts +52 -0
- package/src/__tests__/factory-contract.integration.test.ts +33 -0
- package/src/__tests__/frame-observation.contract.test.ts +15 -0
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +146 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +1 -0
- package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +1 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +572 -9
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +66 -2
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +26 -1
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +89 -2
- package/src/__tests__/gpu-driven-view.browser.test.ts +3 -3
- package/src/__tests__/gpu-driven-view.dawn.test.ts +3 -3
- package/src/__tests__/gpu-driven-view.unit.test.ts +50 -0
- package/src/__tests__/gpu-lod-evidence.ts +188 -0
- package/src/__tests__/gpu-lod-fallback.integration.test.ts +10 -0
- package/src/__tests__/gpu-lod-indirect.integration.test.ts +40 -0
- package/src/__tests__/gpu-lod-parity.dawn.test.ts +29 -0
- package/src/__tests__/gpu-lod-readiness.integration.test.ts +52 -0
- package/src/__tests__/gpu-lod-schema.unit.test.ts +66 -0
- package/src/__tests__/gpu-lod-selector.unit.test.ts +28 -0
- package/src/__tests__/gpu-lod-silhouette.browser.test.ts +13 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +66 -1
- package/src/__tests__/gpu-scene.dawn.test.ts +8 -1
- package/src/__tests__/gpu-scene.unit.test.ts +49 -3
- package/src/__tests__/light-buffer-layout.unit.test.ts +113 -3
- package/src/__tests__/light-inspection.unit.test.ts +55 -0
- package/src/__tests__/light-resource-error.unit.test.ts +43 -0
- package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +109 -0
- package/src/__tests__/lod-bounds.unit.test.ts +42 -0
- package/src/__tests__/lod-cpu-lane.integration.test.ts +55 -0
- package/src/__tests__/lod-cpu-no-change.perf.test.ts +19 -0
- package/src/__tests__/lod-gpu-frame-timing.unit.test.ts +49 -0
- package/src/__tests__/lod-multi-view.integration.test.ts +63 -0
- package/src/__tests__/lod-occlusion-device-loss.integration.test.ts +27 -0
- package/src/__tests__/lod-occlusion-final-decision.integration.test.ts +47 -0
- package/src/__tests__/lod-occlusion-inspection.integration.test.ts +217 -0
- package/src/__tests__/lod-occlusion-inspection.schema.test-d.ts +14 -0
- package/src/__tests__/lod-occlusion-inspection.unit.test.ts +72 -0
- package/src/__tests__/lod-occlusion-visual-evidence.ts +91 -0
- package/src/__tests__/lod-occlusion.browser.test.ts +15 -0
- package/src/__tests__/lod-occlusion.dawn.test.ts +20 -0
- package/src/__tests__/lod-selector.profile.test.ts +35 -0
- package/src/__tests__/lod-selector.unit.test.ts +68 -0
- package/src/__tests__/lod-visibility-identity.unit.test.ts +198 -0
- package/src/__tests__/lod-visibility-lifecycle.integration.test.ts +132 -0
- package/src/__tests__/ltc-resources.unit.test.ts +32 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +17 -0
- package/src/__tests__/occlusion-confidence.unit.test.ts +168 -0
- package/src/__tests__/occlusion-invalidation.integration.test.ts +37 -0
- package/src/__tests__/occlusion-pass-routing.unit.test.ts +16 -0
- package/src/__tests__/occlusion-pass.dawn.test.ts +20 -0
- package/src/__tests__/occlusion-pass.integration.test.ts +43 -0
- package/src/__tests__/occlusion-pass.rhi-null.test.ts +22 -0
- package/src/__tests__/occlusion-query-pool.rhi-null.test.ts +21 -0
- package/src/__tests__/occlusion-query-pool.unit.test.ts +95 -0
- package/src/__tests__/occlusion-query-ticket.integration.test.ts +47 -0
- package/src/__tests__/occlusion-query.dawn.test.ts +16 -0
- package/src/__tests__/occlusion-query.evidence.ts +178 -0
- package/src/__tests__/occlusion-query.rhi-null.test.ts +31 -0
- package/src/__tests__/occlusion-runtime.unit.test.ts +120 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +196 -0
- package/src/__tests__/probe-bindings.unit.test.ts +200 -0
- package/src/__tests__/probe-blend-numeric.unit.test.ts +67 -0
- package/src/__tests__/probe-blend-oracle.unit.test.ts +136 -0
- package/src/__tests__/probe-capacity.integration.test.ts +97 -0
- package/src/__tests__/probe-recovery.integration.test.ts +104 -0
- package/src/__tests__/probe-scene-dirty.integration.test.ts +211 -0
- package/src/__tests__/profiler-phase-catalog.test.ts +4 -1
- package/src/__tests__/profiler-phase-token.test.ts +1 -0
- package/src/__tests__/rect-area-boundary.unit.test.ts +24 -0
- package/src/__tests__/reflection-fallback-graph.unit.test.ts +67 -0
- package/src/__tests__/reflection-fallback-inspection.unit.test.ts +77 -0
- package/src/__tests__/reflection-fallback-lifecycle.integration.test.ts +21 -0
- package/src/__tests__/reflection-fallback-projection.unit.test.ts +90 -0
- package/src/__tests__/reflection-fallback-source.unit.test.ts +32 -0
- package/src/__tests__/reflection-probe-owner-placement.unit.test.ts +39 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +120 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +1 -0
- package/src/__tests__/render-feature-docs.unit.test.ts +12 -7
- package/src/__tests__/render-graph-fallback.integration.test.ts +24 -0
- package/src/__tests__/render-perf/extended-lighting.bench.test.ts +66 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +447 -18
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +76 -0
- package/src/__tests__/skin-motion-regression.unit.test.ts +22 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +2 -2
- package/src/__tests__/spot-modifier-projection.unit.test.ts +70 -0
- package/src/__tests__/ssr-admission-matrix.integration.test.ts +206 -0
- package/src/__tests__/ssr-composition.unit.test.ts +46 -0
- package/src/__tests__/ssr-fallback-zero-work.bench.test.ts +94 -0
- package/src/__tests__/ssr-recovery-errors.unit.test.ts +58 -0
- package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +67 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +7 -0
- package/src/__tests__/standard-lighting-inspection.integration.test.ts +1 -1
- package/src/__tests__/standard-lighting-write.unit.test.ts +66 -2
- package/src/__tests__/temporal-fallback-generation.integration.test.ts +16 -0
- package/src/__tests__/temporal-view.unit.test.ts +3 -3
- package/src/__tests__/transmission-prewarm.unit.test.ts +69 -0
- package/src/__tests__/visibility-budget.integration.test.ts +140 -0
- package/src/__tests__/visibility-budget.unit.test.ts +70 -0
- package/src/__tests__/visibility-extract.integration.test.ts +11 -6
- package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +6 -3
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +31 -28
- package/src/assembly/backend-contract.ts +13 -0
- package/src/assembly/device-feature-admission.ts +16 -9
- package/src/assembly/factory.ts +547 -93
- package/src/assembly/host-contract.ts +10 -0
- package/src/cluster-binner.ts +31 -0
- package/src/components/__tests__/lighting-authoring.unit.test.ts +39 -0
- package/src/components/__tests__/rect-area-light.unit.test.ts +33 -0
- package/src/components/index.ts +3 -0
- package/src/components/light-helpers.ts +52 -1
- package/src/components/light-probe.ts +13 -0
- package/src/components/rect-area-light.ts +15 -0
- package/src/components/scene-instance.ts +6 -0
- package/src/components/spot-light.ts +3 -0
- package/src/device/__tests__/extended-lighting-recovery.unit.test.ts +24 -0
- package/src/device/gpu-residency.ts +140 -9
- package/src/device/lifecycle-transaction.ts +12 -0
- package/src/environment/lifecycle.ts +8 -1
- package/src/errors/gpu-driven.ts +92 -0
- package/src/errors/index.ts +1 -0
- package/src/errors/recover.ts +32 -0
- package/src/errors/render.ts +55 -1
- package/src/extract/camera.ts +3 -3
- package/src/extract/gpu-driven.ts +108 -0
- package/src/extract/visibility.ts +0 -23
- package/src/gpu-driven/batch-topology.ts +206 -28
- package/src/gpu-driven/prepared-draw.ts +208 -0
- package/src/gpu-driven/production-raster.ts +953 -41
- package/src/gpu-driven/view-gpu.ts +411 -29
- package/src/gpu-scene-schema.ts +13 -0
- package/src/gpu-scene.ts +134 -65
- package/src/gpu-usage.ts +0 -1
- package/src/hdrp-buffers.ts +6 -6
- package/src/index.ts +74 -0
- package/src/inspection-types.ts +220 -1
- package/src/internal.ts +38 -0
- package/src/light-buffer-layout.ts +154 -324
- package/src/materials.ts +16 -2
- package/src/pbr-pipeline.ts +151 -45
- package/src/pipeline/standard-forward-lane.ts +47 -0
- package/src/pipeline/standard-lighting/graph.ts +2 -1
- package/src/pipeline/standard-lighting/light-frame.ts +3 -2
- package/src/pipeline/standard-lighting/topology.ts +1 -1
- package/src/pipeline/standard-lighting/transport.ts +2 -1
- package/src/pipeline/standard-pipeline.ts +2 -0
- package/src/pipeline-builder.ts +5 -2
- package/src/pipeline-spec.ts +12 -1
- package/src/plugin.ts +4 -0
- package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +56 -0
- package/src/prepare/extended-lighting/ltc-resources.ts +136 -0
- package/src/prepare/extended-lighting/resources.ts +389 -0
- package/src/prepare/extended-lighting/spot-modifiers.ts +194 -0
- package/src/prepare/extended-lighting/state.ts +92 -0
- package/src/record/__tests__/gpu-timing.unit.test.ts +177 -0
- package/src/record/__tests__/temporal-payload.unit.test.ts +23 -1
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +20 -1
- package/src/record/frame-lighting.ts +252 -53
- package/src/record/frame-snapshot.ts +57 -12
- package/src/record/frame.ts +410 -93
- package/src/record/gpu-timing.ts +108 -44
- package/src/record/helpers.ts +0 -58
- package/src/record/main-pass-geometry.ts +204 -39
- package/src/record/main-pass-material.ts +8 -1
- package/src/record/main-pass-sprite-draws.ts +52 -85
- package/src/record/mesh-ssbo.ts +47 -36
- package/src/record/render-context.ts +65 -4
- package/src/record/shadow-pass.ts +66 -40
- package/src/record/typed-frame-graph.ts +225 -83
- package/src/record/view-ubo.ts +14 -24
- package/src/reflection/inspection.ts +67 -0
- package/src/reflection/projection.ts +196 -1
- package/src/reflection/record-owner.ts +1283 -0
- package/src/render-contract.ts +17 -5
- package/src/render-pipeline.ts +5 -0
- package/src/render-system-extract.ts +493 -134
- package/src/render-system.ts +811 -615
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +36 -0
- package/src/scene/probe-blend-record.ts +54 -0
- package/src/scene/probe-blend.ts +813 -0
- package/src/scene/render-scene-types.ts +0 -7
- package/src/scene/render-scene.ts +848 -183
- package/src/scene/visibility/bounds.ts +57 -0
- package/src/scene/visibility/budget.ts +40 -0
- package/src/scene/visibility/facet.ts +400 -0
- package/src/scene/visibility/gpu-frame-timing.ts +101 -0
- package/src/scene/visibility/gpu-lod.ts +119 -0
- package/src/scene/visibility/inspection.ts +313 -0
- package/src/scene/visibility/lod-selector.ts +84 -0
- package/src/scene/visibility/occlusion-confidence.ts +478 -0
- package/src/scene/visibility/occlusion-pass.ts +165 -0
- package/src/scene/visibility/occlusion-query-pool.ts +178 -0
- package/src/scene/visibility/occlusion-runtime.ts +672 -0
- package/src/scene/visibility/types.ts +50 -0
- package/src/ssr/admission.ts +451 -0
- package/src/ssr/composition.ts +73 -0
- package/src/ssr/errors.ts +76 -0
- package/src/ssr/identity.ts +12 -0
- package/src/systems/skin-palette-allocator.ts +1 -1
- package/src/temporal/frame-coordinator.ts +26 -0
- package/src/temporal/frame.ts +14 -1
- package/src/temporal/view.ts +11 -0
- package/src/tilemap-chunk-extract-system.ts +4 -4
- package/src/typed-render-graph-primitives.ts +48 -0
- package/src/volume/passes.ts +46 -49
- package/dist/.tsbuildinfo +0 -1
- package/dist/chunk-5YADUCA7.mjs.map +0 -1
- package/dist/chunk-6OPXDQ2E.mjs.map +0 -1
- package/dist/chunk-BXBQQKFQ.mjs +0 -67
- package/dist/chunk-BXBQQKFQ.mjs.map +0 -1
- package/dist/chunk-FS2KNUQH.mjs.map +0 -1
- package/dist/chunk-PCHBPYML.mjs.map +0 -1
- package/dist/chunk-VFPLTKCU.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -8,6 +8,30 @@
|
|
|
8
8
|
|
|
9
9
|
## Public frame contract
|
|
10
10
|
|
|
11
|
+
## 灯光最短入口
|
|
12
|
+
|
|
13
|
+
三条最短入口:
|
|
14
|
+
|
|
15
|
+
1. `RectAreaLight`:在现有 `Transform` 上声明单面矩形发光体,尺寸由 `width` 与 `height` 持有。
|
|
16
|
+
2. `SpotLight`:用 `iesProfile` 和 `cookie` 绑定现有资产,用 `rollDeg` 共享方位角;缺席 handle 是乘法单位元。
|
|
17
|
+
3. `LightProbe`:声明 27 个 `irradiance` 值和唯一的 `radius`,位置与朝向仍来自 `Transform`。
|
|
18
|
+
|
|
19
|
+
这些是 authored/render 输入,不是 GPU slot、LTC、probe asset 或第二个 Renderer API。尺寸、半径和 `rollDeg` 在场景序列化中保留;资产 GUID 通过 Pack/Catalog 的 `refs` 往返,不能从 URL 或数组位置推断身份。
|
|
20
|
+
|
|
21
|
+
### Extended-lighting consumer route
|
|
22
|
+
|
|
23
|
+
The three smallest public examples are `RectAreaLight(width, height)`,
|
|
24
|
+
`SpotLight(iesProfile, cookie, rollDeg)`, and `LightProbe(irradiance, radius)`.
|
|
25
|
+
Probe diffuse uses `A={admitted && d<r}`, `c=1-(d/r)^2`, scaled finite `qhat`,
|
|
26
|
+
`alpha=q/Q`, `C=1-prod(1-c)`, and `S=1-C`; Sky is only
|
|
27
|
+
`S*E_sky(N)`. It never enters probe admission, `Q`, `alpha`, specular, or
|
|
28
|
+
`DirectLightSlot`. `recordByteLength=160` is the per-object ABI receipt.
|
|
29
|
+
|
|
30
|
+
Recovery is inspected as data: read `code`, `expected`, `hint`, and typed
|
|
31
|
+
`detail`; keep the current LKG until the replacement generation is accepted.
|
|
32
|
+
GPU, Browser, and Dawn evidence that cannot execute is `not-run` or
|
|
33
|
+
`unavailable`, never a verified structural substitute.
|
|
34
|
+
|
|
11
35
|
The public frame vocabulary is intentionally small. `Camera` is the authoring
|
|
12
36
|
owner for tone, antialiasing, bloom, and `historyVersion`; `Atmosphere` and
|
|
13
37
|
`Fog` are independent ECS components. The renderer extracts these facts into
|
|
@@ -25,10 +49,30 @@ typed `detail`, repair that owner, and submit the same request again. Public
|
|
|
25
49
|
consumers do not parse `message` and never receive graph nodes, devices,
|
|
26
50
|
history textures, or prepared handles.
|
|
27
51
|
|
|
28
|
-
The current-source manifest and schema identify `source`, `build`, `backend`,
|
|
29
|
-
`runner`, and `frameIdentity`. Structural graph receipts, Browser/Dawn
|
|
30
|
-
readback or PNG evidence, and historical oracle data are separate evidence
|
|
31
|
-
classes. An unavailable backend is reported as unavailable.
|
|
52
|
+
The current-source manifest and schema identify `source`, `build`, `backend`,
|
|
53
|
+
`runner`, and `frameIdentity`. Structural graph receipts, Browser/Dawn
|
|
54
|
+
readback or PNG evidence, and historical oracle data are separate evidence
|
|
55
|
+
classes. An unavailable backend is reported as unavailable.
|
|
56
|
+
|
|
57
|
+
## RenderFeature: the producer seam (first-read index)
|
|
58
|
+
|
|
59
|
+
### Material contract projection
|
|
60
|
+
|
|
61
|
+
Render consumes only the Pack-owned material publication projection. Its
|
|
62
|
+
inputs are runtime bool/value data, composed module slots, and the closed
|
|
63
|
+
compiler context; render never authors, cooks, writes DDC, or selects a
|
|
64
|
+
fallback material. The projection preserves `layoutIdentity`,
|
|
65
|
+
`programIdentity`, `cookIdentity`, and `materialPublicationIdentity` so a
|
|
66
|
+
stale draw can be traced to the first producer divergence.
|
|
67
|
+
|
|
68
|
+
The public route is one `RenderFeature<FrameData>` through the Standard
|
|
69
|
+
Pipeline and the active RenderGraph pass. In the examples below, `type FrameData`
|
|
70
|
+
is the producer-owned extracted value. A feature extracts one frame value,
|
|
71
|
+
then its mandatory `plan(data, context)` declares named resources and passes;
|
|
72
|
+
the host derives graph access, preparation, recording, and recovery from that
|
|
73
|
+
plan. Register it at construction with
|
|
74
|
+
`createRenderer(canvas, { features: [feature] })`. A feature never receives a
|
|
75
|
+
device, queue, encoder, staging builder, or submit callback.
|
|
32
76
|
|
|
33
77
|
### Directional shadow quality: author → inspect → recover
|
|
34
78
|
|
|
@@ -231,10 +275,74 @@ if (!frame.ok) throw frame.error;
|
|
|
231
275
|
const observation = await renderer.observe(frame.value, { include: ['timings'] });
|
|
232
276
|
```
|
|
233
277
|
|
|
234
|
-
The Standard pipeline
|
|
235
|
-
PBR, IBL, SSAO, bloom, tone, antialiasing, sky, material, VFX, and debug feature
|
|
236
|
-
the same graph and submit boundary. CPU and WebGL2
|
|
237
|
-
not
|
|
278
|
+
The Standard pipeline uses one Cluster transport for every local light on storage-capable devices
|
|
279
|
+
and keeps shadow, PBR, IBL, SSAO, bloom, tone, antialiasing, sky, material, VFX, and debug feature
|
|
280
|
+
ownership inside the same graph and submit boundary. CPU and WebGL2 remain capability lanes for the
|
|
281
|
+
Cluster membership producer or for mesh/instance storage fallback; they do not reintroduce a
|
|
282
|
+
PointLight/SpotLight buffer or a fixed four-light ABI.
|
|
283
|
+
## SSR M0 admission: inspect owners, then decide
|
|
284
|
+
|
|
285
|
+
> [!IMPORTANT]
|
|
286
|
+
> SSR M0 is a consumer-only admission boundary. It reads detached producer,
|
|
287
|
+
> r32float format, and temporal receipts with one four-field integration
|
|
288
|
+
> identity. Any missing, stale, structural-only, or mismatched receipt stays
|
|
289
|
+
> `fallback-only` and emits zero SSR work; this section does not describe SSR
|
|
290
|
+
> capture, ray tracing, Hi-Z, temporal resolve, composition, or history.
|
|
291
|
+
|
|
292
|
+
```mermaid
|
|
293
|
+
flowchart LR
|
|
294
|
+
P["producer detached receipt"] --> A["admitSsrM0"]
|
|
295
|
+
F["format stage receipt"] --> A
|
|
296
|
+
T["temporal submit receipt"] --> A
|
|
297
|
+
A -->|"all identity and verdict checks pass"| E["admitted: parent M1 may unlock"]
|
|
298
|
+
A -->|"missing, stale, unavailable, or mismatched"| B["fallback-only: zero work"]
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
The inspection route is deliberately progressive:
|
|
302
|
+
|
|
303
|
+
| Layer | Read first | Owner action on failure |
|
|
304
|
+
|:--|:--|:--|
|
|
305
|
+
| Status | `status`, `failure.code`, `failure.expected` | branch on the closed failure code |
|
|
306
|
+
| Identity | `sourceHead`, `sourceTree`, `lockSha256`, `buildSha256` | rebuild the owner receipt for the current identity |
|
|
307
|
+
| Generation | producer `generation`, format `deviceGeneration`, temporal `generation` | discard stale completion and reinspect |
|
|
308
|
+
| Recovery | `failure.hint`, typed `detail.owner`, `detail.action` | use LKG/Skylight/neutral, recapture, rebuild, or retry through that owner |
|
|
309
|
+
| Work | attachment/pass/binding/resource/history/temporal counters | require exact zero on every blocked path |
|
|
310
|
+
|
|
311
|
+
```ts
|
|
312
|
+
const admission = admitSsrM0({ requested, identity, reflectionFallback, format, temporal });
|
|
313
|
+
if (admission.status === 'fallback-only') {
|
|
314
|
+
// Read admission.failure.code and route recovery to its owner.
|
|
315
|
+
console.log(admission.work); // every SSR counter is zero
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
Use `inspect -> owner recovery -> matching submit -> reinspect` as the complete
|
|
320
|
+
AI route. No returned field is a device, graph node, texture, buffer, encoder,
|
|
321
|
+
or other live handle. A stable generation keeps `resetCount`, `rebuildCount`,
|
|
322
|
+
and additional format probe work at zero; a changed generation must be
|
|
323
|
+
reinspected before admission can be considered again.
|
|
324
|
+
|
|
325
|
+
`inspect()` is a synchronous snapshot. The first snapshot after binding may show
|
|
326
|
+
an absent format or temporal receipt while the owner probe and first submit are
|
|
327
|
+
still in flight; it is not a `pending` verdict. Run the ordinary owner frame,
|
|
328
|
+
await `FrameReceipt.completed`, then inspect again before routing recovery.
|
|
329
|
+
|
|
330
|
+
There are two action projections. `admission.failure.detail.action` is the coarse
|
|
331
|
+
M0 gate instruction (`retry` for demand/readiness and `rebuild` for a missing or
|
|
332
|
+
mismatched receipt). `reflectionFallbackInspection.recoveryAction` is the
|
|
333
|
+
producer's more specific source/recapture instruction. Neither is a second SSR
|
|
334
|
+
API; use the existing owner operation shown here, then submit and inspect again:
|
|
335
|
+
|
|
336
|
+
| Action field | Owner operation | Next observation |
|
|
337
|
+
|:--|:--|:--|
|
|
338
|
+
| `reflectionFallbackInspection.recoveryAction = use-LKG` | Keep the compatible probe row and draw the next frame | Read the committed row and matching temporal receipt |
|
|
339
|
+
| `reflectionFallbackInspection.recoveryAction = use-Skylight` / `use-neutral` | Change the World-owned probe/`Skylight` source, then draw | Confirm selected source and committed generation |
|
|
340
|
+
| `reflectionFallbackInspection.recoveryAction = recapture` / `rebuild` / `retry` | Draw again so the producer/RHI owner retries pending work | Await completion and inspect the owner receipt/failure |
|
|
341
|
+
| `admission.failure.detail.action = retry` / `rebuild` | Retry the consumer frame, or rebuild the named owner receipt | Reinspect admission and all three receipt generations |
|
|
342
|
+
| device-loss recovery | `await renderer.recover()` before the next draw | Confirm the replacement `deviceGeneration`, then re-probe |
|
|
343
|
+
|
|
344
|
+
SSR never invokes these operations or mutates producer/device state; this table
|
|
345
|
+
maps the typed action to the existing public World and Renderer seams.
|
|
238
346
|
|
|
239
347
|
## Target and probe lifecycle index
|
|
240
348
|
|
|
@@ -250,6 +358,12 @@ Use `inspect()` for bounded target/probe counts, pending work, and the last stru
|
|
|
250
358
|
or reports `{ kind: 'skylight' }` for the explicit fallback. `recover()` is meaningful only from `device-lost`; on a healthy renderer its structured
|
|
251
359
|
`renderer-state-invalid` result is a guard. Device recovery invalidates old generations and
|
|
252
360
|
rebuilds producer-owned physical resources, so old tickets and sources must not be reused.
|
|
361
|
+
For the SSR dependency producer, `inspection.reflectionProbes.reflectionFallbackInspection`
|
|
362
|
+
is the bounded recovery projection: its `receipt` is the committed source row selected for
|
|
363
|
+
the current lighting selection, while `failureStage`, `failureCode`, `expected`, and
|
|
364
|
+
`recoveryAction` describe the latest closed failure without exposing a texture, graph, or
|
|
365
|
+
device handle. `reflectionFallbackReadback` is the separate completed attachment fact; it
|
|
366
|
+
must match the committed row's frame and device generation before it is used as evidence.
|
|
253
367
|
The exact public names and stable consumer IDs are machine-readable in
|
|
254
368
|
`src/__tests__/render-target-public-schema.json`.
|
|
255
369
|
|
|
@@ -355,26 +469,6 @@ gate exercises the browser delivery path. Runtime inspection uses the public
|
|
|
355
469
|
belongs in `packages/render/bench` and its dev-verify producer. Render does
|
|
356
470
|
not expose a timing controller or a second membership-specific API.
|
|
357
471
|
|
|
358
|
-
## RenderFeature: the producer seam (first-read index)
|
|
359
|
-
|
|
360
|
-
### Material contract projection
|
|
361
|
-
|
|
362
|
-
Render consumes only the Pack-owned material publication projection. Its
|
|
363
|
-
inputs are runtime bool/value data, composed module slots, and the closed
|
|
364
|
-
compiler context; render never authors, cooks, writes DDC, or selects a
|
|
365
|
-
fallback material. The projection preserves `layoutIdentity`,
|
|
366
|
-
`programIdentity`, `cookIdentity`, and `materialPublicationIdentity` so a
|
|
367
|
-
stale draw can be traced to the first producer divergence.
|
|
368
|
-
|
|
369
|
-
The public route is one `RenderFeature<FrameData>` through the Standard
|
|
370
|
-
Pipeline and the active RenderGraph pass. In the examples below, `type FrameData`
|
|
371
|
-
is the producer-owned extracted value. A feature extracts one frame value,
|
|
372
|
-
then its mandatory `plan(data, context)` declares named resources and passes;
|
|
373
|
-
the host derives graph access, preparation, recording, and recovery from that
|
|
374
|
-
plan. Register it at construction with
|
|
375
|
-
`createRenderer(canvas, { features: [feature] })`. A feature never receives a
|
|
376
|
-
device, queue, encoder, staging builder, or submit callback.
|
|
377
|
-
|
|
378
472
|
## Motion Blur temporal consumer
|
|
379
473
|
|
|
380
474
|
The Standard camera may carry the presence-enabled `MotionBlur` component. Its
|
|
@@ -660,7 +754,7 @@ authority.
|
|
|
660
754
|
|
|
661
755
|
Inspect the current path through `renderer.inspect()`. Its detached CPU snapshot exposes
|
|
662
756
|
full rebuilds, no-change and delta frames, transform/material/instance updates,
|
|
663
|
-
removals, the
|
|
757
|
+
removals, the consumer-owned read version, projection cardinality, and the last resync
|
|
664
758
|
reason. The nested `gpu` status is one of `inactive`, `unsupported`, `resident`,
|
|
665
759
|
`rebuild-pending`, or `error`; resident state additionally reports capacity,
|
|
666
760
|
upload ranges and bytes, grows, clears, rebuilds, and no-change frames. The
|
|
@@ -998,3 +1092,30 @@ const temporal = catalog.require('forgeax::scene-data::temporal-v1');
|
|
|
998
1092
|
available, `SceneDataUnavailableError` exposes the closed `reason`, missing
|
|
999
1093
|
producer IDs (at most 32 plus an omission count), and explicit `recovery`.
|
|
1000
1094
|
Repair capability or producer coverage at its owner, then retry the next frame.
|
|
1095
|
+
|
|
1096
|
+
## AI-readable SSR fallback route
|
|
1097
|
+
|
|
1098
|
+
For the reflection fallback dependency evidence, call `renderer.inspect()` first
|
|
1099
|
+
and run the paired fixture. The fixture writes the current Browser/Dawn manifests;
|
|
1100
|
+
the collector then seals a fresh joint M0 guard for the current checkout:
|
|
1101
|
+
|
|
1102
|
+
```bash
|
|
1103
|
+
pnpm --filter @forgeax/app-learn-render-6-pbr-4-render-target-reflection smoke:ssr-fallback
|
|
1104
|
+
pnpm --filter @forgeax/app-learn-render-6-pbr-4-render-target-reflection smoke:browser
|
|
1105
|
+
node scripts/forgeax/collect-ssr-dependency-report.mjs \
|
|
1106
|
+
--input artifacts/ssr-fallback/dawn/ssr-dependencies-input.json \
|
|
1107
|
+
--build-summary packages/render/dist/index.mjs \
|
|
1108
|
+
--output artifacts/ssr-fallback/ssr-dependency-report.json
|
|
1109
|
+
```
|
|
1110
|
+
|
|
1111
|
+
Each smoke writes its own detached `ssr-dependencies-input.json` beside the lane
|
|
1112
|
+
manifest; the command above uses the just-completed Dawn input (use the Browser
|
|
1113
|
+
path when inspecting that lane separately). The collector signs the output with
|
|
1114
|
+
the current source/tree/lock/build identity; it never promotes a stale
|
|
1115
|
+
sibling-loop report or an authored manifest. Read identity, generation, evidence
|
|
1116
|
+
level, and closed failure fields before following the named owner recovery action.
|
|
1117
|
+
Submit the same consumer request and reinspect after recovery. The route returns
|
|
1118
|
+
detached facts only: no live GPU handle, second owner, or second ledger is exposed.
|
|
1119
|
+
Missing or mismatched receipts remain
|
|
1120
|
+
`fallback-only` with zero SSR work; SSR v1, Hi-Z, ray marching, temporal resolve,
|
|
1121
|
+
compose, and history are out of scope.
|
|
@@ -2,6 +2,19 @@ import type { Result, RhiCanvasContext, RhiDevice, RhiError, RhiInstance, Shader
|
|
|
2
2
|
/** Optional host hooks for recorder and device-lifecycle capabilities. */
|
|
3
3
|
export interface RhiBackendInstrumentation {
|
|
4
4
|
readonly resolveSurfaceDevice?: (device: RhiDevice) => Result<RhiDevice, RhiError>;
|
|
5
|
+
/**
|
|
6
|
+
* Optional deterministic submit fault seam for backend-owned integration
|
|
7
|
+
* fixtures. The callback runs after `finish()` and before the queue submit;
|
|
8
|
+
* returning an error aborts the frame transaction without changing the
|
|
9
|
+
* production queue contract.
|
|
10
|
+
*/
|
|
11
|
+
readonly beforeSubmit?: (device: RhiDevice) => RhiError | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Optional device-loss projection for deterministic recovery fixtures. A
|
|
14
|
+
* backend may compose this promise with its native `device.lost` promise;
|
|
15
|
+
* normal production packs leave it undefined and use the native signal.
|
|
16
|
+
*/
|
|
17
|
+
readonly deviceLost?: (device: RhiDevice) => RhiDevice['lost'];
|
|
5
18
|
readonly onFrameBoundary?: () => void;
|
|
6
19
|
readonly onDeviceLost?: () => void;
|
|
7
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-contract.d.ts","sourceRoot":"","sources":["../../src/assembly/backend-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG;QAC1B,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,MAAM,EAAE,iBAAiB,GAAG,eAAe,KACxC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAC/C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C;;;;;;;OAOG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CACrC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAC/C,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAC3D,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QACnB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;KAC1B,CAAC;IACF,gBAAgB;IAChB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,CAAC;IAC7E,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,yBAAyB,CAAC;CACtD;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;CACnD;AAiCD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;gBAElC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,4BAAiC;CAWtE"}
|
|
1
|
+
{"version":3,"file":"backend-contract.d.ts","sourceRoot":"","sources":["../../src/assembly/backend-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnF;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC;IACpE;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG;QAC1B,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,MAAM,EAAE,iBAAiB,GAAG,eAAe,KACxC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAC/C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C;;;;;;;OAOG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CACrC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAC/C,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAC3D,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QACnB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;KAC1B,CAAC;IACF,gBAAgB;IAChB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,CAAC;IAC7E,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,yBAAyB,CAAC;CACtD;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;CACnD;AAiCD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;gBAElC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,4BAAiC;CAWtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-feature-admission.d.ts","sourceRoot":"","sources":["../../src/assembly/device-feature-admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"device-feature-admission.d.ts","sourceRoot":"","sources":["../../src/assembly/device-feature-admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAejE,eAAO,MAAM,sCAAsC,KAAK,CAAC;AAEzD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE;QACxB,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC;KACnD,CAAC;CACH;AAED,KAAK,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE9F,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,6BAA6B,GACtC,sBAAsB,CAwBxB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,6BAA6B,GACtC,sBAAsB,GAAG,SAAS,CAKpC;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,4BAA4B,CAAC,GAC7E,OAAO,CAOT"}
|
|
@@ -13,7 +13,7 @@ export { projectMaterialPipeline, routeMaterialPipeline, updateMaterialRuntimeVa
|
|
|
13
13
|
* Bundler-layer injection accepted by `createRenderer` (and proxied by
|
|
14
14
|
* `createApp`) as the optional third argument.
|
|
15
15
|
*
|
|
16
|
-
* feat-20260608-create-app-param-surface-trim / M2 / D-3: aggregates the
|
|
16
|
+
* feat-20260608-create-app-param-surface-trim / M2 / D-3: aggregates the three
|
|
17
17
|
* host-injected build-tool channels:
|
|
18
18
|
*
|
|
19
19
|
* - shaderManifestUrl: the URL the host's vite-plugin-shader emit step
|
|
@@ -27,6 +27,9 @@ export { projectMaterialPipeline, routeMaterialPipeline, updateMaterialRuntimeVa
|
|
|
27
27
|
* AssetRegistry third ctor slot so DDC-miss assets can lazy-import.
|
|
28
28
|
* Absent => shipped form (a DDC miss fails fast with `asset-not-imported`).
|
|
29
29
|
*
|
|
30
|
+
* - build: exact checkout revision emitted by the build-tool adapter and
|
|
31
|
+
* carried into renderer-owned inspection identity.
|
|
32
|
+
*
|
|
30
33
|
* The interface is duplicated structurally in `@forgeax/engine-app`
|
|
31
34
|
* (BundlerOptions exported from packages/app); demos consume through the app
|
|
32
35
|
* package, the engine accepts via this local minimal shape so packages/runtime
|
|
@@ -37,6 +40,8 @@ export { projectMaterialPipeline, routeMaterialPipeline, updateMaterialRuntimeVa
|
|
|
37
40
|
export interface BundlerOptions {
|
|
38
41
|
readonly importTransport?: ImportTransport | undefined;
|
|
39
42
|
readonly shaderManifestUrl?: string | undefined;
|
|
43
|
+
/** Exact checkout revision emitted by the build-tool adapter. */
|
|
44
|
+
readonly build?: string | undefined;
|
|
40
45
|
}
|
|
41
46
|
/** Build a Renderer from the backend pack supplied by the Runtime host. */
|
|
42
47
|
/**
|
|
@@ -90,7 +95,7 @@ export { resolvePipelineGroup2Contract } from '../pbr-pipeline';
|
|
|
90
95
|
* Transmission is filtered by the same sampled-texture capability gate as
|
|
91
96
|
* Standard transmission because HDRP shares the material texture ABI.
|
|
92
97
|
*/
|
|
93
|
-
export declare function selectHdrpPbrPrewarmVariants(manifestEntry: MaterialShaderManifestEntry | undefined, storageBufferCapable: boolean, transmissionCapable
|
|
98
|
+
export declare function selectHdrpPbrPrewarmVariants(manifestEntry: MaterialShaderManifestEntry | undefined, storageBufferCapable: boolean, extendedLightingShaderAvailableOrTransmissionCapable?: boolean, transmissionCapable?: boolean, directionalPcssAvailable?: boolean, projectorAvailable?: boolean): readonly MaterialShaderManifestEntry['variants'][number][];
|
|
94
99
|
/** Return every active-capability pbr-skin variant used by URP and HDRP draws. */
|
|
95
100
|
export declare function selectSkinPrewarmVariants(manifestEntry: MaterialShaderManifestEntry | undefined, storageBufferCapable: boolean): readonly MaterialShaderManifestEntry['variants'][number][];
|
|
96
101
|
/**
|
|
@@ -98,13 +103,13 @@ export declare function selectSkinPrewarmVariants(manifestEntry: MaterialShaderM
|
|
|
98
103
|
* prewarming. The requested keys come from declared variants; no key is
|
|
99
104
|
* synthesized and no source fallback is permitted.
|
|
100
105
|
*/
|
|
101
|
-
export declare function selectStandardPbrTransmissionPrewarmVariants(manifestEntry: MaterialShaderManifestEntry | undefined, storageBufferCapable: boolean, directionalPcssAvailable?: boolean, projectorAvailable?: boolean): readonly MaterialShaderManifestEntry['variants'][number][];
|
|
106
|
+
export declare function selectStandardPbrTransmissionPrewarmVariants(manifestEntry: MaterialShaderManifestEntry | undefined, storageBufferCapable: boolean, directionalPcssAvailable?: boolean, projectorAvailable?: boolean, extendedLightingShaderAvailable?: boolean): readonly MaterialShaderManifestEntry['variants'][number][];
|
|
102
107
|
/**
|
|
103
108
|
* Select the PBR variant that matches a fallback mesh with no COLOR_0 input.
|
|
104
109
|
* Unknown/custom material IDs may still use the legacy PBR fallback, so that
|
|
105
110
|
* path must obey the same geometry-owned vertex-color axis as registered PBR.
|
|
106
111
|
*/
|
|
107
|
-
export declare function selectNoColorPbrVariant(manifestEntry: MaterialShaderManifestEntry | undefined, storageBufferCapable: boolean, variantSet: string | undefined, directionalPcssAvailable?: boolean, projectorAvailable?: boolean): MaterialShaderManifestEntry['variants'][number] | undefined;
|
|
112
|
+
export declare function selectNoColorPbrVariant(manifestEntry: MaterialShaderManifestEntry | undefined, storageBufferCapable: boolean, variantSet: string | undefined, extendedLightingShaderAvailable?: boolean, directionalPcssAvailable?: boolean, projectorAvailable?: boolean): MaterialShaderManifestEntry['variants'][number] | undefined;
|
|
108
113
|
export type MaterialShaderBindingContract = RenderFeatureMaterialShaderBindingContract;
|
|
109
114
|
export type MaterialShaderVertexInputContract = 'none' | 'render-material';
|
|
110
115
|
export declare function resolveMaterialShaderBindingContract(source: string): MaterialShaderBindingContract;
|
|
@@ -131,10 +136,13 @@ export declare function allowsUnlitPreparedFallback(depthFormatOverride: GPUText
|
|
|
131
136
|
export declare function shouldDeferMissingPreparedMaterialShader(vertexLayout: string | undefined): boolean;
|
|
132
137
|
export declare function selectPipelineLayoutForVariant(state: {
|
|
133
138
|
readonly pbrPipelineLayout: PipelineLayout | null;
|
|
139
|
+
readonly pbrProbePipelineLayout?: PipelineLayout | null;
|
|
134
140
|
readonly hdrpPbrPipelineLayout: PipelineLayout | null;
|
|
141
|
+
readonly hdrpProbePbrPipelineLayout?: PipelineLayout | null;
|
|
135
142
|
readonly pbrSkinPipelineLayout: PipelineLayout | null;
|
|
143
|
+
readonly pbrSkinProbePipelineLayout?: PipelineLayout | null;
|
|
136
144
|
readonly hdrpSkinPipelineLayout?: PipelineLayout | null;
|
|
137
|
-
} | null,
|
|
145
|
+
} | null, variantSet: string | undefined, layoutKind?: LayoutKind): PipelineLayout | null;
|
|
138
146
|
/**
|
|
139
147
|
* Resolve a requested material variant against the actual backend capabilities.
|
|
140
148
|
* Record callers use the native-capability request; the backend-owned axes
|
|
@@ -143,7 +151,7 @@ export declare function selectPipelineLayoutForVariant(state: {
|
|
|
143
151
|
*/
|
|
144
152
|
export declare function resolveMaterialShaderVariantSet(requestedVariantSet: string | undefined, variants: ReadonlyArray<{
|
|
145
153
|
readonly defines: Readonly<Record<string, boolean>>;
|
|
146
|
-
}>, backendKind: RhiDevice['caps']['backendKind'], storageBuffer: boolean,
|
|
154
|
+
}>, backendKind: RhiDevice['caps']['backendKind'], storageBuffer: boolean, maxSampledTexturesPerShaderStageOrProjectorAvailable?: number | boolean): string | undefined;
|
|
147
155
|
/**
|
|
148
156
|
* Keep a single-source material on its canonical module identity. A manifest
|
|
149
157
|
* entry with no variants cannot consume a synthesized capability or geometry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/assembly/factory.ts"],"names":[],"mappings":"AAqBA,OAAO,EAUL,6BAA6B,EAC7B,2BAA2B,EAC5B,MAAM,gCAAgC,CAAC;AAYxC,OAAO,KAAK,EAEV,MAAM,EAEN,cAAc,EAId,SAAS,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/assembly/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { RenderPipelineAsset } from '@forgeax/engine-types';
|
|
|
5
5
|
import type { RecoverFailure } from '../errors/recover';
|
|
6
6
|
import type { ObservationUnavailableError, RenderError } from '../errors/render';
|
|
7
7
|
import type { RenderFeature, RenderFeatureDiagnostics } from '../features/types';
|
|
8
|
+
import type { GpuDrivenProductionInspection, LodOcclusionInspection } from '../inspection-types';
|
|
8
9
|
import type { MeshMaterialBindingObservation } from '../mesh-material-bindings';
|
|
9
10
|
import type { FrameObservation, FrameObservationOptions } from '../record/frame';
|
|
10
11
|
import type { CurrentGraphTarget, GraphTargetCaptureRequest } from '../record/frame-snapshot';
|
|
@@ -38,6 +39,15 @@ export interface RendererHostImplementation {
|
|
|
38
39
|
destroyRenderTarget(target: RenderTarget): RenderResult<void, RenderError>;
|
|
39
40
|
setProfile(profile: RenderProfile): RenderResult<void, RenderError>;
|
|
40
41
|
inspect(): RenderInspection;
|
|
42
|
+
/**
|
|
43
|
+
* Internal bounded inspection for high-cardinality producers. The public
|
|
44
|
+
* snapshot also carries the full persistent render-scene record table, which
|
|
45
|
+
* is intentionally not materialized for per-frame performance evidence.
|
|
46
|
+
*/
|
|
47
|
+
inspectLodOcclusion(): {
|
|
48
|
+
readonly lodOcclusion: LodOcclusionInspection | undefined;
|
|
49
|
+
readonly gpuDriven: GpuDrivenProductionInspection;
|
|
50
|
+
};
|
|
41
51
|
drawFrame(request: RenderFrameInput): RenderResult<FrameReceipt, RhiError | RenderError>;
|
|
42
52
|
observe(receipt: FrameReceipt, request: FrameObservationRequest): Promise<RenderResult<FrameReceiptObservation, RenderError>>;
|
|
43
53
|
releaseSurface(): RenderResult<void, RhiError>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-contract.d.ts","sourceRoot":"","sources":["../../src/assembly/host-contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"host-contract.d.ts","sourceRoot":"","sources":["../../src/assembly/host-contract.ts"],"names":[],"mappings":"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"}
|
package/dist/authoring.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { GlyphText, SpritePlayback, setActiveCamera, spritePlaybackModeFromU32 } from './chunk-FJ6P52EE.mjs';
|
|
2
2
|
export { SpriteAnimation, SpriteInstances, SpriteRegionOverride, TileLayer, Tilemap, TilemapSort } from './chunk-JDWARUOI.mjs';
|
|
3
3
|
export { TransparentSort } from './chunk-RXZ3RGOU.mjs';
|
|
4
|
-
export { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from './chunk-
|
|
4
|
+
export { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from './chunk-4NPUASZR.mjs';
|
|
5
5
|
import { ok } from '@forgeax/engine-types';
|
|
6
6
|
|
|
7
7
|
function createFullscreenRenderFeature(options) {
|
|
@@ -381,5 +381,5 @@ var TemporalFrameCoordinator = class {
|
|
|
381
381
|
};
|
|
382
382
|
|
|
383
383
|
export { TEMPORAL_JITTER_SAMPLE_COUNT, TemporalFrameCoordinator, classifySceneDataCoverage, createTemporalCoverage, projectTemporalView, scanSceneDataCoverage, snapshotSubmittedTemporalView, temporalJitterSample, temporalViewId };
|
|
384
|
-
//# sourceMappingURL=chunk-
|
|
385
|
-
//# sourceMappingURL=chunk-
|
|
384
|
+
//# sourceMappingURL=chunk-4L3P6DT5.mjs.map
|
|
385
|
+
//# sourceMappingURL=chunk-4L3P6DT5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/temporal/coverage.ts","../src/temporal/temporal-view.ts","../src/temporal/taa-history-store.ts","../src/temporal/frame-coordinator.ts"],"names":[],"mappings":"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","file":"chunk-4L3P6DT5.mjs","sourcesContent":["import type { SceneDataLane, SceneDataSchemaId } from './scene-data';\n\nexport interface SceneDataCoverage {\n readonly schema: SceneDataSchemaId;\n readonly lane: SceneDataLane;\n readonly producerId: string;\n readonly complete: boolean;\n readonly contributorIds: readonly string[];\n readonly exactContributorIds: readonly string[];\n readonly reactiveContributorIds: readonly string[];\n readonly missingContributorIds: readonly string[];\n readonly omittedMissingContributorCount: number;\n}\n\nexport interface TemporalCoverage {\n readonly width: number;\n readonly height: number;\n readonly bytes: number;\n readonly fullScreen: true;\n}\n\nexport function createTemporalCoverage(width: number, height: number): TemporalCoverage {\n if (!Number.isSafeInteger(width) || width <= 0) throw new RangeError('width must be positive.');\n if (!Number.isSafeInteger(height) || height <= 0)\n throw new RangeError('height must be positive.');\n return Object.freeze({ width, height, bytes: 32 * width * height, fullScreen: true as const });\n}\n\nexport type SceneDataContributorKind = 'exact' | 'reactive';\nexport interface SceneDataContributor {\n readonly id: string;\n readonly kind: SceneDataContributorKind;\n}\nexport function classifySceneDataCoverage(input: {\n readonly contributors: readonly SceneDataContributor[];\n readonly requiredContributorIds: readonly string[];\n}): {\n readonly exactContributorIds: readonly string[];\n readonly reactiveContributorIds: readonly string[];\n readonly missingContributorIds: readonly string[];\n readonly omittedMissingContributorCount: number;\n readonly complete: boolean;\n} {\n const exactContributorIds = input.contributors.filter((c) => c.kind === 'exact').map((c) => c.id);\n const reactiveContributorIds = input.contributors\n .filter((c) => c.kind === 'reactive')\n .map((c) => c.id);\n const available = new Set(input.contributors.map((c) => c.id));\n const missing = input.requiredContributorIds.filter((id) => !available.has(id));\n return {\n exactContributorIds: Object.freeze(exactContributorIds),\n reactiveContributorIds: Object.freeze(reactiveContributorIds),\n missingContributorIds: Object.freeze(missing.slice(0, 32)),\n omittedMissingContributorCount: Math.max(0, missing.length - 32),\n complete: missing.length === 0,\n };\n}\nexport function scanSceneDataCoverage(input: {\n readonly schema: SceneDataSchemaId;\n readonly lane: SceneDataLane;\n readonly producerId: string;\n readonly contributorIds: readonly string[];\n readonly requiredContributorIds: readonly string[];\n}): SceneDataCoverage {\n const classification = classifySceneDataCoverage({\n contributors: input.contributorIds.map((id) => ({ id, kind: 'exact' as const })),\n requiredContributorIds: input.requiredContributorIds,\n });\n return Object.freeze({\n schema: input.schema,\n lane: input.lane,\n producerId: input.producerId,\n ...classification,\n contributorIds: Object.freeze([...input.contributorIds]),\n });\n}\n","import { mat4 } from '@forgeax/engine-math';\nimport type { CameraProjection } from '../components/camera';\nimport type { CameraSnapshot } from '../render-contract';\n\nexport const TEMPORAL_JITTER_SAMPLE_COUNT = 8;\n\nexport type TemporalViewResetReason =\n | 'first-frame'\n | 'camera-switch'\n | 'history-version-changed'\n | 'projection-kind-changed'\n | 'projection-range-changed';\n\nexport interface SubmittedTemporalView {\n readonly viewId: string;\n readonly historyVersion: number;\n readonly projection: CameraProjection;\n readonly near: number;\n readonly far: number;\n readonly jitterUv: readonly [number, number];\n readonly unjitteredViewProjection: Float32Array;\n}\n\nexport interface TemporalView {\n readonly viewId: string;\n readonly historyVersion: number;\n readonly temporalFrameIndex: number;\n readonly historyValid: boolean;\n readonly resetReason: TemporalViewResetReason | undefined;\n readonly currentJitterUv: readonly [number, number];\n readonly previousJitterUv: readonly [number, number];\n readonly currentJitteredViewProjection: Float32Array;\n readonly currentUnjitteredViewProjection: Float32Array;\n readonly previousUnjitteredViewProjection: Float32Array;\n readonly projection: CameraProjection;\n readonly near: number;\n readonly far: number;\n}\n\nexport interface TemporalViewInput {\n readonly camera: CameraSnapshot;\n readonly temporalFrameIndex: number;\n readonly surfaceWidth: number;\n readonly surfaceHeight: number;\n readonly lastSubmitted?: SubmittedTemporalView;\n}\n\nexport function temporalViewId(worldId: number, entityKey: number): string {\n const raw = entityKey >>> 0;\n const index = raw & 0x00ffffff;\n const generation = (raw >>> 24) & 0xff;\n return `${worldId}:${index}:${generation}`;\n}\n\nfunction halton(index: number, base: number): number {\n let result = 0;\n let fraction = 1 / base;\n let value = index;\n while (value > 0) {\n result += fraction * (value % base);\n value = Math.floor(value / base);\n fraction /= base;\n }\n return result;\n}\n\nexport function temporalJitterSample(temporalFrameIndex: number): readonly [number, number] {\n const sampleIndex =\n ((Math.trunc(temporalFrameIndex) % TEMPORAL_JITTER_SAMPLE_COUNT) +\n TEMPORAL_JITTER_SAMPLE_COUNT) %\n TEMPORAL_JITTER_SAMPLE_COUNT;\n const haltonIndex = sampleIndex + 1;\n return [halton(haltonIndex, 2) - 0.5, halton(haltonIndex, 3) - 0.5];\n}\n\nfunction temporalJitterUv(\n temporalFrameIndex: number,\n surfaceWidth: number,\n surfaceHeight: number,\n): readonly [number, number] {\n const sample = temporalJitterSample(temporalFrameIndex);\n return [sample[0] / Math.max(1, surfaceWidth), sample[1] / Math.max(1, surfaceHeight)];\n}\n\nfunction cameraProjection(camera: CameraSnapshot): Float32Array {\n const projection = mat4.create();\n if (camera.projection === 'orthographic') {\n mat4.orthographic(\n projection,\n camera.orthoLeft,\n camera.orthoRight,\n camera.orthoBottom,\n camera.orthoTop,\n camera.near,\n camera.far,\n );\n } else {\n mat4.perspective(projection, camera.fov, camera.aspect, camera.near, camera.far);\n }\n return projection;\n}\n\nfunction resetReason(\n current: CameraSnapshot,\n viewId: string,\n previous: SubmittedTemporalView | undefined,\n): TemporalViewResetReason | undefined {\n if (previous === undefined) return 'first-frame';\n if (previous.viewId !== viewId) return 'camera-switch';\n if (previous.historyVersion !== (current.historyVersion ?? 0)) {\n return 'history-version-changed';\n }\n if (previous.projection !== current.projection) return 'projection-kind-changed';\n if (!Object.is(previous.near, current.near) || !Object.is(previous.far, current.far)) {\n return 'projection-range-changed';\n }\n return undefined;\n}\n\nexport function projectTemporalView(input: TemporalViewInput): TemporalView {\n const { camera } = input;\n const viewId = temporalViewId(camera.worldId ?? 0, camera.entityKey ?? 0);\n const currentJitterUv = temporalJitterUv(\n input.temporalFrameIndex,\n input.surfaceWidth,\n input.surfaceHeight,\n );\n const view = mat4.invert(mat4.create(), camera.world);\n const projection = cameraProjection(camera);\n const currentUnjitteredViewProjection = mat4.multiply(mat4.create(), projection, view);\n const clipJitter = mat4.identity(mat4.create());\n clipJitter[12] = currentJitterUv[0] * 2;\n clipJitter[13] = currentJitterUv[1] * -2;\n const jitteredProjection = mat4.multiply(mat4.create(), clipJitter, projection);\n const currentJitteredViewProjection = mat4.multiply(mat4.create(), jitteredProjection, view);\n const reason = resetReason(camera, viewId, input.lastSubmitted);\n const historyValid = reason === undefined;\n return {\n viewId,\n historyVersion: camera.historyVersion ?? 0,\n temporalFrameIndex: input.temporalFrameIndex,\n historyValid,\n resetReason: reason,\n currentJitterUv,\n previousJitterUv: historyValid\n ? (input.lastSubmitted?.jitterUv ?? currentJitterUv)\n : currentJitterUv,\n currentJitteredViewProjection,\n currentUnjitteredViewProjection,\n previousUnjitteredViewProjection: historyValid\n ? (input.lastSubmitted?.unjitteredViewProjection ?? currentUnjitteredViewProjection)\n : currentUnjitteredViewProjection,\n projection: camera.projection,\n near: camera.near,\n far: camera.far,\n };\n}\n\nexport function snapshotSubmittedTemporalView(view: TemporalView): SubmittedTemporalView {\n return {\n viewId: view.viewId,\n historyVersion: view.historyVersion,\n projection: view.projection,\n near: view.near,\n far: view.far,\n jitterUv: [view.currentJitterUv[0], view.currentJitterUv[1]],\n unjitteredViewProjection: new Float32Array(view.currentUnjitteredViewProjection),\n };\n}\n","export type TaaHistoryResetReason =\n | 'first-frame'\n | 'camera-cut'\n | 'resize'\n | 'recover'\n | 'device-generation';\n\nexport interface TaaHistoryInspection {\n readonly generation: number;\n readonly seed: number;\n readonly attempt: 'none' | 'active' | 'committed' | 'aborted';\n readonly valid: boolean;\n readonly resetReason: TaaHistoryResetReason | undefined;\n}\n\nexport interface TaaHistoryAttempt {\n readonly generation: number;\n readonly seed: number;\n commit(): void;\n abort(): void;\n}\n\n/** TAA-only history owner. No global registry or backend handle crosses this boundary. */\nexport class TaaHistoryStore {\n private generation = 0;\n private seed = 0;\n private valid = false;\n private attempt: TaaHistoryInspection['attempt'] = 'none';\n private resetReason: TaaHistoryResetReason | undefined;\n\n begin(reason: TaaHistoryResetReason | undefined = undefined): TaaHistoryAttempt {\n const generation = this.generation;\n const seed = this.seed;\n this.attempt = 'active';\n let state: 'active' | 'committed' | 'aborted' = 'active';\n return {\n generation,\n seed,\n commit: () => {\n if (state !== 'active') return;\n state = 'committed';\n this.attempt = 'committed';\n this.valid = true;\n this.generation += 1;\n this.seed += 1;\n this.resetReason = reason;\n },\n abort: () => {\n if (state !== 'active') return;\n state = 'aborted';\n this.attempt = 'aborted';\n },\n };\n }\n\n seedHistory(reason: TaaHistoryResetReason = 'first-frame'): void {\n this.valid = false;\n this.resetReason = reason;\n this.attempt = 'none';\n }\n\n reset(reason: TaaHistoryResetReason): void {\n this.generation = 0;\n this.seed = 0;\n this.valid = false;\n this.attempt = 'none';\n this.resetReason = reason;\n }\n\n inspect(): TaaHistoryInspection {\n return {\n generation: this.generation,\n seed: this.seed,\n attempt: this.attempt,\n valid: this.valid,\n resetReason: this.resetReason,\n };\n }\n}\n","import { err, ok, type Result } from '@forgeax/engine-types';\nimport type { CameraSnapshot } from '../render-contract';\nimport { classifySceneDataCoverage, type SceneDataContributor } from './coverage';\nimport { type TaaHistoryAttempt, TaaHistoryStore } from './taa-history-store';\nimport {\n projectTemporalView,\n type SubmittedTemporalView,\n snapshotSubmittedTemporalView,\n type TemporalView,\n} from './temporal-view';\n\n/** The only stages that may publish a temporal frame. */\nexport type TemporalFrameStage = 'build' | 'encode' | 'finish' | 'submit';\n\nexport type TemporalFrameErrorCode = 'taa-unavailable' | 'temporal-active' | 'temporal-not-active';\n\nexport interface TemporalFrameError {\n readonly code: TemporalFrameErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail?: Readonly<Record<string, unknown>>;\n}\n\nexport interface TemporalFrameSnapshot<T = unknown> {\n readonly epoch: number;\n readonly previous: T | undefined;\n readonly historyAttempt: 'none' | 'active' | 'committed' | 'aborted';\n readonly attempt: 'none' | 'active' | 'committed' | 'aborted';\n readonly lastFailure: TemporalFrameStage | undefined;\n readonly coverage: {\n readonly exactContributorIds: readonly string[];\n readonly reactiveContributorIds: readonly string[];\n readonly missingContributorIds: readonly string[];\n readonly omittedMissingContributorCount: number;\n };\n}\n\nexport interface TemporalFrameBeginInput<T = unknown> {\n readonly current: T;\n readonly antialias: 'none' | 'fxaa' | 'msaa' | 'taa';\n /** Enables the shared transaction for a temporal feature without TAA. */\n readonly temporalDemand?: boolean;\n readonly available?: boolean;\n readonly contributors?: readonly SceneDataContributor[];\n readonly requiredContributorIds?: readonly string[];\n /** Projection produced before record uploads; it commits with the frame. */\n readonly temporalView?: TemporalView;\n}\n\nexport interface TemporalFrameCandidate<T = unknown> {\n readonly epoch: number;\n readonly current: T;\n readonly previous: T | undefined;\n readonly history: { readonly direction: 'a-to-b' | 'b-to-a'; readonly valid: boolean };\n readonly contributors: readonly SceneDataContributor[];\n readonly requiredContributorIds: readonly string[];\n readonly temporalView?: TemporalView;\n}\n\nexport interface TemporalFramePhases<T = unknown> {\n readonly build: () => T;\n readonly encode: (built: T) => void;\n readonly finish: () => void;\n readonly submit: () => void;\n}\n\nexport interface TemporalFrameReceipt<T = unknown> {\n readonly epoch: number;\n readonly previous: T;\n readonly historyDirection: 'a-to-b' | 'b-to-a';\n}\n\nexport type ReflectionFallbackTemporalReset =\n | { readonly reset: false }\n | { readonly reset: true; readonly reason: 'reflection-fallback-generation' };\n\n/** Maps committed producer generations into the existing temporal reset seam. */\nexport function resolveReflectionFallbackTemporalReset(\n previousGeneration: number | undefined,\n nextGeneration: number | undefined,\n): ReflectionFallbackTemporalReset {\n if (previousGeneration === undefined || nextGeneration === undefined) return { reset: false };\n return previousGeneration === nextGeneration\n ? { reset: false }\n : { reset: true, reason: 'reflection-fallback-generation' };\n}\n\n/**\n * Keeps SSR admission on the existing producer-generation reset seam. The\n * admission path never allocates or resolves temporal history itself.\n */\nexport function resolveSsrAdmissionTemporalReset(\n previousGeneration: number | undefined,\n nextGeneration: number | undefined,\n): ReflectionFallbackTemporalReset {\n return resolveReflectionFallbackTemporalReset(previousGeneration, nextGeneration);\n}\n\nfunction failure(code: TemporalFrameErrorCode, hint: string): TemporalFrameError {\n return {\n code,\n expected:\n code === 'taa-unavailable'\n ? 'TAA resources and capability are available'\n : 'one temporal frame is active',\n hint,\n };\n}\n\n/**\n * Renderer-owned temporal transaction. It has no graph or backend dependency:\n * graph assembly supplies the four phase callbacks and only submit publishes\n * the candidate snapshot.\n */\nexport class TemporalFrameCoordinator<T = unknown> {\n readonly historyStore: TaaHistoryStore;\n private epoch: number;\n private previous: T | undefined;\n private active: TemporalFrameCandidate<T> | undefined;\n private attempt: TemporalFrameSnapshot<T>['attempt'] = 'none';\n private historyAttempt: TemporalFrameSnapshot<T>['historyAttempt'] = 'none';\n private lastFailure: TemporalFrameStage | undefined;\n private historyDirection: 'a-to-b' | 'b-to-a' = 'a-to-b';\n private temporalFrameIndex = 0;\n private lastSubmittedView: SubmittedTemporalView | undefined;\n private coverage: TemporalFrameSnapshot<T>['coverage'] = {\n exactContributorIds: [],\n reactiveContributorIds: [],\n missingContributorIds: [],\n omittedMissingContributorCount: 0,\n };\n private readonly historyAttempts = new WeakMap<object, TaaHistoryAttempt>();\n\n constructor(\n initial: {\n readonly epoch?: number;\n readonly previous?: T;\n readonly historyStore?: TaaHistoryStore;\n } = {},\n ) {\n this.historyStore = initial.historyStore ?? new TaaHistoryStore();\n this.epoch = initial.epoch ?? 0;\n this.previous = initial.previous;\n }\n\n begin(input: TemporalFrameBeginInput<T>): Result<TemporalFrameCandidate<T>, TemporalFrameError> {\n const demanded = input.antialias === 'taa' || input.temporalDemand === true;\n if (!demanded) {\n return ok({\n epoch: this.epoch,\n current: input.current,\n previous: this.previous,\n history: { direction: this.historyDirection, valid: false },\n contributors: Object.freeze([...(input.contributors ?? [])]),\n requiredContributorIds: Object.freeze([...(input.requiredContributorIds ?? [])]),\n ...(input.temporalView === undefined ? {} : { temporalView: input.temporalView }),\n });\n }\n if (input.available === false) {\n return err(\n failure('taa-unavailable', 'enable rgba16float temporal targets and retry the frame'),\n );\n }\n if (this.active !== undefined) {\n return err(\n failure(\n 'temporal-active',\n 'commit or abort the active temporal frame before beginning another',\n ),\n );\n }\n const candidate: TemporalFrameCandidate<T> = {\n epoch: this.epoch + 1,\n current: input.current,\n previous: this.previous,\n history: { direction: this.historyDirection, valid: this.previous !== undefined },\n contributors: Object.freeze([...(input.contributors ?? [])]),\n requiredContributorIds: Object.freeze([...(input.requiredContributorIds ?? [])]),\n ...(input.temporalView === undefined ? {} : { temporalView: input.temporalView }),\n };\n if (input.antialias === 'taa') {\n this.historyAttempts.set(candidate, this.historyStore.begin());\n }\n this.active = candidate;\n this.attempt = 'active';\n this.historyAttempt = input.antialias === 'taa' ? 'active' : 'none';\n this.lastFailure = undefined;\n return ok(candidate);\n }\n\n commit(\n candidate: TemporalFrameCandidate<T>,\n ): Result<TemporalFrameReceipt<T>, TemporalFrameError> {\n if (this.active !== candidate) {\n return err(failure('temporal-not-active', 'commit the candidate returned by begin'));\n }\n this.epoch = candidate.epoch;\n this.previous = candidate.current;\n if (candidate.temporalView !== undefined) {\n this.lastSubmittedView = snapshotSubmittedTemporalView(candidate.temporalView);\n this.temporalFrameIndex += 1;\n }\n this.historyDirection = candidate.history.direction === 'a-to-b' ? 'b-to-a' : 'a-to-b';\n const historyAttempt = this.historyAttempts.get(candidate);\n historyAttempt?.commit();\n this.coverage = classifySceneDataCoverage({\n contributors: candidate.contributors,\n requiredContributorIds: candidate.requiredContributorIds,\n });\n this.active = undefined;\n historyAttempt?.abort();\n this.historyAttempts.delete(candidate);\n this.attempt = 'committed';\n this.historyAttempt = historyAttempt === undefined ? 'none' : 'committed';\n return ok({\n epoch: this.epoch,\n previous: candidate.current,\n historyDirection: candidate.history.direction,\n });\n }\n\n abort(candidate: TemporalFrameCandidate<T>, stage: TemporalFrameStage = 'submit'): void {\n if (this.active !== candidate) return;\n this.historyAttempts.get(candidate)?.abort();\n this.historyAttempts.delete(candidate);\n this.active = undefined;\n this.attempt = 'aborted';\n this.historyAttempt = 'aborted';\n this.lastFailure = stage;\n }\n\n run(\n input: TemporalFrameBeginInput<T>,\n phases: TemporalFramePhases<T>,\n ): Result<TemporalFrameReceipt<T> | undefined, TemporalFrameError> {\n const started = this.begin(input);\n if (!started.ok) return started;\n const candidate = started.value;\n if (input.antialias !== 'taa' && input.temporalDemand !== true) return ok(undefined);\n try {\n const built = phases.build();\n phases.encode(built);\n phases.finish();\n phases.submit();\n } catch (cause) {\n const stage = this.stageFromError(cause);\n this.abort(candidate, stage);\n return err({\n code: 'temporal-not-active',\n expected: `temporal ${stage} succeeds before commit`,\n hint: 'inspect the underlying stage failure and retry the frame',\n detail: { stage, cause },\n });\n }\n return this.commit(candidate);\n }\n\n inspect(): TemporalFrameSnapshot<T> {\n return {\n epoch: this.epoch,\n previous: this.previous,\n historyAttempt: this.historyAttempt,\n attempt: this.attempt,\n lastFailure: this.lastFailure,\n coverage: this.coverage,\n };\n }\n\n /**\n * Derive the current/previous camera matrices without mutating history.\n * `commit()` is the only operation that publishes the returned view, so a\n * graph/finish/submit failure leaves the last successful view intact.\n */\n prepareTemporalView(\n camera: CameraSnapshot,\n surfaceWidth: number,\n surfaceHeight: number,\n ): TemporalView | undefined {\n const demanded =\n camera.antialias === 'taa' ||\n (camera.motionBlur?.shutterAngle !== undefined && camera.motionBlur.shutterAngle > 0);\n if (!demanded) return undefined;\n return projectTemporalView({\n camera,\n temporalFrameIndex: this.temporalFrameIndex,\n surfaceWidth,\n surfaceHeight,\n ...(this.lastSubmittedView === undefined ? {} : { lastSubmitted: this.lastSubmittedView }),\n });\n }\n\n reset(\n reason:\n | 'cut'\n | 'resize'\n | 'camera-switch'\n | 'detach'\n | 'recover'\n | 'device-loss'\n | 'device-generation' = 'recover',\n ): void {\n void reason;\n this.active = undefined;\n this.epoch = 0;\n this.previous = undefined;\n this.temporalFrameIndex = 0;\n this.lastSubmittedView = undefined;\n this.historyDirection = 'a-to-b';\n this.historyStore.reset(\n reason === 'cut' || reason === 'camera-switch'\n ? 'camera-cut'\n : reason === 'resize'\n ? 'resize'\n : reason === 'device-generation' || reason === 'device-loss'\n ? 'device-generation'\n : 'recover',\n );\n this.attempt = 'none';\n this.historyAttempt = 'none';\n this.lastFailure = undefined;\n this.coverage = {\n exactContributorIds: [],\n reactiveContributorIds: [],\n missingContributorIds: [],\n omittedMissingContributorCount: 0,\n };\n }\n\n private stageFromError(cause: unknown): TemporalFrameStage {\n if (typeof cause === 'object' && cause !== null && 'stage' in cause) {\n const stage = (cause as { stage?: unknown }).stage;\n if (stage === 'build' || stage === 'encode' || stage === 'finish' || stage === 'submit')\n return stage;\n }\n return 'submit';\n }\n}\n"]}
|
|
@@ -76,6 +76,13 @@ function pass(name, module, renderState, fragmentEntry, queue) {
|
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
+
function shadowCasterRenderState(renderState) {
|
|
80
|
+
if (renderState?.cullMode === void 0 && renderState?.frontFace === void 0) return void 0;
|
|
81
|
+
return {
|
|
82
|
+
...renderState.cullMode === void 0 ? {} : { cullMode: renderState.cullMode },
|
|
83
|
+
...renderState.frontFace === void 0 ? {} : { frontFace: renderState.frontFace }
|
|
84
|
+
};
|
|
85
|
+
}
|
|
79
86
|
function unlit(rgba, opts) {
|
|
80
87
|
if (opts?.alphaCutoff !== void 0 && (opts.alphaCutoff < 0 || opts.alphaCutoff > 1)) {
|
|
81
88
|
throw new Error(`Materials.unlit: alphaCutoff must be in [0, 1], got ${opts.alphaCutoff}`);
|
|
@@ -86,7 +93,9 @@ function unlit(rgba, opts) {
|
|
|
86
93
|
const passes = [
|
|
87
94
|
pass("forward", UNLIT_MODULE, opts?.renderState, void 0, opts?.queue)
|
|
88
95
|
];
|
|
89
|
-
if (opts?.castShadow !== false)
|
|
96
|
+
if (opts?.castShadow !== false) {
|
|
97
|
+
passes.push(pass("shadow-caster", UNLIT_MODULE, shadowCasterRenderState(opts?.renderState)));
|
|
98
|
+
}
|
|
90
99
|
return {
|
|
91
100
|
kind: "material",
|
|
92
101
|
...opts?.colorSpace === void 0 || opts.colorSpace === "srgb" ? {} : { colorSpace: opts.colorSpace },
|
|
@@ -176,7 +185,9 @@ function standard(opts) {
|
|
|
176
185
|
if (transmission === 0) {
|
|
177
186
|
passes.push(pass("deferred", STANDARD_MODULE, opts.renderState, "fs_gbuffer", opts.queue));
|
|
178
187
|
}
|
|
179
|
-
if (opts.castShadow !== false)
|
|
188
|
+
if (opts.castShadow !== false) {
|
|
189
|
+
passes.push(pass("shadow-caster", STANDARD_MODULE, shadowCasterRenderState(opts.renderState)));
|
|
190
|
+
}
|
|
180
191
|
return {
|
|
181
192
|
kind: "material",
|
|
182
193
|
...opts.colorSpace === void 0 || opts.colorSpace === "srgb" ? {} : { colorSpace: opts.colorSpace },
|
|
@@ -188,5 +199,5 @@ function standard(opts) {
|
|
|
188
199
|
var Materials = { unlit, standard };
|
|
189
200
|
|
|
190
201
|
export { MaterialTransmissionContractError, Materials, SPRITE_PREMULTIPLIED_ALPHA_BLEND };
|
|
191
|
-
//# sourceMappingURL=chunk-
|
|
192
|
-
//# sourceMappingURL=chunk-
|
|
202
|
+
//# sourceMappingURL=chunk-4NPUASZR.mjs.map
|
|
203
|
+
//# sourceMappingURL=chunk-4NPUASZR.mjs.map
|