@forgeax/engine-render 0.0.0-dev.8d955ade1c79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +647 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/authoring-path.unit.test.d.ts +2 -0
- package/dist/__tests__/authoring-path.unit.test.d.ts.map +1 -0
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +2 -0
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +1 -0
- package/dist/__tests__/callback-inference.test-d.d.ts +2 -0
- package/dist/__tests__/callback-inference.test-d.d.ts.map +1 -0
- package/dist/__tests__/cluster-binner.test.d.ts +2 -0
- package/dist/__tests__/cluster-binner.test.d.ts.map +1 -0
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +2 -0
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +1 -0
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +2 -0
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +1 -0
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +2 -0
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/factory-contract.integration.test.d.ts +2 -0
- package/dist/__tests__/factory-contract.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/frame-observation.contract.test.d.ts +2 -0
- package/dist/__tests__/frame-observation.contract.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +2 -0
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +6 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +18 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view-reference.d.ts +15 -0
- package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +7 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +2 -0
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +1 -0
- package/dist/__tests__/injection-kind-owner.test-d.d.ts +2 -0
- package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +2 -0
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts +2 -0
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts +2 -0
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts +2 -0
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +2 -0
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +2 -0
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +2 -0
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +2 -0
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +1 -0
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +2 -0
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +1 -0
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +2 -0
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-default-off.test.d.ts +2 -0
- package/dist/__tests__/profiler-default-off.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-catalog.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-integration.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-integration.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-token.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-token.test.d.ts.map +1 -0
- package/dist/__tests__/public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-error-code-owner.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-context.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-context.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-contract.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-contract.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-docs.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-errors.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-retry.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +7 -0
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb-gpu.d.ts +7 -0
- package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts +2 -0
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +12 -0
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-scene-projection.unit.test.d.ts +2 -0
- package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +2 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +1 -0
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +2 -0
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +1 -0
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
- package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/surface-configuration.unit.test.d.ts +2 -0
- package/dist/__tests__/surface-configuration.unit.test.d.ts.map +1 -0
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +2 -0
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +1 -0
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +2 -0
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +1 -0
- package/dist/__tests__/urp-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +2 -0
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-extract.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-extract.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-extract.perf.test.d.ts +2 -0
- package/dist/__tests__/visibility-extract.perf.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-instances.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-instances.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/visibility-resolver.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vocabulary.unit.test.d.ts +2 -0
- package/dist/__tests__/vocabulary.unit.test.d.ts.map +1 -0
- package/dist/assembly/backend-contract.d.ts +37 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +207 -0
- package/dist/assembly/factory.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +84 -0
- package/dist/assembly/host-contract.d.ts.map +1 -0
- package/dist/assembly/material/assembly.d.ts +21 -0
- package/dist/assembly/material/assembly.d.ts.map +1 -0
- package/dist/assembly/material/pipeline-projection.d.ts +30 -0
- package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
- package/dist/assets/asset-decoders.d.ts +5 -0
- package/dist/assets/asset-decoders.d.ts.map +1 -0
- package/dist/assets/render-asset-port.d.ts +17 -0
- package/dist/assets/render-asset-port.d.ts.map +1 -0
- package/dist/assets/resolve-render-asset.d.ts +6 -0
- package/dist/assets/resolve-render-asset.d.ts.map +1 -0
- package/dist/authoring.d.ts +12 -0
- package/dist/authoring.d.ts.map +1 -0
- package/dist/authoring.mjs +27 -0
- package/dist/authoring.mjs.map +1 -0
- package/dist/chunk-CQXZC5XI.mjs +182 -0
- package/dist/chunk-CQXZC5XI.mjs.map +1 -0
- package/dist/chunk-HCOGPHKS.mjs +93 -0
- package/dist/chunk-HCOGPHKS.mjs.map +1 -0
- package/dist/chunk-YEJIUW7D.mjs +1152 -0
- package/dist/chunk-YEJIUW7D.mjs.map +1 -0
- package/dist/cluster-binner.d.ts +152 -0
- package/dist/cluster-binner.d.ts.map +1 -0
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +2 -0
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +2 -0
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/schema-parity.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts +2 -0
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +1 -0
- package/dist/components/camera.d.ts +311 -0
- package/dist/components/camera.d.ts.map +1 -0
- package/dist/components/directional-light.d.ts +76 -0
- package/dist/components/directional-light.d.ts.map +1 -0
- package/dist/components/glyph-text.d.ts +26 -0
- package/dist/components/glyph-text.d.ts.map +1 -0
- package/dist/components/index.d.ts +24 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/instances.d.ts +41 -0
- package/dist/components/instances.d.ts.map +1 -0
- package/dist/components/layer.d.ts +34 -0
- package/dist/components/layer.d.ts.map +1 -0
- package/dist/components/light-helpers.d.ts +53 -0
- package/dist/components/light-helpers.d.ts.map +1 -0
- package/dist/components/lines.d.ts +5 -0
- package/dist/components/lines.d.ts.map +1 -0
- package/dist/components/mesh-filter.d.ts +24 -0
- package/dist/components/mesh-filter.d.ts.map +1 -0
- package/dist/components/mesh-renderer.d.ts +33 -0
- package/dist/components/mesh-renderer.d.ts.map +1 -0
- package/dist/components/point-light-shadow.d.ts +27 -0
- package/dist/components/point-light-shadow.d.ts.map +1 -0
- package/dist/components/point-light.d.ts +35 -0
- package/dist/components/point-light.d.ts.map +1 -0
- package/dist/components/points.d.ts +15 -0
- package/dist/components/points.d.ts.map +1 -0
- package/dist/components/post-process-params.d.ts +5 -0
- package/dist/components/post-process-params.d.ts.map +1 -0
- package/dist/components/scene-instance.d.ts +140 -0
- package/dist/components/scene-instance.d.ts.map +1 -0
- package/dist/components/skybox-background.d.ts +56 -0
- package/dist/components/skybox-background.d.ts.map +1 -0
- package/dist/components/skylight.d.ts +55 -0
- package/dist/components/skylight.d.ts.map +1 -0
- package/dist/components/sort-key.d.ts +44 -0
- package/dist/components/sort-key.d.ts.map +1 -0
- package/dist/components/spot-light.d.ts +81 -0
- package/dist/components/spot-light.d.ts.map +1 -0
- package/dist/components/sprite-animation.d.ts +74 -0
- package/dist/components/sprite-animation.d.ts.map +1 -0
- package/dist/components/sprite-instances.d.ts +51 -0
- package/dist/components/sprite-instances.d.ts.map +1 -0
- package/dist/components/sprite-playback-mode.d.ts +42 -0
- package/dist/components/sprite-playback-mode.d.ts.map +1 -0
- package/dist/components/sprite-region-override.d.ts +46 -0
- package/dist/components/sprite-region-override.d.ts.map +1 -0
- package/dist/components/tile-layer.d.ts +106 -0
- package/dist/components/tile-layer.d.ts.map +1 -0
- package/dist/components/tilemap.d.ts +25 -0
- package/dist/components/tilemap.d.ts.map +1 -0
- package/dist/components/visibility.d.ts +22 -0
- package/dist/components/visibility.d.ts.map +1 -0
- package/dist/construct-renderer.d.ts +19 -0
- package/dist/construct-renderer.d.ts.map +1 -0
- package/dist/construct-renderer.mjs +27462 -0
- package/dist/construct-renderer.mjs.map +1 -0
- package/dist/debug-draw-glue.d.ts +5 -0
- package/dist/debug-draw-glue.d.ts.map +1 -0
- package/dist/device/device-scope.d.ts +83 -0
- package/dist/device/device-scope.d.ts.map +1 -0
- package/dist/device/gpu-residency.d.ts +337 -0
- package/dist/device/gpu-residency.d.ts.map +1 -0
- package/dist/device/resource-types.d.ts +8 -0
- package/dist/device/resource-types.d.ts.map +1 -0
- package/dist/engine-metrics.d.ts +23 -0
- package/dist/engine-metrics.d.ts.map +1 -0
- package/dist/errors/ecs-validation.d.ts +3 -0
- package/dist/errors/ecs-validation.d.ts.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/recover.d.ts +105 -0
- package/dist/errors/recover.d.ts.map +1 -0
- package/dist/errors/render.d.ts +705 -0
- package/dist/errors/render.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts +26 -0
- package/dist/extract/visibility.d.ts.map +1 -0
- package/dist/features/fullscreen.d.ts +19 -0
- package/dist/features/fullscreen.d.ts.map +1 -0
- package/dist/features/host.d.ts +106 -0
- package/dist/features/host.d.ts.map +1 -0
- package/dist/features/morph/morph-feature.d.ts +79 -0
- package/dist/features/morph/morph-feature.d.ts.map +1 -0
- package/dist/features/plan.d.ts +182 -0
- package/dist/features/plan.d.ts.map +1 -0
- package/dist/features/prepared-gpu-work.d.ts +117 -0
- package/dist/features/prepared-gpu-work.d.ts.map +1 -0
- package/dist/features/prepared-graphics-store.d.ts +66 -0
- package/dist/features/prepared-graphics-store.d.ts.map +1 -0
- package/dist/features/prepared-graphics.d.ts +215 -0
- package/dist/features/prepared-graphics.d.ts.map +1 -0
- package/dist/features/render-graph-compute.d.ts +13 -0
- package/dist/features/render-graph-compute.d.ts.map +1 -0
- package/dist/features/render-graph-contribution.d.ts +12 -0
- package/dist/features/render-graph-contribution.d.ts.map +1 -0
- package/dist/features/render-graph-raster.d.ts +38 -0
- package/dist/features/render-graph-raster.d.ts.map +1 -0
- package/dist/features/render-graph-resources.d.ts +11 -0
- package/dist/features/render-graph-resources.d.ts.map +1 -0
- package/dist/features/targets.d.ts +32 -0
- package/dist/features/targets.d.ts.map +1 -0
- package/dist/features/types.d.ts +68 -0
- package/dist/features/types.d.ts.map +1 -0
- package/dist/features/vocabulary.d.ts +14 -0
- package/dist/features/vocabulary.d.ts.map +1 -0
- package/dist/fullscreen-post-process-pass.d.ts +157 -0
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -0
- package/dist/glyph-text-layout-system.d.ts +19 -0
- package/dist/glyph-text-layout-system.d.ts.map +1 -0
- package/dist/gpu-driven/batch-topology.d.ts +55 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +51 -0
- package/dist/gpu-driven/production-raster.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +85 -0
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -0
- package/dist/gpu-resource.d.ts +73 -0
- package/dist/gpu-resource.d.ts.map +1 -0
- package/dist/gpu-scene-schema.d.ts +78 -0
- package/dist/gpu-scene-schema.d.ts.map +1 -0
- package/dist/gpu-scene.d.ts +55 -0
- package/dist/gpu-scene.d.ts.map +1 -0
- package/dist/gpu-stage.d.ts +4 -0
- package/dist/gpu-stage.d.ts.map +1 -0
- package/dist/gpu-texture-usage.d.ts +6 -0
- package/dist/gpu-texture-usage.d.ts.map +1 -0
- package/dist/gpu-usage.d.ts +9 -0
- package/dist/gpu-usage.d.ts.map +1 -0
- package/dist/hdrp-buffers.d.ts +163 -0
- package/dist/hdrp-buffers.d.ts.map +1 -0
- package/dist/ibl/IblPipelineCache.d.ts +168 -0
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -0
- package/dist/ibl/skylight-bind-group.d.ts +130 -0
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +169 -0
- package/dist/index.mjs.map +1 -0
- package/dist/inspection-types.d.ts +72 -0
- package/dist/inspection-types.d.ts.map +1 -0
- package/dist/instance-buffer-cache.d.ts +56 -0
- package/dist/instance-buffer-cache.d.ts.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.mjs +3 -0
- package/dist/internal.mjs.map +1 -0
- package/dist/lifecycle.d.ts +62 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/light-buffer-layout.d.ts +164 -0
- package/dist/light-buffer-layout.d.ts.map +1 -0
- package/dist/materials.d.ts +47 -0
- package/dist/materials.d.ts.map +1 -0
- package/dist/mesh-material-bindings.d.ts +43 -0
- package/dist/mesh-material-bindings.d.ts.map +1 -0
- package/dist/pbr-pipeline.d.ts +301 -0
- package/dist/pbr-pipeline.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts +5 -0
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts +31 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
- package/dist/pipeline/standard-profile.d.ts +40 -0
- package/dist/pipeline/standard-profile.d.ts.map +1 -0
- package/dist/pipeline-builder.d.ts +122 -0
- package/dist/pipeline-builder.d.ts.map +1 -0
- package/dist/pipeline-spec-types.d.ts +24 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -0
- package/dist/pipeline-spec.d.ts +367 -0
- package/dist/pipeline-spec.d.ts.map +1 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/points-lines.bench.d.ts +2 -0
- package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +1 -0
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +1 -0
- package/dist/points-lines/admission.d.ts +36 -0
- package/dist/points-lines/admission.d.ts.map +1 -0
- package/dist/points-lines/bounds.d.ts +8 -0
- package/dist/points-lines/bounds.d.ts.map +1 -0
- package/dist/points-lines/expansion-cache.d.ts +28 -0
- package/dist/points-lines/expansion-cache.d.ts.map +1 -0
- package/dist/points-lines/inspection.d.ts +53 -0
- package/dist/points-lines/inspection.d.ts.map +1 -0
- package/dist/points-lines/prepare.d.ts +67 -0
- package/dist/points-lines/prepare.d.ts.map +1 -0
- package/dist/points-lines/record.d.ts +60 -0
- package/dist/points-lines/record.d.ts.map +1 -0
- package/dist/points-lines/snapshot.d.ts +49 -0
- package/dist/points-lines/snapshot.d.ts.map +1 -0
- package/dist/post-process-errors.d.ts +182 -0
- package/dist/post-process-errors.d.ts.map +1 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts +59 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -0
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +2 -0
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +2 -0
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts +2 -0
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +121 -0
- package/dist/record/frame-lighting.d.ts.map +1 -0
- package/dist/record/frame-snapshot.d.ts +429 -0
- package/dist/record/frame-snapshot.d.ts.map +1 -0
- package/dist/record/frame-targets.d.ts +20 -0
- package/dist/record/frame-targets.d.ts.map +1 -0
- package/dist/record/frame.d.ts +71 -0
- package/dist/record/frame.d.ts.map +1 -0
- package/dist/record/helpers.d.ts +102 -0
- package/dist/record/helpers.d.ts.map +1 -0
- package/dist/record/main-pass-geometry.d.ts +28 -0
- package/dist/record/main-pass-geometry.d.ts.map +1 -0
- package/dist/record/main-pass-material.d.ts +204 -0
- package/dist/record/main-pass-material.d.ts.map +1 -0
- package/dist/record/main-pass-sprite-draws.d.ts +43 -0
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -0
- package/dist/record/main-pass.d.ts +20 -0
- package/dist/record/main-pass.d.ts.map +1 -0
- package/dist/record/mesh-ssbo.d.ts +446 -0
- package/dist/record/mesh-ssbo.d.ts.map +1 -0
- package/dist/record/render-context.d.ts +252 -0
- package/dist/record/render-context.d.ts.map +1 -0
- package/dist/record/shadow-pass.d.ts +52 -0
- package/dist/record/shadow-pass.d.ts.map +1 -0
- package/dist/record/skybox-post-pass.d.ts +33 -0
- package/dist/record/skybox-post-pass.d.ts.map +1 -0
- package/dist/record/typed-frame-graph.d.ts +35 -0
- package/dist/record/typed-frame-graph.d.ts.map +1 -0
- package/dist/record/view-ubo.d.ts +45 -0
- package/dist/record/view-ubo.d.ts.map +1 -0
- package/dist/render-contract.d.ts +424 -0
- package/dist/render-contract.d.ts.map +1 -0
- package/dist/render-data.d.ts +143 -0
- package/dist/render-data.d.ts.map +1 -0
- package/dist/render-graph-primitives.d.ts +76 -0
- package/dist/render-graph-primitives.d.ts.map +1 -0
- package/dist/render-pipeline.d.ts +110 -0
- package/dist/render-pipeline.d.ts.map +1 -0
- package/dist/render-system-extract.d.ts +868 -0
- package/dist/render-system-extract.d.ts.map +1 -0
- package/dist/render-system.d.ts +125 -0
- package/dist/render-system.d.ts.map +1 -0
- package/dist/scene/render-scene-types.d.ts +61 -0
- package/dist/scene/render-scene-types.d.ts.map +1 -0
- package/dist/scene/render-scene.d.ts +112 -0
- package/dist/scene/render-scene.d.ts.map +1 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts +30 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -0
- package/dist/shadow-atlas.d.ts +117 -0
- package/dist/shadow-atlas.d.ts.map +1 -0
- package/dist/ssao-buffers.d.ts +50 -0
- package/dist/ssao-buffers.d.ts.map +1 -0
- package/dist/ssao-config.d.ts +28 -0
- package/dist/ssao-config.d.ts.map +1 -0
- package/dist/systems/active-camera.d.ts +53 -0
- package/dist/systems/active-camera.d.ts.map +1 -0
- package/dist/systems/pass-selector.d.ts +24 -0
- package/dist/systems/pass-selector.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +49 -0
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -0
- package/dist/systems/skin-palette-types.d.ts +14 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -0
- package/dist/systems/transparent-sort-config.d.ts +112 -0
- package/dist/systems/transparent-sort-config.d.ts.map +1 -0
- package/dist/tilemap-chunk-extract-system.d.ts +143 -0
- package/dist/tilemap-chunk-extract-system.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +57 -0
- package/dist/typed-render-graph-primitives.d.ts.map +1 -0
- package/dist/typed-shadow-passes.d.ts +11 -0
- package/dist/typed-shadow-passes.d.ts.map +1 -0
- package/package.json +94 -0
- package/src/__tests__/authoring-path.unit.test.ts +23 -0
- package/src/__tests__/backend-selection-rhi-capture.test-d.ts +21 -0
- package/src/__tests__/callback-inference.test-d.ts +8 -0
- package/src/__tests__/cluster-binner.test.ts +272 -0
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +20 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +23 -0
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
- package/src/__tests__/direct-extract-consumer-contract.test-d.ts +23 -0
- package/src/__tests__/direct-light-snapshot.unit.test.ts +61 -0
- package/src/__tests__/factory-contract.integration.test.ts +280 -0
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +15 -0
- package/src/__tests__/frame-observation.contract.test.ts +112 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
- package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +167 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +350 -0
- package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +12 -0
- package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +16 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +436 -0
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +87 -0
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +271 -0
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +290 -0
- package/src/__tests__/gpu-driven-view-reference.ts +111 -0
- package/src/__tests__/gpu-driven-view.browser.test.ts +30 -0
- package/src/__tests__/gpu-driven-view.dawn.test.ts +28 -0
- package/src/__tests__/gpu-driven-view.unit.test.ts +199 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +59 -0
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +308 -0
- package/src/__tests__/gpu-scene-render-graph.browser.test.ts +19 -0
- package/src/__tests__/gpu-scene-render-graph.dawn.test.ts +19 -0
- package/src/__tests__/gpu-scene-schema.unit.test.ts +16 -0
- package/src/__tests__/gpu-scene.dawn.test.ts +205 -0
- package/src/__tests__/gpu-scene.unit.test.ts +147 -0
- package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
- package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +92 -0
- package/src/__tests__/injection-kind-owner.test-d.ts +14 -0
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +728 -0
- package/src/__tests__/light-buffer-layout.unit.test.ts +40 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +24 -0
- package/src/__tests__/material-cooked-projection.unit.test.ts +150 -0
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +53 -0
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +94 -0
- package/src/__tests__/material-stride-surface.unit.test.ts +32 -0
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +106 -0
- package/src/__tests__/mesh-material-bindings.unit.test.ts +89 -0
- package/src/__tests__/mesh-stride-surface.unit.test.ts +16 -0
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +157 -0
- package/src/__tests__/morph-feature-gpu-work.integration.test.ts +80 -0
- package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
- package/src/__tests__/morph-visual-evidence.integration.test.ts +80 -0
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +19 -0
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +201 -0
- package/src/__tests__/prepared-buffer-kind-owner.test-d.ts +29 -0
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +65 -0
- package/src/__tests__/prepared-graphics-generation.unit.test.ts +161 -0
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +138 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +29 -0
- package/src/__tests__/prepared-graphics-resolver.unit.test.ts +285 -0
- package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +105 -0
- package/src/__tests__/prepared-graphics-store.unit.test.ts +154 -0
- package/src/__tests__/prepared-graphics-validation.unit.test.ts +176 -0
- package/src/__tests__/profiler-default-off.test.ts +22 -0
- package/src/__tests__/profiler-phase-catalog.test.ts +66 -0
- package/src/__tests__/profiler-phase-integration.test.ts +62 -0
- package/src/__tests__/profiler-phase-token.test.ts +79 -0
- package/src/__tests__/public-surface.test-d.ts +94 -0
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +107 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +116 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +139 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +110 -0
- package/src/__tests__/render-feature-assembly.test-d.ts +43 -0
- package/src/__tests__/render-feature-context.test-d.ts +57 -0
- package/src/__tests__/render-feature-contract.test-d.ts +49 -0
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +149 -0
- package/src/__tests__/render-feature-docs.unit.test.ts +89 -0
- package/src/__tests__/render-feature-errors.unit.test.ts +47 -0
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +316 -0
- package/src/__tests__/render-feature-plan.test-d.ts +161 -0
- package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +90 -0
- package/src/__tests__/render-feature-prepared-errors.test-d.ts +79 -0
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +80 -0
- package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +72 -0
- package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +36 -0
- package/src/__tests__/render-feature-prepared-graphics.test-d.ts +74 -0
- package/src/__tests__/render-feature-prepared-graphics.unit.test.ts +121 -0
- package/src/__tests__/render-feature-public-surface.test-d.ts +57 -0
- package/src/__tests__/render-feature-retry.unit.test.ts +87 -0
- package/src/__tests__/render-feature-scheduling.unit.test.ts +110 -0
- package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +137 -0
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +146 -0
- package/src/__tests__/render-feature-visibility-context.test-d.ts +33 -0
- package/src/__tests__/render-feature-visibility-context.unit.test.ts +37 -0
- package/src/__tests__/render-feature-zero-work.unit.test.ts +76 -0
- package/src/__tests__/render-graph-compute-raster-gpu.ts +342 -0
- package/src/__tests__/render-graph-compute-raster.browser.test.ts +16 -0
- package/src/__tests__/render-graph-compute-raster.dawn.test.ts +22 -0
- package/src/__tests__/render-graph-hzb-gpu.ts +239 -0
- package/src/__tests__/render-graph-hzb.browser.test.ts +16 -0
- package/src/__tests__/render-graph-hzb.dawn.test.ts +23 -0
- package/src/__tests__/render-graph-primitives.unit.test.ts +22 -0
- package/src/__tests__/render-graph-storage-indirect-gpu.ts +162 -0
- package/src/__tests__/render-graph-storage-indirect.browser.test.ts +21 -0
- package/src/__tests__/render-graph-storage-indirect.dawn.test.ts +28 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +168 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +121 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +58 -0
- package/src/__tests__/rhi-backend-package-boundary.unit.test.ts +11 -0
- package/src/__tests__/scriptable-pack-consumer.test-d.ts +14 -0
- package/src/__tests__/shader-stage-surface.unit.test.ts +43 -0
- package/src/__tests__/ssao-config.unit.test.ts +36 -0
- package/src/__tests__/ssao-kernel-surface.unit.test.ts +14 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
- package/src/__tests__/standard-descriptors.test-d.ts +22 -0
- package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
- package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
- package/src/__tests__/surface-configuration.unit.test.ts +91 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +58 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +223 -0
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +42 -0
- package/src/__tests__/urp-pipeline.unit.test.ts +14 -0
- package/src/__tests__/vertex-color-pipeline.unit.test.ts +132 -0
- package/src/__tests__/vertex-layout-consumer.unit.test.ts +25 -0
- package/src/__tests__/visibility-diagnostics.integration.test.ts +62 -0
- package/src/__tests__/visibility-extract.integration.test.ts +98 -0
- package/src/__tests__/visibility-extract.perf.test.ts +130 -0
- package/src/__tests__/visibility-feature-dedup.integration.test.ts +55 -0
- package/src/__tests__/visibility-hidden-report.unit.test.ts +36 -0
- package/src/__tests__/visibility-instances.integration.test.ts +46 -0
- package/src/__tests__/visibility-multi-world.integration.test.ts +86 -0
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +168 -0
- package/src/__tests__/visibility-producer-matrix.unit.test.ts +96 -0
- package/src/__tests__/visibility-public-surface.test-d.ts +27 -0
- package/src/__tests__/visibility-resolver.unit.test.ts +85 -0
- package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
- package/src/__tests__/visibility-snapshot-contract.unit.test.ts +60 -0
- package/src/__tests__/vocabulary.unit.test.ts +21 -0
- package/src/assembly/backend-contract.ts +57 -0
- package/src/assembly/factory.ts +8130 -0
- package/src/assembly/host-contract.ts +101 -0
- package/src/assembly/material/assembly.ts +48 -0
- package/src/assembly/material/pipeline-projection.ts +63 -0
- package/src/assets/asset-decoders.ts +158 -0
- package/src/assets/render-asset-port.ts +44 -0
- package/src/assets/resolve-render-asset.ts +13 -0
- package/src/authoring.ts +17 -0
- package/src/cluster-binner.ts +700 -0
- package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
- package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
- package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
- package/src/components/__tests__/schema-parity.unit.test.ts +25 -0
- package/src/components/__tests__/visibility-schema.unit.test.ts +35 -0
- package/src/components/camera.ts +512 -0
- package/src/components/directional-light.ts +120 -0
- package/src/components/glyph-text.ts +64 -0
- package/src/components/index.ts +54 -0
- package/src/components/instances.ts +206 -0
- package/src/components/layer.ts +69 -0
- package/src/components/light-helpers.ts +188 -0
- package/src/components/lines.ts +18 -0
- package/src/components/mesh-filter.ts +60 -0
- package/src/components/mesh-renderer.ts +61 -0
- package/src/components/point-light-shadow.ts +43 -0
- package/src/components/point-light.ts +65 -0
- package/src/components/points.ts +40 -0
- package/src/components/post-process-params.ts +35 -0
- package/src/components/scene-instance.ts +193 -0
- package/src/components/skybox-background.ts +103 -0
- package/src/components/skylight.ts +97 -0
- package/src/components/sort-key.ts +75 -0
- package/src/components/spot-light.ts +124 -0
- package/src/components/sprite-animation.ts +168 -0
- package/src/components/sprite-instances.ts +179 -0
- package/src/components/sprite-playback-mode.ts +79 -0
- package/src/components/sprite-region-override.ts +105 -0
- package/src/components/tile-layer.ts +167 -0
- package/src/components/tilemap.ts +48 -0
- package/src/components/visibility.ts +53 -0
- package/src/construct-renderer.ts +67 -0
- package/src/debug-draw-glue.ts +48 -0
- package/src/device/device-scope.ts +306 -0
- package/src/device/gpu-residency.ts +1822 -0
- package/src/device/resource-types.ts +20 -0
- package/src/engine-metrics.ts +82 -0
- package/src/errors/ecs-validation.ts +16 -0
- package/src/errors/index.ts +3 -0
- package/src/errors/recover.ts +161 -0
- package/src/errors/render.ts +1284 -0
- package/src/extract/visibility.ts +120 -0
- package/src/features/fullscreen.ts +46 -0
- package/src/features/host.ts +1363 -0
- package/src/features/morph/morph-feature.ts +377 -0
- package/src/features/plan.ts +447 -0
- package/src/features/prepared-gpu-work.ts +959 -0
- package/src/features/prepared-graphics-store.ts +449 -0
- package/src/features/prepared-graphics.ts +420 -0
- package/src/features/render-graph-compute.ts +69 -0
- package/src/features/render-graph-contribution.ts +75 -0
- package/src/features/render-graph-raster.ts +332 -0
- package/src/features/render-graph-resources.ts +38 -0
- package/src/features/targets.ts +70 -0
- package/src/features/types.ts +103 -0
- package/src/features/vocabulary.ts +24 -0
- package/src/fullscreen-post-process-pass.ts +363 -0
- package/src/glyph-text-layout-system.ts +421 -0
- package/src/gpu-driven/batch-topology.ts +245 -0
- package/src/gpu-driven/production-raster.ts +695 -0
- package/src/gpu-driven/view-gpu.ts +703 -0
- package/src/gpu-resource.ts +159 -0
- package/src/gpu-scene-schema.ts +136 -0
- package/src/gpu-scene.ts +722 -0
- package/src/gpu-stage.ts +9 -0
- package/src/gpu-texture-usage.ts +12 -0
- package/src/gpu-usage.ts +14 -0
- package/src/hdrp-buffers.ts +480 -0
- package/src/ibl/IblPipelineCache.ts +1006 -0
- package/src/ibl/skylight-bind-group.ts +513 -0
- package/src/index.ts +129 -0
- package/src/inspection-types.ts +80 -0
- package/src/instance-buffer-cache.ts +95 -0
- package/src/internal.ts +9 -0
- package/src/lifecycle.ts +168 -0
- package/src/light-buffer-layout.ts +346 -0
- package/src/materials.ts +214 -0
- package/src/mesh-material-bindings.ts +103 -0
- package/src/pbr-pipeline.ts +1137 -0
- package/src/pipeline/standard-forward-lane.ts +229 -0
- package/src/pipeline/standard-pipeline.ts +555 -0
- package/src/pipeline/standard-profile.ts +65 -0
- package/src/pipeline-builder.ts +382 -0
- package/src/pipeline-spec-types.ts +28 -0
- package/src/pipeline-spec.ts +1231 -0
- package/src/plugin.ts +69 -0
- package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
- package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
- package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
- package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
- package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
- package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
- package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
- package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
- package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
- package/src/points-lines/admission.ts +238 -0
- package/src/points-lines/bounds.ts +23 -0
- package/src/points-lines/expansion-cache.ts +215 -0
- package/src/points-lines/inspection.ts +97 -0
- package/src/points-lines/prepare.ts +177 -0
- package/src/points-lines/record.ts +125 -0
- package/src/points-lines/snapshot.ts +130 -0
- package/src/post-process-errors.ts +302 -0
- package/src/prepare/prepared-graphics-resolver.ts +456 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +41 -0
- package/src/record/__tests__/material-slot-plan.unit.test.ts +44 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
- package/src/record/__tests__/video-texture-view.unit.test.ts +90 -0
- package/src/record/frame-lighting.ts +1074 -0
- package/src/record/frame-snapshot.ts +500 -0
- package/src/record/frame-targets.ts +137 -0
- package/src/record/frame.ts +1598 -0
- package/src/record/helpers.ts +284 -0
- package/src/record/main-pass-geometry.ts +1065 -0
- package/src/record/main-pass-material.ts +1043 -0
- package/src/record/main-pass-sprite-draws.ts +1137 -0
- package/src/record/main-pass.ts +610 -0
- package/src/record/mesh-ssbo.ts +885 -0
- package/src/record/render-context.ts +384 -0
- package/src/record/shadow-pass.ts +698 -0
- package/src/record/skybox-post-pass.ts +593 -0
- package/src/record/typed-frame-graph.ts +461 -0
- package/src/record/view-ubo.ts +222 -0
- package/src/render-contract.ts +582 -0
- package/src/render-data.ts +385 -0
- package/src/render-graph-primitives.ts +811 -0
- package/src/render-pipeline.ts +259 -0
- package/src/render-system-extract.ts +4585 -0
- package/src/render-system.ts +1933 -0
- package/src/scene/render-scene-types.ts +67 -0
- package/src/scene/render-scene.ts +1087 -0
- package/src/scene-instances/post-spawn-resolve-joints.ts +165 -0
- package/src/shadow-atlas.ts +244 -0
- package/src/ssao-buffers.ts +334 -0
- package/src/ssao-config.ts +61 -0
- package/src/systems/active-camera.ts +116 -0
- package/src/systems/pass-selector.ts +49 -0
- package/src/systems/skin-palette-allocator.ts +251 -0
- package/src/systems/skin-palette-types.ts +14 -0
- package/src/systems/transparent-sort-config.ts +233 -0
- package/src/tilemap-chunk-extract-system.ts +1290 -0
- package/src/typed-render-graph-primitives.ts +541 -0
- package/src/typed-shadow-passes.ts +165 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
// @forgeax/engine-runtime - Skin palette buffer allocator (M2 / T-24).
|
|
2
|
+
//
|
|
3
|
+
// Per-renderer mutable state: vertex-stage palette buffer(s) holding
|
|
4
|
+
// pre-multiplied joint matrices (M_i = joint_world * IBM_i) for every
|
|
5
|
+
// skinned entity in a frame. Two backends (split at construction by
|
|
6
|
+
// `useStorageBuffer`):
|
|
7
|
+
//
|
|
8
|
+
// STORAGE PATH (`useStorageBuffer = true`, `maxStorageBuffersPerShaderStage
|
|
9
|
+
// >= 8` — i.e. WebGPU spec default device).
|
|
10
|
+
// One shared GPU buffer grows at 1.5x (Bevy skin.rs alignment,
|
|
11
|
+
// plan-strategy D-4). Every entity's slice is `{ buffer: shared,
|
|
12
|
+
// byteOffset: cursor }`. Record-stage builds ONE BG against the
|
|
13
|
+
// shared buffer + `bindingWindowBytes` entry size; per-draw
|
|
14
|
+
// `setBindGroup(_, bg, [_, dynOffset = slice.byteOffset])` slides
|
|
15
|
+
// the static window across the buffer. WebGPU rule
|
|
16
|
+
// `dynOffset + entry.size <= buffer.size` is satisfied because the
|
|
17
|
+
// allocator extends `buffer.size` to `cursor + bindingWindowBytes`
|
|
18
|
+
// after every slice.
|
|
19
|
+
//
|
|
20
|
+
// UNIFORM PATH (`useStorageBuffer = false`, browser uniform fallback —
|
|
21
|
+
// `maxStorageBuffersPerShaderStage = 0`).
|
|
22
|
+
// `maxUniformBufferBindingSize` floor is 16 KiB; the static binding
|
|
23
|
+
// window alone is 16320 B, leaving room for ZERO additional
|
|
24
|
+
// entities behind a shared dynOffset. The shared-BG model collapses,
|
|
25
|
+
// so each entity gets its OWN small UBO of size = `bindingWindowBytes`
|
|
26
|
+
// (= MAX_JOINTS * 64 = 16320, which is `<= maxUniformBufferBindingSize`).
|
|
27
|
+
// Slice returns `{ buffer: per-entity, byteOffset: 0 }`. Record-stage
|
|
28
|
+
// BG cache key includes `slice.buffer` so each entity gets its own
|
|
29
|
+
// BG (cached per-buffer pointer; pool reuse keeps createBuffer
|
|
30
|
+
// amortized across frames).
|
|
31
|
+
//
|
|
32
|
+
// Concept that does NOT branch by path: `bindingWindowBytes`. It is
|
|
33
|
+
// the static `pbr-skin-mesh-array-bgl @binding(1)` BG entry size,
|
|
34
|
+
// identical on both paths (WGSL declares the same layout). Record-
|
|
35
|
+
// stage uses it verbatim when constructing the BG. dynOffset[1]
|
|
36
|
+
// on the uniform path is always 0 (entry size already equals buffer
|
|
37
|
+
// size); on the storage path it walks 0, 1536, 3072, ... .
|
|
38
|
+
//
|
|
39
|
+
// CPU pre-multiply (path-agnostic): writeJointPalette(slice, ibm, jointWorld)
|
|
40
|
+
// -> mat4 per joint: M_i = joint_world_i * IBM_i
|
|
41
|
+
// -> queue.writeBuffer(slice.buffer, slice.byteOffset, payload).
|
|
42
|
+
//
|
|
43
|
+
// feat-20260523-skin-skeleton-animation M2 / T-24;
|
|
44
|
+
// feat-20260612-skin-palette-per-frame-upload M6 (uniform fallback split).
|
|
45
|
+
|
|
46
|
+
import type { Mat4 } from '@forgeax/engine-math';
|
|
47
|
+
import { mat4 } from '@forgeax/engine-math';
|
|
48
|
+
import type { Buffer, RhiDevice } from '@forgeax/engine-rhi';
|
|
49
|
+
import { SkinPaletteOverflowError } from '../errors/render';
|
|
50
|
+
import {
|
|
51
|
+
GPU_BUFFER_USAGE_COPY_DST,
|
|
52
|
+
GPU_BUFFER_USAGE_STORAGE,
|
|
53
|
+
GPU_BUFFER_USAGE_UNIFORM,
|
|
54
|
+
} from '../gpu-usage';
|
|
55
|
+
import type { SkinPaletteSlice } from './skin-palette-types';
|
|
56
|
+
|
|
57
|
+
const MAT4_BYTES = 64; // 16 f32 * 4 bytes
|
|
58
|
+
// MAX_JOINTS = 255 matches `pbr-skin-mesh-array-bgl @binding(1)` static BG
|
|
59
|
+
// entry size: 255 * 64 = 16320 B. The number is the MAX joints a single
|
|
60
|
+
// skinned entity may have. On the storage path the shared buffer holds
|
|
61
|
+
// many entities back-to-back; on the uniform path each entity owns one
|
|
62
|
+
// 16320 B buffer.
|
|
63
|
+
const MAX_JOINTS = 255;
|
|
64
|
+
const BINDING_WINDOW_BYTES = MAX_JOINTS * MAT4_BYTES; // 16320
|
|
65
|
+
// WebGPU `minStorageBufferOffsetAlignment` default (spec floor) — every
|
|
66
|
+
// dynamic offset passed to setBindGroup must be a multiple of this. The shared
|
|
67
|
+
// storage path packs many entities back-to-back, so each slice's start must be
|
|
68
|
+
// rounded up to this boundary; otherwise a slice whose predecessor's joint
|
|
69
|
+
// footprint (jointCount * 64) is not a multiple of 256 (e.g. 33 joints -> 2112)
|
|
70
|
+
// lands on an unaligned offset and trips `Dynamic Offset[1] is not 256 byte
|
|
71
|
+
// aligned` at draw time.
|
|
72
|
+
const PALETTE_OFFSET_ALIGN = 256;
|
|
73
|
+
|
|
74
|
+
export interface SkinPaletteAllocator {
|
|
75
|
+
/**
|
|
76
|
+
* Static BG entry size for `pbr-skin-mesh-array-bgl @binding(1)`. Always
|
|
77
|
+
* `MAX_JOINTS * 64 = 16320`; consumers (record stage) bind this size
|
|
78
|
+
* when building the BG. Path-independent.
|
|
79
|
+
*/
|
|
80
|
+
readonly bindingWindowBytes: number;
|
|
81
|
+
/**
|
|
82
|
+
* True when this allocator is in storage-path mode (single shared
|
|
83
|
+
* buffer + dynOffset). False on the uniform fallback (per-entity
|
|
84
|
+
* buffer + dynOffset always 0). Record-stage reads this only for
|
|
85
|
+
* shape assertions in tests; production code branches via
|
|
86
|
+
* `slice.buffer` identity (shared vs per-entity), not this flag.
|
|
87
|
+
*/
|
|
88
|
+
readonly useStorageBuffer: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Allocate a slice for `jointCount` joints. Returns the buffer + byte
|
|
91
|
+
* offset the record stage should bind. Storage path returns the same
|
|
92
|
+
* shared buffer for every call; uniform path mints (or pool-reuses) a
|
|
93
|
+
* per-entity buffer and returns it with `byteOffset: 0`. Both paths
|
|
94
|
+
* guarantee BG validation: storage extends the shared buffer's size,
|
|
95
|
+
* uniform sizes the per-entity buffer to exactly `bindingWindowBytes`.
|
|
96
|
+
*
|
|
97
|
+
* @throws if storage path buffer would exceed
|
|
98
|
+
* `device.limits.maxStorageBufferBindingSize`
|
|
99
|
+
*/
|
|
100
|
+
allocateSlice(jointCount: number): SkinPaletteSlice;
|
|
101
|
+
/**
|
|
102
|
+
* Write joint matrices into the slice's buffer at the slice's offset.
|
|
103
|
+
* Computes M_i = jointWorldTransforms[i] * ibm[i] per joint.
|
|
104
|
+
*
|
|
105
|
+
* `jointWorlds[i]` is taken straight from `Skin.joints[i]` entity's
|
|
106
|
+
* `Transform.world` view (a 16-float column-major Float32Array
|
|
107
|
+
* written by propagateTransforms); zero recompose, premultiplies
|
|
108
|
+
* directly against the IBM.
|
|
109
|
+
*/
|
|
110
|
+
writeJointPalette(
|
|
111
|
+
slice: SkinPaletteSlice,
|
|
112
|
+
ibms: readonly Float32Array[],
|
|
113
|
+
jointWorlds: readonly Mat4[],
|
|
114
|
+
): void;
|
|
115
|
+
/**
|
|
116
|
+
* Reset for next frame. Storage path: cursor rewinds, shared buffer
|
|
117
|
+
* stays. Uniform path: per-entity buffer cursor rewinds (pool entries
|
|
118
|
+
* stay allocated and round-robin to the next frame's first entity).
|
|
119
|
+
*/
|
|
120
|
+
resetForFrame(): void;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function createSkinPaletteAllocator(
|
|
124
|
+
device: RhiDevice,
|
|
125
|
+
maxBindingSize: number,
|
|
126
|
+
useStorageBuffer = true,
|
|
127
|
+
): SkinPaletteAllocator {
|
|
128
|
+
// Storage path: shared buffer state.
|
|
129
|
+
let storageBuffer: Buffer | null = null;
|
|
130
|
+
let storageCapacity = 0;
|
|
131
|
+
let storageCursor = 0;
|
|
132
|
+
|
|
133
|
+
// Uniform path: per-entity buffer pool. `pool` is the pre-allocated
|
|
134
|
+
// 16320 B UBO ring; `poolCursor` advances per allocateSlice within a
|
|
135
|
+
// frame and rewinds in resetForFrame, so a 3-entity scene reuses 3
|
|
136
|
+
// entries across frames (createBuffer fires only when the per-frame
|
|
137
|
+
// entity count grows past the historical max). 16320 B / entry
|
|
138
|
+
// bounded by maxUniformBufferBindingSize (>= 16384 by spec floor).
|
|
139
|
+
const pool: Buffer[] = [];
|
|
140
|
+
let poolCursor = 0;
|
|
141
|
+
|
|
142
|
+
function ensureStorageCapacity(needed: number): void {
|
|
143
|
+
if (storageBuffer !== null && needed <= storageCapacity) return;
|
|
144
|
+
let newCapacity = storageCapacity === 0 ? BINDING_WINDOW_BYTES : storageCapacity;
|
|
145
|
+
while (newCapacity < needed) {
|
|
146
|
+
// 1.5x grow, then next multiple of 256 for alignment (plan-strategy D-4).
|
|
147
|
+
newCapacity = (newCapacity + (newCapacity >> 1) + 255) & ~255;
|
|
148
|
+
}
|
|
149
|
+
if (newCapacity > maxBindingSize) {
|
|
150
|
+
throw new SkinPaletteOverflowError(newCapacity, maxBindingSize);
|
|
151
|
+
}
|
|
152
|
+
const bufRes = device.createBuffer({
|
|
153
|
+
label: 'skin-palette',
|
|
154
|
+
size: newCapacity,
|
|
155
|
+
usage: GPU_BUFFER_USAGE_STORAGE | GPU_BUFFER_USAGE_COPY_DST,
|
|
156
|
+
mappedAtCreation: false,
|
|
157
|
+
});
|
|
158
|
+
if (!bufRes.ok) throw bufRes.error;
|
|
159
|
+
storageBuffer = bufRes.value;
|
|
160
|
+
storageCapacity = newCapacity;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function acquirePoolBuffer(): Buffer {
|
|
164
|
+
if (poolCursor < pool.length) {
|
|
165
|
+
const reused = pool[poolCursor];
|
|
166
|
+
// biome-ignore lint/style/noNonNullAssertion: poolCursor < pool.length guarantees the slot is set
|
|
167
|
+
return reused!;
|
|
168
|
+
}
|
|
169
|
+
if (BINDING_WINDOW_BYTES > maxBindingSize) {
|
|
170
|
+
throw new SkinPaletteOverflowError(BINDING_WINDOW_BYTES, maxBindingSize);
|
|
171
|
+
}
|
|
172
|
+
const bufRes = device.createBuffer({
|
|
173
|
+
label: 'skin-palette',
|
|
174
|
+
size: BINDING_WINDOW_BYTES,
|
|
175
|
+
usage: GPU_BUFFER_USAGE_UNIFORM | GPU_BUFFER_USAGE_COPY_DST,
|
|
176
|
+
mappedAtCreation: false,
|
|
177
|
+
});
|
|
178
|
+
if (!bufRes.ok) throw bufRes.error;
|
|
179
|
+
pool.push(bufRes.value);
|
|
180
|
+
return bufRes.value;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function allocateSlice(jointCount: number): SkinPaletteSlice {
|
|
184
|
+
if (useStorageBuffer) {
|
|
185
|
+
// Storage path: shared buffer + dynOffset window.
|
|
186
|
+
// WebGPU validates `dynOffset + entry.size <= buffer.size` per
|
|
187
|
+
// setBindGroup, so the buffer must extend a full BINDING_WINDOW_BYTES
|
|
188
|
+
// past `byteOffset` -- not just `jointCount * 64`. Pre-M6 used the
|
|
189
|
+
// latter and tripped `Dynamic Offset[1] out of bounds` on entity 2+.
|
|
190
|
+
const offset = storageCursor;
|
|
191
|
+
const needed = offset + BINDING_WINDOW_BYTES;
|
|
192
|
+
ensureStorageCapacity(needed);
|
|
193
|
+
// biome-ignore lint/style/noNonNullAssertion: ensureStorageCapacity throws if buffer cannot be created
|
|
194
|
+
const buffer = storageBuffer!;
|
|
195
|
+
// Cursor advances by the actual joint footprint, then rounds up to
|
|
196
|
+
// PALETTE_OFFSET_ALIGN so the NEXT slice's byteOffset stays a valid
|
|
197
|
+
// dynamic offset (WebGPU requires 256-byte alignment). Slices still pack
|
|
198
|
+
// near-tightly (at most 255 B slack between them). Only the last slice's
|
|
199
|
+
// window may overhang into uninitialized buffer space, which is benign
|
|
200
|
+
// (shader reads only `jointCount` matrices).
|
|
201
|
+
storageCursor =
|
|
202
|
+
(offset + jointCount * MAT4_BYTES + (PALETTE_OFFSET_ALIGN - 1)) &
|
|
203
|
+
~(PALETTE_OFFSET_ALIGN - 1);
|
|
204
|
+
return { jointCount, byteOffset: offset, buffer };
|
|
205
|
+
}
|
|
206
|
+
// Uniform fallback: each slice gets its own 16320 B UBO.
|
|
207
|
+
const buffer = acquirePoolBuffer();
|
|
208
|
+
poolCursor += 1;
|
|
209
|
+
return { jointCount, byteOffset: 0, buffer };
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function writeJointPalette(
|
|
213
|
+
slice: SkinPaletteSlice,
|
|
214
|
+
ibms: readonly Float32Array[],
|
|
215
|
+
jointWorlds: readonly Mat4[],
|
|
216
|
+
): void {
|
|
217
|
+
const count = Math.min(slice.jointCount, ibms.length, jointWorlds.length);
|
|
218
|
+
if (count === 0) return;
|
|
219
|
+
const payload = new Float32Array(count * 16);
|
|
220
|
+
const temp = mat4.create();
|
|
221
|
+
const ibm = mat4.create();
|
|
222
|
+
for (let i = 0; i < count; i++) {
|
|
223
|
+
const ibmFlat = ibms[i];
|
|
224
|
+
const jw = jointWorlds[i];
|
|
225
|
+
if (ibmFlat === undefined || jw === undefined) continue;
|
|
226
|
+
for (let k = 0; k < 16; k++) {
|
|
227
|
+
ibm[k] = ibmFlat[k] ?? 0;
|
|
228
|
+
}
|
|
229
|
+
mat4.multiply(temp, jw, ibm);
|
|
230
|
+
const base = i * 16;
|
|
231
|
+
for (let j = 0; j < 16; j++) {
|
|
232
|
+
payload[base + j] = temp[j] ?? 0;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const res = device.queue.writeBuffer(slice.buffer, slice.byteOffset, payload);
|
|
236
|
+
if (!res.ok) throw res.error;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function resetForFrame(): void {
|
|
240
|
+
storageCursor = 0;
|
|
241
|
+
poolCursor = 0;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return {
|
|
245
|
+
bindingWindowBytes: BINDING_WINDOW_BYTES,
|
|
246
|
+
useStorageBuffer,
|
|
247
|
+
allocateSlice,
|
|
248
|
+
writeJointPalette,
|
|
249
|
+
resetForFrame,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Buffer } from '@forgeax/engine-rhi';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Per-draw palette slice metadata shared by the extract producer and the
|
|
5
|
+
* palette allocator. The slice carries the buffer identity so storage and
|
|
6
|
+
* uniform fallback paths converge at the record binding owner.
|
|
7
|
+
*/
|
|
8
|
+
export interface SkinPaletteSlice {
|
|
9
|
+
readonly jointCount: number;
|
|
10
|
+
/** Byte offset into buffer; uniform fallback slices always use zero. */
|
|
11
|
+
readonly byteOffset: number;
|
|
12
|
+
/** GPU buffer containing the slice's joint matrices. */
|
|
13
|
+
readonly buffer: Buffer;
|
|
14
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// @forgeax/engine-runtime - TransparentSortConfig KV resource + helpers.
|
|
2
|
+
//
|
|
3
|
+
// feat-20260520-2d-sprite-layer-mvp M-2 w14 / requirements AC-08 + AC-18
|
|
4
|
+
// path (2)/(3) + AC-19 derivation audit (5).
|
|
5
|
+
//
|
|
6
|
+
// Surface:
|
|
7
|
+
// - interface TransparentSortConfig { mode: number; yzAlpha: number }
|
|
8
|
+
// - constant TRANSPARENT_SORT_CONFIG_KEY = 'TransparentSortConfig'
|
|
9
|
+
// - constants TRANSPARENT_SORT_MODE_LAYER_Z = 0 (horizontal-z)
|
|
10
|
+
// TRANSPARENT_SORT_MODE_LAYER_Y = 1 (Y-sort)
|
|
11
|
+
// TRANSPARENT_SORT_MODE_LAYER_YZ = 2 (Y-Z blend)
|
|
12
|
+
// - helper getTransparentSortConfig(world): TransparentSortConfig
|
|
13
|
+
// - helper setTransparentSortConfig(world, cfg):
|
|
14
|
+
// Result<void, ResourceInvalidValueError>
|
|
15
|
+
//
|
|
16
|
+
// 5-view selection table (charter F1 progressive disclosure for AI users
|
|
17
|
+
// reading IDE hover on this header; same SSOT mirrored in
|
|
18
|
+
// apps/hello/sprite/README.md M-4 w33):
|
|
19
|
+
//
|
|
20
|
+
// | view | mode | yzAlpha | sortValue formula |
|
|
21
|
+
// |:------------------|:----:|:-------:|:--------------------------------|
|
|
22
|
+
// | horizontal (side) | 0 | --- | posZ |
|
|
23
|
+
// | top-down | 1 | --- | -(posY - pivot.y * size.y) |
|
|
24
|
+
// | Don't Starve | 2 | 1.0 | (posY - pivot.y * size.y) + posZ|
|
|
25
|
+
// | isometric | 2 | 0.5 | (posY - pivot.y * size.y) + 0.5*posZ |
|
|
26
|
+
// | JRPG (foot pivot) | 1 | --- | -(posY - pivot.y * size.y) |
|
|
27
|
+
//
|
|
28
|
+
// AC-18 path (2): @fallback getTransparentSortConfig KV missing returns
|
|
29
|
+
// default; no warn; no throw (legal default state, not an error state).
|
|
30
|
+
// AC-18 path (3): @fallback setTransparentSortConfig mode out-of-range
|
|
31
|
+
// does NOT silently coerce to mode=0 — returns Result.err with the
|
|
32
|
+
// 4 SSOT fields locked by plan-strategy D-4 so AI users can self-repair
|
|
33
|
+
// via .code / .expected / .hint / .detail property access (charter P3).
|
|
34
|
+
// AC-18 path (3) carve-out: yzAlpha range is intentionally NOT validated;
|
|
35
|
+
// mode=0 / mode=1 ignore the field entirely, mode=2 reads it, mode=3
|
|
36
|
+
// (distance) also reads it for compat but ignores it (squared-distance
|
|
37
|
+
// formula does not use yzAlpha). The silent-ignore is the documented
|
|
38
|
+
// charter P3 "legal default" boundary.
|
|
39
|
+
//
|
|
40
|
+
// @new-surface KV resource: ECS has no defineResource factory at this
|
|
41
|
+
// feat's commit time; the TS POD interface + string KV key form is the
|
|
42
|
+
// minimum-new-surface route. The world resource store
|
|
43
|
+
// (insertResource / getResource / hasResource) is reused unchanged
|
|
44
|
+
// (requirements §2.2.G derivation row 5).
|
|
45
|
+
// @derives world.hasResource / world.insertResource / world.getResource
|
|
46
|
+
// KV API (packages/ecs/src/resource.ts + world.ts: insertResource l.490,
|
|
47
|
+
// getResource l.498, hasResource l.503).
|
|
48
|
+
// @fallback getTransparentSortConfig KV missing returns
|
|
49
|
+
// { mode: 0, yzAlpha: 1.0 }; no warn; no throw.
|
|
50
|
+
// @fallback setTransparentSortConfig mode out-of-range returns Result.err
|
|
51
|
+
// with code='resource-invalid-value'; never silently coerced.
|
|
52
|
+
//
|
|
53
|
+
// charter mapping: F1 (single-import barrel + 5-view JSDoc table on
|
|
54
|
+
// hover) + P3 (structured failure on mode out-of-range; legal-default
|
|
55
|
+
// fallback distinguished from error fallback) + P4 (consistent
|
|
56
|
+
// abstraction — same world.{has,get,insert}Resource KV API as every
|
|
57
|
+
// other engine resource consumer).
|
|
58
|
+
|
|
59
|
+
import type { World } from '@forgeax/engine-ecs';
|
|
60
|
+
import { ResourceInvalidValueError } from '@forgeax/engine-ecs/projection';
|
|
61
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
62
|
+
|
|
63
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
64
|
+
// POD interface + KV key + 3 named mode constants
|
|
65
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Transparent-bucket sort configuration (plain-data POD). Lives as a
|
|
69
|
+
* world-level resource keyed by `TRANSPARENT_SORT_CONFIG_KEY`.
|
|
70
|
+
*
|
|
71
|
+
* Fields:
|
|
72
|
+
* - `mode \u2208 {0, 1, 2, 3}` selects the sort formula
|
|
73
|
+
* (`TRANSPARENT_SORT_MODE_LAYER_Z` / `_LAYER_Y` / `_LAYER_YZ` / `_DISTANCE`).
|
|
74
|
+
* - `yzAlpha` (mode=2 only) blends Y-axis into Z-axis: 1.0 weights
|
|
75
|
+
* posZ equally with `posY - pivot.y * size.y` (Don't-Starve style),
|
|
76
|
+
* 0.5 weights posZ at half (isometric). mode=0 / mode=1 ignore the
|
|
77
|
+
* field (documented charter P3 legal-default boundary).
|
|
78
|
+
*/
|
|
79
|
+
export interface TransparentSortConfig {
|
|
80
|
+
readonly mode: number;
|
|
81
|
+
readonly yzAlpha: number;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Extract-stage POD consumed by the transparent-sort owner. */
|
|
85
|
+
export interface TransparentEntry {
|
|
86
|
+
readonly entityIndex: number;
|
|
87
|
+
readonly materialHandle: number;
|
|
88
|
+
readonly layer: number;
|
|
89
|
+
readonly posX: number;
|
|
90
|
+
readonly posY: number;
|
|
91
|
+
readonly posZ: number;
|
|
92
|
+
readonly pivotY: number;
|
|
93
|
+
readonly sizeY: number;
|
|
94
|
+
readonly sortKey?: number | undefined;
|
|
95
|
+
readonly renderableIndex?: number | undefined;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** World resource key for `TransparentSortConfig` KV entry. */
|
|
99
|
+
export const TRANSPARENT_SORT_CONFIG_KEY = 'TransparentSortConfig' as const;
|
|
100
|
+
|
|
101
|
+
/** horizontal / side-scroller: sortValue = posZ. */
|
|
102
|
+
export const TRANSPARENT_SORT_MODE_LAYER_Z = 0;
|
|
103
|
+
|
|
104
|
+
/** top-down / JRPG: sortValue = -(posY - pivot.y * size.y) (foot pivot Y-sort). */
|
|
105
|
+
export const TRANSPARENT_SORT_MODE_LAYER_Y = 1;
|
|
106
|
+
|
|
107
|
+
/** Don't-Starve / isometric: sortValue = (posY - pivot.y * size.y) + yzAlpha * posZ. */
|
|
108
|
+
export const TRANSPARENT_SORT_MODE_LAYER_YZ = 2;
|
|
109
|
+
|
|
110
|
+
/** 3D distance: sortValue = -(dist^2) to cameraPos, back-to-front (far first). */
|
|
111
|
+
export const TRANSPARENT_SORT_MODE_DISTANCE = 3;
|
|
112
|
+
|
|
113
|
+
/** Grouped authoring values and the single configuration operation. */
|
|
114
|
+
export const TransparentSort = Object.freeze({
|
|
115
|
+
layerZ: TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
116
|
+
layerY: TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
117
|
+
layerYZ: TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
118
|
+
distance: TRANSPARENT_SORT_MODE_DISTANCE,
|
|
119
|
+
configure: setTransparentSortConfig,
|
|
120
|
+
} as const);
|
|
121
|
+
|
|
122
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
123
|
+
// Internal: silent default + mode validity check
|
|
124
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
125
|
+
|
|
126
|
+
const DEFAULT_CONFIG: TransparentSortConfig = Object.freeze({
|
|
127
|
+
mode: TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
128
|
+
yzAlpha: 1.0,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
const VALID_MODES: ReadonlySet<number> = new Set<number>([
|
|
132
|
+
TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
133
|
+
TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
134
|
+
TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
135
|
+
TRANSPARENT_SORT_MODE_DISTANCE,
|
|
136
|
+
]);
|
|
137
|
+
|
|
138
|
+
// The expected / hint literals are the SSOT locked by plan-strategy D-4.
|
|
139
|
+
// They MUST round-trip byte-for-byte into ResourceInvalidValueError so AI
|
|
140
|
+
// users can read err.expected / err.hint for self-repair (charter P3).
|
|
141
|
+
// `\u2208` is the math "is-element-of" symbol; the ASCII source escape
|
|
142
|
+
// keeps the file English-only per AGENTS.md §Conventions.
|
|
143
|
+
const EXPECTED_MODE = 'mode \u2208 {0, 1, 2, 3}';
|
|
144
|
+
const HINT_MODE = '0=layer-z, 1=layer-y, 2=layer-yz, 3=distance';
|
|
145
|
+
|
|
146
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
147
|
+
// Helpers
|
|
148
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Read the world's `TransparentSortConfig` resource.
|
|
152
|
+
*
|
|
153
|
+
* @fallback KV missing returns `{ mode: 0, yzAlpha: 1.0 }`
|
|
154
|
+
* (`TRANSPARENT_SORT_MODE_LAYER_Z`, horizontal-z safe default).
|
|
155
|
+
* NO warn, NO throw — KV missing is a legal state (not an error state),
|
|
156
|
+
* mirroring how a sprite-free scene is a legal state for the renderer
|
|
157
|
+
* even though render-system has a transparent bucket. plan-strategy D-2:
|
|
158
|
+
* `hasResource` guard precedes the read so this helper never trips
|
|
159
|
+
* `ResourceNotFoundError` from `world.getResource`.
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* const cfg = getTransparentSortConfig(world);
|
|
163
|
+
* // cfg.mode === 0, cfg.yzAlpha === 1.0 when no resource inserted.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* world.insertResource(TRANSPARENT_SORT_CONFIG_KEY,
|
|
167
|
+
* { mode: TRANSPARENT_SORT_MODE_LAYER_Y, yzAlpha: 1.0 });
|
|
168
|
+
* const cfg = getTransparentSortConfig(world);
|
|
169
|
+
* // cfg.mode === 1, cfg.yzAlpha === 1.0 (yzAlpha ignored by mode=1).
|
|
170
|
+
*/
|
|
171
|
+
export function getTransparentSortConfig(world: World): TransparentSortConfig {
|
|
172
|
+
if (!world.hasResource(TRANSPARENT_SORT_CONFIG_KEY)) {
|
|
173
|
+
return DEFAULT_CONFIG;
|
|
174
|
+
}
|
|
175
|
+
return world.getResource<TransparentSortConfig>(TRANSPARENT_SORT_CONFIG_KEY);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Write the world's `TransparentSortConfig` resource, validating `mode`.
|
|
180
|
+
*
|
|
181
|
+
* Returns `Result<void, ResourceInvalidValueError>`:
|
|
182
|
+
*
|
|
183
|
+
* - `ok` — mode is in `{0, 1, 2, 3}`; the resource is inserted /
|
|
184
|
+
* overwritten via `world.insertResource`.
|
|
185
|
+
* - `err` — mode is out of range; the resource is NOT mutated;
|
|
186
|
+
* `err.error` is a `ResourceInvalidValueError` instance carrying:
|
|
187
|
+
* `.code === 'resource-invalid-value'`
|
|
188
|
+
* `.expected === 'mode \u2208 {0, 1, 2, 3}'`
|
|
189
|
+
* `.hint === '0=layer-z, 1=layer-y, 2=layer-yz, 3=distance'`
|
|
190
|
+
* `.detail.receivedMode === <the rejected mode>`
|
|
191
|
+
*
|
|
192
|
+
* @fallback mode out-of-range is NEVER silently coerced to mode=0 —
|
|
193
|
+
* `Result.err` is the only fail-mode (charter P3 structured failure).
|
|
194
|
+
* AI users read `.code / .expected / .hint / .detail` properties to
|
|
195
|
+
* self-repair, NOT the human-readable `.message` string.
|
|
196
|
+
*
|
|
197
|
+
* @fallback yzAlpha range is intentionally not validated; mode=0 / mode=1
|
|
198
|
+
* ignore the field, mode=2 reads it. The silent-ignore is the
|
|
199
|
+
* documented charter P3 "legal default" boundary (plan-strategy D-4 +
|
|
200
|
+
* AC-18 path (3) carve-out).
|
|
201
|
+
*
|
|
202
|
+
* @example success path:
|
|
203
|
+
* const r = setTransparentSortConfig(world,
|
|
204
|
+
* { mode: TRANSPARENT_SORT_MODE_LAYER_YZ, yzAlpha: 0.5 });
|
|
205
|
+
* if (!r.ok) return r;
|
|
206
|
+
*
|
|
207
|
+
* @example failure path:
|
|
208
|
+
* const r = setTransparentSortConfig(world, { mode: 99, yzAlpha: 1.0 });
|
|
209
|
+
* if (!r.ok) {
|
|
210
|
+
* // r.error.code === 'resource-invalid-value'
|
|
211
|
+
* // r.error.expected === 'mode \u2208 {0, 1, 2, 3}'
|
|
212
|
+
* // r.error.hint === '0=layer-z, 1=layer-y, 2=layer-yz, 3=distance'
|
|
213
|
+
* // r.error.detail.receivedMode === 99
|
|
214
|
+
* }
|
|
215
|
+
*/
|
|
216
|
+
export function setTransparentSortConfig(
|
|
217
|
+
world: World,
|
|
218
|
+
cfg: TransparentSortConfig,
|
|
219
|
+
): Result<void, ResourceInvalidValueError> {
|
|
220
|
+
if (!VALID_MODES.has(cfg.mode)) {
|
|
221
|
+
return err(
|
|
222
|
+
new ResourceInvalidValueError(EXPECTED_MODE, HINT_MODE, {
|
|
223
|
+
receivedMode: cfg.mode,
|
|
224
|
+
receivedKey: TRANSPARENT_SORT_CONFIG_KEY,
|
|
225
|
+
}),
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
world.insertResource<TransparentSortConfig>(TRANSPARENT_SORT_CONFIG_KEY, {
|
|
229
|
+
mode: cfg.mode,
|
|
230
|
+
yzAlpha: cfg.yzAlpha,
|
|
231
|
+
});
|
|
232
|
+
return ok(undefined);
|
|
233
|
+
}
|