@forgeax/engine-runtime 0.1.3 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (606) hide show
  1. package/README.md +49 -83
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts +2 -0
  4. package/dist/__tests__/animation-graph-collect-roundtrip.test.d.ts.map +1 -0
  5. package/dist/__tests__/animation-graph-serialize.unit.test.d.ts +2 -0
  6. package/dist/__tests__/animation-graph-serialize.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts +2 -0
  8. package/dist/__tests__/asset-brand-and-name-retirement.test.d.ts.map +1 -0
  9. package/dist/__tests__/asset-error-exhaustive.test-d.d.ts +11 -0
  10. package/dist/__tests__/asset-error-exhaustive.test-d.d.ts.map +1 -0
  11. package/dist/__tests__/asset-registry-guid-reverse.test.d.ts +2 -0
  12. package/dist/__tests__/asset-registry-guid-reverse.test.d.ts.map +1 -0
  13. package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts +2 -0
  14. package/dist/__tests__/asset-registry-hdr-equirect.test.d.ts.map +1 -0
  15. package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts +2 -0
  16. package/dist/__tests__/asset-registry-mesh-pack-payload.dawn.test.d.ts.map +1 -0
  17. package/dist/__tests__/asset-registry-mounts.test.d.ts +2 -0
  18. package/dist/__tests__/asset-registry-mounts.test.d.ts.map +1 -0
  19. package/dist/__tests__/asset-registry.browser.test.d.ts +2 -0
  20. package/dist/__tests__/asset-registry.browser.test.d.ts.map +1 -0
  21. package/dist/__tests__/asset-registry.dawn.test.d.ts +2 -0
  22. package/dist/__tests__/asset-registry.dawn.test.d.ts.map +1 -0
  23. package/dist/__tests__/asset-registry.listCatalog.test.d.ts +2 -0
  24. package/dist/__tests__/asset-registry.listCatalog.test.d.ts.map +1 -0
  25. package/dist/__tests__/asset-registry.mesh-bin.test.d.ts +2 -0
  26. package/dist/__tests__/asset-registry.mesh-bin.test.d.ts.map +1 -0
  27. package/dist/__tests__/asset-registry.pack-cache.test.d.ts +2 -0
  28. package/dist/__tests__/asset-registry.pack-cache.test.d.ts.map +1 -0
  29. package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts +2 -0
  30. package/dist/__tests__/asset-registry.raw-container-failfast.test.d.ts.map +1 -0
  31. package/dist/__tests__/asset-registry.recursive.spec.d.ts +2 -0
  32. package/dist/__tests__/asset-registry.recursive.spec.d.ts.map +1 -0
  33. package/dist/__tests__/asset-registry.unit.test.d.ts +2 -0
  34. package/dist/__tests__/asset-registry.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/asset.unit.test.d.ts +2 -0
  36. package/dist/__tests__/asset.unit.test.d.ts.map +1 -0
  37. package/dist/__tests__/audio-load-by-guid.unit.test.d.ts +2 -0
  38. package/dist/__tests__/audio-load-by-guid.unit.test.d.ts.map +1 -0
  39. package/dist/__tests__/backend-selection.integration.test.d.ts +2 -0
  40. package/dist/__tests__/backend-selection.integration.test.d.ts.map +1 -0
  41. package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts +2 -0
  42. package/dist/__tests__/basis-catalog-dispatch.integration.test.d.ts.map +1 -0
  43. package/dist/__tests__/builtin-asset-registry.unit.test.d.ts +2 -0
  44. package/dist/__tests__/builtin-asset-registry.unit.test.d.ts.map +1 -0
  45. package/dist/__tests__/collect-scene-asset.test.d.ts +1 -2
  46. package/dist/__tests__/collect-scene-asset.test.d.ts.map +1 -1
  47. package/dist/__tests__/collect-scene-mount-collapse.test.d.ts +2 -0
  48. package/dist/__tests__/collect-scene-mount-collapse.test.d.ts.map +1 -0
  49. package/dist/__tests__/collect-transient-roundtrip.test.d.ts +1 -1
  50. package/dist/__tests__/collect-transient-roundtrip.test.d.ts.map +1 -1
  51. package/dist/__tests__/collect-transient-skip.test.d.ts +1 -2
  52. package/dist/__tests__/collect-transient-skip.test.d.ts.map +1 -1
  53. package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts +2 -0
  54. package/dist/__tests__/compressed-texture-physical-extent.integration.test.d.ts.map +1 -0
  55. package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts +2 -0
  56. package/dist/__tests__/dawn/mesh-update-dawn.test.d.ts.map +1 -0
  57. package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts +2 -0
  58. package/dist/__tests__/dawn/upload-texture.dawn.test.d.ts.map +1 -0
  59. package/dist/__tests__/draw-published.d.ts +2 -2
  60. package/dist/__tests__/draw-published.d.ts.map +1 -1
  61. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts +2 -0
  62. package/dist/__tests__/dynamic-texture-store.unit.test.d.ts.map +1 -0
  63. package/dist/__tests__/errors.unit.test.d.ts +2 -0
  64. package/dist/__tests__/errors.unit.test.d.ts.map +1 -0
  65. package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts +2 -0
  66. package/dist/__tests__/extract-skin-mismatch.unit.test.d.ts.map +1 -0
  67. package/dist/__tests__/fetch-binary-decompress.test.d.ts +2 -0
  68. package/dist/__tests__/fetch-binary-decompress.test.d.ts.map +1 -0
  69. package/dist/__tests__/four-path-compression.integration.test.d.ts +2 -0
  70. package/dist/__tests__/four-path-compression.integration.test.d.ts.map +1 -0
  71. package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts +2 -0
  72. package/dist/__tests__/fullscreen-feature-host.dawn.test.d.ts.map +1 -0
  73. package/dist/__tests__/guid-for-asset.unit.test.d.ts +2 -0
  74. package/dist/__tests__/guid-for-asset.unit.test.d.ts.map +1 -0
  75. package/dist/__tests__/handle-migration.test.d.ts +2 -0
  76. package/dist/__tests__/handle-migration.test.d.ts.map +1 -0
  77. package/dist/__tests__/helpers/register-runtime-components.d.ts.map +1 -1
  78. package/dist/__tests__/host-custom-kind-contract.test-d.d.ts +2 -0
  79. package/dist/__tests__/host-custom-kind-contract.test-d.d.ts.map +1 -0
  80. package/dist/__tests__/host-custom-kind-contract.test.d.ts +2 -0
  81. package/dist/__tests__/host-custom-kind-contract.test.d.ts.map +1 -0
  82. package/dist/__tests__/inspect-name.test.d.ts +2 -0
  83. package/dist/__tests__/inspect-name.test.d.ts.map +1 -0
  84. package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts +2 -0
  85. package/dist/__tests__/instantiate-mount-deferred-wiring.test.d.ts.map +1 -0
  86. package/dist/__tests__/loadbyguid-payload.unit.test.d.ts +2 -0
  87. package/dist/__tests__/loadbyguid-payload.unit.test.d.ts.map +1 -0
  88. package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts +2 -0
  89. package/dist/__tests__/loadbyguid-texture-intern.unit.test.d.ts.map +1 -0
  90. package/dist/__tests__/loader-extract-graceful.test.d.ts +2 -0
  91. package/dist/__tests__/loader-extract-graceful.test.d.ts.map +1 -0
  92. package/dist/__tests__/loader-name-survival.test.d.ts +2 -0
  93. package/dist/__tests__/loader-name-survival.test.d.ts.map +1 -0
  94. package/dist/__tests__/mesh-bin-contract.test.d.ts +2 -0
  95. package/dist/__tests__/mesh-bin-contract.test.d.ts.map +1 -0
  96. package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts +2 -0
  97. package/dist/__tests__/mesh-bin-skin-roundtrip.unit.test.d.ts.map +1 -0
  98. package/dist/__tests__/mesh-bin.test.d.ts +2 -0
  99. package/dist/__tests__/mesh-bin.test.d.ts.map +1 -0
  100. package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts +2 -0
  101. package/dist/__tests__/mesh-loader-skin-contract.unit.test.d.ts.map +1 -0
  102. package/dist/__tests__/new-kind-refs-contract.test.d.ts +2 -0
  103. package/dist/__tests__/new-kind-refs-contract.test.d.ts.map +1 -0
  104. package/dist/__tests__/package-promotion.test.d.ts +2 -0
  105. package/dist/__tests__/package-promotion.test.d.ts.map +1 -0
  106. package/dist/__tests__/package-rename.test.d.ts +2 -0
  107. package/dist/__tests__/package-rename.test.d.ts.map +1 -0
  108. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts +1 -1
  109. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts.map +1 -1
  110. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +1 -1
  111. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -1
  112. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts +10 -0
  113. package/dist/__tests__/render-feature-prepared-graphics.fixture.d.ts.map +1 -0
  114. package/dist/__tests__/render-system-extract.unit.test.d.ts +2 -0
  115. package/dist/__tests__/render-system-extract.unit.test.d.ts.map +1 -0
  116. package/dist/__tests__/renderer-test-utils.d.ts +10 -0
  117. package/dist/__tests__/renderer-test-utils.d.ts.map +1 -0
  118. package/dist/__tests__/renderer.test-d.d.ts +2 -0
  119. package/dist/__tests__/renderer.test-d.d.ts.map +1 -0
  120. package/dist/__tests__/resolve-asset-handle-err.test.d.ts +2 -0
  121. package/dist/__tests__/resolve-asset-handle-err.test.d.ts.map +1 -0
  122. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts +2 -0
  123. package/dist/__tests__/resolve-asset-handle.unit.test.d.ts.map +1 -0
  124. package/dist/__tests__/resolveName-fallback.test.d.ts +2 -0
  125. package/dist/__tests__/resolveName-fallback.test.d.ts.map +1 -0
  126. package/dist/__tests__/resolveName-null-package.test.d.ts +2 -0
  127. package/dist/__tests__/resolveName-null-package.test.d.ts.map +1 -0
  128. package/dist/__tests__/resolveName-unified-entry.test.d.ts +2 -0
  129. package/dist/__tests__/resolveName-unified-entry.test.d.ts.map +1 -0
  130. package/dist/__tests__/resolveName.test.d.ts +2 -0
  131. package/dist/__tests__/resolveName.test.d.ts.map +1 -0
  132. package/dist/__tests__/roots-to-scene-asset.test.d.ts +1 -1
  133. package/dist/__tests__/roots-to-scene-asset.test.d.ts.map +1 -1
  134. package/dist/__tests__/roundtrip-primitive.test.d.ts +2 -0
  135. package/dist/__tests__/roundtrip-primitive.test.d.ts.map +1 -0
  136. package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts +2 -0
  137. package/dist/__tests__/scene-bare-guid-refs-instantiate.test.d.ts.map +1 -0
  138. package/dist/__tests__/scene-instance-authoring.integration.test.d.ts +2 -0
  139. package/dist/__tests__/scene-instance-authoring.integration.test.d.ts.map +1 -0
  140. package/dist/__tests__/scene-mount-fixed-point.test.d.ts +2 -0
  141. package/dist/__tests__/scene-mount-fixed-point.test.d.ts.map +1 -0
  142. package/dist/__tests__/scene-mount-roundtrip.test.d.ts +2 -0
  143. package/dist/__tests__/scene-mount-roundtrip.test.d.ts.map +1 -0
  144. package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts +2 -0
  145. package/dist/__tests__/scene-mount-wrapper-roundtrip.test.d.ts.map +1 -0
  146. package/dist/__tests__/scene-sugar-instantiate.test.d.ts +2 -0
  147. package/dist/__tests__/scene-sugar-instantiate.test.d.ts.map +1 -0
  148. package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts +2 -0
  149. package/dist/__tests__/serialize-mounts-roundtrip.test.d.ts.map +1 -0
  150. package/dist/__tests__/serialize-scene-asset.test.d.ts +1 -1
  151. package/dist/__tests__/serialize-scene-asset.test.d.ts.map +1 -1
  152. package/dist/__tests__/template-game-default-api-contract.test.d.ts +2 -0
  153. package/dist/__tests__/template-game-default-api-contract.test.d.ts.map +1 -0
  154. package/dist/__tests__/tileset-asset-validate.test.d.ts +2 -0
  155. package/dist/__tests__/tileset-asset-validate.test.d.ts.map +1 -0
  156. package/dist/__tests__/transcode-fallback.unit.test.d.ts +2 -0
  157. package/dist/__tests__/transcode-fallback.unit.test.d.ts.map +1 -0
  158. package/dist/__tests__/transient-runtime-behavior.test.d.ts +2 -0
  159. package/dist/__tests__/transient-runtime-behavior.test.d.ts.map +1 -0
  160. package/dist/__tests__/video-loader-consumption.test.d.ts +2 -0
  161. package/dist/__tests__/video-loader-consumption.test.d.ts.map +1 -0
  162. package/dist/__tests__/video-loader-smoke.dawn.test.d.ts +2 -0
  163. package/dist/__tests__/video-loader-smoke.dawn.test.d.ts.map +1 -0
  164. package/dist/backend-selection.d.ts +13 -0
  165. package/dist/backend-selection.d.ts.map +1 -0
  166. package/dist/collect-scene-asset.d.ts +3 -3
  167. package/dist/collect-scene-asset.d.ts.map +1 -1
  168. package/dist/createRenderer.d.ts +14 -2
  169. package/dist/createRenderer.d.ts.map +1 -1
  170. package/dist/errors/environment.d.ts +1 -1
  171. package/dist/errors/environment.d.ts.map +1 -1
  172. package/dist/index.d.ts +19 -81
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.mjs +105 -108
  175. package/dist/index.mjs.map +1 -1
  176. package/dist/renderer-host.d.ts +9 -0
  177. package/dist/renderer-host.d.ts.map +1 -0
  178. package/dist/renderer-host.mjs +62 -0
  179. package/dist/renderer-host.mjs.map +1 -0
  180. package/dist/scene-instances/index.d.ts +2 -0
  181. package/dist/scene-instances/index.d.ts.map +1 -0
  182. package/dist/scene-utils/mount-override-fold.d.ts +1 -2
  183. package/dist/scene-utils/mount-override-fold.d.ts.map +1 -1
  184. package/dist/systems/sprite-animation-tick.d.ts +1 -1
  185. package/dist/systems/sprite-animation-tick.d.ts.map +1 -1
  186. package/dist/systems/transparent-sort.d.ts +1 -2
  187. package/dist/systems/transparent-sort.d.ts.map +1 -1
  188. package/dist/tilemap-register-validate.d.ts.map +1 -1
  189. package/package.json +34 -33
  190. package/src/__tests__/active-camera.unit.test.ts +19 -9
  191. package/src/__tests__/animation-graph-collect-roundtrip.test.ts +213 -0
  192. package/src/__tests__/animation-graph-serialize.unit.test.ts +171 -0
  193. package/src/__tests__/append-injection.test.ts +1 -1
  194. package/src/__tests__/asset-brand-and-name-retirement.test.ts +102 -0
  195. package/src/__tests__/asset-error-exhaustive.test-d.ts +62 -0
  196. package/src/__tests__/asset-registry-guid-reverse.test.ts +575 -0
  197. package/src/__tests__/asset-registry-hdr-equirect.test.ts +78 -0
  198. package/src/__tests__/asset-registry-mesh-pack-payload.dawn.test.ts +232 -0
  199. package/src/__tests__/asset-registry-mounts.test.ts +806 -0
  200. package/src/__tests__/asset-registry.browser.test.ts +81 -0
  201. package/src/__tests__/asset-registry.dawn.test.ts +94 -0
  202. package/src/__tests__/asset-registry.listCatalog.test.ts +170 -0
  203. package/src/__tests__/asset-registry.mesh-bin.test.ts +316 -0
  204. package/src/__tests__/asset-registry.pack-cache.test.ts +969 -0
  205. package/src/__tests__/asset-registry.raw-container-failfast.test.ts +225 -0
  206. package/src/__tests__/asset-registry.recursive.spec.ts +1397 -0
  207. package/src/__tests__/asset-registry.unit.test.ts +1030 -0
  208. package/src/__tests__/asset.unit.test.ts +7107 -0
  209. package/src/__tests__/audio-load-by-guid.unit.test.ts +126 -0
  210. package/src/__tests__/backend-selection.integration.test.ts +11 -0
  211. package/src/__tests__/basis-catalog-dispatch.integration.test.ts +320 -0
  212. package/src/__tests__/bind-group-cache-keying.test.ts +4 -4
  213. package/src/__tests__/block-upload-math.unit.test.ts +2 -2
  214. package/src/__tests__/builtin-asset-registry.unit.test.ts +112 -0
  215. package/src/__tests__/builtin-shader-register-e2e.test.ts +1 -1
  216. package/src/__tests__/cache-false-eviction.test.ts +2 -1
  217. package/src/__tests__/cache-isolation-matrix.test.ts +2 -1
  218. package/src/__tests__/camera-clear-snapshot-equivalence.unit.test.ts +5 -6
  219. package/src/__tests__/clamp-to-last.e2e.browser.test.ts +29 -19
  220. package/src/__tests__/collect-scene-asset.test.ts +49 -52
  221. package/src/__tests__/collect-scene-mount-collapse.test.ts +391 -0
  222. package/src/__tests__/collect-subtree.unit.test.ts +1 -2
  223. package/src/__tests__/collect-transient-children-absent.test.ts +24 -10
  224. package/src/__tests__/collect-transient-roundtrip.test.ts +44 -20
  225. package/src/__tests__/collect-transient-skip.test.ts +24 -13
  226. package/src/__tests__/components.test-d.ts +1 -6
  227. package/src/__tests__/components.unit.test.ts +20 -19
  228. package/src/__tests__/composite-skybox-cross-world.browser.test.ts +59 -27
  229. package/src/__tests__/compressed-texture-physical-extent.integration.test.ts +139 -0
  230. package/src/__tests__/create-renderer-assembly.integration.test.ts +42 -29
  231. package/src/__tests__/createRenderer-dispose.test.ts +35 -402
  232. package/src/__tests__/createRenderer.browser-no-webgpu.test.ts +25 -30
  233. package/src/__tests__/createRenderer.unit.test.ts +1 -1
  234. package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +27 -63
  235. package/src/__tests__/dawn/ibl-precompute-readback.dawn.test.ts +56 -47
  236. package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +49 -29
  237. package/src/__tests__/dawn/instances-shadow.dawn.test.ts +26 -15
  238. package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +13 -14
  239. package/src/__tests__/dawn/material-alpha.dawn.test.ts +23 -31
  240. package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +0 -18
  241. package/src/__tests__/dawn/{mesh-update.dawn.test.ts → mesh-update-dawn.test.ts} +42 -134
  242. package/src/__tests__/dawn/mipmap-srgb-linear.dawn.test.ts +14 -7
  243. package/src/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.ts +16 -28
  244. package/src/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.ts +23 -39
  245. package/src/__tests__/dawn/upload-texture.dawn.test.ts +198 -0
  246. package/src/__tests__/dawn/user-handle-mesh-render.dawn.test.ts +12 -14
  247. package/src/__tests__/dawn/user-mesh-upload.dawn.test.ts +27 -22
  248. package/src/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.ts +25 -28
  249. package/src/__tests__/dawn/zero-manifest-ready.dawn.test.ts +10 -11
  250. package/src/__tests__/demo-sortscope-migration.unit.test.ts +5 -5
  251. package/src/__tests__/derive-bgl-integration.test.ts +34 -44
  252. package/src/__tests__/derive-render-data-skin.unit.test.ts +1 -1
  253. package/src/__tests__/draw-published.ts +11 -4
  254. package/src/__tests__/dynamic-texture-store.unit.test.ts +190 -0
  255. package/src/__tests__/equirect-bc6h.integration.test.ts +144 -21
  256. package/src/__tests__/errors.unit.test.ts +1203 -0
  257. package/src/__tests__/extract-frames-graceful-degradation.test.ts +3 -7
  258. package/src/__tests__/extract-frames-merge.test.ts +35 -22
  259. package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +5 -16
  260. package/src/__tests__/extract-skin-mismatch.unit.test.ts +322 -0
  261. package/src/__tests__/fetch-binary-decompress.test.ts +356 -0
  262. package/src/__tests__/four-path-compression.integration.test.ts +395 -0
  263. package/src/__tests__/frame-targets-shadow-regression.unit.test.ts +1 -1
  264. package/src/__tests__/fullscreen-feature-host.dawn.test.ts +80 -0
  265. package/src/__tests__/fullscreen-post-bgl-depth.test.ts +4 -2
  266. package/src/__tests__/fullscreen-post-depth-params-arity.test.ts +3 -3
  267. package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +39 -23
  268. package/src/__tests__/fullscreen-post-process-pass.unit.test.ts +4 -2
  269. package/src/__tests__/fxaa-pixel-diff.dawn.test.ts +28 -17
  270. package/src/__tests__/fxaa-validation-and-resize.dawn.test.ts +29 -18
  271. package/src/__tests__/fxaa-zero-overhead.dawn.test.ts +16 -12
  272. package/src/__tests__/geometry.unit.test.ts +525 -159
  273. package/src/__tests__/glyph-tilemap-worldid.test.ts +1 -1
  274. package/src/__tests__/gpu-resource-cow-survivor.test.ts +6 -4
  275. package/src/__tests__/guid-for-asset.unit.test.ts +102 -0
  276. package/src/__tests__/handle-migration.test.ts +136 -0
  277. package/src/__tests__/helpers/register-runtime-components.ts +4 -2
  278. package/src/__tests__/helpers/register-scene-components.ts +1 -1
  279. package/src/__tests__/host-custom-kind-contract.test-d.ts +47 -0
  280. package/src/__tests__/host-custom-kind-contract.test.ts +578 -0
  281. package/src/__tests__/inspect-name.test.ts +139 -0
  282. package/src/__tests__/instances.test-d.ts +1 -1
  283. package/src/__tests__/instantiate-mount-deferred-wiring.test.ts +112 -0
  284. package/src/__tests__/light-casters-9-light.browser.test.ts +73 -76
  285. package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +7 -10
  286. package/src/__tests__/light-snapshot.test-d.ts +2 -2
  287. package/src/__tests__/lights-vec-negative.unit.test.ts +1 -1
  288. package/src/__tests__/lights.unit.test.ts +16 -500
  289. package/src/__tests__/loadbyguid-payload.unit.test.ts +117 -0
  290. package/src/__tests__/loadbyguid-texture-intern.unit.test.ts +213 -0
  291. package/src/__tests__/loader-extract-graceful.test.ts +146 -0
  292. package/src/__tests__/loader-name-survival.test.ts +213 -0
  293. package/src/__tests__/m3-vec-negative.unit.test.ts +3 -2
  294. package/src/__tests__/material-texture-uv-scale.unit.test.ts +101 -31
  295. package/src/__tests__/materials.unit.test.ts +10 -27
  296. package/src/__tests__/mesh-bin-contract.test.ts +28 -0
  297. package/src/__tests__/mesh-bin-skin-roundtrip.unit.test.ts +149 -0
  298. package/src/__tests__/mesh-bin.test.ts +38 -0
  299. package/src/__tests__/mesh-loader-skin-contract.unit.test.ts +120 -0
  300. package/src/__tests__/mesh-ssbo-grow.unit.test.ts +3 -3
  301. package/src/__tests__/mip-gate.unit.test.ts +1 -1
  302. package/src/__tests__/msaa-sprite-pixel-diff.dawn.test.ts +29 -68
  303. package/src/__tests__/new-kind-refs-contract.test.ts +132 -0
  304. package/src/__tests__/node-shims.d.ts +4 -6
  305. package/src/__tests__/package-promotion.test.ts +88 -0
  306. package/src/__tests__/package-rename.test.ts +103 -0
  307. package/src/__tests__/pass-selector.unit.test.ts +2 -2
  308. package/src/__tests__/pbr-pipeline.unit.test.ts +14 -21
  309. package/src/__tests__/pipeline-builder-msaa.unit.test.ts +6 -9
  310. package/src/__tests__/pipeline-cache-keying.unit.test.ts +6 -9
  311. package/src/__tests__/pipeline-spec.test.ts +16 -177
  312. package/src/__tests__/pipeline.unit.test.ts +154 -1693
  313. package/src/__tests__/point-light-shadow.dawn.test.ts +33 -42
  314. package/src/__tests__/point-light-shadow.unit.test.ts +19 -60
  315. package/src/__tests__/post-process-error-codes.unit.test.ts +4 -1
  316. package/src/__tests__/post-process-params-component.unit.test.ts +1 -1
  317. package/src/__tests__/post-process-params-extract.unit.test.ts +2 -5
  318. package/src/__tests__/postprocess-camera-consistency.test.ts +4 -7
  319. package/src/__tests__/profiler-assembly.integration.test.ts +1 -1
  320. package/src/__tests__/propagate-transforms.dawn.test.ts +12 -11
  321. package/src/__tests__/record-worldid-isolation.test.ts +7 -29
  322. package/src/__tests__/recover-error-exhaustive.test-d.ts +1 -1
  323. package/src/__tests__/render-error-exhaustive.test-d.ts +81 -71
  324. package/src/__tests__/render-feature-assembly.test-d.ts +20 -9
  325. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +8 -6
  326. package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +60 -558
  327. package/src/__tests__/render-feature-prepared-graphics.dawn.test.ts +57 -544
  328. package/src/__tests__/render-feature-prepared-graphics.fixture.ts +104 -0
  329. package/src/__tests__/render-feature-prepared-graphics.integration.test.ts +40 -248
  330. package/src/__tests__/render-feature-prepared-graphics.regression.integration.test.ts +83 -340
  331. package/src/__tests__/render-feature-recover.integration.test.ts +9 -49
  332. package/src/__tests__/render-feature-runtime-surface.test-d.ts +17 -20
  333. package/src/__tests__/render-schema-consumer.integration.test.ts +20 -13
  334. package/src/__tests__/render-schema-owner-boundary.unit.test.ts +2 -6
  335. package/src/__tests__/render-system-cross-world-overlay-queue.test.ts +5 -5
  336. package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +16 -31
  337. package/src/__tests__/render-system-extract.test.ts +36 -51
  338. package/src/__tests__/render-system-extract.unit.test.ts +360 -0
  339. package/src/__tests__/render-system-fold-bucket.unit.test.ts +3 -5
  340. package/src/__tests__/render-system-fold-fallback.unit.test.ts +6 -3
  341. package/src/__tests__/render-system-fold-material.unit.test.ts +3 -5
  342. package/src/__tests__/render-system-fold-metrics.unit.test.ts +5 -5
  343. package/src/__tests__/render-system-fold-modegate.unit.test.ts +6 -6
  344. package/src/__tests__/render-system-fold.dawn.test.ts +7 -5
  345. package/src/__tests__/render-system-mega.test.ts +292 -190
  346. package/src/__tests__/render-system-owner-split-contract.test.ts +10 -32
  347. package/src/__tests__/render-system-record-multi-material-textureview.test.ts +59 -45
  348. package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +23 -29
  349. package/src/__tests__/render-system-record.test.ts +398 -235
  350. package/src/__tests__/render-system-record.unit.test.ts +25 -26
  351. package/src/__tests__/render-system-skin-bg.unit.test.ts +8 -12
  352. package/src/__tests__/renderer-consumer.test-d.ts +16 -3
  353. package/src/__tests__/renderer-health.unit.test.ts +26 -916
  354. package/src/__tests__/renderer-lifecycle.integration.test.ts +19 -6
  355. package/src/__tests__/renderer-recover.unit.test.ts +49 -1069
  356. package/src/__tests__/renderer-result.test-d.ts +19 -9
  357. package/src/__tests__/renderer-surface.unit.test.ts +3 -5
  358. package/src/__tests__/renderer-test-utils.ts +56 -0
  359. package/src/__tests__/renderer.test-d.ts +59 -0
  360. package/src/__tests__/resolve-asset-handle-err.test.ts +111 -0
  361. package/src/__tests__/resolve-asset-handle.unit.test.ts +64 -0
  362. package/src/__tests__/resolve-depth-only-view.test.ts +1 -1
  363. package/src/__tests__/resolveName-fallback.test.ts +64 -0
  364. package/src/__tests__/resolveName-null-package.test.ts +38 -0
  365. package/src/__tests__/resolveName-unified-entry.test.ts +65 -0
  366. package/src/__tests__/resolveName.test.ts +64 -0
  367. package/src/__tests__/rhi-null-command-flow.unit.test.ts +43 -261
  368. package/src/__tests__/rhi-null-renderer-lifecycle.unit.test.ts +41 -169
  369. package/src/__tests__/roots-to-scene-asset.test.ts +199 -93
  370. package/src/__tests__/roundtrip-primitive.test.ts +351 -0
  371. package/src/__tests__/scene-bare-guid-refs-instantiate.test.ts +123 -0
  372. package/src/__tests__/scene-equirect-roundtrip.test.ts +103 -16
  373. package/src/__tests__/scene-instance-authoring.integration.test.ts +8 -0
  374. package/src/__tests__/scene-instance-bridge.integration.test.ts +1 -1
  375. package/src/__tests__/scene-instance-component.test.ts +1 -1
  376. package/src/__tests__/scene-mount-fixed-point.test.ts +257 -0
  377. package/src/__tests__/scene-mount-roundtrip.test.ts +987 -0
  378. package/src/__tests__/scene-mount-wrapper-roundtrip.test.ts +202 -0
  379. package/src/__tests__/scene-sugar-instantiate.test.ts +324 -0
  380. package/src/__tests__/serialize-mounts-roundtrip.test.ts +533 -0
  381. package/src/__tests__/serialize-scene-asset.test.ts +219 -22
  382. package/src/__tests__/shadow-caster-empty-schema.test.ts +3 -3
  383. package/src/__tests__/shadow-csm-cascade-loadop.test.ts +37 -17
  384. package/src/__tests__/shadow-csm-component.test.ts +3 -5
  385. package/src/__tests__/shadow-csm-extract.test.ts +2 -100
  386. package/src/__tests__/shadow-csm-orthoz.test.ts +2 -16
  387. package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +19 -14
  388. package/src/__tests__/shadow-csm-tile-consistency.test.ts +32 -26
  389. package/src/__tests__/shadow-csm-ubo.dawn.test.ts +8 -49
  390. package/src/__tests__/shadow-csm-ubo.test.ts +3 -25
  391. package/src/__tests__/shadow-csm-viewport.browser.test.ts +1 -1
  392. package/src/__tests__/shadow-fields-observable.dawn.test.ts +67 -56
  393. package/src/__tests__/shadow-m1.dawn.test.ts +8 -9
  394. package/src/__tests__/shadow-mesh-ssbo-order.test.ts +11 -27
  395. package/src/__tests__/skin-errors.unit.test.ts +1 -1
  396. package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +7 -5
  397. package/src/__tests__/skylight-lazy-projection.test.ts +36 -15
  398. package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +5 -5
  399. package/src/__tests__/sprite-cullmode-flip.dawn.test.ts +47 -64
  400. package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +12 -11
  401. package/src/__tests__/sprite-lit-extract-branch.test.ts +1 -1
  402. package/src/__tests__/sprite-lit-pipeline-cache-key.test.ts +1 -1
  403. package/src/__tests__/ssao-bgl.test.ts +16 -9
  404. package/src/__tests__/ssao-buffers.test.ts +2 -2
  405. package/src/__tests__/ssao-data.test.ts +2 -2
  406. package/src/__tests__/ssao-errors.test.ts +1 -1
  407. package/src/__tests__/ssao-passes.test.ts +64 -392
  408. package/src/__tests__/ssao-pipelines.test.ts +1 -1
  409. package/src/__tests__/ssao-uniform-layout.test.ts +8 -6
  410. package/src/__tests__/stencil-outline-pixel.dawn.test.ts +25 -17
  411. package/src/__tests__/swap-chain-format.unit.test.ts +5 -7
  412. package/src/__tests__/systems.unit.test.ts +536 -1326
  413. package/src/__tests__/template-game-default-api-contract.test.ts +362 -0
  414. package/src/__tests__/text.unit.test.ts +56 -33
  415. package/src/__tests__/tilemap-childed-despawn.test.ts +8 -14
  416. package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +8 -12
  417. package/src/__tests__/tilemap-chunk-extract.propagate-order.test.ts +2 -1
  418. package/src/__tests__/tilemap-chunk-extract.test.ts +13 -17
  419. package/src/__tests__/tilemap-dirty-rebuild.test.ts +7 -11
  420. package/src/__tests__/tilemap-material-cache.test.ts +8 -13
  421. package/src/__tests__/tilemap-multi-atlas.test.ts +12 -32
  422. package/src/__tests__/tilemap-owner-boundary.unit.test.ts +5 -2
  423. package/src/__tests__/tilemap-region-pack.test.ts +8 -12
  424. package/src/__tests__/tilemap-spawn-flip-pivot.test.ts +8 -12
  425. package/src/__tests__/tilemap-uv-inset.test.ts +11 -14
  426. package/src/__tests__/tilemap-validate.test.ts +1 -1
  427. package/src/__tests__/tileset-asset-validate.test.ts +638 -0
  428. package/src/__tests__/transcode-fallback.unit.test.ts +207 -0
  429. package/src/__tests__/transform-hierarchy-pixel-diff.dawn.test.ts +36 -28
  430. package/src/__tests__/transient-fields-collect.test.ts +28 -21
  431. package/src/__tests__/transient-runtime-behavior.test.ts +227 -0
  432. package/src/__tests__/transparent-sort-tilemap-sprite-interleave.test.ts +4 -4
  433. package/src/__tests__/variant-selection.unit.test.ts +1 -1
  434. package/src/__tests__/video-extract-bindgroup.dawn.test.ts +89 -136
  435. package/src/__tests__/video-loader-consumption.test.ts +86 -0
  436. package/src/__tests__/video-loader-smoke.dawn.test.ts +60 -0
  437. package/src/__tests__/view-ubo-layout.browser.test.ts +0 -22
  438. package/src/__tests__/world-entity-key.test.ts +1 -1
  439. package/src/__tests__/world-scene-despawn.test.ts +1 -1
  440. package/src/__tests__/world-scene-instantiate.test.ts +2 -36
  441. package/src/__tests__/world-scene-nested.test.ts +1 -1
  442. package/src/__tests__/world-scene-override.test.ts +1 -1
  443. package/src/backend-selection.ts +69 -0
  444. package/src/collect-scene-asset.ts +28 -23
  445. package/src/components/__tests__/camera.test-d.ts +1 -1
  446. package/src/components/__tests__/camera.test.ts +1 -1
  447. package/src/components/__tests__/sprite-animation.test-d.ts +2 -2
  448. package/src/components/__tests__/tile-layer.test-d.ts +1 -1
  449. package/src/components/__tests__/tile-layer.unit.test.ts +2 -2
  450. package/src/createRenderer.ts +24 -36
  451. package/src/errors/environment.ts +1 -1
  452. package/src/index.ts +47 -113
  453. package/src/renderer-host.ts +33 -0
  454. package/src/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.ts +1 -1
  455. package/src/scene-instances/index.ts +4 -0
  456. package/src/scene-utils/mount-override-fold.ts +3 -7
  457. package/src/systems/__tests__/transparent-sort.bench.ts +3 -3
  458. package/src/systems/sprite-animation-tick.ts +1 -1
  459. package/src/systems/transparent-sort.ts +38 -38
  460. package/src/tilemap-register-validate.ts +4 -4
  461. package/dist/__tests__/bind-group-cache-binding.test.d.ts +0 -2
  462. package/dist/__tests__/bind-group-cache-binding.test.d.ts.map +0 -1
  463. package/dist/__tests__/bind-group-cache-frame.test.d.ts +0 -2
  464. package/dist/__tests__/bind-group-cache-frame.test.d.ts.map +0 -1
  465. package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts +0 -2
  466. package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts.map +0 -1
  467. package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts +0 -2
  468. package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts.map +0 -1
  469. package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts +0 -2
  470. package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts.map +0 -1
  471. package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts +0 -2
  472. package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts.map +0 -1
  473. package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts +0 -2
  474. package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts.map +0 -1
  475. package/dist/__tests__/fog-producer-manifest.d.ts +0 -131
  476. package/dist/__tests__/fog-producer-manifest.d.ts.map +0 -1
  477. package/dist/__tests__/fog-producer-pixel-probe.d.ts +0 -42
  478. package/dist/__tests__/fog-producer-pixel-probe.d.ts.map +0 -1
  479. package/dist/__tests__/fog-producer-pixel.browser.test.d.ts +0 -2
  480. package/dist/__tests__/fog-producer-pixel.browser.test.d.ts.map +0 -1
  481. package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts +0 -2
  482. package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts.map +0 -1
  483. package/dist/__tests__/fog-producer-real-fixture.d.ts +0 -5
  484. package/dist/__tests__/fog-producer-real-fixture.d.ts.map +0 -1
  485. package/dist/__tests__/fog-producer-vfx-effect.d.ts +0 -3
  486. package/dist/__tests__/fog-producer-vfx-effect.d.ts.map +0 -1
  487. package/dist/__tests__/fog-scene-asset.integration.test.d.ts +0 -2
  488. package/dist/__tests__/fog-scene-asset.integration.test.d.ts.map +0 -1
  489. package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts +0 -2
  490. package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts.map +0 -1
  491. package/dist/__tests__/gpu-resource.test.d.ts +0 -2
  492. package/dist/__tests__/gpu-resource.test.d.ts.map +0 -1
  493. package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts +0 -2
  494. package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts.map +0 -1
  495. package/dist/__tests__/hdrp-buffers.unit.test.d.ts +0 -2
  496. package/dist/__tests__/hdrp-buffers.unit.test.d.ts.map +0 -1
  497. package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts +0 -2
  498. package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts.map +0 -1
  499. package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts +0 -2
  500. package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts.map +0 -1
  501. package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts +0 -2
  502. package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts.map +0 -1
  503. package/dist/__tests__/hdrp-ssao-boundary.test.d.ts +0 -2
  504. package/dist/__tests__/hdrp-ssao-boundary.test.d.ts.map +0 -1
  505. package/dist/__tests__/hdrp-ssao-falsification.test.d.ts +0 -2
  506. package/dist/__tests__/hdrp-ssao-falsification.test.d.ts.map +0 -1
  507. package/dist/__tests__/helpers/primitive-world.d.ts +0 -8
  508. package/dist/__tests__/helpers/primitive-world.d.ts.map +0 -1
  509. package/dist/__tests__/helpers/render-asset-port.d.ts +0 -15
  510. package/dist/__tests__/helpers/render-asset-port.d.ts.map +0 -1
  511. package/dist/__tests__/helpers/scene-asset-port.d.ts +0 -9
  512. package/dist/__tests__/helpers/scene-asset-port.d.ts.map +0 -1
  513. package/dist/__tests__/material-derived-coordinates.integration.test.d.ts +0 -2
  514. package/dist/__tests__/material-derived-coordinates.integration.test.d.ts.map +0 -1
  515. package/dist/__tests__/pipeline-layout-selection.test.d.ts +0 -2
  516. package/dist/__tests__/pipeline-layout-selection.test.d.ts.map +0 -1
  517. package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts +0 -2
  518. package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts.map +0 -1
  519. package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts +0 -2
  520. package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts.map +0 -1
  521. package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts +0 -2
  522. package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts.map +0 -1
  523. package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts +0 -2
  524. package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts.map +0 -1
  525. package/dist/__tests__/shadow-csm-caster-membership.test.d.ts +0 -2
  526. package/dist/__tests__/shadow-csm-caster-membership.test.d.ts.map +0 -1
  527. package/dist/__tests__/shadow-csm-pssm.test.d.ts +0 -2
  528. package/dist/__tests__/shadow-csm-pssm.test.d.ts.map +0 -1
  529. package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts +0 -2
  530. package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts.map +0 -1
  531. package/dist/__tests__/shadow-csm-viewport.test.d.ts +0 -2
  532. package/dist/__tests__/shadow-csm-viewport.test.d.ts.map +0 -1
  533. package/dist/__tests__/shadow-m2.dawn.test.d.ts +0 -2
  534. package/dist/__tests__/shadow-m2.dawn.test.d.ts.map +0 -1
  535. package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts +0 -2
  536. package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts.map +0 -1
  537. package/dist/__tests__/shadow-m3-calibrate.d.ts +0 -83
  538. package/dist/__tests__/shadow-m3-calibrate.d.ts.map +0 -1
  539. package/dist/__tests__/shadow-m3.dawn.test.d.ts +0 -2
  540. package/dist/__tests__/shadow-m3.dawn.test.d.ts.map +0 -1
  541. package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts +0 -2
  542. package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts.map +0 -1
  543. package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts +0 -2
  544. package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts.map +0 -1
  545. package/dist/__tests__/temporal-off-path.unit.test.d.ts +0 -2
  546. package/dist/__tests__/temporal-off-path.unit.test.d.ts.map +0 -1
  547. package/dist/__tests__/video-cache-regression.unit.test.d.ts +0 -2
  548. package/dist/__tests__/video-cache-regression.unit.test.d.ts.map +0 -1
  549. package/dist/asset-kind.d.ts +0 -4
  550. package/dist/asset-kind.d.ts.map +0 -1
  551. package/dist/errors/sprite-animation.d.ts +0 -3
  552. package/dist/errors/sprite-animation.d.ts.map +0 -1
  553. package/dist/scene-asset-port.d.ts +0 -17
  554. package/dist/scene-asset-port.d.ts.map +0 -1
  555. package/dist/scene-collect-errors.d.ts +0 -22
  556. package/dist/scene-collect-errors.d.ts.map +0 -1
  557. package/dist/shadow-m3-calibrate.d.ts +0 -40
  558. package/dist/shadow-m3-calibrate.d.ts.map +0 -1
  559. package/src/__tests__/bind-group-cache-binding.test.ts +0 -2513
  560. package/src/__tests__/bind-group-cache-frame.test.ts +0 -1511
  561. package/src/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.ts +0 -204
  562. package/src/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.ts +0 -297
  563. package/src/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.ts +0 -271
  564. package/src/__tests__/dispatch-fullscreen-pass-params.unit.test.ts +0 -321
  565. package/src/__tests__/fog-producer-manifest.ts +0 -162
  566. package/src/__tests__/fog-producer-pixel-probe.ts +0 -263
  567. package/src/__tests__/fog-producer-pixel.browser.test.ts +0 -26
  568. package/src/__tests__/fog-producer-pixel.dawn.test.ts +0 -55
  569. package/src/__tests__/fog-producer-real-fixture.ts +0 -805
  570. package/src/__tests__/fog-producer-vfx-effect.ts +0 -272
  571. package/src/__tests__/fog-scene-asset.integration.test.ts +0 -123
  572. package/src/__tests__/gpu-resource-store-cubemap-status.test.ts +0 -207
  573. package/src/__tests__/gpu-resource.test.ts +0 -1206
  574. package/src/__tests__/hdrp-bgl-slots.browser.test.ts +0 -50
  575. package/src/__tests__/hdrp-buffers.unit.test.ts +0 -70
  576. package/src/__tests__/hdrp-execute-filter.unit.test.ts +0 -200
  577. package/src/__tests__/hdrp-gbuffer-attachments.browser.test.ts +0 -64
  578. package/src/__tests__/hdrp-pipeline-asset-type.test-d.ts +0 -139
  579. package/src/__tests__/hdrp-ssao-boundary.test.ts +0 -237
  580. package/src/__tests__/hdrp-ssao-falsification.test.ts +0 -289
  581. package/src/__tests__/helpers/primitive-world.ts +0 -91
  582. package/src/__tests__/helpers/render-asset-port.ts +0 -65
  583. package/src/__tests__/helpers/scene-asset-port.ts +0 -23
  584. package/src/__tests__/material-derived-coordinates.integration.test.ts +0 -100
  585. package/src/__tests__/pipeline-layout-selection.test.ts +0 -298
  586. package/src/__tests__/post-process-reads-narrowing.test-d.ts +0 -52
  587. package/src/__tests__/post-process-register-roundtrip.dawn.test.ts +0 -230
  588. package/src/__tests__/render-feature-zero-feature.browser.test.ts +0 -152
  589. package/src/__tests__/render-pipeline-trivial.dawn.test.ts +0 -525
  590. package/src/__tests__/shadow-csm-caster-membership.test.ts +0 -232
  591. package/src/__tests__/shadow-csm-pssm.test.ts +0 -142
  592. package/src/__tests__/shadow-csm-temporal.browser.test.ts +0 -145
  593. package/src/__tests__/shadow-csm-viewport.test.ts +0 -74
  594. package/src/__tests__/shadow-m2.dawn.test.ts +0 -394
  595. package/src/__tests__/shadow-m3-calibrate-run.dawn.test.ts +0 -248
  596. package/src/__tests__/shadow-m3-calibrate.ts +0 -203
  597. package/src/__tests__/shadow-m3.dawn.test.ts +0 -288
  598. package/src/__tests__/shadow-probe-control-flow.dawn.test.ts +0 -264
  599. package/src/__tests__/shadow-quality-metrics.dawn.test.ts +0 -324
  600. package/src/__tests__/temporal-off-path.unit.test.ts +0 -69
  601. package/src/__tests__/video-cache-regression.unit.test.ts +0 -186
  602. package/src/asset-kind.ts +0 -7
  603. package/src/errors/sprite-animation.ts +0 -5
  604. package/src/scene-asset-port.ts +0 -32
  605. package/src/scene-collect-errors.ts +0 -30
  606. package/src/shadow-m3-calibrate.ts +0 -171
