@forgeax/engine-runtime 0.1.27 → 0.1.29

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.
Files changed (114) hide show
  1. package/README.md +98 -0
  2. package/dist/collect-scene-asset.d.ts.map +1 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.mjs +480 -15
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/scene-utils/mount-override-fold.d.ts +3 -1
  8. package/dist/scene-utils/mount-override-fold.d.ts.map +1 -1
  9. package/package.json +37 -30
  10. package/src/__tests__/animation-graph-collect-roundtrip.test.ts +4 -2
  11. package/src/__tests__/asset-registry-aabb.cases.unit.test.ts +5 -4
  12. package/src/__tests__/asset-registry-guid-reverse.test.ts +22 -27
  13. package/src/__tests__/asset-registry-mounts.test.ts +174 -734
  14. package/src/__tests__/asset-registry-scene.cases.unit.test.ts +9 -18
  15. package/src/__tests__/asset-registry.recursive.spec.ts +23 -29
  16. package/src/__tests__/camera-ortho.cases.unit.test.ts +12 -3
  17. package/src/__tests__/collect-scene-asset.test.ts +96 -113
  18. package/src/__tests__/collect-scene-mount-collapse.test.ts +64 -66
  19. package/src/__tests__/collect-transient-children-absent.test.ts +11 -17
  20. package/src/__tests__/collect-transient-roundtrip.test.ts +12 -13
  21. package/src/__tests__/collect-transient-skip.test.ts +20 -27
  22. package/src/__tests__/components.test-d.ts +17 -1
  23. package/src/__tests__/components.unit.test.ts +75 -27
  24. package/src/__tests__/composite-skybox-cross-world.browser.test.ts +4 -2
  25. package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +8 -4
  26. package/src/__tests__/dawn/instances-shadow.dawn.test.ts +4 -1
  27. package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +66 -92
  28. package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +200 -4
  29. package/src/__tests__/errors.unit.test.ts +13 -0
  30. package/src/__tests__/feature-depth-material.dawn.test.ts +23 -0
  31. package/src/__tests__/feature-depth-material.fixture.ts +473 -0
  32. package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +14 -14
  33. package/src/__tests__/geometry.unit.test.ts +42 -43
  34. package/src/__tests__/gpu-resource-release.cases.unit.test.ts +16 -9
  35. package/src/__tests__/handle-migration.test.ts +0 -1
  36. package/src/__tests__/instances-renderer-lifecycle.integration.test.ts +20 -14
  37. package/src/__tests__/instances.test-d.ts +13 -52
  38. package/src/__tests__/instantiate-mount-deferred-wiring.test.ts +42 -80
  39. package/src/__tests__/lazy-catalog.cases.unit.test.ts +17 -3
  40. package/src/__tests__/loader-registry.cases.unit.test.ts +4 -4
  41. package/src/__tests__/material-publication.browser.test.ts +29 -0
  42. package/src/__tests__/material-publication.commands.ts +23 -0
  43. package/src/__tests__/material-publication.dawn.test.ts +24 -0
  44. package/src/__tests__/material-publication.fixture.ts +349 -0
  45. package/src/__tests__/material-publication.server.ts +109 -0
  46. package/src/__tests__/parse-scene-payload-refs.cases.unit.test.ts +73 -96
  47. package/src/__tests__/pbr-pipeline.unit.test.ts +25 -11
  48. package/src/__tests__/point-light-shadow.browser.test.ts +8 -2
  49. package/src/__tests__/point-light-shadow.unit.test.ts +37 -8
  50. package/src/__tests__/record-all-topology.cases.unit.test.ts +52 -0
  51. package/src/__tests__/record-draw-branch.cases.unit.test.ts +1 -0
  52. package/src/__tests__/record-worldid-isolation.test.ts +47 -28
  53. package/src/__tests__/render-error-exhaustive.test-d.ts +24 -0
  54. package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +15 -4
  55. package/src/__tests__/render-system-extract.test.ts +61 -0
  56. package/src/__tests__/render-system-extract.unit.test.ts +21 -7
  57. package/src/__tests__/render-system-fold-bucket.unit.test.ts +33 -1
  58. package/src/__tests__/render-system-fold-material.unit.test.ts +32 -6
  59. package/src/__tests__/render-system-fold-modegate.unit.test.ts +26 -4
  60. package/src/__tests__/render-system-fold.dawn.test.ts +4 -1
  61. package/src/__tests__/render-system-mega.test.ts +50 -62
  62. package/src/__tests__/renderer-device-loss-provider-feasibility.dawn.test.ts +0 -1
  63. package/src/__tests__/renderer-device-loss-recovery.dawn.test.ts +0 -3
  64. package/src/__tests__/renderer-draw-world.cases.unit.test.ts +16 -513
  65. package/src/__tests__/resolve-scene-guids.cases.unit.test.ts +48 -43
  66. package/src/__tests__/rhi-null-command-flow.unit.test.ts +9 -7
  67. package/src/__tests__/roots-to-scene-asset.test.ts +27 -28
  68. package/src/__tests__/roundtrip-primitive.test.ts +24 -23
  69. package/src/__tests__/scene-equirect-roundtrip.test.ts +5 -16
  70. package/src/__tests__/scene-instantiate-cycle-runtime.test.ts +13 -29
  71. package/src/__tests__/scene-mount-fixed-point.test.ts +104 -227
  72. package/src/__tests__/scene-mount-roundtrip.test.ts +95 -961
  73. package/src/__tests__/scene-mount-wrapper-roundtrip.test.ts +36 -182
  74. package/src/__tests__/scene-sugar-instantiate.test.ts +20 -15
  75. package/src/__tests__/serialize-mounts-roundtrip.test.ts +108 -492
  76. package/src/__tests__/serialize-scene-asset.test.ts +36 -50
  77. package/src/__tests__/shadow-caster-empty-schema.test.ts +3 -1
  78. package/src/__tests__/shadow-fields-observable.dawn.test.ts +34 -19
  79. package/src/__tests__/shadow-mesh-ssbo-order.test.ts +5 -12
  80. package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +6 -4
  81. package/src/__tests__/skin-m2-extract-happy.cases.unit.test.ts +50 -2
  82. package/src/__tests__/skin-m2-extract-joint-error.cases.unit.test.ts +50 -2
  83. package/src/__tests__/skin-m2-extract-null-assets.cases.unit.test.ts +50 -2
  84. package/src/__tests__/skin-m2-extract-skeleton-error.cases.unit.test.ts +50 -2
  85. package/src/__tests__/skin-palette-extract.cases.unit.test.ts +2 -0
  86. package/src/__tests__/skinned-shadow-mixed.dawn.test.ts +93 -48
  87. package/src/__tests__/skylight-pipeline-layout.cases.unit.test.ts +6 -2
  88. package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +1 -1
  89. package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +11 -3
  90. package/src/__tests__/template-game-default-api-contract.test.ts +21 -21
  91. package/src/__tests__/tonemap-hdr-target.cases.unit.test.ts +8 -5
  92. package/src/__tests__/tonemap-pipeline-split.cases.unit.test.ts +3 -0
  93. package/src/__tests__/transient-fields-collect.test.ts +4 -4
  94. package/src/__tests__/transient-runtime-behavior.test.ts +9 -9
  95. package/src/__tests__/vfx-depth-material.dawn.test.ts +42 -0
  96. package/src/__tests__/vfx-mesh-lighting.browser.test.ts +16 -0
  97. package/src/__tests__/vfx-mesh-lighting.commands.ts +14 -0
  98. package/src/__tests__/vfx-mesh-lighting.dawn.test.ts +16 -0
  99. package/src/__tests__/vfx-mesh-lighting.fixture.ts +883 -0
  100. package/src/__tests__/wave1-dynamic-geometry.browser.test.ts +326 -0
  101. package/src/__tests__/wave1-rendering-materials.browser.test.ts +617 -0
  102. package/src/__tests__/wave1-rendering-p0.browser.test.ts +751 -0
  103. package/src/__tests__/wave1-rendering-recovery.browser.test.ts +666 -0
  104. package/src/__tests__/wave1-shadow-diagnostic.browser.test.ts +582 -0
  105. package/src/__tests__/world-scene-despawn.test.ts +8 -8
  106. package/src/__tests__/world-scene-instantiate.test.ts +23 -29
  107. package/src/__tests__/world-scene-nested.test.ts +90 -163
  108. package/src/__tests__/world-scene-override.test.ts +17 -16
  109. package/src/__tests__/zero-compression-zero-load.integration.test.ts +1 -0
  110. package/src/collect-scene-asset.ts +637 -19
  111. package/src/components/__tests__/sprite-animation.test-d.ts +2 -2
  112. package/src/index.ts +1 -0
  113. package/src/scene-utils/mount-override-fold.ts +5 -14
  114. package/src/__tests__/node-shims.d.ts +0 -31
