@forgeax/engine-render 0.1.7 → 0.1.20

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 (777) hide show
  1. package/README.md +140 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/assembly/backend-contract.d.ts +12 -0
  4. package/dist/assembly/backend-contract.d.ts.map +1 -1
  5. package/dist/assembly/factory.d.ts +26 -5
  6. package/dist/assembly/factory.d.ts.map +1 -1
  7. package/dist/assembly/host-contract.d.ts +4 -0
  8. package/dist/assembly/host-contract.d.ts.map +1 -1
  9. package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
  10. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
  11. package/dist/assembly/renderer-inspection.d.ts +22 -0
  12. package/dist/assembly/renderer-inspection.d.ts.map +1 -0
  13. package/dist/assembly/renderer-lifecycle.d.ts +4 -0
  14. package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
  15. package/dist/authoring.mjs +4 -2
  16. package/dist/authoring.mjs.map +1 -1
  17. package/dist/chunk-4XINDLAY.mjs +9404 -0
  18. package/dist/chunk-4XINDLAY.mjs.map +1 -0
  19. package/dist/chunk-CDTWTHZR.mjs +752 -0
  20. package/dist/chunk-CDTWTHZR.mjs.map +1 -0
  21. package/dist/chunk-FJ6P52EE.mjs +46 -0
  22. package/dist/chunk-FJ6P52EE.mjs.map +1 -0
  23. package/dist/chunk-JDWARUOI.mjs +44 -0
  24. package/dist/chunk-JDWARUOI.mjs.map +1 -0
  25. package/dist/chunk-M2MP4ZOU.mjs +73 -0
  26. package/dist/chunk-M2MP4ZOU.mjs.map +1 -0
  27. package/dist/chunk-PCHBPYML.mjs +385 -0
  28. package/dist/chunk-PCHBPYML.mjs.map +1 -0
  29. package/dist/chunk-RXZ3RGOU.mjs +53 -0
  30. package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
  31. package/dist/{chunk-YEJIUW7D.mjs → chunk-TBQJOK2L.mjs} +356 -543
  32. package/dist/chunk-TBQJOK2L.mjs.map +1 -0
  33. package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
  34. package/dist/chunk-VFPLTKCU.mjs.map +1 -0
  35. package/dist/components/atmosphere.d.ts +9 -0
  36. package/dist/components/atmosphere.d.ts.map +1 -0
  37. package/dist/components/camera.d.ts +2 -1
  38. package/dist/components/camera.d.ts.map +1 -1
  39. package/dist/components/fog.d.ts +8 -0
  40. package/dist/components/fog.d.ts.map +1 -0
  41. package/dist/components/index.d.ts +3 -0
  42. package/dist/components/index.d.ts.map +1 -1
  43. package/dist/components/light-helpers.d.ts.map +1 -1
  44. package/dist/components/motion-blur.d.ts +7 -0
  45. package/dist/components/motion-blur.d.ts.map +1 -0
  46. package/dist/components/spot-light.d.ts +12 -0
  47. package/dist/components/spot-light.d.ts.map +1 -1
  48. package/dist/construct-renderer.d.ts +2 -2
  49. package/dist/construct-renderer.d.ts.map +1 -1
  50. package/dist/construct-renderer.mjs +11146 -14507
  51. package/dist/construct-renderer.mjs.map +1 -1
  52. package/dist/device/device-scope.d.ts +4 -0
  53. package/dist/device/device-scope.d.ts.map +1 -1
  54. package/dist/device/gpu-residency.d.ts +19 -2
  55. package/dist/device/gpu-residency.d.ts.map +1 -1
  56. package/dist/environment/frame.d.ts +60 -0
  57. package/dist/environment/frame.d.ts.map +1 -0
  58. package/dist/environment/generation.d.ts +21 -0
  59. package/dist/environment/generation.d.ts.map +1 -0
  60. package/dist/environment/graph.d.ts +4 -0
  61. package/dist/environment/graph.d.ts.map +1 -0
  62. package/dist/environment/inspection.d.ts +48 -0
  63. package/dist/environment/inspection.d.ts.map +1 -0
  64. package/dist/environment/lifecycle.d.ts +39 -0
  65. package/dist/environment/lifecycle.d.ts.map +1 -0
  66. package/dist/environment/signature.d.ts +25 -0
  67. package/dist/environment/signature.d.ts.map +1 -0
  68. package/dist/errors/render.d.ts +204 -1
  69. package/dist/errors/render.d.ts.map +1 -1
  70. package/dist/extract/camera.d.ts +5 -0
  71. package/dist/extract/camera.d.ts.map +1 -0
  72. package/dist/extract/environment.d.ts +74 -0
  73. package/dist/extract/environment.d.ts.map +1 -0
  74. package/dist/extract/visibility.d.ts +1 -1
  75. package/dist/extract/visibility.d.ts.map +1 -1
  76. package/dist/features/host.d.ts +9 -2
  77. package/dist/features/host.d.ts.map +1 -1
  78. package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
  79. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
  80. package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
  81. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
  82. package/dist/features/plan.d.ts +17 -2
  83. package/dist/features/plan.d.ts.map +1 -1
  84. package/dist/features/prepared-gpu-work.d.ts +3 -1
  85. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  86. package/dist/features/prepared-graphics.d.ts +2 -1
  87. package/dist/features/prepared-graphics.d.ts.map +1 -1
  88. package/dist/features/render-graph-raster.d.ts +2 -1
  89. package/dist/features/render-graph-raster.d.ts.map +1 -1
  90. package/dist/features/targets.d.ts +3 -0
  91. package/dist/features/targets.d.ts.map +1 -1
  92. package/dist/features/types.d.ts +12 -0
  93. package/dist/features/types.d.ts.map +1 -1
  94. package/dist/fullscreen-post-process-pass.d.ts +7 -1
  95. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  96. package/dist/gpu-scene.d.ts +2 -0
  97. package/dist/gpu-scene.d.ts.map +1 -1
  98. package/dist/gpu-usage.d.ts +2 -0
  99. package/dist/gpu-usage.d.ts.map +1 -1
  100. package/dist/ibl/skylight-bind-group.d.ts +5 -6
  101. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  102. package/dist/index.d.ts +24 -7
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.mjs +6 -4
  105. package/dist/index.mjs.map +1 -1
  106. package/dist/inspection-types.d.ts +43 -1
  107. package/dist/inspection-types.d.ts.map +1 -1
  108. package/dist/internal.d.ts +2 -0
  109. package/dist/internal.d.ts.map +1 -1
  110. package/dist/internal.mjs +2 -0
  111. package/dist/light-buffer-layout.d.ts +20 -12
  112. package/dist/light-buffer-layout.d.ts.map +1 -1
  113. package/dist/materials.d.ts +22 -0
  114. package/dist/materials.d.ts.map +1 -1
  115. package/dist/pbr-pipeline.d.ts +16 -9
  116. package/dist/pbr-pipeline.d.ts.map +1 -1
  117. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  118. package/dist/pipeline/standard-pipeline.d.ts +3 -0
  119. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  120. package/dist/pipeline/standard-post.d.ts +48 -0
  121. package/dist/pipeline/standard-post.d.ts.map +1 -0
  122. package/dist/pipeline/standard-profile.d.ts +12 -2
  123. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  124. package/dist/pipeline-builder.d.ts +18 -0
  125. package/dist/pipeline-builder.d.ts.map +1 -1
  126. package/dist/pipeline-spec.d.ts.map +1 -1
  127. package/dist/plugin.d.ts.map +1 -1
  128. package/dist/record/frame-lighting.d.ts +2 -0
  129. package/dist/record/frame-lighting.d.ts.map +1 -1
  130. package/dist/record/frame-snapshot.d.ts +137 -6
  131. package/dist/record/frame-snapshot.d.ts.map +1 -1
  132. package/dist/record/frame-targets.d.ts.map +1 -1
  133. package/dist/record/frame.d.ts +6 -3
  134. package/dist/record/frame.d.ts.map +1 -1
  135. package/dist/record/gpu-timing.d.ts +32 -0
  136. package/dist/record/gpu-timing.d.ts.map +1 -0
  137. package/dist/record/main-pass-geometry.d.ts +11 -0
  138. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  139. package/dist/record/main-pass-material.d.ts +9 -6
  140. package/dist/record/main-pass-material.d.ts.map +1 -1
  141. package/dist/record/main-pass-sprite-draws.d.ts +8 -1
  142. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  143. package/dist/record/main-pass.d.ts +2 -0
  144. package/dist/record/main-pass.d.ts.map +1 -1
  145. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  146. package/dist/record/render-context.d.ts +81 -19
  147. package/dist/record/render-context.d.ts.map +1 -1
  148. package/dist/record/shadow-pass.d.ts.map +1 -1
  149. package/dist/record/skybox-post-pass.d.ts +1 -11
  150. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  151. package/dist/record/typed-frame-graph.d.ts +36 -4
  152. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  153. package/dist/record/view-ubo.d.ts +4 -1
  154. package/dist/record/view-ubo.d.ts.map +1 -1
  155. package/dist/render-contract.d.ts +157 -8
  156. package/dist/render-contract.d.ts.map +1 -1
  157. package/dist/render-data.d.ts +10 -6
  158. package/dist/render-data.d.ts.map +1 -1
  159. package/dist/render-graph-primitives.d.ts.map +1 -1
  160. package/dist/render-pipeline.d.ts +86 -6
  161. package/dist/render-pipeline.d.ts.map +1 -1
  162. package/dist/render-system-extract.d.ts +84 -8
  163. package/dist/render-system-extract.d.ts.map +1 -1
  164. package/dist/render-system.d.ts +30 -5
  165. package/dist/render-system.d.ts.map +1 -1
  166. package/dist/renderer-inspect.d.ts +29 -0
  167. package/dist/renderer-inspect.d.ts.map +1 -0
  168. package/dist/scene/render-scene.d.ts +36 -2
  169. package/dist/scene/render-scene.d.ts.map +1 -1
  170. package/dist/temporal/coverage.d.ts +42 -0
  171. package/dist/temporal/coverage.d.ts.map +1 -0
  172. package/dist/temporal/frame-coordinator.d.ts +99 -0
  173. package/dist/temporal/frame-coordinator.d.ts.map +1 -0
  174. package/dist/temporal/frame.d.ts +44 -0
  175. package/dist/temporal/frame.d.ts.map +1 -0
  176. package/dist/temporal/gpu.d.ts +39 -0
  177. package/dist/temporal/gpu.d.ts.map +1 -0
  178. package/dist/temporal/history.d.ts +37 -0
  179. package/dist/temporal/history.d.ts.map +1 -0
  180. package/dist/temporal/index.d.ts +7 -0
  181. package/dist/temporal/index.d.ts.map +1 -0
  182. package/dist/temporal/index.mjs +8 -0
  183. package/dist/temporal/index.mjs.map +1 -0
  184. package/dist/temporal/inspection.d.ts +36 -0
  185. package/dist/temporal/inspection.d.ts.map +1 -0
  186. package/dist/temporal/scene-data-catalog.d.ts +48 -0
  187. package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
  188. package/dist/temporal/scene-data.d.ts +43 -0
  189. package/dist/temporal/scene-data.d.ts.map +1 -0
  190. package/dist/temporal/standard-scene-data.d.ts +61 -0
  191. package/dist/temporal/standard-scene-data.d.ts.map +1 -0
  192. package/dist/temporal/taa-history-resources.d.ts +22 -0
  193. package/dist/temporal/taa-history-resources.d.ts.map +1 -0
  194. package/dist/temporal/taa-history-store.d.ts +27 -0
  195. package/dist/temporal/taa-history-store.d.ts.map +1 -0
  196. package/dist/temporal/taa-resolve.d.ts +15 -0
  197. package/dist/temporal/taa-resolve.d.ts.map +1 -0
  198. package/dist/temporal/temporal-view.d.ts +40 -0
  199. package/dist/temporal/temporal-view.d.ts.map +1 -0
  200. package/dist/temporal/transaction.d.ts +9 -0
  201. package/dist/temporal/transaction.d.ts.map +1 -0
  202. package/dist/temporal/view.d.ts +56 -0
  203. package/dist/temporal/view.d.ts.map +1 -0
  204. package/dist/transmission/backdrop.d.ts +147 -0
  205. package/dist/transmission/backdrop.d.ts.map +1 -0
  206. package/dist/transmission/inspection.d.ts +57 -0
  207. package/dist/transmission/inspection.d.ts.map +1 -0
  208. package/dist/transmission/oracle.d.ts +42 -0
  209. package/dist/transmission/oracle.d.ts.map +1 -0
  210. package/dist/transmission/projection.d.ts +37 -0
  211. package/dist/transmission/projection.d.ts.map +1 -0
  212. package/dist/typed-render-graph-primitives.d.ts +30 -2
  213. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  214. package/dist/typed-shadow-atlas.d.ts +10 -0
  215. package/dist/typed-shadow-atlas.d.ts.map +1 -0
  216. package/dist/typed-shadow-passes.d.ts.map +1 -1
  217. package/dist/volume/capability.d.ts +57 -0
  218. package/dist/volume/capability.d.ts.map +1 -0
  219. package/dist/volume/component.d.ts +61 -0
  220. package/dist/volume/component.d.ts.map +1 -0
  221. package/dist/volume/extract.d.ts +11 -0
  222. package/dist/volume/extract.d.ts.map +1 -0
  223. package/dist/volume/inspection.d.ts +38 -0
  224. package/dist/volume/inspection.d.ts.map +1 -0
  225. package/dist/volume/passes.d.ts +38 -0
  226. package/dist/volume/passes.d.ts.map +1 -0
  227. package/dist/volume/recovery.d.ts +38 -0
  228. package/dist/volume/recovery.d.ts.map +1 -0
  229. package/dist/volume/resources.d.ts +57 -0
  230. package/dist/volume/resources.d.ts.map +1 -0
  231. package/dist/volume/temporal.d.ts +35 -0
  232. package/dist/volume/temporal.d.ts.map +1 -0
  233. package/package.json +24 -19
  234. package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
  235. package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
  236. package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
  237. package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
  238. package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
  239. package/src/__tests__/detached-inspection.integration.test.ts +177 -0
  240. package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
  241. package/src/__tests__/environment-generation.integration.test.ts +141 -0
  242. package/src/__tests__/environment-selection.unit.test.ts +245 -0
  243. package/src/__tests__/factory-contract.integration.test.ts +1380 -9
  244. package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
  245. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
  246. package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
  247. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
  248. package/src/__tests__/gpu-scene.unit.test.ts +10 -0
  249. package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
  250. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -14
  251. package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
  252. package/src/__tests__/material-cooked-projection.unit.test.ts +18 -146
  253. package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
  254. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +1 -1
  255. package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
  256. package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
  257. package/src/__tests__/public-surface.test-d.ts +15 -1
  258. package/src/__tests__/render-error-code-owner.test-d.ts +14 -0
  259. package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
  260. package/src/__tests__/render-error-exhaustive.test-d.ts +3 -0
  261. package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
  262. package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
  263. package/src/__tests__/render-feature-plan.test-d.ts +22 -89
  264. package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
  265. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
  266. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
  267. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +423 -1
  268. package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
  269. package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
  270. package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
  271. package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
  272. package/src/__tests__/scene-data-contract.test-d.ts +35 -0
  273. package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
  274. package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
  275. package/src/__tests__/shader-manifest-fixture.ts +111 -0
  276. package/src/__tests__/skinned-shadow-caster.test.ts +123 -0
  277. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
  278. package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
  279. package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
  280. package/src/__tests__/standard-profile-oracle.unit.test.ts +12 -2
  281. package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
  282. package/src/__tests__/surface-configuration.unit.test.ts +211 -12
  283. package/src/__tests__/taa-transaction.integration.test.ts +30 -0
  284. package/src/__tests__/temporal-admission.integration.test.ts +40 -0
  285. package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
  286. package/src/__tests__/temporal-demand.unit.test.ts +44 -0
  287. package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
  288. package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
  289. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
  290. package/src/__tests__/temporal-performance.integration.test.ts +615 -0
  291. package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
  292. package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
  293. package/src/__tests__/temporal-view.unit.test.ts +152 -0
  294. package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
  295. package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
  296. package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
  297. package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
  298. package/src/__tests__/visibility-extract.integration.test.ts +27 -1
  299. package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
  300. package/src/__tests__/volume-optics-oracle.unit.test.ts +85 -0
  301. package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +655 -0
  302. package/src/__tests__/volumetric-fog-component.unit.test.ts +71 -0
  303. package/src/__tests__/volumetric-fog-composite-stage-readback.dawn.test.ts +376 -0
  304. package/src/__tests__/volumetric-fog-errors.unit.test.ts +51 -0
  305. package/src/__tests__/volumetric-fog-inspection.unit.test.ts +77 -0
  306. package/src/__tests__/volumetric-fog-light-capability.unit.test.ts +19 -0
  307. package/src/__tests__/volumetric-fog-light-consumers.integration.test.ts +18 -0
  308. package/src/__tests__/volumetric-fog-light-errors.unit.test.ts +17 -0
  309. package/src/__tests__/volumetric-fog-light-topology.unit.test.ts +21 -0
  310. package/src/__tests__/volumetric-fog-light-transaction.integration.test.ts +53 -0
  311. package/src/__tests__/volumetric-fog-m9-watcher.integration.test.ts +27 -0
  312. package/src/__tests__/volumetric-fog-point-light-owner.integration.test.ts +44 -0
  313. package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +49 -0
  314. package/src/__tests__/volumetric-fog-point-spot-contract.unit.test.ts +28 -0
  315. package/src/__tests__/volumetric-fog-point-spot-lkg.integration.test.ts +65 -0
  316. package/src/__tests__/volumetric-fog-point-spot-selection.integration.test.ts +49 -0
  317. package/src/__tests__/volumetric-fog-point-spot-temporal.unit.test.ts +55 -0
  318. package/src/__tests__/volumetric-fog-projector-contract.unit.test.ts +22 -0
  319. package/src/__tests__/volumetric-fog-projector-inspection.unit.test.ts +12 -0
  320. package/src/__tests__/volumetric-fog-projector-surface-volume.integration.test.ts +11 -0
  321. package/src/__tests__/volumetric-fog-projector-transaction.integration.test.ts +26 -0
  322. package/src/__tests__/volumetric-fog-recovery.integration.test.ts +47 -0
  323. package/src/__tests__/volumetric-fog-selected-light-resolution.integration.test.ts +63 -0
  324. package/src/__tests__/volumetric-fog-spot-closure.integration.test.ts +26 -0
  325. package/src/__tests__/volumetric-fog-spot-contract.test-d.ts +21 -0
  326. package/src/__tests__/volumetric-fog-spot-contract.unit.test.ts +27 -0
  327. package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +14 -0
  328. package/src/__tests__/volumetric-fog-spot-optics.integration.test.ts +29 -0
  329. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +550 -0
  330. package/src/__tests__/volumetric-fog-temporal-selected-light.unit.test.ts +33 -0
  331. package/src/__tests__/volumetric-fog-temporal.unit.test.ts +45 -0
  332. package/src/__tests__/volumetric-fog-topology.unit.test.ts +237 -0
  333. package/src/__tests__/volumetric-fog-transparent.integration.test.ts +27 -0
  334. package/src/assembly/backend-contract.ts +47 -1
  335. package/src/assembly/factory.ts +1480 -505
  336. package/src/assembly/host-contract.ts +4 -0
  337. package/src/assembly/renderer-frame-transaction.ts +75 -0
  338. package/src/assembly/renderer-inspection.ts +112 -0
  339. package/src/assembly/renderer-lifecycle.ts +6 -0
  340. package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
  341. package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
  342. package/src/components/atmosphere.ts +10 -0
  343. package/src/components/camera.ts +2 -1
  344. package/src/components/fog.ts +9 -0
  345. package/src/components/index.ts +3 -0
  346. package/src/components/light-helpers.ts +4 -0
  347. package/src/components/motion-blur.ts +8 -0
  348. package/src/components/spot-light.ts +22 -3
  349. package/src/construct-renderer.ts +40 -3
  350. package/src/device/device-scope.ts +15 -1
  351. package/src/device/gpu-residency.ts +168 -58
  352. package/src/environment/frame.ts +185 -0
  353. package/src/environment/generation.ts +23 -0
  354. package/src/environment/graph.ts +9 -0
  355. package/src/environment/inspection.ts +87 -0
  356. package/src/environment/lifecycle.ts +250 -0
  357. package/src/environment/signature.ts +55 -0
  358. package/src/errors/render.ts +404 -1
  359. package/src/extract/camera.ts +78 -0
  360. package/src/extract/environment.ts +171 -0
  361. package/src/extract/visibility.ts +38 -19
  362. package/src/features/host.ts +36 -5
  363. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
  364. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
  365. package/src/features/motion-blur/motion-blur-feature.ts +119 -0
  366. package/src/features/motion-blur/motion-blur-params.ts +89 -0
  367. package/src/features/plan.ts +32 -3
  368. package/src/features/prepared-gpu-work.ts +21 -6
  369. package/src/features/prepared-graphics.ts +2 -1
  370. package/src/features/render-graph-raster.ts +2 -1
  371. package/src/features/targets.ts +24 -2
  372. package/src/features/types.ts +13 -0
  373. package/src/fullscreen-post-process-pass.ts +34 -4
  374. package/src/gpu-scene.ts +24 -0
  375. package/src/gpu-usage.ts +2 -0
  376. package/src/ibl/skylight-bind-group.ts +30 -38
  377. package/src/index.ts +104 -7
  378. package/src/inspection-types.ts +48 -0
  379. package/src/internal.ts +5 -0
  380. package/src/light-buffer-layout.ts +59 -26
  381. package/src/materials.ts +119 -24
  382. package/src/pbr-pipeline.ts +91 -29
  383. package/src/pipeline/standard-forward-lane.ts +178 -101
  384. package/src/pipeline/standard-pipeline.ts +176 -105
  385. package/src/pipeline/standard-post.ts +373 -0
  386. package/src/pipeline/standard-profile.ts +26 -3
  387. package/src/pipeline-builder.ts +102 -12
  388. package/src/pipeline-spec.ts +9 -0
  389. package/src/plugin.ts +2 -0
  390. package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
  391. package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
  392. package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
  393. package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
  394. package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
  395. package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
  396. package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
  397. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
  398. package/src/record/frame-lighting.ts +103 -89
  399. package/src/record/frame-snapshot.ts +170 -6
  400. package/src/record/frame-targets.ts +21 -8
  401. package/src/record/frame.ts +1014 -7
  402. package/src/record/gpu-timing.ts +224 -0
  403. package/src/record/main-pass-geometry.ts +86 -40
  404. package/src/record/main-pass-material.ts +120 -68
  405. package/src/record/main-pass-sprite-draws.ts +78 -101
  406. package/src/record/main-pass.ts +77 -4
  407. package/src/record/mesh-ssbo.ts +22 -3
  408. package/src/record/render-context.ts +194 -23
  409. package/src/record/shadow-pass.ts +197 -58
  410. package/src/record/skybox-post-pass.ts +97 -41
  411. package/src/record/typed-frame-graph.ts +704 -30
  412. package/src/record/view-ubo.ts +52 -4
  413. package/src/render-contract.ts +181 -6
  414. package/src/render-data.ts +50 -22
  415. package/src/render-graph-primitives.ts +18 -1
  416. package/src/render-pipeline.ts +144 -27
  417. package/src/render-system-extract.ts +522 -72
  418. package/src/render-system.ts +561 -41
  419. package/src/renderer-inspect.ts +66 -0
  420. package/src/scene/render-scene.ts +252 -7
  421. package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
  422. package/src/temporal/coverage.ts +76 -0
  423. package/src/temporal/frame-coordinator.ts +311 -0
  424. package/src/temporal/frame.ts +128 -0
  425. package/src/temporal/gpu.ts +287 -0
  426. package/src/temporal/history.ts +92 -0
  427. package/src/temporal/index.ts +6 -0
  428. package/src/temporal/inspection.ts +97 -0
  429. package/src/temporal/scene-data-catalog.ts +200 -0
  430. package/src/temporal/scene-data.ts +149 -0
  431. package/src/temporal/standard-scene-data.ts +182 -0
  432. package/src/temporal/taa-history-resources.ts +128 -0
  433. package/src/temporal/taa-history-store.ts +79 -0
  434. package/src/temporal/taa-resolve.ts +34 -0
  435. package/src/temporal/temporal-view.ts +169 -0
  436. package/src/temporal/transaction.ts +17 -0
  437. package/src/temporal/view.ts +161 -0
  438. package/src/transmission/__tests__/capability.unit.test.ts +83 -0
  439. package/src/transmission/__tests__/composition.integration.test.ts +161 -0
  440. package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
  441. package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
  442. package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
  443. package/src/transmission/__tests__/projection.unit.test.ts +71 -0
  444. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +437 -0
  445. package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
  446. package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
  447. package/src/transmission/backdrop.ts +572 -0
  448. package/src/transmission/inspection.ts +190 -0
  449. package/src/transmission/oracle.ts +141 -0
  450. package/src/transmission/projection.ts +83 -0
  451. package/src/typed-render-graph-primitives.ts +194 -11
  452. package/src/typed-shadow-atlas.ts +17 -0
  453. package/src/typed-shadow-passes.ts +6 -5
  454. package/src/volume/capability.ts +173 -0
  455. package/src/volume/component.ts +110 -0
  456. package/src/volume/extract.ts +21 -0
  457. package/src/volume/inspection.ts +78 -0
  458. package/src/volume/passes.ts +680 -0
  459. package/src/volume/recovery.ts +86 -0
  460. package/src/volume/resources.ts +236 -0
  461. package/src/volume/temporal.ts +89 -0
  462. package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
  463. package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
  464. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
  465. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
  466. package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
  467. package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
  468. package/dist/__tests__/cluster-binner.test.d.ts +0 -2
  469. package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
  470. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
  471. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
  472. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
  473. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
  474. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
  475. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
  476. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
  477. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
  479. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
  480. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
  481. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
  482. package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
  483. package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
  484. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
  485. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
  486. package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
  487. package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
  488. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
  489. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
  490. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
  491. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
  492. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
  493. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
  494. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
  495. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
  496. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
  497. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
  498. package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
  499. package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
  500. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
  501. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
  503. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
  504. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
  505. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
  506. package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
  507. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
  508. package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
  509. package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
  510. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
  511. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
  512. package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
  513. package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
  514. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
  515. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
  517. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
  518. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
  519. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
  520. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
  521. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
  522. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
  523. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
  524. package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
  525. package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
  526. package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
  527. package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
  529. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
  531. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
  532. package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
  533. package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
  534. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
  535. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
  536. package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
  537. package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
  538. package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
  539. package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
  540. package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
  541. package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
  542. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
  543. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
  544. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
  545. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
  547. package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
  549. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
  551. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
  552. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
  553. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
  555. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
  556. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
  557. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
  558. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
  559. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
  561. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
  562. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
  563. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
  564. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
  565. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
  566. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
  567. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
  568. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
  569. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
  570. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
  571. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
  572. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
  573. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
  574. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
  575. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
  576. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
  577. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
  578. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
  579. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
  580. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
  581. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
  582. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
  583. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
  584. package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
  585. package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
  586. package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
  587. package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
  588. package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
  589. package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
  590. package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
  591. package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
  592. package/dist/__tests__/public-surface.test-d.d.ts +0 -2
  593. package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
  594. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
  595. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
  596. package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
  597. package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
  598. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
  599. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
  600. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
  601. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
  602. package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
  603. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
  604. package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
  605. package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
  606. package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
  607. package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
  608. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
  609. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
  610. package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
  611. package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
  612. package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
  613. package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
  614. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
  615. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
  616. package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
  617. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
  618. package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
  619. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
  620. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
  621. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
  622. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
  623. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
  624. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
  625. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
  626. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
  627. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
  628. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
  629. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
  630. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
  631. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
  632. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
  633. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
  634. package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
  635. package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
  636. package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
  637. package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
  638. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
  639. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
  640. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
  641. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
  642. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
  643. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
  644. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
  645. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
  646. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
  647. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
  648. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
  649. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
  650. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
  651. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
  652. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
  653. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
  654. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
  655. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
  656. package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
  657. package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
  658. package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
  659. package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
  660. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
  661. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
  662. package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
  663. package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
  664. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
  665. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
  666. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
  667. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
  668. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
  669. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
  670. package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
  671. package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
  672. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
  673. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
  674. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
  675. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
  676. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
  677. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
  678. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
  679. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
  680. package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
  681. package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
  682. package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
  683. package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
  684. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
  685. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
  686. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
  687. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
  688. package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
  689. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
  690. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
  691. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
  692. package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
  693. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
  694. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
  695. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
  696. package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
  697. package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
  698. package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
  699. package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
  700. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
  701. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
  702. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
  703. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
  704. package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
  705. package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
  706. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
  707. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
  708. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
  709. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
  710. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
  711. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
  712. package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
  713. package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
  714. package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
  715. package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
  716. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
  717. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
  718. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
  719. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
  720. package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
  721. package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
  722. package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
  723. package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
  724. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
  725. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
  726. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
  727. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
  728. package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
  729. package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
  730. package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
  731. package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
  732. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
  733. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
  734. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
  735. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
  736. package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
  737. package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
  738. package/dist/chunk-CQXZC5XI.mjs.map +0 -1
  739. package/dist/chunk-HCOGPHKS.mjs +0 -93
  740. package/dist/chunk-HCOGPHKS.mjs.map +0 -1
  741. package/dist/chunk-YEJIUW7D.mjs.map +0 -1
  742. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +0 -2
  743. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +0 -1
  744. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +0 -2
  745. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +0 -1
  746. package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
  747. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
  748. package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
  749. package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
  750. package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
  751. package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
  752. package/dist/points-lines/__tests__/bounds.unit.test.d.ts +0 -2
  753. package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +0 -1
  754. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +0 -2
  755. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +0 -1
  756. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +0 -2
  757. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +0 -1
  758. package/dist/points-lines/__tests__/inspection.unit.test.d.ts +0 -2
  759. package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +0 -1
  760. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +0 -2
  761. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +0 -1
  762. package/dist/points-lines/__tests__/points-lines.bench.d.ts +0 -2
  763. package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +0 -1
  764. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +0 -2
  765. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +0 -1
  766. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +0 -2
  767. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +0 -1
  768. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +0 -2
  769. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +0 -1
  770. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
  771. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
  772. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
  773. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
  774. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
  775. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
  776. package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
  777. package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
