@forgeax/engine-runtime 0.1.2

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 (937) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +183 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/__tests__/active-camera.unit.test.d.ts +2 -0
  5. package/dist/__tests__/active-camera.unit.test.d.ts.map +1 -0
  6. package/dist/__tests__/animation-graph-add.unit.test.d.ts +2 -0
  7. package/dist/__tests__/animation-graph-add.unit.test.d.ts.map +1 -0
  8. package/dist/__tests__/animation-graph-asset-union.test-d.d.ts +2 -0
  9. package/dist/__tests__/animation-graph-asset-union.test-d.d.ts.map +1 -0
  10. package/dist/__tests__/animation-graph-blend.unit.test.d.ts +2 -0
  11. package/dist/__tests__/animation-graph-blend.unit.test.d.ts.map +1 -0
  12. package/dist/__tests__/animation-graph-build.unit.test.d.ts +2 -0
  13. package/dist/__tests__/animation-graph-build.unit.test.d.ts.map +1 -0
  14. package/dist/__tests__/animation-graph-clip-missing.unit.test.d.ts +2 -0
  15. package/dist/__tests__/animation-graph-clip-missing.unit.test.d.ts.map +1 -0
  16. package/dist/__tests__/animation-graph-clip.unit.test.d.ts +2 -0
  17. package/dist/__tests__/animation-graph-clip.unit.test.d.ts.map +1 -0
  18. package/dist/__tests__/animation-graph-default-path.integration.test.d.ts +2 -0
  19. package/dist/__tests__/animation-graph-default-path.integration.test.d.ts.map +1 -0
  20. package/dist/__tests__/animation-graph-describe.unit.test.d.ts +2 -0
  21. package/dist/__tests__/animation-graph-describe.unit.test.d.ts.map +1 -0
  22. package/dist/__tests__/animation-graph-errors.unit.test.d.ts +2 -0
  23. package/dist/__tests__/animation-graph-errors.unit.test.d.ts.map +1 -0
  24. package/dist/__tests__/animation-graph-nesting.unit.test.d.ts +2 -0
  25. package/dist/__tests__/animation-graph-nesting.unit.test.d.ts.map +1 -0
  26. package/dist/__tests__/animation-graph-orthogonal-weight.unit.test.d.ts +2 -0
  27. package/dist/__tests__/animation-graph-orthogonal-weight.unit.test.d.ts.map +1 -0
  28. package/dist/__tests__/animation-graph-slot-fill.unit.test.d.ts +2 -0
  29. package/dist/__tests__/animation-graph-slot-fill.unit.test.d.ts.map +1 -0
  30. package/dist/__tests__/animation-nslot.unit.test.d.ts +2 -0
  31. package/dist/__tests__/animation-nslot.unit.test.d.ts.map +1 -0
  32. package/dist/__tests__/animation-slot-length-guard.unit.test.d.ts +2 -0
  33. package/dist/__tests__/animation-slot-length-guard.unit.test.d.ts.map +1 -0
  34. package/dist/__tests__/append-injection.test.d.ts +2 -0
  35. package/dist/__tests__/append-injection.test.d.ts.map +1 -0
  36. package/dist/__tests__/asi-world-baseline-export.unit.test.d.ts +2 -0
  37. package/dist/__tests__/asi-world-baseline-export.unit.test.d.ts.map +1 -0
  38. package/dist/__tests__/asi-world-ci-config.unit.test.d.ts +2 -0
  39. package/dist/__tests__/asi-world-ci-config.unit.test.d.ts.map +1 -0
  40. package/dist/__tests__/asi-world-smoke.unit.test.d.ts +2 -0
  41. package/dist/__tests__/asi-world-smoke.unit.test.d.ts.map +1 -0
  42. package/dist/__tests__/asset-registry-scene.test-d.d.ts +2 -0
  43. package/dist/__tests__/asset-registry-scene.test-d.d.ts.map +1 -0
  44. package/dist/__tests__/bind-group-cache-binding.test.d.ts +2 -0
  45. package/dist/__tests__/bind-group-cache-binding.test.d.ts.map +1 -0
  46. package/dist/__tests__/bind-group-cache-frame.test.d.ts +2 -0
  47. package/dist/__tests__/bind-group-cache-frame.test.d.ts.map +1 -0
  48. package/dist/__tests__/bind-group-cache-keying.test.d.ts +2 -0
  49. package/dist/__tests__/bind-group-cache-keying.test.d.ts.map +1 -0
  50. package/dist/__tests__/block-upload-math.unit.test.d.ts +2 -0
  51. package/dist/__tests__/block-upload-math.unit.test.d.ts.map +1 -0
  52. package/dist/__tests__/builtin-shader-register-e2e.test.d.ts +2 -0
  53. package/dist/__tests__/builtin-shader-register-e2e.test.d.ts.map +1 -0
  54. package/dist/__tests__/cache-false-eviction.test.d.ts +2 -0
  55. package/dist/__tests__/cache-false-eviction.test.d.ts.map +1 -0
  56. package/dist/__tests__/cache-isolation-matrix.test.d.ts +2 -0
  57. package/dist/__tests__/cache-isolation-matrix.test.d.ts.map +1 -0
  58. package/dist/__tests__/camera-clear-snapshot-equivalence.unit.test.d.ts +2 -0
  59. package/dist/__tests__/camera-clear-snapshot-equivalence.unit.test.d.ts.map +1 -0
  60. package/dist/__tests__/clamp-to-last.e2e.browser.test.d.ts +2 -0
  61. package/dist/__tests__/clamp-to-last.e2e.browser.test.d.ts.map +1 -0
  62. package/dist/__tests__/clamp-to-last.e2e.dawn.test.d.ts +2 -0
  63. package/dist/__tests__/clamp-to-last.e2e.dawn.test.d.ts.map +1 -0
  64. package/dist/__tests__/collect-scene-asset.test.d.ts +3 -0
  65. package/dist/__tests__/collect-scene-asset.test.d.ts.map +1 -0
  66. package/dist/__tests__/collect-subtree.unit.test.d.ts +2 -0
  67. package/dist/__tests__/collect-subtree.unit.test.d.ts.map +1 -0
  68. package/dist/__tests__/collect-transient-children-absent.test.d.ts +2 -0
  69. package/dist/__tests__/collect-transient-children-absent.test.d.ts.map +1 -0
  70. package/dist/__tests__/collect-transient-roundtrip.test.d.ts +2 -0
  71. package/dist/__tests__/collect-transient-roundtrip.test.d.ts.map +1 -0
  72. package/dist/__tests__/collect-transient-skip.test.d.ts +3 -0
  73. package/dist/__tests__/collect-transient-skip.test.d.ts.map +1 -0
  74. package/dist/__tests__/components.test-d.d.ts +2 -0
  75. package/dist/__tests__/components.test-d.d.ts.map +1 -0
  76. package/dist/__tests__/components.unit.test.d.ts +2 -0
  77. package/dist/__tests__/components.unit.test.d.ts.map +1 -0
  78. package/dist/__tests__/composite-skybox-cross-world.browser.test.d.ts +2 -0
  79. package/dist/__tests__/composite-skybox-cross-world.browser.test.d.ts.map +1 -0
  80. package/dist/__tests__/create-renderer-assembly.integration.test.d.ts +2 -0
  81. package/dist/__tests__/create-renderer-assembly.integration.test.d.ts.map +1 -0
  82. package/dist/__tests__/createRenderer-dispose.test.d.ts +2 -0
  83. package/dist/__tests__/createRenderer-dispose.test.d.ts.map +1 -0
  84. package/dist/__tests__/createRenderer-requiredFeatures.unit.test.d.ts +2 -0
  85. package/dist/__tests__/createRenderer-requiredFeatures.unit.test.d.ts.map +1 -0
  86. package/dist/__tests__/createRenderer.browser-no-webgpu.test.d.ts +2 -0
  87. package/dist/__tests__/createRenderer.browser-no-webgpu.test.d.ts.map +1 -0
  88. package/dist/__tests__/createRenderer.unit.test.d.ts +2 -0
  89. package/dist/__tests__/createRenderer.unit.test.d.ts.map +1 -0
  90. package/dist/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.d.ts +2 -0
  91. package/dist/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.d.ts.map +1 -0
  92. package/dist/__tests__/dawn/ibl-compose.dawn.test.d.ts +2 -0
  93. package/dist/__tests__/dawn/ibl-compose.dawn.test.d.ts.map +1 -0
  94. package/dist/__tests__/dawn/ibl-modules-compose.dawn.test.d.ts +2 -0
  95. package/dist/__tests__/dawn/ibl-modules-compose.dawn.test.d.ts.map +1 -0
  96. package/dist/__tests__/dawn/ibl-precompute-readback.dawn.test.d.ts +2 -0
  97. package/dist/__tests__/dawn/ibl-precompute-readback.dawn.test.d.ts.map +1 -0
  98. package/dist/__tests__/dawn/instances-per-instance-pbr.dawn.test.d.ts +2 -0
  99. package/dist/__tests__/dawn/instances-per-instance-pbr.dawn.test.d.ts.map +1 -0
  100. package/dist/__tests__/dawn/instances-shadow.dawn.test.d.ts +2 -0
  101. package/dist/__tests__/dawn/instances-shadow.dawn.test.d.ts.map +1 -0
  102. package/dist/__tests__/dawn/instances-uniform-fallback.dawn.test.d.ts +2 -0
  103. package/dist/__tests__/dawn/instances-uniform-fallback.dawn.test.d.ts.map +1 -0
  104. package/dist/__tests__/dawn/material-alpha.dawn.test.d.ts +2 -0
  105. package/dist/__tests__/dawn/material-alpha.dawn.test.d.ts.map +1 -0
  106. package/dist/__tests__/dawn/material-cooked-fixture.dawn.test.d.ts +2 -0
  107. package/dist/__tests__/dawn/material-cooked-fixture.dawn.test.d.ts.map +1 -0
  108. package/dist/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.d.ts +2 -0
  109. package/dist/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.d.ts.map +1 -0
  110. package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts +2 -0
  111. package/dist/__tests__/dawn/mesh-update.dawn.test.d.ts.map +1 -0
  112. package/dist/__tests__/dawn/mipmap-srgb-linear.dawn.test.d.ts +2 -0
  113. package/dist/__tests__/dawn/mipmap-srgb-linear.dawn.test.d.ts.map +1 -0
  114. package/dist/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.d.ts +2 -0
  115. package/dist/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.d.ts.map +1 -0
  116. package/dist/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.d.ts +2 -0
  117. package/dist/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.d.ts.map +1 -0
  118. package/dist/__tests__/dawn/tonemap.dawn.test.d.ts +2 -0
  119. package/dist/__tests__/dawn/tonemap.dawn.test.d.ts.map +1 -0
  120. package/dist/__tests__/dawn/user-handle-mesh-render.dawn.test.d.ts +2 -0
  121. package/dist/__tests__/dawn/user-handle-mesh-render.dawn.test.d.ts.map +1 -0
  122. package/dist/__tests__/dawn/user-mesh-upload.dawn.test.d.ts +2 -0
  123. package/dist/__tests__/dawn/user-mesh-upload.dawn.test.d.ts.map +1 -0
  124. package/dist/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.d.ts +2 -0
  125. package/dist/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.d.ts.map +1 -0
  126. package/dist/__tests__/dawn/zero-manifest-ready.dawn.test.d.ts +2 -0
  127. package/dist/__tests__/dawn/zero-manifest-ready.dawn.test.d.ts.map +1 -0
  128. package/dist/__tests__/demo-sortscope-migration.unit.test.d.ts +2 -0
  129. package/dist/__tests__/demo-sortscope-migration.unit.test.d.ts.map +1 -0
  130. package/dist/__tests__/derive-bgl-integration.test.d.ts +2 -0
  131. package/dist/__tests__/derive-bgl-integration.test.d.ts.map +1 -0
  132. package/dist/__tests__/derive-render-data-skin.unit.test.d.ts +2 -0
  133. package/dist/__tests__/derive-render-data-skin.unit.test.d.ts.map +1 -0
  134. package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts +2 -0
  135. package/dist/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.d.ts.map +1 -0
  136. package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts +2 -0
  137. package/dist/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.d.ts.map +1 -0
  138. package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts +2 -0
  139. package/dist/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.d.ts.map +1 -0
  140. package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts +2 -0
  141. package/dist/__tests__/dispatch-fullscreen-pass-params.unit.test.d.ts.map +1 -0
  142. package/dist/__tests__/draw-published.d.ts +5 -0
  143. package/dist/__tests__/draw-published.d.ts.map +1 -0
  144. package/dist/__tests__/environment-error-exhaustive.test-d.d.ts +8 -0
  145. package/dist/__tests__/environment-error-exhaustive.test-d.d.ts.map +1 -0
  146. package/dist/__tests__/equirect-bc6h.integration.test.d.ts +2 -0
  147. package/dist/__tests__/equirect-bc6h.integration.test.d.ts.map +1 -0
  148. package/dist/__tests__/error-exhaustive.test.d.ts +2 -0
  149. package/dist/__tests__/error-exhaustive.test.d.ts.map +1 -0
  150. package/dist/__tests__/extract-frames-graceful-degradation.test.d.ts +2 -0
  151. package/dist/__tests__/extract-frames-graceful-degradation.test.d.ts.map +1 -0
  152. package/dist/__tests__/extract-frames-merge.test.d.ts +2 -0
  153. package/dist/__tests__/extract-frames-merge.test.d.ts.map +1 -0
  154. package/dist/__tests__/extract-frames-reset.test.d.ts +2 -0
  155. package/dist/__tests__/extract-frames-reset.test.d.ts.map +1 -0
  156. package/dist/__tests__/extract-record-no-hardcoded-texture-fields.test.d.ts +2 -0
  157. package/dist/__tests__/extract-record-no-hardcoded-texture-fields.test.d.ts.map +1 -0
  158. package/dist/__tests__/fog-producer-manifest.d.ts +131 -0
  159. package/dist/__tests__/fog-producer-manifest.d.ts.map +1 -0
  160. package/dist/__tests__/fog-producer-pixel-probe.d.ts +42 -0
  161. package/dist/__tests__/fog-producer-pixel-probe.d.ts.map +1 -0
  162. package/dist/__tests__/fog-producer-pixel.browser.test.d.ts +2 -0
  163. package/dist/__tests__/fog-producer-pixel.browser.test.d.ts.map +1 -0
  164. package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts +2 -0
  165. package/dist/__tests__/fog-producer-pixel.dawn.test.d.ts.map +1 -0
  166. package/dist/__tests__/fog-producer-real-fixture.d.ts +5 -0
  167. package/dist/__tests__/fog-producer-real-fixture.d.ts.map +1 -0
  168. package/dist/__tests__/fog-producer-vfx-effect.d.ts +3 -0
  169. package/dist/__tests__/fog-producer-vfx-effect.d.ts.map +1 -0
  170. package/dist/__tests__/fog-scene-asset.integration.test.d.ts +2 -0
  171. package/dist/__tests__/fog-scene-asset.integration.test.d.ts.map +1 -0
  172. package/dist/__tests__/frame-targets-shadow-regression.unit.test.d.ts +2 -0
  173. package/dist/__tests__/frame-targets-shadow-regression.unit.test.d.ts.map +1 -0
  174. package/dist/__tests__/fullscreen-post-bgl-depth.test.d.ts +2 -0
  175. package/dist/__tests__/fullscreen-post-bgl-depth.test.d.ts.map +1 -0
  176. package/dist/__tests__/fullscreen-post-depth-params-arity.test.d.ts +2 -0
  177. package/dist/__tests__/fullscreen-post-depth-params-arity.test.d.ts.map +1 -0
  178. package/dist/__tests__/fullscreen-post-process-pass.dawn.test.d.ts +2 -0
  179. package/dist/__tests__/fullscreen-post-process-pass.dawn.test.d.ts.map +1 -0
  180. package/dist/__tests__/fullscreen-post-process-pass.unit.test.d.ts +2 -0
  181. package/dist/__tests__/fullscreen-post-process-pass.unit.test.d.ts.map +1 -0
  182. package/dist/__tests__/fxaa-pixel-diff.dawn.test.d.ts +2 -0
  183. package/dist/__tests__/fxaa-pixel-diff.dawn.test.d.ts.map +1 -0
  184. package/dist/__tests__/fxaa-validation-and-resize.dawn.test.d.ts +2 -0
  185. package/dist/__tests__/fxaa-validation-and-resize.dawn.test.d.ts.map +1 -0
  186. package/dist/__tests__/fxaa-zero-overhead.dawn.test.d.ts +2 -0
  187. package/dist/__tests__/fxaa-zero-overhead.dawn.test.d.ts.map +1 -0
  188. package/dist/__tests__/geometry.unit.test.d.ts +2 -0
  189. package/dist/__tests__/geometry.unit.test.d.ts.map +1 -0
  190. package/dist/__tests__/glyph-tilemap-worldid.test.d.ts +2 -0
  191. package/dist/__tests__/glyph-tilemap-worldid.test.d.ts.map +1 -0
  192. package/dist/__tests__/gpu-resource-cow-survivor.test.d.ts +2 -0
  193. package/dist/__tests__/gpu-resource-cow-survivor.test.d.ts.map +1 -0
  194. package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts +2 -0
  195. package/dist/__tests__/gpu-resource-store-cubemap-status.test.d.ts.map +1 -0
  196. package/dist/__tests__/gpu-resource.test.d.ts +2 -0
  197. package/dist/__tests__/gpu-resource.test.d.ts.map +1 -0
  198. package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts +2 -0
  199. package/dist/__tests__/hdrp-bgl-slots.browser.test.d.ts.map +1 -0
  200. package/dist/__tests__/hdrp-buffers.unit.test.d.ts +2 -0
  201. package/dist/__tests__/hdrp-buffers.unit.test.d.ts.map +1 -0
  202. package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts +2 -0
  203. package/dist/__tests__/hdrp-execute-filter.unit.test.d.ts.map +1 -0
  204. package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts +2 -0
  205. package/dist/__tests__/hdrp-gbuffer-attachments.browser.test.d.ts.map +1 -0
  206. package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts +2 -0
  207. package/dist/__tests__/hdrp-pipeline-asset-type.test-d.d.ts.map +1 -0
  208. package/dist/__tests__/hdrp-ssao-boundary.test.d.ts +2 -0
  209. package/dist/__tests__/hdrp-ssao-boundary.test.d.ts.map +1 -0
  210. package/dist/__tests__/hdrp-ssao-falsification.test.d.ts +2 -0
  211. package/dist/__tests__/hdrp-ssao-falsification.test.d.ts.map +1 -0
  212. package/dist/__tests__/hello-tilemap-smoke-upgrade.unit.test.d.ts +2 -0
  213. package/dist/__tests__/hello-tilemap-smoke-upgrade.unit.test.d.ts.map +1 -0
  214. package/dist/__tests__/helpers/mock-shader-registry.d.ts +11 -0
  215. package/dist/__tests__/helpers/mock-shader-registry.d.ts.map +1 -0
  216. package/dist/__tests__/helpers/primitive-world.d.ts +8 -0
  217. package/dist/__tests__/helpers/primitive-world.d.ts.map +1 -0
  218. package/dist/__tests__/helpers/register-runtime-components.d.ts +4 -0
  219. package/dist/__tests__/helpers/register-runtime-components.d.ts.map +1 -0
  220. package/dist/__tests__/helpers/register-scene-components.d.ts +4 -0
  221. package/dist/__tests__/helpers/register-scene-components.d.ts.map +1 -0
  222. package/dist/__tests__/helpers/render-asset-port.d.ts +15 -0
  223. package/dist/__tests__/helpers/render-asset-port.d.ts.map +1 -0
  224. package/dist/__tests__/helpers/scene-asset-port.d.ts +9 -0
  225. package/dist/__tests__/helpers/scene-asset-port.d.ts.map +1 -0
  226. package/dist/__tests__/helpers/tilemap-assets.d.ts +6 -0
  227. package/dist/__tests__/helpers/tilemap-assets.d.ts.map +1 -0
  228. package/dist/__tests__/instances.test-d.d.ts +2 -0
  229. package/dist/__tests__/instances.test-d.d.ts.map +1 -0
  230. package/dist/__tests__/light-attenuation-formula.test.d.ts +2 -0
  231. package/dist/__tests__/light-attenuation-formula.test.d.ts.map +1 -0
  232. package/dist/__tests__/light-casters-9-light.browser.test.d.ts +2 -0
  233. package/dist/__tests__/light-casters-9-light.browser.test.d.ts.map +1 -0
  234. package/dist/__tests__/light-gpu-byte-neutral.unit.test.d.ts +2 -0
  235. package/dist/__tests__/light-gpu-byte-neutral.unit.test.d.ts.map +1 -0
  236. package/dist/__tests__/light-snapshot.test-d.d.ts +2 -0
  237. package/dist/__tests__/light-snapshot.test-d.d.ts.map +1 -0
  238. package/dist/__tests__/lights-vec-negative.unit.test.d.ts +2 -0
  239. package/dist/__tests__/lights-vec-negative.unit.test.d.ts.map +1 -0
  240. package/dist/__tests__/lights.unit.test.d.ts +2 -0
  241. package/dist/__tests__/lights.unit.test.d.ts.map +1 -0
  242. package/dist/__tests__/m3-vec-negative.unit.test.d.ts +2 -0
  243. package/dist/__tests__/m3-vec-negative.unit.test.d.ts.map +1 -0
  244. package/dist/__tests__/m5-browser-dawn-sweep.integration.test.d.ts +2 -0
  245. package/dist/__tests__/m5-browser-dawn-sweep.integration.test.d.ts.map +1 -0
  246. package/dist/__tests__/material-derived-coordinates.integration.test.d.ts +2 -0
  247. package/dist/__tests__/material-derived-coordinates.integration.test.d.ts.map +1 -0
  248. package/dist/__tests__/material-texture-uv-scale.unit.test.d.ts +2 -0
  249. package/dist/__tests__/material-texture-uv-scale.unit.test.d.ts.map +1 -0
  250. package/dist/__tests__/materials.unit.test.d.ts +2 -0
  251. package/dist/__tests__/materials.unit.test.d.ts.map +1 -0
  252. package/dist/__tests__/mesh-ssbo-grow.unit.test.d.ts +2 -0
  253. package/dist/__tests__/mesh-ssbo-grow.unit.test.d.ts.map +1 -0
  254. package/dist/__tests__/mip-gate.unit.test.d.ts +2 -0
  255. package/dist/__tests__/mip-gate.unit.test.d.ts.map +1 -0
  256. package/dist/__tests__/msaa-sprite-pixel-diff.dawn.test.d.ts +2 -0
  257. package/dist/__tests__/msaa-sprite-pixel-diff.dawn.test.d.ts.map +1 -0
  258. package/dist/__tests__/multi-uv-8set.e2e.dawn.test.d.ts +2 -0
  259. package/dist/__tests__/multi-uv-8set.e2e.dawn.test.d.ts.map +1 -0
  260. package/dist/__tests__/name.unit.test.d.ts +2 -0
  261. package/dist/__tests__/name.unit.test.d.ts.map +1 -0
  262. package/dist/__tests__/pass-selector.unit.test.d.ts +2 -0
  263. package/dist/__tests__/pass-selector.unit.test.d.ts.map +1 -0
  264. package/dist/__tests__/pbr-pipeline.unit.test.d.ts +2 -0
  265. package/dist/__tests__/pbr-pipeline.unit.test.d.ts.map +1 -0
  266. package/dist/__tests__/pipeline-builder-msaa.unit.test.d.ts +2 -0
  267. package/dist/__tests__/pipeline-builder-msaa.unit.test.d.ts.map +1 -0
  268. package/dist/__tests__/pipeline-cache-keying.unit.test.d.ts +2 -0
  269. package/dist/__tests__/pipeline-cache-keying.unit.test.d.ts.map +1 -0
  270. package/dist/__tests__/pipeline-layout-selection.test.d.ts +2 -0
  271. package/dist/__tests__/pipeline-layout-selection.test.d.ts.map +1 -0
  272. package/dist/__tests__/pipeline-spec.test.d.ts +2 -0
  273. package/dist/__tests__/pipeline-spec.test.d.ts.map +1 -0
  274. package/dist/__tests__/pipeline.unit.test.d.ts +2 -0
  275. package/dist/__tests__/pipeline.unit.test.d.ts.map +1 -0
  276. package/dist/__tests__/point-light-shadow.browser.test.d.ts +2 -0
  277. package/dist/__tests__/point-light-shadow.browser.test.d.ts.map +1 -0
  278. package/dist/__tests__/point-light-shadow.dawn.test.d.ts +2 -0
  279. package/dist/__tests__/point-light-shadow.dawn.test.d.ts.map +1 -0
  280. package/dist/__tests__/point-light-shadow.unit.test.d.ts +2 -0
  281. package/dist/__tests__/point-light-shadow.unit.test.d.ts.map +1 -0
  282. package/dist/__tests__/post-process-error-codes.unit.test.d.ts +2 -0
  283. package/dist/__tests__/post-process-error-codes.unit.test.d.ts.map +1 -0
  284. package/dist/__tests__/post-process-params-component.unit.test.d.ts +2 -0
  285. package/dist/__tests__/post-process-params-component.unit.test.d.ts.map +1 -0
  286. package/dist/__tests__/post-process-params-extract.unit.test.d.ts +2 -0
  287. package/dist/__tests__/post-process-params-extract.unit.test.d.ts.map +1 -0
  288. package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts +2 -0
  289. package/dist/__tests__/post-process-reads-narrowing.test-d.d.ts.map +1 -0
  290. package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts +2 -0
  291. package/dist/__tests__/post-process-register-roundtrip.dawn.test.d.ts.map +1 -0
  292. package/dist/__tests__/postprocess-camera-consistency.test.d.ts +2 -0
  293. package/dist/__tests__/postprocess-camera-consistency.test.d.ts.map +1 -0
  294. package/dist/__tests__/profiler-assembly.integration.test.d.ts +2 -0
  295. package/dist/__tests__/profiler-assembly.integration.test.d.ts.map +1 -0
  296. package/dist/__tests__/propagate-transforms.dawn.test.d.ts +2 -0
  297. package/dist/__tests__/propagate-transforms.dawn.test.d.ts.map +1 -0
  298. package/dist/__tests__/record-worldid-isolation.test.d.ts +2 -0
  299. package/dist/__tests__/record-worldid-isolation.test.d.ts.map +1 -0
  300. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts +11 -0
  301. package/dist/__tests__/recover-error-exhaustive.test-d.d.ts.map +1 -0
  302. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +11 -0
  303. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -0
  304. package/dist/__tests__/render-feature-assembly.test-d.d.ts +2 -0
  305. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +1 -0
  306. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +2 -0
  307. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +1 -0
  308. package/dist/__tests__/render-feature-prepared-graphics.browser.test.d.ts +2 -0
  309. package/dist/__tests__/render-feature-prepared-graphics.browser.test.d.ts.map +1 -0
  310. package/dist/__tests__/render-feature-prepared-graphics.dawn.test.d.ts +2 -0
  311. package/dist/__tests__/render-feature-prepared-graphics.dawn.test.d.ts.map +1 -0
  312. package/dist/__tests__/render-feature-prepared-graphics.integration.test.d.ts +2 -0
  313. package/dist/__tests__/render-feature-prepared-graphics.integration.test.d.ts.map +1 -0
  314. package/dist/__tests__/render-feature-prepared-graphics.regression.integration.test.d.ts +2 -0
  315. package/dist/__tests__/render-feature-prepared-graphics.regression.integration.test.d.ts.map +1 -0
  316. package/dist/__tests__/render-feature-recover.integration.test.d.ts +2 -0
  317. package/dist/__tests__/render-feature-recover.integration.test.d.ts.map +1 -0
  318. package/dist/__tests__/render-feature-runtime-surface.test-d.d.ts +2 -0
  319. package/dist/__tests__/render-feature-runtime-surface.test-d.d.ts.map +1 -0
  320. package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts +2 -0
  321. package/dist/__tests__/render-feature-zero-feature.browser.test.d.ts.map +1 -0
  322. package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts +2 -0
  323. package/dist/__tests__/render-pipeline-trivial.dawn.test.d.ts.map +1 -0
  324. package/dist/__tests__/render-schema-consumer.integration.test.d.ts +2 -0
  325. package/dist/__tests__/render-schema-consumer.integration.test.d.ts.map +1 -0
  326. package/dist/__tests__/render-schema-owner-boundary.unit.test.d.ts +2 -0
  327. package/dist/__tests__/render-schema-owner-boundary.unit.test.d.ts.map +1 -0
  328. package/dist/__tests__/render-system-cross-world-overlay-queue.test.d.ts +2 -0
  329. package/dist/__tests__/render-system-cross-world-overlay-queue.test.d.ts.map +1 -0
  330. package/dist/__tests__/render-system-extract-dispatch-ordering.test.d.ts +2 -0
  331. package/dist/__tests__/render-system-extract-dispatch-ordering.test.d.ts.map +1 -0
  332. package/dist/__tests__/render-system-extract.test.d.ts +2 -0
  333. package/dist/__tests__/render-system-extract.test.d.ts.map +1 -0
  334. package/dist/__tests__/render-system-fold-bucket.unit.test.d.ts +2 -0
  335. package/dist/__tests__/render-system-fold-bucket.unit.test.d.ts.map +1 -0
  336. package/dist/__tests__/render-system-fold-fallback.unit.test.d.ts +2 -0
  337. package/dist/__tests__/render-system-fold-fallback.unit.test.d.ts.map +1 -0
  338. package/dist/__tests__/render-system-fold-material.unit.test.d.ts +2 -0
  339. package/dist/__tests__/render-system-fold-material.unit.test.d.ts.map +1 -0
  340. package/dist/__tests__/render-system-fold-metrics.unit.test.d.ts +2 -0
  341. package/dist/__tests__/render-system-fold-metrics.unit.test.d.ts.map +1 -0
  342. package/dist/__tests__/render-system-fold-modegate.unit.test.d.ts +2 -0
  343. package/dist/__tests__/render-system-fold-modegate.unit.test.d.ts.map +1 -0
  344. package/dist/__tests__/render-system-fold-scene-instances.unit.test.d.ts +2 -0
  345. package/dist/__tests__/render-system-fold-scene-instances.unit.test.d.ts.map +1 -0
  346. package/dist/__tests__/render-system-fold.dawn.test.d.ts +2 -0
  347. package/dist/__tests__/render-system-fold.dawn.test.d.ts.map +1 -0
  348. package/dist/__tests__/render-system-mega.test.d.ts +2 -0
  349. package/dist/__tests__/render-system-mega.test.d.ts.map +1 -0
  350. package/dist/__tests__/render-system-owner-split-contract.test.d.ts +2 -0
  351. package/dist/__tests__/render-system-owner-split-contract.test.d.ts.map +1 -0
  352. package/dist/__tests__/render-system-record-multi-material-textureview.test.d.ts +2 -0
  353. package/dist/__tests__/render-system-record-multi-material-textureview.test.d.ts.map +1 -0
  354. package/dist/__tests__/render-system-record-per-submesh-transparency.test.d.ts +2 -0
  355. package/dist/__tests__/render-system-record-per-submesh-transparency.test.d.ts.map +1 -0
  356. package/dist/__tests__/render-system-record.test.d.ts +2 -0
  357. package/dist/__tests__/render-system-record.test.d.ts.map +1 -0
  358. package/dist/__tests__/render-system-record.unit.test.d.ts +2 -0
  359. package/dist/__tests__/render-system-record.unit.test.d.ts.map +1 -0
  360. package/dist/__tests__/render-system-skin-bg.unit.test.d.ts +2 -0
  361. package/dist/__tests__/render-system-skin-bg.unit.test.d.ts.map +1 -0
  362. package/dist/__tests__/renderer-consumer.test-d.d.ts +2 -0
  363. package/dist/__tests__/renderer-consumer.test-d.d.ts.map +1 -0
  364. package/dist/__tests__/renderer-health.unit.test.d.ts +2 -0
  365. package/dist/__tests__/renderer-health.unit.test.d.ts.map +1 -0
  366. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +2 -0
  367. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +1 -0
  368. package/dist/__tests__/renderer-recover.unit.test.d.ts +2 -0
  369. package/dist/__tests__/renderer-recover.unit.test.d.ts.map +1 -0
  370. package/dist/__tests__/renderer-result.test-d.d.ts +2 -0
  371. package/dist/__tests__/renderer-result.test-d.d.ts.map +1 -0
  372. package/dist/__tests__/renderer-surface.unit.test.d.ts +2 -0
  373. package/dist/__tests__/renderer-surface.unit.test.d.ts.map +1 -0
  374. package/dist/__tests__/resolve-depth-only-view.test.d.ts +2 -0
  375. package/dist/__tests__/resolve-depth-only-view.test.d.ts.map +1 -0
  376. package/dist/__tests__/rhi-null-command-flow.unit.test.d.ts +2 -0
  377. package/dist/__tests__/rhi-null-command-flow.unit.test.d.ts.map +1 -0
  378. package/dist/__tests__/rhi-null-noop-behavior.unit.test.d.ts +2 -0
  379. package/dist/__tests__/rhi-null-noop-behavior.unit.test.d.ts.map +1 -0
  380. package/dist/__tests__/rhi-null-renderer-lifecycle.unit.test.d.ts +2 -0
  381. package/dist/__tests__/rhi-null-renderer-lifecycle.unit.test.d.ts.map +1 -0
  382. package/dist/__tests__/roots-to-scene-asset.test.d.ts +2 -0
  383. package/dist/__tests__/roots-to-scene-asset.test.d.ts.map +1 -0
  384. package/dist/__tests__/runtime-authority-scan.unit.test.d.ts +2 -0
  385. package/dist/__tests__/runtime-authority-scan.unit.test.d.ts.map +1 -0
  386. package/dist/__tests__/runtime-domain-residue.unit.test.d.ts +2 -0
  387. package/dist/__tests__/runtime-domain-residue.unit.test.d.ts.map +1 -0
  388. package/dist/__tests__/scene-equirect-roundtrip.test.d.ts +2 -0
  389. package/dist/__tests__/scene-equirect-roundtrip.test.d.ts.map +1 -0
  390. package/dist/__tests__/scene-instance-bridge.integration.test.d.ts +2 -0
  391. package/dist/__tests__/scene-instance-bridge.integration.test.d.ts.map +1 -0
  392. package/dist/__tests__/scene-instance-component.test.d.ts +2 -0
  393. package/dist/__tests__/scene-instance-component.test.d.ts.map +1 -0
  394. package/dist/__tests__/scene-instantiate-cycle-runtime.test.d.ts +2 -0
  395. package/dist/__tests__/scene-instantiate-cycle-runtime.test.d.ts.map +1 -0
  396. package/dist/__tests__/serialize-scene-asset.test.d.ts +2 -0
  397. package/dist/__tests__/serialize-scene-asset.test.d.ts.map +1 -0
  398. package/dist/__tests__/shadow-caster-empty-schema.test.d.ts +2 -0
  399. package/dist/__tests__/shadow-caster-empty-schema.test.d.ts.map +1 -0
  400. package/dist/__tests__/shadow-csm-atlas.test.d.ts +2 -0
  401. package/dist/__tests__/shadow-csm-atlas.test.d.ts.map +1 -0
  402. package/dist/__tests__/shadow-csm-blend.dawn.test.d.ts +2 -0
  403. package/dist/__tests__/shadow-csm-blend.dawn.test.d.ts.map +1 -0
  404. package/dist/__tests__/shadow-csm-cascade-loadop.test.d.ts +2 -0
  405. package/dist/__tests__/shadow-csm-cascade-loadop.test.d.ts.map +1 -0
  406. package/dist/__tests__/shadow-csm-caster-membership.test.d.ts +2 -0
  407. package/dist/__tests__/shadow-csm-caster-membership.test.d.ts.map +1 -0
  408. package/dist/__tests__/shadow-csm-component.test.d.ts +2 -0
  409. package/dist/__tests__/shadow-csm-component.test.d.ts.map +1 -0
  410. package/dist/__tests__/shadow-csm-extract.test.d.ts +2 -0
  411. package/dist/__tests__/shadow-csm-extract.test.d.ts.map +1 -0
  412. package/dist/__tests__/shadow-csm-orthoz.test.d.ts +2 -0
  413. package/dist/__tests__/shadow-csm-orthoz.test.d.ts.map +1 -0
  414. package/dist/__tests__/shadow-csm-pssm.test.d.ts +2 -0
  415. package/dist/__tests__/shadow-csm-pssm.test.d.ts.map +1 -0
  416. package/dist/__tests__/shadow-csm-runtime-vary.dawn.test.d.ts +2 -0
  417. package/dist/__tests__/shadow-csm-runtime-vary.dawn.test.d.ts.map +1 -0
  418. package/dist/__tests__/shadow-csm-shader.dawn.test.d.ts +2 -0
  419. package/dist/__tests__/shadow-csm-shader.dawn.test.d.ts.map +1 -0
  420. package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts +2 -0
  421. package/dist/__tests__/shadow-csm-temporal.browser.test.d.ts.map +1 -0
  422. package/dist/__tests__/shadow-csm-tile-consistency.test.d.ts +2 -0
  423. package/dist/__tests__/shadow-csm-tile-consistency.test.d.ts.map +1 -0
  424. package/dist/__tests__/shadow-csm-ubo.dawn.test.d.ts +2 -0
  425. package/dist/__tests__/shadow-csm-ubo.dawn.test.d.ts.map +1 -0
  426. package/dist/__tests__/shadow-csm-ubo.test.d.ts +2 -0
  427. package/dist/__tests__/shadow-csm-ubo.test.d.ts.map +1 -0
  428. package/dist/__tests__/shadow-csm-viewport.browser.test.d.ts +2 -0
  429. package/dist/__tests__/shadow-csm-viewport.browser.test.d.ts.map +1 -0
  430. package/dist/__tests__/shadow-csm-viewport.test.d.ts +2 -0
  431. package/dist/__tests__/shadow-csm-viewport.test.d.ts.map +1 -0
  432. package/dist/__tests__/shadow-fields-observable.dawn.test.d.ts +2 -0
  433. package/dist/__tests__/shadow-fields-observable.dawn.test.d.ts.map +1 -0
  434. package/dist/__tests__/shadow-m1.dawn.test.d.ts +2 -0
  435. package/dist/__tests__/shadow-m1.dawn.test.d.ts.map +1 -0
  436. package/dist/__tests__/shadow-m2.dawn.test.d.ts +2 -0
  437. package/dist/__tests__/shadow-m2.dawn.test.d.ts.map +1 -0
  438. package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts +2 -0
  439. package/dist/__tests__/shadow-m3-calibrate-run.dawn.test.d.ts.map +1 -0
  440. package/dist/__tests__/shadow-m3-calibrate.d.ts +83 -0
  441. package/dist/__tests__/shadow-m3-calibrate.d.ts.map +1 -0
  442. package/dist/__tests__/shadow-m3.dawn.test.d.ts +2 -0
  443. package/dist/__tests__/shadow-m3.dawn.test.d.ts.map +1 -0
  444. package/dist/__tests__/shadow-mesh-ssbo-order.test.d.ts +2 -0
  445. package/dist/__tests__/shadow-mesh-ssbo-order.test.d.ts.map +1 -0
  446. package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts +2 -0
  447. package/dist/__tests__/shadow-probe-control-flow.dawn.test.d.ts.map +1 -0
  448. package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts +2 -0
  449. package/dist/__tests__/shadow-quality-metrics.dawn.test.d.ts.map +1 -0
  450. package/dist/__tests__/skin-error-exhaustive.test-d.d.ts +11 -0
  451. package/dist/__tests__/skin-error-exhaustive.test-d.d.ts.map +1 -0
  452. package/dist/__tests__/skin-errors.unit.test.d.ts +2 -0
  453. package/dist/__tests__/skin-errors.unit.test.d.ts.map +1 -0
  454. package/dist/__tests__/skin-extract-getarrayview-count.unit.test.d.ts +2 -0
  455. package/dist/__tests__/skin-extract-getarrayview-count.unit.test.d.ts.map +1 -0
  456. package/dist/__tests__/skin-parented-double-transform.test.d.ts +14 -0
  457. package/dist/__tests__/skin-parented-double-transform.test.d.ts.map +1 -0
  458. package/dist/__tests__/skylight-lazy-projection.test.d.ts +2 -0
  459. package/dist/__tests__/skylight-lazy-projection.test.d.ts.map +1 -0
  460. package/dist/__tests__/sparse-tag-scene-roundtrip.test.d.ts +2 -0
  461. package/dist/__tests__/sparse-tag-scene-roundtrip.test.d.ts.map +1 -0
  462. package/dist/__tests__/sprite-cullmode-flip.dawn.test.d.ts +2 -0
  463. package/dist/__tests__/sprite-cullmode-flip.dawn.test.d.ts.map +1 -0
  464. package/dist/__tests__/sprite-lit-bgl-byte-identical.test.d.ts +2 -0
  465. package/dist/__tests__/sprite-lit-bgl-byte-identical.test.d.ts.map +1 -0
  466. package/dist/__tests__/sprite-lit-extract-branch.test.d.ts +2 -0
  467. package/dist/__tests__/sprite-lit-extract-branch.test.d.ts.map +1 -0
  468. package/dist/__tests__/sprite-lit-pipeline-cache-key.test.d.ts +2 -0
  469. package/dist/__tests__/sprite-lit-pipeline-cache-key.test.d.ts.map +1 -0
  470. package/dist/__tests__/sprite-param-values.test-d.d.ts +2 -0
  471. package/dist/__tests__/sprite-param-values.test-d.d.ts.map +1 -0
  472. package/dist/__tests__/ssao-bgl.test.d.ts +2 -0
  473. package/dist/__tests__/ssao-bgl.test.d.ts.map +1 -0
  474. package/dist/__tests__/ssao-buffers.test.d.ts +2 -0
  475. package/dist/__tests__/ssao-buffers.test.d.ts.map +1 -0
  476. package/dist/__tests__/ssao-data.test.d.ts +2 -0
  477. package/dist/__tests__/ssao-data.test.d.ts.map +1 -0
  478. package/dist/__tests__/ssao-errors.test.d.ts +2 -0
  479. package/dist/__tests__/ssao-errors.test.d.ts.map +1 -0
  480. package/dist/__tests__/ssao-manifest.test.d.ts +2 -0
  481. package/dist/__tests__/ssao-manifest.test.d.ts.map +1 -0
  482. package/dist/__tests__/ssao-passes.test.d.ts +2 -0
  483. package/dist/__tests__/ssao-passes.test.d.ts.map +1 -0
  484. package/dist/__tests__/ssao-pipelines.test.d.ts +2 -0
  485. package/dist/__tests__/ssao-pipelines.test.d.ts.map +1 -0
  486. package/dist/__tests__/ssao-uniform-layout.test.d.ts +2 -0
  487. package/dist/__tests__/ssao-uniform-layout.test.d.ts.map +1 -0
  488. package/dist/__tests__/static-rig.integration.test.d.ts +2 -0
  489. package/dist/__tests__/static-rig.integration.test.d.ts.map +1 -0
  490. package/dist/__tests__/stencil-outline-pixel.dawn.test.d.ts +2 -0
  491. package/dist/__tests__/stencil-outline-pixel.dawn.test.d.ts.map +1 -0
  492. package/dist/__tests__/swap-chain-format.unit.test.d.ts +2 -0
  493. package/dist/__tests__/swap-chain-format.unit.test.d.ts.map +1 -0
  494. package/dist/__tests__/systems.unit.test.d.ts +2 -0
  495. package/dist/__tests__/systems.unit.test.d.ts.map +1 -0
  496. package/dist/__tests__/temporal-off-path.unit.test.d.ts +2 -0
  497. package/dist/__tests__/temporal-off-path.unit.test.d.ts.map +1 -0
  498. package/dist/__tests__/text.unit.test.d.ts +2 -0
  499. package/dist/__tests__/text.unit.test.d.ts.map +1 -0
  500. package/dist/__tests__/tilemap-childed-despawn.test.d.ts +2 -0
  501. package/dist/__tests__/tilemap-childed-despawn.test.d.ts.map +1 -0
  502. package/dist/__tests__/tilemap-chunk-extract.overhang-bounds.test.d.ts +2 -0
  503. package/dist/__tests__/tilemap-chunk-extract.overhang-bounds.test.d.ts.map +1 -0
  504. package/dist/__tests__/tilemap-chunk-extract.propagate-order.test.d.ts +2 -0
  505. package/dist/__tests__/tilemap-chunk-extract.propagate-order.test.d.ts.map +1 -0
  506. package/dist/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.d.ts +2 -0
  507. package/dist/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.d.ts.map +1 -0
  508. package/dist/__tests__/tilemap-chunk-extract.test.d.ts +2 -0
  509. package/dist/__tests__/tilemap-chunk-extract.test.d.ts.map +1 -0
  510. package/dist/__tests__/tilemap-chunk-extract.unit.test.d.ts +2 -0
  511. package/dist/__tests__/tilemap-chunk-extract.unit.test.d.ts.map +1 -0
  512. package/dist/__tests__/tilemap-chunk-y-sort-bench.unit.test.d.ts +2 -0
  513. package/dist/__tests__/tilemap-chunk-y-sort-bench.unit.test.d.ts.map +1 -0
  514. package/dist/__tests__/tilemap-dirty-rebuild.test.d.ts +2 -0
  515. package/dist/__tests__/tilemap-dirty-rebuild.test.d.ts.map +1 -0
  516. package/dist/__tests__/tilemap-material-cache.test.d.ts +2 -0
  517. package/dist/__tests__/tilemap-material-cache.test.d.ts.map +1 -0
  518. package/dist/__tests__/tilemap-multi-atlas.test.d.ts +2 -0
  519. package/dist/__tests__/tilemap-multi-atlas.test.d.ts.map +1 -0
  520. package/dist/__tests__/tilemap-owner-boundary.unit.test.d.ts +2 -0
  521. package/dist/__tests__/tilemap-owner-boundary.unit.test.d.ts.map +1 -0
  522. package/dist/__tests__/tilemap-region-pack.test.d.ts +2 -0
  523. package/dist/__tests__/tilemap-region-pack.test.d.ts.map +1 -0
  524. package/dist/__tests__/tilemap-spawn-flip-pivot.test.d.ts +2 -0
  525. package/dist/__tests__/tilemap-spawn-flip-pivot.test.d.ts.map +1 -0
  526. package/dist/__tests__/tilemap-uv-inset.test.d.ts +2 -0
  527. package/dist/__tests__/tilemap-uv-inset.test.d.ts.map +1 -0
  528. package/dist/__tests__/tilemap-validate.test.d.ts +2 -0
  529. package/dist/__tests__/tilemap-validate.test.d.ts.map +1 -0
  530. package/dist/__tests__/transform-hierarchy-pixel-diff.dawn.test.d.ts +2 -0
  531. package/dist/__tests__/transform-hierarchy-pixel-diff.dawn.test.d.ts.map +1 -0
  532. package/dist/__tests__/transient-fields-collect.test.d.ts +2 -0
  533. package/dist/__tests__/transient-fields-collect.test.d.ts.map +1 -0
  534. package/dist/__tests__/transitional-authoring.integration.test.d.ts +2 -0
  535. package/dist/__tests__/transitional-authoring.integration.test.d.ts.map +1 -0
  536. package/dist/__tests__/transparent-sort-tilemap-sprite-interleave.test.d.ts +2 -0
  537. package/dist/__tests__/transparent-sort-tilemap-sprite-interleave.test.d.ts.map +1 -0
  538. package/dist/__tests__/variant-selection.unit.test.d.ts +2 -0
  539. package/dist/__tests__/variant-selection.unit.test.d.ts.map +1 -0
  540. package/dist/__tests__/vertex-attribute-layout.test.d.ts +2 -0
  541. package/dist/__tests__/vertex-attribute-layout.test.d.ts.map +1 -0
  542. package/dist/__tests__/video-cache-regression.unit.test.d.ts +2 -0
  543. package/dist/__tests__/video-cache-regression.unit.test.d.ts.map +1 -0
  544. package/dist/__tests__/video-extract-bindgroup.dawn.test.d.ts +2 -0
  545. package/dist/__tests__/video-extract-bindgroup.dawn.test.d.ts.map +1 -0
  546. package/dist/__tests__/view-ubo-layout.browser.test.d.ts +2 -0
  547. package/dist/__tests__/view-ubo-layout.browser.test.d.ts.map +1 -0
  548. package/dist/__tests__/world-entity-key.test.d.ts +2 -0
  549. package/dist/__tests__/world-entity-key.test.d.ts.map +1 -0
  550. package/dist/__tests__/world-scene-despawn.test.d.ts +2 -0
  551. package/dist/__tests__/world-scene-despawn.test.d.ts.map +1 -0
  552. package/dist/__tests__/world-scene-instantiate.test.d.ts +2 -0
  553. package/dist/__tests__/world-scene-instantiate.test.d.ts.map +1 -0
  554. package/dist/__tests__/world-scene-nested.test.d.ts +2 -0
  555. package/dist/__tests__/world-scene-nested.test.d.ts.map +1 -0
  556. package/dist/__tests__/world-scene-override.test.d.ts +2 -0
  557. package/dist/__tests__/world-scene-override.test.d.ts.map +1 -0
  558. package/dist/__tests__/zero-compression-zero-load.integration.test.d.ts +2 -0
  559. package/dist/__tests__/zero-compression-zero-load.integration.test.d.ts.map +1 -0
  560. package/dist/asset-contributions.d.ts +3 -0
  561. package/dist/asset-contributions.d.ts.map +1 -0
  562. package/dist/asset-kind.d.ts +4 -0
  563. package/dist/asset-kind.d.ts.map +1 -0
  564. package/dist/collect-scene-asset.d.ts +16 -0
  565. package/dist/collect-scene-asset.d.ts.map +1 -0
  566. package/dist/components/__tests__/camera.test-d.d.ts +2 -0
  567. package/dist/components/__tests__/camera.test-d.d.ts.map +1 -0
  568. package/dist/components/__tests__/camera.test.d.ts +2 -0
  569. package/dist/components/__tests__/camera.test.d.ts.map +1 -0
  570. package/dist/components/__tests__/child-of.test.d.ts +2 -0
  571. package/dist/components/__tests__/child-of.test.d.ts.map +1 -0
  572. package/dist/components/__tests__/sprite-animation.test-d.d.ts +2 -0
  573. package/dist/components/__tests__/sprite-animation.test-d.d.ts.map +1 -0
  574. package/dist/components/__tests__/sprite-instances.unit.test.d.ts +2 -0
  575. package/dist/components/__tests__/sprite-instances.unit.test.d.ts.map +1 -0
  576. package/dist/components/__tests__/sprite-region-override.test-d.d.ts +2 -0
  577. package/dist/components/__tests__/sprite-region-override.test-d.d.ts.map +1 -0
  578. package/dist/components/__tests__/tile-layer.test-d.d.ts +2 -0
  579. package/dist/components/__tests__/tile-layer.test-d.d.ts.map +1 -0
  580. package/dist/components/__tests__/tile-layer.unit.test.d.ts +2 -0
  581. package/dist/components/__tests__/tile-layer.unit.test.d.ts.map +1 -0
  582. package/dist/components/__tests__/tilemap.test-d.d.ts +2 -0
  583. package/dist/components/__tests__/tilemap.test-d.d.ts.map +1 -0
  584. package/dist/components/__tests__/transform-vec-schema.test.d.ts +2 -0
  585. package/dist/components/__tests__/transform-vec-schema.test.d.ts.map +1 -0
  586. package/dist/create-renderer-env-classify.d.ts +21 -0
  587. package/dist/create-renderer-env-classify.d.ts.map +1 -0
  588. package/dist/createRenderer.d.ts +3 -0
  589. package/dist/createRenderer.d.ts.map +1 -0
  590. package/dist/dev-import-transport.d.ts +24 -0
  591. package/dist/dev-import-transport.d.ts.map +1 -0
  592. package/dist/errors/environment.d.ts +2 -0
  593. package/dist/errors/environment.d.ts.map +1 -0
  594. package/dist/errors/sprite-animation.d.ts +3 -0
  595. package/dist/errors/sprite-animation.d.ts.map +1 -0
  596. package/dist/index.d.ts +280 -0
  597. package/dist/index.d.ts.map +1 -0
  598. package/dist/index.mjs +814 -0
  599. package/dist/index.mjs.map +1 -0
  600. package/dist/scene-asset-port.d.ts +17 -0
  601. package/dist/scene-asset-port.d.ts.map +1 -0
  602. package/dist/scene-collect-errors.d.ts +22 -0
  603. package/dist/scene-collect-errors.d.ts.map +1 -0
  604. package/dist/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.d.ts +2 -0
  605. package/dist/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.d.ts.map +1 -0
  606. package/dist/scene-utils/mount-override-fold.d.ts +16 -0
  607. package/dist/scene-utils/mount-override-fold.d.ts.map +1 -0
  608. package/dist/shadow-m3-calibrate.d.ts +40 -0
  609. package/dist/shadow-m3-calibrate.d.ts.map +1 -0
  610. package/dist/sprite-param-values.d.ts +62 -0
  611. package/dist/sprite-param-values.d.ts.map +1 -0
  612. package/dist/systems/__tests__/_xorshift.d.ts +28 -0
  613. package/dist/systems/__tests__/_xorshift.d.ts.map +1 -0
  614. package/dist/systems/__tests__/argsort-in-place.test.d.ts +2 -0
  615. package/dist/systems/__tests__/argsort-in-place.test.d.ts.map +1 -0
  616. package/dist/systems/__tests__/transparent-sort.bench.d.ts +2 -0
  617. package/dist/systems/__tests__/transparent-sort.bench.d.ts.map +1 -0
  618. package/dist/systems/sprite-animation-tick.d.ts +50 -0
  619. package/dist/systems/sprite-animation-tick.d.ts.map +1 -0
  620. package/dist/systems/tonemap.d.ts +27 -0
  621. package/dist/systems/tonemap.d.ts.map +1 -0
  622. package/dist/systems/transparent-sort.d.ts +51 -0
  623. package/dist/systems/transparent-sort.d.ts.map +1 -0
  624. package/dist/tilemap-register-validate.d.ts +21 -0
  625. package/dist/tilemap-register-validate.d.ts.map +1 -0
  626. package/package.json +100 -0
  627. package/src/__tests__/active-camera.unit.test.ts +193 -0
  628. package/src/__tests__/animation-graph-add.unit.test.ts +67 -0
  629. package/src/__tests__/animation-graph-asset-union.test-d.ts +83 -0
  630. package/src/__tests__/animation-graph-blend.unit.test.ts +66 -0
  631. package/src/__tests__/animation-graph-build.unit.test.ts +100 -0
  632. package/src/__tests__/animation-graph-clip-missing.unit.test.ts +62 -0
  633. package/src/__tests__/animation-graph-clip.unit.test.ts +77 -0
  634. package/src/__tests__/animation-graph-default-path.integration.test.ts +65 -0
  635. package/src/__tests__/animation-graph-describe.unit.test.ts +68 -0
  636. package/src/__tests__/animation-graph-errors.unit.test.ts +75 -0
  637. package/src/__tests__/animation-graph-nesting.unit.test.ts +84 -0
  638. package/src/__tests__/animation-graph-orthogonal-weight.unit.test.ts +98 -0
  639. package/src/__tests__/animation-graph-slot-fill.unit.test.ts +95 -0
  640. package/src/__tests__/animation-nslot.unit.test.ts +63 -0
  641. package/src/__tests__/animation-slot-length-guard.unit.test.ts +81 -0
  642. package/src/__tests__/append-injection.test.ts +105 -0
  643. package/src/__tests__/asi-world-baseline-export.unit.test.ts +173 -0
  644. package/src/__tests__/asi-world-ci-config.unit.test.ts +186 -0
  645. package/src/__tests__/asi-world-smoke.unit.test.ts +192 -0
  646. package/src/__tests__/asset-registry-scene.test-d.ts +49 -0
  647. package/src/__tests__/bind-group-cache-binding.test.ts +2513 -0
  648. package/src/__tests__/bind-group-cache-frame.test.ts +1511 -0
  649. package/src/__tests__/bind-group-cache-keying.test.ts +295 -0
  650. package/src/__tests__/block-upload-math.unit.test.ts +192 -0
  651. package/src/__tests__/builtin-shader-register-e2e.test.ts +151 -0
  652. package/src/__tests__/cache-false-eviction.test.ts +126 -0
  653. package/src/__tests__/cache-isolation-matrix.test.ts +182 -0
  654. package/src/__tests__/camera-clear-snapshot-equivalence.unit.test.ts +76 -0
  655. package/src/__tests__/clamp-to-last.e2e.browser.test.ts +183 -0
  656. package/src/__tests__/clamp-to-last.e2e.dawn.test.ts +325 -0
  657. package/src/__tests__/collect-scene-asset.test.ts +876 -0
  658. package/src/__tests__/collect-subtree.unit.test.ts +76 -0
  659. package/src/__tests__/collect-transient-children-absent.test.ts +154 -0
  660. package/src/__tests__/collect-transient-roundtrip.test.ts +245 -0
  661. package/src/__tests__/collect-transient-skip.test.ts +165 -0
  662. package/src/__tests__/components.test-d.ts +236 -0
  663. package/src/__tests__/components.unit.test.ts +2665 -0
  664. package/src/__tests__/composite-skybox-cross-world.browser.test.ts +378 -0
  665. package/src/__tests__/create-renderer-assembly.integration.test.ts +42 -0
  666. package/src/__tests__/createRenderer-dispose.test.ts +416 -0
  667. package/src/__tests__/createRenderer-requiredFeatures.unit.test.ts +134 -0
  668. package/src/__tests__/createRenderer.browser-no-webgpu.test.ts +59 -0
  669. package/src/__tests__/createRenderer.unit.test.ts +231 -0
  670. package/src/__tests__/dawn/hello-sprite-nineslice-section.dawn.test.ts +393 -0
  671. package/src/__tests__/dawn/ibl-compose.dawn.test.ts +151 -0
  672. package/src/__tests__/dawn/ibl-modules-compose.dawn.test.ts +223 -0
  673. package/src/__tests__/dawn/ibl-precompute-readback.dawn.test.ts +241 -0
  674. package/src/__tests__/dawn/instances-per-instance-pbr.dawn.test.ts +611 -0
  675. package/src/__tests__/dawn/instances-shadow.dawn.test.ts +443 -0
  676. package/src/__tests__/dawn/instances-uniform-fallback.dawn.test.ts +313 -0
  677. package/src/__tests__/dawn/material-alpha.dawn.test.ts +304 -0
  678. package/src/__tests__/dawn/material-cooked-fixture.dawn.test.ts +64 -0
  679. package/src/__tests__/dawn/mesh-ssbo-normal-matrix.dawn.test.ts +106 -0
  680. package/src/__tests__/dawn/mesh-update.dawn.test.ts +342 -0
  681. package/src/__tests__/dawn/mipmap-srgb-linear.dawn.test.ts +117 -0
  682. package/src/__tests__/dawn/per-entity-material-texture-isolation.dawn.test.ts +567 -0
  683. package/src/__tests__/dawn/sprite-nineslice-mesh-bind.dawn.test.ts +251 -0
  684. package/src/__tests__/dawn/tonemap.dawn.test.ts +107 -0
  685. package/src/__tests__/dawn/user-handle-mesh-render.dawn.test.ts +291 -0
  686. package/src/__tests__/dawn/user-mesh-upload.dawn.test.ts +204 -0
  687. package/src/__tests__/dawn/zero-manifest-mesh-fail.dawn.test.ts +122 -0
  688. package/src/__tests__/dawn/zero-manifest-ready.dawn.test.ts +99 -0
  689. package/src/__tests__/demo-sortscope-migration.unit.test.ts +115 -0
  690. package/src/__tests__/derive-bgl-integration.test.ts +398 -0
  691. package/src/__tests__/derive-render-data-skin.unit.test.ts +90 -0
  692. package/src/__tests__/dispatch-fullscreen-pass-composite-swapchain.dawn.test.ts +204 -0
  693. package/src/__tests__/dispatch-fullscreen-pass-custom-reads.dawn.test.ts +297 -0
  694. package/src/__tests__/dispatch-fullscreen-pass-depth-composite.dawn.test.ts +271 -0
  695. package/src/__tests__/dispatch-fullscreen-pass-params.unit.test.ts +321 -0
  696. package/src/__tests__/draw-published.ts +10 -0
  697. package/src/__tests__/environment-error-exhaustive.test-d.ts +28 -0
  698. package/src/__tests__/equirect-bc6h.integration.test.ts +35 -0
  699. package/src/__tests__/error-exhaustive.test.ts +220 -0
  700. package/src/__tests__/extract-frames-graceful-degradation.test.ts +298 -0
  701. package/src/__tests__/extract-frames-merge.test.ts +643 -0
  702. package/src/__tests__/extract-frames-reset.test.ts +158 -0
  703. package/src/__tests__/extract-record-no-hardcoded-texture-fields.test.ts +92 -0
  704. package/src/__tests__/fog-producer-manifest.ts +162 -0
  705. package/src/__tests__/fog-producer-pixel-probe.ts +263 -0
  706. package/src/__tests__/fog-producer-pixel.browser.test.ts +26 -0
  707. package/src/__tests__/fog-producer-pixel.dawn.test.ts +55 -0
  708. package/src/__tests__/fog-producer-real-fixture.ts +805 -0
  709. package/src/__tests__/fog-producer-vfx-effect.ts +272 -0
  710. package/src/__tests__/fog-scene-asset.integration.test.ts +123 -0
  711. package/src/__tests__/frame-targets-shadow-regression.unit.test.ts +28 -0
  712. package/src/__tests__/fullscreen-post-bgl-depth.test.ts +131 -0
  713. package/src/__tests__/fullscreen-post-depth-params-arity.test.ts +84 -0
  714. package/src/__tests__/fullscreen-post-process-pass.dawn.test.ts +320 -0
  715. package/src/__tests__/fullscreen-post-process-pass.unit.test.ts +107 -0
  716. package/src/__tests__/fxaa-pixel-diff.dawn.test.ts +292 -0
  717. package/src/__tests__/fxaa-validation-and-resize.dawn.test.ts +358 -0
  718. package/src/__tests__/fxaa-zero-overhead.dawn.test.ts +254 -0
  719. package/src/__tests__/geometry.unit.test.ts +2265 -0
  720. package/src/__tests__/glyph-tilemap-worldid.test.ts +146 -0
  721. package/src/__tests__/gpu-resource-cow-survivor.test.ts +388 -0
  722. package/src/__tests__/gpu-resource-store-cubemap-status.test.ts +207 -0
  723. package/src/__tests__/gpu-resource.test.ts +1206 -0
  724. package/src/__tests__/hdrp-bgl-slots.browser.test.ts +50 -0
  725. package/src/__tests__/hdrp-buffers.unit.test.ts +70 -0
  726. package/src/__tests__/hdrp-execute-filter.unit.test.ts +200 -0
  727. package/src/__tests__/hdrp-gbuffer-attachments.browser.test.ts +64 -0
  728. package/src/__tests__/hdrp-pipeline-asset-type.test-d.ts +139 -0
  729. package/src/__tests__/hdrp-ssao-boundary.test.ts +237 -0
  730. package/src/__tests__/hdrp-ssao-falsification.test.ts +289 -0
  731. package/src/__tests__/hello-tilemap-smoke-upgrade.unit.test.ts +147 -0
  732. package/src/__tests__/helpers/mock-shader-registry.ts +139 -0
  733. package/src/__tests__/helpers/primitive-world.ts +91 -0
  734. package/src/__tests__/helpers/register-runtime-components.ts +69 -0
  735. package/src/__tests__/helpers/register-scene-components.ts +10 -0
  736. package/src/__tests__/helpers/render-asset-port.ts +65 -0
  737. package/src/__tests__/helpers/scene-asset-port.ts +23 -0
  738. package/src/__tests__/helpers/tilemap-assets.ts +29 -0
  739. package/src/__tests__/instances.test-d.ts +61 -0
  740. package/src/__tests__/light-attenuation-formula.test.ts +171 -0
  741. package/src/__tests__/light-casters-9-light.browser.test.ts +880 -0
  742. package/src/__tests__/light-gpu-byte-neutral.unit.test.ts +163 -0
  743. package/src/__tests__/light-snapshot.test-d.ts +84 -0
  744. package/src/__tests__/lights-vec-negative.unit.test.ts +52 -0
  745. package/src/__tests__/lights.unit.test.ts +2936 -0
  746. package/src/__tests__/m3-vec-negative.unit.test.ts +45 -0
  747. package/src/__tests__/m5-browser-dawn-sweep.integration.test.ts +8 -0
  748. package/src/__tests__/material-derived-coordinates.integration.test.ts +100 -0
  749. package/src/__tests__/material-texture-uv-scale.unit.test.ts +49 -0
  750. package/src/__tests__/materials.unit.test.ts +271 -0
  751. package/src/__tests__/mesh-ssbo-grow.unit.test.ts +244 -0
  752. package/src/__tests__/mip-gate.unit.test.ts +79 -0
  753. package/src/__tests__/msaa-sprite-pixel-diff.dawn.test.ts +406 -0
  754. package/src/__tests__/multi-uv-8set.e2e.dawn.test.ts +296 -0
  755. package/src/__tests__/name.unit.test.ts +123 -0
  756. package/src/__tests__/node-shims.d.ts +33 -0
  757. package/src/__tests__/pass-selector.unit.test.ts +102 -0
  758. package/src/__tests__/pbr-pipeline.unit.test.ts +204 -0
  759. package/src/__tests__/pipeline-builder-msaa.unit.test.ts +224 -0
  760. package/src/__tests__/pipeline-cache-keying.unit.test.ts +316 -0
  761. package/src/__tests__/pipeline-layout-selection.test.ts +298 -0
  762. package/src/__tests__/pipeline-spec.test.ts +1061 -0
  763. package/src/__tests__/pipeline.unit.test.ts +6974 -0
  764. package/src/__tests__/point-light-shadow.browser.test.ts +278 -0
  765. package/src/__tests__/point-light-shadow.dawn.test.ts +822 -0
  766. package/src/__tests__/point-light-shadow.unit.test.ts +716 -0
  767. package/src/__tests__/post-process-error-codes.unit.test.ts +158 -0
  768. package/src/__tests__/post-process-params-component.unit.test.ts +153 -0
  769. package/src/__tests__/post-process-params-extract.unit.test.ts +100 -0
  770. package/src/__tests__/post-process-reads-narrowing.test-d.ts +52 -0
  771. package/src/__tests__/post-process-register-roundtrip.dawn.test.ts +230 -0
  772. package/src/__tests__/postprocess-camera-consistency.test.ts +378 -0
  773. package/src/__tests__/profiler-assembly.integration.test.ts +74 -0
  774. package/src/__tests__/propagate-transforms.dawn.test.ts +253 -0
  775. package/src/__tests__/record-worldid-isolation.test.ts +247 -0
  776. package/src/__tests__/recover-error-exhaustive.test-d.ts +35 -0
  777. package/src/__tests__/render-error-exhaustive.test-d.ts +245 -0
  778. package/src/__tests__/render-feature-assembly.test-d.ts +28 -0
  779. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +124 -0
  780. package/src/__tests__/render-feature-prepared-graphics.browser.test.ts +582 -0
  781. package/src/__tests__/render-feature-prepared-graphics.dawn.test.ts +602 -0
  782. package/src/__tests__/render-feature-prepared-graphics.integration.test.ts +264 -0
  783. package/src/__tests__/render-feature-prepared-graphics.regression.integration.test.ts +361 -0
  784. package/src/__tests__/render-feature-recover.integration.test.ts +142 -0
  785. package/src/__tests__/render-feature-runtime-surface.test-d.ts +45 -0
  786. package/src/__tests__/render-feature-zero-feature.browser.test.ts +152 -0
  787. package/src/__tests__/render-pipeline-trivial.dawn.test.ts +525 -0
  788. package/src/__tests__/render-schema-consumer.integration.test.ts +25 -0
  789. package/src/__tests__/render-schema-owner-boundary.unit.test.ts +26 -0
  790. package/src/__tests__/render-system-cross-world-overlay-queue.test.ts +172 -0
  791. package/src/__tests__/render-system-extract-dispatch-ordering.test.ts +322 -0
  792. package/src/__tests__/render-system-extract.test.ts +1399 -0
  793. package/src/__tests__/render-system-fold-bucket.unit.test.ts +288 -0
  794. package/src/__tests__/render-system-fold-fallback.unit.test.ts +148 -0
  795. package/src/__tests__/render-system-fold-material.unit.test.ts +145 -0
  796. package/src/__tests__/render-system-fold-metrics.unit.test.ts +170 -0
  797. package/src/__tests__/render-system-fold-modegate.unit.test.ts +166 -0
  798. package/src/__tests__/render-system-fold-scene-instances.unit.test.ts +51 -0
  799. package/src/__tests__/render-system-fold.dawn.test.ts +306 -0
  800. package/src/__tests__/render-system-mega.test.ts +1578 -0
  801. package/src/__tests__/render-system-owner-split-contract.test.ts +200 -0
  802. package/src/__tests__/render-system-record-multi-material-textureview.test.ts +684 -0
  803. package/src/__tests__/render-system-record-per-submesh-transparency.test.ts +464 -0
  804. package/src/__tests__/render-system-record.test.ts +1505 -0
  805. package/src/__tests__/render-system-record.unit.test.ts +270 -0
  806. package/src/__tests__/render-system-skin-bg.unit.test.ts +147 -0
  807. package/src/__tests__/renderer-consumer.test-d.ts +5 -0
  808. package/src/__tests__/renderer-health.unit.test.ts +935 -0
  809. package/src/__tests__/renderer-lifecycle.integration.test.ts +29 -0
  810. package/src/__tests__/renderer-recover.unit.test.ts +1075 -0
  811. package/src/__tests__/renderer-result.test-d.ts +26 -0
  812. package/src/__tests__/renderer-surface.unit.test.ts +416 -0
  813. package/src/__tests__/resolve-depth-only-view.test.ts +173 -0
  814. package/src/__tests__/rhi-null-command-flow.unit.test.ts +273 -0
  815. package/src/__tests__/rhi-null-noop-behavior.unit.test.ts +196 -0
  816. package/src/__tests__/rhi-null-renderer-lifecycle.unit.test.ts +182 -0
  817. package/src/__tests__/roots-to-scene-asset.test.ts +605 -0
  818. package/src/__tests__/runtime-authority-scan.unit.test.ts +19 -0
  819. package/src/__tests__/runtime-domain-residue.unit.test.ts +13 -0
  820. package/src/__tests__/scene-equirect-roundtrip.test.ts +33 -0
  821. package/src/__tests__/scene-instance-bridge.integration.test.ts +8 -0
  822. package/src/__tests__/scene-instance-component.test.ts +45 -0
  823. package/src/__tests__/scene-instantiate-cycle-runtime.test.ts +66 -0
  824. package/src/__tests__/serialize-scene-asset.test.ts +336 -0
  825. package/src/__tests__/shadow-caster-empty-schema.test.ts +83 -0
  826. package/src/__tests__/shadow-csm-atlas.test.ts +178 -0
  827. package/src/__tests__/shadow-csm-blend.dawn.test.ts +230 -0
  828. package/src/__tests__/shadow-csm-cascade-loadop.test.ts +334 -0
  829. package/src/__tests__/shadow-csm-caster-membership.test.ts +232 -0
  830. package/src/__tests__/shadow-csm-component.test.ts +286 -0
  831. package/src/__tests__/shadow-csm-extract.test.ts +334 -0
  832. package/src/__tests__/shadow-csm-orthoz.test.ts +151 -0
  833. package/src/__tests__/shadow-csm-pssm.test.ts +142 -0
  834. package/src/__tests__/shadow-csm-runtime-vary.dawn.test.ts +198 -0
  835. package/src/__tests__/shadow-csm-shader.dawn.test.ts +358 -0
  836. package/src/__tests__/shadow-csm-temporal.browser.test.ts +145 -0
  837. package/src/__tests__/shadow-csm-tile-consistency.test.ts +419 -0
  838. package/src/__tests__/shadow-csm-ubo.dawn.test.ts +293 -0
  839. package/src/__tests__/shadow-csm-ubo.test.ts +300 -0
  840. package/src/__tests__/shadow-csm-viewport.browser.test.ts +85 -0
  841. package/src/__tests__/shadow-csm-viewport.test.ts +74 -0
  842. package/src/__tests__/shadow-fields-observable.dawn.test.ts +615 -0
  843. package/src/__tests__/shadow-m1.dawn.test.ts +105 -0
  844. package/src/__tests__/shadow-m2.dawn.test.ts +394 -0
  845. package/src/__tests__/shadow-m3-calibrate-run.dawn.test.ts +248 -0
  846. package/src/__tests__/shadow-m3-calibrate.ts +203 -0
  847. package/src/__tests__/shadow-m3.dawn.test.ts +288 -0
  848. package/src/__tests__/shadow-mesh-ssbo-order.test.ts +64 -0
  849. package/src/__tests__/shadow-probe-control-flow.dawn.test.ts +264 -0
  850. package/src/__tests__/shadow-quality-metrics.dawn.test.ts +324 -0
  851. package/src/__tests__/skin-error-exhaustive.test-d.ts +74 -0
  852. package/src/__tests__/skin-errors.unit.test.ts +10 -0
  853. package/src/__tests__/skin-extract-getarrayview-count.unit.test.ts +23 -0
  854. package/src/__tests__/skin-parented-double-transform.test.ts +268 -0
  855. package/src/__tests__/skylight-lazy-projection.test.ts +359 -0
  856. package/src/__tests__/sparse-tag-scene-roundtrip.test.ts +43 -0
  857. package/src/__tests__/sprite-cullmode-flip.dawn.test.ts +470 -0
  858. package/src/__tests__/sprite-lit-bgl-byte-identical.test.ts +141 -0
  859. package/src/__tests__/sprite-lit-extract-branch.test.ts +117 -0
  860. package/src/__tests__/sprite-lit-pipeline-cache-key.test.ts +123 -0
  861. package/src/__tests__/sprite-param-values.test-d.ts +104 -0
  862. package/src/__tests__/ssao-bgl.test.ts +347 -0
  863. package/src/__tests__/ssao-buffers.test.ts +211 -0
  864. package/src/__tests__/ssao-data.test.ts +121 -0
  865. package/src/__tests__/ssao-errors.test.ts +162 -0
  866. package/src/__tests__/ssao-manifest.test.ts +109 -0
  867. package/src/__tests__/ssao-passes.test.ts +1229 -0
  868. package/src/__tests__/ssao-pipelines.test.ts +275 -0
  869. package/src/__tests__/ssao-uniform-layout.test.ts +178 -0
  870. package/src/__tests__/static-rig.integration.test.ts +9 -0
  871. package/src/__tests__/stencil-outline-pixel.dawn.test.ts +295 -0
  872. package/src/__tests__/swap-chain-format.unit.test.ts +117 -0
  873. package/src/__tests__/systems.unit.test.ts +9957 -0
  874. package/src/__tests__/temporal-off-path.unit.test.ts +69 -0
  875. package/src/__tests__/text.unit.test.ts +466 -0
  876. package/src/__tests__/tilemap-childed-despawn.test.ts +468 -0
  877. package/src/__tests__/tilemap-chunk-extract.overhang-bounds.test.ts +314 -0
  878. package/src/__tests__/tilemap-chunk-extract.propagate-order.test.ts +80 -0
  879. package/src/__tests__/tilemap-chunk-extract.terrain-rewrite.unit.test.ts +424 -0
  880. package/src/__tests__/tilemap-chunk-extract.test.ts +236 -0
  881. package/src/__tests__/tilemap-chunk-extract.unit.test.ts +383 -0
  882. package/src/__tests__/tilemap-chunk-y-sort-bench.unit.test.ts +109 -0
  883. package/src/__tests__/tilemap-dirty-rebuild.test.ts +300 -0
  884. package/src/__tests__/tilemap-material-cache.test.ts +137 -0
  885. package/src/__tests__/tilemap-multi-atlas.test.ts +237 -0
  886. package/src/__tests__/tilemap-owner-boundary.unit.test.ts +63 -0
  887. package/src/__tests__/tilemap-region-pack.test.ts +153 -0
  888. package/src/__tests__/tilemap-spawn-flip-pivot.test.ts +274 -0
  889. package/src/__tests__/tilemap-uv-inset.test.ts +204 -0
  890. package/src/__tests__/tilemap-validate.test.ts +201 -0
  891. package/src/__tests__/transform-hierarchy-pixel-diff.dawn.test.ts +274 -0
  892. package/src/__tests__/transient-fields-collect.test.ts +203 -0
  893. package/src/__tests__/transitional-authoring.integration.test.ts +7 -0
  894. package/src/__tests__/transparent-sort-tilemap-sprite-interleave.test.ts +227 -0
  895. package/src/__tests__/variant-selection.unit.test.ts +21 -0
  896. package/src/__tests__/vertex-attribute-layout.test.ts +324 -0
  897. package/src/__tests__/video-cache-regression.unit.test.ts +186 -0
  898. package/src/__tests__/video-extract-bindgroup.dawn.test.ts +450 -0
  899. package/src/__tests__/view-ubo-layout.browser.test.ts +183 -0
  900. package/src/__tests__/world-entity-key.test.ts +92 -0
  901. package/src/__tests__/world-scene-despawn.test.ts +132 -0
  902. package/src/__tests__/world-scene-instantiate.test.ts +228 -0
  903. package/src/__tests__/world-scene-nested.test.ts +230 -0
  904. package/src/__tests__/world-scene-override.test.ts +199 -0
  905. package/src/__tests__/zero-compression-zero-load.integration.test.ts +107 -0
  906. package/src/asset-contributions.ts +48 -0
  907. package/src/asset-kind.ts +7 -0
  908. package/src/collect-scene-asset.ts +689 -0
  909. package/src/components/__tests__/camera.test-d.ts +57 -0
  910. package/src/components/__tests__/camera.test.ts +95 -0
  911. package/src/components/__tests__/child-of.test.ts +35 -0
  912. package/src/components/__tests__/sprite-animation.test-d.ts +160 -0
  913. package/src/components/__tests__/sprite-instances.unit.test.ts +108 -0
  914. package/src/components/__tests__/sprite-region-override.test-d.ts +101 -0
  915. package/src/components/__tests__/tile-layer.test-d.ts +33 -0
  916. package/src/components/__tests__/tile-layer.unit.test.ts +125 -0
  917. package/src/components/__tests__/tilemap.test-d.ts +35 -0
  918. package/src/components/__tests__/transform-vec-schema.test.ts +121 -0
  919. package/src/create-renderer-env-classify.ts +110 -0
  920. package/src/createRenderer.ts +61 -0
  921. package/src/dev-import-transport.ts +97 -0
  922. package/src/errors/environment.ts +6 -0
  923. package/src/errors/sprite-animation.ts +5 -0
  924. package/src/index.ts +442 -0
  925. package/src/scene-asset-port.ts +32 -0
  926. package/src/scene-collect-errors.ts +30 -0
  927. package/src/scene-instances/__tests__/post-spawn-resolve-joints.unit.test.ts +183 -0
  928. package/src/scene-utils/mount-override-fold.ts +217 -0
  929. package/src/shadow-m3-calibrate.ts +171 -0
  930. package/src/sprite-param-values.ts +61 -0
  931. package/src/systems/__tests__/_xorshift.ts +83 -0
  932. package/src/systems/__tests__/argsort-in-place.test.ts +155 -0
  933. package/src/systems/__tests__/transparent-sort.bench.ts +218 -0
  934. package/src/systems/sprite-animation-tick.ts +302 -0
  935. package/src/systems/tonemap.ts +68 -0
  936. package/src/systems/transparent-sort.ts +434 -0
  937. package/src/tilemap-register-validate.ts +100 -0
