@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
@@ -8,16 +8,25 @@
8
8
 
9
9
  import { mat4 } from '@forgeax/engine-math';
10
10
  import type { Buffer, RhiQueue } from '@forgeax/engine-rhi';
11
+ import type { FogFrame } from '../extract/environment';
12
+ import type { PointsLinesStyle } from '../points-lines/snapshot';
11
13
  import type { CameraSnapshot } from '../render-contract';
12
14
  import type {
13
15
  DirectionalLightSnapshot,
14
16
  ExtractedLights,
15
17
  SpotLightSnapshot,
16
18
  } from '../render-system-extract';
19
+ import type { TemporalView as LegacyTemporalView } from '../temporal/temporal-view';
20
+ import type { TemporalView } from '../temporal/view';
17
21
  import { clampPcfKernelSize } from './frame-snapshot';
18
22
  import { computeProjectionMatrix, computeViewMatrix } from './helpers';
19
23
 
20
24
  export const VIEW_UNIFORM_BYTES = 960;
25
+ export const POINTS_LINES_VIEW_BYTES = 160;
26
+ export const POINTS_LINES_VIEW_SLOT_STRIDE = 256;
27
+ export const POINTS_LINES_VIEW_SLOT_COUNT = 1024;
28
+ export const POINTS_LINES_VIEW_BUFFER_SIZE =
29
+ POINTS_LINES_VIEW_SLOT_STRIDE * POINTS_LINES_VIEW_SLOT_COUNT;
21
30
  export const VIEW_UNIFORM_SLOT_STRIDE = 1024;
22
31
  export const POINT_SHADOW_VIEW_SLOT_COUNT = 24;
23
32
  export const VIEW_UNIFORM_BUFFER_SIZE =
@@ -27,6 +36,47 @@ export function pointShadowViewOffset(layer: number, face: number): number {
27
36
  return VIEW_UNIFORM_SLOT_STRIDE * (1 + layer * 6 + face);
28
37
  }
29
38
 