@@ -1,23 +0,0 @@
1
- import { AssetGuid } from '@forgeax/engine-pack/guid';
2
- import type { Asset } from '@forgeax/engine-types';
3
- import { createSceneAssetPort, type SceneAssetPort } from '../../scene-asset-port';
4
-
5
- export interface TestSceneAssetStore {
6
- readonly port: SceneAssetPort;
7
- add(guid: string | AssetGuid, asset: Asset): void;
8
- }
9
-
10
- function guidKey(guid: string | AssetGuid): string {
11
- return typeof guid === 'string' ? guid : AssetGuid.format(guid);
12
- }
13
-
14
- export function createTestSceneAssetStore(): TestSceneAssetStore {
15
- const guids = new WeakMap<object, string>();
16
- const port = createSceneAssetPort((asset) => guids.get(asset));
17
- return {
18
- port,
19
- add(guid, asset) {
20
- guids.set(asset, guidKey(guid));
21
- },
22
- };
23
- }
@@ -1,100 +0,0 @@
1
- import { writeDerivedMaterialPayload } from '@forgeax/engine-render/internal';
2
- import { describe, expect, it } from 'vitest';
3
-
4
- const schema = [
5
- { name: 'albedo', type: 'texture2d' as const },
6
- { name: 'normal', type: 'texture2d' as const },
7
- ];
8
-
9
- describe('material texture coordinate producer to record', () => {
10
- it('preserves odd physical extent correction and authored transforms', () => {
11
- const result = writeDerivedMaterialPayload({
12
- material: 'coordinates-a',
13
- schema,
14
- values: {},
15
- coordinates: {
16
- albedo: {
17
- set: 2,
18
- transform: { offset: [0.125, 0.25], scale: [2, 3], rotation: 0.5 },
19
- physicalUvScale: [2085 / 2088, 1573 / 1576],
20
- },
21
- normal: {
22
- set: 4,
23
- transform: { offset: [0.75, 0.5], scale: [4, 5], rotation: -0.25 },
24
- physicalUvScale: [7 / 12, 8 / 12],
25
- },
26
- },
27
- });
28
- expect(result.ok).toBe(true);
29
- if (!result.ok) return;
30
- const values = new Float32Array(result.value.buffer);
31
- expect(Array.from(values.slice(0, 8))).toEqual(
32
- Array.from(new Float32Array([0.125, 0.25, 2, 3, 2, 0.5, 2085 / 2088, 1573 / 1576])),
33
- );
34
- expect(Array.from(values.slice(8, 16))).toEqual(
35
- Array.from(new Float32Array([0.75, 0.5, 4, 5, 4, -0.25, 7 / 12, 8 / 12])),
36
- );
37
- });
38
-
39
- it('resolves omitted coordinates and rejects non-finite coordinate metadata', () => {
40
- const missing = writeDerivedMaterialPayload({
41
- material: 'slot-missing',
42
- schema,
43
- values: {},
44
- coordinates: { albedo: { set: 0, physicalUvScale: [1, 1] } },
45
- });
46
- expect(missing.ok).toBe(true);
47
- if (missing.ok) {
48
- const values = new Float32Array(missing.value.buffer);
49
- expect(Array.from(values.slice(8, 16))).toEqual([0, 0, 1, 1, 0, 0, 1, 1]);
50
- }
51
-
52
- const nonFinite = writeDerivedMaterialPayload({
53
- material: 'slot-nan',
54
- schema,
55
- values: {},
56
- coordinates: {
57
- albedo: {
58
- set: 0,
59
- transform: { offset: [Number.NaN, 0], scale: [1, 1], rotation: 0 },
60
- physicalUvScale: [1, 1],
61
- },
62
- normal: {
63
- set: 0,
64
- transform: { offset: [0, 0], scale: [1, 1], rotation: 0 },
65
- physicalUvScale: [1, 1],
66
- },
67
- },
68
- });
69
- expect(nonFinite.ok).toBe(false);
70
- if (!nonFinite.ok && nonFinite.error.code === 'material-texture-coordinate-invalid') {
71
- expect(nonFinite.error.detail.reason).toBe('non-finite');
72
- }
73
- });
74
-
75
- it('keeps resource and coordinate ownership isolated when slot order changes', () => {
76
- const first = writeDerivedMaterialPayload({
77
- material: 'slot-a',
78
- schema,
79
- values: {},
80
- coordinates: {
81
- albedo: { set: 1, physicalUvScale: [0.5, 0.5] },
82
- normal: { set: 2, physicalUvScale: [0.75, 0.75] },
83
- },
84
- });
85
- const second = writeDerivedMaterialPayload({
86
- material: 'slot-b',
87
- schema: [...schema].reverse(),
88
- values: {},
89
- coordinates: {
90
- normal: { set: 9, physicalUvScale: [0.25, 0.25] },
91
- albedo: { set: 8, physicalUvScale: [0.125, 0.125] },
92
- },
93
- });
94
- expect(first.ok).toBe(true);
95
- expect(second.ok).toBe(true);
96
- if (!first.ok || !second.ok) return;
97
- expect(new Float32Array(first.value.buffer)[4]).toBe(1);
98
- expect(new Float32Array(second.value.buffer)[4]).toBe(9);
99
- });
100
- });
@@ -1,298 +0,0 @@
1
- // pipeline-layout-selection.test.ts
2
- // feat-20260609-hdrp-cluster-fragment-ggx M4.5 / w35 (test, TDD red phase).
3
- //
4
- // Verifies that the per-variant PipelineLayout selector correctly picks
5
- // `hdrpPbrPipelineLayout` for HDRP variants (CLUSTER_FORWARD_AVAILABLE=true
6
- // or canonical '' all-true) and `pbrPipelineLayout` for URP variants
7
- // (CLUSTER_FORWARD_AVAILABLE=false / undefined).
8
- //
9
- // Anchors:
10
- // - plan-strategy D-10: per-variant PipelineLayout (option A) -- boot-time
11
- // build a second `hdrpPbrPipelineLayout` with HDRP 7-slot BGL; selector
12
- // dispatches by `variantSet`.
13
- // - plan-strategy D-11: variantSet `''` is canonical all-true (when the
14
- // shader declares CLUSTER_FORWARD_AVAILABLE axis) -- HDRP path.
15
- // - implement-decisions section 3: hotfix-1 left URP-side standard pipeline
16
- // using the 1-slot pbr-mesh-array BGL, mismatching HDRP 7-slot BGL.
17
- //
18
- // Mocks:
19
- // PipelineLayout is an opaque RHI handle; we use sentinel objects to test
20
- // reference identity (the selector returns one of two layouts).
21
- //
22
- // TDD red phase (w35): `selectPipelineLayoutForVariant` does NOT exist and
23
- // pipelineState carries no `hdrpPbrPipelineLayout` field yet. Test imports
24
- // will fail until w36 lands the boot-time build + w37 lands the selector.
25
-
26
- import {
27
- resolveMaterialShaderVariantSet,
28
- selectPipelineLayoutForVariant,
29
- } from '@forgeax/engine-render/internal';
30
- import type { PipelineLayout } from '@forgeax/engine-rhi';
31
- import { describe, expect, it } from 'vitest';
32
-
33
- // Sentinel handles -- structurally `unknown` opaque tokens.
34
- const URP_LAYOUT = { __brand: 'urp' } as unknown as PipelineLayout;
35
- const HDRP_LAYOUT = { __brand: 'hdrp' } as unknown as PipelineLayout;
36
- // bug-20260611-skin-pipeline-layout: selector state shape now includes
37
- // `pbrSkinPipelineLayout`. Pre-existing HDRP/URP routing tests pass null
38
- // for the skin slot to keep their behaviour byte-identical to pre-bug;
39
- // dedicated skin-routing cases live below in their own describe block.
40
- const SKIN_LAYOUT = { __brand: 'skin' } as unknown as PipelineLayout;
41
-
42
- const FULL_STATE = {
43
- pbrPipelineLayout: URP_LAYOUT,
44
- hdrpPbrPipelineLayout: HDRP_LAYOUT,
45
- pbrSkinPipelineLayout: null,
46
- };
47
-
48
- describe('selectPipelineLayoutForVariant -- HDRP vs URP routing (M4.5 / w35)', () => {
49
- it('(a) HDRP variantSet `CLUSTER_FORWARD_AVAILABLE=true+...` -> hdrpPbrPipelineLayout', () => {
50
- const layout = selectPipelineLayoutForVariant(
51
- FULL_STATE,
52
- 'CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true',
53
- );
54
- expect(layout).toBe(HDRP_LAYOUT);
55
- });
56
-
57
- it("(a) HDRP variantSet '' (canonical all-true) -> hdrpPbrPipelineLayout", () => {
58
- // Per D-11: '' is the canonical all-true variant key -- equivalent to
59
- // explicit `CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true`
60
- // when the shader declares both axes. boot-time registers the HDRP-active
61
- // entry under '' (createRenderer.ts:2483-2485), so the selector must
62
- // route '' to the HDRP layout.
63
- const layout = selectPipelineLayoutForVariant(FULL_STATE, '');
64
- expect(layout).toBe(HDRP_LAYOUT);
65
- });
66
-
67
- it("(b) URP variantSet `CLUSTER_FORWARD_AVAILABLE=false+...' -> pbrPipelineLayout", () => {
68
- const layout = selectPipelineLayoutForVariant(
69
- FULL_STATE,
70
- 'CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true',
71
- );
72
- expect(layout).toBe(URP_LAYOUT);
73
- });
74
-
75
- it('(b) URP variantSet without CLUSTER_FORWARD_AVAILABLE axis -> pbrPipelineLayout', () => {
76
- // STORAGE_BUFFER_AVAILABLE-only variant (shader without the cluster axis
77
- // declared). Selector must fall back to pbrPipelineLayout because the
78
- // entry was not registered as HDRP-active.
79
- const layout = selectPipelineLayoutForVariant(FULL_STATE, 'STORAGE_BUFFER_AVAILABLE=true');
80
- expect(layout).toBe(URP_LAYOUT);
81
- });
82
-
83
- it('(c) variantSet undefined -> pbrPipelineLayout (backward-compat default)', () => {
84
- const layout = selectPipelineLayoutForVariant(FULL_STATE, undefined);
85
- expect(layout).toBe(URP_LAYOUT);
86
- });
87
-
88
- it('null pipelineState -> null (Camera-only / empty-manifest path)', () => {
89
- expect(selectPipelineLayoutForVariant(null, '')).toBeNull();
90
- expect(selectPipelineLayoutForVariant(null, undefined)).toBeNull();
91
- expect(
92
- selectPipelineLayoutForVariant(
93
- null,
94
- 'CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true',
95
- ),
96
- ).toBeNull();
97
- });
98
-
99
- it('hdrpPbrPipelineLayout null but pbrPipelineLayout non-null -> graceful URP fallback for HDRP variant', () => {
100
- // When manifest has the cluster axis but boot-time HDRP layout build
101
- // failed (e.g., storage buffer not capable), HDRP variant falls back to
102
- // URP layout instead of returning null. This avoids hard-disabling the
103
- // PSO build path; the WGSL itself will be the URP variant via
104
- // findVariantByKey resolution upstream.
105
- const partial = {
106
- pbrPipelineLayout: URP_LAYOUT,
107
- hdrpPbrPipelineLayout: null,
108
- pbrSkinPipelineLayout: null,
109
- };
110
- expect(selectPipelineLayoutForVariant(partial, '')).toBe(URP_LAYOUT);
111
- expect(
112
- selectPipelineLayoutForVariant(
113
- partial,
114
- 'CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true',
115
- ),
116
- ).toBe(URP_LAYOUT);
117
- });
118
-
119
- it('pbrPipelineLayout null -> null (URP variant has no fallback)', () => {
120
- const partial = {
121
- pbrPipelineLayout: null,
122
- hdrpPbrPipelineLayout: HDRP_LAYOUT,
123
- pbrSkinPipelineLayout: null,
124
- };
125
- expect(selectPipelineLayoutForVariant(partial, undefined)).toBeNull();
126
- expect(
127
- selectPipelineLayoutForVariant(
128
- partial,
129
- 'CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true',
130
- ),
131
- ).toBeNull();
132
- });
133
- });
134
-
135
- // bug-20260611-skin-pipeline-layout-mesh-array-bgl-2bindings:
136
- // dedicated tests for the LayoutKind='pbr-skin' branch + grep gate.
137
- describe('selectPipelineLayoutForVariant -- skin LayoutKind routing (bug-20260611)', () => {
138
- it('(a) layoutKind=pbr-skin -> pbrSkinPipelineLayout', () => {
139
- const state = {
140
- pbrPipelineLayout: URP_LAYOUT,
141
- hdrpPbrPipelineLayout: HDRP_LAYOUT,
142
- pbrSkinPipelineLayout: SKIN_LAYOUT,
143
- };
144
- expect(selectPipelineLayoutForVariant(state, undefined, 'pbr-skin')).toBe(SKIN_LAYOUT);
145
- });
146
-
147
- it('(b) layoutKind=pbr-skin + variantSet="" -> pbrSkinPipelineLayout (skin overrides HDRP)', () => {
148
- // HDRP × skin is OOS-1; skin routing wins. Tests the precedence ordering.
149
- const state = {
150
- pbrPipelineLayout: URP_LAYOUT,
151
- hdrpPbrPipelineLayout: HDRP_LAYOUT,
152
- pbrSkinPipelineLayout: SKIN_LAYOUT,
153
- };
154
- expect(selectPipelineLayoutForVariant(state, '', 'pbr-skin')).toBe(SKIN_LAYOUT);
155
- });
156
-
157
- it('(c) layoutKind=pbr-skin + pbrSkinPipelineLayout=null -> null (charter P3 explicit fail, AC-10)', () => {
158
- // Explicit failure -- no silent fallback to URP layout. Mirrors memory
159
- // anchor `hdrp-active-must-not-fallback-to-urp-pipeline`.
160
- const state = {
161
- pbrPipelineLayout: URP_LAYOUT,
162
- hdrpPbrPipelineLayout: HDRP_LAYOUT,
163
- pbrSkinPipelineLayout: null,
164
- };
165
- expect(selectPipelineLayoutForVariant(state, undefined, 'pbr-skin')).toBeNull();
166
- });
167
-
168
- it('(d) layoutKind=undefined + skin layout present -> still URP/HDRP path (back-compat)', () => {
169
- // Existing PBR/HDRP callers (no layoutKind argument) MUST NOT pick the
170
- // skin layout. AC-08 no-collateral.
171
- const state = {
172
- pbrPipelineLayout: URP_LAYOUT,
173
- hdrpPbrPipelineLayout: HDRP_LAYOUT,
174
- pbrSkinPipelineLayout: SKIN_LAYOUT,
175
- };
176
- expect(selectPipelineLayoutForVariant(state, undefined)).toBe(URP_LAYOUT);
177
- expect(selectPipelineLayoutForVariant(state, '')).toBe(HDRP_LAYOUT);
178
- });
179
- });
180
-
181
- describe('resolveMaterialShaderVariantSet -- backend capability routing', () => {
182
- const pbrVariants = [
183
- { defines: { CLUSTER_FORWARD_AVAILABLE: false, STORAGE_BUFFER_AVAILABLE: false } },
184
- { defines: { CLUSTER_FORWARD_AVAILABLE: false, STORAGE_BUFFER_AVAILABLE: true } },
185
- { defines: { CLUSTER_FORWARD_AVAILABLE: true, STORAGE_BUFFER_AVAILABLE: true } },
186
- ];
187
-
188
- it('rewrites the storage axis for the WebGL2 fallback', () => {
189
- expect(
190
- resolveMaterialShaderVariantSet(
191
- 'CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true',
192
- pbrVariants,
193
- 'wgpu-webgl2',
194
- false,
195
- ),
196
- ).toBe('CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=false');
197
- });
198
-
199
- it('preserves the requested native variant when the backend supports storage buffers', () => {
200
- expect(
201
- resolveMaterialShaderVariantSet(
202
- 'CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true',
203
- pbrVariants,
204
- 'webgpu',
205
- true,
206
- ),
207
- ).toBe('CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true');
208
- });
209
-
210
- it('does not rewrite shaders without capability axes', () => {
211
- expect(
212
- resolveMaterialShaderVariantSet(
213
- 'MY_FEATURE=true',
214
- [{ defines: { MY_FEATURE: true } }],
215
- 'wgpu-webgl2',
216
- false,
217
- ),
218
- ).toBe('MY_FEATURE=true');
219
- });
220
- });
221
-
222
- // bug-20260708 M2 (c) AC-04: dedicated tests for the LayoutKind='sprite-urp'
223
- // branch. Sprite / sprite-lit shaders reuse the URP 1-slot mesh-array
224
- // pipeline layout but their canonical all-true variant key ''
225
- // (SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET === '') MUST NOT be
226
- // mis-routed through the variantSet==='' -> HDRP branch. Prevents
227
- // R-1' device-lost when a SpriteInstances batch requests the canonical
228
- // PIR=true variant.
229
- describe('selectPipelineLayoutForVariant -- sprite-urp LayoutKind routing (bug-20260708)', () => {
230
- const SPRITE_FULL_STATE = {
231
- pbrPipelineLayout: URP_LAYOUT,
232
- hdrpPbrPipelineLayout: HDRP_LAYOUT,
233
- pbrSkinPipelineLayout: SKIN_LAYOUT,
234
- };
235
-
236
- it('(a) layoutKind=sprite-urp + variantSet=undefined -> pbrPipelineLayout (character / sprite-atlas per-entity path)', () => {
237
- expect(selectPipelineLayoutForVariant(SPRITE_FULL_STATE, undefined, 'sprite-urp')).toBe(
238
- URP_LAYOUT,
239
- );
240
- });
241
-
242
- it('(b) layoutKind=sprite-urp + variantSet="" -> pbrPipelineLayout (SpriteInstances canonical PIR=true batch, NOT HDRP)', () => {
243
- // Critical assertion. Without the sprite-urp branch the canonical ''
244
- // variantSet falls into the isHdrpVariant branch of
245
- // selectPipelineLayoutForVariant (variantSet === '' short-circuit) and
246
- // returns HDRP_LAYOUT — a 7-slot mesh-array BGL incompatible with the
247
- // sprite shader's group(2) binding shape. R-1' device-lost path.
248
- expect(selectPipelineLayoutForVariant(SPRITE_FULL_STATE, '', 'sprite-urp')).toBe(URP_LAYOUT);
249
- });
250
-
251
- it('(c) layoutKind=sprite-urp overrides variantSet with CLUSTER_FORWARD_AVAILABLE=true -> URP (sprite has no HDRP variant)', () => {
252
- // Sprite shaders never emit CLUSTER_FORWARD_AVAILABLE axis; this
253
- // scenario is a defensive check that sprite-urp routing is stable
254
- // even if some caller mis-passes an HDRP-like variantSet.
255
- expect(
256
- selectPipelineLayoutForVariant(
257
- SPRITE_FULL_STATE,
258
- 'CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true',
259
- 'sprite-urp',
260
- ),
261
- ).toBe(URP_LAYOUT);
262
- });
263
-
264
- it('(d) layoutKind=sprite-urp + pbrPipelineLayout=null -> null (URP layout unavailable, charter P3 explicit fail)', () => {
265
- const partial = {
266
- pbrPipelineLayout: null,
267
- hdrpPbrPipelineLayout: HDRP_LAYOUT,
268
- pbrSkinPipelineLayout: SKIN_LAYOUT,
269
- };
270
- expect(selectPipelineLayoutForVariant(partial, undefined, 'sprite-urp')).toBeNull();
271
- expect(selectPipelineLayoutForVariant(partial, '', 'sprite-urp')).toBeNull();
272
- });
273
-
274
- it('(e) pbr-skin still wins over sprite-urp when both would apply (skin precedence anchored earlier in selector)', () => {
275
- // Defensive: if a call ever lands with layoutKind='pbr-skin' + a
276
- // sprite-like variantSet, the skin branch must take precedence (order
277
- // of switch arms in the selector). This pins the ordering so a future
278
- // reshuffle of the switch arms doesn't silently accept sprite routing
279
- // for a skin caller.
280
- expect(selectPipelineLayoutForVariant(SPRITE_FULL_STATE, '', 'pbr-skin')).toBe(SKIN_LAYOUT);
281
- });
282
- });
283
-
284
- describe('selectPipelineLayoutForVariant -- unlit-urp LayoutKind routing', () => {
285
- it("keeps default-unlit's canonical all-true variant on the URP layout", () => {
286
- expect(selectPipelineLayoutForVariant(FULL_STATE, '', 'unlit-urp')).toBe(URP_LAYOUT);
287
- });
288
-
289
- it('keeps default-unlit false-color variants on the URP layout', () => {
290
- expect(
291
- selectPipelineLayoutForVariant(
292
- FULL_STATE,
293
- 'STORAGE_BUFFER_AVAILABLE=true+VERTEX_COLOR_AVAILABLE=false',
294
- 'unlit-urp',
295
- ),
296
- ).toBe(URP_LAYOUT);
297
- });
298
- });
@@ -1,52 +0,0 @@
1
- // w2 — tsc-only narrowing probe for PostProcessReadSampleType at the register
2
- // call site (plan-strategy D-1 / AC-08).
3
- //
4
- // Verifies that the closed union `PostProcessReadSampleType = 'depth'` narrows
5
- // misspellings at the `renderer.postProcess.register(id, { reads })` call site
6
- // without `as` assertions. Bare `string[]` remains backward-compatible (AC-03).
7
- //
8
- // feat-20260702-postprocess-camera-depth-read M1 / w2.
9
-
10
- import type {
11
- PostProcessReadEntry,
12
- PostProcessReadSampleType,
13
- } from '@forgeax/engine-render/internal';
14
- import { describe, expectTypeOf, it } from 'vitest';
15
-
16
- describe('w2 PostProcessReadSampleType narrowing at register call site', () => {
17
- it('PostProcessReadSampleType = "depth" is a singleton closed union', () => {
18
- expectTypeOf<PostProcessReadSampleType>().toEqualTypeOf<'depth'>();
19
- });
20
-
21
- it('AC-08: misspelled sampleType "deptth" is a type error at the register call site', () => {
22
- // The closed union PostProcessReadSampleType = 'depth' only; 'deptth' is
23
- // not assignable — TS reports a type error at this literal.
24
- // @ts-expect-error — 'deptth' is not assignable to type 'PostProcessReadSampleType'
25
- const _bad: PostProcessReadSampleType = 'deptth';
26
- });
27
-
28
- it('AC-08: structured entry with misspelled sampleType fails at the call site', () => {
29
- // @ts-expect-error — 'deptth' not assignable to type 'PostProcessReadSampleType'
30
- const _badEntry: PostProcessReadEntry = { key: 'depth', sampleType: 'deptth' };
31
- });
32
-
33
- it('structured depth entry: { key, sampleType: "depth" } is a valid PostProcessReadEntry', () => {
34
- const e: PostProcessReadEntry = { key: 'depth', sampleType: 'depth' };
35
- void e;
36
- });
37
-
38
- it('structured color entry: { key } without sampleType is a valid PostProcessReadEntry', () => {
39
- const e: PostProcessReadEntry = { key: 'sceneColor' };
40
- void e;
41
- });
42
-
43
- it('AC-03: bare string entries are valid in reads (backward-compatible)', () => {
44
- // The reads array accepts string | PostProcessReadEntry elements.
45
- // A bare string literal is a valid element alongside structured entries.
46
- const r: readonly (string | PostProcessReadEntry)[] = [
47
- 'sceneColor',
48
- { key: 'depth', sampleType: 'depth' },
49
- ];
50
- void r;
51
- });
52
- });