@forgeax/engine-render 0.1.3 → 0.1.6
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 +130 -641
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
- package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
- package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
- package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
- package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
- package/dist/assembly/backend-contract.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +207 -0
- package/dist/assembly/factory.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +84 -0
- package/dist/assembly/host-contract.d.ts.map +1 -0
- package/dist/{renderer → assembly}/material/assembly.d.ts +1 -2
- package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-projection.d.ts +30 -0
- package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
- package/dist/authoring.d.ts +10 -11
- package/dist/authoring.d.ts.map +1 -1
- package/dist/authoring.mjs +25 -3
- package/dist/authoring.mjs.map +1 -1
- package/dist/chunk-CQXZC5XI.mjs +182 -0
- package/dist/chunk-CQXZC5XI.mjs.map +1 -0
- package/dist/chunk-QC4VW3XJ.mjs +79 -0
- package/dist/chunk-QC4VW3XJ.mjs.map +1 -0
- package/dist/chunk-SCRSAK5B.mjs +480 -0
- package/dist/chunk-SCRSAK5B.mjs.map +1 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
- package/dist/components/glyph-text.d.ts +1 -1
- package/dist/components/glyph-text.d.ts.map +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/instances.d.ts +1 -1
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts +1 -1
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/mesh-filter.d.ts +7 -7
- package/dist/components/mesh-filter.d.ts.map +1 -1
- package/dist/components/scene-instance.d.ts +11 -11
- package/dist/components/skybox-background.d.ts +56 -0
- package/dist/components/skybox-background.d.ts.map +1 -0
- package/dist/components/skylight.d.ts +55 -0
- package/dist/components/skylight.d.ts.map +1 -0
- package/dist/components/sprite-animation.d.ts +2 -3
- package/dist/components/sprite-animation.d.ts.map +1 -1
- package/dist/components/sprite-instances.d.ts +1 -1
- package/dist/components/sprite-playback-mode.d.ts +6 -1
- package/dist/components/sprite-playback-mode.d.ts.map +1 -1
- package/dist/components/sprite-region-override.d.ts +2 -3
- package/dist/components/sprite-region-override.d.ts.map +1 -1
- package/dist/components/tile-layer.d.ts +5 -0
- package/dist/components/tile-layer.d.ts.map +1 -1
- package/dist/construct-renderer.d.ts +18 -1
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +27008 -4
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/debug-draw-glue.d.ts +2 -53
- package/dist/debug-draw-glue.d.ts.map +1 -1
- package/dist/device/device-scope.d.ts +83 -0
- package/dist/device/device-scope.d.ts.map +1 -0
- package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
- package/dist/device/gpu-residency.d.ts.map +1 -0
- package/dist/device/resource-types.d.ts +8 -0
- package/dist/device/resource-types.d.ts.map +1 -0
- package/dist/engine-metrics.d.ts +2 -2
- package/dist/engine-metrics.d.ts.map +1 -1
- package/dist/errors/recover.d.ts +28 -1
- package/dist/errors/recover.d.ts.map +1 -1
- package/dist/errors/render.d.ts +249 -258
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/features/fullscreen.d.ts +19 -0
- package/dist/features/fullscreen.d.ts.map +1 -0
- package/dist/features/host.d.ts +32 -26
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/morph/morph-feature.d.ts +39 -5
- package/dist/features/morph/morph-feature.d.ts.map +1 -1
- package/dist/features/plan.d.ts +182 -0
- package/dist/features/plan.d.ts.map +1 -0
- package/dist/features/prepared-gpu-work.d.ts +21 -17
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts +2 -1
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +11 -21
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts +2 -2
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +4 -7
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +2 -2
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/render-graph-resources.d.ts +6 -6
- package/dist/features/render-graph-resources.d.ts.map +1 -1
- package/dist/features/targets.d.ts +5 -5
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +11 -190
- package/dist/features/types.d.ts.map +1 -1
- package/dist/features/vocabulary.d.ts +14 -0
- package/dist/features/vocabulary.d.ts.map +1 -0
- package/dist/fullscreen-post-process-pass.d.ts +4 -25
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/glyph-text-layout-system.d.ts +3 -2
- package/dist/glyph-text-layout-system.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +6 -75
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +13 -112
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/view-gpu.d.ts +10 -66
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-resource.d.ts +3 -3
- package/dist/gpu-scene-schema.d.ts +1 -94
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +7 -33
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +3 -53
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +74 -180
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +1 -1
- package/dist/index.d.ts +13 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +165 -3
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +69 -0
- package/dist/inspection-types.d.ts.map +1 -0
- package/dist/instance-buffer-cache.d.ts +1 -4
- package/dist/instance-buffer-cache.d.ts.map +1 -1
- package/dist/internal.d.ts +1 -73
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +1 -43
- package/dist/internal.mjs.map +1 -1
- package/dist/lifecycle.d.ts +36 -2
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/materials.d.ts +0 -3
- package/dist/materials.d.ts.map +1 -1
- package/dist/mesh-material-bindings.d.ts +0 -1
- package/dist/mesh-material-bindings.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +75 -29
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts +5 -0
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts +31 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
- package/dist/pipeline/standard-profile.d.ts +40 -0
- package/dist/pipeline/standard-profile.d.ts.map +1 -0
- package/dist/pipeline-builder.d.ts +3 -3
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec-types.d.ts +24 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -0
- package/dist/pipeline-spec.d.ts +16 -155
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts +1 -14
- package/dist/plugin.d.ts.map +1 -1
- package/dist/post-process-errors.d.ts +18 -18
- package/dist/post-process-errors.d.ts.map +1 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +7 -73
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +44 -44
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts +5 -38
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +64 -52
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/helpers.d.ts +3 -2
- package/dist/record/helpers.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +5 -4
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +90 -59
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +28 -3
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +1 -1
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +276 -3
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +235 -0
- package/dist/record/render-context.d.ts.map +1 -0
- package/dist/record/shadow-pass.d.ts +15 -88
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -1
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +29 -7
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +3 -3
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/render-contract.d.ts +416 -0
- package/dist/render-contract.d.ts.map +1 -0
- package/dist/render-data.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts +14 -362
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +25 -64
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +107 -338
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +21 -713
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +58 -0
- package/dist/scene/render-scene-types.d.ts.map +1 -0
- package/dist/scene/render-scene.d.ts +105 -0
- package/dist/scene/render-scene.d.ts.map +1 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
- package/dist/ssao-buffers.d.ts +22 -3
- package/dist/ssao-buffers.d.ts.map +1 -1
- package/dist/systems/skin-palette-allocator.d.ts +2 -4
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/systems/skin-palette-types.d.ts +14 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -0
- package/dist/systems/transparent-sort-config.d.ts +23 -2
- package/dist/systems/transparent-sort-config.d.ts.map +1 -1
- package/dist/tilemap-chunk-extract-system.d.ts +4 -3
- package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +2 -4
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +3 -3
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/package.json +23 -23
- package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
- package/src/__tests__/callback-inference.test-d.ts +6 -3
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
- package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
- package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
- package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
- package/src/__tests__/factory-contract.integration.test.ts +158 -209
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
- package/src/__tests__/frame-observation.contract.test.ts +17 -8
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
- package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +9 -16
- package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
- package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
- package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
- package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
- package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
- package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
- package/src/__tests__/gpu-scene.unit.test.ts +10 -24
- package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
- package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
- package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
- package/src/__tests__/material-cooked-projection.unit.test.ts +2 -51
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +4 -23
- package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
- package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
- package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
- package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
- package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
- package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
- package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
- package/src/__tests__/profiler-default-off.test.ts +1 -1
- package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
- package/src/__tests__/profiler-phase-integration.test.ts +5 -13
- package/src/__tests__/profiler-phase-token.test.ts +3 -8
- package/src/__tests__/public-surface.test-d.ts +65 -3
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
- package/src/__tests__/render-error-code-owner.test-d.ts +18 -23
- package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
- package/src/__tests__/render-error-exhaustive.test-d.ts +8 -1
- package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
- package/src/__tests__/render-feature-context.test-d.ts +16 -40
- package/src/__tests__/render-feature-contract.test-d.ts +9 -18
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
- package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
- package/src/__tests__/render-feature-plan.test-d.ts +161 -0
- package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
- package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
- package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
- package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
- package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
- package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
- package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
- package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
- package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
- package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
- package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
- package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
- package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +46 -50
- package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
- package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
- package/src/__tests__/ssao-config.unit.test.ts +36 -0
- package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
- package/src/__tests__/standard-descriptors.test-d.ts +22 -0
- package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
- package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
- package/src/__tests__/surface-configuration.unit.test.ts +1 -2
- package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
- package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
- package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
- package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
- package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
- package/src/__tests__/visibility-extract.integration.test.ts +20 -11
- package/src/__tests__/visibility-extract.perf.test.ts +66 -32
- package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
- package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
- package/src/__tests__/visibility-instances.integration.test.ts +7 -11
- package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
- package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
- package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
- package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
- package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
- package/src/__tests__/vocabulary.unit.test.ts +1 -1
- package/src/assembly/backend-contract.ts +57 -0
- package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1709 -2693
- package/src/assembly/host-contract.ts +101 -0
- package/src/{renderer → assembly}/material/assembly.ts +1 -3
- package/src/assembly/material/pipeline-projection.ts +63 -0
- package/src/authoring.ts +14 -22
- package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
- package/src/components/glyph-text.ts +3 -2
- package/src/components/index.ts +7 -9
- package/src/components/instances.ts +4 -5
- package/src/components/light-helpers.ts +1 -1
- package/src/components/mesh-filter.ts +11 -10
- package/src/components/post-process-params.ts +3 -3
- package/src/components/scene-instance.ts +12 -12
- package/src/components/skybox-background.ts +103 -0
- package/src/components/{environment.ts → skylight.ts} +2 -111
- package/src/components/sprite-animation.ts +3 -4
- package/src/components/sprite-instances.ts +2 -2
- package/src/components/sprite-playback-mode.ts +7 -1
- package/src/components/sprite-region-override.ts +2 -3
- package/src/components/tile-layer.ts +8 -2
- package/src/construct-renderer.ts +67 -4
- package/src/debug-draw-glue.ts +8 -129
- package/src/device/device-scope.ts +306 -0
- package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
- package/src/device/resource-types.ts +20 -0
- package/src/engine-metrics.ts +12 -19
- package/src/errors/recover.ts +45 -3
- package/src/errors/render.ts +357 -460
- package/src/features/fullscreen.ts +46 -0
- package/src/features/host.ts +575 -309
- package/src/features/morph/morph-feature.ts +195 -105
- package/src/features/plan.ts +447 -0
- package/src/features/prepared-gpu-work.ts +72 -15
- package/src/features/prepared-graphics-store.ts +20 -6
- package/src/features/prepared-graphics.ts +12 -71
- package/src/features/render-graph-compute.ts +14 -5
- package/src/features/render-graph-contribution.ts +43 -63
- package/src/features/render-graph-raster.ts +11 -6
- package/src/features/render-graph-resources.ts +25 -23
- package/src/features/targets.ts +8 -21
- package/src/features/types.ts +39 -227
- package/src/features/vocabulary.ts +24 -0
- package/src/fullscreen-post-process-pass.ts +14 -57
- package/src/glyph-text-layout-system.ts +70 -96
- package/src/gpu-driven/batch-topology.ts +24 -202
- package/src/gpu-driven/production-raster.ts +93 -1108
- package/src/gpu-driven/view-gpu.ts +46 -192
- package/src/gpu-resource.ts +4 -4
- package/src/gpu-scene-schema.ts +11 -99
- package/src/gpu-scene.ts +231 -364
- package/src/hdrp-buffers.ts +12 -221
- package/src/ibl/IblPipelineCache.ts +471 -711
- package/src/ibl/skylight-bind-group.ts +4 -4
- package/src/index.ts +58 -217
- package/src/inspection-types.ts +76 -0
- package/src/instance-buffer-cache.ts +1 -29
- package/src/internal.ts +6 -85
- package/src/lifecycle.ts +64 -19
- package/src/materials.ts +7 -29
- package/src/mesh-material-bindings.ts +0 -1
- package/src/pbr-pipeline.ts +434 -53
- package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
- package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
- package/src/pipeline/standard-profile.ts +65 -0
- package/src/pipeline-builder.ts +60 -64
- package/src/pipeline-spec-types.ts +28 -0
- package/src/pipeline-spec.ts +72 -609
- package/src/plugin.ts +3 -75
- package/src/post-process-errors.ts +31 -33
- package/src/prepare/prepared-graphics-resolver.ts +5 -4
- package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
- package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
- package/src/record/frame-lighting.ts +74 -195
- package/src/record/frame-snapshot.ts +45 -60
- package/src/record/frame-targets.ts +8 -243
- package/src/record/frame.ts +509 -796
- package/src/record/helpers.ts +6 -11
- package/src/record/main-pass-geometry.ts +106 -147
- package/src/record/main-pass-material.ts +517 -190
- package/src/record/main-pass-sprite-draws.ts +198 -117
- package/src/record/main-pass.ts +162 -143
- package/src/record/mesh-ssbo.ts +517 -38
- package/src/record/render-context.ts +364 -0
- package/src/record/shadow-pass.ts +138 -1838
- package/src/record/skybox-post-pass.ts +12 -14
- package/src/record/typed-frame-graph.ts +215 -254
- package/src/record/view-ubo.ts +6 -37
- package/src/render-contract.ts +571 -0
- package/src/render-data.ts +3 -3
- package/src/render-graph-primitives.ts +76 -851
- package/src/render-pipeline.ts +104 -188
- package/src/render-system-extract.ts +1048 -1729
- package/src/render-system.ts +330 -1957
- package/src/scene/render-scene-types.ts +64 -0
- package/src/scene/render-scene.ts +1032 -0
- package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
- package/src/ssao-buffers.ts +167 -8
- package/src/systems/skin-palette-allocator.ts +21 -64
- package/src/systems/skin-palette-types.ts +14 -0
- package/src/systems/transparent-sort-config.ts +25 -3
- package/src/tilemap-chunk-extract-system.ts +53 -70
- package/src/typed-render-graph-primitives.ts +35 -24
- package/src/typed-shadow-passes.ts +26 -56
- package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
- package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
- package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
- package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
- package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
- package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
- package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
- package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
- package/dist/__tests__/camera-temporal.test.d.ts +0 -2
- package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
- package/dist/__tests__/environment-inspection.test.d.ts +0 -2
- package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
- package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
- package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
- package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
- package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
- package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
- package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
- package/dist/__tests__/materials.unit.test.d.ts +0 -2
- package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
- package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/plugin.test.d.ts +0 -2
- package/dist/__tests__/plugin.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
- package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
- package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
- package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
- package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
- package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
- package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
- package/dist/chunk-33UF5SAO.mjs +0 -7397
- package/dist/chunk-33UF5SAO.mjs.map +0 -1
- package/dist/chunk-A5QCJSNL.mjs +0 -29913
- package/dist/chunk-A5QCJSNL.mjs.map +0 -1
- package/dist/chunk-JMSB7AR4.mjs +0 -3
- package/dist/chunk-JMSB7AR4.mjs.map +0 -1
- package/dist/chunk-LXNGO6AO.mjs +0 -569
- package/dist/chunk-LXNGO6AO.mjs.map +0 -1
- package/dist/chunk-QRXPSX4X.mjs +0 -659
- package/dist/chunk-QRXPSX4X.mjs.map +0 -1
- package/dist/chunk-YAKEQPWO.mjs +0 -1439
- package/dist/chunk-YAKEQPWO.mjs.map +0 -1
- package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
- package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
- package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
- package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
- package/dist/components/__tests__/fog.test-d.d.ts +0 -2
- package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
- package/dist/components/__tests__/fog.test.d.ts +0 -2
- package/dist/components/__tests__/fog.test.d.ts.map +0 -1
- package/dist/components/atmosphere.d.ts +0 -18
- package/dist/components/atmosphere.d.ts.map +0 -1
- package/dist/components/environment.d.ts +0 -116
- package/dist/components/environment.d.ts.map +0 -1
- package/dist/deferred-lighting.d.ts +0 -13
- package/dist/deferred-lighting.d.ts.map +0 -1
- package/dist/dynamic-texture-store.d.ts +0 -42
- package/dist/dynamic-texture-store.d.ts.map +0 -1
- package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
- package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
- package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
- package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/generation.test.d.ts +0 -2
- package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
- package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
- package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
- package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
- package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
- package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
- package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
- package/dist/environment/__tests__/readiness.test.d.ts +0 -2
- package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
- package/dist/environment/__tests__/recovery.test.d.ts +0 -2
- package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
- package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
- package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
- package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
- package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/signature.test.d.ts +0 -2
- package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
- package/dist/environment/descriptors.d.ts +0 -2
- package/dist/environment/descriptors.d.ts.map +0 -1
- package/dist/environment/extracted-environment.d.ts +0 -53
- package/dist/environment/extracted-environment.d.ts.map +0 -1
- package/dist/environment/generation.d.ts +0 -62
- package/dist/environment/generation.d.ts.map +0 -1
- package/dist/environment/gpu-bundle.d.ts +0 -23
- package/dist/environment/gpu-bundle.d.ts.map +0 -1
- package/dist/environment/graph.d.ts +0 -108
- package/dist/environment/graph.d.ts.map +0 -1
- package/dist/environment/inspection.d.ts +0 -48
- package/dist/environment/inspection.d.ts.map +0 -1
- package/dist/environment/lifecycle.d.ts +0 -22
- package/dist/environment/lifecycle.d.ts.map +0 -1
- package/dist/environment/readiness.d.ts +0 -29
- package/dist/environment/readiness.d.ts.map +0 -1
- package/dist/environment/signature.d.ts +0 -70
- package/dist/environment/signature.d.ts.map +0 -1
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
- package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
- package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
- package/dist/extract/directional-csm.d.ts +0 -129
- package/dist/extract/directional-csm.d.ts.map +0 -1
- package/dist/extract/index.d.ts +0 -5
- package/dist/extract/index.d.ts.map +0 -1
- package/dist/extract/material-interface.d.ts +0 -56
- package/dist/extract/material-interface.d.ts.map +0 -1
- package/dist/extract/schema-readers.d.ts +0 -20
- package/dist/extract/schema-readers.d.ts.map +0 -1
- package/dist/features/graph-contribution.d.ts +0 -64
- package/dist/features/graph-contribution.d.ts.map +0 -1
- package/dist/features/index.d.ts +0 -21
- package/dist/features/index.d.ts.map +0 -1
- package/dist/features/morph/index.d.ts +0 -3
- package/dist/features/morph/index.d.ts.map +0 -1
- package/dist/features/morph/morph-bounds.d.ts +0 -42
- package/dist/features/morph/morph-bounds.d.ts.map +0 -1
- package/dist/features/scene-temporal.d.ts +0 -45
- package/dist/features/scene-temporal.d.ts.map +0 -1
- package/dist/features/taa-resolve.d.ts +0 -21
- package/dist/features/taa-resolve.d.ts.map +0 -1
- package/dist/frame-chain.d.ts +0 -14
- package/dist/frame-chain.d.ts.map +0 -1
- package/dist/gpu-driven/view-reference.d.ts.map +0 -1
- package/dist/gpu-resource-store.d.ts.map +0 -1
- package/dist/hdrp-cluster-membership.d.ts +0 -2
- package/dist/hdrp-cluster-membership.d.ts.map +0 -1
- package/dist/hdrp-pipeline.d.ts +0 -36
- package/dist/hdrp-pipeline.d.ts.map +0 -1
- package/dist/ibl/cubemap-projection.d.ts +0 -23
- package/dist/ibl/cubemap-projection.d.ts.map +0 -1
- package/dist/ibl/face-uniforms.d.ts +0 -65
- package/dist/ibl/face-uniforms.d.ts.map +0 -1
- package/dist/mesh-update-errors.d.ts +0 -71
- package/dist/mesh-update-errors.d.ts.map +0 -1
- package/dist/mipmap-generator.d.ts +0 -39
- package/dist/mipmap-generator.d.ts.map +0 -1
- package/dist/param-schema-projection-census.d.ts +0 -18
- package/dist/param-schema-projection-census.d.ts.map +0 -1
- package/dist/persistent-render-scene.d.ts +0 -158
- package/dist/persistent-render-scene.d.ts.map +0 -1
- package/dist/pipeline/index.d.ts +0 -11
- package/dist/pipeline/index.d.ts.map +0 -1
- package/dist/pipeline-errors.d.ts +0 -110
- package/dist/pipeline-errors.d.ts.map +0 -1
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
- package/dist/prepare/index.d.ts +0 -4
- package/dist/prepare/index.d.ts.map +0 -1
- package/dist/prepare/schema-readers.d.ts +0 -11
- package/dist/prepare/schema-readers.d.ts.map +0 -1
- package/dist/record/__tests__/environment-record.test.d.ts +0 -2
- package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
- package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
- package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
- package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
- package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
- package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
- package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
- package/dist/record/frame-observation.d.ts +0 -38
- package/dist/record/frame-observation.d.ts.map +0 -1
- package/dist/record/index.d.ts +0 -15
- package/dist/record/index.d.ts.map +0 -1
- package/dist/record/main-pass-skin.d.ts +0 -46
- package/dist/record/main-pass-skin.d.ts.map +0 -1
- package/dist/record/main-pass-sprite.d.ts +0 -69
- package/dist/record/main-pass-sprite.d.ts.map +0 -1
- package/dist/record/material-payload.d.ts +0 -43
- package/dist/record/material-payload.d.ts.map +0 -1
- package/dist/record/material-slot-plan.d.ts +0 -26
- package/dist/record/material-slot-plan.d.ts.map +0 -1
- package/dist/record/membership-timing.d.ts +0 -232
- package/dist/record/membership-timing.d.ts.map +0 -1
- package/dist/record/shadow-caster-uniform.d.ts +0 -8
- package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
- package/dist/record/shadow-submit-mode.d.ts +0 -66
- package/dist/record/shadow-submit-mode.d.ts.map +0 -1
- package/dist/render-dispatch-membership.d.ts +0 -47
- package/dist/render-dispatch-membership.d.ts.map +0 -1
- package/dist/render-pipeline-context.d.ts +0 -289
- package/dist/render-pipeline-context.d.ts.map +0 -1
- package/dist/render-pipeline-target.d.ts +0 -16
- package/dist/render-pipeline-target.d.ts.map +0 -1
- package/dist/render-scene-projection.d.ts +0 -174
- package/dist/render-scene-projection.d.ts.map +0 -1
- package/dist/render-system-fold.d.ts +0 -266
- package/dist/render-system-fold.d.ts.map +0 -1
- package/dist/renderer/asset-service.d.ts +0 -10
- package/dist/renderer/asset-service.d.ts.map +0 -1
- package/dist/renderer/backend-selection.d.ts.map +0 -1
- package/dist/renderer/environment-classify.d.ts +0 -6
- package/dist/renderer/environment-classify.d.ts.map +0 -1
- package/dist/renderer/environment-error.d.ts +0 -13
- package/dist/renderer/environment-error.d.ts.map +0 -1
- package/dist/renderer/material/pipeline-projection.d.ts +0 -91
- package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
- package/dist/renderer/renderer-factory.d.ts +0 -283
- package/dist/renderer/renderer-factory.d.ts.map +0 -1
- package/dist/renderer.d.ts +0 -771
- package/dist/renderer.d.ts.map +0 -1
- package/dist/scene-utils/collect-subtree.d.ts +0 -11
- package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
- package/dist/ssao-data.d.ts +0 -34
- package/dist/ssao-data.d.ts.map +0 -1
- package/dist/surface-format.d.ts +0 -10
- package/dist/surface-format.d.ts.map +0 -1
- package/dist/taa-history-store.d.ts +0 -88
- package/dist/taa-history-store.d.ts.map +0 -1
- package/dist/temporal-coverage.d.ts +0 -35
- package/dist/temporal-coverage.d.ts.map +0 -1
- package/dist/temporal-frame-transaction.d.ts +0 -92
- package/dist/temporal-frame-transaction.d.ts.map +0 -1
- package/dist/temporal-inspection.d.ts +0 -57
- package/dist/temporal-inspection.d.ts.map +0 -1
- package/dist/temporal-view.d.ts +0 -43
- package/dist/temporal-view.d.ts.map +0 -1
- package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
- package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
- package/dist/urp-pipeline.d.ts +0 -4
- package/dist/urp-pipeline.d.ts.map +0 -1
- package/src/__tests__/analytic-sky-contract.test.ts +0 -27
- package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
- package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
- package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
- package/src/__tests__/backend-selection.integration.test.ts +0 -11
- package/src/__tests__/camera-temporal.test-d.ts +0 -8
- package/src/__tests__/camera-temporal.test.ts +0 -188
- package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
- package/src/__tests__/environment-inspection.test.ts +0 -45
- package/src/__tests__/fog-ai-user.fixture.ts +0 -350
- package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
- package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
- package/src/__tests__/fog-inspection.integration.test.ts +0 -127
- package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
- package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
- package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
- package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
- package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
- package/src/__tests__/fog-temporal.integration.test.ts +0 -115
- package/src/__tests__/frame-chain.unit.test.ts +0 -26
- package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
- package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
- package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
- package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
- package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
- package/src/__tests__/materials.unit.test.ts +0 -25
- package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
- package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
- package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
- package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
- package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
- package/src/__tests__/plugin.test.ts +0 -25
- package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
- package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
- package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
- package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
- package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
- package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
- package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
- package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
- package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
- package/src/__tests__/render-feature-order.unit.test.ts +0 -66
- package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
- package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
- package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
- package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
- package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
- package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
- package/src/__tests__/taa-history-store.unit.test.ts +0 -196
- package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
- package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
- package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
- package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
- package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
- package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
- package/src/components/__tests__/atmosphere-red.test.ts +0 -51
- package/src/components/__tests__/atmosphere.test.ts +0 -79
- package/src/components/__tests__/fog.test-d.ts +0 -49
- package/src/components/__tests__/fog.test.ts +0 -60
- package/src/components/atmosphere.ts +0 -64
- package/src/deferred-lighting.ts +0 -92
- package/src/dynamic-texture-store.ts +0 -111
- package/src/environment/README.md +0 -76
- package/src/environment/__tests__/failure-injection.test.ts +0 -50
- package/src/environment/__tests__/generation-red.test.ts +0 -64
- package/src/environment/__tests__/generation.test.ts +0 -37
- package/src/environment/__tests__/graph-transaction.test.ts +0 -85
- package/src/environment/__tests__/inspection-red.test.ts +0 -53
- package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
- package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
- package/src/environment/__tests__/readiness.test.ts +0 -42
- package/src/environment/__tests__/recovery.test.ts +0 -62
- package/src/environment/__tests__/resize-dispose.test.ts +0 -30
- package/src/environment/__tests__/signature-red.test.ts +0 -45
- package/src/environment/__tests__/signature.test.ts +0 -60
- package/src/environment/descriptors.ts +0 -7
- package/src/environment/extracted-environment.ts +0 -239
- package/src/environment/generation.ts +0 -158
- package/src/environment/gpu-bundle.ts +0 -144
- package/src/environment/graph.ts +0 -588
- package/src/environment/inspection.ts +0 -107
- package/src/environment/lifecycle.ts +0 -124
- package/src/environment/readiness.ts +0 -76
- package/src/environment/signature.ts +0 -185
- package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
- package/src/extract/__tests__/environment-source.test.ts +0 -105
- package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
- package/src/extract/directional-csm.ts +0 -959
- package/src/extract/index.ts +0 -10
- package/src/extract/material-interface.ts +0 -604
- package/src/extract/schema-readers.ts +0 -27
- package/src/features/graph-contribution.ts +0 -577
- package/src/features/index.ts +0 -100
- package/src/features/morph/index.ts +0 -24
- package/src/features/morph/morph-bounds.ts +0 -123
- package/src/features/scene-temporal.ts +0 -274
- package/src/features/taa-resolve.ts +0 -244
- package/src/frame-chain.ts +0 -21
- package/src/hdrp-cluster-membership.ts +0 -70
- package/src/ibl/cubemap-projection.ts +0 -60
- package/src/ibl/face-uniforms.ts +0 -150
- package/src/mesh-update-errors.ts +0 -113
- package/src/mipmap-generator.ts +0 -244
- package/src/param-schema-projection-census.ts +0 -73
- package/src/persistent-render-scene.ts +0 -1752
- package/src/pipeline/index.ts +0 -40
- package/src/pipeline-errors.ts +0 -172
- package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
- package/src/prepare/index.ts +0 -8
- package/src/prepare/schema-readers.ts +0 -20
- package/src/record/__tests__/environment-record.test.ts +0 -35
- package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
- package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
- package/src/record/__tests__/render-submission.integration.test.ts +0 -76
- package/src/record/__tests__/render-submission.perf.test.ts +0 -141
- package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
- package/src/record/frame-observation.ts +0 -122
- package/src/record/index.ts +0 -15
- package/src/record/main-pass-skin.ts +0 -51
- package/src/record/main-pass-sprite.ts +0 -166
- package/src/record/material-payload.ts +0 -292
- package/src/record/material-slot-plan.ts +0 -68
- package/src/record/membership-timing.ts +0 -1012
- package/src/record/shadow-caster-uniform.ts +0 -37
- package/src/record/shadow-submit-mode.ts +0 -277
- package/src/render-dispatch-membership.ts +0 -155
- package/src/render-pipeline-context.ts +0 -332
- package/src/render-pipeline-target.ts +0 -96
- package/src/render-scene-projection.ts +0 -1738
- package/src/render-system-fold.ts +0 -531
- package/src/renderer/asset-service.ts +0 -32
- package/src/renderer/backend-selection.ts +0 -121
- package/src/renderer/environment-classify.ts +0 -30
- package/src/renderer/environment-error.ts +0 -19
- package/src/renderer/material/pipeline-projection.ts +0 -140
- package/src/renderer.ts +0 -940
- package/src/scene-utils/collect-subtree.ts +0 -40
- package/src/ssao-data.ts +0 -106
- package/src/surface-format.ts +0 -37
- package/src/taa-history-store.ts +0 -429
- package/src/temporal-coverage.ts +0 -106
- package/src/temporal-frame-transaction.ts +0 -301
- package/src/temporal-inspection.ts +0 -194
- package/src/temporal-view.ts +0 -174
- package/src/tilemap/resolve-tileset-runtime.ts +0 -72
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assets/asset-decoders.ts","../src/features/morph/morph-bounds.ts","../src/features/morph/morph-feature.ts","../src/scene-utils/collect-subtree.ts","../src/scene-instances/post-spawn-resolve-joints.ts","../src/plugin.ts"],"names":["err","ok"],"mappings":"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","file":"chunk-LXNGO6AO.mjs","sourcesContent":["import { validateCookedMaterialRecord } from '@forgeax/engine-pack';\nimport {\n type AssetDecoderContribution,\n type AssetKind,\n type AssetLoadError,\n err,\n MATERIAL_TEXTURE_SLOTS,\n type MaterialAsset,\n ok,\n type RenderPipelineAsset,\n type SamplerAsset,\n} from '@forgeax/engine-types';\n\nfunction invalid(guid: string, expected: string, reason: string) {\n return err({\n code: 'asset-package-invalid' as const,\n expected,\n hint: 'recook the render asset and publish its complete cooked payload',\n detail: { guid, reason },\n });\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction validMaterial(value: unknown): value is MaterialAsset {\n if (!record(value) || value.kind !== 'material') return false;\n if (value.cooked !== undefined && !validateCookedMaterialRecord(value.cooked).ok) {\n return false;\n }\n if (value.passes !== undefined && !Array.isArray(value.passes)) return false;\n if (value.parameters !== undefined && !Array.isArray(value.parameters)) return false;\n return value.values === undefined || record(value.values);\n}\n\nfunction resolveMaterialWireRef(\n value: unknown,\n refs: readonly string[],\n field: string,\n guid: string,\n): ReturnType<typeof ok<string | number>> | ReturnType<typeof err<AssetLoadError>> {\n if (typeof value !== 'number') return ok(value as string | number);\n if (!Number.isSafeInteger(value) || value < 0 || refs[value] === undefined) {\n return err<AssetLoadError>({\n code: 'asset-package-invalid',\n expected: `${field} to reference a GUID through the material Pack refs[] table`,\n hint: 'recook the material so every texture or sampler ref has a matching refs[] entry',\n detail: { guid, reason: `${field} refs[${value}] is out of bounds` },\n });\n }\n return ok(refs[value] as string);\n}\n\nfunction resolveMaterialWireRefs(\n value: MaterialAsset,\n refs: readonly string[],\n guid: string,\n): ReturnType<typeof ok<MaterialAsset>> | ReturnType<typeof err<AssetLoadError>> {\n if (refs.length === 0) return ok(value);\n\n let changed = false;\n let parent = value.parent;\n if (typeof parent === 'number') {\n const resolved = resolveMaterialWireRef(parent, refs, 'parent', guid);\n if (!resolved.ok) return resolved;\n parent = resolved.value as unknown as MaterialAsset['parent'];\n changed = true;\n }\n\n if (value.values === undefined) {\n return changed ? ok({ ...value, ...(parent === undefined ? {} : { parent }) }) : ok(value);\n }\n\n const textureFields = new Set(\n value.parameters === undefined\n ? MATERIAL_TEXTURE_SLOTS\n : value.parameters\n .filter((parameter) => parameter.type === 'texture')\n .map((parameter) => parameter.name),\n );\n const values = { ...value.values };\n for (const [field, raw] of Object.entries(values)) {\n if (typeof raw === 'number' && textureFields.has(field)) {\n const resolved = resolveMaterialWireRef(raw, refs, field, guid);\n if (!resolved.ok) return resolved;\n values[field] = resolved.value as NonNullable<MaterialAsset['values']>[string];\n changed = true;\n continue;\n }\n if (!record(raw)) continue;\n const rawRecord = raw as unknown as Record<string, unknown>;\n let rewritten: Record<string, unknown> | undefined;\n for (const key of ['texture', 'sampler'] as const) {\n if (!(key in rawRecord)) continue;\n const resolved = resolveMaterialWireRef(rawRecord[key], refs, `${field}.${key}`, guid);\n if (!resolved.ok) return resolved;\n if (resolved.value !== rawRecord[key]) {\n rewritten ??= { ...rawRecord };\n rewritten[key] = resolved.value;\n changed = true;\n }\n }\n if (rewritten !== undefined) {\n values[field] = rewritten as unknown as NonNullable<MaterialAsset['values']>[string];\n }\n }\n return ok(changed ? { ...value, ...(parent === undefined ? {} : { parent }), values } : value);\n}\n\nexport const materialContribution: AssetDecoderContribution<MaterialAsset, 'material'> = {\n kind: { kind: 'material' } as AssetKind<MaterialAsset, 'material'>,\n consumer: 'Render MaterialScene',\n decoder: {\n async decode({ envelope }) {\n if (!validMaterial(envelope.payload)) {\n return invalid(\n envelope.guid,\n 'a material payload with cooked passes, parameters, and values',\n 'material owner validation failed',\n );\n }\n return resolveMaterialWireRefs(envelope.payload, envelope.refs, envelope.guid);\n },\n },\n};\n\nexport const samplerContribution: AssetDecoderContribution<SamplerAsset, 'sampler'> = {\n kind: { kind: 'sampler' } as AssetKind<SamplerAsset, 'sampler'>,\n consumer: 'Render DeviceScope',\n decoder: {\n async decode({ envelope }) {\n return envelope.payload.kind === 'sampler'\n ? ok(envelope.payload)\n : invalid(envelope.guid, 'a sampler payload', 'sampler owner validation failed');\n },\n },\n};\n\nexport const renderPipelineContribution: AssetDecoderContribution<\n RenderPipelineAsset,\n 'render-pipeline'\n> = {\n kind: { kind: 'render-pipeline' } as AssetKind<RenderPipelineAsset, 'render-pipeline'>,\n consumer: 'Render Pipeline',\n decoder: {\n async decode({ envelope }) {\n const payload = envelope.payload;\n return payload.kind === 'render-pipeline' && payload.pipelineId.trim().length > 0\n ? ok(payload)\n : invalid(\n envelope.guid,\n 'a render-pipeline payload with a pipelineId',\n 'render-pipeline owner validation failed',\n );\n },\n },\n};\n","export const MORPH_MAX_TARGETS = 8;\n\nexport type MorphVec3 = readonly [number, number, number];\n\nexport interface MorphBounds {\n readonly min: MorphVec3;\n readonly max: MorphVec3;\n}\n\nexport interface MorphTargetBounds {\n readonly min: MorphVec3;\n readonly max: MorphVec3;\n}\n\nexport interface MorphCullInput {\n readonly weights?: ArrayLike<number>;\n readonly expectedWeightCount: number;\n readonly baseAabbIntersectsFrustum: boolean;\n}\n\nexport type MorphCullDecision = 'draw' | 'cull';\n\nfunction finiteVec3(value: MorphVec3): boolean {\n return value.every((component) => Number.isFinite(component));\n}\n\nfunction validWeights(weights: ArrayLike<number> | undefined, expected: number): boolean {\n if (weights === undefined || weights.length !== expected) return false;\n for (let index = 0; index < weights.length; index++) {\n if (!Number.isFinite(weights[index] ?? Number.NaN)) return false;\n }\n return true;\n}\n\n/** Compute a conservative AABB from base bounds and target delta bounds. */\nexport function deriveMorphBounds(\n base: MorphBounds,\n targets: readonly MorphTargetBounds[],\n weights: ArrayLike<number>,\n): MorphBounds {\n if (\n !finiteVec3(base.min) ||\n !finiteVec3(base.max) ||\n targets.length > MORPH_MAX_TARGETS ||\n !validWeights(weights, targets.length)\n ) {\n return base;\n }\n\n const min = [base.min[0], base.min[1], base.min[2]];\n const max = [base.max[0], base.max[1], base.max[2]];\n for (let targetIndex = 0; targetIndex < targets.length; targetIndex++) {\n const target = targets[targetIndex];\n const weight = weights[targetIndex] ?? 0;\n if (target === undefined || !finiteVec3(target.min) || !finiteVec3(target.max)) return base;\n for (let axis = 0; axis < 3; axis++) {\n const low = (weight >= 0 ? target.min[axis] : target.max[axis]) ?? 0;\n const high = (weight >= 0 ? target.max[axis] : target.min[axis]) ?? 0;\n min[axis] = (min[axis] ?? 0) + weight * low;\n max[axis] = (max[axis] ?? 0) + weight * high;\n }\n }\n return {\n min: [min[0] ?? 0, min[1] ?? 0, min[2] ?? 0],\n max: [max[0] ?? 0, max[1] ?? 0, max[2] ?? 0],\n };\n}\n\n/** Keep non-zero valid morphs drawable even when their base AABB is outside. */\nexport function morphCullDecision(input: MorphCullInput): MorphCullDecision {\n if (!Number.isInteger(input.expectedWeightCount) || input.expectedWeightCount < 0) return 'cull';\n if (!validWeights(input.weights, input.expectedWeightCount)) {\n return 'cull';\n }\n for (let index = 0; index < input.expectedWeightCount; index++) {\n if ((input.weights?.[index] ?? 0) !== 0) return 'draw';\n }\n return input.baseAabbIntersectsFrustum ? 'draw' : 'cull';\n}\n\nexport interface MorphReentryState {\n seen: boolean;\n visible: boolean;\n generation: number;\n weights: Float32Array | undefined;\n}\n\nexport interface MorphReentryInput {\n readonly frameNumber: number;\n readonly visible: boolean;\n readonly generation: number;\n readonly weights: ArrayLike<number>;\n}\n\nexport interface MorphReentryResult {\n readonly frameNumber: number;\n readonly reentered: boolean;\n readonly clearStale: boolean;\n readonly weights: readonly number[];\n}\n\nexport function createMorphReentryState(): MorphReentryState {\n return { seen: false, visible: false, generation: -1, weights: undefined };\n}\n\n/** Track visibility transitions so a re-entry always rewrites the current weights. */\nexport function stepMorphReentry(\n state: MorphReentryState,\n input: MorphReentryInput,\n): MorphReentryResult {\n const reentered =\n state.seen && input.visible && (!state.visible || state.generation !== input.generation);\n const clearStale = reentered && state.weights !== undefined;\n const weights = Array.from(\n { length: input.weights.length },\n (_, index) => input.weights[index] ?? 0,\n );\n state.seen = true;\n state.visible = input.visible;\n state.generation = input.generation;\n state.weights = new Float32Array(weights);\n return { frameNumber: input.frameNumber, reentered, clearStale, weights };\n}\n","import type { World } from '@forgeax/engine-ecs';\nimport { err, ok } from '@forgeax/engine-types';\nimport { RenderFeatureStageFailedError } from '../../errors/render';\nimport type { RenderFeatureGpuBufferRef } from '../prepared-gpu-work';\nimport type { RenderFeature } from '../types';\nimport {\n createMorphReentryState,\n deriveMorphBounds,\n MORPH_MAX_TARGETS,\n type MorphBounds,\n type MorphReentryState,\n type MorphTargetBounds,\n morphCullDecision,\n stepMorphReentry,\n} from './morph-bounds';\n\nconst COMPUTE_STAGE = 0x4;\nconst MORPH_WEIGHTS_BYTES = MORPH_MAX_TARGETS * Float32Array.BYTES_PER_ELEMENT;\nconst MORPH_WORKGROUP_SIZE = 64;\n\nexport const MORPH_COMPUTE_WGSL = `\nstruct MorphWeights { values: array<f32, 8> };\n@group(0) @binding(0) var<storage, read> source: array<vec4<f32>>;\n@group(0) @binding(1) var<storage, read_write> output: array<vec4<f32>>;\n@group(0) @binding(2) var<uniform> weights: MorphWeights;\n\n@compute @workgroup_size(${MORPH_WORKGROUP_SIZE})\nfn morph_main(@builtin(global_invocation_id) id: vec3<u32>) {\n let vertex = id.x;\n let vertex_count = arrayLength(&output);\n if (vertex >= vertex_count) { return; }\n var position = source[vertex];\n for (var target_index = 0u; target_index < 8u; target_index = target_index + 1u) {\n position = position + source[(target_index + 1u) * vertex_count + vertex] * weights.values[target_index];\n }\n output[vertex] = position;\n}\n`;\n\nexport interface MorphFeatureRenderable {\n readonly identity: string;\n readonly vertexCount: number;\n readonly baseBounds: MorphBounds;\n readonly targetBounds: readonly MorphTargetBounds[];\n readonly weights: ArrayLike<number>;\n readonly baseAabbIntersectsFrustum: boolean;\n readonly basePositions?: ArrayLike<number>;\n readonly targetDeltas?: ArrayLike<number>;\n}\n\nexport interface MorphFeatureCollectContext {\n readonly worlds: readonly World[];\n readonly frameNumber: number;\n}\n\nexport interface MorphFeatureOptions {\n readonly collect: (context: MorphFeatureCollectContext) => readonly MorphFeatureRenderable[];\n}\n\nexport interface MorphFeatureDraw {\n readonly identity: string;\n readonly vertexCount: number;\n readonly targetCount: number;\n readonly bounds: MorphBounds;\n readonly weights: Float32Array;\n readonly reentered: boolean;\n readonly clearStale: boolean;\n readonly source: Float32Array;\n}\n\nexport interface MorphFeatureFrame {\n readonly frameNumber: number;\n readonly draws: readonly MorphFeatureDraw[];\n readonly culledCount: number;\n readonly zeroWeightCount: number;\n readonly reentryCount: number;\n}\n\nexport interface MorphFeature extends RenderFeature<MorphFeatureFrame> {\n /** Resolve the current output buffer for an evidence readback or downstream draw. */\n preparedOutput(identity: string): RenderFeatureGpuBufferRef | undefined;\n}\n\ninterface MorphGpuState {\n readonly program: import('../prepared-gpu-work').RenderFeatureGpuProgramRef;\n readonly source: import('../prepared-gpu-work').RenderFeatureGpuBufferRef;\n readonly output: import('../prepared-gpu-work').RenderFeatureGpuBufferRef;\n readonly weights: import('../prepared-gpu-work').RenderFeatureGpuBufferRef;\n readonly bindings: import('../prepared-gpu-work').RenderFeatureGpuBindingsRef;\n}\n\nfunction stageFailure(stage: 'prepare' | 'contribute'): RenderFeatureStageFailedError {\n return new RenderFeatureStageFailedError('forgeax.morph', -1, stage, 'next-frame');\n}\n\nfunction copyWeights(input: ArrayLike<number>): Float32Array {\n const weights = new Float32Array(MORPH_MAX_TARGETS);\n for (let index = 0; index < Math.min(input.length, MORPH_MAX_TARGETS); index++) {\n weights[index] = input[index] ?? 0;\n }\n return weights;\n}\n\nfunction copySource(renderable: MorphFeatureRenderable, targetCount: number): Float32Array {\n const source = new Float32Array((MORPH_MAX_TARGETS + 1) * renderable.vertexCount * 4);\n const basePositions = renderable.basePositions;\n const targetDeltas = renderable.targetDeltas;\n for (let vertex = 0; vertex < renderable.vertexCount; vertex++) {\n const base = vertex * 4;\n source[base] = basePositions?.[vertex * 3] ?? 0;\n source[base + 1] = basePositions?.[vertex * 3 + 1] ?? 0;\n source[base + 2] = basePositions?.[vertex * 3 + 2] ?? 0;\n source[base + 3] = 1;\n for (let target = 0; target < targetCount; target++) {\n const sourceBase = (target + 1) * renderable.vertexCount * 4 + vertex * 4;\n const deltaBase = (target * renderable.vertexCount + vertex) * 3;\n source[sourceBase] = targetDeltas?.[deltaBase] ?? 0;\n source[sourceBase + 1] = targetDeltas?.[deltaBase + 1] ?? 0;\n source[sourceBase + 2] = targetDeltas?.[deltaBase + 2] ?? 0;\n source[sourceBase + 3] = 0;\n }\n }\n return source;\n}\n\nfunction validRenderable(renderable: MorphFeatureRenderable): boolean {\n return (\n renderable.identity.length > 0 &&\n Number.isInteger(renderable.vertexCount) &&\n renderable.vertexCount > 0 &&\n renderable.targetBounds.length > 0 &&\n renderable.targetBounds.length <= MORPH_MAX_TARGETS &&\n renderable.weights.length === renderable.targetBounds.length\n );\n}\n\nexport function createMorphFeature(options: MorphFeatureOptions): MorphFeature {\n const reentry = new Map<string, MorphReentryState>();\n const prepared = new Map<string, MorphGpuState>();\n\n const feature: MorphFeature = {\n identity: 'forgeax.morph',\n requiredCapabilities: ['compute', 'storageBuffer'],\n extract: ({ worlds, frameNumber }) => {\n const renderables = options.collect({ worlds, frameNumber });\n const draws: MorphFeatureDraw[] = [];\n let culledCount = 0;\n let zeroWeightCount = 0;\n let reentryCount = 0;\n for (const renderable of renderables) {\n if (!validRenderable(renderable)) return err(stageFailure('prepare'));\n const weights = copyWeights(renderable.weights);\n const decision = morphCullDecision({\n weights: renderable.weights,\n expectedWeightCount: renderable.targetBounds.length,\n baseAabbIntersectsFrustum: renderable.baseAabbIntersectsFrustum,\n });\n const state = reentry.get(renderable.identity) ?? createMorphReentryState();\n reentry.set(renderable.identity, state);\n const transition = stepMorphReentry(state, {\n frameNumber,\n visible: decision === 'draw',\n generation: 0,\n weights,\n });\n if (decision === 'cull') {\n culledCount += 1;\n if (weights.every((weight) => weight === 0)) zeroWeightCount += 1;\n continue;\n }\n if (transition.reentered) reentryCount += 1;\n draws.push({\n identity: renderable.identity,\n vertexCount: renderable.vertexCount,\n targetCount: renderable.targetBounds.length,\n bounds: deriveMorphBounds(\n renderable.baseBounds,\n renderable.targetBounds,\n renderable.weights,\n ),\n weights,\n reentered: transition.reentered,\n clearStale: transition.clearStale,\n source: copySource(renderable, renderable.targetBounds.length),\n });\n }\n prepared.clear();\n return ok({\n frameNumber,\n draws,\n culledCount,\n zeroWeightCount,\n reentryCount,\n });\n },\n prepare: (data, context) => {\n if (data.draws.length === 0) return ok(undefined);\n const gpu = context.gpu;\n if (gpu === undefined) return err(stageFailure('prepare'));\n const program = gpu.prepareProgram('morph.compute', {\n wgsl: MORPH_COMPUTE_WGSL,\n entryPoints: ['morph_main'],\n bindings: [\n {\n label: 'forgeax.morph.bindings',\n entries: [\n { binding: 0, visibility: COMPUTE_STAGE, buffer: { type: 'read-only-storage' } },\n { binding: 1, visibility: COMPUTE_STAGE, buffer: { type: 'storage' } },\n { binding: 2, visibility: COMPUTE_STAGE, buffer: { type: 'uniform' } },\n ],\n },\n ],\n });\n if (!program.ok) return err(program.error);\n for (const draw of data.draws) {\n const prefix = `morph.${draw.identity}`;\n const source = gpu.prepareBuffer(`${prefix}.source`, {\n size: draw.source.byteLength,\n usage: ['storage'],\n data: draw.source,\n });\n if (!source.ok) return err(source.error);\n const output = gpu.prepareBuffer(`${prefix}.output`, {\n size: draw.vertexCount * 16,\n usage: ['storage', 'vertex', 'copy-src'],\n });\n if (!output.ok) return err(output.error);\n const weights = gpu.prepareBuffer(`${prefix}.weights`, {\n size: MORPH_WEIGHTS_BYTES,\n usage: ['uniform'],\n data: draw.weights,\n });\n if (!weights.ok) return err(weights.error);\n const bindings = gpu.prepareBindings(`${prefix}.bindings`, {\n program: program.value,\n entries: [\n { binding: 0, buffer: source.value },\n { binding: 1, buffer: output.value },\n { binding: 2, buffer: weights.value },\n ],\n });\n if (!bindings.ok) return err(bindings.error);\n prepared.set(draw.identity, {\n program: program.value,\n source: source.value,\n output: output.value,\n weights: weights.value,\n bindings: bindings.value,\n });\n }\n return ok(undefined);\n },\n contribute: (data, context) => {\n if (data.draws.length === 0) return ok(undefined);\n const gpu = context.gpu;\n if (gpu === undefined) return err(stageFailure('contribute'));\n for (const draw of data.draws) {\n const state = prepared.get(draw.identity);\n if (state === undefined) return err(stageFailure('contribute'));\n const added = context.staging.addComputePass(`morph.${draw.identity}`, {\n program: state.program,\n bindings: state.bindings,\n dispatches: [\n {\n entryPoint: 'morph_main',\n workgroups: [Math.max(1, Math.ceil(draw.vertexCount / MORPH_WORKGROUP_SIZE))],\n bindings: state.bindings,\n },\n ],\n });\n if (!added.ok) return added;\n }\n return ok(undefined);\n },\n recover: () => {\n prepared.clear();\n return ok(undefined);\n },\n preparedOutput: (identity) => prepared.get(identity)?.output,\n dispose: () => {\n prepared.clear();\n reentry.clear();\n return ok(undefined);\n },\n };\n return feature;\n}\n","// M1 shared util — collectSubtree (AC-16).\n// Extracted from post-spawn-resolve-joints.ts:116-133.\n// Walks Children.entities BFS from spawnRoot; accepts optional external visited Set\n// for cross-root de-duplication (AC-03).\n\nimport type { EntityHandle, World } from '@forgeax/engine-ecs';\n\nimport { Children } from '@forgeax/engine-scene';\n\n/**\n * Walk `Children.entities` BFS from `spawnRoot` to collect all descendant\n * entities (incl. spawnRoot itself). When a shared `visited` Set is passed,\n * it is reused across roots for cross-root de-duplication; when omitted a\n * fresh Set is created (single-root / backward-compat).\n *\n * Entities without a `Children` component surface as leaves.\n */\nexport function collectSubtree(\n world: World,\n spawnRoot: EntityHandle,\n visited?: Set<number>,\n): Set<number> {\n if (visited === undefined) visited = new Set<number>();\n if (visited.has(spawnRoot as number)) return visited;\n const queue: number[] = [spawnRoot as number];\n visited.add(spawnRoot as number);\n while (queue.length > 0) {\n const cur = queue.shift() as number;\n const childrenData = world.get(cur as EntityHandle, Children);\n if (!childrenData.ok) continue;\n const list = childrenData.value.entities as ArrayLike<number>;\n for (let i = 0; i < list.length; i++) {\n const child = list[i] as number;\n if (visited.has(child)) continue;\n visited.add(child);\n queue.push(child);\n }\n }\n return visited;\n}\n","// @forgeax/engine-runtime — postSpawnResolveJoints hook (M1 / T-14).\n//\n// Invoked after sceneInstances.instantiate to auto-wire Skin.joints: Entity[]\n// from the SkinAsset.jointPaths via Name-component lookup on the\n// spawned entity subtree. This is the v1 missing item #2: instantiate auto-calls\n// postSpawnResolveJoints so AI users never manually populate Skin.joints.\n//\n// Resolution protocol (plan-strategy D-6a + tweak-20260611 D-7 subtree-scope):\n// - From the spawnRoot, walk ChildOf relations BFS to collect the spawned\n// subtree's entities. nameIndex is built only over those entities.\n// - For each Skin-bearing entity in the subtree, resolve the skeleton handle\n// to jointPaths via the resolver.\n// - For each jointPath leaf name, match against the subtree-local Name index.\n// - Same-name sibling within the subtree: first-match with console.warn (D-6a).\n// - Missing entity: fail-fast 'skin-joint-path-unresolved' error.\n// - Empty jointPaths: no-op (no crash).\n//\n// Why subtree-scope (tweak-20260611 D-7):\n// Without scope, multiple instantiate() calls on the same SceneAsset (e.g. 3\n// Fox foxes side-by-side) all wire to the FIRST instance's joint entities\n// because Name leaf strings collide globally — Skin.joints[] points to\n// instance-0's bones for every spawn, three foxes share one skeleton, poses\n// cannot differ. Scoping to ChildOf descendants of spawnRoot eliminates the\n// collision: each spawn has its own copy of the subtree, names collide only\n// among siblings within the same spawn, where D-6a's first-match-with-warn\n// remains the correct policy.\n//\n// Decision anchors:\n// - requirements AC-14 (post-spawn auto-wire)\n// - plan-strategy D-6a (first-match strategy within subtree)\n// - tweak-20260611 plan-strategy D-7 (subtree-scope)\n// - charter P3 (explicit failure: path-unresolved fail-fast)\n\nimport type { EntityHandle, World } from '@forgeax/engine-ecs';\nimport { Name } from '@forgeax/engine-scene';\nimport { Skin } from '@forgeax/engine-skinning';\nimport type { SkinAsset } from '@forgeax/engine-types';\nimport { collectSubtree } from '../scene-utils/collect-subtree';\n\n// feat-20260705-runtime-tier2-decomposition M1 / w6 (D-1): SkinJointResolver\n// relocated to registry/instantiate.ts so the hook contract travels with the\n// instantiate cluster into @forgeax/engine-assets-runtime. Imported back here as\n// a forward (runtime -> assets-runtime-bound module) type-only reference and\n// re-exported for existing consumers of this module's SkinJointResolver export.\nexport interface SkinJointResolver {\n resolveSkinAsset(skeletonHandle: number): SkinAsset | undefined;\n}\n\ninterface JointPathUnresolvedError {\n code: 'skin-joint-path-unresolved';\n expected: string;\n hint: string;\n detail: {\n skinEntity: number;\n path: readonly string[];\n failedAtIndex: number;\n };\n}\n\ninterface SkinAssetUnresolvedError {\n code: 'skin-asset-unresolved';\n expected: string;\n hint: string;\n detail: {\n skinEntity: number;\n skeletonHandle: number;\n };\n}\n\ntype ResolveError = JointPathUnresolvedError | SkinAssetUnresolvedError;\n\nexport function postSpawnResolveJoints(\n world: World,\n resolver: SkinJointResolver,\n spawnRoot: EntityHandle,\n): { ok: true } | { ok: false; error: ResolveError } {\n // tweak-20260611 D-7: scope nameIndex to the spawnRoot's ChildOf-descendant\n // subtree (incl. spawnRoot itself). Multiple instantiate() calls on the same\n // SceneAsset each get an independent subtree, so leaf-name collisions across\n // instances no longer wire all spawns to the first instance's joints.\n const subtree = collectSubtree(world, spawnRoot);\n const nameIndex = new Map<string, number[]>();\n const nameQuery = world.query({ read: [Name] });\n if (nameQuery.ok) {\n for (const row of nameQuery.value) {\n if (!subtree.has(row.entity as number)) continue;\n const nameVal = row.get(Name).value;\n const list = nameIndex.get(nameVal) ?? [];\n list.push(row.entity);\n nameIndex.set(nameVal, list);\n }\n }\n\n // Walk Skin-bearing entities IN THE SUBTREE and resolve joints. Skin is\n // matched through the owner identity projection, and entities outside the subtree\n // are filtered after readEntityAt (cheaper than per-archetype filtering).\n const skinQuery = world.query({ read: [Skin] });\n if (!skinQuery.ok) return { ok: true };\n for (const queryRow of skinQuery.value) {\n const entity = queryRow.entity;\n if (!subtree.has(entity as number)) continue;\n const skeletonHandle = queryRow.get(Skin).skeleton as number;\n\n const skinAsset = resolver.resolveSkinAsset(skeletonHandle);\n if (skinAsset === undefined) {\n // feat-20260612 M2 fixup: was a silent `continue` that left\n // `Skin.joints` empty -- the M2-introduced\n // JointCountMismatchError fail-fast in render-system-extract then\n // triggered every frame on the browser-async-pack-fetch path.\n // The cure is to load SkinAssets through the SceneAsset.skinGuids\n // cross-edge (gltfImporter scene branch emits the SkinAsset GUIDs into\n // the scene envelope's refs[], the runtime recursion source) so this\n // resolver should always succeed; if it does not, fail-fast here\n // with a precise errorCode rather than silently producing an\n // unresolvable Skin.joints state.\n return {\n ok: false,\n error: {\n code: 'skin-asset-unresolved',\n expected: `SkinAsset registered for skeleton handle ${skeletonHandle} when instantiate triggers postSpawnResolveJoints`,\n hint: `SkinAsset matching skeletonGuid for handle ${skeletonHandle} was not found in AssetRegistry; verify the SceneAsset.skinGuids[] cross-edge is populated by the importer (gltfImporter scene branch) and that AssetRegistry.load(sceneGuid, sceneAssetKind) recursively loaded each SkinAsset before instantiate (browser-async-pack-fetch path)`,\n detail: { skinEntity: entity, skeletonHandle },\n },\n };\n }\n\n const jointEntityList: number[] = [];\n for (const jointPath of skinAsset.jointPaths) {\n const pathSegments = jointPath.split('/').filter(Boolean);\n if (pathSegments.length === 0) continue;\n\n const leafName = pathSegments[pathSegments.length - 1];\n if (leafName === undefined) continue;\n\n const nameMatches = nameIndex.get(leafName);\n if (nameMatches === undefined || nameMatches.length === 0) {\n return {\n ok: false,\n error: {\n code: 'skin-joint-path-unresolved',\n expected: `joint entity with Name=\"${leafName}\" exists in the spawned subtree (root entity ${spawnRoot})`,\n hint: `joint path \"${jointPath}\" for skin entity ${entity} could not be resolved within spawnRoot ${spawnRoot}'s ChildOf-subtree; verify glTF node names are preserved and instantiateScene seeded a Children mirror`,\n detail: {\n skinEntity: entity,\n path: pathSegments,\n failedAtIndex: pathSegments.length - 1,\n },\n },\n };\n }\n\n if (nameMatches.length > 1) {\n console.warn(\n `[Skin] same-name sibling: \"${leafName}\" matches ${nameMatches.length} entities ` +\n `within spawn subtree of root ${spawnRoot}; using first-match (entity ${nameMatches[0]}) per D-6a`,\n );\n }\n\n jointEntityList.push(nameMatches[0] as number);\n }\n\n world.set(entity, Skin, {\n joints: new Uint32Array(jointEntityList),\n } as never);\n }\n\n return { ok: true };\n}\n","import type { Component, World } from '@forgeax/engine-ecs';\nimport type { Plugin } from '@forgeax/engine-plugin';\nimport {\n SCENE_ASSET_SKIN_RESOLVER_RESOURCE_KEY,\n type SceneAssetSkinResolver,\n worldSetSceneInstantiateHook,\n} from '@forgeax/engine-scene';\n\nimport { Camera } from './components/camera';\nimport { DirectionalLight } from './components/directional-light';\nimport { SkyboxBackground, Skylight } from './components/environment';\nimport { GlyphText } from './components/glyph-text';\nimport { Instances } from './components/instances';\nimport { Layer } from './components/layer';\nimport { MeshFilter } from './components/mesh-filter';\nimport { MeshRenderer } from './components/mesh-renderer';\nimport { PointLight } from './components/point-light';\nimport { PointLightShadow } from './components/point-light-shadow';\nimport { PostProcessParams } from './components/post-process-params';\nimport { SceneInstance } from './components/scene-instance';\nimport { SortKey } from './components/sort-key';\nimport { SpotLight } from './components/spot-light';\nimport { SpriteAnimation } from './components/sprite-animation';\nimport { SpriteInstances } from './components/sprite-instances';\nimport { SpriteRegionOverride } from './components/sprite-region-override';\nimport { TileLayer } from './components/tile-layer';\nimport { Tilemap } from './components/tilemap';\nimport { Visibility } from './components/visibility';\nimport type { RenderFeature } from './features';\nimport type { Renderer } from './renderer';\nimport { postSpawnResolveJoints } from './scene-instances/post-spawn-resolve-joints';\n\nconst RENDER_COMPONENTS: readonly Component[] = [\n Camera,\n DirectionalLight,\n GlyphText,\n Instances,\n Layer,\n MeshFilter,\n MeshRenderer,\n PointLight,\n PointLightShadow,\n PostProcessParams,\n SceneInstance,\n SkyboxBackground,\n Skylight,\n SortKey,\n SpotLight,\n SpriteAnimation,\n SpriteInstances,\n SpriteRegionOverride,\n TileLayer,\n Tilemap,\n Visibility,\n];\n\nfunction registerRenderComponents(world: World): () => void {\n const leases = RENDER_COMPONENTS.map((component) =>\n world.components.register(component).unwrap(),\n );\n return () => {\n for (let index = leases.length - 1; index >= 0; index -= 1) leases[index]?.dispose();\n };\n}\n\nfunction installSceneInstantiateHook(world: World): () => void {\n worldSetSceneInstantiateHook(world, (currentWorld, root) => {\n if (!currentWorld.hasResource(SCENE_ASSET_SKIN_RESOLVER_RESOURCE_KEY)) {\n return { ok: true };\n }\n const resolver = currentWorld.getResource<SceneAssetSkinResolver>(\n SCENE_ASSET_SKIN_RESOLVER_RESOURCE_KEY,\n );\n return postSpawnResolveJoints(currentWorld, resolver, root);\n });\n return () => worldSetSceneInstantiateHook(world, null);\n}\n\ndeclare module '@forgeax/engine-plugin' {\n interface EngineContextServices {\n renderer?: Renderer;\n }\n}\n\n/** Install the built-in render and authoring component vocabulary in one World. */\nexport function renderComponentsPlugin(): Plugin {\n return {\n name: 'render-components',\n inject: ['world'],\n apply(ctx) {\n ctx.effect(() => registerRenderComponents(ctx.world), 'render/components');\n ctx.effect(() => installSceneInstantiateHook(ctx.world), 'render/scene-instantiate-hook');\n },\n };\n}\n\n/** Provide the renderer without transferring its host-owned lifetime. */\nexport function rendererPlugin(renderer: Renderer): Plugin {\n return {\n name: 'renderer',\n provide: 'renderer',\n apply(ctx) {\n ctx.provide('renderer', renderer);\n },\n };\n}\n\n/** Provide an App/Worker-owned Renderer and release it after dependent Fibers. */\nexport function ownedRendererPlugin(renderer: Renderer): Plugin {\n return {\n name: 'renderer',\n provide: 'renderer',\n apply(ctx) {\n ctx.provide('renderer', renderer);\n ctx.effect(() => () => renderer.dispose(), 'render/renderer');\n },\n };\n}\n\n/** Install a producer at Renderer safe points and remove it with the owning Fiber. */\nexport function renderFeaturePlugin(feature: RenderFeature<unknown>): Plugin {\n return {\n name: `render-feature:${feature.identity}`,\n inject: ['renderer'],\n async apply(ctx) {\n const renderer = ctx.renderer;\n if (renderer === undefined)\n throw new Error('render feature plugin requires the renderer service');\n const installed = await renderer.installRenderFeature(feature);\n if (!installed.ok) throw installed.error;\n return async () => {\n const removed = await renderer.uninstallRenderFeature(feature);\n if (!removed.ok) throw removed.error;\n };\n },\n };\n}\n"]}
|