@forgeax/engine-runtime 0.1.6 → 0.1.19

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 (61) hide show
  1. package/README.md +61 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/helpers/standard-material-manifest.d.ts +12 -0
  4. package/dist/__tests__/helpers/standard-material-manifest.d.ts.map +1 -0
  5. package/dist/__tests__/render-environment-consumer.integration.test.d.ts +2 -0
  6. package/dist/__tests__/render-environment-consumer.integration.test.d.ts.map +1 -0
  7. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -1
  8. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts.map +1 -1
  9. package/dist/__tests__/renderer-host-fallback.unit.test.d.ts +2 -0
  10. package/dist/__tests__/renderer-host-fallback.unit.test.d.ts.map +1 -0
  11. package/dist/__tests__/skinned-shadow-mixed.dawn.test.d.ts +2 -0
  12. package/dist/__tests__/skinned-shadow-mixed.dawn.test.d.ts.map +1 -0
  13. package/dist/backend-selection.d.ts.map +1 -1
  14. package/dist/collect-scene-asset.d.ts +6 -3
  15. package/dist/collect-scene-asset.d.ts.map +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.mjs +25 -4
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/renderer-host.d.ts +2 -1
  21. package/dist/renderer-host.d.ts.map +1 -1
  22. package/dist/renderer-host.mjs +21 -2
  23. package/dist/renderer-host.mjs.map +1 -1
  24. package/package.json +30 -30
  25. package/src/__tests__/asset-registry-guid-reverse.test.ts +33 -0
  26. package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +12 -11
  27. package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +39 -6
  28. package/src/__tests__/errors.unit.test.ts +60 -0
  29. package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +4 -5
  30. package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +461 -18
  31. package/src/__tests__/geometry.unit.test.ts +3 -1
  32. package/src/__tests__/helpers/standard-material-manifest.ts +45 -0
  33. package/src/__tests__/lights.unit.test.ts +15 -11
  34. package/src/__tests__/material-texture-uv-scale.unit.test.ts +8 -14
  35. package/src/__tests__/materials.unit.test.ts +2 -0
  36. package/src/__tests__/pbr-pipeline.unit.test.ts +15 -12
  37. package/src/__tests__/pipeline-cache-keying.unit.test.ts +6 -4
  38. package/src/__tests__/pipeline.unit.test.ts +5 -2
  39. package/src/__tests__/render-environment-consumer.integration.test.ts +33 -0
  40. package/src/__tests__/render-error-exhaustive.test-d.ts +93 -0
  41. package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +5 -1
  42. package/src/__tests__/render-feature-prepared-graphics.fixture.ts +10 -0
  43. package/src/__tests__/render-system-mega.test.ts +3 -1
  44. package/src/__tests__/render-system-record-multi-material-textureview.test.ts +3 -1
  45. package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +3 -1
  46. package/src/__tests__/render-system-record.test.ts +8 -6
  47. package/src/__tests__/renderer-host-fallback.unit.test.ts +112 -0
  48. package/src/__tests__/renderer-lifecycle.integration.test.ts +10 -0
  49. package/src/__tests__/renderer-surface.unit.test.ts +66 -0
  50. package/src/__tests__/renderer.test-d.ts +2 -0
  51. package/src/__tests__/rhi-null-command-flow.unit.test.ts +14 -0
  52. package/src/__tests__/shadow-csm-cascade-loadop.test.ts +5 -1
  53. package/src/__tests__/shadow-csm-tile-consistency.test.ts +5 -1
  54. package/src/__tests__/skinned-shadow-mixed.dawn.test.ts +383 -0
  55. package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +10 -10
  56. package/src/__tests__/ssao-passes.test.ts +32 -12
  57. package/src/__tests__/systems.unit.test.ts +48 -31
  58. package/src/backend-selection.ts +4 -0
  59. package/src/collect-scene-asset.ts +14 -7
  60. package/src/index.ts +5 -1
  61. package/src/renderer-host.ts +30 -3
