@forgeax/engine-render 0.1.32 → 0.1.34

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 (624) hide show
  1. package/README.md +1374 -142
  2. package/dist/assembly/analytic-fog-registration.d.ts +3 -0
  3. package/dist/assembly/analytic-fog-registration.d.ts.map +1 -0
  4. package/dist/assembly/backend-contract.d.ts +2 -0
  5. package/dist/assembly/backend-contract.d.ts.map +1 -1
  6. package/dist/assembly/barrel-distortion-inspection.d.ts +3 -0
  7. package/dist/assembly/barrel-distortion-inspection.d.ts.map +1 -0
  8. package/dist/assembly/canvas-draw-guard.d.ts +3 -0
  9. package/dist/assembly/canvas-draw-guard.d.ts.map +1 -0
  10. package/dist/assembly/cloud-shadow-entry.d.ts +4 -0
  11. package/dist/assembly/cloud-shadow-entry.d.ts.map +1 -0
  12. package/dist/assembly/dynamic-geometry-host.d.ts +4 -1
  13. package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
  14. package/dist/assembly/dynamic-geometry-runtime.d.ts +1 -1
  15. package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -1
  16. package/dist/assembly/factory.d.ts +1 -1
  17. package/dist/assembly/factory.d.ts.map +1 -1
  18. package/dist/assembly/fxaa-registration.d.ts +4 -0
  19. package/dist/assembly/fxaa-registration.d.ts.map +1 -0
  20. package/dist/assembly/host-contract.d.ts +3 -3
  21. package/dist/assembly/host-contract.d.ts.map +1 -1
  22. package/dist/assembly/lod-observation.d.ts +4 -0
  23. package/dist/assembly/lod-observation.d.ts.map +1 -0
  24. package/dist/assembly/material/assembly.d.ts.map +1 -1
  25. package/dist/assembly/material/pipeline-helpers.d.ts +5 -0
  26. package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -1
  27. package/dist/assembly/material-shader-policy.d.ts +16 -2
  28. package/dist/assembly/material-shader-policy.d.ts.map +1 -1
  29. package/dist/assembly/material-shader-prewarm.d.ts.map +1 -1
  30. package/dist/assembly/motion-blur-registration.d.ts +3 -0
  31. package/dist/assembly/motion-blur-registration.d.ts.map +1 -0
  32. package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
  33. package/dist/assembly/recovery/renderer-recover.d.ts +2 -0
  34. package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
  35. package/dist/assembly/render-feature-post-processes.d.ts +6 -0
  36. package/dist/assembly/render-feature-post-processes.d.ts.map +1 -0
  37. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  38. package/dist/assembly/renderer-feature-inspection.d.ts +1 -1
  39. package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -1
  40. package/dist/assembly/renderer-frame-transaction.d.ts +12 -0
  41. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
  42. package/dist/assembly/renderer-inspection.d.ts +11 -0
  43. package/dist/assembly/renderer-inspection.d.ts.map +1 -1
  44. package/dist/assembly/temporal-post-process-prewarm.d.ts +13 -0
  45. package/dist/assembly/temporal-post-process-prewarm.d.ts.map +1 -0
  46. package/dist/assembly/webgpu-pbr-ready.d.ts +1 -0
  47. package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -1
  48. package/dist/assembly/webgpu-ready-contract.d.ts +4 -3
  49. package/dist/assembly/webgpu-ready-contract.d.ts.map +1 -1
  50. package/dist/assembly/webgpu-ready-per-pass.d.ts +39 -0
  51. package/dist/assembly/webgpu-ready-per-pass.d.ts.map +1 -0
  52. package/dist/assembly/webgpu-ready.d.ts +2 -2
  53. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  54. package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -1
  55. package/dist/assembly/webgpu-renderer-observation-owner.d.ts +35 -0
  56. package/dist/assembly/webgpu-renderer-observation-owner.d.ts.map +1 -0
  57. package/dist/assembly/webgpu-renderer.d.ts +1 -1
  58. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  59. package/dist/authoring.mjs +1 -1
  60. package/dist/barrel-distortion.d.ts +47 -0
  61. package/dist/barrel-distortion.d.ts.map +1 -0
  62. package/dist/bloom-admission.d.ts +13 -0
  63. package/dist/bloom-admission.d.ts.map +1 -0
  64. package/dist/{chunk-PA5DRJNI.mjs → chunk-ELJFJ2BU.mjs} +2 -2
  65. package/dist/chunk-ELJFJ2BU.mjs.map +1 -0
  66. package/dist/{chunk-JCIRYQ4V.mjs → chunk-HEB564WF.mjs} +10 -4
  67. package/dist/chunk-HEB564WF.mjs.map +1 -0
  68. package/dist/{chunk-JRIPCMYC.mjs → chunk-MKDIT2EM.mjs} +1584 -375
  69. package/dist/chunk-MKDIT2EM.mjs.map +1 -0
  70. package/dist/{chunk-S665NJNF.mjs → chunk-OCDLEI6I.mjs} +3 -3
  71. package/dist/{chunk-S665NJNF.mjs.map → chunk-OCDLEI6I.mjs.map} +1 -1
  72. package/dist/chunk-ODZWR6JQ.mjs +4927 -0
  73. package/dist/chunk-ODZWR6JQ.mjs.map +1 -0
  74. package/dist/{chunk-DRR7D3KX.mjs → chunk-SHFUFJ5N.mjs} +192 -18
  75. package/dist/chunk-SHFUFJ5N.mjs.map +1 -0
  76. package/dist/{chunk-4NNZQCL3.mjs → chunk-UI5SFODX.mjs} +223 -277
  77. package/dist/chunk-UI5SFODX.mjs.map +1 -0
  78. package/dist/{chunk-GWCEMDVR.mjs → chunk-UINHLCZA.mjs} +787 -80
  79. package/dist/chunk-UINHLCZA.mjs.map +1 -0
  80. package/dist/{chunk-6TFBXLRJ.mjs → chunk-WEX45HKH.mjs} +222 -337
  81. package/dist/chunk-WEX45HKH.mjs.map +1 -0
  82. package/dist/cloud/density.d.ts +55 -0
  83. package/dist/cloud/density.d.ts.map +1 -0
  84. package/dist/cloud/extract.d.ts +25 -0
  85. package/dist/cloud/extract.d.ts.map +1 -0
  86. package/dist/cloud/feature.d.ts +57 -0
  87. package/dist/cloud/feature.d.ts.map +1 -0
  88. package/dist/cloud/frame-context.d.ts +8 -0
  89. package/dist/cloud/frame-context.d.ts.map +1 -0
  90. package/dist/cloud/inspection.d.ts +59 -0
  91. package/dist/cloud/inspection.d.ts.map +1 -0
  92. package/dist/cloud/optics.d.ts +56 -0
  93. package/dist/cloud/optics.d.ts.map +1 -0
  94. package/dist/cloud/parameters.d.ts +73 -0
  95. package/dist/cloud/parameters.d.ts.map +1 -0
  96. package/dist/cloud/resources.d.ts +60 -0
  97. package/dist/cloud/resources.d.ts.map +1 -0
  98. package/dist/cloud/shadow.d.ts +42 -0
  99. package/dist/cloud/shadow.d.ts.map +1 -0
  100. package/dist/cloud/temporal.d.ts +74 -0
  101. package/dist/cloud/temporal.d.ts.map +1 -0
  102. package/dist/components/atmosphere.d.ts +2 -0
  103. package/dist/components/atmosphere.d.ts.map +1 -1
  104. package/dist/components/barrel-distortion.d.ts +13 -0
  105. package/dist/components/barrel-distortion.d.ts.map +1 -0
  106. package/dist/components/camera.d.ts +20 -4
  107. package/dist/components/camera.d.ts.map +1 -1
  108. package/dist/components/cloud-layer.d.ts +29 -0
  109. package/dist/components/cloud-layer.d.ts.map +1 -0
  110. package/dist/components/index.d.ts +2 -0
  111. package/dist/components/index.d.ts.map +1 -1
  112. package/dist/components/instances.d.ts +20 -6
  113. package/dist/components/instances.d.ts.map +1 -1
  114. package/dist/components/mesh-filter.d.ts +6 -5
  115. package/dist/components/mesh-filter.d.ts.map +1 -1
  116. package/dist/components/motion-blur.d.ts +1 -0
  117. package/dist/components/motion-blur.d.ts.map +1 -1
  118. package/dist/construct-renderer.d.ts +1 -1
  119. package/dist/construct-renderer.d.ts.map +1 -1
  120. package/dist/construct-renderer.mjs +9751 -3528
  121. package/dist/construct-renderer.mjs.map +1 -1
  122. package/dist/device/gpu-residency.d.ts +6 -0
  123. package/dist/device/gpu-residency.d.ts.map +1 -1
  124. package/dist/dynamic-geometry.d.ts +5 -1
  125. package/dist/dynamic-geometry.d.ts.map +1 -1
  126. package/dist/environment/analytic-fog.d.ts +6 -0
  127. package/dist/environment/analytic-fog.d.ts.map +1 -0
  128. package/dist/errors/cloud.d.ts +59 -0
  129. package/dist/errors/cloud.d.ts.map +1 -0
  130. package/dist/errors/render.d.ts +23 -5
  131. package/dist/errors/render.d.ts.map +1 -1
  132. package/dist/examples/single-layer-medium-surface.d.ts +47 -0
  133. package/dist/examples/single-layer-medium-surface.d.ts.map +1 -0
  134. package/dist/extract/camera.d.ts.map +1 -1
  135. package/dist/extract/contracts.d.ts +12 -1
  136. package/dist/extract/contracts.d.ts.map +1 -1
  137. package/dist/extract/environment.d.ts +2 -0
  138. package/dist/extract/environment.d.ts.map +1 -1
  139. package/dist/features/barrel-distortion.d.ts +29 -0
  140. package/dist/features/barrel-distortion.d.ts.map +1 -0
  141. package/dist/features/error-reporting.d.ts +17 -0
  142. package/dist/features/error-reporting.d.ts.map +1 -0
  143. package/dist/features/host.d.ts +15 -0
  144. package/dist/features/host.d.ts.map +1 -1
  145. package/dist/features/motion-blur/motion-blur-feature.d.ts +20 -2
  146. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -1
  147. package/dist/features/motion-blur/motion-blur-params.d.ts +21 -0
  148. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -1
  149. package/dist/features/motion-blur/motion-blur-runtime.d.ts +54 -0
  150. package/dist/features/motion-blur/motion-blur-runtime.d.ts.map +1 -0
  151. package/dist/features/plan.d.ts +15 -4
  152. package/dist/features/plan.d.ts.map +1 -1
  153. package/dist/features/prepared-gpu-work.d.ts +9 -5
  154. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  155. package/dist/features/render-graph-compute.d.ts.map +1 -1
  156. package/dist/features/render-graph-contribution.d.ts +5 -0
  157. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  158. package/dist/features/render-graph-raster.d.ts +1 -0
  159. package/dist/features/render-graph-raster.d.ts.map +1 -1
  160. package/dist/features/targets.d.ts +2 -0
  161. package/dist/features/targets.d.ts.map +1 -1
  162. package/dist/features/types.d.ts +44 -0
  163. package/dist/features/types.d.ts.map +1 -1
  164. package/dist/fullscreen-post-process-pass.d.ts +15 -7
  165. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  166. package/dist/gpu-dirty-ranges.d.ts +11 -0
  167. package/dist/gpu-dirty-ranges.d.ts.map +1 -0
  168. package/dist/gpu-driven/batch-topology.d.ts +17 -0
  169. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  170. package/dist/gpu-driven/material-artifacts.d.ts +6 -0
  171. package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
  172. package/dist/gpu-driven/prepared-draw.d.ts +7 -0
  173. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  174. package/dist/gpu-driven/production-raster-material.d.ts +178 -0
  175. package/dist/gpu-driven/production-raster-material.d.ts.map +1 -0
  176. package/dist/gpu-driven/production-raster.d.ts +50 -4
  177. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  178. package/dist/gpu-driven/resource-allocation.d.ts +31 -0
  179. package/dist/gpu-driven/resource-allocation.d.ts.map +1 -0
  180. package/dist/gpu-driven/shadow-ownership.d.ts +14 -0
  181. package/dist/gpu-driven/shadow-ownership.d.ts.map +1 -0
  182. package/dist/gpu-driven/view-gpu.d.ts +35 -2
  183. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  184. package/dist/gpu-scene.d.ts +11 -1
  185. package/dist/gpu-scene.d.ts.map +1 -1
  186. package/dist/hdrp-buffers.d.ts +2 -2
  187. package/dist/hdrp-buffers.d.ts.map +1 -1
  188. package/dist/ibl/skylight-bind-group.d.ts +10 -1
  189. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  190. package/dist/index.d.ts +31 -8
  191. package/dist/index.d.ts.map +1 -1
  192. package/dist/index.mjs +258 -8
  193. package/dist/index.mjs.map +1 -1
  194. package/dist/inspection-types.d.ts +178 -3
  195. package/dist/inspection-types.d.ts.map +1 -1
  196. package/dist/instance-buffer-cache.d.ts +4 -4
  197. package/dist/instance-buffer-cache.d.ts.map +1 -1
  198. package/dist/instances.d.ts +49 -94
  199. package/dist/instances.d.ts.map +1 -1
  200. package/dist/internal.mjs +7 -7
  201. package/dist/pbr-pipeline.d.ts +19 -1
  202. package/dist/pbr-pipeline.d.ts.map +1 -1
  203. package/dist/pipeline/single-layer-medium-passes.d.ts +73 -0
  204. package/dist/pipeline/single-layer-medium-passes.d.ts.map +1 -0
  205. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  206. package/dist/pipeline/standard-output/graph.d.ts.map +1 -1
  207. package/dist/pipeline/standard-output/types.d.ts +4 -2
  208. package/dist/pipeline/standard-output/types.d.ts.map +1 -1
  209. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  210. package/dist/pipeline/standard-post.d.ts +28 -19
  211. package/dist/pipeline/standard-post.d.ts.map +1 -1
  212. package/dist/pipeline-builder.d.ts +1 -1
  213. package/dist/pipeline-builder.d.ts.map +1 -1
  214. package/dist/pipeline-spec.d.ts +2 -2
  215. package/dist/plugin.d.ts.map +1 -1
  216. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -0
  217. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  218. package/dist/record/barrel-distortion-frame.d.ts +15 -0
  219. package/dist/record/barrel-distortion-frame.d.ts.map +1 -0
  220. package/dist/record/dynamic-geometry-consumption.d.ts +10 -2
  221. package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -1
  222. package/dist/record/fold-buckets.d.ts +95 -0
  223. package/dist/record/fold-buckets.d.ts.map +1 -0
  224. package/dist/record/fold-instance-buffer.d.ts +6 -0
  225. package/dist/record/fold-instance-buffer.d.ts.map +1 -0
  226. package/dist/record/frame-lighting.d.ts +1 -0
  227. package/dist/record/frame-lighting.d.ts.map +1 -1
  228. package/dist/record/frame-snapshot.d.ts +40 -3
  229. package/dist/record/frame-snapshot.d.ts.map +1 -1
  230. package/dist/record/frame-targets.d.ts.map +1 -1
  231. package/dist/record/frame.d.ts +14 -62
  232. package/dist/record/frame.d.ts.map +1 -1
  233. package/dist/record/gpu-draw-receipts.d.ts +11 -0
  234. package/dist/record/gpu-draw-receipts.d.ts.map +1 -0
  235. package/dist/record/gpu-timing.d.ts +8 -0
  236. package/dist/record/gpu-timing.d.ts.map +1 -1
  237. package/dist/record/main-pass-geometry.d.ts +21 -5
  238. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  239. package/dist/record/main-pass-material.d.ts +7 -1
  240. package/dist/record/main-pass-material.d.ts.map +1 -1
  241. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  242. package/dist/record/main-pass.d.ts +13 -2
  243. package/dist/record/main-pass.d.ts.map +1 -1
  244. package/dist/record/mesh-ssbo.d.ts +6 -5
  245. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  246. package/dist/record/motion-blur-receipt.d.ts +11 -0
  247. package/dist/record/motion-blur-receipt.d.ts.map +1 -0
  248. package/dist/record/probe-blend-buffer.d.ts +16 -0
  249. package/dist/record/probe-blend-buffer.d.ts.map +1 -0
  250. package/dist/record/recovery-pipeline.d.ts.map +1 -1
  251. package/dist/record/render-context.d.ts +34 -31
  252. package/dist/record/render-context.d.ts.map +1 -1
  253. package/dist/record/shadow-pass.d.ts +2 -0
  254. package/dist/record/shadow-pass.d.ts.map +1 -1
  255. package/dist/record/skybox-post-pass.d.ts +6 -4
  256. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  257. package/dist/record/typed-frame-graph.d.ts +22 -2
  258. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  259. package/dist/record/view-ubo.d.ts +11 -3
  260. package/dist/record/view-ubo.d.ts.map +1 -1
  261. package/dist/record/volume-params.d.ts +9 -0
  262. package/dist/record/volume-params.d.ts.map +1 -0
  263. package/dist/recovery/render-system-candidate.d.ts +10 -0
  264. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  265. package/dist/reflection/record-owner.d.ts.map +1 -1
  266. package/dist/render-contract.d.ts +66 -8
  267. package/dist/render-contract.d.ts.map +1 -1
  268. package/dist/render-graph-primitives.d.ts.map +1 -1
  269. package/dist/render-pipeline.d.ts +106 -3
  270. package/dist/render-pipeline.d.ts.map +1 -1
  271. package/dist/render-system-extract-tail.d.ts +3 -2
  272. package/dist/render-system-extract-tail.d.ts.map +1 -1
  273. package/dist/render-system-extract.d.ts +24 -10
  274. package/dist/render-system-extract.d.ts.map +1 -1
  275. package/dist/render-system-presentation.d.ts +23 -0
  276. package/dist/render-system-presentation.d.ts.map +1 -0
  277. package/dist/render-system-producer-roots.d.ts +10 -0
  278. package/dist/render-system-producer-roots.d.ts.map +1 -0
  279. package/dist/render-system-residency.d.ts +12 -0
  280. package/dist/render-system-residency.d.ts.map +1 -0
  281. package/dist/render-system.d.ts +26 -15
  282. package/dist/render-system.d.ts.map +1 -1
  283. package/dist/scene/probe-blend.d.ts +27 -0
  284. package/dist/scene/probe-blend.d.ts.map +1 -1
  285. package/dist/scene/render-scene.d.ts +14 -5
  286. package/dist/scene/render-scene.d.ts.map +1 -1
  287. package/dist/ssao-buffers.d.ts +9 -0
  288. package/dist/ssao-buffers.d.ts.map +1 -1
  289. package/dist/surface/dynamic-input.d.ts +133 -0
  290. package/dist/surface/dynamic-input.d.ts.map +1 -0
  291. package/dist/surface/gpu-driven.d.ts +41 -0
  292. package/dist/surface/gpu-driven.d.ts.map +1 -0
  293. package/dist/surface/submission-observation.d.ts +136 -0
  294. package/dist/surface/submission-observation.d.ts.map +1 -0
  295. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  296. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  297. package/dist/temporal/frame.d.ts +7 -0
  298. package/dist/temporal/frame.d.ts.map +1 -1
  299. package/dist/temporal/gpu.d.ts +13 -1
  300. package/dist/temporal/gpu.d.ts.map +1 -1
  301. package/dist/temporal/index.mjs +5 -5
  302. package/dist/temporal/inspection.d.ts.map +1 -1
  303. package/dist/temporal/standard-scene-data.d.ts.map +1 -1
  304. package/dist/temporal/target-coverage-attachment.d.ts.map +1 -1
  305. package/dist/temporal/view.d.ts +6 -1
  306. package/dist/temporal/view.d.ts.map +1 -1
  307. package/dist/transmission/single-layer-medium.d.ts +89 -0
  308. package/dist/transmission/single-layer-medium.d.ts.map +1 -0
  309. package/dist/typed-render-graph-primitives.d.ts +24 -9
  310. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  311. package/dist/volume/component.d.ts +9 -5
  312. package/dist/volume/component.d.ts.map +1 -1
  313. package/dist/volume/extract.d.ts +1 -1
  314. package/dist/volume/extract.d.ts.map +1 -1
  315. package/dist/volume/inspection.d.ts +2 -0
  316. package/dist/volume/inspection.d.ts.map +1 -1
  317. package/dist/volume/passes.d.ts +4 -1
  318. package/dist/volume/passes.d.ts.map +1 -1
  319. package/dist/volume/resources.d.ts.map +1 -1
  320. package/dist/volume/temporal.d.ts +3 -1
  321. package/dist/volume/temporal.d.ts.map +1 -1
  322. package/package.json +22 -21
  323. package/src/__tests__/analytic-fog-graph.unit.test.ts +199 -0
  324. package/src/__tests__/analytic-fog-optics.unit.test.ts +38 -0
  325. package/src/__tests__/atmosphere-daylight.dawn.test.ts +72 -0
  326. package/src/__tests__/barrel-distortion-lkg.integration.test.ts +353 -0
  327. package/src/__tests__/barrel-distortion.dawn.test.ts +41 -0
  328. package/src/__tests__/barrel-distortion.unit.test.ts +364 -0
  329. package/src/__tests__/bloom-exact-zero.unit.test.ts +112 -18
  330. package/src/__tests__/bloom-lifecycle.integration.test.ts +17 -4
  331. package/src/__tests__/construct-renderer-identity.unit.test.ts +49 -0
  332. package/src/__tests__/detached-recovery-graph.unit.test.ts +277 -0
  333. package/src/__tests__/device-loss-fanout.unit.test.ts +36 -1
  334. package/src/__tests__/docs-gate-green.unit.test.ts +112 -1
  335. package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +20 -0
  336. package/src/__tests__/environment-fog-lanes.integration.test.ts +14 -0
  337. package/src/__tests__/environment-selection.unit.test.ts +12 -0
  338. package/src/__tests__/factory-contract.integration.test.ts +626 -113
  339. package/src/__tests__/feature-depth-input.dawn.test.ts +129 -2
  340. package/src/__tests__/frame-camera-selection.unit.test.ts +39 -1
  341. package/src/__tests__/frame-plan-contract.unit.test.ts +2 -0
  342. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +14 -3
  343. package/src/__tests__/gpu-dirty-ranges.unit.test.ts +22 -0
  344. package/src/__tests__/gpu-driven-baseline.characterization.test.ts +16 -3
  345. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +12 -0
  346. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +2 -1
  347. package/src/__tests__/gpu-driven-material-artifacts.unit.test.ts +143 -0
  348. package/src/__tests__/gpu-driven-pbr.dawn.test.ts +2 -2
  349. package/src/__tests__/gpu-driven-production.integration.test.ts +482 -3
  350. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +7 -6
  351. package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +1 -1
  352. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +103 -4
  353. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +18 -2
  354. package/src/__tests__/gpu-driven-view.browser.test.ts +5 -8
  355. package/src/__tests__/gpu-driven-view.dawn.test.ts +6 -2
  356. package/src/__tests__/gpu-driven-view.unit.test.ts +1 -1
  357. package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +1 -0
  358. package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -4
  359. package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +1 -0
  360. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +12 -0
  361. package/src/__tests__/gpu-scene.unit.test.ts +210 -9
  362. package/src/__tests__/instance-allocation-failure.unit.test.ts +57 -0
  363. package/src/__tests__/instances-culling.integration.test.ts +10 -36
  364. package/src/__tests__/instances-store.unit.test.ts +105 -238
  365. package/src/__tests__/instances-world-ownership.integration.test.ts +62 -0
  366. package/src/__tests__/main-pass-material-medium-selection.unit.test.ts +146 -0
  367. package/src/__tests__/material-shader-prewarm.unit.test.ts +59 -0
  368. package/src/__tests__/material-snapshot-mutation.integration.test.ts +39 -1
  369. package/src/__tests__/mesh-submission-lifetime.unit.test.ts +31 -0
  370. package/src/__tests__/morph-culling-reentry.dawn.test.ts +5 -5
  371. package/src/__tests__/morph-visual-evidence.integration.test.ts +8 -7
  372. package/src/__tests__/motion-blur-compute.dawn.test.ts +589 -0
  373. package/src/__tests__/motion-blur.pixel.integration.test.ts +2 -2
  374. package/src/__tests__/nineslice-handle-surface.unit.test.ts +4 -4
  375. package/src/__tests__/pbr-view-layout.unit.test.ts +9 -0
  376. package/src/__tests__/physical-clearcoat.integration.test.ts +58 -0
  377. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +21 -0
  378. package/src/__tests__/prepared-graphics-capability.unit.test.ts +66 -2
  379. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +86 -0
  380. package/src/__tests__/probe-bindings.unit.test.ts +582 -1
  381. package/src/__tests__/probe-scene-dirty.integration.test.ts +28 -1
  382. package/src/__tests__/public-surface.test-d.ts +8 -0
  383. package/src/__tests__/receipt-observation-retirement.unit.test.ts +65 -0
  384. package/src/__tests__/recovery-candidate-prepare.contract.test.ts +69 -0
  385. package/src/__tests__/render-error-code-owner.test-d.ts +9 -0
  386. package/src/__tests__/render-feature-diagnostics.unit.test.ts +15 -2
  387. package/src/__tests__/render-feature-error-reporting.unit.test.ts +44 -0
  388. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +10 -1
  389. package/src/__tests__/render-feature-retry.unit.test.ts +12 -1
  390. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +23 -0
  391. package/src/__tests__/render-scene-mixed-updates.integration.test.ts +145 -19
  392. package/src/__tests__/render-scene-projection.unit.test.ts +36 -11
  393. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +37 -6
  394. package/src/__tests__/render-target-probe-soak.perf.test.ts +2 -2
  395. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +3 -3
  396. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +5 -2
  397. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +41 -7
  398. package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +16 -0
  399. package/src/__tests__/renderer-frame-transaction.integration.test.ts +33 -11
  400. package/src/__tests__/resource-allocation.unit.test.ts +123 -0
  401. package/src/__tests__/shader-manifest-fixture.ts +4 -4
  402. package/src/__tests__/single-layer-medium-passes.unit.test.ts +275 -0
  403. package/src/__tests__/skin-motion-regression.unit.test.ts +70 -1
  404. package/src/__tests__/skin-palette-recycling.dawn.test.ts +97 -0
  405. package/src/__tests__/skinned-shadow-caster.test.ts +17 -0
  406. package/src/__tests__/ssr-carrier-public-contract.unit.test.ts +21 -0
  407. package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +4 -4
  408. package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +2 -2
  409. package/src/__tests__/ssr-gpu-dispatch.ts +1 -1
  410. package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +6 -2
  411. package/src/__tests__/standard-lighting-write.unit.test.ts +2 -1
  412. package/src/__tests__/standard-output-chain-contract.unit.test.ts +28 -0
  413. package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +46 -1
  414. package/src/__tests__/standard-pipeline.dawn.test.ts +1 -1
  415. package/src/__tests__/standard-pipeline.integration.test.ts +200 -9
  416. package/src/__tests__/surface-dynamic-buffer-lifecycle.unit.test.ts +506 -0
  417. package/src/__tests__/surface-submission-observation.unit.test.ts +812 -0
  418. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +32 -0
  419. package/src/__tests__/temporal-performance.integration.test.ts +3 -3
  420. package/src/__tests__/temporal-reset-matrix.unit.test.ts +10 -0
  421. package/src/__tests__/temporal-view.unit.test.ts +2 -1
  422. package/src/__tests__/typed-pipeline-topology.unit.test.ts +20 -4
  423. package/src/__tests__/visibility-instances.integration.test.ts +7 -19
  424. package/src/__tests__/visibility-producer-matrix.integration.test.ts +9 -20
  425. package/src/__tests__/volume-optics-oracle.unit.test.ts +7 -3
  426. package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +189 -15
  427. package/src/__tests__/volumetric-fog-errors.unit.test.ts +4 -3
  428. package/src/__tests__/volumetric-fog-multiple.unit.test.ts +55 -0
  429. package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +1 -1
  430. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +558 -68
  431. package/src/__tests__/volumetric-fog-temporal.unit.test.ts +27 -0
  432. package/src/__tests__/volumetric-fog-topology.unit.test.ts +23 -5
  433. package/src/assembly/analytic-fog-registration.ts +14 -0
  434. package/src/assembly/backend-contract.ts +30 -0
  435. package/src/assembly/barrel-distortion-inspection.ts +22 -0
  436. package/src/assembly/canvas-draw-guard.ts +11 -0
  437. package/src/assembly/cloud-shadow-entry.ts +22 -0
  438. package/src/assembly/dynamic-geometry-host.ts +65 -37
  439. package/src/assembly/dynamic-geometry-runtime.ts +7 -1
  440. package/src/assembly/factory.ts +2 -30
  441. package/src/assembly/fxaa-registration.ts +17 -0
  442. package/src/assembly/host-contract.ts +3 -3
  443. package/src/assembly/lod-observation.ts +12 -0
  444. package/src/assembly/material/assembly.ts +25 -13
  445. package/src/assembly/material/pipeline-helpers.ts +53 -12
  446. package/src/assembly/material-shader-policy.ts +55 -0
  447. package/src/assembly/material-shader-prewarm.ts +21 -10
  448. package/src/assembly/motion-blur-registration.ts +17 -0
  449. package/src/assembly/recovery/device-loss-fanout.ts +13 -0
  450. package/src/assembly/recovery/renderer-recover.ts +41 -18
  451. package/src/assembly/render-feature-post-processes.ts +54 -0
  452. package/src/assembly/renderer-facade.ts +6 -1
  453. package/src/assembly/renderer-feature-inspection.ts +8 -2
  454. package/src/assembly/renderer-frame-transaction.ts +23 -0
  455. package/src/assembly/renderer-inspection.ts +28 -0
  456. package/src/assembly/skin-palette-owner.ts +1 -1
  457. package/src/assembly/temporal-post-process-prewarm.ts +40 -0
  458. package/src/assembly/webgpu-pbr-ready.ts +9 -1
  459. package/src/assembly/webgpu-ready-contract.ts +8 -3
  460. package/src/assembly/webgpu-ready-per-pass.ts +104 -0
  461. package/src/assembly/webgpu-ready.ts +296 -306
  462. package/src/assembly/webgpu-renderer-bootstrap.ts +0 -12
  463. package/src/assembly/webgpu-renderer-observation-owner.ts +222 -0
  464. package/src/assembly/webgpu-renderer.ts +228 -281
  465. package/src/assembly/webgpu-vertex-layouts.ts +1 -1
  466. package/src/barrel-distortion.ts +247 -0
  467. package/src/bloom-admission.ts +21 -0
  468. package/src/cloud/__tests__/cloud-density-parity.dawn.test.ts +173 -0
  469. package/src/cloud/__tests__/cloud-layer-framebuffer-y.dawn.test.ts +265 -0
  470. package/src/cloud/__tests__/cloud-layer.browser.test.ts +432 -0
  471. package/src/cloud/__tests__/cloud-layer.unit.test.ts +634 -0
  472. package/src/cloud/density.ts +600 -0
  473. package/src/cloud/extract.ts +110 -0
  474. package/src/cloud/feature.ts +1810 -0
  475. package/src/cloud/frame-context.ts +42 -0
  476. package/src/cloud/inspection.ts +130 -0
  477. package/src/cloud/optics.ts +285 -0
  478. package/src/cloud/parameters.ts +255 -0
  479. package/src/cloud/resources.ts +122 -0
  480. package/src/cloud/shadow.ts +167 -0
  481. package/src/cloud/temporal.ts +226 -0
  482. package/src/components/__tests__/motion-blur.unit.test.ts +1 -0
  483. package/src/components/atmosphere.ts +4 -0
  484. package/src/components/barrel-distortion.ts +46 -0
  485. package/src/components/camera.ts +66 -10
  486. package/src/components/cloud-layer.ts +47 -0
  487. package/src/components/index.ts +2 -0
  488. package/src/components/instances.ts +18 -45
  489. package/src/components/mesh-filter.ts +11 -9
  490. package/src/components/motion-blur.ts +1 -0
  491. package/src/components/sprite-instances.ts +1 -1
  492. package/src/construct-renderer.ts +1 -1
  493. package/src/device/gpu-residency.ts +56 -12
  494. package/src/dynamic-geometry.ts +12 -1
  495. package/src/environment/analytic-fog.ts +44 -0
  496. package/src/environment/background.ts +2 -2
  497. package/src/errors/cloud.ts +103 -0
  498. package/src/errors/render.ts +58 -8
  499. package/src/examples/single-layer-medium-surface.ts +59 -0
  500. package/src/extract/camera.ts +35 -8
  501. package/src/extract/contracts.ts +12 -0
  502. package/src/extract/environment.ts +4 -0
  503. package/src/features/barrel-distortion.ts +172 -0
  504. package/src/features/error-reporting.ts +98 -0
  505. package/src/features/host.ts +138 -24
  506. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +111 -1
  507. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +58 -3
  508. package/src/features/motion-blur/motion-blur-feature.ts +1519 -15
  509. package/src/features/motion-blur/motion-blur-params.ts +70 -2
  510. package/src/features/motion-blur/motion-blur-runtime.ts +176 -0
  511. package/src/features/plan.ts +33 -8
  512. package/src/features/prepared-gpu-work.ts +86 -35
  513. package/src/features/render-graph-compute.ts +13 -5
  514. package/src/features/render-graph-contribution.ts +11 -0
  515. package/src/features/render-graph-raster.ts +45 -3
  516. package/src/features/targets.ts +66 -0
  517. package/src/features/types.ts +47 -0
  518. package/src/fullscreen-post-process-pass.ts +41 -9
  519. package/src/gpu-dirty-ranges.ts +48 -0
  520. package/src/gpu-driven/batch-topology.ts +53 -0
  521. package/src/gpu-driven/material-artifacts.ts +35 -32
  522. package/src/gpu-driven/prepared-draw.ts +27 -14
  523. package/src/gpu-driven/production-raster-material.ts +1894 -0
  524. package/src/gpu-driven/production-raster.ts +904 -787
  525. package/src/gpu-driven/resource-allocation.ts +142 -0
  526. package/src/gpu-driven/shadow-ownership.ts +71 -0
  527. package/src/gpu-driven/view-gpu.ts +181 -10
  528. package/src/gpu-scene.ts +259 -101
  529. package/src/hdrp-buffers.ts +4 -3
  530. package/src/ibl/skylight-bind-group.ts +49 -7
  531. package/src/index.ts +228 -9
  532. package/src/inspection-types.ts +222 -2
  533. package/src/instance-buffer-cache.ts +4 -4
  534. package/src/instances.ts +151 -492
  535. package/src/pbr-pipeline.ts +219 -13
  536. package/src/pipeline/single-layer-medium-passes.ts +267 -0
  537. package/src/pipeline/standard-forward-lane.ts +313 -57
  538. package/src/pipeline/standard-output/graph.ts +8 -2
  539. package/src/pipeline/standard-output/types.ts +12 -1
  540. package/src/pipeline/standard-pipeline.ts +291 -18
  541. package/src/pipeline/standard-post.ts +397 -102
  542. package/src/pipeline-builder.ts +1 -1
  543. package/src/pipeline-spec.ts +5 -5
  544. package/src/plugin.ts +4 -0
  545. package/src/points-lines/__tests__/points-lines.bench.ts +17 -8
  546. package/src/points-lines/__tests__/view-ubo.unit.test.ts +2 -1
  547. package/src/prepare/prepared-graphics-resolver.ts +2 -0
  548. package/src/record/__tests__/main-pass-geometry.unit.test.ts +30 -0
  549. package/src/record/__tests__/sprite-material-abi.unit.test.ts +1 -1
  550. package/src/record/__tests__/temporal-payload.unit.test.ts +3 -2
  551. package/src/record/__tests__/transparent-group2-selection.unit.test.ts +11 -0
  552. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +1 -0
  553. package/src/record/__tests__/view-ubo-layout.unit.test.ts +4 -3
  554. package/src/record/barrel-distortion-frame.ts +110 -0
  555. package/src/record/dynamic-geometry-consumption.ts +39 -9
  556. package/src/record/fold-buckets.ts +852 -0
  557. package/src/record/fold-instance-buffer.ts +51 -0
  558. package/src/record/frame-lighting.ts +36 -2
  559. package/src/record/frame-snapshot.ts +44 -4
  560. package/src/record/frame-targets.ts +10 -6
  561. package/src/record/frame.ts +373 -1099
  562. package/src/record/gpu-draw-receipts.ts +38 -0
  563. package/src/record/gpu-timing.ts +48 -5
  564. package/src/record/main-pass-geometry.ts +281 -83
  565. package/src/record/main-pass-material.ts +66 -4
  566. package/src/record/main-pass-sprite-draws.ts +13 -66
  567. package/src/record/main-pass.ts +156 -20
  568. package/src/record/mesh-ssbo.ts +43 -6
  569. package/src/record/motion-blur-receipt.ts +91 -0
  570. package/src/record/probe-blend-buffer.ts +180 -0
  571. package/src/record/recovery-pipeline.ts +35 -3
  572. package/src/record/render-context.ts +51 -31
  573. package/src/record/shadow-pass.ts +36 -2
  574. package/src/record/skybox-post-pass.ts +150 -200
  575. package/src/record/typed-frame-graph.ts +824 -44
  576. package/src/record/view-ubo.ts +26 -3
  577. package/src/record/volume-params.ts +225 -0
  578. package/src/recovery/render-system-candidate.ts +257 -52
  579. package/src/reflection/record-owner.ts +7 -3
  580. package/src/render-contract.ts +71 -8
  581. package/src/render-graph-primitives.ts +7 -1
  582. package/src/render-pipeline.ts +136 -1
  583. package/src/render-system-extract-tail.ts +72 -60
  584. package/src/render-system-extract.ts +117 -87
  585. package/src/render-system-presentation.ts +56 -0
  586. package/src/render-system-producer-roots.ts +96 -0
  587. package/src/render-system-residency.ts +159 -0
  588. package/src/render-system.ts +601 -482
  589. package/src/scene/probe-blend.ts +96 -4
  590. package/src/scene/render-scene.ts +431 -281
  591. package/src/ssao-buffers.ts +95 -2
  592. package/src/surface/__tests__/dynamic-input.unit.test.ts +374 -0
  593. package/src/surface/__tests__/gpu-driven.unit.test.ts +87 -0
  594. package/src/surface/dynamic-input.ts +658 -0
  595. package/src/surface/gpu-driven.ts +147 -0
  596. package/src/surface/submission-observation.ts +517 -0
  597. package/src/systems/skin-palette-allocator.ts +4 -1
  598. package/src/temporal/__tests__/temporal-frame-transaction.unit.test.ts +36 -0
  599. package/src/temporal/frame-coordinator.ts +8 -1
  600. package/src/temporal/frame.ts +20 -0
  601. package/src/temporal/gpu.ts +101 -17
  602. package/src/temporal/inspection.ts +7 -1
  603. package/src/temporal/standard-scene-data.ts +5 -0
  604. package/src/temporal/target-coverage-attachment.ts +4 -0
  605. package/src/temporal/view.ts +13 -2
  606. package/src/transmission/__tests__/single-layer-medium.unit.test.ts +149 -0
  607. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +12 -11
  608. package/src/transmission/single-layer-medium.ts +322 -0
  609. package/src/typed-render-graph-primitives.ts +191 -50
  610. package/src/volume/component.ts +10 -10
  611. package/src/volume/extract.ts +11 -5
  612. package/src/volume/inspection.ts +3 -0
  613. package/src/volume/passes.ts +95 -8
  614. package/src/volume/resources.ts +2 -1
  615. package/src/volume/temporal.ts +11 -0
  616. package/dist/chunk-4NNZQCL3.mjs.map +0 -1
  617. package/dist/chunk-6TFBXLRJ.mjs.map +0 -1
  618. package/dist/chunk-DRR7D3KX.mjs.map +0 -1
  619. package/dist/chunk-GWCEMDVR.mjs.map +0 -1
  620. package/dist/chunk-JCIRYQ4V.mjs.map +0 -1
  621. package/dist/chunk-JRIPCMYC.mjs.map +0 -1
  622. package/dist/chunk-LULCA3OF.mjs +0 -1713
  623. package/dist/chunk-LULCA3OF.mjs.map +0 -1
  624. package/dist/chunk-PA5DRJNI.mjs.map +0 -1