39
+ export function writePointsLinesViewUbo(
40
+ queue: RhiQueue,
41
+ buffer: Buffer,
42
+ camera: CameraSnapshot,
43
+ width: number,
44
+ height: number,
45
+ model?: ArrayLike<number>,
46
+ style?: PointsLinesStyle,
47
+ byteOffset = 0,
48
+ ): void {
49
+ const projection = computeProjectionMatrix(camera);
50
+ const view = computeViewMatrix(camera);
51
+ const worldViewProj = mat4.create();
52
+ mat4.multiply(worldViewProj, projection, view);
53
+ const payload = new Float32Array(40);
54
+ payload.set(worldViewProj);
55
+ if (model === undefined) {
56
+ payload[16] = 1;
57
+ payload[21] = 1;
58
+ payload[26] = 1;
59
+ payload[31] = 1;
60
+ } else {
61
+ for (let index = 0; index < 16; index += 1) {
62
+ payload[16 + index] = model[index] ?? 0;
63
+ }
64
+ }
65
+ payload[32] = width;
66
+ payload[33] = height;
67
+ if (style?.kind === 'points') {
68
+ payload[36] = style.sizePx;
69
+ payload[38] = style.shape === 'circle' ? 1 : 0;
70
+ } else if (style?.kind === 'lines') {
71
+ payload[36] = style.widthPx;
72
+ payload[37] = 1;
73
+ } else {
74
+ payload[36] = 1;
75
+ }
76
+ const uploaded = queue.writeBuffer(buffer, byteOffset, payload);
77
+ if (!uploaded.ok) throw uploaded.error;
78
+ }
79
+
30
80
  /**
31
81
  * feat-20260704 M3/w18: assemble + upload the per-frame View UBO payload.
32
82
  *
@@ -63,16 +113,34 @@ export function writeViewUbo(
63
113
  light: DirectionalLightSnapshot,
64
114
  lights: ExtractedLights,
65
115
  spotShadowSnapshots: readonly SpotLightSnapshot[],
116
+ fogOrTemporal?: FogFrame | TemporalView | LegacyTemporalView,
117
+ temporal?: TemporalView,
66
118
  ): void {
119
+ const isTemporal =
120
+ fogOrTemporal !== undefined &&
121
+ ('currentJitterUv' in fogOrTemporal || 'currentUnjitteredViewProjection' in fogOrTemporal);
122
+ const fog = isTemporal ? undefined : fogOrTemporal;
123
+ const resolvedTemporal = temporal ?? (isTemporal ? fogOrTemporal : undefined);
67
124
  // Compose worldViewProj once per frame (view * proj).
68
125
  const projMatrix = computeProjectionMatrix(camera);
69
126
  const viewMatrix = computeViewMatrix(camera);
70
- const worldViewProj = mat4.create();
71
- mat4.multiply(worldViewProj, projMatrix, viewMatrix);
127
+ const unjitteredViewProjection = mat4.create();
128
+ mat4.multiply(unjitteredViewProjection, projMatrix, viewMatrix);
129
+ const jitteredProjection = mat4.create();
130
+ if (resolvedTemporal?.currentJitterUv !== undefined) {
131
+ const jitter = mat4.identity(mat4.create());
132
+ jitter[12] = resolvedTemporal.currentJitterUv[0] * 2;
133
+ jitter[13] = resolvedTemporal.currentJitterUv[1] * -2;
134
+ mat4.multiply(jitteredProjection, jitter, projMatrix);
135
+ } else {
136
+ for (let i = 0; i < 16; i += 1) jitteredProjection[i] = projMatrix[i] ?? 0;
137
+ }
138
+ const mainProjection = mat4.create();
139
+ mat4.multiply(mainProjection, jitteredProjection, viewMatrix);
72
140
 
73
141
  const VIEW_PAYLOAD_FLOATS = 240;
74
142
  const viewPayload = new Float32Array(VIEW_PAYLOAD_FLOATS);
75
- for (let i = 0; i < 16; i++) viewPayload[i] = worldViewProj[i] ?? 0;
143
+ for (let i = 0; i < 16; i++) viewPayload[i] = mainProjection[i] ?? 0;
76
144
  viewPayload[16] = (light.direction[0] ?? 0) * light.intensity;
77
145
  viewPayload[17] = (light.direction[1] ?? -1) * light.intensity;
78
146
  viewPayload[18] = (light.direction[2] ?? 0) * light.intensity;
@@ -90,7 +158,7 @@ export function writeViewUbo(
90
158
  // Host pre-computes mat4.invert so the skybox fragment shader avoids
91
159
  // per-pixel matrix inversion (charter P4 consistent abstraction).
92
160
  const inverseViewProj = mat4.create();
93
- mat4.invert(inverseViewProj, worldViewProj);
161
+ mat4.invert(inverseViewProj, mainProjection);
94
162
  for (let i = 0; i < 16; i++) viewPayload[44 + i] = inverseViewProj[i] ?? 0;
95
163
  // lightViewProj[1..3] at [60..107].
96
164
  if (lights.lightViewProj !== undefined) {
@@ -102,6 +170,21 @@ export function writeViewUbo(
102
170
  }
103
171
  }
104
172
  }
173
+
174
+ // Temporal ABI tail: current and last-successful unjittered projections
175
+ // stay separate from the jittered main projection and never advance on a
176
+ // failed submission. The fixed 240-float payload already reserves these
177
+ // 36 slots at byte offsets 784..920.
178
+ const previous = resolvedTemporal?.previousUnjitteredViewProjection;
179
+ for (let i = 0; i < 16; i += 1) {
180
+ viewPayload[196 + i] = unjitteredViewProjection[i] ?? 0;
181
+ // No previous successful frame exists on first frame/reset. Keep this
182
+ // lane zeroed instead of copying current state into a history slot.
183
+ viewPayload[212 + i] = previous?.[i] ?? 0;
184
+ }
185
+ viewPayload[228] = camera.near;
186
+ viewPayload[229] = camera.far;
187
+ viewPayload[230] = camera.projection === 'orthographic' ? 1 : 0;
105
188
  // splitPlanes at [108], [112], [116], [120] (vec4 stride = 4 floats).
106
189
  if (lights.splitPlanes !== undefined) {
107
190
  for (let s = 0; s < 4; s++) {
@@ -155,6 +238,18 @@ export function writeViewUbo(
155
238
  }
156
239
  }
157
240
 
241
+ // Fog is a resource-owner semantic carried by the shared View ABI. Keep the
242
+ // disabled payload zeroed and write only the selected frame facts so both
243
+ // direct and clustered lanes consume the same owner projection.
244
+ if (fog !== undefined) {
245
+ viewPayload[232] = fog.color[0] ?? 0;
246
+ viewPayload[233] = fog.color[1] ?? 0;
247
+ viewPayload[234] = fog.color[2] ?? 0;
248
+ viewPayload[235] = fog.density;
249
+ viewPayload[236] = fog.heightFalloff;
250
+ viewPayload[237] = fog.maxOpacity;
251
+ }
252
+
158
253
  const viewUploadResult = queue.writeBuffer(viewUniformBuffer, 0, viewPayload);
159
254
  if (!viewUploadResult.ok) throw viewUploadResult.error;
160
255
 
@@ -3,11 +3,12 @@ import type { World } from '@forgeax/engine-ecs';
3
3
  import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
4
4
  import type { Vec3 } from '@forgeax/engine-math';
5
5
  import type { ProfileFrameToken, Profiler } from '@forgeax/engine-profiler';
6
- import type { RenderGraphError } from '@forgeax/engine-render-graph';
6
+ import type { ColorValueDomain, RenderGraphError } from '@forgeax/engine-render-graph';
7
7
  import type {
8
8
  BindGroupLayout,
9
9
  Buffer,
10
10
  Result,
11
+ RhiCanvasSurfacePresentationProof,
11
12
  RhiCaps,
12
13
  RhiCommandEncoder,
13
14
  RhiDevice,
@@ -23,13 +24,26 @@ import type { SkinError } from '@forgeax/engine-skinning';
23
24
  import type { ImageError } from '@forgeax/engine-types';
24
25
  import type { RhiBackendInstrumentation } from './assembly/backend-contract';
25
26
  import type { Antialias, BloomEnabled, Tonemap } from './components/camera';
27
+ import type { EnvironmentInspection } from './environment/inspection';
26
28
  import type { RenderError } from './errors/render';
27
- import type { RenderFeature } from './features/types';
29
+ import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
28
30
  import type { PostProcessShaderEntry } from './fullscreen-post-process-pass';
29
- import type { RenderSceneInspection } from './inspection-types';
31
+ import type {
32
+ BloomInspection,
33
+ MotionBlurInspection,
34
+ RenderSceneInspection,
35
+ TemporalTargetInspection,
36
+ TransmissionInspection,
37
+ } from './inspection-types';
38
+ import type { TemporalInspection } from './temporal/inspection';
39
+
40
+ export type { TransmissionInspection } from './inspection-types';
41
+ export type { PointsLinesInspection } from './points-lines/inspection';
42
+
30
43
  import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
31
44
  import type { StandardProfile } from './pipeline/standard-profile';
32
45
  import type { PostProcessError } from './post-process-errors';
46
+ import type { TemporalView } from './temporal/view';
33
47
 
34
48
  export type RenderResult<T, E> =
35
49
  | { readonly ok: true; readonly value: T }
@@ -48,6 +62,10 @@ export type RenderWorldLease = RenderReadLease;
48
62
  export interface CameraSnapshot {
49
63
  /** Stable ECS identity used by the frame plan's camera authority fact. */
