@forgeax/engine-render 0.1.4 → 0.1.7
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 +268 -640
- 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 +214 -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 +11 -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-HCOGPHKS.mjs +93 -0
- package/dist/chunk-HCOGPHKS.mjs.map +1 -0
- package/dist/chunk-YEJIUW7D.mjs +1152 -0
- package/dist/chunk-YEJIUW7D.mjs.map +1 -0
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +2 -0
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +2 -0
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
- package/dist/components/glyph-text.d.ts +1 -1
- package/dist/components/glyph-text.d.ts.map +1 -1
- package/dist/components/index.d.ts +4 -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/lines.d.ts +5 -0
- package/dist/components/lines.d.ts.map +1 -0
- package/dist/components/mesh-filter.d.ts +7 -7
- package/dist/components/mesh-filter.d.ts.map +1 -1
- package/dist/components/points.d.ts +15 -0
- package/dist/components/points.d.ts.map +1 -0
- 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 +27463 -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 +320 -248
- 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 +7 -3
- 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 +17 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +167 -3
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +72 -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 +77 -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/points-lines/__tests__/bounds.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/points-lines.bench.d.ts +2 -0
- package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +1 -0
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +2 -0
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +1 -0
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +2 -0
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +1 -0
- package/dist/points-lines/admission.d.ts +36 -0
- package/dist/points-lines/admission.d.ts.map +1 -0
- package/dist/points-lines/bounds.d.ts +8 -0
- package/dist/points-lines/bounds.d.ts.map +1 -0
- package/dist/points-lines/expansion-cache.d.ts +28 -0
- package/dist/points-lines/expansion-cache.d.ts.map +1 -0
- package/dist/points-lines/inspection.d.ts +53 -0
- package/dist/points-lines/inspection.d.ts.map +1 -0
- package/dist/points-lines/prepare.d.ts +67 -0
- package/dist/points-lines/prepare.d.ts.map +1 -0
- package/dist/points-lines/record.d.ts +60 -0
- package/dist/points-lines/record.d.ts.map +1 -0
- package/dist/points-lines/snapshot.d.ts +49 -0
- package/dist/points-lines/snapshot.d.ts.map +1 -0
- package/dist/post-process-errors.d.ts +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 +12 -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 +252 -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 +9 -3
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/render-contract.d.ts +424 -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 +110 -338
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +24 -713
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +61 -0
- package/dist/scene/render-scene-types.d.ts.map +1 -0
- package/dist/scene/render-scene.d.ts +112 -0
- package/dist/scene/render-scene.d.ts.map +1 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts +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__/authoring-path.unit.test.ts +9 -0
- 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 +21 -18
- 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 +31 -58
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +31 -50
- 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 +24 -23
- package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
- package/src/__tests__/render-error-exhaustive.test-d.ts +27 -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 +82 -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} +1741 -2699
- package/src/assembly/host-contract.ts +101 -0
- package/src/{renderer → assembly}/material/assembly.ts +2 -7
- package/src/assembly/material/pipeline-projection.ts +63 -0
- package/src/authoring.ts +15 -22
- package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
- package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
- package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
- package/src/components/glyph-text.ts +3 -2
- package/src/components/index.ts +14 -9
- package/src/components/instances.ts +4 -5
- package/src/components/light-helpers.ts +1 -1
- package/src/components/lines.ts +18 -0
- package/src/components/mesh-filter.ts +11 -10
- package/src/components/points.ts +40 -0
- 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 +469 -429
- 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 +32 -8
- 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 +99 -1109
- 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 +75 -217
- package/src/inspection-types.ts +80 -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 +441 -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 +7 -75
- package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
- package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
- package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
- package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
- package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
- package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
- package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
- package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
- package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
- package/src/points-lines/admission.ts +238 -0
- package/src/points-lines/bounds.ts +23 -0
- package/src/points-lines/expansion-cache.ts +215 -0
- package/src/points-lines/inspection.ts +97 -0
- package/src/points-lines/prepare.ts +177 -0
- package/src/points-lines/record.ts +125 -0
- package/src/points-lines/snapshot.ts +130 -0
- package/src/post-process-errors.ts +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 +88 -197
- package/src/record/frame-snapshot.ts +45 -60
- package/src/record/frame-targets.ts +8 -243
- package/src/record/frame.ts +521 -797
- package/src/record/helpers.ts +6 -11
- package/src/record/main-pass-geometry.ts +198 -147
- package/src/record/main-pass-material.ts +517 -190
- package/src/record/main-pass-sprite-draws.ts +199 -118
- package/src/record/main-pass.ts +166 -144
- package/src/record/mesh-ssbo.ts +517 -38
- package/src/record/render-context.ts +384 -0
- package/src/record/shadow-pass.ts +154 -1843
- package/src/record/skybox-post-pass.ts +14 -15
- package/src/record/typed-frame-graph.ts +224 -262
- package/src/record/view-ubo.ts +53 -37
- package/src/render-contract.ts +582 -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 +1114 -1732
- package/src/render-system.ts +614 -1939
- package/src/scene/render-scene-types.ts +67 -0
- package/src/scene/render-scene.ts +1087 -0
- package/src/scene-instances/post-spawn-resolve-joints.ts +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
package/src/record/helpers.ts
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
// @forgeax/engine-runtime - RenderSystem record stage: helpers.
|
|
2
2
|
// Extracted from render-system-record.ts (feat-20260704 M3/w17, pure move).
|
|
3
3
|
|
|
4
|
+
import { resolveAssetHandle } from '@forgeax/engine-assets-runtime';
|
|
4
5
|
import type { World } from '@forgeax/engine-ecs';
|
|
5
6
|
import { type Mat4, mat4 } from '@forgeax/engine-math';
|
|
6
7
|
import type { EquirectAsset } from '@forgeax/engine-types';
|
|
7
8
|
import { toShared } from '@forgeax/engine-types';
|
|
8
|
-
import { resolveRenderAsset } from '../assets/resolve-render-asset';
|
|
9
9
|
import { EquirectProjectionFailedError } from '../errors/render';
|
|
10
10
|
import { isStandardPbrMaterialShader } from '../pbr-pipeline';
|
|
11
|
-
import type {
|
|
12
|
-
import type {
|
|
13
|
-
CameraSnapshot,
|
|
14
|
-
MaterialSnapshot,
|
|
15
|
-
SkyboxSnapshot,
|
|
16
|
-
SkylightSnapshot,
|
|
17
|
-
} from '../render-system-extract';
|
|
11
|
+
import type { CameraSnapshot } from '../render-contract';
|
|
12
|
+
import type { MaterialSnapshot, SkyboxSnapshot, SkylightSnapshot } from '../render-system-extract';
|
|
18
13
|
import type { RenderFrameState } from './frame-snapshot';
|
|
14
|
+
import type { RenderSystemInternals } from './render-context';
|
|
19
15
|
|
|
20
16
|
/** Convert pass-owned shader definitions into the manifest's canonical variant key. */
|
|
21
17
|
export function variantSetFromDefines(
|
|
@@ -225,7 +221,7 @@ export function driveLazyEquirectProjection(
|
|
|
225
221
|
if (status !== undefined) return;
|
|
226
222
|
|
|
227
223
|
// First sight: resolve the equirect POD and fire-and-forget the projection.
|
|
228
|
-
const podRes =
|
|
224
|
+
const podRes = resolveAssetHandle<EquirectAsset>(world, handle);
|
|
229
225
|
if (!podRes.ok || podRes.value.kind !== 'equirect') {
|
|
230
226
|
// The handle does not resolve to a live equirect POD (stale / wrong kind).
|
|
231
227
|
// Launch nothing; the store stays empty and the white fallback holds. The
|
|
@@ -261,8 +257,7 @@ export function computeViewMatrix(camera: CameraSnapshot): Mat4 {
|
|
|
261
257
|
// world mat4 (propagateTransforms output) is read straight off the snapshot;
|
|
262
258
|
// no recompose from decomposed TRS.
|
|
263
259
|
const cameraFromWorld = mat4.create();
|
|
264
|
-
|
|
265
|
-
mat4.invert(cameraFromWorld, camera.world as unknown as Mat4);
|
|
260
|
+
mat4.invert(cameraFromWorld, camera.world);
|
|
266
261
|
return cameraFromWorld;
|
|
267
262
|
}
|
|
268
263
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// feat-20260704 M5/w31: further-split from main-pass.ts (AC-05 <=1500 lines/file).
|
|
3
3
|
// recordGeometryDraws + resolveGeometryInstanceBuffer, moved verbatim.
|
|
4
4
|
|
|
5
|
+
import type { World } from '@forgeax/engine-ecs';
|
|
5
6
|
import {
|
|
6
7
|
type BindGroup,
|
|
7
8
|
type Buffer,
|
|
@@ -16,22 +17,20 @@ import {
|
|
|
16
17
|
GPU_BUFFER_USAGE_STORAGE,
|
|
17
18
|
GPU_BUFFER_USAGE_UNIFORM,
|
|
18
19
|
} from '../gpu-usage';
|
|
19
|
-
import {
|
|
20
|
-
type InstanceBufferCacheEntry,
|
|
21
|
-
packTemporalInstanceTransforms,
|
|
22
|
-
} from '../instance-buffer-cache';
|
|
20
|
+
import type { InstanceBufferCacheEntry } from '../instance-buffer-cache';
|
|
23
21
|
import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from '../materials';
|
|
24
22
|
import { SKIN_MATERIAL_SHADER_ID } from '../pbr-pipeline';
|
|
25
|
-
import { variantSetFromVertexLayoutProjection } from '../pipeline';
|
|
26
|
-
import {
|
|
27
|
-
import
|
|
28
|
-
import {
|
|
23
|
+
import { renderStateHash, variantSetFromVertexLayoutProjection } from '../pipeline-spec';
|
|
24
|
+
import type { PointsLinesRecordPlan } from '../points-lines/record';
|
|
25
|
+
import { POINTS_LINES_MATERIAL_SHADER_ID } from '../points-lines/record';
|
|
26
|
+
import type { RenderRecordPhase } from '../render-contract';
|
|
29
27
|
import type { MaterialSnapshot } from '../render-system-extract';
|
|
30
|
-
import
|
|
31
|
-
import {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
import { worldEntityKey } from './frame-snapshot';
|
|
29
|
+
import {
|
|
30
|
+
geometryRenderStateForTopology,
|
|
31
|
+
isEntityFullyTransparent,
|
|
32
|
+
selectGeometryPipeline,
|
|
33
|
+
} from './main-pass-material';
|
|
35
34
|
import {
|
|
36
35
|
getOrCreateFromChain,
|
|
37
36
|
INSTANCE_UBO_FULL_ARRAY_BYTES,
|
|
@@ -39,7 +38,11 @@ import {
|
|
|
39
38
|
MESH_PER_ENTITY_STRIDE,
|
|
40
39
|
MESH_SSBO_BYTES,
|
|
41
40
|
MESH_UBO_FULL_ARRAY_BYTES,
|
|
41
|
+
packInstanceStorageBuffer,
|
|
42
42
|
} from './mesh-ssbo';
|
|
43
|
+
import type { _InternalRenderPipelineContext } from './render-context';
|
|
44
|
+
import { MATERIAL_PER_ENTITY_STRIDE } from './render-context';
|
|
45
|
+
import { POINTS_LINES_VIEW_SLOT_STRIDE, writePointsLinesViewUbo } from './view-ubo';
|
|
43
46
|
|
|
44
47
|
type GeometryInstanceDraw = {
|
|
45
48
|
readonly instanceBuffer: Buffer;
|
|
@@ -72,8 +75,7 @@ function geometryRecordPhase(
|
|
|
72
75
|
passKind: PassKind,
|
|
73
76
|
segment: GeometryRecordProfileSegment,
|
|
74
77
|
): RenderRecordPhase {
|
|
75
|
-
const pass =
|
|
76
|
-
passKind === 'deferred' ? 'g-buffer' : passKind === 'temporal' ? 'scene-temporal' : 'forward';
|
|
78
|
+
const pass = passKind === 'deferred' ? 'g-buffer' : 'forward';
|
|
77
79
|
return `record/graph-execute/${pass}/${segment}` as RenderRecordPhase;
|
|
78
80
|
}
|
|
79
81
|
|
|
@@ -116,6 +118,23 @@ function submitSubmeshDraws(
|
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Issues a prepared Points/Lines draw into the already-open geometry pass.
|
|
123
|
+
* Pass lifetime, attachments, bind groups, and submission remain owned by the
|
|
124
|
+
* existing main-pass interpreter.
|
|
125
|
+
*/
|
|
126
|
+
export function recordPointsLinesDraw(
|
|
127
|
+
pass: RhiRenderPassEncoder,
|
|
128
|
+
plan: PointsLinesRecordPlan,
|
|
129
|
+
): void {
|
|
130
|
+
if (plan.drawCount === 0) return;
|
|
131
|
+
if (plan.indexCount > 0) {
|
|
132
|
+
pass.drawIndexed(plan.indexCount, 1, 0, 0, 0);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
pass.draw(plan.vertexCount, 1, 0, 0);
|
|
136
|
+
}
|
|
137
|
+
|
|
119
138
|
/**
|
|
120
139
|
* feat-20260704 M3/w19: per-entity geometry (main colour) draw loop, extracted
|
|
121
140
|
* verbatim from recordMainPass. Walks `c.validatedOrdered`, selects the
|
|
@@ -125,22 +144,24 @@ function submitSubmeshDraws(
|
|
|
125
144
|
* transparent entities are skipped here (drawn in the LDR blend sub-pass);
|
|
126
145
|
* mixed meshes draw their opaque submeshes here and skip transparent submeshes.
|
|
127
146
|
* The pass-selector match set, per-entity material-slot start table, MSAA sample
|
|
128
|
-
* count, group(2) bind group,
|
|
129
|
-
* threaded in explicitly.
|
|
147
|
+
* count, Standard group(2) bind group, fallback mesh group(2) bind group, and
|
|
148
|
+
* the shared per-submesh material BG builder are threaded in explicitly.
|
|
130
149
|
*
|
|
131
150
|
* @internal
|
|
132
151
|
*/
|
|
133
152
|
export function recordGeometryDraws(
|
|
134
153
|
c: _InternalRenderPipelineContext,
|
|
135
154
|
pass: RhiRenderPassEncoder,
|
|
136
|
-
|
|
155
|
+
matchedMaterials: ReadonlyMap<number, ReadonlySet<number>> | null,
|
|
137
156
|
materialSlotIndices: readonly (readonly number[])[],
|
|
138
157
|
sampleCount: number,
|
|
139
158
|
meshGroup2: BindGroup | null,
|
|
159
|
+
meshBindGroup: BindGroup | null,
|
|
140
160
|
resolveMaterialBindGroup: (
|
|
141
161
|
materialSlot: number,
|
|
142
162
|
submeshMaterial: MaterialSnapshot,
|
|
143
163
|
entityKey: number,
|
|
164
|
+
materialWorld: World,
|
|
144
165
|
) => BindGroup,
|
|
145
166
|
passKind: PassKind = 'forward',
|
|
146
167
|
): void {
|
|
@@ -154,6 +175,7 @@ export function recordGeometryDraws(
|
|
|
154
175
|
msaaActive,
|
|
155
176
|
validatedOrdered,
|
|
156
177
|
splitLdrSprite,
|
|
178
|
+
viewBindGroup,
|
|
157
179
|
} = c;
|
|
158
180
|
const colorFormatOverride = c.transparentColorFormat as GPUTextureFormat | undefined;
|
|
159
181
|
let lastVertexBuffer: GpuBuffer | null = null;
|
|
@@ -173,7 +195,7 @@ export function recordGeometryDraws(
|
|
|
173
195
|
const profilePhase = c.profilePhase;
|
|
174
196
|
const materialGroup1DynamicOffsets = new Uint32Array(1);
|
|
175
197
|
const meshGroup2DynamicOffsets = [0];
|
|
176
|
-
const skinGroup2DynamicOffsets = [0, 0
|
|
198
|
+
const skinGroup2DynamicOffsets = [0, 0];
|
|
177
199
|
let lastStencilReference: number | null = null;
|
|
178
200
|
// feat-20260625-refactor-sprite-as-transparent-mesh M3 / w14 (D-7):
|
|
179
201
|
// sprite PSO selection no longer maintains a dedicated tag — the
|
|
@@ -197,7 +219,6 @@ export function recordGeometryDraws(
|
|
|
197
219
|
variantSet: string | undefined,
|
|
198
220
|
colorFormat: GPUTextureFormat | undefined,
|
|
199
221
|
layoutProjection: import('@forgeax/engine-geometry').VertexLayoutProjection,
|
|
200
|
-
materialGuid?: string,
|
|
201
222
|
): RenderPipeline | null => {
|
|
202
223
|
const renderStateKey = renderStateHash(renderState);
|
|
203
224
|
const shaderLookupCache = materialPipelineLookupCache.get(materialShaderId);
|
|
@@ -243,8 +264,6 @@ export function recordGeometryDraws(
|
|
|
243
264
|
undefined,
|
|
244
265
|
undefined,
|
|
245
266
|
undefined,
|
|
246
|
-
materialGuid,
|
|
247
|
-
undefined,
|
|
248
267
|
layoutProjection,
|
|
249
268
|
) ?? null;
|
|
250
269
|
const handle =
|
|
@@ -257,7 +276,7 @@ export function recordGeometryDraws(
|
|
|
257
276
|
renderStateKey,
|
|
258
277
|
topology,
|
|
259
278
|
indexFormat,
|
|
260
|
-
variantSet
|
|
279
|
+
variantSet,
|
|
261
280
|
passKind,
|
|
262
281
|
layoutProjection,
|
|
263
282
|
sampleCount,
|
|
@@ -278,8 +297,22 @@ export function recordGeometryDraws(
|
|
|
278
297
|
const entry = validatedOrdered[i];
|
|
279
298
|
if (entry === undefined) continue;
|
|
280
299
|
|
|
300
|
+
// Points/Lines share the Standard geometry pass. Their retained source
|
|
301
|
+
// is prepared once by the renderer owner, while this loop remains the
|
|
302
|
+
// sole pass/draw submission owner and preserves the authored topology.
|
|
303
|
+
const pointsLinesSubmission = c.pointsLines?.prepare(entry, frameState.isHdrpActive);
|
|
304
|
+
if (entry.source.pointsLines !== undefined && pointsLinesSubmission?.plan.drawCount !== 1)
|
|
305
|
+
continue;
|
|
306
|
+
|
|
307
|
+
if (
|
|
308
|
+
passKind === 'forward' &&
|
|
309
|
+
c.gpuDrivenEntityKeys.has(worldEntityKey(entry.source.worldId, entry.source.entityKey))
|
|
310
|
+
) {
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
|
|
281
314
|
// feat-20260609 M2: skip entities that don't match the pass selector.
|
|
282
|
-
if (
|
|
315
|
+
if (matchedMaterials !== null && !matchedMaterials.has(entry.renderableIndex)) continue;
|
|
283
316
|
|
|
284
317
|
// D-2 generalised feat-20260625 M2 / w7: transparent entities are
|
|
285
318
|
// dispatched in the separate sub-pass (bgra8unorm unorm view,
|
|
@@ -297,8 +330,7 @@ export function recordGeometryDraws(
|
|
|
297
330
|
// decal submesh) is NOT skipped at the entity level; its opaque submeshes
|
|
298
331
|
// draw here and the per-submesh loop below skips the transparent ones
|
|
299
332
|
// (they are drawn in the blend sub-pass instead).
|
|
300
|
-
if (
|
|
301
|
-
continue;
|
|
333
|
+
if (splitLdrSprite && isEntityFullyTransparent(entry.source)) continue;
|
|
302
334
|
|
|
303
335
|
const pipelineTag: 'unlit' = 'unlit';
|
|
304
336
|
|
|
@@ -312,6 +344,70 @@ export function recordGeometryDraws(
|
|
|
312
344
|
lastStencilReference = stencilReference;
|
|
313
345
|
}
|
|
314
346
|
|
|
347
|
+
if (pointsLinesSubmission !== undefined && entry.source.pointsLines !== undefined) {
|
|
348
|
+
const pointsLinesMaterial: MaterialSnapshot = {
|
|
349
|
+
...entry.source.material,
|
|
350
|
+
materialShaderId: POINTS_LINES_MATERIAL_SHADER_ID,
|
|
351
|
+
materialParamSchema:
|
|
352
|
+
runtime.getParamSchema?.(POINTS_LINES_MATERIAL_SHADER_ID) ??
|
|
353
|
+
entry.source.material.materialParamSchema,
|
|
354
|
+
};
|
|
355
|
+
const materialSlot = materialSlotIndices[i]?.[0] ?? 0;
|
|
356
|
+
const pointsLinesBindGroup = resolveMaterialBindGroup(
|
|
357
|
+
materialSlot,
|
|
358
|
+
pointsLinesMaterial,
|
|
359
|
+
entry.source.entityKey,
|
|
360
|
+
entry.world ?? c.world,
|
|
361
|
+
);
|
|
362
|
+
const pointsLinesPipeline = resolveMaterialPipeline(
|
|
363
|
+
POINTS_LINES_MATERIAL_SHADER_ID,
|
|
364
|
+
{
|
|
365
|
+
...pointsLinesMaterial.renderState,
|
|
366
|
+
cullMode: 'none',
|
|
367
|
+
},
|
|
368
|
+
'triangle-list',
|
|
369
|
+
'uint32',
|
|
370
|
+
undefined,
|
|
371
|
+
colorFormatOverride,
|
|
372
|
+
pointsLinesSubmission.layoutProjection,
|
|
373
|
+
);
|
|
374
|
+
if (pointsLinesPipeline === null) continue;
|
|
375
|
+
if (pipelineState.pointsLinesViewBuffer === undefined) continue;
|
|
376
|
+
writePointsLinesViewUbo(
|
|
377
|
+
runtime.device.queue,
|
|
378
|
+
pipelineState.pointsLinesViewBuffer,
|
|
379
|
+
c.camera,
|
|
380
|
+
c.targetW,
|
|
381
|
+
c.targetH,
|
|
382
|
+
entry.source.transform.world,
|
|
383
|
+
entry.source.pointsLines.style,
|
|
384
|
+
i * POINTS_LINES_VIEW_SLOT_STRIDE,
|
|
385
|
+
);
|
|
386
|
+
pass.setBindGroup(
|
|
387
|
+
0,
|
|
388
|
+
viewBindGroup as BindGroup,
|
|
389
|
+
new Uint32Array([i * POINTS_LINES_VIEW_SLOT_STRIDE]),
|
|
390
|
+
0,
|
|
391
|
+
1,
|
|
392
|
+
);
|
|
393
|
+
pass.setPipeline(pointsLinesPipeline);
|
|
394
|
+
pass.setVertexBuffer(0, pointsLinesSubmission.vertexBuffer);
|
|
395
|
+
pass.setIndexBuffer(pointsLinesSubmission.indexBuffer, 'uint32');
|
|
396
|
+
materialGroup1DynamicOffsets[0] = materialSlot * MATERIAL_PER_ENTITY_STRIDE;
|
|
397
|
+
pass.setBindGroup(1, pointsLinesBindGroup, materialGroup1DynamicOffsets, 0, 1);
|
|
398
|
+
const pointsLinesMeshGroup = meshBindGroup ?? meshGroup2;
|
|
399
|
+
if (pointsLinesMeshGroup === null) continue;
|
|
400
|
+
pass.setBindGroup(2, pointsLinesMeshGroup, meshGroup2DynamicOffsets);
|
|
401
|
+
pass.setBindGroup(
|
|
402
|
+
3,
|
|
403
|
+
identityInstanceDraws[0]?.instanceBindGroup ??
|
|
404
|
+
resolveGeometryInstancesBindGroup(c, identityInstanceBuffer),
|
|
405
|
+
);
|
|
406
|
+
recordPointsLinesDraw(pass, pointsLinesSubmission.plan);
|
|
407
|
+
pass.setBindGroup(0, viewBindGroup as BindGroup, [0]);
|
|
408
|
+
continue;
|
|
409
|
+
}
|
|
410
|
+
|
|
315
411
|
if (entry.mesh.vertexBuffer !== lastVertexBuffer) {
|
|
316
412
|
pass.setVertexBuffer(0, entry.mesh.vertexBuffer.handle);
|
|
317
413
|
lastVertexBuffer = entry.mesh.vertexBuffer;
|
|
@@ -338,11 +434,11 @@ export function recordGeometryDraws(
|
|
|
338
434
|
const instanceDraws = resolveGeometryInstanceBuffer(c, entry, identityInstanceDraws);
|
|
339
435
|
if (instanceDraws === null) continue;
|
|
340
436
|
|
|
341
|
-
// feat-20260611 R2 / M8 / w28 (IS-14): skin entries need a
|
|
342
|
-
// group(2) BG matching `pbr-skin-pl` (binding 0 mesh-array UBO
|
|
343
|
-
//
|
|
437
|
+
// feat-20260611 R2 / M8 / w28 (IS-14): skin entries need a 2-binding
|
|
438
|
+
// group(2) BG matching `pbr-skin-pl` (binding 0 mesh-array UBO +
|
|
439
|
+
// binding 1 palette UBO). Building this here -- not in the
|
|
344
440
|
// `meshBindGroup` factory above -- because the binding-shape
|
|
345
|
-
// (1-entry vs
|
|
441
|
+
// (1-entry vs 2-entry) is per-entry, not per-frame. URP / HDRP
|
|
346
442
|
// entries keep using `meshGroup2` (1-entry mesh-array or HDRP
|
|
347
443
|
// unified). The skin-variant cache key includes both buffer
|
|
348
444
|
// identities so a future allocator-driven palette buffer rotation
|
|
@@ -359,7 +455,7 @@ export function recordGeometryDraws(
|
|
|
359
455
|
// captured. Mirrors the uniform null skip-draw pattern (M6-T1).
|
|
360
456
|
let group2BindGroup: BindGroup = meshGroup2 as BindGroup;
|
|
361
457
|
// feat-20260612-skin-palette-per-frame-upload M3 / m3-2: dyn-offset
|
|
362
|
-
// tuple
|
|
458
|
+
// tuple follows the skin group2 offset contract. Defaults to the
|
|
363
459
|
// length-1 non-skin shape; the skin branch below re-computes with the
|
|
364
460
|
// per-entity `entry.source.skin.byteOffset` cursor.
|
|
365
461
|
meshGroup2DynamicOffsets[0] = i * MESH_PER_ENTITY_STRIDE;
|
|
@@ -389,12 +485,11 @@ export function recordGeometryDraws(
|
|
|
389
485
|
? {
|
|
390
486
|
meshArrayBgl: pipelineState.pbrSkinMeshBindGroupLayout,
|
|
391
487
|
paletteBuffer: skinSlice.buffer,
|
|
392
|
-
previousPaletteBuffer: skinSlice.previousBuffer ?? skinSlice.buffer,
|
|
393
488
|
paletteBindingWindowBytes: skinAllocator.bindingWindowBytes,
|
|
394
489
|
}
|
|
395
490
|
: null;
|
|
396
491
|
// Probe the skin PSO cache up front so we can decide whether to swap
|
|
397
|
-
// to the
|
|
492
|
+
// to the 2-binding skin BG. The same probe + selector is repeated in
|
|
398
493
|
// the per-submesh loop below (the loop's variantSet derivation is
|
|
399
494
|
// identical -- skin shader registers a single all-true variant so
|
|
400
495
|
// the canonical empty-key rule applies on HDRP and the URP key is
|
|
@@ -423,8 +518,6 @@ export function recordGeometryDraws(
|
|
|
423
518
|
undefined,
|
|
424
519
|
undefined,
|
|
425
520
|
undefined,
|
|
426
|
-
undefined,
|
|
427
|
-
undefined,
|
|
428
521
|
entry.mesh.layoutProjection,
|
|
429
522
|
) ?? null)
|
|
430
523
|
: null;
|
|
@@ -446,11 +539,7 @@ export function recordGeometryDraws(
|
|
|
446
539
|
const skinMissesBefore = bindGroupCounts.createBindGroup;
|
|
447
540
|
const skinBindGroup: BindGroup = getOrCreateFromChain(
|
|
448
541
|
frameState.meshBindGroupCache,
|
|
449
|
-
[
|
|
450
|
-
pipelineState.meshStorageBuffer.buffer,
|
|
451
|
-
skinResources.paletteBuffer,
|
|
452
|
-
skinResources.previousPaletteBuffer,
|
|
453
|
-
],
|
|
542
|
+
[pipelineState.meshStorageBuffer.buffer, skinResources.paletteBuffer],
|
|
454
543
|
'pbr-skin-mesh',
|
|
455
544
|
() => {
|
|
456
545
|
const result = runtime.device.createBindGroup({
|
|
@@ -488,17 +577,6 @@ export function recordGeometryDraws(
|
|
|
488
577
|
},
|
|
489
578
|
},
|
|
490
579
|
},
|
|
491
|
-
{
|
|
492
|
-
binding: 2,
|
|
493
|
-
resource: {
|
|
494
|
-
kind: 'buffer',
|
|
495
|
-
value: {
|
|
496
|
-
buffer: skinResources.previousPaletteBuffer,
|
|
497
|
-
offset: 0,
|
|
498
|
-
size: skinResources.paletteBindingWindowBytes,
|
|
499
|
-
},
|
|
500
|
-
},
|
|
501
|
-
},
|
|
502
580
|
],
|
|
503
581
|
});
|
|
504
582
|
if (!result.ok) throw result.error;
|
|
@@ -511,14 +589,13 @@ export function recordGeometryDraws(
|
|
|
511
589
|
else skinStats.hit += 1;
|
|
512
590
|
}
|
|
513
591
|
group2BindGroup = skinBindGroup;
|
|
514
|
-
// m3-2: dyn-offset tuple
|
|
515
|
-
//
|
|
592
|
+
// m3-2: dyn-offset tuple uses the per-entity palette cursor M2 m2-6
|
|
593
|
+
// wrote at the extract stage.
|
|
516
594
|
// Replaces the prior PR #353 hard-coded `0` second slot -- every
|
|
517
595
|
// skin entry now points the palette window at its own slice while
|
|
518
596
|
// sharing the worst-case BG entry size above.
|
|
519
597
|
skinGroup2DynamicOffsets[0] = i * MESH_PER_ENTITY_STRIDE;
|
|
520
598
|
skinGroup2DynamicOffsets[1] = entry.source.skin?.byteOffset ?? 0;
|
|
521
|
-
skinGroup2DynamicOffsets[2] = entry.source.skin?.byteOffset ?? 0;
|
|
522
599
|
group2DynamicOffsets = skinGroup2DynamicOffsets;
|
|
523
600
|
} else if (isSkinEntry) {
|
|
524
601
|
// Skin entry but skin PSO not ready (cache miss / async build pending,
|
|
@@ -530,8 +607,6 @@ export function recordGeometryDraws(
|
|
|
530
607
|
// null skip-draw shape (M6-T1, charter P3 explicit failure).
|
|
531
608
|
continue;
|
|
532
609
|
}
|
|
533
|
-
pass.setBindGroup(2, group2BindGroup, group2DynamicOffsets);
|
|
534
|
-
|
|
535
610
|
// feat-20260520-2d-sprite-layer-mvp M-3 / w25 (@fallback sprite
|
|
536
611
|
// bucket): sprite entries get a per-entity material BindGroup so
|
|
537
612
|
// each sprite carries its own texture binding at @group(1) @binding(2).
|
|
@@ -582,31 +657,19 @@ export function recordGeometryDraws(
|
|
|
582
657
|
for (let smIdx = 0; smIdx < entry.mesh.submeshes.length; smIdx++) {
|
|
583
658
|
const sm = entry.mesh.submeshes[smIdx];
|
|
584
659
|
if (sm === undefined) continue;
|
|
585
|
-
const gpuDrivenDraw = entry.source.gpuDrivenDraws?.find(
|
|
586
|
-
(draw) => draw.submeshIndex === smIdx,
|
|
587
|
-
);
|
|
588
|
-
if (
|
|
589
|
-
passKind === 'forward' &&
|
|
590
|
-
gpuDrivenDraw !== undefined &&
|
|
591
|
-
c.gpuDrivenItemKeys.has(
|
|
592
|
-
rasterItemKey(
|
|
593
|
-
entry.source.worldId,
|
|
594
|
-
entry.source.entityKey,
|
|
595
|
-
gpuDrivenDraw.submeshIndex,
|
|
596
|
-
gpuDrivenDraw.passIndex,
|
|
597
|
-
),
|
|
598
|
-
)
|
|
599
|
-
) {
|
|
600
|
-
continue;
|
|
601
|
-
}
|
|
602
660
|
const matSlotIdx = sm.materialSlot;
|
|
603
661
|
const submeshMaterial = matsForRebind[matSlotIdx] ?? entry.source.material;
|
|
662
|
+
if (matchedMaterials !== null) {
|
|
663
|
+
const materialHandles = matchedMaterials.get(entry.renderableIndex);
|
|
664
|
+
const materialHandle = submeshMaterial.materialHandle ?? 0;
|
|
665
|
+
if (materialHandles === undefined || !materialHandles.has(materialHandle)) continue;
|
|
666
|
+
}
|
|
604
667
|
// feat-city-glb Bug 5 (per-submesh transparency): in the LDR split, a
|
|
605
668
|
// transparent submesh is drawn in the blend sub-pass (non-sRGB view),
|
|
606
669
|
// NOT here in the sRGB geometry pass. Skip it. Opaque submeshes of the
|
|
607
670
|
// same (mixed) mesh still draw here. Single-material / fully-opaque
|
|
608
671
|
// meshes are unaffected (their submesh materials are not transparent).
|
|
609
|
-
if (
|
|
672
|
+
if (splitLdrSprite && submeshMaterial.transparent === true) {
|
|
610
673
|
continue;
|
|
611
674
|
}
|
|
612
675
|
// bug-20260610 layer 7d: per-submesh BG construction. Texture
|
|
@@ -632,15 +695,25 @@ export function recordGeometryDraws(
|
|
|
632
695
|
// feat-city-glb Bug 5: per-submesh material BG assembly extracted to
|
|
633
696
|
// the shared `buildPerSubmeshMaterialBg` closure (also called by the
|
|
634
697
|
// LDR blend sub-pass). Resolves the shader's user-region textures
|
|
635
|
-
// (baseColor/MR/normal +
|
|
698
|
+
// (baseColor/MR/normal + a custom Nth texture), emissive/occlusion
|
|
636
699
|
// injection, and Skylight merge; deduped cross-entity via the
|
|
637
700
|
// shaderId-outer `materialBgShared` cache.
|
|
638
701
|
const materialSlot = materialSlotIndices[i]?.[matSlotIdx] ?? materialSlotIndices[i]?.[0] ?? 0;
|
|
639
702
|
perSubmeshBg =
|
|
640
703
|
profilePhase === undefined
|
|
641
|
-
? resolveMaterialBindGroup(
|
|
704
|
+
? resolveMaterialBindGroup(
|
|
705
|
+
materialSlot,
|
|
706
|
+
submeshMaterial,
|
|
707
|
+
entry.source.entityKey,
|
|
708
|
+
entry.world ?? c.world,
|
|
709
|
+
)
|
|
642
710
|
: profileGeometrySegment(c, passKind, 'material-bind-groups', () =>
|
|
643
|
-
resolveMaterialBindGroup(
|
|
711
|
+
resolveMaterialBindGroup(
|
|
712
|
+
materialSlot,
|
|
713
|
+
submeshMaterial,
|
|
714
|
+
entry.source.entityKey,
|
|
715
|
+
entry.world ?? c.world,
|
|
716
|
+
),
|
|
644
717
|
);
|
|
645
718
|
materialGroup1DynamicOffsets[0] = materialSlot * MATERIAL_PER_ENTITY_STRIDE;
|
|
646
719
|
pass.setBindGroup(1, perSubmeshBg, materialGroup1DynamicOffsets, 0, 1);
|
|
@@ -649,58 +722,20 @@ export function recordGeometryDraws(
|
|
|
649
722
|
entry.source.skin !== undefined
|
|
650
723
|
? SKIN_MATERIAL_SHADER_ID
|
|
651
724
|
: submeshMaterial.materialShaderId;
|
|
652
|
-
let materialReadyGuid: string | undefined;
|
|
653
|
-
if (
|
|
654
|
-
submeshMaterial.materialGuid !== undefined &&
|
|
655
|
-
runtime.getMaterialReadiness !== undefined
|
|
656
|
-
) {
|
|
657
|
-
const readiness = runtime.getMaterialReadiness(submeshMaterial.materialGuid);
|
|
658
|
-
if (readiness !== undefined) {
|
|
659
|
-
const readinessRoute = routeMaterialReadiness({
|
|
660
|
-
readiness,
|
|
661
|
-
reportedDiagnosticKeys: frameState.reportedMaterialDiagnosticKeys,
|
|
662
|
-
});
|
|
663
|
-
if (readinessRoute.kind === 'skip') {
|
|
664
|
-
if (readinessRoute.diagnostic !== undefined) {
|
|
665
|
-
runtime.errorRegistry.fire(
|
|
666
|
-
new RhiError({
|
|
667
|
-
code: 'webgpu-runtime-error',
|
|
668
|
-
expected: readinessRoute.diagnostic.expected,
|
|
669
|
-
hint: `${readinessRoute.diagnostic.hint} [materialGuid=${readinessRoute.diagnostic.materialGuid}; specializationKey=${readinessRoute.diagnostic.specializationKey}]`,
|
|
670
|
-
}),
|
|
671
|
-
);
|
|
672
|
-
}
|
|
673
|
-
continue;
|
|
674
|
-
}
|
|
675
|
-
materialReadyGuid = readinessRoute.readiness.materialGuid;
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
725
|
const isSpriteShader =
|
|
679
726
|
smMaterialShaderId === 'forgeax::sprite' || smMaterialShaderId === 'forgeax::sprite-lit';
|
|
680
727
|
// Preserve the dedicated sprite-pass state when the linear-LDR graph
|
|
681
728
|
// routes a sprite through this generic geometry path. Negative scale
|
|
682
729
|
// flips winding, so back-face culling would erase the quad.
|
|
683
|
-
const
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
})();
|
|
693
|
-
const pipelineRenderState =
|
|
694
|
-
temporalRenderState ??
|
|
695
|
-
(isSpriteShader
|
|
696
|
-
? {
|
|
697
|
-
...submeshMaterial.renderState,
|
|
698
|
-
depthWriteEnabled: false,
|
|
699
|
-
depthCompare: 'less-equal' as const,
|
|
700
|
-
cullMode: 'none' as const,
|
|
701
|
-
blend: submeshMaterial.renderState?.blend ?? SPRITE_PREMULTIPLIED_ALPHA_BLEND,
|
|
702
|
-
}
|
|
703
|
-
: submeshMaterial.renderState);
|
|
730
|
+
const pipelineRenderState = isSpriteShader
|
|
731
|
+
? {
|
|
732
|
+
...submeshMaterial.renderState,
|
|
733
|
+
depthWriteEnabled: false,
|
|
734
|
+
depthCompare: 'less-equal' as const,
|
|
735
|
+
cullMode: 'none' as const,
|
|
736
|
+
blend: submeshMaterial.renderState?.blend ?? SPRITE_PREMULTIPLIED_ALPHA_BLEND,
|
|
737
|
+
}
|
|
738
|
+
: geometryRenderStateForTopology(smTopology, submeshMaterial.renderState);
|
|
704
739
|
let smPipelineHandle: typeof pipelineState.unlitPipeline;
|
|
705
740
|
if (smMaterialShaderId === undefined || smMaterialShaderId === 'forgeax::default-unlit') {
|
|
706
741
|
const unlitShaderId = smMaterialShaderId ?? 'forgeax::default-unlit';
|
|
@@ -724,7 +759,6 @@ export function recordGeometryDraws(
|
|
|
724
759
|
unlitVariantSet,
|
|
725
760
|
colorFormatOverride,
|
|
726
761
|
entry.mesh.layoutProjection,
|
|
727
|
-
materialReadyGuid,
|
|
728
762
|
);
|
|
729
763
|
smPipelineHandle =
|
|
730
764
|
unlitRsp ??
|
|
@@ -746,8 +780,18 @@ export function recordGeometryDraws(
|
|
|
746
780
|
// variant's manifest definesKey IS that exact non-empty string
|
|
747
781
|
// (CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true)
|
|
748
782
|
// -- the canonical-empty rule only applies to the all-true case.
|
|
783
|
+
const hasVertexColor = entry.mesh.layoutProjection.attributes.some(
|
|
784
|
+
(attribute) => attribute.key === 'color',
|
|
785
|
+
);
|
|
786
|
+
// The all-true HDRP variant uses the canonical empty key only when
|
|
787
|
+
// every variant axis is true. A plain mesh adds the geometry-owned
|
|
788
|
+
// VERTEX_COLOR_AVAILABLE=false axis, so retain the two capability
|
|
789
|
+
// axes explicitly or the selector would silently choose the URP
|
|
790
|
+
// group(2) layout for an HDRP cluster bind group.
|
|
749
791
|
const capabilityVariantSet = frameState.isHdrpActive
|
|
750
|
-
?
|
|
792
|
+
? hasVertexColor
|
|
793
|
+
? ''
|
|
794
|
+
: 'CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true'
|
|
751
795
|
: 'CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true';
|
|
752
796
|
const authoredVariantSet =
|
|
753
797
|
isSpriteShader && entry.source.spriteInstances !== undefined ? '' : entry.variantSet;
|
|
@@ -765,16 +809,14 @@ export function recordGeometryDraws(
|
|
|
765
809
|
runtime.errorRegistry.fire(projectionVariantSetResult.error);
|
|
766
810
|
continue;
|
|
767
811
|
}
|
|
768
|
-
const projectionVariantSet = projectionVariantSetResult.value;
|
|
769
812
|
const cachedPipeline = resolveMaterialPipeline(
|
|
770
813
|
smMaterialShaderId,
|
|
771
814
|
pipelineRenderState,
|
|
772
815
|
smTopology,
|
|
773
816
|
entry.mesh.indexFormat,
|
|
774
|
-
|
|
817
|
+
projectionVariantSetResult.value,
|
|
775
818
|
colorFormatOverride,
|
|
776
819
|
entry.mesh.layoutProjection,
|
|
777
|
-
materialReadyGuid,
|
|
778
820
|
);
|
|
779
821
|
// feat-20260615-pipeline-spec-ssot M6-T1: cache miss resolves to
|
|
780
822
|
// null uniformly across URP / HDRP / skin shaders. Charter P3
|
|
@@ -797,6 +839,23 @@ export function recordGeometryDraws(
|
|
|
797
839
|
if (smPipelineHandle === null) {
|
|
798
840
|
continue;
|
|
799
841
|
}
|
|
842
|
+
// Standard clustered PBR variants declare the unified cluster/SSAO
|
|
843
|
+
// group(2) layout. Unlit and other URP-layout materials must bind the
|
|
844
|
+
// ordinary mesh group instead; choosing one group for the whole pass
|
|
845
|
+
// makes Dawn reject an otherwise valid unlit pipeline and invalidates
|
|
846
|
+
// the command buffer before it reaches the surface.
|
|
847
|
+
const usesStandardClusterBindings = smMaterialShaderId === 'forgeax::default-standard-pbr';
|
|
848
|
+
if (!isSkinEntry) {
|
|
849
|
+
if (usesStandardClusterBindings) {
|
|
850
|
+
if (meshGroup2 === null) continue;
|
|
851
|
+
group2BindGroup = meshGroup2;
|
|
852
|
+
} else {
|
|
853
|
+
const fallbackGroup = meshBindGroup ?? meshGroup2;
|
|
854
|
+
if (fallbackGroup === null) continue;
|
|
855
|
+
group2BindGroup = fallbackGroup;
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
pass.setBindGroup(2, group2BindGroup, group2DynamicOffsets);
|
|
800
859
|
|
|
801
860
|
if (profilePhase === undefined) {
|
|
802
861
|
submitSubmeshDraws(
|
|
@@ -838,9 +897,8 @@ function resolveGeometryInstanceBuffer(
|
|
|
838
897
|
identityInstanceDraws: readonly GeometryInstanceDraw[],
|
|
839
898
|
): readonly GeometryInstanceDraw[] | null {
|
|
840
899
|
const { runtime, pipelineState, frameState } = c;
|
|
841
|
-
const inst = entry.source.instances
|
|
900
|
+
const inst = entry.source.instances;
|
|
842
901
|
if (inst === undefined) return identityInstanceDraws;
|
|
843
|
-
const spriteInstances = entry.source.spriteInstances;
|
|
844
902
|
let instanceBuffer: Buffer = pipelineState.identityInstanceBuffer;
|
|
845
903
|
let instanceCount = 1;
|
|
846
904
|
{
|
|
@@ -891,21 +949,10 @@ function resolveGeometryInstanceBuffer(
|
|
|
891
949
|
{
|
|
892
950
|
// Cap-gate (LimitExceededDetail single emit point — feat-20260514
|
|
893
951
|
// M3 / w15 anchor): `requestedBytes <= maxStorageBufferBindingSize`.
|
|
894
|
-
const
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
: packTemporalInstanceTransforms(
|
|
899
|
-
inst.transforms,
|
|
900
|
-
entry.source.temporal?.previousInstances?.transforms,
|
|
901
|
-
)
|
|
902
|
-
: interleaveSpriteInstanceBuffer(
|
|
903
|
-
spriteInstances.transforms,
|
|
904
|
-
spriteInstances.regions,
|
|
905
|
-
undefined,
|
|
906
|
-
!uniformFallback,
|
|
907
|
-
);
|
|
908
|
-
const requestedBytes = upload.byteLength;
|
|
952
|
+
const instancePayload = uniformFallback
|
|
953
|
+
? inst.transforms
|
|
954
|
+
: packInstanceStorageBuffer(inst.transforms);
|
|
955
|
+
const requestedBytes = instancePayload.byteLength;
|
|
909
956
|
const cap = runtime.device.limits.maxStorageBufferBindingSize;
|
|
910
957
|
if (!uniformFallback && typeof cap === 'number' && cap > 0 && requestedBytes > cap) {
|
|
911
958
|
runtime.errorRegistry.fire(
|
|
@@ -961,7 +1008,11 @@ function resolveGeometryInstanceBuffer(
|
|
|
961
1008
|
}
|
|
962
1009
|
}
|
|
963
1010
|
if (active !== null) {
|
|
964
|
-
const writeRes = runtime.device.queue.writeBuffer(
|
|
1011
|
+
const writeRes = runtime.device.queue.writeBuffer(
|
|
1012
|
+
active.buffer.handle,
|
|
1013
|
+
0,
|
|
1014
|
+
instancePayload,
|
|
1015
|
+
);
|
|
965
1016
|
if (!writeRes.ok) {
|
|
966
1017
|
runtime.errorRegistry.fire(writeRes.error);
|
|
967
1018
|
} else {
|