@forgeax/engine-render 0.1.4 → 0.1.6

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 (918) hide show
  1. package/README.md +130 -641
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
  4. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
  6. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
  8. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
  10. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
  11. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
  12. package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
  13. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
  14. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
  15. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
  16. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
  17. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
  18. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
  20. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
  21. package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
  22. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
  23. package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
  24. package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
  26. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
  27. package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
  28. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
  29. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
  30. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
  31. package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
  32. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
  33. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
  34. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
  36. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
  37. package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
  38. package/dist/assembly/backend-contract.d.ts.map +1 -0
  39. package/dist/assembly/factory.d.ts +207 -0
  40. package/dist/assembly/factory.d.ts.map +1 -0
  41. package/dist/assembly/host-contract.d.ts +84 -0
  42. package/dist/assembly/host-contract.d.ts.map +1 -0
  43. package/dist/{renderer → assembly}/material/assembly.d.ts +0 -1
  44. package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
  45. package/dist/assembly/material/pipeline-projection.d.ts +30 -0
  46. package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
  47. package/dist/authoring.d.ts +10 -11
  48. package/dist/authoring.d.ts.map +1 -1
  49. package/dist/authoring.mjs +25 -3
  50. package/dist/authoring.mjs.map +1 -1
  51. package/dist/chunk-CQXZC5XI.mjs +182 -0
  52. package/dist/chunk-CQXZC5XI.mjs.map +1 -0
  53. package/dist/chunk-QC4VW3XJ.mjs +79 -0
  54. package/dist/chunk-QC4VW3XJ.mjs.map +1 -0
  55. package/dist/chunk-SCRSAK5B.mjs +480 -0
  56. package/dist/chunk-SCRSAK5B.mjs.map +1 -0
  57. package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
  58. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
  59. package/dist/components/glyph-text.d.ts +1 -1
  60. package/dist/components/glyph-text.d.ts.map +1 -1
  61. package/dist/components/index.d.ts +2 -2
  62. package/dist/components/index.d.ts.map +1 -1
  63. package/dist/components/instances.d.ts +1 -1
  64. package/dist/components/instances.d.ts.map +1 -1
  65. package/dist/components/light-helpers.d.ts +1 -1
  66. package/dist/components/light-helpers.d.ts.map +1 -1
  67. package/dist/components/mesh-filter.d.ts +7 -7
  68. package/dist/components/mesh-filter.d.ts.map +1 -1
  69. package/dist/components/scene-instance.d.ts +11 -11
  70. package/dist/components/skybox-background.d.ts +56 -0
  71. package/dist/components/skybox-background.d.ts.map +1 -0
  72. package/dist/components/skylight.d.ts +55 -0
  73. package/dist/components/skylight.d.ts.map +1 -0
  74. package/dist/components/sprite-animation.d.ts +2 -3
  75. package/dist/components/sprite-animation.d.ts.map +1 -1
  76. package/dist/components/sprite-instances.d.ts +1 -1
  77. package/dist/components/sprite-playback-mode.d.ts +6 -1
  78. package/dist/components/sprite-playback-mode.d.ts.map +1 -1
  79. package/dist/components/sprite-region-override.d.ts +2 -3
  80. package/dist/components/sprite-region-override.d.ts.map +1 -1
  81. package/dist/components/tile-layer.d.ts +5 -0
  82. package/dist/components/tile-layer.d.ts.map +1 -1
  83. package/dist/construct-renderer.d.ts +18 -1
  84. package/dist/construct-renderer.d.ts.map +1 -1
  85. package/dist/construct-renderer.mjs +27008 -4
  86. package/dist/construct-renderer.mjs.map +1 -1
  87. package/dist/debug-draw-glue.d.ts +2 -53
  88. package/dist/debug-draw-glue.d.ts.map +1 -1
  89. package/dist/device/device-scope.d.ts +83 -0
  90. package/dist/device/device-scope.d.ts.map +1 -0
  91. package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
  92. package/dist/device/gpu-residency.d.ts.map +1 -0
  93. package/dist/device/resource-types.d.ts +8 -0
  94. package/dist/device/resource-types.d.ts.map +1 -0
  95. package/dist/engine-metrics.d.ts +2 -2
  96. package/dist/engine-metrics.d.ts.map +1 -1
  97. package/dist/errors/recover.d.ts +28 -1
  98. package/dist/errors/recover.d.ts.map +1 -1
  99. package/dist/errors/render.d.ts +249 -258
  100. package/dist/errors/render.d.ts.map +1 -1
  101. package/dist/features/fullscreen.d.ts +19 -0
  102. package/dist/features/fullscreen.d.ts.map +1 -0
  103. package/dist/features/host.d.ts +32 -26
  104. package/dist/features/host.d.ts.map +1 -1
  105. package/dist/features/morph/morph-feature.d.ts +39 -5
  106. package/dist/features/morph/morph-feature.d.ts.map +1 -1
  107. package/dist/features/plan.d.ts +182 -0
  108. package/dist/features/plan.d.ts.map +1 -0
  109. package/dist/features/prepared-gpu-work.d.ts +21 -17
  110. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  111. package/dist/features/prepared-graphics-store.d.ts +2 -1
  112. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  113. package/dist/features/prepared-graphics.d.ts +11 -21
  114. package/dist/features/prepared-graphics.d.ts.map +1 -1
  115. package/dist/features/render-graph-compute.d.ts +2 -2
  116. package/dist/features/render-graph-compute.d.ts.map +1 -1
  117. package/dist/features/render-graph-contribution.d.ts +4 -7
  118. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  119. package/dist/features/render-graph-raster.d.ts +2 -2
  120. package/dist/features/render-graph-raster.d.ts.map +1 -1
  121. package/dist/features/render-graph-resources.d.ts +6 -6
  122. package/dist/features/render-graph-resources.d.ts.map +1 -1
  123. package/dist/features/targets.d.ts +5 -5
  124. package/dist/features/targets.d.ts.map +1 -1
  125. package/dist/features/types.d.ts +11 -190
  126. package/dist/features/types.d.ts.map +1 -1
  127. package/dist/features/vocabulary.d.ts +14 -0
  128. package/dist/features/vocabulary.d.ts.map +1 -0
  129. package/dist/fullscreen-post-process-pass.d.ts +4 -25
  130. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  131. package/dist/glyph-text-layout-system.d.ts +3 -2
  132. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  133. package/dist/gpu-driven/batch-topology.d.ts +6 -75
  134. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  135. package/dist/gpu-driven/production-raster.d.ts +13 -112
  136. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  137. package/dist/gpu-driven/view-gpu.d.ts +10 -66
  138. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  139. package/dist/gpu-resource.d.ts +3 -3
  140. package/dist/gpu-scene-schema.d.ts +1 -94
  141. package/dist/gpu-scene-schema.d.ts.map +1 -1
  142. package/dist/gpu-scene.d.ts +7 -33
  143. package/dist/gpu-scene.d.ts.map +1 -1
  144. package/dist/hdrp-buffers.d.ts +3 -53
  145. package/dist/hdrp-buffers.d.ts.map +1 -1
  146. package/dist/ibl/IblPipelineCache.d.ts +74 -180
  147. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  148. package/dist/ibl/skylight-bind-group.d.ts +1 -1
  149. package/dist/index.d.ts +13 -43
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.mjs +165 -3
  152. package/dist/index.mjs.map +1 -1
  153. package/dist/inspection-types.d.ts +69 -0
  154. package/dist/inspection-types.d.ts.map +1 -0
  155. package/dist/instance-buffer-cache.d.ts +1 -4
  156. package/dist/instance-buffer-cache.d.ts.map +1 -1
  157. package/dist/internal.d.ts +1 -73
  158. package/dist/internal.d.ts.map +1 -1
  159. package/dist/internal.mjs +1 -43
  160. package/dist/internal.mjs.map +1 -1
  161. package/dist/lifecycle.d.ts +36 -2
  162. package/dist/lifecycle.d.ts.map +1 -1
  163. package/dist/materials.d.ts +0 -3
  164. package/dist/materials.d.ts.map +1 -1
  165. package/dist/mesh-material-bindings.d.ts +0 -1
  166. package/dist/mesh-material-bindings.d.ts.map +1 -1
  167. package/dist/pbr-pipeline.d.ts +75 -29
  168. package/dist/pbr-pipeline.d.ts.map +1 -1
  169. package/dist/pipeline/standard-forward-lane.d.ts +5 -0
  170. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
  171. package/dist/pipeline/standard-pipeline.d.ts +31 -0
  172. package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
  173. package/dist/pipeline/standard-profile.d.ts +40 -0
  174. package/dist/pipeline/standard-profile.d.ts.map +1 -0
  175. package/dist/pipeline-builder.d.ts +3 -3
  176. package/dist/pipeline-builder.d.ts.map +1 -1
  177. package/dist/pipeline-spec-types.d.ts +24 -0
  178. package/dist/pipeline-spec-types.d.ts.map +1 -0
  179. package/dist/pipeline-spec.d.ts +16 -155
  180. package/dist/pipeline-spec.d.ts.map +1 -1
  181. package/dist/plugin.d.ts +1 -14
  182. package/dist/plugin.d.ts.map +1 -1
  183. package/dist/post-process-errors.d.ts +18 -18
  184. package/dist/post-process-errors.d.ts.map +1 -1
  185. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
  186. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  187. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
  188. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
  189. package/dist/record/frame-lighting.d.ts +7 -73
  190. package/dist/record/frame-lighting.d.ts.map +1 -1
  191. package/dist/record/frame-snapshot.d.ts +44 -44
  192. package/dist/record/frame-snapshot.d.ts.map +1 -1
  193. package/dist/record/frame-targets.d.ts +5 -38
  194. package/dist/record/frame-targets.d.ts.map +1 -1
  195. package/dist/record/frame.d.ts +64 -52
  196. package/dist/record/frame.d.ts.map +1 -1
  197. package/dist/record/helpers.d.ts +3 -2
  198. package/dist/record/helpers.d.ts.map +1 -1
  199. package/dist/record/main-pass-geometry.d.ts +5 -4
  200. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  201. package/dist/record/main-pass-material.d.ts +90 -59
  202. package/dist/record/main-pass-material.d.ts.map +1 -1
  203. package/dist/record/main-pass-sprite-draws.d.ts +28 -3
  204. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  205. package/dist/record/main-pass.d.ts +1 -1
  206. package/dist/record/main-pass.d.ts.map +1 -1
  207. package/dist/record/mesh-ssbo.d.ts +276 -3
  208. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  209. package/dist/record/render-context.d.ts +235 -0
  210. package/dist/record/render-context.d.ts.map +1 -0
  211. package/dist/record/shadow-pass.d.ts +15 -88
  212. package/dist/record/shadow-pass.d.ts.map +1 -1
  213. package/dist/record/skybox-post-pass.d.ts +1 -1
  214. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  215. package/dist/record/typed-frame-graph.d.ts +29 -7
  216. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  217. package/dist/record/view-ubo.d.ts +3 -3
  218. package/dist/record/view-ubo.d.ts.map +1 -1
  219. package/dist/render-contract.d.ts +416 -0
  220. package/dist/render-contract.d.ts.map +1 -0
  221. package/dist/render-data.d.ts.map +1 -1
  222. package/dist/render-graph-primitives.d.ts +14 -362
  223. package/dist/render-graph-primitives.d.ts.map +1 -1
  224. package/dist/render-pipeline.d.ts +25 -64
  225. package/dist/render-pipeline.d.ts.map +1 -1
  226. package/dist/render-system-extract.d.ts +107 -338
  227. package/dist/render-system-extract.d.ts.map +1 -1
  228. package/dist/render-system.d.ts +21 -713
  229. package/dist/render-system.d.ts.map +1 -1
  230. package/dist/scene/render-scene-types.d.ts +58 -0
  231. package/dist/scene/render-scene-types.d.ts.map +1 -0
  232. package/dist/scene/render-scene.d.ts +105 -0
  233. package/dist/scene/render-scene.d.ts.map +1 -0
  234. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
  235. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
  236. package/dist/ssao-buffers.d.ts +22 -3
  237. package/dist/ssao-buffers.d.ts.map +1 -1
  238. package/dist/systems/skin-palette-allocator.d.ts +2 -4
  239. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  240. package/dist/systems/skin-palette-types.d.ts +14 -0
  241. package/dist/systems/skin-palette-types.d.ts.map +1 -0
  242. package/dist/systems/transparent-sort-config.d.ts +23 -2
  243. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  244. package/dist/tilemap-chunk-extract-system.d.ts +4 -3
  245. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
  246. package/dist/typed-render-graph-primitives.d.ts +2 -4
  247. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  248. package/dist/typed-shadow-passes.d.ts +3 -3
  249. package/dist/typed-shadow-passes.d.ts.map +1 -1
  250. package/package.json +23 -23
  251. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
  252. package/src/__tests__/callback-inference.test-d.ts +6 -3
  253. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
  254. package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
  255. package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
  256. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
  257. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
  258. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
  259. package/src/__tests__/factory-contract.integration.test.ts +158 -209
  260. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
  261. package/src/__tests__/frame-observation.contract.test.ts +17 -8
  262. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
  263. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
  264. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +9 -16
  265. package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
  266. package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
  267. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
  268. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
  269. package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
  270. package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
  271. package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
  272. package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
  273. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
  274. package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
  275. package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
  276. package/src/__tests__/gpu-scene.unit.test.ts +10 -24
  277. package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
  278. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
  279. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
  280. package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
  281. package/src/__tests__/material-cooked-projection.unit.test.ts +2 -51
  282. package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
  283. package/src/__tests__/material-static-dynamic-route.unit.test.ts +4 -23
  284. package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
  285. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
  286. package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
  287. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
  288. package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
  289. package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
  290. package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
  291. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
  292. package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
  293. package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
  294. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
  295. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
  296. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
  297. package/src/__tests__/profiler-default-off.test.ts +1 -1
  298. package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
  299. package/src/__tests__/profiler-phase-integration.test.ts +5 -13
  300. package/src/__tests__/profiler-phase-token.test.ts +3 -8
  301. package/src/__tests__/public-surface.test-d.ts +65 -3
  302. package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
  303. package/src/__tests__/render-error-code-owner.test-d.ts +18 -23
  304. package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
  305. package/src/__tests__/render-error-exhaustive.test-d.ts +8 -1
  306. package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
  307. package/src/__tests__/render-feature-context.test-d.ts +16 -40
  308. package/src/__tests__/render-feature-contract.test-d.ts +9 -18
  309. package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
  310. package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
  311. package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
  312. package/src/__tests__/render-feature-plan.test-d.ts +161 -0
  313. package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
  314. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
  315. package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
  316. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
  317. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
  318. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
  319. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
  320. package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
  321. package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
  322. package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
  323. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
  324. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
  325. package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
  326. package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
  327. package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
  328. package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
  329. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +44 -95
  330. package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
  331. package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
  332. package/src/__tests__/ssao-config.unit.test.ts +36 -0
  333. package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
  334. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
  335. package/src/__tests__/standard-descriptors.test-d.ts +22 -0
  336. package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
  337. package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
  338. package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
  339. package/src/__tests__/surface-configuration.unit.test.ts +1 -2
  340. package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
  341. package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
  342. package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
  343. package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
  344. package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
  345. package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
  346. package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
  347. package/src/__tests__/visibility-extract.integration.test.ts +20 -11
  348. package/src/__tests__/visibility-extract.perf.test.ts +66 -32
  349. package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
  350. package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
  351. package/src/__tests__/visibility-instances.integration.test.ts +7 -11
  352. package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
  353. package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
  354. package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
  355. package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
  356. package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
  357. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
  358. package/src/__tests__/vocabulary.unit.test.ts +1 -1
  359. package/src/assembly/backend-contract.ts +57 -0
  360. package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1663 -2690
  361. package/src/assembly/host-contract.ts +101 -0
  362. package/src/{renderer → assembly}/material/assembly.ts +0 -2
  363. package/src/assembly/material/pipeline-projection.ts +63 -0
  364. package/src/authoring.ts +14 -22
  365. package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
  366. package/src/components/glyph-text.ts +3 -2
  367. package/src/components/index.ts +7 -9
  368. package/src/components/instances.ts +4 -5
  369. package/src/components/light-helpers.ts +1 -1
  370. package/src/components/mesh-filter.ts +11 -10
  371. package/src/components/post-process-params.ts +3 -3
  372. package/src/components/scene-instance.ts +12 -12
  373. package/src/components/skybox-background.ts +103 -0
  374. package/src/components/{environment.ts → skylight.ts} +2 -110
  375. package/src/components/sprite-animation.ts +3 -4
  376. package/src/components/sprite-instances.ts +2 -2
  377. package/src/components/sprite-playback-mode.ts +7 -1
  378. package/src/components/sprite-region-override.ts +2 -3
  379. package/src/components/tile-layer.ts +8 -2
  380. package/src/construct-renderer.ts +67 -4
  381. package/src/debug-draw-glue.ts +8 -129
  382. package/src/device/device-scope.ts +306 -0
  383. package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
  384. package/src/device/resource-types.ts +20 -0
  385. package/src/engine-metrics.ts +12 -19
  386. package/src/errors/recover.ts +45 -3
  387. package/src/errors/render.ts +357 -460
  388. package/src/features/fullscreen.ts +46 -0
  389. package/src/features/host.ts +575 -309
  390. package/src/features/morph/morph-feature.ts +195 -105
  391. package/src/features/plan.ts +447 -0
  392. package/src/features/prepared-gpu-work.ts +72 -15
  393. package/src/features/prepared-graphics-store.ts +20 -6
  394. package/src/features/prepared-graphics.ts +12 -71
  395. package/src/features/render-graph-compute.ts +14 -5
  396. package/src/features/render-graph-contribution.ts +43 -63
  397. package/src/features/render-graph-raster.ts +11 -6
  398. package/src/features/render-graph-resources.ts +25 -23
  399. package/src/features/targets.ts +8 -21
  400. package/src/features/types.ts +39 -227
  401. package/src/features/vocabulary.ts +24 -0
  402. package/src/fullscreen-post-process-pass.ts +14 -57
  403. package/src/glyph-text-layout-system.ts +70 -96
  404. package/src/gpu-driven/batch-topology.ts +24 -202
  405. package/src/gpu-driven/production-raster.ts +93 -1108
  406. package/src/gpu-driven/view-gpu.ts +46 -192
  407. package/src/gpu-resource.ts +4 -4
  408. package/src/gpu-scene-schema.ts +11 -99
  409. package/src/gpu-scene.ts +231 -364
  410. package/src/hdrp-buffers.ts +12 -221
  411. package/src/ibl/IblPipelineCache.ts +471 -711
  412. package/src/ibl/skylight-bind-group.ts +4 -4
  413. package/src/index.ts +58 -217
  414. package/src/inspection-types.ts +76 -0
  415. package/src/instance-buffer-cache.ts +1 -29
  416. package/src/internal.ts +6 -85
  417. package/src/lifecycle.ts +64 -19
  418. package/src/materials.ts +7 -29
  419. package/src/mesh-material-bindings.ts +0 -1
  420. package/src/pbr-pipeline.ts +434 -53
  421. package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
  422. package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
  423. package/src/pipeline/standard-profile.ts +65 -0
  424. package/src/pipeline-builder.ts +60 -64
  425. package/src/pipeline-spec-types.ts +28 -0
  426. package/src/pipeline-spec.ts +72 -609
  427. package/src/plugin.ts +3 -75
  428. package/src/post-process-errors.ts +31 -33
  429. package/src/prepare/prepared-graphics-resolver.ts +5 -4
  430. package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
  431. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
  432. package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
  433. package/src/record/frame-lighting.ts +74 -195
  434. package/src/record/frame-snapshot.ts +45 -60
  435. package/src/record/frame-targets.ts +8 -243
  436. package/src/record/frame.ts +509 -796
  437. package/src/record/helpers.ts +6 -11
  438. package/src/record/main-pass-geometry.ts +106 -147
  439. package/src/record/main-pass-material.ts +517 -190
  440. package/src/record/main-pass-sprite-draws.ts +198 -117
  441. package/src/record/main-pass.ts +162 -143
  442. package/src/record/mesh-ssbo.ts +517 -38
  443. package/src/record/render-context.ts +364 -0
  444. package/src/record/shadow-pass.ts +138 -1838
  445. package/src/record/skybox-post-pass.ts +12 -14
  446. package/src/record/typed-frame-graph.ts +215 -254
  447. package/src/record/view-ubo.ts +6 -37
  448. package/src/render-contract.ts +571 -0
  449. package/src/render-data.ts +3 -3
  450. package/src/render-graph-primitives.ts +76 -851
  451. package/src/render-pipeline.ts +104 -188
  452. package/src/render-system-extract.ts +1048 -1729
  453. package/src/render-system.ts +330 -1957
  454. package/src/scene/render-scene-types.ts +64 -0
  455. package/src/scene/render-scene.ts +1032 -0
  456. package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
  457. package/src/ssao-buffers.ts +167 -8
  458. package/src/systems/skin-palette-allocator.ts +21 -64
  459. package/src/systems/skin-palette-types.ts +14 -0
  460. package/src/systems/transparent-sort-config.ts +25 -3
  461. package/src/tilemap-chunk-extract-system.ts +53 -70
  462. package/src/typed-render-graph-primitives.ts +35 -24
  463. package/src/typed-shadow-passes.ts +26 -56
  464. package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
  465. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
  466. package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
  467. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
  468. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
  469. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
  470. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  471. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  472. package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
  473. package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
  474. package/dist/__tests__/camera-temporal.test.d.ts +0 -2
  475. package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
  476. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
  477. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/environment-inspection.test.d.ts +0 -2
  479. package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
  480. package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
  481. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
  482. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
  483. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
  484. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
  485. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
  486. package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
  487. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
  488. package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
  489. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
  490. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
  491. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
  492. package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
  493. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
  494. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
  495. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
  496. package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
  497. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
  498. package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
  499. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
  500. package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
  501. package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
  503. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
  504. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
  505. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
  506. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
  507. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
  508. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
  509. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
  510. package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
  511. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
  512. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  513. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  514. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
  515. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
  517. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
  518. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
  519. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
  520. package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
  521. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
  522. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
  523. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
  524. package/dist/__tests__/plugin.test.d.ts +0 -2
  525. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  526. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
  527. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
  529. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
  531. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
  532. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
  533. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
  534. package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
  535. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
  536. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
  537. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
  538. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
  539. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
  540. package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
  541. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
  542. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
  543. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
  544. package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
  545. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
  547. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
  549. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
  551. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
  552. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
  553. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
  555. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
  556. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
  557. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
  558. package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
  559. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
  561. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
  562. package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
  563. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
  564. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
  565. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
  566. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
  567. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
  568. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
  569. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
  570. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
  571. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
  572. package/dist/chunk-DJIMFYX6.mjs +0 -1439
  573. package/dist/chunk-DJIMFYX6.mjs.map +0 -1
  574. package/dist/chunk-F2SIOCRM.mjs +0 -7423
  575. package/dist/chunk-F2SIOCRM.mjs.map +0 -1
  576. package/dist/chunk-JMSB7AR4.mjs +0 -3
  577. package/dist/chunk-JMSB7AR4.mjs.map +0 -1
  578. package/dist/chunk-KHI6K4C6.mjs +0 -659
  579. package/dist/chunk-KHI6K4C6.mjs.map +0 -1
  580. package/dist/chunk-PORZOL2V.mjs +0 -569
  581. package/dist/chunk-PORZOL2V.mjs.map +0 -1
  582. package/dist/chunk-UOJGMDGP.mjs +0 -29913
  583. package/dist/chunk-UOJGMDGP.mjs.map +0 -1
  584. package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
  585. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
  586. package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
  587. package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
  588. package/dist/components/__tests__/fog.test-d.d.ts +0 -2
  589. package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
  590. package/dist/components/__tests__/fog.test.d.ts +0 -2
  591. package/dist/components/__tests__/fog.test.d.ts.map +0 -1
  592. package/dist/components/atmosphere.d.ts +0 -18
  593. package/dist/components/atmosphere.d.ts.map +0 -1
  594. package/dist/components/environment.d.ts +0 -115
  595. package/dist/components/environment.d.ts.map +0 -1
  596. package/dist/deferred-lighting.d.ts +0 -13
  597. package/dist/deferred-lighting.d.ts.map +0 -1
  598. package/dist/dynamic-texture-store.d.ts +0 -42
  599. package/dist/dynamic-texture-store.d.ts.map +0 -1
  600. package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
  601. package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
  602. package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
  603. package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
  604. package/dist/environment/__tests__/generation.test.d.ts +0 -2
  605. package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
  606. package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
  607. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
  608. package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
  609. package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
  610. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
  611. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
  612. package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
  613. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
  614. package/dist/environment/__tests__/readiness.test.d.ts +0 -2
  615. package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
  616. package/dist/environment/__tests__/recovery.test.d.ts +0 -2
  617. package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
  618. package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
  619. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
  620. package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
  621. package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
  622. package/dist/environment/__tests__/signature.test.d.ts +0 -2
  623. package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
  624. package/dist/environment/descriptors.d.ts +0 -2
  625. package/dist/environment/descriptors.d.ts.map +0 -1
  626. package/dist/environment/extracted-environment.d.ts +0 -53
  627. package/dist/environment/extracted-environment.d.ts.map +0 -1
  628. package/dist/environment/generation.d.ts +0 -62
  629. package/dist/environment/generation.d.ts.map +0 -1
  630. package/dist/environment/gpu-bundle.d.ts +0 -23
  631. package/dist/environment/gpu-bundle.d.ts.map +0 -1
  632. package/dist/environment/graph.d.ts +0 -108
  633. package/dist/environment/graph.d.ts.map +0 -1
  634. package/dist/environment/inspection.d.ts +0 -48
  635. package/dist/environment/inspection.d.ts.map +0 -1
  636. package/dist/environment/lifecycle.d.ts +0 -22
  637. package/dist/environment/lifecycle.d.ts.map +0 -1
  638. package/dist/environment/readiness.d.ts +0 -29
  639. package/dist/environment/readiness.d.ts.map +0 -1
  640. package/dist/environment/signature.d.ts +0 -70
  641. package/dist/environment/signature.d.ts.map +0 -1
  642. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
  643. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
  644. package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
  645. package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
  646. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
  647. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  648. package/dist/extract/directional-csm.d.ts +0 -129
  649. package/dist/extract/directional-csm.d.ts.map +0 -1
  650. package/dist/extract/index.d.ts +0 -5
  651. package/dist/extract/index.d.ts.map +0 -1
  652. package/dist/extract/material-interface.d.ts +0 -56
  653. package/dist/extract/material-interface.d.ts.map +0 -1
  654. package/dist/extract/schema-readers.d.ts +0 -20
  655. package/dist/extract/schema-readers.d.ts.map +0 -1
  656. package/dist/features/graph-contribution.d.ts +0 -64
  657. package/dist/features/graph-contribution.d.ts.map +0 -1
  658. package/dist/features/index.d.ts +0 -21
  659. package/dist/features/index.d.ts.map +0 -1
  660. package/dist/features/morph/index.d.ts +0 -3
  661. package/dist/features/morph/index.d.ts.map +0 -1
  662. package/dist/features/morph/morph-bounds.d.ts +0 -42
  663. package/dist/features/morph/morph-bounds.d.ts.map +0 -1
  664. package/dist/features/scene-temporal.d.ts +0 -45
  665. package/dist/features/scene-temporal.d.ts.map +0 -1
  666. package/dist/features/taa-resolve.d.ts +0 -21
  667. package/dist/features/taa-resolve.d.ts.map +0 -1
  668. package/dist/frame-chain.d.ts +0 -14
  669. package/dist/frame-chain.d.ts.map +0 -1
  670. package/dist/gpu-driven/view-reference.d.ts.map +0 -1
  671. package/dist/gpu-resource-store.d.ts.map +0 -1
  672. package/dist/hdrp-cluster-membership.d.ts +0 -2
  673. package/dist/hdrp-cluster-membership.d.ts.map +0 -1
  674. package/dist/hdrp-pipeline.d.ts +0 -36
  675. package/dist/hdrp-pipeline.d.ts.map +0 -1
  676. package/dist/ibl/cubemap-projection.d.ts +0 -23
  677. package/dist/ibl/cubemap-projection.d.ts.map +0 -1
  678. package/dist/ibl/face-uniforms.d.ts +0 -65
  679. package/dist/ibl/face-uniforms.d.ts.map +0 -1
  680. package/dist/mesh-update-errors.d.ts +0 -71
  681. package/dist/mesh-update-errors.d.ts.map +0 -1
  682. package/dist/mipmap-generator.d.ts +0 -39
  683. package/dist/mipmap-generator.d.ts.map +0 -1
  684. package/dist/param-schema-projection-census.d.ts +0 -18
  685. package/dist/param-schema-projection-census.d.ts.map +0 -1
  686. package/dist/persistent-render-scene.d.ts +0 -158
  687. package/dist/persistent-render-scene.d.ts.map +0 -1
  688. package/dist/pipeline/index.d.ts +0 -11
  689. package/dist/pipeline/index.d.ts.map +0 -1
  690. package/dist/pipeline-errors.d.ts +0 -110
  691. package/dist/pipeline-errors.d.ts.map +0 -1
  692. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
  693. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  694. package/dist/prepare/index.d.ts +0 -4
  695. package/dist/prepare/index.d.ts.map +0 -1
  696. package/dist/prepare/schema-readers.d.ts +0 -11
  697. package/dist/prepare/schema-readers.d.ts.map +0 -1
  698. package/dist/record/__tests__/environment-record.test.d.ts +0 -2
  699. package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
  700. package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
  701. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
  702. package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
  703. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
  704. package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
  705. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
  706. package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
  707. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
  708. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
  709. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
  710. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
  711. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
  712. package/dist/record/frame-observation.d.ts +0 -38
  713. package/dist/record/frame-observation.d.ts.map +0 -1
  714. package/dist/record/index.d.ts +0 -15
  715. package/dist/record/index.d.ts.map +0 -1
  716. package/dist/record/main-pass-skin.d.ts +0 -46
  717. package/dist/record/main-pass-skin.d.ts.map +0 -1
  718. package/dist/record/main-pass-sprite.d.ts +0 -69
  719. package/dist/record/main-pass-sprite.d.ts.map +0 -1
  720. package/dist/record/material-payload.d.ts +0 -43
  721. package/dist/record/material-payload.d.ts.map +0 -1
  722. package/dist/record/material-slot-plan.d.ts +0 -26
  723. package/dist/record/material-slot-plan.d.ts.map +0 -1
  724. package/dist/record/membership-timing.d.ts +0 -232
  725. package/dist/record/membership-timing.d.ts.map +0 -1
  726. package/dist/record/shadow-caster-uniform.d.ts +0 -8
  727. package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
  728. package/dist/record/shadow-submit-mode.d.ts +0 -66
  729. package/dist/record/shadow-submit-mode.d.ts.map +0 -1
  730. package/dist/render-dispatch-membership.d.ts +0 -47
  731. package/dist/render-dispatch-membership.d.ts.map +0 -1
  732. package/dist/render-pipeline-context.d.ts +0 -289
  733. package/dist/render-pipeline-context.d.ts.map +0 -1
  734. package/dist/render-pipeline-target.d.ts +0 -16
  735. package/dist/render-pipeline-target.d.ts.map +0 -1
  736. package/dist/render-scene-projection.d.ts +0 -174
  737. package/dist/render-scene-projection.d.ts.map +0 -1
  738. package/dist/render-system-fold.d.ts +0 -266
  739. package/dist/render-system-fold.d.ts.map +0 -1
  740. package/dist/renderer/asset-service.d.ts +0 -10
  741. package/dist/renderer/asset-service.d.ts.map +0 -1
  742. package/dist/renderer/backend-selection.d.ts.map +0 -1
  743. package/dist/renderer/environment-classify.d.ts +0 -6
  744. package/dist/renderer/environment-classify.d.ts.map +0 -1
  745. package/dist/renderer/environment-error.d.ts +0 -13
  746. package/dist/renderer/environment-error.d.ts.map +0 -1
  747. package/dist/renderer/material/pipeline-projection.d.ts +0 -91
  748. package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
  749. package/dist/renderer/renderer-factory.d.ts +0 -289
  750. package/dist/renderer/renderer-factory.d.ts.map +0 -1
  751. package/dist/renderer.d.ts +0 -771
  752. package/dist/renderer.d.ts.map +0 -1
  753. package/dist/scene-utils/collect-subtree.d.ts +0 -11
  754. package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
  755. package/dist/ssao-data.d.ts +0 -34
  756. package/dist/ssao-data.d.ts.map +0 -1
  757. package/dist/surface-format.d.ts +0 -10
  758. package/dist/surface-format.d.ts.map +0 -1
  759. package/dist/taa-history-store.d.ts +0 -88
  760. package/dist/taa-history-store.d.ts.map +0 -1
  761. package/dist/temporal-coverage.d.ts +0 -35
  762. package/dist/temporal-coverage.d.ts.map +0 -1
  763. package/dist/temporal-frame-transaction.d.ts +0 -92
  764. package/dist/temporal-frame-transaction.d.ts.map +0 -1
  765. package/dist/temporal-inspection.d.ts +0 -57
  766. package/dist/temporal-inspection.d.ts.map +0 -1
  767. package/dist/temporal-view.d.ts +0 -43
  768. package/dist/temporal-view.d.ts.map +0 -1
  769. package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
  770. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
  771. package/dist/urp-pipeline.d.ts +0 -4
  772. package/dist/urp-pipeline.d.ts.map +0 -1
  773. package/src/__tests__/analytic-sky-contract.test.ts +0 -27
  774. package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
  775. package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
  776. package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
  777. package/src/__tests__/backend-selection.integration.test.ts +0 -11
  778. package/src/__tests__/camera-temporal.test-d.ts +0 -8
  779. package/src/__tests__/camera-temporal.test.ts +0 -188
  780. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
  781. package/src/__tests__/environment-inspection.test.ts +0 -45
  782. package/src/__tests__/fog-ai-user.fixture.ts +0 -350
  783. package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
  784. package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
  785. package/src/__tests__/fog-inspection.integration.test.ts +0 -127
  786. package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
  787. package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
  788. package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
  789. package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
  790. package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
  791. package/src/__tests__/fog-temporal.integration.test.ts +0 -115
  792. package/src/__tests__/frame-chain.unit.test.ts +0 -26
  793. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
  794. package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
  795. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
  796. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
  797. package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
  798. package/src/__tests__/materials.unit.test.ts +0 -25
  799. package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
  800. package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
  801. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
  802. package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
  803. package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
  804. package/src/__tests__/plugin.test.ts +0 -25
  805. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
  806. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
  807. package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
  808. package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
  809. package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
  810. package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
  811. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
  812. package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
  813. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
  814. package/src/__tests__/render-feature-order.unit.test.ts +0 -66
  815. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
  816. package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
  817. package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
  818. package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
  819. package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
  820. package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
  821. package/src/__tests__/taa-history-store.unit.test.ts +0 -196
  822. package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
  823. package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
  824. package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
  825. package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
  826. package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
  827. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
  828. package/src/components/__tests__/atmosphere-red.test.ts +0 -51
  829. package/src/components/__tests__/atmosphere.test.ts +0 -79
  830. package/src/components/__tests__/fog.test-d.ts +0 -49
  831. package/src/components/__tests__/fog.test.ts +0 -60
  832. package/src/components/atmosphere.ts +0 -64
  833. package/src/deferred-lighting.ts +0 -92
  834. package/src/dynamic-texture-store.ts +0 -111
  835. package/src/environment/README.md +0 -76
  836. package/src/environment/__tests__/failure-injection.test.ts +0 -50
  837. package/src/environment/__tests__/generation-red.test.ts +0 -64
  838. package/src/environment/__tests__/generation.test.ts +0 -37
  839. package/src/environment/__tests__/graph-transaction.test.ts +0 -85
  840. package/src/environment/__tests__/inspection-red.test.ts +0 -53
  841. package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
  842. package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
  843. package/src/environment/__tests__/readiness.test.ts +0 -42
  844. package/src/environment/__tests__/recovery.test.ts +0 -62
  845. package/src/environment/__tests__/resize-dispose.test.ts +0 -30
  846. package/src/environment/__tests__/signature-red.test.ts +0 -45
  847. package/src/environment/__tests__/signature.test.ts +0 -60
  848. package/src/environment/descriptors.ts +0 -7
  849. package/src/environment/extracted-environment.ts +0 -239
  850. package/src/environment/generation.ts +0 -158
  851. package/src/environment/gpu-bundle.ts +0 -144
  852. package/src/environment/graph.ts +0 -588
  853. package/src/environment/inspection.ts +0 -107
  854. package/src/environment/lifecycle.ts +0 -124
  855. package/src/environment/readiness.ts +0 -76
  856. package/src/environment/signature.ts +0 -185
  857. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
  858. package/src/extract/__tests__/environment-source.test.ts +0 -105
  859. package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
  860. package/src/extract/directional-csm.ts +0 -959
  861. package/src/extract/index.ts +0 -10
  862. package/src/extract/material-interface.ts +0 -604
  863. package/src/extract/schema-readers.ts +0 -27
  864. package/src/features/graph-contribution.ts +0 -577
  865. package/src/features/index.ts +0 -100
  866. package/src/features/morph/index.ts +0 -24
  867. package/src/features/morph/morph-bounds.ts +0 -123
  868. package/src/features/scene-temporal.ts +0 -274
  869. package/src/features/taa-resolve.ts +0 -244
  870. package/src/frame-chain.ts +0 -21
  871. package/src/hdrp-cluster-membership.ts +0 -70
  872. package/src/ibl/cubemap-projection.ts +0 -60
  873. package/src/ibl/face-uniforms.ts +0 -150
  874. package/src/mesh-update-errors.ts +0 -113
  875. package/src/mipmap-generator.ts +0 -244
  876. package/src/param-schema-projection-census.ts +0 -73
  877. package/src/persistent-render-scene.ts +0 -1752
  878. package/src/pipeline/index.ts +0 -40
  879. package/src/pipeline-errors.ts +0 -172
  880. package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
  881. package/src/prepare/index.ts +0 -8
  882. package/src/prepare/schema-readers.ts +0 -20
  883. package/src/record/__tests__/environment-record.test.ts +0 -35
  884. package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
  885. package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
  886. package/src/record/__tests__/render-submission.integration.test.ts +0 -76
  887. package/src/record/__tests__/render-submission.perf.test.ts +0 -141
  888. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
  889. package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
  890. package/src/record/frame-observation.ts +0 -122
  891. package/src/record/index.ts +0 -15
  892. package/src/record/main-pass-skin.ts +0 -51
  893. package/src/record/main-pass-sprite.ts +0 -166
  894. package/src/record/material-payload.ts +0 -292
  895. package/src/record/material-slot-plan.ts +0 -68
  896. package/src/record/membership-timing.ts +0 -1012
  897. package/src/record/shadow-caster-uniform.ts +0 -37
  898. package/src/record/shadow-submit-mode.ts +0 -277
  899. package/src/render-dispatch-membership.ts +0 -155
  900. package/src/render-pipeline-context.ts +0 -332
  901. package/src/render-pipeline-target.ts +0 -96
  902. package/src/render-scene-projection.ts +0 -1738
  903. package/src/render-system-fold.ts +0 -531
  904. package/src/renderer/asset-service.ts +0 -32
  905. package/src/renderer/backend-selection.ts +0 -121
  906. package/src/renderer/environment-classify.ts +0 -30
  907. package/src/renderer/environment-error.ts +0 -19
  908. package/src/renderer/material/pipeline-projection.ts +0 -140
  909. package/src/renderer.ts +0 -940
  910. package/src/scene-utils/collect-subtree.ts +0 -40
  911. package/src/ssao-data.ts +0 -106
  912. package/src/surface-format.ts +0 -37
  913. package/src/taa-history-store.ts +0 -429
  914. package/src/temporal-coverage.ts +0 -106
  915. package/src/temporal-frame-transaction.ts +0 -301
  916. package/src/temporal-inspection.ts +0 -194
  917. package/src/temporal-view.ts +0 -174
  918. package/src/tilemap/resolve-tileset-runtime.ts +0 -72