50
64
  readonly entityKey?: number;
65
+ /** World index supplied by the multi-world extract merge. */
66
+ readonly worldId?: number;
67
+ /** Camera-owned history generation forwarded into the frame plan. */
68
+ readonly historyVersion?: number;
51
69
  /** World-space camera translation (mat4.getTranslation of Transform.world). */
52
70
  readonly position: Vec3;
53
71
  /** Resolved world-space camera mat4, copied from Transform.world. */
@@ -71,10 +89,26 @@ export interface CameraSnapshot {
71
89
  readonly bloomIntensity: number;
72
90
  readonly bloomBlurRadius: number;
73
91
  readonly clearColor: readonly [number, number, number, number];
92
+ /** Renderer-owned temporal projection used by Standard's TAA producer. */
93
+ readonly temporal?: TemporalView;
94
+ /** Active-camera motion blur parameters, present only when demanded. */
95
+ readonly motionBlur?: {
96
+ readonly shutterAngle: number;
97
+ readonly maxRadiusPixels: number;
98
+ readonly sampleCount: number;
99
+ };
74
100
  }
75
101
 
76
- /** Stable identity owned by the Standard feature host for built-in tonemap. */
77
- export const STANDARD_TONEMAP_FEATURE_ID = 'forgeax::standard::tonemap';
102
+ /** Stable identity owned by the Standard feature host for output transform. */
103
+ export const STANDARD_OUTPUT_TRANSFORM_FEATURE_ID = 'forgeax::standard::output-transform';
104
+
105
+ export type {
106
+ EnvironmentFrame,
107
+ EnvironmentSource,
108
+ FogFrame,
109
+ FramePlan,
110
+ } from './extract/environment';
111
+ export type { TemporalView } from './temporal/view';
78
112
 