@@ -1,7 +1,4 @@
1
- import { defineComponent, Entity } from '@forgeax/engine-ecs';
2
- import { TONEMAP_SHADER_MODE } from '@forgeax/engine-shader';
3
1
  import { err, ok } from '@forgeax/engine-types';
4
- import { projectHierarchy } from '@forgeax/engine-scene';
5
2
 
6
3
  // src/errors/render.ts
7
4
  var LifecycleConstructionError = class extends Error {
@@ -15,6 +12,17 @@ var LifecycleConstructionError = class extends Error {
15
12
  this.detail = detail;
16
13
  }
17
14
  };
15
+ var TemporalFrameSubmitError = class extends Error {
16
+ code = "temporal-frame-submit-rejected";
17
+ expected = "the staged frame is accepted by queue.submit before temporal facts advance";
18
+ hint = "inspect the queue submission and retry the frame after the device is available";
19
+ detail;
20
+ constructor(reason) {
21
+ super(`temporal-frame-submit-rejected: ${reason}`);
22
+ this.name = "TemporalFrameSubmitError";
23
+ this.detail = { reason };
24
+ }
25
+ };
18
26
  var ShadowInvalidConfigError = class extends Error {
19
27
  code = "shadow-invalid-config";
20
28
  expected;
@@ -205,6 +213,17 @@ var MaterialSkinAttrMissingError = class extends Error {
205
213
  this.detail = { entity, missing };
206
214
  }
207
215
  };
