@forgeax/engine-render 0.1.6 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (713) hide show
  1. package/README.md +279 -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 +19 -2
  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/material/assembly.d.ts.map +1 -1
  10. package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
  11. package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
  12. package/dist/assembly/renderer-inspection.d.ts +22 -0
  13. package/dist/assembly/renderer-inspection.d.ts.map +1 -0
  14. package/dist/assembly/renderer-lifecycle.d.ts +4 -0
  15. package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
  16. package/dist/authoring.d.ts +1 -0
  17. package/dist/authoring.d.ts.map +1 -1
  18. package/dist/authoring.mjs +4 -2
  19. package/dist/authoring.mjs.map +1 -1
  20. package/dist/chunk-FJ6P52EE.mjs +46 -0
  21. package/dist/chunk-FJ6P52EE.mjs.map +1 -0
  22. package/dist/chunk-IPXCABEP.mjs +73 -0
  23. package/dist/chunk-IPXCABEP.mjs.map +1 -0
  24. package/dist/chunk-JDWARUOI.mjs +44 -0
  25. package/dist/chunk-JDWARUOI.mjs.map +1 -0
  26. package/dist/chunk-LOSO4CTV.mjs +901 -0
  27. package/dist/chunk-LOSO4CTV.mjs.map +1 -0
  28. package/dist/chunk-PCHBPYML.mjs +385 -0
  29. package/dist/chunk-PCHBPYML.mjs.map +1 -0
  30. package/dist/chunk-RJRUS55L.mjs +9323 -0
  31. package/dist/chunk-RJRUS55L.mjs.map +1 -0
  32. package/dist/{chunk-QC4VW3XJ.mjs → chunk-RXZ3RGOU.mjs} +4 -30
  33. package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
  34. package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
  35. package/dist/chunk-VFPLTKCU.mjs.map +1 -0
  36. package/dist/{chunk-SCRSAK5B.mjs → chunk-YTQ5C7YQ.mjs} +231 -127
  37. package/dist/chunk-YTQ5C7YQ.mjs.map +1 -0
  38. package/dist/components/atmosphere.d.ts +9 -0
  39. package/dist/components/atmosphere.d.ts.map +1 -0
  40. package/dist/components/camera.d.ts +2 -1
  41. package/dist/components/camera.d.ts.map +1 -1
  42. package/dist/components/fog.d.ts +8 -0
  43. package/dist/components/fog.d.ts.map +1 -0
  44. package/dist/components/index.d.ts +5 -0
  45. package/dist/components/index.d.ts.map +1 -1
  46. package/dist/components/lines.d.ts +5 -0
  47. package/dist/components/lines.d.ts.map +1 -0
  48. package/dist/components/motion-blur.d.ts +7 -0
  49. package/dist/components/motion-blur.d.ts.map +1 -0
  50. package/dist/components/points.d.ts +15 -0
  51. package/dist/components/points.d.ts.map +1 -0
  52. package/dist/construct-renderer.d.ts +2 -2
  53. package/dist/construct-renderer.d.ts.map +1 -1
  54. package/dist/construct-renderer.mjs +11419 -16442
  55. package/dist/construct-renderer.mjs.map +1 -1
  56. package/dist/device/device-scope.d.ts +4 -0
  57. package/dist/device/device-scope.d.ts.map +1 -1
  58. package/dist/environment/frame.d.ts +60 -0
  59. package/dist/environment/frame.d.ts.map +1 -0
  60. package/dist/environment/generation.d.ts +21 -0
  61. package/dist/environment/generation.d.ts.map +1 -0
  62. package/dist/environment/graph.d.ts +4 -0
  63. package/dist/environment/graph.d.ts.map +1 -0
  64. package/dist/environment/inspection.d.ts +48 -0
  65. package/dist/environment/inspection.d.ts.map +1 -0
  66. package/dist/environment/lifecycle.d.ts +39 -0
  67. package/dist/environment/lifecycle.d.ts.map +1 -0
  68. package/dist/environment/signature.d.ts +25 -0
  69. package/dist/environment/signature.d.ts.map +1 -0
  70. package/dist/errors/render.d.ts +217 -1
  71. package/dist/errors/render.d.ts.map +1 -1
  72. package/dist/extract/camera.d.ts +5 -0
  73. package/dist/extract/camera.d.ts.map +1 -0
  74. package/dist/extract/environment.d.ts +74 -0
  75. package/dist/extract/environment.d.ts.map +1 -0
  76. package/dist/extract/visibility.d.ts +1 -1
  77. package/dist/extract/visibility.d.ts.map +1 -1
  78. package/dist/features/host.d.ts +9 -2
  79. package/dist/features/host.d.ts.map +1 -1
  80. package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
  81. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
  82. package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
  83. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
  84. package/dist/features/plan.d.ts +17 -2
  85. package/dist/features/plan.d.ts.map +1 -1
  86. package/dist/features/prepared-gpu-work.d.ts +3 -1
  87. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  88. package/dist/features/prepared-graphics.d.ts +2 -1
  89. package/dist/features/prepared-graphics.d.ts.map +1 -1
  90. package/dist/features/render-graph-raster.d.ts +7 -2
  91. package/dist/features/render-graph-raster.d.ts.map +1 -1
  92. package/dist/features/targets.d.ts +3 -0
  93. package/dist/features/targets.d.ts.map +1 -1
  94. package/dist/features/types.d.ts +12 -0
  95. package/dist/features/types.d.ts.map +1 -1
  96. package/dist/fullscreen-post-process-pass.d.ts +7 -1
  97. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  98. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  99. package/dist/gpu-scene.d.ts +2 -0
  100. package/dist/gpu-scene.d.ts.map +1 -1
  101. package/dist/ibl/skylight-bind-group.d.ts +5 -6
  102. package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
  103. package/dist/index.d.ts +21 -6
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.mjs +8 -4
  106. package/dist/index.mjs.map +1 -1
  107. package/dist/inspection-types.d.ts +46 -1
  108. package/dist/inspection-types.d.ts.map +1 -1
  109. package/dist/internal.d.ts +2 -0
  110. package/dist/internal.d.ts.map +1 -1
  111. package/dist/internal.mjs +2 -0
  112. package/dist/materials.d.ts +22 -0
  113. package/dist/materials.d.ts.map +1 -1
  114. package/dist/pbr-pipeline.d.ts +12 -6
  115. package/dist/pbr-pipeline.d.ts.map +1 -1
  116. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  117. package/dist/pipeline/standard-pipeline.d.ts +3 -0
  118. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  119. package/dist/pipeline/standard-post.d.ts +48 -0
  120. package/dist/pipeline/standard-post.d.ts.map +1 -0
  121. package/dist/pipeline/standard-profile.d.ts +3 -6
  122. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  123. package/dist/pipeline-builder.d.ts +18 -0
  124. package/dist/pipeline-builder.d.ts.map +1 -1
  125. package/dist/pipeline-spec.d.ts.map +1 -1
  126. package/dist/plugin.d.ts.map +1 -1
  127. package/dist/points-lines/admission.d.ts +36 -0
  128. package/dist/points-lines/admission.d.ts.map +1 -0
  129. package/dist/points-lines/bounds.d.ts +8 -0
  130. package/dist/points-lines/bounds.d.ts.map +1 -0
  131. package/dist/points-lines/expansion-cache.d.ts +28 -0
  132. package/dist/points-lines/expansion-cache.d.ts.map +1 -0
  133. package/dist/points-lines/inspection.d.ts +53 -0
  134. package/dist/points-lines/inspection.d.ts.map +1 -0
  135. package/dist/points-lines/prepare.d.ts +67 -0
  136. package/dist/points-lines/prepare.d.ts.map +1 -0
  137. package/dist/points-lines/record.d.ts +60 -0
  138. package/dist/points-lines/record.d.ts.map +1 -0
  139. package/dist/points-lines/snapshot.d.ts +49 -0
  140. package/dist/points-lines/snapshot.d.ts.map +1 -0
  141. package/dist/record/frame-lighting.d.ts.map +1 -1
  142. package/dist/record/frame-snapshot.d.ts +100 -5
  143. package/dist/record/frame-snapshot.d.ts.map +1 -1
  144. package/dist/record/frame-targets.d.ts.map +1 -1
  145. package/dist/record/frame.d.ts +4 -2
  146. package/dist/record/frame.d.ts.map +1 -1
  147. package/dist/record/main-pass-geometry.d.ts +18 -0
  148. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  149. package/dist/record/main-pass-material.d.ts +8 -5
  150. package/dist/record/main-pass-material.d.ts.map +1 -1
  151. package/dist/record/main-pass-sprite-draws.d.ts +8 -1
  152. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  153. package/dist/record/main-pass.d.ts +2 -0
  154. package/dist/record/main-pass.d.ts.map +1 -1
  155. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  156. package/dist/record/render-context.d.ts +93 -18
  157. package/dist/record/render-context.d.ts.map +1 -1
  158. package/dist/record/shadow-pass.d.ts.map +1 -1
  159. package/dist/record/skybox-post-pass.d.ts +1 -11
  160. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  161. package/dist/record/typed-frame-graph.d.ts +26 -2
  162. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  163. package/dist/record/view-ubo.d.ts +10 -1
  164. package/dist/record/view-ubo.d.ts.map +1 -1
  165. package/dist/render-contract.d.ts +102 -10
  166. package/dist/render-contract.d.ts.map +1 -1
  167. package/dist/render-graph-primitives.d.ts.map +1 -1
  168. package/dist/render-pipeline.d.ts +50 -6
  169. package/dist/render-pipeline.d.ts.map +1 -1
  170. package/dist/render-system-extract.d.ts +32 -5
  171. package/dist/render-system-extract.d.ts.map +1 -1
  172. package/dist/render-system.d.ts +27 -5
  173. package/dist/render-system.d.ts.map +1 -1
  174. package/dist/scene/render-scene-types.d.ts +3 -0
  175. package/dist/scene/render-scene-types.d.ts.map +1 -1
  176. package/dist/scene/render-scene.d.ts +43 -2
  177. package/dist/scene/render-scene.d.ts.map +1 -1
  178. package/dist/temporal/coverage.d.ts +42 -0
  179. package/dist/temporal/coverage.d.ts.map +1 -0
  180. package/dist/temporal/frame-coordinator.d.ts +99 -0
  181. package/dist/temporal/frame-coordinator.d.ts.map +1 -0
  182. package/dist/temporal/gpu.d.ts +39 -0
  183. package/dist/temporal/gpu.d.ts.map +1 -0
  184. package/dist/temporal/history.d.ts +37 -0
  185. package/dist/temporal/history.d.ts.map +1 -0
  186. package/dist/temporal/index.d.ts +7 -0
  187. package/dist/temporal/index.d.ts.map +1 -0
  188. package/dist/temporal/index.mjs +8 -0
  189. package/dist/temporal/index.mjs.map +1 -0
  190. package/dist/temporal/inspection.d.ts +36 -0
  191. package/dist/temporal/inspection.d.ts.map +1 -0
  192. package/dist/temporal/scene-data-catalog.d.ts +48 -0
  193. package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
  194. package/dist/temporal/scene-data.d.ts +43 -0
  195. package/dist/temporal/scene-data.d.ts.map +1 -0
  196. package/dist/temporal/standard-scene-data.d.ts +61 -0
  197. package/dist/temporal/standard-scene-data.d.ts.map +1 -0
  198. package/dist/temporal/taa-history-resources.d.ts +22 -0
  199. package/dist/temporal/taa-history-resources.d.ts.map +1 -0
  200. package/dist/temporal/taa-history-store.d.ts +27 -0
  201. package/dist/temporal/taa-history-store.d.ts.map +1 -0
  202. package/dist/temporal/taa-resolve.d.ts +15 -0
  203. package/dist/temporal/taa-resolve.d.ts.map +1 -0
  204. package/dist/temporal/temporal-view.d.ts +40 -0
  205. package/dist/temporal/temporal-view.d.ts.map +1 -0
  206. package/dist/temporal/transaction.d.ts +9 -0
  207. package/dist/temporal/transaction.d.ts.map +1 -0
  208. package/dist/temporal/view.d.ts +56 -0
  209. package/dist/temporal/view.d.ts.map +1 -0
  210. package/dist/transmission/backdrop.d.ts +147 -0
  211. package/dist/transmission/backdrop.d.ts.map +1 -0
  212. package/dist/transmission/inspection.d.ts +57 -0
  213. package/dist/transmission/inspection.d.ts.map +1 -0
  214. package/dist/transmission/oracle.d.ts +42 -0
  215. package/dist/transmission/oracle.d.ts.map +1 -0
  216. package/dist/transmission/projection.d.ts +37 -0
  217. package/dist/transmission/projection.d.ts.map +1 -0
  218. package/dist/typed-render-graph-primitives.d.ts +25 -2
  219. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  220. package/package.json +24 -19
  221. package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
  222. package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
  223. package/src/__tests__/authoring-path.unit.test.ts +9 -0
  224. package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
  225. package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
  226. package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
  227. package/src/__tests__/detached-inspection.integration.test.ts +177 -0
  228. package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
  229. package/src/__tests__/environment-generation.integration.test.ts +141 -0
  230. package/src/__tests__/environment-selection.unit.test.ts +245 -0
  231. package/src/__tests__/factory-contract.integration.test.ts +1380 -9
  232. package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
  233. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
  234. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +12 -2
  235. package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
  236. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
  237. package/src/__tests__/gpu-scene.unit.test.ts +10 -0
  238. package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
  239. package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
  240. package/src/__tests__/material-cooked-projection.unit.test.ts +18 -124
  241. package/src/__tests__/material-static-dynamic-route.unit.test.ts +28 -28
  242. package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
  243. package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
  244. package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
  245. package/src/__tests__/public-surface.test-d.ts +15 -1
  246. package/src/__tests__/render-error-code-owner.test-d.ts +15 -0
  247. package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
  248. package/src/__tests__/render-error-exhaustive.test-d.ts +22 -0
  249. package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
  250. package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
  251. package/src/__tests__/render-feature-plan.test-d.ts +22 -89
  252. package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
  253. package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
  254. package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
  255. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +433 -1
  256. package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
  257. package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
  258. package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
  259. package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
  260. package/src/__tests__/scene-data-contract.test-d.ts +35 -0
  261. package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
  262. package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
  263. package/src/__tests__/shader-manifest-fixture.ts +111 -0
  264. package/src/__tests__/skinned-shadow-caster.test.ts +102 -0
  265. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
  266. package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
  267. package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
  268. package/src/__tests__/standard-profile-oracle.unit.test.ts +10 -2
  269. package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
  270. package/src/__tests__/surface-configuration.unit.test.ts +211 -12
  271. package/src/__tests__/taa-transaction.integration.test.ts +30 -0
  272. package/src/__tests__/temporal-admission.integration.test.ts +40 -0
  273. package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
  274. package/src/__tests__/temporal-demand.unit.test.ts +44 -0
  275. package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
  276. package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
  277. package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
  278. package/src/__tests__/temporal-performance.integration.test.ts +615 -0
  279. package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
  280. package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
  281. package/src/__tests__/temporal-view.unit.test.ts +152 -0
  282. package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
  283. package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
  284. package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
  285. package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
  286. package/src/__tests__/visibility-extract.integration.test.ts +27 -1
  287. package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
  288. package/src/assembly/backend-contract.ts +47 -1
  289. package/src/assembly/factory.ts +1295 -507
  290. package/src/assembly/host-contract.ts +4 -0
  291. package/src/assembly/material/assembly.ts +2 -5
  292. package/src/assembly/renderer-frame-transaction.ts +75 -0
  293. package/src/assembly/renderer-inspection.ts +112 -0
  294. package/src/assembly/renderer-lifecycle.ts +6 -0
  295. package/src/authoring.ts +1 -0
  296. package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
  297. package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
  298. package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
  299. package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
  300. package/src/components/atmosphere.ts +10 -0
  301. package/src/components/camera.ts +2 -1
  302. package/src/components/fog.ts +9 -0
  303. package/src/components/index.ts +10 -0
  304. package/src/components/lines.ts +18 -0
  305. package/src/components/motion-blur.ts +8 -0
  306. package/src/components/points.ts +40 -0
  307. package/src/construct-renderer.ts +40 -3
  308. package/src/device/device-scope.ts +15 -1
  309. package/src/environment/frame.ts +185 -0
  310. package/src/environment/generation.ts +23 -0
  311. package/src/environment/graph.ts +9 -0
  312. package/src/environment/inspection.ts +87 -0
  313. package/src/environment/lifecycle.ts +250 -0
  314. package/src/environment/signature.ts +55 -0
  315. package/src/errors/render.ts +429 -1
  316. package/src/extract/camera.ts +78 -0
  317. package/src/extract/environment.ts +171 -0
  318. package/src/extract/visibility.ts +38 -19
  319. package/src/features/host.ts +36 -5
  320. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
  321. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
  322. package/src/features/motion-blur/motion-blur-feature.ts +119 -0
  323. package/src/features/motion-blur/motion-blur-params.ts +89 -0
  324. package/src/features/plan.ts +32 -3
  325. package/src/features/prepared-gpu-work.ts +21 -6
  326. package/src/features/prepared-graphics.ts +2 -1
  327. package/src/features/render-graph-raster.ts +24 -4
  328. package/src/features/targets.ts +24 -2
  329. package/src/features/types.ts +13 -0
  330. package/src/fullscreen-post-process-pass.ts +34 -4
  331. package/src/gpu-driven/production-raster.ts +6 -1
  332. package/src/gpu-scene.ts +24 -0
  333. package/src/ibl/skylight-bind-group.ts +30 -38
  334. package/src/index.ts +83 -6
  335. package/src/inspection-types.ts +52 -0
  336. package/src/internal.ts +5 -0
  337. package/src/materials.ts +119 -24
  338. package/src/pbr-pipeline.ts +66 -20
  339. package/src/pipeline/standard-forward-lane.ts +158 -101
  340. package/src/pipeline/standard-pipeline.ts +156 -105
  341. package/src/pipeline/standard-post.ts +373 -0
  342. package/src/pipeline/standard-profile.ts +11 -11
  343. package/src/pipeline-builder.ts +102 -12
  344. package/src/pipeline-spec.ts +9 -0
  345. package/src/plugin.ts +6 -0
  346. package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
  347. package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
  348. package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
  349. package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
  350. package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
  351. package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
  352. package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
  353. package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
  354. package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
  355. package/src/points-lines/admission.ts +238 -0
  356. package/src/points-lines/bounds.ts +23 -0
  357. package/src/points-lines/expansion-cache.ts +215 -0
  358. package/src/points-lines/inspection.ts +97 -0
  359. package/src/points-lines/prepare.ts +177 -0
  360. package/src/points-lines/record.ts +125 -0
  361. package/src/points-lines/snapshot.ts +130 -0
  362. package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
  363. package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
  364. package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
  365. package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
  366. package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
  367. package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
  368. package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
  369. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
  370. package/src/record/frame-lighting.ts +14 -2
  371. package/src/record/frame-snapshot.ts +129 -5
  372. package/src/record/frame-targets.ts +15 -6
  373. package/src/record/frame.ts +119 -4
  374. package/src/record/main-pass-geometry.ts +178 -40
  375. package/src/record/main-pass-material.ts +114 -66
  376. package/src/record/main-pass-sprite-draws.ts +79 -102
  377. package/src/record/main-pass.ts +83 -7
  378. package/src/record/mesh-ssbo.ts +22 -3
  379. package/src/record/render-context.ts +209 -23
  380. package/src/record/shadow-pass.ts +129 -28
  381. package/src/record/skybox-post-pass.ts +99 -42
  382. package/src/record/typed-frame-graph.ts +582 -42
  383. package/src/record/view-ubo.ts +99 -4
  384. package/src/render-contract.ts +121 -7
  385. package/src/render-graph-primitives.ts +18 -1
  386. package/src/render-pipeline.ts +100 -27
  387. package/src/render-system-extract.ts +264 -77
  388. package/src/render-system.ts +786 -43
  389. package/src/scene/render-scene-types.ts +3 -0
  390. package/src/scene/render-scene.ts +307 -9
  391. package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
  392. package/src/temporal/coverage.ts +76 -0
  393. package/src/temporal/frame-coordinator.ts +311 -0
  394. package/src/temporal/gpu.ts +287 -0
  395. package/src/temporal/history.ts +92 -0
  396. package/src/temporal/index.ts +6 -0
  397. package/src/temporal/inspection.ts +97 -0
  398. package/src/temporal/scene-data-catalog.ts +200 -0
  399. package/src/temporal/scene-data.ts +149 -0
  400. package/src/temporal/standard-scene-data.ts +182 -0
  401. package/src/temporal/taa-history-resources.ts +128 -0
  402. package/src/temporal/taa-history-store.ts +79 -0
  403. package/src/temporal/taa-resolve.ts +34 -0
  404. package/src/temporal/temporal-view.ts +169 -0
  405. package/src/temporal/transaction.ts +17 -0
  406. package/src/temporal/view.ts +161 -0
  407. package/src/transmission/__tests__/capability.unit.test.ts +83 -0
  408. package/src/transmission/__tests__/composition.integration.test.ts +161 -0
  409. package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
  410. package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
  411. package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
  412. package/src/transmission/__tests__/projection.unit.test.ts +71 -0
  413. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +438 -0
  414. package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
  415. package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
  416. package/src/transmission/backdrop.ts +572 -0
  417. package/src/transmission/inspection.ts +190 -0
  418. package/src/transmission/oracle.ts +141 -0
  419. package/src/transmission/projection.ts +83 -0
  420. package/src/typed-render-graph-primitives.ts +162 -9
  421. package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
  422. package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
  423. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
  424. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
  425. package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
  426. package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
  427. package/dist/__tests__/cluster-binner.test.d.ts +0 -2
  428. package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
  429. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
  430. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
  431. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
  432. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
  433. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
  434. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
  435. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
  436. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
  437. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
  438. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
  439. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
  440. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
  441. package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
  442. package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
  443. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
  444. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
  445. package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
  446. package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
  447. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
  448. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
  449. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
  450. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
  451. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
  452. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
  453. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
  454. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
  455. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
  456. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
  457. package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
  458. package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
  459. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
  460. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
  461. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
  462. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
  463. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
  464. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
  465. package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
  466. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
  467. package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
  468. package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
  469. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
  470. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
  471. package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
  472. package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
  473. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
  474. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
  475. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
  476. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
  477. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
  478. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
  479. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
  480. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
  481. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
  482. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
  483. package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
  484. package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
  485. package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
  486. package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
  487. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
  488. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
  489. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
  490. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
  491. package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
  492. package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
  493. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
  494. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
  495. package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
  496. package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
  497. package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
  498. package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
  499. package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
  500. package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
  501. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
  502. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
  503. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
  504. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
  505. package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
  506. package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
  507. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
  508. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
  509. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
  510. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
  511. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
  512. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
  513. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
  514. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
  515. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
  516. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
  517. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
  518. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
  519. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
  520. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
  521. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
  522. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
  523. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
  524. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
  525. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
  526. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
  527. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
  528. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
  529. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
  530. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
  531. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
  532. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
  533. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
  534. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
  535. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
  536. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
  537. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
  538. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
  539. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
  540. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
  541. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
  542. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
  543. package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
  544. package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
  545. package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
  546. package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
  547. package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
  548. package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
  549. package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
  550. package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
  551. package/dist/__tests__/public-surface.test-d.d.ts +0 -2
  552. package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
  553. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
  554. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
  555. package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
  556. package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
  557. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
  558. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
  559. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
  560. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
  561. package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
  562. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
  563. package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
  564. package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
  565. package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
  566. package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
  567. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
  568. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
  569. package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
  570. package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
  571. package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
  572. package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
  573. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
  574. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
  575. package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
  576. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
  577. package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
  578. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
  579. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
  580. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
  581. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
  582. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
  583. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
  584. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
  585. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
  586. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
  587. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
  588. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
  589. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
  590. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
  591. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
  592. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
  593. package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
  594. package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
  595. package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
  596. package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
  597. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
  598. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
  599. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
  600. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
  601. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
  602. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
  603. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
  604. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
  605. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
  606. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
  607. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
  608. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
  609. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
  610. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
  611. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
  612. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
  613. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
  614. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
  615. package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
  616. package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
  617. package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
  618. package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
  619. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
  620. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
  621. package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
  622. package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
  623. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
  624. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
  625. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
  626. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
  627. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
  628. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
  629. package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
  630. package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
  631. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
  632. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
  633. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
  634. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
  635. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
  636. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
  637. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
  638. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
  639. package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
  640. package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
  641. package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
  642. package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
  643. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
  644. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
  645. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
  646. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
  647. package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
  648. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
  649. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
  650. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
  651. package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
  652. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
  653. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
  654. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
  655. package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
  656. package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
  657. package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
  658. package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
  659. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
  660. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
  661. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
  662. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
  663. package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
  664. package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
  665. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
  666. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
  667. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
  668. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
  669. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
  670. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
  671. package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
  672. package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
  673. package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
  674. package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
  675. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
  676. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
  677. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
  678. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
  679. package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
  680. package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
  681. package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
  682. package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
  683. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
  684. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
  685. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
  686. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
  687. package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
  688. package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
  689. package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
  690. package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
  691. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
  692. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
  693. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
  694. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
  695. package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
  696. package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
  697. package/dist/chunk-CQXZC5XI.mjs.map +0 -1
  698. package/dist/chunk-QC4VW3XJ.mjs.map +0 -1
  699. package/dist/chunk-SCRSAK5B.mjs.map +0 -1
  700. package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
  701. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
  702. package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
  703. package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
  704. package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
  705. package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
  706. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
  707. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
  708. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
  709. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
  710. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
  711. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
  712. package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
  713. package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
