@forgeax/engine-render 0.1.33 → 0.1.34
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 +1010 -124
- package/dist/assembly/backend-contract.d.ts +2 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/barrel-distortion-inspection.d.ts +3 -0
- package/dist/assembly/barrel-distortion-inspection.d.ts.map +1 -0
- package/dist/assembly/canvas-draw-guard.d.ts +3 -0
- package/dist/assembly/canvas-draw-guard.d.ts.map +1 -0
- package/dist/assembly/cloud-shadow-entry.d.ts +4 -0
- package/dist/assembly/cloud-shadow-entry.d.ts.map +1 -0
- package/dist/assembly/dynamic-geometry-host.d.ts +4 -1
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -1
- package/dist/assembly/factory.d.ts +1 -1
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +3 -3
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-helpers.d.ts +5 -0
- package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -1
- package/dist/assembly/material-shader-policy.d.ts +16 -2
- package/dist/assembly/material-shader-policy.d.ts.map +1 -1
- package/dist/assembly/material-shader-prewarm.d.ts.map +1 -1
- package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
- package/dist/assembly/recovery/renderer-recover.d.ts +2 -0
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
- package/dist/assembly/render-feature-post-processes.d.ts +6 -0
- package/dist/assembly/render-feature-post-processes.d.ts.map +1 -0
- package/dist/assembly/renderer-facade.d.ts.map +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -1
- package/dist/assembly/renderer-frame-transaction.d.ts +12 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-inspection.d.ts +11 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -1
- package/dist/assembly/webgpu-pbr-ready.d.ts +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-ready-per-pass.d.ts +39 -0
- package/dist/assembly/webgpu-ready-per-pass.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +1 -1
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-observation-owner.d.ts +35 -0
- package/dist/assembly/webgpu-renderer-observation-owner.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +1 -1
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/authoring.mjs +1 -1
- package/dist/barrel-distortion.d.ts +47 -0
- package/dist/barrel-distortion.d.ts.map +1 -0
- package/dist/{chunk-PA5DRJNI.mjs → chunk-ELJFJ2BU.mjs} +2 -2
- package/dist/chunk-ELJFJ2BU.mjs.map +1 -0
- package/dist/{chunk-ZDQWGQW7.mjs → chunk-HEB564WF.mjs} +4 -4
- package/dist/{chunk-ZDQWGQW7.mjs.map → chunk-HEB564WF.mjs.map} +1 -1
- package/dist/{chunk-VOZWDM3L.mjs → chunk-MKDIT2EM.mjs} +1307 -188
- package/dist/chunk-MKDIT2EM.mjs.map +1 -0
- package/dist/{chunk-LEAXOMYJ.mjs → chunk-OCDLEI6I.mjs} +3 -3
- package/dist/{chunk-LEAXOMYJ.mjs.map → chunk-OCDLEI6I.mjs.map} +1 -1
- package/dist/chunk-ODZWR6JQ.mjs +4927 -0
- package/dist/chunk-ODZWR6JQ.mjs.map +1 -0
- package/dist/{chunk-3RTCJTH4.mjs → chunk-SHFUFJ5N.mjs} +184 -13
- package/dist/chunk-SHFUFJ5N.mjs.map +1 -0
- package/dist/{chunk-OO3DRYK7.mjs → chunk-UI5SFODX.mjs} +176 -96
- package/dist/chunk-UI5SFODX.mjs.map +1 -0
- package/dist/{chunk-PLAXOOX5.mjs → chunk-UINHLCZA.mjs} +561 -79
- package/dist/chunk-UINHLCZA.mjs.map +1 -0
- package/dist/{chunk-NB2S7ZRX.mjs → chunk-WEX45HKH.mjs} +127 -386
- package/dist/chunk-WEX45HKH.mjs.map +1 -0
- package/dist/cloud/density.d.ts +55 -0
- package/dist/cloud/density.d.ts.map +1 -0
- package/dist/cloud/extract.d.ts +25 -0
- package/dist/cloud/extract.d.ts.map +1 -0
- package/dist/cloud/feature.d.ts +57 -0
- package/dist/cloud/feature.d.ts.map +1 -0
- package/dist/cloud/frame-context.d.ts +8 -0
- package/dist/cloud/frame-context.d.ts.map +1 -0
- package/dist/cloud/inspection.d.ts +59 -0
- package/dist/cloud/inspection.d.ts.map +1 -0
- package/dist/cloud/optics.d.ts +56 -0
- package/dist/cloud/optics.d.ts.map +1 -0
- package/dist/cloud/parameters.d.ts +73 -0
- package/dist/cloud/parameters.d.ts.map +1 -0
- package/dist/cloud/resources.d.ts +60 -0
- package/dist/cloud/resources.d.ts.map +1 -0
- package/dist/cloud/shadow.d.ts +42 -0
- package/dist/cloud/shadow.d.ts.map +1 -0
- package/dist/cloud/temporal.d.ts +74 -0
- package/dist/cloud/temporal.d.ts.map +1 -0
- package/dist/components/barrel-distortion.d.ts +13 -0
- package/dist/components/barrel-distortion.d.ts.map +1 -0
- package/dist/components/cloud-layer.d.ts +29 -0
- package/dist/components/cloud-layer.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 +20 -6
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/construct-renderer.d.ts +1 -1
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +6759 -2875
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/dynamic-geometry.d.ts +5 -1
- package/dist/dynamic-geometry.d.ts.map +1 -1
- package/dist/errors/cloud.d.ts +59 -0
- package/dist/errors/cloud.d.ts.map +1 -0
- package/dist/errors/render.d.ts +18 -4
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/examples/single-layer-medium-surface.d.ts +47 -0
- package/dist/examples/single-layer-medium-surface.d.ts.map +1 -0
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +5 -1
- package/dist/extract/contracts.d.ts.map +1 -1
- package/dist/features/barrel-distortion.d.ts +29 -0
- package/dist/features/barrel-distortion.d.ts.map +1 -0
- package/dist/features/error-reporting.d.ts +6 -2
- package/dist/features/error-reporting.d.ts.map +1 -1
- package/dist/features/host.d.ts +10 -0
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/plan.d.ts +8 -0
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +5 -0
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +1 -0
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/targets.d.ts +2 -0
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +44 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +15 -7
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-dirty-ranges.d.ts +11 -0
- package/dist/gpu-dirty-ranges.d.ts.map +1 -0
- package/dist/gpu-driven/batch-topology.d.ts +17 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/material-artifacts.d.ts +6 -0
- package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster-material.d.ts +178 -0
- package/dist/gpu-driven/production-raster-material.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +47 -3
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/resource-allocation.d.ts +31 -0
- package/dist/gpu-driven/resource-allocation.d.ts.map +1 -0
- package/dist/gpu-driven/shadow-ownership.d.ts +14 -0
- package/dist/gpu-driven/shadow-ownership.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +26 -2
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +5 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +2 -2
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +10 -1
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +27 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +258 -8
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +135 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instance-buffer-cache.d.ts +4 -4
- package/dist/instance-buffer-cache.d.ts.map +1 -1
- package/dist/instances.d.ts +48 -100
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.mjs +7 -7
- package/dist/pbr-pipeline.d.ts +19 -1
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/single-layer-medium-passes.d.ts +73 -0
- package/dist/pipeline/single-layer-medium-passes.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-output/graph.d.ts.map +1 -1
- package/dist/pipeline/standard-output/types.d.ts +4 -2
- package/dist/pipeline/standard-output/types.d.ts.map +1 -1
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +1 -1
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts +2 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/barrel-distortion-frame.d.ts +15 -0
- package/dist/record/barrel-distortion-frame.d.ts.map +1 -0
- package/dist/record/dynamic-geometry-consumption.d.ts +10 -2
- package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -1
- package/dist/record/fold-buckets.d.ts +95 -0
- package/dist/record/fold-buckets.d.ts.map +1 -0
- package/dist/record/fold-instance-buffer.d.ts +6 -0
- package/dist/record/fold-instance-buffer.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +1 -0
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +37 -3
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame.d.ts +10 -61
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/gpu-draw-receipts.d.ts +11 -0
- package/dist/record/gpu-draw-receipts.d.ts.map +1 -0
- package/dist/record/gpu-timing.d.ts +8 -0
- package/dist/record/gpu-timing.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +21 -5
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +7 -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/main-pass.d.ts +13 -2
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/motion-blur-receipt.d.ts +11 -0
- package/dist/record/motion-blur-receipt.d.ts.map +1 -0
- package/dist/record/probe-blend-buffer.d.ts +16 -0
- package/dist/record/probe-blend-buffer.d.ts.map +1 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +22 -3
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts +2 -0
- 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 +22 -2
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +11 -3
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/record/volume-params.d.ts +9 -0
- package/dist/record/volume-params.d.ts.map +1 -0
- package/dist/recovery/render-system-candidate.d.ts +10 -0
- package/dist/recovery/render-system-candidate.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +42 -4
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +103 -2
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +3 -2
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +16 -9
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system-presentation.d.ts +23 -0
- package/dist/render-system-presentation.d.ts.map +1 -0
- package/dist/render-system-producer-roots.d.ts +10 -0
- package/dist/render-system-producer-roots.d.ts.map +1 -0
- package/dist/render-system-residency.d.ts +12 -0
- package/dist/render-system-residency.d.ts.map +1 -0
- package/dist/render-system.d.ts +19 -14
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/probe-blend.d.ts +27 -0
- package/dist/scene/probe-blend.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +12 -5
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/ssao-buffers.d.ts +9 -0
- package/dist/ssao-buffers.d.ts.map +1 -1
- package/dist/surface/dynamic-input.d.ts +133 -0
- package/dist/surface/dynamic-input.d.ts.map +1 -0
- package/dist/surface/gpu-driven.d.ts +41 -0
- package/dist/surface/gpu-driven.d.ts.map +1 -0
- package/dist/surface/submission-observation.d.ts +136 -0
- package/dist/surface/submission-observation.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/temporal/gpu.d.ts +13 -1
- package/dist/temporal/gpu.d.ts.map +1 -1
- package/dist/temporal/index.mjs +5 -5
- package/dist/temporal/inspection.d.ts.map +1 -1
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/target-coverage-attachment.d.ts.map +1 -1
- package/dist/transmission/single-layer-medium.d.ts +89 -0
- package/dist/transmission/single-layer-medium.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +14 -2
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/volume/component.d.ts +9 -4
- package/dist/volume/component.d.ts.map +1 -1
- package/dist/volume/extract.d.ts +1 -1
- package/dist/volume/extract.d.ts.map +1 -1
- package/dist/volume/inspection.d.ts +2 -0
- package/dist/volume/inspection.d.ts.map +1 -1
- package/dist/volume/passes.d.ts +4 -1
- package/dist/volume/passes.d.ts.map +1 -1
- package/dist/volume/resources.d.ts.map +1 -1
- package/package.json +22 -21
- package/src/__tests__/atmosphere-daylight.dawn.test.ts +72 -0
- package/src/__tests__/barrel-distortion-lkg.integration.test.ts +353 -0
- package/src/__tests__/barrel-distortion.dawn.test.ts +41 -0
- package/src/__tests__/barrel-distortion.unit.test.ts +364 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +49 -0
- package/src/__tests__/detached-recovery-graph.unit.test.ts +277 -0
- package/src/__tests__/device-loss-fanout.unit.test.ts +36 -1
- package/src/__tests__/docs-gate-green.unit.test.ts +112 -1
- package/src/__tests__/factory-contract.integration.test.ts +295 -45
- package/src/__tests__/feature-depth-input.dawn.test.ts +129 -2
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +14 -3
- package/src/__tests__/gpu-dirty-ranges.unit.test.ts +22 -0
- package/src/__tests__/gpu-driven-baseline.characterization.test.ts +16 -3
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +12 -0
- package/src/__tests__/gpu-driven-material-artifacts.unit.test.ts +143 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +2 -2
- package/src/__tests__/gpu-driven-production.integration.test.ts +482 -3
- package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +6 -5
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +94 -6
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +18 -2
- package/src/__tests__/gpu-driven-view.browser.test.ts +5 -8
- package/src/__tests__/gpu-driven-view.dawn.test.ts +6 -2
- package/src/__tests__/gpu-driven-view.unit.test.ts +1 -1
- package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +1 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -4
- package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +1 -0
- package/src/__tests__/gpu-scene.unit.test.ts +119 -9
- package/src/__tests__/instance-allocation-failure.unit.test.ts +57 -0
- package/src/__tests__/instances-culling.integration.test.ts +10 -36
- package/src/__tests__/instances-store.unit.test.ts +97 -305
- package/src/__tests__/instances-world-ownership.integration.test.ts +62 -0
- package/src/__tests__/main-pass-material-medium-selection.unit.test.ts +146 -0
- package/src/__tests__/material-shader-prewarm.unit.test.ts +59 -0
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +39 -1
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +5 -5
- package/src/__tests__/morph-visual-evidence.integration.test.ts +8 -7
- package/src/__tests__/motion-blur-compute.dawn.test.ts +13 -7
- package/src/__tests__/motion-blur.pixel.integration.test.ts +2 -2
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +4 -4
- package/src/__tests__/pbr-view-layout.unit.test.ts +9 -0
- package/src/__tests__/physical-clearcoat.integration.test.ts +58 -0
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +66 -2
- package/src/__tests__/probe-bindings.unit.test.ts +582 -1
- package/src/__tests__/probe-scene-dirty.integration.test.ts +28 -1
- package/src/__tests__/receipt-observation-retirement.unit.test.ts +65 -0
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +69 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +7 -0
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +15 -2
- package/src/__tests__/render-feature-error-reporting.unit.test.ts +21 -1
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +10 -1
- package/src/__tests__/render-feature-retry.unit.test.ts +12 -1
- package/src/__tests__/render-scene-mixed-updates.integration.test.ts +145 -19
- package/src/__tests__/render-scene-projection.unit.test.ts +36 -11
- package/src/__tests__/render-scene-temporal-retry.unit.test.ts +20 -20
- package/src/__tests__/render-target-probe-soak.perf.test.ts +2 -2
- package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +3 -3
- package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +5 -2
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +41 -7
- package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +16 -0
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +26 -10
- package/src/__tests__/resource-allocation.unit.test.ts +123 -0
- package/src/__tests__/single-layer-medium-passes.unit.test.ts +275 -0
- package/src/__tests__/skin-motion-regression.unit.test.ts +70 -1
- package/src/__tests__/skin-palette-recycling.dawn.test.ts +97 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +15 -0
- package/src/__tests__/ssr-carrier-public-contract.unit.test.ts +21 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +4 -4
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +2 -2
- package/src/__tests__/ssr-gpu-dispatch.ts +1 -1
- package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +6 -2
- package/src/__tests__/standard-output-chain-contract.unit.test.ts +28 -0
- package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +46 -1
- package/src/__tests__/standard-pipeline.integration.test.ts +182 -1
- package/src/__tests__/surface-dynamic-buffer-lifecycle.unit.test.ts +506 -0
- package/src/__tests__/surface-submission-observation.unit.test.ts +812 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +32 -0
- package/src/__tests__/temporal-performance.integration.test.ts +3 -3
- package/src/__tests__/visibility-instances.integration.test.ts +7 -19
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +9 -20
- package/src/__tests__/volume-optics-oracle.unit.test.ts +4 -2
- package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +30 -20
- package/src/__tests__/volumetric-fog-errors.unit.test.ts +4 -3
- package/src/__tests__/volumetric-fog-multiple.unit.test.ts +55 -0
- package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +1 -1
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +113 -9
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +5 -3
- package/src/assembly/backend-contract.ts +30 -0
- package/src/assembly/barrel-distortion-inspection.ts +22 -0
- package/src/assembly/canvas-draw-guard.ts +11 -0
- package/src/assembly/cloud-shadow-entry.ts +22 -0
- package/src/assembly/dynamic-geometry-host.ts +65 -37
- package/src/assembly/dynamic-geometry-runtime.ts +7 -1
- package/src/assembly/factory.ts +2 -30
- package/src/assembly/host-contract.ts +3 -3
- package/src/assembly/material/assembly.ts +25 -13
- package/src/assembly/material/pipeline-helpers.ts +53 -12
- package/src/assembly/material-shader-policy.ts +55 -0
- package/src/assembly/material-shader-prewarm.ts +21 -10
- package/src/assembly/recovery/device-loss-fanout.ts +13 -0
- package/src/assembly/recovery/renderer-recover.ts +41 -18
- package/src/assembly/render-feature-post-processes.ts +54 -0
- package/src/assembly/renderer-facade.ts +4 -1
- package/src/assembly/renderer-feature-inspection.ts +8 -2
- package/src/assembly/renderer-frame-transaction.ts +23 -0
- package/src/assembly/renderer-inspection.ts +28 -0
- package/src/assembly/skin-palette-owner.ts +1 -1
- package/src/assembly/temporal-post-process-prewarm.ts +3 -3
- package/src/assembly/webgpu-pbr-ready.ts +9 -1
- package/src/assembly/webgpu-ready-per-pass.ts +104 -0
- package/src/assembly/webgpu-ready.ts +115 -61
- package/src/assembly/webgpu-renderer-bootstrap.ts +0 -12
- package/src/assembly/webgpu-renderer-observation-owner.ts +222 -0
- package/src/assembly/webgpu-renderer.ts +214 -252
- package/src/assembly/webgpu-vertex-layouts.ts +1 -1
- package/src/barrel-distortion.ts +247 -0
- package/src/cloud/__tests__/cloud-density-parity.dawn.test.ts +173 -0
- package/src/cloud/__tests__/cloud-layer-framebuffer-y.dawn.test.ts +265 -0
- package/src/cloud/__tests__/cloud-layer.browser.test.ts +432 -0
- package/src/cloud/__tests__/cloud-layer.unit.test.ts +634 -0
- package/src/cloud/density.ts +600 -0
- package/src/cloud/extract.ts +110 -0
- package/src/cloud/feature.ts +1810 -0
- package/src/cloud/frame-context.ts +42 -0
- package/src/cloud/inspection.ts +130 -0
- package/src/cloud/optics.ts +285 -0
- package/src/cloud/parameters.ts +255 -0
- package/src/cloud/resources.ts +122 -0
- package/src/cloud/shadow.ts +167 -0
- package/src/cloud/temporal.ts +226 -0
- package/src/components/barrel-distortion.ts +46 -0
- package/src/components/cloud-layer.ts +47 -0
- package/src/components/index.ts +2 -0
- package/src/components/instances.ts +18 -45
- package/src/components/sprite-instances.ts +1 -1
- package/src/construct-renderer.ts +1 -1
- package/src/dynamic-geometry.ts +12 -1
- package/src/errors/cloud.ts +103 -0
- package/src/errors/render.ts +44 -7
- package/src/examples/single-layer-medium-surface.ts +59 -0
- package/src/extract/camera.ts +15 -1
- package/src/extract/contracts.ts +5 -0
- package/src/features/barrel-distortion.ts +172 -0
- package/src/features/error-reporting.ts +26 -6
- package/src/features/host.ts +115 -14
- package/src/features/plan.ts +8 -0
- package/src/features/render-graph-contribution.ts +9 -0
- package/src/features/render-graph-raster.ts +45 -3
- package/src/features/targets.ts +66 -0
- package/src/features/types.ts +47 -0
- package/src/fullscreen-post-process-pass.ts +41 -9
- package/src/gpu-dirty-ranges.ts +48 -0
- package/src/gpu-driven/batch-topology.ts +53 -0
- package/src/gpu-driven/material-artifacts.ts +33 -25
- package/src/gpu-driven/prepared-draw.ts +12 -4
- package/src/gpu-driven/production-raster-material.ts +1894 -0
- package/src/gpu-driven/production-raster.ts +825 -784
- package/src/gpu-driven/resource-allocation.ts +142 -0
- package/src/gpu-driven/shadow-ownership.ts +71 -0
- package/src/gpu-driven/view-gpu.ts +164 -10
- package/src/gpu-scene.ts +75 -84
- package/src/hdrp-buffers.ts +4 -3
- package/src/ibl/skylight-bind-group.ts +49 -7
- package/src/index.ts +196 -9
- package/src/inspection-types.ts +162 -0
- package/src/instance-buffer-cache.ts +4 -4
- package/src/instances.ts +149 -569
- package/src/pbr-pipeline.ts +219 -13
- package/src/pipeline/single-layer-medium-passes.ts +267 -0
- package/src/pipeline/standard-forward-lane.ts +313 -57
- package/src/pipeline/standard-output/graph.ts +8 -2
- package/src/pipeline/standard-output/types.ts +12 -1
- package/src/pipeline/standard-pipeline.ts +291 -18
- package/src/pipeline/standard-post.ts +90 -24
- package/src/pipeline-builder.ts +1 -1
- package/src/plugin.ts +4 -0
- package/src/points-lines/__tests__/points-lines.bench.ts +17 -8
- package/src/prepare/prepared-graphics-resolver.ts +2 -0
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +30 -0
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +1 -1
- package/src/record/__tests__/temporal-payload.unit.test.ts +1 -1
- package/src/record/__tests__/transparent-group2-selection.unit.test.ts +11 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +1 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +4 -3
- package/src/record/barrel-distortion-frame.ts +110 -0
- package/src/record/dynamic-geometry-consumption.ts +39 -9
- package/src/record/fold-buckets.ts +852 -0
- package/src/record/fold-instance-buffer.ts +51 -0
- package/src/record/frame-lighting.ts +36 -2
- package/src/record/frame-snapshot.ts +39 -3
- package/src/record/frame.ts +217 -1084
- package/src/record/gpu-draw-receipts.ts +38 -0
- package/src/record/gpu-timing.ts +48 -5
- package/src/record/main-pass-geometry.ts +251 -82
- package/src/record/main-pass-material.ts +66 -4
- package/src/record/main-pass-sprite-draws.ts +7 -65
- package/src/record/main-pass.ts +156 -20
- package/src/record/motion-blur-receipt.ts +91 -0
- package/src/record/probe-blend-buffer.ts +180 -0
- package/src/record/recovery-pipeline.ts +35 -3
- package/src/record/render-context.ts +39 -3
- package/src/record/shadow-pass.ts +30 -1
- package/src/record/skybox-post-pass.ts +28 -4
- package/src/record/typed-frame-graph.ts +770 -134
- package/src/record/view-ubo.ts +26 -3
- package/src/record/volume-params.ts +225 -0
- package/src/recovery/render-system-candidate.ts +235 -42
- package/src/reflection/record-owner.ts +7 -3
- package/src/render-contract.ts +48 -4
- package/src/render-graph-primitives.ts +7 -1
- package/src/render-pipeline.ts +130 -0
- package/src/render-system-extract-tail.ts +57 -61
- package/src/render-system-extract.ts +74 -76
- package/src/render-system-presentation.ts +56 -0
- package/src/render-system-producer-roots.ts +96 -0
- package/src/render-system-residency.ts +159 -0
- package/src/render-system.ts +347 -363
- package/src/scene/probe-blend.ts +96 -4
- package/src/scene/render-scene.ts +349 -280
- package/src/ssao-buffers.ts +95 -2
- package/src/surface/__tests__/dynamic-input.unit.test.ts +374 -0
- package/src/surface/__tests__/gpu-driven.unit.test.ts +87 -0
- package/src/surface/dynamic-input.ts +658 -0
- package/src/surface/gpu-driven.ts +147 -0
- package/src/surface/submission-observation.ts +517 -0
- package/src/systems/skin-palette-allocator.ts +4 -1
- package/src/temporal/gpu.ts +101 -17
- package/src/temporal/inspection.ts +7 -1
- package/src/temporal/standard-scene-data.ts +5 -0
- package/src/temporal/target-coverage-attachment.ts +4 -0
- package/src/transmission/__tests__/single-layer-medium.unit.test.ts +149 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +12 -11
- package/src/transmission/single-layer-medium.ts +322 -0
- package/src/typed-render-graph-primitives.ts +70 -2
- package/src/volume/component.ts +10 -9
- package/src/volume/extract.ts +11 -5
- package/src/volume/inspection.ts +3 -0
- package/src/volume/passes.ts +87 -4
- package/src/volume/resources.ts +2 -1
- package/dist/chunk-3RTCJTH4.mjs.map +0 -1
- package/dist/chunk-NB2S7ZRX.mjs.map +0 -1
- package/dist/chunk-NNQL7CB3.mjs +0 -1713
- package/dist/chunk-NNQL7CB3.mjs.map +0 -1
- package/dist/chunk-OO3DRYK7.mjs.map +0 -1
- package/dist/chunk-PA5DRJNI.mjs.map +0 -1
- package/dist/chunk-PLAXOOX5.mjs.map +0 -1
- package/dist/chunk-VOZWDM3L.mjs.map +0 -1
package/src/render-pipeline.ts
CHANGED
|
@@ -41,6 +41,7 @@ import type { DepthOfFieldSide } from './components/depth-of-field';
|
|
|
41
41
|
import type { DirectionalShadowFilterLabel } from './components/directional-shadow-filter';
|
|
42
42
|
import type { RenderError } from './errors/render';
|
|
43
43
|
import type { RenderFeatureTargetKind } from './features/targets';
|
|
44
|
+
import type { RenderFeaturePlacement } from './features/types';
|
|
44
45
|
import type { ShadowViewIdentity, ShadowViewProjection } from './gpu-driven/shadow-views';
|
|
45
46
|
import {
|
|
46
47
|
GPU_TEXTURE_USAGE_COPY_SRC,
|
|
@@ -249,6 +250,8 @@ export interface RenderPipelineTopology {
|
|
|
249
250
|
readonly useFar: boolean;
|
|
250
251
|
}
|
|
251
252
|
| undefined;
|
|
253
|
+
/** Shape-only barrel admission; numeric mapping stays per-frame data. */
|
|
254
|
+
readonly barrelDistortion?: boolean | undefined;
|
|
252
255
|
};
|
|
253
256
|
/** Frame-stable Standard output policy; no raw RHI handles enter topology. */
|
|
254
257
|
readonly output?: {
|
|
@@ -285,6 +288,10 @@ export interface RenderPipelineTopology {
|
|
|
285
288
|
*/
|
|
286
289
|
readonly volumetricFog?: {
|
|
287
290
|
readonly enabled: boolean;
|
|
291
|
+
readonly additional?: readonly {
|
|
292
|
+
readonly format: TextureFormat;
|
|
293
|
+
readonly extent: { readonly width: number; readonly height: number; readonly depth: number };
|
|
294
|
+
}[];
|
|
288
295
|
readonly lightKind?: 'directional' | 'point' | 'spot' | undefined;
|
|
289
296
|
readonly lightEntity?: number | undefined;
|
|
290
297
|
readonly pointLightEntity?: number | undefined;
|
|
@@ -333,6 +340,8 @@ export interface RenderPipelineTopology {
|
|
|
333
340
|
readonly standardLightingTopologySignature?: string | undefined;
|
|
334
341
|
/** Internal graph fact; renderer callers do not configure transmission demand. */
|
|
335
342
|
readonly transmissionDemand?: TransmissionDemand | undefined;
|
|
343
|
+
/** Whether the extracted frame contains a single-layer medium Surface. */
|
|
344
|
+
readonly singleLayerMedium?: boolean | undefined;
|
|
336
345
|
}
|
|
337
346
|
|
|
338
347
|
/** Resolve the built-in final-output dither policy from the pipeline asset. */
|
|
@@ -463,9 +472,30 @@ export interface RenderPipelineGpuDrivenProjection {
|
|
|
463
472
|
pass: RhiRenderPassEncoder,
|
|
464
473
|
resources: GraphResourceResolver,
|
|
465
474
|
frameResources: GpuDrivenStandardPbrFrameResources,
|
|
475
|
+
filter?: RenderPipelineGpuDrivenFilter,
|
|
476
|
+
fragmentEntryPoint?: string,
|
|
466
477
|
): void;
|
|
467
478
|
}
|
|
468
479
|
|
|
480
|
+
/** Material family selected by a typed scene pass for GPU-driven encoding. */
|
|
481
|
+
export type RenderPipelineGpuDrivenFilter =
|
|
482
|
+
| 'opaque'
|
|
483
|
+
| 'deferred-opaque'
|
|
484
|
+
| 'forward-only-opaque'
|
|
485
|
+
| 'single-layer-medium';
|
|
486
|
+
|
|
487
|
+
/** Graph-paired inputs available to a single-layer medium Surface pass. */
|
|
488
|
+
export interface RenderPipelineSurfaceMediumPair {
|
|
489
|
+
/** The resolved opaque scene color produced by the shared Standard owner. */
|
|
490
|
+
readonly opaqueColor: GraphTextureView;
|
|
491
|
+
/** Raw depth copy is backend-dependent and remains explicit when unavailable. */
|
|
492
|
+
readonly rawDepth:
|
|
493
|
+
| { readonly status: 'available'; readonly view: GraphTextureView }
|
|
494
|
+
| {
|
|
495
|
+
readonly status: 'unavailable';
|
|
496
|
+
readonly reason: 'depth-copy-unavailable';
|
|
497
|
+
};
|
|
498
|
+
}
|
|
469
499
|
/** Exact scene rows selected by an indirect batch; palette offsets are global. */
|
|
470
500
|
export interface GpuDrivenSceneMeshBinding {
|
|
471
501
|
readonly meshBuffer: Buffer;
|
|
@@ -475,6 +505,8 @@ export interface GpuDrivenSceneMeshBinding {
|
|
|
475
505
|
|
|
476
506
|
/** Producer-owned Standard PBR resources resolved during graph execution. */
|
|
477
507
|
export interface GpuDrivenStandardPbrFrameResources {
|
|
508
|
+
/** Resource generation of the actual scene-index/indirect producer. */
|
|
509
|
+
readonly resourceGeneration?: number;
|
|
478
510
|
readonly materialBindGroups: (BindGroup | undefined)[];
|
|
479
511
|
/** Frame-global material slots keyed by the retained scene entity identity. */
|
|
480
512
|
readonly materialSlotIndicesByEntity: Map<number, readonly number[]>;
|
|
@@ -485,6 +517,56 @@ export interface GpuDrivenStandardPbrFrameResources {
|
|
|
485
517
|
colorFormats?: readonly TextureFormat[];
|
|
486
518
|
/** Exact producer-owned numeric Material table consumed by scene-index PBR. */
|
|
487
519
|
readonly sceneMaterialBuffer: Buffer;
|
|
520
|
+
/** Renderer-owned generic Surface page and frame/range metadata. */
|
|
521
|
+
readonly surfaceDynamicInput?: {
|
|
522
|
+
readonly page: Buffer;
|
|
523
|
+
readonly frame: Buffer;
|
|
524
|
+
readonly sharedFrame: Buffer;
|
|
525
|
+
readonly pageBytes: number;
|
|
526
|
+
readonly frameBytes: number;
|
|
527
|
+
readonly sharedFrameBytes: number;
|
|
528
|
+
};
|
|
529
|
+
/**
|
|
530
|
+
* Resolve the complete direct Surface slot-3 closure for one retained draw.
|
|
531
|
+
* The producer validates the stable draw identity and instance count before
|
|
532
|
+
* publishing a bind group; record never derives a frame-row address.
|
|
533
|
+
*/
|
|
534
|
+
readonly surfaceDirectInstances?: (input: {
|
|
535
|
+
readonly worldId: number;
|
|
536
|
+
readonly entityKey: number;
|
|
537
|
+
readonly drawItemIndex: number;
|
|
538
|
+
readonly instanceCount: number;
|
|
539
|
+
readonly firstInstanceOrdinal?: number;
|
|
540
|
+
readonly instanceBuffer: Buffer;
|
|
541
|
+
readonly probeBuffer?: Buffer;
|
|
542
|
+
readonly probeOffset?: number;
|
|
543
|
+
}) => Result<
|
|
544
|
+
{
|
|
545
|
+
readonly bindGroup: BindGroup;
|
|
546
|
+
readonly dynamicOffsets: readonly number[];
|
|
547
|
+
readonly frameBase: number;
|
|
548
|
+
/** Public Surface member identities covered by the recorded command. */
|
|
549
|
+
readonly memberIds: readonly string[];
|
|
550
|
+
},
|
|
551
|
+
RhiError
|
|
552
|
+
>;
|
|
553
|
+
/** Frame-local sink fed only by actual Surface draw commands. */
|
|
554
|
+
readonly surfaceSubmissionObservation?: import('./surface/submission-observation').SurfaceSubmissionCandidate;
|
|
555
|
+
/** Existing Standard clustered group(2), supplied by the main-pass owner. */
|
|
556
|
+
clusterBindGroup?: BindGroup | undefined;
|
|
557
|
+
/** Rebind the same cluster resources around one batch-local mesh row page. */
|
|
558
|
+
clusterBindGroupForMesh?:
|
|
559
|
+
| ((meshBuffer: Buffer, bindingBytes: number) => BindGroup | undefined)
|
|
560
|
+
| undefined;
|
|
561
|
+
/** Rebind clustered lighting around the scene-index Mesh/Palette/Morph page. */
|
|
562
|
+
clusterBindGroupForSkin?:
|
|
563
|
+
| ((
|
|
564
|
+
meshBuffer: Buffer,
|
|
565
|
+
meshBindingBytes: number,
|
|
566
|
+
paletteBuffer: Buffer,
|
|
567
|
+
paletteBindingWindowBytes: number,
|
|
568
|
+
) => BindGroup | undefined)
|
|
569
|
+
| undefined;
|
|
488
570
|
resolveClusteredMeshBindGroup?: (binding: GpuDrivenSceneMeshBinding) => BindGroup;
|
|
489
571
|
}
|
|
490
572
|
|
|
@@ -512,6 +594,8 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
|
|
|
512
594
|
* inferring rgba16float support from the selected surface format.
|
|
513
595
|
*/
|
|
514
596
|
readonly capabilities?: Pick<RhiCaps, 'rgba16floatRenderable'>;
|
|
597
|
+
/** Renderer-derived cloud shadow size shared by graph allocation and projection. */
|
|
598
|
+
readonly cloudShadowResolution?: number;
|
|
515
599
|
/** Prepared typed graph resources owned by RenderSystem/RenderFrameState. */
|
|
516
600
|
readonly standardOutput?: {
|
|
517
601
|
readonly autoExposure?: {
|
|
@@ -541,6 +625,19 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
|
|
|
541
625
|
readonly currentStability: RenderPipelineTarget;
|
|
542
626
|
readonly previousStability: RenderPipelineTarget;
|
|
543
627
|
};
|
|
628
|
+
/**
|
|
629
|
+
* Renderer-owned CloudLayer transport history. Each pair is backed by the
|
|
630
|
+
* same submit-fenced temporal owner as TAA, while the three attachments keep
|
|
631
|
+
* radiance, transmittance and representative depth in separate typed lanes.
|
|
632
|
+
*/
|
|
633
|
+
readonly cloudHistory?: {
|
|
634
|
+
readonly currentRadiance: RenderPipelineTarget;
|
|
635
|
+
readonly previousRadiance: RenderPipelineTarget;
|
|
636
|
+
readonly currentTransmittance: RenderPipelineTarget;
|
|
637
|
+
readonly previousTransmittance: RenderPipelineTarget;
|
|
638
|
+
readonly currentDepth: RenderPipelineTarget;
|
|
639
|
+
readonly previousDepth: RenderPipelineTarget;
|
|
640
|
+
};
|
|
544
641
|
/** Renderer-owned SSR temporal history targets for the admitted spatial chain. */
|
|
545
642
|
readonly ssrHistory?: {
|
|
546
643
|
readonly previous: RenderPipelineTarget;
|
|
@@ -573,6 +670,15 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
|
|
|
573
670
|
semanticTargets?: readonly RenderPipelineTarget[],
|
|
574
671
|
namedTargets?: Readonly<Record<string, RenderPipelineTarget>>,
|
|
575
672
|
standardSurfaceAccesses?: readonly GraphAccess[],
|
|
673
|
+
featureSelectionOrPlacement?:
|
|
674
|
+
| {
|
|
675
|
+
/** Project only these identities at this ordered stage. */
|
|
676
|
+
readonly include?: readonly string[];
|
|
677
|
+
/** Keep these identities for a later ordered stage. */
|
|
678
|
+
readonly exclude?: readonly string[];
|
|
679
|
+
}
|
|
680
|
+
| RenderFeaturePlacement,
|
|
681
|
+
passNames?: readonly string[],
|
|
576
682
|
): Result<void, RenderPipelineBuildError>;
|
|
577
683
|
/** Prepare feature-owned shadow draws and their early compute producers once. */
|
|
578
684
|
contributeShadowFeatures?(): Result<
|
|
@@ -585,6 +691,30 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
|
|
|
585
691
|
): Result<void, RenderPipelineBuildError>;
|
|
586
692
|
/** Whether a producer-owned feature is installed for this graph build. */
|
|
587
693
|
hasFeature?(identity: string): boolean;
|
|
694
|
+
/** Whether a producer-owned feature has executable work at this graph build. */
|
|
695
|
+
hasFeatureWork?(identity: string, placement?: RenderFeaturePlacement): boolean;
|
|
696
|
+
/** Whether a producer-owned feature has a resolved raster pass this frame. */
|
|
697
|
+
hasFeatureRasterWork?(identity: string, placement?: RenderFeaturePlacement): boolean;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/** Project the six CloudLayer history attachments into feature target aliases. */
|
|
701
|
+
export function renderPipelineCloudHistoryTargets(input: {
|
|
702
|
+
readonly currentRadiance: RenderPipelineTarget;
|
|
703
|
+
readonly previousRadiance: RenderPipelineTarget;
|
|
704
|
+
readonly currentTransmittance: RenderPipelineTarget;
|
|
705
|
+
readonly previousTransmittance: RenderPipelineTarget;
|
|
706
|
+
readonly currentDepth: RenderPipelineTarget;
|
|
707
|
+
readonly previousDepth: RenderPipelineTarget;
|
|
708
|
+
}): readonly RenderPipelineFeatureTarget[] {
|
|
709
|
+
const entries: readonly (readonly [string, RenderPipelineTarget])[] = [
|
|
710
|
+
['cloud-history-radiance-previous', input.previousRadiance],
|
|
711
|
+
['cloud-history-radiance-current', input.currentRadiance],
|
|
712
|
+
['cloud-history-transmittance-previous', input.previousTransmittance],
|
|
713
|
+
['cloud-history-transmittance-current', input.currentTransmittance],
|
|
714
|
+
['cloud-history-depth-previous', input.previousDepth],
|
|
715
|
+
['cloud-history-depth-current', input.currentDepth],
|
|
716
|
+
];
|
|
717
|
+
return entries.map(([name, target]) => ({ name, kind: 'scene-color' as const, ...target }));
|
|
588
718
|
}
|
|
589
719
|
|
|
590
720
|
export type RenderPipelineBuildError = RenderGraphError | RenderError | RhiError;
|
|
@@ -37,11 +37,11 @@ import {
|
|
|
37
37
|
ASSET_ERROR_HINTS,
|
|
38
38
|
AssetError,
|
|
39
39
|
derive,
|
|
40
|
-
err,
|
|
41
40
|
handleSlot,
|
|
42
41
|
materialValuesToLinearRuntime,
|
|
43
42
|
toShared,
|
|
44
43
|
} from '@forgeax/engine-types';
|
|
44
|
+
import { type ExtractedCloudLayer, extractCloudLayer } from './cloud/extract';
|
|
45
45
|
import {
|
|
46
46
|
Atmosphere,
|
|
47
47
|
DirectionalLight,
|
|
@@ -92,11 +92,7 @@ import type {
|
|
|
92
92
|
RenderFeatureWorldVisibilitySnapshot,
|
|
93
93
|
} from './features/types';
|
|
94
94
|
import { ensureGlyphMeshMaterialSlots } from './glyph-text-layout-system';
|
|
95
|
-
import {
|
|
96
|
-
InstanceCollectionError,
|
|
97
|
-
type InstanceCollectionId,
|
|
98
|
-
type InstanceCollectionStore,
|
|
99
|
-
} from './instances';
|
|
95
|
+
import { type InstanceProjectionStore, validateInstanceTransforms } from './instances';
|
|
100
96
|
import { deriveInstancesUnionBounds } from './instances-derived-bounds';
|
|
101
97
|
import {
|
|
102
98
|
type MeshMaterialBindingDiagnostic,
|
|
@@ -234,11 +230,12 @@ export function extractFrames(
|
|
|
234
230
|
request?: {
|
|
235
231
|
readonly vertexColorAvailable?: boolean;
|
|
236
232
|
readonly deformation?: 'rigid' | 'skin';
|
|
233
|
+
readonly variantSet?: string;
|
|
237
234
|
readonly pass?: 'forward' | 'shadow' | 'depth';
|
|
238
235
|
readonly address?: 'direct' | 'scene-index';
|
|
239
236
|
},
|
|
240
237
|
) => MaterialShaderArtifact | undefined;
|
|
241
|
-
readonly instanceCollections?:
|
|
238
|
+
readonly instanceCollections?: InstanceProjectionStore;
|
|
242
239
|
} = {},
|
|
243
240
|
): ExtractedFrame {
|
|
244
241
|
// w4: normalize the owner argument. A bare number is the legacy single-owner
|
|
@@ -569,6 +566,7 @@ export function extractFrames(
|
|
|
569
566
|
};
|
|
570
567
|
|
|
571
568
|
const volumetricFog = resourceOwnerFrame?.volumetricFog;
|
|
569
|
+
const cloudLayer = resourceOwnerFrame?.cloudLayer;
|
|
572
570
|
const skylight = resourceOwnerFrame?.skylight;
|
|
573
571
|
const skylightCount = resourceOwnerFrame?.skylightCount ?? 0;
|
|
574
572
|
const skybox = resourceOwnerFrame?.skybox;
|
|
@@ -651,6 +649,7 @@ export function extractFrames(
|
|
|
651
649
|
...(volumetricFog === undefined
|
|
652
650
|
? {}
|
|
653
651
|
: { volumetricFog: { ...volumetricFog, worldId: resourceOwner } }),
|
|
652
|
+
...(cloudLayer === undefined ? {} : { cloudLayer }),
|
|
654
653
|
renderables,
|
|
655
654
|
dispatch: dispatchEntries,
|
|
656
655
|
shadowCasterEntityKeys,
|
|
@@ -795,6 +794,16 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
795
794
|
// calls survive untouched, only the entity source changes).
|
|
796
795
|
const worldInternal = createWorldInternalView(world);
|
|
797
796
|
let volumetricFog = extractVolumeSnapshot(world, assets, worldInternal);
|
|
797
|
+
let cloudLayer: ExtractedCloudLayer | undefined;
|
|
798
|
+
const extractedCloudLayer = extractCloudLayer(world);
|
|
799
|
+
if (extractedCloudLayer.ok) {
|
|
800
|
+
cloudLayer = extractedCloudLayer.value;
|
|
801
|
+
} else {
|
|
802
|
+
worldInternal._routeError(extractedCloudLayer.error, {
|
|
803
|
+
severity: Severity.Error,
|
|
804
|
+
systemName: 'RenderSystem.extract (cloud-layer)',
|
|
805
|
+
});
|
|
806
|
+
}
|
|
798
807
|
|
|
799
808
|
const cameraRoles = selectCameraRoles(world, context.cameraEntityKey);
|
|
800
809
|
const cameras = [...cameraRoles.display];
|
|
@@ -1708,13 +1717,6 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
1708
1717
|
// extraction. Shared handles are immutable inputs for the frame, while
|
|
1709
1718
|
// dispatch entries still need to be rebuilt for each entity.
|
|
1710
1719
|
const materialSnapshotCache: MaterialSnapshotCache = new Map();
|
|
1711
|
-
// A collection can be associated with more than one entity. Snapshot its
|
|
1712
|
-
// renderer-owned bytes once per extracted frame so culling and every
|
|
1713
|
-
// submission lane consume the same detached revision without repeat copies.
|
|
1714
|
-
const instanceSnapshotCache = new Map<
|
|
1715
|
-
InstanceCollectionId,
|
|
1716
|
-
ReturnType<InstanceCollectionStore['snapshot']>
|
|
1717
|
-
>();
|
|
1718
1720
|
const skinnedMaterialSnapshotCache: MaterialSnapshotCache = new Map();
|
|
1719
1721
|
// tweak-20260611 M1: MeshRenderer renderable archetype walk routes
|
|
1720
1722
|
// through one World-owned Query. K-2 sniffing scheme B
|
|
@@ -1779,22 +1781,25 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
1779
1781
|
const flushPendingDispatch = (pending: readonly DispatchEntry[]): void => {
|
|
1780
1782
|
for (const entry of pending) dispatch.push(entry);
|
|
1781
1783
|
};
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1784
|
+
const requestedRows =
|
|
1785
|
+
renderableEntities === undefined
|
|
1786
|
+
? meshRendererQuery
|
|
1787
|
+
: {
|
|
1788
|
+
*[Symbol.iterator]() {
|
|
1789
|
+
for (const entity of renderableEntities) {
|
|
1790
|
+
const row = meshRendererQuery.at(entity as EntityHandle);
|
|
1791
|
+
if (row !== undefined) yield row;
|
|
1792
|
+
}
|
|
1793
|
+
},
|
|
1794
|
+
};
|
|
1795
|
+
for (const row of requestedRows) {
|
|
1790
1796
|
// K-2 archetype-edge sniff (scheme B): a missing optional component
|
|
1791
1797
|
// surfaces as an absent bundle key, not a row-internal optional chain.
|
|
1792
1798
|
// Presence-only checks use QueryRow.has so large array-bearing components
|
|
1793
1799
|
// are not materialised merely to answer a boolean question.
|
|
1794
1800
|
const hasTransform = row.has(Transform);
|
|
1795
1801
|
const meshFilter = row.get(MeshFilter);
|
|
1796
|
-
const
|
|
1797
|
-
const hasInstances = instancesData !== undefined;
|
|
1802
|
+
const hasInstances = row.has(Instances);
|
|
1798
1803
|
const skin = row.get(Skin);
|
|
1799
1804
|
const morphWeightsView = worldInternal._getArrayView(row.entity, MorphWeights, 'weights');
|
|
1800
1805
|
const hasMeshFilter = meshFilter !== undefined;
|
|
@@ -2574,6 +2579,16 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
2574
2579
|
baseColor,
|
|
2575
2580
|
metallic: metallicPv,
|
|
2576
2581
|
roughness: roughnessPv,
|
|
2582
|
+
...(resolved.surface?.model === undefined
|
|
2583
|
+
? {}
|
|
2584
|
+
: { surfaceModel: resolved.surface.model }),
|
|
2585
|
+
deferredPass: allPasses.some(
|
|
2586
|
+
(pass) =>
|
|
2587
|
+
String(
|
|
2588
|
+
(pass.renderState?.tags as Record<string, unknown> | undefined)?.LightMode ??
|
|
2589
|
+
pass.name,
|
|
2590
|
+
) === 'Deferred',
|
|
2591
|
+
),
|
|
2577
2592
|
...(specularColorPv !== undefined && {
|
|
2578
2593
|
specularColor: [
|
|
2579
2594
|
specularColorPv[0] ?? 1,
|
|
@@ -3073,49 +3088,29 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
3073
3088
|
// make the cull and draw disagree within one frame).
|
|
3074
3089
|
let instancesSnap: InstancesSnapshot | undefined;
|
|
3075
3090
|
if (hasInstances) {
|
|
3076
|
-
const
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
if (
|
|
3080
|
-
|
|
3081
|
-
collectionId !== undefined && collectionId > 0 && instanceCollections !== undefined
|
|
3082
|
-
? instanceCollections.snapshot(collectionId)
|
|
3083
|
-
: err(
|
|
3084
|
-
new InstanceCollectionError(
|
|
3085
|
-
'instance-collection-invalid',
|
|
3086
|
-
'Instances.collectionId references a live renderer-owned collection',
|
|
3087
|
-
'create the collection through renderer.instances before attaching Instances',
|
|
3088
|
-
{
|
|
3089
|
-
operation: 'inspect',
|
|
3090
|
-
expected: 'a positive collectionId with a live renderer owner',
|
|
3091
|
-
actual: Number(collectionId ?? 0),
|
|
3092
|
-
...(collectionId === undefined ? {} : { collectionId }),
|
|
3093
|
-
},
|
|
3094
|
-
),
|
|
3095
|
-
);
|
|
3096
|
-
if (collectionId !== undefined)
|
|
3097
|
-
instanceSnapshotCache.set(collectionId, collectionResult);
|
|
3098
|
-
}
|
|
3099
|
-
if (collectionResult === undefined) continue;
|
|
3100
|
-
if (!collectionResult.ok) {
|
|
3101
|
-
worldInternal._routeError(collectionResult.error, {
|
|
3091
|
+
const transforms =
|
|
3092
|
+
worldInternal._getArrayView(entity, Instances, 'transforms') ?? new Float32Array();
|
|
3093
|
+
const invalid = validateInstanceTransforms(transforms);
|
|
3094
|
+
if (invalid !== undefined) {
|
|
3095
|
+
worldInternal._routeError(invalid, {
|
|
3102
3096
|
severity: Severity.Error,
|
|
3103
|
-
systemName: 'RenderSystem.extract (Instances
|
|
3097
|
+
systemName: 'RenderSystem.extract (Instances transforms)',
|
|
3104
3098
|
});
|
|
3105
3099
|
continue;
|
|
3106
3100
|
}
|
|
3101
|
+
const projected = instanceCollections?.project(world, entity, transforms);
|
|
3107
3102
|
instancesSnap = {
|
|
3108
|
-
transforms:
|
|
3109
|
-
|
|
3110
|
-
instanceCount: collectionResult.value.count,
|
|
3111
|
-
collectionId: collectionResult.value.collectionId,
|
|
3112
|
-
revision: collectionResult.value.revision,
|
|
3113
|
-
capacity: collectionResult.value.capacity,
|
|
3114
|
-
dirtyRanges: collectionResult.value.dirtyRanges,
|
|
3103
|
+
transforms: projected?.transforms ?? new Float32Array(transforms),
|
|
3104
|
+
instanceCount: transforms.length / 16,
|
|
3115
3105
|
cacheKey: entity,
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3106
|
+
archVersion: projected === undefined ? archVersion : 0,
|
|
3107
|
+
...(projected === undefined
|
|
3108
|
+
? {}
|
|
3109
|
+
: {
|
|
3110
|
+
collectionId: projected.collectionId,
|
|
3111
|
+
revision: projected.revision,
|
|
3112
|
+
generations: projected.generations,
|
|
3113
|
+
}),
|
|
3119
3114
|
};
|
|
3120
3115
|
}
|
|
3121
3116
|
|
|
@@ -3391,6 +3386,7 @@ export function extractFrame(world: World, context: PreparedExtractContext): Ext
|
|
|
3391
3386
|
environment,
|
|
3392
3387
|
environmentReady: true,
|
|
3393
3388
|
...(volumetricFog === undefined ? {} : { volumetricFog }),
|
|
3389
|
+
...(cloudLayer === undefined ? {} : { cloudLayer }),
|
|
3394
3390
|
renderables,
|
|
3395
3391
|
dispatch,
|
|
3396
3392
|
shadowCasterEntityKeys,
|