@@ -0,0 +1,12 @@
1
+ export interface StandardMaterialShaderVariant {
2
+ readonly definesKey: string;
3
+ readonly defines: {
4
+ readonly CLUSTER_FORWARD_AVAILABLE: boolean;
5
+ readonly STORAGE_BUFFER_AVAILABLE: boolean;
6
+ readonly TRANSMISSION_AVAILABLE: boolean;
7
+ readonly VERTEX_COLOR_AVAILABLE: boolean;
8
+ };
9
+ readonly composedWgsl: string;
10
+ }
11
+ export declare function standardMaterialShaderVariants(composedWgsl?: string): readonly StandardMaterialShaderVariant[];
12
+ //# sourceMappingURL=standard-material-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-material-manifest.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/standard-material-manifest.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,yBAAyB,EAAE,OAAO,CAAC;QAC5C,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;QAC3C,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;QACzC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;KAC1C,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAWD,wBAAgB,8BAA8B,CAC5C,YAAY,SAAe,GAC1B,SAAS,6BAA6B,EAAE,CAsB1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=render-environment-consumer.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-environment-consumer.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/render-environment-consumer.integration.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"render-error-exhaustive.test-d.d.ts","sourceRoot":"","sources":["../../src/__tests__/render-error-exhaustive.test-d.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE3E,iBAAS,4BAA4B,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA6EnE;AAED,iBAAS,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CA0JjD;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,mFAAmF;IACnF,MAAM,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC;IACxD,2EAA2E;IAC3E,OAAO,EAAE,OAAO,iBAAiB,CAAC;CACnC,CAAC"}
1
+ {"version":3,"file":"render-error-exhaustive.test-d.d.ts","sourceRoot":"","sources":["../../src/__tests__/render-error-exhaustive.test-d.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE3E,iBAAS,4BAA4B,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA2GnE;AAED,iBAAS,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAyNjD;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,mFAAmF;IACnF,MAAM,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC;IACxD,2EAA2E;IAC3E,OAAO,EAAE,OAAO,iBAAiB,CAAC;CACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"render-feature-prepared-graphics.fixture.d.ts","sourceRoot":"","sources":["../../src/__tests__/render-feature-prepared-graphics.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAEb,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAKhC,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjF,eAAO,MAAM,gBAAgB,QAS1B,CAAC;AAEJ,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,mBAAgC,GACrC,aAAa,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CA6D3C;AAED,wBAAgB,aAAa,IAAI,KAAK,CAOrC;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GACvD,gBAAgB,CAElB"}
1
+ {"version":3,"file":"render-feature-prepared-graphics.fixture.d.ts","sourceRoot":"","sources":["../../src/__tests__/render-feature-prepared-graphics.fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAEb,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAMhC,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjF,eAAO,MAAM,gBAAgB,QAkB1B,CAAC;AAEJ,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,mBAAgC,GACrC,aAAa,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CA6D3C;AAED,wBAAgB,aAAa,IAAI,KAAK,CAOrC;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GACvD,gBAAgB,CAElB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=renderer-host-fallback.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-host-fallback.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/renderer-host-fallback.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skinned-shadow-mixed.dawn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skinned-shadow-mixed.dawn.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/skinned-shadow-mixed.dawn.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"backend-selection.d.ts","sourceRoot":"","sources":["../src/backend-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACzF,OAAO,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGxD,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,eAAe,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,GAClD,cAAc,CAwBhB;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,UAAU,UAAQ,GACjB,OAAO,CACN;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CACnD,CA2BA"}
1
+ {"version":3,"file":"backend-selection.d.ts","sourceRoot":"","sources":["../src/backend-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACzF,OAAO,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGxD,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,eAAe,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,GAClD,cAAc,CA4BhB;AAED,gFAAgF;AAChF,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,UAAU,UAAQ,GACjB,OAAO,CACN;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CACnD,CA2BA"}
@@ -1,8 +1,11 @@
1
- import type { AssetRegistry } from '@forgeax/engine-assets-runtime';
2
1
  import { SceneCollectAssetGuidUnresolvedError, SceneCollectEntityRefOutOfClosureError } from '@forgeax/engine-assets-runtime';
3
2
  import { type Component as EcsComponent, type EntityHandle, type World } from '@forgeax/engine-ecs';
4
3
  import { type Result } from '@forgeax/engine-rhi';
5
- import type { SceneAsset } from '@forgeax/engine-types';
4
+ import type { Asset, SceneAsset } from '@forgeax/engine-types';
5
+ /** The collector needs identity lookup, not an authoring registry implementation. */
6
+ export interface SceneAssetGuidLookup {
7
+ guidOf(asset: Asset): string | undefined;
8
+ }
6
9
  export declare function serializeSceneAssetToPack(sceneAsset: SceneAsset, components: ReadonlyMap<string, EcsComponent>, guid?: string): Result<Record<string, unknown>, SceneCollectAssetGuidUnresolvedError>;
7
10
  /**
8
11
  * Collect a forest of entity subtrees into a self-contained SceneAsset.
@@ -12,5 +15,5 @@ export declare function serializeSceneAssetToPack(sceneAsset: SceneAsset, compon
12
15
  * row stripped without producing a self-mount. Member classification
13
16
  * filter (not subtree pruning): graft entities under members survive as owned.
14
17
  */
15
- export declare function rootsToSceneAsset(registry: AssetRegistry, world: World, roots: EntityHandle[]): Result<SceneAsset, SceneCollectEntityRefOutOfClosureError | SceneCollectAssetGuidUnresolvedError>;
18
+ export declare function rootsToSceneAsset(registry: SceneAssetGuidLookup, world: World, roots: EntityHandle[]): Result<SceneAsset, SceneCollectEntityRefOutOfClosureError | SceneCollectAssetGuidUnresolvedError>;
16
19
  //# sourceMappingURL=collect-scene-asset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collect-scene-asset.d.ts","sourceRoot":"","sources":["../src/collect-scene-asset.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAEL,oCAAoC,EACpC,sCAAsC,EACvC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,KAAK,SAAS,IAAI,YAAY,EAC9B,KAAK,YAAY,EACjB,KAAK,KAAK,EACX,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,OAAO,KAAK,EAKV,UAAU,EAGX,MAAM,uBAAuB,CAAC;AAoI/B,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAC7C,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,oCAAoC,CAAC,CA2BvE;AAMD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,YAAY,EAAE,GACpB,MAAM,CACP,UAAU,EACV,sCAAsC,GAAG,oCAAoC,CAC9E,CAgbA"}
1
+ {"version":3,"file":"collect-scene-asset.d.ts","sourceRoot":"","sources":["../src/collect-scene-asset.ts"],"names":[],"mappings":"AA8CA,OAAO,EAGL,oCAAoC,EACpC,sCAAsC,EACvC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAEL,KAAK,SAAS,IAAI,YAAY,EAC9B,KAAK,YAAY,EACjB,KAAK,KAAK,EACX,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,OAAO,KAAK,EACV,KAAK,EAIL,UAAU,EAGX,MAAM,uBAAuB,CAAC;AAG/B,qFAAqF;AACrF,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;CAC1C;AAqID,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAC7C,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,oCAAoC,CAAC,CA2BvE;AAMD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,YAAY,EAAE,GACpB,MAAM,CACP,UAAU,EACV,sCAAsC,GAAG,oCAAoC,CAC9E,CAgbA"}
package/dist/index.d.ts CHANGED
@@ -203,7 +203,7 @@ export { spriteAnimationTickSystem } from './systems/sprite-animation-tick';
203
203
  * ```
204
204
  */
205
205
  export { quat } from '@forgeax/engine-math';
206
- export { rootsToSceneAsset, serializeSceneAssetToPack } from './collect-scene-asset';
206
+ export { rootsToSceneAsset, type SceneAssetGuidLookup, serializeSceneAssetToPack, } from './collect-scene-asset';
207
207
  /**
208
208
  * Render surface. The renderer host assembles one Standard pipeline and
209
209
  * accepts closed RenderFeature declarations at App construction. Pipelines,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAgBlD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAW9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAY/B;;;;;;;;;GASG;AACH;;;;;;;;;GASG;AAKH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAQlE;;;;;;GAMG;AACH;;;;;;;;;;;;;;GAcG;AACH;GACG;AAQH;;;;;;;;;;;;;;;;GAgBG;AAGH,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAiB5E;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAiB5C,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAgCrF;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAgBlD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAW9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC;AAY/B;;;;;;;;;GASG;AACH;;;;;;;;;GASG;AAKH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAQlE;;;;;;GAMG;AACH;;;;;;;;;;;;;;GAcG;AACH;GACG;AAQH;;;;;;;;;;;;;;;;GAgBG;AAGH,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAiB5E;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAiB5C,OAAO,EACL,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAgC/B;;;;;;;;;;GAUG"}
package/dist/index.mjs CHANGED
@@ -19,7 +19,7 @@ export { RhiError } from '@forgeax/engine-rhi';
19
19
  import { SpriteAnimationInvalidError, fillComponentDefaults } from '@forgeax/engine-ecs/projection';
20
20
  import { SpriteAnimation, spritePlaybackModeFromU32, SpriteRegionOverride } from '@forgeax/engine-render/authoring';
21
21
  export { quat } from '@forgeax/engine-math';
22
- import { SceneCollectAssetGuidUnresolvedError, resolveAssetHandle, SceneCollectEntityRefOutOfClosureError } from '@forgeax/engine-assets-runtime';
22
+ import { SceneCollectAssetGuidUnresolvedError, resolveAssetHandle, SceneCollectEntityRefOutOfClosureError, builtinMeshGuid } from '@forgeax/engine-assets-runtime';
23
23
  import { classifyEntityField } from '@forgeax/engine-ecs/externalization';
24
24
  import { componentSchema } from '@forgeax/engine-ecs/internal';
25
25
 
@@ -90,12 +90,14 @@ var defaultAssetDecoderContributions = Object.freeze(
90
90
  function loadRhiPack(mod, instrumentation) {
91
91
  const rhi = mod.rhi;
92
92
  const createShaderModule = mod.createShaderModule;
93
+ const createShaderModuleImmediate = mod.createShaderModuleImmediate;
93
94
  const translateErrorEventToRhiError = mod.translateErrorEventToRhiError;
94
95
  const rawDeviceAccessor = mod._internal_getRawDevice;
95
96
  const backendInstrumentation = mod.instrumentation;
96
97
  const pack = {
97
98
  rhi,
98
99
  ...createShaderModule === void 0 ? {} : { createShaderModule },
100
+ ...createShaderModuleImmediate === void 0 ? {} : { createShaderModuleImmediate },
99
101
  ...translateErrorEventToRhiError === void 0 ? {} : { translateErrorEventToRhiError },
100
102
  ...rawDeviceAccessor === void 0 ? {} : { _internal_getRawDevice: rawDeviceAccessor }
101
103
  };
@@ -129,11 +131,28 @@ async function loadBackendPack(options, preferWgpu = false) {
129
131
  }
130
132
 
131
133
  // src/renderer-host.ts
134
+ var FALLBACK_ERROR_CODES = /* @__PURE__ */ new Set([
135
+ "adapter-unavailable",
136
+ "request-adapter-threw",
137
+ "feature-not-enabled",
138
+ "limit-exceeded",
139
+ "rhi-not-available",
140
+ "device-lost",
141
+ "oom"
142
+ ]);
143
+ function canFallbackToWgpu(error) {
144
+ if (!(error instanceof EngineEnvironmentError)) return false;
145
+ const webgpuError = error.detail.webgpuError;
146
+ if (webgpuError === void 0 || typeof webgpuError !== "object") return false;
147
+ if (!("code" in webgpuError)) return false;
148
+ const code = webgpuError.code;
149
+ return typeof code === "string" && FALLBACK_ERROR_CODES.has(code);
150
+ }
132
151
  async function constructRuntimeRendererHost(canvas, options, bundler) {
133
152
  const first = await loadBackendPack(options);
134
153
  if (!first.ok) throw first.error;
135
154
  const constructed = await constructRendererHost(canvas, options, bundler, first.value);
136
- if (constructed.ok || options?.rhi !== void 0 || typeof globalThis === "undefined") {
155
+ if (constructed.ok || options?.rhi !== void 0 || typeof globalThis === "undefined" || !canFallbackToWgpu(constructed.error)) {
137
156
  return constructed;
138
157
  }
139
158
  const fallback = await loadBackendPack(options, true);
@@ -399,9 +418,11 @@ function classifyFieldSchema(fieldType) {
399
418
  }
400
419
  function _handleToGuid(world, registry, handle, field) {
401
420
  if (handle === 0) return ok$1(void 0);
421
+ const builtinGuid = builtinMeshGuid(handle);
422
+ if (builtinGuid !== void 0) return ok$1(builtinGuid);
402
423
  const assetRes = resolveAssetHandle(world, handle);
403
424
  if (!assetRes.ok) return err$1(new SceneCollectAssetGuidUnresolvedError(field, handle));
404
- const guid = registry._guidForAsset(assetRes.value);
425
+ const guid = registry.guidOf(assetRes.value);
405
426
  if (guid === void 0) return err$1(new SceneCollectAssetGuidUnresolvedError(field, handle));
406
427
  return ok$1(guid);
407
428
  }
@@ -595,7 +616,7 @@ function rootsToSceneAsset(registry, world, roots) {
595
616
  sh.value
596
617
  )
597
618
  );
598
- const g = registry._guidForAsset(pr.value);
619
+ const g = registry.guidOf(pr.value);
599
620
  if (g === void 0)
600
621
  return err$1(
601
622
  new SceneCollectAssetGuidUnresolvedError(