@forgeax/engine-render 0.1.28 → 0.1.30
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 +856 -126
- package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
- package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/device-feature-admission.d.ts +4 -3
- package/dist/assembly/device-feature-admission.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-host.d.ts +27 -0
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
- package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +3 -1
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/gpu-driven-owner.d.ts +10 -0
- package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +14 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts +31 -1
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-helpers.d.ts +24 -0
- package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -0
- package/dist/assembly/material-shader-policy.d.ts +3 -1
- package/dist/assembly/material-shader-policy.d.ts.map +1 -1
- package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
- package/dist/assembly/recovery/failure-location.d.ts +12 -0
- package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
- package/dist/assembly/recovery/recovery-attempt.d.ts +1 -6
- package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -1
- package/dist/assembly/recovery/renderer-recover.d.ts +7 -4
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
- package/dist/assembly/renderer-facade.d.ts.map +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
- package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
- package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-helpers.d.ts +3 -0
- package/dist/assembly/renderer-helpers.d.ts.map +1 -1
- package/dist/assembly/renderer-inspection.d.ts +4 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -1
- package/dist/assembly/shader-prewarm-policy.d.ts +7 -1
- package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
- package/dist/assembly/skin-palette-owner.d.ts +8 -0
- package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/webgpu-device-loss.d.ts +15 -0
- package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +7 -3
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +7 -141
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
- package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
- package/dist/authoring.mjs +2 -2
- package/dist/capture/scene-projection.d.ts +41 -0
- package/dist/capture/scene-projection.d.ts.map +1 -0
- package/dist/{chunk-J52NMQKR.mjs → chunk-7MQ3XBSP.mjs} +1098 -844
- package/dist/chunk-7MQ3XBSP.mjs.map +1 -0
- package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
- package/dist/chunk-BLXGONR2.mjs.map +1 -0
- package/dist/{chunk-VSL23LZE.mjs → chunk-C3DDSXYK.mjs} +1188 -463
- package/dist/chunk-C3DDSXYK.mjs.map +1 -0
- package/dist/{chunk-IQMKJLNU.mjs → chunk-FUUO4UND.mjs} +443 -30
- package/dist/chunk-FUUO4UND.mjs.map +1 -0
- package/dist/{chunk-J6KACNOH.mjs → chunk-JRBDO2KB.mjs} +617 -7
- package/dist/chunk-JRBDO2KB.mjs.map +1 -0
- package/dist/{chunk-GE3SDD72.mjs → chunk-MDQJPY3T.mjs} +20 -40
- package/dist/chunk-MDQJPY3T.mjs.map +1 -0
- package/dist/{chunk-MYJ5RPJO.mjs → chunk-NO4WZCAH.mjs} +3 -3
- package/dist/chunk-NO4WZCAH.mjs.map +1 -0
- package/dist/{chunk-RBDBZ5R7.mjs → chunk-PA5DRJNI.mjs} +2 -2
- package/dist/chunk-PA5DRJNI.mjs.map +1 -0
- package/dist/{chunk-MBU4ZVE7.mjs → chunk-PSEQ6QPH.mjs} +4655 -892
- package/dist/chunk-PSEQ6QPH.mjs.map +1 -0
- package/dist/{chunk-JAASCMXA.mjs → chunk-S5UE2T5P.mjs} +289 -41
- package/dist/chunk-S5UE2T5P.mjs.map +1 -0
- package/dist/components/camera.d.ts +62 -2
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/directional-light.d.ts +2 -2
- package/dist/components/dynamic-resolution.d.ts +15 -0
- package/dist/components/dynamic-resolution.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/instances.d.ts +6 -20
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/reflection-probe.d.ts +1 -0
- package/dist/components/reflection-probe.d.ts.map +1 -1
- package/dist/components/scene-instance.d.ts +2 -1
- package/dist/components/scene-instance.d.ts.map +1 -1
- package/dist/components/screen-space-reflection.d.ts +14 -0
- package/dist/components/screen-space-reflection.d.ts.map +1 -0
- package/dist/components/skylight.d.ts +4 -1
- package/dist/components/skylight.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +14809 -7570
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +2 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/device/gpu-residency.d.ts +3 -14
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/dynamic-geometry.d.ts.map +1 -1
- package/dist/environment/background.d.ts +7 -0
- package/dist/environment/background.d.ts.map +1 -0
- package/dist/environment/ibl.d.ts +11 -0
- package/dist/environment/ibl.d.ts.map +1 -0
- package/dist/environment/storage.d.ts +14 -0
- package/dist/environment/storage.d.ts.map +1 -0
- package/dist/errors/gpu-driven.d.ts +6 -3
- package/dist/errors/gpu-driven.d.ts.map +1 -1
- package/dist/errors/render.d.ts +41 -4
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +7 -0
- package/dist/extract/contracts.d.ts.map +1 -1
- package/dist/extract/gpu-driven.d.ts +50 -3
- package/dist/extract/gpu-driven.d.ts.map +1 -1
- package/dist/features/host.d.ts +23 -1
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/noise-texture.d.ts +17 -0
- package/dist/features/noise-texture.d.ts.map +1 -0
- package/dist/features/plan.d.ts +83 -2
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +37 -4
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +5 -0
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts +5 -3
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +11 -3
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +19 -3
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/types.d.ts +11 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +2 -0
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +34 -1
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/material-artifacts.d.ts +24 -0
- package/dist/gpu-driven/material-artifacts.d.ts.map +1 -0
- package/dist/gpu-driven/material-bindings.d.ts +7 -0
- package/dist/gpu-driven/material-bindings.d.ts.map +1 -0
- package/dist/gpu-driven/pbr-program.d.ts +10 -0
- package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
- package/dist/gpu-driven/prepared-draw.d.ts +2 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +169 -27
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/shadow-views.d.ts +126 -0
- package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +18 -2
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-resource.d.ts +5 -2
- package/dist/gpu-resource.d.ts.map +1 -1
- package/dist/gpu-scene-schema.d.ts +2 -8
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +14 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-texture-usage.d.ts +1 -0
- package/dist/gpu-texture-usage.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +9 -0
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +2 -0
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/frame-resources.d.ts +8 -0
- package/dist/ibl/frame-resources.d.ts.map +1 -0
- package/dist/ibl/skylight-bind-group.d.ts +3 -1
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +87 -75
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +10 -8
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +180 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instances-derived-bounds.d.ts +11 -0
- package/dist/instances-derived-bounds.d.ts.map +1 -1
- package/dist/instances.d.ts +89 -44
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +117 -9
- package/dist/internal.mjs.map +1 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/material-row.d.ts +15 -0
- package/dist/material-row.d.ts.map +1 -0
- package/dist/materials.d.ts +15 -0
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +23 -5
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/render-extent.d.ts +51 -0
- package/dist/pipeline/render-extent.d.ts.map +1 -0
- package/dist/pipeline/standard-build-context.d.ts +7 -0
- package/dist/pipeline/standard-build-context.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts +3 -2
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
- package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
- package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
- package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
- package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
- package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
- package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
- package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
- package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
- package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
- package/dist/pipeline/standard-output/graph.d.ts +15 -0
- package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
- package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
- package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
- package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
- package/dist/pipeline/standard-output/resources.d.ts +10 -0
- package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
- package/dist/pipeline/standard-output/types.d.ts +39 -0
- package/dist/pipeline/standard-output/types.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts +2 -2
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline/standard-profile.d.ts +2 -1
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +5 -2
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec-types.d.ts +4 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +1 -9
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/points-lines/standard-owner.d.ts +1 -1
- package/dist/points-lines/standard-owner.d.ts.map +1 -1
- package/dist/post-process-errors.d.ts +9 -2
- package/dist/post-process-errors.d.ts.map +1 -1
- package/dist/prepare/extended-lighting/resources.d.ts +3 -3
- package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
- package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +3 -3
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +109 -13
- 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 +41 -5
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +13 -9
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +43 -3
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +2 -10
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +14 -2
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +15 -6
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/prepared-material-bindings.d.ts +19 -0
- package/dist/record/prepared-material-bindings.d.ts.map +1 -0
- package/dist/record/recovery-pipeline.d.ts +1 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +101 -22
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts +62 -7
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -1
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +39 -8
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +1 -0
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/recovery/render-system-candidate.d.ts +10 -2
- package/dist/recovery/render-system-candidate.d.ts.map +1 -1
- package/dist/recovery/render-system-roots.d.ts +11 -0
- package/dist/recovery/render-system-roots.d.ts.map +1 -0
- package/dist/recovery/types.d.ts +76 -0
- package/dist/recovery/types.d.ts.map +1 -0
- package/dist/reflection/background.d.ts +14 -0
- package/dist/reflection/background.d.ts.map +1 -0
- package/dist/reflection/filter.d.ts.map +1 -1
- package/dist/reflection/projection.d.ts +1 -0
- package/dist/reflection/projection.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts +4 -4
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +211 -53
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts +1 -0
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +81 -6
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +15 -6
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +128 -41
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system-projections.d.ts +22 -0
- package/dist/render-system-projections.d.ts.map +1 -0
- package/dist/render-system.d.ts +27 -77
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +14 -7
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +31 -11
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/shadow-visibility.d.ts +5 -0
- package/dist/scene/shadow-visibility.d.ts.map +1 -0
- package/dist/ssao-config.d.ts +8 -6
- package/dist/ssao-config.d.ts.map +1 -1
- package/dist/ssr/admission.d.ts +70 -1
- package/dist/ssr/admission.d.ts.map +1 -1
- package/dist/ssr/compose.d.ts +13 -0
- package/dist/ssr/compose.d.ts.map +1 -0
- package/dist/ssr/errors.d.ts +35 -0
- package/dist/ssr/errors.d.ts.map +1 -1
- package/dist/ssr/graph.d.ts +60 -0
- package/dist/ssr/graph.d.ts.map +1 -0
- package/dist/ssr/history.d.ts +97 -0
- package/dist/ssr/history.d.ts.map +1 -0
- package/dist/ssr/hiz.d.ts +37 -0
- package/dist/ssr/hiz.d.ts.map +1 -0
- package/dist/ssr/inspection.d.ts +42 -0
- package/dist/ssr/inspection.d.ts.map +1 -0
- package/dist/ssr/resources.d.ts +58 -0
- package/dist/ssr/resources.d.ts.map +1 -0
- package/dist/ssr/temporal.d.ts +38 -0
- package/dist/ssr/temporal.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +32 -10
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/systems/skin-palette-types.d.ts +15 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -1
- package/dist/systems/transparent-dispatch.d.ts +9 -0
- package/dist/systems/transparent-dispatch.d.ts.map +1 -0
- package/dist/targets/material-source.d.ts +7 -0
- package/dist/targets/material-source.d.ts.map +1 -1
- package/dist/temporal/frame-coordinator.d.ts +7 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/gpu.d.ts +8 -0
- package/dist/temporal/gpu.d.ts.map +1 -1
- package/dist/temporal/history.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -6
- package/dist/temporal/inspection.d.ts.map +1 -1
- package/dist/temporal/standard-scene-data.d.ts +4 -2
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/target-coverage-attachment.d.ts +15 -0
- package/dist/temporal/target-coverage-attachment.d.ts.map +1 -0
- package/dist/temporal/temporal-view.d.ts +6 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -1
- package/dist/temporal/view.d.ts +6 -0
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +41 -1
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +3 -1
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/dist/volume/component.d.ts +1 -0
- package/dist/volume/component.d.ts.map +1 -1
- package/dist/volume/temporal.d.ts +6 -0
- package/dist/volume/temporal.d.ts.map +1 -1
- package/package.json +21 -20
- package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
- package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
- package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
- package/src/__tests__/auto-exposure.browser.test.ts +33 -0
- package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
- package/src/__tests__/capture-scene-projection.unit.test.ts +24 -0
- package/src/__tests__/detached-inspection.integration.test.ts +5 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +15 -24
- package/src/__tests__/device-loss-fanout.unit.test.ts +43 -0
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
- package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
- package/src/__tests__/dynamic-geometry-batch.unit.test.ts +157 -0
- package/src/__tests__/dynamic-geometry.unit.test.ts +36 -0
- package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +81 -0
- package/src/__tests__/factory-contract.integration.test.ts +231 -9
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
- package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
- package/src/__tests__/feature-noise.unit.test.ts +38 -0
- package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
- package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
- package/src/__tests__/frame-observation.contract.test.ts +21 -0
- package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
- package/src/__tests__/frame-targets.unit.test.ts +24 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
- package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +307 -7
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
- package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
- package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +261 -0
- package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +346 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1422 -0
- package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
- package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +1076 -106
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
- package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
- package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
- package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
- package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
- package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
- package/src/__tests__/gpu-driven-view.unit.test.ts +160 -52
- package/src/__tests__/gpu-pass-timing-browser-runner.ts +15 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +20 -2
- package/src/__tests__/gpu-resource-scope.unit.test.ts +71 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
- package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
- package/src/__tests__/gpu-scene.unit.test.ts +613 -33
- package/src/__tests__/instances-culling.integration.test.ts +36 -10
- package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
- package/src/__tests__/instances-store.unit.test.ts +242 -39
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
- package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
- package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
- package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
- package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
- package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
- package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
- package/src/__tests__/material-texture-source.unit.test.ts +87 -0
- package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
- package/src/__tests__/materials-standard-contract.unit.test.ts +57 -3
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
- package/src/__tests__/mesh-submission-lifetime.unit.test.ts +8 -0
- package/src/__tests__/morph-neutral-admission.unit.test.ts +19 -0
- package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
- package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
- package/src/__tests__/physical-clearcoat.integration.test.ts +42 -3
- package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
- package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -5
- package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
- package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +251 -9
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
- package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
- package/src/__tests__/public-surface.test-d.ts +3 -0
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
- package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +171 -0
- package/src/__tests__/reflection-probe-authoring.unit.test.ts +12 -10
- package/src/__tests__/reflection-probe-box.dawn.test.ts +71 -0
- package/src/__tests__/reflection-probe-filter.unit.test.ts +9 -0
- package/src/__tests__/reflection-probe-orientation.dawn.test.ts +294 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +5 -14
- package/src/__tests__/reflection-probe-updates.unit.test.ts +129 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +7 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +27 -1
- package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
- package/src/__tests__/render-extent.unit.test.ts +63 -0
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
- package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
- package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
- package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
- package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
- package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
- package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +915 -23
- package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
- package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
- package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
- package/src/__tests__/render-target-material-source.test-d.ts +27 -3
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +233 -9
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
- package/src/__tests__/shader-manifest-fixture.ts +45 -0
- package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
- package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
- package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +125 -14
- package/src/__tests__/specular-environment-scale.dawn.test.ts +158 -0
- package/src/__tests__/ssao-config.unit.test.ts +7 -0
- package/src/__tests__/ssao-surface.dawn.test.ts +252 -0
- package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
- package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
- package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
- package/src/__tests__/ssr-cube-silhouette.dawn.test.ts +270 -0
- package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +99 -0
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +116 -0
- package/src/__tests__/ssr-gpu-dispatch.ts +951 -0
- package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
- package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
- package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
- package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
- package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
- package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
- package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
- package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
- package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
- package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
- package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
- package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
- package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
- package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
- package/src/__tests__/ssr-reprojection-probe.ts +90 -0
- package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
- package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
- package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
- package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
- package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
- package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
- package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
- package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +84 -12
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
- package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
- package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
- package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
- package/src/__tests__/standard-output.browser.test.ts +15 -0
- package/src/__tests__/standard-output.dawn.test.ts +15 -0
- package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +275 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
- package/src/__tests__/standard-profile-oracle.unit.test.ts +49 -0
- package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
- package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
- package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
- package/src/__tests__/taa-coverage-edge.dawn.test.ts +199 -0
- package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
- package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +782 -0
- package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
- package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
- package/src/__tests__/taa-stability-feedback.ts +342 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
- package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
- package/src/__tests__/temporal-view.unit.test.ts +17 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
- package/src/__tests__/transmission-prewarm.unit.test.ts +57 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
- package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
- package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
- package/src/__tests__/visibility-extract.perf.test.ts +20 -8
- package/src/__tests__/visibility-instances.integration.test.ts +19 -7
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +62 -13
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +7 -7
- package/src/assembly/atmosphere-shader-prewarm.ts +39 -0
- package/src/assembly/device-feature-admission.ts +9 -4
- package/src/assembly/dynamic-geometry-host.ts +284 -163
- package/src/assembly/dynamic-geometry-runtime.ts +71 -0
- package/src/assembly/factory.ts +4 -0
- package/src/assembly/gpu-driven-owner.ts +29 -0
- package/src/assembly/host-contract.ts +19 -0
- package/src/assembly/material/assembly.ts +383 -1
- package/src/assembly/material/pipeline-helpers.ts +100 -0
- package/src/assembly/material-shader-policy.ts +110 -46
- package/src/assembly/recovery/device-loss-fanout.ts +5 -0
- package/src/assembly/recovery/failure-location.ts +62 -0
- package/src/assembly/recovery/recovery-attempt.ts +2 -29
- package/src/assembly/recovery/renderer-recover.ts +16 -17
- package/src/assembly/renderer-facade.ts +34 -1
- package/src/assembly/renderer-feature-inspection.ts +13 -0
- package/src/assembly/renderer-frame-transaction.ts +63 -0
- package/src/assembly/renderer-helpers.ts +26 -0
- package/src/assembly/renderer-inspection.ts +6 -0
- package/src/assembly/shader-prewarm-policy.ts +46 -1
- package/src/assembly/skin-palette-owner.ts +21 -0
- package/src/assembly/ssr-shader-prewarm.ts +41 -0
- package/src/assembly/webgpu-device-loss.ts +75 -0
- package/src/assembly/webgpu-pbr-ready.ts +232 -0
- package/src/assembly/webgpu-ready-mipmap.ts +26 -0
- package/src/assembly/webgpu-ready.ts +161 -131
- package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
- package/src/assembly/webgpu-renderer-contract.ts +69 -0
- package/src/assembly/webgpu-renderer-guards.ts +32 -0
- package/src/assembly/webgpu-renderer-observation.ts +43 -0
- package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
- package/src/assembly/webgpu-renderer.ts +744 -730
- package/src/assembly/webgpu-vertex-layouts.ts +233 -87
- package/src/capture/scene-projection.ts +37 -0
- package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
- package/src/components/__tests__/dynamic-resolution-schema.unit.test.ts +65 -0
- package/src/components/__tests__/light-radius.integration.test.ts +59 -0
- package/src/components/camera.ts +287 -7
- package/src/components/directional-light.ts +3 -3
- package/src/components/dynamic-resolution.ts +67 -0
- package/src/components/index.ts +2 -0
- package/src/components/instances.ts +45 -18
- package/src/components/light-helpers.ts +6 -1
- package/src/components/reflection-probe.ts +1 -0
- package/src/components/scene-instance.ts +2 -1
- package/src/components/screen-space-reflection.ts +21 -0
- package/src/components/skylight.ts +4 -1
- package/src/components/sprite-animation.ts +2 -2
- package/src/components/sprite-instances.ts +1 -1
- package/src/device/device-scope.ts +13 -7
- package/src/device/gpu-residency.ts +45 -42
- package/src/dynamic-geometry.ts +13 -8
- package/src/environment/background.ts +281 -0
- package/src/environment/ibl.ts +211 -0
- package/src/environment/storage.ts +63 -0
- package/src/errors/gpu-driven.ts +49 -8
- package/src/errors/render.ts +91 -3
- package/src/extract/camera.ts +37 -1
- package/src/extract/contracts.ts +10 -0
- package/src/extract/gpu-driven.ts +240 -10
- package/src/features/host.ts +237 -19
- package/src/features/noise-texture.ts +91 -0
- package/src/features/plan.ts +553 -24
- package/src/features/prepared-gpu-work.ts +631 -49
- package/src/features/prepared-graphics-store.ts +31 -0
- package/src/features/prepared-graphics.ts +5 -0
- package/src/features/render-graph-compute.ts +41 -8
- package/src/features/render-graph-contribution.ts +141 -3
- package/src/features/render-graph-raster.ts +143 -30
- package/src/features/types.ts +11 -0
- package/src/fullscreen-post-process-pass.ts +3 -0
- package/src/gpu-driven/batch-topology.ts +452 -108
- package/src/gpu-driven/material-artifacts.ts +179 -0
- package/src/gpu-driven/material-bindings.ts +41 -0
- package/src/gpu-driven/pbr-program.ts +31 -0
- package/src/gpu-driven/prepared-draw.ts +42 -6
- package/src/gpu-driven/production-raster.ts +2806 -716
- package/src/gpu-driven/shadow-views.ts +539 -0
- package/src/gpu-driven/view-gpu.ts +188 -41
- package/src/gpu-resource.ts +21 -2
- package/src/gpu-scene-schema.ts +61 -11
- package/src/gpu-scene.ts +197 -99
- package/src/gpu-texture-usage.ts +1 -0
- package/src/hdrp-buffers.ts +141 -36
- package/src/ibl/IblPipelineCache.ts +5 -0
- package/src/ibl/frame-resources.ts +38 -0
- package/src/ibl/skylight-bind-group.ts +32 -21
- package/src/index.ts +194 -75
- package/src/inspection-types.ts +207 -1
- package/src/instances-derived-bounds.ts +258 -34
- package/src/instances.ts +459 -150
- package/src/internal.ts +22 -0
- package/src/lifecycle.ts +2 -0
- package/src/material-row.ts +194 -0
- package/src/materials.ts +44 -8
- package/src/pbr-pipeline.ts +172 -19
- package/src/pipeline/render-extent.ts +111 -0
- package/src/pipeline/standard-build-context.ts +7 -0
- package/src/pipeline/standard-forward-lane.ts +74 -29
- package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
- package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
- package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
- package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
- package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
- package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
- package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
- package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
- package/src/pipeline/standard-output/color-transform.ts +124 -0
- package/src/pipeline/standard-output/graph.ts +139 -0
- package/src/pipeline/standard-output/lut-admission.ts +121 -0
- package/src/pipeline/standard-output/lut-gpu.ts +399 -0
- package/src/pipeline/standard-output/lut-state.ts +176 -0
- package/src/pipeline/standard-output/resources.ts +121 -0
- package/src/pipeline/standard-output/types.ts +58 -0
- package/src/pipeline/standard-pipeline.ts +232 -70
- package/src/pipeline/standard-post.ts +190 -27
- package/src/pipeline/standard-profile.ts +2 -1
- package/src/pipeline-builder.ts +28 -9
- package/src/pipeline-spec-types.ts +4 -0
- package/src/pipeline-spec.ts +37 -29
- package/src/plugin.ts +4 -0
- package/src/points-lines/standard-owner.ts +6 -14
- package/src/post-process-errors.ts +26 -18
- package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +2 -2
- package/src/prepare/extended-lighting/resources.ts +3 -3
- package/src/prepare/prepared-graphics-resolver.ts +9 -2
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +68 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +45 -0
- package/src/record/__tests__/material-slot-plan.unit.test.ts +57 -0
- package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
- package/src/record/__tests__/recovery-pipeline.unit.test.ts +20 -1
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +41 -6
- package/src/record/__tests__/temporal-payload.unit.test.ts +2 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
- package/src/record/dynamic-geometry-consumption.ts +59 -0
- package/src/record/frame-lighting.ts +15 -12
- package/src/record/frame-snapshot.ts +146 -34
- package/src/record/frame-targets.ts +9 -0
- package/src/record/frame.ts +838 -170
- package/src/record/main-pass-geometry.ts +209 -103
- package/src/record/main-pass-material.ts +157 -40
- package/src/record/main-pass-sprite-draws.ts +16 -107
- package/src/record/main-pass.ts +141 -12
- package/src/record/material-uniforms.ts +1 -1
- package/src/record/mesh-ssbo.ts +59 -15
- package/src/record/prepared-material-bindings.ts +238 -0
- package/src/record/recovery-pipeline.ts +69 -90
- package/src/record/render-context.ts +123 -24
- package/src/record/shadow-pass.ts +1389 -230
- package/src/record/skybox-post-pass.ts +14 -3
- package/src/record/typed-frame-graph.ts +1064 -47
- package/src/record/view-ubo.ts +12 -1
- package/src/recovery/render-system-candidate.ts +135 -68
- package/src/recovery/render-system-roots.ts +113 -0
- package/src/recovery/types.ts +77 -0
- package/src/reflection/background.ts +151 -0
- package/src/reflection/filter.ts +3 -0
- package/src/reflection/projection.ts +16 -6
- package/src/reflection/record-owner.ts +308 -140
- package/src/render-contract.ts +237 -49
- package/src/render-graph-primitives.ts +34 -5
- package/src/render-pipeline.ts +90 -2
- package/src/render-system-extract-tail.ts +431 -162
- package/src/render-system-extract.ts +478 -119
- package/src/render-system-projections.ts +241 -0
- package/src/render-system.ts +715 -828
- package/src/scene/render-scene-types.ts +13 -4
- package/src/scene/render-scene.ts +577 -355
- package/src/scene/shadow-visibility.ts +21 -0
- package/src/ssao-config.ts +25 -8
- package/src/ssr/admission.ts +380 -14
- package/src/ssr/compose.ts +144 -0
- package/src/ssr/errors.ts +48 -0
- package/src/ssr/graph.ts +797 -0
- package/src/ssr/history.ts +436 -0
- package/src/ssr/hiz.ts +124 -0
- package/src/ssr/inspection.ts +124 -0
- package/src/ssr/resources.ts +202 -0
- package/src/ssr/temporal.ts +164 -0
- package/src/systems/skin-palette-allocator.ts +495 -148
- package/src/systems/skin-palette-types.ts +17 -0
- package/src/systems/transparent-dispatch.ts +90 -0
- package/src/targets/material-source.ts +34 -0
- package/src/temporal/coverage.ts +1 -1
- package/src/temporal/frame-coordinator.ts +23 -2
- package/src/temporal/gpu.ts +79 -12
- package/src/temporal/history.ts +3 -1
- package/src/temporal/inspection.ts +2 -1
- package/src/temporal/standard-scene-data.ts +10 -2
- package/src/temporal/target-coverage-attachment.ts +72 -0
- package/src/temporal/temporal-view.ts +11 -2
- package/src/temporal/view.ts +12 -2
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +219 -139
- package/src/typed-render-graph-primitives.ts +304 -74
- package/src/typed-shadow-passes.ts +122 -12
- package/src/volume/component.ts +1 -0
- package/src/volume/passes.ts +3 -3
- package/src/volume/temporal.ts +10 -0
- package/dist/chunk-GE3SDD72.mjs.map +0 -1
- package/dist/chunk-GF523LHF.mjs.map +0 -1
- package/dist/chunk-IQMKJLNU.mjs.map +0 -1
- package/dist/chunk-J52NMQKR.mjs.map +0 -1
- package/dist/chunk-J6KACNOH.mjs.map +0 -1
- package/dist/chunk-JAASCMXA.mjs.map +0 -1
- package/dist/chunk-MBU4ZVE7.mjs.map +0 -1
- package/dist/chunk-MYJ5RPJO.mjs.map +0 -1
- package/dist/chunk-RBDBZ5R7.mjs.map +0 -1
- package/dist/chunk-VSL23LZE.mjs.map +0 -1
- package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { transmissionBackdropAvailable } from '../assembly/device-feature-admission';
|
|
1
2
|
import { getOrCreateIblCache } from '../ibl/IblPipelineCache';
|
|
2
3
|
import type { _InternalRenderPipelineContext } from './render-context';
|
|
3
4
|
// @forgeax/engine-runtime - RenderSystem record stage: main-pass-material.
|
|
@@ -23,6 +24,7 @@ import {
|
|
|
23
24
|
DEFAULT_MSDF_TEXT_PARAM_SCHEMA,
|
|
24
25
|
DEFAULT_SPRITE_PARAM_SCHEMA,
|
|
25
26
|
DEFAULT_UNLIT_PARAM_SCHEMA,
|
|
27
|
+
STANDARD_PHYSICAL_TEXTURE_FIELDS,
|
|
26
28
|
STANDARD_PIPELINE_PARAM_SCHEMA,
|
|
27
29
|
} from '@forgeax/engine-shader';
|
|
28
30
|
import type {
|
|
@@ -51,7 +53,7 @@ import {
|
|
|
51
53
|
physicalTextureFields,
|
|
52
54
|
} from '../pbr-pipeline';
|
|
53
55
|
import { deriveTextureExtent } from '../render-data';
|
|
54
|
-
import type { MaterialSnapshot } from '../render-system-extract';
|
|
56
|
+
import type { MaterialSnapshot, SkylightSnapshot } from '../render-system-extract';
|
|
55
57
|
import type { RenderTargetTextureSource } from '../targets/contracts';
|
|
56
58
|
import {
|
|
57
59
|
type RenderTargetMaterialSourceBinding,
|
|
@@ -548,6 +550,44 @@ function materialUboFloatView(payload: MaterialUboPayload): Float32Array {
|
|
|
548
550
|
: new Float32Array(payload);
|
|
549
551
|
}
|
|
550
552
|
|
|
553
|
+
function materialUboDataView(payload: MaterialUboPayload): DataView {
|
|
554
|
+
if (payload instanceof Float32Array || payload instanceof Uint8Array) {
|
|
555
|
+
return new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
556
|
+
}
|
|
557
|
+
return new DataView(payload);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/** Write one schema value with the scalar type's actual WGSL bit encoding. */
|
|
561
|
+
function writeNumericParamValue(
|
|
562
|
+
view: DataView,
|
|
563
|
+
entry: { readonly offset: number; readonly size: number; readonly type: string },
|
|
564
|
+
value: number | readonly number[],
|
|
565
|
+
): void {
|
|
566
|
+
const values = typeof value === 'number' ? [value] : value;
|
|
567
|
+
const width = entry.size / 4;
|
|
568
|
+
const writeCount = Math.min(values.length, width);
|
|
569
|
+
for (let index = 0; index < writeCount; index += 1) {
|
|
570
|
+
const component = values[index];
|
|
571
|
+
if (typeof component !== 'number') continue;
|
|
572
|
+
const byteOffset = entry.offset + index * 4;
|
|
573
|
+
switch (entry.type) {
|
|
574
|
+
case 'i32':
|
|
575
|
+
view.setInt32(byteOffset, component, true);
|
|
576
|
+
break;
|
|
577
|
+
case 'u32':
|
|
578
|
+
view.setUint32(byteOffset, component, true);
|
|
579
|
+
break;
|
|
580
|
+
case 'f32':
|
|
581
|
+
case 'vec2':
|
|
582
|
+
case 'vec3':
|
|
583
|
+
case 'vec4':
|
|
584
|
+
case 'color':
|
|
585
|
+
view.setFloat32(byteOffset, component, true);
|
|
586
|
+
break;
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
|
|
551
591
|
export function applyMaterialTextureUvScales(
|
|
552
592
|
payload: MaterialUboPayload,
|
|
553
593
|
material: MaterialSnapshot,
|
|
@@ -745,7 +785,7 @@ export function writePbrMaterialUboPayload(
|
|
|
745
785
|
);
|
|
746
786
|
}
|
|
747
787
|
buf.fill(0);
|
|
748
|
-
const
|
|
788
|
+
const dataView = materialUboDataView(buf);
|
|
749
789
|
const schema =
|
|
750
790
|
material.materialParamSchema === undefined || material.materialParamSchema.length === 0
|
|
751
791
|
? STANDARD_PIPELINE_PARAM_SCHEMA
|
|
@@ -782,15 +822,10 @@ export function writePbrMaterialUboPayload(
|
|
|
782
822
|
const value =
|
|
783
823
|
snapshot?.[entry.name] ??
|
|
784
824
|
fallback(entry.name, schema.find((item) => item.name === entry.name) ?? entry);
|
|
785
|
-
const offset = entry.offset / 4;
|
|
786
|
-
const width = entry.size / 4;
|
|
787
825
|
if (typeof value === 'number') {
|
|
788
|
-
|
|
826
|
+
writeNumericParamValue(dataView, entry, value);
|
|
789
827
|
} else if (Array.isArray(value)) {
|
|
790
|
-
|
|
791
|
-
const component = value[index];
|
|
792
|
-
if (typeof component === 'number') f32[offset + index] = component;
|
|
793
|
-
}
|
|
828
|
+
writeNumericParamValue(dataView, entry, value);
|
|
794
829
|
}
|
|
795
830
|
}
|
|
796
831
|
}
|
|
@@ -839,28 +874,18 @@ export function applyParamSnapshotToUbo(
|
|
|
839
874
|
): void {
|
|
840
875
|
if (paramSchema === undefined) return;
|
|
841
876
|
if (paramSnapshot === undefined) return;
|
|
842
|
-
const
|
|
877
|
+
const dataView = materialUboDataView(payload);
|
|
843
878
|
const { uboLayout } = derivedParamSchema(paramSchema);
|
|
844
879
|
for (const entry of uboLayout.entries) {
|
|
845
880
|
const value = paramSnapshot[entry.name];
|
|
846
881
|
if (value === undefined) continue;
|
|
847
|
-
const f32Offset = entry.offset / 4;
|
|
848
|
-
const f32Width = entry.size / 4;
|
|
849
882
|
if (typeof value === 'number') {
|
|
850
|
-
|
|
851
|
-
// as a JS number; the GPU side reads the four bytes as the declared
|
|
852
|
-
// type, so an f32 write is the correct bit pattern when the caller
|
|
853
|
-
// already produced an integer value.)
|
|
854
|
-
if (f32Width >= 1) f32[f32Offset] = value;
|
|
883
|
+
writeNumericParamValue(dataView, entry, value);
|
|
855
884
|
continue;
|
|
856
885
|
}
|
|
857
886
|
if (Array.isArray(value)) {
|
|
858
887
|
const arr = value as readonly number[];
|
|
859
|
-
|
|
860
|
-
for (let i = 0; i < writeCount; i++) {
|
|
861
|
-
const v = arr[i];
|
|
862
|
-
if (typeof v === 'number') f32[f32Offset + i] = v;
|
|
863
|
-
}
|
|
888
|
+
writeNumericParamValue(dataView, entry, arr);
|
|
864
889
|
}
|
|
865
890
|
// string values (texture GUIDs) belong to texture bindings, not the
|
|
866
891
|
// UBO; derive's uboLayout.entries already strips non-numeric schema
|
|
@@ -869,6 +894,31 @@ export function applyParamSnapshotToUbo(
|
|
|
869
894
|
}
|
|
870
895
|
}
|
|
871
896
|
|
|
897
|
+
/**
|
|
898
|
+
* Seed a schema-driven UBO with the defaults declared by its numeric contract.
|
|
899
|
+
*
|
|
900
|
+
* Prepared graphics (VFX and other feature-owned materials) do not pass
|
|
901
|
+
* through the extracted `MaterialSnapshot` writer, so their payload starts as
|
|
902
|
+
* zeroed storage. Applying the schema defaults first keeps that path
|
|
903
|
+
* byte-compatible with the ordinary material writer while preserving the
|
|
904
|
+
* snapshot writer's intentional overlay semantics.
|
|
905
|
+
*/
|
|
906
|
+
export function applyParamSchemaDefaultsToUbo(
|
|
907
|
+
payload: MaterialUboPayload,
|
|
908
|
+
paramSchema: readonly ParamSchemaEntry[] | undefined,
|
|
909
|
+
): void {
|
|
910
|
+
if (paramSchema === undefined) return;
|
|
911
|
+
const defaults: Record<string, number | readonly number[]> = {};
|
|
912
|
+
for (const entry of derivedParamSchema(paramSchema).uboLayout.entries) {
|
|
913
|
+
const schemaEntry = paramSchema.find((candidate) => candidate.name === entry.name);
|
|
914
|
+
const value = schemaEntry?.default;
|
|
915
|
+
if (typeof value === 'number' || Array.isArray(value)) {
|
|
916
|
+
defaults[entry.name] = value as number | readonly number[];
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
applyParamSnapshotToUbo(payload, paramSchema, defaults);
|
|
920
|
+
}
|
|
921
|
+
|
|
872
922
|
/**
|
|
873
923
|
* feat-20260704 M3/w19: shared per-submesh material bind-group assembly, hoisted
|
|
874
924
|
* from the `buildPerSubmeshMaterialBg` closure inside recordMainPass so both the
|
|
@@ -898,10 +948,12 @@ export interface PerSubmeshMaterialBgDeps {
|
|
|
898
948
|
readonly resolveReflectionProbeResources?: (
|
|
899
949
|
materialWorld: World,
|
|
900
950
|
entityKey: number,
|
|
901
|
-
) => SkylightBindGroupResources | undefined;
|
|
951
|
+
) => { readonly resources: SkylightBindGroupResources; readonly probeIndex: number } | undefined;
|
|
902
952
|
readonly materialBgShared: Map<string, WeakMap<object, unknown>>;
|
|
903
953
|
/** Cross-frame final BG reuse keyed by the stable source material handle. */
|
|
904
954
|
readonly materialBgAssemblyCache: Map<string, MaterialBgAssemblyCacheEntry>;
|
|
955
|
+
/** Producer-owned numeric scene rows consumed by scene-index PBR draws. */
|
|
956
|
+
readonly sceneMaterialBuffer?: Buffer;
|
|
905
957
|
/** Active transmission backdrop; undefined/null means layout placeholder. */
|
|
906
958
|
readonly transmissionBackdropView?: TextureView | null;
|
|
907
959
|
readonly bindGroupCounts: BindGroupCounts;
|
|
@@ -956,6 +1008,7 @@ export function isMaterialBgAssemblyCacheHit(
|
|
|
956
1008
|
skylightResources: SkylightBindGroupResources,
|
|
957
1009
|
materialResourceEpoch: number,
|
|
958
1010
|
transmissionBackdropView?: TextureView | null,
|
|
1011
|
+
sceneMaterialBuffer?: Buffer,
|
|
959
1012
|
): cached is MaterialBgAssemblyCacheEntry {
|
|
960
1013
|
if (transmissionBackdropView != null) return false;
|
|
961
1014
|
return (
|
|
@@ -963,9 +1016,11 @@ export function isMaterialBgAssemblyCacheHit(
|
|
|
963
1016
|
cached.materialResourceEpoch === materialResourceEpoch &&
|
|
964
1017
|
cached.materialBgl === materialBgl &&
|
|
965
1018
|
cached.materialBuffer === materialBuffer &&
|
|
1019
|
+
cached.sceneMaterialBuffer === sceneMaterialBuffer &&
|
|
966
1020
|
cached.skylightResources.irradianceView === skylightResources.irradianceView &&
|
|
967
1021
|
cached.skylightResources.irradianceSampler === skylightResources.irradianceSampler &&
|
|
968
1022
|
cached.skylightResources.prefilterView === skylightResources.prefilterView &&
|
|
1023
|
+
cached.skylightResources.skylightPrefilterView === skylightResources.skylightPrefilterView &&
|
|
969
1024
|
cached.skylightResources.prefilterSampler === skylightResources.prefilterSampler &&
|
|
970
1025
|
cached.skylightResources.brdfLutView === skylightResources.brdfLutView &&
|
|
971
1026
|
cached.skylightResources.brdfLutSampler === skylightResources.brdfLutSampler &&
|
|
@@ -995,13 +1050,13 @@ export function buildPerSubmeshMaterialBg(
|
|
|
995
1050
|
bindGroupCounts,
|
|
996
1051
|
frameState,
|
|
997
1052
|
} = deps;
|
|
998
|
-
const
|
|
999
|
-
|
|
1053
|
+
const selectedProbe = resolveReflectionProbeResources?.(materialWorld, entityKey);
|
|
1054
|
+
const effectiveSkylightResources = selectedProbe?.resources ?? skylightResources;
|
|
1000
1055
|
const smMaterialHandle = submeshMaterial.materialHandle;
|
|
1001
1056
|
const materialCacheKey =
|
|
1002
1057
|
smMaterialHandle === undefined
|
|
1003
1058
|
? undefined
|
|
1004
|
-
: `${materialWorld.identity}:${smMaterialHandle}:${materialShaderId ?? ''}`;
|
|
1059
|
+
: `${materialWorld.identity}:${smMaterialHandle}:${materialShaderId ?? ''}:${selectedProbe?.probeIndex ?? 'sky'}`;
|
|
1005
1060
|
const smHasVideoFields = (submeshMaterial.videoTextureFields?.size ?? 0) > 0;
|
|
1006
1061
|
const smShaderId = materialShaderId;
|
|
1007
1062
|
// The cooked shader schema owns the resource ABI. A material snapshot may
|
|
@@ -1028,6 +1083,9 @@ export function buildPerSubmeshMaterialBg(
|
|
|
1028
1083
|
? BUILTIN_USER_REGION_TEXTURE_FIELDS
|
|
1029
1084
|
: userRegionTextureFieldOrder(smSchema).filter((field) => !physicalFields.includes(field));
|
|
1030
1085
|
const hasActiveTransmissionBackdrop = transmissionBackdropView != null;
|
|
1086
|
+
const sceneMaterialBuffer = runtime.device.caps.storageBuffer
|
|
1087
|
+
? (deps.sceneMaterialBuffer ?? pipelineState.meshStorageBuffer.buffer)
|
|
1088
|
+
: undefined;
|
|
1031
1089
|
const diagnosticsEnabled = materialDiagnosticsEnabled();
|
|
1032
1090
|
if (smMaterialHandle !== undefined && !smHasVideoFields && !hasActiveTransmissionBackdrop) {
|
|
1033
1091
|
const cached =
|
|
@@ -1041,6 +1099,7 @@ export function buildPerSubmeshMaterialBg(
|
|
|
1041
1099
|
effectiveSkylightResources,
|
|
1042
1100
|
store.materialResourceEpoch,
|
|
1043
1101
|
transmissionBackdropView,
|
|
1102
|
+
sceneMaterialBuffer,
|
|
1044
1103
|
)
|
|
1045
1104
|
) {
|
|
1046
1105
|
if (diagnosticsEnabled) {
|
|
@@ -1051,31 +1110,34 @@ export function buildPerSubmeshMaterialBg(
|
|
|
1051
1110
|
[
|
|
1052
1111
|
{
|
|
1053
1112
|
binding: 1 + smUserRegionFields.length * 2,
|
|
1054
|
-
resource: { kind: 'textureView', value:
|
|
1113
|
+
resource: { kind: 'textureView', value: effectiveSkylightResources.irradianceView },
|
|
1055
1114
|
},
|
|
1056
1115
|
{
|
|
1057
1116
|
binding: 2 + smUserRegionFields.length * 2,
|
|
1058
|
-
resource: { kind: 'sampler', value:
|
|
1117
|
+
resource: { kind: 'sampler', value: effectiveSkylightResources.irradianceSampler },
|
|
1059
1118
|
},
|
|
1060
1119
|
{
|
|
1061
1120
|
binding: 3 + smUserRegionFields.length * 2,
|
|
1062
|
-
resource: { kind: 'textureView', value:
|
|
1121
|
+
resource: { kind: 'textureView', value: effectiveSkylightResources.prefilterView },
|
|
1063
1122
|
},
|
|
1064
1123
|
{
|
|
1065
1124
|
binding: 4 + smUserRegionFields.length * 2,
|
|
1066
|
-
resource: { kind: 'sampler', value:
|
|
1125
|
+
resource: { kind: 'sampler', value: effectiveSkylightResources.prefilterSampler },
|
|
1067
1126
|
},
|
|
1068
1127
|
{
|
|
1069
1128
|
binding: 5 + smUserRegionFields.length * 2,
|
|
1070
|
-
resource: { kind: 'textureView', value:
|
|
1129
|
+
resource: { kind: 'textureView', value: effectiveSkylightResources.brdfLutView },
|
|
1071
1130
|
},
|
|
1072
1131
|
{
|
|
1073
1132
|
binding: 6 + smUserRegionFields.length * 2,
|
|
1074
|
-
resource: { kind: 'sampler', value:
|
|
1133
|
+
resource: { kind: 'sampler', value: effectiveSkylightResources.brdfLutSampler },
|
|
1075
1134
|
},
|
|
1076
1135
|
{
|
|
1077
1136
|
binding: 7 + smUserRegionFields.length * 2,
|
|
1078
|
-
resource: {
|
|
1137
|
+
resource: {
|
|
1138
|
+
kind: 'buffer',
|
|
1139
|
+
value: { buffer: effectiveSkylightResources.intensityBuffer },
|
|
1140
|
+
},
|
|
1079
1141
|
},
|
|
1080
1142
|
],
|
|
1081
1143
|
1 + smUserRegionFields.length * 2,
|
|
@@ -1194,7 +1256,9 @@ export function buildPerSubmeshMaterialBg(
|
|
|
1194
1256
|
}
|
|
1195
1257
|
}
|
|
1196
1258
|
physicalTextureInjections.push({
|
|
1197
|
-
slot
|
|
1259
|
+
slot: STANDARD_PHYSICAL_TEXTURE_FIELDS.indexOf(
|
|
1260
|
+
field as (typeof STANDARD_PHYSICAL_TEXTURE_FIELDS)[number],
|
|
1261
|
+
),
|
|
1198
1262
|
sampler: smSamplerForField(field),
|
|
1199
1263
|
view,
|
|
1200
1264
|
});
|
|
@@ -1210,12 +1274,33 @@ export function buildPerSubmeshMaterialBg(
|
|
|
1210
1274
|
const smMergedEntries = assembleMaterialWithSkylightEntries(
|
|
1211
1275
|
smBaseEntries,
|
|
1212
1276
|
effectiveSkylightResources,
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1277
|
+
transmissionBackdropAvailable(runtime.device.limits.maxSampledTexturesPerShaderStage)
|
|
1278
|
+
? ({
|
|
1279
|
+
sampler: transmissionSampler,
|
|
1280
|
+
...(transmissionBackdropView === undefined
|
|
1281
|
+
? {}
|
|
1282
|
+
: { backdropView: transmissionBackdropView }),
|
|
1283
|
+
} satisfies TransmissionBindGroupResources)
|
|
1284
|
+
: null,
|
|
1217
1285
|
physicalTextureInjections,
|
|
1218
1286
|
);
|
|
1287
|
+
// Storage-capable devices share one Standard material BGL with the
|
|
1288
|
+
// scene-index GPU lane. Even direct draws need a complete entry for
|
|
1289
|
+
// binding(46), although their shader does not read the scene table. Reuse
|
|
1290
|
+
// the storage-backed mesh table as a neutral placeholder until a
|
|
1291
|
+
// producer-owned GPU scene table is available; GPU-driven draws replace it
|
|
1292
|
+
// with `deps.sceneMaterialBuffer`.
|
|
1293
|
+
if (runtime.device.caps.storageBuffer) {
|
|
1294
|
+
smMergedEntries.push({
|
|
1295
|
+
binding: 46,
|
|
1296
|
+
resource: {
|
|
1297
|
+
kind: 'buffer' as const,
|
|
1298
|
+
value: {
|
|
1299
|
+
buffer: deps.sceneMaterialBuffer ?? pipelineState.meshStorageBuffer.buffer,
|
|
1300
|
+
},
|
|
1301
|
+
},
|
|
1302
|
+
});
|
|
1303
|
+
}
|
|
1219
1304
|
const createBindGroup = (): BindGroup => {
|
|
1220
1305
|
const result = runtime.device.createBindGroup({
|
|
1221
1306
|
label: 'pbr-material-skylight-bg',
|
|
@@ -1291,6 +1376,7 @@ export function buildPerSubmeshMaterialBg(
|
|
|
1291
1376
|
materialResourceEpoch: store.materialResourceEpoch,
|
|
1292
1377
|
materialBgl: smMaterialBgl,
|
|
1293
1378
|
materialBuffer: pipelineState.materialUniformBuffer.buffer,
|
|
1379
|
+
...(sceneMaterialBuffer === undefined ? {} : { sceneMaterialBuffer }),
|
|
1294
1380
|
skylightResources: effectiveSkylightResources,
|
|
1295
1381
|
bindGroup: smBindGroup,
|
|
1296
1382
|
});
|
|
@@ -1302,8 +1388,21 @@ export function buildPerSubmeshMaterialBg(
|
|
|
1302
1388
|
const ZERO_SKYLIGHT_PAYLOAD = new Float32Array([0, 0, 0, 0, 0, 0, 0, 1]);
|
|
1303
1389
|
|
|
1304
1390
|
/** The same scene resources back material bindings in depth and color passes. */
|
|
1305
|
-
|
|
1306
|
-
|
|
1391
|
+
/**
|
|
1392
|
+
* Resolve the renderer-owned Skylight bundle for both ordinary geometry and
|
|
1393
|
+
* prepared RenderFeature materials. Feature preparation runs before the
|
|
1394
|
+
* main pass is encoded, so it cannot rely on the geometry pass to initialize
|
|
1395
|
+
* the intensity buffer or to select the current IBL views. Keeping this
|
|
1396
|
+
* small argument-based helper as the single resolver makes the two paths use
|
|
1397
|
+
* identical resources while retaining the existing frame-local write.
|
|
1398
|
+
*/
|
|
1399
|
+
export function resolveMaterialSkylight(
|
|
1400
|
+
runtime: Pick<RenderSystemRuntime, 'device' | 'deviceScope'>,
|
|
1401
|
+
pipelineState: Pick<PipelineState, 'skylightFallback'>,
|
|
1402
|
+
skylight: SkylightSnapshot | undefined,
|
|
1403
|
+
skylightCount: number,
|
|
1404
|
+
environmentIbl?: _InternalRenderPipelineContext['environmentIbl'],
|
|
1405
|
+
) {
|
|
1307
1406
|
const skylightFallback = pipelineState.skylightFallback;
|
|
1308
1407
|
if (skylightFallback === null) {
|
|
1309
1408
|
throw new RhiError({
|
|
@@ -1356,6 +1455,13 @@ export function prepareMaterialSkylight(c: _InternalRenderPipelineContext) {
|
|
|
1356
1455
|
};
|
|
1357
1456
|
}
|
|
1358
1457
|
}
|
|
1458
|
+
if (environmentIbl !== undefined && skylight !== undefined && skylight.equirectHandle === 0) {
|
|
1459
|
+
activeViews = {
|
|
1460
|
+
irr: environmentIbl.irradiance,
|
|
1461
|
+
pref: environmentIbl.prefilter,
|
|
1462
|
+
brdf: activeViews?.brdf ?? skylightFallback.brdfLutView,
|
|
1463
|
+
};
|
|
1464
|
+
}
|
|
1359
1465
|
const skylightResources =
|
|
1360
1466
|
activeViews !== undefined
|
|
1361
1467
|
? {
|
|
@@ -1378,3 +1484,14 @@ export function prepareMaterialSkylight(c: _InternalRenderPipelineContext) {
|
|
|
1378
1484
|
};
|
|
1379
1485
|
return { skylightResources, activeViews };
|
|
1380
1486
|
}
|
|
1487
|
+
|
|
1488
|
+
/** The same scene resources back material bindings in depth and color passes. */
|
|
1489
|
+
export function prepareMaterialSkylight(c: _InternalRenderPipelineContext) {
|
|
1490
|
+
return resolveMaterialSkylight(
|
|
1491
|
+
c.runtime,
|
|
1492
|
+
c.pipelineState,
|
|
1493
|
+
c.skylight,
|
|
1494
|
+
c.skylightCount,
|
|
1495
|
+
c.environmentIbl,
|
|
1496
|
+
);
|
|
1497
|
+
}
|
|
@@ -5,24 +5,18 @@
|
|
|
5
5
|
import type { World } from '@forgeax/engine-ecs';
|
|
6
6
|
import {
|
|
7
7
|
type BindGroup,
|
|
8
|
-
type BindGroupEntry,
|
|
9
8
|
type Buffer,
|
|
10
9
|
type RenderPipeline,
|
|
11
10
|
RhiError,
|
|
12
11
|
type RhiRenderPassEncoder,
|
|
13
|
-
type TextureView,
|
|
14
12
|
} from '@forgeax/engine-rhi';
|
|
15
|
-
import type {
|
|
13
|
+
import type { MaterialRenderState } from '@forgeax/engine-types';
|
|
16
14
|
import { GpuBuffer } from '../gpu-resource';
|
|
17
15
|
import {
|
|
18
16
|
GPU_BUFFER_USAGE_COPY_DST,
|
|
19
17
|
GPU_BUFFER_USAGE_STORAGE,
|
|
20
18
|
GPU_BUFFER_USAGE_UNIFORM,
|
|
21
19
|
} from '../gpu-usage';
|
|
22
|
-
import {
|
|
23
|
-
assembleMaterialWithSkylightEntries,
|
|
24
|
-
type SkylightBindGroupResources,
|
|
25
|
-
} from '../ibl/skylight-bind-group';
|
|
26
20
|
import type { InstanceBufferCacheEntry } from '../instance-buffer-cache';
|
|
27
21
|
import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from '../materials';
|
|
28
22
|
import { SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET } from '../pbr-pipeline';
|
|
@@ -35,67 +29,15 @@ import type {
|
|
|
35
29
|
import { worldEntityKey } from './frame-snapshot';
|
|
36
30
|
import { recordGeometryDraws, resolveGeometryInstancesBindGroup } from './main-pass-geometry';
|
|
37
31
|
import {
|
|
38
|
-
BUILTIN_USER_REGION_TEXTURE_FIELDS,
|
|
39
|
-
defaultViewForUserRegionField,
|
|
40
|
-
residentTextureView,
|
|
41
|
-
} from './main-pass-material';
|
|
42
|
-
import {
|
|
43
|
-
extractEntryResourceHandle,
|
|
44
|
-
getOrCreatePerEntity,
|
|
45
32
|
MAX_UNIFORM_INSTANCES,
|
|
46
33
|
MESH_PER_ENTITY_STRIDE,
|
|
47
34
|
packInstanceStorageBuffer,
|
|
48
35
|
} from './mesh-ssbo';
|
|
49
36
|
import type { _InternalRenderPipelineContext } from './render-context';
|
|
50
|
-
import { MATERIAL_PER_ENTITY_STRIDE
|
|
37
|
+
import { MATERIAL_PER_ENTITY_STRIDE } from './render-context';
|
|
51
38
|
|
|
52
39
|
export type { SpriteInstancesSnapshot };
|
|
53
40
|
|
|
54
|
-
/**
|
|
55
|
-
* Build the sprite material's Standard user-region from the shared field-order
|
|
56
|
-
* owner. The sprite shader uses the same Standard material bind-group layout;
|
|
57
|
-
* keeping this projection derived from the shared list prevents IBL injection
|
|
58
|
-
* from moving ahead of newly added material texture pairs.
|
|
59
|
-
*/
|
|
60
|
-
export function buildSpritePassBaseMaterialEntries(
|
|
61
|
-
pipelineState: _InternalRenderPipelineContext['pipelineState'],
|
|
62
|
-
spriteTexView: TextureView,
|
|
63
|
-
): BindGroupEntry[] {
|
|
64
|
-
const entries: BindGroupEntry[] = [
|
|
65
|
-
{
|
|
66
|
-
binding: 0,
|
|
67
|
-
resource: {
|
|
68
|
-
kind: 'buffer' as const,
|
|
69
|
-
value: {
|
|
70
|
-
buffer: pipelineState.materialUniformBuffer.buffer,
|
|
71
|
-
offset: 0,
|
|
72
|
-
size: STANDARD_PBR_UBO_SIZE,
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
];
|
|
77
|
-
for (const [index, field] of BUILTIN_USER_REGION_TEXTURE_FIELDS.entries()) {
|
|
78
|
-
const view =
|
|
79
|
-
field === 'baseColorTexture'
|
|
80
|
-
? spriteTexView
|
|
81
|
-
: defaultViewForUserRegionField(field, pipelineState);
|
|
82
|
-
entries.push(
|
|
83
|
-
{
|
|
84
|
-
binding: 1 + index * 2,
|
|
85
|
-
resource: {
|
|
86
|
-
kind: 'sampler' as const,
|
|
87
|
-
value: index === 0 ? pipelineState.nearestSampler : pipelineState.defaultSampler,
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
binding: 2 + index * 2,
|
|
92
|
-
resource: { kind: 'textureView' as const, value: view },
|
|
93
|
-
},
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
return entries;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
41
|
/**
|
|
100
42
|
* Build the interleaved sprite instance payload consumed by this record owner.
|
|
101
43
|
* The extract stage validates the two packed arrays before they reach this
|
|
@@ -204,7 +146,6 @@ export function recordSpritePass(
|
|
|
204
146
|
materialWorld: World,
|
|
205
147
|
materialShaderId?: string,
|
|
206
148
|
) => BindGroup,
|
|
207
|
-
skylightResources: SkylightBindGroupResources,
|
|
208
149
|
graphPass?: RhiRenderPassEncoder,
|
|
209
150
|
selectedDispatch?: readonly DispatchEntry[],
|
|
210
151
|
): boolean {
|
|
@@ -405,7 +346,7 @@ export function recordSpritePass(
|
|
|
405
346
|
c,
|
|
406
347
|
spritePass,
|
|
407
348
|
matchedIndices,
|
|
408
|
-
|
|
349
|
+
resolveMaterialBindGroup,
|
|
409
350
|
spritePH,
|
|
410
351
|
spritePH_withRegion,
|
|
411
352
|
spriteLitPH,
|
|
@@ -509,7 +450,12 @@ function recordSpriteEntityDraws(
|
|
|
509
450
|
c: _InternalRenderPipelineContext,
|
|
510
451
|
spritePass: RhiRenderPassEncoder,
|
|
511
452
|
matchedIndices: Set<number> | null,
|
|
512
|
-
|
|
453
|
+
resolveMaterialBindGroup: (
|
|
454
|
+
materialSlot: number,
|
|
455
|
+
material: MaterialSnapshot,
|
|
456
|
+
entityKey: number,
|
|
457
|
+
materialWorld: World,
|
|
458
|
+
) => BindGroup,
|
|
513
459
|
spritePH: RenderPipeline | null,
|
|
514
460
|
spritePH_withRegion: RenderPipeline | null,
|
|
515
461
|
spriteLitPH: RenderPipeline | null,
|
|
@@ -518,10 +464,8 @@ function recordSpriteEntityDraws(
|
|
|
518
464
|
const {
|
|
519
465
|
runtime,
|
|
520
466
|
world,
|
|
521
|
-
store,
|
|
522
467
|
pipelineState,
|
|
523
468
|
frameState,
|
|
524
|
-
bindGroupCounts,
|
|
525
469
|
validatedOrdered,
|
|
526
470
|
meshBindGroup,
|
|
527
471
|
foldDispatchPlan,
|
|
@@ -853,48 +797,13 @@ function recordSpriteEntityDraws(
|
|
|
853
797
|
|
|
854
798
|
const materialSlot = materialSlotIndices[i]?.[0] ?? 0;
|
|
855
799
|
|
|
856
|
-
//
|
|
857
|
-
//
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
| undefined;
|
|
864
|
-
let spriteTexView = pipelineState.defaultWhiteTextureView;
|
|
865
|
-
if (spriteTexHandle !== undefined) {
|
|
866
|
-
const tv = residentTextureView(spriteEntry.world ?? world, store, runtime, spriteTexHandle);
|
|
867
|
-
if (tv !== undefined) spriteTexView = tv as never;
|
|
868
|
-
}
|
|
869
|
-
const spritePassBaseMaterialEntries = buildSpritePassBaseMaterialEntries(
|
|
870
|
-
pipelineState,
|
|
871
|
-
spriteTexView,
|
|
872
|
-
);
|
|
873
|
-
const spritePassMergedEntries = assembleMaterialWithSkylightEntries(
|
|
874
|
-
spritePassBaseMaterialEntries,
|
|
875
|
-
skylightResources,
|
|
876
|
-
);
|
|
877
|
-
|
|
878
|
-
// Sprite-pass material BG cache: keyed on shader id (shared across all
|
|
879
|
-
// sprite entities) so entities using the same atlas texture share one
|
|
880
|
-
// BindGroup instead of creating one per entity (O5 fix — inner WeakMap
|
|
881
|
-
// chain naturally deduplicates by GPU resource object identity, so two
|
|
882
|
-
// entities with different atlases still get distinct BGs).
|
|
883
|
-
const spritePassBg: BindGroup = getOrCreatePerEntity(
|
|
884
|
-
frameState.materialBgShared,
|
|
885
|
-
'forgeax::sprite',
|
|
886
|
-
spritePassMergedEntries.map((e) => extractEntryResourceHandle(e)),
|
|
887
|
-
'sprite-pass-material',
|
|
888
|
-
() => {
|
|
889
|
-
const result = runtime.device.createBindGroup({
|
|
890
|
-
label: 'sprite-pass-material-bg',
|
|
891
|
-
layout: pipelineState.materialBindGroupLayout,
|
|
892
|
-
entries: spritePassMergedEntries,
|
|
893
|
-
});
|
|
894
|
-
if (!result.ok) throw result.error;
|
|
895
|
-
return result.value;
|
|
896
|
-
},
|
|
897
|
-
bindGroupCounts,
|
|
800
|
+
// The same material owner serves HDR and linear-LDR draws. Do not
|
|
801
|
+
// replace authored samplers, texture sources or cooked layouts here.
|
|
802
|
+
const spritePassBg = resolveMaterialBindGroup(
|
|
803
|
+
materialSlot,
|
|
804
|
+
spriteEntry.source.material,
|
|
805
|
+
spriteEntry.source.entityKey,
|
|
806
|
+
spriteEntry.world ?? world,
|
|
898
807
|
);
|
|
899
808
|
|
|
900
809
|
spritePass.setBindGroup(1, spritePassBg, [materialSlot * MATERIAL_PER_ENTITY_STRIDE]);
|