@@ -30,8 +30,8 @@
30
30
  //
31
31
  // Why array<f32> (and not array<f32, N>) for `regions`? The length
32
32
  // `frameCount * 4` is a runtime value (frameCount itself is a column read
33
- // per entity); the variable-capacity `array<f32>` mirrors `Instances.transforms`
34
- // (M1 feat-20260514) where the runtime length is also data-dependent. The
33
+ // per entity); the variable-capacity `array<f32>` mirrors the renderer-owned
34
+ // collection snapshot where the runtime length is also data-dependent. The
35
35
  // length invariant is enforced by the M4 sprite-animation-tick system at
36
36
  // first observation (AC-09 fail-fast path; D-1 + D-6).
37
37
  //
package/src/index.ts CHANGED
@@ -106,6 +106,7 @@ export {
106
106
  type RhiErrorCode,
107
107
  type RhiErrorDetail,
108
108
  type RhiShaderCompileDetail,
109
+ type RhiWebgpuRuntimeCause,
109
110
  type RhiWebgpuRuntimeDetail,
110
111
  } from '@forgeax/engine-rhi';
111
112
  /**
@@ -49,18 +49,14 @@ import {
49
49
  } from '@forgeax/engine-ecs';
50
50
  import { componentSchema } from '@forgeax/engine-ecs/internal';
51
51
  import { fillComponentDefaults } from '@forgeax/engine-ecs/projection';
52
- import type {
53
- Handle,
54
- LocalEntityId,
55
- MountOverride,
56
- SceneAsset,
57
- SceneEntity,
58
- } from '@forgeax/engine-types';
52
+ import type { MountOverride } from '@forgeax/engine-scene';
53
+ import type { Handle, LocalEntityId, SceneAsset } from '@forgeax/engine-types';
59
54
 
60
55
  /** Minimal structural view of a SceneInstanceState the fold reads (D-4 boundary:
61
56
  * `world.getSceneInstanceState(root).value` is structurally assignable). */