@@ -8,14 +8,12 @@
8
8
 
9
9
  import { mat4 } from '@forgeax/engine-math';
10
10
  import type { Buffer, RhiQueue } from '@forgeax/engine-rhi';
11
+ import type { CameraSnapshot } from '../render-contract';
11
12
  import type {
12
- CameraSnapshot,
13
13
  DirectionalLightSnapshot,
14
14
  ExtractedLights,
15
- FogSnapshot,
16
15
  SpotLightSnapshot,
17
16
  } from '../render-system-extract';
18
- import type { TemporalView } from '../temporal-view';
19
17
  import { clampPcfKernelSize } from './frame-snapshot';
20
18
  import { computeProjectionMatrix, computeViewMatrix } from './helpers';
21
19
 
@@ -65,19 +63,16 @@ export function writeViewUbo(
65
63
  light: DirectionalLightSnapshot,
66
64
  lights: ExtractedLights,
67
65
  spotShadowSnapshots: readonly SpotLightSnapshot[],
68
- temporalView?: TemporalView,
69
- fog?: FogSnapshot,
70
66
  ): void {
71
67
  // Compose worldViewProj once per frame (view * proj).
72
68
  const projMatrix = computeProjectionMatrix(camera);
73
69
  const viewMatrix = computeViewMatrix(camera);
74
- const unjitteredViewProjection = mat4.create();
75
- mat4.multiply(unjitteredViewProjection, projMatrix, viewMatrix);
76
- const worldViewProj = temporalView?.currentJitteredViewProjection ?? unjitteredViewProjection;
70
+ const worldViewProj = mat4.create();
71
+ mat4.multiply(worldViewProj, projMatrix, viewMatrix);
77
72
 
78
73
  const VIEW_PAYLOAD_FLOATS = 240;
79
74
  const viewPayload = new Float32Array(VIEW_PAYLOAD_FLOATS);
80
- for (let i = 0; i < 16; i++) viewPayload[i] = (worldViewProj as unknown as number[])[i] ?? 0;
75
+ for (let i = 0; i < 16; i++) viewPayload[i] = worldViewProj[i] ?? 0;
81
76
  viewPayload[16] = (light.direction[0] ?? 0) * light.intensity;
82
77
  viewPayload[17] = (light.direction[1] ?? -1) * light.intensity;
83
78
  viewPayload[18] = (light.direction[2] ?? 0) * light.intensity;
@@ -95,9 +90,8 @@ export function writeViewUbo(
95
90
  // Host pre-computes mat4.invert so the skybox fragment shader avoids
96
91
  // per-pixel matrix inversion (charter P4 consistent abstraction).
97
92
  const inverseViewProj = mat4.create();
98
- mat4.invert(inverseViewProj, unjitteredViewProjection);
99
- for (let i = 0; i < 16; i++)
100
- viewPayload[44 + i] = (inverseViewProj as unknown as number[])[i] ?? 0;
93
+ mat4.invert(inverseViewProj, worldViewProj);
94
+ for (let i = 0; i < 16; i++) viewPayload[44 + i] = inverseViewProj[i] ?? 0;
101
95
  // lightViewProj[1..3] at [60..107].
102
96
  if (lights.lightViewProj !== undefined) {
103
97
  for (let c = 1; c <= 3; c++) {
@@ -161,31 +155,6 @@ export function writeViewUbo(
161
155
  }
162
156
  }
163
157
 
164
- const currentTemporalViewProjection =
165
- temporalView?.currentUnjitteredViewProjection ?? unjitteredViewProjection;
166
- const previousTemporalViewProjection =
167
- temporalView?.previousUnjitteredViewProjection ?? currentTemporalViewProjection;
168
- for (let index = 0; index < 16; index += 1) {
169
- viewPayload[196 + index] = currentTemporalViewProjection[index] ?? 0;
170
- viewPayload[212 + index] = previousTemporalViewProjection[index] ?? 0;
171
- }
172
- viewPayload[228] = camera.near;
173
- viewPayload[229] = camera.far;
174
- viewPayload[230] = camera.projection === 'orthographic' ? 1 : 0;
175
-
176
- // Fog shares the existing View uniform slot. The two vec4-aligned lanes
177
- // start after the temporal projection facts: xyz + density, then
178
- // heightFalloff + maxOpacity and two zero padding lanes. An absent snapshot
179
- // leaves the payload disabled without allocating another GPU resource.
180
- if (fog !== undefined) {
181
- viewPayload[232] = fog.color[0] ?? 0;
182
- viewPayload[233] = fog.color[1] ?? 0;
183
- viewPayload[234] = fog.color[2] ?? 0;
184
- viewPayload[235] = fog.density;
185
- viewPayload[236] = fog.heightFalloff;
186
- viewPayload[237] = fog.maxOpacity;
187
- }
188
-
189
158
  const viewUploadResult = queue.writeBuffer(viewUniformBuffer, 0, viewPayload);
190
159
  if (!viewUploadResult.ok) throw viewUploadResult.error;
191
160
 
@@ -0,0 +1,571 @@
1
+ import type { AssetRuntimeError } from '@forgeax/engine-assets-runtime';
2
+ import type { World } from '@forgeax/engine-ecs';
3
+ import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
4
+ import type { Vec3 } from '@forgeax/engine-math';
5
+ import type { ProfileFrameToken, Profiler } from '@forgeax/engine-profiler';
6
+ import type { RenderGraphError } from '@forgeax/engine-render-graph';
7
+ import type {
8
+ BindGroupLayout,
9
+ Buffer,
10
+ Result,
11
+ RhiCaps,
12
+ RhiCommandEncoder,
13
+ RhiDevice,
14
+ RhiError,
15
+ RhiInstance,
16
+ RhiRenderPassEncoder,
17
+ RenderPipeline as RhiRenderPipeline,
18
+ Texture,
19
+ TextureFormat,
20
+ TextureView,
21
+ } from '@forgeax/engine-rhi';
22
+ import type { SkinError } from '@forgeax/engine-skinning';
23
+ import type { ImageError } from '@forgeax/engine-types';
24
+ import type { RhiBackendInstrumentation } from './assembly/backend-contract';
25
+ import type { Antialias, BloomEnabled, Tonemap } from './components/camera';
26
+ import type { RenderError } from './errors/render';
27
+ import type { RenderFeature } from './features/types';
28
+ import type { PostProcessShaderEntry } from './fullscreen-post-process-pass';
29
+ import type { RenderSceneInspection } from './inspection-types';
30
+ import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
31
+ import type { StandardProfile } from './pipeline/standard-profile';
32
+ import type { PostProcessError } from './post-process-errors';
33
+
34
+ export type RenderResult<T, E> =
35
+ | { readonly ok: true; readonly value: T }
36
+ | { readonly ok: false; readonly error: E };
37
+
38
+ /** The only World data boundary accepted by the M6 renderer contract. */
39
+ export type RenderWorldLease = RenderReadLease;
40
+
41
+ /**
42
+ * Camera facts shared by extract, record, and scene owners.
43
+ *
44
+ * The extract stage resolves ECS camera state once and publishes this closed
45
+ * POD contract. Keeping it beside the render lifecycle contracts prevents
46
+ * extract from depending on the record implementation owner.
47
+ */
48
+ export interface CameraSnapshot {
49
+ /** Stable ECS identity used by the frame plan's camera authority fact. */
50
+ readonly entityKey?: number;
51
+ /** World-space camera translation (mat4.getTranslation of Transform.world). */
52
+ readonly position: Vec3;
53
+ /** Resolved world-space camera mat4, copied from Transform.world. */
54
+ readonly world: Float32Array;
55
+ readonly fov: number;
56
+ readonly aspect: number;
57
+ readonly near: number;
58
+ readonly far: number;
59
+ /** Camera projection variant used by view and shadow matrix builders. */
60
+ readonly projection: 'perspective' | 'orthographic';
61
+ readonly orthoLeft: number;
62
+ readonly orthoRight: number;
63
+ readonly orthoBottom: number;
64
+ readonly orthoTop: number;
65
+ readonly tonemap: Tonemap;
66
+ readonly exposure: number;
67
+ readonly whitePoint: number;
68
+ readonly antialias: Antialias;
69
+ readonly bloom: BloomEnabled;
70
+ readonly bloomThreshold: number;
71
+ readonly bloomIntensity: number;
72
+ readonly bloomBlurRadius: number;
73
+ readonly clearColor: readonly [number, number, number, number];
74
+ }
75
+
76
+ /** Stable identity owned by the Standard feature host for built-in tonemap. */
77
+ export const STANDARD_TONEMAP_FEATURE_ID = 'forgeax::standard::tonemap';
78
+
79
+ /**
80
+ * Render-graph state exposed to pipeline declarations. Concrete pipeline
81
+ * caches stay in the assembly owner; graph code only needs the two target
82
+ * formats that affect fullscreen descriptors.
83
+ */
84
+ interface RenderPipelineStateView {
85
+ readonly format: TextureFormat;
86
+ readonly colorAttachmentFormat: TextureFormat;
87
+ }
88
+
89
+ /**
90
+ * Narrow runtime capability consumed by typed graph primitives. The concrete
91
+ * RenderSystemRuntime structurally satisfies this contract, but the public
92
+ * frame surface does not depend on that assembly owner.
93
+ */
94
+ interface RenderPipelineRuntime {
95
+ readonly device: RhiDevice;
96
+ readonly errorRegistry: { fire(error: RendererError): void };
97
+ readonly debugOverlay?: RenderDebugOverlay | undefined;
98
+ readonly lookupPostProcess?: (id: string) => PostProcessShaderEntry | undefined;
99
+ readonly getPostProcessParamsBuffer?: (id: string) => Buffer | undefined;
100
+ readonly getPostProcessPipeline?: (
101
+ id: string,
102
+ bgl: BindGroupLayout,
103
+ colorFormat: GPUTextureFormat,
104
+ ) => RhiRenderPipeline | null;
105
+ }
106
+
107
+ /**
108
+ * Render-owned declaration for an app-provided debug overlay. App owns the
109
+ * concrete DebugDraw instance and its GPU lifecycle; Render only records this
110
+ * capability in the typed graph.
111
+ */
112
+ export interface RenderDebugOverlay {
113
+ encode(
114
+ pass: RhiRenderPassEncoder,
115
+ viewProj: import('@forgeax/engine-math').Mat4,
116
+ ): Result<void, unknown>;
117
+ }
118
+
119
+ /**
120
+ * The leaf frame context consumed by RenderPipeline and graph primitives.
121
+ * Concrete assembly data is added only by the internal record extension in
122
+ * render-system.ts, so this contract never imports the RenderSystem owner.
123
+ */
124
+ export interface RenderPipelineContext {
125
+ readonly pipelineState: RenderPipelineStateView;
126
+ readonly runtime: RenderPipelineRuntime;
127
+ readonly encoder: RhiCommandEncoder;
128
+ readonly view: TextureView;
129
+ readonly clear: readonly [number, number, number, number] | number[];
130
+ readonly targetW: number;
131
+ readonly targetH: number;
132
+ readonly currentTexture: Texture;
133
+ readonly camera: CameraSnapshot;
134
+ /** Per-frame post-process parameter bytes keyed by shader id. */
135
+ readonly postProcessParams: ReadonlyMap<string, Uint8Array>;
136
+ readonly msaaActive: boolean;
137
+ readonly geometryColorResolveView: TextureView | null;
138
+ readonly ldrSpriteColorView: TextureView | null;
139
+ }
140
+
141
+ /**
142
+ * The sole public renderer contract. Concrete assembly stays behind the host;
143
+ * callers retain only leases, receipts, inspection PODs, and recovery Result.
144
+ */
145
+ export interface Renderer {
146
+ attach(world: World): RenderResult<RenderWorldLease, RenderError>;
147
+ draw(input: RenderFrameInput): RenderResult<FrameReceipt, RenderError>;
148
+ setProfile(profile: RenderProfile): RenderResult<void, RenderError>;
149
+ state(): RendererState;
150
+ inspect(): RenderInspection;
151
+ observe(
152
+ receipt: FrameReceipt,
153
+ request: FrameObservationRequest,
154
+ ): Promise<RenderResult<FrameReceiptObservation, RenderError>>;
155
+ subscribe(listener: (event: RendererEvent) => void): () => void;
156
+ releaseSurface(): RenderResult<void, RenderError>;
157
+ restoreSurface(): RenderResult<void, RenderError>;
158
+ recover(): Promise<RenderResult<void, RenderError>>;
159
+ dispose(): Promise<RenderResult<void, RenderError>>;
160
+ }
161
+
162
+ /** The single public renderer lifecycle authority. */
163
+ export type RendererState = 'alive' | 'device-lost' | 'recovering' | 'faulted' | 'disposed';
164
+
165
+ /** Immutable, inspectable quality and budget policy for the Standard pipeline. */
166
+ export type RenderProfile = StandardProfile;
167
+
168
+ /** Ordered events projected from renderer state and expected-operation failures. */
169
+ export type RendererEvent =
170
+ | {
171
+ readonly kind: 'state-changed';
172
+ readonly previous: RendererState;
173
+ readonly current: RendererState;
174
+ }
175
+ | { readonly kind: 'error'; readonly error: RenderError };
176
+
177
+ /** Package-local listener alias used by the renderer assembly implementation. */
178
+ export type RendererEventListener = (event: RendererEvent) => void;
179
+
180
+ /**
181
+ * Camera authority supplied for one frame; Render owns the lease contract and
182
+ * the host releases it with the frame lifecycle. It is intentionally bound to
183
+ * the attached scene lease and never accepts a backend object.
184
+ */
185
+ export interface FrameCamera {
186
+ readonly lease: RenderWorldLease;
187
+ readonly entityKey?: number;
188
+ }
189
+
190
+ /**
191
+ * Environment authority supplied for one frame. The scene/environment owner
192
+ * supplies the identity; the host validates it against the attached lease.
193
+ */
194
+ export interface FrameEnvironment {
195
+ readonly lease: RenderWorldLease;
196
+ readonly identity?: string;
197
+ }
198
+
199
+ /**
200
+ * Receipt-bound observation selection. The request is consumed by `observe`
201
+ * only with the matching FrameReceipt and returns a structured Result error
202
+ * when the generation or frame identity is stale.
203
+ */
204
+ export interface FrameObservationRequest {
205
+ readonly include: readonly ('timings' | 'draws' | 'bindings')[];
206
+ }
207
+
208
+ /**
209
+ * Immutable synchronous proof that the sole host-owned submit reached the
210
+ * queue. It is the only successful synchronous draw signal and is required by
211
+ * every observation request.
212
+ */
213
+ export interface FrameReceipt {
214
+ readonly frameId: number;
215
+ readonly deviceGeneration: number;
216
+ readonly completed: Promise<RenderResult<void, RenderError>>;
217
+ }
218
+
219
+ /**
220
+ * The sole public draw input; World objects never cross this boundary. Render
221
+ * owns extraction and graph interpretation, while the host owns encoding,
222
+ * finish, submit, and recovery of the attached lease generation.
223
+ */
224
+ export interface RenderFrameInput {
225
+ readonly leases: readonly RenderWorldLease[];
226
+ readonly camera: FrameCamera;
227
+ readonly environment: FrameEnvironment;
228
+ /** Optional profiler correlation token owned by App and consumed by Render. */
229
+ readonly profileFrame?: ProfileFrameToken;
230
+ }
231
+
232
+ /** Detached, bounded observation metadata tied to one FrameReceipt and request. */
233
+ export interface FrameReceiptObservation {
234
+ readonly frameId: number;
235
+ readonly deviceGeneration: number;
236
+ readonly include: readonly ('timings' | 'draws' | 'bindings')[];
237
+ }
238
+
239
+ /**
240
+ * Detached renderer facts for host diagnostics and capability selection.
241
+ *
242
+ * The snapshot contains only POD values. It never exposes a device, queue,
243
+ * registry, encoder, or live renderer-owned collection.
244
+ */
245
+ export interface RenderInspection {
246
+ readonly state: RendererState;
247
+ readonly surface: 'available' | 'released';
248
+ readonly profile: RenderProfile;
249
+ readonly capabilities: Readonly<RhiCaps>;
250
+ readonly frame: {
251
+ readonly frameId: number;
252
+ readonly deviceGeneration: number;
253
+ };
254
+ readonly features: readonly string[];
255
+ readonly frustumStats: { readonly culled: number; readonly total: number };
256
+ readonly visibilityStats: { readonly explicitlyHidden: number };
257
+ readonly renderScene: RenderSceneInspection;
258
+ readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
259
+ readonly perFramePassNames: readonly string[];
260
+ readonly bindGroupCounts: {
261
+ readonly createBindGroup: number;
262
+ readonly keys: readonly string[];
263
+ };
264
+ }
265
+
266
+ /** Backend marker — single-element union preserved for future extensibility (D-2). */
267
+ /**
268
+ * `renderer.draw(worlds, options)` owner options
269
+ * (feat-20260709-editor-world-partition M1 / w6, plan-strategy §2 D-3).
270
+ *
271
+ * The single `owner` index that previously served BOTH the surfaced cameras
272
+ * and the singleton render resources (skylight / skybox / postProcessParams) is
273
+ * split into two independent indices:
274
+ * - `cameraOwner` — the world whose cameras are surfaced.
275
+ * - `resourceOwner` — the world whose skylight / skybox / postProcessParams
276
+ * are surfaced.
277
+ *
278
+ * Both owners are always explicit. Single-world callers pass zero for both;
279
+ * composite callers may select different worlds.
280
+ */
281
+ export type DrawOwnerOptions = {
282
+ readonly cameraOwner: number;
283
+ readonly resourceOwner: number;
284
+ readonly profileFrame?: ProfileFrameToken;
285
+ };
286
+
287
+ /** Information attached to a device-loss notification. */
288
+ export interface RendererLostInfo {
289
+ /** Concise machine-readable cause, mapped to a single vocabulary. */
290
+ reason: string;
291
+ /** Free-form description (UA / extension / driver text). */
292
+ message: string;
293
+ }
294
+
295
+ /** Listener registered through `Renderer.onLost`. */
296
+ export type RendererLostListener = (info: RendererLostInfo) => void;
297
+
298
+ /**
299
+ * Composite error type retained for package-local renderer diagnostics. The
300
+ * public Renderer projects expected operation failures through the single
301
+ * `subscribe` event stream and its `error` event; this type does NOT define a
302
+ * error; it only references the cluster unions whose members can arrive here.
303
+ * As such it is an external wire alias (AGENTS.md Change stance add-only wire
304
+ * exception), NOT the eliminated cross-cluster `RuntimeError` SSOT (D-3).
305
+ *
306
+ * Composition = `RhiError | RenderError | AssetRuntimeError | SkinError |
307
+ * PostProcessError`. This equals the pre-decomposition
308
+ * `RhiError | RuntimeError | PostProcessError` exactly: `RuntimeError` was
309
+ * `RenderError | AssetRuntimeError | SkinError` (27 classes). `RecoverError`
310
+ * and `EngineEnvironmentError` are intentionally excluded — neither is ever
311
+ * emitted through the Renderer event stream (`RecoverError` returns from `recover()`,
312
+ * `EngineEnvironmentError` throws at construction), matching the original
313
+ * `RuntimeError` union which excluded both (OOS-3 behavior equivalence).
314
+ *
315
+ * AI consumers do `switch (err.code)` over the union: the disjoint
316
+ * `RhiErrorCode` / `RenderErrorCode` / `AssetRuntimeErrorCode` / `SkinErrorCode`
317
+ * / `PostProcessErrorCode` literal sets let TS narrow each arm to the concrete
318
+ * class (charter P3 union discoverability — every fan-out member is reachable
319
+ * in an exhaustive switch, no untyped escape). Example:
320
+ *
321
+ * ```ts
322
+ * renderer.subscribe((event) => {
323
+ * if (event.kind !== 'error') return;
324
+ * switch (event.error.code) {
325
+ * case 'asset-not-registered': // AssetRuntimeError arm, err narrowed here
326
+ * return report(err.hint);
327
+ * // ...one arm per RhiErrorCode | RenderErrorCode | AssetRuntimeErrorCode
328
+ * // | SkinErrorCode | PostProcessErrorCode member; no default needed,
329
+ * // TS flags every unhandled code at compile time.
330
+ * }
331
+ * });
332
+ * ```
333
+ */
334
+ export type RendererError =
335
+ | RhiError
336
+ | RenderGraphError
337
+ | ImageError
338
+ | RenderError
339
+ | AssetRuntimeError
340
+ | SkinError
341
+ | PostProcessError;
342
+
343
+ /**
344
+ * Package-local error listener retained for host assembly. Public consumers
345
+ * use `Renderer.subscribe` and receive `RendererEvent` instead.
346
+ */
347
+ export type RendererErrorListener = (error: RendererError) => void;
348
+
349
+ /**
350
+ * Built-in graph pass owners used as nested children of `record/graph-execute`.
351
+ * Unknown extension pass names use the explicit `other` bucket so custom
352
+ * pipelines retain a bounded catalog while the default render workload gets
353
+ * actionable owner attribution.
354
+ */
355
+ export const RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
356
+ 'record/graph-execute/point-shadow',
357
+ 'record/graph-execute/cluster-binner-upload',
358
+ 'record/graph-execute/g-buffer',
359
+ 'record/graph-execute/g-buffer/geometry-loop',
360
+ 'record/graph-execute/g-buffer/material-bind-groups',
361
+ 'record/graph-execute/g-buffer/pipeline-selection',
362
+ 'record/graph-execute/g-buffer/draw-submit',
363
+ 'record/graph-execute/ssao-calc',
364
+ 'record/graph-execute/ssao-blur',
365
+ 'record/graph-execute/lighting',
366
+ 'record/graph-execute/forward',
367
+ 'record/graph-execute/forward/geometry-loop',
368
+ 'record/graph-execute/forward/material-bind-groups',
369
+ 'record/graph-execute/forward/pipeline-selection',
370
+ 'record/graph-execute/forward/draw-submit',
371
+ 'record/graph-execute/tonemap',
372
+ 'record/graph-execute/debug-overlay',
373
+ 'record/graph-execute/shadow',
374
+ 'record/graph-execute/spot-shadow',
375
+ 'record/graph-execute/skybox',
376
+ 'record/graph-execute/main',
377
+ 'record/graph-execute/fxaa',
378
+ 'record/graph-execute/bloom-bright',
379
+ 'record/graph-execute/bloom-blur-h',
380
+ 'record/graph-execute/bloom-blur-v',
381
+ 'record/graph-execute/bloom-composite',
382
+ 'record/graph-execute/other',
383
+ ] as const;
384
+
385
+ export type RenderGraphExecutionPhase = (typeof RENDER_GRAPH_EXECUTION_PHASE_CATALOG)[number];
386
+
387
+ /** Bounded producer-owned children of the scene-state record owner. */
388
+ export const RENDER_HDRP_BINNER_PHASE_CATALOG = [
389
+ 'record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy',
390
+ 'record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/light-aabb',
391
+ 'record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/cluster-occupancy',
392
+ 'record/scene-state/hdrp-cluster/binner/cluster-reserve',
393
+ 'record/scene-state/hdrp-cluster/binner/input-preparation',
394
+ 'record/scene-state/hdrp-cluster/binner/bin-core',
395
+ 'record/scene-state/hdrp-cluster/binner/light-index-write',
396
+ 'record/scene-state/hdrp-cluster/binner/light-index-write/bounds-read',
397
+ 'record/scene-state/hdrp-cluster/binner/light-index-write/cluster-write',
398
+ ] as const;
399
+
400
+ export const RENDER_HDRP_CLUSTER_PHASE_CATALOG = [
401
+ 'record/scene-state/hdrp-cluster/binner',
402
+ ...RENDER_HDRP_BINNER_PHASE_CATALOG,
403
+ 'record/scene-state/hdrp-cluster/payload-packing',
404
+ 'record/scene-state/hdrp-cluster/buffer-upload',
405
+ ] as const;
406
+
407
+ export type RenderHdrpClusterPhase = (typeof RENDER_HDRP_CLUSTER_PHASE_CATALOG)[number];
408
+
409
+ export const RENDER_SCENE_STATE_PHASE_CATALOG = [
410
+ 'record/scene-state/fold-buckets',
411
+ 'record/scene-state/lighting-prep',
412
+ 'record/scene-state/ambient-resolution',
413
+ 'record/scene-state/directional-shadow-cache',
414
+ 'record/scene-state/hdrp-cluster',
415
+ ...RENDER_HDRP_CLUSTER_PHASE_CATALOG,
416
+ ] as const;
417
+
418
+ /**
419
+ * Opt-in boundaries inside one `Renderer.draw` call. The observer is a
420
+ * diagnostics seam only: it receives wall-time boundaries and must never be
421
+ * required for rendering correctness. The stage names mirror the existing
422
+ * engine-owned Extract / Prepare / Record orchestration so a host can measure
423
+ * attribution without guessing from RHI command counts.
424
+ */
425
+ export const RENDER_RECORD_PHASE_CATALOG = [
426
+ 'record/scene-state',
427
+ ...RENDER_SCENE_STATE_PHASE_CATALOG,
428
+ 'record/swapchain',
429
+ 'record/render-graph',
430
+ 'record/target-views',
431
+ 'record/validation',
432
+ 'record/dispatch-plan',
433
+ 'record/uploads',
434
+ 'record/bind-groups',
435
+ 'record/graph-execute',
436
+ ...RENDER_GRAPH_EXECUTION_PHASE_CATALOG,
437
+ ] as const;
438
+
439
+ export type RenderRecordPhase = (typeof RENDER_RECORD_PHASE_CATALOG)[number];
440
+
441
+ export const RENDER_PHASE_CATALOG = [
442
+ 'extract',
443
+ 'bind-groups',
444
+ 'features',
445
+ 'sort',
446
+ 'record',
447
+ ...RENDER_RECORD_PHASE_CATALOG,
448
+ ] as const;
449
+
450
+ export type RenderPhase = (typeof RENDER_PHASE_CATALOG)[number];
451
+
452
+ export type RenderPhaseSkipReason =
453
+ | 'feature-host-unavailable'
454
+ | 'feature-host-empty'
455
+ | 'pipeline-state-unavailable'
456
+ | 'camera-unavailable';
457
+
458
+ /** First-version options bag (intentionally empty; reserved for v0.1). */
459
+ export interface RendererOptions {
460
+ /** Producer-owned features installed by the renderer host. */
461
+ readonly features?: readonly RenderFeature<unknown>[] | undefined;
462
+ /** Standard profile consumed by the single renderer-owned pipeline. */
463
+ readonly standardProfile?: RenderProfile | undefined;
464
+ /** Explicit profiler capability shared by App and Render. */
465
+ readonly profiler?: Profiler | undefined;
466
+ /** Optional host-owned RHI lifecycle instrumentation, such as recording. */
467
+ readonly rhiInstrumentation?: RhiBackendInstrumentation | undefined;
468
+ // feat-20260608-create-app-param-surface-trim / M1 / AC-02: `clearColor`
469
+ // was deleted as a one-cut breaking change (AGENTS.md Change stance +
470
+ // requirements constraint #1: no deprecation window, no shim). Scene
471
+ // clear color now lives on the Camera entity (`clearColor`, an inline
472
+ // array<f32,4> column as of feat-20260709 M3); zero-Camera fallback uses
473
+ // `ZERO_CAMERA_CLEAR_FALLBACK = [0, 0, 0, 1]` from
474
+ // `render-system-record`. AI users that pass `{ clearColor: [...] }` on
475
+ // RendererOptions still get a TS2353 excess-property error at compile time.
476
+ //
477
+ // feat-20260608-create-app-param-surface-trim / M2 / AC-06 + D-3:
478
+ // `shaderManifestUrl` was deleted from RendererOptions and moved to
479
+ // the third-arg `BundlerOptions` (build-tool injection channel). The
480
+ // fallback literal '/shaders/manifest.json' stays at the createRenderer
481
+ // body site (D-2 q5-A) so the LO 1.1 zero-config takeoff path keeps
482
+ // working without explicit injection. AI users that pass
483
+ // `{ shaderManifestUrl: '...' }` to RendererOptions get a TS2353
484
+ // excess-property error at compile time pointing them to the third
485
+ // arg (charter P1 progressive disclosure -- the message names
486
+ // BundlerOptions, not a free-form string).
487
+ /**
488
+ * M3 D-P4 escape hatch (feat-20260511-rhi-wgpu-impl): explicit
489
+ * `RhiInstance` injection bypasses the dynamic-import auto-select
490
+ * facade. When set, `createRenderer` uses this instance verbatim and
491
+ * neither concrete backend adapter is imported dynamically (charter
492
+ * proposition 5 discoverable opt-in /
493
+ * plan-strategy §6 M3 + §7.4 escape hatch + Bevy
494
+ * `RenderCreation::Manual` partial equivalent).
495
+ *
496
+ * Typical use cases:
497
+ * - Testing / debugging — inject a deterministic stub.
498
+ * - Pinning a specific backend even when the browser adapter is present,
499
+ * for cross-shim regression tests.
500
+ * - Advanced AI users implementing their own `RhiInstance` shim.
501
+ *
502
+ * AI users who want the default behaviour leave this field omitted;
503
+ * `navigator.gpu` presence/absence drives the dynamic import (see the
504
+ * `createRenderer` JSDoc for the full auto-select decision tree).
505
+ */
506
+ readonly rhi?: RhiInstance | undefined;
507
+ }
508
+
509
+ // ────────────────────────────────────────────────────────────────────────────
510
+ // Renderer health / recover surface (feat-20260621-renderer-health-recover-skeleton M1)
511
+ // ────────────────────────────────────────────────────────────────────────────
512
+
513
+ /**
514
+ * Closed union of renderer health states.
515
+ *
516
+ * 3 members per plan-strategy D-1:
517
+ * - `'alive'` — healthy baseline (registry not yet fired)
518
+ * - `'device-lost'` — device loss detected
519
+ * - `'internal-fault'` — internal renderer fault
520
+ *
521
+ * AI users exhaustively switch on `HealthReason` without default; TS guards
522
+ * completeness.
523
+ */
524
+ export type HealthReason = 'alive' | 'device-lost' | 'internal-fault';
525
+
526
+ /** Detail for `HealthReason 'device-lost'`. */
527
+ export interface HealthDetailDeviceLost {
528
+ readonly lostReason: 'unknown' | 'destroyed';
529
+ readonly message: string;
530
+ }
531
+
532
+ /** Detail for `HealthReason 'internal-fault'`. */
533
+ export interface HealthDetailInternalFault {
534
+ readonly message: string;
535
+ }
536
+
537
+ /**
538
+ * Pull-style health snapshot — discriminated union by `reason`.
539
+ *
540
+ * Per plan-strategy D-2: `switch(snap.reason)` narrows `snap.detail` to the
541
+ * per-reason detail type automatically, with zero `as` casts. `alive` has no
542
+ * `.detail` field; `device-lost` / `internal-fault` have a required `.detail`
543
+ * of the respective variant.
544
+ *
545
+ * - `recoverable` — explicit snapshot data owned by the lifecycle authority
546
+ */
547
+ export type HealthSnapshot =
548
+ | { readonly reason: 'alive'; readonly recoverable: boolean }
549
+ | {
550
+ readonly reason: 'device-lost';
551
+ readonly detail: HealthDetailDeviceLost;
552
+ readonly recoverable: boolean;
553
+ }
554
+ | {
555
+ readonly reason: 'internal-fault';
556
+ readonly detail: HealthDetailInternalFault;
557
+ readonly recoverable: boolean;
558
+ };
559
+
560
+ /**
561
+ * Maps `HealthReason` to recoverable boolean per the derive table
562
+ * (requirements section "range"):
563
+ *
564
+ * | reason | recoverable |
565
+ * |:---------------|:-----------|
566
+ * | `'alive'` | false |
567
+ * | `'device-lost'`| true |
568
+ * | `'internal-fault'` | false |
569
+ */
570
+ /** Callback type for `Renderer.onHealthChange`. */
571
+ export type HealthChangeListener = (snapshot: HealthSnapshot) => void;
@@ -1,9 +1,9 @@
1
1
  // @forgeax/engine-runtime - RenderData projection layer
2
- // (feat-20260601-gpu-resource-store-extraction M2 / w5).
2
+ // (feat-20260601-device/gpu-residency-extraction M2 / w5).
3
3
  //
4
4
  // The middle of the three GPU-asset layers: AssetRegistry catalogues CPU asset
5
5
  // POD; `deriveRenderData*` PROJECTS a POD into the GPU descriptor a resource
6
- // build needs; GpuResourceStore owns device-side resource life/death. These
6
+ // build needs; GpuResidencyCache owns device-side resource life/death. These
7
7
  // projections are PURE -- they know the asset `kind` but never touch a device
8
8
  // (AC-07). The store consumes the descriptor and does the createTexture /
9
9
  // createBuffer / writeX work.
@@ -15,6 +15,7 @@
15
15
  // GPU-resource kind would surface as a `tsc -b` exhaustiveness error at the
16
16
  // switch rather than a silent fallthrough (AC-06).
17
17
 
18
+ import { numMipLevels } from '@forgeax/engine-assets-runtime';
18
19
  import {
19
20
  bytesPerRow as blockBytesPerRow,
20
21
  blockParamsForFormat,
@@ -43,7 +44,6 @@ import {
43
44
  GPU_BUFFER_USAGE_INDEX,
44
45
  GPU_BUFFER_USAGE_VERTEX,
45
46
  } from './gpu-usage';
46
- import { numMipLevels } from './mipmap-generator';
47
47
 
48
48
  // AssetError without importing AssetRegistry: build the 4-field surface
49
49
  // (.code / .expected / .hint) directly against the @forgeax/engine-types SSOT