@forgeax/engine-render 0.0.0-dev.8d955ade1c79
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 +647 -0
- package/dist/.tsbuildinfo +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__/callback-inference.test-d.d.ts +2 -0
- package/dist/__tests__/callback-inference.test-d.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__/device-scope-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/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__/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__/frame-observation.contract.test.d.ts +2 -0
- package/dist/__tests__/frame-observation.contract.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/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 +18 -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-reference.d.ts +15 -0
- package/dist/__tests__/gpu-driven-view-reference.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-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__/ibl/face-uniforms.unit.test.d.ts +2 -0
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
- package/dist/__tests__/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-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__/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-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/morph-feature-plan.unit.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__/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-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.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-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-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-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-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-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-plan.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/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.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-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__/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__/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-config.unit.test.d.ts +2 -0
- package/dist/__tests__/ssao-config.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__/standard-clustered-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/surface-configuration.unit.test.d.ts +2 -0
- package/dist/__tests__/surface-configuration.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-resource-short-circuit.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
- package/dist/__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/assembly/backend-contract.d.ts +37 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +207 -0
- package/dist/assembly/factory.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +84 -0
- package/dist/assembly/host-contract.d.ts.map +1 -0
- package/dist/assembly/material/assembly.d.ts +21 -0
- package/dist/assembly/material/assembly.d.ts.map +1 -0
- package/dist/assembly/material/pipeline-projection.d.ts +30 -0
- package/dist/assembly/material/pipeline-projection.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 +27 -0
- package/dist/authoring.mjs.map +1 -0
- package/dist/chunk-CQXZC5XI.mjs +182 -0
- package/dist/chunk-CQXZC5XI.mjs.map +1 -0
- package/dist/chunk-HCOGPHKS.mjs +93 -0
- package/dist/chunk-HCOGPHKS.mjs.map +1 -0
- package/dist/chunk-YEJIUW7D.mjs +1152 -0
- package/dist/chunk-YEJIUW7D.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__/points-lines-admission.unit.test.d.ts +2 -0
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +2 -0
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
- package/dist/components/__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/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/glyph-text.d.ts +26 -0
- package/dist/components/glyph-text.d.ts.map +1 -0
- package/dist/components/index.d.ts +24 -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/lines.d.ts +5 -0
- package/dist/components/lines.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/points.d.ts +15 -0
- package/dist/components/points.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/skybox-background.d.ts +56 -0
- package/dist/components/skybox-background.d.ts.map +1 -0
- package/dist/components/skylight.d.ts +55 -0
- package/dist/components/skylight.d.ts.map +1 -0
- package/dist/components/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 +74 -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 +42 -0
- package/dist/components/sprite-playback-mode.d.ts.map +1 -0
- package/dist/components/sprite-region-override.d.ts +46 -0
- package/dist/components/sprite-region-override.d.ts.map +1 -0
- package/dist/components/tile-layer.d.ts +106 -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 +19 -0
- package/dist/construct-renderer.d.ts.map +1 -0
- package/dist/construct-renderer.mjs +27462 -0
- package/dist/construct-renderer.mjs.map +1 -0
- package/dist/debug-draw-glue.d.ts +5 -0
- package/dist/debug-draw-glue.d.ts.map +1 -0
- package/dist/device/device-scope.d.ts +83 -0
- package/dist/device/device-scope.d.ts.map +1 -0
- package/dist/device/gpu-residency.d.ts +337 -0
- package/dist/device/gpu-residency.d.ts.map +1 -0
- package/dist/device/resource-types.d.ts +8 -0
- package/dist/device/resource-types.d.ts.map +1 -0
- package/dist/engine-metrics.d.ts +23 -0
- package/dist/engine-metrics.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 +105 -0
- package/dist/errors/recover.d.ts.map +1 -0
- package/dist/errors/render.d.ts +705 -0
- package/dist/errors/render.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/fullscreen.d.ts +19 -0
- package/dist/features/fullscreen.d.ts.map +1 -0
- package/dist/features/host.d.ts +106 -0
- package/dist/features/host.d.ts.map +1 -0
- package/dist/features/morph/morph-feature.d.ts +79 -0
- package/dist/features/morph/morph-feature.d.ts.map +1 -0
- package/dist/features/plan.d.ts +182 -0
- package/dist/features/plan.d.ts.map +1 -0
- package/dist/features/prepared-gpu-work.d.ts +117 -0
- package/dist/features/prepared-gpu-work.d.ts.map +1 -0
- package/dist/features/prepared-graphics-store.d.ts +66 -0
- package/dist/features/prepared-graphics-store.d.ts.map +1 -0
- package/dist/features/prepared-graphics.d.ts +215 -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 +12 -0
- package/dist/features/render-graph-contribution.d.ts.map +1 -0
- package/dist/features/render-graph-raster.d.ts +38 -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/targets.d.ts +32 -0
- package/dist/features/targets.d.ts.map +1 -0
- package/dist/features/types.d.ts +68 -0
- package/dist/features/types.d.ts.map +1 -0
- package/dist/features/vocabulary.d.ts +14 -0
- package/dist/features/vocabulary.d.ts.map +1 -0
- package/dist/fullscreen-post-process-pass.d.ts +157 -0
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -0
- package/dist/glyph-text-layout-system.d.ts +19 -0
- package/dist/glyph-text-layout-system.d.ts.map +1 -0
- package/dist/gpu-driven/batch-topology.d.ts +55 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +51 -0
- package/dist/gpu-driven/production-raster.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +85 -0
- package/dist/gpu-driven/view-gpu.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 +78 -0
- package/dist/gpu-scene-schema.d.ts.map +1 -0
- package/dist/gpu-scene.d.ts +55 -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 +163 -0
- package/dist/hdrp-buffers.d.ts.map +1 -0
- package/dist/ibl/IblPipelineCache.d.ts +168 -0
- package/dist/ibl/IblPipelineCache.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 +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +169 -0
- package/dist/index.mjs.map +1 -0
- package/dist/inspection-types.d.ts +72 -0
- package/dist/inspection-types.d.ts.map +1 -0
- package/dist/instance-buffer-cache.d.ts +56 -0
- package/dist/instance-buffer-cache.d.ts.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.mjs +3 -0
- package/dist/internal.mjs.map +1 -0
- package/dist/lifecycle.d.ts +62 -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 +47 -0
- package/dist/materials.d.ts.map +1 -0
- package/dist/mesh-material-bindings.d.ts +43 -0
- package/dist/mesh-material-bindings.d.ts.map +1 -0
- package/dist/pbr-pipeline.d.ts +301 -0
- package/dist/pbr-pipeline.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts +5 -0
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts +31 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
- package/dist/pipeline/standard-profile.d.ts +40 -0
- package/dist/pipeline/standard-profile.d.ts.map +1 -0
- package/dist/pipeline-builder.d.ts +122 -0
- package/dist/pipeline-builder.d.ts.map +1 -0
- package/dist/pipeline-spec-types.d.ts +24 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -0
- package/dist/pipeline-spec.d.ts +367 -0
- package/dist/pipeline-spec.d.ts.map +1 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/points-lines.bench.d.ts +2 -0
- package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +1 -0
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +1 -0
- package/dist/points-lines/admission.d.ts +36 -0
- package/dist/points-lines/admission.d.ts.map +1 -0
- package/dist/points-lines/bounds.d.ts +8 -0
- package/dist/points-lines/bounds.d.ts.map +1 -0
- package/dist/points-lines/expansion-cache.d.ts +28 -0
- package/dist/points-lines/expansion-cache.d.ts.map +1 -0
- package/dist/points-lines/inspection.d.ts +53 -0
- package/dist/points-lines/inspection.d.ts.map +1 -0
- package/dist/points-lines/prepare.d.ts +67 -0
- package/dist/points-lines/prepare.d.ts.map +1 -0
- package/dist/points-lines/record.d.ts +60 -0
- package/dist/points-lines/record.d.ts.map +1 -0
- package/dist/points-lines/snapshot.d.ts +49 -0
- package/dist/points-lines/snapshot.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/prepared-graphics-resolver.d.ts +59 -0
- package/dist/prepare/prepared-graphics-resolver.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__/typed-frame-graph-plan.unit.test.d.ts +2 -0
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
- package/dist/record/__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/frame-lighting.d.ts +121 -0
- package/dist/record/frame-lighting.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 +20 -0
- package/dist/record/frame-targets.d.ts.map +1 -0
- package/dist/record/frame.d.ts +71 -0
- package/dist/record/frame.d.ts.map +1 -0
- package/dist/record/helpers.d.ts +102 -0
- package/dist/record/helpers.d.ts.map +1 -0
- package/dist/record/main-pass-geometry.d.ts +28 -0
- package/dist/record/main-pass-geometry.d.ts.map +1 -0
- package/dist/record/main-pass-material.d.ts +204 -0
- package/dist/record/main-pass-material.d.ts.map +1 -0
- package/dist/record/main-pass-sprite-draws.d.ts +43 -0
- package/dist/record/main-pass-sprite-draws.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/mesh-ssbo.d.ts +446 -0
- package/dist/record/mesh-ssbo.d.ts.map +1 -0
- package/dist/record/render-context.d.ts +252 -0
- package/dist/record/render-context.d.ts.map +1 -0
- package/dist/record/shadow-pass.d.ts +52 -0
- package/dist/record/shadow-pass.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 +35 -0
- package/dist/record/typed-frame-graph.d.ts.map +1 -0
- package/dist/record/view-ubo.d.ts +45 -0
- package/dist/record/view-ubo.d.ts.map +1 -0
- package/dist/render-contract.d.ts +424 -0
- package/dist/render-contract.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-graph-primitives.d.ts +76 -0
- package/dist/render-graph-primitives.d.ts.map +1 -0
- package/dist/render-pipeline.d.ts +110 -0
- package/dist/render-pipeline.d.ts.map +1 -0
- package/dist/render-system-extract.d.ts +868 -0
- package/dist/render-system-extract.d.ts.map +1 -0
- package/dist/render-system.d.ts +125 -0
- package/dist/render-system.d.ts.map +1 -0
- package/dist/scene/render-scene-types.d.ts +61 -0
- package/dist/scene/render-scene-types.d.ts.map +1 -0
- package/dist/scene/render-scene.d.ts +112 -0
- package/dist/scene/render-scene.d.ts.map +1 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts +30 -0
- package/dist/scene-instances/post-spawn-resolve-joints.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 +50 -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/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 +49 -0
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -0
- package/dist/systems/skin-palette-types.d.ts +14 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -0
- package/dist/systems/transparent-sort-config.d.ts +112 -0
- package/dist/systems/transparent-sort-config.d.ts.map +1 -0
- package/dist/tilemap-chunk-extract-system.d.ts +143 -0
- package/dist/tilemap-chunk-extract-system.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +57 -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/package.json +94 -0
- package/src/__tests__/authoring-path.unit.test.ts +23 -0
- package/src/__tests__/backend-selection-rhi-capture.test-d.ts +21 -0
- package/src/__tests__/callback-inference.test-d.ts +8 -0
- package/src/__tests__/cluster-binner.test.ts +272 -0
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +20 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +23 -0
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
- package/src/__tests__/direct-extract-consumer-contract.test-d.ts +23 -0
- package/src/__tests__/direct-light-snapshot.unit.test.ts +61 -0
- package/src/__tests__/factory-contract.integration.test.ts +280 -0
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +15 -0
- package/src/__tests__/frame-observation.contract.test.ts +112 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
- package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +167 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +350 -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 +436 -0
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +87 -0
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +271 -0
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +290 -0
- package/src/__tests__/gpu-driven-view-reference.ts +111 -0
- package/src/__tests__/gpu-driven-view.browser.test.ts +30 -0
- package/src/__tests__/gpu-driven-view.dawn.test.ts +28 -0
- package/src/__tests__/gpu-driven-view.unit.test.ts +199 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +59 -0
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +308 -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 +205 -0
- package/src/__tests__/gpu-scene.unit.test.ts +147 -0
- package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
- package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +92 -0
- package/src/__tests__/injection-kind-owner.test-d.ts +14 -0
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +728 -0
- package/src/__tests__/light-buffer-layout.unit.test.ts +40 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +24 -0
- package/src/__tests__/material-cooked-projection.unit.test.ts +150 -0
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +53 -0
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +94 -0
- package/src/__tests__/material-stride-surface.unit.test.ts +32 -0
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +106 -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 +157 -0
- package/src/__tests__/morph-feature-gpu-work.integration.test.ts +80 -0
- package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
- package/src/__tests__/morph-visual-evidence.integration.test.ts +80 -0
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +19 -0
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +201 -0
- package/src/__tests__/prepared-buffer-kind-owner.test-d.ts +29 -0
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +65 -0
- package/src/__tests__/prepared-graphics-generation.unit.test.ts +161 -0
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +138 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +29 -0
- package/src/__tests__/prepared-graphics-resolver.unit.test.ts +285 -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 +62 -0
- package/src/__tests__/profiler-phase-token.test.ts +79 -0
- package/src/__tests__/public-surface.test-d.ts +94 -0
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +107 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +116 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +139 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +110 -0
- package/src/__tests__/render-feature-assembly.test-d.ts +43 -0
- package/src/__tests__/render-feature-context.test-d.ts +57 -0
- package/src/__tests__/render-feature-contract.test-d.ts +49 -0
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +149 -0
- package/src/__tests__/render-feature-docs.unit.test.ts +89 -0
- package/src/__tests__/render-feature-errors.unit.test.ts +47 -0
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +316 -0
- package/src/__tests__/render-feature-plan.test-d.ts +161 -0
- package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +90 -0
- package/src/__tests__/render-feature-prepared-errors.test-d.ts +79 -0
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +80 -0
- package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +72 -0
- package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +36 -0
- package/src/__tests__/render-feature-prepared-graphics.test-d.ts +74 -0
- package/src/__tests__/render-feature-prepared-graphics.unit.test.ts +121 -0
- package/src/__tests__/render-feature-public-surface.test-d.ts +57 -0
- package/src/__tests__/render-feature-retry.unit.test.ts +87 -0
- package/src/__tests__/render-feature-scheduling.unit.test.ts +110 -0
- package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +137 -0
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +146 -0
- package/src/__tests__/render-feature-visibility-context.test-d.ts +33 -0
- package/src/__tests__/render-feature-visibility-context.unit.test.ts +37 -0
- package/src/__tests__/render-feature-zero-work.unit.test.ts +76 -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 +168 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +121 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +58 -0
- package/src/__tests__/rhi-backend-package-boundary.unit.test.ts +11 -0
- package/src/__tests__/scriptable-pack-consumer.test-d.ts +14 -0
- package/src/__tests__/shader-stage-surface.unit.test.ts +43 -0
- package/src/__tests__/ssao-config.unit.test.ts +36 -0
- package/src/__tests__/ssao-kernel-surface.unit.test.ts +14 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
- package/src/__tests__/standard-descriptors.test-d.ts +22 -0
- package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
- package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
- package/src/__tests__/surface-configuration.unit.test.ts +91 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +58 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +223 -0
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +42 -0
- package/src/__tests__/urp-pipeline.unit.test.ts +14 -0
- package/src/__tests__/vertex-color-pipeline.unit.test.ts +132 -0
- package/src/__tests__/vertex-layout-consumer.unit.test.ts +25 -0
- package/src/__tests__/visibility-diagnostics.integration.test.ts +62 -0
- package/src/__tests__/visibility-extract.integration.test.ts +98 -0
- package/src/__tests__/visibility-extract.perf.test.ts +130 -0
- package/src/__tests__/visibility-feature-dedup.integration.test.ts +55 -0
- package/src/__tests__/visibility-hidden-report.unit.test.ts +36 -0
- package/src/__tests__/visibility-instances.integration.test.ts +46 -0
- package/src/__tests__/visibility-multi-world.integration.test.ts +86 -0
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +168 -0
- package/src/__tests__/visibility-producer-matrix.unit.test.ts +96 -0
- package/src/__tests__/visibility-public-surface.test-d.ts +27 -0
- package/src/__tests__/visibility-resolver.unit.test.ts +85 -0
- package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
- package/src/__tests__/visibility-snapshot-contract.unit.test.ts +60 -0
- package/src/__tests__/vocabulary.unit.test.ts +21 -0
- package/src/assembly/backend-contract.ts +57 -0
- package/src/assembly/factory.ts +8130 -0
- package/src/assembly/host-contract.ts +101 -0
- package/src/assembly/material/assembly.ts +48 -0
- package/src/assembly/material/pipeline-projection.ts +63 -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 +17 -0
- package/src/cluster-binner.ts +700 -0
- package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
- package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
- package/src/components/__tests__/schema-contract.unit.test.ts +10 -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/camera.ts +512 -0
- package/src/components/directional-light.ts +120 -0
- package/src/components/glyph-text.ts +64 -0
- package/src/components/index.ts +54 -0
- package/src/components/instances.ts +206 -0
- package/src/components/layer.ts +69 -0
- package/src/components/light-helpers.ts +188 -0
- package/src/components/lines.ts +18 -0
- package/src/components/mesh-filter.ts +60 -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/points.ts +40 -0
- package/src/components/post-process-params.ts +35 -0
- package/src/components/scene-instance.ts +193 -0
- package/src/components/skybox-background.ts +103 -0
- package/src/components/skylight.ts +97 -0
- package/src/components/sort-key.ts +75 -0
- package/src/components/spot-light.ts +124 -0
- package/src/components/sprite-animation.ts +168 -0
- package/src/components/sprite-instances.ts +179 -0
- package/src/components/sprite-playback-mode.ts +79 -0
- package/src/components/sprite-region-override.ts +105 -0
- package/src/components/tile-layer.ts +167 -0
- package/src/components/tilemap.ts +48 -0
- package/src/components/visibility.ts +53 -0
- package/src/construct-renderer.ts +67 -0
- package/src/debug-draw-glue.ts +48 -0
- package/src/device/device-scope.ts +306 -0
- package/src/device/gpu-residency.ts +1822 -0
- package/src/device/resource-types.ts +20 -0
- package/src/engine-metrics.ts +82 -0
- package/src/errors/ecs-validation.ts +16 -0
- package/src/errors/index.ts +3 -0
- package/src/errors/recover.ts +161 -0
- package/src/errors/render.ts +1284 -0
- package/src/extract/visibility.ts +120 -0
- package/src/features/fullscreen.ts +46 -0
- package/src/features/host.ts +1363 -0
- package/src/features/morph/morph-feature.ts +377 -0
- package/src/features/plan.ts +447 -0
- package/src/features/prepared-gpu-work.ts +959 -0
- package/src/features/prepared-graphics-store.ts +449 -0
- package/src/features/prepared-graphics.ts +420 -0
- package/src/features/render-graph-compute.ts +69 -0
- package/src/features/render-graph-contribution.ts +75 -0
- package/src/features/render-graph-raster.ts +332 -0
- package/src/features/render-graph-resources.ts +38 -0
- package/src/features/targets.ts +70 -0
- package/src/features/types.ts +103 -0
- package/src/features/vocabulary.ts +24 -0
- package/src/fullscreen-post-process-pass.ts +363 -0
- package/src/glyph-text-layout-system.ts +421 -0
- package/src/gpu-driven/batch-topology.ts +245 -0
- package/src/gpu-driven/production-raster.ts +695 -0
- package/src/gpu-driven/view-gpu.ts +703 -0
- package/src/gpu-resource.ts +159 -0
- package/src/gpu-scene-schema.ts +136 -0
- package/src/gpu-scene.ts +722 -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 +480 -0
- package/src/ibl/IblPipelineCache.ts +1006 -0
- package/src/ibl/skylight-bind-group.ts +513 -0
- package/src/index.ts +129 -0
- package/src/inspection-types.ts +80 -0
- package/src/instance-buffer-cache.ts +95 -0
- package/src/internal.ts +9 -0
- package/src/lifecycle.ts +168 -0
- package/src/light-buffer-layout.ts +346 -0
- package/src/materials.ts +214 -0
- package/src/mesh-material-bindings.ts +103 -0
- package/src/pbr-pipeline.ts +1137 -0
- package/src/pipeline/standard-forward-lane.ts +229 -0
- package/src/pipeline/standard-pipeline.ts +555 -0
- package/src/pipeline/standard-profile.ts +65 -0
- package/src/pipeline-builder.ts +382 -0
- package/src/pipeline-spec-types.ts +28 -0
- package/src/pipeline-spec.ts +1231 -0
- package/src/plugin.ts +69 -0
- package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
- package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
- package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
- package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
- package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
- package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
- package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
- package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
- package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
- package/src/points-lines/admission.ts +238 -0
- package/src/points-lines/bounds.ts +23 -0
- package/src/points-lines/expansion-cache.ts +215 -0
- package/src/points-lines/inspection.ts +97 -0
- package/src/points-lines/prepare.ts +177 -0
- package/src/points-lines/record.ts +125 -0
- package/src/points-lines/snapshot.ts +130 -0
- package/src/post-process-errors.ts +302 -0
- package/src/prepare/prepared-graphics-resolver.ts +456 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +41 -0
- package/src/record/__tests__/material-slot-plan.unit.test.ts +44 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
- package/src/record/__tests__/video-texture-view.unit.test.ts +90 -0
- package/src/record/frame-lighting.ts +1074 -0
- package/src/record/frame-snapshot.ts +500 -0
- package/src/record/frame-targets.ts +137 -0
- package/src/record/frame.ts +1598 -0
- package/src/record/helpers.ts +284 -0
- package/src/record/main-pass-geometry.ts +1065 -0
- package/src/record/main-pass-material.ts +1043 -0
- package/src/record/main-pass-sprite-draws.ts +1137 -0
- package/src/record/main-pass.ts +610 -0
- package/src/record/mesh-ssbo.ts +885 -0
- package/src/record/render-context.ts +384 -0
- package/src/record/shadow-pass.ts +698 -0
- package/src/record/skybox-post-pass.ts +593 -0
- package/src/record/typed-frame-graph.ts +461 -0
- package/src/record/view-ubo.ts +222 -0
- package/src/render-contract.ts +582 -0
- package/src/render-data.ts +385 -0
- package/src/render-graph-primitives.ts +811 -0
- package/src/render-pipeline.ts +259 -0
- package/src/render-system-extract.ts +4585 -0
- package/src/render-system.ts +1933 -0
- package/src/scene/render-scene-types.ts +67 -0
- package/src/scene/render-scene.ts +1087 -0
- package/src/scene-instances/post-spawn-resolve-joints.ts +165 -0
- package/src/shadow-atlas.ts +244 -0
- package/src/ssao-buffers.ts +334 -0
- package/src/ssao-config.ts +61 -0
- package/src/systems/active-camera.ts +116 -0
- package/src/systems/pass-selector.ts +49 -0
- package/src/systems/skin-palette-allocator.ts +251 -0
- package/src/systems/skin-palette-types.ts +14 -0
- package/src/systems/transparent-sort-config.ts +233 -0
- package/src/tilemap-chunk-extract-system.ts +1290 -0
- package/src/typed-render-graph-primitives.ts +541 -0
- package/src/typed-shadow-passes.ts +165 -0
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
// @forgeax/engine-runtime - RenderSystem record stage: frame-snapshot.
|
|
2
|
+
// Extracted from render-system-record.ts (feat-20260704 M3/w17, pure move).
|
|
3
|
+
|
|
4
|
+
import type { World } from '@forgeax/engine-ecs';
|
|
5
|
+
import { vec3 } from '@forgeax/engine-math';
|
|
6
|
+
import type { ResolvedColorTargetDescriptor } from '@forgeax/engine-render-graph';
|
|
7
|
+
import type { Texture } from '@forgeax/engine-rhi';
|
|
8
|
+
import type { ClusterBinScratch } from '../cluster-binner';
|
|
9
|
+
import type { GpuBuffer } from '../gpu-resource';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* feat-20260708-composited-multi-world-rendering M1 / D-1 / D-9:
|
|
13
|
+
* worldId-entityKey composite key helper. Formula: `worldId * 2^32 + entityKey`.
|
|
14
|
+
*
|
|
15
|
+
* worldId is the index into `worlds[]` (the `draw` call argument). entityKey
|
|
16
|
+
* is the packed Entity u32 (encodeEntity(indexSlot, generation)) surfaced
|
|
17
|
+
* through `RenderableSnapshot.entityKey`.
|
|
18
|
+
*
|
|
19
|
+
* Key properties:
|
|
20
|
+
* - worldId=0 identity: `worldEntityKey(0, k) === k` — single-world path
|
|
21
|
+
* cache behavior is bit-for-bit unchanged (AC-03 regression guarantee).
|
|
22
|
+
* - JS safe integer: worldId < 2^21 keeps the composite key below
|
|
23
|
+
* Number.MAX_SAFE_INTEGER (2^53).
|
|
24
|
+
* - SSOT: all cache-key compositing consumers import this single helper;
|
|
25
|
+
* no inline `worldId * 2^32 + k` duplication (D-9).
|
|
26
|
+
*
|
|
27
|
+
* @internal — exported for unit test + glyph/tilemap/record consumers;
|
|
28
|
+
* not part of the public @forgeax/engine-runtime API surface.
|
|
29
|
+
*/
|
|
30
|
+
export function worldEntityKey(worldId: number, entityKey: number): number {
|
|
31
|
+
return worldId * 4294967296 + entityKey; // 2^32 = 4294967296
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Cross-frame cache entry for a material bind group whose source material and
|
|
36
|
+
* all resolved GPU resources are stable. The material snapshot identity is
|
|
37
|
+
* the extract-layer invalidation token; the builder only stores entries after
|
|
38
|
+
* all explicit resource handles resolved to resident GPU objects.
|
|
39
|
+
*/
|
|
40
|
+
export interface MaterialBgAssemblyCacheEntry {
|
|
41
|
+
readonly material: MaterialSnapshot;
|
|
42
|
+
/** Invalidates when a texture/sampler residency identity changes. */
|
|
43
|
+
readonly materialResourceEpoch: number;
|
|
44
|
+
readonly materialBgl: BindGroupLayout;
|
|
45
|
+
/** Buffer identity changes when the shared material capacity grows. */
|
|
46
|
+
readonly materialBuffer: Buffer;
|
|
47
|
+
readonly skylightResources: SkylightBindGroupResources;
|
|
48
|
+
readonly bindGroup: BindGroup;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
import type { CompiledRenderGraph } from '@forgeax/engine-render-graph';
|
|
52
|
+
import type { BindGroup, BindGroupLayout, Buffer, TextureView } from '@forgeax/engine-rhi';
|
|
53
|
+
import type { MaterialRenderState, RenderPipelineAsset } from '@forgeax/engine-types';
|
|
54
|
+
import type { MeshGpuHandles } from '../device/gpu-residency';
|
|
55
|
+
import type { SkylightBindGroupResources } from '../ibl/skylight-bind-group';
|
|
56
|
+
import type { InstanceBufferCacheEntry } from '../instance-buffer-cache';
|
|
57
|
+
import type { CameraSnapshot } from '../render-contract';
|
|
58
|
+
import type { RenderPipeline as RenderPipelineDef, RenderPipelineFrame } from '../render-pipeline';
|
|
59
|
+
import type {
|
|
60
|
+
DispatchEntry,
|
|
61
|
+
MaterialSnapshot,
|
|
62
|
+
PointShadowSnapshot,
|
|
63
|
+
RenderableSnapshot,
|
|
64
|
+
SpotLightSnapshot,
|
|
65
|
+
} from '../render-system-extract';
|
|
66
|
+
import type { ShadowAtlas } from '../shadow-atlas';
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* feat-20260608-create-app-param-surface-trim / M1 / D-8 (q8 user lock):
|
|
70
|
+
* fallback clear color when the world carries no Camera entity. Opaque
|
|
71
|
+
* black `[0, 0, 0, 1]`, replacing the historical
|
|
72
|
+
* `[0.06, 0.06, 0.08, 1.0]` dark-slate sentinel. Single SSOT consumed by
|
|
73
|
+
* the synthetic CameraSnapshot built when `cameras.length === 0`
|
|
74
|
+
* (Case B in `recordFrame`) and read directly by tests
|
|
75
|
+
* (`zero-camera-clear-fallback.test.ts`). AC-05.
|
|
76
|
+
*/
|
|
77
|
+
export const ZERO_CAMERA_CLEAR_FALLBACK: readonly [number, number, number, number] = [0, 0, 0, 1];
|
|
78
|
+
|
|
79
|
+
export interface FrameObservationSource {
|
|
80
|
+
readonly texture: Texture;
|
|
81
|
+
readonly descriptor: ResolvedColorTargetDescriptor;
|
|
82
|
+
readonly frameId: number;
|
|
83
|
+
readonly pipelineId: 'forgeax::standard';
|
|
84
|
+
readonly backendId: string;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Build a synthetic CameraSnapshot the record stage uses when the world
|
|
89
|
+
* carries no Camera entity. Identity-shaped projection / view inputs
|
|
90
|
+
* keep the existing matrix math numerically stable; clear-color quartet
|
|
91
|
+
* sourced from `ZERO_CAMERA_CLEAR_FALLBACK` so the swap-chain still
|
|
92
|
+
* paints `[0, 0, 0, 1]` (AI-user friendly observable signal that the
|
|
93
|
+
* `'render-system-no-camera'` diagnostic fired without leaving stale
|
|
94
|
+
* pixels on screen).
|
|
95
|
+
*/
|
|
96
|
+
export function makeZeroCameraFallbackSnapshot(): CameraSnapshot {
|
|
97
|
+
// Identity world mat4 so `mat4.invert(world)` yields identity view.
|
|
98
|
+
const identityWorld = new Float32Array(16);
|
|
99
|
+
identityWorld[0] = 1;
|
|
100
|
+
identityWorld[5] = 1;
|
|
101
|
+
identityWorld[10] = 1;
|
|
102
|
+
identityWorld[15] = 1;
|
|
103
|
+
return {
|
|
104
|
+
position: vec3.create(0, 0, 0),
|
|
105
|
+
world: identityWorld,
|
|
106
|
+
fov: Math.PI / 4,
|
|
107
|
+
aspect: 1,
|
|
108
|
+
near: 0.1,
|
|
109
|
+
far: 100,
|
|
110
|
+
// feat-20260613 M6 / w20: synthetic camera defaults to perspective so
|
|
111
|
+
// the CSM extract path stays consistent with the previously-implicit
|
|
112
|
+
// perspective shape (unchanged behavior; explicit field).
|
|
113
|
+
projection: 'perspective',
|
|
114
|
+
orthoLeft: -1,
|
|
115
|
+
orthoRight: 1,
|
|
116
|
+
orthoBottom: -1,
|
|
117
|
+
orthoTop: 1,
|
|
118
|
+
tonemap: 'none',
|
|
119
|
+
exposure: 1.0,
|
|
120
|
+
whitePoint: 4.0,
|
|
121
|
+
antialias: 'none',
|
|
122
|
+
bloom: 'off',
|
|
123
|
+
bloomThreshold: 1.0,
|
|
124
|
+
bloomIntensity: 1.0,
|
|
125
|
+
bloomBlurRadius: 4.0,
|
|
126
|
+
clearColor: ZERO_CAMERA_CLEAR_FALLBACK,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// feat-20260621-merge-directionallightshadow-into-directionallight M3 / m3-t2
|
|
131
|
+
// (D-7): host-clamp the merged DirectionalLight's pcfKernelSize to the nearest
|
|
132
|
+
// valid odd kernel in {1,3,5} before it reaches the View UBO float [128].
|
|
133
|
+
// lighting-directional.wgsl runs a constant-trip-count loop to MAX_PCF_HALF=2
|
|
134
|
+
// (merged 5.3-production-shadow-demos AC-14 variant-free pattern) and clips each
|
|
135
|
+
// iteration to half = (pcfKernelSize-1)/2, so the supported kernel set is
|
|
136
|
+
// {1,3,5} (cap 5). undefined (no shadow fields) defaults to 3.
|
|
137
|
+
export function clampPcfKernelSize(value: number | undefined): number {
|
|
138
|
+
if (value === undefined) return 3;
|
|
139
|
+
if (value <= 1) return 1;
|
|
140
|
+
if (value <= 3) return 3;
|
|
141
|
+
return 5;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Per-RenderSystem mutable frame state.
|
|
146
|
+
*
|
|
147
|
+
* Owned by the `createRenderSystem` closure; advanced once per
|
|
148
|
+
* `recordFrame` invocation. The `instanceBuffers` map holds the per-entity
|
|
149
|
+
* GPU storage buffers for Instances-bearing entities (cache key = the
|
|
150
|
+
* packed Entity u32 surfaced via `InstancesSnapshot.cacheKey`); entries
|
|
151
|
+
* are recreated when the `archVersion` bumps or `byteLength` changes.
|
|
152
|
+
*
|
|
153
|
+
* feat-20260518-pbr-direct-lighting-mvp M3 / w14 (AC-17 a): the
|
|
154
|
+
* `warnedZeroLightStandard` flag latches the first-frame warning that
|
|
155
|
+
* fires when the world contains a StandardMaterial entity but zero
|
|
156
|
+
* DirectionalLight entries — once latched the next 100 frames suppress
|
|
157
|
+
* the warning so the AI user is not flooded with repeated noise (charter
|
|
158
|
+
* P3 silent failure -> explicit warning at most once per RenderSystem
|
|
159
|
+
* lifetime).
|
|
160
|
+
*/
|
|
161
|
+
export interface RenderFrameState {
|
|
162
|
+
frameNumber: number;
|
|
163
|
+
/** Optional graph resource lookup used by low-level record helpers and tests. */
|
|
164
|
+
readonly perFrameGraph?: {
|
|
165
|
+
readonly getColorTargetDescriptor: (key: string) => ResolvedColorTargetDescriptor | undefined;
|
|
166
|
+
readonly getColorTargetView: (key: string) => TextureView | undefined;
|
|
167
|
+
readonly getColorTargetTexture: (key: string) => Texture | undefined;
|
|
168
|
+
} | null;
|
|
169
|
+
/** Last successfully rendered static directional shadow atlas token. */
|
|
170
|
+
directionalShadowCache: DirectionalShadowCache | null;
|
|
171
|
+
/** Set by a directional shadow pass when this frame refreshed the atlas. */
|
|
172
|
+
directionalShadowCacheRecorded: boolean;
|
|
173
|
+
/** The sole compiled owner for compute, copy, feature, and raster work. */
|
|
174
|
+
compiledFrameGraph: CompiledRenderGraph<RenderPipelineFrame> | null;
|
|
175
|
+
compiledFrameGraphTopologyKey: string | null;
|
|
176
|
+
readonly retiredCompiledFrameGraphs: Set<CompiledRenderGraph<RenderPipelineFrame>>;
|
|
177
|
+
/** Physical outputs projected by typed graph passes for downstream observers. */
|
|
178
|
+
currentFrameObservationSource: FrameObservationSource | undefined;
|
|
179
|
+
currentDirectionalShadowView: TextureView | null;
|
|
180
|
+
currentSpotShadowView: TextureView | null;
|
|
181
|
+
readonly instanceBuffers: Map<number, InstanceBufferCacheEntry>;
|
|
182
|
+
/** Per-entity vertex buffers for the Standard CPU morph lane. */
|
|
183
|
+
readonly morphBuffers?: Map<number, MorphBufferCacheEntry>;
|
|
184
|
+
readonly hdrpClusterBinScratch: ClusterBinScratch;
|
|
185
|
+
/** Reusable HDRP cluster output buffers; sized once and grown only if the grid/cap changes. */
|
|
186
|
+
hdrpClusterGridScratch: Uint32Array | null;
|
|
187
|
+
hdrpLightIndexListScratch: Uint32Array | null;
|
|
188
|
+
/** Compute bind group for the optional WebGPU HDRP membership producer. */
|
|
189
|
+
hdrpClusterMembershipBindGroup: BindGroup | null;
|
|
190
|
+
transientInstanceBuffers: InstanceBufferCacheEntry[];
|
|
191
|
+
warnedZeroLightStandard: boolean;
|
|
192
|
+
/**
|
|
193
|
+
* feax-20260608-multi-light-warn-once M3: once-warn latch for multi-light
|
|
194
|
+
* overrun per bucket (directional N>1 / point N>4 / spot N>4). Fires at
|
|
195
|
+
* most once per RenderSystem lifetime per bucket so AI users see a single
|
|
196
|
+
* actionable console.warn without per-frame flooding (charter P3 explicit
|
|
197
|
+
* failure: warn-once preserves signal/noise floor).
|
|
198
|
+
*/
|
|
199
|
+
warnedMultiLightDirectional: boolean;
|
|
200
|
+
warnedMultiLightPoint: boolean;
|
|
201
|
+
warnedMultiLightSpot: boolean;
|
|
202
|
+
/**
|
|
203
|
+
* feat-20260630-equirect-kind-internalized-ibl-declarative-skyligh M3 / w19:
|
|
204
|
+
* once-warn latches for >1 Skylight / >1 SkyboxBackground entity. Fire at most
|
|
205
|
+
* once per RenderSystem lifetime so the multi-entity warn (which names the
|
|
206
|
+
* winning entity handle, F-8) does not flood the console every frame.
|
|
207
|
+
*/
|
|
208
|
+
warnedMultiSkylight: boolean;
|
|
209
|
+
warnedMultiSkybox: boolean;
|
|
210
|
+
/** feat-20260531-skybox-env-background M3 / w20: once-warn when camera
|
|
211
|
+
* tonemap is 'none' but a SkyboxBackground entity exists. Skybox needs
|
|
212
|
+
* the HDR render target allocated by the tonemap path; without it the
|
|
213
|
+
* skybox pass is skipped (plan-strategy D-2 NOTE). */
|
|
214
|
+
warnedSkyboxTonemapNone: boolean;
|
|
215
|
+
/**
|
|
216
|
+
* Per-handle warn-once anchor for the missing baseColor-texture fallback,
|
|
217
|
+
* shared by every textured material path (sprite / sprite-lit / standard-pbr
|
|
218
|
+
* / pbr-skin / unlit — feat-20260520-2d-sprite-layer-mvp M-3 / w25 seeded it
|
|
219
|
+
* for sprites; feat-future-pbr-missing-texture-fallback-explicit generalised
|
|
220
|
+
* it to PBR/skin so GLB textures that fail to reach the GPU no longer render
|
|
221
|
+
* silently flat). A `Set<number>` keyed by the raw Handle<TextureAsset> id -
|
|
222
|
+
* the writer fires `console.warn` exactly once per missing texture handle per
|
|
223
|
+
* RenderSystem lifetime so AI users see a single actionable message without
|
|
224
|
+
* per-frame log flooding. The set lives across frames so the second frame on
|
|
225
|
+
* the same missing handle stays silent (charter P3 explicit failure:
|
|
226
|
+
* warn-once preserves signal / noise floor while structured RhiError below
|
|
227
|
+
* stays per-frame fire).
|
|
228
|
+
*
|
|
229
|
+
* Note on the WeakSet/Set choice: plan-strategy mentions WeakSet but
|
|
230
|
+
* Handle values are numeric brand u32s (not object references), so
|
|
231
|
+
* WeakSet<object> is not applicable; Set<number> gives identical
|
|
232
|
+
* warn-once-per-handle semantics at zero additional cost (charter F1
|
|
233
|
+
* minimal surface; the per-RenderSystem lifetime cap is the upper
|
|
234
|
+
* bound).
|
|
235
|
+
*/
|
|
236
|
+
readonly warnedMissingBaseColorTextureHandles: Set<number>;
|
|
237
|
+
/**
|
|
238
|
+
* feat-20260527-sprite-nineslice M2 / w11 + M4 / w16 (AC-16): once-per-
|
|
239
|
+
* renderable guard for the `nineslice.scale-too-small` metric increment.
|
|
240
|
+
* Keyed by `renderableIndex` so the second frame on the same mis-scaled
|
|
241
|
+
* entity does NOT keep bumping the counter — AI users see one counter
|
|
242
|
+
* tick per offending entity per RenderSystem lifetime, matching the
|
|
243
|
+
* single-event semantics of the structured fail-fast (charter P3:
|
|
244
|
+
* machine-readable signal, not a per-frame inflation). M4 retired the
|
|
245
|
+
* placeholder console.warn; the increment lands on the per-Renderer
|
|
246
|
+
* EngineMetrics through `runtime.metrics.increment(...)`.
|
|
247
|
+
*/
|
|
248
|
+
readonly warnedNineSliceScaleEntities: Set<number>;
|
|
249
|
+
/**
|
|
250
|
+
* feat-20260630-equirect-kind-internalized-ibl-declarative-skyligh M3 / w18:
|
|
251
|
+
* per-handle fire-once anchor for the lazy equirect-to-cubemap projection
|
|
252
|
+
* failure. A `Set<number>` keyed by the raw Handle<EquirectAsset> id - the
|
|
253
|
+
* record arm fires the structured `EquirectProjectionFailedError` exactly
|
|
254
|
+
* once per failed source per RenderSystem lifetime (the store records
|
|
255
|
+
* `status:'failed'` permanently and never retries, R-2 / AC-09; without this
|
|
256
|
+
* latch the record arm would re-fire the error every frame). The set lives
|
|
257
|
+
* across frames so the second frame on the same failed handle stays silent
|
|
258
|
+
* (charter P3: warn-once preserves signal / noise floor).
|
|
259
|
+
*/
|
|
260
|
+
readonly firedEquirectProjectionFailedHandles: Set<number>;
|
|
261
|
+
/**
|
|
262
|
+
* feat-20260622-handle-to-id-allocator-elimination M1 / w3: per-frame
|
|
263
|
+
* bind group caches converted to nested WeakMap chain roots (D-3).
|
|
264
|
+
* Each root is a WeakMap<object, WeakMap<...>> walked by
|
|
265
|
+
* getOrCreateFromChain; the chain depth varies by variant
|
|
266
|
+
* (view-main = 7, mesh = 1, hdrp-unified = 5, skin = 2).
|
|
267
|
+
* Roots are stable between device recoveries and replaced when the renderer
|
|
268
|
+
* swaps to a fresh device. Chain keys are always inner buffer handles, never
|
|
269
|
+
* wrappers (D-3).
|
|
270
|
+
*/
|
|
271
|
+
viewBindGroupCache: WeakMap<object, unknown>;
|
|
272
|
+
meshBindGroupCache: WeakMap<object, unknown>;
|
|
273
|
+
/**
|
|
274
|
+
* feat-20260622-handle-to-id-allocator-elimination M1 / w2: per-entity
|
|
275
|
+
* bind group caches scoped by entityKey (packed u32 as number).
|
|
276
|
+
* Outer Map<number, WeakMap<handle, ...>> lets GC collect entries for
|
|
277
|
+
* destroyed entities whose handles are unreachable; per-entity material
|
|
278
|
+
* and instances share the same two-level shape (D-1). The inner WeakMap
|
|
279
|
+
* value is opaque (`unknown`) because `getOrCreateFromChain` walks a
|
|
280
|
+
* variable-depth chain — intermediate handles map to nested WeakMaps and
|
|
281
|
+
* only the final handle maps to the variant->BindGroup leaf Map. Direct
|
|
282
|
+
* readers (HDRP shadow-instances read end) assert the leaf shape locally.
|
|
283
|
+
*/
|
|
284
|
+
/**
|
|
285
|
+
* feat-20260708-composited-multi-world-rendering M1 / D-1a #2: outer Map
|
|
286
|
+
* keyed by `worldEntityKey(worldId, entityKey)`. Inner WeakMap unchanged.
|
|
287
|
+
*/
|
|
288
|
+
readonly materialBgPerEntity: Map<number, WeakMap<object, unknown>>;
|
|
289
|
+
/**
|
|
290
|
+
* feat-20260708-composited-multi-world-rendering M1 / D-1a #3: outer Map
|
|
291
|
+
* keyed by `worldEntityKey(worldId, entityKey)`. Inner WeakMap unchanged.
|
|
292
|
+
*/
|
|
293
|
+
readonly instancesBgPerEntity: Map<number, WeakMap<object, unknown>>;
|
|
294
|
+
/** Identity-keyed instances BGs shared across entities using the same buffer. */
|
|
295
|
+
readonly instancesBgShared: WeakMap<object, unknown>;
|
|
296
|
+
/**
|
|
297
|
+
* feat-20260622-handle-to-id-allocator-elimination M1 / w2: cross-entity
|
|
298
|
+
* shared material bind group cache (OQ-1 option A). Outer key is the
|
|
299
|
+
* material shaderId string; inner chain is a WeakMap keyed by the same
|
|
300
|
+
* handle objects used in per-entity chains. Reuses the generic
|
|
301
|
+
* `getOrCreatePerEntity` helper with outerKey string|number (D-1).
|
|
302
|
+
*/
|
|
303
|
+
readonly materialBgShared: Map<string, WeakMap<object, unknown>>;
|
|
304
|
+
/** Cross-frame fast path for fully-resident, immutable material snapshots. */
|
|
305
|
+
readonly materialBgAssemblyCache: Map<string, MaterialBgAssemblyCacheEntry>;
|
|
306
|
+
/**
|
|
307
|
+
* feat-20260622-handle-to-id-allocator-elimination M1 / w2: singleton
|
|
308
|
+
* material bind group cache (D-6). Single flat Map<variant, BindGroup>
|
|
309
|
+
* for the one true singleton in production: shadow-material-singleton.
|
|
310
|
+
* shadow-instances-singleton is a test fixture fiction (research F3);
|
|
311
|
+
* no second singleton field is needed.
|
|
312
|
+
*/
|
|
313
|
+
readonly singletonMaterialCache: Map<string, BindGroup>;
|
|
314
|
+
/**
|
|
315
|
+
* Post-process bind group cache: nested WeakMap chain root shared by the
|
|
316
|
+
* built-in bloom (bright / blur-H / blur-V / composite), FXAA, and HDRP SSAO
|
|
317
|
+
* (calc / blur) fullscreen passes. Each of these passes samples graph-owned
|
|
318
|
+
* transient render targets (hdrColor / ldrColor / bloom* / ssaoRaw /
|
|
319
|
+
* gbuf0 / hdrDepth); on canvas resize the graph retires the old physical
|
|
320
|
+
* textures and allocates new ones, so the bind group must be rebuilt to
|
|
321
|
+
* reference the new TextureView identity. Keying the cache on the physical
|
|
322
|
+
* TextureView (or `::tex` texture handle for passes that recreate their bound
|
|
323
|
+
* view every frame) makes invalidation automatic: a resized target yields a
|
|
324
|
+
* new key object -> WeakMap miss -> factory rebuild, and dead views are GC'd
|
|
325
|
+
* (same identity-invalidation mechanism as view/mesh caches, D-3). Replaces
|
|
326
|
+
* the pre-fix `pp.*BindGroup === null` single-slot caches that never
|
|
327
|
+
* invalidated on resize and submitted destroyed textures.
|
|
328
|
+
*/
|
|
329
|
+
postProcessBgCache: WeakMap<object, unknown>;
|
|
330
|
+
/**
|
|
331
|
+
* Raw handle of the currently installed RenderPipelineAsset (0 = builtin).
|
|
332
|
+
* Installation brands the next candidate topology; the prior compiled graph
|
|
333
|
+
* remains last-known-good until the candidate compiles successfully.
|
|
334
|
+
*/
|
|
335
|
+
installedPipelineHandle: number;
|
|
336
|
+
/**
|
|
337
|
+
* Active topology declaration resolved from the pipeline registry.
|
|
338
|
+
*/
|
|
339
|
+
activePipeline: RenderPipelineDef;
|
|
340
|
+
/**
|
|
341
|
+
* Install-time config projected into `RenderPipelineTopology.config`.
|
|
342
|
+
*/
|
|
343
|
+
installedPipelineConfig: RenderPipelineAsset['config'];
|
|
344
|
+
/**
|
|
345
|
+
* feat-20260608-cluster-lighting M2 / w10: HDRP active flag.
|
|
346
|
+
* True iff the currently installed RenderPipelineAsset has
|
|
347
|
+
* `pipelineId === 'forgeax::hdrp'`. URP-only code paths gate on
|
|
348
|
+
* `!isHdrpActive` so HDRP demos do not double-count light contributions.
|
|
349
|
+
*/
|
|
350
|
+
isHdrpActive: boolean;
|
|
351
|
+
/**
|
|
352
|
+
* feat-20260608-cluster-lighting M5 / w20 + M6 / w23 + M5 / w22:
|
|
353
|
+
* once-per-frame fire dedup set for HDRP per-frame fail-soft errors
|
|
354
|
+
* (`hdrp-light-budget-exceeded`, `hdrp-index-list-overflow`). Cleared
|
|
355
|
+
* at the end of each frame so the next frame re-fires if the condition
|
|
356
|
+
* persists. Set<string> keyed by RuntimeErrorCode literal.
|
|
357
|
+
*/
|
|
358
|
+
hdrpOncePerFrameFired: Set<string>;
|
|
359
|
+
/**
|
|
360
|
+
* feat-20260612-point-light-shadows-urp-hdrp M3 / T-M3-2 (plan-strategy §D-1).
|
|
361
|
+
* Lazily-allocated cube_array shadow atlas owned by the RenderSystem
|
|
362
|
+
* lifetime. `null` until the first frame whose `lights.pointShadow` is
|
|
363
|
+
* non-empty (zero-shadow scenes never allocate; AC-09). The atlas is
|
|
364
|
+
* disposed by the renderer dispose path; subsequent frames with a non-empty
|
|
365
|
+
* snapshot list re-allocate.
|
|
366
|
+
*/
|
|
367
|
+
pointShadowAtlas: ShadowAtlas | null;
|
|
368
|
+
/**
|
|
369
|
+
* feat-20260612-point-light-shadows-urp-hdrp M3 / T-M3-2 (plan-strategy §D-3):
|
|
370
|
+
* per-frame projection of `lights.pointShadow` from the extract stage. The
|
|
371
|
+
* typed point-shadow pass reads this list to drive the 6 x N face iteration.
|
|
372
|
+
* Empty array means the topology declares no point-shadow passes.
|
|
373
|
+
*/
|
|
374
|
+
pointShadowSnapshots: readonly PointShadowSnapshot[];
|
|
375
|
+
/**
|
|
376
|
+
* feat-20260622-chunk-gpu-instancing-sprite-tilemap M1 / w4 (D-1):
|
|
377
|
+
* last fold-pass output, computed at `recordFrame` entry from the
|
|
378
|
+
* transparent-sort-ordered dispatch + mode-gate (D-5: only mode 0
|
|
379
|
+
* folds; other modes yield singleton buckets). Currently an
|
|
380
|
+
* observational compute — the drawIndexed swap (1 instanced draw per
|
|
381
|
+
* fold bucket) is the follow-on integration that wires each bucket
|
|
382
|
+
* into the sprite-pass / geometry-pass dispatch loops. The bucket
|
|
383
|
+
* count is the source of truth for `render.instancing.foldedDraws`
|
|
384
|
+
* metric (M3 / w13) — every fold-eligible bucket (bucketSize >= 1
|
|
385
|
+
* under mode 0 AND not bypassed) contributes one increment.
|
|
386
|
+
*/
|
|
387
|
+
lastFoldBucketCount: number;
|
|
388
|
+
/**
|
|
389
|
+
* feat-20260625-spot-light-shadow-mapping M2 / w9 (D-2): per-frame projection
|
|
390
|
+
* of `lights.spot` from the extract stage. The typed spot-shadow graph
|
|
391
|
+
* pass reads this list to render each
|
|
392
|
+
* castShadow spot's perspective depth into its `spotShadowDepth` atlas tile
|
|
393
|
+
* (viewport keyed on `shadowAtlasTile`). `recordFrame` writes it before
|
|
394
|
+
* graph execution. Spots with `shadowAtlasTile < 0` (castShadow:false,
|
|
395
|
+
* degenerate direction, or clipped beyond cap 4) are skipped — zero
|
|
396
|
+
* shadow-casting spots means zero spot shadow passes (AC-03).
|
|
397
|
+
*/
|
|
398
|
+
spotShadowSnapshots: readonly SpotLightSnapshot[];
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export interface MorphBufferCacheEntry {
|
|
402
|
+
readonly buffer: GpuBuffer;
|
|
403
|
+
readonly byteLength: number;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* feat-20260518-pbr-direct-lighting-mvp M5 / w22.11 (D-2 + D-10 + AC-06):
|
|
408
|
+
* mutable per-frame dispatch counter object owned by `createRenderSystem`
|
|
409
|
+
* and bumped here at the actual `pass.setPipeline(...)` call site (the
|
|
410
|
+
* only point with both `mat.materialShaderId` and `mesh.layoutProjection` in scope).
|
|
411
|
+
* Unlit / custom shader pipeline dispatch tracked here.
|
|
412
|
+
*/
|
|
413
|
+
export interface DispatchCounts {
|
|
414
|
+
unlit: number;
|
|
415
|
+
/** feat-20260523 M4-T07: 'standard' counter removed; schema-driven
|
|
416
|
+
* materials are tracked via materialShaderId in the pipeline cache. */
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* feat-20260531-per-frame-bind-group-cache M1 / w4: per-frame
|
|
421
|
+
* createBindGroup counter. Closure-mutable object aligned with
|
|
422
|
+
* DispatchCounts precedent. Reset in draw(world) entry, bumped on
|
|
423
|
+
* cache-miss createBindGroup calls (M2-M4).
|
|
424
|
+
*/
|
|
425
|
+
export interface BindGroupCounts {
|
|
426
|
+
createBindGroup: number;
|
|
427
|
+
/**
|
|
428
|
+
* Debug-only: records the variant of every cache-miss BindGroup created via
|
|
429
|
+
* `getOrCreateFromChain` for unit-test observability. Production paths do
|
|
430
|
+
* not read this array.
|
|
431
|
+
*/
|
|
432
|
+
keys: string[];
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* A renderable resolved against the AssetRegistry for the current frame:
|
|
437
|
+
* its source snapshot, the GPU mesh handles, the row index used to correlate
|
|
438
|
+
* transparent-sort output back to this entry, and an optional per-material
|
|
439
|
+
* renderState override (bug-20260527-renderstate-pipeline-dispatch-gap D-4).
|
|
440
|
+
* Module-scoped so RenderPipelineContext can type `validated` / `validatedOrdered`
|
|
441
|
+
* without a dynamic type escape (was a recordFrame-local interface before F-4).
|
|
442
|
+
*/
|
|
443
|
+
export interface ValidatedRenderable {
|
|
444
|
+
readonly source: RenderableSnapshot;
|
|
445
|
+
/** World that owns the renderable's asset handles and material snapshots. */
|
|
446
|
+
readonly world?: World;
|
|
447
|
+
readonly mesh: MeshGpuHandles;
|
|
448
|
+
readonly renderableIndex: number;
|
|
449
|
+
readonly renderState: MaterialRenderState | undefined;
|
|
450
|
+
/**
|
|
451
|
+
* Canonical authored material-variant request folded from the selected
|
|
452
|
+
* pass's `defines` map. Capability axes are merged at the renderer seam;
|
|
453
|
+
* this field carries only the pass-owned selection into record.
|
|
454
|
+
*/
|
|
455
|
+
readonly variantSet?: string | undefined;
|
|
456
|
+
/**
|
|
457
|
+
* w10: per-pass stencil reference value folded from
|
|
458
|
+
* {@link DispatchEntry.stencilReference} (draw-call dynamic state). The draw
|
|
459
|
+
* loop calls `pass.setStencilReference(stencilReference ?? 0)` before each
|
|
460
|
+
* draw; `undefined` falls back to the WebGPU default 0 (semantic no-op).
|
|
461
|
+
*/
|
|
462
|
+
readonly stencilReference: number | undefined;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Cross-frame validity token for the directional shadow atlas.
|
|
467
|
+
*
|
|
468
|
+
* The atlas is a render target, not authored state. Keeping its validity
|
|
469
|
+
* token beside the other RenderFrameState caches lets recordFrame skip a
|
|
470
|
+
* static caster submission without teaching the public render-pipeline
|
|
471
|
+
* contract about caching. Every source that can change caster depth is part
|
|
472
|
+
* of the token: world mutation, asset catalogue, graph/target identity, CSM
|
|
473
|
+
* matrices, and the GPU mesh-residency epoch.
|
|
474
|
+
*
|
|
475
|
+
* @internal
|
|
476
|
+
*/
|
|
477
|
+
export interface DirectionalShadowCache {
|
|
478
|
+
readonly worlds: readonly World[];
|
|
479
|
+
readonly worldStateTokens: readonly DirectionalShadowWorldState[];
|
|
480
|
+
readonly assetCatalogEpoch: number;
|
|
481
|
+
readonly pipelineHandle: number;
|
|
482
|
+
readonly graphTopologyKey: string | null;
|
|
483
|
+
readonly shadowMapSize: number;
|
|
484
|
+
readonly cascadeCount: number;
|
|
485
|
+
readonly lightViewProj: readonly Float32Array[];
|
|
486
|
+
readonly meshResidencyEpoch: number;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* ECS state that can change the contents of a directional shadow map.
|
|
491
|
+
*
|
|
492
|
+
* The ECS-owned RenderReadLease is the only render-facing mutation boundary.
|
|
493
|
+
* Its cursor is intentionally conservative: any published World change
|
|
494
|
+
* invalidates the cached atlas, while render never reaches through World for
|
|
495
|
+
* component-clock storage.
|
|
496
|
+
*/
|
|
497
|
+
export interface DirectionalShadowWorldState {
|
|
498
|
+
readonly worldIdentity: string;
|
|
499
|
+
readonly changeCursor: number;
|
|
500
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { RhiCanvasContext, Texture, TextureView } from '@forgeax/engine-rhi';
|
|
2
|
+
import type { RenderGraphExecutionPhase } from '../render-contract';
|
|
3
|
+
import type { ExtractedLights } from '../render-system-extract';
|
|
4
|
+
import { configureSurface, type PipelineState, type RenderSystemInternals } from './render-context';
|
|
5
|
+
|
|
6
|
+
export function graphExecutionPhase(passName: string): RenderGraphExecutionPhase {
|
|
7
|
+
if (passName.startsWith('shadowCascade')) return 'record/graph-execute/shadow';
|
|
8
|
+
if (passName.startsWith('point-shadow')) return 'record/graph-execute/point-shadow';
|
|
9
|
+
if (passName.startsWith('spot-shadow')) return 'record/graph-execute/spot-shadow';
|
|
10
|
+
switch (passName) {
|
|
11
|
+
case 'cluster-binner-upload':
|
|
12
|
+
case 'cluster-membership-producer':
|
|
13
|
+
return 'record/graph-execute/cluster-binner-upload';
|
|
14
|
+
case 'g-buffer':
|
|
15
|
+
return 'record/graph-execute/g-buffer';
|
|
16
|
+
case 'ssao-calc':
|
|
17
|
+
return 'record/graph-execute/ssao-calc';
|
|
18
|
+
case 'ssao-blur':
|
|
19
|
+
return 'record/graph-execute/ssao-blur';
|
|
20
|
+
case 'lighting':
|
|
21
|
+
return 'record/graph-execute/lighting';
|
|
22
|
+
case 'forward':
|
|
23
|
+
return 'record/graph-execute/forward';
|
|
24
|
+
case 'tonemap':
|
|
25
|
+
return 'record/graph-execute/tonemap';
|
|
26
|
+
case 'debug-overlay':
|
|
27
|
+
return 'record/graph-execute/debug-overlay';
|
|
28
|
+
case 'shadow':
|
|
29
|
+
return 'record/graph-execute/shadow';
|
|
30
|
+
case 'skybox':
|
|
31
|
+
return 'record/graph-execute/skybox';
|
|
32
|
+
case 'main':
|
|
33
|
+
return 'record/graph-execute/main';
|
|
34
|
+
case 'fxaa':
|
|
35
|
+
return 'record/graph-execute/fxaa';
|
|
36
|
+
case 'bloom-bright':
|
|
37
|
+
return 'record/graph-execute/bloom-bright';
|
|
38
|
+
case 'bloom-blur-h':
|
|
39
|
+
return 'record/graph-execute/bloom-blur-h';
|
|
40
|
+
case 'bloom-blur-v':
|
|
41
|
+
return 'record/graph-execute/bloom-blur-v';
|
|
42
|
+
case 'bloom-composite':
|
|
43
|
+
return 'record/graph-execute/bloom-composite';
|
|
44
|
+
default:
|
|
45
|
+
return 'record/graph-execute/other';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function acquireSwapChainTarget(
|
|
50
|
+
internals: RenderSystemInternals,
|
|
51
|
+
pipelineState: PipelineState,
|
|
52
|
+
): { currentTexture: Texture; view: TextureView; targetW: number; targetH: number } | null {
|
|
53
|
+
const canvasContext: RhiCanvasContext | null = internals.context;
|
|
54
|
+
if (canvasContext === null) return null;
|
|
55
|
+
|
|
56
|
+
let currentTextureResult = canvasContext.getCurrentTexture();
|
|
57
|
+
if (!currentTextureResult.ok) {
|
|
58
|
+
pipelineState.perPassResources.configured = false;
|
|
59
|
+
const configured = configureSurface(
|
|
60
|
+
canvasContext,
|
|
61
|
+
internals.device,
|
|
62
|
+
pipelineState.format,
|
|
63
|
+
pipelineState.colorAttachmentFormat,
|
|
64
|
+
);
|
|
65
|
+
if (configured.ok) {
|
|
66
|
+
pipelineState.perPassResources.configured = true;
|
|
67
|
+
(globalThis as Record<string, unknown>).__forgeaxSwapChainFormat = pipelineState.format;
|
|
68
|
+
}
|
|
69
|
+
const retry = canvasContext.getCurrentTexture();
|
|
70
|
+
if (!retry.ok) {
|
|
71
|
+
internals.errorRegistry.fire(retry.error);
|
|
72
|
+
internals.healthRegistry.fire({
|
|
73
|
+
reason: 'internal-fault',
|
|
74
|
+
detail: {
|
|
75
|
+
message:
|
|
76
|
+
'surface-configure-failed after retry: getCurrentTexture failed twice consecutively',
|
|
77
|
+
},
|
|
78
|
+
recoverable: false,
|
|
79
|
+
});
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
currentTextureResult = retry;
|
|
83
|
+
}
|
|
84
|
+
const viewDescriptor =
|
|
85
|
+
pipelineState.colorAttachmentFormat === pipelineState.format
|
|
86
|
+
? {}
|
|
87
|
+
: { format: pipelineState.colorAttachmentFormat as GPUTextureFormat };
|
|
88
|
+
const viewResult = internals.device.createTextureView(currentTextureResult.value, viewDescriptor);
|
|
89
|
+
if (!viewResult.ok) {
|
|
90
|
+
internals.errorRegistry.fire(viewResult.error);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
currentTexture: currentTextureResult.value,
|
|
95
|
+
view: viewResult.value,
|
|
96
|
+
targetW: internals.canvas.width | 0,
|
|
97
|
+
targetH: internals.canvas.height | 0,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function resolveShadowMapSize(
|
|
102
|
+
internals: RenderSystemInternals,
|
|
103
|
+
lights: ExtractedLights,
|
|
104
|
+
): number | undefined {
|
|
105
|
+
const requested = lights.shadowMapSize;
|
|
106
|
+
if (!(requested !== undefined && requested > 0)) return requested;
|
|
107
|
+
const cascades = Math.max(1, Math.min(4, Math.round(lights.cascadeCount ?? 1)));
|
|
108
|
+
const tilesPerSide = Math.ceil(Math.sqrt(cascades));
|
|
109
|
+
const maxDimension = internals.device.limits.maxTextureDimension2D;
|
|
110
|
+
if (!(maxDimension > 0)) return Math.floor(requested);
|
|
111
|
+
const depthTextureDimension =
|
|
112
|
+
internals.device.caps?.backendKind === 'wgpu-webgl2'
|
|
113
|
+
? Math.max(1, Math.floor(maxDimension / 2))
|
|
114
|
+
: maxDimension;
|
|
115
|
+
const maxPerTile = Math.max(1, Math.floor(depthTextureDimension / tilesPerSide));
|
|
116
|
+
return Math.max(1, Math.min(Math.floor(requested), maxPerTile));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Resolve the per-tile size for the graph-owned spot atlas when a frame has
|
|
121
|
+
* no directional shadow map. The typed spot pass still needs a non-zero
|
|
122
|
+
* viewport in a spot-only world; the directional resolver cannot provide
|
|
123
|
+
* that because it intentionally follows only the directional shadow lane.
|
|
124
|
+
*/
|
|
125
|
+
export function resolveSpotShadowMapSize(
|
|
126
|
+
internals: RenderSystemInternals,
|
|
127
|
+
lights: ExtractedLights,
|
|
128
|
+
): number | undefined {
|
|
129
|
+
const requested = lights.spot.find(
|
|
130
|
+
(spot) => spot.shadowAtlasTile >= 0 && spot.lightViewProj !== undefined,
|
|
131
|
+
)?.mapSize;
|
|
132
|
+
if (!(requested !== undefined && requested > 0)) return requested;
|
|
133
|
+
const maxDimension = internals.device.limits.maxTextureDimension2D;
|
|
134
|
+
if (!(maxDimension > 0)) return Math.floor(requested);
|
|
135
|
+
const maxPerTile = Math.max(1, Math.floor(maxDimension / 2));
|
|
136
|
+
return Math.max(1, Math.min(Math.floor(requested), maxPerTile));
|
|
137
|
+
}
|