216
+ var TransmissionCapabilityMissingError = class extends Error {
217
+ code = "transmission-capability-missing";
218
+ expected = "the renderer exposes the transmission capability for this material";
219
+ hint = "disable transmission or provide the renderer capability before drawing";
220
+ detail;
221
+ constructor(material, stage, evidence) {
222
+ super(`transmission capability is missing for material '${material}'`);
223
+ this.name = "TransmissionCapabilityMissingError";
224
+ this.detail = { material, capability: "transmission", stage, ...evidence };
225
+ }
226
+ };
208
227
  var renderFeatureRecoveryHintByRecovery = {
209
228
  "next-frame": (featureIdentity, stage) => `correct '${featureIdentity}' ${stage} data and retry on the next frame`,
210
229
  "renderer-recover": (featureIdentity, _stage) => `wait for renderer recovery before retrying '${featureIdentity}'`,
@@ -335,6 +354,26 @@ var ObservationUnavailableError = class extends Error {
335
354
  this.detail = { reason, recovery };
336
355
  }
337
356
  };
357
+ var SceneDataUnavailableError = class extends Error {
358
+ code = "scene-data-unavailable";
359
+ expected = "the requested semantic scene data is available for the active plan";
360
+ hint;
361
+ detail;
362
+ constructor(detail) {
363
+ const hint = detail.recovery === "enable-capability" ? "enable rgba16floatRenderable and retry the current frame" : detail.recovery === "renderer-recover" ? "wait for renderer recovery, then retry the frame" : "restore the producer coverage and retry on the next frame";
364
+ super(`scene data '${detail.schema}' unavailable for '${detail.featureIdentity}'`);
365
+ this.name = "SceneDataUnavailableError";
366
+ this.hint = hint;
367
+ this.detail = Object.freeze({
368
+ ...detail,
369
+ missingContributorIds: Object.freeze([...detail.missingContributorIds].slice(0, 32)),
370
+ omittedMissingContributorCount: Math.max(
371
+ detail.omittedMissingContributorCount,
372
+ Math.max(0, detail.missingContributorIds.length - 32)
373
+ )
374
+ });
375
+ }
376
+ };
338
377
  var FrameReceiptStaleError = class extends Error {
339
378
  code = "frame-receipt-stale";
340
379
  expected = "the observation receipt belongs to the active device generation";
@@ -357,6 +396,75 @@ var RendererContractFailureError = class extends Error {
357
396
  this.detail = { operation, cause };
358
397
  }
359
398
  };