79
113
  /**
80
114
  * Render-graph state exposed to pipeline declarations. Concrete pipeline
@@ -172,7 +206,13 @@ export type RendererEvent =
172
206
  readonly previous: RendererState;
173
207
  readonly current: RendererState;
174
208
  }
175
- | { readonly kind: 'error'; readonly error: RenderError };
209
+ | { readonly kind: 'error'; readonly error: RenderError }
210
+ /** Emitted only after the renderer's sole submit path returns a receipt. */
211
+ | {
212
+ readonly kind: 'frame-submitted';
213
+ readonly frameId: number;
214
+ readonly deviceGeneration: number;
215
+ };
176
216
 
177
217
  /** Package-local listener alias used by the renderer assembly implementation. */
178
218
  export type RendererEventListener = (event: RendererEvent) => void;
@@ -236,6 +276,57 @@ export interface FrameReceiptObservation {
236
276
  readonly include: readonly ('timings' | 'draws' | 'bindings')[];
237
277
  }
238
278
 
279
+ /** Stable backend facts for the Standard output transform projection. */
280
+ export interface RenderOutputInspection {
281
+ readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
282
+ readonly displayEncoded: boolean;
283
+ readonly intermediateFormat?: TextureFormat;
284
+ /** Concrete surface route committed by configureSurface. */
285
+ readonly surfaceProfile?: 'dual-view' | 'raw-only';
286
+ /** Pass names from the same committed graph as the output facts. */
287
+ readonly graphPassNames: readonly string[];
288
+ /** Detached descriptor for the graph-owned output target, when present. */
289
+ readonly standardOutputColor?: RenderStandardOutputColorInspection;
290
+ readonly surfaceStorage: TextureFormat;
291
+ readonly surfaceDisplay: TextureFormat;
292
+ readonly endpoint: 'surface.storage.raw';
293
+ readonly capability: 'rgba16float-renderable' | 'surface-raw-endpoint' | 'unavailable';
294
+ readonly presentationProof?: RhiCanvasSurfacePresentationProof;
295
+ readonly error:
296
+ | {
297
+ readonly code: string;
298
+ readonly expected: string;
299
+ readonly hint: string;
300
+ readonly detail?: unknown;
301
+ }
302
+ | undefined;
303
+ }
304
+
305
+ /** Detached descriptor for the graph-owned display-encoded intermediate. */
306
+ export interface RenderStandardOutputColorInspection {
307
+ readonly format: TextureFormat;
308
+ readonly domain?: ColorValueDomain;
309
+ readonly width: number;
310
+ readonly height: number;
311
+ readonly sampleCount: number;
312
+ readonly usage: number;
313
+ }
314
+
315
+ /** Stable identity refs for a renderer-owned frame observation. */
316
+ export interface RenderObservationInspection {
317
+ readonly observationId: string;
318
+ readonly frameId: number;
319
+ /** Camera antialias mode used by the frame carrying this observation. */
320
+ readonly antialias?: Antialias;
321
+ /** Surface route committed for the same frame graph. */
322
+ readonly surfaceProfile?: 'dual-view' | 'raw-only';
323
+ /** Capability fact used when resolving a raw-only float target. */
324
+ readonly rgba16floatRenderable?: boolean;
325
+ /** Exact pass names and target descriptor from the committed graph. */
326
+ readonly passNames: readonly string[];
327
+ readonly standardOutputColor?: RenderStandardOutputColorInspection;
328
+ }
329
+
239
330
  /**
240
331
  * Detached renderer facts for host diagnostics and capability selection.
241
332
  *
@@ -252,15 +343,37 @@ export interface RenderInspection {
252
343
  readonly deviceGeneration: number;
253
344
  };
254
345
  readonly features: readonly string[];
346
+ /** Truthful lifecycle facts for every registered declarative feature. */
347
+ readonly featureDiagnostics: readonly RenderFeatureDiagnostics[];
255
348
  readonly frustumStats: { readonly culled: number; readonly total: number };
