@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
@@ -4,6 +4,7 @@
4
4
  import { HANDLE_NINESLICE_QUAD, resolveAssetHandle } from '@forgeax/engine-assets-runtime';
5
5
  import type { World } from '@forgeax/engine-ecs';
6
6
  import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
7
+ import { mat4 } from '@forgeax/engine-math';
7
8
  import {
8
9
  type CurrentFrameObservationLease,
9
10
  createCurrentFrameObservationLease,
@@ -21,6 +22,7 @@ import type { MaterialRenderState, MeshAsset } from '@forgeax/engine-types';
21
22
  import { handleSlot, toShared } from '@forgeax/engine-types';
22
23
  import type { MeshGpuHandles } from '../device/gpu-residency';
23
24
  import { ObservationUnavailableError, type ObservationUnavailableReason } from '../errors/render';
25
+ import type { FogFrame } from '../extract/environment';
24
26
  import type { GpuDrivenProduction, PreparedGpuDrivenFrame } from '../gpu-driven/production-raster';
25
27
  import { GpuBuffer } from '../gpu-resource';
26
28
  import { GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_VERTEX } from '../gpu-usage';
@@ -40,6 +42,7 @@ import {
40
42
  TRANSPARENT_SORT_MODE_LAYER_Y,
41
43
  TRANSPARENT_SORT_MODE_LAYER_Z,
42
44
  } from '../systems/transparent-sort-config';
45
+ import type { TransmissionDemand } from '../transmission/projection';
43
46
  import {
44
47
  buildPerFrameBindGroups,
45
48
  prepareFrameLighting,
@@ -184,6 +187,7 @@ export async function observeCurrentFrame(
184
187
  });
185
188
  }
186
189
 
