@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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { err, ok } from '@forgeax/engine-types';
|
|
2
2
|
import { cubeArrayDepthDescriptor, comparisonSamplerDescriptor, cubeArrayDepthFaceView } from '@forgeax/engine-rhi';
|
|
3
|
+
import { InstanceTransformsStrideMismatchError } from '@forgeax/engine-ecs/projection';
|
|
3
4
|
|
|
4
5
|
// src/pipeline/standard-output/auto-exposure/inspection.ts
|
|
5
6
|
var AutoExposureInvalidParameterError = class extends Error {
|
|
@@ -373,16 +374,16 @@ var MaterialSkinAttrMissingError = class extends Error {
|
|
|
373
374
|
expected;
|
|
374
375
|
hint;
|
|
375
376
|
detail;
|
|
376
|
-
constructor(entity,
|
|
377
|
+
constructor(entity, missing) {
|
|
377
378
|
const expected = "pbr-skin material requires mesh.attributes.skinIndex + skinWeight";
|
|
378
|
-
const hint = `entity ${entity} uses forgeax::pbr-skin but its MeshAsset is missing ${
|
|
379
|
+
const hint = `entity ${entity} uses forgeax::pbr-skin but its MeshAsset is missing ${missing}; switch the entity to a skinned glTF mesh authored with JOINTS_0 + WEIGHTS_0, or change the material to a non-skin shader via Materials.standard / Materials.unlit`;
|
|
379
380
|
super(
|
|
380
|
-
`material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${
|
|
381
|
+
`material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${missing}`
|
|
381
382
|
);
|
|
382
383
|
this.name = "MaterialSkinAttrMissingError";
|
|
383
384
|
this.expected = expected;
|
|
384
385
|
this.hint = hint;
|
|
385
|
-
this.detail = { entity, missing
|
|
386
|
+
this.detail = { entity, missing };
|
|
386
387
|
}
|
|
387
388
|
};
|
|
388
389
|
var TransmissionCapabilityMissingError = class extends Error {
|
|
@@ -667,6 +668,19 @@ var DynamicResolutionTimingUnavailableError = class extends Error {
|
|
|
667
668
|
this.detail = detail;
|
|
668
669
|
}
|
|
669
670
|
};
|
|
671
|
+
var BarrelDistortionInvalidParameterError = class extends Error {
|
|
672
|
+
code = "barrel-distortion-invalid-parameter";
|
|
673
|
+
expected;
|
|
674
|
+
hint;
|
|
675
|
+
detail;
|
|
676
|
+
constructor(detail) {
|
|
677
|
+
super(`BarrelDistortion.${detail.field} is invalid`);
|
|
678
|
+
this.name = "BarrelDistortionInvalidParameterError";
|
|
679
|
+
this.expected = `BarrelDistortion.${detail.field} must be ${detail.expected}`;
|
|
680
|
+
this.hint = `set BarrelDistortion.${detail.field} to a value that is ${detail.expected}`;
|
|
681
|
+
this.detail = detail;
|
|
682
|
+
}
|
|
683
|
+
};
|
|
670
684
|
var OwnerStageFailedError = class extends Error {
|
|
671
685
|
code = "owner-stage-failed";
|
|
672
686
|
expected = "the owner completes its current frame stage";
|
|
@@ -884,8 +898,8 @@ var RenderIntentInvalidError = class extends Error {
|
|
|
884
898
|
};
|
|
885
899
|
var VolumeOwnerConflictError = class extends Error {
|
|
886
900
|
code = "volume-owner-conflict";
|
|
887
|
-
expected = "
|
|
888
|
-
hint = "
|
|
901
|
+
expected = "at most eight local VolumetricFog owners per rendered World";
|
|
902
|
+
hint = "reduce simultaneously visible volume owners and retry extraction";
|
|
889
903
|
detail;
|
|
890
904
|
constructor(ownerCount) {
|
|
891
905
|
super(`volume-owner-conflict: received ${ownerCount} owners`);
|
|
@@ -918,11 +932,12 @@ var VolumeInvalidBoundsError = class extends Error {
|
|
|
918
932
|
var VolumeInvalidParametersError = class extends Error {
|
|
919
933
|
code = "volume-invalid-parameters";
|
|
920
934
|
expected = "volume parameters remain finite and inside their closed ranges";
|
|
921
|
-
hint = "repair extinction, albedo, emission, anisotropy, or
|
|
935
|
+
hint = "repair extinction, albedo, emission, anisotropy, maxDistance, or sampling";
|
|
922
936
|
detail;
|
|
923
937
|
constructor(input) {
|
|
924
|
-
const
|
|
925
|
-
const
|
|
938
|
+
const invalidSampling = input.sampling !== void 0 && input.sampling !== "noise" && input.sampling !== "density";
|
|
939
|
+
const field = invalidSampling ? "sampling" : input.maxDistance !== void 0 && input.maxDistance <= 0 ? "maxDistance" : "parameters";
|
|
940
|
+
const value = invalidSampling ? input.sampling : field === "maxDistance" ? input.maxDistance : input.anisotropy;
|
|
926
941
|
super(`volume-invalid-parameters: ${field} is outside the authored range`);
|
|
927
942
|
this.name = "VolumeInvalidParametersError";
|
|
928
943
|
this.detail = { field, value };
|
|
@@ -1240,258 +1255,115 @@ var GpuDrivenPreparationError = class extends Error {
|
|
|
1240
1255
|
}
|
|
1241
1256
|
};
|
|
1242
1257
|
var MATRIX_STRIDE = 16;
|
|
1243
|
-
var
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
}
|
|
1247
|
-
function instanceCollectionFailureFacts(cause, recovery, requestedBytes = 0, supportedBytes = void 0, backend = "unknown") {
|
|
1248
|
-
return {
|
|
1249
|
-
requestedBytes,
|
|
1250
|
-
supportedBytes,
|
|
1251
|
-
backend,
|
|
1252
|
-
owner: "renderer.instances",
|
|
1253
|
-
cause,
|
|
1254
|
-
recovery
|
|
1255
|
-
};
|
|
1256
|
-
}
|
|
1257
|
-
var InstanceCollectionError = class extends Error {
|
|
1258
|
-
code;
|
|
1259
|
-
expected;
|
|
1260
|
-
hint;
|
|
1261
|
-
detail;
|
|
1262
|
-
owner = "renderer.instances";
|
|
1263
|
-
recovery;
|
|
1264
|
-
facts;
|
|
1265
|
-
constructor(code, expected, hint, detail, facts) {
|
|
1266
|
-
super(`${code}: ${expected}`);
|
|
1267
|
-
this.name = "InstanceCollectionError";
|
|
1268
|
-
this.code = code;
|
|
1269
|
-
this.expected = expected;
|
|
1270
|
-
this.hint = hint;
|
|
1258
|
+
var InstanceTransformsError = class extends Error {
|
|
1259
|
+
constructor(detail) {
|
|
1260
|
+
super("Instances.transforms must contain complete finite matrices");
|
|
1271
1261
|
this.detail = detail;
|
|
1272
|
-
this.
|
|
1273
|
-
code,
|
|
1274
|
-
hint,
|
|
1275
|
-
detail?.operation === "create" || detail?.operation === "replace" ? typeof detail.actual === "number" && Number.isFinite(detail.actual) ? detail.actual * Float32Array.BYTES_PER_ELEMENT : 0 : 0
|
|
1276
|
-
);
|
|
1277
|
-
this.recovery = this.facts.recovery;
|
|
1262
|
+
this.name = "InstanceTransformsError";
|
|
1278
1263
|
}
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
instanceCollectionFailureFacts(
|
|
1293
|
-
context?.cause ?? `invalid-${operation}-authoring`,
|
|
1294
|
-
context?.recovery ?? hint,
|
|
1295
|
-
context?.requestedBytes ?? 0,
|
|
1296
|
-
context?.supportedBytes
|
|
1297
|
-
)
|
|
1298
|
-
);
|
|
1299
|
-
}
|
|
1300
|
-
function validateTransforms(operation, transforms, collectionId) {
|
|
1301
|
-
if (!(transforms instanceof Float32Array)) {
|
|
1302
|
-
return invalid(operation, "transforms is a Float32Array", typeof transforms, collectionId, {
|
|
1303
|
-
cause: "invalid-transform-type"
|
|
1304
|
-
});
|
|
1305
|
-
}
|
|
1306
|
-
if (transforms.length % MATRIX_STRIDE !== 0) {
|
|
1307
|
-
return invalid(
|
|
1308
|
-
operation,
|
|
1309
|
-
`transforms.length is a multiple of ${MATRIX_STRIDE}`,
|
|
1310
|
-
transforms.length,
|
|
1311
|
-
collectionId,
|
|
1312
|
-
{
|
|
1313
|
-
requestedBytes: transforms.byteLength,
|
|
1314
|
-
cause: "invalid-transform-stride"
|
|
1315
|
-
}
|
|
1316
|
-
);
|
|
1317
|
-
}
|
|
1318
|
-
for (const value of transforms) {
|
|
1319
|
-
if (!Number.isFinite(value)) {
|
|
1320
|
-
return invalid(operation, "every transform value is finite", value, collectionId, {
|
|
1321
|
-
requestedBytes: transforms.byteLength,
|
|
1322
|
-
cause: "invalid-transform-value"
|
|
1264
|
+
detail;
|
|
1265
|
+
code = "instance-transforms-invalid";
|
|
1266
|
+
expected = "finite column-major mat4 values, with transforms.length a multiple of 16";
|
|
1267
|
+
hint = "repair Instances.transforms in the World or source SceneAsset and retry";
|
|
1268
|
+
};
|
|
1269
|
+
function validateInstanceTransforms(transforms) {
|
|
1270
|
+
if (transforms.length % MATRIX_STRIDE !== 0)
|
|
1271
|
+
return new InstanceTransformsStrideMismatchError(transforms.length);
|
|
1272
|
+
for (let index = 0; index < transforms.length; index++) {
|
|
1273
|
+
if (!Number.isFinite(transforms[index]))
|
|
1274
|
+
return new InstanceTransformsError({
|
|
1275
|
+
actualLength: transforms.length,
|
|
1276
|
+
nonFiniteIndex: index
|
|
1323
1277
|
});
|
|
1324
|
-
}
|
|
1325
1278
|
}
|
|
1326
1279
|
return void 0;
|
|
1327
1280
|
}
|
|
1328
|
-
function
|
|
1329
|
-
|
|
1330
|
-
let index = 0;
|
|
1331
|
-
while (index < ranges.length) {
|
|
1332
|
-
const existing = ranges[index];
|
|
1333
|
-
if (existing === void 0 || existing.end >= start) break;
|
|
1334
|
-
index += 1;
|
|
1335
|
-
}
|
|
1336
|
-
while (index < ranges.length) {
|
|
1337
|
-
const existing = ranges[index];
|
|
1338
|
-
if (existing === void 0 || existing.start > end) break;
|
|
1339
|
-
start = Math.min(start, existing.start);
|
|
1340
|
-
end = Math.max(end, existing.end);
|
|
1341
|
-
ranges.splice(index, 1);
|
|
1342
|
-
}
|
|
1343
|
-
ranges.splice(index, 0, { start, end });
|
|
1344
|
-
}
|
|
1345
|
-
function appendDirtyRange(record, start, end) {
|
|
1346
|
-
appendRange(record.dirtyRanges, start, end);
|
|
1347
|
-
}
|
|
1348
|
-
function missing(operation, id) {
|
|
1349
|
-
return new InstanceCollectionError(
|
|
1350
|
-
"instance-collection-not-found",
|
|
1351
|
-
`instance collection ${Number(id)} is live and owned by this Renderer`,
|
|
1352
|
-
"create a collection with renderer.instances.create or retain the original collection id",
|
|
1353
|
-
{ operation, expected: "a live instance collection id", actual: Number(id), collectionId: id }
|
|
1354
|
-
);
|
|
1281
|
+
function instanceUploadRangesForResident(activeIsNew, dirtyRanges, fullRange) {
|
|
1282
|
+
return activeIsNew ? [fullRange] : dirtyRanges;
|
|
1355
1283
|
}
|
|
1356
|
-
var
|
|
1284
|
+
var InstanceProjectionStore = class {
|
|
1357
1285
|
nextId = 1;
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
disposed = false;
|
|
1286
|
+
nextGeneration = 1;
|
|
1287
|
+
identities = /* @__PURE__ */ new WeakMap();
|
|
1361
1288
|
records = /* @__PURE__ */ new Map();
|
|
1362
1289
|
residency = /* @__PURE__ */ new Map();
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
"instance-collection-released",
|
|
1371
|
-
"the Renderer-owned instance collection store is live",
|
|
1372
|
-
"create a new Renderer before authoring instance collections"
|
|
1373
|
-
)
|
|
1374
|
-
);
|
|
1375
|
-
}
|
|
1376
|
-
const invalidPayload = validateTransforms("create", input.transforms);
|
|
1377
|
-
if (invalidPayload !== void 0) return err(invalidPayload);
|
|
1378
|
-
const id = this.nextId++;
|
|
1379
|
-
const count = input.transforms.length / MATRIX_STRIDE;
|
|
1380
|
-
const generations = this.allocateGenerations(count);
|
|
1290
|
+
project(world, entity, transforms) {
|
|
1291
|
+
const collectionId = this.identities.get(world)?.get(entity) ?? this.nextId++;
|
|
1292
|
+
const previous = this.records.get(collectionId);
|
|
1293
|
+
if (previous !== void 0 && previous.transforms.length === transforms.length && previous.transforms.every((value, index) => Object.is(value, transforms[index])))
|
|
1294
|
+
return previous;
|
|
1295
|
+
const count = transforms.length / MATRIX_STRIDE;
|
|
1296
|
+
const generations = previous?.count === count ? previous.generations : Uint32Array.from({ length: count }, () => this.nextGeneration++);
|
|
1381
1297
|
const record = {
|
|
1382
|
-
|
|
1383
|
-
|
|
1298
|
+
collectionId,
|
|
1299
|
+
world,
|
|
1300
|
+
entity,
|
|
1301
|
+
transforms: new Float32Array(transforms),
|
|
1384
1302
|
generations,
|
|
1385
1303
|
count,
|
|
1386
|
-
|
|
1387
|
-
revision: 1,
|
|
1388
|
-
dirtyRanges: count === 0 ? [] : [{ start: 0, end: count }],
|
|
1389
|
-
lastSnapshotRevision: 0,
|
|
1390
|
-
released: false
|
|
1304
|
+
revision: (previous?.revision ?? 0) + 1
|
|
1391
1305
|
};
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
const generationResult = generations === void 0 ? ok(this.allocateGenerations(count)) : this.validateReplacementGenerations(generations, count, id);
|
|
1403
|
-
if (!generationResult.ok) return generationResult;
|
|
1404
|
-
const replacementGenerations = generationResult.value;
|
|
1405
|
-
record.value.transforms = new Float32Array(transforms);
|
|
1406
|
-
record.value.generations = replacementGenerations;
|
|
1407
|
-
record.value.count = count;
|
|
1408
|
-
record.value.capacity = Math.max(record.value.capacity, nextCapacity(Math.max(1, count)));
|
|
1409
|
-
record.value.revision += 1;
|
|
1410
|
-
record.value.dirtyRanges = count === 0 ? [] : [{ start: 0, end: count }];
|
|
1411
|
-
record.value.lastSnapshotRevision = record.value.revision - 1;
|
|
1412
|
-
this.epochValue += 1;
|
|
1413
|
-
return ok(this.info(record.value));
|
|
1414
|
-
}
|
|
1415
|
-
update(id, input) {
|
|
1416
|
-
const record = this.live("update", id);
|
|
1417
|
-
if (!record.ok) return record;
|
|
1418
|
-
const invalidPayload = validateTransforms("update", input.transforms, id);
|
|
1419
|
-
if (invalidPayload !== void 0) return err(invalidPayload);
|
|
1420
|
-
if (!Number.isInteger(input.start) || input.start < 0) {
|
|
1421
|
-
return err(
|
|
1422
|
-
invalid("update", "start is a non-negative matrix ordinal", input.start, id, {
|
|
1423
|
-
requestedBytes: input.transforms.byteLength,
|
|
1424
|
-
supportedBytes: record.value.capacity * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
|
|
1425
|
-
cause: "invalid-update-range-start"
|
|
1426
|
-
})
|
|
1427
|
-
);
|
|
1306
|
+
return record;
|
|
1307
|
+
}
|
|
1308
|
+
/** Called only after the owning RenderScene accepts its prepared changes. */
|
|
1309
|
+
accept(world, entity, snapshot) {
|
|
1310
|
+
const { collectionId, revision, transforms, generations } = snapshot;
|
|
1311
|
+
if (collectionId === void 0 || revision === void 0 || generations === void 0) return;
|
|
1312
|
+
let entities = this.identities.get(world);
|
|
1313
|
+
if (entities === void 0) {
|
|
1314
|
+
entities = /* @__PURE__ */ new Map();
|
|
1315
|
+
this.identities.set(world, entities);
|
|
1428
1316
|
}
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1317
|
+
entities.set(entity, collectionId);
|
|
1318
|
+
this.records.set(collectionId, {
|
|
1319
|
+
collectionId,
|
|
1320
|
+
revision,
|
|
1321
|
+
transforms,
|
|
1322
|
+
generations,
|
|
1323
|
+
count: transforms.length / MATRIX_STRIDE,
|
|
1324
|
+
world,
|
|
1325
|
+
entity
|
|
1326
|
+
});
|
|
1327
|
+
}
|
|
1328
|
+
release(world, entity) {
|
|
1329
|
+
const entities = this.identities.get(world);
|
|
1330
|
+
const id = entities?.get(entity);
|
|
1331
|
+
if (id === void 0) return;
|
|
1332
|
+
entities?.delete(entity);
|
|
1333
|
+
this.records.delete(id);
|
|
1334
|
+
this.residency.delete(id);
|
|
1335
|
+
}
|
|
1336
|
+
retain(ids) {
|
|
1337
|
+
for (const record of this.records.values()) {
|
|
1338
|
+
if (!ids.has(record.collectionId)) this.release(record.world, record.entity);
|
|
1448
1339
|
}
|
|
1449
|
-
record.value.transforms.set(input.transforms, input.start * MATRIX_STRIDE);
|
|
1450
|
-
record.value.revision += 1;
|
|
1451
|
-
appendDirtyRange(record.value, input.start, input.start + span);
|
|
1452
|
-
this.epochValue += 1;
|
|
1453
|
-
return ok(this.info(record.value));
|
|
1454
1340
|
}
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1341
|
+
dispose() {
|
|
1342
|
+
this.records.clear();
|
|
1343
|
+
this.residency.clear();
|
|
1344
|
+
this.identities = /* @__PURE__ */ new WeakMap();
|
|
1458
1345
|
}
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
*
|
|
1462
|
-
* @internal Record-stage evidence is reported through the two methods below;
|
|
1463
|
-
* callers only receive immutable PODs and never GPU handles.
|
|
1464
|
-
*/
|
|
1465
|
-
_inspections() {
|
|
1466
|
-
return Object.freeze(
|
|
1467
|
-
[...this.records.values()].map((record) => this.projectInspection(record))
|
|
1468
|
-
);
|
|
1346
|
+
_resetResidency() {
|
|
1347
|
+
this.residency.clear();
|
|
1469
1348
|
}
|
|
1470
|
-
/** @internal Renderer record owner reports the accepted collection lane. */
|
|
1471
1349
|
_reportResidency(input) {
|
|
1472
1350
|
if (!this.records.has(input.collectionId)) return;
|
|
1473
1351
|
const previous = this.residency.get(input.collectionId);
|
|
1474
|
-
const sameFrame = previous
|
|
1475
|
-
const
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1352
|
+
const sameFrame = previous?.frameNumber === input.frameNumber && previous.error === void 0;
|
|
1353
|
+
const ranges = [...sameFrame ? previous.uploadRanges : [], ...input.uploadRanges].map((range) => ({ ...range })).sort((a, b) => a.start - b.start);
|
|
1354
|
+
const uploadRanges = [];
|
|
1355
|
+
for (const range of ranges) {
|
|
1356
|
+
const last = uploadRanges.at(-1);
|
|
1357
|
+
if (last !== void 0 && range.start <= last.end) last.end = Math.max(last.end, range.end);
|
|
1358
|
+
else uploadRanges.push(range);
|
|
1359
|
+
}
|
|
1482
1360
|
this.residency.set(input.collectionId, {
|
|
1483
|
-
|
|
1484
|
-
residentGeneration: input.residentGeneration,
|
|
1485
|
-
lane: input.lane,
|
|
1361
|
+
...input,
|
|
1486
1362
|
uploadRanges,
|
|
1487
|
-
uploadedBytes: sameFrame ? previous.uploadedBytes
|
|
1488
|
-
requestedBytes: input.requestedBytes,
|
|
1489
|
-
supportedBytes: input.supportedBytes,
|
|
1490
|
-
backend: input.backend,
|
|
1363
|
+
uploadedBytes: input.uploadedBytes + (sameFrame ? previous.uploadedBytes : 0),
|
|
1491
1364
|
error: void 0
|
|
1492
1365
|
});
|
|
1493
1366
|
}
|
|
1494
|
-
/** @internal Renderer record owner reports a typed admission failure. */
|
|
1495
1367
|
_reportFailure(input) {
|
|
1496
1368
|
if (!this.records.has(input.collectionId)) return;
|
|
1497
1369
|
this.residency.set(input.collectionId, {
|
|
@@ -1511,155 +1383,24 @@ var InstanceCollectionStore = class {
|
|
|
1511
1383
|
}
|
|
1512
1384
|
});
|
|
1513
1385
|
}
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
* Read a detached matrix view without advancing the render-consumption
|
|
1533
|
-
* cursor. Inspection and picking may call this between authoring updates;
|
|
1534
|
-
* the next renderer snapshot must still receive the complete dirty union.
|
|
1535
|
-
*/
|
|
1536
|
-
peek(id) {
|
|
1537
|
-
const record = this.live("inspect", id);
|
|
1538
|
-
return record.ok ? ok(this.detachedSnapshot(record.value)) : record;
|
|
1539
|
-
}
|
|
1540
|
-
release(id) {
|
|
1541
|
-
const record = this.records.get(id);
|
|
1542
|
-
if (record === void 0) return err(missing("release", id));
|
|
1543
|
-
if (record.released) {
|
|
1544
|
-
return err(
|
|
1545
|
-
new InstanceCollectionError(
|
|
1546
|
-
"instance-collection-released",
|
|
1547
|
-
`instance collection ${Number(id)} has not already been released`,
|
|
1548
|
-
"do not reuse a released collection id; create a new collection",
|
|
1549
|
-
{
|
|
1550
|
-
operation: "release",
|
|
1551
|
-
expected: "a live instance collection id",
|
|
1552
|
-
actual: Number(id),
|
|
1553
|
-
collectionId: id
|
|
1554
|
-
}
|
|
1555
|
-
)
|
|
1556
|
-
);
|
|
1557
|
-
}
|
|
1558
|
-
record.released = true;
|
|
1559
|
-
this.records.delete(id);
|
|
1560
|
-
this.residency.delete(id);
|
|
1561
|
-
this.epochValue += 1;
|
|
1562
|
-
return ok(void 0);
|
|
1563
|
-
}
|
|
1564
|
-
/** Drop all canonical matrices during Renderer disposal. */
|
|
1565
|
-
dispose() {
|
|
1566
|
-
if (this.disposed) return;
|
|
1567
|
-
this.disposed = true;
|
|
1568
|
-
for (const record of this.records.values()) record.released = true;
|
|
1569
|
-
this.records.clear();
|
|
1570
|
-
this.residency.clear();
|
|
1571
|
-
this.epochValue += 1;
|
|
1572
|
-
}
|
|
1573
|
-
live(operation, id) {
|
|
1574
|
-
if (!Number.isInteger(id) || id <= 0) {
|
|
1575
|
-
return err(invalid(operation, "collectionId is a positive integer", id, id));
|
|
1576
|
-
}
|
|
1577
|
-
if (this.disposed) {
|
|
1578
|
-
return err(
|
|
1579
|
-
new InstanceCollectionError(
|
|
1580
|
-
"instance-collection-released",
|
|
1581
|
-
"the Renderer-owned instance collection store is live",
|
|
1582
|
-
"create a new Renderer before using instance collections",
|
|
1583
|
-
{ operation, expected: "a live collection store", actual: "disposed", collectionId: id }
|
|
1584
|
-
)
|
|
1585
|
-
);
|
|
1586
|
-
}
|
|
1587
|
-
const record = this.records.get(id);
|
|
1588
|
-
return record === void 0 ? err(missing(operation, id)) : ok(record);
|
|
1589
|
-
}
|
|
1590
|
-
detachedSnapshot(record) {
|
|
1591
|
-
return {
|
|
1592
|
-
...this.info(record),
|
|
1593
|
-
transforms: new Float32Array(record.transforms),
|
|
1594
|
-
generations: new Uint32Array(record.generations),
|
|
1595
|
-
dirtyRanges: record.dirtyRanges.map((range) => ({ ...range }))
|
|
1596
|
-
};
|
|
1597
|
-
}
|
|
1598
|
-
info(record) {
|
|
1599
|
-
return Object.freeze({
|
|
1600
|
-
collectionId: record.id,
|
|
1601
|
-
count: record.count,
|
|
1602
|
-
capacity: record.capacity,
|
|
1603
|
-
revision: record.revision
|
|
1604
|
-
});
|
|
1605
|
-
}
|
|
1606
|
-
allocateGenerations(count) {
|
|
1607
|
-
const generations = new Uint32Array(count);
|
|
1608
|
-
for (let index = 0; index < count; index += 1) {
|
|
1609
|
-
generations[index] = this.nextInstanceGeneration;
|
|
1610
|
-
this.nextInstanceGeneration = this.nextInstanceGeneration + 1 >>> 0 || 1;
|
|
1611
|
-
}
|
|
1612
|
-
return generations;
|
|
1613
|
-
}
|
|
1614
|
-
validateReplacementGenerations(generations, count, collectionId) {
|
|
1615
|
-
if (!(generations instanceof Uint32Array) || generations.length !== count) {
|
|
1616
|
-
return err(
|
|
1617
|
-
invalid(
|
|
1618
|
-
"replace",
|
|
1619
|
-
`generations is a Uint32Array with ${count} entries`,
|
|
1620
|
-
generations instanceof Uint32Array ? generations.length : typeof generations,
|
|
1621
|
-
collectionId,
|
|
1622
|
-
{ requestedBytes: generations?.byteLength ?? 0, cause: "invalid-generation-shape" }
|
|
1623
|
-
)
|
|
1624
|
-
);
|
|
1625
|
-
}
|
|
1626
|
-
const seen = /* @__PURE__ */ new Set();
|
|
1627
|
-
for (const generation of generations) {
|
|
1628
|
-
if (generation === 0 || seen.has(generation)) {
|
|
1629
|
-
return err(
|
|
1630
|
-
invalid(
|
|
1631
|
-
"replace",
|
|
1632
|
-
"generations contain unique non-zero identity tokens",
|
|
1633
|
-
generation,
|
|
1634
|
-
collectionId,
|
|
1635
|
-
{
|
|
1636
|
-
requestedBytes: generations.byteLength,
|
|
1637
|
-
cause: "invalid-generation-identity"
|
|
1638
|
-
}
|
|
1639
|
-
)
|
|
1640
|
-
);
|
|
1641
|
-
}
|
|
1642
|
-
seen.add(generation);
|
|
1643
|
-
if (generation >= this.nextInstanceGeneration) {
|
|
1644
|
-
this.nextInstanceGeneration = generation + 1 >>> 0 || 1;
|
|
1645
|
-
}
|
|
1646
|
-
}
|
|
1647
|
-
return ok(new Uint32Array(generations));
|
|
1648
|
-
}
|
|
1649
|
-
projectInspection(record) {
|
|
1650
|
-
const residency = this.residency.get(record.id);
|
|
1651
|
-
return Object.freeze({
|
|
1652
|
-
...this.info(record),
|
|
1653
|
-
residentGeneration: residency?.residentGeneration,
|
|
1654
|
-
lane: residency?.lane ?? "unresident",
|
|
1655
|
-
dirtyRanges: Object.freeze(record.dirtyRanges.map((range) => ({ ...range }))),
|
|
1656
|
-
uploadRanges: Object.freeze(residency?.uploadRanges.map((range) => ({ ...range })) ?? []),
|
|
1657
|
-
uploadedBytes: residency?.uploadedBytes ?? 0,
|
|
1658
|
-
requestedBytes: residency?.requestedBytes ?? record.count * MATRIX_STRIDE * 4,
|
|
1659
|
-
supportedBytes: residency?.supportedBytes,
|
|
1660
|
-
backend: residency?.backend ?? "unknown",
|
|
1661
|
-
owner: "renderer.instances",
|
|
1662
|
-
error: residency?.error
|
|
1386
|
+
_inspections(frameNumber) {
|
|
1387
|
+
return [...this.records.values()].map((record) => {
|
|
1388
|
+
const resident = this.residency.get(record.collectionId);
|
|
1389
|
+
const current = resident?.frameNumber === frameNumber;
|
|
1390
|
+
return {
|
|
1391
|
+
collectionId: record.collectionId,
|
|
1392
|
+
count: record.count,
|
|
1393
|
+
revision: record.revision,
|
|
1394
|
+
residentGeneration: resident?.residentGeneration,
|
|
1395
|
+
lane: resident?.lane ?? "unresident",
|
|
1396
|
+
uploadRanges: current ? resident.uploadRanges.map((range) => ({ ...range })) : [],
|
|
1397
|
+
uploadedBytes: current ? resident.uploadedBytes : 0,
|
|
1398
|
+
requestedBytes: resident?.requestedBytes ?? record.transforms.byteLength,
|
|
1399
|
+
supportedBytes: resident?.supportedBytes,
|
|
1400
|
+
backend: resident?.backend ?? "unknown",
|
|
1401
|
+
owner: "renderer.instances",
|
|
1402
|
+
error: resident?.error
|
|
1403
|
+
};
|
|
1663
1404
|
});
|
|
1664
1405
|
}
|
|
1665
1406
|
};
|
|
@@ -1778,6 +1519,6 @@ var RENDER_PHASE_CATALOG = [
|
|
|
1778
1519
|
...RENDER_RECORD_PHASE_CATALOG
|
|
1779
1520
|
];
|
|
1780
1521
|
|
|
1781
|
-
export { AtmosphereInvalidParameterError, AutoExposureCapabilityUnavailableError, AutoExposureInvalidParameterError, AutoExposureStageFailedError, AutoExposureStaleGenerationError, DEFAULT_MOTION_BLUR_PARAMS, DynamicResolutionInvalidParameterError, DynamicResolutionRequiresTaaError, DynamicResolutionTimingUnavailableError, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, EquirectProjectionFailedError, FXAA_POST_PROCESS_ID, FogCardinalityError, FrameReceiptStaleError, GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_COPY_SRC, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING, GPU_TEXTURE_USAGE_STORAGE_BINDING, GPU_TEXTURE_USAGE_TEXTURE_BINDING, GpuDrivenPreparationError,
|
|
1782
|
-
//# sourceMappingURL=chunk-
|
|
1783
|
-
//# sourceMappingURL=chunk-
|
|
1522
|
+
export { AtmosphereInvalidParameterError, AutoExposureCapabilityUnavailableError, AutoExposureInvalidParameterError, AutoExposureStageFailedError, AutoExposureStaleGenerationError, BarrelDistortionInvalidParameterError, DEFAULT_MOTION_BLUR_PARAMS, DynamicResolutionInvalidParameterError, DynamicResolutionRequiresTaaError, DynamicResolutionTimingUnavailableError, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, EquirectProjectionFailedError, FXAA_POST_PROCESS_ID, FogCardinalityError, FrameReceiptStaleError, GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_COPY_SRC, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING, GPU_TEXTURE_USAGE_STORAGE_BINDING, GPU_TEXTURE_USAGE_TEXTURE_BINDING, GpuDrivenPreparationError, InstanceProjectionStore, InstanceTransformsError, LifecycleConstructionError, MOTION_BLUR_PARAMS_BYTE_SIZE, MaterialSkinAttrMissingError, MotionBlurValidationError, ObservationUnavailableError, OwnerStageFailedError, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PointsLinesBudgetExceededError, PointsLinesInvalidStyleError, PointsLinesMaterialUnsupportedError, PointsLinesPrepareFailedError, PointsLinesStyleUnsupportedError, PointsLinesTopologyMismatchError, RENDER_PHASE_CATALOG, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, RenderIntentInvalidError, RenderTargetCapabilityMissingError, RenderTargetDescriptorInvalidError, RenderTargetOperationFailedError, RenderTargetStateInvalidError, RendererContractFailureError, RendererOperationError, SHADOW_ATLAS_DEFAULT_FACE_SIZE, SHADOW_ATLAS_DEFAULT_LAYERS, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, SceneDataUnavailableError, ShadowAtlas, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, StandardClusterIndexOverflowError, StandardClusterTransportUnavailableError, StandardLightBudgetExceededError, StandardProfileInvalidError, TaaCapsInsufficientError, TemporalFrameSubmitError, TransmissionCapabilityMissingError, VertexColorVariantConflictError, VideoUploadUnsupportedError, VolumeDensityShapeMismatchError, VolumeInvalidBoundsError, VolumeInvalidParametersError, VolumeOwnerConflictError, createAutoExposureError, createAutoExposureInspection, createLightResourceUnavailable, createVisibilityBudget, effectiveMotionBlurSampleCount, instanceUploadRangesForResident, isMotionBlurIntervalValid, motionBlurExposureScale, motionBlurSampleDelta, motionBlurTemporalDemand, resolveMotionBlurParams, validateInstanceTransforms, validateMotionBlurParams };
|
|
1523
|
+
//# sourceMappingURL=chunk-WEX45HKH.mjs.map
|
|
1524
|
+
//# sourceMappingURL=chunk-WEX45HKH.mjs.map
|