399
+ var EnvironmentSourceConflictError = class extends Error {
400
+ code = "environment-source-conflict";
401
+ expected = "exactly one environment source owns the frame";
402
+ hint = "remove all but one image or atmosphere environment owner";
403
+ detail;
404
+ constructor(owners) {
405
+ super("environment source owners conflict");
406
+ this.name = "EnvironmentSourceConflictError";
407
+ this.detail = { owners: owners.map((owner) => Object.freeze({ ...owner })) };
408
+ }
409
+ };
410
+ var FogCardinalityError = class extends Error {
411
+ code = "fog-cardinality";
412
+ expected = "zero or one Fog owner contributes to a frame";
413
+ hint = "remove extra Fog owners so the resource owner has at most one";
414
+ detail;
415
+ constructor(count) {
416
+ super(`Fog owner cardinality is ${count}`);
417
+ this.name = "FogCardinalityError";
418
+ this.detail = { count };
419
+ }
420
+ };
421
+ var TaaCapsInsufficientError = class extends Error {
422
+ code = "taa-caps-insufficient";
423
+ expected = "the backend exposes the capabilities required by TAA";
424
+ hint = "select a backend with the required TAA capabilities or disable TAA on Camera";
425
+ detail;
426
+ constructor(required, available) {
427
+ super("TAA capabilities are insufficient");
428
+ this.name = "TaaCapsInsufficientError";
429
+ this.detail = { required: [...required], available: [...available] };
430
+ }
431
+ };
432
+ var EnvironmentGenerationFailedError = class extends Error {
433
+ code = "environment-generation-failed";
434
+ expected = "the selected environment generation completes its owner stage";
435
+ hint = "inspect the stage and sourceKey, then retry after correcting the environment";
436
+ detail;
437
+ constructor(sourceKey, stage) {
438
+ super(`environment generation failed during ${stage}`);
439
+ this.name = "EnvironmentGenerationFailedError";
440
+ this.detail = { sourceKey, stage };
441
+ }
442
+ };
443
+ var AtmosphereInvalidParameterError = class extends Error {
444
+ code = "atmosphere-invalid-parameter";
445
+ expected;
446
+ hint;
447
+ detail;
448
+ constructor(field, value, range) {
449
+ super(`Atmosphere.${field} is invalid`);
450
+ this.name = "AtmosphereInvalidParameterError";
451
+ this.detail = { field, value };
452
+ const rangeText = Number.isFinite(range.max) ? `[${range.min}, ${range.max}]` : `>= ${range.min}`;
453
+ this.expected = `Atmosphere.${field} must be finite and ${rangeText}`;
454
+ this.hint = `set Atmosphere.${field} to a finite value ${rangeText}`;
455
+ }
456
+ };
457
+ var OwnerStageFailedError = class extends Error {
458
+ code = "owner-stage-failed";
459
+ expected = "the owner completes its current frame stage";
460
+ hint = "inspect the owner and stage, keep the last-known-good frame, and retry";
461
+ detail;
462
+ constructor(owner, stage) {
463
+ super(`${owner} owner failed during ${stage}`);
464
+ this.name = "OwnerStageFailedError";
465
+ this.detail = { owner, stage };
466
+ }
467
+ };
360
468
  var RENDERER_OPERATION_ERROR_POLICY = {
361
469
  "world-lease-invalid": {
362
470
  expected: "every render World is represented by a live lease owned by this Renderer",
@@ -494,349 +602,246 @@ var PointsLinesPrepareFailedError = class extends Error {
494
602
  this.detail = detail;
495
603
  }
496
604
  };
497
- var CAMERA_PROJECTION_PERSPECTIVE = 0;
498
- var CAMERA_PROJECTION_ORTHOGRAPHIC = 1;
499
- function cameraProjectionFromF32(value) {
500
- return value === CAMERA_PROJECTION_ORTHOGRAPHIC ? "orthographic" : "perspective";
501
- }
502
- var TONEMAP_NONE = TONEMAP_SHADER_MODE.none;
503
- var TONEMAP_REINHARD_EXTENDED = TONEMAP_SHADER_MODE.reinhardExtended;
504
- var TONEMAP_REINHARD = TONEMAP_SHADER_MODE.reinhard;
505
- var TONEMAP_LINEAR = TONEMAP_SHADER_MODE.linear;
506
- var TONEMAP_CINEON = TONEMAP_SHADER_MODE.cineon;
507
- var TONEMAP_ACES_FILMIC = TONEMAP_SHADER_MODE.acesFilmic;
508
- var TONEMAP_AGX = TONEMAP_SHADER_MODE.agx;
509
- var TONEMAP_NEUTRAL = TONEMAP_SHADER_MODE.neutral;
510
- function tonemapFromF32(value) {
511
- switch (value) {
512
- case TONEMAP_REINHARD_EXTENDED:
513
- return "reinhard-extended";
514
- case TONEMAP_REINHARD:
515
- return "reinhard";
516
- case TONEMAP_LINEAR:
517
- return "linear";
518
- case TONEMAP_CINEON:
519
- return "cineon";
520
- case TONEMAP_ACES_FILMIC:
521
- return "aces-filmic";
522
- case TONEMAP_AGX:
523
- return "agx";
524
- case TONEMAP_NEUTRAL:
525
- return "neutral";
526
- default:
527
- return "none";
605
+ var VolumeOwnerConflictError = class extends Error {
606
+ code = "volume-owner-conflict";
607
+ expected = "exactly one global VolumetricFog owner is authored";
608
+ hint = "remove additional VolumetricFog owners and retry extraction";
609
+ detail;
610
+ constructor(ownerCount) {
611
+ super(`volume-owner-conflict: received ${ownerCount} owners`);
612
+ this.name = "VolumeOwnerConflictError";
613
+ this.detail = { ownerCount };
528
614
  }
529
- }
530
- function tonemapToU32(mode) {
531
- switch (mode) {
532
- case "reinhard-extended":
533
- return TONEMAP_REINHARD_EXTENDED;
534
- case "reinhard":
535
- return TONEMAP_REINHARD;
536
- case "linear":
537
- return TONEMAP_LINEAR;
538
- case "cineon":
539
- return TONEMAP_CINEON;
540
- case "aces-filmic":
541
- return TONEMAP_ACES_FILMIC;
542
- case "agx":
543
- return TONEMAP_AGX;
544
- case "neutral":
545
- return TONEMAP_NEUTRAL;
546
- case "none":
547
- return TONEMAP_NONE;
615
+ };
616
+ var VolumeDensityShapeMismatchError = class extends Error {
617
+ code = "volume-density-shape-mismatch";
618
+ expected = "density is a linear 3D TextureAsset";
619
+ hint = "bind a verified linear texture with viewDimension 3d";
620
+ detail;
621
+ constructor(guid, viewDimension) {
622
+ super(`volume-density-shape-mismatch: ${viewDimension} density is not 3d`);
623
+ this.name = "VolumeDensityShapeMismatchError";
624
+ this.detail = { guid, viewDimension };
548
625
  }
549
- throw new RangeError(`Invalid tonemap mode: ${String(mode)}.`);
626
+ };
627
+ var VolumeInvalidBoundsError = class extends Error {
628
+ code = "volume-invalid-bounds";
629
+ expected = "bounds are finite and max is greater than min on every axis";
630
+ hint = "set finite non-degenerate volume bounds";
631
+ detail;
632
+ constructor(bounds) {
633
+ super("volume-invalid-bounds: bounds must be finite and non-degenerate");
634
+ this.name = "VolumeInvalidBoundsError";
635
+ this.detail = bounds;
636
+ }
637
+ };
638
+ var VolumeInvalidParametersError = class extends Error {
639
+ code = "volume-invalid-parameters";
640
+ expected = "volume parameters remain finite and inside their closed ranges";
641
+ hint = "repair extinction, albedo, emission, anisotropy, or maxDistance";
642
+ detail;
643
+ constructor(input) {
644
+ const field = input.maxDistance !== void 0 && input.maxDistance <= 0 ? "maxDistance" : "parameters";
645
+ const value = field === "maxDistance" ? input.maxDistance : input.anisotropy;
646
+ super(`volume-invalid-parameters: ${field} is outside the authored range`);
647
+ this.name = "VolumeInvalidParametersError";
648
+ this.detail = { field, value };
649
+ }
650
+ };
651
+
652
+ // src/temporal/scene-data.ts
653
+ var SCENE_DATA_TEMPORAL_V1_SCHEMA = "forgeax::scene-data::temporal-v1";
654
+ var SCENE_DATA_TEMPORAL_V1_DESCRIPTOR = Object.freeze({
655
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
656
+ format: "rgba16float",
657
+ sampleCount: 1,
658
+ extent: "render-resolution",
659
+ clearValue: [0, 0, -1, 1],
660
+ channels: Object.freeze({
661
+ motionUv: "rg",
662
+ viewDepth: "b-log2-1-plus-depth",
663
+ reactive: "a"
664
+ })
665
+ });
666
+ var targetOwners = /* @__PURE__ */ new WeakMap();
667
+ function registerSceneDataTarget(target, owner) {
668
+ targetOwners.set(target, owner);
550
669
  }
551
- var ANTIALIAS_NONE = 0;
552
- var ANTIALIAS_FXAA = 1;
553
- var ANTIALIAS_MSAA = 2;
554
- var ANTIALIAS_TAA = 3;
555
- function antialiasFromF32(value) {
556
- if (value === ANTIALIAS_NONE) return "none";
557
- if (value === ANTIALIAS_FXAA) return "fxaa";
558
- if (value === ANTIALIAS_MSAA) return "msaa";
559
- if (value === ANTIALIAS_TAA) return "taa";
560
- throw new RangeError(
561
- `Invalid antialias value: ${value}. Expected ${ANTIALIAS_NONE} (none), ${ANTIALIAS_FXAA} (fxaa), ${ANTIALIAS_MSAA} (msaa), or ${ANTIALIAS_TAA} (taa).`
562
- );
670
+ function sceneDataTargetOwner(target) {
671
+ return typeof target === "object" && target !== null ? targetOwners.get(target) : void 0;
563
672
  }
564
- var BLOOM_DISABLED = 0;
565
- var BLOOM_ENABLED = 1;
566
- function bloomEnabledFromF32(value) {
567
- if (value === BLOOM_DISABLED) return "off";
568
- if (value === BLOOM_ENABLED) return "on";
569
- throw new RangeError(
570
- `Invalid bloom value: ${value}. Expected ${BLOOM_DISABLED} (off) or ${BLOOM_ENABLED} (on).`
571
- );
673
+ function sceneDataTokenMismatch(operation, reason, owner, target) {
674
+ const detail = reason === "generation-mismatch" ? {
675
+ featureIdentity: owner.featureIdentity,
676
+ order: -1,
677
+ stage: "contribute",
678
+ operation,
679
+ resourceKind: "attachment",
680
+ reason,
681
+ expectedGeneration: owner.generation,
682
+ actualGeneration: targetOwners.get(target)?.generation ?? -1,
683
+ recovery: "renderer-recover"
684
+ } : reason === "foreign-feature" ? {
685
+ featureIdentity: owner.featureIdentity,
686
+ order: -1,
687
+ stage: "contribute",
688
+ operation,
689
+ resourceKind: "attachment",
690
+ reason,
691
+ expectedFeatureIdentity: owner.featureIdentity,
692
+ actualFeatureIdentity: targetOwners.get(target)?.featureIdentity ?? "unknown",
693
+ recovery: "next-frame"
694
+ } : reason === "foreign-kind" ? {
695
+ featureIdentity: owner.featureIdentity,
696
+ order: -1,
697
+ stage: "contribute",
698
+ operation,
699
+ resourceKind: "attachment",
700
+ reason,
701
+ expectedKind: "attachment",
702
+ actualKind: "pipeline",
703
+ recovery: "next-frame"
704
+ } : {
705
+ featureIdentity: owner.featureIdentity,
706
+ order: -1,
707
+ stage: "contribute",
708
+ operation,
709
+ resourceKind: "attachment",
710
+ reason,
711
+ expectedLayout: "sampled-read-temporal-v1",
712
+ actualLayout: target?.access ?? "unknown",
713
+ recovery: "next-frame"
714
+ };
715
+ return new RenderFeaturePreparedStateMismatchError(detail);
572
716
  }
573
- var Camera = defineComponent("Camera", {
574
- fov: { type: "f32" },
575
- aspect: { type: "f32" },
576
- near: { type: "f32" },
577
- far: { type: "f32" },
578
- projection: { type: "f32", default: 0 },
579
- left: { type: "f32", default: -1 },
580
- right: { type: "f32", default: 1 },
581
- bottom: { type: "f32", default: -1 },
582
- top: { type: "f32", default: 1 },
583
- tonemap: { type: "f32", default: 0 },
584
- exposure: { type: "f32", default: 1 },
585
- whitePoint: { type: "f32", default: 4 },
586
- antialias: { type: "f32", default: 0 },
587
- historyVersion: { type: "u32", default: 0 },
588
- bloom: { type: "f32", default: 0 },
589
- bloomThreshold: { type: "f32", default: 1 },
590
- bloomIntensity: { type: "f32", default: 1 },
591
- bloomBlurRadius: { type: "f32", default: 4 },
592
- // feat-20260709 M3 / D-3: clear-color is one inline `array<f32,4>` column.
593
- // The earlier 4-scalar form (clearR/G/B/A) was chosen when this was believed
594
- // to be the only SoA-safe shape; the Transform (pos/quat/scale) and light
595
- // (direction/color) precedents disprove that -- an `array<f32,N>` IS an
596
- // inline stride-N SoA column, read on the hot path as `col[i*N+a]` with zero
597
- // allocation, so collapsing four scalars into one column removes three field
598
- // names a reader must track without changing the storage layout or read
599
- // pattern. The default `[0, 0, 0, 0]` is transparent black; explicit alpha
600
- // stays visible through the same public array field.
601
- clearColor: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 0]) },
602
- // feat-20260617-host-engine-contract-and-video-cutscene / M3 / D-4: the
603
- // aspect-sync sidecar on the createApp(canvas) path writes
604
- // canvas.width / canvas.height into `aspect` every frame when this flag is
605
- // true. Reuses the existing `bool` column tier (AnimationPlayer.paused /
606
- // AudioSource.playing precedent) -- zero ECS infrastructure change. Default
607
- // true so demos that never touch aspect track the canvas automatically
608
- // (charter P1 default-is-correct); set false for render-to-texture /
609
- // split-screen cameras that drive aspect themselves. Read it via
610
- // world.get (readRow narrows bool -> JS boolean); the query-bundle path
611
- // returns a raw 0/1 number (the `!== 0` always-true trap).
612
- autoAspect: { type: "bool", default: true }
613
- });
614
- function cameraPodFromDefaults() {
615
- const base = {};
616
- for (const [key, field] of Object.entries(Camera.fields)) {
617
- if ("default" in field && field.default !== void 0) {
618
- base[key] = field.default;
619
- }
620
- }
621
- return base;
717
+ function isSceneDataTarget(value) {
718
+ if (value === null || typeof value !== "object") return false;
719
+ const candidate = value;
720
+ return candidate.kind === "scene-data" && candidate.schema === SCENE_DATA_TEMPORAL_V1_SCHEMA && candidate.access === "sampled-read" && candidate.format === "rgba16float" && candidate.sampleCount === 1 && candidate.extent === "render-resolution" && targetOwners.has(value);
622
721
  }
623
- function perspective(opts) {
624
- return {
625
- // cameraPodFromDefaults() reads autoAspect's schema default (true), so an
626
- // omitted opts.autoAspect lands the default-correct value; an explicit
627
- // false overrides it below (D-4: factory one-step opt-out, charter P1).
628
- ...cameraPodFromDefaults(),
629
- fov: opts.fov,
630
- aspect: opts.aspect,
631
- near: opts.near ?? 0.1,
632
- far: opts.far ?? 100,
633
- projection: CAMERA_PROJECTION_PERSPECTIVE,
634
- ...opts.autoAspect !== void 0 ? { autoAspect: opts.autoAspect } : {}
635
- };
722
+ function sceneDataTargetAsAttachment(_target) {
723
+ throw new TypeError("SceneDataTarget is sampled-read-only and cannot be used as an attachment");
636
724
  }
637
- function orthographic(opts) {
725
+ function sceneDataError(error) {
726
+ return error;
727
+ }
728
+ function availability(options) {
729
+ if (options.recovering) return { status: "unavailable", reason: "renderer-recovering" };
730
+ if (!options.rgba16floatRenderable)
731
+ return { status: "unavailable", reason: "capability-missing" };
732
+ if (options.producerPresent === false)
733
+ return { status: "unavailable", reason: "producer-missing" };
734
+ if (options.coverageComplete === false)
735
+ return { status: "unavailable", reason: "coverage-incomplete" };
638
736
  return {
639
- ...cameraPodFromDefaults(),
640
- fov: 0,
641
- aspect: 1,
642
- near: opts.near ?? 0.1,
643
- far: opts.far ?? 100,
644
- projection: CAMERA_PROJECTION_ORTHOGRAPHIC,
645
- left: opts.left,
646
- right: opts.right,
647
- bottom: opts.bottom,
648
- top: opts.top
737
+ status: "available",
738
+ completeness: options.reactiveFallback ? "exact-with-reactive-fallback" : "exact"
649
739
  };
650
740
  }
651
- var DirectionalLight = defineComponent("DirectionalLight", {
652
- // direction is the ONLY field with no default (D-5): omitting it lands the
653
- // array layer-3 all-zero [0,0,0], which the renderer owner rejects -- there is no
654
- // universal default direction, so "default is illegal" forces an explicit
655
- // non-zero value. color carries an explicit layer-2 default [1,1,1] (white);
656
- // the array layer-3 fallback is all-zero, so the default MUST be explicit.
657
- direction: { type: "array<f32, 3>" },
658
- color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
659
- intensity: { type: "f32", default: 1 },
660
- // Shadow opt-out gate: defaults to true so zero-config spawns get shadows.
661
- castShadow: { type: "bool", default: true },
662
- // 9 shadow fields migrated from DirectionalLightShadow (feat-20260621 M1).
663
- cascadeCount: { type: "f32", default: 4 },
664
- splitLambda: { type: "f32", default: 0.75 },
665
- cascadeBlend: { type: "f32", default: 0.2 },
666
- mapSize: { type: "f32", default: 2048 },
667
- depthBias: { type: "f32", default: 5e-3 },
668
- normalBias: { type: "f32", default: 0.05 },
669
- // Sole shadow coverage knob (feat replaces nearPlane/farPlane). The PSSM
670
- // near end derives from the active camera near; shadowDistance is the far
671
- // reach. Default 200 world units (matches UE-style "dynamic shadow
672
- // distance"; the old farPlane default was 50).
673
- shadowDistance: { type: "f32", default: 200 },
674
- pcfKernelSize: { type: "f32", default: 3 }
675
- });
676
- var Instances = defineComponent("Instances", {
677
- transforms: { type: "array<f32>" }
678
- });
679
- var Layer = defineComponent("Layer", {
680
- value: { type: "i32", default: 0 }
681
- });
682
- var Lines = defineComponent(
683
- "Lines",
684
- {
685
- widthPx: { type: "f32", default: 1 }
686
- },
687
- {
688
- meta: {
689
- quickStart: "Attach Lines to render line-list MeshAsset pairs in screen pixels.",
690
- diagnostics: "Inspect widthPx at the points-lines admission boundary.",
691
- recovery: "Use points-lines-invalid-style for non-finite or non-positive widthPx values.",
692
- boundaries: "Lines owns raster width only; MeshFilter and MeshRenderer own geometry and material."
693
- }
694
- }
695
- );
696
- var MeshFilter = defineComponent("MeshFilter", {
697
- assetHandle: { type: "shared<MeshAsset>" }
698
- });
699
- var MeshRenderer = defineComponent("MeshRenderer", {
700
- materials: { type: "array<shared<MaterialAsset>>", default: [] }
701
- });
702
- var PointLight = defineComponent("PointLight", {
703
- // color carries an explicit layer-2 default [1,1,1] (white); the array
704
- // layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
705
- color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
706
- intensity: { type: "f32", default: 1 },
707
- range: { type: "f32", default: 10 }
708
- });
709
- var PointLightShadow = defineComponent("PointLightShadow", {
710
- mapSize: { type: "f32", default: 512 },
711
- depthBias: { type: "f32", default: 5e-3 },
712
- normalBias: { type: "f32", default: 0.05 },
713
- nearPlane: { type: "f32", default: 0.1 },
714
- farPlane: { type: "f32", default: 25 },
715
- pcfKernelSize: { type: "f32", default: 3 }
716
- });
717
- var PointShapeValue = Object.freeze({
718
- square: 0,
719
- circle: 1
720
- });
721
- function pointShapeFromU32(value) {
722
- switch (value) {
723
- case PointShapeValue.square:
724
- return "square";
725
- case PointShapeValue.circle:
726
- return "circle";
727
- default:
728
- return void 0;
729
- }
741
+ function createTarget(owner) {
742
+ const target = Object.freeze({
743
+ kind: "scene-data",
744
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
745
+ access: "sampled-read",
746
+ format: "rgba16float",
747
+ sampleCount: 1,
748
+ extent: "render-resolution"
749
+ });
750
+ registerSceneDataTarget(target, {
751
+ featureIdentity: owner.featureIdentity,
752
+ planIdentity: owner.planIdentity,
753
+ generation: owner.generation
754
+ });
755
+ return target;
730
756
  }
731
- var Points = defineComponent(
732
- "Points",
733
- {
734
- sizePx: { type: "f32", default: 4 },
735
- shape: { type: "enum", default: PointShapeValue.square, labels: PointShapeValue }
736
- },
737
- {
738
- meta: {
739
- quickStart: "Attach Points to render point-list MeshAsset vertices in screen pixels.",
740
- diagnostics: "Inspect sizePx and decode shape with pointShapeFromU32.",
741
- recovery: "Use points-lines-invalid-style for non-finite or non-positive sizePx values.",
742
- boundaries: "Points owns raster size and shape only; MeshFilter and MeshRenderer own geometry and material."
743
- }
744
- }
745
- );
746
- var schema = {
747
- shader: "string",
748
- data: "buffer"
749
- };
750
- var PostProcessParams = defineComponent("PostProcessParams", schema);
751
- var SceneInstance = defineComponent(
752
- "SceneInstance",
753
- {
754
- source: { type: "shared<SceneAsset>" },
755
- mapping: { type: "array<entity>" },
756
- // The unique slot is the ECS storage seam for the instance's structured
757
- // runtime payload; keep the nested semantic visible to schema consumers.
758
- state: { type: "unique<SceneInstanceState>", shape: "nested" }
759
- },
760
- { transient: true }
761
- );
762
- var SKYBOX_MODE_CUBEMAP = 0;
763
- var SkyboxBackground = defineComponent("SkyboxBackground", {
764
- // The GPU skybox projection is render-owned presentation state; restore
765
- // keeps the portable mode/rotation controls and lets the owner re-resolve
766
- // the environment asset on the target world.
767
- equirect: { type: "shared<EquirectAsset>", simulationTransient: true },
768
- mode: { type: "f32", default: SKYBOX_MODE_CUBEMAP },
769
- rotation: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 1]) }
770
- });
771
- var Skylight = defineComponent("Skylight", {
772
- // The GPU equirect-to-cubemap projection is render-owned presentation
773
- // state. Record/restore preserves the portable lighting controls while the
774
- // render owner resolves this asset again on the target world.
775
- equirect: { type: "shared<EquirectAsset>", simulationTransient: true },
776
- // color carries an explicit layer-2 default [1,1,1] (white); the array
777
- // layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
778
- color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
779
- intensity: { type: "f32", default: 1 },
780
- rotation: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 1]) }
781
- });
782
- var SortKey = defineComponent("SortKey", {
783
- value: { type: "f32", default: 0 }
784
- });
785
- var SpotLight = defineComponent("SpotLight", {
786
- // direction has no default (D-5): omitting it lands the array layer-3
787
- // all-zero, which validate() rejects. color carries an explicit layer-2
788
- // default [1,1,1] (white); the array layer-3 fallback is all-zero.
789
- direction: { type: "array<f32, 3>" },
790
- color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
791
- intensity: { type: "f32", default: 1 },
792
- range: { type: "f32", default: 10 },
793
- innerConeDeg: { type: "f32", default: 0 },
794
- outerConeDeg: { type: "f32", default: 45 },
795
- // Shadow opt-out gate: defaults to true so zero-config spawns cast shadows.
796
- castShadow: { type: "bool", default: true },
797
- // 6 shadow fields aligned with DirectionalLight (plan-strategy D-6).
798
- mapSize: { type: "f32", default: 2048 },
799
- depthBias: { type: "f32", default: 5e-3 },
800
- normalBias: { type: "f32", default: 0.05 },
801
- nearPlane: { type: "f32", default: 0.1 },
802
- farPlane: { type: "f32", default: 50 },
803
- pcfKernelSize: { type: "f32", default: 3 }
804
- });
805
- var VisibilityStateValue = Object.freeze({
806
- inherited: 0,
807
- hidden: 1,
808
- visible: 2
809
- });
810
- function visibilityStateFromU32(value) {
811
- switch (value) {
812
- case VisibilityStateValue.inherited:
813
- return "inherited";
814
- case VisibilityStateValue.hidden:
815
- return "hidden";
816
- case VisibilityStateValue.visible:
817
- return "visible";
818
- default:
819
- return void 0;
820
- }
757
+ function tokenError(catalog, operation) {
758
+ return sceneDataTokenMismatch(
759
+ operation,
760
+ "foreign-kind",
761
+ {
762
+ featureIdentity: catalog.featureIdentity,
763
+ planIdentity: catalog.planIdentity,
764
+ generation: catalog.generation
765
+ },
766
+ void 0
767
+ );
821
768
  }
822
- var Visibility = defineComponent(
823
- "Visibility",
824
- {
825
- state: {
826
- type: "enum",
827
- default: VisibilityStateValue.inherited,
828
- labels: VisibilityStateValue
829
- }
830
- },
831
- {
832
- meta: {
833
- quickStart: "Attach Visibility to author render participation intent.",
834
- diagnostics: "Compare the ECS state with resolveVisibility and renderer.visibilityStats.",
835
- recovery: "Use structured ECS write errors and repair the owning scene relation.",
836
- boundaries: "Visibility does not own camera, picking, lifecycle, assets, or VFX shadow policy."
769
+ function unavailableError(options, reason) {
770
+ const recovery = reason === "capability-missing" ? "enable-capability" : reason === "renderer-recovering" ? "renderer-recover" : "next-frame";
771
+ return new SceneDataUnavailableError({
772
+ featureIdentity: options.featureIdentity,
773
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
774
+ lane: options.lane ?? "direct",
775
+ reason,
776
+ missingContributorIds: options.missingContributorIds ?? [],
777
+ omittedMissingContributorCount: 0,
778
+ recovery
779
+ });
780
+ }
781
+ function createSceneDataCatalog(options) {
782
+ const state = availability(options);
783
+ const owner = {
784
+ featureIdentity: options.featureIdentity,
785
+ planIdentity: options.planIdentity,
786
+ generation: options.generation
787
+ };
788
+ const missing = [...options.missingContributorIds ?? []];
789
+ const inspectionBase = {
790
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
791
+ generation: options.generation,
792
+ planIdentity: options.planIdentity,
793
+ lane: options.lane ?? "direct",
794
+ missingContributorIds: Object.freeze(missing.slice(0, 32)),
795
+ omittedMissingContributorCount: Math.max(0, missing.length - 32)
796
+ };
797
+ return {
798
+ schema: SCENE_DATA_TEMPORAL_V1_SCHEMA,
799
+ generation: options.generation,
800
+ planIdentity: options.planIdentity,
801
+ availability: state,
802
+ require(schema) {
803
+ if (schema !== SCENE_DATA_TEMPORAL_V1_SCHEMA || state.status !== "available") {
804
+ if (state.status === "unavailable") throw unavailableError(options, state.reason);
805
+ throw tokenError(options, "require scene-data target");
806
+ }
807
+ return createTarget(options);
808
+ },
809
+ validate(target, generation = options.generation) {
810
+ const targetOwner = sceneDataTargetOwner(target);
811
+ if (targetOwner === void 0) {
812
+ return err(
813
+ sceneDataTokenMismatch("validate scene-data target", "foreign-feature", owner, target)
814
+ );
815
+ }
816
+ if (targetOwner.planIdentity !== owner.planIdentity || targetOwner.featureIdentity !== owner.featureIdentity) {
817
+ return err(
818
+ sceneDataTokenMismatch("validate scene-data target", "foreign-feature", owner, target)
819
+ );
820
+ }
821
+ if (generation !== owner.generation || targetOwner.generation !== owner.generation) {
822
+ return err(
823
+ sceneDataTokenMismatch(
824
+ "validate scene-data target",
825
+ "generation-mismatch",
826
+ owner,
827
+ target
828
+ )
829
+ );
830
+ }
831
+ if (target.access !== "sampled-read") {
832
+ return err(
833
+ sceneDataTokenMismatch("validate scene-data target", "layout-mismatch", owner, target)
834
+ );
835
+ }
836
+ return ok(target);
837
+ },
838
+ inspect() {
839
+ return Object.freeze(
840
+ state.status === "available" ? { ...inspectionBase, status: state.status, completeness: state.completeness } : { ...inspectionBase, status: state.status, reason: state.reason }
841
+ );
837
842
  }
838
- }
839
- );
843
+ };
844
+ }
840
845
 
841
846
  // src/pipeline/standard-profile.ts
842
847
  var STANDARD_PIPELINE_ID = "forgeax::standard";
@@ -845,6 +850,14 @@ var DEFAULT_CLUSTER_GRID = { x: 16, y: 9, z: 24 };
845
850
  var CLUSTER_GRID_STRIDE_U32 = 2;
846
851
  var LIGHT_INDEX_LIST_CAPACITY = 1048576;
847
852
  var MAX_LIGHTS = 256;
853
+ var STANDARD_POST_STAGE_NAMES = [
854
+ "transparent-blend",
855
+ "bloom",
856
+ "output-transform",
857
+ "fxaa",
858
+ "post-effect",
859
+ "present"
860
+ ];
848
861
  var DEFAULT_STANDARD_PROFILE = Object.freeze({
849
862
  pipelineId: STANDARD_PIPELINE_ID,
850
863
  lightCount: 32,
@@ -858,15 +871,18 @@ var DEFAULT_STANDARD_PROFILE = Object.freeze({
858
871
  antialias: "fxaa",
859
872
  sky: true,
860
873
  fallback: "native",
861
- postStages: ["transparent-blend", "bloom", "tone", "fxaa", "output"]
874
+ postStages: STANDARD_POST_STAGE_NAMES
862
875
  });
876
+ function resolveVolumetricFogProfile(profile) {
877
+ return profile.volumetricFog ?? { quality: "high", depth: 64, tileSize: 4 };
878
+ }
863
879
  function resolveStandardLane(profile, capabilities) {
864
880
  if (!capabilities.compute || !capabilities.storageBuffer) return "cpu-webgl2";
865
881
  return profile.lighting;
866
882
  }
867
883
 
868
884
  // src/render-contract.ts
869
- var STANDARD_TONEMAP_FEATURE_ID = "forgeax::standard::tonemap";
885
+ var STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = "forgeax::standard::output-transform";
870
886
  var RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
871
887
  "record/graph-execute/point-shadow",
872
888
  "record/graph-execute/cluster-binner-upload",
@@ -883,7 +899,8 @@ var RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
883
899
  "record/graph-execute/forward/material-bind-groups",
884
900
  "record/graph-execute/forward/pipeline-selection",
885
901
  "record/graph-execute/forward/draw-submit",
886
- "record/graph-execute/tonemap",
902
+ "record/graph-execute/output-transform",
903
+ "record/graph-execute/present",
887
904
  "record/graph-execute/debug-overlay",
888
905
  "record/graph-execute/shadow",
889
906
  "record/graph-execute/spot-shadow",
@@ -942,211 +959,7 @@ var RENDER_PHASE_CATALOG = [
942
959
  "record",
943
960
  ...RENDER_RECORD_PHASE_CATALOG
944
961
  ];
945
- function invalidStyle(input, component, field, value, expected) {
946
- return err(new PointsLinesInvalidStyleError({ entity: input.entity, component, field, value, expected }));
947
- }
948
- function topologyMismatch(input, submesh, expected, actual) {
949
- return err(new PointsLinesTopologyMismatchError({ entity: input.entity, submesh, expected, actual }));
950
- }
951
- function checkStyle(input) {
952
- const hasPoints = input.points !== void 0;
953
- const hasLines = input.lines !== void 0;
954
- if (hasPoints && hasLines) {
955
- return invalidStyle(
956
- input,
957
- "Points/Lines",
958
- "components",
959
- "Points + Lines",
960
- "exactly one style component"
961
- );
962
- }
963
- if (!hasPoints && !hasLines) {
964
- return invalidStyle(input, "Points/Lines", "components", void 0, "one style component");
965
- }
966
- if (hasPoints) {
967
- const sizePx = input.points?.sizePx ?? 4;
968
- const shapeValue = input.points?.shape ?? PointShapeValue.square;
969
- const shape = pointShapeFromU32(shapeValue);
970
- if (!Number.isFinite(sizePx) || sizePx <= 0) {
971
- return invalidStyle(input, "Points", "sizePx", sizePx, "finite sizePx > 0");
972
- }
973
- if (shape === void 0) {
974
- return invalidStyle(input, "Points", "shape", shapeValue, "shape is 'square' or 'circle'");
975
- }
976
- return ok({ component: "Points", shape, sizePx });
977
- }
978
- const widthPx = input.lines?.widthPx ?? 1;
979
- if (!Number.isFinite(widthPx) || widthPx <= 0) {
980
- return invalidStyle(input, "Lines", "widthPx", widthPx, "finite widthPx > 0");
981
- }
982
- return ok({ component: "Lines", widthPx });
983
- }
984
- function checkTopology(input, component) {
985
- const expected = component === "Points" ? "point-list" : "line-list";
986
- let pointCount = 0;
987
- let segmentCount = 0;
988
- const acceptedSubmeshes = [];
989
- let sawNonEmpty = false;
990
- for (const [submeshIndex, submesh] of input.mesh.submeshes.entries()) {
991
- const indexed = input.mesh.indices !== void 0 && submesh.indexCount > 0;
992
- const elementCount = indexed ? submesh.indexCount : submesh.vertexCount;
993
- if (elementCount === 0) continue;
994
- sawNonEmpty = true;
995
- if (component === "Lines" && submesh.topology === "line-strip") {
996
- return err(
997
- new PointsLinesStyleUnsupportedError({
998
- lane: "admission",
999
- field: "topology",
1000
- member: "line-strip",
1001
- supported: ["line-list"]
1002
- })
1003
- );
1004
- }
1005
- if (submesh.topology !== expected) {
1006
- return topologyMismatch(input, submeshIndex, expected, submesh.topology);
1007
- }
1008
- if (component === "Lines" && elementCount % 2 !== 0) {
1009
- return topologyMismatch(input, submeshIndex, "line-list pairs", "line-list odd tail");
1010
- }
1011
- acceptedSubmeshes.push(submeshIndex);
1012
- if (component === "Points") pointCount += elementCount;
1013
- else segmentCount += elementCount / 2;
1014
- }
1015
- if (!sawNonEmpty) return topologyMismatch(input, 0, expected, "empty-range");
1016
- return ok({ pointCount, segmentCount, submeshes: acceptedSubmeshes });
1017
- }
1018
- function checkMaterial(input) {
1019
- const passes = input.material.passes ?? [];
1020
- const unlitModules = /* @__PURE__ */ new Set(["forgeax_material::unlit", "forgeax::default-unlit"]);
1021
- if (passes.length !== 1 || passes[0] === void 0) {
1022
- const pass2 = passes.find(
1023
- (candidate) => candidate.name === "deferred" || candidate.name === "shadow-caster"
1024
- ) ?? passes[0];
1025
- return err(
1026
- new PointsLinesMaterialUnsupportedError({
1027
- entity: input.entity,
1028
- material: input.materialId ?? "<anonymous>",
1029
- pass: pass2?.name ?? "<empty>",
1030
- module: pass2?.program.module ?? "<empty>",
1031
- reason: "points-lines admission requires one unlit forward pass"
1032
- })
1033
- );
1034
- }
1035
- const pass = passes[0];
1036
- const lightMode = pass.renderState?.tags?.LightMode;
1037
- if (!unlitModules.has(pass.program.module) || pass.name !== "forward" || lightMode === "ShadowCaster") {
1038
- return err(
1039
- new PointsLinesMaterialUnsupportedError({
1040
- entity: input.entity,
1041
- material: input.materialId ?? "<anonymous>",
1042
- pass: pass.name,
1043
- module: pass.program.module,
1044
- reason: "points-lines admission requires an engine-owned unlit forward pass"
1045
- })
1046
- );
1047
- }
1048
- return ok(void 0);
1049
- }
1050
- function admitPointsLines(input) {
1051
- const style = checkStyle(input);
1052
- if (!style.ok) return style;
1053
- const topology = checkTopology(input, style.value.component);
1054
- if (!topology.ok) return topology;
1055
- const material = checkMaterial(input);
1056
- if (!material.ok) return material;
1057
- if (style.value.component === "Points" && input.limits?.maxPoints !== void 0) {
1058
- if (topology.value.pointCount > input.limits.maxPoints) {
1059
- return err(
1060
- new PointsLinesBudgetExceededError({
1061
- lane: "admission",
1062
- requested: topology.value.pointCount,
1063
- limit: input.limits.maxPoints,
1064
- unit: "points"
1065
- })
1066
- );
1067
- }
1068
- }
1069
- if (style.value.component === "Lines" && input.limits?.maxSegments !== void 0) {
1070
- if (topology.value.segmentCount > input.limits.maxSegments) {
1071
- return err(
1072
- new PointsLinesBudgetExceededError({
1073
- lane: "admission",
1074
- requested: topology.value.segmentCount,
1075
- limit: input.limits.maxSegments,
1076
- unit: "segments"
1077
- })
1078
- );
1079
- }
1080
- }
1081
- return ok({ ...style.value, ...topology.value });
1082
- }
1083
- function resolveVisibility(world, hierarchy = projectHierarchy(world)) {
1084
- const query = world.query({ read: [Entity], optional: [Visibility] });
1085
- let intentCount = 0;
1086
- let hasAnyHiddenIntent = false;
1087
- if (query.ok) {
1088
- for (const row of query.value) {
1089
- const visibility = row.get(Visibility);
1090
- if (visibility === void 0) continue;
1091
- intentCount += 1;
1092
- if (visibility.state === VisibilityStateValue.hidden) {
1093
- hasAnyHiddenIntent = true;
1094
- }
1095
- }
1096
- }
1097
- let resolveEntity;
1098
- let hasIntent;
1099
- const ensureResolver = () => {
1100
- if (resolveEntity !== void 0) return;
1101
- const intentByEntity = /* @__PURE__ */ new Map();
1102
- if (query.ok) {
1103
- for (const row of query.value) {
1104
- const raw = row.get(Visibility);
1105
- const intent = raw === void 0 ? void 0 : visibilityStateFromU32(raw.state);
1106
- if (intent !== void 0) {
1107
- intentByEntity.set(row.entity, intent);
1108
- }
1109
- }
1110
- }
1111
- hasIntent = (entity) => intentByEntity.has(entity);
1112
- const resolved = /* @__PURE__ */ new Map();
1113
- const resolving = /* @__PURE__ */ new Set();
1114
- resolveEntity = (entity) => {
1115
- const existing = resolved.get(entity);
1116
- if (existing !== void 0) return existing;
1117
- if (resolving.has(entity)) return void 0;
1118
- const intent = intentByEntity.get(entity) ?? "inherited";
1119
- resolving.add(entity);
1120
- let result;
1121
- if (intent === "hidden") {
1122
- result = { intent, effective: "hidden", source: "self" };
1123
- } else if (intent === "visible") {
1124
- result = { intent, effective: "visible", source: "self" };
1125
- } else {
1126
- const parent = hierarchy.getParent(entity);
1127
- const parentResult = parent === void 0 ? void 0 : resolveEntity?.(parent);
1128
- result = parentResult === void 0 ? { intent, effective: "visible", source: "default" } : { intent, effective: parentResult.effective, source: "parent" };
1129
- }
1130
- resolving.delete(entity);
1131
- resolved.set(entity, result);
1132
- return result;
1133
- };
1134
- };
1135
- return {
1136
- diagnostics: hierarchy.diagnostics,
1137
- hasAnyIntent: intentCount > 0,
1138
- hasAnyHiddenIntent,
1139
- get(entity) {
1140
- ensureResolver();
1141
- return hasIntent?.(entity) ? resolveEntity?.(entity) : void 0;
1142
- },
1143
- effective(entity) {
1144
- ensureResolver();
1145
- return resolveEntity?.(entity)?.effective ?? "visible";
1146
- }
1147
- };
1148
- }
1149
962
 
1150
- export { ANTIALIAS_FXAA, ANTIALIAS_MSAA, ANTIALIAS_NONE, BLOOM_DISABLED, BLOOM_ENABLED, CAMERA_PROJECTION_ORTHOGRAPHIC, CAMERA_PROJECTION_PERSPECTIVE, CLUSTER_GRID_STRIDE_U32, Camera, DEFAULT_CLUSTER_GRID, DEFAULT_STANDARD_PROFILE, DirectionalLight, EquirectProjectionFailedError, FrameReceiptStaleError, HdrpDeferredCapsInsufficientError, HdrpIndexListOverflowError, HdrpLightBudgetExceededError, Instances, LIGHT_INDEX_LIST_CAPACITY, Layer, LifecycleConstructionError, Lines, MAX_LIGHTS, MaterialSkinAttrMissingError, MeshFilter, MeshRenderer, ObservationUnavailableError, PointLight, PointLightShadow, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PointShapeValue, Points, PointsLinesMaterialUnsupportedError, PointsLinesPrepareFailedError, PostProcessParams, RENDER_PHASE_CATALOG, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, RendererContractFailureError, RendererOperationError, SKYBOX_MODE_CUBEMAP, STANDARD_LIGHT_COUNTS, STANDARD_PIPELINE_ID, STANDARD_TONEMAP_FEATURE_ID, SceneInstance, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, SkyboxBackground, Skylight, SortKey, SpotLight, TONEMAP_ACES_FILMIC, TONEMAP_AGX, TONEMAP_CINEON, TONEMAP_LINEAR, TONEMAP_NEUTRAL, TONEMAP_NONE, TONEMAP_REINHARD, TONEMAP_REINHARD_EXTENDED, VertexColorVariantConflictError, VideoUploadUnsupportedError, Visibility, VisibilityStateValue, admitPointsLines, antialiasFromF32, bloomEnabledFromF32, cameraProjectionFromF32, orthographic, perspective, pointShapeFromU32, resolveStandardLane, resolveVisibility, tonemapFromF32, tonemapToU32, visibilityStateFromU32 };
1151
- //# sourceMappingURL=chunk-YEJIUW7D.mjs.map
1152
- //# sourceMappingURL=chunk-YEJIUW7D.mjs.map
963
+ export { AtmosphereInvalidParameterError, CLUSTER_GRID_STRIDE_U32, DEFAULT_CLUSTER_GRID, DEFAULT_STANDARD_PROFILE, EnvironmentGenerationFailedError, EnvironmentSourceConflictError, EquirectProjectionFailedError, FogCardinalityError, FrameReceiptStaleError, HdrpDeferredCapsInsufficientError, HdrpIndexListOverflowError, HdrpLightBudgetExceededError, LIGHT_INDEX_LIST_CAPACITY, LifecycleConstructionError, MAX_LIGHTS, MaterialSkinAttrMissingError, ObservationUnavailableError, OwnerStageFailedError, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PointsLinesBudgetExceededError, PointsLinesInvalidStyleError, PointsLinesMaterialUnsupportedError, PointsLinesPrepareFailedError, PointsLinesStyleUnsupportedError, PointsLinesTopologyMismatchError, RENDER_PHASE_CATALOG, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, RendererContractFailureError, RendererOperationError, SCENE_DATA_TEMPORAL_V1_DESCRIPTOR, SCENE_DATA_TEMPORAL_V1_SCHEMA, STANDARD_LIGHT_COUNTS, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, STANDARD_PIPELINE_ID, STANDARD_POST_STAGE_NAMES, SceneDataUnavailableError, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, TaaCapsInsufficientError, TemporalFrameSubmitError, TransmissionCapabilityMissingError, VertexColorVariantConflictError, VideoUploadUnsupportedError, VolumeDensityShapeMismatchError, VolumeInvalidBoundsError, VolumeInvalidParametersError, VolumeOwnerConflictError, createSceneDataCatalog, isSceneDataTarget, registerSceneDataTarget, resolveStandardLane, resolveVolumetricFogProfile, sceneDataError, sceneDataTargetAsAttachment, sceneDataTargetOwner, sceneDataTokenMismatch };
964
+ //# sourceMappingURL=chunk-TBQJOK2L.mjs.map
965
+ //# sourceMappingURL=chunk-TBQJOK2L.mjs.map