190
+ import { createTemporalView, resolveTemporalReset } from '../temporal/view';
187
191
  import {
188
192
  acquireSwapChainTarget,
189
193
  graphExecutionPhase,
@@ -191,6 +195,7 @@ import {
191
195
  resolveSpotShadowMapSize,
192
196
  } from './frame-targets';
193
197
  import {
198
+ computeProjectionMatrix,
194
199
  computeViewMatrix,
195
200
  driveLazyEquirectProjection,
196
201
  selectLazyEquirectHandle,
@@ -206,7 +211,7 @@ import {
206
211
  executeCompiledFrameGraph,
207
212
  type RenderFeatureGraphCandidate,
208
213
  } from './typed-frame-graph';
209
- import { writeViewUbo } from './view-ubo';
214
+ import { writePointsLinesViewUbo, writeViewUbo } from './view-ubo';
210
215
 
211
216
  /**
212
217
  * A frame-local material table. Repeated snapshot objects share one UBO slot;
@@ -304,6 +309,7 @@ export function recordFrame(
304
309
  skybox: SkyboxSnapshot | undefined,
305
310
  skyboxCount: number,
306
311
  postProcessParams: ReadonlyMap<string, Uint8Array>,
312
+ fog: FogFrame | undefined,
307
313
  // feat-20260709-editor-world-partition ENGINE-fix-round2 (defect 2): the
308
314
  // full worlds[] list passed to `renderer.draw`, indexed by
309
315
  // RenderableSnapshot.worldId so the record stage resolves each renderable's
@@ -320,6 +326,11 @@ export function recordFrame(
320
326
  },
321
327
  renderReadLeases?: readonly RenderReadLease[],
322
328
  featureGraphCandidate?: RenderFeatureGraphCandidate,
329
+ pointsLinesOwner?: import('./render-context').PointsLinesRecordOwner,
330
+ environmentSignature = '',
331
+ fogSignature = '',
332
+ environmentReady = true,
333
+ transmissionDemand?: TransmissionDemand,
323
334
  ): boolean {
324
335
  // The `try / finally` wrapper advances `frameState.frameNumber` exactly
325
336
  // once per `recordFrame` invocation regardless of which early-return
@@ -520,6 +531,8 @@ export function recordFrame(
520
531
  graphShadowMapSize,
521
532
  preparedGpuDriven,
522
533
  featureGraphCandidate,
534
+ cameras.length === 0,
535
+ transmissionDemand,
523
536
  ),
524
537
  );
525
538
  if (preflightGraph === null) return false;
@@ -538,6 +551,79 @@ export function recordFrame(
538
551
  const targetW = swapTarget.targetW;
539
552
  const targetH = swapTarget.targetH;
540
553
 
554
+ const temporalView =
555
+ camera.antialias === 'taa' && environmentReady
556
+ ? (() => {
557
+ const created = createTemporalView({
558
+ antialias: camera.antialias,
559
+ width: targetW,
560
+ height: targetH,
561
+ frameIndex: frameState.successfulTemporalFrameIndex ?? 0,
562
+ viewIdentity: `camera:${camera.entityKey ?? 0}`,
563
+ environmentSignature,
564
+ fogSignature,
565
+ deviceGeneration: internals.deviceScope.generation,
566
+ ...(camera.historyVersion === undefined
567
+ ? {}
568
+ : { historyVersion: camera.historyVersion }),
569
+ });
570
+ const previous = frameState.lastSuccessfulTemporalView;
571
+ const currentUnjitteredViewProjection = mat4.multiply(
572
+ mat4.create(),
573
+ computeProjectionMatrix(camera),
574
+ computeViewMatrix(camera),
575
+ );
576
+ const resetCandidate = createTemporalView({
577
+ antialias: created.input.antialias,
578
+ width: created.input.width,
579
+ height: created.input.height,
580
+ frameIndex: created.input.frameIndex,
581
+ historyVersion: created.input.historyVersion,
582
+ viewIdentity: created.input.viewIdentity,
583
+ environmentSignature,
584
+ fogSignature,
585
+ deviceGeneration: internals.deviceScope.generation,
586
+ cameraCut: created.input.cameraCut,
587
+ historyValid: false,
588
+ currentUnjitteredViewProjection,
589
+ });
590
+ const resetReason = resolveTemporalReset(previous, resetCandidate);
591
+ return createTemporalView({
592
+ ...resetCandidate.input,
593
+ frameIndex: resetReason === undefined ? resetCandidate.input.frameIndex : 0,
594
+ historyValid: previous !== undefined && resetReason === undefined,
595
+ currentUnjitteredViewProjection,
596
+ resetReason,
597
+ ...(resetReason !== undefined ||
598
+ previous?.currentUnjitteredViewProjection === undefined
599
+ ? {}
600
+ : {
601
+ previousUnjitteredViewProjection: previous.currentUnjitteredViewProjection,
602
+ }),
603
+ });
604
+ })()
605
+ : undefined;
606
+ frameState.pendingTemporalCommit =
607
+ cameras.length === 0 || !environmentReady || internals.deviceScope === undefined
608
+ ? { kind: 'none' }
609
+ : temporalView === undefined
610
+ ? {
611
+ kind: 'off',
612
+ view: createTemporalView({
613
+ antialias: camera.antialias,
614
+ width: targetW,
615
+ height: targetH,
616
+ frameIndex: frameState.successfulTemporalFrameIndex ?? 0,
617
+ viewIdentity: `camera:${camera.entityKey ?? 0}`,
618
+ environmentSignature,
619
+ fogSignature,
620
+ deviceGeneration: internals.deviceScope.generation,
621
+ }),
622
+ }
623
+ : { kind: 'taa', view: temporalView };
624
+ const recordCamera: CameraSnapshot =
625
+ temporalView === undefined ? camera : { ...camera, temporal: temporalView };
626
+
541
627
  const depthView: TextureView | null = null;
542
628
  // feat-20260709 M3 / D-3: clear-color read from the active CameraSnapshot's
543
629
  // single `clearColor` array field (first-archetype-hit per OOS-2). When the
@@ -582,7 +668,7 @@ export function recordFrame(
582
668
  const { tonemapActive, skyboxActive } = resolveSkyboxActive(
583
669
  internals,
584
670
  frameState,
585
- camera,
671
+ recordCamera,
586
672
  skybox,
587
673
  );
588
674
 
@@ -698,7 +784,18 @@ export function recordFrame(
698
784
  light,
699
785
  lights,
700
786
  frameState.spotShadowSnapshots,
787
+ fog,
788
+ temporalView,
701
789
  );
790
+ if (pipelineState.pointsLinesViewBuffer !== undefined) {
791
+ writePointsLinesViewUbo(
792
+ internals.device.queue,
793
+ pipelineState.pointsLinesViewBuffer,
794
+ camera,
795
+ targetW,
796
+ targetH,
797
+ );
798
+ }
702
799
  writeShadowCasterUniforms(
703
800
  internals.device.queue,
704
801
  pipelineState.shadowCasterCascadeBuffer,
@@ -773,12 +870,29 @@ export function recordFrame(
773
870
  // errorRegistry + shader-cache lookups) surfaces (`internals` itself satisfies
774
871
  // `RenderSystemRuntime` so `runtime: internals` is a zero-cost reference). The
775
872
  // 0-consumed `skyboxCount` residual is dropped.
873
+ // Camera-owned temporal controls are projected into the per-frame
874
+ // post-process parameter map at record time. The extracted ECS map only
875
+ // carries explicit PostProcessParams components; without this bridge the
876
+ // builtin motion-blur pass receives its all-zero registration default and
877
+ // becomes a no-op even though the temporal scene target is populated.
878
+ const framePostProcessParams = new Map(postProcessParams);
879
+ if (camera.motionBlur !== undefined) {
880
+ const motionBlurParams = new Uint8Array(16);
881
+ const motionBlurView = new DataView(motionBlurParams.buffer);
882
+ motionBlurView.setFloat32(0, camera.motionBlur.shutterAngle, true);
883
+ motionBlurView.setFloat32(4, camera.motionBlur.maxRadiusPixels, true);
884
+ motionBlurView.setUint32(8, camera.motionBlur.sampleCount, true);
885
+ motionBlurView.setUint32(12, temporalView?.historyValid === true ? 0 : 1, true);
886
+ framePostProcessParams.set('forgeax.motion-blur', motionBlurParams);
887
+ }
888
+
776
889
  const passCtx: _InternalRenderPipelineContext = {
777
890
  assets: internals.assets,
778
891
  world,
779
892
  gpuDrivenEntityKeys: gpuOwnedEntityKeys,
780
893
  store: internals.gpuStore,
781
894
  pipelineState,
895
+ bloomResources: pipelineState.perPassResources.getBloomResources?.() ?? null,
782
896
  runtime: internals,
783
897
  encoder,
784
898
  view,
@@ -786,7 +900,7 @@ export function recordFrame(
786
900
  targetW,
787
901
  targetH,
788
902
  currentTexture,
789
- camera,
903
+ camera: recordCamera,
790
904
  tonemapActive,
791
905
  geometryColorView,
792
906
  geometryDepthView,
@@ -807,7 +921,7 @@ export function recordFrame(
807
921
  msaaActive,
808
922
  geometryColorResolveView,
809
923
  ldrSpriteColorView,
810
- postProcessParams,
924
+ postProcessParams: framePostProcessParams,
811
925
  dispatch: transparentDispatch,
812
926
  hdrpClusterBindGroup,
813
927
  hdrpClusterMembershipBindGroup,
@@ -816,6 +930,7 @@ export function recordFrame(
816
930
  materialSlots,
817
931
  materialSlotOwners,
818
932
  materialSlotCount,
933
+ pointsLines: pointsLinesOwner,
819
934
  materialBgAssemblyCache: frameState.materialBgAssemblyCache,
820
935
  directionalShadowCacheReuse: directionalShadowCache.reuse,
821
936
  ...(profilePhase !== undefined ? { profilePhase } : {}),
@@ -21,6 +21,8 @@ import type { InstanceBufferCacheEntry } from '../instance-buffer-cache';
21
21
  import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from '../materials';
22
22
  import { SKIN_MATERIAL_SHADER_ID } from '../pbr-pipeline';
23
23
  import { renderStateHash, variantSetFromVertexLayoutProjection } from '../pipeline-spec';
24
+ import type { PointsLinesRecordPlan } from '../points-lines/record';
25
+ import { POINTS_LINES_MATERIAL_SHADER_ID } from '../points-lines/record';
24
26
  import type { RenderRecordPhase } from '../render-contract';
25
27
  import type { MaterialSnapshot } from '../render-system-extract';
26
28
  import { worldEntityKey } from './frame-snapshot';
@@ -40,6 +42,7 @@ import {
40
42
  } from './mesh-ssbo';
41
43
  import type { _InternalRenderPipelineContext } from './render-context';
42
44
  import { MATERIAL_PER_ENTITY_STRIDE } from './render-context';
45
+ import { POINTS_LINES_VIEW_SLOT_STRIDE, writePointsLinesViewUbo } from './view-ubo';
43
46
 
44
47
  type GeometryInstanceDraw = {
45
48
  readonly instanceBuffer: Buffer;
@@ -54,7 +57,7 @@ type GeometryBindingState = {
54
57
 
55
58
  type MaterialPipelineLookup = {
56
59
  readonly materialShaderId: string;
57
- readonly tonemapActive: boolean;
60
+ readonly isHdrTarget: boolean;
58
61
  readonly renderStateKey: string;
59
62
  readonly topology: PrimitiveTopology;
60
63
  readonly indexFormat: 'uint16' | 'uint32';
@@ -68,6 +71,27 @@ type MaterialPipelineLookup = {
68
71
 
69
72
  type GeometryRecordProfileSegment = 'material-bind-groups' | 'pipeline-selection' | 'draw-submit';
70
73
 
74
+ type GeometryRenderState = ReturnType<typeof geometryRenderStateForTopology>;
75
+
76
+ /**
77
+ * Resolve the depth contract for a geometry pass without changing the base
78
+ * material state. Temporal scene-data shares the main pass depth attachment:
79
+ * it is read-only and accepts the equal depth produced by the unjittered
80
+ * temporal projection, while still rejecting fragments behind the visible
81
+ * surface.
82
+ */
83
+ export function geometryRenderStateForPass(
84
+ base: GeometryRenderState,
85
+ passKind: PassKind,
86
+ ): GeometryRenderState {
87
+ if (passKind !== 'temporal') return base;
88
+ return {
89
+ ...base,
90
+ depthWriteEnabled: false,
91
+ depthCompare: 'less-equal' as const,
92
+ };
93
+ }
94
+
71
95
  function geometryRecordPhase(
72
96
  passKind: PassKind,
73
97
  segment: GeometryRecordProfileSegment,
@@ -115,6 +139,23 @@ function submitSubmeshDraws(
115
139
  }
116
140
  }
117
141
 
142
+ /**
143
+ * Issues a prepared Points/Lines draw into the already-open geometry pass.
144
+ * Pass lifetime, attachments, bind groups, and submission remain owned by the
145
+ * existing main-pass interpreter.
146
+ */
147
+ export function recordPointsLinesDraw(
148
+ pass: RhiRenderPassEncoder,
149
+ plan: PointsLinesRecordPlan,
150
+ ): void {
151
+ if (plan.drawCount === 0) return;
152
+ if (plan.indexCount > 0) {
153
+ pass.drawIndexed(plan.indexCount, 1, 0, 0, 0);
154
+ return;
155
+ }
156
+ pass.draw(plan.vertexCount, 1, 0, 0);
157
+ }
158
+
118
159
  /**
119
160
  * feat-20260704 M3/w19: per-entity geometry (main colour) draw loop, extracted
120
161
  * verbatim from recordMainPass. Walks `c.validatedOrdered`, selects the
@@ -155,8 +196,15 @@ export function recordGeometryDraws(
155
196
  msaaActive,
156
197
  validatedOrdered,
157
198
  splitLdrSprite,
199
+ viewBindGroup,
158
200
  } = c;
159
201
  const colorFormatOverride = c.transparentColorFormat as GPUTextureFormat | undefined;
202
+ // A no-tone frame may still render into the graph-owned rgba16float target
203
+ // (the linear-LDR route). Shader variants must follow the attachment's
204
+ // numeric domain rather than the camera's tone-map switch, otherwise the
205
+ // LDR/OETF fragment entry point is encoded once here and again by the
206
+ // output transform.
207
+ const isHdrTarget = tonemapActive || colorFormatOverride === 'rgba16float';
160
208
  let lastVertexBuffer: GpuBuffer | null = null;
161
209
  let lastIndexBuffer: GpuBuffer | null = null;
162
210
  const bindingState: GeometryBindingState = {
@@ -205,7 +253,7 @@ export function recordGeometryDraws(
205
253
  if (cachedLookups !== undefined) {
206
254
  for (const cached of cachedLookups) {
207
255
  if (
208
- cached.tonemapActive === tonemapActive &&
256
+ cached.isHdrTarget === isHdrTarget &&
209
257
  cached.renderStateKey === renderStateKey &&
210
258
  cached.topology === topology &&
211
259
  cached.indexFormat === indexFormat &&
@@ -219,10 +267,11 @@ export function recordGeometryDraws(
219
267
  }
220
268
  }
221
269
  }
222
- const resolvedVariantSetResult = variantSetFromVertexLayoutProjection(
223
- layoutProjection,
224
- variantSet,
225
- );
270
+ const resolvedVariantSetResult =
271
+ variantSet === undefined &&
272
+ (materialShaderId === 'forgeax::sprite' || materialShaderId === 'forgeax::sprite-lit')
273
+ ? ({ ok: true, value: undefined } as const)
274
+ : variantSetFromVertexLayoutProjection(layoutProjection, variantSet);
226
275
  if (!resolvedVariantSetResult.ok) {
227
276
  runtime.errorRegistry.fire(resolvedVariantSetResult.error);
228
277
  return null;
@@ -231,7 +280,7 @@ export function recordGeometryDraws(
231
280
  const resolvePipeline = () =>
232
281
  runtime.getMaterialShaderPipeline?.(
233
282
  materialShaderId,
234
- tonemapActive,
283
+ isHdrTarget,
235
284
  renderState,
236
285
  topology,
237
286
  indexFormat,
@@ -249,25 +298,37 @@ export function recordGeometryDraws(
249
298
  profilePhase === undefined
250
299
  ? resolvePipeline()
251
300
  : profileGeometrySegment(c, passKind, 'pipeline-selection', resolvePipeline);
252
- const nextLookup: MaterialPipelineLookup = {
253
- materialShaderId,
254
- tonemapActive,
255
- renderStateKey,
256
- topology,
257
- indexFormat,
258
- variantSet,
259
- passKind,
260
- layoutProjection,
261
- sampleCount,
262
- colorFormatOverride: colorFormat,
263
- handle,
264
- };
265
- if (shaderLookupCache === undefined) {
266
- materialPipelineLookupCache.set(materialShaderId, new Map([[renderStateKey, [nextLookup]]]));
267
- } else if (cachedLookups === undefined) {
268
- shaderLookupCache.set(renderStateKey, [nextLookup]);
269
- } else {
270
- cachedLookups.push(nextLookup);
301
+ // A null handle is a transient async-build signal (`rhi-not-available`),
302
+ // not a stable pipeline result. Do not memoize it in this frame's lookup:
303
+ // caching the first pending lookup would turn a one-frame shader warm-up
304
+ // into a permanent skip for every later frame in a tight smoke loop. The
305
+ // owning runtime cache remains the SSOT; retrying here is bounded by the
306
+ // existing per-frame draw path and preserves the explicit skip-draw
307
+ // recovery while the pipeline becomes ready.
308
+ if (handle !== null) {
309
+ const nextLookup: MaterialPipelineLookup = {
310
+ materialShaderId,
311
+ isHdrTarget,
312
+ renderStateKey,
313
+ topology,
314
+ indexFormat,
315
+ variantSet,
316
+ passKind,
317
+ layoutProjection,
318
+ sampleCount,
319
+ colorFormatOverride: colorFormat,
320
+ handle,
321
+ };
322
+ if (shaderLookupCache === undefined) {
323
+ materialPipelineLookupCache.set(
324
+ materialShaderId,
325
+ new Map([[renderStateKey, [nextLookup]]]),
326
+ );
327
+ } else if (cachedLookups === undefined) {
328
+ shaderLookupCache.set(renderStateKey, [nextLookup]);
329
+ } else {
330
+ cachedLookups.push(nextLookup);
331
+ }
271
332
  }
272
333
  return handle;
273
334
  };
@@ -276,6 +337,13 @@ export function recordGeometryDraws(
276
337
  const entry = validatedOrdered[i];
277
338
  if (entry === undefined) continue;
278
339
 
340
+ // Points/Lines share the Standard geometry pass. Their retained source
341
+ // is prepared once by the renderer owner, while this loop remains the
342
+ // sole pass/draw submission owner and preserves the authored topology.
343
+ const pointsLinesSubmission = c.pointsLines?.prepare(entry, frameState.isHdrpActive);
344
+ if (entry.source.pointsLines !== undefined && pointsLinesSubmission?.plan.drawCount !== 1)
345
+ continue;
346
+
279
347
  if (
280
348
  passKind === 'forward' &&
281
349
  c.gpuDrivenEntityKeys.has(worldEntityKey(entry.source.worldId, entry.source.entityKey))
@@ -316,6 +384,70 @@ export function recordGeometryDraws(
316
384
  lastStencilReference = stencilReference;
317
385
  }
318
386
 
387
+ if (pointsLinesSubmission !== undefined && entry.source.pointsLines !== undefined) {
388
+ const pointsLinesMaterial: MaterialSnapshot = {
389
+ ...entry.source.material,
390
+ materialShaderId: POINTS_LINES_MATERIAL_SHADER_ID,
391
+ materialParamSchema:
392
+ runtime.getParamSchema?.(POINTS_LINES_MATERIAL_SHADER_ID) ??
393
+ entry.source.material.materialParamSchema,
394
+ };
395
+ const materialSlot = materialSlotIndices[i]?.[0] ?? 0;
396
+ const pointsLinesBindGroup = resolveMaterialBindGroup(
397
+ materialSlot,
398
+ pointsLinesMaterial,
399
+ entry.source.entityKey,
400
+ entry.world ?? c.world,
401
+ );
402
+ const pointsLinesPipeline = resolveMaterialPipeline(
403
+ POINTS_LINES_MATERIAL_SHADER_ID,
404
+ {
405
+ ...pointsLinesMaterial.renderState,
406
+ cullMode: 'none',
407
+ },
408
+ 'triangle-list',
409
+ 'uint32',
410
+ undefined,
411
+ colorFormatOverride,
412
+ pointsLinesSubmission.layoutProjection,
413
+ );
414
+ if (pointsLinesPipeline === null) continue;
415
+ if (pipelineState.pointsLinesViewBuffer === undefined) continue;
416
+ writePointsLinesViewUbo(
417
+ runtime.device.queue,
418
+ pipelineState.pointsLinesViewBuffer,
419
+ c.camera,
420
+ c.targetW,
421
+ c.targetH,
422
+ entry.source.transform.world,
423
+ entry.source.pointsLines.style,
424
+ i * POINTS_LINES_VIEW_SLOT_STRIDE,
425
+ );
426
+ pass.setBindGroup(
427
+ 0,
428
+ viewBindGroup as BindGroup,
429
+ new Uint32Array([i * POINTS_LINES_VIEW_SLOT_STRIDE]),
430
+ 0,
431
+ 1,
432
+ );
433
+ pass.setPipeline(pointsLinesPipeline);
434
+ pass.setVertexBuffer(0, pointsLinesSubmission.vertexBuffer);
435
+ pass.setIndexBuffer(pointsLinesSubmission.indexBuffer, 'uint32');
436
+ materialGroup1DynamicOffsets[0] = materialSlot * MATERIAL_PER_ENTITY_STRIDE;
437
+ pass.setBindGroup(1, pointsLinesBindGroup, materialGroup1DynamicOffsets, 0, 1);
438
+ const pointsLinesMeshGroup = meshBindGroup ?? meshGroup2;
439
+ if (pointsLinesMeshGroup === null) continue;
440
+ pass.setBindGroup(2, pointsLinesMeshGroup, meshGroup2DynamicOffsets);
441
+ pass.setBindGroup(
442
+ 3,
443
+ identityInstanceDraws[0]?.instanceBindGroup ??
444
+ resolveGeometryInstancesBindGroup(c, identityInstanceBuffer),
445
+ );
446
+ recordPointsLinesDraw(pass, pointsLinesSubmission.plan);
447
+ pass.setBindGroup(0, viewBindGroup as BindGroup, [0]);
448
+ continue;
449
+ }
450
+
319
451
  if (entry.mesh.vertexBuffer !== lastVertexBuffer) {
320
452
  pass.setVertexBuffer(0, entry.mesh.vertexBuffer.handle);
321
453
  lastVertexBuffer = entry.mesh.vertexBuffer;
@@ -414,7 +546,7 @@ export function recordGeometryDraws(
414
546
  skinResources !== null && skinVariantSetResult.ok
415
547
  ? (runtime.getMaterialShaderPipeline?.(
416
548
  SKIN_MATERIAL_SHADER_ID,
417
- tonemapActive,
549
+ isHdrTarget,
418
550
  entry.source.material.renderState,
419
551
  entry.mesh.submeshes[0]?.topology ?? 'triangle-list',
420
552
  entry.mesh.indexFormat,
@@ -635,7 +767,7 @@ export function recordGeometryDraws(
635
767
  // Preserve the dedicated sprite-pass state when the linear-LDR graph
636
768
  // routes a sprite through this generic geometry path. Negative scale
637
769
  // flips winding, so back-face culling would erase the quad.
638
- const pipelineRenderState = isSpriteShader
770
+ const basePipelineRenderState = isSpriteShader
639
771
  ? {
640
772
  ...submeshMaterial.renderState,
641
773
  depthWriteEnabled: false,
@@ -644,6 +776,7 @@ export function recordGeometryDraws(
644
776
  blend: submeshMaterial.renderState?.blend ?? SPRITE_PREMULTIPLIED_ALPHA_BLEND,
645
777
  }
646
778
  : geometryRenderStateForTopology(smTopology, submeshMaterial.renderState);
779
+ const pipelineRenderState = geometryRenderStateForPass(basePipelineRenderState, passKind);
647
780
  let smPipelineHandle: typeof pipelineState.unlitPipeline;
648
781
  if (smMaterialShaderId === undefined || smMaterialShaderId === 'forgeax::default-unlit') {
649
782
  const unlitShaderId = smMaterialShaderId ?? 'forgeax::default-unlit';
@@ -671,7 +804,7 @@ export function recordGeometryDraws(
671
804
  smPipelineHandle =
672
805
  unlitRsp ??
673
806
  (colorFormatOverride === undefined
674
- ? selectGeometryPipeline(pipelineState, tonemapActive, msaaActive)
807
+ ? selectGeometryPipeline(pipelineState, isHdrTarget, msaaActive)
675
808
  : null);
676
809
  } else if (smMaterialShaderId !== undefined) {
677
810
  // feat-20260609 M4.5 / w38 (D-11): the variantSet handed to
@@ -701,18 +834,23 @@ export function recordGeometryDraws(
701
834
  ? ''
702
835
  : 'CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true'
703
836
  : 'CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true';
704
- const authoredVariantSet =
705
- isSpriteShader && entry.source.spriteInstances !== undefined ? '' : entry.variantSet;
706
- const variantSet =
707
- authoredVariantSet === undefined
837
+ // Sprite's base request must retain the boot-selected artifact. Only
838
+ // SpriteInstances uses the explicit empty key for the
839
+ // PER_INSTANCE_REGION=true variant; synthesizing the generic PBR
840
+ // capability axes for a base sprite would invent a lazy module label
841
+ // that has no boot seed and skip the first HDR draw.
842
+ const variantSet = isSpriteShader
843
+ ? smMaterialShaderId === 'forgeax::sprite' && entry.source.spriteInstances !== undefined
844
+ ? ''
845
+ : undefined
846
+ : entry.variantSet === undefined
708
847
  ? capabilityVariantSet
709
848
  : capabilityVariantSet === ''
710
- ? authoredVariantSet
711
- : `${capabilityVariantSet}+${authoredVariantSet}`;
712
- const projectionVariantSetResult = variantSetFromVertexLayoutProjection(
713
- entry.mesh.layoutProjection,
714
- variantSet,
715
- );
849
+ ? entry.variantSet
850
+ : `${capabilityVariantSet}+${entry.variantSet}`;
851
+ const projectionVariantSetResult = isSpriteShader
852
+ ? ({ ok: true, value: variantSet } as const)
853
+ : variantSetFromVertexLayoutProjection(entry.mesh.layoutProjection, variantSet);
716
854
  if (!projectionVariantSetResult.ok) {
717
855
  runtime.errorRegistry.fire(projectionVariantSetResult.error);
718
856
  continue;
@@ -741,7 +879,7 @@ export function recordGeometryDraws(
741
879
  // fires on per-submesh topology variance miss.
742
880
  smPipelineHandle = cachedPipeline ?? null;
743
881
  } else {
744
- smPipelineHandle = selectGeometryPipeline(pipelineState, tonemapActive, msaaActive);
882
+ smPipelineHandle = selectGeometryPipeline(pipelineState, isHdrTarget, msaaActive);
745
883
  }
746
884
 
747
885
  if (smPipelineHandle === null) {