@forgeax/engine-render 0.1.20 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +365 -29
- package/dist/assembly/backend-contract.d.ts +13 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/device-feature-admission.d.ts +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 +30 -19
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +19 -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 +4 -1
- 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-PCHBPYML.mjs → chunk-4L3P6DT5.mjs} +2 -2
- package/dist/chunk-4L3P6DT5.mjs.map +1 -0
- package/dist/{chunk-VFPLTKCU.mjs → chunk-4NPUASZR.mjs} +15 -4
- package/dist/chunk-4NPUASZR.mjs.map +1 -0
- package/dist/chunk-DIYW3M5D.mjs +5085 -0
- package/dist/chunk-DIYW3M5D.mjs.map +1 -0
- package/dist/chunk-FBC4R44J.mjs +1003 -0
- package/dist/chunk-FBC4R44J.mjs.map +1 -0
- package/dist/{chunk-CDTWTHZR.mjs → chunk-FF7K3FSO.mjs} +474 -168
- package/dist/chunk-FF7K3FSO.mjs.map +1 -0
- package/dist/chunk-HZUPSYW7.mjs +1104 -0
- package/dist/chunk-HZUPSYW7.mjs.map +1 -0
- package/dist/{chunk-TBQJOK2L.mjs → chunk-QODA5UKU.mjs} +321 -269
- package/dist/chunk-QODA5UKU.mjs.map +1 -0
- package/dist/chunk-YALPS44A.mjs +296 -0
- package/dist/chunk-YALPS44A.mjs.map +1 -0
- package/dist/{chunk-4XINDLAY.mjs → chunk-ZUWKAZ2I.mjs} +1963 -2178
- package/dist/chunk-ZUWKAZ2I.mjs.map +1 -0
- package/dist/cluster-binner.d.ts +5 -0
- package/dist/cluster-binner.d.ts.map +1 -1
- package/dist/components/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 +5 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts +4 -0
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/light-probe.d.ts +9 -0
- package/dist/components/light-probe.d.ts.map +1 -0
- package/dist/components/rect-area-light.d.ts +12 -0
- package/dist/components/rect-area-light.d.ts.map +1 -0
- package/dist/components/reflection-probe.d.ts +17 -0
- package/dist/components/reflection-probe.d.ts.map +1 -0
- package/dist/components/scene-instance.d.ts +4 -0
- package/dist/components/scene-instance.d.ts.map +1 -1
- package/dist/components/spot-light.d.ts +3 -0
- package/dist/components/spot-light.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +14836 -9620
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +8 -1
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/device/lifecycle-transaction.d.ts +2 -0
- package/dist/device/lifecycle-transaction.d.ts.map +1 -0
- package/dist/environment/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/gpu-driven.d.ts +26 -0
- package/dist/errors/gpu-driven.d.ts.map +1 -0
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/recover.d.ts +9 -1
- package/dist/errors/recover.d.ts.map +1 -1
- package/dist/errors/render.d.ts +166 -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/gpu-driven.d.ts +50 -0
- package/dist/extract/gpu-driven.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts.map +1 -1
- package/dist/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 +34 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/prepared-draw.d.ts +63 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +97 -2
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/view-gpu.d.ts +64 -1
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene-schema.d.ts +14 -0
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +8 -1
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-usage.d.ts +0 -1
- package/dist/gpu-usage.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +21 -19
- 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 +39 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +91 -6
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +214 -1
- 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.d.ts +9 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +23 -2
- package/dist/internal.mjs.map +1 -1
- package/dist/light-buffer-layout.d.ts +58 -140
- package/dist/light-buffer-layout.d.ts.map +1 -1
- package/dist/materials.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 +38 -14
- 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-builder.d.ts +2 -0
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +40 -7
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.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/prepare/extended-lighting/ltc-resources.d.ts +31 -0
- package/dist/prepare/extended-lighting/ltc-resources.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/resources.d.ts +72 -0
- package/dist/prepare/extended-lighting/resources.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/spot-modifiers.d.ts +42 -0
- package/dist/prepare/extended-lighting/spot-modifiers.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/state.d.ts +24 -0
- package/dist/prepare/extended-lighting/state.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +33 -36
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +78 -24
- 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 +16 -6
- 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 +20 -3
- package/dist/record/gpu-timing.d.ts.map +1 -1
- package/dist/record/helpers.d.ts +0 -20
- package/dist/record/helpers.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +6 -1
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +25 -2
- 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/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +98 -6
- 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 +119 -4
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +7 -5
- 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/inspection.d.ts +10 -0
- package/dist/reflection/inspection.d.ts.map +1 -0
- package/dist/reflection/projection.d.ts +140 -0
- package/dist/reflection/projection.d.ts.map +1 -0
- package/dist/reflection/record-owner.d.ts +60 -0
- package/dist/reflection/record-owner.d.ts.map +1 -0
- package/dist/render-contract.d.ts +62 -14
- 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 +49 -2
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +160 -31
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +28 -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/probe-blend-record.d.ts +22 -0
- package/dist/scene/probe-blend-record.d.ts.map +1 -0
- package/dist/scene/probe-blend.d.ts +142 -0
- package/dist/scene/probe-blend.d.ts.map +1 -0
- package/dist/scene/render-scene-types.d.ts +0 -6
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +117 -9
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/visibility/bounds.d.ts +20 -0
- package/dist/scene/visibility/bounds.d.ts.map +1 -0
- package/dist/scene/visibility/budget.d.ts +16 -0
- package/dist/scene/visibility/budget.d.ts.map +1 -0
- package/dist/scene/visibility/facet.d.ts +73 -0
- package/dist/scene/visibility/facet.d.ts.map +1 -0
- package/dist/scene/visibility/gpu-frame-timing.d.ts +41 -0
- package/dist/scene/visibility/gpu-frame-timing.d.ts.map +1 -0
- package/dist/scene/visibility/gpu-lod.d.ts +46 -0
- package/dist/scene/visibility/gpu-lod.d.ts.map +1 -0
- package/dist/scene/visibility/inspection.d.ts +132 -0
- package/dist/scene/visibility/inspection.d.ts.map +1 -0
- package/dist/scene/visibility/lod-selector.d.ts +25 -0
- package/dist/scene/visibility/lod-selector.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-confidence.d.ts +81 -0
- package/dist/scene/visibility/occlusion-confidence.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-pass.d.ts +57 -0
- package/dist/scene/visibility/occlusion-pass.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-query-pool.d.ts +57 -0
- package/dist/scene/visibility/occlusion-query-pool.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-runtime.d.ts +96 -0
- package/dist/scene/visibility/occlusion-runtime.d.ts.map +1 -0
- package/dist/scene/visibility/types.d.ts +34 -0
- package/dist/scene/visibility/types.d.ts.map +1 -0
- package/dist/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/ssr/admission.d.ts +122 -0
- package/dist/ssr/admission.d.ts.map +1 -0
- package/dist/ssr/composition.d.ts +32 -0
- package/dist/ssr/composition.d.ts.map +1 -0
- package/dist/ssr/errors.d.ts +39 -0
- package/dist/ssr/errors.d.ts.map +1 -0
- package/dist/ssr/identity.d.ts +13 -0
- package/dist/ssr/identity.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +1 -1
- package/dist/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/frame-coordinator.d.ts +13 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/frame.d.ts +2 -0
- package/dist/temporal/frame.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -5
- package/dist/temporal/view.d.ts +7 -0
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/tilemap-chunk-extract-system.d.ts +1 -1
- package/dist/typed-render-graph-primitives.d.ts +5 -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 +9 -5
- 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 +12 -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__/detached-inspection.integration.test.ts +6 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +85 -0
- package/src/__tests__/direct-light-snapshot.unit.test.ts +62 -6
- package/src/__tests__/docs-gate-green.unit.test.ts +38 -0
- package/src/__tests__/environment-generation.integration.test.ts +16 -0
- package/src/__tests__/evidence-identity.ts +13 -0
- package/src/__tests__/evidence-identity.unit.test.ts +24 -0
- package/src/__tests__/extended-lighting-recovery.browser.test.ts +14 -0
- package/src/__tests__/extended-lighting-recovery.dawn.test.ts +14 -0
- package/src/__tests__/extended-lighting-recovery.integration.test.ts +81 -0
- package/src/__tests__/extended-lighting-resources.unit.test.ts +51 -0
- package/src/__tests__/extended-lighting-zero-feature.integration.test.ts +52 -0
- package/src/__tests__/factory-contract.integration.test.ts +288 -29
- package/src/__tests__/fog-component.unit.test.ts +67 -0
- package/src/__tests__/fog.integration.test.ts +86 -0
- package/src/__tests__/frame-observation.contract.test.ts +15 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +37 -0
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +146 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +10 -8
- package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +18 -1
- package/src/__tests__/gpu-driven-production.integration.test.ts +579 -17
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +66 -2
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +26 -1
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +101 -6
- package/src/__tests__/gpu-driven-view.browser.test.ts +3 -3
- package/src/__tests__/gpu-driven-view.dawn.test.ts +3 -3
- package/src/__tests__/gpu-driven-view.unit.test.ts +50 -0
- package/src/__tests__/gpu-lod-evidence.ts +188 -0
- package/src/__tests__/gpu-lod-fallback.integration.test.ts +10 -0
- package/src/__tests__/gpu-lod-indirect.integration.test.ts +40 -0
- package/src/__tests__/gpu-lod-parity.dawn.test.ts +29 -0
- package/src/__tests__/gpu-lod-readiness.integration.test.ts +52 -0
- package/src/__tests__/gpu-lod-schema.unit.test.ts +66 -0
- package/src/__tests__/gpu-lod-selector.unit.test.ts +28 -0
- package/src/__tests__/gpu-lod-silhouette.browser.test.ts +13 -0
- package/src/__tests__/gpu-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__/gpu-resource-store-stride.unit.test.ts +66 -1
- package/src/__tests__/gpu-scene.dawn.test.ts +8 -1
- package/src/__tests__/gpu-scene.unit.test.ts +49 -3
- package/src/__tests__/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__/light-buffer-layout.unit.test.ts +113 -3
- package/src/__tests__/light-inspection.unit.test.ts +55 -0
- package/src/__tests__/light-resource-error.unit.test.ts +43 -0
- package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +109 -0
- package/src/__tests__/lod-bounds.unit.test.ts +42 -0
- package/src/__tests__/lod-cpu-lane.integration.test.ts +55 -0
- package/src/__tests__/lod-cpu-no-change.perf.test.ts +19 -0
- package/src/__tests__/lod-gpu-frame-timing.unit.test.ts +49 -0
- package/src/__tests__/lod-multi-view.integration.test.ts +63 -0
- package/src/__tests__/lod-occlusion-device-loss.integration.test.ts +27 -0
- package/src/__tests__/lod-occlusion-final-decision.integration.test.ts +47 -0
- package/src/__tests__/lod-occlusion-inspection.integration.test.ts +217 -0
- package/src/__tests__/lod-occlusion-inspection.schema.test-d.ts +14 -0
- package/src/__tests__/lod-occlusion-inspection.unit.test.ts +72 -0
- package/src/__tests__/lod-occlusion-visual-evidence.ts +91 -0
- package/src/__tests__/lod-occlusion.browser.test.ts +15 -0
- package/src/__tests__/lod-occlusion.dawn.test.ts +20 -0
- package/src/__tests__/lod-selector.profile.test.ts +35 -0
- package/src/__tests__/lod-selector.unit.test.ts +68 -0
- package/src/__tests__/lod-visibility-identity.unit.test.ts +198 -0
- package/src/__tests__/lod-visibility-lifecycle.integration.test.ts +132 -0
- package/src/__tests__/ltc-resources.unit.test.ts +32 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +17 -0
- package/src/__tests__/material-observation.integration.test.ts +101 -0
- package/src/__tests__/occlusion-confidence.unit.test.ts +168 -0
- package/src/__tests__/occlusion-invalidation.integration.test.ts +37 -0
- package/src/__tests__/occlusion-pass-routing.unit.test.ts +16 -0
- package/src/__tests__/occlusion-pass.dawn.test.ts +20 -0
- package/src/__tests__/occlusion-pass.integration.test.ts +43 -0
- package/src/__tests__/occlusion-pass.rhi-null.test.ts +22 -0
- package/src/__tests__/occlusion-query-pool.rhi-null.test.ts +21 -0
- package/src/__tests__/occlusion-query-pool.unit.test.ts +95 -0
- package/src/__tests__/occlusion-query-ticket.integration.test.ts +47 -0
- package/src/__tests__/occlusion-query.dawn.test.ts +16 -0
- package/src/__tests__/occlusion-query.evidence.ts +178 -0
- package/src/__tests__/occlusion-query.rhi-null.test.ts +31 -0
- package/src/__tests__/occlusion-runtime.unit.test.ts +120 -0
- package/src/__tests__/pbr-view-layout.unit.test.ts +16 -0
- package/src/__tests__/point-shadow-inspection.unit.test.ts +60 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +196 -0
- package/src/__tests__/probe-bindings.unit.test.ts +200 -0
- package/src/__tests__/probe-blend-numeric.unit.test.ts +67 -0
- package/src/__tests__/probe-blend-oracle.unit.test.ts +136 -0
- package/src/__tests__/probe-capacity.integration.test.ts +97 -0
- package/src/__tests__/probe-recovery.integration.test.ts +104 -0
- package/src/__tests__/probe-scene-dirty.integration.test.ts +211 -0
- package/src/__tests__/profiler-phase-catalog.test.ts +4 -1
- package/src/__tests__/profiler-phase-token.test.ts +1 -0
- package/src/__tests__/public-surface.test-d.ts +10 -0
- package/src/__tests__/rect-area-boundary.unit.test.ts +24 -0
- package/src/__tests__/reflection-fallback-graph.unit.test.ts +67 -0
- package/src/__tests__/reflection-fallback-inspection.unit.test.ts +77 -0
- package/src/__tests__/reflection-fallback-lifecycle.integration.test.ts +21 -0
- package/src/__tests__/reflection-fallback-projection.unit.test.ts +90 -0
- package/src/__tests__/reflection-fallback-source.unit.test.ts +32 -0
- package/src/__tests__/reflection-probe-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-owner-placement.unit.test.ts +39 -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-record-owner.characterization.unit.test.ts +120 -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 +19 -3
- package/src/__tests__/render-feature-docs.unit.test.ts +12 -7
- package/src/__tests__/render-graph-fallback.integration.test.ts +24 -0
- package/src/__tests__/render-perf/extended-lighting.bench.test.ts +66 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +447 -18
- package/src/__tests__/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 +124 -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 +154 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +13 -4
- package/src/__tests__/spot-modifier-projection.unit.test.ts +70 -0
- package/src/__tests__/ssr-admission-matrix.integration.test.ts +206 -0
- package/src/__tests__/ssr-composition.unit.test.ts +46 -0
- package/src/__tests__/ssr-fallback-zero-work.bench.test.ts +94 -0
- package/src/__tests__/ssr-recovery-errors.unit.test.ts +58 -0
- package/src/__tests__/standard-cluster-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 +299 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +15 -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 +441 -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__/temporal-fallback-generation.integration.test.ts +16 -0
- package/src/__tests__/temporal-view.unit.test.ts +3 -3
- package/src/__tests__/transmission-prewarm.unit.test.ts +69 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +395 -14
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +2 -2
- package/src/__tests__/visibility-budget.integration.test.ts +140 -0
- package/src/__tests__/visibility-budget.unit.test.ts +70 -0
- package/src/__tests__/visibility-extract.integration.test.ts +11 -6
- package/src/__tests__/visibility-resolver.unit.test.ts +15 -0
- package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +6 -3
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +31 -28
- package/src/assembly/backend-contract.ts +13 -0
- package/src/assembly/device-feature-admission.ts +80 -0
- package/src/assembly/directional-shadow-inspection.ts +122 -0
- package/src/assembly/factory.ts +1411 -366
- package/src/assembly/host-contract.ts +35 -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/cluster-binner.ts +31 -0
- package/src/components/__tests__/lighting-authoring.unit.test.ts +39 -0
- package/src/components/__tests__/rect-area-light.unit.test.ts +33 -0
- package/src/components/__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 +5 -0
- package/src/components/light-helpers.ts +133 -8
- package/src/components/light-probe.ts +13 -0
- package/src/components/rect-area-light.ts +15 -0
- package/src/components/reflection-probe.ts +49 -0
- package/src/components/scene-instance.ts +6 -0
- package/src/components/spot-light.ts +3 -0
- package/src/device/__tests__/extended-lighting-recovery.unit.test.ts +24 -0
- package/src/device/gpu-residency.ts +140 -9
- package/src/device/lifecycle-transaction.ts +12 -0
- package/src/environment/frame.ts +6 -24
- package/src/environment/lifecycle.ts +20 -1
- package/src/errors/gpu-driven.ts +92 -0
- package/src/errors/index.ts +1 -0
- package/src/errors/recover.ts +32 -0
- package/src/errors/render.ts +341 -143
- package/src/extract/camera.ts +3 -3
- package/src/extract/directional-shadow-projection.ts +61 -0
- package/src/extract/environment.ts +57 -0
- package/src/extract/gpu-driven.ts +108 -0
- package/src/extract/visibility.ts +2 -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 +207 -28
- package/src/gpu-driven/prepared-draw.ts +208 -0
- package/src/gpu-driven/production-raster.ts +953 -43
- package/src/gpu-driven/view-gpu.ts +411 -29
- package/src/gpu-scene-schema.ts +13 -0
- package/src/gpu-scene.ts +140 -64
- package/src/gpu-usage.ts +0 -1
- package/src/hdrp-buffers.ts +169 -63
- package/src/ibl/IblPipelineCache.ts +11 -0
- package/src/ibl/kernel-cache.ts +88 -0
- package/src/index.ts +222 -0
- package/src/inspection-types.ts +276 -1
- package/src/instances-derived-bounds.ts +171 -0
- package/src/internal.ts +38 -0
- package/src/light-buffer-layout.ts +155 -310
- package/src/materials.ts +16 -2
- package/src/mesh-material-bindings.ts +132 -0
- package/src/pbr-pipeline.ts +255 -60
- package/src/pipeline/standard-forward-lane.ts +93 -16
- package/src/pipeline/standard-lighting/errors.ts +6 -0
- package/src/pipeline/standard-lighting/graph.ts +158 -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 +35 -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 +78 -0
- package/src/pipeline/standard-pipeline.ts +124 -193
- package/src/pipeline/standard-post.ts +26 -7
- package/src/pipeline/standard-profile.ts +17 -47
- package/src/pipeline-builder.ts +5 -2
- package/src/pipeline-spec.ts +95 -21
- package/src/plugin.ts +4 -0
- package/src/point-shadow-inspection.ts +55 -0
- package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +56 -0
- package/src/prepare/extended-lighting/ltc-resources.ts +136 -0
- package/src/prepare/extended-lighting/resources.ts +389 -0
- package/src/prepare/extended-lighting/spot-modifiers.ts +194 -0
- package/src/prepare/extended-lighting/state.ts +92 -0
- package/src/record/__tests__/gpu-timing.unit.test.ts +177 -0
- package/src/record/__tests__/temporal-payload.unit.test.ts +64 -1
- package/src/record/__tests__/transparent-group2-selection.unit.test.ts +73 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +20 -1
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +40 -0
- package/src/record/frame-lighting.ts +591 -452
- package/src/record/frame-snapshot.ts +92 -39
- package/src/record/frame-targets.ts +17 -0
- package/src/record/frame.ts +662 -158
- 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 +112 -39
- package/src/record/helpers.ts +0 -58
- package/src/record/main-pass-geometry.ts +324 -119
- package/src/record/main-pass-material.ts +103 -10
- package/src/record/main-pass-sprite-draws.ts +99 -103
- package/src/record/main-pass.ts +71 -15
- package/src/record/mesh-ssbo.ts +47 -36
- package/src/record/render-context.ts +136 -3
- package/src/record/shadow-pass.ts +83 -68
- package/src/record/skybox-post-pass.ts +20 -4
- package/src/record/typed-frame-graph.ts +1034 -43
- package/src/record/view-ubo.ts +72 -47
- package/src/reflection/filter.ts +81 -0
- package/src/reflection/gpu-table.ts +44 -0
- package/src/reflection/inspection.ts +67 -0
- package/src/reflection/projection.ts +476 -0
- package/src/reflection/record-owner.ts +1283 -0
- package/src/render-contract.ts +93 -10
- package/src/render-graph-primitives.ts +9 -4
- package/src/render-pipeline.ts +122 -2
- package/src/render-system-extract.ts +1041 -225
- package/src/render-system.ts +1310 -85
- package/src/renderer.ts +222 -0
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +36 -0
- package/src/scene/probe-blend-record.ts +54 -0
- package/src/scene/probe-blend.ts +813 -0
- package/src/scene/render-scene-types.ts +0 -7
- package/src/scene/render-scene.ts +942 -171
- package/src/scene/visibility/bounds.ts +57 -0
- package/src/scene/visibility/budget.ts +40 -0
- package/src/scene/visibility/facet.ts +400 -0
- package/src/scene/visibility/gpu-frame-timing.ts +101 -0
- package/src/scene/visibility/gpu-lod.ts +119 -0
- package/src/scene/visibility/inspection.ts +313 -0
- package/src/scene/visibility/lod-selector.ts +84 -0
- package/src/scene/visibility/occlusion-confidence.ts +478 -0
- package/src/scene/visibility/occlusion-pass.ts +165 -0
- package/src/scene/visibility/occlusion-query-pool.ts +178 -0
- package/src/scene/visibility/occlusion-runtime.ts +672 -0
- package/src/scene/visibility/types.ts +50 -0
- package/src/shadow-atlas.ts +5 -5
- package/src/ssao-buffers.ts +9 -2
- package/src/ssr/admission.ts +451 -0
- package/src/ssr/composition.ts +73 -0
- package/src/ssr/errors.ts +76 -0
- package/src/ssr/identity.ts +12 -0
- package/src/systems/skin-palette-allocator.ts +1 -1
- package/src/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/temporal/frame-coordinator.ts +26 -0
- package/src/temporal/frame.ts +14 -1
- package/src/temporal/view.ts +11 -0
- package/src/tilemap-chunk-extract-system.ts +4 -4
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +59 -20
- package/src/typed-render-graph-primitives.ts +53 -3
- package/src/typed-shadow-passes.ts +46 -40
- package/src/volume/passes.ts +61 -58
- package/dist/.tsbuildinfo +0 -1
- package/dist/chunk-4XINDLAY.mjs.map +0 -1
- package/dist/chunk-CDTWTHZR.mjs.map +0 -1
- package/dist/chunk-M2MP4ZOU.mjs +0 -73
- package/dist/chunk-M2MP4ZOU.mjs.map +0 -1
- package/dist/chunk-PCHBPYML.mjs.map +0 -1
- package/dist/chunk-TBQJOK2L.mjs.map +0 -1
- package/dist/chunk-VFPLTKCU.mjs.map +0 -1
package/src/render-contract.ts
CHANGED
|
@@ -31,23 +31,60 @@ 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,
|
|
35
|
+
LightInspection,
|
|
36
|
+
LodOcclusionInspection,
|
|
34
37
|
MotionBlurInspection,
|
|
38
|
+
ReflectionProbeInspection,
|
|
35
39
|
RenderSceneInspection,
|
|
40
|
+
SsrDependenciesInspection,
|
|
36
41
|
TemporalTargetInspection,
|
|
37
42
|
TransmissionInspection,
|
|
38
43
|
} from './inspection-types';
|
|
44
|
+
import type { SsrAdmissionIdentity } from './ssr/identity';
|
|
45
|
+
import type {
|
|
46
|
+
RenderTarget,
|
|
47
|
+
RenderTargetDescriptor,
|
|
48
|
+
RenderTargetReadbackData,
|
|
49
|
+
RenderTargetReadbackRequest,
|
|
50
|
+
RenderTargetReadbackTicket,
|
|
51
|
+
RenderTargetTextureSource,
|
|
52
|
+
RenderTargetTextureSourceOptions,
|
|
53
|
+
} from './targets/contracts';
|
|
39
54
|
import type { TemporalInspection } from './temporal/inspection';
|
|
40
55
|
|
|
41
56
|
export type { TransmissionInspection } from './inspection-types';
|
|
42
57
|
export type { PointsLinesInspection } from './points-lines/inspection';
|
|
43
58
|
|
|
44
59
|
import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
|
|
60
|
+
import type { StandardLightingInspection } from './pipeline/standard-lighting/inspection';
|
|
45
61
|
import type { StandardProfile } from './pipeline/standard-profile';
|
|
62
|
+
import type { PointShadowInspection } from './point-shadow-inspection';
|
|
46
63
|
import type { PostProcessError } from './post-process-errors';
|
|
64
|
+
import type {
|
|
65
|
+
GpuPassTimingObservation,
|
|
66
|
+
GpuPassTimingOptions,
|
|
67
|
+
} from './record/gpu-pass-timing/index.js';
|
|
47
68
|
import type { VolumeTimingObservation } from './record/gpu-timing';
|
|
48
69
|
import type { TemporalView } from './temporal/view';
|
|
49
70
|
import type { VolumetricFogInspection } from './volume/inspection';
|
|
50
71
|
|
|
72
|
+
export type {
|
|
73
|
+
CubeCameraFace,
|
|
74
|
+
CubeCameraUpdateIntent,
|
|
75
|
+
} from './components/cube-camera';
|
|
76
|
+
|
|
77
|
+
export interface CubeCameraSnapshot {
|
|
78
|
+
readonly entityKey?: number;
|
|
79
|
+
readonly target: RenderTarget;
|
|
80
|
+
readonly position: readonly [number, number, number];
|
|
81
|
+
readonly near: number;
|
|
82
|
+
readonly far: number;
|
|
83
|
+
readonly updateIntent: import('./components/cube-camera').CubeCameraUpdateIntent;
|
|
84
|
+
readonly requestVersion: number;
|
|
85
|
+
readonly faceBudget: number;
|
|
86
|
+
}
|
|
87
|
+
|
|
51
88
|
export type RenderResult<T, E> =
|
|
52
89
|
| { readonly ok: true; readonly value: T }
|
|
53
90
|
| { readonly ok: false; readonly error: E };
|
|
@@ -65,13 +102,15 @@ export type RenderWorldLease = RenderReadLease;
|
|
|
65
102
|
export interface CameraSnapshot {
|
|
66
103
|
/** Stable ECS identity used by the frame plan's camera authority fact. */
|
|
67
104
|
readonly entityKey?: number;
|
|
105
|
+
/** Auxiliary logical target; physical views remain renderer-owned. */
|
|
106
|
+
readonly target?: RenderTarget;
|
|
68
107
|
/** World index supplied by the multi-world extract merge. */
|
|
69
108
|
readonly worldId?: number;
|
|
70
109
|
/** Camera-owned history generation forwarded into the frame plan. */
|
|
71
110
|
readonly historyVersion?: number;
|
|
72
|
-
/** World-space camera translation (mat4.getTranslation of
|
|
111
|
+
/** World-space camera translation (mat4.getTranslation of GlobalTransform.world). */
|
|
73
112
|
readonly position: Vec3;
|
|
74
|
-
/** Resolved world-space camera mat4, copied from
|
|
113
|
+
/** Resolved world-space camera mat4, copied from GlobalTransform.world. */
|
|
75
114
|
readonly world: Float32Array;
|
|
76
115
|
readonly fov: number;
|
|
77
116
|
readonly aspect: number;
|
|
@@ -105,6 +144,9 @@ export interface CameraSnapshot {
|
|
|
105
144
|
/** Stable identity owned by the Standard feature host for output transform. */
|
|
106
145
|
export const STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = 'forgeax::standard::output-transform';
|
|
107
146
|
|
|
147
|
+
/** Stable identity for the special FXAA pass' per-frame output policy UBO. */
|
|
148
|
+
export const FXAA_POST_PROCESS_ID = 'forgeax::post::fxaa';
|
|
149
|
+
|
|
108
150
|
export type {
|
|
109
151
|
EnvironmentFrame,
|
|
110
152
|
EnvironmentSource,
|
|
@@ -123,9 +165,6 @@ interface RenderPipelineStateView {
|
|
|
123
165
|
readonly colorAttachmentFormat: TextureFormat;
|
|
124
166
|
/** Renderer-owned View UBO shared by Standard lighting, shadows, and fog. */
|
|
125
167
|
readonly viewUniformBuffer: Buffer;
|
|
126
|
-
/** Renderer-owned SpotLight std430 buffer shared by Standard and volume. */
|
|
127
|
-
readonly pointLightsBuffer: Buffer;
|
|
128
|
-
readonly spotLightsBuffer: Buffer;
|
|
129
168
|
/** Fallback resources keep the shared view layout valid when no projector is authored. */
|
|
130
169
|
readonly defaultWhiteTextureView: TextureView;
|
|
131
170
|
readonly defaultSampler: Sampler;
|
|
@@ -156,6 +195,7 @@ interface RenderPipelineRuntime {
|
|
|
156
195
|
id: string,
|
|
157
196
|
bgl: BindGroupLayout,
|
|
158
197
|
colorFormat: GPUTextureFormat,
|
|
198
|
+
entry?: PostProcessShaderEntry,
|
|
159
199
|
) => RhiRenderPipeline | null;
|
|
160
200
|
}
|
|
161
201
|
|
|
@@ -237,6 +277,10 @@ export interface SpotLightProjectorFrameContext {
|
|
|
237
277
|
readonly texture: Texture;
|
|
238
278
|
readonly view: TextureView;
|
|
239
279
|
readonly sampler: Sampler;
|
|
280
|
+
/** Spot-light index in ExtractedLights.spot for the accepted texture. */
|
|
281
|
+
readonly spotIndex?: number;
|
|
282
|
+
/** Unified Standard Cluster slot index (points precede spots). */
|
|
283
|
+
readonly lightSlotIndex?: number;
|
|
240
284
|
}
|
|
241
285
|
|
|
242
286
|
/**
|
|
@@ -246,6 +290,20 @@ export interface SpotLightProjectorFrameContext {
|
|
|
246
290
|
export interface Renderer {
|
|
247
291
|
attach(world: World): RenderResult<RenderWorldLease, RenderError>;
|
|
248
292
|
draw(input: RenderFrameInput): RenderResult<FrameReceipt, RenderError>;
|
|
293
|
+
createRenderTarget(descriptor: RenderTargetDescriptor): RenderResult<RenderTarget, RenderError>;
|
|
294
|
+
resizeRenderTarget(
|
|
295
|
+
target: RenderTarget,
|
|
296
|
+
descriptor: RenderTargetDescriptor,
|
|
297
|
+
): RenderResult<void, RenderError>;
|
|
298
|
+
createRenderTargetTextureSource(
|
|
299
|
+
target: RenderTarget,
|
|
300
|
+
options: RenderTargetTextureSourceOptions,
|
|
301
|
+
): RenderResult<RenderTargetTextureSource, RenderError>;
|
|
302
|
+
requestTargetReadback(
|
|
303
|
+
target: RenderTarget,
|
|
304
|
+
request: RenderTargetReadbackRequest,
|
|
305
|
+
): RenderResult<RenderTargetReadbackTicket, RenderError>;
|
|
306
|
+
destroyRenderTarget(target: RenderTarget): RenderResult<void, RenderError>;
|
|
249
307
|
setProfile(profile: RenderProfile): RenderResult<void, RenderError>;
|
|
250
308
|
state(): RendererState;
|
|
251
309
|
inspect(): RenderInspection;
|
|
@@ -256,6 +314,7 @@ export interface Renderer {
|
|
|
256
314
|
subscribe(listener: (event: RendererEvent) => void): () => void;
|
|
257
315
|
releaseSurface(): RenderResult<void, RenderError>;
|
|
258
316
|
restoreSurface(): RenderResult<void, RenderError>;
|
|
317
|
+
/** Recover only from device-lost; a healthy renderer returns a guard error. */
|
|
259
318
|
recover(): Promise<RenderResult<void, RenderError>>;
|
|
260
319
|
dispose(): Promise<RenderResult<void, RenderError>>;
|
|
261
320
|
}
|
|
@@ -305,11 +364,12 @@ export interface FrameEnvironment {
|
|
|
305
364
|
|
|
306
365
|
/**
|
|
307
366
|
* 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.
|
|
367
|
+
* only with the matching FrameReceipt after `receipt.completed` and returns a
|
|
368
|
+
* structured Result error when the generation or frame identity is stale.
|
|
310
369
|
*/
|
|
311
370
|
export interface FrameObservationRequest {
|
|
312
|
-
readonly include: readonly ('timings' | 'draws' | 'bindings')[];
|
|
371
|
+
readonly include: readonly ('timings' | 'draws' | 'bindings' | 'target-readbacks')[];
|
|
372
|
+
readonly targetReadbacks?: readonly RenderTargetReadbackTicket[];
|
|
313
373
|
}
|
|
314
374
|
|
|
315
375
|
/**
|
|
@@ -340,8 +400,12 @@ export interface RenderFrameInput {
|
|
|
340
400
|
export interface FrameReceiptObservation {
|
|
341
401
|
readonly frameId: number;
|
|
342
402
|
readonly deviceGeneration: number;
|
|
343
|
-
readonly include: readonly ('timings' | 'draws' | 'bindings')[];
|
|
344
|
-
|
|
403
|
+
readonly include: readonly ('timings' | 'draws' | 'bindings' | 'target-readbacks')[];
|
|
404
|
+
/** Receipt-bound Render-owned GPU pass facts; absent when not requested. */
|
|
405
|
+
readonly timings?: GpuPassTimingObservation | undefined;
|
|
406
|
+
/** Receipt-bound volume GPU timing facts; absent when not requested. */
|
|
407
|
+
readonly volumeTimings?: VolumeTimingObservation | undefined;
|
|
408
|
+
readonly targetReadbacks?: readonly RenderTargetReadbackData[];
|
|
345
409
|
}
|
|
346
410
|
|
|
347
411
|
/** Stable backend facts for the Standard output transform projection. */
|
|
@@ -418,8 +482,15 @@ export interface RenderInspection {
|
|
|
418
482
|
readonly frustumStats: { readonly culled: number; readonly total: number };
|
|
419
483
|
readonly visibilityStats: { readonly explicitlyHidden: number };
|
|
420
484
|
readonly renderScene: RenderSceneInspection;
|
|
485
|
+
readonly reflectionProbes: ReflectionProbeInspection;
|
|
486
|
+
/** Renderer-owned SSR dependency seam; consumer facts are projected from live owners. */
|
|
487
|
+
readonly ssrDependencies: SsrDependenciesInspection;
|
|
421
488
|
/** Last completed transmission candidate facts, detached from GPU handles. */
|
|
422
489
|
readonly transmission?: TransmissionInspection;
|
|
490
|
+
/** Last prepared Standard transport facts, detached from GPU handles. */
|
|
491
|
+
readonly standardLighting?: StandardLightingInspection;
|
|
492
|
+
/** Renderer-owned point-shadow atlas budget facts from the last frame. */
|
|
493
|
+
readonly pointShadow?: PointShadowInspection;
|
|
423
494
|
readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
|
|
424
495
|
readonly perFramePassNames: readonly string[];
|
|
425
496
|
readonly bindGroupCounts: {
|
|
@@ -440,10 +511,15 @@ export interface RenderInspection {
|
|
|
440
511
|
readonly environment: EnvironmentInspection;
|
|
441
512
|
readonly temporal: TemporalInspection;
|
|
442
513
|
readonly bloom: BloomInspection;
|
|
514
|
+
/** Candidate/accepted/LKG facts for the single extendedLighting topology. */
|
|
515
|
+
readonly extendedLighting: LightInspection;
|
|
516
|
+
readonly directionalShadow: DirectionalShadowInspection;
|
|
443
517
|
/** Semantic Standard temporal target metadata; no graph or RHI handles. */
|
|
444
518
|
readonly temporalTarget?: TemporalTargetInspection;
|
|
445
519
|
/** Renderer-owned Motion Blur facts; absent when no component is active. */
|
|
446
520
|
readonly motionBlur?: MotionBlurInspection;
|
|
521
|
+
/** Bounded renderer-owned LOD/occlusion facts; absent before a candidate frame. */
|
|
522
|
+
readonly lodOcclusion?: LodOcclusionInspection;
|
|
447
523
|
}
|
|
448
524
|
|
|
449
525
|
/** Backend marker — single-element union preserved for future extensibility (D-2). */
|
|
@@ -607,6 +683,8 @@ export const RENDER_SCENE_STATE_PHASE_CATALOG = [
|
|
|
607
683
|
* attribution without guessing from RHI command counts.
|
|
608
684
|
*/
|
|
609
685
|
export const RENDER_RECORD_PHASE_CATALOG = [
|
|
686
|
+
'record/occlusion-query-submit',
|
|
687
|
+
'record/occlusion-global-advance',
|
|
610
688
|
'record/scene-state',
|
|
611
689
|
...RENDER_SCENE_STATE_PHASE_CATALOG,
|
|
612
690
|
'record/swapchain',
|
|
@@ -624,6 +702,7 @@ export type RenderRecordPhase = (typeof RENDER_RECORD_PHASE_CATALOG)[number];
|
|
|
624
702
|
|
|
625
703
|
export const RENDER_PHASE_CATALOG = [
|
|
626
704
|
'extract',
|
|
705
|
+
'occlusion-prepare',
|
|
627
706
|
'bind-groups',
|
|
628
707
|
'features',
|
|
629
708
|
'sort',
|
|
@@ -651,6 +730,10 @@ export interface RendererOptions {
|
|
|
651
730
|
readonly captureGpuTimings?: boolean | undefined;
|
|
652
731
|
/** Optional host-owned RHI lifecycle instrumentation, such as recording. */
|
|
653
732
|
readonly rhiInstrumentation?: RhiBackendInstrumentation | undefined;
|
|
733
|
+
/** Optional bounded GPU pass timing facts; this is not frame latency. */
|
|
734
|
+
readonly gpuPassTiming?: GpuPassTimingOptions | undefined;
|
|
735
|
+
/** Exact source/tree/lock/build identity binding for the renderer-owned SSR seam. */
|
|
736
|
+
readonly ssrIdentity?: SsrAdmissionIdentity | undefined;
|
|
654
737
|
// feat-20260608-create-app-param-surface-trim / M1 / AC-02: `clearColor`
|
|
655
738
|
// was deleted as a one-cut breaking change (AGENTS.md Change stance +
|
|
656
739
|
// 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,21 +35,115 @@ 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';
|
|
49
|
+
import type { OcclusionFrameProjection } from './scene/visibility/occlusion-runtime';
|
|
47
50
|
import type { TransmissionDemand } from './transmission/projection';
|
|
48
51
|
|
|
49
52
|
export type { RenderPipelineContext } from './render-contract';
|
|
50
53
|
|
|
51
54
|
export type RenderColorDomain = 'linearHdr' | 'linearLdr' | 'displayEncoded';
|
|
52
55
|
|
|
56
|
+
/** Backend admission inputs used by the existing Render candidate owner. */
|
|
57
|
+
export interface DirectionalShadowBackendAdmissionInput {
|
|
58
|
+
readonly backendKind: 'webgpu' | 'wgpu-webgl2' | 'null';
|
|
59
|
+
readonly requested: 'off' | DirectionalShadowFilterLabel;
|
|
60
|
+
readonly candidate: 'accepted' | 'failed';
|
|
61
|
+
readonly lastKnownGood?: DirectionalShadowFilterLabel | undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Bounded, truthful Directional effective-profile projection. */
|
|
65
|
+
export interface DirectionalShadowBackendAdmission {
|
|
66
|
+
readonly requested: 'off' | DirectionalShadowFilterLabel;
|
|
67
|
+
readonly effective: 'off' | DirectionalShadowFilterLabel | 'rhi-null-structural';
|
|
68
|
+
readonly status: 'accepted' | 'fallback' | 'rejected';
|
|
69
|
+
readonly fallbackReason?: 'webgl2-unsupported' | 'rhi-null-structural' | 'candidate-failed';
|
|
70
|
+
readonly lastKnownGood: boolean;
|
|
71
|
+
readonly pixelEvidence: 'available' | 'not-available';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Resolve a Directional profile only after the selected production candidate
|
|
76
|
+
* has been admitted. WebGL2 and RhiNull are the sole declared fallbacks;
|
|
77
|
+
* capable candidate failure retains a compatible LKG and never silently maps
|
|
78
|
+
* a failed PCSS request to PCF.
|
|
79
|
+
*/
|
|
80
|
+
export function resolveDirectionalShadowBackendAdmission(
|
|
81
|
+
input: DirectionalShadowBackendAdmissionInput,
|
|
82
|
+
): DirectionalShadowBackendAdmission {
|
|
83
|
+
if (input.requested === 'off') {
|
|
84
|
+
return {
|
|
85
|
+
requested: 'off',
|
|
86
|
+
effective: 'off',
|
|
87
|
+
status: 'accepted',
|
|
88
|
+
lastKnownGood: false,
|
|
89
|
+
pixelEvidence: 'not-available',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (input.backendKind === 'null') {
|
|
93
|
+
return {
|
|
94
|
+
requested: input.requested,
|
|
95
|
+
effective: 'rhi-null-structural',
|
|
96
|
+
status: 'fallback',
|
|
97
|
+
fallbackReason: 'rhi-null-structural',
|
|
98
|
+
lastKnownGood: false,
|
|
99
|
+
pixelEvidence: 'not-available',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (input.backendKind === 'wgpu-webgl2') {
|
|
103
|
+
const effective =
|
|
104
|
+
input.requested === 'pcssMedium'
|
|
105
|
+
? 'pcf3'
|
|
106
|
+
: input.requested === 'pcssHigh'
|
|
107
|
+
? 'pcf5'
|
|
108
|
+
: input.requested;
|
|
109
|
+
return {
|
|
110
|
+
requested: input.requested,
|
|
111
|
+
effective,
|
|
112
|
+
status: effective === input.requested ? 'accepted' : 'fallback',
|
|
113
|
+
...(effective === input.requested ? {} : { fallbackReason: 'webgl2-unsupported' as const }),
|
|
114
|
+
lastKnownGood: false,
|
|
115
|
+
pixelEvidence: 'available',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (input.candidate === 'accepted') {
|
|
119
|
+
return {
|
|
120
|
+
requested: input.requested,
|
|
121
|
+
effective: input.requested,
|
|
122
|
+
status: 'accepted',
|
|
123
|
+
lastKnownGood: false,
|
|
124
|
+
pixelEvidence: 'available',
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (input.lastKnownGood !== undefined) {
|
|
128
|
+
return {
|
|
129
|
+
requested: input.requested,
|
|
130
|
+
effective: input.lastKnownGood,
|
|
131
|
+
status: 'rejected',
|
|
132
|
+
fallbackReason: 'candidate-failed',
|
|
133
|
+
lastKnownGood: true,
|
|
134
|
+
pixelEvidence: 'available',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
requested: input.requested,
|
|
139
|
+
effective: input.requested,
|
|
140
|
+
status: 'rejected',
|
|
141
|
+
fallbackReason: 'candidate-failed',
|
|
142
|
+
lastKnownGood: false,
|
|
143
|
+
pixelEvidence: 'available',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
53
147
|
export interface ToneOutputContract {
|
|
54
148
|
readonly input: RenderColorDomain;
|
|
55
149
|
readonly toneMapped: boolean;
|
|
@@ -122,6 +216,8 @@ export interface RenderPipelineTopology {
|
|
|
122
216
|
* clear directly to the surface.
|
|
123
217
|
*/
|
|
124
218
|
readonly clearOnly?: boolean | undefined;
|
|
219
|
+
/** Whether Standard main draws carry the producer-owned fallback MRT. */
|
|
220
|
+
readonly reflectionFallback?: { readonly enabled: boolean } | undefined;
|
|
125
221
|
readonly surface: {
|
|
126
222
|
readonly width: number;
|
|
127
223
|
readonly height: number;
|
|
@@ -135,8 +231,13 @@ export interface RenderPipelineTopology {
|
|
|
135
231
|
readonly motionBlur: boolean;
|
|
136
232
|
};
|
|
137
233
|
readonly shadow: {
|
|
138
|
-
readonly
|
|
139
|
-
|
|
234
|
+
readonly directional:
|
|
235
|
+
| 'disabled'
|
|
236
|
+
| {
|
|
237
|
+
readonly mapSize: number;
|
|
238
|
+
readonly cascadeCount: 1 | 2 | 3 | 4;
|
|
239
|
+
};
|
|
240
|
+
readonly spotMapSize: number;
|
|
140
241
|
readonly pointCount: number;
|
|
141
242
|
readonly pointFaceSize: number;
|
|
142
243
|
readonly spotCount: number;
|
|
@@ -191,10 +292,19 @@ export interface RenderPipelineTopology {
|
|
|
191
292
|
};
|
|
192
293
|
readonly featureTopologySignature: string;
|
|
193
294
|
readonly gpuDrivenTopologySignature: string;
|
|
295
|
+
/** Stable Cluster transport/layout facts; excludes per-frame light payloads. */
|
|
296
|
+
readonly standardLightingTopologySignature?: string | undefined;
|
|
194
297
|
/** Internal graph fact; renderer callers do not configure transmission demand. */
|
|
195
298
|
readonly transmissionDemand?: TransmissionDemand | undefined;
|
|
196
299
|
}
|
|
197
300
|
|
|
301
|
+
/** Resolve the built-in final-output dither policy from the pipeline asset. */
|
|
302
|
+
export function resolveOutputDither(
|
|
303
|
+
config: import('@forgeax/engine-types').RenderPipelineAsset['config'],
|
|
304
|
+
): boolean {
|
|
305
|
+
return config?.outputDither ?? true;
|
|
306
|
+
}
|
|
307
|
+
|
|
198
308
|
export interface RenderPipelineFrame extends RenderPipelineContext, RenderGraphFrame {}
|
|
199
309
|
|
|
200
310
|
export interface RenderPipelineTarget {
|
|
@@ -320,6 +430,12 @@ export interface RenderPipelineGpuDrivenProjection {
|
|
|
320
430
|
|
|
321
431
|
export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame> {
|
|
322
432
|
readonly graph: RenderGraphBuilder<FrameCtx>;
|
|
433
|
+
/**
|
|
434
|
+
* The single prepared Standard lighting projection for this frame. The
|
|
435
|
+
* Forward and Deferred adapters consume this value; they never inspect raw
|
|
436
|
+
* light snapshots, cluster config, or capability facts themselves.
|
|
437
|
+
*/
|
|
438
|
+
readonly standardLighting?: StandardTopologyInputValue;
|
|
323
439
|
/**
|
|
324
440
|
* Renderer-owned capability facts needed for admission decisions. The
|
|
325
441
|
* Standard temporal producer must use the live device probe rather than
|
|
@@ -345,6 +461,8 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
|
|
|
345
461
|
readonly destination: GraphTextureView;
|
|
346
462
|
readonly level: number;
|
|
347
463
|
}) => void;
|
|
464
|
+
/** Renderer-owned occlusion query state for the primary scene pass. */
|
|
465
|
+
readonly occlusion?: OcclusionFrameProjection;
|
|
348
466
|
projectGpuDriven(target: {
|
|
349
467
|
readonly format: TextureFormat;
|
|
350
468
|
readonly sampleCount: 1 | 4;
|
|
@@ -354,6 +472,8 @@ export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame
|
|
|
354
472
|
semanticTargets?: readonly RenderPipelineTarget[],
|
|
355
473
|
namedTargets?: Readonly<Record<string, RenderPipelineTarget>>,
|
|
356
474
|
): Result<void, RenderPipelineBuildError>;
|
|
475
|
+
/** Add renderer-owned cube capture work to the active pipeline graph. */
|
|
476
|
+
contributeCubeCaptures?(): Result<void, RenderPipelineBuildError>;
|
|
357
477
|
/** Whether a producer-owned feature is installed for this graph build. */
|
|
358
478
|
hasFeature?(identity: string): boolean;
|
|
359
479
|
}
|