@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/dist/chunk-DJIMFYX6.mjs
DELETED
|
@@ -1,1439 +0,0 @@
|
|
|
1
|
-
import { defineComponent } from '@forgeax/engine-ecs';
|
|
2
|
-
import { err, ok, TextError, unpackSlot } from '@forgeax/engine-types';
|
|
3
|
-
import { TONEMAP_SHADER_MODE } from '@forgeax/engine-shader';
|
|
4
|
-
import { PROCEDURAL_FLOATS_PER_VERTEX } from '@forgeax/engine-geometry';
|
|
5
|
-
import { resetFontConcurrency, trackFontConcurrency, layoutGlyphText, conservativeCubeAabb, bakeGlyphMesh } from '@forgeax/engine-graphics-extras';
|
|
6
|
-
import { ResourceInvalidValueError } from '@forgeax/engine-ecs/projection';
|
|
7
|
-
export { ResourceInvalidValueError, SpawnLightInvalidBoundsError, SpriteInstancesCountMismatchError, SpriteInstancesMutuallyExclusiveWithInstancesError, SpriteInstancesRequiresSpriteShaderError } from '@forgeax/engine-ecs/projection';
|
|
8
|
-
|
|
9
|
-
// src/components/glyph-text.ts
|
|
10
|
-
var GlyphText = defineComponent("GlyphText", {
|
|
11
|
-
// The layout/render owner re-resolves the font asset on the target world;
|
|
12
|
-
// authoring text and style remain portable simulation state.
|
|
13
|
-
fontHandle: {
|
|
14
|
-
type: "shared<FontAsset>",
|
|
15
|
-
default: 0
|
|
16
|
-
},
|
|
17
|
-
text: { type: "string", default: "" },
|
|
18
|
-
fontSize: { type: "f32", default: 16 },
|
|
19
|
-
// color carries an explicit layer-2 default [1,1,1,1] (opaque white); the
|
|
20
|
-
// array layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
|
|
21
|
-
color: { type: "array<f32, 4>", default: new Float32Array([1, 1, 1, 1]) }
|
|
22
|
-
});
|
|
23
|
-
var SpriteAnimation = defineComponent("SpriteAnimation", {
|
|
24
|
-
frameCount: { type: "u32" },
|
|
25
|
-
frameDuration: { type: "f32" },
|
|
26
|
-
currentFrame: { type: "u32", transient: true },
|
|
27
|
-
accumDt: { type: "f32", transient: true },
|
|
28
|
-
regions: { type: "array<f32>" },
|
|
29
|
-
playbackMode: { type: "u32" }
|
|
30
|
-
});
|
|
31
|
-
var SpriteInstances = defineComponent("SpriteInstances", {
|
|
32
|
-
transforms: { type: "array<f32>" },
|
|
33
|
-
regions: { type: "array<f32>" }
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
// src/components/sprite-playback-mode.ts
|
|
37
|
-
var SPRITE_PLAYBACK_MODE_LOOP = 0;
|
|
38
|
-
var SPRITE_PLAYBACK_MODE_CLAMP = 1;
|
|
39
|
-
function spritePlaybackModeFromU32(value) {
|
|
40
|
-
return value === SPRITE_PLAYBACK_MODE_CLAMP ? "clamp" : "loop";
|
|
41
|
-
}
|
|
42
|
-
var SpriteRegionOverride = defineComponent("SpriteRegionOverride", {
|
|
43
|
-
region: { type: "array<f32, 4>" }
|
|
44
|
-
});
|
|
45
|
-
function encodeSortScope(scope) {
|
|
46
|
-
switch (scope) {
|
|
47
|
-
case "layer":
|
|
48
|
-
return 0;
|
|
49
|
-
case "per-cell":
|
|
50
|
-
return 1;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function decodeSortScope(raw) {
|
|
54
|
-
return raw === 1 ? "per-cell" : "layer";
|
|
55
|
-
}
|
|
56
|
-
var TileLayer = defineComponent("TileLayer", {
|
|
57
|
-
tiles: { type: "array<u32>" },
|
|
58
|
-
layerOrder: { type: "i32", default: 0 },
|
|
59
|
-
dirty: { type: "u8", default: 0 },
|
|
60
|
-
sortScope: { type: "u8", default: 0 }
|
|
61
|
-
});
|
|
62
|
-
function markTileLayerDirty(world, layerEntity) {
|
|
63
|
-
return world.set(layerEntity, TileLayer, { dirty: 1 });
|
|
64
|
-
}
|
|
65
|
-
var Tilemap = defineComponent("Tilemap", {
|
|
66
|
-
cols: { type: "u32", default: 0 },
|
|
67
|
-
rows: { type: "u32", default: 0 },
|
|
68
|
-
// tileSize carries an explicit layer-2 default [1,1] (unit cell); the array
|
|
69
|
-
// layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
|
|
70
|
-
tileSize: { type: "array<f32, 2>", default: new Float32Array([1, 1]) },
|
|
71
|
-
chunkSize: { type: "u32", default: 16 },
|
|
72
|
-
tileset: { type: "string" }
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
// src/errors/render.ts
|
|
76
|
-
var FogOwnerConflictError = class extends Error {
|
|
77
|
-
code = "fog-owner-conflict";
|
|
78
|
-
expected = "resourceOwner contains zero or one Fog entity";
|
|
79
|
-
hint = "remove every Fog entity except one from the resourceOwner World, then retry draw";
|
|
80
|
-
detail;
|
|
81
|
-
constructor(resourceOwner, entities, omitted) {
|
|
82
|
-
super(
|
|
83
|
-
`Fog owner conflict in resourceOwner ${resourceOwner}: ${entities.length + omitted} entities`
|
|
84
|
-
);
|
|
85
|
-
this.name = "FogOwnerConflictError";
|
|
86
|
-
this.detail = {
|
|
87
|
-
resourceOwner,
|
|
88
|
-
entities: [...entities],
|
|
89
|
-
omitted
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
var FogParametersInvalidError = class extends Error {
|
|
94
|
-
code = "fog-parameters-invalid";
|
|
95
|
-
expected;
|
|
96
|
-
hint;
|
|
97
|
-
detail;
|
|
98
|
-
constructor(entity, field, expected, actual) {
|
|
99
|
-
super(`Fog.${field} is invalid on entity ${entity}`);
|
|
100
|
-
this.name = "FogParametersInvalidError";
|
|
101
|
-
this.expected = expected;
|
|
102
|
-
this.hint = `set Fog.${field} to ${expected} on entity ${entity}, then retry draw`;
|
|
103
|
-
this.detail = { entity, field, expected, actual };
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
var ShadowInvalidConfigError = class extends Error {
|
|
107
|
-
code = "shadow-invalid-config";
|
|
108
|
-
expected;
|
|
109
|
-
hint;
|
|
110
|
-
detail;
|
|
111
|
-
constructor(field, value, min, maxOrComparator) {
|
|
112
|
-
const isComparator = maxOrComparator === ">" || maxOrComparator === ">=";
|
|
113
|
-
const max = !isComparator && typeof maxOrComparator === "number" ? maxOrComparator : void 0;
|
|
114
|
-
const comparator = isComparator ? maxOrComparator : ">=";
|
|
115
|
-
const isInteger = field === "cascadeCount" || field === "pcfKernelSize";
|
|
116
|
-
const isOdd = field === "pcfKernelSize";
|
|
117
|
-
const hint = max !== void 0 ? isInteger ? `set ${field} to an integer in [${min}, ${max}]; got ${value}` : `set ${field} to a value in [${min}, ${max}]; got ${value}` : isOdd ? `set ${field} to an odd integer ${comparator} ${min}; got ${value}` : `set ${field} to a value ${comparator} ${min}; got ${value}`;
|
|
118
|
-
const expected = max !== void 0 ? `${field} in [${min}, ${max}]` : `${field} ${comparator} ${min}`;
|
|
119
|
-
super(
|
|
120
|
-
max !== void 0 ? `shadow component .${field} must be in [${min}, ${max}], got ${value}` : `shadow component .${field} must be ${comparator} ${min}, got ${value}`
|
|
121
|
-
);
|
|
122
|
-
this.name = "ShadowInvalidConfigError";
|
|
123
|
-
this.hint = hint;
|
|
124
|
-
this.expected = expected;
|
|
125
|
-
this.detail = { field, value, min, ...max !== void 0 ? { max } : {} };
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
var EquirectProjectionFailedError = class extends Error {
|
|
129
|
-
code = "equirect-projection-failed";
|
|
130
|
-
expected;
|
|
131
|
-
hint;
|
|
132
|
-
detail;
|
|
133
|
-
constructor(handle) {
|
|
134
|
-
const expected = `equirect handle ${handle} projects to a GPU cubemap + IBL precompute`;
|
|
135
|
-
const hint = `equirect handle ${handle} referenced by Skylight/SkyboxBackground failed projection; declare Skylight{equirect} with a valid HDR equirect source and check device.caps.rgba16floatRenderable. The projection is internal (no user upload call); the record arm does not retry`;
|
|
136
|
-
super(`equirect handle ${handle} cubemap projection failed`);
|
|
137
|
-
this.name = "EquirectProjectionFailedError";
|
|
138
|
-
this.expected = expected;
|
|
139
|
-
this.hint = hint;
|
|
140
|
-
this.detail = { handle };
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
var HdrpCapsInsufficientError = class extends Error {
|
|
144
|
-
code = "hdrp-caps-insufficient";
|
|
145
|
-
expected;
|
|
146
|
-
hint;
|
|
147
|
-
detail;
|
|
148
|
-
constructor(capName, actual, required) {
|
|
149
|
-
const expected = `${capName} >= ${required}`;
|
|
150
|
-
const hint = `${capName} = ${actual} (need >= ${required}); this device does not have enough storage buffer slots for HDRP cluster-forward rendering. Fall back to URP by not calling installPipeline(hdrpAsset)`;
|
|
151
|
-
super(`HDRP caps insufficient: ${capName} = ${actual} (need >= ${required})`);
|
|
152
|
-
this.name = "HdrpCapsInsufficientError";
|
|
153
|
-
this.expected = expected;
|
|
154
|
-
this.hint = hint;
|
|
155
|
-
this.detail = { capName, actual, required };
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
var HdrpLightBudgetExceededError = class extends Error {
|
|
159
|
-
code = "hdrp-light-budget-exceeded";
|
|
160
|
-
expected;
|
|
161
|
-
hint;
|
|
162
|
-
detail;
|
|
163
|
-
constructor(actual, budget) {
|
|
164
|
-
const expected = `light count <= ${budget}`;
|
|
165
|
-
const hint = `${actual} lights exceed HDRP budget ${budget}; truncating to 256. Reduce light count or wait for OOS-hdrp-larger-budget`;
|
|
166
|
-
super(`HDRP light budget exceeded: ${actual} > ${budget}`);
|
|
167
|
-
this.name = "HdrpLightBudgetExceededError";
|
|
168
|
-
this.expected = expected;
|
|
169
|
-
this.hint = hint;
|
|
170
|
-
this.detail = { actual, budget };
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
var HdrpIndexListOverflowError = class extends Error {
|
|
174
|
-
code = "hdrp-index-list-overflow";
|
|
175
|
-
expected;
|
|
176
|
-
hint;
|
|
177
|
-
detail;
|
|
178
|
-
constructor(actual, capacity) {
|
|
179
|
-
const expected = `light index list entries <= ${capacity}`;
|
|
180
|
-
const hint = `cluster binner overflow: writeCount ${actual} exceeds capacity ${capacity}; reduce lights, shrink cluster grid, or increase LIGHT_INDEX_LIST_CAPACITY`;
|
|
181
|
-
super(`HDRP index list overflow: ${actual} > ${capacity}`);
|
|
182
|
-
this.name = "HdrpIndexListOverflowError";
|
|
183
|
-
this.expected = expected;
|
|
184
|
-
this.hint = hint;
|
|
185
|
-
this.detail = { actual, capacity };
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
var HdrpDeferredCapsInsufficientError = class extends Error {
|
|
189
|
-
code = "hdrp-deferred-caps-insufficient";
|
|
190
|
-
expected;
|
|
191
|
-
hint;
|
|
192
|
-
detail;
|
|
193
|
-
constructor(actual) {
|
|
194
|
-
const _expected = 4;
|
|
195
|
-
const _expectedStr = `maxColorAttachments >= ${_expected}`;
|
|
196
|
-
const hint = `WebGPU maxColorAttachments = ${actual} (need >= ${_expected}). Upgrade browser to latest Chrome/Edge/Safari, or use URP (forgeax::urp) instead of HDRP.`;
|
|
197
|
-
super(
|
|
198
|
-
`HDRP deferred caps insufficient: maxColorAttachments = ${actual} (need >= ${_expected})`
|
|
199
|
-
);
|
|
200
|
-
this.name = "HdrpDeferredCapsInsufficientError";
|
|
201
|
-
this.expected = _expectedStr;
|
|
202
|
-
this.hint = hint;
|
|
203
|
-
this.detail = { actual, expected: _expected };
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
var GbufferRtAllocFailedError = class extends Error {
|
|
207
|
-
code = "gbuffer-rt-alloc-failed";
|
|
208
|
-
expected;
|
|
209
|
-
hint;
|
|
210
|
-
detail;
|
|
211
|
-
constructor(attachmentIndex, requestedBytes) {
|
|
212
|
-
const expected = "g-buffer color target allocation succeeded";
|
|
213
|
-
const hint = `g-buffer color target (attachment ${attachmentIndex}, ${requestedBytes} bytes) allocation failed. Common causes: (a) GPU memory pressure; (b) framebuffer resolution too large; (c) RHI backend limits hit. Check device.limits and reduce frame resolution.`;
|
|
214
|
-
super(`g-buffer RT alloc failed: attachment[${attachmentIndex}] = ${requestedBytes} bytes`);
|
|
215
|
-
this.name = "GbufferRtAllocFailedError";
|
|
216
|
-
this.expected = expected;
|
|
217
|
-
this.hint = hint;
|
|
218
|
-
this.detail = { attachmentIndex, requestedBytes };
|
|
219
|
-
}
|
|
220
|
-
};
|
|
221
|
-
var GbufferAttachmentCountMismatchError = class extends Error {
|
|
222
|
-
code = "gbuffer-attachment-count-mismatch";
|
|
223
|
-
expected;
|
|
224
|
-
hint;
|
|
225
|
-
detail;
|
|
226
|
-
constructor(actual) {
|
|
227
|
-
const _expected = 3;
|
|
228
|
-
const _expectedStr = `exactly ${_expected} g-buffer color attachments`;
|
|
229
|
-
const hint = `HDRP deferred expects ${_expected} g-buffer color attachments, got ${actual}. Check hdrp-pipeline internal schema or custom g-buffer override.`;
|
|
230
|
-
super(`g-buffer attachment count mismatch: got ${actual}, expected ${_expected}`);
|
|
231
|
-
this.name = "GbufferAttachmentCountMismatchError";
|
|
232
|
-
this.expected = _expectedStr;
|
|
233
|
-
this.hint = hint;
|
|
234
|
-
this.detail = { actual, expected: _expected };
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
var PointShadowAtlasUninitializedError = class extends Error {
|
|
238
|
-
code = "point-shadow-atlas-uninitialized";
|
|
239
|
-
expected;
|
|
240
|
-
hint;
|
|
241
|
-
constructor() {
|
|
242
|
-
const expected = "ShadowAtlas.ensure() invoked before faceView()";
|
|
243
|
-
const hint = "Gate faceView on isAllocated() or call ensure() once in the per-frame extract step before iterating face views";
|
|
244
|
-
super("ShadowAtlas.faceView called before ensure(); the cube_array texture is not allocated");
|
|
245
|
-
this.name = "PointShadowAtlasUninitializedError";
|
|
246
|
-
this.expected = expected;
|
|
247
|
-
this.hint = hint;
|
|
248
|
-
}
|
|
249
|
-
};
|
|
250
|
-
var PointShadowAtlasBoundsViolationError = class extends Error {
|
|
251
|
-
code = "point-shadow-atlas-bounds-violation";
|
|
252
|
-
expected;
|
|
253
|
-
hint;
|
|
254
|
-
detail;
|
|
255
|
-
constructor(axis, value, max) {
|
|
256
|
-
const expected = `0 <= ${axis} < ${max}`;
|
|
257
|
-
const hint = axis === "layer" ? `clamp PointLight.shadowAtlasLayer to [0, ${max}); the cap on layers equals PointLightShadow cardinality (4)` : `clamp face index to [0, ${max}); cube faces are indexed 0..5 in +X/-X/+Y/-Y/+Z/-Z order`;
|
|
258
|
-
super(`ShadowAtlas.faceView ${axis} out of range: ${value} (must be in [0, ${max}))`);
|
|
259
|
-
this.name = "PointShadowAtlasBoundsViolationError";
|
|
260
|
-
this.expected = expected;
|
|
261
|
-
this.hint = hint;
|
|
262
|
-
this.detail = { axis, value, max };
|
|
263
|
-
}
|
|
264
|
-
};
|
|
265
|
-
var VideoUploadUnsupportedError = class extends Error {
|
|
266
|
-
code = "video-upload-unsupported";
|
|
267
|
-
expected;
|
|
268
|
-
hint;
|
|
269
|
-
constructor() {
|
|
270
|
-
const expected = "at least one video upload path available: a host HTMLVideoElement (general copyExternalImageToTexture path) or GPUExternalTexture capability (high-perf path)";
|
|
271
|
-
const hint = "this backend exposes no usable video upload path; render a static texture instead, or switch to a WebGPU backend that supports video texture upload";
|
|
272
|
-
super("video upload unsupported \u2014 no general or high-perf path available");
|
|
273
|
-
this.name = "VideoUploadUnsupportedError";
|
|
274
|
-
this.expected = expected;
|
|
275
|
-
this.hint = hint;
|
|
276
|
-
}
|
|
277
|
-
};
|
|
278
|
-
var VertexStorageBufferUnavailableError = class extends Error {
|
|
279
|
-
code = "vertex-storage-buffer-unavailable";
|
|
280
|
-
expected;
|
|
281
|
-
hint;
|
|
282
|
-
constructor() {
|
|
283
|
-
const expected = "device.caps supports vertex-stage storage buffer (maxStorageBuffersPerShaderStage >= 1)";
|
|
284
|
-
const hint = "this device does not support vertex-stage storage buffers; skinning requires vertex-stage storage buffer access (OOS-uniform-palette fallback not implemented)";
|
|
285
|
-
super("vertex-stage storage buffer unavailable \u2014 skinning cannot operate");
|
|
286
|
-
this.name = "VertexStorageBufferUnavailableError";
|
|
287
|
-
this.expected = expected;
|
|
288
|
-
this.hint = hint;
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
var SkinPaletteOverflowError = class extends Error {
|
|
292
|
-
code = "skin-palette-overflow";
|
|
293
|
-
expected;
|
|
294
|
-
hint;
|
|
295
|
-
detail;
|
|
296
|
-
constructor(requestedBytes, limit) {
|
|
297
|
-
const expected = `skinned joint palette (${requestedBytes} B) fits within device.limits.maxStorageBufferBindingSize (${limit} B)`;
|
|
298
|
-
const hint = "palette buffer exceeds device maxStorageBufferBindingSize; reduce skinned entity count or split into multiple palette buffers (OOS-skin-palette-batch)";
|
|
299
|
-
super(`skin palette buffer needs ${requestedBytes} B, exceeds device limit ${limit} B`);
|
|
300
|
-
this.name = "SkinPaletteOverflowError";
|
|
301
|
-
this.expected = expected;
|
|
302
|
-
this.hint = hint;
|
|
303
|
-
this.detail = { requestedBytes, limit };
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
var SkinMaterialMismatchError = class extends Error {
|
|
307
|
-
code = "skin-material-mismatch";
|
|
308
|
-
expected;
|
|
309
|
-
hint;
|
|
310
|
-
detail;
|
|
311
|
-
constructor(entity, actualShader) {
|
|
312
|
-
const expected = "Skin entity's first material program module === 'forgeax::pbr-skin'";
|
|
313
|
-
const hint = `entity ${entity} has Skin but the first material program module is ${actualShader ?? "<empty>"}; load the mesh via the gltf importer (cooker auto-routes 'forgeax::pbr-skin' for skinned primitives), or remove the Skin component to render the entity unskinned with Materials.standard / Materials.unlit`;
|
|
314
|
-
super(
|
|
315
|
-
`Skin / material mismatch on entity ${entity}: expected forgeax::pbr-skin, got ${actualShader ?? "<empty>"}`
|
|
316
|
-
);
|
|
317
|
-
this.name = "SkinMaterialMismatchError";
|
|
318
|
-
this.expected = expected;
|
|
319
|
-
this.hint = hint;
|
|
320
|
-
this.detail = { entity, actualShader };
|
|
321
|
-
}
|
|
322
|
-
};
|
|
323
|
-
var MaterialSkinAttrMissingError = class extends Error {
|
|
324
|
-
code = "material-skin-attr-missing";
|
|
325
|
-
expected;
|
|
326
|
-
hint;
|
|
327
|
-
detail;
|
|
328
|
-
constructor(entity, missing) {
|
|
329
|
-
const expected = "pbr-skin material requires mesh.attributes.skinIndex + skinWeight";
|
|
330
|
-
const hint = `entity ${entity} uses forgeax::pbr-skin but its MeshAsset is missing ${missing}; switch the entity to a skinned glTF mesh authored with JOINTS_0 + WEIGHTS_0, or change the material to a non-skin shader via Materials.standard / Materials.unlit`;
|
|
331
|
-
super(
|
|
332
|
-
`material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${missing}`
|
|
333
|
-
);
|
|
334
|
-
this.name = "MaterialSkinAttrMissingError";
|
|
335
|
-
this.expected = expected;
|
|
336
|
-
this.hint = hint;
|
|
337
|
-
this.detail = { entity, missing };
|
|
338
|
-
}
|
|
339
|
-
};
|
|
340
|
-
var renderFeatureRecoveryHintByRecovery = {
|
|
341
|
-
"next-frame": (featureIdentity, stage) => `correct '${featureIdentity}' ${stage} data and retry on the next frame`,
|
|
342
|
-
"renderer-recover": (featureIdentity, _stage) => `wait for renderer recovery before retrying '${featureIdentity}'`,
|
|
343
|
-
registration: (featureIdentity, _stage) => `correct '${featureIdentity}' registration before retrying`
|
|
344
|
-
};
|
|
345
|
-
var RenderFeatureRegistrationConflictError = class extends Error {
|
|
346
|
-
code = "render-feature-registration-conflict";
|
|
347
|
-
expected;
|
|
348
|
-
hint;
|
|
349
|
-
detail;
|
|
350
|
-
constructor(featureIdentity, order, conflictingOrder) {
|
|
351
|
-
const expected = `feature identity '${featureIdentity}' is unique`;
|
|
352
|
-
const hint = `rename '${featureIdentity}' or remove the duplicate feature before registration`;
|
|
353
|
-
super(`render feature registration conflict for '${featureIdentity}'`);
|
|
354
|
-
this.name = "RenderFeatureRegistrationConflictError";
|
|
355
|
-
this.expected = expected;
|
|
356
|
-
this.hint = hint;
|
|
357
|
-
this.detail = { featureIdentity, order, conflictingOrder };
|
|
358
|
-
}
|
|
359
|
-
};
|
|
360
|
-
var RenderFeatureStageFailedError = class extends Error {
|
|
361
|
-
code = "render-feature-stage-failed";
|
|
362
|
-
expected;
|
|
363
|
-
hint;
|
|
364
|
-
detail;
|
|
365
|
-
constructor(featureIdentity, order, stage, recovery) {
|
|
366
|
-
const expected = `feature '${featureIdentity}' completes its ${stage} stage without an error`;
|
|
367
|
-
const hint = renderFeatureRecoveryHintByRecovery[recovery](featureIdentity, stage);
|
|
368
|
-
super(`render feature '${featureIdentity}' failed during ${stage}`);
|
|
369
|
-
this.name = "RenderFeatureStageFailedError";
|
|
370
|
-
this.expected = expected;
|
|
371
|
-
this.hint = hint;
|
|
372
|
-
this.detail = { featureIdentity, order, stage, recovery };
|
|
373
|
-
}
|
|
374
|
-
};
|
|
375
|
-
var RenderFeatureCapabilityMissingError = class extends Error {
|
|
376
|
-
code = "render-feature-capability-missing";
|
|
377
|
-
expected;
|
|
378
|
-
hint;
|
|
379
|
-
detail;
|
|
380
|
-
constructor(featureIdentity, order, capability) {
|
|
381
|
-
const expected = `device capability '${capability}' is available for feature '${featureIdentity}'`;
|
|
382
|
-
const hint = `disable '${featureIdentity}' or use a device with '${capability}' capability`;
|
|
383
|
-
super(`render feature '${featureIdentity}' requires missing capability '${capability}'`);
|
|
384
|
-
this.name = "RenderFeatureCapabilityMissingError";
|
|
385
|
-
this.expected = expected;
|
|
386
|
-
this.hint = hint;
|
|
387
|
-
this.detail = { featureIdentity, order, capability };
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
var RenderFeaturePassOrderConflictError = class extends Error {
|
|
391
|
-
code = "render-feature-pass-order-conflict";
|
|
392
|
-
expected;
|
|
393
|
-
hint;
|
|
394
|
-
detail;
|
|
395
|
-
constructor(featureIdentity, order, passIdentity, dependencyIdentity) {
|
|
396
|
-
const expected = `feature pass '${passIdentity}' follows dependency '${dependencyIdentity}'`;
|
|
397
|
-
const hint = `reorder '${featureIdentity}' passes so '${passIdentity}' follows '${dependencyIdentity}'`;
|
|
398
|
-
super(`render feature '${featureIdentity}' pass order conflict`);
|
|
399
|
-
this.name = "RenderFeaturePassOrderConflictError";
|
|
400
|
-
this.expected = expected;
|
|
401
|
-
this.hint = hint;
|
|
402
|
-
this.detail = { featureIdentity, order, passIdentity, dependencyIdentity };
|
|
403
|
-
}
|
|
404
|
-
};
|
|
405
|
-
var RenderFeaturePreparationFailedError = class extends Error {
|
|
406
|
-
code = "render-feature-preparation-failed";
|
|
407
|
-
expected;
|
|
408
|
-
hint;
|
|
409
|
-
detail;
|
|
410
|
-
constructor(featureIdentity, order, operation, resourceKind, resourceName, reason, recovery) {
|
|
411
|
-
const expected = `${resourceKind} '${resourceName}' is prepared during ${operation}`;
|
|
412
|
-
const hint = `repair '${resourceName}' and retry feature '${featureIdentity}' on ${recovery}`;
|
|
413
|
-
super(`render feature '${featureIdentity}' preparation failed for '${resourceName}'`);
|
|
414
|
-
this.name = "RenderFeaturePreparationFailedError";
|
|
415
|
-
this.expected = expected;
|
|
416
|
-
this.hint = hint;
|
|
417
|
-
this.detail = {
|
|
418
|
-
featureIdentity,
|
|
419
|
-
order,
|
|
420
|
-
stage: "prepare",
|
|
421
|
-
operation,
|
|
422
|
-
resourceKind,
|
|
423
|
-
resourceName,
|
|
424
|
-
reason,
|
|
425
|
-
recovery
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
};
|
|
429
|
-
var RenderFeaturePreparedStateMismatchError = class extends Error {
|
|
430
|
-
code = "render-feature-prepared-state-mismatch";
|
|
431
|
-
expected;
|
|
432
|
-
hint;
|
|
433
|
-
detail;
|
|
434
|
-
constructor(detail) {
|
|
435
|
-
const expected = `${detail.resourceKind} state is compatible for '${detail.operation}'`;
|
|
436
|
-
const hint = `repair '${detail.reason}' for feature '${detail.featureIdentity}' and retry`;
|
|
437
|
-
super(`render feature '${detail.featureIdentity}' prepared state mismatch`);
|
|
438
|
-
this.name = "RenderFeaturePreparedStateMismatchError";
|
|
439
|
-
this.expected = expected;
|
|
440
|
-
this.hint = hint;
|
|
441
|
-
this.detail = detail;
|
|
442
|
-
}
|
|
443
|
-
};
|
|
444
|
-
var RenderFeatureDrawRecordingFailedError = class extends Error {
|
|
445
|
-
code = "render-feature-draw-recording-failed";
|
|
446
|
-
expected;
|
|
447
|
-
hint;
|
|
448
|
-
detail;
|
|
449
|
-
constructor(featureIdentity, order, operation, resourceKind, reason, backendReason, recovery) {
|
|
450
|
-
const expected = `${resourceKind} recording succeeds for '${operation}'`;
|
|
451
|
-
const hint = `repair '${reason}' and retry feature '${featureIdentity}' after ${recovery}`;
|
|
452
|
-
super(`render feature '${featureIdentity}' draw recording failed`);
|
|
453
|
-
this.name = "RenderFeatureDrawRecordingFailedError";
|
|
454
|
-
this.expected = expected;
|
|
455
|
-
this.hint = hint;
|
|
456
|
-
this.detail = {
|
|
457
|
-
featureIdentity,
|
|
458
|
-
order,
|
|
459
|
-
stage: "record",
|
|
460
|
-
operation,
|
|
461
|
-
resourceKind,
|
|
462
|
-
reason,
|
|
463
|
-
backendReason,
|
|
464
|
-
recovery
|
|
465
|
-
};
|
|
466
|
-
}
|
|
467
|
-
};
|
|
468
|
-
var ObservationUnavailableError = class extends Error {
|
|
469
|
-
code = "observation-unavailable";
|
|
470
|
-
expected;
|
|
471
|
-
hint;
|
|
472
|
-
detail;
|
|
473
|
-
constructor(reason, hint) {
|
|
474
|
-
let recovery;
|
|
475
|
-
if (reason === "copy-src") recovery = "enable-copy-src";
|
|
476
|
-
else if (reason === "resource" || reason === "readback-failed") recovery = "retry-readback";
|
|
477
|
-
else recovery = "draw-current-frame";
|
|
478
|
-
super(`current-frame observation unavailable: ${reason}`);
|
|
479
|
-
this.name = "ObservationUnavailableError";
|
|
480
|
-
this.expected = "a fresh producer-owned rgba16float current-frame observation";
|
|
481
|
-
this.hint = hint;
|
|
482
|
-
this.detail = { reason, recovery };
|
|
483
|
-
}
|
|
484
|
-
};
|
|
485
|
-
var TaaCapsInsufficientError = class extends Error {
|
|
486
|
-
code = "taa-caps-insufficient";
|
|
487
|
-
expected = "rgba16floatRenderable and maxColorAttachments >= 2";
|
|
488
|
-
hint = "select a device with rgba16float render targets and at least two color attachments, then rebuild the renderer";
|
|
489
|
-
detail;
|
|
490
|
-
constructor(rgba16floatRenderable, maxColorAttachments) {
|
|
491
|
-
super(
|
|
492
|
-
`TAA capabilities insufficient: rgba16floatRenderable=${rgba16floatRenderable}, maxColorAttachments=${maxColorAttachments}`
|
|
493
|
-
);
|
|
494
|
-
this.name = "TaaCapsInsufficientError";
|
|
495
|
-
this.detail = {
|
|
496
|
-
rgba16floatRenderable,
|
|
497
|
-
maxColorAttachments,
|
|
498
|
-
recovery: "enable-temporal-capabilities"
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
};
|
|
502
|
-
var TemporalUnsupportedError = class extends Error {
|
|
503
|
-
code = "temporal-unsupported";
|
|
504
|
-
expected;
|
|
505
|
-
hint = "call resolveTemporal exactly once after temporal raster and pass single-sample rgba16float scene and temporal targets";
|
|
506
|
-
detail;
|
|
507
|
-
constructor(reason, expected, actual) {
|
|
508
|
-
super(`temporal pipeline unsupported: ${reason}; expected ${expected}, got ${actual}`);
|
|
509
|
-
this.name = "TemporalUnsupportedError";
|
|
510
|
-
this.expected = expected;
|
|
511
|
-
this.detail = { reason, actual, recovery: "fix-temporal-pipeline-topology" };
|
|
512
|
-
}
|
|
513
|
-
};
|
|
514
|
-
var AtmosphereParameterInvalidError = class extends Error {
|
|
515
|
-
code = "atmosphere-parameter-invalid";
|
|
516
|
-
expected;
|
|
517
|
-
hint;
|
|
518
|
-
detail;
|
|
519
|
-
constructor(field, value, min, max, minExclusive = false) {
|
|
520
|
-
const lower = minExclusive ? `>${min}` : `>=${min}`;
|
|
521
|
-
super(`Atmosphere.${field} must be ${lower} and <=${max}; got ${value}`);
|
|
522
|
-
this.name = "AtmosphereParameterInvalidError";
|
|
523
|
-
this.expected = `${field} ${lower} and <=${max}`;
|
|
524
|
-
this.hint = `set Atmosphere.${field} to a finite value in the accepted range; got ${value}`;
|
|
525
|
-
this.detail = { field, value, min, max, minExclusive };
|
|
526
|
-
}
|
|
527
|
-
};
|
|
528
|
-
var AtmosphereCardinalityInvalidError = class extends Error {
|
|
529
|
-
code = "atmosphere-cardinality-invalid";
|
|
530
|
-
expected = "exactly one Atmosphere component in the resourceOwner World";
|
|
531
|
-
hint = "remove extra Atmosphere entities and keep one analytic source";
|
|
532
|
-
detail;
|
|
533
|
-
constructor(count, entities) {
|
|
534
|
-
super(`Atmosphere cardinality exceeded: ${count} entities (max 1)`);
|
|
535
|
-
this.name = "AtmosphereCardinalityInvalidError";
|
|
536
|
-
this.detail = { count, max: 1, entities: [...entities] };
|
|
537
|
-
}
|
|
538
|
-
};
|
|
539
|
-
var AtmosphereSunMissingError = class extends Error {
|
|
540
|
-
code = "atmosphere-sun-missing";
|
|
541
|
-
expected = "Atmosphere and DirectionalLight share one entity";
|
|
542
|
-
hint = "add a valid DirectionalLight to the Atmosphere entity";
|
|
543
|
-
detail;
|
|
544
|
-
constructor(atmosphereEntity) {
|
|
545
|
-
super(`Atmosphere entity ${atmosphereEntity} has no co-located DirectionalLight`);
|
|
546
|
-
this.name = "AtmosphereSunMissingError";
|
|
547
|
-
this.detail = { atmosphereEntity };
|
|
548
|
-
}
|
|
549
|
-
};
|
|
550
|
-
var EnvironmentSourceConflictError = class extends Error {
|
|
551
|
-
code = "environment-source-conflict";
|
|
552
|
-
expected = "exactly one image or atmosphere environment source";
|
|
553
|
-
hint = "remove either the image environment or the Atmosphere source";
|
|
554
|
-
detail;
|
|
555
|
-
constructor(atmosphereEntities, imageEntities) {
|
|
556
|
-
super("image and Atmosphere environment sources cannot coexist");
|
|
557
|
-
this.name = "EnvironmentSourceConflictError";
|
|
558
|
-
this.detail = {
|
|
559
|
-
atmosphereEntities: [...atmosphereEntities],
|
|
560
|
-
imageEntities: [...imageEntities]
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
};
|
|
564
|
-
var AtmosphereCapsInsufficientError = class extends Error {
|
|
565
|
-
code = "atmosphere-caps-insufficient";
|
|
566
|
-
expected;
|
|
567
|
-
hint = "select a backend with the required HDR render and sample capabilities";
|
|
568
|
-
detail;
|
|
569
|
-
constructor(capability, actual, required) {
|
|
570
|
-
super(`Atmosphere capability ${capability} is insufficient: ${actual}; required ${required}`);
|
|
571
|
-
this.name = "AtmosphereCapsInsufficientError";
|
|
572
|
-
this.expected = `${capability} >= ${required}`;
|
|
573
|
-
this.detail = { capability, actual, required };
|
|
574
|
-
}
|
|
575
|
-
};
|
|
576
|
-
var AtmosphereProducerFailedError = class extends Error {
|
|
577
|
-
code = "atmosphere-producer-failed";
|
|
578
|
-
expected = "candidate atmosphere generation builds, executes, and submits atomically";
|
|
579
|
-
hint = "retain the last-known-good generation, inspect the stage, and retry after repair";
|
|
580
|
-
detail;
|
|
581
|
-
constructor(stage, reason, generation) {
|
|
582
|
-
super(`Atmosphere producer ${stage} failed: ${reason}`);
|
|
583
|
-
this.name = "AtmosphereProducerFailedError";
|
|
584
|
-
this.detail = { stage, reason, ...generation === void 0 ? {} : { generation } };
|
|
585
|
-
}
|
|
586
|
-
};
|
|
587
|
-
function materialDrawDiagnostic(error) {
|
|
588
|
-
const detail = error.error.detail;
|
|
589
|
-
const generation = detail.publicationGeneration;
|
|
590
|
-
return {
|
|
591
|
-
key: `${detail.guid}::${detail.specializationKey}::${generation ?? "unknown"}`,
|
|
592
|
-
code: error.error.code,
|
|
593
|
-
materialGuid: detail.guid,
|
|
594
|
-
specializationKey: detail.specializationKey,
|
|
595
|
-
...generation === void 0 ? {} : { publicationGeneration: generation },
|
|
596
|
-
expected: error.error.expected,
|
|
597
|
-
...detail.actual === void 0 ? {} : { actual: detail.actual },
|
|
598
|
-
hint: error.error.hint,
|
|
599
|
-
retryable: error.error.retryable,
|
|
600
|
-
recoveryActions: error.error.recoveryActions
|
|
601
|
-
};
|
|
602
|
-
}
|
|
603
|
-
var MeshSsboCeilingReachedError = class extends Error {
|
|
604
|
-
code = "mesh-ssbo-ceiling-reached";
|
|
605
|
-
expected;
|
|
606
|
-
hint;
|
|
607
|
-
detail;
|
|
608
|
-
constructor(requested, capacity, ceiling) {
|
|
609
|
-
super(`mesh SSBO request ${requested} exceeds device ceiling ${ceiling}`);
|
|
610
|
-
this.name = "MeshSsboCeilingReachedError";
|
|
611
|
-
this.expected = `mesh SSBO capacity remains within ${ceiling} bytes`;
|
|
612
|
-
this.hint = "reduce per-frame renderable count or split the workload across frames";
|
|
613
|
-
this.detail = { requested, capacity, ceiling };
|
|
614
|
-
}
|
|
615
|
-
};
|
|
616
|
-
var MeshSsboCapacityExceededError = class extends Error {
|
|
617
|
-
code = "mesh-ssbo-capacity-exceeded";
|
|
618
|
-
expected;
|
|
619
|
-
hint;
|
|
620
|
-
detail;
|
|
621
|
-
constructor(requested, capacity, ceiling) {
|
|
622
|
-
super(`mesh SSBO capacity ${capacity} cannot satisfy request ${requested}`);
|
|
623
|
-
this.name = "MeshSsboCapacityExceededError";
|
|
624
|
-
this.expected = `mesh SSBO capacity >= ${requested} slots`;
|
|
625
|
-
this.hint = "reduce per-frame renderable count or split the workload across frames";
|
|
626
|
-
this.detail = { requested, capacity, ceiling };
|
|
627
|
-
}
|
|
628
|
-
};
|
|
629
|
-
var Atmosphere = defineComponent("Atmosphere", {
|
|
630
|
-
turbidity: { type: "f32", default: 2 },
|
|
631
|
-
rayleigh: { type: "f32", default: 1 },
|
|
632
|
-
mieCoefficient: { type: "f32", default: 5e-3 },
|
|
633
|
-
mieDirectionalG: { type: "f32", default: 0.8 },
|
|
634
|
-
sunAngularRadius: { type: "f32", default: 4675e-6 }
|
|
635
|
-
});
|
|
636
|
-
var ATMOSPHERE_CHECKS = [
|
|
637
|
-
{ field: "turbidity", min: 1, max: 20 },
|
|
638
|
-
{ field: "rayleigh", min: 0, max: 4 },
|
|
639
|
-
{ field: "mieCoefficient", min: 0, max: 0.1 },
|
|
640
|
-
{ field: "mieDirectionalG", min: 0, max: 0.999 },
|
|
641
|
-
{ field: "sunAngularRadius", min: 0, max: 0.02, minExclusive: true }
|
|
642
|
-
];
|
|
643
|
-
function validateAtmosphereData(data) {
|
|
644
|
-
for (const check of ATMOSPHERE_CHECKS) {
|
|
645
|
-
const reflectedDefault = Atmosphere.fields[check.field]?.default;
|
|
646
|
-
const rawValue = data[check.field] ?? reflectedDefault;
|
|
647
|
-
const value = typeof rawValue === "number" ? rawValue : Number.NaN;
|
|
648
|
-
if (!Number.isFinite(value)) {
|
|
649
|
-
return err(
|
|
650
|
-
new AtmosphereParameterInvalidError(
|
|
651
|
-
check.field,
|
|
652
|
-
value,
|
|
653
|
-
check.min,
|
|
654
|
-
check.max,
|
|
655
|
-
check.minExclusive ?? false
|
|
656
|
-
)
|
|
657
|
-
);
|
|
658
|
-
}
|
|
659
|
-
if ((check.minExclusive ? value <= check.min : value < check.min) || value > check.max) {
|
|
660
|
-
return err(
|
|
661
|
-
new AtmosphereParameterInvalidError(
|
|
662
|
-
check.field,
|
|
663
|
-
value,
|
|
664
|
-
check.min,
|
|
665
|
-
check.max,
|
|
666
|
-
check.minExclusive ?? false
|
|
667
|
-
)
|
|
668
|
-
);
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
return ok(void 0);
|
|
672
|
-
}
|
|
673
|
-
var CAMERA_PROJECTION_PERSPECTIVE = 0;
|
|
674
|
-
var CAMERA_PROJECTION_ORTHOGRAPHIC = 1;
|
|
675
|
-
function cameraProjectionFromF32(value) {
|
|
676
|
-
return value === CAMERA_PROJECTION_ORTHOGRAPHIC ? "orthographic" : "perspective";
|
|
677
|
-
}
|
|
678
|
-
var TONEMAP_NONE = TONEMAP_SHADER_MODE.none;
|
|
679
|
-
var TONEMAP_REINHARD_EXTENDED = TONEMAP_SHADER_MODE.reinhardExtended;
|
|
680
|
-
var TONEMAP_REINHARD = TONEMAP_SHADER_MODE.reinhard;
|
|
681
|
-
var TONEMAP_LINEAR = TONEMAP_SHADER_MODE.linear;
|
|
682
|
-
var TONEMAP_CINEON = TONEMAP_SHADER_MODE.cineon;
|
|
683
|
-
var TONEMAP_ACES_FILMIC = TONEMAP_SHADER_MODE.acesFilmic;
|
|
684
|
-
var TONEMAP_AGX = TONEMAP_SHADER_MODE.agx;
|
|
685
|
-
var TONEMAP_NEUTRAL = TONEMAP_SHADER_MODE.neutral;
|
|
686
|
-
function tonemapFromF32(value) {
|
|
687
|
-
switch (value) {
|
|
688
|
-
case TONEMAP_REINHARD_EXTENDED:
|
|
689
|
-
return "reinhard-extended";
|
|
690
|
-
case TONEMAP_REINHARD:
|
|
691
|
-
return "reinhard";
|
|
692
|
-
case TONEMAP_LINEAR:
|
|
693
|
-
return "linear";
|
|
694
|
-
case TONEMAP_CINEON:
|
|
695
|
-
return "cineon";
|
|
696
|
-
case TONEMAP_ACES_FILMIC:
|
|
697
|
-
return "aces-filmic";
|
|
698
|
-
case TONEMAP_AGX:
|
|
699
|
-
return "agx";
|
|
700
|
-
case TONEMAP_NEUTRAL:
|
|
701
|
-
return "neutral";
|
|
702
|
-
default:
|
|
703
|
-
return "none";
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
function tonemapToU32(mode) {
|
|
707
|
-
switch (mode) {
|
|
708
|
-
case "reinhard-extended":
|
|
709
|
-
return TONEMAP_REINHARD_EXTENDED;
|
|
710
|
-
case "reinhard":
|
|
711
|
-
return TONEMAP_REINHARD;
|
|
712
|
-
case "linear":
|
|
713
|
-
return TONEMAP_LINEAR;
|
|
714
|
-
case "cineon":
|
|
715
|
-
return TONEMAP_CINEON;
|
|
716
|
-
case "aces-filmic":
|
|
717
|
-
return TONEMAP_ACES_FILMIC;
|
|
718
|
-
case "agx":
|
|
719
|
-
return TONEMAP_AGX;
|
|
720
|
-
case "neutral":
|
|
721
|
-
return TONEMAP_NEUTRAL;
|
|
722
|
-
case "none":
|
|
723
|
-
return TONEMAP_NONE;
|
|
724
|
-
}
|
|
725
|
-
throw new RangeError(`Invalid tonemap mode: ${String(mode)}.`);
|
|
726
|
-
}
|
|
727
|
-
var ANTIALIAS_NONE = 0;
|
|
728
|
-
var ANTIALIAS_FXAA = 1;
|
|
729
|
-
var ANTIALIAS_MSAA = 2;
|
|
730
|
-
var ANTIALIAS_TAA = 3;
|
|
731
|
-
function antialiasFromF32(value) {
|
|
732
|
-
if (value === ANTIALIAS_NONE) return "none";
|
|
733
|
-
if (value === ANTIALIAS_FXAA) return "fxaa";
|
|
734
|
-
if (value === ANTIALIAS_MSAA) return "msaa";
|
|
735
|
-
if (value === ANTIALIAS_TAA) return "taa";
|
|
736
|
-
throw new RangeError(
|
|
737
|
-
`Invalid antialias value: ${value}. Expected ${ANTIALIAS_NONE} (none), ${ANTIALIAS_FXAA} (fxaa), ${ANTIALIAS_MSAA} (msaa), or ${ANTIALIAS_TAA} (taa).`
|
|
738
|
-
);
|
|
739
|
-
}
|
|
740
|
-
var BLOOM_DISABLED = 0;
|
|
741
|
-
var BLOOM_ENABLED = 1;
|
|
742
|
-
function bloomEnabledFromF32(value) {
|
|
743
|
-
if (value === BLOOM_DISABLED) return "off";
|
|
744
|
-
if (value === BLOOM_ENABLED) return "on";
|
|
745
|
-
throw new RangeError(
|
|
746
|
-
`Invalid bloom value: ${value}. Expected ${BLOOM_DISABLED} (off) or ${BLOOM_ENABLED} (on).`
|
|
747
|
-
);
|
|
748
|
-
}
|
|
749
|
-
var Camera = defineComponent("Camera", {
|
|
750
|
-
fov: { type: "f32" },
|
|
751
|
-
aspect: { type: "f32" },
|
|
752
|
-
near: { type: "f32" },
|
|
753
|
-
far: { type: "f32" },
|
|
754
|
-
projection: { type: "f32", default: 0 },
|
|
755
|
-
left: { type: "f32", default: -1 },
|
|
756
|
-
right: { type: "f32", default: 1 },
|
|
757
|
-
bottom: { type: "f32", default: -1 },
|
|
758
|
-
top: { type: "f32", default: 1 },
|
|
759
|
-
tonemap: { type: "f32", default: 0 },
|
|
760
|
-
exposure: { type: "f32", default: 1 },
|
|
761
|
-
whitePoint: { type: "f32", default: 4 },
|
|
762
|
-
antialias: { type: "f32", default: 0 },
|
|
763
|
-
historyVersion: { type: "u32", default: 0 },
|
|
764
|
-
bloom: { type: "f32", default: 0 },
|
|
765
|
-
bloomThreshold: { type: "f32", default: 1 },
|
|
766
|
-
bloomIntensity: { type: "f32", default: 1 },
|
|
767
|
-
bloomBlurRadius: { type: "f32", default: 4 },
|
|
768
|
-
// feat-20260709 M3 / D-3: clear-color is one inline `array<f32,4>` column.
|
|
769
|
-
// The earlier 4-scalar form (clearR/G/B/A) was chosen when this was believed
|
|
770
|
-
// to be the only SoA-safe shape; the Transform (pos/quat/scale) and light
|
|
771
|
-
// (direction/color) precedents disprove that -- an `array<f32,N>` IS an
|
|
772
|
-
// inline stride-N SoA column, read on the hot path as `col[i*N+a]` with zero
|
|
773
|
-
// allocation, so collapsing four scalars into one column removes three field
|
|
774
|
-
// names a reader must track without changing the storage layout or read
|
|
775
|
-
// pattern. The default `[0, 0, 0, 0]` is transparent black; explicit alpha
|
|
776
|
-
// stays visible through the same public array field.
|
|
777
|
-
clearColor: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 0]) },
|
|
778
|
-
// feat-20260617-host-engine-contract-and-video-cutscene / M3 / D-4: the
|
|
779
|
-
// aspect-sync sidecar on the createApp(canvas) path writes
|
|
780
|
-
// canvas.width / canvas.height into `aspect` every frame when this flag is
|
|
781
|
-
// true. Reuses the existing `bool` column tier (AnimationPlayer.paused /
|
|
782
|
-
// AudioSource.playing precedent) -- zero ECS infrastructure change. Default
|
|
783
|
-
// true so demos that never touch aspect track the canvas automatically
|
|
784
|
-
// (charter P1 default-is-correct); set false for render-to-texture /
|
|
785
|
-
// split-screen cameras that drive aspect themselves. Read it via
|
|
786
|
-
// world.get (readRow narrows bool -> JS boolean); the query-bundle path
|
|
787
|
-
// returns a raw 0/1 number (the `!== 0` always-true trap).
|
|
788
|
-
autoAspect: { type: "bool", default: true }
|
|
789
|
-
});
|
|
790
|
-
function cameraPodFromDefaults() {
|
|
791
|
-
const base = {};
|
|
792
|
-
for (const [key, field] of Object.entries(Camera.fields)) {
|
|
793
|
-
if ("default" in field && field.default !== void 0) {
|
|
794
|
-
base[key] = field.default;
|
|
795
|
-
}
|
|
796
|
-
}
|
|
797
|
-
return base;
|
|
798
|
-
}
|
|
799
|
-
function perspective(opts) {
|
|
800
|
-
return {
|
|
801
|
-
// cameraPodFromDefaults() reads autoAspect's schema default (true), so an
|
|
802
|
-
// omitted opts.autoAspect lands the default-correct value; an explicit
|
|
803
|
-
// false overrides it below (D-4: factory one-step opt-out, charter P1).
|
|
804
|
-
...cameraPodFromDefaults(),
|
|
805
|
-
fov: opts.fov,
|
|
806
|
-
aspect: opts.aspect,
|
|
807
|
-
near: opts.near ?? 0.1,
|
|
808
|
-
far: opts.far ?? 100,
|
|
809
|
-
projection: CAMERA_PROJECTION_PERSPECTIVE,
|
|
810
|
-
...opts.autoAspect !== void 0 ? { autoAspect: opts.autoAspect } : {}
|
|
811
|
-
};
|
|
812
|
-
}
|
|
813
|
-
function orthographic(opts) {
|
|
814
|
-
return {
|
|
815
|
-
...cameraPodFromDefaults(),
|
|
816
|
-
fov: 0,
|
|
817
|
-
aspect: 1,
|
|
818
|
-
near: opts.near ?? 0.1,
|
|
819
|
-
far: opts.far ?? 100,
|
|
820
|
-
projection: CAMERA_PROJECTION_ORTHOGRAPHIC,
|
|
821
|
-
left: opts.left,
|
|
822
|
-
right: opts.right,
|
|
823
|
-
bottom: opts.bottom,
|
|
824
|
-
top: opts.top
|
|
825
|
-
};
|
|
826
|
-
}
|
|
827
|
-
var DirectionalLight = defineComponent("DirectionalLight", {
|
|
828
|
-
// direction is the ONLY field with no default (D-5): omitting it lands the
|
|
829
|
-
// array layer-3 all-zero [0,0,0], which the renderer owner rejects -- there is no
|
|
830
|
-
// universal default direction, so "default is illegal" forces an explicit
|
|
831
|
-
// non-zero value. color carries an explicit layer-2 default [1,1,1] (white);
|
|
832
|
-
// the array layer-3 fallback is all-zero, so the default MUST be explicit.
|
|
833
|
-
direction: { type: "array<f32, 3>" },
|
|
834
|
-
color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
|
|
835
|
-
intensity: { type: "f32", default: 1 },
|
|
836
|
-
// Shadow opt-out gate: defaults to true so zero-config spawns get shadows.
|
|
837
|
-
castShadow: { type: "bool", default: true },
|
|
838
|
-
// 9 shadow fields migrated from DirectionalLightShadow (feat-20260621 M1).
|
|
839
|
-
cascadeCount: { type: "f32", default: 4 },
|
|
840
|
-
splitLambda: { type: "f32", default: 0.75 },
|
|
841
|
-
cascadeBlend: { type: "f32", default: 0.2 },
|
|
842
|
-
mapSize: { type: "f32", default: 2048 },
|
|
843
|
-
depthBias: { type: "f32", default: 5e-3 },
|
|
844
|
-
normalBias: { type: "f32", default: 0.05 },
|
|
845
|
-
// Sole shadow coverage knob (feat replaces nearPlane/farPlane). The PSSM
|
|
846
|
-
// near end derives from the active camera near; shadowDistance is the far
|
|
847
|
-
// reach. Default 200 world units (matches UE-style "dynamic shadow
|
|
848
|
-
// distance"; the old farPlane default was 50).
|
|
849
|
-
shadowDistance: { type: "f32", default: 200 },
|
|
850
|
-
pcfKernelSize: { type: "f32", default: 3 }
|
|
851
|
-
});
|
|
852
|
-
var Skylight = defineComponent("Skylight", {
|
|
853
|
-
// The GPU equirect-to-cubemap projection is render-owned presentation
|
|
854
|
-
// state. Record/restore preserves the portable lighting controls while the
|
|
855
|
-
// render owner resolves this asset again on the target world.
|
|
856
|
-
equirect: { type: "shared<EquirectAsset>", simulationTransient: true },
|
|
857
|
-
// color carries an explicit layer-2 default [1,1,1] (white); the array
|
|
858
|
-
// layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
|
|
859
|
-
color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
|
|
860
|
-
intensity: { type: "f32", default: 1 },
|
|
861
|
-
rotation: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 1]) }
|
|
862
|
-
});
|
|
863
|
-
var Fog = defineComponent("Fog", {
|
|
864
|
-
color: { type: "array<f32, 3>", default: new Float32Array([0.5, 0.5, 0.5]) },
|
|
865
|
-
density: { type: "f32", default: 0.01 },
|
|
866
|
-
heightFalloff: { type: "f32", default: 0 },
|
|
867
|
-
maxOpacity: { type: "f32", default: 1 }
|
|
868
|
-
});
|
|
869
|
-
var SKYBOX_MODE_CUBEMAP = 0;
|
|
870
|
-
function skyboxModeFromF32(value) {
|
|
871
|
-
switch (value) {
|
|
872
|
-
case SKYBOX_MODE_CUBEMAP:
|
|
873
|
-
return "cubemap";
|
|
874
|
-
}
|
|
875
|
-
return "cubemap";
|
|
876
|
-
}
|
|
877
|
-
var SkyboxBackground = defineComponent("SkyboxBackground", {
|
|
878
|
-
// The GPU skybox projection is render-owned presentation state; restore
|
|
879
|
-
// keeps the portable mode/rotation controls and lets the owner re-resolve
|
|
880
|
-
// the environment asset on the target world.
|
|
881
|
-
equirect: { type: "shared<EquirectAsset>", simulationTransient: true },
|
|
882
|
-
mode: { type: "f32", default: SKYBOX_MODE_CUBEMAP },
|
|
883
|
-
rotation: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 1]) }
|
|
884
|
-
});
|
|
885
|
-
var Instances = defineComponent("Instances", {
|
|
886
|
-
transforms: { type: "array<f32>" }
|
|
887
|
-
});
|
|
888
|
-
var Layer = defineComponent("Layer", {
|
|
889
|
-
value: { type: "i32", default: 0 }
|
|
890
|
-
});
|
|
891
|
-
var MeshFilter = defineComponent("MeshFilter", {
|
|
892
|
-
assetHandle: { type: "shared<MeshAsset>" }
|
|
893
|
-
});
|
|
894
|
-
var MeshRenderer = defineComponent("MeshRenderer", {
|
|
895
|
-
materials: { type: "array<shared<MaterialAsset>>", default: [] }
|
|
896
|
-
});
|
|
897
|
-
var PointLight = defineComponent("PointLight", {
|
|
898
|
-
// color carries an explicit layer-2 default [1,1,1] (white); the array
|
|
899
|
-
// layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
|
|
900
|
-
color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
|
|
901
|
-
intensity: { type: "f32", default: 1 },
|
|
902
|
-
range: { type: "f32", default: 10 }
|
|
903
|
-
});
|
|
904
|
-
var PointLightShadow = defineComponent("PointLightShadow", {
|
|
905
|
-
mapSize: { type: "f32", default: 512 },
|
|
906
|
-
depthBias: { type: "f32", default: 5e-3 },
|
|
907
|
-
normalBias: { type: "f32", default: 0.05 },
|
|
908
|
-
nearPlane: { type: "f32", default: 0.1 },
|
|
909
|
-
farPlane: { type: "f32", default: 25 },
|
|
910
|
-
pcfKernelSize: { type: "f32", default: 3 }
|
|
911
|
-
});
|
|
912
|
-
var schema = {
|
|
913
|
-
shader: "string",
|
|
914
|
-
data: "buffer"
|
|
915
|
-
};
|
|
916
|
-
var PostProcessParams = defineComponent("PostProcessParams", schema);
|
|
917
|
-
var SceneInstance = defineComponent(
|
|
918
|
-
"SceneInstance",
|
|
919
|
-
{
|
|
920
|
-
source: { type: "shared<SceneAsset>" },
|
|
921
|
-
mapping: { type: "array<entity>" },
|
|
922
|
-
// The unique slot is the ECS storage seam for the instance's structured
|
|
923
|
-
// runtime payload; keep the nested semantic visible to schema consumers.
|
|
924
|
-
state: { type: "unique<SceneInstanceState>", shape: "nested" }
|
|
925
|
-
},
|
|
926
|
-
{ transient: true }
|
|
927
|
-
);
|
|
928
|
-
var SortKey = defineComponent("SortKey", {
|
|
929
|
-
value: { type: "f32", default: 0 }
|
|
930
|
-
});
|
|
931
|
-
var SpotLight = defineComponent("SpotLight", {
|
|
932
|
-
// direction has no default (D-5): omitting it lands the array layer-3
|
|
933
|
-
// all-zero, which validate() rejects. color carries an explicit layer-2
|
|
934
|
-
// default [1,1,1] (white); the array layer-3 fallback is all-zero.
|
|
935
|
-
direction: { type: "array<f32, 3>" },
|
|
936
|
-
color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
|
|
937
|
-
intensity: { type: "f32", default: 1 },
|
|
938
|
-
range: { type: "f32", default: 10 },
|
|
939
|
-
innerConeDeg: { type: "f32", default: 0 },
|
|
940
|
-
outerConeDeg: { type: "f32", default: 45 },
|
|
941
|
-
// Shadow opt-out gate: defaults to true so zero-config spawns cast shadows.
|
|
942
|
-
castShadow: { type: "bool", default: true },
|
|
943
|
-
// 6 shadow fields aligned with DirectionalLight (plan-strategy D-6).
|
|
944
|
-
mapSize: { type: "f32", default: 2048 },
|
|
945
|
-
depthBias: { type: "f32", default: 5e-3 },
|
|
946
|
-
normalBias: { type: "f32", default: 0.05 },
|
|
947
|
-
nearPlane: { type: "f32", default: 0.1 },
|
|
948
|
-
farPlane: { type: "f32", default: 50 },
|
|
949
|
-
pcfKernelSize: { type: "f32", default: 3 }
|
|
950
|
-
});
|
|
951
|
-
var VisibilityStateValue = Object.freeze({
|
|
952
|
-
inherited: 0,
|
|
953
|
-
hidden: 1,
|
|
954
|
-
visible: 2
|
|
955
|
-
});
|
|
956
|
-
function visibilityStateFromU32(value) {
|
|
957
|
-
switch (value) {
|
|
958
|
-
case VisibilityStateValue.inherited:
|
|
959
|
-
return "inherited";
|
|
960
|
-
case VisibilityStateValue.hidden:
|
|
961
|
-
return "hidden";
|
|
962
|
-
case VisibilityStateValue.visible:
|
|
963
|
-
return "visible";
|
|
964
|
-
default:
|
|
965
|
-
return void 0;
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
|
-
var Visibility = defineComponent(
|
|
969
|
-
"Visibility",
|
|
970
|
-
{
|
|
971
|
-
state: {
|
|
972
|
-
type: "enum",
|
|
973
|
-
default: VisibilityStateValue.inherited,
|
|
974
|
-
labels: VisibilityStateValue
|
|
975
|
-
}
|
|
976
|
-
},
|
|
977
|
-
{
|
|
978
|
-
meta: {
|
|
979
|
-
quickStart: "Attach Visibility to author render participation intent.",
|
|
980
|
-
diagnostics: "Compare the ECS state with resolveVisibility and renderer.visibilityStats.",
|
|
981
|
-
recovery: "Use structured ECS write errors and repair the owning scene relation.",
|
|
982
|
-
boundaries: "Visibility does not own camera, picking, lifecycle, assets, or VFX shadow policy."
|
|
983
|
-
}
|
|
984
|
-
}
|
|
985
|
-
);
|
|
986
|
-
|
|
987
|
-
// src/materials.ts
|
|
988
|
-
var SPRITE_PREMULTIPLIED_ALPHA_BLEND = {
|
|
989
|
-
color: { srcFactor: "one", dstFactor: "one-minus-src-alpha", operation: "add" },
|
|
990
|
-
alpha: { srcFactor: "one", dstFactor: "one-minus-src-alpha", operation: "add" }
|
|
991
|
-
};
|
|
992
|
-
var STANDARD_MODULE = "forgeax_material::standard";
|
|
993
|
-
var UNLIT_MODULE = "forgeax_material::unlit";
|
|
994
|
-
function materialTextureValue(value) {
|
|
995
|
-
if (value === void 0) return void 0;
|
|
996
|
-
if (typeof value === "string") return value;
|
|
997
|
-
if (typeof value === "number") {
|
|
998
|
-
return { texture: value };
|
|
999
|
-
}
|
|
1000
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) return value;
|
|
1001
|
-
return value;
|
|
1002
|
-
}
|
|
1003
|
-
function authoredColorParameter(name, type, colorSpace, optional = false) {
|
|
1004
|
-
return {
|
|
1005
|
-
name,
|
|
1006
|
-
type,
|
|
1007
|
-
...type === "color" && colorSpace === "srgb" ? {} : { colorSpace },
|
|
1008
|
-
...optional ? { optional: true } : {}
|
|
1009
|
-
};
|
|
1010
|
-
}
|
|
1011
|
-
function standardParameters(colorSpace) {
|
|
1012
|
-
return [
|
|
1013
|
-
authoredColorParameter("baseColor", "color", colorSpace),
|
|
1014
|
-
{ name: "metallic", type: "f32" },
|
|
1015
|
-
{ name: "roughness", type: "f32" },
|
|
1016
|
-
{ name: "metallicChannel", type: "f32", optional: true },
|
|
1017
|
-
{ name: "roughnessChannel", type: "f32", optional: true },
|
|
1018
|
-
{ name: "aoChannel", type: "f32", optional: true },
|
|
1019
|
-
{ name: "extraChannel", type: "f32", optional: true },
|
|
1020
|
-
authoredColorParameter("emissive", "vec3", colorSpace, true),
|
|
1021
|
-
{ name: "emissiveIntensity", type: "f32", optional: true },
|
|
1022
|
-
{ name: "occlusionStrength", type: "f32", optional: true },
|
|
1023
|
-
{ name: "alphaCutoff", type: "f32", optional: true },
|
|
1024
|
-
{ name: "clearcoat", type: "f32", optional: true },
|
|
1025
|
-
{ name: "clearcoatRoughness", type: "f32", optional: true },
|
|
1026
|
-
authoredColorParameter("specularTint", "vec3", colorSpace, true),
|
|
1027
|
-
{ name: "baseColorTexture", type: "texture", optional: true },
|
|
1028
|
-
{ name: "metallicRoughnessTexture", type: "texture", optional: true },
|
|
1029
|
-
{ name: "normalTexture", type: "texture", optional: true },
|
|
1030
|
-
{ name: "specularTintTexture", type: "texture", optional: true },
|
|
1031
|
-
{ name: "emissiveTexture", type: "texture", optional: true },
|
|
1032
|
-
{ name: "occlusionTexture", type: "texture", optional: true }
|
|
1033
|
-
];
|
|
1034
|
-
}
|
|
1035
|
-
function unlitParameters(colorSpace) {
|
|
1036
|
-
return [
|
|
1037
|
-
authoredColorParameter("baseColor", "color", colorSpace),
|
|
1038
|
-
{ name: "alphaCutoff", type: "f32", optional: true },
|
|
1039
|
-
{ name: "baseColorTexture", type: "texture", optional: true }
|
|
1040
|
-
];
|
|
1041
|
-
}
|
|
1042
|
-
function pass(name, module, renderState, fragmentEntry, queue) {
|
|
1043
|
-
const lightMode = name === "shadow-caster" ? "ShadowCaster" : name === "deferred" ? "Deferred" : "Forward";
|
|
1044
|
-
const authoredState = renderState ?? {};
|
|
1045
|
-
const authoredTags = authoredState.tags;
|
|
1046
|
-
return {
|
|
1047
|
-
name,
|
|
1048
|
-
program: {
|
|
1049
|
-
module,
|
|
1050
|
-
...fragmentEntry === void 0 ? {} : { fragmentEntry }
|
|
1051
|
-
},
|
|
1052
|
-
renderState: {
|
|
1053
|
-
...authoredState,
|
|
1054
|
-
tags: { LightMode: lightMode, ...authoredTags },
|
|
1055
|
-
...queue === void 0 ? {} : { queue }
|
|
1056
|
-
}
|
|
1057
|
-
};
|
|
1058
|
-
}
|
|
1059
|
-
function unlit(rgba, opts) {
|
|
1060
|
-
if (opts?.alphaCutoff !== void 0 && (opts.alphaCutoff < 0 || opts.alphaCutoff > 1)) {
|
|
1061
|
-
throw new Error(`Materials.unlit: alphaCutoff must be in [0, 1], got ${opts.alphaCutoff}`);
|
|
1062
|
-
}
|
|
1063
|
-
const values = { baseColor: rgba };
|
|
1064
|
-
if (opts?.baseColorTexture !== void 0) {
|
|
1065
|
-
values.baseColorTexture = materialTextureValue(opts.baseColorTexture);
|
|
1066
|
-
}
|
|
1067
|
-
if (opts?.alphaCutoff !== void 0) values.alphaCutoff = opts.alphaCutoff;
|
|
1068
|
-
const passes = [
|
|
1069
|
-
pass("forward", UNLIT_MODULE, opts?.renderState, void 0, opts?.queue)
|
|
1070
|
-
];
|
|
1071
|
-
if (opts?.castShadow !== false) passes.push(pass("shadow-caster", UNLIT_MODULE, void 0));
|
|
1072
|
-
return {
|
|
1073
|
-
kind: "material",
|
|
1074
|
-
...opts?.colorSpace === void 0 || opts.colorSpace === "srgb" ? {} : { colorSpace: opts.colorSpace },
|
|
1075
|
-
passes,
|
|
1076
|
-
parameters: unlitParameters(opts?.colorSpace ?? "srgb"),
|
|
1077
|
-
values
|
|
1078
|
-
};
|
|
1079
|
-
}
|
|
1080
|
-
function validateChannel(name, value) {
|
|
1081
|
-
if (value !== void 0 && (!Number.isInteger(value) || value < 0 || value > 3)) {
|
|
1082
|
-
throw new Error(`Materials.standard: ${name} must be an integer in [0, 3], got ${value}`);
|
|
1083
|
-
}
|
|
1084
|
-
}
|
|
1085
|
-
function standard(opts) {
|
|
1086
|
-
const occlusionStrength = opts.occlusionStrength ?? 1;
|
|
1087
|
-
if (occlusionStrength < 0 || occlusionStrength > 1) {
|
|
1088
|
-
throw new Error(
|
|
1089
|
-
`Materials.standard: occlusionStrength must be in [0, 1], got ${occlusionStrength}`
|
|
1090
|
-
);
|
|
1091
|
-
}
|
|
1092
|
-
if (opts.alphaCutoff !== void 0 && (opts.alphaCutoff < 0 || opts.alphaCutoff > 1)) {
|
|
1093
|
-
throw new Error(`Materials.standard: alphaCutoff must be in [0, 1], got ${opts.alphaCutoff}`);
|
|
1094
|
-
}
|
|
1095
|
-
validateChannel("metallicChannel", opts.metallicChannel);
|
|
1096
|
-
validateChannel("roughnessChannel", opts.roughnessChannel);
|
|
1097
|
-
const values = {
|
|
1098
|
-
baseColor: opts.baseColor,
|
|
1099
|
-
metallic: opts.metallic ?? 0,
|
|
1100
|
-
roughness: opts.roughness ?? 0.5,
|
|
1101
|
-
occlusionStrength,
|
|
1102
|
-
specularTint: opts.specularTint ?? [1, 1, 1]
|
|
1103
|
-
};
|
|
1104
|
-
if (opts.metallicChannel !== void 0) values.metallicChannel = opts.metallicChannel;
|
|
1105
|
-
if (opts.roughnessChannel !== void 0) values.roughnessChannel = opts.roughnessChannel;
|
|
1106
|
-
if (opts.clearcoat !== void 0) values.clearcoat = opts.clearcoat;
|
|
1107
|
-
if (opts.clearcoatRoughness !== void 0) values.clearcoatRoughness = opts.clearcoatRoughness;
|
|
1108
|
-
if (opts.emissive !== void 0) values.emissive = opts.emissive;
|
|
1109
|
-
if (opts.emissiveIntensity !== void 0) values.emissiveIntensity = opts.emissiveIntensity;
|
|
1110
|
-
if (opts.emissiveTexture !== void 0)
|
|
1111
|
-
values.emissiveTexture = materialTextureValue(opts.emissiveTexture);
|
|
1112
|
-
if (opts.baseColorTexture !== void 0)
|
|
1113
|
-
values.baseColorTexture = materialTextureValue(opts.baseColorTexture);
|
|
1114
|
-
if (opts.metallicRoughnessTexture !== void 0) {
|
|
1115
|
-
values.metallicRoughnessTexture = materialTextureValue(opts.metallicRoughnessTexture);
|
|
1116
|
-
}
|
|
1117
|
-
if (opts.normalTexture !== void 0)
|
|
1118
|
-
values.normalTexture = materialTextureValue(opts.normalTexture);
|
|
1119
|
-
if (opts.occlusionTexture !== void 0)
|
|
1120
|
-
values.occlusionTexture = materialTextureValue(opts.occlusionTexture);
|
|
1121
|
-
if (opts.specularTintTexture !== void 0) {
|
|
1122
|
-
values.specularTintTexture = materialTextureValue(opts.specularTintTexture);
|
|
1123
|
-
}
|
|
1124
|
-
if (opts.alphaCutoff !== void 0) values.alphaCutoff = opts.alphaCutoff;
|
|
1125
|
-
const passes = [
|
|
1126
|
-
pass("forward", STANDARD_MODULE, opts.renderState, "fs_main", opts.queue),
|
|
1127
|
-
pass("deferred", STANDARD_MODULE, opts.renderState, "fs_gbuffer", opts.queue)
|
|
1128
|
-
];
|
|
1129
|
-
if (opts.castShadow !== false) passes.push(pass("shadow-caster", STANDARD_MODULE, void 0));
|
|
1130
|
-
return {
|
|
1131
|
-
kind: "material",
|
|
1132
|
-
...opts.colorSpace === void 0 || opts.colorSpace === "srgb" ? {} : { colorSpace: opts.colorSpace },
|
|
1133
|
-
passes,
|
|
1134
|
-
parameters: standardParameters(opts.colorSpace ?? "srgb"),
|
|
1135
|
-
values
|
|
1136
|
-
};
|
|
1137
|
-
}
|
|
1138
|
-
var Materials = { unlit, standard };
|
|
1139
|
-
|
|
1140
|
-
// src/assets/resolve-render-asset.ts
|
|
1141
|
-
function resolveRenderAsset(world, handle) {
|
|
1142
|
-
return world.sharedRefs.resolve(handle);
|
|
1143
|
-
}
|
|
1144
|
-
|
|
1145
|
-
// src/glyph-text-layout-system.ts
|
|
1146
|
-
var bakeCache = /* @__PURE__ */ new WeakMap();
|
|
1147
|
-
var materialCache = /* @__PURE__ */ new WeakMap();
|
|
1148
|
-
var liveGlyphHandles = /* @__PURE__ */ new WeakMap();
|
|
1149
|
-
function resetGlyphBakeCache() {
|
|
1150
|
-
bakeCache = /* @__PURE__ */ new WeakMap();
|
|
1151
|
-
materialCache = /* @__PURE__ */ new WeakMap();
|
|
1152
|
-
liveGlyphHandles = /* @__PURE__ */ new WeakMap();
|
|
1153
|
-
}
|
|
1154
|
-
function worldBakeCache(world) {
|
|
1155
|
-
let cache = bakeCache.get(world);
|
|
1156
|
-
if (cache === void 0) {
|
|
1157
|
-
cache = /* @__PURE__ */ new Map();
|
|
1158
|
-
bakeCache.set(world, cache);
|
|
1159
|
-
}
|
|
1160
|
-
return cache;
|
|
1161
|
-
}
|
|
1162
|
-
function worldMaterialCache(world) {
|
|
1163
|
-
let cache = materialCache.get(world);
|
|
1164
|
-
if (cache === void 0) {
|
|
1165
|
-
cache = /* @__PURE__ */ new Map();
|
|
1166
|
-
materialCache.set(world, cache);
|
|
1167
|
-
}
|
|
1168
|
-
return cache;
|
|
1169
|
-
}
|
|
1170
|
-
function releaseGlyphProducers(world, entity) {
|
|
1171
|
-
const slot = unpackSlot(entity);
|
|
1172
|
-
const bake = bakeCache.get(world)?.get(slot);
|
|
1173
|
-
if (bake?.handle === entity) {
|
|
1174
|
-
world.sharedRefs.release(asMeshHandle(bake.record.meshHandleId));
|
|
1175
|
-
bakeCache.get(world)?.delete(slot);
|
|
1176
|
-
}
|
|
1177
|
-
const material = materialCache.get(world)?.get(slot);
|
|
1178
|
-
if (material !== void 0) {
|
|
1179
|
-
world.sharedRefs.release(asMaterialHandle(material));
|
|
1180
|
-
materialCache.get(world)?.delete(slot);
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1183
|
-
function clearRejectedGlyphState(world, entity) {
|
|
1184
|
-
const slot = unpackSlot(entity);
|
|
1185
|
-
const bake = bakeCache.get(world)?.get(slot);
|
|
1186
|
-
if (bake?.handle !== entity) return;
|
|
1187
|
-
if (world.get(entity, MeshFilter).ok) world.removeComponent(entity, MeshFilter);
|
|
1188
|
-
if (world.get(entity, MeshRenderer).ok) world.removeComponent(entity, MeshRenderer);
|
|
1189
|
-
releaseGlyphProducers(world, entity);
|
|
1190
|
-
}
|
|
1191
|
-
var MSDF_TEXT_BLEND = {
|
|
1192
|
-
color: { srcFactor: "one", dstFactor: "one-minus-src-alpha", operation: "add" },
|
|
1193
|
-
alpha: { srcFactor: "one", dstFactor: "one-minus-src-alpha", operation: "add" }
|
|
1194
|
-
};
|
|
1195
|
-
function glyphTextLayoutSystem(world, gpuStore) {
|
|
1196
|
-
resetFontConcurrency();
|
|
1197
|
-
const entities = collectGlyphEntities(world);
|
|
1198
|
-
const live = liveGlyphHandles.get(world) ?? /* @__PURE__ */ new Set();
|
|
1199
|
-
live.clear();
|
|
1200
|
-
for (const entity of entities) live.add(entity);
|
|
1201
|
-
liveGlyphHandles.set(world, live);
|
|
1202
|
-
for (const entry of worldBakeCache(world).values()) {
|
|
1203
|
-
if (!live.has(entry.handle)) releaseGlyphProducers(world, entry.handle);
|
|
1204
|
-
}
|
|
1205
|
-
let firstError = null;
|
|
1206
|
-
for (const entity of entities) {
|
|
1207
|
-
const error = processEntity(world, gpuStore, entity);
|
|
1208
|
-
if (error !== null && firstError === null) firstError = error;
|
|
1209
|
-
}
|
|
1210
|
-
if (firstError !== null) return err(firstError);
|
|
1211
|
-
return ok(void 0);
|
|
1212
|
-
}
|
|
1213
|
-
function collectGlyphEntities(world) {
|
|
1214
|
-
const query = world.query({ read: [GlyphText] });
|
|
1215
|
-
if (!query.ok) return [];
|
|
1216
|
-
const entities = [];
|
|
1217
|
-
for (const row of query.value) entities.push(row.entity);
|
|
1218
|
-
return entities;
|
|
1219
|
-
}
|
|
1220
|
-
function processEntity(world, gpuStore, entity) {
|
|
1221
|
-
const gtRes = world.get(entity, GlyphText);
|
|
1222
|
-
if (!gtRes.ok) return null;
|
|
1223
|
-
const gt = gtRes.value;
|
|
1224
|
-
if (gt.fontHandle === 0) return null;
|
|
1225
|
-
try {
|
|
1226
|
-
trackFontConcurrency(gt.fontHandle);
|
|
1227
|
-
} catch (e) {
|
|
1228
|
-
if (e instanceof TextError) {
|
|
1229
|
-
clearRejectedGlyphState(world, entity);
|
|
1230
|
-
return e;
|
|
1231
|
-
}
|
|
1232
|
-
throw e;
|
|
1233
|
-
}
|
|
1234
|
-
const fontRes = resolveRenderAsset(world, asFontHandle(gt.fontHandle));
|
|
1235
|
-
if (!fontRes.ok) return null;
|
|
1236
|
-
const font = fontRes.value;
|
|
1237
|
-
const signature = signatureOf(gt);
|
|
1238
|
-
const entityCache = worldBakeCache(world);
|
|
1239
|
-
const slot = unpackSlot(entity);
|
|
1240
|
-
const cachedEntry = entityCache.get(slot);
|
|
1241
|
-
if (cachedEntry !== void 0 && cachedEntry.handle !== entity) {
|
|
1242
|
-
world.sharedRefs.release(asMeshHandle(cachedEntry.record.meshHandleId));
|
|
1243
|
-
const staleMaterial = worldMaterialCache(world).get(slot);
|
|
1244
|
-
if (staleMaterial !== void 0) {
|
|
1245
|
-
world.sharedRefs.release(asMaterialHandle(staleMaterial));
|
|
1246
|
-
worldMaterialCache(world).delete(slot);
|
|
1247
|
-
}
|
|
1248
|
-
entityCache.delete(slot);
|
|
1249
|
-
}
|
|
1250
|
-
const cached = cachedEntry?.handle === entity ? cachedEntry.record : void 0;
|
|
1251
|
-
if (cached !== void 0) {
|
|
1252
|
-
ensureGlyphMeshMaterialSlots(world, asMeshHandle(cached.meshHandleId));
|
|
1253
|
-
if (cached.signature === signature) return null;
|
|
1254
|
-
const layout2 = layoutGlyphText(font, gt.text, gt.fontSize);
|
|
1255
|
-
const meshHandle = asMeshHandle(cached.meshHandleId);
|
|
1256
|
-
const submeshes = [
|
|
1257
|
-
{
|
|
1258
|
-
indexOffset: 0,
|
|
1259
|
-
indexCount: layout2.indices.length,
|
|
1260
|
-
vertexCount: layout2.vertices.length / PROCEDURAL_FLOATS_PER_VERTEX,
|
|
1261
|
-
topology: "triangle-list",
|
|
1262
|
-
materialSlot: 0
|
|
1263
|
-
}
|
|
1264
|
-
];
|
|
1265
|
-
const mesh = world.sharedRefs.resolve(meshHandle);
|
|
1266
|
-
if (!mesh.ok) return null;
|
|
1267
|
-
if (!updateGlyphMesh(gpuStore, meshHandle, layout2.vertices, layout2.indices, submeshes)) {
|
|
1268
|
-
return null;
|
|
1269
|
-
}
|
|
1270
|
-
const aabb = conservativeCubeAabb(layout2.radius);
|
|
1271
|
-
Object.assign(mesh.value, {
|
|
1272
|
-
vertices: layout2.vertices,
|
|
1273
|
-
indices: layout2.indices,
|
|
1274
|
-
submeshes,
|
|
1275
|
-
materialSlots: [{ slotName: "Default" }],
|
|
1276
|
-
aabb
|
|
1277
|
-
});
|
|
1278
|
-
const materialId2 = resolveTextMaterial(world, gt, font, slot);
|
|
1279
|
-
if (materialId2 !== cached.materialHandleId) {
|
|
1280
|
-
world.set(entity, MeshRenderer, {
|
|
1281
|
-
materials: [materialId2]
|
|
1282
|
-
});
|
|
1283
|
-
}
|
|
1284
|
-
entityCache.set(slot, {
|
|
1285
|
-
handle: entity,
|
|
1286
|
-
record: {
|
|
1287
|
-
meshHandleId: cached.meshHandleId,
|
|
1288
|
-
signature,
|
|
1289
|
-
materialHandleId: materialId2
|
|
1290
|
-
}
|
|
1291
|
-
});
|
|
1292
|
-
return null;
|
|
1293
|
-
}
|
|
1294
|
-
const existingFilter = world.get(entity, MeshFilter);
|
|
1295
|
-
if (existingFilter.ok) {
|
|
1296
|
-
ensureGlyphMeshMaterialSlots(
|
|
1297
|
-
world,
|
|
1298
|
-
asMeshHandle(existingFilter.value.assetHandle)
|
|
1299
|
-
);
|
|
1300
|
-
return null;
|
|
1301
|
-
}
|
|
1302
|
-
const layout = layoutGlyphText(font, gt.text, gt.fontSize);
|
|
1303
|
-
const bake = bakeGlyphMesh(world, layout);
|
|
1304
|
-
if (!bake.ok) return null;
|
|
1305
|
-
const materialId = resolveTextMaterial(world, gt, font, slot);
|
|
1306
|
-
world.addComponent(entity, { component: MeshFilter, data: { assetHandle: bake.value.handle } });
|
|
1307
|
-
world.addComponent(entity, {
|
|
1308
|
-
component: MeshRenderer,
|
|
1309
|
-
data: { materials: [materialId] }
|
|
1310
|
-
});
|
|
1311
|
-
entityCache.set(slot, {
|
|
1312
|
-
handle: entity,
|
|
1313
|
-
record: {
|
|
1314
|
-
meshHandleId: handleId(bake.value.handle),
|
|
1315
|
-
signature,
|
|
1316
|
-
materialHandleId: materialId
|
|
1317
|
-
}
|
|
1318
|
-
});
|
|
1319
|
-
return null;
|
|
1320
|
-
}
|
|
1321
|
-
function updateGlyphMesh(gpuStore, meshHandle, vertices, indices, submeshes) {
|
|
1322
|
-
const updated = gpuStore.updateMesh(meshHandle, vertices, indices, 0, submeshes);
|
|
1323
|
-
if (updated.ok) return true;
|
|
1324
|
-
if (updated.error.code === "mesh-shape-mismatch") {
|
|
1325
|
-
const replaced = gpuStore.replaceMesh(meshHandle, vertices, indices, 0, submeshes);
|
|
1326
|
-
if (replaced.ok) return true;
|
|
1327
|
-
return replaced.error.code === "mesh-not-resident" || replaced.error.code === "rhi-not-available";
|
|
1328
|
-
}
|
|
1329
|
-
return updated.error.code === "mesh-not-resident" || updated.error.code === "rhi-not-available";
|
|
1330
|
-
}
|
|
1331
|
-
function ensureGlyphMeshMaterialSlots(world, meshHandle) {
|
|
1332
|
-
const mesh = world.sharedRefs.resolve(meshHandle);
|
|
1333
|
-
if (mesh.ok && !Array.isArray(mesh.value.materialSlots)) {
|
|
1334
|
-
Object.assign(mesh.value, { materialSlots: [{ slotName: "Default" }] });
|
|
1335
|
-
}
|
|
1336
|
-
}
|
|
1337
|
-
function resolveTextMaterial(world, gt, font, slot) {
|
|
1338
|
-
const cache = worldMaterialCache(world);
|
|
1339
|
-
const material = {
|
|
1340
|
-
kind: "material",
|
|
1341
|
-
passes: [
|
|
1342
|
-
{
|
|
1343
|
-
name: "text",
|
|
1344
|
-
program: { module: "forgeax::msdf-text" },
|
|
1345
|
-
renderState: {
|
|
1346
|
-
...{
|
|
1347
|
-
blend: MSDF_TEXT_BLEND,
|
|
1348
|
-
cullMode: "none",
|
|
1349
|
-
depthWriteEnabled: false,
|
|
1350
|
-
depthCompare: "less-equal"
|
|
1351
|
-
},
|
|
1352
|
-
tags: { LightMode: "Forward" },
|
|
1353
|
-
queue: 3e3
|
|
1354
|
-
}
|
|
1355
|
-
}
|
|
1356
|
-
],
|
|
1357
|
-
values: {
|
|
1358
|
-
tintColor: [gt.color[0] ?? 1, gt.color[1] ?? 1, gt.color[2] ?? 1, gt.color[3] ?? 1],
|
|
1359
|
-
distanceRange: [
|
|
1360
|
-
font.common.distanceRange,
|
|
1361
|
-
font.common.atlasWidth,
|
|
1362
|
-
font.common.atlasHeight,
|
|
1363
|
-
0
|
|
1364
|
-
],
|
|
1365
|
-
baseColorTexture: materialTextureValue({ texture: font.atlas })
|
|
1366
|
-
},
|
|
1367
|
-
parameters: [
|
|
1368
|
-
{ name: "tintColor", type: "color", default: [1, 1, 1, 1] },
|
|
1369
|
-
{ name: "distanceRange", type: "vec4", default: [4, 512, 512, 0] },
|
|
1370
|
-
{ name: "baseColorTexture", type: "texture" },
|
|
1371
|
-
{ name: "metallicRoughnessTexture", type: "texture", optional: true },
|
|
1372
|
-
{ name: "normalTexture", type: "texture", optional: true }
|
|
1373
|
-
]
|
|
1374
|
-
};
|
|
1375
|
-
const id = world.allocSharedRef("MaterialAsset", material);
|
|
1376
|
-
const previous = cache.get(slot);
|
|
1377
|
-
cache.set(slot, id);
|
|
1378
|
-
if (previous !== void 0 && previous !== id) {
|
|
1379
|
-
world.sharedRefs.release(asMaterialHandle(previous));
|
|
1380
|
-
}
|
|
1381
|
-
return id;
|
|
1382
|
-
}
|
|
1383
|
-
function signatureOf(gt) {
|
|
1384
|
-
return `${gt.fontHandle}|${gt.fontSize}|${gt.text}|${gt.color[0]},${gt.color[1]},${gt.color[2]},${gt.color[3]}`;
|
|
1385
|
-
}
|
|
1386
|
-
function asFontHandle(raw) {
|
|
1387
|
-
return raw;
|
|
1388
|
-
}
|
|
1389
|
-
function asMeshHandle(id) {
|
|
1390
|
-
return id;
|
|
1391
|
-
}
|
|
1392
|
-
function asMaterialHandle(id) {
|
|
1393
|
-
return id;
|
|
1394
|
-
}
|
|
1395
|
-
function handleId(handle) {
|
|
1396
|
-
return handle;
|
|
1397
|
-
}
|
|
1398
|
-
var TRANSPARENT_SORT_CONFIG_KEY = "TransparentSortConfig";
|
|
1399
|
-
var TRANSPARENT_SORT_MODE_LAYER_Z = 0;
|
|
1400
|
-
var TRANSPARENT_SORT_MODE_LAYER_Y = 1;
|
|
1401
|
-
var TRANSPARENT_SORT_MODE_LAYER_YZ = 2;
|
|
1402
|
-
var TRANSPARENT_SORT_MODE_DISTANCE = 3;
|
|
1403
|
-
var DEFAULT_CONFIG = Object.freeze({
|
|
1404
|
-
mode: TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
1405
|
-
yzAlpha: 1
|
|
1406
|
-
});
|
|
1407
|
-
var VALID_MODES = /* @__PURE__ */ new Set([
|
|
1408
|
-
TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
1409
|
-
TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
1410
|
-
TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
1411
|
-
TRANSPARENT_SORT_MODE_DISTANCE
|
|
1412
|
-
]);
|
|
1413
|
-
var EXPECTED_MODE = "mode \u2208 {0, 1, 2, 3}";
|
|
1414
|
-
var HINT_MODE = "0=layer-z, 1=layer-y, 2=layer-yz, 3=distance";
|
|
1415
|
-
function getTransparentSortConfig(world) {
|
|
1416
|
-
if (!world.hasResource(TRANSPARENT_SORT_CONFIG_KEY)) {
|
|
1417
|
-
return DEFAULT_CONFIG;
|
|
1418
|
-
}
|
|
1419
|
-
return world.getResource(TRANSPARENT_SORT_CONFIG_KEY);
|
|
1420
|
-
}
|
|
1421
|
-
function setTransparentSortConfig(world, cfg) {
|
|
1422
|
-
if (!VALID_MODES.has(cfg.mode)) {
|
|
1423
|
-
return err(
|
|
1424
|
-
new ResourceInvalidValueError(EXPECTED_MODE, HINT_MODE, {
|
|
1425
|
-
receivedMode: cfg.mode,
|
|
1426
|
-
receivedKey: TRANSPARENT_SORT_CONFIG_KEY
|
|
1427
|
-
})
|
|
1428
|
-
);
|
|
1429
|
-
}
|
|
1430
|
-
world.insertResource(TRANSPARENT_SORT_CONFIG_KEY, {
|
|
1431
|
-
mode: cfg.mode,
|
|
1432
|
-
yzAlpha: cfg.yzAlpha
|
|
1433
|
-
});
|
|
1434
|
-
return ok(void 0);
|
|
1435
|
-
}
|
|
1436
|
-
|
|
1437
|
-
export { ANTIALIAS_FXAA, ANTIALIAS_MSAA, ANTIALIAS_NONE, ANTIALIAS_TAA, Atmosphere, AtmosphereCapsInsufficientError, AtmosphereCardinalityInvalidError, AtmosphereParameterInvalidError, AtmosphereProducerFailedError, AtmosphereSunMissingError, BLOOM_DISABLED, BLOOM_ENABLED, CAMERA_PROJECTION_ORTHOGRAPHIC, CAMERA_PROJECTION_PERSPECTIVE, Camera, DirectionalLight, EnvironmentSourceConflictError, EquirectProjectionFailedError, Fog, FogOwnerConflictError, FogParametersInvalidError, GbufferAttachmentCountMismatchError, GbufferRtAllocFailedError, GlyphText, HdrpCapsInsufficientError, HdrpDeferredCapsInsufficientError, HdrpIndexListOverflowError, HdrpLightBudgetExceededError, Instances, Layer, MaterialSkinAttrMissingError, Materials, MeshFilter, MeshRenderer, MeshSsboCapacityExceededError, MeshSsboCeilingReachedError, ObservationUnavailableError, PointLight, PointLightShadow, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PostProcessParams, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePassOrderConflictError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, SKYBOX_MODE_CUBEMAP, SPRITE_PLAYBACK_MODE_CLAMP, SPRITE_PLAYBACK_MODE_LOOP, SPRITE_PREMULTIPLIED_ALPHA_BLEND, SceneInstance, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, SkyboxBackground, Skylight, SortKey, SpotLight, SpriteAnimation, SpriteInstances, SpriteRegionOverride, TONEMAP_ACES_FILMIC, TONEMAP_AGX, TONEMAP_CINEON, TONEMAP_LINEAR, TONEMAP_NEUTRAL, TONEMAP_NONE, TONEMAP_REINHARD, TONEMAP_REINHARD_EXTENDED, TRANSPARENT_SORT_CONFIG_KEY, TRANSPARENT_SORT_MODE_DISTANCE, TRANSPARENT_SORT_MODE_LAYER_Y, TRANSPARENT_SORT_MODE_LAYER_YZ, TRANSPARENT_SORT_MODE_LAYER_Z, TaaCapsInsufficientError, TemporalUnsupportedError, TileLayer, Tilemap, VertexStorageBufferUnavailableError, VideoUploadUnsupportedError, Visibility, VisibilityStateValue, antialiasFromF32, bloomEnabledFromF32, cameraProjectionFromF32, decodeSortScope, encodeSortScope, ensureGlyphMeshMaterialSlots, getTransparentSortConfig, glyphTextLayoutSystem, markTileLayerDirty, materialDrawDiagnostic, materialTextureValue, orthographic, perspective, resetGlyphBakeCache, resolveRenderAsset, setTransparentSortConfig, skyboxModeFromF32, spritePlaybackModeFromU32, tonemapFromF32, tonemapToU32, validateAtmosphereData, visibilityStateFromU32 };
|
|
1438
|
-
//# sourceMappingURL=chunk-DJIMFYX6.mjs.map
|
|
1439
|
-
//# sourceMappingURL=chunk-DJIMFYX6.mjs.map
|