@forgeax/engine-render 0.1.2
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/LICENSE +202 -0
- package/README.md +1019 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/analytic-sky-contract.test.d.ts +2 -0
- package/dist/__tests__/analytic-sky-contract.test.d.ts.map +1 -0
- package/dist/__tests__/analytic-sky-falsify.test.d.ts +2 -0
- package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +1 -0
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +2 -0
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +1 -0
- package/dist/__tests__/authoring-path.unit.test.d.ts +2 -0
- package/dist/__tests__/authoring-path.unit.test.d.ts.map +1 -0
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +2 -0
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +1 -0
- package/dist/__tests__/backend-selection.integration.test.d.ts +2 -0
- package/dist/__tests__/backend-selection.integration.test.d.ts.map +1 -0
- package/dist/__tests__/callback-inference.test-d.d.ts +2 -0
- package/dist/__tests__/callback-inference.test-d.d.ts.map +1 -0
- package/dist/__tests__/camera-temporal.test-d.d.ts +2 -0
- package/dist/__tests__/camera-temporal.test-d.d.ts.map +1 -0
- package/dist/__tests__/camera-temporal.test.d.ts +2 -0
- package/dist/__tests__/camera-temporal.test.d.ts.map +1 -0
- package/dist/__tests__/cluster-binner.test.d.ts +2 -0
- package/dist/__tests__/cluster-binner.test.d.ts.map +1 -0
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +2 -0
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +1 -0
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +2 -0
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +1 -0
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +2 -0
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +2 -0
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +1 -0
- package/dist/__tests__/environment-inspection.test.d.ts +2 -0
- package/dist/__tests__/environment-inspection.test.d.ts.map +1 -0
- package/dist/__tests__/factory-contract.integration.test.d.ts +2 -0
- package/dist/__tests__/factory-contract.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fog-ai-user.fixture.d.ts +2 -0
- package/dist/__tests__/fog-ai-user.fixture.d.ts.map +1 -0
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +16 -0
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +1 -0
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-inspection.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-inspection.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-owner-state.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-public-surface.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-source-absence.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-temporal.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-temporal.integration.test.d.ts.map +1 -0
- package/dist/__tests__/frame-chain.unit.test.d.ts +2 -0
- package/dist/__tests__/frame-chain.unit.test.d.ts.map +1 -0
- package/dist/__tests__/frame-observation.contract.test.d.ts +2 -0
- package/dist/__tests__/frame-observation.contract.test.d.ts.map +1 -0
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +2 -0
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +6 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +12 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +2 -0
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +7 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene.unit.test.d.ts.map +1 -0
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +2 -0
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +1 -0
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +2 -0
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +1 -0
- package/dist/__tests__/injection-kind-owner.test-d.d.ts +2 -0
- package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +2 -0
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts +2 -0
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts +2 -0
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts +2 -0
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +2 -0
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-derived-payload.integration.test.d.ts +2 -0
- package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +2 -0
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +2 -0
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/materials.unit.test.d.ts +2 -0
- package/dist/__tests__/materials.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +2 -0
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +2 -0
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +1 -0
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +2 -0
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +1 -0
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +2 -0
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +1 -0
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts +2 -0
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-pass-trace.test.d.ts +2 -0
- package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +2 -0
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/plugin.test.d.ts +2 -0
- package/dist/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +2 -0
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-default-off.test.d.ts +2 -0
- package/dist/__tests__/profiler-default-off.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-catalog.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-integration.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-integration.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-token.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-token.test.d.ts.map +1 -0
- package/dist/__tests__/public-pipeline-id.test-d.d.ts +2 -0
- package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +1 -0
- package/dist/__tests__/public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +2 -0
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-error-code-owner.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-construction.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-context.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-context.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-contract.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-contract.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-docs.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-errors.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-graph.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-order.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-order.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-retry.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-staging.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +7 -0
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb-gpu.d.ts +7 -0
- package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts +2 -0
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +12 -0
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-scene-projection.unit.test.d.ts +2 -0
- package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +2 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +2 -0
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +1 -0
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +2 -0
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +2 -0
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +1 -0
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts +2 -0
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +1 -0
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +2 -0
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/surface-configuration.unit.test.d.ts +2 -0
- package/dist/__tests__/surface-configuration.unit.test.d.ts.map +1 -0
- package/dist/__tests__/taa-history-store.unit.test.d.ts +2 -0
- package/dist/__tests__/taa-history-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +2 -0
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +1 -0
- package/dist/__tests__/temporal-inspection.unit.test.d.ts +2 -0
- package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +2 -0
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +1 -0
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +2 -0
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +1 -0
- package/dist/__tests__/urp-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +2 -0
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-extract.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-extract.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-extract.perf.test.d.ts +2 -0
- package/dist/__tests__/visibility-extract.perf.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-instances.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-instances.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/visibility-resolver.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vocabulary.unit.test.d.ts +2 -0
- package/dist/__tests__/vocabulary.unit.test.d.ts.map +1 -0
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +2 -0
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +1 -0
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +2 -0
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +1 -0
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +2 -0
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +1 -0
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +2 -0
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +1 -0
- package/dist/assets/asset-decoders.d.ts +5 -0
- package/dist/assets/asset-decoders.d.ts.map +1 -0
- package/dist/assets/render-asset-port.d.ts +17 -0
- package/dist/assets/render-asset-port.d.ts.map +1 -0
- package/dist/assets/resolve-render-asset.d.ts +6 -0
- package/dist/assets/resolve-render-asset.d.ts.map +1 -0
- package/dist/authoring.d.ts +12 -0
- package/dist/authoring.d.ts.map +1 -0
- package/dist/authoring.mjs +5 -0
- package/dist/authoring.mjs.map +1 -0
- package/dist/chunk-33UF5SAO.mjs +7397 -0
- package/dist/chunk-33UF5SAO.mjs.map +1 -0
- package/dist/chunk-A5QCJSNL.mjs +29913 -0
- package/dist/chunk-A5QCJSNL.mjs.map +1 -0
- package/dist/chunk-JMSB7AR4.mjs +3 -0
- package/dist/chunk-JMSB7AR4.mjs.map +1 -0
- package/dist/chunk-LXNGO6AO.mjs +569 -0
- package/dist/chunk-LXNGO6AO.mjs.map +1 -0
- package/dist/chunk-QRXPSX4X.mjs +659 -0
- package/dist/chunk-QRXPSX4X.mjs.map +1 -0
- package/dist/chunk-YAKEQPWO.mjs +1439 -0
- package/dist/chunk-YAKEQPWO.mjs.map +1 -0
- package/dist/cluster-binner.d.ts +152 -0
- package/dist/cluster-binner.d.ts.map +1 -0
- package/dist/components/__tests__/atmosphere-red.test.d.ts +2 -0
- package/dist/components/__tests__/atmosphere-red.test.d.ts.map +1 -0
- package/dist/components/__tests__/atmosphere.test.d.ts +2 -0
- package/dist/components/__tests__/atmosphere.test.d.ts.map +1 -0
- package/dist/components/__tests__/fog.test-d.d.ts +2 -0
- package/dist/components/__tests__/fog.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/fog.test.d.ts +2 -0
- package/dist/components/__tests__/fog.test.d.ts.map +1 -0
- package/dist/components/__tests__/schema-parity.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts +2 -0
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +1 -0
- package/dist/components/atmosphere.d.ts +18 -0
- package/dist/components/atmosphere.d.ts.map +1 -0
- package/dist/components/camera.d.ts +311 -0
- package/dist/components/camera.d.ts.map +1 -0
- package/dist/components/directional-light.d.ts +76 -0
- package/dist/components/directional-light.d.ts.map +1 -0
- package/dist/components/environment.d.ts +116 -0
- package/dist/components/environment.d.ts.map +1 -0
- package/dist/components/glyph-text.d.ts +26 -0
- package/dist/components/glyph-text.d.ts.map +1 -0
- package/dist/components/index.d.ts +22 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/instances.d.ts +41 -0
- package/dist/components/instances.d.ts.map +1 -0
- package/dist/components/layer.d.ts +34 -0
- package/dist/components/layer.d.ts.map +1 -0
- package/dist/components/light-helpers.d.ts +53 -0
- package/dist/components/light-helpers.d.ts.map +1 -0
- package/dist/components/mesh-filter.d.ts +24 -0
- package/dist/components/mesh-filter.d.ts.map +1 -0
- package/dist/components/mesh-renderer.d.ts +33 -0
- package/dist/components/mesh-renderer.d.ts.map +1 -0
- package/dist/components/point-light-shadow.d.ts +27 -0
- package/dist/components/point-light-shadow.d.ts.map +1 -0
- package/dist/components/point-light.d.ts +35 -0
- package/dist/components/point-light.d.ts.map +1 -0
- package/dist/components/post-process-params.d.ts +5 -0
- package/dist/components/post-process-params.d.ts.map +1 -0
- package/dist/components/scene-instance.d.ts +140 -0
- package/dist/components/scene-instance.d.ts.map +1 -0
- package/dist/components/sort-key.d.ts +44 -0
- package/dist/components/sort-key.d.ts.map +1 -0
- package/dist/components/spot-light.d.ts +81 -0
- package/dist/components/spot-light.d.ts.map +1 -0
- package/dist/components/sprite-animation.d.ts +75 -0
- package/dist/components/sprite-animation.d.ts.map +1 -0
- package/dist/components/sprite-instances.d.ts +51 -0
- package/dist/components/sprite-instances.d.ts.map +1 -0
- package/dist/components/sprite-playback-mode.d.ts +37 -0
- package/dist/components/sprite-playback-mode.d.ts.map +1 -0
- package/dist/components/sprite-region-override.d.ts +47 -0
- package/dist/components/sprite-region-override.d.ts.map +1 -0
- package/dist/components/tile-layer.d.ts +101 -0
- package/dist/components/tile-layer.d.ts.map +1 -0
- package/dist/components/tilemap.d.ts +25 -0
- package/dist/components/tilemap.d.ts.map +1 -0
- package/dist/components/visibility.d.ts +22 -0
- package/dist/components/visibility.d.ts.map +1 -0
- package/dist/construct-renderer.d.ts +2 -0
- package/dist/construct-renderer.d.ts.map +1 -0
- package/dist/construct-renderer.mjs +6 -0
- package/dist/construct-renderer.mjs.map +1 -0
- package/dist/debug-draw-glue.d.ts +56 -0
- package/dist/debug-draw-glue.d.ts.map +1 -0
- package/dist/deferred-lighting.d.ts +13 -0
- package/dist/deferred-lighting.d.ts.map +1 -0
- package/dist/dynamic-texture-store.d.ts +42 -0
- package/dist/dynamic-texture-store.d.ts.map +1 -0
- package/dist/engine-metrics.d.ts +23 -0
- package/dist/engine-metrics.d.ts.map +1 -0
- package/dist/environment/__tests__/failure-injection.test.d.ts +2 -0
- package/dist/environment/__tests__/failure-injection.test.d.ts.map +1 -0
- package/dist/environment/__tests__/generation-red.test.d.ts +2 -0
- package/dist/environment/__tests__/generation-red.test.d.ts.map +1 -0
- package/dist/environment/__tests__/generation.test.d.ts +2 -0
- package/dist/environment/__tests__/generation.test.d.ts.map +1 -0
- package/dist/environment/__tests__/graph-transaction.test.d.ts +2 -0
- package/dist/environment/__tests__/graph-transaction.test.d.ts.map +1 -0
- package/dist/environment/__tests__/inspection-red.test.d.ts +2 -0
- package/dist/environment/__tests__/inspection-red.test.d.ts.map +1 -0
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +2 -0
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +1 -0
- package/dist/environment/__tests__/pipeline-topology.test.d.ts +2 -0
- package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +1 -0
- package/dist/environment/__tests__/readiness.test.d.ts +2 -0
- package/dist/environment/__tests__/readiness.test.d.ts.map +1 -0
- package/dist/environment/__tests__/recovery.test.d.ts +2 -0
- package/dist/environment/__tests__/recovery.test.d.ts.map +1 -0
- package/dist/environment/__tests__/resize-dispose.test.d.ts +2 -0
- package/dist/environment/__tests__/resize-dispose.test.d.ts.map +1 -0
- package/dist/environment/__tests__/signature-red.test.d.ts +2 -0
- package/dist/environment/__tests__/signature-red.test.d.ts.map +1 -0
- package/dist/environment/__tests__/signature.test.d.ts +2 -0
- package/dist/environment/__tests__/signature.test.d.ts.map +1 -0
- package/dist/environment/descriptors.d.ts +2 -0
- package/dist/environment/descriptors.d.ts.map +1 -0
- package/dist/environment/extracted-environment.d.ts +53 -0
- package/dist/environment/extracted-environment.d.ts.map +1 -0
- package/dist/environment/generation.d.ts +62 -0
- package/dist/environment/generation.d.ts.map +1 -0
- package/dist/environment/gpu-bundle.d.ts +23 -0
- package/dist/environment/gpu-bundle.d.ts.map +1 -0
- package/dist/environment/graph.d.ts +108 -0
- package/dist/environment/graph.d.ts.map +1 -0
- package/dist/environment/inspection.d.ts +48 -0
- package/dist/environment/inspection.d.ts.map +1 -0
- package/dist/environment/lifecycle.d.ts +22 -0
- package/dist/environment/lifecycle.d.ts.map +1 -0
- package/dist/environment/readiness.d.ts +29 -0
- package/dist/environment/readiness.d.ts.map +1 -0
- package/dist/environment/signature.d.ts +70 -0
- package/dist/environment/signature.d.ts.map +1 -0
- package/dist/errors/ecs-validation.d.ts +3 -0
- package/dist/errors/ecs-validation.d.ts.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/recover.d.ts +78 -0
- package/dist/errors/recover.d.ts.map +1 -0
- package/dist/errors/render.d.ts +633 -0
- package/dist/errors/render.d.ts.map +1 -0
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +2 -0
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +1 -0
- package/dist/extract/__tests__/environment-source.test.d.ts +2 -0
- package/dist/extract/__tests__/environment-source.test.d.ts.map +1 -0
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts +2 -0
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +1 -0
- package/dist/extract/directional-csm.d.ts +129 -0
- package/dist/extract/directional-csm.d.ts.map +1 -0
- package/dist/extract/index.d.ts +5 -0
- package/dist/extract/index.d.ts.map +1 -0
- package/dist/extract/material-interface.d.ts +56 -0
- package/dist/extract/material-interface.d.ts.map +1 -0
- package/dist/extract/schema-readers.d.ts +20 -0
- package/dist/extract/schema-readers.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts +26 -0
- package/dist/extract/visibility.d.ts.map +1 -0
- package/dist/features/graph-contribution.d.ts +64 -0
- package/dist/features/graph-contribution.d.ts.map +1 -0
- package/dist/features/host.d.ts +100 -0
- package/dist/features/host.d.ts.map +1 -0
- package/dist/features/index.d.ts +21 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/morph/index.d.ts +3 -0
- package/dist/features/morph/index.d.ts.map +1 -0
- package/dist/features/morph/morph-bounds.d.ts +42 -0
- package/dist/features/morph/morph-bounds.d.ts.map +1 -0
- package/dist/features/morph/morph-feature.d.ts +45 -0
- package/dist/features/morph/morph-feature.d.ts.map +1 -0
- package/dist/features/prepared-gpu-work.d.ts +113 -0
- package/dist/features/prepared-gpu-work.d.ts.map +1 -0
- package/dist/features/prepared-graphics-store.d.ts +65 -0
- package/dist/features/prepared-graphics-store.d.ts.map +1 -0
- package/dist/features/prepared-graphics.d.ts +225 -0
- package/dist/features/prepared-graphics.d.ts.map +1 -0
- package/dist/features/render-graph-compute.d.ts +13 -0
- package/dist/features/render-graph-compute.d.ts.map +1 -0
- package/dist/features/render-graph-contribution.d.ts +15 -0
- package/dist/features/render-graph-contribution.d.ts.map +1 -0
- package/dist/features/render-graph-raster.d.ts +34 -0
- package/dist/features/render-graph-raster.d.ts.map +1 -0
- package/dist/features/render-graph-resources.d.ts +11 -0
- package/dist/features/render-graph-resources.d.ts.map +1 -0
- package/dist/features/scene-temporal.d.ts +45 -0
- package/dist/features/scene-temporal.d.ts.map +1 -0
- package/dist/features/taa-resolve.d.ts +21 -0
- package/dist/features/taa-resolve.d.ts.map +1 -0
- package/dist/features/targets.d.ts +32 -0
- package/dist/features/targets.d.ts.map +1 -0
- package/dist/features/types.d.ts +247 -0
- package/dist/features/types.d.ts.map +1 -0
- package/dist/frame-chain.d.ts +14 -0
- package/dist/frame-chain.d.ts.map +1 -0
- package/dist/fullscreen-post-process-pass.d.ts +178 -0
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -0
- package/dist/glyph-text-layout-system.d.ts +18 -0
- package/dist/glyph-text-layout-system.d.ts.map +1 -0
- package/dist/gpu-driven/batch-topology.d.ts +124 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +150 -0
- package/dist/gpu-driven/production-raster.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +141 -0
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -0
- package/dist/gpu-driven/view-reference.d.ts +15 -0
- package/dist/gpu-driven/view-reference.d.ts.map +1 -0
- package/dist/gpu-resource-store.d.ts +294 -0
- package/dist/gpu-resource-store.d.ts.map +1 -0
- package/dist/gpu-resource.d.ts +73 -0
- package/dist/gpu-resource.d.ts.map +1 -0
- package/dist/gpu-scene-schema.d.ts +171 -0
- package/dist/gpu-scene-schema.d.ts.map +1 -0
- package/dist/gpu-scene.d.ts +81 -0
- package/dist/gpu-scene.d.ts.map +1 -0
- package/dist/gpu-stage.d.ts +4 -0
- package/dist/gpu-stage.d.ts.map +1 -0
- package/dist/gpu-texture-usage.d.ts +6 -0
- package/dist/gpu-texture-usage.d.ts.map +1 -0
- package/dist/gpu-usage.d.ts +9 -0
- package/dist/gpu-usage.d.ts.map +1 -0
- package/dist/hdrp-buffers.d.ts +213 -0
- package/dist/hdrp-buffers.d.ts.map +1 -0
- package/dist/hdrp-cluster-membership.d.ts +2 -0
- package/dist/hdrp-cluster-membership.d.ts.map +1 -0
- package/dist/hdrp-pipeline.d.ts +36 -0
- package/dist/hdrp-pipeline.d.ts.map +1 -0
- package/dist/ibl/IblPipelineCache.d.ts +274 -0
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -0
- package/dist/ibl/cubemap-projection.d.ts +23 -0
- package/dist/ibl/cubemap-projection.d.ts.map +1 -0
- package/dist/ibl/face-uniforms.d.ts +65 -0
- package/dist/ibl/face-uniforms.d.ts.map +1 -0
- package/dist/ibl/skylight-bind-group.d.ts +130 -0
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +5 -0
- package/dist/index.mjs.map +1 -0
- package/dist/instance-buffer-cache.d.ts +59 -0
- package/dist/instance-buffer-cache.d.ts.map +1 -0
- package/dist/internal.d.ts +74 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.mjs +45 -0
- package/dist/internal.mjs.map +1 -0
- package/dist/lifecycle.d.ts +28 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/light-buffer-layout.d.ts +164 -0
- package/dist/light-buffer-layout.d.ts.map +1 -0
- package/dist/materials.d.ts +50 -0
- package/dist/materials.d.ts.map +1 -0
- package/dist/mesh-material-bindings.d.ts +44 -0
- package/dist/mesh-material-bindings.d.ts.map +1 -0
- package/dist/mesh-update-errors.d.ts +71 -0
- package/dist/mesh-update-errors.d.ts.map +1 -0
- package/dist/mipmap-generator.d.ts +39 -0
- package/dist/mipmap-generator.d.ts.map +1 -0
- package/dist/param-schema-projection-census.d.ts +18 -0
- package/dist/param-schema-projection-census.d.ts.map +1 -0
- package/dist/pbr-pipeline.d.ts +253 -0
- package/dist/pbr-pipeline.d.ts.map +1 -0
- package/dist/persistent-render-scene.d.ts +158 -0
- package/dist/persistent-render-scene.d.ts.map +1 -0
- package/dist/pipeline/index.d.ts +11 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline-builder.d.ts +122 -0
- package/dist/pipeline-builder.d.ts.map +1 -0
- package/dist/pipeline-errors.d.ts +110 -0
- package/dist/pipeline-errors.d.ts.map +1 -0
- package/dist/pipeline-spec.d.ts +506 -0
- package/dist/pipeline-spec.d.ts.map +1 -0
- package/dist/plugin.d.ts +17 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/post-process-errors.d.ts +182 -0
- package/dist/post-process-errors.d.ts.map +1 -0
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +2 -0
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +1 -0
- package/dist/prepare/index.d.ts +4 -0
- package/dist/prepare/index.d.ts.map +1 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts +62 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -0
- package/dist/prepare/schema-readers.d.ts +11 -0
- package/dist/prepare/schema-readers.d.ts.map +1 -0
- package/dist/record/__tests__/environment-record.test.d.ts +2 -0
- package/dist/record/__tests__/environment-record.test.d.ts.map +1 -0
- package/dist/record/__tests__/frame-targets.unit.test.d.ts +2 -0
- package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +2 -0
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +2 -0
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/membership-timing.unit.test.d.ts +2 -0
- package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/render-submission.integration.test.d.ts +2 -0
- package/dist/record/__tests__/render-submission.integration.test.d.ts.map +1 -0
- package/dist/record/__tests__/render-submission.perf.test.d.ts +2 -0
- package/dist/record/__tests__/render-submission.perf.test.d.ts.map +1 -0
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +2 -0
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts +2 -0
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +2 -0
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +187 -0
- package/dist/record/frame-lighting.d.ts.map +1 -0
- package/dist/record/frame-observation.d.ts +38 -0
- package/dist/record/frame-observation.d.ts.map +1 -0
- package/dist/record/frame-snapshot.d.ts +429 -0
- package/dist/record/frame-snapshot.d.ts.map +1 -0
- package/dist/record/frame-targets.d.ts +53 -0
- package/dist/record/frame-targets.d.ts.map +1 -0
- package/dist/record/frame.d.ts +59 -0
- package/dist/record/frame.d.ts.map +1 -0
- package/dist/record/helpers.d.ts +101 -0
- package/dist/record/helpers.d.ts.map +1 -0
- package/dist/record/index.d.ts +15 -0
- package/dist/record/index.d.ts.map +1 -0
- package/dist/record/main-pass-geometry.d.ts +20 -0
- package/dist/record/main-pass-geometry.d.ts.map +1 -0
- package/dist/record/main-pass-material.d.ts +173 -0
- package/dist/record/main-pass-material.d.ts.map +1 -0
- package/dist/record/main-pass-skin.d.ts +46 -0
- package/dist/record/main-pass-skin.d.ts.map +1 -0
- package/dist/record/main-pass-sprite-draws.d.ts +18 -0
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -0
- package/dist/record/main-pass-sprite.d.ts +69 -0
- package/dist/record/main-pass-sprite.d.ts.map +1 -0
- package/dist/record/main-pass.d.ts +20 -0
- package/dist/record/main-pass.d.ts.map +1 -0
- package/dist/record/material-payload.d.ts +43 -0
- package/dist/record/material-payload.d.ts.map +1 -0
- package/dist/record/material-slot-plan.d.ts +26 -0
- package/dist/record/material-slot-plan.d.ts.map +1 -0
- package/dist/record/membership-timing.d.ts +232 -0
- package/dist/record/membership-timing.d.ts.map +1 -0
- package/dist/record/mesh-ssbo.d.ts +173 -0
- package/dist/record/mesh-ssbo.d.ts.map +1 -0
- package/dist/record/shadow-caster-uniform.d.ts +8 -0
- package/dist/record/shadow-caster-uniform.d.ts.map +1 -0
- package/dist/record/shadow-pass.d.ts +125 -0
- package/dist/record/shadow-pass.d.ts.map +1 -0
- package/dist/record/shadow-submit-mode.d.ts +66 -0
- package/dist/record/shadow-submit-mode.d.ts.map +1 -0
- package/dist/record/skybox-post-pass.d.ts +33 -0
- package/dist/record/skybox-post-pass.d.ts.map +1 -0
- package/dist/record/typed-frame-graph.d.ts +13 -0
- package/dist/record/typed-frame-graph.d.ts.map +1 -0
- package/dist/record/view-ubo.d.ts +39 -0
- package/dist/record/view-ubo.d.ts.map +1 -0
- package/dist/render-data.d.ts +143 -0
- package/dist/render-data.d.ts.map +1 -0
- package/dist/render-dispatch-membership.d.ts +47 -0
- package/dist/render-dispatch-membership.d.ts.map +1 -0
- package/dist/render-graph-primitives.d.ts +424 -0
- package/dist/render-graph-primitives.d.ts.map +1 -0
- package/dist/render-pipeline-context.d.ts +289 -0
- package/dist/render-pipeline-context.d.ts.map +1 -0
- package/dist/render-pipeline-target.d.ts +16 -0
- package/dist/render-pipeline-target.d.ts.map +1 -0
- package/dist/render-pipeline.d.ts +149 -0
- package/dist/render-pipeline.d.ts.map +1 -0
- package/dist/render-scene-projection.d.ts +174 -0
- package/dist/render-scene-projection.d.ts.map +1 -0
- package/dist/render-system-extract.d.ts +1096 -0
- package/dist/render-system-extract.d.ts.map +1 -0
- package/dist/render-system-fold.d.ts +266 -0
- package/dist/render-system-fold.d.ts.map +1 -0
- package/dist/render-system.d.ts +814 -0
- package/dist/render-system.d.ts.map +1 -0
- package/dist/renderer/asset-service.d.ts +10 -0
- package/dist/renderer/asset-service.d.ts.map +1 -0
- package/dist/renderer/backend-selection.d.ts +26 -0
- package/dist/renderer/backend-selection.d.ts.map +1 -0
- package/dist/renderer/environment-classify.d.ts +6 -0
- package/dist/renderer/environment-classify.d.ts.map +1 -0
- package/dist/renderer/environment-error.d.ts +13 -0
- package/dist/renderer/environment-error.d.ts.map +1 -0
- package/dist/renderer/material/assembly.d.ts +22 -0
- package/dist/renderer/material/assembly.d.ts.map +1 -0
- package/dist/renderer/material/pipeline-projection.d.ts +91 -0
- package/dist/renderer/material/pipeline-projection.d.ts.map +1 -0
- package/dist/renderer/renderer-factory.d.ts +283 -0
- package/dist/renderer/renderer-factory.d.ts.map +1 -0
- package/dist/renderer.d.ts +771 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts +33 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -0
- package/dist/scene-utils/collect-subtree.d.ts +11 -0
- package/dist/scene-utils/collect-subtree.d.ts.map +1 -0
- package/dist/shadow-atlas.d.ts +117 -0
- package/dist/shadow-atlas.d.ts.map +1 -0
- package/dist/ssao-buffers.d.ts +31 -0
- package/dist/ssao-buffers.d.ts.map +1 -0
- package/dist/ssao-config.d.ts +28 -0
- package/dist/ssao-config.d.ts.map +1 -0
- package/dist/ssao-data.d.ts +34 -0
- package/dist/ssao-data.d.ts.map +1 -0
- package/dist/surface-format.d.ts +10 -0
- package/dist/surface-format.d.ts.map +1 -0
- package/dist/systems/active-camera.d.ts +53 -0
- package/dist/systems/active-camera.d.ts.map +1 -0
- package/dist/systems/pass-selector.d.ts +24 -0
- package/dist/systems/pass-selector.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +51 -0
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -0
- package/dist/systems/transparent-sort-config.d.ts +91 -0
- package/dist/systems/transparent-sort-config.d.ts.map +1 -0
- package/dist/taa-history-store.d.ts +88 -0
- package/dist/taa-history-store.d.ts.map +1 -0
- package/dist/temporal-coverage.d.ts +35 -0
- package/dist/temporal-coverage.d.ts.map +1 -0
- package/dist/temporal-frame-transaction.d.ts +92 -0
- package/dist/temporal-frame-transaction.d.ts.map +1 -0
- package/dist/temporal-inspection.d.ts +57 -0
- package/dist/temporal-inspection.d.ts.map +1 -0
- package/dist/temporal-view.d.ts +43 -0
- package/dist/temporal-view.d.ts.map +1 -0
- package/dist/tilemap/resolve-tileset-runtime.d.ts +23 -0
- package/dist/tilemap/resolve-tileset-runtime.d.ts.map +1 -0
- package/dist/tilemap-chunk-extract-system.d.ts +142 -0
- package/dist/tilemap-chunk-extract-system.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +59 -0
- package/dist/typed-render-graph-primitives.d.ts.map +1 -0
- package/dist/typed-shadow-passes.d.ts +11 -0
- package/dist/typed-shadow-passes.d.ts.map +1 -0
- package/dist/urp-pipeline.d.ts +4 -0
- package/dist/urp-pipeline.d.ts.map +1 -0
- package/package.json +94 -0
- package/src/__tests__/analytic-sky-contract.test.ts +27 -0
- package/src/__tests__/analytic-sky-falsify-carriers.mjs +43 -0
- package/src/__tests__/analytic-sky-falsify.test.ts +94 -0
- package/src/__tests__/assets-runtime-handoff.integration.test.ts +36 -0
- package/src/__tests__/authoring-path.unit.test.ts +14 -0
- package/src/__tests__/backend-selection-rhi-capture.test-d.ts +21 -0
- package/src/__tests__/backend-selection.integration.test.ts +11 -0
- package/src/__tests__/callback-inference.test-d.ts +5 -0
- package/src/__tests__/camera-temporal.test-d.ts +8 -0
- package/src/__tests__/camera-temporal.test.ts +188 -0
- package/src/__tests__/cluster-binner.test.ts +272 -0
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +17 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +10 -0
- package/src/__tests__/direct-extract-consumer-contract.test-d.ts +34 -0
- package/src/__tests__/direct-light-snapshot.unit.test.ts +71 -0
- package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +18 -0
- package/src/__tests__/environment-inspection.test.ts +45 -0
- package/src/__tests__/factory-contract.integration.test.ts +331 -0
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +18 -0
- package/src/__tests__/fog-ai-user.fixture.ts +350 -0
- package/src/__tests__/fog-custom-render-feature.fixture.ts +33 -0
- package/src/__tests__/fog-custom-render-feature.integration.test.ts +76 -0
- package/src/__tests__/fog-inspection.integration.test.ts +127 -0
- package/src/__tests__/fog-owner-state.integration.test.ts +112 -0
- package/src/__tests__/fog-pipeline-topology.integration.test.ts +93 -0
- package/src/__tests__/fog-public-surface.integration.test.ts +60 -0
- package/src/__tests__/fog-ray-contract.integration.test.ts +73 -0
- package/src/__tests__/fog-source-absence.integration.test.ts +51 -0
- package/src/__tests__/fog-temporal.integration.test.ts +115 -0
- package/src/__tests__/frame-chain.unit.test.ts +26 -0
- package/src/__tests__/frame-observation.contract.test.ts +103 -0
- package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +172 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +347 -0
- package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +12 -0
- package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +16 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +609 -0
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +90 -0
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +192 -0
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +128 -0
- package/src/__tests__/gpu-driven-view.browser.test.ts +19 -0
- package/src/__tests__/gpu-driven-view.dawn.test.ts +17 -0
- package/src/__tests__/gpu-driven-view.unit.test.ts +455 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +59 -0
- package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +27 -0
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +309 -0
- package/src/__tests__/gpu-scene-render-graph.browser.test.ts +19 -0
- package/src/__tests__/gpu-scene-render-graph.dawn.test.ts +19 -0
- package/src/__tests__/gpu-scene-schema.unit.test.ts +16 -0
- package/src/__tests__/gpu-scene.dawn.test.ts +209 -0
- package/src/__tests__/gpu-scene.unit.test.ts +161 -0
- package/src/__tests__/hdrp-pipeline.unit.test.ts +100 -0
- package/src/__tests__/ibl/ibl-fallback.unit.test.ts +23 -0
- package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +124 -0
- package/src/__tests__/injection-kind-owner.test-d.ts +14 -0
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +719 -0
- package/src/__tests__/light-buffer-layout.unit.test.ts +85 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +24 -0
- package/src/__tests__/material-cooked-projection.unit.test.ts +177 -0
- package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +69 -0
- package/src/__tests__/material-derived-payload.integration.test.ts +164 -0
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +58 -0
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +113 -0
- package/src/__tests__/material-stride-surface.unit.test.ts +32 -0
- package/src/__tests__/materials.unit.test.ts +25 -0
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +107 -0
- package/src/__tests__/mesh-material-bindings.unit.test.ts +89 -0
- package/src/__tests__/mesh-stride-surface.unit.test.ts +16 -0
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +166 -0
- package/src/__tests__/morph-feature-gpu-work.integration.test.ts +78 -0
- package/src/__tests__/morph-visual-evidence.integration.test.ts +66 -0
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +14 -0
- package/src/__tests__/param-schema-projection-census.unit.test.ts +40 -0
- package/src/__tests__/persistent-render-scene.unit.test.ts +1311 -0
- package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +167 -0
- package/src/__tests__/pipeline-pass-trace.test.ts +92 -0
- package/src/__tests__/pipeline-stage-owner.test-d.ts +13 -0
- package/src/__tests__/plugin.test.ts +25 -0
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +208 -0
- package/src/__tests__/prepared-buffer-kind-owner.test-d.ts +29 -0
- package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +129 -0
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +140 -0
- package/src/__tests__/prepared-graphics-generation.unit.test.ts +175 -0
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +206 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +29 -0
- package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +180 -0
- package/src/__tests__/prepared-graphics-resolver.unit.test.ts +287 -0
- package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +105 -0
- package/src/__tests__/prepared-graphics-store.unit.test.ts +154 -0
- package/src/__tests__/prepared-graphics-validation.unit.test.ts +176 -0
- package/src/__tests__/profiler-default-off.test.ts +22 -0
- package/src/__tests__/profiler-phase-catalog.test.ts +66 -0
- package/src/__tests__/profiler-phase-integration.test.ts +70 -0
- package/src/__tests__/profiler-phase-token.test.ts +84 -0
- package/src/__tests__/public-pipeline-id.test-d.ts +6 -0
- package/src/__tests__/public-surface.test-d.ts +32 -0
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +127 -0
- package/src/__tests__/render-dispatch-membership.unit.test.ts +117 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +115 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +234 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +84 -0
- package/src/__tests__/render-feature-assembly.test-d.ts +51 -0
- package/src/__tests__/render-feature-construction.unit.test.ts +124 -0
- package/src/__tests__/render-feature-context.test-d.ts +81 -0
- package/src/__tests__/render-feature-contract.test-d.ts +58 -0
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +151 -0
- package/src/__tests__/render-feature-docs.unit.test.ts +88 -0
- package/src/__tests__/render-feature-error-code-owner.test-d.ts +27 -0
- package/src/__tests__/render-feature-errors.unit.test.ts +47 -0
- package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +46 -0
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +377 -0
- package/src/__tests__/render-feature-graph.integration.test.ts +205 -0
- package/src/__tests__/render-feature-graphics-staging.unit.test.ts +200 -0
- package/src/__tests__/render-feature-order.unit.test.ts +66 -0
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +101 -0
- package/src/__tests__/render-feature-prepared-errors.test-d.ts +82 -0
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +141 -0
- package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +122 -0
- package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +59 -0
- package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +107 -0
- package/src/__tests__/render-feature-prepared-graphics.test-d.ts +96 -0
- package/src/__tests__/render-feature-prepared-graphics.unit.test.ts +121 -0
- package/src/__tests__/render-feature-public-surface.test-d.ts +75 -0
- package/src/__tests__/render-feature-retry.unit.test.ts +128 -0
- package/src/__tests__/render-feature-scheduling.unit.test.ts +122 -0
- package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +146 -0
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +236 -0
- package/src/__tests__/render-feature-staging.unit.test.ts +94 -0
- package/src/__tests__/render-feature-visibility-context.test-d.ts +38 -0
- package/src/__tests__/render-feature-visibility-context.unit.test.ts +38 -0
- package/src/__tests__/render-feature-zero-work.unit.test.ts +82 -0
- package/src/__tests__/render-graph-compute-raster-gpu.ts +342 -0
- package/src/__tests__/render-graph-compute-raster.browser.test.ts +16 -0
- package/src/__tests__/render-graph-compute-raster.dawn.test.ts +22 -0
- package/src/__tests__/render-graph-hzb-gpu.ts +239 -0
- package/src/__tests__/render-graph-hzb.browser.test.ts +16 -0
- package/src/__tests__/render-graph-hzb.dawn.test.ts +23 -0
- package/src/__tests__/render-graph-primitives.unit.test.ts +22 -0
- package/src/__tests__/render-graph-storage-indirect-gpu.ts +162 -0
- package/src/__tests__/render-graph-storage-indirect.browser.test.ts +21 -0
- package/src/__tests__/render-graph-storage-indirect.dawn.test.ts +28 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +206 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +125 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +10 -0
- package/src/__tests__/renderer-render-scene-public.test-d.ts +27 -0
- package/src/__tests__/rhi-backend-package-boundary.unit.test.ts +11 -0
- package/src/__tests__/scene-temporal-coverage.unit.test.ts +259 -0
- package/src/__tests__/scriptable-pack-consumer.test-d.ts +14 -0
- package/src/__tests__/shader-stage-surface.unit.test.ts +38 -0
- package/src/__tests__/ssao-kernel-surface.unit.test.ts +15 -0
- package/src/__tests__/sun-snapshot-consumers.test.ts +35 -0
- package/src/__tests__/surface-backend-kind-owner.test-d.ts +42 -0
- package/src/__tests__/surface-configuration.unit.test.ts +92 -0
- package/src/__tests__/taa-history-store.unit.test.ts +196 -0
- package/src/__tests__/temporal-frame-transaction.integration.test.ts +537 -0
- package/src/__tests__/temporal-inspection.unit.test.ts +138 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +61 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +389 -0
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +52 -0
- package/src/__tests__/urp-pipeline.unit.test.ts +14 -0
- package/src/__tests__/vertex-color-pipeline.unit.test.ts +124 -0
- package/src/__tests__/vertex-layout-consumer.unit.test.ts +25 -0
- package/src/__tests__/visibility-diagnostics.integration.test.ts +66 -0
- package/src/__tests__/visibility-extract.integration.test.ts +89 -0
- package/src/__tests__/visibility-extract.perf.test.ts +96 -0
- package/src/__tests__/visibility-feature-dedup.integration.test.ts +57 -0
- package/src/__tests__/visibility-hidden-report.unit.test.ts +37 -0
- package/src/__tests__/visibility-instances.integration.test.ts +50 -0
- package/src/__tests__/visibility-multi-world.integration.test.ts +54 -0
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +191 -0
- package/src/__tests__/visibility-producer-matrix.unit.test.ts +96 -0
- package/src/__tests__/visibility-public-surface.test-d.ts +26 -0
- package/src/__tests__/visibility-resolver.unit.test.ts +84 -0
- package/src/__tests__/visibility-snapshot-contract.unit.test.ts +59 -0
- package/src/__tests__/vocabulary.unit.test.ts +21 -0
- package/src/assets/__tests__/asset-decoders.unit.test.ts +92 -0
- package/src/assets/__tests__/mipmap-generator.unit.test.ts +52 -0
- package/src/assets/__tests__/render-asset-port.unit.test.ts +54 -0
- package/src/assets/__tests__/resolve-render-asset.unit.test.ts +47 -0
- package/src/assets/asset-decoders.ts +158 -0
- package/src/assets/render-asset-port.ts +44 -0
- package/src/assets/resolve-render-asset.ts +13 -0
- package/src/authoring.ts +24 -0
- package/src/cluster-binner.ts +700 -0
- package/src/components/__tests__/atmosphere-red.test.ts +51 -0
- package/src/components/__tests__/atmosphere.test.ts +79 -0
- package/src/components/__tests__/fog.test-d.ts +49 -0
- package/src/components/__tests__/fog.test.ts +60 -0
- package/src/components/__tests__/schema-parity.unit.test.ts +25 -0
- package/src/components/__tests__/visibility-schema.unit.test.ts +35 -0
- package/src/components/atmosphere.ts +64 -0
- package/src/components/camera.ts +512 -0
- package/src/components/directional-light.ts +120 -0
- package/src/components/environment.ts +206 -0
- package/src/components/glyph-text.ts +63 -0
- package/src/components/index.ts +49 -0
- package/src/components/instances.ts +207 -0
- package/src/components/layer.ts +69 -0
- package/src/components/light-helpers.ts +188 -0
- package/src/components/mesh-filter.ts +59 -0
- package/src/components/mesh-renderer.ts +61 -0
- package/src/components/point-light-shadow.ts +43 -0
- package/src/components/point-light.ts +65 -0
- package/src/components/post-process-params.ts +35 -0
- package/src/components/scene-instance.ts +193 -0
- package/src/components/sort-key.ts +75 -0
- package/src/components/spot-light.ts +124 -0
- package/src/components/sprite-animation.ts +169 -0
- package/src/components/sprite-instances.ts +179 -0
- package/src/components/sprite-playback-mode.ts +73 -0
- package/src/components/sprite-region-override.ts +106 -0
- package/src/components/tile-layer.ts +161 -0
- package/src/components/tilemap.ts +48 -0
- package/src/components/visibility.ts +53 -0
- package/src/construct-renderer.ts +4 -0
- package/src/debug-draw-glue.ts +169 -0
- package/src/deferred-lighting.ts +92 -0
- package/src/dynamic-texture-store.ts +111 -0
- package/src/engine-metrics.ts +89 -0
- package/src/environment/README.md +76 -0
- package/src/environment/__tests__/failure-injection.test.ts +50 -0
- package/src/environment/__tests__/generation-red.test.ts +64 -0
- package/src/environment/__tests__/generation.test.ts +37 -0
- package/src/environment/__tests__/graph-transaction.test.ts +85 -0
- package/src/environment/__tests__/inspection-red.test.ts +53 -0
- package/src/environment/__tests__/lifecycle-evidence.test.ts +40 -0
- package/src/environment/__tests__/pipeline-topology.test.ts +33 -0
- package/src/environment/__tests__/readiness.test.ts +42 -0
- package/src/environment/__tests__/recovery.test.ts +62 -0
- package/src/environment/__tests__/resize-dispose.test.ts +30 -0
- package/src/environment/__tests__/signature-red.test.ts +45 -0
- package/src/environment/__tests__/signature.test.ts +60 -0
- package/src/environment/descriptors.ts +7 -0
- package/src/environment/extracted-environment.ts +239 -0
- package/src/environment/generation.ts +158 -0
- package/src/environment/gpu-bundle.ts +144 -0
- package/src/environment/graph.ts +588 -0
- package/src/environment/inspection.ts +107 -0
- package/src/environment/lifecycle.ts +124 -0
- package/src/environment/readiness.ts +76 -0
- package/src/environment/signature.ts +185 -0
- package/src/errors/ecs-validation.ts +16 -0
- package/src/errors/index.ts +3 -0
- package/src/errors/recover.ts +119 -0
- package/src/errors/render.ts +1244 -0
- package/src/extract/__tests__/directional-csm-domain.unit.test.ts +391 -0
- package/src/extract/__tests__/environment-source.test.ts +105 -0
- package/src/extract/__tests__/schema-readers.unit.test.ts +16 -0
- package/src/extract/directional-csm.ts +959 -0
- package/src/extract/index.ts +10 -0
- package/src/extract/material-interface.ts +604 -0
- package/src/extract/schema-readers.ts +27 -0
- package/src/extract/visibility.ts +120 -0
- package/src/features/graph-contribution.ts +577 -0
- package/src/features/host.ts +1097 -0
- package/src/features/index.ts +100 -0
- package/src/features/morph/index.ts +24 -0
- package/src/features/morph/morph-bounds.ts +123 -0
- package/src/features/morph/morph-feature.ts +287 -0
- package/src/features/prepared-gpu-work.ts +902 -0
- package/src/features/prepared-graphics-store.ts +435 -0
- package/src/features/prepared-graphics.ts +479 -0
- package/src/features/render-graph-compute.ts +60 -0
- package/src/features/render-graph-contribution.ts +95 -0
- package/src/features/render-graph-raster.ts +308 -0
- package/src/features/render-graph-resources.ts +36 -0
- package/src/features/scene-temporal.ts +274 -0
- package/src/features/taa-resolve.ts +244 -0
- package/src/features/targets.ts +83 -0
- package/src/features/types.ts +291 -0
- package/src/frame-chain.ts +21 -0
- package/src/fullscreen-post-process-pass.ts +406 -0
- package/src/glyph-text-layout-system.ts +447 -0
- package/src/gpu-driven/batch-topology.ts +423 -0
- package/src/gpu-driven/production-raster.ts +1705 -0
- package/src/gpu-driven/view-gpu.ts +849 -0
- package/src/gpu-driven/view-reference.ts +110 -0
- package/src/gpu-resource-store.ts +1921 -0
- package/src/gpu-resource.ts +159 -0
- package/src/gpu-scene-schema.ts +224 -0
- package/src/gpu-scene.ts +855 -0
- package/src/gpu-stage.ts +9 -0
- package/src/gpu-texture-usage.ts +12 -0
- package/src/gpu-usage.ts +14 -0
- package/src/hdrp-buffers.ts +689 -0
- package/src/hdrp-cluster-membership.ts +70 -0
- package/src/hdrp-pipeline.ts +525 -0
- package/src/ibl/IblPipelineCache.ts +1246 -0
- package/src/ibl/cubemap-projection.ts +60 -0
- package/src/ibl/face-uniforms.ts +150 -0
- package/src/ibl/skylight-bind-group.ts +513 -0
- package/src/index.ts +271 -0
- package/src/instance-buffer-cache.ts +123 -0
- package/src/internal.ts +88 -0
- package/src/lifecycle.ts +123 -0
- package/src/light-buffer-layout.ts +346 -0
- package/src/materials.ts +236 -0
- package/src/mesh-material-bindings.ts +104 -0
- package/src/mesh-update-errors.ts +113 -0
- package/src/mipmap-generator.ts +244 -0
- package/src/param-schema-projection-census.ts +73 -0
- package/src/pbr-pipeline.ts +749 -0
- package/src/persistent-render-scene.ts +1752 -0
- package/src/pipeline/index.ts +40 -0
- package/src/pipeline-builder.ts +386 -0
- package/src/pipeline-errors.ts +172 -0
- package/src/pipeline-spec.ts +1768 -0
- package/src/plugin.ts +137 -0
- package/src/post-process-errors.ts +304 -0
- package/src/prepare/__tests__/schema-readers.unit.test.ts +16 -0
- package/src/prepare/index.ts +8 -0
- package/src/prepare/prepared-graphics-resolver.ts +455 -0
- package/src/prepare/schema-readers.ts +20 -0
- package/src/record/__tests__/environment-record.test.ts +35 -0
- package/src/record/__tests__/frame-targets.unit.test.ts +54 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +41 -0
- package/src/record/__tests__/material-slot-plan.unit.test.ts +76 -0
- package/src/record/__tests__/membership-timing.unit.test.ts +524 -0
- package/src/record/__tests__/render-submission.integration.test.ts +76 -0
- package/src/record/__tests__/render-submission.perf.test.ts +141 -0
- package/src/record/__tests__/shadow-submit-mode.unit.test.ts +88 -0
- package/src/record/__tests__/video-texture-view.unit.test.ts +90 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +101 -0
- package/src/record/frame-lighting.ts +1183 -0
- package/src/record/frame-observation.ts +122 -0
- package/src/record/frame-snapshot.ts +515 -0
- package/src/record/frame-targets.ts +372 -0
- package/src/record/frame.ts +1874 -0
- package/src/record/helpers.ts +289 -0
- package/src/record/index.ts +15 -0
- package/src/record/main-pass-geometry.ts +1014 -0
- package/src/record/main-pass-material.ts +716 -0
- package/src/record/main-pass-skin.ts +51 -0
- package/src/record/main-pass-sprite-draws.ts +1056 -0
- package/src/record/main-pass-sprite.ts +166 -0
- package/src/record/main-pass.ts +588 -0
- package/src/record/material-payload.ts +292 -0
- package/src/record/material-slot-plan.ts +68 -0
- package/src/record/membership-timing.ts +1012 -0
- package/src/record/mesh-ssbo.ts +406 -0
- package/src/record/shadow-caster-uniform.ts +37 -0
- package/src/record/shadow-pass.ts +2387 -0
- package/src/record/shadow-submit-mode.ts +277 -0
- package/src/record/skybox-post-pass.ts +594 -0
- package/src/record/typed-frame-graph.ts +499 -0
- package/src/record/view-ubo.ts +206 -0
- package/src/render-data.ts +385 -0
- package/src/render-dispatch-membership.ts +155 -0
- package/src/render-graph-primitives.ts +1586 -0
- package/src/render-pipeline-context.ts +332 -0
- package/src/render-pipeline-target.ts +96 -0
- package/src/render-pipeline.ts +343 -0
- package/src/render-scene-projection.ts +1738 -0
- package/src/render-system-extract.ts +5203 -0
- package/src/render-system-fold.ts +531 -0
- package/src/render-system.ts +3258 -0
- package/src/renderer/asset-service.ts +32 -0
- package/src/renderer/backend-selection.ts +121 -0
- package/src/renderer/environment-classify.ts +30 -0
- package/src/renderer/environment-error.ts +19 -0
- package/src/renderer/material/assembly.ts +53 -0
- package/src/renderer/material/pipeline-projection.ts +140 -0
- package/src/renderer/renderer-factory.ts +9062 -0
- package/src/renderer.ts +940 -0
- package/src/scene-instances/post-spawn-resolve-joints.ts +168 -0
- package/src/scene-utils/collect-subtree.ts +40 -0
- package/src/shadow-atlas.ts +244 -0
- package/src/ssao-buffers.ts +175 -0
- package/src/ssao-config.ts +61 -0
- package/src/ssao-data.ts +106 -0
- package/src/surface-format.ts +37 -0
- package/src/systems/active-camera.ts +116 -0
- package/src/systems/pass-selector.ts +49 -0
- package/src/systems/skin-palette-allocator.ts +294 -0
- package/src/systems/transparent-sort-config.ts +211 -0
- package/src/taa-history-store.ts +429 -0
- package/src/temporal-coverage.ts +106 -0
- package/src/temporal-frame-transaction.ts +301 -0
- package/src/temporal-inspection.ts +194 -0
- package/src/temporal-view.ts +174 -0
- package/src/tilemap/resolve-tileset-runtime.ts +72 -0
- package/src/tilemap-chunk-extract-system.ts +1307 -0
- package/src/typed-render-graph-primitives.ts +530 -0
- package/src/typed-shadow-passes.ts +195 -0
- package/src/urp-pipeline.ts +340 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
// @forgeax/engine-render - host-side light helpers (M2 / w12).
|
|
2
|
+
//
|
|
3
|
+
// Pure-function single-shot conversion helpers for the SpotLight + PointLight
|
|
4
|
+
// extract path. Host calls each helper once per light entity per frame; the
|
|
5
|
+
// shader then sees only pre-computed `cos*` / `invRangeSquared` values. The
|
|
6
|
+
// runtime range owner is the revision-pinned Three r184 squared window; KHR
|
|
7
|
+
// values remain an import/reference boundary and are not substituted here.
|
|
8
|
+
//
|
|
9
|
+
// AC anchors: requirements AC-03 (deg -> rad -> cos host two-step
|
|
10
|
+
// conversion) + AC-08 (a + b) (KHR quartic + range = 0 NaN protection
|
|
11
|
+
// boundary).
|
|
12
|
+
//
|
|
13
|
+
// Plan-strategy anchors: D-S2 (cone unit deg API + cos shader optimization
|
|
14
|
+
// transparent to AI users) + D-S5 (Layer 1 host-side range = 0 ->
|
|
15
|
+
// invRangeSquared = 1e8 protects the 0 * Infinity = NaN intermediate).
|
|
16
|
+
|
|
17
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
18
|
+
import { SpawnLightInvalidBoundsError } from '../errors';
|
|
19
|
+
import { ShadowInvalidConfigError } from '../errors/render';
|
|
20
|
+
|
|
21
|
+
export type LightValidationError = SpawnLightInvalidBoundsError | ShadowInvalidConfigError;
|
|
22
|
+
export type LightValidationResult = Result<void, LightValidationError>;
|
|
23
|
+
|
|
24
|
+
const RANGE_ZERO_FALLBACK_INV_R2 = 1e8;
|
|
25
|
+
const DEG_TO_RAD = Math.PI / 180;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Convert SpotLight cone half-angle (degrees) to its cosine.
|
|
29
|
+
*
|
|
30
|
+
* Single-shot deg -> rad -> cos conversion executed once per spot light
|
|
31
|
+
* entity per frame on the host; the GPU shader sees only `cosInner` /
|
|
32
|
+
* `cosOuter` so its falloff path stays branch-free
|
|
33
|
+
* (`smoothstep(cosOuter, cosInner, dot(L, -lightDir))`).
|
|
34
|
+
*
|
|
35
|
+
* @param deg cone half-angle in degrees (component schema field
|
|
36
|
+
* `innerConeDeg` / `outerConeDeg`)
|
|
37
|
+
* @returns `cos(deg * pi / 180)`
|
|
38
|
+
*/
|
|
39
|
+
export function degToCos(deg: number): number {
|
|
40
|
+
return Math.cos(deg * DEG_TO_RAD);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Convert PointLight / SpotLight `range` (meters) to `1 / range^2`.
|
|
45
|
+
*
|
|
46
|
+
* Three-branch fold supplies `1 / range^2` for the Three r184 finite-range
|
|
47
|
+
* window `clamp(1 - (d / range)^4, 0, 1)^2`:
|
|
48
|
+
*
|
|
49
|
+
* - `range = +Infinity` -> `0` (no truncation; quartic factor collapses
|
|
50
|
+
* to `1`, falloff reduces to plain `1 / d^2`).
|
|
51
|
+
* - `range = 0` -> `1e8` (host safety boundary; glTF `range: 0` is mapped
|
|
52
|
+
* to the no-cutoff `Infinity` value before this helper is called).
|
|
53
|
+
* - `range > 0` -> `1 / (range * range)` (standard quartic factor).
|
|
54
|
+
*
|
|
55
|
+
* @param range meters (component schema field `range`); `+Infinity` is the
|
|
56
|
+
* KHR no-truncation default
|
|
57
|
+
* @returns `1 / range^2` with three-branch NaN protection
|
|
58
|
+
*/
|
|
59
|
+
export function computeInvRangeSquared(range: number): number {
|
|
60
|
+
if (range === Number.POSITIVE_INFINITY) return 0;
|
|
61
|
+
if (range === 0) return RANGE_ZERO_FALLBACK_INV_R2;
|
|
62
|
+
return 1 / (range * range);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* feat-20260709 M2 / D-1: shared zero/missing-direction validate for
|
|
67
|
+
* DirectionalLight + SpotLight. `direction` has no layer-2 default, so an
|
|
68
|
+
* omitted direction lands the array layer-3 all-zero -- the same illegal state
|
|
69
|
+
* as an explicit zero vector. SSOT for the rejection so the two lights cannot
|
|
70
|
+
* drift. Returns the structured error to reject, or `null` when the direction
|
|
71
|
+
* is a valid non-zero vector.
|
|
72
|
+
*/
|
|
73
|
+
export function validateDirection(
|
|
74
|
+
componentName: 'DirectionalLight' | 'SpotLight',
|
|
75
|
+
direction: ArrayLike<number> | undefined,
|
|
76
|
+
): SpawnLightInvalidBoundsError | null {
|
|
77
|
+
const dir = direction;
|
|
78
|
+
if (dir === undefined || ((dir[0] ?? 0) === 0 && (dir[1] ?? 0) === 0 && (dir[2] ?? 0) === 0)) {
|
|
79
|
+
return new SpawnLightInvalidBoundsError(
|
|
80
|
+
componentName,
|
|
81
|
+
'direction',
|
|
82
|
+
dir === undefined ? [0, 0, 0] : [dir[0] ?? 0, dir[1] ?? 0, dir[2] ?? 0],
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Validate directional-light payloads at the render owner boundary. */
|
|
89
|
+
export function validateDirectionalLightData(
|
|
90
|
+
data: Readonly<Record<string, unknown>>,
|
|
91
|
+
): LightValidationResult {
|
|
92
|
+
const directionError = validateDirection(
|
|
93
|
+
'DirectionalLight',
|
|
94
|
+
data.direction as ArrayLike<number> | undefined,
|
|
95
|
+
);
|
|
96
|
+
if (directionError !== null) return err(directionError);
|
|
97
|
+
if (data.castShadow === false) return ok(undefined);
|
|
98
|
+
|
|
99
|
+
const mapSize = (data.mapSize as number | undefined) ?? 2048;
|
|
100
|
+
if (mapSize < 1) return err(new ShadowInvalidConfigError('mapSize', mapSize, 1));
|
|
101
|
+
const cascadeCount = (data.cascadeCount as number | undefined) ?? 4;
|
|
102
|
+
if (cascadeCount < 1 || cascadeCount > 4 || !Number.isInteger(cascadeCount)) {
|
|
103
|
+
return err(new ShadowInvalidConfigError('cascadeCount', cascadeCount, 1, 4));
|
|
104
|
+
}
|
|
105
|
+
const splitLambda = (data.splitLambda as number | undefined) ?? 0.75;
|
|
106
|
+
if (splitLambda < 0 || splitLambda > 1) {
|
|
107
|
+
return err(new ShadowInvalidConfigError('splitLambda', splitLambda, 0, 1));
|
|
108
|
+
}
|
|
109
|
+
const cascadeBlend = (data.cascadeBlend as number | undefined) ?? 0.2;
|
|
110
|
+
if (cascadeBlend < 0 || cascadeBlend > 0.5) {
|
|
111
|
+
return err(new ShadowInvalidConfigError('cascadeBlend', cascadeBlend, 0, 0.5));
|
|
112
|
+
}
|
|
113
|
+
const pcfKernelSize = (data.pcfKernelSize as number | undefined) ?? 3;
|
|
114
|
+
if (pcfKernelSize < 1 || pcfKernelSize % 2 === 0) {
|
|
115
|
+
return err(new ShadowInvalidConfigError('pcfKernelSize', pcfKernelSize, 1));
|
|
116
|
+
}
|
|
117
|
+
const shadowDistance = (data.shadowDistance as number | undefined) ?? 200;
|
|
118
|
+
if (shadowDistance <= 0) {
|
|
119
|
+
return err(new ShadowInvalidConfigError('shadowDistance', shadowDistance, 0, '>'));
|
|
120
|
+
}
|
|
121
|
+
return ok(undefined);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Validate spot-light payloads at the render owner boundary. */
|
|
125
|
+
export function validateSpotLightData(
|
|
126
|
+
data: Readonly<Record<string, unknown>>,
|
|
127
|
+
): LightValidationResult {
|
|
128
|
+
const directionError = validateDirection(
|
|
129
|
+
'SpotLight',
|
|
130
|
+
data.direction as ArrayLike<number> | undefined,
|
|
131
|
+
);
|
|
132
|
+
if (directionError !== null) return err(directionError);
|
|
133
|
+
if (data.castShadow === false) return ok(undefined);
|
|
134
|
+
|
|
135
|
+
const range = (data.range as number | undefined) ?? 10;
|
|
136
|
+
if (typeof range !== 'number' || Number.isNaN(range) || range < 0) {
|
|
137
|
+
return err(new SpawnLightInvalidBoundsError('SpotLight', 'range', range));
|
|
138
|
+
}
|
|
139
|
+
const innerConeDeg = (data.innerConeDeg as number | undefined) ?? 0;
|
|
140
|
+
const outerConeDeg = (data.outerConeDeg as number | undefined) ?? 45;
|
|
141
|
+
if (outerConeDeg > 90) {
|
|
142
|
+
return err(new SpawnLightInvalidBoundsError('SpotLight', 'outerNinety', outerConeDeg));
|
|
143
|
+
}
|
|
144
|
+
if (outerConeDeg <= innerConeDeg) {
|
|
145
|
+
return err(new SpawnLightInvalidBoundsError('SpotLight', 'innerOuter', outerConeDeg));
|
|
146
|
+
}
|
|
147
|
+
const mapSize = (data.mapSize as number | undefined) ?? 2048;
|
|
148
|
+
if (mapSize < 1) return err(new ShadowInvalidConfigError('mapSize', mapSize, 1));
|
|
149
|
+
const nearPlane = data.nearPlane as number | undefined;
|
|
150
|
+
const farPlane = data.farPlane as number | undefined;
|
|
151
|
+
if (nearPlane !== undefined && farPlane !== undefined && farPlane <= nearPlane) {
|
|
152
|
+
return err(new ShadowInvalidConfigError('farPlane', farPlane, nearPlane));
|
|
153
|
+
}
|
|
154
|
+
const pcfKernelSize = (data.pcfKernelSize as number | undefined) ?? 3;
|
|
155
|
+
if (pcfKernelSize < 1 || pcfKernelSize % 2 === 0) {
|
|
156
|
+
return err(new ShadowInvalidConfigError('pcfKernelSize', pcfKernelSize, 1));
|
|
157
|
+
}
|
|
158
|
+
return ok(undefined);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Validate point-light payloads at the render owner boundary. */
|
|
162
|
+
export function validatePointLightData(
|
|
163
|
+
data: Readonly<Record<string, unknown>>,
|
|
164
|
+
): LightValidationResult {
|
|
165
|
+
const range = (data.range as number | undefined) ?? 10;
|
|
166
|
+
if (typeof range !== 'number' || Number.isNaN(range) || range < 0) {
|
|
167
|
+
return err(new SpawnLightInvalidBoundsError('PointLight', 'range', range));
|
|
168
|
+
}
|
|
169
|
+
return ok(undefined);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** Validate point-light shadow payloads at the render owner boundary. */
|
|
173
|
+
export function validatePointLightShadowData(
|
|
174
|
+
data: Readonly<Record<string, unknown>>,
|
|
175
|
+
): LightValidationResult {
|
|
176
|
+
const mapSize = (data.mapSize as number | undefined) ?? 512;
|
|
177
|
+
if (mapSize < 1) return err(new ShadowInvalidConfigError('mapSize', mapSize, 1));
|
|
178
|
+
const nearPlane = (data.nearPlane as number | undefined) ?? 0.1;
|
|
179
|
+
const farPlane = (data.farPlane as number | undefined) ?? 25;
|
|
180
|
+
if (farPlane <= nearPlane) {
|
|
181
|
+
return err(new ShadowInvalidConfigError('farPlane', farPlane, nearPlane));
|
|
182
|
+
}
|
|
183
|
+
const pcfKernelSize = (data.pcfKernelSize as number | undefined) ?? 3;
|
|
184
|
+
if (pcfKernelSize < 1 || pcfKernelSize % 2 === 0) {
|
|
185
|
+
return err(new ShadowInvalidConfigError('pcfKernelSize', pcfKernelSize, 1));
|
|
186
|
+
}
|
|
187
|
+
return ok(undefined);
|
|
188
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// @forgeax/engine-render - MeshFilter (mesh asset reference).
|
|
2
|
+
//
|
|
3
|
+
// Schema: `{ assetHandle: 'shared<MeshAsset>' }`. The schema-vocab
|
|
4
|
+
// `'shared<T>'` keyword stores a u32 column and type-derives to
|
|
5
|
+
// `Handle<'MeshAsset', 'shared'>` (engine-ecs Handle<T,M> twoParam
|
|
6
|
+
// phantom; `'shared'` mode = ref-counted retain on set / release on
|
|
7
|
+
// clear, lifecycle owned by `SharedRefStore` per feat-20260614).
|
|
8
|
+
// The brand prevents cross-asset assignment at compile time (e.g.
|
|
9
|
+
// `Handle<'TextureAsset','shared'>` is not assignable to `assetHandle`).
|
|
10
|
+
//
|
|
11
|
+
// AI users create one `MeshAsset` payload through geometry's primitive
|
|
12
|
+
// factory and intern it in the owning World; the returned shared reference
|
|
13
|
+
// matches the schema-derived `Handle<'MeshAsset', 'shared'>` shape.
|
|
14
|
+
//
|
|
15
|
+
// Naming flavor: unity-style "MeshFilter / MeshRenderer" pair, but the forgeax
|
|
16
|
+
// pair does NOT mirror Unity's filter-toggle semantics - MeshFilter only
|
|
17
|
+
// carries the geometry ref, MeshRenderer only carries the material handle;
|
|
18
|
+
// the pair is independently composable. D-Q7 default-material policy
|
|
19
|
+
// (feat-20260517-merge-mesh-renderer-material-renderer plan-strategy §2.2):
|
|
20
|
+
// case A (entity carries MeshFilter without MeshRenderer) -> archetype
|
|
21
|
+
// query never matches -> entity is silently absent from the
|
|
22
|
+
// RenderableSnapshot[] (NO default-material fallback, NO onError fire);
|
|
23
|
+
// case B (MeshRenderer.material omitted at spawn) -> mid-grey
|
|
24
|
+
// defaultMaterialSnapshot fallback (no onError); case C (material handle
|
|
25
|
+
// unresolved) -> RhiError 'asset-not-registered' (mirrors the
|
|
26
|
+
// MeshFilter.assetHandle dangling-ref path).
|
|
27
|
+
//
|
|
28
|
+
// charter mapping: proposition 1 (single import) + proposition 4 (explicit
|
|
29
|
+
// failure: missing or unregistered handle fires onError 'asset-not-registered'
|
|
30
|
+
// with .detail = { assetHandle } + cross-asset brand mismatch is a TS
|
|
31
|
+
// compile-time error) + proposition 5 (consistent abstraction: the schema
|
|
32
|
+
// vocab `'shared<T>'` is the SSOT for AssetRegistry-owned handles across
|
|
33
|
+
// the engine).
|
|
34
|
+
|
|
35
|
+
import { defineComponent } from '@forgeax/engine-ecs';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Mesh filter (geometry asset reference).
|
|
39
|
+
*
|
|
40
|
+
* `assetHandle` carries a `Handle<'MeshAsset', 'shared'>` (u32-stored)
|
|
41
|
+
* pointing to a mesh interned by the owning World. Create that reference
|
|
42
|
+
* with `world.internSharedRef(createPrimitiveMesh('cube').unwrap())` or
|
|
43
|
+
* with a payload loaded from the App asset registry.
|
|
44
|
+
*
|
|
45
|
+
* Error path: if the handle is not registered at draw time, RenderSystem
|
|
46
|
+
* fires `Renderer.onError` with
|
|
47
|
+
* `RhiError({ code: 'asset-not-registered', detail: { assetHandle } })`
|
|
48
|
+
* and skips this entity (other entities continue rendering; charter
|
|
49
|
+
* proposition 9 graceful degradation).
|
|
50
|
+
*
|
|
51
|
+
* @example Spawn an entity referencing a geometry-owned cube mesh:
|
|
52
|
+
* import { MeshFilter } from '@forgeax/engine-render';
|
|
53
|
+
* import { createPrimitiveMesh } from '@forgeax/engine-geometry';
|
|
54
|
+
* const cube = world.internSharedRef(createPrimitiveMesh('cube').unwrap());
|
|
55
|
+
* world.spawn({ component: MeshFilter, data: { assetHandle: cube } });
|
|
56
|
+
*/
|
|
57
|
+
export const MeshFilter = defineComponent('MeshFilter', {
|
|
58
|
+
assetHandle: { type: 'shared<MeshAsset>' },
|
|
59
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// @forgeax/engine-render - MeshRenderer (multi-material array slot).
|
|
2
|
+
//
|
|
3
|
+
// feat-20260608-mesh-multi-section-primitive-multi-material-slot M2 / w7:
|
|
4
|
+
// the single `material` field is replaced with `materials` — an
|
|
5
|
+
// `array<shared<MaterialAsset>>` indexed by MeshAsset.materialSlots. Entries
|
|
6
|
+
// are sparse positional overrides: a missing/zero entry inherits the Mesh
|
|
7
|
+
// slot default, while a defaultless slot inherits the neutral engine material.
|
|
8
|
+
//
|
|
9
|
+
// The schema-vocab keyword `'array<shared<MaterialAsset>>'` (feat-20260614
|
|
10
|
+
// M5 -- migrated from `'array<handle<MaterialAsset>>'`) stores as a u32
|
|
11
|
+
// column slot array; the brand prevents cross-asset assignment at compile
|
|
12
|
+
// time. The `'shared<T>'` arm routes element retain/release through
|
|
13
|
+
// SharedRefStore (M4 / w13) on overwrite / archetype migration.
|
|
14
|
+
//
|
|
15
|
+
// charter mapping: proposition 1 (single import — `MeshRenderer` is the
|
|
16
|
+
// only material-binding component AI users see); proposition 3
|
|
17
|
+
// (machine-readable schema > prose); proposition 4 (explicit failure: the
|
|
18
|
+
// TS brand on `Handle<'MaterialAsset','shared'>` rejects cross-variant
|
|
19
|
+
// assignment at compile time); proposition 5 (consistent abstraction:
|
|
20
|
+
// shading model classification (`'unlit'` / `'standard'`) lives ONLY on
|
|
21
|
+
// the asset discriminant, NOT on the component name).
|
|
22
|
+
//
|
|
23
|
+
// RenderSystem consumption: `render-system-extract.ts` runs ONE archetype
|
|
24
|
+
// query (`world.query(MeshRenderer)`) and routes per entity by
|
|
25
|
+
// `mat.materialShaderId` (shader identity) to the unlit.wgsl or pbr.wgsl
|
|
26
|
+
// pipeline tag.
|
|
27
|
+
|
|
28
|
+
import { defineComponent } from '@forgeax/engine-ecs';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Mesh renderer (ECS component, multi-material array).
|
|
32
|
+
*
|
|
33
|
+
* Stores `materials: readonly Handle<'MaterialAsset','shared'>[]`
|
|
34
|
+
* (u32-stored array, indexed by MeshAsset.materialSlots). Submeshes point to
|
|
35
|
+
* those stable slots through `Submesh.materialSlot`. The asset's `passes[].shader`
|
|
36
|
+
* identity is the SSOT for which pipeline RenderSystem routes the entity
|
|
37
|
+
* to (record stage dispatches on `materialShaderId`).
|
|
38
|
+
*
|
|
39
|
+
* Defaults map carries `materials: []`: every slot inherits its Mesh-owned
|
|
40
|
+
* default, or the neutral engine material when that slot is intentionally
|
|
41
|
+
* defaultless.
|
|
42
|
+
*
|
|
43
|
+
* @example Spawn while inheriting every Mesh slot default:
|
|
44
|
+
* world.spawn({ component: MeshRenderer, data: {} });
|
|
45
|
+
*
|
|
46
|
+
* @example Spawn an unlit-targeted entity:
|
|
47
|
+
* import { MeshRenderer, Materials } from '@forgeax/engine-render';
|
|
48
|
+
* const matPayload = engine.assets.catalog(matGuid, Materials.unlit([1, 0, 0, 1])).value;
|
|
49
|
+
* const matHandle = world.allocSharedRef('MaterialAsset', matPayload);
|
|
50
|
+
* world.spawn({ component: MeshRenderer, data: { materials: [matHandle] } });
|
|
51
|
+
*
|
|
52
|
+
* @example Spawn a standard (PBR) entity:
|
|
53
|
+
* const matPayload = engine.assets.catalog(matGuid, Materials.standard({
|
|
54
|
+
* baseColor: [0.5, 0.5, 0.5, 1], metallic: 0, roughness: 0.4,
|
|
55
|
+
* })).value;
|
|
56
|
+
* const matHandle = world.allocSharedRef('MaterialAsset', matPayload);
|
|
57
|
+
* world.spawn({ component: MeshRenderer, data: { materials: [matHandle] } });
|
|
58
|
+
*/
|
|
59
|
+
export const MeshRenderer = defineComponent('MeshRenderer', {
|
|
60
|
+
materials: { type: 'array<shared<MaterialAsset>>', default: [] },
|
|
61
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// @forgeax/engine-runtime — PointLightShadow (omnidirectional point-light
|
|
2
|
+
// shadow mapping parameters; cube-array atlas variant).
|
|
3
|
+
//
|
|
4
|
+
// Schema: 6 f32 columns — mapSize (u32, stored as f32), depthBias, normalBias,
|
|
5
|
+
// nearPlane, farPlane, pcfKernelSize (u32, stored as f32). No fixed-extent
|
|
6
|
+
// field — cube map uses fov=90 perspective, not ortho.
|
|
7
|
+
//
|
|
8
|
+
// Atlas capacity is a renderer policy; ECS does not enforce a component
|
|
9
|
+
// cardinality bound.
|
|
10
|
+
// Co-located with DirectionalLight in components/ (research L1.2).
|
|
11
|
+
//
|
|
12
|
+
// Naming convention: bare entity name (AGENTS.md §Component naming), no
|
|
13
|
+
// Component suffix. Same defineComponent pattern and ShadowInvalidConfigError
|
|
14
|
+
// surface as the shadow fields merged into DirectionalLight (feat-20260621 M1).
|
|
15
|
+
|
|
16
|
+
import { defineComponent } from '@forgeax/engine-ecs';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Omnidirectional point-light shadow mapping parameters.
|
|
20
|
+
*
|
|
21
|
+
* The renderer may batch this component into a bounded atlas, but the ECS
|
|
22
|
+
* component remains a plain storage schema and carries no cardinality policy.
|
|
23
|
+
*
|
|
24
|
+
* @example Spawn a point light with default shadow config:
|
|
25
|
+
* world.spawn(
|
|
26
|
+
* { component: Transform, data: { pos: [0, 4, 0] } },
|
|
27
|
+
* { component: PointLight, data: { range: 25 } },
|
|
28
|
+
* { component: PointLightShadow, data: {} }, // 6 fields filled from defaults
|
|
29
|
+
* );
|
|
30
|
+
*
|
|
31
|
+
* @example Spawn with explicit map size and bias:
|
|
32
|
+
* world.spawn(
|
|
33
|
+
* { component: PointLightShadow, data: { mapSize: 1024, depthBias: 0.01 } },
|
|
34
|
+
* );
|
|
35
|
+
*/
|
|
36
|
+
export const PointLightShadow = defineComponent('PointLightShadow', {
|
|
37
|
+
mapSize: { type: 'f32', default: 512 },
|
|
38
|
+
depthBias: { type: 'f32', default: 0.005 },
|
|
39
|
+
normalBias: { type: 'f32', default: 0.05 },
|
|
40
|
+
nearPlane: { type: 'f32', default: 0.1 },
|
|
41
|
+
farPlane: { type: 'f32', default: 25 },
|
|
42
|
+
pcfKernelSize: { type: 'f32', default: 3 },
|
|
43
|
+
});
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// @forgeax/engine-render - PointLight (omnidirectional point-light parameters).
|
|
2
|
+
//
|
|
3
|
+
// Schema: color array<f32,3> + intensity f32 + range f32 (feat-20260709 M2:
|
|
4
|
+
// color collapsed from 3 per-axis scalar columns to one inline array<f32,3>).
|
|
5
|
+
// `position` comes from the Transform component; PointLight requires a
|
|
6
|
+
// companion Transform on the same entity (ECS query: `[Transform, PointLight]`).
|
|
7
|
+
// `range` units are meters; defaults to `10.0`. Runtime finite-range
|
|
8
|
+
// attenuation is the Three r184 squared window; the KHR unsquared curve is an
|
|
9
|
+
// import/reference boundary only. See `light-helpers.ts` for the host-side
|
|
10
|
+
// range projection.
|
|
11
|
+
//
|
|
12
|
+
// 0 light + standard material -> physically correct black render
|
|
13
|
+
// (feat-20260518-pbr-direct-lighting-mvp). The runtime once-warn channel
|
|
14
|
+
// (M5 / w25) collapses to "directionalCount + pointCount + spotCount === 0";
|
|
15
|
+
// see packages/runtime/README.md section Common pitfalls for the AI-user
|
|
16
|
+
// guidance after the M5 docs land.
|
|
17
|
+
//
|
|
18
|
+
// Naming convention: bare entity name aligned with Bevy ECS conventions
|
|
19
|
+
// (feat-20260513-component-naming-bevy-align). DirectionalLight / SpotLight
|
|
20
|
+
// follow the same single-semantic-entity rule (charter proposition 5).
|
|
21
|
+
//
|
|
22
|
+
// charter mapping: proposition 1 (single import + IDE autocomplete on
|
|
23
|
+
// payload.range) + proposition 3 (silent failure -> explicit failure;
|
|
24
|
+
// spawn-time fail-fast on range<0 / NaN with structured EcsError) +
|
|
25
|
+
// proposition 5 (consistent abstraction: shared payload shape with
|
|
26
|
+
// SpotLight; `range` semantics aligned with KHR_lights_punctual).
|
|
27
|
+
|
|
28
|
+
import { defineComponent } from '@forgeax/engine-ecs';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Omnidirectional point light (KHR_lights_punctual `point` type).
|
|
32
|
+
*
|
|
33
|
+
* `position` source: the companion `Transform` component on the same entity.
|
|
34
|
+
* Spawn via `world.spawn({ component: Transform, data: ... }, { component: PointLight, data: ... })`
|
|
35
|
+
* so the render system extract path can join the two via the
|
|
36
|
+
* `[Transform, PointLight]` ECS query.
|
|
37
|
+
*
|
|
38
|
+
* `color` is linear-space rgb in `[0, 1]` per channel; `intensity` is candela;
|
|
39
|
+
* `range` is in meters and defaults to `10.0`
|
|
40
|
+
* (KHR convention; `+Infinity` is the KHR no-truncation value, retained
|
|
41
|
+
* for KHR_lights_punctual `range: 0` bridging via `light-helpers.ts`).
|
|
42
|
+
* The runtime window is `clamp(1 - (d / range)^4, 0, 1)^2`; its no-cutoff
|
|
43
|
+
* boundary uses inverse-square decay with the shader safety floor. Exposure is
|
|
44
|
+
* applied after lighting and never multiplied into intensity.
|
|
45
|
+
*
|
|
46
|
+
* @example Spawn a single point light at (5, 3, 5):
|
|
47
|
+
* world.spawn(
|
|
48
|
+
* { component: Transform, data: { pos: [5, 3, 5] } },
|
|
49
|
+
* { component: PointLight, data: { intensity: 8, range: 25 } },
|
|
50
|
+
* );
|
|
51
|
+
*
|
|
52
|
+
* @example Minimal spawn -- defaults give neutral white at full strength, range 10m:
|
|
53
|
+
* world.spawn(
|
|
54
|
+
* { component: Transform, data: { pos: [0, 1, 0] } },
|
|
55
|
+
* { component: PointLight, data: {} },
|
|
56
|
+
* );
|
|
57
|
+
* // resolves to color=[1, 1, 1], intensity=1, range=10.0.
|
|
58
|
+
*/
|
|
59
|
+
export const PointLight = defineComponent('PointLight', {
|
|
60
|
+
// color carries an explicit layer-2 default [1,1,1] (white); the array
|
|
61
|
+
// layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
|
|
62
|
+
color: { type: 'array<f32, 3>', default: new Float32Array([1, 1, 1]) },
|
|
63
|
+
intensity: { type: 'f32', default: 1 },
|
|
64
|
+
range: { type: 'f32', default: 10.0 },
|
|
65
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// @forgeax/engine-render - PostProcessParams component.
|
|
2
|
+
//
|
|
3
|
+
// Schema: { shader: 'string', data: 'buffer' }.
|
|
4
|
+
//
|
|
5
|
+
// `shader` identifies the fullscreen post-process shader (the same id as passed to
|
|
6
|
+
// `renderer.postProcess.register(id, entry)`). `data` carries the per-frame params
|
|
7
|
+
// bytes as a variable-byte ECS managed buffer slot. The write side (world.spawn /
|
|
8
|
+
// world.set) accepts any AllowSharedBufferSource (Float32Array / ArrayBuffer /
|
|
9
|
+
// Uint8Array / any TypedArray) and the ECS normalizes it to Uint8Array bytes
|
|
10
|
+
// (feat-20260621 V2 / AC-A4); the read side (world.get) returns Uint8Array, which
|
|
11
|
+
// satisfies AllowSharedBufferSource for GPU queue.writeBuffer ingestion.
|
|
12
|
+
//
|
|
13
|
+
// Single-semantic component — drops the `Component` suffix
|
|
14
|
+
// (AGENTS.md §Component naming rule #1). The `data` field uses the ECS 'buffer'
|
|
15
|
+
// vocab keyword (plan-strategy D-7) for variable-byte storage.
|
|
16
|
+
//
|
|
17
|
+
// Data flow (plan-strategy D-1):
|
|
18
|
+
// extract -> iterate PostProcessParams-bearing entities ->
|
|
19
|
+
// collect into Map<shaderId, AllowSharedBufferSource> snapshot ->
|
|
20
|
+
// dispatchFullscreenPass picks up per-shader data -> writeBuffer to eager UBO.
|
|
21
|
+
//
|
|
22
|
+
// Decision anchors:
|
|
23
|
+
// - requirements AC-A2 (data-driven, no imperative renderer.setParams mutator)
|
|
24
|
+
// - requirements AC-A4 (AllowSharedBufferSource type on the data field)
|
|
25
|
+
// - plan-strategy D-1 (new single-semantic ECS component for params)
|
|
26
|
+
// - plan-strategy D-7 (ECS 'buffer' vocab keyword for variable-byte storage)
|
|
27
|
+
|
|
28
|
+
import { defineComponent } from '@forgeax/engine-ecs';
|
|
29
|
+
|
|
30
|
+
const schema = {
|
|
31
|
+
shader: 'string',
|
|
32
|
+
data: 'buffer',
|
|
33
|
+
} as const;
|
|
34
|
+
|
|
35
|
+
export const PostProcessParams = defineComponent('PostProcessParams', schema);
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// @forgeax/engine-runtime - SceneInstance component (feat-20260608-
|
|
2
|
+
// scene-nesting-ecs-fication M2 / w16).
|
|
3
|
+
//
|
|
4
|
+
// Single ECS fat component carrying everything that used to live on the
|
|
5
|
+
// old `SceneInstance` + `SceneInstanceContainer` pair (deleted
|
|
6
|
+
// in M3). Schema fits the ECS schema vocab (3 single-identifier fields):
|
|
7
|
+
//
|
|
8
|
+
// { source: 'shared<SceneAsset>',
|
|
9
|
+
// mapping: 'array<entity>',
|
|
10
|
+
// state: 'unique<SceneInstanceState>' }
|
|
11
|
+
//
|
|
12
|
+
// `source` carries the SceneAsset handle the synthetic root entity was
|
|
13
|
+
// instantiated from (Tier-A AssetUnion handle, AGENTS.md §Assets submodule).
|
|
14
|
+
// `mapping` is the LocalEntityId -> Entity table indexed positionally
|
|
15
|
+
// (mapping[localId] = spawned Entity); the ECS variable-array column gives
|
|
16
|
+
// us a SoA-friendly read path for query<SceneInstance> scans without
|
|
17
|
+
// touching the dynamic Map/Set state.
|
|
18
|
+
// `state` is a `ref<SceneInstanceState>` slot — World holds the live
|
|
19
|
+
// SceneInstanceState payload in its UniqueRefStore and World despawn
|
|
20
|
+
// auto-releases the ref u32 (the same path used by audio / physics
|
|
21
|
+
// payloads, plan-strategy §D-2). Each instantiateScene call calls
|
|
22
|
+
// `world.allocUniqueRef('SceneInstanceState', state)` once and stores the
|
|
23
|
+
// returned u32 in this column.
|
|
24
|
+
//
|
|
25
|
+
// Decision anchors:
|
|
26
|
+
// - plan-strategy §D-2 (single ref wraps SceneInstanceState dynamic
|
|
27
|
+
// structure; ECS schema vocab `\w+` rejects `ref<Map<...>>`)
|
|
28
|
+
// - plan-strategy §3.2 sequence (sequence diagram step 'set ... state:
|
|
29
|
+
// {entityToLocalId, detached, overrides, rootEntities}')
|
|
30
|
+
// - AGENTS.md §Component naming rule #1 (single-semantic component drops
|
|
31
|
+
// `Component` suffix)
|
|
32
|
+
// - charter F1 (single-import barrel: SceneInstance lives in
|
|
33
|
+
// `@forgeax/engine-render` next to Transform / Camera / DirectionalLight)
|
|
34
|
+
// - charter P3 (machine-readable schema: 3 closed fields)
|
|
35
|
+
// - charter P4 (consistent abstraction: instance == entity carrying
|
|
36
|
+
// SceneInstance — same `world.query({ read: [SceneInstance] })` /
|
|
37
|
+
// `world.get(root, SceneInstance)` path as any other component)
|
|
38
|
+
|
|
39
|
+
import { defineComponent, type EntityHandle } from '@forgeax/engine-ecs';
|
|
40
|
+
import type { LocalEntityId, MountOverride } from '@forgeax/engine-types';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Per-component, per-field override record carried in `SceneInstanceState`.
|
|
44
|
+
*
|
|
45
|
+
* Composite key `<componentName>:<fieldName>` keeps the override map flat
|
|
46
|
+
* (single Map nesting level) so AI users walking `state.overrides` see one
|
|
47
|
+
* iteration depth — D-2 prefers a single SSOT over multi-Map nesting that
|
|
48
|
+
* would make iteration order ambiguous (charter F1: single mental model).
|
|
49
|
+
*
|
|
50
|
+
* The value is `unknown` because the per-component schema vocab lives in the
|
|
51
|
+
* ECS layer; runtime fail-fast via `EcsErrorCode = 'scene-override-type-
|
|
52
|
+
* mismatch'` (plan-strategy §D-9) catches type drift on the apply path.
|
|
53
|
+
*
|
|
54
|
+
* @internal Surface from `state.overrides` only; AI users never construct a
|
|
55
|
+
* record directly. Use `worldSetSceneOverride(world, root, member, comp,
|
|
56
|
+
* field, value)` to write and `worldRemoveSceneOverride(world, root, member,
|
|
57
|
+
* comp, field)` to roll back to the source SceneAsset value.
|
|
58
|
+
*/
|
|
59
|
+
export interface SceneInstanceOverrideRecord {
|
|
60
|
+
readonly comp: string;
|
|
61
|
+
/**
|
|
62
|
+
* Component-granular add-or-patch discriminant (feat-20260713 M1 / w4):
|
|
63
|
+
* present -> this record patches a single field; absent -> it adds/upserts
|
|
64
|
+
* the whole `comp` (M2 apply semantics). Mirrors `MountOverride.field`.
|
|
65
|
+
*/
|
|
66
|
+
readonly field?: string;
|
|
67
|
+
readonly value: unknown;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Dynamic state payload for one SceneInstance — held in the World's
|
|
72
|
+
* UniqueRefStore behind a `ref<SceneInstanceState>` slot on the synthetic
|
|
73
|
+
* root entity. Mirrors the old class-based layout (plan-strategy §D-2 +
|
|
74
|
+
* design doc §11.2 internal-state-table) but flattened into plain JS Maps/Sets so
|
|
75
|
+
* AI users can iterate without indirection.
|
|
76
|
+
*
|
|
77
|
+
* Lifecycle:
|
|
78
|
+
* - allocated by `worldInstantiateScene(world, handle, parent?)` — the W in
|
|
79
|
+
* `world.allocUniqueRef('SceneInstanceState', state)` returns the u32
|
|
80
|
+
* slot id stored in the SceneInstance.state column;
|
|
81
|
+
* - released by `world.despawn(root)` (the standard `ref<T>` release loop)
|
|
82
|
+
* or explicitly via `worldDespawnScene(world, root)` / `worldDespawnDescendants(world, root)`.
|
|
83
|
+
*
|
|
84
|
+
* AI users typically reach this struct only through the read path
|
|
85
|
+
* `world.get(root, SceneInstance).state.overrides.get(<comp>:<field>)` for
|
|
86
|
+
* inspection; mutation happens through the 8 World methods.
|
|
87
|
+
*/
|
|
88
|
+
export interface SceneInstanceState {
|
|
89
|
+
/**
|
|
90
|
+
* SceneAsset handle the instance was instantiated from. Mirrors the
|
|
91
|
+
* SceneInstance.source column for AI users who already have a
|
|
92
|
+
* SceneInstanceState in hand and want the source handle without a second
|
|
93
|
+
* `world.get` round-trip.
|
|
94
|
+
*/
|
|
95
|
+
readonly source: import('@forgeax/engine-types').Handle<'SceneAsset', 'shared'>;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Reverse mapping (live `Entity` -> source `LocalEntityId`). Used by
|
|
99
|
+
* `worldSetSceneOverride` to validate the member entity belongs to this
|
|
100
|
+
* instance + by `worldDetachSceneMember` / `worldReattachSceneMember`
|
|
101
|
+
* to translate caller-side Entity values back to their authored localId.
|
|
102
|
+
*/
|
|
103
|
+
readonly entityToLocalId: Map<EntityHandle, LocalEntityId>;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* LocalEntityIds of members the AI user marked detached via
|
|
107
|
+
* `worldDetachSceneMember(world, root, member)`. The member entities stay
|
|
108
|
+
* alive in the World; only the bookkeeping marker moves so
|
|
109
|
+
* `worldDespawnDescendants(world, root, { keepDetached: true })` can skip them.
|
|
110
|
+
* Detach is idempotent (set semantics).
|
|
111
|
+
*/
|
|
112
|
+
readonly detachedLocalIds: Set<LocalEntityId>;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Per-member runtime overrides keyed by `<localId>` -> `<comp>:<field>`
|
|
116
|
+
* -> override record. mount-time overrides (authored on the SceneAsset's
|
|
117
|
+
* `mounts[].overrides`) populate this map at instantiate-time so AI
|
|
118
|
+
* users see them via the same read path as runtime
|
|
119
|
+
* `setSceneOverride` writes (single SSOT).
|
|
120
|
+
*/
|
|
121
|
+
readonly overrides: Map<LocalEntityId, Map<string, SceneInstanceOverrideRecord>>;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Top-level root entities of the materialised tree (members without a
|
|
125
|
+
* ChildOf parent at instantiate time). The synthetic root entity that
|
|
126
|
+
* carries the SceneInstance component itself is NOT in this list — it is
|
|
127
|
+
* the parent of every member entity (plan-strategy §3.2 sequence step 7).
|
|
128
|
+
*/
|
|
129
|
+
readonly rootEntities: EntityHandle[];
|
|
130
|
+
|
|
131
|
+
/** Synthetic roots of recursively mounted SceneAssets owned by this instance. */
|
|
132
|
+
readonly mountRoots: EntityHandle[];
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Total slot count `entities.length + sum(mounts[].memberCount)` —
|
|
136
|
+
* captured at instantiate-time so cycle / count consistency checks
|
|
137
|
+
* (e.g. `worldGetSceneAssetForInstance(world, root)` symmetry) can compare
|
|
138
|
+
* against the live SceneInstance.mapping column without re-reading the
|
|
139
|
+
* SceneAsset.
|
|
140
|
+
*/
|
|
141
|
+
readonly totalSlots: number;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Mount-time override authored on the parent SceneAsset's `mounts[]`
|
|
145
|
+
* record. Captured at instantiate-time so `worldRemoveSceneOverride`
|
|
146
|
+
* can fall back to the mount-time value before going to the source
|
|
147
|
+
* SceneAsset value (plan-strategy §D-2).
|
|
148
|
+
*/
|
|
149
|
+
readonly mountTimeOverrides: readonly MountOverride[];
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* SceneInstance ECS component — synthetic root entity payload for one
|
|
154
|
+
* materialised SceneAsset (instance == entity carrying SceneInstance,
|
|
155
|
+
* charter P4).
|
|
156
|
+
*
|
|
157
|
+
* AI users discover the component via IDE autocomplete on
|
|
158
|
+
* `@forgeax/engine-render` (single-import barrel; AGENTS.md §Components):
|
|
159
|
+
*
|
|
160
|
+
* ```ts
|
|
161
|
+
* import { SceneInstance } from '@forgeax/engine-render';
|
|
162
|
+
* for (const row of world.query({ read: [SceneInstance] }).unwrap()) {
|
|
163
|
+
* console.log(`root=${row.entity} source=${row.get(SceneInstance).source}`);
|
|
164
|
+
* }
|
|
165
|
+
*
|
|
166
|
+
* const inst = world.get(root, SceneInstance).value;
|
|
167
|
+
* const memberEntity = inst.mapping[localId]; // Uint32Array snapshot
|
|
168
|
+
* for (const detached of inst.state.detachedLocalIds) { /* ... *\/ }
|
|
169
|
+
* ```
|
|
170
|
+
*
|
|
171
|
+
* The component does not register a relationship — synthetic root +
|
|
172
|
+
* members are wired through the standard `ChildOf` (member -> root) so
|
|
173
|
+
* the existing `world.iterDescendants(root)` / Children mirror code paths
|
|
174
|
+
* apply unchanged (plan-strategy §D-5).
|
|
175
|
+
*
|
|
176
|
+
* @example Materialise + inspect a SceneAsset:
|
|
177
|
+
* const { root, diagnostics } = worldInstantiateScene(world, handle).value;
|
|
178
|
+
* const inst = world.get(root, SceneInstance).value;
|
|
179
|
+
* // inst.source === handle, inst.mapping is Uint32Array(totalSlots)
|
|
180
|
+
* // inst.state holds entityToLocalId / detachedLocalIds / overrides /
|
|
181
|
+
* // rootEntities / mountRoots / totalSlots / mountTimeOverrides.
|
|
182
|
+
*/
|
|
183
|
+
export const SceneInstance = defineComponent(
|
|
184
|
+
'SceneInstance',
|
|
185
|
+
{
|
|
186
|
+
source: { type: 'shared<SceneAsset>' },
|
|
187
|
+
mapping: { type: 'array<entity>' },
|
|
188
|
+
// The unique slot is the ECS storage seam for the instance's structured
|
|
189
|
+
// runtime payload; keep the nested semantic visible to schema consumers.
|
|
190
|
+
state: { type: 'unique<SceneInstanceState>', shape: 'nested' },
|
|
191
|
+
},
|
|
192
|
+
{ transient: true },
|
|
193
|
+
);
|