@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,716 @@
|
|
|
1
|
+
// @forgeax/engine-runtime - RenderSystem record stage: main-pass-material.
|
|
2
|
+
// Extracted from render-system-record.ts (feat-20260704 M3/w17, pure move).
|
|
3
|
+
|
|
4
|
+
import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
5
|
+
import {
|
|
6
|
+
VIDEO_ELEMENT_PROVIDER_KEY,
|
|
7
|
+
type VideoElementProvider,
|
|
8
|
+
} from '@forgeax/engine-graphics-extras';
|
|
9
|
+
import {
|
|
10
|
+
type BindGroup,
|
|
11
|
+
type BindGroupEntry,
|
|
12
|
+
type BindGroupLayout,
|
|
13
|
+
type Buffer,
|
|
14
|
+
err,
|
|
15
|
+
ok,
|
|
16
|
+
type RenderPipeline,
|
|
17
|
+
type Result,
|
|
18
|
+
RhiError,
|
|
19
|
+
type Sampler,
|
|
20
|
+
} from '@forgeax/engine-rhi';
|
|
21
|
+
import { DEFAULT_STANDARD_PBR_PARAM_SCHEMA } from '@forgeax/engine-shader';
|
|
22
|
+
import type {
|
|
23
|
+
DerivedMaterialInterface,
|
|
24
|
+
Handle,
|
|
25
|
+
ImageError,
|
|
26
|
+
MaterialRenderState,
|
|
27
|
+
PassKind,
|
|
28
|
+
PrimitiveTopology,
|
|
29
|
+
SamplerAsset,
|
|
30
|
+
TextureAsset,
|
|
31
|
+
} from '@forgeax/engine-types';
|
|
32
|
+
import { derive, handleSlot } from '@forgeax/engine-types';
|
|
33
|
+
import { resolveRenderAsset } from '../assets/resolve-render-asset';
|
|
34
|
+
import type { DynamicTextureStore } from '../dynamic-texture-store';
|
|
35
|
+
import { VideoUploadUnsupportedError } from '../errors/render';
|
|
36
|
+
import type { GpuResourceStore } from '../gpu-resource-store';
|
|
37
|
+
import {
|
|
38
|
+
assembleMaterialWithSkylightEntries,
|
|
39
|
+
type SkylightBindGroupResources,
|
|
40
|
+
} from '../ibl/skylight-bind-group';
|
|
41
|
+
import type { PipelineState, RenderSystemRuntime } from '../render-system';
|
|
42
|
+
import type { MaterialSnapshot } from '../render-system-extract';
|
|
43
|
+
import type { MaterialRenderProjection } from '../renderer/material/assembly.js';
|
|
44
|
+
import {
|
|
45
|
+
type MaterialDrawRoute,
|
|
46
|
+
type MaterialPipelineMiss,
|
|
47
|
+
type MaterialPipelineReady,
|
|
48
|
+
type MaterialReadiness,
|
|
49
|
+
type MaterialRenderReady,
|
|
50
|
+
routeMaterialDraw,
|
|
51
|
+
routeMaterialPipeline,
|
|
52
|
+
} from '../renderer/material/pipeline-projection.js';
|
|
53
|
+
import type { BindGroupCounts, MaterialBgAssemblyCacheEntry } from './frame-snapshot';
|
|
54
|
+
import { derivedParamSchema } from './material-payload';
|
|
55
|
+
|
|
56
|
+
const DEFAULT_STANDARD_PBR_DERIVED_INTERFACE = derive(DEFAULT_STANDARD_PBR_PARAM_SCHEMA);
|
|
57
|
+
|
|
58
|
+
export {
|
|
59
|
+
applyParamSnapshotToUbo,
|
|
60
|
+
writeMaterialSnapshotPayload,
|
|
61
|
+
} from './material-payload';
|
|
62
|
+
|
|
63
|
+
import { extractEntryResourceHandle, getOrCreatePerEntity } from './mesh-ssbo';
|
|
64
|
+
|
|
65
|
+
// feat-20260601-customizable-render-pipeline-seam M2 / w12: the former
|
|
66
|
+
// `RecordPassContext` (26-field full surface, including the `internals` kitchen-sink and
|
|
67
|
+
// the 0-consumed `skyboxCount` residual) is DELETED. The per-frame shared state injected
|
|
68
|
+
// into the render-graph pass execute closures is now the clean `RenderPipelineContext`
|
|
69
|
+
// (defined in `render-pipeline-context.ts`): `internals` is gone (replaced by the named
|
|
70
|
+
// `assets` / `store` / `pipelineState` / `runtime` surfaces) so a pipeline author cannot
|
|
71
|
+
// reach the runtime kitchen-sink through the public ctx (AC-08). The graph is
|
|
72
|
+
// `RenderGraph<RenderPipelineContext>` so `execute(ctx)` forwards the object to each
|
|
73
|
+
// closure with no `as` assertion.
|
|
74
|
+
//
|
|
75
|
+
// Encoder ownership (RD-4): `ctx.encoder` is the SHARED frame encoder used by the main /
|
|
76
|
+
// tonemap / FXAA passes (finished + submitted once at frame end); the shadow pass opens
|
|
77
|
+
// its OWN encoder internally + submits independently (the runtime-side manual barrier for
|
|
78
|
+
// the depth write -> sample hazard).
|
|
79
|
+
|
|
80
|
+
// M1 / w7: ensureLazyTexture DELETED — GPU texture ownership moved to render-graph
|
|
81
|
+
// via addColorTarget + compile(device). The graph allocates transient/persistent
|
|
82
|
+
// render targets during the compile allocation phase; pass execute closures resolve
|
|
83
|
+
// TextureViews through resolve(name). PerPassResources texture slots still hold
|
|
84
|
+
// the last-used views for bindgroup-invalidation self-checks (D-3 physical texture
|
|
85
|
+
// identity), but the graph owns the create/destroy lifecycle.
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* feat-20260604-learn-render-4.10-anti-aliasing-msaa M2 / w9: pick the static
|
|
89
|
+
* unlit geometry pipeline handle for a (tonemapActive x msaaActive)
|
|
90
|
+
* combination. The four mode axes (LDR/HDR x single/MSAA) map to the 14 static
|
|
91
|
+
* pipeline handles built in createRenderer (7 base + 7 count=4 variants). A
|
|
92
|
+
* pipeline's `multisample.count` must match the colour-attachment sampleCount,
|
|
93
|
+
* so the count=4 variant is required whenever the camera carries
|
|
94
|
+
* `antialias === 'msaa'`. Returns null when the requested pipeline was not
|
|
95
|
+
* built (empty-manifest path / MSAA variant build failure) -- the caller fires
|
|
96
|
+
* a structured `shader-compile-failed` on the null-narrow.
|
|
97
|
+
*/
|
|
98
|
+
// feat-20260615-pipeline-spec-ssot M6-T1: the standard-shading fallback
|
|
99
|
+
// selector was deleted. The pre-M6 selector silently substituted the
|
|
100
|
+
// boot-time URP `pipelineState.standardPipeline*` whenever the per-
|
|
101
|
+
// MaterialShader cache returned null and HDRP was inactive -- masking
|
|
102
|
+
// real PipelineSpecError build failures behind a layout-compatible-but-
|
|
103
|
+
// wrong PSO. Charter P3 explicit-failure now governs: a missing cache
|
|
104
|
+
// entry surfaces as null, and the per-submesh
|
|
105
|
+
// `if (smPipelineHandle === null) continue` skip-draw (which already
|
|
106
|
+
// covered the HDRP-active and skin-shader miss-skip paths) is the single
|
|
107
|
+
// uniform recovery shape across URP / HDRP / skin.
|
|
108
|
+
|
|
109
|
+
export function selectGeometryPipeline(
|
|
110
|
+
pipelineState: PipelineState,
|
|
111
|
+
tonemapActive: boolean,
|
|
112
|
+
msaaActive: boolean,
|
|
113
|
+
): RenderPipeline | null {
|
|
114
|
+
if (tonemapActive) {
|
|
115
|
+
return msaaActive ? pipelineState.unlitPipelineHdrMsaa : pipelineState.unlitPipelineHdr;
|
|
116
|
+
}
|
|
117
|
+
return msaaActive ? pipelineState.unlitPipelineMsaa : pipelineState.unlitPipeline;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Resolve a cooked material projection for record. The record stage receives
|
|
122
|
+
* the already-resolved projection and an immutable artifact lookup; it never
|
|
123
|
+
* follows parent GUIDs, reads authored material state, or invokes a compiler.
|
|
124
|
+
* A missing or mismatched artifact is an explicit route miss so callers cannot
|
|
125
|
+
* silently substitute a default shader.
|
|
126
|
+
*/
|
|
127
|
+
export function selectCookedMaterialPipelineForRender(args: {
|
|
128
|
+
readonly projection: MaterialRenderProjection;
|
|
129
|
+
readonly lookupArtifact: (
|
|
130
|
+
key: string,
|
|
131
|
+
) => import('@forgeax/engine-shader').MaterialRuntimeArtifact | undefined;
|
|
132
|
+
}): MaterialPipelineReady | MaterialPipelineMiss {
|
|
133
|
+
return routeMaterialPipeline(args);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Route a record-stage draw through the canonical readiness result. */
|
|
137
|
+
export function selectMaterialDrawForRender<TPipeline>(args: {
|
|
138
|
+
readonly readiness: MaterialReadiness;
|
|
139
|
+
readonly buildPipeline: (ready: MaterialRenderReady) => TPipeline;
|
|
140
|
+
readonly reportedDiagnosticKeys: Set<string>;
|
|
141
|
+
}): MaterialDrawRoute<TPipeline> {
|
|
142
|
+
return routeMaterialDraw(args);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* feat-city-glb Bug 5 (per-submesh transparency): true when EVERY submesh
|
|
147
|
+
* material of the entity is transparent (blend). Used by the geometry pass to
|
|
148
|
+
* decide whether to skip the whole entity (fully transparent → deferred to the
|
|
149
|
+
* blend sub-pass) vs. draw its opaque submeshes and skip only the transparent
|
|
150
|
+
* ones per-submesh.
|
|
151
|
+
*
|
|
152
|
+
* Falls back to the entity-level `material.transparent` when `materials` is
|
|
153
|
+
* absent (single-material entities / test fixtures), byte-identical to the
|
|
154
|
+
* pre-fix whole-entity gate.
|
|
155
|
+
*
|
|
156
|
+
* @internal
|
|
157
|
+
*/
|
|
158
|
+
export function isEntityFullyTransparent(source: {
|
|
159
|
+
readonly material: MaterialSnapshot;
|
|
160
|
+
readonly materials?: readonly MaterialSnapshot[];
|
|
161
|
+
}): boolean {
|
|
162
|
+
const mats = source.materials;
|
|
163
|
+
if (mats === undefined || mats.length === 0) return source.material.transparent === true;
|
|
164
|
+
for (let j = 0; j < mats.length; j++) {
|
|
165
|
+
if (mats[j]?.transparent !== true) return false;
|
|
166
|
+
}
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* feat-city-glb Bug 5: true when the entity has at least one transparent AND at
|
|
172
|
+
* least one opaque submesh — i.e. it must be drawn in BOTH the geometry pass
|
|
173
|
+
* (opaque submeshes) and the blend sub-pass (transparent submeshes). A pure-
|
|
174
|
+
* opaque or pure-transparent entity returns false (handled by the whole-entity
|
|
175
|
+
* fast paths).
|
|
176
|
+
*
|
|
177
|
+
* @internal
|
|
178
|
+
*/
|
|
179
|
+
export function entityHasTransparentSubmesh(source: {
|
|
180
|
+
readonly material: MaterialSnapshot;
|
|
181
|
+
readonly materials?: readonly MaterialSnapshot[];
|
|
182
|
+
}): boolean {
|
|
183
|
+
const mats = source.materials;
|
|
184
|
+
if (mats === undefined) return source.material.transparent === true;
|
|
185
|
+
for (let j = 0; j < mats.length; j++) {
|
|
186
|
+
if (mats[j]?.transparent === true) return true;
|
|
187
|
+
}
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Selects the PSO for a transparent (or any generic materialShaderId) draw
|
|
193
|
+
* via the runtime's per-MaterialShader pipeline cache. Returns a
|
|
194
|
+
* structured RhiError on cache miss / pending build -- the caller MUST
|
|
195
|
+
* surface this via the error registry rather than substituting a silent
|
|
196
|
+
* fallback (charter P3 explicit failure).
|
|
197
|
+
*
|
|
198
|
+
* The `getMaterialShaderPipeline` argument mirrors
|
|
199
|
+
* {@link RenderSystemRuntime.getMaterialShaderPipeline}'s 9-arg signature
|
|
200
|
+
* but is injected so the helper is unit-testable with a plain
|
|
201
|
+
* `() => null` stand-in. The helper threads only the inputs the caller
|
|
202
|
+
* already has on the dispatch entry -- it never reads from
|
|
203
|
+
* MaterialAsset internals (plan-strategy section 5.6 gate R-H).
|
|
204
|
+
*
|
|
205
|
+
* @internal
|
|
206
|
+
*/
|
|
207
|
+
export function selectMaterialPipelineForRender(args: {
|
|
208
|
+
readonly materialShaderId: string;
|
|
209
|
+
readonly isHdr: boolean;
|
|
210
|
+
readonly renderState?: MaterialRenderState | undefined;
|
|
211
|
+
readonly topology?: PrimitiveTopology | undefined;
|
|
212
|
+
readonly indexFormat?: 'uint16' | 'uint32' | undefined;
|
|
213
|
+
readonly variantSet?: string | undefined;
|
|
214
|
+
readonly sampleCount?: number | undefined;
|
|
215
|
+
readonly getMaterialShaderPipeline:
|
|
216
|
+
| ((
|
|
217
|
+
materialShaderId: string,
|
|
218
|
+
isHdr: boolean,
|
|
219
|
+
renderState?: MaterialRenderState,
|
|
220
|
+
topology?: PrimitiveTopology,
|
|
221
|
+
indexFormat?: 'uint16' | 'uint32',
|
|
222
|
+
variantSet?: string,
|
|
223
|
+
passKind?: PassKind,
|
|
224
|
+
meshAttributes?: import('@forgeax/engine-types').VertexAttributeMap,
|
|
225
|
+
sampleCount?: number,
|
|
226
|
+
) => RenderPipeline | null)
|
|
227
|
+
| undefined;
|
|
228
|
+
}): Result<RenderPipeline, RhiError> {
|
|
229
|
+
if (args.getMaterialShaderPipeline === undefined) {
|
|
230
|
+
return err(
|
|
231
|
+
new RhiError({
|
|
232
|
+
code: 'internal-error',
|
|
233
|
+
expected: `runtime.getMaterialShaderPipeline registered before draw of ${args.materialShaderId}`,
|
|
234
|
+
hint: `material shader ${args.materialShaderId} has no resolver; the renderer was not initialised with a pipeline cache`,
|
|
235
|
+
}),
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
const pipeline = args.getMaterialShaderPipeline(
|
|
239
|
+
args.materialShaderId,
|
|
240
|
+
args.isHdr,
|
|
241
|
+
args.renderState,
|
|
242
|
+
args.topology,
|
|
243
|
+
args.indexFormat,
|
|
244
|
+
args.variantSet,
|
|
245
|
+
undefined, // passKind defaults to 'forward'
|
|
246
|
+
undefined, // meshAttributes -- transparent path uses the default vertex layout
|
|
247
|
+
args.sampleCount,
|
|
248
|
+
);
|
|
249
|
+
if (pipeline === null) {
|
|
250
|
+
return err(
|
|
251
|
+
new RhiError({
|
|
252
|
+
code: 'internal-error',
|
|
253
|
+
expected: `pipeline cache hit for ${args.materialShaderId} (renderState=${args.renderState ? 'set' : 'unset'}, isHdr=${args.isHdr})`,
|
|
254
|
+
hint: `material shader pipeline ${args.materialShaderId} missed the runtime cache; the underlying shader-module build may still be pending, or the id is not registered in ShaderRegistry`,
|
|
255
|
+
}),
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
return ok(pipeline);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// === end feat-20260625 M2 / w7 transparent-aware helpers ========================
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* feat-20260601-gpu-resource-store-extraction M1 / D-9: resolve a texture's
|
|
265
|
+
* GPU view through the pull-model residency store. The three steps replace the
|
|
266
|
+
* pre-extraction single-call accessor on the registry:
|
|
267
|
+
* 1. fetch the TextureAsset POD off the registry (CPU; registry keeps PODs)
|
|
268
|
+
* 2. synchronously `ensureResident(handle, pod)` (first access builds the
|
|
269
|
+
* GPU texture + prewarmed mipmap blit; subsequent access is O(1))
|
|
270
|
+
* 3. return the GPU view (or undefined on POD miss / ensureResident err)
|
|
271
|
+
*
|
|
272
|
+
* Returns `undefined` when the POD is absent (handle never registered) or the
|
|
273
|
+
* upload fails (a structured error is fired). Callers then fall back to their
|
|
274
|
+
* existing placeholder view, preserving the pre-extraction fallback semantics.
|
|
275
|
+
*/
|
|
276
|
+
function isImageError(error: unknown): error is ImageError {
|
|
277
|
+
if (typeof error !== 'object' || error === null) return false;
|
|
278
|
+
const code = (error as { readonly code?: unknown }).code;
|
|
279
|
+
return typeof code === 'string' && code.startsWith('image-');
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export function residentTextureView(
|
|
283
|
+
world: World,
|
|
284
|
+
store: GpuResourceStore,
|
|
285
|
+
runtime: RenderSystemRuntime,
|
|
286
|
+
handle: Handle<'TextureAsset', 'shared'>,
|
|
287
|
+
worldId: number = 0,
|
|
288
|
+
// biome-ignore lint/suspicious/noExplicitAny: opaque GPU texture-view return
|
|
289
|
+
): any | undefined {
|
|
290
|
+
const podRes = resolveRenderAsset<TextureAsset>(world, handle);
|
|
291
|
+
if (!podRes.ok) return undefined;
|
|
292
|
+
const residentRes = store.ensureResident(handle, podRes.value, worldId);
|
|
293
|
+
if (!residentRes.ok) {
|
|
294
|
+
// Preserve the concrete asset-capability boundary on the renderer error
|
|
295
|
+
// channel. In particular, WebGL2 texture-dimension refusal must not
|
|
296
|
+
// collapse into the later debug-pink asset-not-registered fallback.
|
|
297
|
+
if (residentRes.error instanceof RhiError || isImageError(residentRes.error)) {
|
|
298
|
+
runtime.errorRegistry.fire(residentRes.error);
|
|
299
|
+
}
|
|
300
|
+
return undefined;
|
|
301
|
+
}
|
|
302
|
+
return store.getTextureGpuView(handle, worldId);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
function residentSampler(
|
|
306
|
+
world: World,
|
|
307
|
+
store: GpuResourceStore,
|
|
308
|
+
runtime: RenderSystemRuntime,
|
|
309
|
+
handle: Handle<'SamplerAsset', 'shared'>,
|
|
310
|
+
): Sampler | undefined {
|
|
311
|
+
const podRes = resolveRenderAsset<SamplerAsset>(world, handle);
|
|
312
|
+
if (!podRes.ok) return undefined;
|
|
313
|
+
const residentRes = store.ensureSamplerResident(handle, podRes.value);
|
|
314
|
+
if (!residentRes.ok) {
|
|
315
|
+
runtime.errorRegistry.fire(residentRes.error);
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
return residentRes.value;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// feat-20260623-world-space-video-asset M4 / w16 (D-3): resolve the
|
|
322
|
+
// current-frame GPU view for a video-sourced texture field through the
|
|
323
|
+
// transient DynamicTextureStore, NOT the static `residentTextureView` /
|
|
324
|
+
// `ensureResident` cache (video never enters that switch; AC-08).
|
|
325
|
+
//
|
|
326
|
+
// Per frame: ask the host-registered VideoElementProvider (World Resource,
|
|
327
|
+
// D-1) for this entity's HTMLVideoElement, upload its current frame via
|
|
328
|
+
// `store.uploadFrame` (copyExternalImageToTexture), and return the resulting
|
|
329
|
+
// view. When the provider is absent / returns no element / the element has no
|
|
330
|
+
// decodable dimensions yet, fall back to any previously-uploaded view and
|
|
331
|
+
// finally to `undefined` (caller binds the default view this frame — charter
|
|
332
|
+
// P3 graceful, no garbage sampling). A failed GPU upload fires the structured
|
|
333
|
+
// RhiError on the engine channel and degrades to the default view.
|
|
334
|
+
//
|
|
335
|
+
// `highPerfAvailable` is the w17 capability probe; the high-perf
|
|
336
|
+
// GPUExternalTexture branch is a reserved hook (OOS-5) — when it ever becomes
|
|
337
|
+
// available the upload would route there. Today it is always false so the
|
|
338
|
+
// general copyExternalImageToTexture path is the only one taken.
|
|
339
|
+
type VideoUploadFailureEpisodes = Map<number, Set<number>>;
|
|
340
|
+
|
|
341
|
+
// The store is renderer-owned, so this keeps one failure episode per
|
|
342
|
+
// renderer/entity/clip without creating a second video system or leaking
|
|
343
|
+
// state across a replacement renderer.
|
|
344
|
+
const VIDEO_UPLOAD_FAILURE_EPISODES = new WeakMap<
|
|
345
|
+
DynamicTextureStore,
|
|
346
|
+
VideoUploadFailureEpisodes
|
|
347
|
+
>();
|
|
348
|
+
|
|
349
|
+
function markVideoUploadFailureEpisode(
|
|
350
|
+
store: DynamicTextureStore,
|
|
351
|
+
entityKey: number,
|
|
352
|
+
clip: Handle<'VideoAsset', 'shared'>,
|
|
353
|
+
): boolean {
|
|
354
|
+
let clips = VIDEO_UPLOAD_FAILURE_EPISODES.get(store);
|
|
355
|
+
if (clips === undefined) {
|
|
356
|
+
clips = new Map();
|
|
357
|
+
VIDEO_UPLOAD_FAILURE_EPISODES.set(store, clips);
|
|
358
|
+
}
|
|
359
|
+
let episodes = clips.get(entityKey);
|
|
360
|
+
if (episodes === undefined) {
|
|
361
|
+
episodes = new Set();
|
|
362
|
+
clips.set(entityKey, episodes);
|
|
363
|
+
}
|
|
364
|
+
const clipId = handleSlot(clip);
|
|
365
|
+
if (episodes.has(clipId)) return false;
|
|
366
|
+
episodes.add(clipId);
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
function clearVideoUploadFailureEpisode(
|
|
371
|
+
store: DynamicTextureStore,
|
|
372
|
+
entityKey: number,
|
|
373
|
+
clip: Handle<'VideoAsset', 'shared'>,
|
|
374
|
+
): void {
|
|
375
|
+
const clips = VIDEO_UPLOAD_FAILURE_EPISODES.get(store);
|
|
376
|
+
const episodes = clips?.get(entityKey);
|
|
377
|
+
if (episodes === undefined) return;
|
|
378
|
+
episodes.delete(handleSlot(clip));
|
|
379
|
+
if (episodes.size === 0) clips?.delete(entityKey);
|
|
380
|
+
if (clips?.size === 0) VIDEO_UPLOAD_FAILURE_EPISODES.delete(store);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
export function videoTextureView(
|
|
384
|
+
world: World,
|
|
385
|
+
store: DynamicTextureStore | undefined,
|
|
386
|
+
runtime: RenderSystemRuntime,
|
|
387
|
+
entityKey: number,
|
|
388
|
+
clip: Handle<'VideoAsset', 'shared'>,
|
|
389
|
+
highPerfAvailable: boolean,
|
|
390
|
+
// biome-ignore lint/suspicious/noExplicitAny: opaque GPU texture-view return
|
|
391
|
+
): any | undefined {
|
|
392
|
+
if (store === undefined) return undefined;
|
|
393
|
+
const provider = world.hasResource(VIDEO_ELEMENT_PROVIDER_KEY)
|
|
394
|
+
? world.getResource<VideoElementProvider>(VIDEO_ELEMENT_PROVIDER_KEY)
|
|
395
|
+
: undefined;
|
|
396
|
+
const element = provider?.getElement(entityKey as unknown as EntityHandle, clip);
|
|
397
|
+
// AC-10 double-miss: a VideoPlayer entity can reach NEITHER upload path this
|
|
398
|
+
// frame — no host HTMLVideoElement (general copyExternalImageToTexture path)
|
|
399
|
+
// AND no high-perf GPUExternalTexture path. This is the genuine "this backend
|
|
400
|
+
// exposes no usable video upload path" case (no provider registered, or the
|
|
401
|
+
// provider yields nothing while the high-perf reserved hook is unavailable —
|
|
402
|
+
// OOS-5 keeps it always false today). Rather than silently binding the
|
|
403
|
+
// default view, fire the structured VideoUploadUnsupportedError on the engine
|
|
404
|
+
// error channel so an AI user can detect the dead path via `.code` / `.hint`
|
|
405
|
+
// (charter P3; AC-10 signal lives on the REAL per-frame upload path, not an
|
|
406
|
+
// orphan system). The default view is still bound this frame so the draw
|
|
407
|
+
// does not crash (graceful degradation), but the failure is no longer silent.
|
|
408
|
+
if (element === undefined && !highPerfAvailable) {
|
|
409
|
+
if (markVideoUploadFailureEpisode(store, entityKey, clip)) {
|
|
410
|
+
runtime.errorRegistry.fire(new VideoUploadUnsupportedError());
|
|
411
|
+
}
|
|
412
|
+
return store.getView(clip);
|
|
413
|
+
}
|
|
414
|
+
// D-2 / w17 high-perf reserved hook: a future GPUExternalTexture import path
|
|
415
|
+
// would key off `highPerfAvailable` here. It is always false today
|
|
416
|
+
// (importExternalTexture absent), so the general copyExternalImageToTexture
|
|
417
|
+
// path below is the sole route end-to-end.
|
|
418
|
+
if (element === undefined) {
|
|
419
|
+
clearVideoUploadFailureEpisode(store, entityKey, clip);
|
|
420
|
+
return store.getView(clip);
|
|
421
|
+
}
|
|
422
|
+
const width = element.videoWidth;
|
|
423
|
+
const height = element.videoHeight;
|
|
424
|
+
// Metadata dimensions can be non-zero before the decoder has produced a
|
|
425
|
+
// current frame. WebGPU rejects copyExternalImageToTexture in that window
|
|
426
|
+
// because the video element has no back resource yet; keep the previous
|
|
427
|
+
// frame/default view until HAVE_CURRENT_DATA (2) is reached.
|
|
428
|
+
if (width <= 0 || height <= 0 || element.readyState < 2) return store.getView(clip);
|
|
429
|
+
const uploaded = store.uploadFrame(clip, element, width, height);
|
|
430
|
+
if (uploaded === undefined) return store.getView(clip);
|
|
431
|
+
if (!uploaded.ok) {
|
|
432
|
+
runtime.errorRegistry.fire(uploaded.error);
|
|
433
|
+
return store.getView(clip);
|
|
434
|
+
}
|
|
435
|
+
clearVideoUploadFailureEpisode(store, entityKey, clip);
|
|
436
|
+
return uploaded.value;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* feat-20260621-learn-render-5-5-parallax M2 / w8 (D-3): ordered user-region
|
|
441
|
+
* texture field names for a material's bind-group assembly, derived from the
|
|
442
|
+
* shader's paramSchema via the `derive()` SSOT (insertion order = sampler/
|
|
443
|
+
* texture pair order in derive().bglEntries). An unavailable schema yields no
|
|
444
|
+
* inferred layout fields.
|
|
445
|
+
*/
|
|
446
|
+
export function userRegionTextureFieldOrder(
|
|
447
|
+
projection: DerivedMaterialInterface | undefined,
|
|
448
|
+
): readonly string[] {
|
|
449
|
+
if (projection === undefined) return [];
|
|
450
|
+
return [...projection.textureFieldNames];
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* feat-20260621-learn-render-5-5-parallax M2 / w8: the fallback texture view
|
|
455
|
+
* for a user-region field when no handle is provided (graceful, charter P3).
|
|
456
|
+
* normalTexture decodes to a flat tangent normal; everything else (baseColor,
|
|
457
|
+
* MR, height, ...) uses the 1x1 white default (height white -> zero displacement).
|
|
458
|
+
*/
|
|
459
|
+
export function defaultViewForUserRegionField(
|
|
460
|
+
field: string,
|
|
461
|
+
pipelineState: PipelineState,
|
|
462
|
+
// biome-ignore lint/suspicious/noExplicitAny: opaque GPU texture-view
|
|
463
|
+
): any {
|
|
464
|
+
if (field === 'normalTexture') return pipelineState.defaultNormalTextureView;
|
|
465
|
+
if (field === 'baseColorTexture') return pipelineState.fallbackTextureView;
|
|
466
|
+
return pipelineState.defaultWhiteTextureView;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* feat-20260527-sprite-nineslice M4 / w17 (AC-16): once-per-renderable
|
|
471
|
+
* detection of "Transform.scale below the four 9-slice corner anchors". Pure
|
|
472
|
+
* helper extracted out of recordFrame so unit tests can drive it without a
|
|
473
|
+
* GPU device — the recordFrame loop calls this with its `transformWorld` /
|
|
474
|
+
* `slices` / `renderableIndex` / `seenIndices` / `metrics` arguments.
|
|
475
|
+
*
|
|
476
|
+
* The scale-vs-anchor formula mirrors plan-strategy §D-3 — the world x scale must
|
|
477
|
+
* accommodate `|slices.x| + |slices.z|`, and `scaleY` must accommodate
|
|
478
|
+
* `|slices.y| + |slices.w|`. Slices ≡ all zero is a no-op (legacy quad
|
|
479
|
+
* path); a breach increments `nineslice.scale-too-small` exactly once per
|
|
480
|
+
* `renderableIndex` per RenderSystem lifetime via the `seenIndices` Set
|
|
481
|
+
* (the same warn-once anchor pattern used for missing-texture sprites).
|
|
482
|
+
*
|
|
483
|
+
* @param transformWorld The entity's resolved Transform.world mat4 (16 floats column-major).
|
|
484
|
+
* @param slices The four anchor distances `[left, top, right, bottom]`
|
|
485
|
+
* (sentinel `bottom < 0` for tile mode is consumed via abs()).
|
|
486
|
+
* @param renderableIndex The entity index into the validated renderables list.
|
|
487
|
+
* @param seenIndices The per-frame-state guard Set; entries are added on increment.
|
|
488
|
+
* @param metrics The per-Renderer EngineMetrics counter.
|
|
489
|
+
* @internal — exported for unit-test access (w17).
|
|
490
|
+
*/
|
|
491
|
+
export function detectNineSliceScaleTooSmall(
|
|
492
|
+
transformWorld: Float32Array,
|
|
493
|
+
slices: readonly [number, number, number, number],
|
|
494
|
+
renderableIndex: number,
|
|
495
|
+
seenIndices: Set<number>,
|
|
496
|
+
metrics: { increment(name: string): void },
|
|
497
|
+
): void {
|
|
498
|
+
const anyNonZero = slices[0] !== 0 || slices[1] !== 0 || slices[2] !== 0 || slices[3] !== 0;
|
|
499
|
+
if (!anyNonZero) return;
|
|
500
|
+
const sx = Math.hypot(transformWorld[0] ?? 1, transformWorld[1] ?? 0, transformWorld[2] ?? 0);
|
|
501
|
+
const sy = Math.hypot(transformWorld[4] ?? 0, transformWorld[5] ?? 1, transformWorld[6] ?? 0);
|
|
502
|
+
const horizontalAnchor = Math.abs(slices[0]) + Math.abs(slices[2]);
|
|
503
|
+
const verticalAnchor = Math.abs(slices[1]) + Math.abs(slices[3]);
|
|
504
|
+
if (sx < horizontalAnchor || sy < verticalAnchor) {
|
|
505
|
+
if (!seenIndices.has(renderableIndex)) {
|
|
506
|
+
seenIndices.add(renderableIndex);
|
|
507
|
+
metrics.increment('nineslice.scale-too-small');
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* feat-20260704 M3/w19: shared per-submesh material bind-group assembly, hoisted
|
|
514
|
+
* from the `buildPerSubmeshMaterialBg` closure inside recordMainPass so both the
|
|
515
|
+
* geometry pass and the LDR blend sub-pass (extracted to separate functions)
|
|
516
|
+
* call the identical layout.
|
|
517
|
+
*
|
|
518
|
+
* feat-city-glb Bug 5 (per-submesh transparency): a transparent PBR submesh
|
|
519
|
+
* binds the identical metallic/roughness/normal/emissive/occlusion +
|
|
520
|
+
* Skylight layout the geometry pass uses (the sub-pass previously bound a
|
|
521
|
+
* sprite-only BG, which cannot render a PBR decal). The per-frame closure state
|
|
522
|
+
* (runtime / pipelineState / world / store / skylightResources / the shared
|
|
523
|
+
* material BG cache + counters) is threaded through `deps`; the caller passes
|
|
524
|
+
* the per-submesh material snapshot + entityKey (video texture routing) and sets
|
|
525
|
+
* the dynamic UBO offset itself.
|
|
526
|
+
*
|
|
527
|
+
* @internal
|
|
528
|
+
*/
|
|
529
|
+
export interface PerSubmeshMaterialBgDeps {
|
|
530
|
+
readonly runtime: RenderSystemRuntime;
|
|
531
|
+
readonly pipelineState: PipelineState;
|
|
532
|
+
readonly world: World;
|
|
533
|
+
readonly store: GpuResourceStore;
|
|
534
|
+
readonly materialSlice: number;
|
|
535
|
+
readonly videoHighPerfAvailable: boolean;
|
|
536
|
+
readonly skylightResources: SkylightBindGroupResources;
|
|
537
|
+
readonly materialBgShared: Map<string, WeakMap<object, unknown>>;
|
|
538
|
+
/** Cross-frame final BG reuse keyed by the stable source material handle. */
|
|
539
|
+
readonly materialBgAssemblyCache: Map<number, MaterialBgAssemblyCacheEntry>;
|
|
540
|
+
readonly bindGroupCounts: BindGroupCounts;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/** @internal Exported only so buffer-generation invalidation stays regression-tested. */
|
|
544
|
+
export function isMaterialBgAssemblyCacheHit(
|
|
545
|
+
cached: MaterialBgAssemblyCacheEntry | undefined,
|
|
546
|
+
material: MaterialSnapshot,
|
|
547
|
+
materialBgl: BindGroupLayout,
|
|
548
|
+
materialBuffer: Buffer,
|
|
549
|
+
skylightResources: SkylightBindGroupResources,
|
|
550
|
+
materialResourceEpoch: number,
|
|
551
|
+
): cached is MaterialBgAssemblyCacheEntry {
|
|
552
|
+
return (
|
|
553
|
+
cached?.material === material &&
|
|
554
|
+
cached.materialResourceEpoch === materialResourceEpoch &&
|
|
555
|
+
cached.materialBgl === materialBgl &&
|
|
556
|
+
cached.materialBuffer === materialBuffer &&
|
|
557
|
+
cached.skylightResources.irradianceView === skylightResources.irradianceView &&
|
|
558
|
+
cached.skylightResources.irradianceSampler === skylightResources.irradianceSampler &&
|
|
559
|
+
cached.skylightResources.prefilterView === skylightResources.prefilterView &&
|
|
560
|
+
cached.skylightResources.prefilterSampler === skylightResources.prefilterSampler &&
|
|
561
|
+
cached.skylightResources.brdfLutView === skylightResources.brdfLutView &&
|
|
562
|
+
cached.skylightResources.brdfLutSampler === skylightResources.brdfLutSampler &&
|
|
563
|
+
cached.skylightResources.intensityBuffer === skylightResources.intensityBuffer
|
|
564
|
+
);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
export function buildPerSubmeshMaterialBg(
|
|
568
|
+
deps: PerSubmeshMaterialBgDeps,
|
|
569
|
+
submeshMaterial: MaterialSnapshot,
|
|
570
|
+
entityKey: number,
|
|
571
|
+
): BindGroup {
|
|
572
|
+
const {
|
|
573
|
+
runtime,
|
|
574
|
+
pipelineState,
|
|
575
|
+
world,
|
|
576
|
+
store,
|
|
577
|
+
materialSlice,
|
|
578
|
+
videoHighPerfAvailable,
|
|
579
|
+
skylightResources,
|
|
580
|
+
materialBgShared,
|
|
581
|
+
materialBgAssemblyCache,
|
|
582
|
+
bindGroupCounts,
|
|
583
|
+
} = deps;
|
|
584
|
+
const smMaterialHandle = submeshMaterial.materialHandle;
|
|
585
|
+
const smHasVideoFields = (submeshMaterial.videoTextureFields?.size ?? 0) > 0;
|
|
586
|
+
const smShaderId = submeshMaterial.materialShaderId;
|
|
587
|
+
const smPerShaderBgl =
|
|
588
|
+
smShaderId !== undefined ? runtime.getMaterialBindGroupLayout?.(smShaderId) : undefined;
|
|
589
|
+
const usesSharedPbrMaterialLayout = smPerShaderBgl === undefined;
|
|
590
|
+
const smMaterialBgl = smPerShaderBgl ?? pipelineState.materialBindGroupLayout;
|
|
591
|
+
if (smMaterialHandle !== undefined && !smHasVideoFields) {
|
|
592
|
+
const cached = materialBgAssemblyCache.get(smMaterialHandle);
|
|
593
|
+
if (
|
|
594
|
+
isMaterialBgAssemblyCacheHit(
|
|
595
|
+
cached,
|
|
596
|
+
submeshMaterial,
|
|
597
|
+
smMaterialBgl,
|
|
598
|
+
pipelineState.materialUniformBuffer.buffer,
|
|
599
|
+
skylightResources,
|
|
600
|
+
store.materialResourceEpoch,
|
|
601
|
+
)
|
|
602
|
+
) {
|
|
603
|
+
return cached.bindGroup;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
const smRegisteredProjection =
|
|
607
|
+
!usesSharedPbrMaterialLayout && smShaderId !== undefined
|
|
608
|
+
? runtime.getParamSchemaProjection?.(smShaderId)
|
|
609
|
+
: undefined;
|
|
610
|
+
const smSchema = usesSharedPbrMaterialLayout
|
|
611
|
+
? DEFAULT_STANDARD_PBR_PARAM_SCHEMA
|
|
612
|
+
: (smRegisteredProjection?.schema ??
|
|
613
|
+
(smShaderId !== undefined ? runtime.getParamSchema?.(smShaderId) : undefined) ??
|
|
614
|
+
submeshMaterial.materialParamSchema);
|
|
615
|
+
// The bind-group layout and its uniform range must share one schema owner.
|
|
616
|
+
// Authored built-in materials may declare only a compact subset, while the
|
|
617
|
+
// shared PBR pipeline still consumes the full standard schema.
|
|
618
|
+
const smProjection = usesSharedPbrMaterialLayout
|
|
619
|
+
? DEFAULT_STANDARD_PBR_DERIVED_INTERFACE
|
|
620
|
+
: (submeshMaterial.derivedMaterialSlot?.derivedInterface ??
|
|
621
|
+
smRegisteredProjection?.derivedInterface ??
|
|
622
|
+
(smSchema === undefined
|
|
623
|
+
? undefined
|
|
624
|
+
: derivedParamSchema(smSchema, runtime.paramSchemaProjectionCensus)));
|
|
625
|
+
const smMaterialByteLength = smProjection?.totalBytes || materialSlice;
|
|
626
|
+
const smUserRegionFields = userRegionTextureFieldOrder(smProjection);
|
|
627
|
+
let materialResourcesResident = true;
|
|
628
|
+
const smSamplerForField = (field: string | undefined): Sampler => {
|
|
629
|
+
const handle = field === undefined ? undefined : submeshMaterial.samplerHandles?.get(field);
|
|
630
|
+
if (handle === undefined) return pipelineState.defaultSampler;
|
|
631
|
+
const sampler = residentSampler(world, store, runtime, handle);
|
|
632
|
+
if (sampler === undefined) materialResourcesResident = false;
|
|
633
|
+
return sampler ?? pipelineState.defaultSampler;
|
|
634
|
+
};
|
|
635
|
+
const smBaseEntries: BindGroupEntry[] = [
|
|
636
|
+
{
|
|
637
|
+
binding: 0,
|
|
638
|
+
resource: {
|
|
639
|
+
kind: 'buffer' as const,
|
|
640
|
+
value: {
|
|
641
|
+
buffer: pipelineState.materialUniformBuffer.buffer,
|
|
642
|
+
offset: 0,
|
|
643
|
+
size: smMaterialByteLength,
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
|
+
},
|
|
647
|
+
];
|
|
648
|
+
const smBglPairCount = smUserRegionFields.length;
|
|
649
|
+
for (let fi = 0; fi < smBglPairCount; fi++) {
|
|
650
|
+
const field = smUserRegionFields[fi];
|
|
651
|
+
const samplerBinding = 1 + fi * 2;
|
|
652
|
+
const textureBinding = samplerBinding + 1;
|
|
653
|
+
let smView: unknown =
|
|
654
|
+
field !== undefined
|
|
655
|
+
? defaultViewForUserRegionField(field, pipelineState)
|
|
656
|
+
: pipelineState.defaultWhiteTextureView;
|
|
657
|
+
const smVideoClip =
|
|
658
|
+
field !== undefined ? submeshMaterial.videoTextureFields?.get(field) : undefined;
|
|
659
|
+
if (smVideoClip !== undefined) {
|
|
660
|
+
const view = videoTextureView(
|
|
661
|
+
world,
|
|
662
|
+
runtime.dynamicTextureStore,
|
|
663
|
+
runtime,
|
|
664
|
+
entityKey,
|
|
665
|
+
smVideoClip,
|
|
666
|
+
videoHighPerfAvailable,
|
|
667
|
+
);
|
|
668
|
+
if (view !== undefined) smView = view;
|
|
669
|
+
} else {
|
|
670
|
+
const smHandle = field !== undefined ? submeshMaterial.textureHandles?.get(field) : undefined;
|
|
671
|
+
if (smHandle !== undefined) {
|
|
672
|
+
const view = residentTextureView(world, store, runtime, smHandle);
|
|
673
|
+
if (view !== undefined) smView = view;
|
|
674
|
+
else materialResourcesResident = false;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
smBaseEntries.push(
|
|
678
|
+
{
|
|
679
|
+
binding: samplerBinding,
|
|
680
|
+
resource: { kind: 'sampler' as const, value: smSamplerForField(field) },
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
binding: textureBinding,
|
|
684
|
+
resource: { kind: 'textureView' as const, value: smView as never },
|
|
685
|
+
},
|
|
686
|
+
);
|
|
687
|
+
}
|
|
688
|
+
const smMergedEntries = assembleMaterialWithSkylightEntries(smBaseEntries, skylightResources);
|
|
689
|
+
const smBindGroup = getOrCreatePerEntity(
|
|
690
|
+
materialBgShared,
|
|
691
|
+
smShaderId ?? '',
|
|
692
|
+
smMergedEntries.map((e) => extractEntryResourceHandle(e)),
|
|
693
|
+
'material-shared',
|
|
694
|
+
() => {
|
|
695
|
+
const result = runtime.device.createBindGroup({
|
|
696
|
+
label: 'pbr-material-skylight-bg',
|
|
697
|
+
layout: smMaterialBgl,
|
|
698
|
+
entries: smMergedEntries,
|
|
699
|
+
});
|
|
700
|
+
if (!result.ok) throw result.error;
|
|
701
|
+
return result.value;
|
|
702
|
+
},
|
|
703
|
+
bindGroupCounts,
|
|
704
|
+
);
|
|
705
|
+
if (smMaterialHandle !== undefined && !smHasVideoFields && materialResourcesResident) {
|
|
706
|
+
materialBgAssemblyCache.set(smMaterialHandle, {
|
|
707
|
+
material: submeshMaterial,
|
|
708
|
+
materialResourceEpoch: store.materialResourceEpoch,
|
|
709
|
+
materialBgl: smMaterialBgl,
|
|
710
|
+
materialBuffer: pipelineState.materialUniformBuffer.buffer,
|
|
711
|
+
skylightResources,
|
|
712
|
+
bindGroup: smBindGroup,
|
|
713
|
+
});
|
|
714
|
+
}
|
|
715
|
+
return smBindGroup;
|
|
716
|
+
}
|