@@ -0,0 +1,183 @@
1
+ // post-spawn-resolve-joints.unit.test.ts — tweak-20260611 M5 / D-7 (subtree-scope).
2
+ //
3
+ // Coverage:
4
+ // - single-instance resolver: existing behavior (joints wire correctly).
5
+ // - multi-instance resolver: three spawns of the same SceneAsset must each
6
+ // wire to their own subtree's joint entities (NOT entity ids of instance 0).
7
+ // - missing joint inside subtree: structured error 'skin-joint-path-unresolved'.
8
+
9
+ import { World } from '@forgeax/engine-ecs';
10
+ import { postSpawnResolveJoints } from '@forgeax/engine-render/internal';
11
+ import { ChildOf, Name } from '@forgeax/engine-scene';
12
+ import { Skin } from '@forgeax/engine-skinning';
13
+ import type { SkinAsset } from '@forgeax/engine-types';
14
+ import { describe, expect, it, vi } from 'vitest';
15
+
16
+ /**
17
+ * Build a 3-joint linear chain `Root -> Spine -> Hip` rooted at a fresh entity,
18
+ * with shared Name strings across spawns. Returns the spawnRoot + the three
19
+ * descendant entities for assertion. The Skin component is attached to the
20
+ * spawn root with a synthetic skeleton handle (the resolver's resolveSkinAsset
21
+ * is wired to return a fixed SkinAsset for any handle in this test).
22
+ */
23
+ function spawnFoxLikeChain(world: World, skeletonHandle: number) {
24
+ const root = world.spawn({ component: Name, data: { value: 'Root' } }).unwrap();
25
+ const spine = world.spawn({ component: Name, data: { value: 'Spine' } }).unwrap();
26
+ const hip = world.spawn({ component: Name, data: { value: 'Hip' } }).unwrap();
27
+
28
+ // ChildOf is the writable edge; ECS materializes its Children target.
29
+ world.addComponent(spine, { component: ChildOf, data: { parent: root } }).unwrap();
30
+ world.addComponent(hip, { component: ChildOf, data: { parent: spine } }).unwrap();
31
+
32
+ // Skin lives on the root; resolver gets `skeleton` field as a number handle.
33
+ world
34
+ .addComponent(root, {
35
+ component: Skin,
36
+ // biome-ignore lint/suspicious/noExplicitAny: test fixture stamps a synthetic skeleton handle for resolver isolation; the resolver is mocked.
37
+ data: { skeleton: skeletonHandle as any, joints: new Uint32Array() },
38
+ })
39
+ .unwrap();
40
+
41
+ return { root, spine, hip };
42
+ }
43
+
44
+ describe('postSpawnResolveJoints — single instance', () => {
45
+ it('wires Skin.joints[] to subtree entities for one spawn', () => {
46
+ const world = new World();
47
+ const skinAsset: SkinAsset = {
48
+ kind: 'skin',
49
+ skeletonGuid: '00000000-0000-0000-0000-000000000001',
50
+ jointPaths: ['Root', 'Spine', 'Hip'],
51
+ };
52
+
53
+ const { root, spine, hip } = spawnFoxLikeChain(world, 1);
54
+
55
+ const result = postSpawnResolveJoints(world, { resolveSkinAsset: () => skinAsset }, root);
56
+
57
+ expect(result.ok).toBe(true);
58
+ const got = world.get(root, Skin);
59
+ expect(got.ok).toBe(true);
60
+ if (!got.ok) return;
61
+ const joints = Array.from(got.value.joints as ArrayLike<number>);
62
+ expect(joints).toEqual([root, spine, hip]);
63
+ });
64
+ });
65
+
66
+ describe('postSpawnResolveJoints — multi instance (D-7 subtree-scope)', () => {
67
+ it('three spawns each wire to their own subtree entities — not instance-0', () => {
68
+ const world = new World();
69
+ const skinAsset: SkinAsset = {
70
+ kind: 'skin',
71
+ skeletonGuid: '00000000-0000-0000-0000-000000000001',
72
+ jointPaths: ['Root', 'Spine', 'Hip'],
73
+ };
74
+
75
+ // Three independent spawns — same Name strings collide across instances.
76
+ const a = spawnFoxLikeChain(world, 1);
77
+ const b = spawnFoxLikeChain(world, 1);
78
+ const c = spawnFoxLikeChain(world, 1);
79
+
80
+ // Resolve each spawn independently.
81
+ expect(postSpawnResolveJoints(world, { resolveSkinAsset: () => skinAsset }, a.root).ok).toBe(
82
+ true,
83
+ );
84
+ expect(postSpawnResolveJoints(world, { resolveSkinAsset: () => skinAsset }, b.root).ok).toBe(
85
+ true,
86
+ );
87
+ expect(postSpawnResolveJoints(world, { resolveSkinAsset: () => skinAsset }, c.root).ok).toBe(
88
+ true,
89
+ );
90
+
91
+ const ja = Array.from(
92
+ (world.get(a.root, Skin) as { ok: true; value: { joints: ArrayLike<number> } }).value.joints,
93
+ );
94
+ const jb = Array.from(
95
+ (world.get(b.root, Skin) as { ok: true; value: { joints: ArrayLike<number> } }).value.joints,
96
+ );
97
+ const jc = Array.from(
98
+ (world.get(c.root, Skin) as { ok: true; value: { joints: ArrayLike<number> } }).value.joints,
99
+ );
100
+
101
+ // AC-09: the three spawns' joint entity arrays must be pairwise distinct.
102
+ expect(ja).toEqual([a.root, a.spine, a.hip]);
103
+ expect(jb).toEqual([b.root, b.spine, b.hip]);
104
+ expect(jc).toEqual([c.root, c.spine, c.hip]);
105
+ expect(ja).not.toEqual(jb);
106
+ expect(jb).not.toEqual(jc);
107
+ expect(ja).not.toEqual(jc);
108
+ });
109
+
110
+ it('does not wire across spawn roots — instance 1 is untouched after instance 0 resolves', () => {
111
+ const world = new World();
112
+ const skinAsset: SkinAsset = {
113
+ kind: 'skin',
114
+ skeletonGuid: '00000000-0000-0000-0000-000000000001',
115
+ jointPaths: ['Root', 'Spine', 'Hip'],
116
+ };
117
+ const a = spawnFoxLikeChain(world, 1);
118
+ const b = spawnFoxLikeChain(world, 1);
119
+
120
+ // Resolve only a; b should remain joints=[] (resolver was not invoked for b).
121
+ postSpawnResolveJoints(world, { resolveSkinAsset: () => skinAsset }, a.root);
122
+
123
+ const jb = Array.from(
124
+ (world.get(b.root, Skin) as { ok: true; value: { joints: ArrayLike<number> } }).value.joints,
125
+ );
126
+ expect(jb).toEqual([]);
127
+ });
128
+ });
129
+
130
+ describe('postSpawnResolveJoints — error path', () => {
131
+ it('returns skin-joint-path-unresolved when leaf name not present in subtree', () => {
132
+ const world = new World();
133
+ const skinAsset: SkinAsset = {
134
+ kind: 'skin',
135
+ skeletonGuid: '00000000-0000-0000-0000-000000000001',
136
+ // Each entry is a slash-separated path; leaf name is the last segment
137
+ // and the resolver matches on it. 'NoSuchBone' does not exist in the
138
+ // subtree we built, so the resolver fails on this path.
139
+ jointPaths: ['Root/Spine/NoSuchBone'],
140
+ };
141
+
142
+ const { root } = spawnFoxLikeChain(world, 1);
143
+
144
+ const result = postSpawnResolveJoints(world, { resolveSkinAsset: () => skinAsset }, root);
145
+
146
+ expect(result.ok).toBe(false);
147
+ if (result.ok) return;
148
+ expect(result.error.code).toBe('skin-joint-path-unresolved');
149
+ if (result.error.code !== 'skin-joint-path-unresolved') return;
150
+ expect(result.error.detail.path).toEqual(['Root', 'Spine', 'NoSuchBone']);
151
+ expect(result.error.detail.failedAtIndex).toBe(2);
152
+ });
153
+
154
+ it('warns on same-name sibling within a single subtree (D-6a still active)', () => {
155
+ const world = new World();
156
+ const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
157
+
158
+ // Two siblings both named 'Bone' under one root.
159
+ const root = world.spawn({ component: Name, data: { value: 'Root' } }).unwrap();
160
+ const bone1 = world.spawn({ component: Name, data: { value: 'Bone' } }).unwrap();
161
+ const bone2 = world.spawn({ component: Name, data: { value: 'Bone' } }).unwrap();
162
+ world.addComponent(bone1, { component: ChildOf, data: { parent: root } }).unwrap();
163
+ world.addComponent(bone2, { component: ChildOf, data: { parent: root } }).unwrap();
164
+ world
165
+ .addComponent(root, {
166
+ component: Skin,
167
+ // biome-ignore lint/suspicious/noExplicitAny: test fixture stamps a synthetic skeleton handle for resolver isolation; the resolver is mocked.
168
+ data: { skeleton: 1 as any, joints: new Uint32Array() },
169
+ })
170
+ .unwrap();
171
+
172
+ const skinAsset: SkinAsset = {
173
+ kind: 'skin',
174
+ skeletonGuid: '00000000-0000-0000-0000-000000000001',
175
+ jointPaths: ['Bone'],
176
+ };
177
+ postSpawnResolveJoints(world, { resolveSkinAsset: () => skinAsset }, root);
178
+
179
+ expect(warnSpy).toHaveBeenCalledTimes(1);
180
+ expect(warnSpy.mock.calls[0]?.[0]).toMatch(/same-name sibling.*Bone.*matches 2/);
181
+ warnSpy.mockRestore();
182
+ });
183
+ });
@@ -0,0 +1,217 @@
1
+ // feat-20260713-mount-override-component-add-and-shared-ref-round M5 / w20 —
2
+ // collect fold: derive the runtime-authored MountOverride[] for one nested
3
+ // SceneInstance anchor (plan-strategy D-3).
4
+ //
5
+ // ── What it does ──
6
+ // Given a nested anchor's SceneInstanceState, walk each live member entity and
7
+ // diff its live component columns against the member's authored baseline (the
8
+ // source SceneAsset's layer-1 values, filled with schema defaults so the
9
+ // comparison is against a fully-populated row). Every difference becomes a
10
+ // MountOverride the collect step splices into the parent's `mounts[].overrides`:
11
+ // - a component present live but absent in source -> component-ADD override
12
+ // ({ localId, comp, value }) whose value is the whole filled component map;
13
+ // - a field whose live value differs from baseline -> field-PATCH override
14
+ // ({ localId, comp, field, value }) for that single field;
15
+ // - a component present in source but absent live -> NOT emitted (OOS-6:
16
+ // component-remove deltas do not fold back this feat).
17
+ //
18
+ // ── Value domain ──
19
+ // The fold emits values in the LIVE domain: shared<T> fields carry numeric
20
+ // handles, not GUID strings. The caller (rootsToSceneAsset / serialize wiring,
21
+ // w21) performs the handle->GUID reverse-lookup with the two-state NULL-sentinel
22
+ // handling (scalar handle 0 -> omit, array handle 0 -> keep positional 0),
23
+ // reusing the same classifier the owned-entity serialization uses. Keeping the
24
+ // fold registry-free means it stays a pure World+state read (D-3 / §2.5).
25
+ //
26
+ // ── localId namespace ──
27
+ // Emitted `localId` is in the CHILD scene's namespace (0-based, exactly what
28
+ // `state.entityToLocalId` maps to). The collect caller rebases it into the
29
+ // parent namespace by adding the mount window's `memberFirst`, so the override
30
+ // addresses the same slot the apply path validates against
31
+ // (`_validateMountOverrides`: [memberFirst, memberFirst + memberCount)).
32
+ //
33
+ // ── Idempotency (AC-04) ──
34
+ // A parent-authored mount-time override is applied to the child member's LIVE
35
+ // column at instantiate time, and the child's source SceneAsset does not carry
36
+ // it — so `live - source` re-derives it every round. Emitting it exactly once
37
+ // (never separately re-passing state.mountTimeOverrides on top) keeps the
38
+ // override entry set stable across save->load->save cycles: lossless without
39
+ // doubling. (Runtime fact grounding this: parent-authored overrides on a nested
40
+ // member land in the PARENT anchor's state, not the folded child anchor's; the
41
+ // child anchor's own mountTimeOverrides is empty. See the M5 implement report.)
42
+
43
+ import {
44
+ componentDefinition,
45
+ type Component as EcsComponent,
46
+ type EntityHandle,
47
+ type World,
48
+ } from '@forgeax/engine-ecs';
49
+ import { componentSchema } from '@forgeax/engine-ecs/internal';
50
+ import { fillComponentDefaults } from '@forgeax/engine-ecs/projection';
51
+ import type {
52
+ Handle,
53
+ LocalEntityId,
54
+ MountOverride,
55
+ SceneAsset,
56
+ SceneEntity,
57
+ } from '@forgeax/engine-types';
58
+ import type { SceneAssetPort } from '../scene-asset-port';
59
+
60
+ /** Minimal structural view of a SceneInstanceState the fold reads (D-4 boundary:
61
+ * `world.getSceneInstanceState(root).value` is structurally assignable). */
62
+ export interface FoldSceneInstanceState {
63
+ readonly source: Handle<'SceneAsset', 'shared'>;
64
+ readonly entityToLocalId: Map<EntityHandle, LocalEntityId>;
65
+ }
66
+
67
+ /** Component names that never participate in an authored baseline diff: the
68
+ * essential row-identity column, and structural hierarchy relationship
69
+ * holders/mirrors (ChildOf/Children) whose live values are re-wired by
70
+ * instantiate, not authored. */
71
+ function excludedComponentNames(): Set<string> {
72
+ return new Set<string>(['Entity', 'ChildOf', 'Children']);
73
+ }
74
+
75
+ /** Normalize an array-like (typed array or Array) to a plain array for
76
+ * structural comparison; pass non-array values through unchanged. */
77
+ function normalize(value: unknown): unknown {
78
+ if (
79
+ Array.isArray(value) ||
80
+ value instanceof Uint32Array ||
81
+ value instanceof Float32Array ||
82
+ value instanceof Int32Array ||
83
+ value instanceof Float64Array ||
84
+ value instanceof Uint8Array ||
85
+ value instanceof Int16Array ||
86
+ value instanceof Uint16Array
87
+ ) {
88
+ return Array.from(value as ArrayLike<unknown>);
89
+ }
90
+ return value;
91
+ }
92
+
93
+ /** Structural value equality after array normalization (handles Float32Array vs
94
+ * number[] and nested arrays via JSON). Both inputs are column-shape values. */
95
+ function valuesEqual(a: unknown, b: unknown): boolean {
96
+ return JSON.stringify(normalize(a)) === JSON.stringify(normalize(b));
97
+ }
98
+
99
+ /** Build the per-field baseline map for a member from its source node, filled
100
+ * with schema defaults so it matches the fully-populated live row. Transient
101
+ * fields are dropped (they are never authored / never serialized, D-5). */
102
+ function baselineFields(
103
+ comp: EcsComponent<string>,
104
+ sourceRaw: Record<string, unknown> | undefined,
105
+ ): Record<string, unknown> {
106
+ const filled = fillComponentDefaults(comp, sourceRaw ?? {});
107
+ const out: Record<string, unknown> = {};
108
+ const fields = componentDefinition(comp).fields;
109
+ for (const fieldName of Object.keys(componentSchema(comp))) {
110
+ if (fields[fieldName]?.transient) continue;
111
+ out[fieldName] = filled[fieldName];
112
+ }
113
+ return out;
114
+ }
115
+
116
+ /** Read the live, non-transient, non-entity field values of a component on an
117
+ * entity into a plain map. Entity-type fields are dropped: their live value is a
118
+ * live EntityHandle while the source carries a LocalEntityId, so they cannot be
119
+ * diffed without remap — entity-ref override deltas are out of scope this feat
120
+ * (the AC set centers on shared/asset fields + component-add). */
121
+ function liveFields(
122
+ world: World,
123
+ entity: EntityHandle,
124
+ comp: EcsComponent<string>,
125
+ ): Record<string, unknown> | undefined {
126
+ const res = world.get(entity, comp);
127
+ if (!res.ok) return undefined;
128
+ const val = res.value as Record<string, unknown>;
129
+ const out: Record<string, unknown> = {};
130
+ const fields = componentDefinition(comp).fields;
131
+ const schema = componentSchema(comp) as Record<string, string>;
132
+ for (const fieldName of Object.keys(schema)) {
133
+ if (fields[fieldName]?.transient) continue;
134
+ const fieldType = schema[fieldName];
135
+ if (fieldType === 'entity' || fieldType === 'array<entity>') continue;
136
+ out[fieldName] = normalize(val[fieldName]);
137
+ }
138
+ return out;
139
+ }
140
+
141
+ /**
142
+ * Fold one nested anchor's live member state into the runtime-authored
143
+ * MountOverride[] (child-namespace localIds, live value domain). See file
144
+ * header for the full contract. Returns [] when nothing differs from source.
145
+ */
146
+ export function foldMountOverrides(
147
+ world: World,
148
+ assets: SceneAssetPort,
149
+ state: FoldSceneInstanceState,
150
+ ): MountOverride[] {
151
+ const sourceRes = assets.resolve<SceneAsset>(
152
+ world,
153
+ state.source as unknown as Handle<string, 'shared'>,
154
+ );
155
+ if (!sourceRes.ok) return [];
156
+ const source = sourceRes.value as SceneAsset;
157
+
158
+ // Index source entities by localId for O(1) baseline lookup.
159
+ const sourceByLid = new Map<number, SceneEntity>();
160
+ for (const node of source.entities) {
161
+ sourceByLid.set(node.localId as unknown as number, node);
162
+ }
163
+
164
+ const excluded = excludedComponentNames();
165
+ const registered = world.components.entries();
166
+ const overrides: MountOverride[] = [];
167
+
168
+ // Deterministic member order (localId ascending) so collect output is a pure
169
+ // function of the graph (mirrors rootsToSceneAsset D-7 ordering discipline).
170
+ const members: Array<[EntityHandle, number]> = [];
171
+ for (const [entity, lid] of state.entityToLocalId) {
172
+ members.push([entity, lid as unknown as number]);
173
+ }
174
+ members.sort((a, b) => a[1] - b[1]);
175
+
176
+ for (const [entity, lid] of members) {
177
+ const sourceNode = sourceByLid.get(lid);
178
+ const sourceComps = (sourceNode?.components ?? {}) as Record<string, Record<string, unknown>>;
179
+
180
+ for (const [compName, compToken] of registered) {
181
+ if (excluded.has(compName)) continue;
182
+ if (componentDefinition(compToken).policy.transient) continue;
183
+ const comp = compToken as EcsComponent<string>;
184
+ if (Object.keys(componentSchema(comp)).length === 0) continue;
185
+
186
+ const live = liveFields(world, entity, comp);
187
+ if (live === undefined) continue; // component absent live
188
+
189
+ const sourceRaw = sourceComps[compName];
190
+ if (sourceRaw === undefined) {
191
+ // Component present live but absent in source -> component-ADD override.
192
+ // Emit the whole live component value map (apply upserts with defaults).
193
+ overrides.push({
194
+ localId: lid as unknown as LocalEntityId,
195
+ comp: compName,
196
+ value: live,
197
+ });
198
+ continue;
199
+ }
200
+
201
+ // Component present in both -> per-field diff (field-PATCH overrides).
202
+ const baseline = baselineFields(comp, sourceRaw);
203
+ for (const fieldName of Object.keys(live)) {
204
+ if (!valuesEqual(live[fieldName], baseline[fieldName])) {
205
+ overrides.push({
206
+ localId: lid as unknown as LocalEntityId,
207
+ comp: compName,
208
+ field: fieldName,
209
+ value: live[fieldName],
210
+ });
211
+ }
212
+ }
213
+ }
214
+ }
215
+
216
+ return overrides;
217
+ }
@@ -0,0 +1,171 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ export const SHADOW_PERFORMANCE_ARTIFACT_SCHEMA = 'forgeax.shadow-performance/v1';
4
+
5
+ export type ShadowDiagnosticsMode = 'off' | 'on';
6
+
7
+ export interface ShadowPerformanceProvenance {
8
+ readonly commit: string;
9
+ readonly chrome: string | null;
10
+ readonly viewport: { readonly width: number; readonly height: number } | null;
11
+ readonly devicePixelRatio: number | null;
12
+ readonly trajectory: string;
13
+ readonly diagnostics: ShadowDiagnosticsMode;
14
+ }
15
+
16
+ export interface ShadowPerformanceFrame {
17
+ readonly frame: number;
18
+ readonly cpuFrameMs: number;
19
+ readonly gpuFrameMs: number | null;
20
+ }
21
+
22
+ export interface ShadowPerformanceArtifact {
23
+ readonly schema: typeof SHADOW_PERFORMANCE_ARTIFACT_SCHEMA;
24
+ readonly status: 'measured' | 'unavailable';
25
+ readonly provenance: ShadowPerformanceProvenance;
26
+ readonly frames: readonly ShadowPerformanceFrame[];
27
+ readonly summary: {
28
+ readonly frameCount: number;
29
+ readonly cpuFrameP95Ms: number | null;
30
+ readonly cpuFpsP01: number | null;
31
+ readonly gpuFrameP95Ms: number | null;
32
+ readonly gpuTimestamp: 'available' | 'unavailable';
33
+ readonly unavailableReason: string | null;
34
+ };
35
+ }
36
+
37
+ export interface ShadowPerformanceCaptureInput {
38
+ readonly provenance: ShadowPerformanceProvenance;
39
+ readonly frames: readonly ShadowPerformanceFrame[];
40
+ readonly unavailableReason?: string;
41
+ }
42
+
43
+ function assertFiniteNonNegative(value: number, field: string): void {
44
+ if (!Number.isFinite(value) || value < 0) {
45
+ throw new Error(`${field} must be a finite non-negative number`);
46
+ }
47
+ }
48
+
49
+ function nearestRank(values: readonly number[], quantile: number): number | null {
50
+ if (values.length === 0) return null;
51
+ const sorted = [...values].sort((left, right) => left - right);
52
+ const rank = Math.max(1, Math.ceil(quantile * sorted.length));
53
+ return sorted[rank - 1] ?? null;
54
+ }
55
+
56
+ function validateProvenance(provenance: ShadowPerformanceProvenance): void {
57
+ if (provenance.commit.trim().length === 0) throw new Error('commit is required');
58
+ if (provenance.trajectory.trim().length === 0) throw new Error('trajectory is required');
59
+ if (provenance.viewport !== null) {
60
+ if (!Number.isInteger(provenance.viewport.width) || provenance.viewport.width <= 0) {
61
+ throw new Error('viewport.width must be a positive integer');
62
+ }
63
+ if (!Number.isInteger(provenance.viewport.height) || provenance.viewport.height <= 0) {
64
+ throw new Error('viewport.height must be a positive integer');
65
+ }
66
+ }
67
+ if (provenance.devicePixelRatio !== null) {
68
+ assertFiniteNonNegative(provenance.devicePixelRatio, 'devicePixelRatio');
69
+ if (provenance.devicePixelRatio === 0) throw new Error('devicePixelRatio must be positive');
70
+ }
71
+ }
72
+
73
+ function validateFrames(frames: readonly ShadowPerformanceFrame[]): void {
74
+ let previousFrame = -1;
75
+ for (const sample of frames) {
76
+ if (!Number.isInteger(sample.frame) || sample.frame <= previousFrame) {
77
+ throw new Error('frame samples must have strictly increasing frame numbers');
78
+ }
79
+ previousFrame = sample.frame;
80
+ assertFiniteNonNegative(sample.cpuFrameMs, 'cpuFrameMs');
81
+ if (sample.gpuFrameMs !== null) assertFiniteNonNegative(sample.gpuFrameMs, 'gpuFrameMs');
82
+ }
83
+ }
84
+
85
+ export function summarizeShadowPerformanceCapture(
86
+ input: ShadowPerformanceCaptureInput,
87
+ ): ShadowPerformanceArtifact {
88
+ validateProvenance(input.provenance);
89
+ validateFrames(input.frames);
90
+ const cpuSamples = input.frames.map((sample) => sample.cpuFrameMs);
91
+ const gpuSamples = input.frames.flatMap((sample) =>
92
+ sample.gpuFrameMs === null ? [] : [sample.gpuFrameMs],
93
+ );
94
+ const gpuTimestamp = gpuSamples.length === input.frames.length && input.frames.length > 0;
95
+ const unavailableReason =
96
+ input.unavailableReason ??
97
+ (input.frames.length === 0
98
+ ? 'no frame samples were captured'
99
+ : gpuTimestamp
100
+ ? null
101
+ : 'GPU timestamp query was unavailable; CPU timings remain diagnostic only');
102
+ return {
103
+ schema: SHADOW_PERFORMANCE_ARTIFACT_SCHEMA,
104
+ status: input.frames.length === 0 ? 'unavailable' : 'measured',
105
+ provenance: input.provenance,
106
+ frames: input.frames,
107
+ summary: {
108
+ frameCount: input.frames.length,
109
+ cpuFrameP95Ms: nearestRank(cpuSamples, 0.95),
110
+ cpuFpsP01: nearestRank(
111
+ cpuSamples.map((frameMs) => (frameMs === 0 ? Number.POSITIVE_INFINITY : 1000 / frameMs)),
112
+ 0.01,
113
+ ),
114
+ gpuFrameP95Ms: nearestRank(gpuSamples, 0.95),
115
+ gpuTimestamp: gpuTimestamp ? 'available' : 'unavailable',
116
+ unavailableReason,
117
+ },
118
+ };
119
+ }
120
+
121
+ export function unavailableShadowPerformanceCapture(
122
+ provenance: ShadowPerformanceProvenance,
123
+ reason: string,
124
+ ): ShadowPerformanceArtifact {
125
+ if (reason.trim().length === 0) throw new Error('unavailable reason is required');
126
+ return summarizeShadowPerformanceCapture({ provenance, frames: [], unavailableReason: reason });
127
+ }
128
+
129
+ describe('shadow performance artifact contract', () => {
130
+ it('uses nearest-rank p95 and records CPU-only evidence when GPU timestamps are absent', () => {
131
+ const artifact = summarizeShadowPerformanceCapture({
132
+ provenance: {
133
+ commit: 'test-commit',
134
+ chrome: 'test-chrome',
135
+ viewport: { width: 1280, height: 720 },
136
+ devicePixelRatio: 1,
137
+ trajectory: 'cod-door-forward-back',
138
+ diagnostics: 'off',
139
+ },
140
+ frames: [
141
+ { frame: 1, cpuFrameMs: 10, gpuFrameMs: null },
142
+ { frame: 2, cpuFrameMs: 12, gpuFrameMs: null },
143
+ { frame: 3, cpuFrameMs: 20, gpuFrameMs: null },
144
+ ],
145
+ });
146
+ expect(artifact.schema).toBe(SHADOW_PERFORMANCE_ARTIFACT_SCHEMA);
147
+ expect(artifact.status).toBe('measured');
148
+ expect(artifact.summary.cpuFrameP95Ms).toBe(20);
149
+ expect(artifact.summary.gpuTimestamp).toBe('unavailable');
150
+ expect(artifact.summary.gpuFrameP95Ms).toBeNull();
151
+ expect(artifact.summary.unavailableReason).toContain('GPU timestamp');
152
+ });
153
+
154
+ it('does not turn an empty capture into a passing baseline', () => {
155
+ const artifact = unavailableShadowPerformanceCapture(
156
+ {
157
+ commit: 'test-commit',
158
+ chrome: null,
159
+ viewport: null,
160
+ devicePixelRatio: null,
161
+ trajectory: 'cod-door-forward-back',
162
+ diagnostics: 'on',
163
+ },
164
+ 'browser was not available',
165
+ );
166
+ expect(artifact.status).toBe('unavailable');
167
+ expect(artifact.summary.frameCount).toBe(0);
168
+ expect(artifact.summary.cpuFrameP95Ms).toBeNull();
169
+ expect(artifact.summary.unavailableReason).toBe('browser was not available');
170
+ });
171
+ });
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Type-only helper mirroring the `forgeax::sprite` shader's paramSchema
3
+ * (sprite.material.json). Field set is 1:1 with paramSchema entries; field
4
+ * order matches schema order so the std140 UBO layout (slot 0..3 = colorTint
5
+ * / region / pivotAndSize / slicesAndMode) reads top-to-bottom.
6
+ *
7
+ * feat-20260625-refactor-sprite-as-transparent-mesh M3 / w11 (D-4, D-6,
8
+ * F-3): paramSchema is now UBO-aligned (the 4 vec4 fields match the WGSL
9
+ * Material struct field names 1:1 so the generic std140 UBO writer
10
+ * `applyParamSnapshotToUbo` walks `derive(paramSchema).uboLayout.entries`
11
+ * and writes each field at its declared offset, no sprite-specific path).
12
+ *
13
+ * AI-user discoverability: annotate a sprite material's `values`
14
+ * literal as `SpriteParamValues` to get autocomplete on `slicesAndMode`,
15
+ * `pivotAndSize`, etc. Without the annotation the literal binds to
16
+ * `MaterialAsset.values: Record<string, unknown>` and field
17
+ * autocomplete is unavailable.
18
+ *
19
+ * Required fields:
20
+ * - `baseColorTexture`: AssetGuid string of a registered TextureAsset
21
+ * (renamed from the pre-w11 `texture` field for cross-material name
22
+ * consistency, D-4).
23
+ *
24
+ * Optional UBO fields (omit for identity defaults):
25
+ * - `colorTint`: vec4 `[r, g, b, a]` — texture sample multiplier
26
+ * (rgb * colorTint.rgb, alpha * colorTint.a). Default `[1, 1, 1, 1]`.
27
+ * - `region`: vec4 `[uMin, vMin, uW, vH]` — atlas sub-region. Default
28
+ * `[0, 0, 1, 1]`. Host pre-folds flipX / flipY into this vec4 (D-8):
29
+ * `flipX -> region.x += region.z; region.z = -region.z` (analog for Y).
30
+ * When composing with {@link SpriteRegionOverride}, the override
31
+ * replaces this asset-side region.
32
+ * - `pivotAndSize`: vec4 `[pivotX, pivotY, sizeX, sizeY]` — `.xy` is the
33
+ * pivot (0..1 normalised); `.zw` is the DEAD SLOT post-w11 (D-6 unit-
34
+ * quad: world scale flows entirely through Transform.world, no longer
35
+ * double-applied via the UBO). Default `[0.5, 0.5, 1, 1]`.
36
+ * - `slicesAndMode`: vec4 `[left, top, right, bottom-signed]` — 9-slice
37
+ * border widths in UV (0..1) on the source texture region. Sum of
38
+ * opposite borders must be < 1 (left+right < region width, top+bottom
39
+ * < region height); register-time validation surfaces structured
40
+ * `AssetError`. The `.w` carries the sliceMode sentinel: positive (or 0)
41
+ * = stretch (middle band stretches with the entity's scale, default);
42
+ * NEGATIVE = tile (middle band tiles via sampler `addressMode='repeat'`).
43
+ * Default `[0, 0, 0, 0]` (no 9-slice). Authoring tip: callers who want
44
+ * to keep the legacy `slices` + `sliceMode` split can compute
45
+ * `slicesAndMode = [l, t, r, mode===1 ? -b : b]` at the call site.
46
+ *
47
+ * Composes with {@link SpriteRegionOverride}: when both are present, the
48
+ * `slicesAndMode` are interpreted relative to the per-entity `region`
49
+ * override (AC-14), not the material's `values.region`.
50
+ *
51
+ * Sibling type, not a sibling asset kind: `MaterialAsset` is the only
52
+ * material asset shape; using `SpriteParamValues` as an annotation does
53
+ * not branch the closed `AssetUnion` (plan-strategy section D-1).
54
+ */
55
+ export type SpriteParamValues = {
56
+ baseColorTexture: string;
57
+ colorTint?: readonly [number, number, number, number];
58
+ region?: readonly [number, number, number, number];
59
+ pivotAndSize?: readonly [number, number, number, number];
60
+ slicesAndMode?: readonly [number, number, number, number];
61
+ };