@@ -0,0 +1,55 @@
1
+ import type { EnvironmentCandidate, FogCandidate } from '../extract/environment';
2
+
3
+ export interface EnvironmentSignatureInput {
4
+ readonly environments: readonly EnvironmentCandidate[];
5
+ readonly fogs: readonly FogCandidate[];
6
+ readonly suns: readonly {
7
+ readonly entityKey: number;
8
+ readonly direction: readonly [number, number, number];
9
+ readonly color: readonly [number, number, number];
10
+ readonly intensity: number;
11
+ }[];
12
+ }
13
+
14
+ export interface EnvironmentFactSignatures {
15
+ readonly environmentSignature: string;
16
+ readonly fogSignature: string;
17
+ readonly signature: string;
18
+ }
19
+
20
+ function sorted<T extends { readonly entityKey: number }>(items: readonly T[]): readonly T[] {
21
+ return [...items].sort((left, right) => left.entityKey - right.entityKey);
22
+ }
23
+
24
+ /** Derive a deterministic source signature without retaining GPU objects. */
25
+ export function environmentSignature(input: EnvironmentSignatureInput): string {
26
+ return JSON.stringify({
27
+ environments: sorted(input.environments),
28
+ fogs: sorted(input.fogs),
29
+ suns: sorted(input.suns),
30
+ });
31
+ }
32
+
33
+ /** Signature for Environment and Sun facts, excluding the independent Fog channel. */
34
+ export function environmentOnlySignature(input: EnvironmentSignatureInput): string {
35
+ return JSON.stringify({
36
+ environments: sorted(input.environments),
37
+ suns: sorted(input.suns),
38
+ });
39
+ }
40
+
41
+ /** Signature for the independent Fog channel. */
42
+ export function fogOnlySignature(input: Pick<EnvironmentSignatureInput, 'fogs'>): string {
43
+ return JSON.stringify({ fogs: sorted(input.fogs) });
44
+ }
45
+
46
+ /** Build all frame signatures from one immutable source fact set. */
47
+ export function environmentFactSignatures(
48
+ input: EnvironmentSignatureInput,
49
+ ): EnvironmentFactSignatures {
50
+ return {
51
+ environmentSignature: environmentOnlySignature(input),
52
+ fogSignature: fogOnlySignature(input),
53
+ signature: environmentSignature(input),
54
+ };
55
+ }
@@ -13,6 +13,11 @@
13
13
  // SpotLight / PointLightShadow component validators (forward cross-directory
