@forgeax/engine-render 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -641
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
- package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
- package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
- package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
- package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
- package/dist/assembly/backend-contract.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +207 -0
- package/dist/assembly/factory.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +84 -0
- package/dist/assembly/host-contract.d.ts.map +1 -0
- package/dist/{renderer → assembly}/material/assembly.d.ts +0 -1
- package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-projection.d.ts +30 -0
- package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
- package/dist/authoring.d.ts +10 -11
- package/dist/authoring.d.ts.map +1 -1
- package/dist/authoring.mjs +25 -3
- package/dist/authoring.mjs.map +1 -1
- package/dist/chunk-CQXZC5XI.mjs +182 -0
- package/dist/chunk-CQXZC5XI.mjs.map +1 -0
- package/dist/chunk-QC4VW3XJ.mjs +79 -0
- package/dist/chunk-QC4VW3XJ.mjs.map +1 -0
- package/dist/chunk-SCRSAK5B.mjs +480 -0
- package/dist/chunk-SCRSAK5B.mjs.map +1 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
- package/dist/components/glyph-text.d.ts +1 -1
- package/dist/components/glyph-text.d.ts.map +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/instances.d.ts +1 -1
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts +1 -1
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/mesh-filter.d.ts +7 -7
- package/dist/components/mesh-filter.d.ts.map +1 -1
- package/dist/components/scene-instance.d.ts +11 -11
- package/dist/components/skybox-background.d.ts +56 -0
- package/dist/components/skybox-background.d.ts.map +1 -0
- package/dist/components/skylight.d.ts +55 -0
- package/dist/components/skylight.d.ts.map +1 -0
- package/dist/components/sprite-animation.d.ts +2 -3
- package/dist/components/sprite-animation.d.ts.map +1 -1
- package/dist/components/sprite-instances.d.ts +1 -1
- package/dist/components/sprite-playback-mode.d.ts +6 -1
- package/dist/components/sprite-playback-mode.d.ts.map +1 -1
- package/dist/components/sprite-region-override.d.ts +2 -3
- package/dist/components/sprite-region-override.d.ts.map +1 -1
- package/dist/components/tile-layer.d.ts +5 -0
- package/dist/components/tile-layer.d.ts.map +1 -1
- package/dist/construct-renderer.d.ts +18 -1
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +27008 -4
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/debug-draw-glue.d.ts +2 -53
- package/dist/debug-draw-glue.d.ts.map +1 -1
- package/dist/device/device-scope.d.ts +83 -0
- package/dist/device/device-scope.d.ts.map +1 -0
- package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
- package/dist/device/gpu-residency.d.ts.map +1 -0
- package/dist/device/resource-types.d.ts +8 -0
- package/dist/device/resource-types.d.ts.map +1 -0
- package/dist/engine-metrics.d.ts +2 -2
- package/dist/engine-metrics.d.ts.map +1 -1
- package/dist/errors/recover.d.ts +28 -1
- package/dist/errors/recover.d.ts.map +1 -1
- package/dist/errors/render.d.ts +249 -258
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/features/fullscreen.d.ts +19 -0
- package/dist/features/fullscreen.d.ts.map +1 -0
- package/dist/features/host.d.ts +32 -26
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/morph/morph-feature.d.ts +39 -5
- package/dist/features/morph/morph-feature.d.ts.map +1 -1
- package/dist/features/plan.d.ts +182 -0
- package/dist/features/plan.d.ts.map +1 -0
- package/dist/features/prepared-gpu-work.d.ts +21 -17
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts +2 -1
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +11 -21
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts +2 -2
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +4 -7
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +2 -2
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/render-graph-resources.d.ts +6 -6
- package/dist/features/render-graph-resources.d.ts.map +1 -1
- package/dist/features/targets.d.ts +5 -5
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +11 -190
- package/dist/features/types.d.ts.map +1 -1
- package/dist/features/vocabulary.d.ts +14 -0
- package/dist/features/vocabulary.d.ts.map +1 -0
- package/dist/fullscreen-post-process-pass.d.ts +4 -25
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/glyph-text-layout-system.d.ts +3 -2
- package/dist/glyph-text-layout-system.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +6 -75
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +13 -112
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/view-gpu.d.ts +10 -66
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-resource.d.ts +3 -3
- package/dist/gpu-scene-schema.d.ts +1 -94
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +7 -33
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +3 -53
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +74 -180
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +1 -1
- package/dist/index.d.ts +13 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +165 -3
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +69 -0
- package/dist/inspection-types.d.ts.map +1 -0
- package/dist/instance-buffer-cache.d.ts +1 -4
- package/dist/instance-buffer-cache.d.ts.map +1 -1
- package/dist/internal.d.ts +1 -73
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +1 -43
- package/dist/internal.mjs.map +1 -1
- package/dist/lifecycle.d.ts +36 -2
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/materials.d.ts +0 -3
- package/dist/materials.d.ts.map +1 -1
- package/dist/mesh-material-bindings.d.ts +0 -1
- package/dist/mesh-material-bindings.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +75 -29
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts +5 -0
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts +31 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
- package/dist/pipeline/standard-profile.d.ts +40 -0
- package/dist/pipeline/standard-profile.d.ts.map +1 -0
- package/dist/pipeline-builder.d.ts +3 -3
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec-types.d.ts +24 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -0
- package/dist/pipeline-spec.d.ts +16 -155
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts +1 -14
- package/dist/plugin.d.ts.map +1 -1
- package/dist/post-process-errors.d.ts +18 -18
- package/dist/post-process-errors.d.ts.map +1 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +7 -73
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +44 -44
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts +5 -38
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +64 -52
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/helpers.d.ts +3 -2
- package/dist/record/helpers.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +5 -4
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +90 -59
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +28 -3
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +1 -1
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +276 -3
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +235 -0
- package/dist/record/render-context.d.ts.map +1 -0
- package/dist/record/shadow-pass.d.ts +15 -88
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -1
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +29 -7
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +3 -3
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/render-contract.d.ts +416 -0
- package/dist/render-contract.d.ts.map +1 -0
- package/dist/render-data.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts +14 -362
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +25 -64
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +107 -338
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +21 -713
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +58 -0
- package/dist/scene/render-scene-types.d.ts.map +1 -0
- package/dist/scene/render-scene.d.ts +105 -0
- package/dist/scene/render-scene.d.ts.map +1 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
- package/dist/ssao-buffers.d.ts +22 -3
- package/dist/ssao-buffers.d.ts.map +1 -1
- package/dist/systems/skin-palette-allocator.d.ts +2 -4
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/systems/skin-palette-types.d.ts +14 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -0
- package/dist/systems/transparent-sort-config.d.ts +23 -2
- package/dist/systems/transparent-sort-config.d.ts.map +1 -1
- package/dist/tilemap-chunk-extract-system.d.ts +4 -3
- package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +2 -4
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +3 -3
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/package.json +23 -23
- package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
- package/src/__tests__/callback-inference.test-d.ts +6 -3
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
- package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
- package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
- package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
- package/src/__tests__/factory-contract.integration.test.ts +158 -209
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
- package/src/__tests__/frame-observation.contract.test.ts +17 -8
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
- package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +9 -16
- package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
- package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
- package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
- package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
- package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
- package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
- package/src/__tests__/gpu-scene.unit.test.ts +10 -24
- package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
- package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
- package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
- package/src/__tests__/material-cooked-projection.unit.test.ts +2 -51
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +4 -23
- package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
- package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
- package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
- package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
- package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
- package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
- package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
- package/src/__tests__/profiler-default-off.test.ts +1 -1
- package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
- package/src/__tests__/profiler-phase-integration.test.ts +5 -13
- package/src/__tests__/profiler-phase-token.test.ts +3 -8
- package/src/__tests__/public-surface.test-d.ts +65 -3
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
- package/src/__tests__/render-error-code-owner.test-d.ts +18 -23
- package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
- package/src/__tests__/render-error-exhaustive.test-d.ts +8 -1
- package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
- package/src/__tests__/render-feature-context.test-d.ts +16 -40
- package/src/__tests__/render-feature-contract.test-d.ts +9 -18
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
- package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
- package/src/__tests__/render-feature-plan.test-d.ts +161 -0
- package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
- package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
- package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
- package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
- package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
- package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
- package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
- package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
- package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
- package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
- package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
- package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
- package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +44 -95
- package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
- package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
- package/src/__tests__/ssao-config.unit.test.ts +36 -0
- package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
- package/src/__tests__/standard-descriptors.test-d.ts +22 -0
- package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
- package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
- package/src/__tests__/surface-configuration.unit.test.ts +1 -2
- package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
- package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
- package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
- package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
- package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
- package/src/__tests__/visibility-extract.integration.test.ts +20 -11
- package/src/__tests__/visibility-extract.perf.test.ts +66 -32
- package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
- package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
- package/src/__tests__/visibility-instances.integration.test.ts +7 -11
- package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
- package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
- package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
- package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
- package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
- package/src/__tests__/vocabulary.unit.test.ts +1 -1
- package/src/assembly/backend-contract.ts +57 -0
- package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1663 -2690
- package/src/assembly/host-contract.ts +101 -0
- package/src/{renderer → assembly}/material/assembly.ts +0 -2
- package/src/assembly/material/pipeline-projection.ts +63 -0
- package/src/authoring.ts +14 -22
- package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
- package/src/components/glyph-text.ts +3 -2
- package/src/components/index.ts +7 -9
- package/src/components/instances.ts +4 -5
- package/src/components/light-helpers.ts +1 -1
- package/src/components/mesh-filter.ts +11 -10
- package/src/components/post-process-params.ts +3 -3
- package/src/components/scene-instance.ts +12 -12
- package/src/components/skybox-background.ts +103 -0
- package/src/components/{environment.ts → skylight.ts} +2 -110
- package/src/components/sprite-animation.ts +3 -4
- package/src/components/sprite-instances.ts +2 -2
- package/src/components/sprite-playback-mode.ts +7 -1
- package/src/components/sprite-region-override.ts +2 -3
- package/src/components/tile-layer.ts +8 -2
- package/src/construct-renderer.ts +67 -4
- package/src/debug-draw-glue.ts +8 -129
- package/src/device/device-scope.ts +306 -0
- package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
- package/src/device/resource-types.ts +20 -0
- package/src/engine-metrics.ts +12 -19
- package/src/errors/recover.ts +45 -3
- package/src/errors/render.ts +357 -460
- package/src/features/fullscreen.ts +46 -0
- package/src/features/host.ts +575 -309
- package/src/features/morph/morph-feature.ts +195 -105
- package/src/features/plan.ts +447 -0
- package/src/features/prepared-gpu-work.ts +72 -15
- package/src/features/prepared-graphics-store.ts +20 -6
- package/src/features/prepared-graphics.ts +12 -71
- package/src/features/render-graph-compute.ts +14 -5
- package/src/features/render-graph-contribution.ts +43 -63
- package/src/features/render-graph-raster.ts +11 -6
- package/src/features/render-graph-resources.ts +25 -23
- package/src/features/targets.ts +8 -21
- package/src/features/types.ts +39 -227
- package/src/features/vocabulary.ts +24 -0
- package/src/fullscreen-post-process-pass.ts +14 -57
- package/src/glyph-text-layout-system.ts +70 -96
- package/src/gpu-driven/batch-topology.ts +24 -202
- package/src/gpu-driven/production-raster.ts +93 -1108
- package/src/gpu-driven/view-gpu.ts +46 -192
- package/src/gpu-resource.ts +4 -4
- package/src/gpu-scene-schema.ts +11 -99
- package/src/gpu-scene.ts +231 -364
- package/src/hdrp-buffers.ts +12 -221
- package/src/ibl/IblPipelineCache.ts +471 -711
- package/src/ibl/skylight-bind-group.ts +4 -4
- package/src/index.ts +58 -217
- package/src/inspection-types.ts +76 -0
- package/src/instance-buffer-cache.ts +1 -29
- package/src/internal.ts +6 -85
- package/src/lifecycle.ts +64 -19
- package/src/materials.ts +7 -29
- package/src/mesh-material-bindings.ts +0 -1
- package/src/pbr-pipeline.ts +434 -53
- package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
- package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
- package/src/pipeline/standard-profile.ts +65 -0
- package/src/pipeline-builder.ts +60 -64
- package/src/pipeline-spec-types.ts +28 -0
- package/src/pipeline-spec.ts +72 -609
- package/src/plugin.ts +3 -75
- package/src/post-process-errors.ts +31 -33
- package/src/prepare/prepared-graphics-resolver.ts +5 -4
- package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
- package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
- package/src/record/frame-lighting.ts +74 -195
- package/src/record/frame-snapshot.ts +45 -60
- package/src/record/frame-targets.ts +8 -243
- package/src/record/frame.ts +509 -796
- package/src/record/helpers.ts +6 -11
- package/src/record/main-pass-geometry.ts +106 -147
- package/src/record/main-pass-material.ts +517 -190
- package/src/record/main-pass-sprite-draws.ts +198 -117
- package/src/record/main-pass.ts +162 -143
- package/src/record/mesh-ssbo.ts +517 -38
- package/src/record/render-context.ts +364 -0
- package/src/record/shadow-pass.ts +138 -1838
- package/src/record/skybox-post-pass.ts +12 -14
- package/src/record/typed-frame-graph.ts +215 -254
- package/src/record/view-ubo.ts +6 -37
- package/src/render-contract.ts +571 -0
- package/src/render-data.ts +3 -3
- package/src/render-graph-primitives.ts +76 -851
- package/src/render-pipeline.ts +104 -188
- package/src/render-system-extract.ts +1048 -1729
- package/src/render-system.ts +330 -1957
- package/src/scene/render-scene-types.ts +64 -0
- package/src/scene/render-scene.ts +1032 -0
- package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
- package/src/ssao-buffers.ts +167 -8
- package/src/systems/skin-palette-allocator.ts +21 -64
- package/src/systems/skin-palette-types.ts +14 -0
- package/src/systems/transparent-sort-config.ts +25 -3
- package/src/tilemap-chunk-extract-system.ts +53 -70
- package/src/typed-render-graph-primitives.ts +35 -24
- package/src/typed-shadow-passes.ts +26 -56
- package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
- package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
- package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
- package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
- package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
- package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
- package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
- package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
- package/dist/__tests__/camera-temporal.test.d.ts +0 -2
- package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
- package/dist/__tests__/environment-inspection.test.d.ts +0 -2
- package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
- package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
- package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
- package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
- package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
- package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
- package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
- package/dist/__tests__/materials.unit.test.d.ts +0 -2
- package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
- package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/plugin.test.d.ts +0 -2
- package/dist/__tests__/plugin.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
- package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
- package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
- package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
- package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
- package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
- package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
- package/dist/chunk-DJIMFYX6.mjs +0 -1439
- package/dist/chunk-DJIMFYX6.mjs.map +0 -1
- package/dist/chunk-F2SIOCRM.mjs +0 -7423
- package/dist/chunk-F2SIOCRM.mjs.map +0 -1
- package/dist/chunk-JMSB7AR4.mjs +0 -3
- package/dist/chunk-JMSB7AR4.mjs.map +0 -1
- package/dist/chunk-KHI6K4C6.mjs +0 -659
- package/dist/chunk-KHI6K4C6.mjs.map +0 -1
- package/dist/chunk-PORZOL2V.mjs +0 -569
- package/dist/chunk-PORZOL2V.mjs.map +0 -1
- package/dist/chunk-UOJGMDGP.mjs +0 -29913
- package/dist/chunk-UOJGMDGP.mjs.map +0 -1
- package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
- package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
- package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
- package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
- package/dist/components/__tests__/fog.test-d.d.ts +0 -2
- package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
- package/dist/components/__tests__/fog.test.d.ts +0 -2
- package/dist/components/__tests__/fog.test.d.ts.map +0 -1
- package/dist/components/atmosphere.d.ts +0 -18
- package/dist/components/atmosphere.d.ts.map +0 -1
- package/dist/components/environment.d.ts +0 -115
- package/dist/components/environment.d.ts.map +0 -1
- package/dist/deferred-lighting.d.ts +0 -13
- package/dist/deferred-lighting.d.ts.map +0 -1
- package/dist/dynamic-texture-store.d.ts +0 -42
- package/dist/dynamic-texture-store.d.ts.map +0 -1
- package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
- package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
- package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
- package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/generation.test.d.ts +0 -2
- package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
- package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
- package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
- package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
- package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
- package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
- package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
- package/dist/environment/__tests__/readiness.test.d.ts +0 -2
- package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
- package/dist/environment/__tests__/recovery.test.d.ts +0 -2
- package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
- package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
- package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
- package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
- package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/signature.test.d.ts +0 -2
- package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
- package/dist/environment/descriptors.d.ts +0 -2
- package/dist/environment/descriptors.d.ts.map +0 -1
- package/dist/environment/extracted-environment.d.ts +0 -53
- package/dist/environment/extracted-environment.d.ts.map +0 -1
- package/dist/environment/generation.d.ts +0 -62
- package/dist/environment/generation.d.ts.map +0 -1
- package/dist/environment/gpu-bundle.d.ts +0 -23
- package/dist/environment/gpu-bundle.d.ts.map +0 -1
- package/dist/environment/graph.d.ts +0 -108
- package/dist/environment/graph.d.ts.map +0 -1
- package/dist/environment/inspection.d.ts +0 -48
- package/dist/environment/inspection.d.ts.map +0 -1
- package/dist/environment/lifecycle.d.ts +0 -22
- package/dist/environment/lifecycle.d.ts.map +0 -1
- package/dist/environment/readiness.d.ts +0 -29
- package/dist/environment/readiness.d.ts.map +0 -1
- package/dist/environment/signature.d.ts +0 -70
- package/dist/environment/signature.d.ts.map +0 -1
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
- package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
- package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
- package/dist/extract/directional-csm.d.ts +0 -129
- package/dist/extract/directional-csm.d.ts.map +0 -1
- package/dist/extract/index.d.ts +0 -5
- package/dist/extract/index.d.ts.map +0 -1
- package/dist/extract/material-interface.d.ts +0 -56
- package/dist/extract/material-interface.d.ts.map +0 -1
- package/dist/extract/schema-readers.d.ts +0 -20
- package/dist/extract/schema-readers.d.ts.map +0 -1
- package/dist/features/graph-contribution.d.ts +0 -64
- package/dist/features/graph-contribution.d.ts.map +0 -1
- package/dist/features/index.d.ts +0 -21
- package/dist/features/index.d.ts.map +0 -1
- package/dist/features/morph/index.d.ts +0 -3
- package/dist/features/morph/index.d.ts.map +0 -1
- package/dist/features/morph/morph-bounds.d.ts +0 -42
- package/dist/features/morph/morph-bounds.d.ts.map +0 -1
- package/dist/features/scene-temporal.d.ts +0 -45
- package/dist/features/scene-temporal.d.ts.map +0 -1
- package/dist/features/taa-resolve.d.ts +0 -21
- package/dist/features/taa-resolve.d.ts.map +0 -1
- package/dist/frame-chain.d.ts +0 -14
- package/dist/frame-chain.d.ts.map +0 -1
- package/dist/gpu-driven/view-reference.d.ts.map +0 -1
- package/dist/gpu-resource-store.d.ts.map +0 -1
- package/dist/hdrp-cluster-membership.d.ts +0 -2
- package/dist/hdrp-cluster-membership.d.ts.map +0 -1
- package/dist/hdrp-pipeline.d.ts +0 -36
- package/dist/hdrp-pipeline.d.ts.map +0 -1
- package/dist/ibl/cubemap-projection.d.ts +0 -23
- package/dist/ibl/cubemap-projection.d.ts.map +0 -1
- package/dist/ibl/face-uniforms.d.ts +0 -65
- package/dist/ibl/face-uniforms.d.ts.map +0 -1
- package/dist/mesh-update-errors.d.ts +0 -71
- package/dist/mesh-update-errors.d.ts.map +0 -1
- package/dist/mipmap-generator.d.ts +0 -39
- package/dist/mipmap-generator.d.ts.map +0 -1
- package/dist/param-schema-projection-census.d.ts +0 -18
- package/dist/param-schema-projection-census.d.ts.map +0 -1
- package/dist/persistent-render-scene.d.ts +0 -158
- package/dist/persistent-render-scene.d.ts.map +0 -1
- package/dist/pipeline/index.d.ts +0 -11
- package/dist/pipeline/index.d.ts.map +0 -1
- package/dist/pipeline-errors.d.ts +0 -110
- package/dist/pipeline-errors.d.ts.map +0 -1
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
- package/dist/prepare/index.d.ts +0 -4
- package/dist/prepare/index.d.ts.map +0 -1
- package/dist/prepare/schema-readers.d.ts +0 -11
- package/dist/prepare/schema-readers.d.ts.map +0 -1
- package/dist/record/__tests__/environment-record.test.d.ts +0 -2
- package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
- package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
- package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
- package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
- package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
- package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
- package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
- package/dist/record/frame-observation.d.ts +0 -38
- package/dist/record/frame-observation.d.ts.map +0 -1
- package/dist/record/index.d.ts +0 -15
- package/dist/record/index.d.ts.map +0 -1
- package/dist/record/main-pass-skin.d.ts +0 -46
- package/dist/record/main-pass-skin.d.ts.map +0 -1
- package/dist/record/main-pass-sprite.d.ts +0 -69
- package/dist/record/main-pass-sprite.d.ts.map +0 -1
- package/dist/record/material-payload.d.ts +0 -43
- package/dist/record/material-payload.d.ts.map +0 -1
- package/dist/record/material-slot-plan.d.ts +0 -26
- package/dist/record/material-slot-plan.d.ts.map +0 -1
- package/dist/record/membership-timing.d.ts +0 -232
- package/dist/record/membership-timing.d.ts.map +0 -1
- package/dist/record/shadow-caster-uniform.d.ts +0 -8
- package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
- package/dist/record/shadow-submit-mode.d.ts +0 -66
- package/dist/record/shadow-submit-mode.d.ts.map +0 -1
- package/dist/render-dispatch-membership.d.ts +0 -47
- package/dist/render-dispatch-membership.d.ts.map +0 -1
- package/dist/render-pipeline-context.d.ts +0 -289
- package/dist/render-pipeline-context.d.ts.map +0 -1
- package/dist/render-pipeline-target.d.ts +0 -16
- package/dist/render-pipeline-target.d.ts.map +0 -1
- package/dist/render-scene-projection.d.ts +0 -174
- package/dist/render-scene-projection.d.ts.map +0 -1
- package/dist/render-system-fold.d.ts +0 -266
- package/dist/render-system-fold.d.ts.map +0 -1
- package/dist/renderer/asset-service.d.ts +0 -10
- package/dist/renderer/asset-service.d.ts.map +0 -1
- package/dist/renderer/backend-selection.d.ts.map +0 -1
- package/dist/renderer/environment-classify.d.ts +0 -6
- package/dist/renderer/environment-classify.d.ts.map +0 -1
- package/dist/renderer/environment-error.d.ts +0 -13
- package/dist/renderer/environment-error.d.ts.map +0 -1
- package/dist/renderer/material/pipeline-projection.d.ts +0 -91
- package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
- package/dist/renderer/renderer-factory.d.ts +0 -289
- package/dist/renderer/renderer-factory.d.ts.map +0 -1
- package/dist/renderer.d.ts +0 -771
- package/dist/renderer.d.ts.map +0 -1
- package/dist/scene-utils/collect-subtree.d.ts +0 -11
- package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
- package/dist/ssao-data.d.ts +0 -34
- package/dist/ssao-data.d.ts.map +0 -1
- package/dist/surface-format.d.ts +0 -10
- package/dist/surface-format.d.ts.map +0 -1
- package/dist/taa-history-store.d.ts +0 -88
- package/dist/taa-history-store.d.ts.map +0 -1
- package/dist/temporal-coverage.d.ts +0 -35
- package/dist/temporal-coverage.d.ts.map +0 -1
- package/dist/temporal-frame-transaction.d.ts +0 -92
- package/dist/temporal-frame-transaction.d.ts.map +0 -1
- package/dist/temporal-inspection.d.ts +0 -57
- package/dist/temporal-inspection.d.ts.map +0 -1
- package/dist/temporal-view.d.ts +0 -43
- package/dist/temporal-view.d.ts.map +0 -1
- package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
- package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
- package/dist/urp-pipeline.d.ts +0 -4
- package/dist/urp-pipeline.d.ts.map +0 -1
- package/src/__tests__/analytic-sky-contract.test.ts +0 -27
- package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
- package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
- package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
- package/src/__tests__/backend-selection.integration.test.ts +0 -11
- package/src/__tests__/camera-temporal.test-d.ts +0 -8
- package/src/__tests__/camera-temporal.test.ts +0 -188
- package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
- package/src/__tests__/environment-inspection.test.ts +0 -45
- package/src/__tests__/fog-ai-user.fixture.ts +0 -350
- package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
- package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
- package/src/__tests__/fog-inspection.integration.test.ts +0 -127
- package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
- package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
- package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
- package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
- package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
- package/src/__tests__/fog-temporal.integration.test.ts +0 -115
- package/src/__tests__/frame-chain.unit.test.ts +0 -26
- package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
- package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
- package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
- package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
- package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
- package/src/__tests__/materials.unit.test.ts +0 -25
- package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
- package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
- package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
- package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
- package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
- package/src/__tests__/plugin.test.ts +0 -25
- package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
- package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
- package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
- package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
- package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
- package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
- package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
- package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
- package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
- package/src/__tests__/render-feature-order.unit.test.ts +0 -66
- package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
- package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
- package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
- package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
- package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
- package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
- package/src/__tests__/taa-history-store.unit.test.ts +0 -196
- package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
- package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
- package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
- package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
- package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
- package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
- package/src/components/__tests__/atmosphere-red.test.ts +0 -51
- package/src/components/__tests__/atmosphere.test.ts +0 -79
- package/src/components/__tests__/fog.test-d.ts +0 -49
- package/src/components/__tests__/fog.test.ts +0 -60
- package/src/components/atmosphere.ts +0 -64
- package/src/deferred-lighting.ts +0 -92
- package/src/dynamic-texture-store.ts +0 -111
- package/src/environment/README.md +0 -76
- package/src/environment/__tests__/failure-injection.test.ts +0 -50
- package/src/environment/__tests__/generation-red.test.ts +0 -64
- package/src/environment/__tests__/generation.test.ts +0 -37
- package/src/environment/__tests__/graph-transaction.test.ts +0 -85
- package/src/environment/__tests__/inspection-red.test.ts +0 -53
- package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
- package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
- package/src/environment/__tests__/readiness.test.ts +0 -42
- package/src/environment/__tests__/recovery.test.ts +0 -62
- package/src/environment/__tests__/resize-dispose.test.ts +0 -30
- package/src/environment/__tests__/signature-red.test.ts +0 -45
- package/src/environment/__tests__/signature.test.ts +0 -60
- package/src/environment/descriptors.ts +0 -7
- package/src/environment/extracted-environment.ts +0 -239
- package/src/environment/generation.ts +0 -158
- package/src/environment/gpu-bundle.ts +0 -144
- package/src/environment/graph.ts +0 -588
- package/src/environment/inspection.ts +0 -107
- package/src/environment/lifecycle.ts +0 -124
- package/src/environment/readiness.ts +0 -76
- package/src/environment/signature.ts +0 -185
- package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
- package/src/extract/__tests__/environment-source.test.ts +0 -105
- package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
- package/src/extract/directional-csm.ts +0 -959
- package/src/extract/index.ts +0 -10
- package/src/extract/material-interface.ts +0 -604
- package/src/extract/schema-readers.ts +0 -27
- package/src/features/graph-contribution.ts +0 -577
- package/src/features/index.ts +0 -100
- package/src/features/morph/index.ts +0 -24
- package/src/features/morph/morph-bounds.ts +0 -123
- package/src/features/scene-temporal.ts +0 -274
- package/src/features/taa-resolve.ts +0 -244
- package/src/frame-chain.ts +0 -21
- package/src/hdrp-cluster-membership.ts +0 -70
- package/src/ibl/cubemap-projection.ts +0 -60
- package/src/ibl/face-uniforms.ts +0 -150
- package/src/mesh-update-errors.ts +0 -113
- package/src/mipmap-generator.ts +0 -244
- package/src/param-schema-projection-census.ts +0 -73
- package/src/persistent-render-scene.ts +0 -1752
- package/src/pipeline/index.ts +0 -40
- package/src/pipeline-errors.ts +0 -172
- package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
- package/src/prepare/index.ts +0 -8
- package/src/prepare/schema-readers.ts +0 -20
- package/src/record/__tests__/environment-record.test.ts +0 -35
- package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
- package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
- package/src/record/__tests__/render-submission.integration.test.ts +0 -76
- package/src/record/__tests__/render-submission.perf.test.ts +0 -141
- package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
- package/src/record/frame-observation.ts +0 -122
- package/src/record/index.ts +0 -15
- package/src/record/main-pass-skin.ts +0 -51
- package/src/record/main-pass-sprite.ts +0 -166
- package/src/record/material-payload.ts +0 -292
- package/src/record/material-slot-plan.ts +0 -68
- package/src/record/membership-timing.ts +0 -1012
- package/src/record/shadow-caster-uniform.ts +0 -37
- package/src/record/shadow-submit-mode.ts +0 -277
- package/src/render-dispatch-membership.ts +0 -155
- package/src/render-pipeline-context.ts +0 -332
- package/src/render-pipeline-target.ts +0 -96
- package/src/render-scene-projection.ts +0 -1738
- package/src/render-system-fold.ts +0 -531
- package/src/renderer/asset-service.ts +0 -32
- package/src/renderer/backend-selection.ts +0 -121
- package/src/renderer/environment-classify.ts +0 -30
- package/src/renderer/environment-error.ts +0 -19
- package/src/renderer/material/pipeline-projection.ts +0 -140
- package/src/renderer.ts +0 -940
- package/src/scene-utils/collect-subtree.ts +0 -40
- package/src/ssao-data.ts +0 -106
- package/src/surface-format.ts +0 -37
- package/src/taa-history-store.ts +0 -429
- package/src/temporal-coverage.ts +0 -106
- package/src/temporal-frame-transaction.ts +0 -301
- package/src/temporal-inspection.ts +0 -194
- package/src/temporal-view.ts +0 -174
- package/src/tilemap/resolve-tileset-runtime.ts +0 -72
|
@@ -31,20 +31,17 @@
|
|
|
31
31
|
// - tweak-20260611 plan-strategy D-7 (subtree-scope)
|
|
32
32
|
// - charter P3 (explicit failure: path-unresolved fail-fast)
|
|
33
33
|
|
|
34
|
+
import type { SkinJointResolver } from '@forgeax/engine-assets-runtime';
|
|
34
35
|
import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
35
|
-
import { Name } from '@forgeax/engine-scene';
|
|
36
|
+
import { collectSubtree, Name } from '@forgeax/engine-scene';
|
|
36
37
|
import { Skin } from '@forgeax/engine-skinning';
|
|
37
|
-
import type { SkinAsset } from '@forgeax/engine-types';
|
|
38
|
-
import { collectSubtree } from '../scene-utils/collect-subtree';
|
|
39
38
|
|
|
40
39
|
// feat-20260705-runtime-tier2-decomposition M1 / w6 (D-1): SkinJointResolver
|
|
41
40
|
// relocated to registry/instantiate.ts so the hook contract travels with the
|
|
42
41
|
// instantiate cluster into @forgeax/engine-assets-runtime. Imported back here as
|
|
43
42
|
// a forward (runtime -> assets-runtime-bound module) type-only reference and
|
|
44
43
|
// re-exported for existing consumers of this module's SkinJointResolver export.
|
|
45
|
-
export
|
|
46
|
-
resolveSkinAsset(skeletonHandle: number): SkinAsset | undefined;
|
|
47
|
-
}
|
|
44
|
+
export type { SkinJointResolver } from '@forgeax/engine-assets-runtime';
|
|
48
45
|
|
|
49
46
|
interface JointPathUnresolvedError {
|
|
50
47
|
code: 'skin-joint-path-unresolved';
|
|
@@ -118,7 +115,7 @@ export function postSpawnResolveJoints(
|
|
|
118
115
|
error: {
|
|
119
116
|
code: 'skin-asset-unresolved',
|
|
120
117
|
expected: `SkinAsset registered for skeleton handle ${skeletonHandle} when instantiate triggers postSpawnResolveJoints`,
|
|
121
|
-
hint: `SkinAsset matching skeletonGuid for handle ${skeletonHandle} was not found in AssetRegistry; verify the SceneAsset.skinGuids[] cross-edge is populated by the importer (gltfImporter scene branch) and that
|
|
118
|
+
hint: `SkinAsset matching skeletonGuid for handle ${skeletonHandle} was not found in AssetRegistry; verify the SceneAsset.skinGuids[] cross-edge is populated by the importer (gltfImporter scene branch) and that loadByGuid<SceneAsset> recursively loaded each SkinAsset before instantiate (browser-async-pack-fetch path)`,
|
|
122
119
|
detail: { skinEntity: entity, skeletonHandle },
|
|
123
120
|
},
|
|
124
121
|
};
|
package/src/ssao-buffers.ts
CHANGED
|
@@ -10,17 +10,72 @@
|
|
|
10
10
|
// label hdrp-ssao-uniform
|
|
11
11
|
//
|
|
12
12
|
// plan-strategy D-1: uniform carries view + projection + inverseProjection.
|
|
13
|
-
// plan-strategy D-C: intensity
|
|
14
|
-
// so the lighting shader can mix(1.0, ssao*ao,
|
|
13
|
+
// plan-strategy D-C: intensity, radius, and bias are carried at offset 192
|
|
14
|
+
// (the existing vec4 slot), so the lighting shader can mix(1.0, ssao*ao,
|
|
15
|
+
// intensity) without a new UBO.
|
|
15
16
|
// The kernel uses a uniform buffer on every backend. 1024 B is below the
|
|
16
17
|
// WebGL2 minimum fragment UBO size, so SSAO does not need a storage-buffer
|
|
17
18
|
// capability gate.
|
|
18
19
|
|
|
19
|
-
import type { Buffer, Texture } from '@forgeax/engine-rhi';
|
|
20
|
+
import type { Buffer, Sampler, Texture, TextureView } from '@forgeax/engine-rhi';
|
|
20
21
|
import { GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_TEXTURE_BINDING } from './gpu-texture-usage';
|
|
21
22
|
import { GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_UNIFORM } from './gpu-usage';
|
|
22
|
-
import type { RenderSystemRuntime } from './render-
|
|
23
|
-
|
|
23
|
+
import type { RenderSystemRuntime } from './record/render-context';
|
|
24
|
+
|
|
25
|
+
// Deterministic host-side SSAO data is owned by the buffer allocator because
|
|
26
|
+
// these values have no consumer outside the resources they initialize.
|
|
27
|
+
export const SSAO_KERNEL_SAMPLE_COUNT = 64;
|
|
28
|
+
const NOISE_SIZE = 16;
|
|
29
|
+
|
|
30
|
+
function mulberry32(seed: number): () => number {
|
|
31
|
+
let state = seed | 0;
|
|
32
|
+
return () => {
|
|
33
|
+
state = (state + 0x6d2b79f5) | 0;
|
|
34
|
+
let t = Math.imul(state ^ (state >>> 15), 1 | state);
|
|
35
|
+
t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
|
|
36
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function lerp(a: number, b: number, t: number): number {
|
|
41
|
+
return a + t * (b - a);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function generateSsaoKernel(seed: number = 0): readonly Float32Array[] {
|
|
45
|
+
const rand = mulberry32(seed);
|
|
46
|
+
const kernel: Float32Array[] = [];
|
|
47
|
+
for (let i = 0; i < SSAO_KERNEL_SAMPLE_COUNT; i++) {
|
|
48
|
+
let x = rand() * 2 - 1;
|
|
49
|
+
let y = rand() * 2 - 1;
|
|
50
|
+
let z = rand();
|
|
51
|
+
const len = Math.sqrt(x * x + y * y + z * z);
|
|
52
|
+
x /= len;
|
|
53
|
+
y /= len;
|
|
54
|
+
z /= len;
|
|
55
|
+
const r = rand();
|
|
56
|
+
x *= r;
|
|
57
|
+
y *= r;
|
|
58
|
+
z *= r;
|
|
59
|
+
const scale = lerp(0.1, 1.0, (i / SSAO_KERNEL_SAMPLE_COUNT) ** 2);
|
|
60
|
+
const sample = new Float32Array(3);
|
|
61
|
+
sample[0] = x * scale;
|
|
62
|
+
sample[1] = y * scale;
|
|
63
|
+
sample[2] = z * scale;
|
|
64
|
+
kernel.push(sample);
|
|
65
|
+
}
|
|
66
|
+
return kernel;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function generateSsaoNoise(seed: number = 0): Float32Array {
|
|
70
|
+
const rand = mulberry32(seed);
|
|
71
|
+
const noise = new Float32Array(NOISE_SIZE * 3);
|
|
72
|
+
for (let i = 0; i < NOISE_SIZE; i++) {
|
|
73
|
+
noise[i * 3 + 0] = rand() * 2 - 1;
|
|
74
|
+
noise[i * 3 + 1] = rand() * 2 - 1;
|
|
75
|
+
noise[i * 3 + 2] = 0;
|
|
76
|
+
}
|
|
77
|
+
return noise;
|
|
78
|
+
}
|
|
24
79
|
|
|
25
80
|
// Each vec3<f32> in a WGSL array is 16B (12B payload + 4B padding).
|
|
26
81
|
// 64 samples * 16 B/sample = 1024 B.
|
|
@@ -30,7 +85,7 @@ const BYTES_PER_KERNEL_ELEMENT = 16;
|
|
|
30
85
|
// bytes [0..63] view mat4x4<f32>
|
|
31
86
|
// bytes [64..127] projection mat4x4<f32>
|
|
32
87
|
// bytes [128..191] inverseProjection mat4x4<f32>
|
|
33
|
-
// bytes [192..207] intensityPad vec4<f32> // x = intensity, y
|
|
88
|
+
// bytes [192..207] intensityPad vec4<f32> // x = intensity, y = radius, z = bias, w = pad
|
|
34
89
|
// bytes [208..255] padding // align to 256B WebGPU UBO offset
|
|
35
90
|
//
|
|
36
91
|
// The total is rounded to 256B so the same UBO can host an additional
|
|
@@ -40,6 +95,110 @@ const UNIFORM_BYTES = 256;
|
|
|
40
95
|
export const SSAO_UNIFORM_INTENSITY_OFFSET = UNIFORM_INTENSITY_OFFSET_BYTES;
|
|
41
96
|
export const SSAO_UNIFORM_BYTES = UNIFORM_BYTES;
|
|
42
97
|
|
|
98
|
+
// ── 1x1 white fallback texture (plan-strategy §D-B) ───────────────────────
|
|
99
|
+
//
|
|
100
|
+
// Single-PSO invariant: the HDRP unified BGL always declares a binding 7
|
|
101
|
+
// texture_2d<f32>. When SSAO is disabled (or its resources are not yet
|
|
102
|
+
// allocated), the bind group binds this 1x1 r8unorm texture filled with
|
|
103
|
+
// 0xFF. r8unorm normalizes 255 -> 1.0, so the lighting shader reads
|
|
104
|
+
// `ssaoFactor = 1.0`, and `mix(1.0, ssao*ao, intensity) = ao` collapses
|
|
105
|
+
// back to the round-1 baseline (ambient = baked-AO only). No shader
|
|
106
|
+
// recompile across enable/disable.
|
|
107
|
+
|
|
108
|
+
interface SsaoFallbackResources {
|
|
109
|
+
readonly texture: Texture;
|
|
110
|
+
readonly view: TextureView;
|
|
111
|
+
readonly sampler: Sampler;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const fallbackCache = new WeakMap<RenderSystemRuntime, SsaoFallbackResources>();
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Lazily allocate the 1x1 r8unorm white fallback texture + a sampler for
|
|
118
|
+
* SSAO disabled / resource-missing path. Cached per RenderSystemRuntime so
|
|
119
|
+
* subsequent calls reuse the same resources (charter P5 one-owner).
|
|
120
|
+
*
|
|
121
|
+
* Returns `null` if `device.createTexture` / `createTextureView` /
|
|
122
|
+
* `createSampler` / `queue.writeTexture` fails; the caller (createBindGroup)
|
|
123
|
+
* propagates the structured RhiError that landed on `runtime.errorRegistry`.
|
|
124
|
+
*/
|
|
125
|
+
export function getOrCreateSsaoFallbackTexture(
|
|
126
|
+
runtime: RenderSystemRuntime,
|
|
127
|
+
): SsaoFallbackResources | null {
|
|
128
|
+
const cached = fallbackCache.get(runtime);
|
|
129
|
+
if (cached !== undefined) return cached;
|
|
130
|
+
|
|
131
|
+
const device = runtime.device;
|
|
132
|
+
const texRes = device.createTexture({
|
|
133
|
+
label: 'hdrp-ssao-fallback-white',
|
|
134
|
+
size: { width: 1, height: 1, depthOrArrayLayers: 1 },
|
|
135
|
+
mipLevelCount: 1,
|
|
136
|
+
sampleCount: 1,
|
|
137
|
+
dimension: '2d',
|
|
138
|
+
format: 'r8unorm',
|
|
139
|
+
usage: GPU_TEXTURE_USAGE_TEXTURE_BINDING | GPU_TEXTURE_USAGE_COPY_DST,
|
|
140
|
+
textureBindingViewDimension: undefined,
|
|
141
|
+
});
|
|
142
|
+
if (!texRes.ok) {
|
|
143
|
+
runtime.errorRegistry.fire(texRes.error);
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// r8unorm: a single byte 0xFF normalizes to 1.0 (white => AO = 1.0).
|
|
148
|
+
const whitePixel = new Uint8Array([255]);
|
|
149
|
+
const writeRes = device.queue.writeTexture(
|
|
150
|
+
{
|
|
151
|
+
texture: texRes.value,
|
|
152
|
+
mipLevel: 0,
|
|
153
|
+
origin: { x: 0, y: 0, z: 0 },
|
|
154
|
+
},
|
|
155
|
+
whitePixel,
|
|
156
|
+
{ offset: 0, bytesPerRow: 256, rowsPerImage: 1 },
|
|
157
|
+
{ width: 1, height: 1, depthOrArrayLayers: 1 },
|
|
158
|
+
);
|
|
159
|
+
if (!writeRes.ok) {
|
|
160
|
+
runtime.errorRegistry.fire(writeRes.error);
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const viewRes = device.createTextureView(texRes.value, {
|
|
165
|
+
label: 'hdrp-ssao-fallback-white-view',
|
|
166
|
+
format: 'r8unorm',
|
|
167
|
+
dimension: '2d',
|
|
168
|
+
aspect: 'all',
|
|
169
|
+
baseMipLevel: 0,
|
|
170
|
+
mipLevelCount: 1,
|
|
171
|
+
baseArrayLayer: 0,
|
|
172
|
+
arrayLayerCount: 1,
|
|
173
|
+
});
|
|
174
|
+
if (!viewRes.ok) {
|
|
175
|
+
runtime.errorRegistry.fire(viewRes.error);
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const samplerRes = device.createSampler({
|
|
180
|
+
label: 'hdrp-ssao-fallback-sampler',
|
|
181
|
+
magFilter: 'linear',
|
|
182
|
+
minFilter: 'linear',
|
|
183
|
+
mipmapFilter: 'linear',
|
|
184
|
+
addressModeU: 'clamp-to-edge',
|
|
185
|
+
addressModeV: 'clamp-to-edge',
|
|
186
|
+
addressModeW: 'clamp-to-edge',
|
|
187
|
+
});
|
|
188
|
+
if (!samplerRes.ok) {
|
|
189
|
+
runtime.errorRegistry.fire(samplerRes.error);
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const resources: SsaoFallbackResources = {
|
|
194
|
+
texture: texRes.value,
|
|
195
|
+
view: viewRes.value,
|
|
196
|
+
sampler: samplerRes.value,
|
|
197
|
+
};
|
|
198
|
+
fallbackCache.set(runtime, resources);
|
|
199
|
+
return resources;
|
|
200
|
+
}
|
|
201
|
+
|
|
43
202
|
/**
|
|
44
203
|
* SSAO GPU resources owned by this module (plan-strategy D-1, D-4).
|
|
45
204
|
*
|
|
@@ -66,7 +225,7 @@ const cache = new WeakMap<RenderSystemRuntime, SsaoBuffers>();
|
|
|
66
225
|
* On `device.createBuffer` / `device.createTexture` failure, fires a
|
|
67
226
|
* structured error on the runtime's error registry and returns `null`.
|
|
68
227
|
*
|
|
69
|
-
* @returns SsaoBuffers on success, null if
|
|
228
|
+
* @returns SsaoBuffers on success, null if an allocation fails.
|
|
70
229
|
*/
|
|
71
230
|
export function getOrCreateSsaoBuffers(runtime: RenderSystemRuntime): SsaoBuffers | null {
|
|
72
231
|
const cached = cache.get(runtime);
|
|
@@ -137,7 +296,7 @@ export function getOrCreateSsaoBuffers(runtime: RenderSystemRuntime): SsaoBuffer
|
|
|
137
296
|
// follows the createRenderer.ts fallback-pixel pattern (line 4330).
|
|
138
297
|
const noiseCopyRes = device.queue.writeTexture(
|
|
139
298
|
{
|
|
140
|
-
texture: noiseTexRes.value
|
|
299
|
+
texture: noiseTexRes.value,
|
|
141
300
|
mipLevel: 0,
|
|
142
301
|
origin: { x: 0, y: 0, z: 0 },
|
|
143
302
|
},
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
// amortized across frames).
|
|
31
31
|
//
|
|
32
32
|
// Concept that does NOT branch by path: `bindingWindowBytes`. It is
|
|
33
|
-
// the static `pbr-skin-mesh-array-bgl @binding(1
|
|
33
|
+
// the static `pbr-skin-mesh-array-bgl @binding(1)` BG entry size,
|
|
34
34
|
// identical on both paths (WGSL declares the same layout). Record-
|
|
35
|
-
// stage uses it verbatim
|
|
36
|
-
//
|
|
37
|
-
//
|
|
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
38
|
//
|
|
39
39
|
// CPU pre-multiply (path-agnostic): writeJointPalette(slice, ibm, jointWorld)
|
|
40
40
|
// -> mat4 per joint: M_i = joint_world_i * IBM_i
|
|
@@ -46,17 +46,17 @@
|
|
|
46
46
|
import type { Mat4 } from '@forgeax/engine-math';
|
|
47
47
|
import { mat4 } from '@forgeax/engine-math';
|
|
48
48
|
import type { Buffer, RhiDevice } from '@forgeax/engine-rhi';
|
|
49
|
-
import { SkinPaletteOverflowError } from '../errors';
|
|
49
|
+
import { SkinPaletteOverflowError } from '../errors/render';
|
|
50
50
|
import {
|
|
51
51
|
GPU_BUFFER_USAGE_COPY_DST,
|
|
52
52
|
GPU_BUFFER_USAGE_STORAGE,
|
|
53
53
|
GPU_BUFFER_USAGE_UNIFORM,
|
|
54
54
|
} from '../gpu-usage';
|
|
55
|
-
import type { SkinPaletteSlice } from '
|
|
55
|
+
import type { SkinPaletteSlice } from './skin-palette-types';
|
|
56
56
|
|
|
57
57
|
const MAT4_BYTES = 64; // 16 f32 * 4 bytes
|
|
58
|
-
// MAX_JOINTS = 255 matches `pbr-skin-mesh-array-bgl @binding(1
|
|
59
|
-
// entry size: 255 * 64 = 16320 B. The number is the MAX joints
|
|
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
60
|
// skinned entity may have. On the storage path the shared buffer holds
|
|
61
61
|
// many entities back-to-back; on the uniform path each entity owns one
|
|
62
62
|
// 16320 B buffer.
|
|
@@ -73,7 +73,7 @@ const PALETTE_OFFSET_ALIGN = 256;
|
|
|
73
73
|
|
|
74
74
|
export interface SkinPaletteAllocator {
|
|
75
75
|
/**
|
|
76
|
-
* Static BG entry size for `pbr-skin-mesh-array-bgl @binding(1
|
|
76
|
+
* Static BG entry size for `pbr-skin-mesh-array-bgl @binding(1)`. Always
|
|
77
77
|
* `MAX_JOINTS * 64 = 16320`; consumers (record stage) bind this size
|
|
78
78
|
* when building the BG. Path-independent.
|
|
79
79
|
*/
|
|
@@ -112,8 +112,6 @@ export interface SkinPaletteAllocator {
|
|
|
112
112
|
ibms: readonly Float32Array[],
|
|
113
113
|
jointWorlds: readonly Mat4[],
|
|
114
114
|
): void;
|
|
115
|
-
/** Upload the renderer projection's previous successful-submit palette. */
|
|
116
|
-
writePreviousJointPalette(slice: SkinPaletteSlice, jointMatrices: Float32Array): void;
|
|
117
115
|
/**
|
|
118
116
|
* Reset for next frame. Storage path: cursor rewinds, shared buffer
|
|
119
117
|
* stays. Uniform path: per-entity buffer cursor rewinds (pool entries
|
|
@@ -129,7 +127,6 @@ export function createSkinPaletteAllocator(
|
|
|
129
127
|
): SkinPaletteAllocator {
|
|
130
128
|
// Storage path: shared buffer state.
|
|
131
129
|
let storageBuffer: Buffer | null = null;
|
|
132
|
-
let previousStorageBuffer: Buffer | null = null;
|
|
133
130
|
let storageCapacity = 0;
|
|
134
131
|
let storageCursor = 0;
|
|
135
132
|
|
|
@@ -140,12 +137,10 @@ export function createSkinPaletteAllocator(
|
|
|
140
137
|
// entity count grows past the historical max). 16320 B / entry
|
|
141
138
|
// bounded by maxUniformBufferBindingSize (>= 16384 by spec floor).
|
|
142
139
|
const pool: Buffer[] = [];
|
|
143
|
-
const previousPool: Buffer[] = [];
|
|
144
140
|
let poolCursor = 0;
|
|
145
141
|
|
|
146
142
|
function ensureStorageCapacity(needed: number): void {
|
|
147
|
-
if (storageBuffer !== null &&
|
|
148
|
-
return;
|
|
143
|
+
if (storageBuffer !== null && needed <= storageCapacity) return;
|
|
149
144
|
let newCapacity = storageCapacity === 0 ? BINDING_WINDOW_BYTES : storageCapacity;
|
|
150
145
|
while (newCapacity < needed) {
|
|
151
146
|
// 1.5x grow, then next multiple of 256 for alignment (plan-strategy D-4).
|
|
@@ -161,35 +156,27 @@ export function createSkinPaletteAllocator(
|
|
|
161
156
|
mappedAtCreation: false,
|
|
162
157
|
});
|
|
163
158
|
if (!bufRes.ok) throw bufRes.error;
|
|
164
|
-
const previousBufRes = device.createBuffer({
|
|
165
|
-
label: 'skin-palette-previous',
|
|
166
|
-
size: newCapacity,
|
|
167
|
-
usage: GPU_BUFFER_USAGE_STORAGE | GPU_BUFFER_USAGE_COPY_DST,
|
|
168
|
-
mappedAtCreation: false,
|
|
169
|
-
});
|
|
170
|
-
if (!previousBufRes.ok) throw previousBufRes.error;
|
|
171
159
|
storageBuffer = bufRes.value;
|
|
172
|
-
previousStorageBuffer = previousBufRes.value;
|
|
173
160
|
storageCapacity = newCapacity;
|
|
174
161
|
}
|
|
175
162
|
|
|
176
|
-
function acquirePoolBuffer(
|
|
177
|
-
if (poolCursor <
|
|
178
|
-
const reused =
|
|
179
|
-
// biome-ignore lint/style/noNonNullAssertion: poolCursor <
|
|
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
|
|
180
167
|
return reused!;
|
|
181
168
|
}
|
|
182
169
|
if (BINDING_WINDOW_BYTES > maxBindingSize) {
|
|
183
170
|
throw new SkinPaletteOverflowError(BINDING_WINDOW_BYTES, maxBindingSize);
|
|
184
171
|
}
|
|
185
172
|
const bufRes = device.createBuffer({
|
|
186
|
-
label,
|
|
173
|
+
label: 'skin-palette',
|
|
187
174
|
size: BINDING_WINDOW_BYTES,
|
|
188
175
|
usage: GPU_BUFFER_USAGE_UNIFORM | GPU_BUFFER_USAGE_COPY_DST,
|
|
189
176
|
mappedAtCreation: false,
|
|
190
177
|
});
|
|
191
178
|
if (!bufRes.ok) throw bufRes.error;
|
|
192
|
-
|
|
179
|
+
pool.push(bufRes.value);
|
|
193
180
|
return bufRes.value;
|
|
194
181
|
}
|
|
195
182
|
|
|
@@ -205,8 +192,6 @@ export function createSkinPaletteAllocator(
|
|
|
205
192
|
ensureStorageCapacity(needed);
|
|
206
193
|
// biome-ignore lint/style/noNonNullAssertion: ensureStorageCapacity throws if buffer cannot be created
|
|
207
194
|
const buffer = storageBuffer!;
|
|
208
|
-
// biome-ignore lint/style/noNonNullAssertion: ensureStorageCapacity creates the pair atomically or throws
|
|
209
|
-
const previousBuffer = previousStorageBuffer!;
|
|
210
195
|
// Cursor advances by the actual joint footprint, then rounds up to
|
|
211
196
|
// PALETTE_OFFSET_ALIGN so the NEXT slice's byteOffset stays a valid
|
|
212
197
|
// dynamic offset (WebGPU requires 256-byte alignment). Slices still pack
|
|
@@ -216,25 +201,12 @@ export function createSkinPaletteAllocator(
|
|
|
216
201
|
storageCursor =
|
|
217
202
|
(offset + jointCount * MAT4_BYTES + (PALETTE_OFFSET_ALIGN - 1)) &
|
|
218
203
|
~(PALETTE_OFFSET_ALIGN - 1);
|
|
219
|
-
return {
|
|
220
|
-
jointCount,
|
|
221
|
-
jointMatrices: new Float32Array(jointCount * 16),
|
|
222
|
-
byteOffset: offset,
|
|
223
|
-
buffer,
|
|
224
|
-
previousBuffer,
|
|
225
|
-
};
|
|
204
|
+
return { jointCount, byteOffset: offset, buffer };
|
|
226
205
|
}
|
|
227
206
|
// Uniform fallback: each slice gets its own 16320 B UBO.
|
|
228
|
-
const buffer = acquirePoolBuffer(
|
|
229
|
-
const previousBuffer = acquirePoolBuffer(previousPool, 'skin-palette-previous');
|
|
207
|
+
const buffer = acquirePoolBuffer();
|
|
230
208
|
poolCursor += 1;
|
|
231
|
-
return {
|
|
232
|
-
jointCount,
|
|
233
|
-
jointMatrices: new Float32Array(jointCount * 16),
|
|
234
|
-
byteOffset: 0,
|
|
235
|
-
buffer,
|
|
236
|
-
previousBuffer,
|
|
237
|
-
};
|
|
209
|
+
return { jointCount, byteOffset: 0, buffer };
|
|
238
210
|
}
|
|
239
211
|
|
|
240
212
|
function writeJointPalette(
|
|
@@ -247,37 +219,23 @@ export function createSkinPaletteAllocator(
|
|
|
247
219
|
const payload = new Float32Array(count * 16);
|
|
248
220
|
const temp = mat4.create();
|
|
249
221
|
const ibm = mat4.create();
|
|
250
|
-
const ibmNums = ibm as unknown as number[];
|
|
251
222
|
for (let i = 0; i < count; i++) {
|
|
252
223
|
const ibmFlat = ibms[i];
|
|
253
224
|
const jw = jointWorlds[i];
|
|
254
225
|
if (ibmFlat === undefined || jw === undefined) continue;
|
|
255
226
|
for (let k = 0; k < 16; k++) {
|
|
256
|
-
|
|
227
|
+
ibm[k] = ibmFlat[k] ?? 0;
|
|
257
228
|
}
|
|
258
229
|
mat4.multiply(temp, jw, ibm);
|
|
259
230
|
const base = i * 16;
|
|
260
231
|
for (let j = 0; j < 16; j++) {
|
|
261
|
-
payload[base + j] =
|
|
232
|
+
payload[base + j] = temp[j] ?? 0;
|
|
262
233
|
}
|
|
263
234
|
}
|
|
264
|
-
slice.jointMatrices.set(payload);
|
|
265
235
|
const res = device.queue.writeBuffer(slice.buffer, slice.byteOffset, payload);
|
|
266
236
|
if (!res.ok) throw res.error;
|
|
267
237
|
}
|
|
268
238
|
|
|
269
|
-
function writePreviousJointPalette(slice: SkinPaletteSlice, jointMatrices: Float32Array): void {
|
|
270
|
-
const count = Math.min(slice.jointCount * 16, jointMatrices.length);
|
|
271
|
-
if (count === 0) return;
|
|
272
|
-
const payload = jointMatrices.subarray(0, count);
|
|
273
|
-
const result = device.queue.writeBuffer(
|
|
274
|
-
slice.previousBuffer ?? slice.buffer,
|
|
275
|
-
slice.byteOffset,
|
|
276
|
-
payload,
|
|
277
|
-
);
|
|
278
|
-
if (!result.ok) throw result.error;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
239
|
function resetForFrame(): void {
|
|
282
240
|
storageCursor = 0;
|
|
283
241
|
poolCursor = 0;
|
|
@@ -288,7 +246,6 @@ export function createSkinPaletteAllocator(
|
|
|
288
246
|
useStorageBuffer,
|
|
289
247
|
allocateSlice,
|
|
290
248
|
writeJointPalette,
|
|
291
|
-
writePreviousJointPalette,
|
|
292
249
|
resetForFrame,
|
|
293
250
|
};
|
|
294
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
|
+
}
|
|
@@ -57,9 +57,8 @@
|
|
|
57
57
|
// other engine resource consumer).
|
|
58
58
|
|
|
59
59
|
import type { World } from '@forgeax/engine-ecs';
|
|
60
|
-
import
|
|
61
|
-
import { err, ok } from '@forgeax/engine-types';
|
|
62
|
-
import { ResourceInvalidValueError } from '../errors';
|
|
60
|
+
import { ResourceInvalidValueError } from '@forgeax/engine-ecs/projection';
|
|
61
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
63
62
|
|
|
64
63
|
// ────────────────────────────────────────────────────────────────────────────
|
|
65
64
|
// POD interface + KV key + 3 named mode constants
|
|
@@ -82,6 +81,20 @@ export interface TransparentSortConfig {
|
|
|
82
81
|
readonly yzAlpha: number;
|
|
83
82
|
}
|
|
84
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
|
+
|
|
85
98
|
/** World resource key for `TransparentSortConfig` KV entry. */
|
|
86
99
|
export const TRANSPARENT_SORT_CONFIG_KEY = 'TransparentSortConfig' as const;
|
|
87
100
|
|
|
@@ -97,6 +110,15 @@ export const TRANSPARENT_SORT_MODE_LAYER_YZ = 2;
|
|
|
97
110
|
/** 3D distance: sortValue = -(dist^2) to cameraPos, back-to-front (far first). */
|
|
98
111
|
export const TRANSPARENT_SORT_MODE_DISTANCE = 3;
|
|
99
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
|
+
|
|
100
122
|
// ────────────────────────────────────────────────────────────────────────────
|
|
101
123
|
// Internal: silent default + mode validity check
|
|
102
124
|
// ────────────────────────────────────────────────────────────────────────────
|