@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
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
// AABB and the entity carries MeshFilter + MeshRenderer + Transform, so the
|
|
29
29
|
// existing `pick()` raycast walk catches it for free.
|
|
30
30
|
|
|
31
|
+
import { resolveAssetHandle } from '@forgeax/engine-assets-runtime';
|
|
31
32
|
import type { EntityHandle, World } from '@forgeax/engine-ecs';
|
|
32
33
|
import { PROCEDURAL_FLOATS_PER_VERTEX } from '@forgeax/engine-geometry';
|
|
33
34
|
import {
|
|
@@ -38,12 +39,10 @@ import {
|
|
|
38
39
|
trackFontConcurrency,
|
|
39
40
|
} from '@forgeax/engine-graphics-extras';
|
|
40
41
|
import type { FontAsset, Handle, MaterialAsset, MeshAsset, Submesh } from '@forgeax/engine-types';
|
|
41
|
-
import { err, ok, type Result, TextError, unpackSlot } from '@forgeax/engine-types';
|
|
42
|
-
import { resolveRenderAsset } from './assets/resolve-render-asset';
|
|
42
|
+
import { err, ok, type Result, TextError, toShared, unpackSlot } from '@forgeax/engine-types';
|
|
43
43
|
import { MeshFilter, MeshRenderer } from './components';
|
|
44
44
|
import { GlyphText } from './components/glyph-text';
|
|
45
|
-
import type {
|
|
46
|
-
import { materialTextureValue } from './materials';
|
|
45
|
+
import type { GpuResidencyCache } from './device/gpu-residency';
|
|
47
46
|
|
|
48
47
|
// Per-entity bake bookkeeping: the baked mesh handle id + the authoring
|
|
49
48
|
// signature it was baked from. A WeakMap owns one cache per World and each
|
|
@@ -51,10 +50,10 @@ import { materialTextureValue } from './materials';
|
|
|
51
50
|
// EntityHandle, so slot reuse replaces stale state instead of aliasing it or
|
|
52
51
|
// growing one historical entry per generation.
|
|
53
52
|
interface BakeRecord {
|
|
54
|
-
readonly
|
|
53
|
+
readonly meshHandle: Handle<'MeshAsset', 'shared'>;
|
|
55
54
|
signature: string;
|
|
56
55
|
/** The MeshRenderer.material handle assigned on first observation. */
|
|
57
|
-
readonly
|
|
56
|
+
readonly materialHandle: Handle<'MaterialAsset', 'shared'>;
|
|
58
57
|
}
|
|
59
58
|
interface BakeCacheEntry {
|
|
60
59
|
readonly handle: EntityHandle;
|
|
@@ -65,14 +64,18 @@ let bakeCache = new WeakMap<World, Map<number, BakeCacheEntry>>();
|
|
|
65
64
|
// One current material producer handle per GlyphText entity slot. Continuous
|
|
66
65
|
// tint edits replace and release the previous producer instead of growing a
|
|
67
66
|
// historical color-key cache.
|
|
68
|
-
let materialCache = new WeakMap<World, Map<number,
|
|
69
|
-
let
|
|
67
|
+
let materialCache = new WeakMap<World, Map<number, Handle<'MaterialAsset', 'shared'>>>();
|
|
68
|
+
let liveGlyphSlots = new WeakMap<World, Set<number>>();
|
|
69
|
+
|
|
70
|
+
function entitySlot(entity: EntityHandle): number {
|
|
71
|
+
return unpackSlot(entity as number);
|
|
72
|
+
}
|
|
70
73
|
|
|
71
74
|
/** Clear the per-entity bake + per-font material caches (test isolation). */
|
|
72
75
|
export function resetGlyphBakeCache(): void {
|
|
73
76
|
bakeCache = new WeakMap();
|
|
74
77
|
materialCache = new WeakMap();
|
|
75
|
-
|
|
78
|
+
liveGlyphSlots = new WeakMap();
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
function worldBakeCache(world: World): Map<number, BakeCacheEntry> {
|
|
@@ -84,7 +87,7 @@ function worldBakeCache(world: World): Map<number, BakeCacheEntry> {
|
|
|
84
87
|
return cache;
|
|
85
88
|
}
|
|
86
89
|
|
|
87
|
-
function worldMaterialCache(world: World): Map<number,
|
|
90
|
+
function worldMaterialCache(world: World): Map<number, Handle<'MaterialAsset', 'shared'>> {
|
|
88
91
|
let cache = materialCache.get(world);
|
|
89
92
|
if (cache === undefined) {
|
|
90
93
|
cache = new Map();
|
|
@@ -95,22 +98,22 @@ function worldMaterialCache(world: World): Map<number, number> {
|
|
|
95
98
|
|
|
96
99
|
/** Release renderer-derived producer refs at GlyphText removal time. */
|
|
97
100
|
function releaseGlyphProducers(world: World, entity: EntityHandle): void {
|
|
98
|
-
const slot =
|
|
101
|
+
const slot = entitySlot(entity);
|
|
99
102
|
const bake = bakeCache.get(world)?.get(slot);
|
|
100
103
|
if (bake?.handle === entity) {
|
|
101
|
-
world.sharedRefs.release(
|
|
104
|
+
world.sharedRefs.release(bake.record.meshHandle);
|
|
102
105
|
bakeCache.get(world)?.delete(slot);
|
|
103
106
|
}
|
|
104
107
|
const material = materialCache.get(world)?.get(slot);
|
|
105
108
|
if (material !== undefined) {
|
|
106
|
-
world.sharedRefs.release(
|
|
109
|
+
world.sharedRefs.release(material);
|
|
107
110
|
materialCache.get(world)?.delete(slot);
|
|
108
111
|
}
|
|
109
112
|
}
|
|
110
113
|
|
|
111
114
|
/** Remove stale renderer-derived state when a previously baked font is rejected. */
|
|
112
115
|
function clearRejectedGlyphState(world: World, entity: EntityHandle): void {
|
|
113
|
-
const slot =
|
|
116
|
+
const slot = entitySlot(entity);
|
|
114
117
|
const bake = bakeCache.get(world)?.get(slot);
|
|
115
118
|
if (bake?.handle !== entity) return;
|
|
116
119
|
|
|
@@ -143,6 +146,7 @@ interface GlyphTextData {
|
|
|
143
146
|
readonly color: ArrayLike<number>;
|
|
144
147
|
}
|
|
145
148
|
|
|
149
|
+
/** @internal archetype-walk view (same shape reached for in render-system-extract). */
|
|
146
150
|
/**
|
|
147
151
|
* Lay out + bake every `GlyphText` entity, attaching MeshFilter + MeshRenderer
|
|
148
152
|
* on first observation and re-baking in place on a text / size / color change.
|
|
@@ -154,21 +158,20 @@ interface GlyphTextData {
|
|
|
154
158
|
*/
|
|
155
159
|
export function glyphTextLayoutSystem(
|
|
156
160
|
world: World,
|
|
157
|
-
gpuStore:
|
|
161
|
+
gpuStore: GpuResidencyCache,
|
|
158
162
|
): Result<void, TextError> {
|
|
159
163
|
resetFontConcurrency();
|
|
160
164
|
|
|
161
|
-
// No GlyphText entity in this World -> empty
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
// read directly from the archetype graph by `collectGlyphEntities`.
|
|
165
|
+
// No GlyphText entity in this World -> empty query -> no-op pass. The
|
|
166
|
+
// ECS query is the single owner of component presence and entity iteration;
|
|
167
|
+
// the renderer does not reach into archetype storage internals.
|
|
165
168
|
const entities = collectGlyphEntities(world);
|
|
166
|
-
const live =
|
|
169
|
+
const live = liveGlyphSlots.get(world) ?? new Set<number>();
|
|
167
170
|
live.clear();
|
|
168
|
-
for (const entity of entities) live.add(entity
|
|
169
|
-
|
|
171
|
+
for (const entity of entities) live.add(entitySlot(entity));
|
|
172
|
+
liveGlyphSlots.set(world, live);
|
|
170
173
|
for (const entry of worldBakeCache(world).values()) {
|
|
171
|
-
if (!live.has(entry.handle
|
|
174
|
+
if (!live.has(entitySlot(entry.handle))) releaseGlyphProducers(world, entry.handle);
|
|
172
175
|
}
|
|
173
176
|
|
|
174
177
|
let firstError: TextError | null = null;
|
|
@@ -183,25 +186,26 @@ export function glyphTextLayoutSystem(
|
|
|
183
186
|
|
|
184
187
|
/** Collect every Entity handle carrying GlyphText (single archetype walk). */
|
|
185
188
|
function collectGlyphEntities(world: World): EntityHandle[] {
|
|
186
|
-
const query = world.query({ read: [GlyphText] });
|
|
187
|
-
if (!query.ok) return [];
|
|
188
189
|
const entities: EntityHandle[] = [];
|
|
189
|
-
|
|
190
|
+
const query = world.query({ read: [GlyphText] }).unwrap();
|
|
191
|
+
for (const row of query) {
|
|
192
|
+
entities.push(row.entity);
|
|
193
|
+
}
|
|
190
194
|
return entities;
|
|
191
195
|
}
|
|
192
196
|
|
|
193
197
|
/**
|
|
194
198
|
* Process one GlyphText entity. Returns a TextError when the concurrency limit
|
|
195
|
-
* is exceeded after clearing
|
|
199
|
+
* is exceeded after clearing stale derived state; returns null otherwise.
|
|
196
200
|
*/
|
|
197
201
|
function processEntity(
|
|
198
202
|
world: World,
|
|
199
|
-
gpuStore:
|
|
203
|
+
gpuStore: GpuResidencyCache,
|
|
200
204
|
entity: EntityHandle,
|
|
201
205
|
): TextError | null {
|
|
202
206
|
const gtRes = world.get(entity, GlyphText);
|
|
203
207
|
if (!gtRes.ok) return null;
|
|
204
|
-
const gt = gtRes.value
|
|
208
|
+
const gt = gtRes.value;
|
|
205
209
|
|
|
206
210
|
// Unresolved font handle (zero sentinel) -> skip (entity not yet wired).
|
|
207
211
|
if (gt.fontHandle === 0) return null;
|
|
@@ -217,19 +221,19 @@ function processEntity(
|
|
|
217
221
|
throw e;
|
|
218
222
|
}
|
|
219
223
|
|
|
220
|
-
const fontRes =
|
|
224
|
+
const fontRes = resolveAssetHandle<FontAsset>(world, asFontHandle(gt.fontHandle));
|
|
221
225
|
if (!fontRes.ok) return null; // font not registered yet -> skip silently
|
|
222
226
|
const font = fontRes.value;
|
|
223
227
|
|
|
224
228
|
const signature = signatureOf(gt);
|
|
225
229
|
const entityCache = worldBakeCache(world);
|
|
226
|
-
const slot =
|
|
230
|
+
const slot = entitySlot(entity);
|
|
227
231
|
const cachedEntry = entityCache.get(slot);
|
|
228
232
|
if (cachedEntry !== undefined && cachedEntry.handle !== entity) {
|
|
229
|
-
world.sharedRefs.release(
|
|
233
|
+
world.sharedRefs.release(cachedEntry.record.meshHandle);
|
|
230
234
|
const staleMaterial = worldMaterialCache(world).get(slot);
|
|
231
235
|
if (staleMaterial !== undefined) {
|
|
232
|
-
world.sharedRefs.release(
|
|
236
|
+
world.sharedRefs.release(staleMaterial);
|
|
233
237
|
worldMaterialCache(world).delete(slot);
|
|
234
238
|
}
|
|
235
239
|
entityCache.delete(slot);
|
|
@@ -238,15 +242,15 @@ function processEntity(
|
|
|
238
242
|
|
|
239
243
|
// Dirty path: same entity already baked, but the authoring signature changed.
|
|
240
244
|
if (cached !== undefined) {
|
|
241
|
-
ensureGlyphMeshMaterialSlots(world,
|
|
245
|
+
ensureGlyphMeshMaterialSlots(world, cached.meshHandle);
|
|
242
246
|
if (cached.signature === signature) return null; // clean -> nothing to do
|
|
243
247
|
const layout = layoutGlyphText(font, gt.text, gt.fontSize);
|
|
244
|
-
// feat-20260601-gpu-
|
|
248
|
+
// feat-20260601-device/gpu-residency-extraction M1: in-place GPU mesh update
|
|
245
249
|
// moved to the store. The mesh became GPU-resident on the first render
|
|
246
250
|
// frame's `ensureResident` pull; the dirty re-layout overwrites those
|
|
247
251
|
// buffers in place (a no-op if not yet resident -- the next render's
|
|
248
252
|
// ensureResident then uploads the latest registered POD).
|
|
249
|
-
const meshHandle =
|
|
253
|
+
const meshHandle = cached.meshHandle;
|
|
250
254
|
const submeshes = [
|
|
251
255
|
{
|
|
252
256
|
indexOffset: 0,
|
|
@@ -261,35 +265,34 @@ function processEntity(
|
|
|
261
265
|
// dirty layout; otherwise the GPU buffers update but the render walk still
|
|
262
266
|
// rejects the label as an empty mesh.
|
|
263
267
|
const mesh = world.sharedRefs.resolve<'MeshAsset', MeshAsset>(meshHandle);
|
|
264
|
-
if (
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
268
|
+
if (mesh.ok) {
|
|
269
|
+
const aabb = conservativeCubeAabb(layout.radius);
|
|
270
|
+
// Keep both sides of the pull boundary coherent. A zero-glyph first
|
|
271
|
+
// bake may have no resident GPU buffers yet, so updating only the GPU
|
|
272
|
+
// store would lose the new text on the next ensureResident pull.
|
|
273
|
+
Object.assign(mesh.value, {
|
|
274
|
+
vertices: layout.vertices,
|
|
275
|
+
indices: layout.indices,
|
|
276
|
+
submeshes,
|
|
277
|
+
materialSlots: [{ slotName: 'Default' }],
|
|
278
|
+
aabb,
|
|
279
|
+
});
|
|
270
280
|
}
|
|
271
|
-
|
|
272
|
-
Object.assign(mesh.value, {
|
|
273
|
-
vertices: layout.vertices,
|
|
274
|
-
indices: layout.indices,
|
|
275
|
-
submeshes,
|
|
276
|
-
materialSlots: [{ slotName: 'Default' }],
|
|
277
|
-
aabb,
|
|
278
|
-
});
|
|
281
|
+
gpuStore.updateMesh(meshHandle, layout.vertices, layout.indices, 0, submeshes);
|
|
279
282
|
// A color change replaces the material payload at this entity's stable
|
|
280
283
|
// derived slot and re-binds the new producer handle in place.
|
|
281
284
|
const materialId = resolveTextMaterial(world, gt, font, slot);
|
|
282
|
-
if (materialId !== cached.
|
|
285
|
+
if (materialId !== cached.materialHandle) {
|
|
283
286
|
world.set(entity, MeshRenderer, {
|
|
284
|
-
materials: [materialId]
|
|
287
|
+
materials: [materialId],
|
|
285
288
|
});
|
|
286
289
|
}
|
|
287
290
|
entityCache.set(slot, {
|
|
288
291
|
handle: entity,
|
|
289
292
|
record: {
|
|
290
|
-
|
|
293
|
+
meshHandle: cached.meshHandle,
|
|
291
294
|
signature,
|
|
292
|
-
|
|
295
|
+
materialHandle: materialId,
|
|
293
296
|
},
|
|
294
297
|
});
|
|
295
298
|
return null;
|
|
@@ -301,10 +304,7 @@ function processEntity(
|
|
|
301
304
|
// so the column probe needs no registration guard (feat-20260602).
|
|
302
305
|
const existingFilter = world.get(entity, MeshFilter);
|
|
303
306
|
if (existingFilter.ok) {
|
|
304
|
-
ensureGlyphMeshMaterialSlots(
|
|
305
|
-
world,
|
|
306
|
-
asMeshHandle((existingFilter.value as { assetHandle: number }).assetHandle),
|
|
307
|
-
);
|
|
307
|
+
ensureGlyphMeshMaterialSlots(world, existingFilter.value.assetHandle);
|
|
308
308
|
return null;
|
|
309
309
|
}
|
|
310
310
|
|
|
@@ -318,42 +318,25 @@ function processEntity(
|
|
|
318
318
|
// handle 0 -> default mid-grey unlit, and the atlas would never be sampled.
|
|
319
319
|
const materialId = resolveTextMaterial(world, gt, font, slot);
|
|
320
320
|
|
|
321
|
-
world.addComponent(entity, {
|
|
321
|
+
world.addComponent(entity, {
|
|
322
|
+
component: MeshFilter,
|
|
323
|
+
data: { assetHandle: bake.value.handle },
|
|
324
|
+
});
|
|
322
325
|
world.addComponent(entity, {
|
|
323
326
|
component: MeshRenderer,
|
|
324
|
-
data: { materials: [materialId]
|
|
327
|
+
data: { materials: [materialId] },
|
|
325
328
|
});
|
|
326
329
|
entityCache.set(slot, {
|
|
327
330
|
handle: entity,
|
|
328
331
|
record: {
|
|
329
|
-
|
|
332
|
+
meshHandle: bake.value.handle,
|
|
330
333
|
signature,
|
|
331
|
-
|
|
334
|
+
materialHandle: materialId,
|
|
332
335
|
},
|
|
333
336
|
});
|
|
334
337
|
return null;
|
|
335
338
|
}
|
|
336
339
|
|
|
337
|
-
/** Apply a dirty glyph mesh atomically across the GPU residency boundary. */
|
|
338
|
-
function updateGlyphMesh(
|
|
339
|
-
gpuStore: GpuResourceStore,
|
|
340
|
-
meshHandle: Handle<'MeshAsset', 'shared'>,
|
|
341
|
-
vertices: Float32Array,
|
|
342
|
-
indices: Uint16Array | Uint32Array,
|
|
343
|
-
submeshes: readonly Submesh[],
|
|
344
|
-
): boolean {
|
|
345
|
-
const updated = gpuStore.updateMesh(meshHandle, vertices, indices, 0, submeshes);
|
|
346
|
-
if (updated.ok) return true;
|
|
347
|
-
if (updated.error.code === 'mesh-shape-mismatch') {
|
|
348
|
-
const replaced = gpuStore.replaceMesh(meshHandle, vertices, indices, 0, submeshes);
|
|
349
|
-
if (replaced.ok) return true;
|
|
350
|
-
return (
|
|
351
|
-
replaced.error.code === 'mesh-not-resident' || replaced.error.code === 'rhi-not-available'
|
|
352
|
-
);
|
|
353
|
-
}
|
|
354
|
-
return updated.error.code === 'mesh-not-resident' || updated.error.code === 'rhi-not-available';
|
|
355
|
-
}
|
|
356
|
-
|
|
357
340
|
export function ensureGlyphMeshMaterialSlots(
|
|
358
341
|
world: World,
|
|
359
342
|
meshHandle: Handle<'MeshAsset', 'shared'>,
|
|
@@ -378,7 +361,7 @@ function resolveTextMaterial(
|
|
|
378
361
|
gt: GlyphTextData,
|
|
379
362
|
font: FontAsset,
|
|
380
363
|
slot: number,
|
|
381
|
-
):
|
|
364
|
+
): Handle<'MaterialAsset', 'shared'> {
|
|
382
365
|
const cache = worldMaterialCache(world);
|
|
383
366
|
const material = {
|
|
384
367
|
kind: 'material',
|
|
@@ -406,7 +389,7 @@ function resolveTextMaterial(
|
|
|
406
389
|
font.common.atlasHeight,
|
|
407
390
|
0,
|
|
408
391
|
],
|
|
409
|
-
baseColorTexture:
|
|
392
|
+
baseColorTexture: { texture: font.atlas },
|
|
410
393
|
},
|
|
411
394
|
parameters: [
|
|
412
395
|
{ name: 'tintColor', type: 'color', default: [1, 1, 1, 1] },
|
|
@@ -416,11 +399,11 @@ function resolveTextMaterial(
|
|
|
416
399
|
{ name: 'normalTexture', type: 'texture', optional: true },
|
|
417
400
|
],
|
|
418
401
|
} satisfies MaterialAsset;
|
|
419
|
-
const id = world.allocSharedRef('MaterialAsset', material)
|
|
402
|
+
const id = world.allocSharedRef('MaterialAsset', material);
|
|
420
403
|
const previous = cache.get(slot);
|
|
421
404
|
cache.set(slot, id);
|
|
422
405
|
if (previous !== undefined && previous !== id) {
|
|
423
|
-
world.sharedRefs.release(
|
|
406
|
+
world.sharedRefs.release(previous);
|
|
424
407
|
}
|
|
425
408
|
return id;
|
|
426
409
|
}
|
|
@@ -434,14 +417,5 @@ function signatureOf(gt: GlyphTextData): string {
|
|
|
434
417
|
// (runtime value is the raw number), so a cast is the canonical bridge
|
|
435
418
|
// (mirrors pick.ts toShared).
|
|
436
419
|
function asFontHandle(raw: number): Handle<'FontAsset', 'shared'> {
|
|
437
|
-
return
|
|
438
|
-
}
|
|
439
|
-
function asMeshHandle(id: number): Handle<'MeshAsset', 'shared'> {
|
|
440
|
-
return id as unknown as Handle<'MeshAsset', 'shared'>;
|
|
441
|
-
}
|
|
442
|
-
function asMaterialHandle(id: number): Handle<'MaterialAsset', 'shared'> {
|
|
443
|
-
return id as unknown as Handle<'MaterialAsset', 'shared'>;
|
|
444
|
-
}
|
|
445
|
-
function handleId(handle: Handle<'MeshAsset', 'shared'>): number {
|
|
446
|
-
return handle as unknown as number;
|
|
420
|
+
return toShared<'FontAsset'>(raw);
|
|
447
421
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import type { RenderSceneApplyResult,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
MaterialSnapshot,
|
|
7
|
-
RenderableSnapshot,
|
|
8
|
-
} from '../render-system-extract';
|
|
1
|
+
import type { PrimitiveTopology } from '@forgeax/engine-types';
|
|
2
|
+
import type { BatchTopologyInspection } from '../inspection-types';
|
|
3
|
+
import type { RenderSceneApplyResult, RenderSceneSlot } from '../scene/render-scene-types';
|
|
4
|
+
|
|
5
|
+
export type { BatchTopologyInspection } from '../inspection-types';
|
|
9
6
|
|
|
10
7
|
export interface GpuDrivenBatchKey {
|
|
11
8
|
readonly assetHandle: number;
|
|
@@ -14,42 +11,9 @@ export interface GpuDrivenBatchKey {
|
|
|
14
11
|
readonly count: number;
|
|
15
12
|
readonly baseVertex: number;
|
|
16
13
|
readonly materialSlot: number;
|
|
17
|
-
readonly
|
|
18
|
-
readonly passIndex: number;
|
|
19
|
-
readonly queue: number;
|
|
20
|
-
readonly topology: string;
|
|
21
|
-
readonly pipelineClass: string;
|
|
22
|
-
readonly materialResourceClass: string;
|
|
23
|
-
/** Material shader identity is part of topology, not a record-time guess. */
|
|
24
|
-
readonly materialClass: string;
|
|
25
|
-
/** Scene Fact resource revision invalidates stale resource bindings. */
|
|
26
|
-
readonly resourceRevision: number;
|
|
27
|
-
/** Scene Fact material revision keeps material payload changes isolated. */
|
|
28
|
-
readonly materialRevision: number;
|
|
29
|
-
/** Explicit alpha-test qualification (queue or alphaCutoff > 0). */
|
|
30
|
-
readonly alphaTest: boolean;
|
|
31
|
-
/** `true` means the raster state intentionally keeps both faces. */
|
|
32
|
-
readonly doubleSided: boolean;
|
|
33
|
-
/** Standard/custom PBR qualification used by the capability lane. */
|
|
34
|
-
readonly pbr: boolean;
|
|
35
|
-
/**
|
|
36
|
-
* ShadowCaster batch qualification; only explicit ineligible excludes a
|
|
37
|
-
* candidate. Unknown facts stay in the pool until the existing ShadowCaster
|
|
38
|
-
* dispatch and CascadeVolumeSet membership make the per-view decision.
|
|
39
|
-
*/
|
|
40
|
-
readonly shadowCaster: boolean;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface GpuDrivenBatchSemantics {
|
|
14
|
+
readonly topology: PrimitiveTopology;
|
|
44
15
|
readonly pipelineClass: string;
|
|
45
|
-
readonly materialClass: string;
|
|
46
16
|
readonly materialResourceClass: string;
|
|
47
|
-
readonly resourceRevision: number;
|
|
48
|
-
readonly materialRevision: number;
|
|
49
|
-
readonly alphaTest: boolean;
|
|
50
|
-
readonly doubleSided: boolean;
|
|
51
|
-
readonly pbr: boolean;
|
|
52
|
-
readonly shadowCaster: boolean;
|
|
53
17
|
}
|
|
54
18
|
|
|
55
19
|
export interface GpuDrivenCandidate {
|
|
@@ -76,106 +40,6 @@ export interface SubmissionPlan {
|
|
|
76
40
|
readonly visibleCapacity: number;
|
|
77
41
|
}
|
|
78
42
|
|
|
79
|
-
export interface SubmissionCandidateMembershipEntry {
|
|
80
|
-
readonly batchId: number;
|
|
81
|
-
readonly candidate: GpuDrivenCandidate;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Immutable reverse membership for one submission topology.
|
|
86
|
-
*
|
|
87
|
-
* Candidate-domain owners publish stable primitive ids, while both the
|
|
88
|
-
* shadow view projector and cascade-local cache tokens need to answer the
|
|
89
|
-
* inverse question: which source batches contain this primitive? Keep that
|
|
90
|
-
* join beside the immutable SubmissionPlan so each consumer pays O(D) once
|
|
91
|
-
* per topology instead of rescanning every batch for every view/cascade.
|
|
92
|
-
*/
|
|
93
|
-
export interface SubmissionCandidateMembership {
|
|
94
|
-
readonly source: SubmissionPlan;
|
|
95
|
-
readonly byPrimitiveIndex: ReadonlyMap<number, readonly SubmissionCandidateMembershipEntry[]>;
|
|
96
|
-
/** O(1) lookup for batch metadata after a primitive-to-batch join. */
|
|
97
|
-
readonly byBatchId: ReadonlyMap<number, SubmissionPlan['batches'][number]>;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const submissionCandidateMembershipCache = new WeakMap<
|
|
101
|
-
SubmissionPlan,
|
|
102
|
-
SubmissionCandidateMembership
|
|
103
|
-
>();
|
|
104
|
-
|
|
105
|
-
export function buildSubmissionCandidateMembership(
|
|
106
|
-
source: SubmissionPlan,
|
|
107
|
-
): SubmissionCandidateMembership {
|
|
108
|
-
const cached = submissionCandidateMembershipCache.get(source);
|
|
109
|
-
if (cached !== undefined) return cached;
|
|
110
|
-
|
|
111
|
-
const mutable = new Map<number, SubmissionCandidateMembershipEntry[]>();
|
|
112
|
-
const byBatchId = new Map<number, SubmissionPlan['batches'][number]>();
|
|
113
|
-
for (const batch of source.batches) {
|
|
114
|
-
byBatchId.set(batch.batchId, batch);
|
|
115
|
-
for (const candidate of batch.candidates) {
|
|
116
|
-
const entries = mutable.get(candidate.primitiveIndex) ?? [];
|
|
117
|
-
entries.push({ batchId: batch.batchId, candidate });
|
|
118
|
-
mutable.set(candidate.primitiveIndex, entries);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
const byPrimitiveIndex = new Map<number, readonly SubmissionCandidateMembershipEntry[]>();
|
|
122
|
-
for (const [primitiveIndex, entries] of mutable) {
|
|
123
|
-
byPrimitiveIndex.set(primitiveIndex, Object.freeze(entries));
|
|
124
|
-
}
|
|
125
|
-
const membership: SubmissionCandidateMembership = {
|
|
126
|
-
source,
|
|
127
|
-
byPrimitiveIndex,
|
|
128
|
-
byBatchId,
|
|
129
|
-
};
|
|
130
|
-
submissionCandidateMembershipCache.set(source, membership);
|
|
131
|
-
return membership;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Build a submission while retaining the source topology identity.
|
|
136
|
-
*
|
|
137
|
-
* Visibility is allowed to replace candidates and capacities per view, but it
|
|
138
|
-
* must not allocate a second batch identity or change indirect slot ownership.
|
|
139
|
-
* This helper is shared by the forward and shadow capability lanes so compact
|
|
140
|
-
* arrays, aligned bases, and indirect offsets have one producer.
|
|
141
|
-
*/
|
|
142
|
-
export function buildBatchAlignedSubmission(
|
|
143
|
-
source: SubmissionPlan,
|
|
144
|
-
candidatesByBatch: ReadonlyMap<number, readonly GpuDrivenCandidate[]>,
|
|
145
|
-
): SubmissionPlan {
|
|
146
|
-
let visibleBase = 0;
|
|
147
|
-
const batches: GpuDrivenBatch[] = [];
|
|
148
|
-
for (const sourceBatch of source.batches) {
|
|
149
|
-
const candidates = candidatesByBatch.get(sourceBatch.batchId) ?? [];
|
|
150
|
-
if (candidates.length === 0) continue;
|
|
151
|
-
visibleBase = alignInstanceBase(visibleBase);
|
|
152
|
-
batches.push(
|
|
153
|
-
Object.freeze({
|
|
154
|
-
...sourceBatch,
|
|
155
|
-
candidates: Object.freeze([...candidates]),
|
|
156
|
-
visibleBase,
|
|
157
|
-
visibleCapacity: candidates.length,
|
|
158
|
-
}),
|
|
159
|
-
);
|
|
160
|
-
visibleBase += candidates.length;
|
|
161
|
-
}
|
|
162
|
-
return Object.freeze({
|
|
163
|
-
revision: source.revision,
|
|
164
|
-
batches: Object.freeze(batches),
|
|
165
|
-
candidateCount: batches.reduce((total, batch) => total + batch.candidates.length, 0),
|
|
166
|
-
visibleCapacity: visibleBase,
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
export interface BatchTopologyInspection {
|
|
171
|
-
readonly revision: number;
|
|
172
|
-
readonly batchCount: number;
|
|
173
|
-
readonly candidateCount: number;
|
|
174
|
-
readonly rebuilds: number;
|
|
175
|
-
readonly patches: number;
|
|
176
|
-
readonly ineligible: number;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
43
|
interface MutableBatch {
|
|
180
44
|
readonly batchId: number;
|
|
181
45
|
readonly generation: number;
|
|
@@ -183,71 +47,29 @@ interface MutableBatch {
|
|
|
183
47
|
readonly candidates: Map<string, GpuDrivenCandidate>;
|
|
184
48
|
}
|
|
185
49
|
|
|
186
|
-
function
|
|
187
|
-
snapshot
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const alphaTest =
|
|
200
|
-
draw.queue === RenderQueue.AlphaTest || (typeof cutoff === 'number' && cutoff > 0);
|
|
201
|
-
const materialClass = material.materialShaderId ?? 'forgeax::default-unlit';
|
|
202
|
-
const pbr =
|
|
203
|
-
isStandardPbrMaterialShader(material.materialShaderId) ||
|
|
204
|
-
materialClass.toLowerCase().includes('pbr') ||
|
|
205
|
-
draw.pipelineClass.toLowerCase().includes('pbr');
|
|
206
|
-
return {
|
|
207
|
-
pipelineClass: draw.pipelineClass,
|
|
208
|
-
materialClass,
|
|
209
|
-
materialResourceClass: draw.materialResourceClass,
|
|
210
|
-
resourceRevision: snapshot.sceneFact?.revisions?.resource ?? 0,
|
|
211
|
-
materialRevision: snapshot.sceneFact?.revisions?.material ?? 0,
|
|
212
|
-
alphaTest,
|
|
213
|
-
doubleSided: material.renderState?.cullMode === 'none',
|
|
214
|
-
pbr,
|
|
215
|
-
// Material pass ownership is the authoritative per-slot caster fact. The
|
|
216
|
-
// scene fact remains a conservative fallback for older/test snapshots
|
|
217
|
-
// that predate the material projection field.
|
|
218
|
-
shadowCaster: material.shadowCaster ?? snapshot.sceneFact?.casterEligibility !== 'ineligible',
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
export function buildGpuDrivenBatchKey(
|
|
223
|
-
snapshot: RenderableSnapshot,
|
|
224
|
-
draw: GpuDrivenDrawSnapshot,
|
|
225
|
-
): GpuDrivenBatchKey {
|
|
226
|
-
const semantics = deriveGpuDrivenBatchSemantics(snapshot, draw);
|
|
227
|
-
return {
|
|
50
|
+
function eligibleKeys(slot: RenderSceneSlot): readonly GpuDrivenBatchKey[] {
|
|
51
|
+
const snapshot = slot.snapshot;
|
|
52
|
+
const draws = snapshot.gpuDrivenDraws;
|
|
53
|
+
if (
|
|
54
|
+
draws === undefined ||
|
|
55
|
+
draws.length === 0 ||
|
|
56
|
+
snapshot.localAabb === undefined ||
|
|
57
|
+
snapshot.skin !== undefined ||
|
|
58
|
+
snapshot.spriteInstances !== undefined
|
|
59
|
+
) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
return draws.map((draw) => ({
|
|
228
63
|
assetHandle: snapshot.assetHandle,
|
|
229
64
|
drawKind: draw.kind,
|
|
230
65
|
first: draw.first,
|
|
231
66
|
count: draw.count,
|
|
232
67
|
baseVertex: draw.baseVertex,
|
|
233
68
|
materialSlot: draw.materialSlot,
|
|
234
|
-
submeshIndex: draw.submeshIndex,
|
|
235
|
-
passIndex: draw.passIndex,
|
|
236
|
-
queue: draw.queue,
|
|
237
69
|
topology: draw.topology,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
function eligibleKeys(slot: RenderSceneProjectionSlot): readonly GpuDrivenBatchKey[] {
|
|
243
|
-
const snapshot = slot.snapshot;
|
|
244
|
-
const draws = snapshot.gpuDrivenDraws;
|
|
245
|
-
// Batch topology is pass-agnostic. Rigid forward raster capability is
|
|
246
|
-
// decided by production-raster; excluding skin, sprites, or missing local
|
|
247
|
-
// bounds here would also remove valid ShadowCaster work from the shared
|
|
248
|
-
// indirect submission owner.
|
|
249
|
-
if (draws === undefined || draws.length === 0) return [];
|
|
250
|
-
return draws.map((draw) => buildGpuDrivenBatchKey(snapshot, draw));
|
|
70
|
+
pipelineClass: draw.pipelineClass,
|
|
71
|
+
materialResourceClass: draw.materialResourceClass,
|
|
72
|
+
}));
|
|
251
73
|
}
|
|
252
74
|
|
|
253
75
|
function keyText(key: GpuDrivenBatchKey): string {
|
|
@@ -278,7 +100,7 @@ export class BatchTopology {
|
|
|
278
100
|
private patches = 0;
|
|
279
101
|
private cachedPlan: SubmissionPlan | undefined;
|
|
280
102
|
|
|
281
|
-
rebuild(slots: readonly
|
|
103
|
+
rebuild(slots: readonly RenderSceneSlot[]): void {
|
|
282
104
|
this.batches.clear();
|
|
283
105
|
this.membershipByPrimitive.clear();
|
|
284
106
|
this.ineligiblePrimitives.clear();
|
|
@@ -367,7 +189,7 @@ export class BatchTopology {
|
|
|
367
189
|
};
|
|
368
190
|
}
|
|
369
191
|
|
|
370
|
-
private add(slot:
|
|
192
|
+
private add(slot: RenderSceneSlot): boolean {
|
|
371
193
|
const keys = eligibleKeys(slot);
|
|
372
194
|
if (keys.length === 0) {
|
|
373
195
|
this.ineligiblePrimitives.add(slot.slot);
|