@@ -1,5 +1,6 @@
1
- import { cubeArrayDepthDescriptor, comparisonSamplerDescriptor, cubeArrayDepthFaceView } from '@forgeax/engine-rhi';
2
1
  import { err, ok } from '@forgeax/engine-types';
2
+ import { cubeArrayDepthDescriptor, comparisonSamplerDescriptor, cubeArrayDepthFaceView } from '@forgeax/engine-rhi';
3
+ import { InstanceTransformsStrideMismatchError } from '@forgeax/engine-ecs/projection';
3
4
 
4
5
  // src/pipeline/standard-output/auto-exposure/inspection.ts
5
6
  var AutoExposureInvalidParameterError = class extends Error {
@@ -373,16 +374,16 @@ var MaterialSkinAttrMissingError = class extends Error {
373
374
  expected;
374
375
  hint;
375
376
  detail;
376
- constructor(entity, missing2) {
377
+ constructor(entity, missing) {
377
378
  const expected = "pbr-skin material requires mesh.attributes.skinIndex + skinWeight";
378
- const hint = `entity ${entity} uses forgeax::pbr-skin but its MeshAsset is missing ${missing2}; switch the entity to a skinned glTF mesh authored with JOINTS_0 + WEIGHTS_0, or change the material to a non-skin shader via Materials.standard / Materials.unlit`;
379
+ const hint = `entity ${entity} uses forgeax::pbr-skin but its MeshAsset is missing ${missing}; switch the entity to a skinned glTF mesh authored with JOINTS_0 + WEIGHTS_0, or change the material to a non-skin shader via Materials.standard / Materials.unlit`;
379
380
  super(
380
- `material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${missing2}`
381
+ `material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${missing}`
381
382
  );
382
383
  this.name = "MaterialSkinAttrMissingError";
383
384
  this.expected = expected;
384
385
  this.hint = hint;
385
- this.detail = { entity, missing: missing2 };
386
+ this.detail = { entity, missing };
386
387
  }
387
388
  };
388
389
  var TransmissionCapabilityMissingError = class extends Error {
@@ -421,14 +422,20 @@ var RenderFeatureStageFailedError = class extends Error {
421
422
  expected;
422
423
  hint;
423
424
  detail;
424
- constructor(featureIdentity, order, stage, recovery) {
425
+ constructor(featureIdentity, order, stage, recovery, cause) {
425
426
  const expected = `feature '${featureIdentity}' completes its ${stage} stage without an error`;
426
427
  const hint = renderFeatureRecoveryHintByRecovery[recovery](featureIdentity, stage);
427
428
  super(`render feature '${featureIdentity}' failed during ${stage}`);
428
429
  this.name = "RenderFeatureStageFailedError";
429
430
  this.expected = expected;
430
431
  this.hint = hint;
431
- this.detail = { featureIdentity, order, stage, recovery };
432
+ this.detail = {
433
+ featureIdentity,
434
+ order,
435
+ stage,
436
+ recovery,
437
+ ...cause === void 0 ? {} : { cause }
438
+ };
432
439
  }
433
440
  };
434
441
  var RenderFeatureCapabilityMissingError = class extends Error {
@@ -661,6 +668,19 @@ var DynamicResolutionTimingUnavailableError = class extends Error {
661
668
  this.detail = detail;
662
669
  }
663
670
  };
671
+ var BarrelDistortionInvalidParameterError = class extends Error {
672
+ code = "barrel-distortion-invalid-parameter";
673
+ expected;
674
+ hint;
675
+ detail;
676
+ constructor(detail) {
677
+ super(`BarrelDistortion.${detail.field} is invalid`);
678
+ this.name = "BarrelDistortionInvalidParameterError";
679
+ this.expected = `BarrelDistortion.${detail.field} must be ${detail.expected}`;
680
+ this.hint = `set BarrelDistortion.${detail.field} to a value that is ${detail.expected}`;
681
+ this.detail = detail;
682
+ }
683
+ };
664
684
  var OwnerStageFailedError = class extends Error {
665
685
  code = "owner-stage-failed";
666
686
  expected = "the owner completes its current frame stage";
@@ -878,8 +898,8 @@ var RenderIntentInvalidError = class extends Error {
878
898
  };
879
899
  var VolumeOwnerConflictError = class extends Error {
880
900
  code = "volume-owner-conflict";
881
- expected = "exactly one global VolumetricFog owner is authored";
882
- hint = "remove additional VolumetricFog owners and retry extraction";
901
+ expected = "at most eight local VolumetricFog owners per rendered World";
902
+ hint = "reduce simultaneously visible volume owners and retry extraction";
883
903
  detail;
884
904
  constructor(ownerCount) {
885
905
  super(`volume-owner-conflict: received ${ownerCount} owners`);
@@ -912,16 +932,100 @@ var VolumeInvalidBoundsError = class extends Error {
912
932
  var VolumeInvalidParametersError = class extends Error {
913
933
  code = "volume-invalid-parameters";
914
934
  expected = "volume parameters remain finite and inside their closed ranges";
915
- hint = "repair extinction, albedo, emission, anisotropy, or maxDistance";
935
+ hint = "repair extinction, albedo, emission, anisotropy, maxDistance, or sampling";
916
936
  detail;
917
937
  constructor(input) {
918
- const field = input.maxDistance !== void 0 && input.maxDistance <= 0 ? "maxDistance" : "parameters";
919
- const value = field === "maxDistance" ? input.maxDistance : input.anisotropy;
938
+ const invalidSampling = input.sampling !== void 0 && input.sampling !== "noise" && input.sampling !== "density";
939
+ const field = invalidSampling ? "sampling" : input.maxDistance !== void 0 && input.maxDistance <= 0 ? "maxDistance" : "parameters";
940
+ const value = invalidSampling ? input.sampling : field === "maxDistance" ? input.maxDistance : input.anisotropy;
920
941
  super(`volume-invalid-parameters: ${field} is outside the authored range`);
921
942
  this.name = "VolumeInvalidParametersError";
922
943
  this.detail = { field, value };
923
944
  }
924
945
  };
946
+ var MOTION_BLUR_PARAMS_BYTE_SIZE = 32;
947
+ var DEFAULT_MOTION_BLUR_PARAMS = Object.freeze({
948
+ shutterAngle: 180,
949
+ maxRadiusPixels: 32,
950
+ sampleCount: 8,
951
+ targetFps: 60
952
+ });
953
+ var MotionBlurValidationError = class extends Error {
954
+ code = "motion-blur-invalid-params";
955
+ expected;
956
+ hint;
957
+ detail;
958
+ constructor(detail) {
959
+ const integer = detail.integer === true ? "integer " : "";
960
+ const expected = `${detail.field} ${integer}in [${detail.min}, ${detail.max}]`;
961
+ super(`motion-blur-invalid-params: ${expected}`);
962
+ this.name = "MotionBlurValidationError";
963
+ this.expected = expected;
964
+ this.hint = `set ${detail.field} to an ${integer}value in [${detail.min}, ${detail.max}]`;
965
+ this.detail = detail;
966
+ }
967
+ };
968
+ function validateField(field, value, min, max, integer = false) {
969
+ if (!Number.isFinite(value) || value < min || value > max || integer && !Number.isInteger(value)) {
970
+ return new MotionBlurValidationError({
971
+ field,
972
+ value,
973
+ min,
974
+ max,
975
+ ...integer ? { integer } : {}
976
+ });
977
+ }
978
+ return void 0;
979
+ }
980
+ function validateMotionBlurParams(input) {
981
+ const value = input ?? {};
982
+ const shutterAngle = value.shutterAngle ?? DEFAULT_MOTION_BLUR_PARAMS.shutterAngle;
983
+ const maxRadiusPixels = value.maxRadiusPixels ?? DEFAULT_MOTION_BLUR_PARAMS.maxRadiusPixels;
984
+ const sampleCount = value.sampleCount ?? DEFAULT_MOTION_BLUR_PARAMS.sampleCount;
985
+ const targetFps = value.targetFps ?? DEFAULT_MOTION_BLUR_PARAMS.targetFps;
986
+ const shutterError = validateField("shutterAngle", shutterAngle, 0, 360);
987
+ if (shutterError !== void 0) return err(shutterError);
988
+ const radiusError = validateField("maxRadiusPixels", maxRadiusPixels, 0, 64);
989
+ if (radiusError !== void 0) return err(radiusError);
990
+ const sampleError = validateField("sampleCount", sampleCount, 4, 16, true);
991
+ if (sampleError !== void 0) return err(sampleError);
992
+ const targetFpsError = validateField("targetFps", targetFps, 0, 240, true);
993
+ if (targetFpsError !== void 0) return err(targetFpsError);
994
+ return ok(Object.freeze({ shutterAngle, maxRadiusPixels, sampleCount, targetFps }));
995
+ }
996
+ function motionBlurTemporalDemand(params) {
997
+ return params !== void 0 && params.shutterAngle > 0 && params.maxRadiusPixels > 0;
998
+ }
999
+ function effectiveMotionBlurSampleCount(sampleCount) {
1000
+ if (!Number.isFinite(sampleCount) || sampleCount < 4) return 0;
1001
+ if (sampleCount < 8) return 4;
1002
+ if (sampleCount < 16) return 8;
1003
+ return 16;
1004
+ }
1005
+ function isMotionBlurIntervalValid(frameDeltaSeconds) {
1006
+ return Number.isFinite(frameDeltaSeconds) && frameDeltaSeconds > 0 && frameDeltaSeconds <= 0.1;
1007
+ }
1008
+ function motionBlurExposureScale(frameDeltaSeconds, targetFps) {
1009
+ if (!isMotionBlurIntervalValid(frameDeltaSeconds)) return 0;
1010
+ if (!Number.isFinite(targetFps) || targetFps < 0 || targetFps > 240 || !Number.isInteger(targetFps)) {
1011
+ return 0;
1012
+ }
1013
+ if (targetFps === 0) return 1;
1014
+ return 1 / (targetFps * frameDeltaSeconds);
1015
+ }
1016
+ function motionBlurSampleDelta(sampleTimeSeconds, previousSampleTimeSeconds, fallbackDeltaSeconds) {
1017
+ if (sampleTimeSeconds !== void 0 && !Number.isFinite(sampleTimeSeconds) || previousSampleTimeSeconds !== void 0 && !Number.isFinite(previousSampleTimeSeconds)) {
1018
+ return Number.NaN;
1019
+ }
1020
+ if (Number.isFinite(sampleTimeSeconds) && Number.isFinite(previousSampleTimeSeconds)) {
1021
+ return sampleTimeSeconds - previousSampleTimeSeconds;
1022
+ }
1023
+ return fallbackDeltaSeconds;
1024
+ }
1025
+ function resolveMotionBlurParams(input) {
1026
+ if (input === void 0) return ok(void 0);
1027
+ return validateMotionBlurParams(input);
1028
+ }
925
1029
 
926
1030
  // src/gpu-texture-usage.ts
927
1031
  var GPU_TEXTURE_USAGE_COPY_SRC = 1;
@@ -1151,251 +1255,115 @@ var GpuDrivenPreparationError = class extends Error {
1151
1255
  }
1152
1256
  };
1153
1257
  var MATRIX_STRIDE = 16;
1154
- var INITIAL_CAPACITY = 1;
1155
- function instanceUploadRangesForResident(activeIsNew, dirtyRanges, fullRange) {
1156
- return activeIsNew ? [fullRange] : dirtyRanges;
1157
- }
1158
- function instanceCollectionFailureFacts(cause, recovery, requestedBytes = 0, supportedBytes = void 0, backend = "unknown") {
1159
- return {
1160
- requestedBytes,
1161
- supportedBytes,
1162
- backend,
1163
- owner: "renderer.instances",
1164
- cause,
1165
- recovery
1166
- };
1167
- }
1168
- var InstanceCollectionError = class extends Error {
1169
- code;
1170
- expected;
1171
- hint;
1172
- detail;
1173
- owner = "renderer.instances";
1174
- recovery;
1175
- facts;
1176
- constructor(code, expected, hint, detail, facts) {
1177
- super(`${code}: ${expected}`);
1178
- this.name = "InstanceCollectionError";
1179
- this.code = code;
1180
- this.expected = expected;
1181
- this.hint = hint;
1258
+ var InstanceTransformsError = class extends Error {
1259
+ constructor(detail) {
1260
+ super("Instances.transforms must contain complete finite matrices");
1182
1261
  this.detail = detail;
1183
- this.facts = facts ?? instanceCollectionFailureFacts(
1184
- code,
1185
- hint,
1186
- detail?.operation === "create" || detail?.operation === "replace" ? typeof detail.actual === "number" && Number.isFinite(detail.actual) ? detail.actual * Float32Array.BYTES_PER_ELEMENT : 0 : 0
1187
- );
1188
- this.recovery = this.facts.recovery;
1262
+ this.name = "InstanceTransformsError";
1189
1263
  }
1190
- };
1191
- function nextCapacity(required) {
1192
- let capacity = INITIAL_CAPACITY;
1193
- while (capacity < required) capacity *= 2;
1194
- return capacity;
1195
- }
1196
- function invalid(operation, expected, actual, collectionId, context) {
1197
- const hint = "repair the collection payload and retry the same authoring operation";
1198
- return new InstanceCollectionError(
1199
- "instance-collection-invalid",
1200
- expected,
1201
- hint,
1202
- { operation, expected, actual, ...collectionId === void 0 ? {} : { collectionId } },
1203
- instanceCollectionFailureFacts(
1204
- context?.cause ?? `invalid-${operation}-authoring`,
1205
- context?.recovery ?? hint,
1206
- context?.requestedBytes ?? 0,
1207
- context?.supportedBytes
1208
- )
1209
- );
1210
- }
1211
- function validateTransforms(operation, transforms, collectionId) {
1212
- if (!(transforms instanceof Float32Array)) {
1213
- return invalid(operation, "transforms is a Float32Array", typeof transforms, collectionId, {
1214
- cause: "invalid-transform-type"
1215
- });
1216
- }
1217
- if (transforms.length % MATRIX_STRIDE !== 0) {
1218
- return invalid(
1219
- operation,
1220
- `transforms.length is a multiple of ${MATRIX_STRIDE}`,
1221
- transforms.length,
1222
- collectionId,
1223
- {
1224
- requestedBytes: transforms.byteLength,
1225
- cause: "invalid-transform-stride"
1226
- }
1227
- );
1228
- }
1229
- for (const value of transforms) {
1230
- if (!Number.isFinite(value)) {
1231
- return invalid(operation, "every transform value is finite", value, collectionId, {
1232
- requestedBytes: transforms.byteLength,
1233
- cause: "invalid-transform-value"
1264
+ detail;
1265
+ code = "instance-transforms-invalid";
1266
+ expected = "finite column-major mat4 values, with transforms.length a multiple of 16";
1267
+ hint = "repair Instances.transforms in the World or source SceneAsset and retry";
1268
+ };
1269
+ function validateInstanceTransforms(transforms) {
1270
+ if (transforms.length % MATRIX_STRIDE !== 0)
1271
+ return new InstanceTransformsStrideMismatchError(transforms.length);
1272
+ for (let index = 0; index < transforms.length; index++) {
1273
+ if (!Number.isFinite(transforms[index]))
1274
+ return new InstanceTransformsError({
1275
+ actualLength: transforms.length,
1276
+ nonFiniteIndex: index
1234
1277
  });
1235
- }
1236
1278
  }
1237
1279
  return void 0;
1238
1280
  }
1239
- function appendRange(ranges, start, end) {
1240
- if (start >= end) return;
1241
- let index = 0;
1242
- while (index < ranges.length) {
1243
- const existing = ranges[index];
1244
- if (existing === void 0 || existing.end >= start) break;
1245
- index += 1;
1246
- }
1247
- while (index < ranges.length) {
1248
- const existing = ranges[index];
1249
- if (existing === void 0 || existing.start > end) break;
1250
- start = Math.min(start, existing.start);
1251
- end = Math.max(end, existing.end);
1252
- ranges.splice(index, 1);
1253
- }
1254
- ranges.splice(index, 0, { start, end });
1255
- }
1256
- function appendDirtyRange(record, start, end) {
1257
- appendRange(record.dirtyRanges, start, end);
1258
- }
1259
- function missing(operation, id) {
1260
- return new InstanceCollectionError(
1261
- "instance-collection-not-found",
1262
- `instance collection ${Number(id)} is live and owned by this Renderer`,
1263
- "create a collection with renderer.instances.create or retain the original collection id",
1264
- { operation, expected: "a live instance collection id", actual: Number(id), collectionId: id }
1265
- );
1281
+ function instanceUploadRangesForResident(activeIsNew, dirtyRanges, fullRange) {
1282
+ return activeIsNew ? [fullRange] : dirtyRanges;
1266
1283
  }
1267
- var InstanceCollectionStore = class {
1284
+ var InstanceProjectionStore = class {
1268
1285
  nextId = 1;
1269
- epochValue = 0;
1270
- disposed = false;
1286
+ nextGeneration = 1;
1287
+ identities = /* @__PURE__ */ new WeakMap();
1271
1288
  records = /* @__PURE__ */ new Map();
1272
1289
  residency = /* @__PURE__ */ new Map();
1273
- get epoch() {
1274
- return this.epochValue;
1275
- }
1276
- create(input) {
1277
- if (this.disposed) {
1278
- return err(
1279
- new InstanceCollectionError(
1280
- "instance-collection-released",
1281
- "the Renderer-owned instance collection store is live",
1282
- "create a new Renderer before authoring instance collections"
1283
- )
1284
- );
1285
- }
1286
- const invalidPayload = validateTransforms("create", input.transforms);
1287
- if (invalidPayload !== void 0) return err(invalidPayload);
1288
- const id = this.nextId++;
1289
- const count = input.transforms.length / MATRIX_STRIDE;
1290
+ project(world, entity, transforms) {
1291
+ const collectionId = this.identities.get(world)?.get(entity) ?? this.nextId++;
1292
+ const previous = this.records.get(collectionId);
1293
+ if (previous !== void 0 && previous.transforms.length === transforms.length && previous.transforms.every((value, index) => Object.is(value, transforms[index])))
1294
+ return previous;
1295
+ const count = transforms.length / MATRIX_STRIDE;
1296
+ const generations = previous?.count === count ? previous.generations : Uint32Array.from({ length: count }, () => this.nextGeneration++);
1290
1297
  const record = {
1291
- id,
1292
- transforms: new Float32Array(input.transforms),
1298
+ collectionId,
1299
+ world,
1300
+ entity,
1301
+ transforms: new Float32Array(transforms),
1302
+ generations,
1293
1303
  count,
1294
- capacity: nextCapacity(Math.max(INITIAL_CAPACITY, count)),
1295
- revision: 1,
1296
- dirtyRanges: count === 0 ? [] : [{ start: 0, end: count }],
1297
- lastSnapshotRevision: 0,
1298
- released: false
1304
+ revision: (previous?.revision ?? 0) + 1
1299
1305
  };
1300
- this.records.set(id, record);
1301
- this.epochValue += 1;
1302
- return ok(this.info(record));
1303
- }
1304
- replace(id, transforms) {
1305
- const record = this.live("replace", id);
1306
- if (!record.ok) return record;
1307
- const invalidPayload = validateTransforms("replace", transforms, id);
1308
- if (invalidPayload !== void 0) return err(invalidPayload);
1309
- const count = transforms.length / MATRIX_STRIDE;
1310
- record.value.transforms = new Float32Array(transforms);
1311
- record.value.count = count;
1312
- record.value.capacity = Math.max(record.value.capacity, nextCapacity(Math.max(1, count)));
1313
- record.value.revision += 1;
1314
- record.value.dirtyRanges = count === 0 ? [] : [{ start: 0, end: count }];
1315
- record.value.lastSnapshotRevision = record.value.revision - 1;
1316
- this.epochValue += 1;
1317
- return ok(this.info(record.value));
1318
- }
1319
- update(id, input) {
1320
- const record = this.live("update", id);
1321
- if (!record.ok) return record;
1322
- const invalidPayload = validateTransforms("update", input.transforms, id);
1323
- if (invalidPayload !== void 0) return err(invalidPayload);
1324
- if (!Number.isInteger(input.start) || input.start < 0) {
1325
- return err(
1326
- invalid("update", "start is a non-negative matrix ordinal", input.start, id, {
1327
- requestedBytes: input.transforms.byteLength,
1328
- supportedBytes: record.value.capacity * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1329
- cause: "invalid-update-range-start"
1330
- })
1331
- );
1332
- }
1333
- const span = input.transforms.length / MATRIX_STRIDE;
1334
- const attemptedEnd = input.start + span;
1335
- if (attemptedEnd > record.value.count) {
1336
- return err(
1337
- invalid(
1338
- "update",
1339
- `start + matrix count is <= collection count (${record.value.count})`,
1340
- attemptedEnd,
1341
- id,
1342
- {
1343
- requestedBytes: attemptedEnd * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1344
- supportedBytes: record.value.count * MATRIX_STRIDE * Float32Array.BYTES_PER_ELEMENT,
1345
- cause: "invalid-update-range-end"
1346
- }
1347
- )
1348
- );
1306
+ return record;
1307
+ }
1308
+ /** Called only after the owning RenderScene accepts its prepared changes. */
1309
+ accept(world, entity, snapshot) {
1310
+ const { collectionId, revision, transforms, generations } = snapshot;
1311
+ if (collectionId === void 0 || revision === void 0 || generations === void 0) return;
1312
+ let entities = this.identities.get(world);
1313
+ if (entities === void 0) {
1314
+ entities = /* @__PURE__ */ new Map();
1315
+ this.identities.set(world, entities);
1349
1316
  }
1350
- if (record.value.lastSnapshotRevision === record.value.revision) {
1351
- record.value.dirtyRanges = [];
1317
+ entities.set(entity, collectionId);
1318
+ this.records.set(collectionId, {
1319
+ collectionId,
1320
+ revision,
1321
+ transforms,
1322
+ generations,
1323
+ count: transforms.length / MATRIX_STRIDE,
1324
+ world,
1325
+ entity
1326
+ });
1327
+ }
1328
+ release(world, entity) {
1329
+ const entities = this.identities.get(world);
1330
+ const id = entities?.get(entity);
1331
+ if (id === void 0) return;
1332
+ entities?.delete(entity);
1333
+ this.records.delete(id);
1334
+ this.residency.delete(id);
1335
+ }
1336
+ retain(ids) {
1337
+ for (const record of this.records.values()) {
1338
+ if (!ids.has(record.collectionId)) this.release(record.world, record.entity);
1352
1339
  }
1353
- record.value.transforms.set(input.transforms, input.start * MATRIX_STRIDE);
1354
- record.value.revision += 1;
1355
- appendDirtyRange(record.value, input.start, input.start + span);
1356
- this.epochValue += 1;
1357
- return ok(this.info(record.value));
1358
1340
  }
1359
- inspect(id) {
1360
- const record = this.live("inspect", id);
1361
- return record.ok ? ok(this.info(record.value)) : record;
1341
+ dispose() {
1342
+ this.records.clear();
1343
+ this.residency.clear();
1344
+ this.identities = /* @__PURE__ */ new WeakMap();
1362
1345
  }
1363
- /**
1364
- * Return detached residency facts for every live collection.
1365
- *
1366
- * @internal Record-stage evidence is reported through the two methods below;
1367
- * callers only receive immutable PODs and never GPU handles.
1368
- */
1369
- _inspections() {
1370
- return Object.freeze(
1371
- [...this.records.values()].map((record) => this.projectInspection(record))
1372
- );
1346
+ _resetResidency() {
1347
+ this.residency.clear();
1373
1348
  }
1374
- /** @internal Renderer record owner reports the accepted collection lane. */
1375
1349
  _reportResidency(input) {
1376
1350
  if (!this.records.has(input.collectionId)) return;
1377
1351
  const previous = this.residency.get(input.collectionId);
1378
- const sameFrame = previous !== void 0 && previous.frameNumber === input.frameNumber && previous.error === void 0;
1379
- const uploadRanges = sameFrame ? [...previous.uploadRanges].reduce(
1380
- (ranges, range) => {
1381
- appendRange(ranges, range.start, range.end);
1382
- return ranges;
1383
- },
1384
- input.uploadRanges.map((range) => ({ ...range }))
1385
- ) : input.uploadRanges.map((range) => ({ ...range }));
1352
+ const sameFrame = previous?.frameNumber === input.frameNumber && previous.error === void 0;
1353
+ const ranges = [...sameFrame ? previous.uploadRanges : [], ...input.uploadRanges].map((range) => ({ ...range })).sort((a, b) => a.start - b.start);
1354
+ const uploadRanges = [];
1355
+ for (const range of ranges) {
1356
+ const last = uploadRanges.at(-1);
1357
+ if (last !== void 0 && range.start <= last.end) last.end = Math.max(last.end, range.end);
1358
+ else uploadRanges.push(range);
1359
+ }
1386
1360
  this.residency.set(input.collectionId, {
1387
- frameNumber: input.frameNumber,
1388
- residentGeneration: input.residentGeneration,
1389
- lane: input.lane,
1361
+ ...input,
1390
1362
  uploadRanges,
1391
- uploadedBytes: sameFrame ? previous.uploadedBytes + input.uploadedBytes : input.uploadedBytes,
1392
- requestedBytes: input.requestedBytes,
1393
- supportedBytes: input.supportedBytes,
1394
- backend: input.backend,
1363
+ uploadedBytes: input.uploadedBytes + (sameFrame ? previous.uploadedBytes : 0),
1395
1364
  error: void 0
1396
1365
  });
1397
1366
  }
1398
- /** @internal Renderer record owner reports a typed admission failure. */
1399
1367
  _reportFailure(input) {
1400
1368
  if (!this.records.has(input.collectionId)) return;
1401
1369
  this.residency.set(input.collectionId, {
@@ -1415,106 +1383,24 @@ var InstanceCollectionStore = class {
1415
1383
  }
1416
1384
  });
1417
1385
  }
1418
- /** @internal A lost device invalidates every renderer-owned GPU resident. */
1419
- _resetResidency() {
1420
- this.residency.clear();
1421
- }
1422
- snapshot(id) {
1423
- const record = this.live("inspect", id);
1424
- if (!record.ok) return record;
1425
- const value = record.value;
1426
- value.lastSnapshotRevision = value.revision;
1427
- const result = this.detachedSnapshot(value);
1428
- return ok(result);
1429
- }
1430
- /**
1431
- * Read a detached matrix view without advancing the render-consumption
1432
- * cursor. Inspection and picking may call this between authoring updates;
1433
- * the next renderer snapshot must still receive the complete dirty union.
1434
- */
1435
- peek(id) {
1436
- const record = this.live("inspect", id);
1437
- return record.ok ? ok(this.detachedSnapshot(record.value)) : record;
1438
- }
1439
- release(id) {
1440
- const record = this.records.get(id);
1441
- if (record === void 0) return err(missing("release", id));
1442
- if (record.released) {
1443
- return err(
1444
- new InstanceCollectionError(
1445
- "instance-collection-released",
1446
- `instance collection ${Number(id)} has not already been released`,
1447
- "do not reuse a released collection id; create a new collection",
1448
- {
1449
- operation: "release",
1450
- expected: "a live instance collection id",
1451
- actual: Number(id),
1452
- collectionId: id
1453
- }
1454
- )
1455
- );
1456
- }
1457
- record.released = true;
1458
- this.records.delete(id);
1459
- this.residency.delete(id);
1460
- this.epochValue += 1;
1461
- return ok(void 0);
1462
- }
1463
- /** Drop all canonical matrices during Renderer disposal. */
1464
- dispose() {
1465
- if (this.disposed) return;
1466
- this.disposed = true;
1467
- for (const record of this.records.values()) record.released = true;
1468
- this.records.clear();
1469
- this.residency.clear();
1470
- this.epochValue += 1;
1471
- }
1472
- live(operation, id) {
1473
- if (!Number.isInteger(id) || id <= 0) {
1474
- return err(invalid(operation, "collectionId is a positive integer", id, id));
1475
- }
1476
- if (this.disposed) {
1477
- return err(
1478
- new InstanceCollectionError(
1479
- "instance-collection-released",
1480
- "the Renderer-owned instance collection store is live",
1481
- "create a new Renderer before using instance collections",
1482
- { operation, expected: "a live collection store", actual: "disposed", collectionId: id }
1483
- )
1484
- );
1485
- }
1486
- const record = this.records.get(id);
1487
- return record === void 0 ? err(missing(operation, id)) : ok(record);
1488
- }
1489
- detachedSnapshot(record) {
1490
- return {
1491
- ...this.info(record),
1492
- transforms: new Float32Array(record.transforms),
1493
- dirtyRanges: record.dirtyRanges.map((range) => ({ ...range }))
1494
- };
1495
- }
1496
- info(record) {
1497
- return Object.freeze({
1498
- collectionId: record.id,
1499
- count: record.count,
1500
- capacity: record.capacity,
1501
- revision: record.revision
1502
- });
1503
- }
1504
- projectInspection(record) {
1505
- const residency = this.residency.get(record.id);
1506
- return Object.freeze({
1507
- ...this.info(record),
1508
- residentGeneration: residency?.residentGeneration,
1509
- lane: residency?.lane ?? "unresident",
1510
- dirtyRanges: Object.freeze(record.dirtyRanges.map((range) => ({ ...range }))),
1511
- uploadRanges: Object.freeze(residency?.uploadRanges.map((range) => ({ ...range })) ?? []),
1512
- uploadedBytes: residency?.uploadedBytes ?? 0,
1513
- requestedBytes: residency?.requestedBytes ?? record.count * MATRIX_STRIDE * 4,
1514
- supportedBytes: residency?.supportedBytes,
1515
- backend: residency?.backend ?? "unknown",
1516
- owner: "renderer.instances",
1517
- error: residency?.error
1386
+ _inspections(frameNumber) {
1387
+ return [...this.records.values()].map((record) => {
1388
+ const resident = this.residency.get(record.collectionId);
1389
+ const current = resident?.frameNumber === frameNumber;
1390
+ return {
1391
+ collectionId: record.collectionId,
1392
+ count: record.count,
1393
+ revision: record.revision,
1394
+ residentGeneration: resident?.residentGeneration,
1395
+ lane: resident?.lane ?? "unresident",
1396
+ uploadRanges: current ? resident.uploadRanges.map((range) => ({ ...range })) : [],
1397
+ uploadedBytes: current ? resident.uploadedBytes : 0,
1398
+ requestedBytes: resident?.requestedBytes ?? record.transforms.byteLength,
1399
+ supportedBytes: resident?.supportedBytes,
1400
+ backend: resident?.backend ?? "unknown",
1401
+ owner: "renderer.instances",
1402
+ error: resident?.error
1403
+ };
1518
1404
  });
1519
1405
  }
1520
1406
  };
@@ -1573,9 +1459,8 @@ var RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
1573
1459
  "record/graph-execute/skybox",
1574
1460
  "record/graph-execute/main",
1575
1461
  "record/graph-execute/fxaa",
1576
- "record/graph-execute/bloom-bright",
1577
- "record/graph-execute/bloom-blur-h",
1578
- "record/graph-execute/bloom-blur-v",
1462
+ "record/graph-execute/bloom-downsample",
1463
+ "record/graph-execute/bloom-upsample",
1579
1464
  "record/graph-execute/bloom-composite",
1580
1465
  "record/graph-execute/ssr-hiz",
1581
1466
  "record/graph-execute/ssr-trace",
@@ -1634,6 +1519,6 @@ var RENDER_PHASE_CATALOG = [
1634
1519
  ...RENDER_RECORD_PHASE_CATALOG
1635
1520
  ];
1636
1521
 
1637
- export { AtmosphereInvalidParameterError, AutoExposureCapabilityUnavailableError, AutoExposureInvalidParameterError, AutoExposureStageFailedError, AutoExposureStaleGenerationError, DynamicResolutionInvalidParameterError, DynamicResolutionRequiresTaaError, DynamicResolutionTimingUnavailableError, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, EquirectProjectionFailedError, FXAA_POST_PROCESS_ID, FogCardinalityError, FrameReceiptStaleError, GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_COPY_SRC, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING, GPU_TEXTURE_USAGE_STORAGE_BINDING, GPU_TEXTURE_USAGE_TEXTURE_BINDING, GpuDrivenPreparationError, InstanceCollectionError, InstanceCollectionStore, LifecycleConstructionError, MaterialSkinAttrMissingError, ObservationUnavailableError, OwnerStageFailedError, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PointsLinesBudgetExceededError, PointsLinesInvalidStyleError, PointsLinesMaterialUnsupportedError, PointsLinesPrepareFailedError, PointsLinesStyleUnsupportedError, PointsLinesTopologyMismatchError, RENDER_PHASE_CATALOG, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, RenderIntentInvalidError, RenderTargetCapabilityMissingError, RenderTargetDescriptorInvalidError, RenderTargetOperationFailedError, RenderTargetStateInvalidError, RendererContractFailureError, RendererOperationError, SHADOW_ATLAS_DEFAULT_FACE_SIZE, SHADOW_ATLAS_DEFAULT_LAYERS, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, SceneDataUnavailableError, ShadowAtlas, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, StandardClusterIndexOverflowError, StandardClusterTransportUnavailableError, StandardLightBudgetExceededError, StandardProfileInvalidError, TaaCapsInsufficientError, TemporalFrameSubmitError, TransmissionCapabilityMissingError, VertexColorVariantConflictError, VideoUploadUnsupportedError, VolumeDensityShapeMismatchError, VolumeInvalidBoundsError, VolumeInvalidParametersError, VolumeOwnerConflictError, createAutoExposureError, createAutoExposureInspection, createLightResourceUnavailable, createVisibilityBudget, instanceUploadRangesForResident };
1638
- //# sourceMappingURL=chunk-6TFBXLRJ.mjs.map
1639
- //# sourceMappingURL=chunk-6TFBXLRJ.mjs.map
1522
+ export { AtmosphereInvalidParameterError, AutoExposureCapabilityUnavailableError, AutoExposureInvalidParameterError, AutoExposureStageFailedError, AutoExposureStaleGenerationError, BarrelDistortionInvalidParameterError, DEFAULT_MOTION_BLUR_PARAMS, DynamicResolutionInvalidParameterError, DynamicResolutionRequiresTaaError, DynamicResolutionTimingUnavailableError, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, EquirectProjectionFailedError, FXAA_POST_PROCESS_ID, FogCardinalityError, FrameReceiptStaleError, GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_COPY_SRC, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING, GPU_TEXTURE_USAGE_STORAGE_BINDING, GPU_TEXTURE_USAGE_TEXTURE_BINDING, GpuDrivenPreparationError, InstanceProjectionStore, InstanceTransformsError, LifecycleConstructionError, MOTION_BLUR_PARAMS_BYTE_SIZE, MaterialSkinAttrMissingError, MotionBlurValidationError, ObservationUnavailableError, OwnerStageFailedError, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PointsLinesBudgetExceededError, PointsLinesInvalidStyleError, PointsLinesMaterialUnsupportedError, PointsLinesPrepareFailedError, PointsLinesStyleUnsupportedError, PointsLinesTopologyMismatchError, RENDER_PHASE_CATALOG, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, RenderIntentInvalidError, RenderTargetCapabilityMissingError, RenderTargetDescriptorInvalidError, RenderTargetOperationFailedError, RenderTargetStateInvalidError, RendererContractFailureError, RendererOperationError, SHADOW_ATLAS_DEFAULT_FACE_SIZE, SHADOW_ATLAS_DEFAULT_LAYERS, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, SceneDataUnavailableError, ShadowAtlas, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, StandardClusterIndexOverflowError, StandardClusterTransportUnavailableError, StandardLightBudgetExceededError, StandardProfileInvalidError, TaaCapsInsufficientError, TemporalFrameSubmitError, TransmissionCapabilityMissingError, VertexColorVariantConflictError, VideoUploadUnsupportedError, VolumeDensityShapeMismatchError, VolumeInvalidBoundsError, VolumeInvalidParametersError, VolumeOwnerConflictError, createAutoExposureError, createAutoExposureInspection, createLightResourceUnavailable, createVisibilityBudget, effectiveMotionBlurSampleCount, instanceUploadRangesForResident, isMotionBlurIntervalValid, motionBlurExposureScale, motionBlurSampleDelta, motionBlurTemporalDemand, resolveMotionBlurParams, validateInstanceTransforms, validateMotionBlurParams };
1523
+ //# sourceMappingURL=chunk-WEX45HKH.mjs.map
1524
+ //# sourceMappingURL=chunk-WEX45HKH.mjs.map