256
349
  readonly visibilityStats: { readonly explicitlyHidden: number };
257
350
  readonly renderScene: RenderSceneInspection;
351
+ /** Last completed transmission candidate facts, detached from GPU handles. */
352
+ readonly transmission?: TransmissionInspection;
258
353
  readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
259
354
  readonly perFramePassNames: readonly string[];
260
355
  readonly bindGroupCounts: {
261
356
  readonly createBindGroup: number;
262
357
  readonly keys: readonly string[];
263
358
  };
359
+ /** Output transform facts; never includes fixture metrics or pixel bytes. */
360
+ readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
361
+ readonly displayEncoded: boolean;
362
+ readonly intermediateFormat?: TextureFormat;
363
+ readonly surfaceStorage: TextureFormat;
364
+ readonly surfaceDisplay: TextureFormat;
365
+ readonly endpoint: 'surface.storage.raw';
366
+ readonly capability: RenderOutputInspection['capability'];
367
+ readonly presentationProof?: RhiCanvasSurfacePresentationProof;
368
+ readonly error: RenderOutputInspection['error'];
369
+ readonly observation: RenderObservationInspection;
370
+ readonly environment: EnvironmentInspection;
371
+ readonly temporal: TemporalInspection;
372
+ readonly bloom: BloomInspection;
373
+ /** Semantic Standard temporal target metadata; no graph or RHI handles. */
374
+ readonly temporalTarget?: TemporalTargetInspection;
375
+ /** Renderer-owned Motion Blur facts; absent when no component is active. */
376
+ readonly motionBlur?: MotionBlurInspection;
264
377
  }
265
378
 
266
379
  /** Backend marker — single-element union preserved for future extensibility (D-2). */
@@ -368,7 +481,8 @@ export const RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
368
481
  'record/graph-execute/forward/material-bind-groups',
369
482
  'record/graph-execute/forward/pipeline-selection',
370
483
  'record/graph-execute/forward/draw-submit',
371
- 'record/graph-execute/tonemap',
484
+ 'record/graph-execute/output-transform',
485
+ 'record/graph-execute/present',
372
486
  'record/graph-execute/debug-overlay',
373
487
  'record/graph-execute/shadow',
374
488
  'record/graph-execute/spot-shadow',