14
14
  // import, no cycle -- research Finding C2).
15
15
 
16
+ import type {
17
+ RenderSurfaceFailureDetail,
18
+ SurfaceFailureCode,
19
+ SurfaceFailureKind,
20
+ } from '@forgeax/engine-render-graph';
16
21
  import type { DeviceResourceKind, DeviceScopeReceipt } from '../device/resource-types';
17
22
  import type {
18
23
  PreparedKind,
@@ -20,6 +25,8 @@ import type {
20
25
  RenderFeatureRecovery,
21
26
  RenderFeatureStage,
22
27
  } from '../features/vocabulary';
28
+ import type { SceneDataLane, SceneDataSchemaId } from '../temporal/scene-data';
29
+ import type { TransmissionCapabilityFact } from '../transmission/backdrop';
23
30
 
24
31
  export interface LifecycleConstructionFailureDetail {
25
32
  readonly owner: string;
@@ -47,6 +54,68 @@ export class LifecycleConstructionError extends Error {
47
54
  }
48
55
  }
49
56
 
57
+ const SURFACE_FAILURE_POLICY: Readonly<
58
+ Record<SurfaceFailureCode, { readonly expected: string; readonly hint: string }>
59
+ > = {
60
+ 'surface-allocation-failed': {
61
+ expected: 'the required surface resource can be allocated with its declared format and usage',
62
+ hint: 'inspect the capability detail, release transient resources, and retry the candidate graph',
63
+ },
64
+ 'surface-attachment-failed': {
65
+ expected: 'the float target is renderable as the declared attachment',
66
+ hint: 'verify float color attachment support and retry without hiding the failure',
67
+ },
68
+ 'surface-sampled-read-failed': {
69
+ expected: 'the float target can be sampled by the next post-processing stage',
70
+ hint: 'verify sampled-read support for the declared format before rebuilding the graph',
71
+ },
72
+ 'surface-view-domain-failed': {
73
+ expected: 'surface storage and display views preserve their declared color domains',
74
+ hint: 'repair the explicit format/domain pair and retry the candidate graph',
75
+ },
76
+ 'surface-raw-endpoint-failed': {
77
+ expected: 'the surface presentation endpoint has descriptor, acquisition, and validation proof',
78
+ hint: 'run the concrete presentation probe; keep the last-known-good surface when proof is absent',
79
+ },
80
+ };
81
+
82
+ /** Render-surface failure with an exhaustive code and actionable detail. */
83
+ export class RenderSurfaceError<
84
+ Code extends SurfaceFailureCode = SurfaceFailureCode,
85
+ > extends Error {
86
+ readonly code: Code;
87
+ readonly expected: string;
88
+ readonly hint: string;
89
+ readonly detail: RenderSurfaceFailureDetail;
90
+
91
+ constructor(code: Code, detail: RenderSurfaceFailureDetail) {
92
+ const policy = SURFACE_FAILURE_POLICY[code];
93
+ if (policy === undefined) {
94
+ throw new Error(`unknown render surface failure code: ${code}`);
95
+ }
96
+ super(`[RenderSurfaceError ${code}] expected: ${policy.expected}; hint: ${policy.hint}`);
97
+ this.name = 'RenderSurfaceError';
98
+ this.code = code;
99
+ this.expected = policy.expected;
100
+ this.hint = policy.hint;
101
+ this.detail = detail;
102
+ }
103
+ }
104
+
105
+ export type { RenderSurfaceFailureDetail, SurfaceFailureCode, SurfaceFailureKind };
106
+
107
+ export type RenderSurfaceExpectedError = {
108
+ readonly [Code in SurfaceFailureCode]: RenderSurfaceError<Code>;
109
+ }[SurfaceFailureCode];
110
+
111
+ /** Construct the closed surface error from its failure-stage discriminant. */
112
+ export function createRenderSurfaceError(
113
+ kind: SurfaceFailureKind,
114
+ detail: RenderSurfaceFailureDetail,
115
+ ): RenderSurfaceExpectedError {
116
+ return new RenderSurfaceError(`surface-${kind}-failed` as SurfaceFailureCode, detail);
117
+ }
118
+
50
119
  // ── ShadowInvalidConfigError ──────────────────────────────────────────────
51
120
 
52
121
  /**
@@ -563,6 +632,36 @@ export class MaterialSkinAttrMissingError extends Error {
563
632
  }
564
633
  }
565
634
 
635
+ export interface TransmissionCapabilityMissingDetail {
636
+ readonly material: string;
637
+ readonly capability: 'transmission';
638
+ readonly stage: 'prepare' | 'record';
639
+ readonly lane: 'standard-forward';
640
+ readonly format: string;
641
+ readonly missing: readonly TransmissionCapabilityFact[];
642
+ }
643
+
644
+ export class TransmissionCapabilityMissingError extends Error {
645
+ readonly code = 'transmission-capability-missing' as const;
646
+ readonly expected = 'the renderer exposes the transmission capability for this material';
647
+ readonly hint = 'disable transmission or provide the renderer capability before drawing';
648
+ readonly detail: TransmissionCapabilityMissingDetail;
649
+
650
+ constructor(
651
+ material: string,
652
+ stage: 'prepare' | 'record',
653
+ evidence: {
654
+ readonly lane: 'standard-forward';
655
+ readonly format: string;
656
+ readonly missing: readonly TransmissionCapabilityFact[];
657
+ },
658
+ ) {
659
+ super(`transmission capability is missing for material '${material}'`);
660
+ this.name = 'TransmissionCapabilityMissingError';
661
+ this.detail = { material, capability: 'transmission', stage, ...evidence };
662
+ }
663
+ }
664
+
566
665
  // -- RenderFeature errors ---------------------------------------------------
567
666
 
568
667
  export type RenderFeatureErrorCode =
@@ -931,6 +1030,63 @@ export class ObservationUnavailableError extends Error {
931
1030
  }
932
1031
  }
933
1032
 
1033
+ export type SceneDataUnavailableReason =
1034
+ | 'capability-missing'
1035
+ | 'producer-missing'
1036
+ | 'coverage-incomplete'
1037
+ | 'renderer-recovering';
1038
+ export interface SceneDataUnavailableDetail {
1039
+ readonly featureIdentity: string;
1040
+ readonly schema: SceneDataSchemaId;
1041
+ readonly lane: SceneDataLane;
1042
+ readonly reason: SceneDataUnavailableReason;
1043
+ readonly missingContributorIds: readonly string[];
1044
+ readonly omittedMissingContributorCount: number;
1045
+ readonly recovery: 'enable-capability' | 'next-frame' | 'renderer-recover';
1046
+ }
1047
+ export class SceneDataUnavailableError extends Error {
1048
+ readonly code = 'scene-data-unavailable' as const;
1049
+ readonly expected = 'the requested semantic scene data is available for the active plan';
1050
+ readonly hint: string;
1051
+ readonly detail: SceneDataUnavailableDetail;
1052
+ constructor(detail: SceneDataUnavailableDetail) {
1053
+ const hint =
1054
+ detail.recovery === 'enable-capability'
1055
+ ? 'enable rgba16floatRenderable and retry the current frame'
1056
+ : detail.recovery === 'renderer-recover'
1057
+ ? 'wait for renderer recovery, then retry the frame'
1058
+ : 'restore the producer coverage and retry on the next frame';
1059
+ super(`scene data '${detail.schema}' unavailable for '${detail.featureIdentity}'`);
1060
+ this.name = 'SceneDataUnavailableError';
1061
+ this.hint = hint;
1062
+ this.detail = Object.freeze({
1063
+ ...detail,
1064
+ missingContributorIds: Object.freeze([...detail.missingContributorIds].slice(0, 32)),
1065
+ omittedMissingContributorCount: Math.max(
1066
+ detail.omittedMissingContributorCount,
1067
+ Math.max(0, detail.missingContributorIds.length - 32),
1068
+ ),
1069
+ });
1070
+ }
1071
+ }
1072
+
1073
+ export class TaaUnavailableError extends Error {
1074
+ readonly code = 'taa-unavailable' as const;
1075
+ readonly expected =
1076
+ 'Standard TAA has a renderable rgba16float target and a complete resolve path';
1077
+ readonly hint =
1078
+ 'enable rgba16float rendering or select none/fxaa explicitly; do not treat TAA as no-AA';
1079
+ readonly detail: {
1080
+ readonly reason: 'capability' | 'topology' | 'history';
1081
+ readonly observed?: string;
1082
+ };
1083
+ constructor(reason: 'capability' | 'topology' | 'history', observed?: string) {
1084
+ super(`taa-unavailable: ${reason}`);
1085
+ this.name = 'TaaUnavailableError';
1086
+ this.detail = observed === undefined ? { reason } : { reason, observed };
1087
+ }
1088
+ }
1089
+
934
1090
  export interface FrameReceiptStaleDetail {
935
1091
  readonly frameId: number;
936
1092
  readonly receiptGeneration: number;
@@ -970,6 +1126,126 @@ export class RendererContractFailureError extends Error {
970
1126
  }
971
1127
  }
972
1128
 
1129
+ export interface EnvironmentSourceConflictDetail {
1130
+ readonly owners: readonly {
1131
+ readonly kind: 'image' | 'atmosphere';
1132
+ readonly entityKey: number;
1133
+ readonly sourceKey: string;
1134
+ }[];
1135
+ }
1136
+
1137
+ export class EnvironmentSourceConflictError extends Error {
1138
+ readonly code = 'environment-source-conflict' as const;
1139
+ readonly expected = 'exactly one environment source owns the frame';
1140
+ readonly hint = 'remove all but one image or atmosphere environment owner';
1141
+ readonly detail: EnvironmentSourceConflictDetail;
1142
+
1143
+ constructor(owners: readonly EnvironmentSourceConflictDetail['owners'][number][]) {
1144
+ super('environment source owners conflict');
1145
+ this.name = 'EnvironmentSourceConflictError';
1146
+ this.detail = { owners: owners.map((owner) => Object.freeze({ ...owner })) };
1147
+ }
1148
+ }
1149
+
1150
+ export interface FogCardinalityDetail {
1151
+ readonly count: number;
1152
+ }
1153
+
1154
+ export class FogCardinalityError extends Error {
1155
+ readonly code = 'fog-cardinality' as const;
1156
+ readonly expected = 'zero or one Fog owner contributes to a frame';
1157
+ readonly hint = 'remove extra Fog owners so the resource owner has at most one';
1158
+ readonly detail: FogCardinalityDetail;
1159
+
1160
+ constructor(count: number) {
1161
+ super(`Fog owner cardinality is ${count}`);
1162
+ this.name = 'FogCardinalityError';
1163
+ this.detail = { count };
1164
+ }
1165
+ }
1166
+
1167
+ export interface TaaCapsInsufficientDetail {
1168
+ readonly required: readonly string[];
1169
+ readonly available: readonly string[];
1170
+ }
1171
+
1172
+ export class TaaCapsInsufficientError extends Error {
1173
+ readonly code = 'taa-caps-insufficient' as const;
1174
+ readonly expected = 'the backend exposes the capabilities required by TAA';
1175
+ readonly hint = 'select a backend with the required TAA capabilities or disable TAA on Camera';
1176
+ readonly detail: TaaCapsInsufficientDetail;
1177
+
1178
+ constructor(required: readonly string[], available: readonly string[]) {
1179
+ super('TAA capabilities are insufficient');
1180
+ this.name = 'TaaCapsInsufficientError';
1181
+ this.detail = { required: [...required], available: [...available] };
1182
+ }
1183
+ }
1184
+
1185
+ export interface EnvironmentGenerationFailedDetail {
1186
+ readonly sourceKey: string;
1187
+ readonly stage: 'prepare' | 'build' | 'execute' | 'finish' | 'submit';
1188
+ }
1189
+
1190
+ export class EnvironmentGenerationFailedError extends Error {
1191
+ readonly code = 'environment-generation-failed' as const;
1192
+ readonly expected = 'the selected environment generation completes its owner stage';
1193
+ readonly hint = 'inspect the stage and sourceKey, then retry after correcting the environment';
1194
+ readonly detail: EnvironmentGenerationFailedDetail;
1195
+
1196
+ constructor(sourceKey: string, stage: EnvironmentGenerationFailedDetail['stage']) {
1197
+ super(`environment generation failed during ${stage}`);
1198
+ this.name = 'EnvironmentGenerationFailedError';
1199
+ this.detail = { sourceKey, stage };
1200
+ }
1201
+ }
1202
+
1203
+ export interface AtmosphereInvalidParameterDetail {
1204
+ readonly field: string;
1205
+ readonly value: number;
1206
+ }
1207
+
1208
+ export interface AtmosphereParameterRange {
1209
+ readonly min: number;
1210
+ readonly max: number;
1211
+ }
1212
+
1213
+ export class AtmosphereInvalidParameterError extends Error {
1214
+ readonly code = 'atmosphere-invalid-parameter' as const;
1215
+ readonly expected: string;
1216
+ readonly hint: string;
1217
+ readonly detail: AtmosphereInvalidParameterDetail;
1218
+
1219
+ constructor(field: string, value: number, range: AtmosphereParameterRange) {
1220
+ super(`Atmosphere.${field} is invalid`);
1221
+ this.name = 'AtmosphereInvalidParameterError';
1222
+ this.detail = { field, value };
1223
+ const rangeText = Number.isFinite(range.max)
1224
+ ? `[${range.min}, ${range.max}]`
1225
+ : `>= ${range.min}`;
1226
+ this.expected = `Atmosphere.${field} must be finite and ${rangeText}`;
1227
+ this.hint = `set Atmosphere.${field} to a finite value ${rangeText}`;
1228
+ }
1229
+ }
1230
+
1231
+ export interface OwnerStageFailedDetail {
1232
+ readonly owner: 'environment' | 'temporal' | 'fog' | 'renderer';
1233
+ readonly stage: 'extract' | 'prepare' | 'record' | 'finish' | 'submit';
1234
+ }
1235
+
1236
+ export class OwnerStageFailedError extends Error {
1237
+ readonly code = 'owner-stage-failed' as const;
1238
+ readonly expected = 'the owner completes its current frame stage';
1239
+ readonly hint = 'inspect the owner and stage, keep the last-known-good frame, and retry';
1240
+ readonly detail: OwnerStageFailedDetail;
1241
+
1242
+ constructor(owner: OwnerStageFailedDetail['owner'], stage: OwnerStageFailedDetail['stage']) {
1243
+ super(`${owner} owner failed during ${stage}`);
1244
+ this.name = 'OwnerStageFailedError';
1245
+ this.detail = { owner, stage };
1246
+ }
1247
+ }
1248
+
973
1249
  export interface RendererOperationCause {
974
1250
  readonly code: string;
975
1251
  readonly expected: string;
@@ -1101,6 +1377,143 @@ export type RendererExpectedOperationError = {
1101
1377
  readonly [Code in RendererOperationErrorCode]: RendererOperationError<Code>;
1102
1378
  }[RendererOperationErrorCode];
1103
1379
 
1380
+ // -- Points/Lines admission errors -------------------------------------------
1381
+
1382
+ export interface PointsLinesInvalidStyleDetail {
1383
+ readonly entity: number;
1384
+ readonly component: 'Points' | 'Lines' | 'Points/Lines';
1385
+ readonly field: string;
1386
+ readonly value: number | string | undefined;
1387
+ readonly expected: string;
1388
+ }
1389
+
1390
+ export class PointsLinesInvalidStyleError extends Error {
1391
+ readonly code = 'points-lines-invalid-style' as const;
1392
+ readonly expected: string;
1393
+ readonly hint: string;
1394
+ readonly detail: PointsLinesInvalidStyleDetail;
1395
+
1396
+ constructor(detail: PointsLinesInvalidStyleDetail) {
1397
+ super(`invalid ${detail.component} style at ${detail.field}`);
1398
+ this.name = 'PointsLinesInvalidStyleError';
1399
+ this.expected = detail.expected;
1400
+ this.hint = `repair entity ${detail.entity} ${detail.component}.${detail.field} and retry admission`;
1401
+ this.detail = detail;
1402
+ }
1403
+ }
1404
+
1405
+ export interface PointsLinesTopologyMismatchDetail {
1406
+ readonly entity: number;
1407
+ readonly submesh: number;
1408
+ readonly expected: string;
1409
+ readonly actual: string;
1410
+ }
1411
+
1412
+ export class PointsLinesTopologyMismatchError extends Error {
1413
+ readonly code = 'points-lines-topology-mismatch' as const;
1414
+ readonly expected: string;
1415
+ readonly hint: string;
1416
+ readonly detail: PointsLinesTopologyMismatchDetail;
1417
+
1418
+ constructor(detail: PointsLinesTopologyMismatchDetail) {
1419
+ super(`Points/Lines topology mismatch at submesh ${detail.submesh}`);
1420
+ this.name = 'PointsLinesTopologyMismatchError';
1421
+ this.expected = `submesh ${detail.submesh} topology is ${detail.expected}`;
1422
+ this.hint = `rebuild entity ${detail.entity} with ${detail.expected} geometry before retrying Points/Lines admission`;
1423
+ this.detail = detail;
1424
+ }
1425
+ }
1426
+
1427
+ export interface PointsLinesStyleUnsupportedDetail {
1428
+ readonly lane: string;
1429
+ readonly field: string;
1430
+ readonly member: string;
1431
+ readonly supported: readonly string[];
1432
+ }
1433
+
1434
+ export class PointsLinesStyleUnsupportedError extends Error {
1435
+ readonly code = 'points-lines-style-unsupported' as const;
1436
+ readonly expected: string;
1437
+ readonly hint: string;
1438
+ readonly detail: PointsLinesStyleUnsupportedDetail;
1439
+
1440
+ constructor(detail: PointsLinesStyleUnsupportedDetail) {
1441
+ super(`unsupported Points/Lines ${detail.field} member ${detail.member}`);
1442
+ this.name = 'PointsLinesStyleUnsupportedError';
1443
+ this.expected = `${detail.field} is one of ${detail.supported.join(', ')}`;
1444
+ this.hint = `use a supported Points/Lines ${detail.field} member or wait for a later milestone`;
1445
+ this.detail = detail;
1446
+ }
1447
+ }
1448
+
1449
+ export interface PointsLinesMaterialUnsupportedDetail {
1450
+ readonly entity: number;
1451
+ readonly material: string;
1452
+ readonly pass: string;
1453
+ readonly module: string;
1454
+ readonly reason: string;
1455
+ }
1456
+
1457
+ export class PointsLinesMaterialUnsupportedError extends Error {
1458
+ readonly code = 'points-lines-material-unsupported' as const;
1459
+ readonly expected = 'one engine-owned unlit forward MaterialAsset pass';
1460
+ readonly hint: string;
1461
+ readonly detail: PointsLinesMaterialUnsupportedDetail;
1462
+
1463
+ constructor(detail: PointsLinesMaterialUnsupportedDetail) {
1464
+ super(`Points/Lines material is unsupported on entity ${detail.entity}`);
1465
+ this.name = 'PointsLinesMaterialUnsupportedError';
1466
+ this.hint = `use Materials.unlit without a shadow-caster pass for entity ${detail.entity}`;
1467
+ this.detail = detail;
1468
+ }
1469
+ }
1470
+
1471
+ export interface PointsLinesBudgetExceededDetail {
1472
+ readonly lane: string;
1473
+ readonly requested: number;
1474
+ readonly limit: number;
1475
+ readonly unit: 'points' | 'segments' | 'vertices' | 'indices' | 'bytes' | 'draws';
1476
+ }
1477
+
1478
+ export class PointsLinesBudgetExceededError extends Error {
1479
+ readonly code = 'points-lines-budget-exceeded' as const;
1480
+ readonly expected: string;
1481
+ readonly hint: string;
1482
+ readonly detail: PointsLinesBudgetExceededDetail;
1483
+
1484
+ constructor(detail: PointsLinesBudgetExceededDetail) {
1485
+ super(`Points/Lines ${detail.unit} budget exceeded`);
1486
+ this.name = 'PointsLinesBudgetExceededError';
1487
+ this.expected = `${detail.unit} <= ${detail.limit}`;
1488
+ this.hint = `reduce Points/Lines ${detail.unit} or split the entity into bounded equivalent batches`;
1489
+ this.detail = detail;
1490
+ }
1491
+ }
1492
+
1493
+ export interface PointsLinesPrepareFailedDetail {
1494
+ readonly owner: string;
1495
+ readonly generation: number;
1496
+ readonly stage: 'prepare';
1497
+ readonly cause: string;
1498
+ readonly lastKnownGood: boolean;
1499
+ }
1500
+
1501
+ export class PointsLinesPrepareFailedError extends Error {
1502
+ readonly code = 'points-lines-prepare-failed' as const;
1503
+ readonly expected = 'the complete Points/Lines candidate validates before publication';
1504
+ readonly hint: string;
1505
+ readonly detail: PointsLinesPrepareFailedDetail;
1506
+
1507
+ constructor(detail: PointsLinesPrepareFailedDetail) {
1508
+ super(`Points/Lines prepare failed at generation ${detail.generation}`);
1509
+ this.name = 'PointsLinesPrepareFailedError';
1510
+ this.hint = detail.lastKnownGood
1511
+ ? 'retain the last known good candidate, repair the producer, and retry prepare'
1512
+ : 'repair the producer and retry prepare; the failed first candidate produces zero draw';
1513
+ this.detail = detail;
1514
+ }
1515
+ }
1516
+
1104
1517
  // -- RenderErrorCode / RenderError closed unions --------------------------------
1105
1518
 
1106
1519
  /**
@@ -1119,6 +1532,8 @@ export type RenderError =
1119
1532
  | FrameReceiptStaleError
1120
1533
  | RendererContractFailureError
1121
1534
  | ObservationUnavailableError
1535
+ | SceneDataUnavailableError
1536
+ | TaaUnavailableError
1122
1537
  | ShadowInvalidConfigError
1123
1538
  | EquirectProjectionFailedError
1124
1539
  | HdrpLightBudgetExceededError
@@ -1132,10 +1547,23 @@ export type RenderError =
1132
1547
  | SkinPaletteOverflowError
1133
1548
  | SkinMaterialMismatchError
1134
1549
  | MaterialSkinAttrMissingError
1550
+ | TransmissionCapabilityMissingError
1135
1551
  | RenderFeatureRegistrationConflictError
1136
1552
  | RenderFeatureStageFailedError
1137
1553
  | RenderFeatureCapabilityMissingError
1138
1554
  | RenderFeaturePassOrderConflictError
1139
1555
  | RenderFeaturePreparationFailedError
1140
1556
  | RenderFeaturePreparedStateMismatchError
1141
- | RenderFeatureDrawRecordingFailedError;
1557
+ | RenderFeatureDrawRecordingFailedError
1558
+ | EnvironmentSourceConflictError
1559
+ | FogCardinalityError
1560
+ | TaaCapsInsufficientError
1561
+ | EnvironmentGenerationFailedError
1562
+ | AtmosphereInvalidParameterError
1563
+ | OwnerStageFailedError
1564
+ | PointsLinesInvalidStyleError
1565
+ | PointsLinesTopologyMismatchError
1566
+ | PointsLinesStyleUnsupportedError
1567
+ | PointsLinesMaterialUnsupportedError
1568
+ | PointsLinesBudgetExceededError
1569
+ | PointsLinesPrepareFailedError;
@@ -0,0 +1,78 @@
1
+ import type { EntityHandle, World } from '@forgeax/engine-ecs';
2
+ import { readRenderArrayView } from '@forgeax/engine-ecs/projection';
3
+ import { mat4, vec3 } from '@forgeax/engine-math';
4
+ import { Transform } from '@forgeax/engine-scene';
5
+ import {
6
+ antialiasFromF32,
7
+ bloomEnabledFromF32,
8
+ Camera,
9
+ cameraProjectionFromF32,
10
+ tonemapFromF32,
11
+ } from '../components/camera';
12
+ import { MotionBlur } from '../components/motion-blur';
13
+ import type { CameraSnapshot } from '../render-contract';
14
+ import { getActiveCamera, selectActiveCameraIndex } from '../systems/active-camera';
15
+
16
+ function readWorldMatrix(world: World, entity: EntityHandle): Float32Array | undefined {
17
+ const view = readRenderArrayView(world, entity, Transform, 'world');
18
+ return view === undefined ? undefined : new Float32Array(view);
19
+ }
20
+
21
+ /** Extract the selected camera once at the frame boundary. */
22
+ export function extractCameraSnapshots(world: World): CameraSnapshot[] {
23
+ const cameras: CameraSnapshot[] = [];
24
+ const cameraEntities: number[] = [];
25
+ const cameraQuery = world
26
+ .query({ read: [Camera], optional: [MotionBlur], with: [Transform] })
27
+ .unwrap();
28
+ for (const row of cameraQuery) {
29
+ const cam = row.get(Camera);
30
+ const motionBlur = row.get(MotionBlur);
31
+ const entity = row.entity as EntityHandle;
32
+ const worldMat = readWorldMatrix(world, entity);
33
+ if (worldMat === undefined) continue;
34
+ cameras.push({
35
+ entityKey: entity as number,
36
+ historyVersion: cam.historyVersion,
37
+ position: mat4.getTranslation(vec3.create(), worldMat),
38
+ world: worldMat,
39
+ fov: cam.fov,
40
+ aspect: cam.aspect,
41
+ near: cam.near,
42
+ far: cam.far,
43
+ projection: cameraProjectionFromF32(cam.projection),
44
+ orthoLeft: cam.left,
45
+ orthoRight: cam.right,
46
+ orthoBottom: cam.bottom,
47
+ orthoTop: cam.top,
48
+ tonemap: tonemapFromF32(cam.tonemap),
49
+ exposure: cam.exposure,
50
+ whitePoint: cam.whitePoint,
51
+ antialias: antialiasFromF32(cam.antialias),
52
+ bloom: bloomEnabledFromF32(cam.bloom),
53
+ bloomThreshold: cam.bloomThreshold,
54
+ bloomIntensity: cam.bloomIntensity,
55
+ bloomBlurRadius: cam.bloomBlurRadius,
56
+ clearColor: [
57
+ cam.clearColor[0] ?? 0,
58
+ cam.clearColor[1] ?? 0,
59
+ cam.clearColor[2] ?? 0,
60
+ cam.clearColor[3] ?? 1,
61
+ ],
62
+ ...(motionBlur === undefined
63
+ ? {}
64
+ : {
65
+ motionBlur: {
66
+ shutterAngle: motionBlur.shutterAngle,
67
+ maxRadiusPixels: motionBlur.maxRadiusPixels,
68
+ sampleCount: motionBlur.sampleCount,
69
+ },
70
+ }),
71
+ });
72
+ cameraEntities.push(entity as number);
73
+ }
74
+ const selected = selectActiveCameraIndex(cameraEntities, getActiveCamera(world)?.entity);
75
+ if (selected < 0) return cameras;
76
+ const camera = cameras[selected];
77
+ return camera === undefined ? cameras : [camera];
78
+ }