62
57
  export interface FoldSceneInstanceState {
63
58
  readonly source: Handle<'SceneAsset', 'shared'>;
59
+ readonly keyByLocalId: Map<number, string>;
64
60
  readonly entityToLocalId: Map<EntityHandle, LocalEntityId>;
65
61
  }
66
62
 
@@ -151,12 +147,6 @@ export function foldMountOverrides(world: World, state: FoldSceneInstanceState):
151
147
  if (!sourceRes.ok) return [];
152
148
  const source = sourceRes.value as SceneAsset;
153
149
 
154
- // Index source entities by localId for O(1) baseline lookup.
155
- const sourceByLid = new Map<number, SceneEntity>();
156
- for (const node of source.entities) {
157
- sourceByLid.set(node.localId as unknown as number, node);
158
- }
159
-
160
150
  const excluded = excludedComponentNames();
161
151
  const registered = world.components.entries();
162
152
  const overrides: MountOverride[] = [];
@@ -170,7 +160,8 @@ export function foldMountOverrides(world: World, state: FoldSceneInstanceState):
170
160
  members.sort((a, b) => a[1] - b[1]);
171
161
 
172
162
  for (const [entity, lid] of members) {
173
- const sourceNode = sourceByLid.get(lid);
163
+ const sourceKey = state.keyByLocalId.get(lid);
164
+ const sourceNode = sourceKey === undefined ? undefined : source.entities[sourceKey];
174
165
  const sourceComps = (sourceNode?.components ?? {}) as Record<string, Record<string, unknown>>;
175
166
 
176
167
  for (const [compName, compToken] of registered) {
@@ -1,31 +0,0 @@
1
- // Ambient declarations for node:* modules used by dawn tests that read the
2
- // hello-triangle compiled shader manifest at runtime. The runtime package's
3
- // tsconfig does not enable @types/node (production target is browser); these
4
- // minimal shims keep tsc green for the small set of dawn test files that read
5
- // compiled shader manifests at runtime.
6
- //
7
- // Used by shader-manifest Dawn fixtures and the runtime benchmark fixtures.
8
- // - tilemap-chunk-y-sort-bench.unit.test.ts (perf_hooks + process.env)
9
- // - record-fold-scene-instances.unit.test.ts (readdirSync + dirname)
10
- // - basis-catalog-dispatch.integration.test.ts (existsSync pkg-built gate)
11
-
12
- declare module 'node:fs' {
13
- export function readFileSync(path: string, encoding: string): string;
14
- export function readdirSync(path: string): string[];
15
- export function existsSync(path: string): boolean;
16
- }
17
-
18
- declare module 'node:path' {
19
- export function resolve(...paths: string[]): string;
20
- export function dirname(p: string): string;
21
- }
22
-
23
- declare module 'node:url' {
24
- export function fileURLToPath(url: string | URL): string;
25
- }
26
-
27
- declare module 'node:perf_hooks' {
28
- export const performance: { now(): number };
29
- }
30
-
31
- declare const process: { env: Record<string, string | undefined> };