@@ -665,7 +665,10 @@ function dispatchFullscreenPass(
665
665
  // the swap-chain path uses the backend-selected surface view format.
666
666
  let writeFormat = ctx.pipelineState?.colorAttachmentFormat ?? 'rgba8unorm-srgb';
667
667
  if (graphPass !== undefined) {
668
- writeView = ctx.view;
668
+ // Typed graph passes must write their declared output target. The frame
669
+ // surface view is only the fallback for legacy passes; using it here
670
+ // leaves a typed output target cleared while the next pass samples it.
671
+ writeView = (resolveCtx?.resolve(color) as TextureView | undefined) ?? ctx.view;
669
672
  writeFormat = graphOutputFormat ?? writeFormat;
670
673
  } else if (rawSwapchainOutput && color === 'swapchain') {
671
674
  const rawViewRes = ctx.runtime.device.createTextureView(ctx.currentTexture, {});
@@ -733,6 +736,20 @@ function dispatchFullscreenPass(
733
736
  paramsBuffer,
734
737
  depthTexView,
735
738
  depthSampler,
739
+ built.extraColorBindings.map((binding, index) => {
740
+ const read = entry.reads?.filter(
741
+ (candidate) => typeof candidate === 'string' || candidate.sampleType !== 'depth',
742
+ )[index + 1];
743
+ const key = typeof read === 'string' ? read : read?.key;
744
+ const view = key === undefined ? undefined : resolveCtx?.resolve(key);
745
+ if (view === undefined) {
746
+ throw new PostProcessError({
747
+ code: 'fullscreen-input-not-found',
748
+ detail: { readsKey: key ?? 'additional-read', passName: name },
749
+ });
750
+ }
751
+ return { binding, view: view as TextureView };
752
+ }),
736
753
  );
737
754
  if (bindGroup === null) return;
738
755
 
@@ -26,7 +26,13 @@ import type {
26
26
  RenderGraphError,
27
27
  RenderGraphFrame,
28
28
  } from '@forgeax/engine-render-graph';
29
- import type { BindGroup, RhiError, RhiRenderPassEncoder, TextureFormat } from '@forgeax/engine-rhi';
29
+ import type {
30
+ BindGroup,
31
+ RhiCaps,
32
+ RhiError,
33
+ RhiRenderPassEncoder,
34
+ TextureFormat,
35
+ } from '@forgeax/engine-rhi';
30
36
  import { ok, type Result } from '@forgeax/engine-types';
31
37
  import type { Tonemap } from './components/camera';
32
38
  import type { RenderError } from './errors/render';
@@ -35,8 +41,10 @@ import {
35
41
  GPU_TEXTURE_USAGE_COPY_SRC,
36
42
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
37
43
  } from './gpu-texture-usage';
38
- import type { StandardProfile } from './pipeline/standard-profile';
44
+ import { STANDARD_POST_STAGE_NAMES, type StandardProfile } from './pipeline/standard-profile';
45
+ import type { SurfaceProfile } from './record/render-context';
39
46
  import type { RenderPipelineContext } from './render-contract';
47
+ import type { TransmissionDemand } from './transmission/projection';
40
48
 
41
49
  export type { RenderPipelineContext } from './render-contract';
42
50
 
@@ -50,7 +58,7 @@ export interface ToneOutputContract {
50
58
  readonly exposureStage: 'linearHdr' | 'none';
51
59
  }
52
60
 
53
- export type RenderPostStageName = 'transparent-blend' | 'bloom' | 'tone' | 'fxaa' | 'output';
61
+ export type RenderPostStageName = (typeof STANDARD_POST_STAGE_NAMES)[number];
54
62
  export type RenderPostDomainStage = readonly [
55
63
  RenderPostStageName,
56
64
  ColorValueDomain,
@@ -60,18 +68,21 @@ export type RenderPostDomainStage = readonly [
60
68
  /**
61
69
  * Single post-stage domain contract shared by the Standard lighting lanes.
62
70
  * The selected scene domain for transparent geometry is explicit; every later
63
- * stage follows the same linear blend, tone, anti-alias, and output sequence.
71
+ * stage follows the same linear blend, output-transform, anti-alias, post-effect, and present sequence.
64
72
  */
65
73
  export function resolvePostColorDomainContract(
66
74
  sceneDomain: 'linear-ldr' | 'linear-hdr',
67
75
  ): readonly RenderPostDomainStage[] {
68
76
  const scene: ColorValueDomain = sceneDomain;
77
+ const [transparentBlend, bloom, outputTransform, fxaa, postEffect, present] =
78
+ STANDARD_POST_STAGE_NAMES;
69
79
  return [
70
- ['transparent-blend', scene, scene],
71
- ['bloom', 'linear-hdr', 'linear-hdr'],
72
- ['tone', 'linear-hdr', 'linear-ldr'],
73
- ['fxaa', 'linear-ldr', 'linear-ldr'],
74
- ['output', 'linear-ldr', 'display-encoded'],
80
+ [transparentBlend, scene, scene],
81
+ [bloom, 'linear-hdr', 'linear-hdr'],
82
+ [outputTransform, scene, 'display-encoded'],
83
+ [fxaa, 'display-encoded', 'display-encoded'],
84
+ [postEffect, 'display-encoded', 'display-encoded'],
85
+ [present, 'display-encoded', 'display-encoded'],
75
86
  ];
76
87
  }
77
88
 
@@ -104,13 +115,25 @@ export interface RenderPipelineTopology {
104
115
  readonly pipelineId: string;
105
116
  readonly standardProfile?: StandardProfile | undefined;
106
117
  readonly config: import('@forgeax/engine-types').RenderPipelineAsset['config'];
118
+ /**
119
+ * The record stage had no Camera and injected the synthetic clear-only
120
+ * snapshot. Keep that fact explicit so a normal no-tone Camera still uses
121
+ * the float Output Transform while the empty-scene contract can write its
122
+ * clear directly to the surface.
123
+ */
124
+ readonly clearOnly?: boolean | undefined;
107
125
  readonly surface: {
108
126
  readonly width: number;
109
127
  readonly height: number;
110
128
  readonly storageFormat: import('@forgeax/engine-rhi').TextureFormat;
111
129
  readonly viewFormat: import('@forgeax/engine-rhi').TextureFormat;
130
+ readonly profile?: SurfaceProfile | undefined;
112
131
  };
113
132
  readonly camera: Pick<RenderPipelineContext['camera'], 'tonemap' | 'antialias' | 'bloom'>;
133
+ readonly temporal?: {
134
+ readonly taa: boolean;
135
+ readonly motionBlur: boolean;
136
+ };
114
137
  readonly shadow: {
115
138
  readonly mapSize: number;
116
139
  readonly cascadeCount: 1 | 2 | 3 | 4;
@@ -126,6 +149,8 @@ export interface RenderPipelineTopology {
126
149
  };
127
150
  readonly featureTopologySignature: string;
128
151
  readonly gpuDrivenTopologySignature: string;
152
+ /** Internal graph fact; renderer callers do not configure transmission demand. */
153
+ readonly transmissionDemand?: TransmissionDemand | undefined;
129
154
  }
130
155
 
131
156
  export interface RenderPipelineFrame extends RenderPipelineContext, RenderGraphFrame {}
@@ -135,6 +160,7 @@ export interface RenderPipelineTarget {
135
160
  readonly view: GraphTextureView;
136
161
  readonly format: TextureFormat;
137
162
  readonly sampleCount: 1 | 4;
163
+ readonly domain?: ColorValueDomain | undefined;
138
164
  readonly resolveTarget?: GraphTextureView | undefined;
139
165
  }
140
166
 
@@ -153,6 +179,7 @@ export function createRenderPipelineTarget(
153
179
  view: view.value,
154
180
  format: viewDescriptor.format ?? descriptor.format,
155
181
  sampleCount: descriptor.sampleCount === 4 ? 4 : 1,
182
+ ...(descriptor.domain === undefined ? {} : { domain: descriptor.domain }),
156
183
  });
157
184
  }
158
185
 
@@ -160,7 +187,7 @@ export function importRenderPipelineSurface(
160
187
  graph: RenderGraphBuilder<RenderPipelineFrame>,
161
188
  topology: RenderPipelineTopology,
162
189
  ): Result<
163
- { readonly display: RenderPipelineTarget; readonly storage: RenderPipelineTarget },
190
+ { readonly display?: RenderPipelineTarget; readonly storage: RenderPipelineTarget },
164
191
  RenderGraphError
165
192
  > {
166
193
  const texture = graph.importTexture(
@@ -168,21 +195,32 @@ export function importRenderPipelineSurface(
168
195
  {
169
196
  format: topology.surface.storageFormat,
170
197
  size: 'surface',
171
- usage: GPU_TEXTURE_USAGE_RENDER_ATTACHMENT | GPU_TEXTURE_USAGE_COPY_SRC,
172
- viewFormats:
173
- topology.surface.storageFormat === topology.surface.viewFormat
174
- ? []
175
- : [topology.surface.viewFormat],
198
+ // The imported surface is the final encoded endpoint. Keeping this
199
+ // semantic fact on the graph resource lets detached inspection project
200
+ // from the compiled graph instead of re-inferring it from format names.
201
+ domain: 'display-encoded',
202
+ usage:
203
+ GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
204
+ (topology.surface.profile?.kind === 'raw-only' ? 0 : GPU_TEXTURE_USAGE_COPY_SRC),
205
+ viewFormats: [
206
+ ...(topology.surface.profile?.viewFormats ??
207
+ (topology.surface.storageFormat === topology.surface.viewFormat
208
+ ? []
209
+ : [topology.surface.viewFormat])),
210
+ ],
176
211
  },
177
212
  (frame) => frame.currentTexture,
178
213
  );
179
214
  if (!texture.ok) return texture;
180
- const display = graph.importView(
181
- texture.value,
182
- { label: 'surface.display', format: topology.surface.viewFormat },
183
- (frame) => frame.view,
184
- );
185
- if (!display.ok) return display;
215
+ const display =
216
+ topology.surface.profile?.hasDisplayEndpoint === false
217
+ ? undefined
218
+ : graph.importView(
219
+ texture.value,
220
+ { label: 'surface.display', format: topology.surface.viewFormat },
221
+ (frame) => frame.view,
222
+ );
223
+ if (display !== undefined && !display.ok) return display;
186
224
  const storage = graph.importView(
187
225
  texture.value,
188
226
  { label: 'surface.storage', format: topology.surface.storageFormat },
@@ -197,17 +235,23 @@ export function importRenderPipelineSurface(
197
235
  );
198
236
  if (!storage.ok) return storage;
199
237
  return ok({
200
- display: {
201
- texture: texture.value,
202
- view: display.value,
203
- format: topology.surface.viewFormat,
204
- sampleCount: 1,
205
- },
238
+ ...(display === undefined
239
+ ? {}
240
+ : {
241
+ display: {
242
+ texture: texture.value,
243
+ view: display.value,
244
+ format: topology.surface.viewFormat,
245
+ sampleCount: 1 as const,
246
+ domain: 'display-encoded' as const,
247
+ },
248
+ }),
206
249
  storage: {
207
250
  texture: texture.value,
208
251
  view: storage.value,
209
252
  format: topology.surface.storageFormat,
210
253
  sampleCount: 1,
254
+ domain: 'display-encoded',
211
255
  },
212
256
  });
213
257
  }
@@ -232,13 +276,42 @@ export interface RenderPipelineGpuDrivenProjection {
232
276
 
233
277
  export interface RenderPipelineBuildContext<FrameCtx extends RenderPipelineFrame> {
234
278
  readonly graph: RenderGraphBuilder<FrameCtx>;
279
+ /**
280
+ * Renderer-owned capability facts needed for admission decisions. The
281
+ * Standard temporal producer must use the live device probe rather than
282
+ * inferring rgba16float support from the selected surface format.
283
+ */
284
+ readonly capabilities?: Pick<RhiCaps, 'rgba16floatRenderable'>;
285
+ /**
286
+ * Renderer-owned TAA history targets. The graph sees only imported typed
287
+ * targets; opaque RHI handles remain inside RenderFrameState.
288
+ */
289
+ readonly taaHistory?: {
290
+ readonly currentColor: RenderPipelineTarget;
291
+ readonly previousColor: RenderPipelineTarget;
292
+ readonly currentTemporal: RenderPipelineTarget;
293
+ readonly previousTemporal: RenderPipelineTarget;
294
+ };
295
+ /** Renderer-owned, prewarmed encoder for one graph mip level. */
296
+ readonly encodeTransmissionMip?: (input: {
297
+ readonly pass: RhiRenderPassEncoder;
298
+ readonly frame: FrameCtx;
299
+ readonly resources: GraphResourceResolver;
300
+ readonly source: GraphTextureView;
301
+ readonly destination: GraphTextureView;
302
+ readonly level: number;
303
+ }) => void;
235
304
  projectGpuDriven(target: {
236
305
  readonly format: TextureFormat;
237
306
  readonly sampleCount: 1 | 4;
238
307
  }): Result<RenderPipelineGpuDrivenProjection | undefined, RenderPipelineBuildError>;
239
308
  contributeFeatures(
240
309
  targets: readonly RenderPipelineFeatureTarget[],
310
+ semanticTargets?: readonly RenderPipelineTarget[],
311
+ namedTargets?: Readonly<Record<string, RenderPipelineTarget>>,
241
312
  ): Result<void, RenderPipelineBuildError>;
313
+ /** Whether a producer-owned feature is installed for this graph build. */
314
+ hasFeature?(identity: string): boolean;
242
315
  }
243
316
 
244
317
  export type RenderPipelineBuildError = RenderGraphError | RenderError | RhiError;