@forgeax/engine-render 0.1.20 → 0.1.21
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 +215 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/assembly/device-feature-admission.d.ts +18 -0
- package/dist/assembly/device-feature-admission.d.ts.map +1 -0
- package/dist/assembly/directional-shadow-inspection.d.ts +38 -0
- package/dist/assembly/directional-shadow-inspection.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +21 -18
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +9 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/render-target-host.d.ts +46 -0
- package/dist/assembly/render-target-host.d.ts.map +1 -0
- package/dist/assets/render-asset-port.d.ts.map +1 -1
- package/dist/authoring.mjs +3 -0
- package/dist/authoring.mjs.map +1 -1
- package/dist/capture/cube-views.d.ts +21 -0
- package/dist/capture/cube-views.d.ts.map +1 -0
- package/dist/capture/scheduler.d.ts +54 -0
- package/dist/capture/scheduler.d.ts.map +1 -0
- package/dist/{chunk-4XINDLAY.mjs → chunk-5YADUCA7.mjs} +1552 -1361
- package/dist/chunk-5YADUCA7.mjs.map +1 -0
- package/dist/{chunk-TBQJOK2L.mjs → chunk-6OPXDQ2E.mjs} +364 -51
- package/dist/chunk-6OPXDQ2E.mjs.map +1 -0
- package/dist/{chunk-M2MP4ZOU.mjs → chunk-BXBQQKFQ.mjs} +3 -9
- package/dist/chunk-BXBQQKFQ.mjs.map +1 -0
- package/dist/{chunk-CDTWTHZR.mjs → chunk-FS2KNUQH.mjs} +548 -6
- package/dist/chunk-FS2KNUQH.mjs.map +1 -0
- package/dist/components/camera.d.ts +1 -0
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/cube-camera.d.ts +20 -0
- package/dist/components/cube-camera.d.ts.map +1 -0
- package/dist/components/directional-light.d.ts +11 -2
- package/dist/components/directional-light.d.ts.map +1 -1
- package/dist/components/directional-shadow-filter.d.ts +25 -0
- package/dist/components/directional-shadow-filter.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/light-helpers.d.ts.map +1 -1
- package/dist/components/reflection-probe.d.ts +17 -0
- package/dist/components/reflection-probe.d.ts.map +1 -0
- package/dist/construct-renderer.mjs +5826 -1003
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/environment/frame.d.ts.map +1 -1
- package/dist/environment/lifecycle.d.ts +5 -0
- package/dist/environment/lifecycle.d.ts.map +1 -1
- package/dist/errors/render.d.ts +141 -93
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/directional-shadow-projection.d.ts +23 -0
- package/dist/extract/directional-shadow-projection.d.ts.map +1 -0
- package/dist/extract/environment.d.ts +14 -0
- package/dist/extract/environment.d.ts.map +1 -1
- package/dist/extract/visibility.d.ts.map +1 -1
- package/dist/features/fullscreen.d.ts.map +1 -1
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +10 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +13 -2
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +0 -1
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +19 -17
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +4 -0
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/kernel-cache.d.ts +36 -0
- package/dist/ibl/kernel-cache.d.ts.map +1 -0
- package/dist/index.d.ts +28 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +51 -0
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instances-derived-bounds.d.ts +50 -0
- package/dist/instances-derived-bounds.d.ts.map +1 -0
- package/dist/internal.mjs +1 -1
- package/dist/light-buffer-layout.d.ts +10 -1
- package/dist/light-buffer-layout.d.ts.map +1 -1
- package/dist/mesh-material-bindings.d.ts +54 -0
- package/dist/mesh-material-bindings.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +14 -4
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts +2 -1
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/errors.d.ts +4 -0
- package/dist/pipeline/standard-lighting/errors.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/graph.d.ts +24 -0
- package/dist/pipeline/standard-lighting/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/inspection.d.ts +38 -0
- package/dist/pipeline/standard-lighting/inspection.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/layout.d.ts +28 -0
- package/dist/pipeline/standard-lighting/layout.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/light-frame.d.ts +33 -0
- package/dist/pipeline/standard-lighting/light-frame.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/membership.d.ts +14 -0
- package/dist/pipeline/standard-lighting/membership.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/prepare.d.ts +16 -0
- package/dist/pipeline/standard-lighting/prepare.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/topology.d.ts +45 -0
- package/dist/pipeline/standard-lighting/topology.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/transport.d.ts +36 -0
- package/dist/pipeline/standard-lighting/transport.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts +4 -13
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline/standard-profile.d.ts +5 -26
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +40 -7
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/point-shadow-inspection.d.ts +21 -0
- package/dist/point-shadow-inspection.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +27 -32
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +28 -14
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts +5 -0
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +10 -4
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/gpu-pass-timing/contract.d.ts +96 -0
- package/dist/record/gpu-pass-timing/contract.d.ts.map +1 -0
- package/dist/record/gpu-pass-timing/errors.d.ts +18 -0
- package/dist/record/gpu-pass-timing/errors.d.ts.map +1 -0
- package/dist/record/gpu-pass-timing/index.d.ts +8 -0
- package/dist/record/gpu-pass-timing/index.d.ts.map +1 -0
- package/dist/record/gpu-pass-timing/parser.d.ts +11 -0
- package/dist/record/gpu-pass-timing/parser.d.ts.map +1 -0
- package/dist/record/gpu-pass-timing/session.d.ts +43 -0
- package/dist/record/gpu-pass-timing/session.d.ts.map +1 -0
- package/dist/record/gpu-timing.d.ts +8 -3
- package/dist/record/gpu-timing.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +22 -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 +2 -0
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +43 -2
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +72 -4
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +7 -4
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/reflection/filter.d.ts +22 -0
- package/dist/reflection/filter.d.ts.map +1 -0
- package/dist/reflection/gpu-table.d.ts +25 -0
- package/dist/reflection/gpu-table.d.ts.map +1 -0
- package/dist/reflection/projection.d.ts +91 -0
- package/dist/reflection/projection.d.ts.map +1 -0
- package/dist/render-contract.d.ts +49 -7
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts +1 -0
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +42 -2
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +58 -17
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +17 -2
- package/dist/render-system.d.ts.map +1 -1
- package/dist/renderer.d.ts +43 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/scene/render-scene.d.ts +14 -0
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/shadow-atlas.d.ts +3 -3
- package/dist/shadow-atlas.d.ts.map +1 -1
- package/dist/ssao-buffers.d.ts +3 -0
- package/dist/ssao-buffers.d.ts.map +1 -1
- package/dist/targets/contracts.d.ts +66 -0
- package/dist/targets/contracts.d.ts.map +1 -0
- package/dist/targets/graph-projection.d.ts +29 -0
- package/dist/targets/graph-projection.d.ts.map +1 -0
- package/dist/targets/material-source.d.ts +34 -0
- package/dist/targets/material-source.d.ts.map +1 -0
- package/dist/targets/owner.d.ts +32 -0
- package/dist/targets/owner.d.ts.map +1 -0
- package/dist/targets/physical.d.ts +18 -0
- package/dist/targets/physical.d.ts.map +1 -0
- package/dist/targets/readback.d.ts +39 -0
- package/dist/targets/readback.d.ts.map +1 -0
- package/dist/temporal/index.mjs +3 -3
- package/dist/typed-render-graph-primitives.d.ts +1 -1
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +1 -1
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/dist/volume/passes.d.ts +2 -2
- package/dist/volume/passes.d.ts.map +1 -1
- package/package.json +20 -20
- package/src/__tests__/bloom-exact-zero.unit.test.ts +48 -19
- package/src/__tests__/bloom-lifecycle.integration.test.ts +41 -13
- package/src/__tests__/camera-target-consumption.unit.test.ts +53 -0
- package/src/__tests__/cluster-binner.unit.test.ts +35 -0
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -2
- package/src/__tests__/cube-camera-scheduler.unit.test.ts +70 -0
- package/src/__tests__/cube-camera-single-submit.perf.test.ts +75 -0
- package/src/__tests__/cube-camera-view-matrices.unit.test.ts +41 -0
- package/src/__tests__/cube-camera-vocabulary.unit.test.ts +47 -0
- package/src/__tests__/cube-camera.integration.test.ts +42 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +73 -0
- package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -3
- package/src/__tests__/docs-gate-green.unit.test.ts +38 -0
- package/src/__tests__/factory-contract.integration.test.ts +255 -29
- package/src/__tests__/fog-component.unit.test.ts +67 -0
- package/src/__tests__/fog.integration.test.ts +86 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +37 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +10 -9
- package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +17 -1
- package/src/__tests__/gpu-driven-production.integration.test.ts +16 -17
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +12 -4
- package/src/__tests__/gpu-pass-timing-browser-runner.ts +281 -0
- package/src/__tests__/gpu-pass-timing-coexistence.integration.test.ts +80 -0
- package/src/__tests__/gpu-pass-timing-contract.unit.test.ts +243 -0
- package/src/__tests__/gpu-pass-timing-exact-zero.unit.test.ts +131 -0
- package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +230 -0
- package/src/__tests__/gpu-pass-timing-observation.unit.test.ts +233 -0
- package/src/__tests__/gpu-pass-timing-session.unit.test.ts +438 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +26 -0
- package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +125 -0
- package/src/__tests__/hdrp-group2-visibility.unit.test.ts +24 -0
- package/src/__tests__/instances-culling.integration.test.ts +94 -0
- package/src/__tests__/instances-derived-bounds.unit.test.ts +118 -0
- package/src/__tests__/material-observation.integration.test.ts +101 -0
- package/src/__tests__/pbr-view-layout.unit.test.ts +16 -0
- package/src/__tests__/point-shadow-inspection.unit.test.ts +60 -0
- package/src/__tests__/public-surface.test-d.ts +10 -0
- package/src/__tests__/reflection-probe-authoring.unit.test.ts +71 -0
- package/src/__tests__/reflection-probe-filter.unit.test.ts +54 -0
- package/src/__tests__/reflection-probe-ibl-topology.unit.test.ts +45 -0
- package/src/__tests__/reflection-probe-pass-encode.integration.test.ts +101 -0
- package/src/__tests__/reflection-probe-performance.perf.test.ts +60 -0
- package/src/__tests__/reflection-probe-recovery.integration.test.ts +55 -0
- package/src/__tests__/reflection-probe-selection.unit.test.ts +46 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +18 -3
- package/src/__tests__/render-feature-docs.unit.test.ts +1 -1
- package/src/__tests__/render-target-admission.unit.test.ts +80 -0
- package/src/__tests__/render-target-graph-projection.unit.test.ts +102 -0
- package/src/__tests__/render-target-inspection.unit.test.ts +52 -0
- package/src/__tests__/render-target-material-source.test-d.ts +30 -0
- package/src/__tests__/render-target-material-source.unit.test.ts +97 -0
- package/src/__tests__/render-target-owner-placement.unit.test.ts +203 -0
- package/src/__tests__/render-target-owner.unit.test.ts +122 -0
- package/src/__tests__/render-target-probe-soak.perf.test.ts +94 -0
- package/src/__tests__/render-target-public-schema.json +107 -0
- package/src/__tests__/render-target-public-schema.unit.test.ts +91 -0
- package/src/__tests__/render-target-public-surface.test-d.ts +83 -0
- package/src/__tests__/render-target-readback.integration.test.ts +90 -0
- package/src/__tests__/render-target-recovery.integration.test.ts +85 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +48 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +14 -0
- package/src/__tests__/shader-stage-surface.unit.test.ts +19 -4
- package/src/__tests__/skin-motion-regression.unit.test.ts +132 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +11 -2
- package/src/__tests__/standard-cluster-capability.integration.test.ts +63 -0
- package/src/__tests__/standard-cluster-transport.unit.test.ts +121 -0
- package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +232 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +8 -5
- package/src/__tests__/standard-lighting-inspection.integration.test.ts +138 -0
- package/src/__tests__/standard-lighting-ssot.unit.test.ts +18 -0
- package/src/__tests__/standard-lighting-write.unit.test.ts +377 -0
- package/src/__tests__/standard-lighting.integration.test.ts +67 -0
- package/src/__tests__/standard-pipeline.dawn.test.ts +206 -5
- package/src/__tests__/standard-pipeline.integration.test.ts +181 -150
- package/src/__tests__/standard-probe-binding.unit.test.ts +25 -0
- package/src/__tests__/standard-profile-oracle.unit.test.ts +23 -38
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +395 -14
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +2 -2
- package/src/__tests__/visibility-resolver.unit.test.ts +15 -0
- package/src/assembly/device-feature-admission.ts +73 -0
- package/src/assembly/directional-shadow-inspection.ts +122 -0
- package/src/assembly/factory.ts +877 -286
- package/src/assembly/host-contract.ts +25 -0
- package/src/assembly/render-target-host.ts +847 -0
- package/src/assets/asset-decoders.ts +1 -1
- package/src/assets/render-asset-port.ts +7 -1
- package/src/capture/cube-views.ts +69 -0
- package/src/capture/scheduler.ts +265 -0
- package/src/components/__tests__/schema-contract.unit.test.ts +12 -0
- package/src/components/__tests__/schema-parity.unit.test.ts +9 -0
- package/src/components/camera.ts +4 -0
- package/src/components/cube-camera.ts +52 -0
- package/src/components/directional-light.ts +22 -2
- package/src/components/directional-shadow-filter.ts +57 -0
- package/src/components/index.ts +2 -0
- package/src/components/light-helpers.ts +81 -7
- package/src/components/reflection-probe.ts +49 -0
- package/src/environment/frame.ts +6 -24
- package/src/environment/lifecycle.ts +12 -0
- package/src/errors/render.ts +286 -142
- package/src/extract/directional-shadow-projection.ts +61 -0
- package/src/extract/environment.ts +57 -0
- package/src/extract/visibility.ts +25 -1
- package/src/features/fullscreen.ts +3 -0
- package/src/features/targets.ts +4 -1
- package/src/features/types.ts +10 -0
- package/src/fullscreen-post-process-pass.ts +43 -2
- package/src/gpu-driven/batch-topology.ts +1 -0
- package/src/gpu-driven/production-raster.ts +1 -3
- package/src/gpu-scene.ts +8 -1
- package/src/hdrp-buffers.ts +165 -59
- package/src/ibl/IblPipelineCache.ts +11 -0
- package/src/ibl/kernel-cache.ts +88 -0
- package/src/index.ts +148 -0
- package/src/inspection-types.ts +56 -0
- package/src/instances-derived-bounds.ts +171 -0
- package/src/light-buffer-layout.ts +20 -5
- package/src/mesh-material-bindings.ts +132 -0
- package/src/pbr-pipeline.ts +106 -17
- package/src/pipeline/standard-forward-lane.ts +46 -16
- package/src/pipeline/standard-lighting/errors.ts +6 -0
- package/src/pipeline/standard-lighting/graph.ts +157 -0
- package/src/pipeline/standard-lighting/inspection.ts +88 -0
- package/src/pipeline/standard-lighting/layout.ts +31 -0
- package/src/pipeline/standard-lighting/light-frame.ts +34 -0
- package/src/pipeline/standard-lighting/membership.ts +43 -0
- package/src/pipeline/standard-lighting/prepare.ts +37 -0
- package/src/pipeline/standard-lighting/topology.ts +120 -0
- package/src/pipeline/standard-lighting/transport.ts +77 -0
- package/src/pipeline/standard-pipeline.ts +122 -193
- package/src/pipeline/standard-post.ts +26 -7
- package/src/pipeline/standard-profile.ts +17 -47
- package/src/pipeline-spec.ts +84 -21
- package/src/point-shadow-inspection.ts +55 -0
- package/src/record/__tests__/temporal-payload.unit.test.ts +42 -1
- package/src/record/__tests__/transparent-group2-selection.unit.test.ts +73 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +40 -0
- package/src/record/frame-lighting.ts +367 -427
- package/src/record/frame-snapshot.ts +35 -27
- package/src/record/frame-targets.ts +17 -0
- package/src/record/frame.ts +261 -74
- package/src/record/gpu-pass-timing/contract.ts +180 -0
- package/src/record/gpu-pass-timing/errors.ts +34 -0
- package/src/record/gpu-pass-timing/index.ts +37 -0
- package/src/record/gpu-pass-timing/parser.ts +97 -0
- package/src/record/gpu-pass-timing/session.ts +938 -0
- package/src/record/gpu-timing.ts +21 -12
- package/src/record/main-pass-geometry.ts +120 -80
- package/src/record/main-pass-material.ts +95 -9
- package/src/record/main-pass-sprite-draws.ts +54 -25
- package/src/record/main-pass.ts +71 -15
- package/src/record/render-context.ts +72 -0
- package/src/record/shadow-pass.ts +17 -28
- package/src/record/skybox-post-pass.ts +20 -4
- package/src/record/typed-frame-graph.ts +893 -44
- package/src/record/view-ubo.ts +63 -28
- package/src/reflection/filter.ts +81 -0
- package/src/reflection/gpu-table.ts +44 -0
- package/src/reflection/projection.ts +281 -0
- package/src/render-contract.ts +76 -5
- package/src/render-graph-primitives.ts +9 -4
- package/src/render-pipeline.ts +117 -2
- package/src/render-system-extract.ts +557 -100
- package/src/render-system.ts +1095 -66
- package/src/renderer.ts +222 -0
- package/src/scene/render-scene.ts +115 -9
- package/src/shadow-atlas.ts +5 -5
- package/src/ssao-buffers.ts +9 -2
- package/src/targets/contracts.ts +182 -0
- package/src/targets/graph-projection.ts +169 -0
- package/src/targets/material-source.ts +143 -0
- package/src/targets/owner.ts +214 -0
- package/src/targets/physical.ts +18 -0
- package/src/targets/readback.ts +153 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +59 -20
- package/src/typed-render-graph-primitives.ts +5 -3
- package/src/typed-shadow-passes.ts +46 -40
- package/src/volume/passes.ts +15 -9
- package/dist/chunk-4XINDLAY.mjs.map +0 -1
- package/dist/chunk-CDTWTHZR.mjs.map +0 -1
- package/dist/chunk-M2MP4ZOU.mjs.map +0 -1
- package/dist/chunk-TBQJOK2L.mjs.map +0 -1
package/src/render-contract.ts
CHANGED
|
@@ -31,23 +31,56 @@ import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
|
|
|
31
31
|
import type { PostProcessShaderEntry } from './fullscreen-post-process-pass';
|
|
32
32
|
import type {
|
|
33
33
|
BloomInspection,
|
|
34
|
+
DirectionalShadowInspection,
|
|
34
35
|
MotionBlurInspection,
|
|
36
|
+
ReflectionProbeInspection,
|
|
35
37
|
RenderSceneInspection,
|
|
36
38
|
TemporalTargetInspection,
|
|
37
39
|
TransmissionInspection,
|
|
38
40
|
} from './inspection-types';
|
|
41
|
+
import type {
|
|
42
|
+
RenderTarget,
|
|
43
|
+
RenderTargetDescriptor,
|
|
44
|
+
RenderTargetReadbackData,
|
|
45
|
+
RenderTargetReadbackRequest,
|
|
46
|
+
RenderTargetReadbackTicket,
|
|
47
|
+
RenderTargetTextureSource,
|
|
48
|
+
RenderTargetTextureSourceOptions,
|
|
49
|
+
} from './targets/contracts';
|
|
39
50
|
import type { TemporalInspection } from './temporal/inspection';
|
|
40
51
|
|
|
41
52
|
export type { TransmissionInspection } from './inspection-types';
|
|
42
53
|
export type { PointsLinesInspection } from './points-lines/inspection';
|
|
43
54
|
|
|
44
55
|
import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
|
|
56
|
+
import type { StandardLightingInspection } from './pipeline/standard-lighting/inspection';
|
|
45
57
|
import type { StandardProfile } from './pipeline/standard-profile';
|
|
58
|
+
import type { PointShadowInspection } from './point-shadow-inspection';
|
|
46
59
|
import type { PostProcessError } from './post-process-errors';
|
|
60
|
+
import type {
|
|
61
|
+
GpuPassTimingObservation,
|
|
62
|
+
GpuPassTimingOptions,
|
|
63
|
+
} from './record/gpu-pass-timing/index.js';
|
|
47
64
|
import type { VolumeTimingObservation } from './record/gpu-timing';
|
|
48
65
|
import type { TemporalView } from './temporal/view';
|
|
49
66
|
import type { VolumetricFogInspection } from './volume/inspection';
|
|
50
67
|
|
|
68
|
+
export type {
|
|
69
|
+
CubeCameraFace,
|
|
70
|
+
CubeCameraUpdateIntent,
|
|
71
|
+
} from './components/cube-camera';
|
|
72
|
+
|
|
73
|
+
export interface CubeCameraSnapshot {
|
|
74
|
+
readonly entityKey?: number;
|
|
75
|
+
readonly target: RenderTarget;
|
|
76
|
+
readonly position: readonly [number, number, number];
|
|
77
|
+
readonly near: number;
|
|
78
|
+
readonly far: number;
|
|
79
|
+
readonly updateIntent: import('./components/cube-camera').CubeCameraUpdateIntent;
|
|
80
|
+
readonly requestVersion: number;
|
|
81
|
+
readonly faceBudget: number;
|
|
82
|
+
}
|
|
83
|
+
|
|
51
84
|
export type RenderResult<T, E> =
|
|
52
85
|
| { readonly ok: true; readonly value: T }
|
|
53
86
|
| { readonly ok: false; readonly error: E };
|
|
@@ -65,6 +98,8 @@ export type RenderWorldLease = RenderReadLease;
|
|
|
65
98
|
export interface CameraSnapshot {
|
|
66
99
|
/** Stable ECS identity used by the frame plan's camera authority fact. */
|
|
67
100
|
readonly entityKey?: number;
|
|
101
|
+
/** Auxiliary logical target; physical views remain renderer-owned. */
|
|
102
|
+
readonly target?: RenderTarget;
|
|
68
103
|
/** World index supplied by the multi-world extract merge. */
|
|
69
104
|
readonly worldId?: number;
|
|
70
105
|
/** Camera-owned history generation forwarded into the frame plan. */
|
|
@@ -105,6 +140,9 @@ export interface CameraSnapshot {
|
|
|
105
140
|
/** Stable identity owned by the Standard feature host for output transform. */
|
|
106
141
|
export const STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = 'forgeax::standard::output-transform';
|
|
107
142
|
|
|
143
|
+
/** Stable identity for the special FXAA pass' per-frame output policy UBO. */
|
|
144
|
+
export const FXAA_POST_PROCESS_ID = 'forgeax::post::fxaa';
|
|
145
|
+
|
|
108
146
|
export type {
|
|
109
147
|
EnvironmentFrame,
|
|
110
148
|
EnvironmentSource,
|
|
@@ -156,6 +194,7 @@ interface RenderPipelineRuntime {
|
|
|
156
194
|
id: string,
|
|
157
195
|
bgl: BindGroupLayout,
|
|
158
196
|
colorFormat: GPUTextureFormat,
|
|
197
|
+
entry?: PostProcessShaderEntry,
|
|
159
198
|
) => RhiRenderPipeline | null;
|
|
160
199
|
}
|
|
161
200
|
|
|
@@ -237,6 +276,10 @@ export interface SpotLightProjectorFrameContext {
|
|
|
237
276
|
readonly texture: Texture;
|
|
238
277
|
readonly view: TextureView;
|
|
239
278
|
readonly sampler: Sampler;
|
|
279
|
+
/** Spot-light index in ExtractedLights.spot for the accepted texture. */
|
|
280
|
+
readonly spotIndex?: number;
|
|
281
|
+
/** Unified Standard Cluster slot index (points precede spots). */
|
|
282
|
+
readonly lightSlotIndex?: number;
|
|
240
283
|
}
|
|
241
284
|
|
|
242
285
|
/**
|
|
@@ -246,6 +289,20 @@ export interface SpotLightProjectorFrameContext {
|
|
|
246
289
|
export interface Renderer {
|
|
247
290
|
attach(world: World): RenderResult<RenderWorldLease, RenderError>;
|
|
248
291
|
draw(input: RenderFrameInput): RenderResult<FrameReceipt, RenderError>;
|
|
292
|
+
createRenderTarget(descriptor: RenderTargetDescriptor): RenderResult<RenderTarget, RenderError>;
|
|
293
|
+
resizeRenderTarget(
|
|
294
|
+
target: RenderTarget,
|
|
295
|
+
descriptor: RenderTargetDescriptor,
|
|
296
|
+
): RenderResult<void, RenderError>;
|
|
297
|
+
createRenderTargetTextureSource(
|
|
298
|
+
target: RenderTarget,
|
|
299
|
+
options: RenderTargetTextureSourceOptions,
|
|
300
|
+
): RenderResult<RenderTargetTextureSource, RenderError>;
|
|
301
|
+
requestTargetReadback(
|
|
302
|
+
target: RenderTarget,
|
|
303
|
+
request: RenderTargetReadbackRequest,
|
|
304
|
+
): RenderResult<RenderTargetReadbackTicket, RenderError>;
|
|
305
|
+
destroyRenderTarget(target: RenderTarget): RenderResult<void, RenderError>;
|
|
249
306
|
setProfile(profile: RenderProfile): RenderResult<void, RenderError>;
|
|
250
307
|
state(): RendererState;
|
|
251
308
|
inspect(): RenderInspection;
|
|
@@ -256,6 +313,7 @@ export interface Renderer {
|
|
|
256
313
|
subscribe(listener: (event: RendererEvent) => void): () => void;
|
|
257
314
|
releaseSurface(): RenderResult<void, RenderError>;
|
|
258
315
|
restoreSurface(): RenderResult<void, RenderError>;
|
|
316
|
+
/** Recover only from device-lost; a healthy renderer returns a guard error. */
|
|
259
317
|
recover(): Promise<RenderResult<void, RenderError>>;
|
|
260
318
|
dispose(): Promise<RenderResult<void, RenderError>>;
|
|
261
319
|
}
|
|
@@ -305,11 +363,12 @@ export interface FrameEnvironment {
|
|
|
305
363
|
|
|
306
364
|
/**
|
|
307
365
|
* Receipt-bound observation selection. The request is consumed by `observe`
|
|
308
|
-
* only with the matching FrameReceipt and returns a
|
|
309
|
-
* when the generation or frame identity is stale.
|
|
366
|
+
* only with the matching FrameReceipt after `receipt.completed` and returns a
|
|
367
|
+
* structured Result error when the generation or frame identity is stale.
|
|
310
368
|
*/
|
|
311
369
|
export interface FrameObservationRequest {
|
|
312
|
-
readonly include: readonly ('timings' | 'draws' | 'bindings')[];
|
|
370
|
+
readonly include: readonly ('timings' | 'draws' | 'bindings' | 'target-readbacks')[];
|
|
371
|
+
readonly targetReadbacks?: readonly RenderTargetReadbackTicket[];
|
|
313
372
|
}
|
|
314
373
|
|
|
315
374
|
/**
|
|
@@ -340,8 +399,12 @@ export interface RenderFrameInput {
|
|
|
340
399
|
export interface FrameReceiptObservation {
|
|
341
400
|
readonly frameId: number;
|
|
342
401
|
readonly deviceGeneration: number;
|
|
343
|
-
readonly include: readonly ('timings' | 'draws' | 'bindings')[];
|
|
344
|
-
|
|
402
|
+
readonly include: readonly ('timings' | 'draws' | 'bindings' | 'target-readbacks')[];
|
|
403
|
+
/** Receipt-bound Render-owned GPU pass facts; absent when not requested. */
|
|
404
|
+
readonly timings?: GpuPassTimingObservation | undefined;
|
|
405
|
+
/** Receipt-bound volume GPU timing facts; absent when not requested. */
|
|
406
|
+
readonly volumeTimings?: VolumeTimingObservation | undefined;
|
|
407
|
+
readonly targetReadbacks?: readonly RenderTargetReadbackData[];
|
|
345
408
|
}
|
|
346
409
|
|
|
347
410
|
/** Stable backend facts for the Standard output transform projection. */
|
|
@@ -418,8 +481,13 @@ export interface RenderInspection {
|
|
|
418
481
|
readonly frustumStats: { readonly culled: number; readonly total: number };
|
|
419
482
|
readonly visibilityStats: { readonly explicitlyHidden: number };
|
|
420
483
|
readonly renderScene: RenderSceneInspection;
|
|
484
|
+
readonly reflectionProbes: ReflectionProbeInspection;
|
|
421
485
|
/** Last completed transmission candidate facts, detached from GPU handles. */
|
|
422
486
|
readonly transmission?: TransmissionInspection;
|
|
487
|
+
/** Last prepared Standard transport facts, detached from GPU handles. */
|
|
488
|
+
readonly standardLighting?: StandardLightingInspection;
|
|
489
|
+
/** Renderer-owned point-shadow atlas budget facts from the last frame. */
|
|
490
|
+
readonly pointShadow?: PointShadowInspection;
|
|
423
491
|
readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
|
|
424
492
|
readonly perFramePassNames: readonly string[];
|
|
425
493
|
readonly bindGroupCounts: {
|
|
@@ -440,6 +508,7 @@ export interface RenderInspection {
|
|
|
440
508
|
readonly environment: EnvironmentInspection;
|
|
441
509
|
readonly temporal: TemporalInspection;
|
|
442
510
|
readonly bloom: BloomInspection;
|
|
511
|
+
readonly directionalShadow: DirectionalShadowInspection;
|
|
443
512
|
/** Semantic Standard temporal target metadata; no graph or RHI handles. */
|
|
444
513
|
readonly temporalTarget?: TemporalTargetInspection;
|
|
445
514
|
/** Renderer-owned Motion Blur facts; absent when no component is active. */
|
|
@@ -651,6 +720,8 @@ export interface RendererOptions {
|
|
|
651
720
|
readonly captureGpuTimings?: boolean | undefined;
|
|
652
721
|
/** Optional host-owned RHI lifecycle instrumentation, such as recording. */
|
|
653
722
|
readonly rhiInstrumentation?: RhiBackendInstrumentation | undefined;
|
|
723
|
+
/** Optional bounded GPU pass timing facts; this is not frame latency. */
|
|
724
|
+
readonly gpuPassTiming?: GpuPassTimingOptions | undefined;
|
|
654
725
|
// feat-20260608-create-app-param-surface-trim / M1 / AC-02: `clearColor`
|
|
655
726
|
// was deleted as a one-cut breaking change (AGENTS.md Change stance +
|
|
656
727
|
// requirements constraint #1: no deprecation window, no shim). Scene
|
|
@@ -550,6 +550,7 @@ function dispatchFullscreenPass(
|
|
|
550
550
|
graphPass?: RhiRenderPassEncoder,
|
|
551
551
|
graphOutputFormat?: GPUTextureFormat,
|
|
552
552
|
graphDepthView?: TextureView,
|
|
553
|
+
paramsOverride?: Uint8Array,
|
|
553
554
|
): void {
|
|
554
555
|
if (shader === 'fxaa') {
|
|
555
556
|
if (resolveCtx === undefined) {
|
|
@@ -705,7 +706,11 @@ function dispatchFullscreenPass(
|
|
|
705
706
|
if (entry.params !== undefined) {
|
|
706
707
|
const ubo = ctx.runtime.getPostProcessParamsBuffer?.(shader);
|
|
707
708
|
if (ubo !== undefined) {
|
|
708
|
-
|
|
709
|
+
// Typed graph passes may make a narrow, per-pass copy of the payload
|
|
710
|
+
// (for example enabling final-surface dither without changing the
|
|
711
|
+
// camera-owned SSOT). Use it when present, while preserving the normal
|
|
712
|
+
// frame snapshot for legacy callers.
|
|
713
|
+
const data = paramsOverride ?? ctx.postProcessParams.get(shader);
|
|
709
714
|
if (data !== undefined) {
|
|
710
715
|
if (data.byteLength !== entry.params.byteSize) {
|
|
711
716
|
throw new PostProcessError({
|
|
@@ -769,9 +774,7 @@ function dispatchFullscreenPass(
|
|
|
769
774
|
if (lookupPipeline === undefined) return;
|
|
770
775
|
const postColorFormat = writeFormat;
|
|
771
776
|
const pipeline = lookupPipeline(shader, built.bindGroupLayout, postColorFormat);
|
|
772
|
-
if (pipeline === null)
|
|
773
|
-
return;
|
|
774
|
-
}
|
|
777
|
+
if (pipeline === null) return;
|
|
775
778
|
const handle = built.createHandle(name, pipeline, paramsBuffer);
|
|
776
779
|
|
|
777
780
|
// Open a render pass writing into the resolved color target. Fullscreen
|
|
@@ -810,6 +813,7 @@ export function encodeFullscreenPass(
|
|
|
810
813
|
readonly outputFormat: GPUTextureFormat;
|
|
811
814
|
readonly rawSwapchainOutput?: boolean | undefined;
|
|
812
815
|
readonly depthView?: TextureView | undefined;
|
|
816
|
+
readonly paramsOverride?: Uint8Array | undefined;
|
|
813
817
|
},
|
|
814
818
|
): void {
|
|
815
819
|
dispatchFullscreenPass(
|
|
@@ -824,5 +828,6 @@ export function encodeFullscreenPass(
|
|
|
824
828
|
pass,
|
|
825
829
|
input.outputFormat,
|
|
826
830
|
input.depthView,
|
|
831
|
+
input.paramsOverride,
|
|
827
832
|
);
|
|
828
833
|
}
|
package/src/render-pipeline.ts
CHANGED
|
@@ -35,12 +35,14 @@ import type {
|
|
|
35
35
|
} from '@forgeax/engine-rhi';
|
|
36
36
|
import { ok, type Result } from '@forgeax/engine-types';
|
|
37
37
|
import type { Tonemap } from './components/camera';
|
|
38
|
+
import type { DirectionalShadowFilterLabel } from './components/directional-shadow-filter';
|
|
38
39
|
import type { RenderError } from './errors/render';
|
|
39
40
|
import type { RenderFeatureTargetKind } from './features/targets';
|
|
40
41
|
import {
|
|
41
42
|
GPU_TEXTURE_USAGE_COPY_SRC,
|
|
42
43
|
GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
|
|
43
44
|
} from './gpu-texture-usage';
|
|
45
|
+
import type { StandardTopologyInputValue } from './pipeline/standard-lighting/topology';
|
|
44
46
|
import { STANDARD_POST_STAGE_NAMES, type StandardProfile } from './pipeline/standard-profile';
|
|
45
47
|
import type { SurfaceProfile } from './record/render-context';
|
|
46
48
|
import type { RenderPipelineContext } from './render-contract';
|
|
@@ -50,6 +52,97 @@ export type { RenderPipelineContext } from './render-contract';
|
|
|
50
52
|
|
|
51
53
|
export type RenderColorDomain = 'linearHdr' | 'linearLdr' | 'displayEncoded';
|
|
52
54
|
|
|
55
|
+
/** Backend admission inputs used by the existing Render candidate owner. */
|
|
56
|
+
export interface DirectionalShadowBackendAdmissionInput {
|
|
57
|
+
readonly backendKind: 'webgpu' | 'wgpu-webgl2' | 'null';
|
|
58
|
+
readonly requested: 'off' | DirectionalShadowFilterLabel;
|
|
59
|
+
readonly candidate: 'accepted' | 'failed';
|
|
60
|
+
readonly lastKnownGood?: DirectionalShadowFilterLabel | undefined;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Bounded, truthful Directional effective-profile projection. */
|
|
64
|
+
export interface DirectionalShadowBackendAdmission {
|
|
65
|
+
readonly requested: 'off' | DirectionalShadowFilterLabel;
|
|
66
|
+
readonly effective: 'off' | DirectionalShadowFilterLabel | 'rhi-null-structural';
|
|
67
|
+
readonly status: 'accepted' | 'fallback' | 'rejected';
|
|
68
|
+
readonly fallbackReason?: 'webgl2-unsupported' | 'rhi-null-structural' | 'candidate-failed';
|
|
69
|
+
readonly lastKnownGood: boolean;
|
|
70
|
+
readonly pixelEvidence: 'available' | 'not-available';
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Resolve a Directional profile only after the selected production candidate
|
|
75
|
+
* has been admitted. WebGL2 and RhiNull are the sole declared fallbacks;
|
|
76
|
+
* capable candidate failure retains a compatible LKG and never silently maps
|
|
77
|
+
* a failed PCSS request to PCF.
|
|
78
|
+
*/
|
|
79
|
+
export function resolveDirectionalShadowBackendAdmission(
|
|
80
|
+
input: DirectionalShadowBackendAdmissionInput,
|
|
81
|
+
): DirectionalShadowBackendAdmission {
|
|
82
|
+
if (input.requested === 'off') {
|
|
83
|
+
return {
|
|
84
|
+
requested: 'off',
|
|
85
|
+
effective: 'off',
|
|
86
|
+
status: 'accepted',
|
|
87
|
+
lastKnownGood: false,
|
|
88
|
+
pixelEvidence: 'not-available',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (input.backendKind === 'null') {
|
|
92
|
+
return {
|
|
93
|
+
requested: input.requested,
|
|
94
|
+
effective: 'rhi-null-structural',
|
|
95
|
+
status: 'fallback',
|
|
96
|
+
fallbackReason: 'rhi-null-structural',
|
|
97
|
+
lastKnownGood: false,
|
|
98
|
+
pixelEvidence: 'not-available',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (input.backendKind === 'wgpu-webgl2') {
|
|
102
|
+
const effective =
|
|
103
|
+
input.requested === 'pcssMedium'
|
|
104
|
+
? 'pcf3'
|
|
105
|
+
: input.requested === 'pcssHigh'
|
|
106
|
+
? 'pcf5'
|
|
107
|
+
: input.requested;
|
|
108
|
+
return {
|
|
109
|
+
requested: input.requested,
|
|
110
|
+
effective,
|
|
111
|
+
status: effective === input.requested ? 'accepted' : 'fallback',
|
|
112
|
+
...(effective === input.requested ? {} : { fallbackReason: 'webgl2-unsupported' as const }),
|
|
113
|
+
lastKnownGood: false,
|
|
114
|
+
pixelEvidence: 'available',
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (input.candidate === 'accepted') {
|
|
118
|
+
return {
|
|
119
|
+
requested: input.requested,
|
|
120
|
+
effective: input.requested,
|
|
121
|
+
status: 'accepted',
|
|
122
|
+
lastKnownGood: false,
|
|
123
|
+
pixelEvidence: 'available',
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
if (input.lastKnownGood !== undefined) {
|
|
127
|
+
return {
|
|
128
|
+
requested: input.requested,
|
|
129
|
+
effective: input.lastKnownGood,
|
|
130
|
+
status: 'rejected',
|
|
131
|
+
fallbackReason: 'candidate-failed',
|
|
132
|
+
lastKnownGood: true,
|
|
133
|
+
pixelEvidence: 'available',
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
requested: input.requested,
|
|
138
|
+
effective: input.requested,
|
|
139
|
+
status: 'rejected',
|
|
140
|
+
fallbackReason: 'candidate-failed',
|
|
141
|
+
lastKnownGood: false,
|
|
142
|
+
pixelEvidence: 'available',
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
53
146
|
export interface ToneOutputContract {
|
|
54
147
|
readonly input: RenderColorDomain;
|
|
55
148
|
readonly toneMapped: boolean;
|
|
@@ -135,8 +228,13 @@ export interface RenderPipelineTopology {
|
|
|
135
228
|
readonly motionBlur: boolean;
|
|
136
229
|
};
|
|
137
230
|
readonly shadow: {
|
|
138
|
-
readonly
|
|
139
|
-
|
|
231
|
+
readonly directional:
|
|
232
|
+
| 'disabled'
|
|
233
|
+
| {
|
|
234
|
+
readonly mapSize: number;
|
|
235
|
+
readonly cascadeCount: 1 | 2 | 3 | 4;
|
|
236
|
+
};
|
|
237
|
+
readonly spotMapSize: number;
|
|
140
238
|
readonly pointCount: number;
|
|
141
239
|
readonly pointFaceSize: number;
|
|
142
240
|
readonly spotCount: number;
|
|
@@ -191,10 +289,19 @@ export interface RenderPipelineTopology {
|
|
|
191
289
|
};
|
|
192
290
|
readonly featureTopologySignature: string;
|
|
193
291
|
readonly gpuDrivenTopologySignature: string;
|
|
292
|
+
/** Stable Cluster transport/layout facts; excludes per-frame light payloads. */
|
|
293
|
+
readonly standardLightingTopologySignature?: string | undefined;
|
|
194
294
|
/** Internal graph fact; renderer callers do not configure transmission demand. */
|
|
195
295
|
readonly transmissionDemand?: TransmissionDemand | undefined;
|
|
196
296
|
}
|
|
197
297
|
|
|
298
|
+
/** Resolve the built-in final-output dither policy from the pipeline asset. */
|
|
299
|
+
export function resolveOutputDither(
|
|
300
|
+
config: import('@forgeax/engine-types').RenderPipelineAsset['config'],
|
|
301
|
+
): boolean {
|
|
302
|
+
return config?.outputDither ?? true;
|
|
303
|
+
}
|
|
304
|
+
|
|
198
305
|
export interface RenderPipelineFrame extends RenderPipelineContext, RenderGraphFrame {}
|
|
199
306
|
|
|
200
307
|
export interface RenderPipelineTarget {
|
|
@@ -320,6 +427,12 @@ export interface RenderPipelineGpuDrivenProjection {
|
|
|
320
427
|
|
|
321
428
|
export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame> {
|
|
322
429
|
readonly graph: RenderGraphBuilder<FrameCtx>;
|
|
430
|
+
/**
|
|
431
|
+
* The single prepared Standard lighting projection for this frame. The
|
|
432
|
+
* Forward and Deferred adapters consume this value; they never inspect raw
|
|
433
|
+
* light snapshots, cluster config, or capability facts themselves.
|
|
434
|
+
*/
|
|
435
|
+
readonly standardLighting?: StandardTopologyInputValue;
|
|
323
436
|
/**
|
|
324
437
|
* Renderer-owned capability facts needed for admission decisions. The
|
|
325
438
|
* Standard temporal producer must use the live device probe rather than
|
|
@@ -354,6 +467,8 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
|
|
|
354
467
|
semanticTargets?: readonly RenderPipelineTarget[],
|
|
355
468
|
namedTargets?: Readonly<Record<string, RenderPipelineTarget>>,
|
|
356
469
|
): Result<void, RenderPipelineBuildError>;
|
|
470
|
+
/** Add renderer-owned cube capture work to the active pipeline graph. */
|
|
471
|
+
contributeCubeCaptures?(): Result<void, RenderPipelineBuildError>;
|
|
357
472
|
/** Whether a producer-owned feature is installed for this graph build. */
|
|
358
473
|
hasFeature?(identity: string): boolean;
|
|
359
474
|
}
|