@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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Walks every TileLayer attached to a Tilemap via ChildOf; when a layer is
|
|
4
4
|
// dirty (or has never been extracted), purges its previously-spawned derived
|
|
5
5
|
// per-cell entities and re-spawns one ECS entity per non-zero cell. Each
|
|
6
|
-
// derived entity carries Transform + MeshFilter (
|
|
6
|
+
// derived entity carries Transform + MeshFilter (HANDLE_QUAD) + MeshRenderer
|
|
7
7
|
// + Layer + ChildOf { parent: layerEntity }. The ChildOf edge lets
|
|
8
8
|
// `world.despawn(tilemapEntity)` cascade-despawn the entire subtree
|
|
9
9
|
// (Tilemap -> TileLayer -> derived render entities) via the engine's
|
|
@@ -49,8 +49,12 @@
|
|
|
49
49
|
// §D-2 (multi-cell + flip x pivot) + §D-5 (M0 baseline file-by-file
|
|
50
50
|
// ECS API adaptation) + §D-7 step 3 (half-texel UV inset).
|
|
51
51
|
|
|
52
|
+
import {
|
|
53
|
+
HANDLE_QUAD,
|
|
54
|
+
resolveTilesetRuntime,
|
|
55
|
+
type TilesetAtlasLookup,
|
|
56
|
+
} from '@forgeax/engine-assets-runtime';
|
|
52
57
|
import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
53
|
-
import { createPrimitiveMesh } from '@forgeax/engine-geometry';
|
|
54
58
|
import { decodeTileBits } from '@forgeax/engine-graphics-extras';
|
|
55
59
|
import { type box3, frustum, mat4 } from '@forgeax/engine-math';
|
|
56
60
|
import { ChildOf, Children, Transform } from '@forgeax/engine-scene';
|
|
@@ -60,6 +64,7 @@ import {
|
|
|
60
64
|
type TilesetAsset,
|
|
61
65
|
type TilesetRegion,
|
|
62
66
|
type TilesetTileEntry,
|
|
67
|
+
toShared,
|
|
63
68
|
unwrapHandle,
|
|
64
69
|
} from '@forgeax/engine-types';
|
|
65
70
|
import {
|
|
@@ -74,8 +79,7 @@ import {
|
|
|
74
79
|
TileLayer,
|
|
75
80
|
Tilemap,
|
|
76
81
|
} from './components';
|
|
77
|
-
import {
|
|
78
|
-
import { resolveTilesetRuntime, type TilesetAtlasLookup } from './tilemap/resolve-tileset-runtime';
|
|
82
|
+
import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from './materials';
|
|
79
83
|
|
|
80
84
|
// Module-scoped caches (charter P5 — engine-side memoisation; AI users
|
|
81
85
|
// never reach in). Test harness can flush them via the reset helpers.
|
|
@@ -94,18 +98,8 @@ import { resolveTilesetRuntime, type TilesetAtlasLookup } from './tilemap/resolv
|
|
|
94
98
|
// The shader's PER_INSTANCE_REGION=true variant reads per-instance
|
|
95
99
|
// UV from the instance buffer, not from the material UBO, so the
|
|
96
100
|
// placeholder is ignored at draw time.
|
|
97
|
-
let atlasMaterialCache = new WeakMap<World, Map<string,
|
|
98
|
-
let atlasOnlyMaterialCache = new WeakMap<World, Map<string,
|
|
99
|
-
const unitQuadHandleByWorld = new WeakMap<World, Handle<'MeshAsset', 'shared'>>();
|
|
100
|
-
|
|
101
|
-
function unitQuadHandle(world: World): Handle<'MeshAsset', 'shared'> {
|
|
102
|
-
const existing = unitQuadHandleByWorld.get(world);
|
|
103
|
-
if (existing !== undefined) return existing;
|
|
104
|
-
const mesh = createPrimitiveMesh('quad').unwrap();
|
|
105
|
-
const handle = world.internSharedRef('MeshAsset', mesh);
|
|
106
|
-
unitQuadHandleByWorld.set(world, handle);
|
|
107
|
-
return handle;
|
|
108
|
-
}
|
|
101
|
+
let atlasMaterialCache = new WeakMap<World, Map<string, Handle<'MaterialAsset', 'shared'>>>();
|
|
102
|
+
let atlasOnlyMaterialCache = new WeakMap<World, Map<string, Handle<'MaterialAsset', 'shared'>>>();
|
|
109
103
|
// tweak-20260714 M3 (plan-strategy §2 D-3): the terrain (sortScope='layer')
|
|
110
104
|
// derived-entity tracker Map + first-frame-heuristic Set that used to live
|
|
111
105
|
// alongside these material caches were retired once every derived entity
|
|
@@ -159,7 +153,7 @@ interface StreamLayerCache {
|
|
|
159
153
|
}
|
|
160
154
|
interface PerWorldStreamingCache {
|
|
161
155
|
readonly layers: Map<string, StreamLayerCache>;
|
|
162
|
-
readonly chunkEntities: Map<string,
|
|
156
|
+
readonly chunkEntities: Map<string, EntityHandle[]>;
|
|
163
157
|
readonly activeChunks: Map<string, Set<number>>;
|
|
164
158
|
}
|
|
165
159
|
|
|
@@ -183,8 +177,8 @@ function streamingCache(world: World): PerWorldStreamingCache {
|
|
|
183
177
|
* TilesetAsset reload.
|
|
184
178
|
*/
|
|
185
179
|
export function resetTilemapChunkExtractCache(): void {
|
|
186
|
-
atlasMaterialCache = new WeakMap<World, Map<string,
|
|
187
|
-
atlasOnlyMaterialCache = new WeakMap<World, Map<string,
|
|
180
|
+
atlasMaterialCache = new WeakMap<World, Map<string, Handle<'MaterialAsset', 'shared'>>>();
|
|
181
|
+
atlasOnlyMaterialCache = new WeakMap<World, Map<string, Handle<'MaterialAsset', 'shared'>>>();
|
|
188
182
|
}
|
|
189
183
|
|
|
190
184
|
/**
|
|
@@ -288,22 +282,23 @@ function resolveTilesetMaterial(
|
|
|
288
282
|
tileset: TilesetAsset,
|
|
289
283
|
regionIndex: number,
|
|
290
284
|
lookup: (guid: string) => TilesetAtlasLookup,
|
|
291
|
-
):
|
|
285
|
+
): Handle<'MaterialAsset', 'shared'> {
|
|
292
286
|
const region = tileset.regions[regionIndex];
|
|
293
|
-
if (region === undefined) return 0;
|
|
287
|
+
if (region === undefined) return toShared<'MaterialAsset'>(0);
|
|
294
288
|
// 3-hop walk: regions[i].atlasIndex (default 0) -> atlases[atlasIndex].
|
|
295
289
|
// atlasIndex out-of-range is register-time fail-fast via
|
|
296
290
|
// `validateTilesetPayload` (m1-t6); the runtime resolver still bails
|
|
297
291
|
// when the slot is unexpectedly empty (charter P3 fail-safe).
|
|
298
292
|
const atlasIndex = region.atlasIndex ?? 0;
|
|
299
293
|
const atlasGuid = tileset.atlases[atlasIndex];
|
|
300
|
-
if (atlasGuid === undefined) return 0;
|
|
294
|
+
if (atlasGuid === undefined) return toShared<'MaterialAsset'>(0);
|
|
301
295
|
const atlas = resolveTilesetRuntime(world, atlasGuid, lookup);
|
|
302
|
-
if (!atlas.ok) return 0;
|
|
296
|
+
if (!atlas.ok) return toShared<'MaterialAsset'>(0);
|
|
303
297
|
const atlasHandle = atlas.value.handle;
|
|
304
298
|
const atlasId = unwrapHandle(atlasHandle);
|
|
305
299
|
const cacheKey = `${atlasId}|${regionIndex}`;
|
|
306
|
-
const cache =
|
|
300
|
+
const cache =
|
|
301
|
+
atlasMaterialCache.get(world) ?? new Map<string, Handle<'MaterialAsset', 'shared'>>();
|
|
307
302
|
atlasMaterialCache.set(world, cache);
|
|
308
303
|
const cached = cache.get(cacheKey);
|
|
309
304
|
if (cached !== undefined) return cached;
|
|
@@ -345,7 +340,7 @@ function resolveTilesetMaterial(
|
|
|
345
340
|
],
|
|
346
341
|
values: {
|
|
347
342
|
colorTint: [1.0, 1.0, 1.0, 1.0],
|
|
348
|
-
baseColorTexture:
|
|
343
|
+
baseColorTexture: atlasHandle,
|
|
349
344
|
region: [u, v, w, h],
|
|
350
345
|
pivotAndSize: [0.5, 0.5, 1.0, 1.0],
|
|
351
346
|
flipY: 1.0,
|
|
@@ -355,9 +350,8 @@ function resolveTilesetMaterial(
|
|
|
355
350
|
'MaterialAsset',
|
|
356
351
|
matPayload,
|
|
357
352
|
);
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
return id;
|
|
353
|
+
cache.set(cacheKey, matHandle);
|
|
354
|
+
return matHandle;
|
|
361
355
|
}
|
|
362
356
|
|
|
363
357
|
/**
|
|
@@ -381,15 +375,16 @@ function resolveAtlasOnlyMaterial(
|
|
|
381
375
|
tileset: TilesetAsset,
|
|
382
376
|
atlasIndex: number,
|
|
383
377
|
lookup: (guid: string) => TilesetAtlasLookup,
|
|
384
|
-
):
|
|
378
|
+
): Handle<'MaterialAsset', 'shared'> {
|
|
385
379
|
const atlasGuid = tileset.atlases[atlasIndex];
|
|
386
|
-
if (atlasGuid === undefined) return 0;
|
|
380
|
+
if (atlasGuid === undefined) return toShared<'MaterialAsset'>(0);
|
|
387
381
|
const atlas = resolveTilesetRuntime(world, atlasGuid, lookup);
|
|
388
|
-
if (!atlas.ok) return 0;
|
|
382
|
+
if (!atlas.ok) return toShared<'MaterialAsset'>(0);
|
|
389
383
|
const atlasHandle = atlas.value.handle;
|
|
390
384
|
const atlasId = unwrapHandle(atlasHandle);
|
|
391
385
|
const cacheKey = String(atlasId);
|
|
392
|
-
const cache =
|
|
386
|
+
const cache =
|
|
387
|
+
atlasOnlyMaterialCache.get(world) ?? new Map<string, Handle<'MaterialAsset', 'shared'>>();
|
|
393
388
|
atlasOnlyMaterialCache.set(world, cache);
|
|
394
389
|
const cached = cache.get(cacheKey);
|
|
395
390
|
if (cached !== undefined) return cached;
|
|
@@ -409,7 +404,7 @@ function resolveAtlasOnlyMaterial(
|
|
|
409
404
|
],
|
|
410
405
|
values: {
|
|
411
406
|
colorTint: [1.0, 1.0, 1.0, 1.0],
|
|
412
|
-
baseColorTexture:
|
|
407
|
+
baseColorTexture: atlasHandle,
|
|
413
408
|
region: [0.0, 0.0, 1.0, 1.0],
|
|
414
409
|
pivotAndSize: [0.5, 0.5, 1.0, 1.0],
|
|
415
410
|
flipY: 1.0,
|
|
@@ -419,9 +414,8 @@ function resolveAtlasOnlyMaterial(
|
|
|
419
414
|
'MaterialAsset',
|
|
420
415
|
matPayload,
|
|
421
416
|
);
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
return id;
|
|
417
|
+
cache.set(cacheKey, matHandle);
|
|
418
|
+
return matHandle;
|
|
425
419
|
}
|
|
426
420
|
|
|
427
421
|
/**
|
|
@@ -460,7 +454,7 @@ interface DerivedSpawnSpec {
|
|
|
460
454
|
readonly cellY: number;
|
|
461
455
|
readonly tileId: number;
|
|
462
456
|
readonly packedTile: number;
|
|
463
|
-
readonly materialHandle:
|
|
457
|
+
readonly materialHandle: Handle<'MaterialAsset', 'shared'>;
|
|
464
458
|
readonly chunkIndex: number;
|
|
465
459
|
// M2: multi-cell footprint + custom pivot land per-tile via TilesetTileEntry.
|
|
466
460
|
readonly widthCells: number;
|
|
@@ -512,7 +506,7 @@ function specFor(
|
|
|
512
506
|
chunkSize: number,
|
|
513
507
|
cellIndex: number,
|
|
514
508
|
packedTile: number,
|
|
515
|
-
materialHandle:
|
|
509
|
+
materialHandle: Handle<'MaterialAsset', 'shared'>,
|
|
516
510
|
entry: TilesetTileEntry,
|
|
517
511
|
atlasIndex: number,
|
|
518
512
|
): DerivedSpawnSpec {
|
|
@@ -627,11 +621,11 @@ function spawnDerivedRenderEntities(
|
|
|
627
621
|
scale: [scaleX, scaleY, 1],
|
|
628
622
|
},
|
|
629
623
|
},
|
|
630
|
-
{ component: MeshFilter, data: { assetHandle:
|
|
624
|
+
{ component: MeshFilter, data: { assetHandle: HANDLE_QUAD } },
|
|
631
625
|
{
|
|
632
626
|
component: MeshRenderer,
|
|
633
627
|
data: {
|
|
634
|
-
materials: [spec.materialHandle
|
|
628
|
+
materials: [spec.materialHandle],
|
|
635
629
|
},
|
|
636
630
|
},
|
|
637
631
|
{ component: Layer, data: { value: layerValue } },
|
|
@@ -654,7 +648,7 @@ function spawnDerivedRenderEntities(
|
|
|
654
648
|
*
|
|
655
649
|
* Layout:
|
|
656
650
|
* - Transform: identity (the per-instance mat4 carries world-space TRS).
|
|
657
|
-
* - MeshFilter:
|
|
651
|
+
* - MeshFilter: HANDLE_QUAD.
|
|
658
652
|
* - MeshRenderer: atlas-only sprite material (region placeholder; shader
|
|
659
653
|
* reads per-instance UV from SpriteInstances.regions under the
|
|
660
654
|
* PER_INSTANCE_REGION=true variant — selected at record stage).
|
|
@@ -678,21 +672,20 @@ function spawnSpriteInstancesGroup(
|
|
|
678
672
|
layerOrder: number,
|
|
679
673
|
chunkIndex: number,
|
|
680
674
|
atlasIndex: number,
|
|
681
|
-
materialHandle:
|
|
675
|
+
materialHandle: Handle<'MaterialAsset', 'shared'>,
|
|
682
676
|
cellSpecs: readonly DerivedSpawnSpec[],
|
|
683
677
|
): EntityHandle | undefined {
|
|
684
678
|
if (cellSpecs.length === 0) return undefined;
|
|
685
679
|
const N = cellSpecs.length;
|
|
686
680
|
const transforms = new Float32Array(N * 16);
|
|
687
681
|
const regions = new Float32Array(N * 4);
|
|
688
|
-
const tmpMat =
|
|
689
|
-
const tmpF = tmpMat as unknown as Float32Array;
|
|
682
|
+
const tmpMat = mat4.create();
|
|
690
683
|
const tmpT: [number, number, number] = [0, 0, 0];
|
|
691
684
|
const tmpR: [number, number, number, number] = [0, 0, 0, 1];
|
|
692
685
|
const tmpS: [number, number, number] = [1, 1, 1];
|
|
693
686
|
|
|
694
687
|
// Per-chunk frustum cull: entity Transform = chunk world center + chunk
|
|
695
|
-
// extents (scaleX/Y). The frustum culler reads the entity AABB (
|
|
688
|
+
// extents (scaleX/Y). The frustum culler reads the entity AABB (HANDLE_QUAD
|
|
696
689
|
// local [-0.5, 0.5]² expanded by entity scale/pos) → world AABB exactly
|
|
697
690
|
// covers the chunk footprint.
|
|
698
691
|
//
|
|
@@ -744,10 +737,10 @@ function spawnSpriteInstancesGroup(
|
|
|
744
737
|
const dst = i * 16;
|
|
745
738
|
for (let c = 0; c < 4; c++) {
|
|
746
739
|
const base = c * 4;
|
|
747
|
-
const w3 =
|
|
748
|
-
transforms[dst + base + 0] = ((
|
|
749
|
-
transforms[dst + base + 1] = ((
|
|
750
|
-
transforms[dst + base + 2] =
|
|
740
|
+
const w3 = tmpMat[base + 3] ?? 0;
|
|
741
|
+
transforms[dst + base + 0] = ((tmpMat[base + 0] ?? 0) - chunkCenterX * w3) * invSX;
|
|
742
|
+
transforms[dst + base + 1] = ((tmpMat[base + 1] ?? 0) - chunkCenterY * w3) * invSY;
|
|
743
|
+
transforms[dst + base + 2] = tmpMat[base + 2] ?? 0;
|
|
751
744
|
transforms[dst + base + 3] = w3;
|
|
752
745
|
}
|
|
753
746
|
|
|
@@ -779,11 +772,11 @@ function spawnSpriteInstancesGroup(
|
|
|
779
772
|
scale: [chunkScaleX, chunkScaleY, 1],
|
|
780
773
|
},
|
|
781
774
|
},
|
|
782
|
-
{ component: MeshFilter, data: { assetHandle:
|
|
775
|
+
{ component: MeshFilter, data: { assetHandle: HANDLE_QUAD } },
|
|
783
776
|
{
|
|
784
777
|
component: MeshRenderer,
|
|
785
778
|
data: {
|
|
786
|
-
materials: [materialHandle
|
|
779
|
+
materials: [materialHandle],
|
|
787
780
|
},
|
|
788
781
|
},
|
|
789
782
|
{ component: SpriteInstances, data: { transforms, regions } },
|
|
@@ -890,18 +883,8 @@ function buildCameraFrustumPlanes(world: World): frustum.Frustum | null {
|
|
|
890
883
|
const trRes = world.get(camEntity, Transform);
|
|
891
884
|
if (!camRes.ok || !trRes.ok) continue;
|
|
892
885
|
|
|
893
|
-
const cam = camRes.value
|
|
894
|
-
|
|
895
|
-
far: number;
|
|
896
|
-
projection: number;
|
|
897
|
-
left: number;
|
|
898
|
-
right: number;
|
|
899
|
-
bottom: number;
|
|
900
|
-
top: number;
|
|
901
|
-
fov: number;
|
|
902
|
-
aspect: number;
|
|
903
|
-
};
|
|
904
|
-
const tr = trRes.value as unknown as { world: Float32Array };
|
|
886
|
+
const cam = camRes.value;
|
|
887
|
+
const tr = trRes.value;
|
|
905
888
|
|
|
906
889
|
const { near, far } = cam;
|
|
907
890
|
if (near >= far) continue;
|
|
@@ -960,7 +943,7 @@ function buildCameraFrustumPlanes(world: World): frustum.Frustum | null {
|
|
|
960
943
|
* §2 D-4). `bucketTileLayer` filters empty cells before the byChunk map
|
|
961
944
|
* is built, so this branch should never trigger in production; the
|
|
962
945
|
* sentinel is an explicit "no visible pixels" value that
|
|
963
|
-
* `frustum.intersectsBox` rejects immediately, avoiding
|
|
946
|
+
* `frustum.intersectsBox` rejects immediately, avoiding a silent NaN
|
|
964
947
|
* propagation path (charter P3 explicit failure).
|
|
965
948
|
*
|
|
966
949
|
* Note: `frustum.intersectsBox` picks a p-vertex per plane and computes
|
|
@@ -997,7 +980,7 @@ export function computeChunkStreamBounds(
|
|
|
997
980
|
if (x1 > maxX) maxX = x1;
|
|
998
981
|
if (y1 > maxY) maxY = y1;
|
|
999
982
|
}
|
|
1000
|
-
return [minX, minY, -1, maxX, maxY, 1]
|
|
983
|
+
return [minX, minY, -1, maxX, maxY, 1];
|
|
1001
984
|
}
|
|
1002
985
|
|
|
1003
986
|
/**
|
|
@@ -1074,7 +1057,7 @@ function evictDeadPerCellStreamingCaches(work: readonly LayerWork[], world: Worl
|
|
|
1074
1057
|
const cache = streamingCache(world);
|
|
1075
1058
|
const aliveLayerKeys = new Set<string>();
|
|
1076
1059
|
for (const w of work) {
|
|
1077
|
-
aliveLayerKeys.add(String(
|
|
1060
|
+
aliveLayerKeys.add(String(w.layerEntity));
|
|
1078
1061
|
}
|
|
1079
1062
|
const deadLayerKeys = new Set<string>();
|
|
1080
1063
|
for (const layerKey of cache.activeChunks.keys()) {
|
|
@@ -1144,7 +1127,7 @@ export function tilemapChunkExtractSystem(
|
|
|
1144
1127
|
for (const w of work) {
|
|
1145
1128
|
// The outer WeakMap owns World identity; this generation-bearing packed
|
|
1146
1129
|
// entity handle prevents aliasing when an ECS slot is reused.
|
|
1147
|
-
const layerKey = String(
|
|
1130
|
+
const layerKey = String(w.layerEntity);
|
|
1148
1131
|
// AC-04: decode via the canonical SortScope union; avoid relying on the
|
|
1149
1132
|
// raw encoding (0='layer', 1='per-cell') leaking through this call site.
|
|
1150
1133
|
// `decodeSortScope` is the SSOT used throughout `bucketTileLayer` (see
|
|
@@ -1277,7 +1260,7 @@ export function tilemapChunkExtractSystem(
|
|
|
1277
1260
|
|
|
1278
1261
|
if (visible && !wasActive) {
|
|
1279
1262
|
// Spawn per-cell entities for this newly-visible chunk.
|
|
1280
|
-
const spawned:
|
|
1263
|
+
const spawned: EntityHandle[] = [];
|
|
1281
1264
|
for (const spec of specs) {
|
|
1282
1265
|
const e = spawnDerivedRenderEntities(
|
|
1283
1266
|
world,
|
|
@@ -1288,7 +1271,7 @@ export function tilemapChunkExtractSystem(
|
|
|
1288
1271
|
spec.packedTile,
|
|
1289
1272
|
cache.sortScope,
|
|
1290
1273
|
);
|
|
1291
|
-
spawned.push(
|
|
1274
|
+
spawned.push(e);
|
|
1292
1275
|
}
|
|
1293
1276
|
streaming.chunkEntities.set(`${layerKey}:${chunkIdx}`, spawned);
|
|
1294
1277
|
activeSet.add(chunkIdx);
|
|
@@ -1297,7 +1280,7 @@ export function tilemapChunkExtractSystem(
|
|
|
1297
1280
|
const key = `${layerKey}:${chunkIdx}`;
|
|
1298
1281
|
const entities = streaming.chunkEntities.get(key);
|
|
1299
1282
|
if (entities !== undefined) {
|
|
1300
|
-
for (const e of entities) world.despawn(e
|
|
1283
|
+
for (const e of entities) world.despawn(e);
|
|
1301
1284
|
streaming.chunkEntities.delete(key);
|
|
1302
1285
|
}
|
|
1303
1286
|
activeSet.delete(chunkIdx);
|
|
@@ -13,26 +13,27 @@ import {
|
|
|
13
13
|
GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
|
|
14
14
|
GPU_TEXTURE_USAGE_TEXTURE_BINDING,
|
|
15
15
|
} from './gpu-texture-usage';
|
|
16
|
+
import { buildPerFrameBindGroups } from './record/frame-lighting';
|
|
17
|
+
import { encodeMainPass } from './record/main-pass';
|
|
18
|
+
import type {
|
|
19
|
+
_InternalRenderPipelineContext,
|
|
20
|
+
RenderSystemInternals,
|
|
21
|
+
} from './record/render-context';
|
|
16
22
|
import {
|
|
17
|
-
encodeMainPass,
|
|
18
23
|
encodeSkyboxPass,
|
|
19
24
|
recordBloomBlurHPass,
|
|
20
25
|
recordBloomBlurVPass,
|
|
21
26
|
recordBloomBrightPass,
|
|
22
27
|
recordBloomCompositePass,
|
|
23
|
-
} from './record';
|
|
24
|
-
import {
|
|
28
|
+
} from './record/skybox-post-pass';
|
|
29
|
+
import { STANDARD_TONEMAP_FEATURE_ID } from './render-contract';
|
|
25
30
|
import {
|
|
26
31
|
encodeFullscreenPass,
|
|
27
32
|
recordSsaoBlurPass,
|
|
28
33
|
recordSsaoCalcPass,
|
|
29
|
-
TONEMAP_POST_PROCESS_ID,
|
|
30
34
|
} from './render-graph-primitives';
|
|
31
35
|
import type { RenderPipelineFrame, RenderPipelineGpuDrivenProjection } from './render-pipeline';
|
|
32
|
-
import type
|
|
33
|
-
import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline-target';
|
|
34
|
-
import type { RenderSystemInternals } from './render-system';
|
|
35
|
-
import type { ResolvedSsaoParameters } from './ssao-config';
|
|
36
|
+
import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline';
|
|
36
37
|
|
|
37
38
|
function resolvedView(resources: GraphResourceResolver, view: GraphTextureView): TextureView {
|
|
38
39
|
const result = resources.textureView(view);
|
|
@@ -180,14 +181,14 @@ export function addTypedScenePass(
|
|
|
180
181
|
: resolvedView(resources, options.spotShadow.view);
|
|
181
182
|
const ssao =
|
|
182
183
|
options.ssao === undefined ? undefined : resolvedView(resources, options.ssao.view);
|
|
183
|
-
|
|
184
|
-
|
|
184
|
+
internal.frameState.currentDirectionalShadowView = directionalShadow ?? null;
|
|
185
|
+
internal.frameState.currentSpotShadowView = spotShadow ?? null;
|
|
185
186
|
const groups = buildPerFrameBindGroups(
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
187
|
+
internal.runtime as RenderSystemInternals,
|
|
188
|
+
internal.frameState,
|
|
189
|
+
internal.pipelineState,
|
|
190
|
+
internal.validated.length > 0 || options.gpuDriven !== undefined,
|
|
191
|
+
internal.bindGroupCounts,
|
|
191
192
|
{ directionalShadow, spotShadow },
|
|
192
193
|
);
|
|
193
194
|
if (groups.viewBindGroup !== null) {
|
|
@@ -224,14 +225,15 @@ export function addTypedScenePass(
|
|
|
224
225
|
export function addTypedFrameObservationPass(
|
|
225
226
|
graph: RenderGraphBuilder<RenderPipelineFrame>,
|
|
226
227
|
target: RenderPipelineTarget,
|
|
227
|
-
pipelineId: 'forgeax::
|
|
228
|
+
pipelineId: 'forgeax::standard',
|
|
228
229
|
): Result<void, RenderGraphError> {
|
|
229
230
|
return graph.addCopyPass('linear-hdr-observation', {
|
|
230
231
|
accesses: [{ resource: target.view, usage: 'copy-src' }],
|
|
231
232
|
encode: ({ frame, resources }) => {
|
|
233
|
+
const internal = frame as _InternalRenderPipelineContext;
|
|
232
234
|
const texture = resources.texture(target.texture);
|
|
233
235
|
if (!texture.ok) throw texture.error;
|
|
234
|
-
|
|
236
|
+
internal.frameState.currentFrameObservationSource = {
|
|
235
237
|
texture: texture.value,
|
|
236
238
|
descriptor: {
|
|
237
239
|
texture: texture.value,
|
|
@@ -243,7 +245,7 @@ export function addTypedFrameObservationPass(
|
|
|
243
245
|
GPU_TEXTURE_USAGE_TEXTURE_BINDING,
|
|
244
246
|
sample: target.sampleCount,
|
|
245
247
|
},
|
|
246
|
-
frameId:
|
|
248
|
+
frameId: internal.frameState.frameNumber,
|
|
247
249
|
pipelineId,
|
|
248
250
|
backendId: frame.runtime.device.caps.backendKind,
|
|
249
251
|
};
|
|
@@ -330,7 +332,6 @@ export interface TypedSsaoTargets {
|
|
|
330
332
|
readonly depth: RenderPipelineTarget;
|
|
331
333
|
readonly raw: RenderPipelineTarget;
|
|
332
334
|
readonly blurred: RenderPipelineTarget;
|
|
333
|
-
readonly parameters: ResolvedSsaoParameters;
|
|
334
335
|
}
|
|
335
336
|
|
|
336
337
|
export function addTypedSsaoPasses(
|
|
@@ -367,7 +368,6 @@ export function addTypedSsaoPasses(
|
|
|
367
368
|
depth: resolvedDepthView(frame, resources, targets.depth),
|
|
368
369
|
depthCacheKey,
|
|
369
370
|
},
|
|
370
|
-
targets.parameters,
|
|
371
371
|
);
|
|
372
372
|
},
|
|
373
373
|
});
|
|
@@ -475,21 +475,31 @@ export function addTypedCompositePostEffects(
|
|
|
475
475
|
depth: RenderPipelineTarget,
|
|
476
476
|
size: { readonly width: number; readonly height: number },
|
|
477
477
|
): Result<void, RenderGraphError> {
|
|
478
|
+
let currentInput = input;
|
|
478
479
|
for (let index = 0; index < effects.length; index += 1) {
|
|
479
480
|
const shader = effects[index];
|
|
480
481
|
if (shader === undefined) continue;
|
|
482
|
+
const effectInput = currentInput;
|
|
481
483
|
const scratch = createRenderPipelineTarget(graph, `post-effect-scratch-${index}`, {
|
|
482
484
|
format: output.format as GPUTextureFormat,
|
|
483
485
|
size: 'surface',
|
|
484
486
|
});
|
|
485
487
|
if (!scratch.ok) return scratch;
|
|
488
|
+
const effectOutput =
|
|
489
|
+
index === effects.length - 1
|
|
490
|
+
? ok(output)
|
|
491
|
+
: createRenderPipelineTarget(graph, `post-effect-output-${index}`, {
|
|
492
|
+
format: output.format as GPUTextureFormat,
|
|
493
|
+
size: 'surface',
|
|
494
|
+
});
|
|
495
|
+
if (!effectOutput.ok) return effectOutput;
|
|
486
496
|
const copied = graph.addCopyPass(`post-effect-copy-${index}`, {
|
|
487
497
|
accesses: [
|
|
488
|
-
{ resource:
|
|
498
|
+
{ resource: effectInput.view, usage: 'copy-src' },
|
|
489
499
|
{ resource: scratch.value.view, usage: 'copy-dst' },
|
|
490
500
|
],
|
|
491
501
|
encode: ({ encoder, resources }) => {
|
|
492
|
-
const source = resources.texture(
|
|
502
|
+
const source = resources.texture(effectInput.texture);
|
|
493
503
|
if (!source.ok) throw source.error;
|
|
494
504
|
const destination = resources.texture(scratch.value.texture);
|
|
495
505
|
if (!destination.ok) throw destination.error;
|
|
@@ -505,10 +515,11 @@ export function addTypedCompositePostEffects(
|
|
|
505
515
|
name: `post-effect-${index}`,
|
|
506
516
|
shader,
|
|
507
517
|
input: scratch.value,
|
|
508
|
-
output,
|
|
518
|
+
output: effectOutput.value,
|
|
509
519
|
depth,
|
|
510
520
|
});
|
|
511
521
|
if (!effect.ok) return effect;
|
|
522
|
+
currentInput = effectOutput.value;
|
|
512
523
|
}
|
|
513
524
|
return ok(undefined);
|
|
514
525
|
}
|
|
@@ -521,7 +532,7 @@ export function addTypedTonemapPass(
|
|
|
521
532
|
): Result<void, RenderGraphError> {
|
|
522
533
|
return addTypedFullscreenPass(graph, {
|
|
523
534
|
name: outputOnly ? 'output' : 'tonemap',
|
|
524
|
-
shader:
|
|
535
|
+
shader: STANDARD_TONEMAP_FEATURE_ID,
|
|
525
536
|
input,
|
|
526
537
|
output,
|
|
527
538
|
outputOnly,
|
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
import type { RenderGraphBuilder, RenderGraphError } from '@forgeax/engine-render-graph';
|
|
2
2
|
import { ok, type Result } from '@forgeax/engine-types';
|
|
3
3
|
import { PointShadowAtlasUninitializedError } from './errors/render';
|
|
4
|
-
import {
|
|
5
|
-
directionalCascadeAtlasSize,
|
|
6
|
-
directionalCascadeRasterViewport,
|
|
7
|
-
} from './extract/directional-csm';
|
|
8
4
|
import { GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING } from './gpu-texture-usage';
|
|
5
|
+
import type { _InternalRenderPipelineContext } from './record/render-context';
|
|
9
6
|
import {
|
|
10
7
|
encodeDirectionalShadowPass,
|
|
11
8
|
encodePointShadowPass,
|
|
12
9
|
encodeSpotShadowPass,
|
|
13
10
|
} from './record/shadow-pass';
|
|
14
|
-
import type {
|
|
15
|
-
|
|
16
|
-
RenderPipelineGpuDrivenShadowProjection,
|
|
17
|
-
RenderPipelineTopology,
|
|
18
|
-
} from './render-pipeline';
|
|
19
|
-
import type { _InternalRenderPipelineContext } from './render-pipeline-context';
|
|
20
|
-
import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline-target';
|
|
11
|
+
import type { RenderPipelineFrame, RenderPipelineTopology } from './render-pipeline';
|
|
12
|
+
import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline';
|
|
21
13
|
|
|
22
14
|
export interface TypedShadowTargets {
|
|
23
15
|
readonly directional: RenderPipelineTarget;
|
|
@@ -25,17 +17,16 @@ export interface TypedShadowTargets {
|
|
|
25
17
|
readonly point?: RenderPipelineTarget | undefined;
|
|
26
18
|
}
|
|
27
19
|
|
|
28
|
-
function
|
|
20
|
+
function recordShadowPass(
|
|
29
21
|
graph: RenderGraphBuilder<RenderPipelineFrame>,
|
|
30
22
|
name: string,
|
|
31
23
|
target: RenderPipelineTarget,
|
|
32
24
|
loadOp: 'clear' | 'load',
|
|
33
25
|
encode: Parameters<RenderGraphBuilder<RenderPipelineFrame>['addRasterPass']>[1]['encode'],
|
|
34
26
|
executeIf?: (frame: RenderPipelineFrame) => boolean,
|
|
35
|
-
extraAccesses: readonly import('@forgeax/engine-render-graph').GraphAccess[] = [],
|
|
36
27
|
): Result<void, RenderGraphError> {
|
|
37
28
|
return graph.addRasterPass(name, {
|
|
38
|
-
accesses: [{ resource: target.view, usage: 'depth-stencil-write' }
|
|
29
|
+
accesses: [{ resource: target.view, usage: 'depth-stencil-write' }],
|
|
39
30
|
colorAttachments: [],
|
|
40
31
|
depthStencilAttachment: {
|
|
41
32
|
view: target.view,
|
|
@@ -51,64 +42,42 @@ function addShadowPass(
|
|
|
51
42
|
export function addTypedShadowPasses(
|
|
52
43
|
graph: RenderGraphBuilder<RenderPipelineFrame>,
|
|
53
44
|
topology: RenderPipelineTopology,
|
|
54
|
-
gpuDrivenShadow: readonly RenderPipelineGpuDrivenShadowProjection[] = [],
|
|
55
45
|
): Result<TypedShadowTargets, RenderGraphError> {
|
|
56
|
-
const
|
|
57
|
-
directionalCascadeRasterViewport(
|
|
58
|
-
cascade,
|
|
59
|
-
topology.shadow.cascadeCount,
|
|
60
|
-
topology.shadow.mapSize,
|
|
61
|
-
),
|
|
62
|
-
);
|
|
63
|
-
const atlasSize = directionalCascadeAtlasSize(
|
|
64
|
-
topology.shadow.cascadeCount,
|
|
65
|
-
topology.shadow.mapSize,
|
|
66
|
-
);
|
|
46
|
+
const tilesPerSide = Math.ceil(Math.sqrt(topology.shadow.cascadeCount));
|
|
67
47
|
const directional = createRenderPipelineTarget(graph, 'directional-shadow-depth', {
|
|
68
48
|
format: 'depth32float',
|
|
69
|
-
size:
|
|
49
|
+
size: {
|
|
50
|
+
width: topology.shadow.mapSize * tilesPerSide,
|
|
51
|
+
height: topology.shadow.mapSize * tilesPerSide,
|
|
52
|
+
},
|
|
70
53
|
});
|
|
71
54
|
if (!directional.ok) return directional;
|
|
72
|
-
const resetDirectionalAtlas = addShadowPass(
|
|
73
|
-
graph,
|
|
74
|
-
'directional-shadow-reset',
|
|
75
|
-
directional.value,
|
|
76
|
-
'clear',
|
|
77
|
-
() => {},
|
|
78
|
-
// Keep a stable, inspectable topology name for capture/debug consumers.
|
|
79
|
-
// The independent legacy shadow encoder owns the cache-aware atlas clear;
|
|
80
|
-
// opening this declarative graph pass would add a second depth pass.
|
|
81
|
-
() => false,
|
|
82
|
-
);
|
|
83
|
-
if (!resetDirectionalAtlas.ok) return resetDirectionalAtlas;
|
|
84
55
|
for (let cascade = 0; cascade < topology.shadow.cascadeCount; cascade += 1) {
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
const added = addShadowPass(
|
|
56
|
+
const col = cascade % tilesPerSide;
|
|
57
|
+
const row = Math.floor(cascade / tilesPerSide);
|
|
58
|
+
const added = recordShadowPass(
|
|
89
59
|
graph,
|
|
90
60
|
`shadowCascade${cascade}`,
|
|
91
61
|
directional.value,
|
|
92
62
|
cascade === 0 ? 'clear' : 'load',
|
|
93
|
-
({ pass, frame
|
|
94
|
-
encodeDirectionalShadowPass(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
),
|
|
63
|
+
({ pass, frame }) =>
|
|
64
|
+
encodeDirectionalShadowPass(frame as never, pass, cascade, {
|
|
65
|
+
x: col * topology.shadow.mapSize,
|
|
66
|
+
y: row * topology.shadow.mapSize,
|
|
67
|
+
w: topology.shadow.mapSize,
|
|
68
|
+
h: topology.shadow.mapSize,
|
|
69
|
+
}),
|
|
101
70
|
(frame) => !(frame as _InternalRenderPipelineContext).directionalShadowCacheReuse,
|
|
102
|
-
gpuShadow?.accesses,
|
|
103
71
|
);
|
|
104
72
|
if (!added.ok) return added;
|
|
105
73
|
}
|
|
106
74
|
const observation = graph.addCopyPass('directional-shadow-observation', {
|
|
107
75
|
accesses: [{ resource: directional.value.view, usage: 'copy-src' }],
|
|
108
76
|
encode: ({ frame, resources }) => {
|
|
77
|
+
const internal = frame as _InternalRenderPipelineContext;
|
|
109
78
|
const texture = resources.texture(directional.value.texture);
|
|
110
79
|
if (!texture.ok) throw texture.error;
|
|
111
|
-
|
|
80
|
+
internal.pipelineState.perPassResources.shadowTexture = texture.value;
|
|
112
81
|
},
|
|
113
82
|
});
|
|
114
83
|
if (!observation.ok) return observation;
|
|
@@ -127,7 +96,8 @@ export function addTypedShadowPasses(
|
|
|
127
96
|
usage: GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING,
|
|
128
97
|
},
|
|
129
98
|
(frame) => {
|
|
130
|
-
const
|
|
99
|
+
const internal = frame as _InternalRenderPipelineContext;
|
|
100
|
+
const atlas = internal.frameState.pointShadowAtlas?.getTexture();
|
|
131
101
|
if (atlas === null || atlas === undefined) {
|
|
132
102
|
throw new PointShadowAtlasUninitializedError();
|
|
133
103
|
}
|
|
@@ -158,7 +128,7 @@ export function addTypedShadowPasses(
|
|
|
158
128
|
arrayLayerCount: 1,
|
|
159
129
|
});
|
|
160
130
|
if (!faceView.ok) return faceView;
|
|
161
|
-
const added =
|
|
131
|
+
const added = recordShadowPass(
|
|
162
132
|
graph,
|
|
163
133
|
`point-shadow-${pointIndex}-${face}`,
|
|
164
134
|
{
|
|
@@ -181,7 +151,7 @@ export function addTypedShadowPasses(
|
|
|
181
151
|
});
|
|
182
152
|
if (!spot.ok) return spot;
|
|
183
153
|
for (let spotIndex = 0; spotIndex < Math.max(1, topology.shadow.spotCount); spotIndex += 1) {
|
|
184
|
-
const added =
|
|
154
|
+
const added = recordShadowPass(
|
|
185
155
|
graph,
|
|
186
156
|
topology.shadow.spotCount === 0 ? 'spot-shadow' : `spot-shadow-${spotIndex}`,
|
|
187
157
|
spot.value,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytic-sky-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/analytic-sky-contract.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytic-sky-falsify.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/analytic-sky-falsify.test.ts"],"names":[],"mappings":""}
|