@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
@@ -1,771 +0,0 @@
1
- import type { CreateShaderModule } from '@forgeax/engine-debug-draw';
2
- import type { World } from '@forgeax/engine-ecs';
3
- import type { InputSnapshot } from '@forgeax/engine-input';
4
- import type { ProfileFrameToken, Profiler } from '@forgeax/engine-profiler';
5
- import type { RenderGraphError } from '@forgeax/engine-render-graph';
6
- import type { Result, RhiDevice, RhiError, RhiInstance } from '@forgeax/engine-rhi';
7
- import type { ShaderError, ShaderRegistry } from '@forgeax/engine-shader';
8
- import type { SkinError } from '@forgeax/engine-skinning';
9
- import type { Handle, ImageError, RenderPipelineAsset, Submesh } from '@forgeax/engine-types';
10
- import type { RenderAssetPort } from './assets/render-asset-port';
11
- import type { RenderAssetResolutionError } from './assets/resolve-render-asset';
12
- import type { EngineMetrics } from './engine-metrics';
13
- import type { RecoverError } from './errors/recover';
14
- import type { ObservationUnavailableError, RenderError } from './errors/render';
15
- import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
16
- import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
17
- import type { MeshUpdateError } from './mesh-update-errors';
18
- import type { PipelineError } from './pipeline-errors';
19
- import type { PostProcessError } from './post-process-errors';
20
- import type { FrameObservation, FrameObservationOptions } from './record/frame-observation';
21
- import type { MembershipTimingController, MembershipTimingOptions } from './record/membership-timing';
22
- import type { RenderPipeline } from './render-pipeline';
23
- import type { RenderSceneInspection } from './render-system';
24
- export type RenderResult<T, E> = {
25
- readonly ok: true;
26
- readonly value: T;
27
- } | {
28
- readonly ok: false;
29
- readonly error: E;
30
- };
31
- export interface RendererInstallError {
32
- readonly code: string;
33
- readonly hint: string;
34
- }
35
- /** Backend marker — single-element union preserved for future extensibility (D-2). */
36
- export type RendererBackend = 'webgpu';
37
- /**
38
- * `renderer.draw(worlds, options)` owner options
39
- * (feat-20260709-editor-world-partition M1 / w6, plan-strategy §2 D-3).
40
- *
41
- * The single `owner` index that previously served BOTH the surfaced cameras
42
- * and the singleton render resources (skylight / skybox / postProcessParams) is
43
- * split into two independent indices:
44
- * - `cameraOwner` — the world whose cameras are surfaced.
45
- * - `resourceOwner` — the world whose skylight / skybox / postProcessParams
46
- * are surfaced.
47
- *
48
- * Both owners are always explicit. Single-world callers pass zero for both;
49
- * composite callers may select different worlds.
50
- */
51
- export type DrawOwnerOptions = {
52
- readonly cameraOwner: number;
53
- readonly resourceOwner: number;
54
- readonly profileFrame?: ProfileFrameToken;
55
- };
56
- /** Information attached to a device-loss notification. */
57
- export interface RendererLostInfo {
58
- /** Concise machine-readable cause, mapped to a single vocabulary. */
59
- reason: string;
60
- /** Free-form description (UA / extension / driver text). */
61
- message: string;
62
- }
63
- /** Listener registered through `Renderer.onLost`. */
64
- export type RendererLostListener = (info: RendererLostInfo) => void;
65
- /**
66
- * Composite error type reachable through the `Renderer.onError` fan-out channel
67
- * (D-4). This is the fan-out channel's *wire contract* — it does NOT define any
68
- * error; it only references the cluster unions whose members can arrive here.
69
- * As such it is an external wire alias (AGENTS.md Change stance add-only wire
70
- * exception), NOT the eliminated cross-cluster `RuntimeError` SSOT (D-3).
71
- *
72
- * Composition = `RhiError | ShaderError | RenderError | RenderAssetResolutionError |
73
- * SkinError | PostProcessError`. This equals the pre-decomposition
74
- * `RhiError | RuntimeError | PostProcessError` exactly: `RuntimeError` was
75
- * `RenderError | RenderAssetResolutionError | SkinError` (27 classes). `RecoverError`
76
- * and `EngineEnvironmentError` are intentionally excluded — neither is ever
77
- * fired through `onError` (`RecoverError` returns from `recover()`,
78
- * `EngineEnvironmentError` throws at construction), matching the original
79
- * `RuntimeError` union which excluded both (OOS-3 behavior equivalence).
80
- *
81
- * AI consumers do `switch (err.code)` over the union: the disjoint
82
- * `RhiErrorCode` / `RenderErrorCode` / `RenderAssetResolutionErrorCode` / `SkinErrorCode`
83
- * / `PostProcessErrorCode` literal sets let TS narrow each arm to the concrete
84
- * class (charter P3 union discoverability — every fan-out member is reachable
85
- * in an exhaustive switch, no `as any` escape). Example:
86
- *
87
- * ```ts
88
- * renderer.onError((err) => {
89
- * switch (err.code) {
90
- * case 'asset-not-found': // RenderAssetResolutionError arm, err narrowed here
91
- * return report(err.hint);
92
- * // ...one arm per RhiErrorCode | RenderErrorCode | RenderAssetResolutionErrorCode
93
- * // | SkinErrorCode | PostProcessErrorCode member; no default needed,
94
- * // TS flags any unhandled code at compile time.
95
- * }
96
- * });
97
- * ```
98
- */
99
- export type RendererError = RhiError | ShaderError | RenderGraphError | ImageError | RenderError | RenderAssetResolutionError | SkinError | PostProcessError | PipelineError;
100
- /**
101
- * Listener registered through `Renderer.onError` (fix-f2). Receives any
102
- * {@link RendererError} fanned out through the channel.
103
- */
104
- export type RendererErrorListener = (error: RendererError) => void;
105
- /**
106
- * Built-in graph pass owners used as nested children of `record/graph-execute`.
107
- * Unknown extension pass names use the explicit `other` bucket so custom
108
- * pipelines retain a bounded catalog while the default render workload gets
109
- * actionable owner attribution.
110
- */
111
- export declare const RENDER_GRAPH_EXECUTION_PHASE_CATALOG: readonly ["record/graph-execute/point-shadow", "record/graph-execute/cluster-binner-upload", "record/graph-execute/g-buffer", "record/graph-execute/g-buffer/geometry-loop", "record/graph-execute/g-buffer/material-bind-groups", "record/graph-execute/g-buffer/pipeline-selection", "record/graph-execute/g-buffer/draw-submit", "record/graph-execute/ssao-calc", "record/graph-execute/ssao-blur", "record/graph-execute/lighting", "record/graph-execute/forward", "record/graph-execute/forward/geometry-loop", "record/graph-execute/forward/material-bind-groups", "record/graph-execute/forward/pipeline-selection", "record/graph-execute/forward/draw-submit", "record/graph-execute/scene-temporal", "record/graph-execute/scene-temporal/geometry-loop", "record/graph-execute/scene-temporal/material-bind-groups", "record/graph-execute/scene-temporal/pipeline-selection", "record/graph-execute/scene-temporal/draw-submit", "record/graph-execute/tonemap", "record/graph-execute/debug-overlay", "record/graph-execute/shadow", "record/graph-execute/spot-shadow", "record/graph-execute/skybox", "record/graph-execute/main", "record/graph-execute/fxaa", "record/graph-execute/bloom-bright", "record/graph-execute/bloom-blur-h", "record/graph-execute/bloom-blur-v", "record/graph-execute/bloom-composite", "record/graph-execute/other"];
112
- export type RenderGraphExecutionPhase = (typeof RENDER_GRAPH_EXECUTION_PHASE_CATALOG)[number];
113
- /** Bounded producer-owned children of the scene-state record owner. */
114
- export declare const RENDER_HDRP_BINNER_PHASE_CATALOG: readonly ["record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/light-aabb", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/cluster-occupancy", "record/scene-state/hdrp-cluster/binner/cluster-reserve", "record/scene-state/hdrp-cluster/binner/input-preparation", "record/scene-state/hdrp-cluster/binner/bin-core", "record/scene-state/hdrp-cluster/binner/light-index-write", "record/scene-state/hdrp-cluster/binner/light-index-write/bounds-read", "record/scene-state/hdrp-cluster/binner/light-index-write/cluster-write"];
115
- export type RenderHdrpBinnerPhase = (typeof RENDER_HDRP_BINNER_PHASE_CATALOG)[number];
116
- export declare const RENDER_HDRP_CLUSTER_PHASE_CATALOG: readonly ["record/scene-state/hdrp-cluster/binner", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/light-aabb", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/cluster-occupancy", "record/scene-state/hdrp-cluster/binner/cluster-reserve", "record/scene-state/hdrp-cluster/binner/input-preparation", "record/scene-state/hdrp-cluster/binner/bin-core", "record/scene-state/hdrp-cluster/binner/light-index-write", "record/scene-state/hdrp-cluster/binner/light-index-write/bounds-read", "record/scene-state/hdrp-cluster/binner/light-index-write/cluster-write", "record/scene-state/hdrp-cluster/payload-packing", "record/scene-state/hdrp-cluster/buffer-upload"];
117
- export type RenderHdrpClusterPhase = (typeof RENDER_HDRP_CLUSTER_PHASE_CATALOG)[number];
118
- export declare const RENDER_SCENE_STATE_PHASE_CATALOG: readonly ["record/scene-state/fold-buckets", "record/scene-state/lighting-prep", "record/scene-state/ambient-resolution", "record/scene-state/directional-shadow-cache", "record/scene-state/hdrp-cluster", "record/scene-state/hdrp-cluster/binner", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/light-aabb", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/cluster-occupancy", "record/scene-state/hdrp-cluster/binner/cluster-reserve", "record/scene-state/hdrp-cluster/binner/input-preparation", "record/scene-state/hdrp-cluster/binner/bin-core", "record/scene-state/hdrp-cluster/binner/light-index-write", "record/scene-state/hdrp-cluster/binner/light-index-write/bounds-read", "record/scene-state/hdrp-cluster/binner/light-index-write/cluster-write", "record/scene-state/hdrp-cluster/payload-packing", "record/scene-state/hdrp-cluster/buffer-upload"];
119
- export type RenderSceneStatePhase = (typeof RENDER_SCENE_STATE_PHASE_CATALOG)[number];
120
- /**
121
- * Opt-in boundaries inside one `Renderer.draw` call. The observer is a
122
- * diagnostics seam only: it receives wall-time boundaries and must never be
123
- * required for rendering correctness. The stage names mirror the existing
124
- * engine-owned Extract / Prepare / Record orchestration so a host can measure
125
- * attribution without guessing from RHI command counts.
126
- */
127
- export declare const RENDER_RECORD_PHASE_CATALOG: readonly ["record/scene-state", "record/scene-state/fold-buckets", "record/scene-state/lighting-prep", "record/scene-state/ambient-resolution", "record/scene-state/directional-shadow-cache", "record/scene-state/hdrp-cluster", "record/scene-state/hdrp-cluster/binner", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/light-aabb", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/cluster-occupancy", "record/scene-state/hdrp-cluster/binner/cluster-reserve", "record/scene-state/hdrp-cluster/binner/input-preparation", "record/scene-state/hdrp-cluster/binner/bin-core", "record/scene-state/hdrp-cluster/binner/light-index-write", "record/scene-state/hdrp-cluster/binner/light-index-write/bounds-read", "record/scene-state/hdrp-cluster/binner/light-index-write/cluster-write", "record/scene-state/hdrp-cluster/payload-packing", "record/scene-state/hdrp-cluster/buffer-upload", "record/swapchain", "record/render-graph", "record/target-views", "record/validation", "record/dispatch-plan", "record/uploads", "record/bind-groups", "record/graph-execute", "record/graph-execute/point-shadow", "record/graph-execute/cluster-binner-upload", "record/graph-execute/g-buffer", "record/graph-execute/g-buffer/geometry-loop", "record/graph-execute/g-buffer/material-bind-groups", "record/graph-execute/g-buffer/pipeline-selection", "record/graph-execute/g-buffer/draw-submit", "record/graph-execute/ssao-calc", "record/graph-execute/ssao-blur", "record/graph-execute/lighting", "record/graph-execute/forward", "record/graph-execute/forward/geometry-loop", "record/graph-execute/forward/material-bind-groups", "record/graph-execute/forward/pipeline-selection", "record/graph-execute/forward/draw-submit", "record/graph-execute/scene-temporal", "record/graph-execute/scene-temporal/geometry-loop", "record/graph-execute/scene-temporal/material-bind-groups", "record/graph-execute/scene-temporal/pipeline-selection", "record/graph-execute/scene-temporal/draw-submit", "record/graph-execute/tonemap", "record/graph-execute/debug-overlay", "record/graph-execute/shadow", "record/graph-execute/spot-shadow", "record/graph-execute/skybox", "record/graph-execute/main", "record/graph-execute/fxaa", "record/graph-execute/bloom-bright", "record/graph-execute/bloom-blur-h", "record/graph-execute/bloom-blur-v", "record/graph-execute/bloom-composite", "record/graph-execute/other"];
128
- export type RenderRecordPhase = (typeof RENDER_RECORD_PHASE_CATALOG)[number];
129
- export declare const RENDER_PHASE_CATALOG: readonly ["extract", "bind-groups", "features", "sort", "record", "record/scene-state", "record/scene-state/fold-buckets", "record/scene-state/lighting-prep", "record/scene-state/ambient-resolution", "record/scene-state/directional-shadow-cache", "record/scene-state/hdrp-cluster", "record/scene-state/hdrp-cluster/binner", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/light-aabb", "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/cluster-occupancy", "record/scene-state/hdrp-cluster/binner/cluster-reserve", "record/scene-state/hdrp-cluster/binner/input-preparation", "record/scene-state/hdrp-cluster/binner/bin-core", "record/scene-state/hdrp-cluster/binner/light-index-write", "record/scene-state/hdrp-cluster/binner/light-index-write/bounds-read", "record/scene-state/hdrp-cluster/binner/light-index-write/cluster-write", "record/scene-state/hdrp-cluster/payload-packing", "record/scene-state/hdrp-cluster/buffer-upload", "record/swapchain", "record/render-graph", "record/target-views", "record/validation", "record/dispatch-plan", "record/uploads", "record/bind-groups", "record/graph-execute", "record/graph-execute/point-shadow", "record/graph-execute/cluster-binner-upload", "record/graph-execute/g-buffer", "record/graph-execute/g-buffer/geometry-loop", "record/graph-execute/g-buffer/material-bind-groups", "record/graph-execute/g-buffer/pipeline-selection", "record/graph-execute/g-buffer/draw-submit", "record/graph-execute/ssao-calc", "record/graph-execute/ssao-blur", "record/graph-execute/lighting", "record/graph-execute/forward", "record/graph-execute/forward/geometry-loop", "record/graph-execute/forward/material-bind-groups", "record/graph-execute/forward/pipeline-selection", "record/graph-execute/forward/draw-submit", "record/graph-execute/scene-temporal", "record/graph-execute/scene-temporal/geometry-loop", "record/graph-execute/scene-temporal/material-bind-groups", "record/graph-execute/scene-temporal/pipeline-selection", "record/graph-execute/scene-temporal/draw-submit", "record/graph-execute/tonemap", "record/graph-execute/debug-overlay", "record/graph-execute/shadow", "record/graph-execute/spot-shadow", "record/graph-execute/skybox", "record/graph-execute/main", "record/graph-execute/fxaa", "record/graph-execute/bloom-bright", "record/graph-execute/bloom-blur-h", "record/graph-execute/bloom-blur-v", "record/graph-execute/bloom-composite", "record/graph-execute/other"];
130
- export type RenderPhase = (typeof RENDER_PHASE_CATALOG)[number];
131
- export type RenderPhaseSkipReason = 'feature-host-unavailable' | 'feature-host-empty' | 'pipeline-state-unavailable' | 'camera-unavailable';
132
- /** First-version options bag (intentionally empty; reserved for v0.1). */
133
- export interface RendererOptions {
134
- /** Producer-owned features installed by the renderer host. */
135
- readonly features?: readonly RenderFeature<unknown>[] | undefined;
136
- /** Explicit profiler capability shared by App and Render. */
137
- readonly profiler?: Profiler | undefined;
138
- /** Explicit, Render-owned membership timing capability. Omitted means zero timing work. */
139
- readonly membershipTiming?: MembershipTimingOptions | undefined;
140
- /** @internal Enables producer-owned shadow markers for an active RHI capture. */
141
- readonly debugShadowObservation?: boolean | undefined;
142
- /**
143
- * D-S1 single-point exemption channel (feat-20260508-rhi-surface-completion
144
- * / w9): raw GPUDevice used by the GPUCanvasContext.configure({device})
145
- * path. GPUCanvasContext is outside the RHI surface (spec couples context
146
- * to canvas, not GPUDevice), so the raw GPUDevice is injected through
147
- * RendererOptions.rawDeviceForContextConfigure. apps/hello/triangle/src/main.ts:96
148
- * captures the raw device via _internal_getRawDevice and passes it in;
149
- * every other engine path goes through the RHI interface.
150
- *
151
- * Accepted forms:
152
- * - direct value (unknown) - raw GPUDevice already captured
153
- * - thunk `() => unknown | undefined` - lazy capture, evaluated AFTER
154
- * createRenderer's internal rhi.requestDevice settles (lets callers
155
- * wrap requestDevice to capture the raw device transparently)
156
- *
157
- * Type intentionally unknown: keeps the RHI surface free of raw GPUDevice
158
- * typing; webgpu-backend internally casts to GPUDevice.
159
- */
160
- readonly rawDeviceForContextConfigure?: unknown | (() => unknown | undefined);
161
- /**
162
- * M3 D-P4 escape hatch (feat-20260511-rhi-wgpu-impl): explicit
163
- * `RhiInstance` injection bypasses the dynamic-import auto-select
164
- * facade. When set, `createRenderer` uses this instance verbatim and
165
- * neither `@forgeax/engine-rhi-webgpu` nor `@forgeax/engine-rhi-wgpu` is imported
166
- * dynamically (charter proposition 5 discoverable opt-in /
167
- * plan-strategy §6 M3 + §7.4 escape hatch + Bevy
168
- * `RenderCreation::Manual` partial equivalent).
169
- *
170
- * Typical use cases:
171
- * - Testing / debugging — inject a deterministic stub.
172
- * - Pinning a specific backend (e.g. `@forgeax/engine-rhi-wgpu` even when
173
- * `navigator.gpu` is present, for cross-shim regression tests).
174
- * - Advanced AI users implementing their own `RhiInstance` shim.
175
- *
176
- * AI users who want the default behaviour leave this field omitted;
177
- * `navigator.gpu` presence/absence drives the dynamic import (see the
178
- * `createRenderer` JSDoc for the full auto-select decision tree).
179
- */
180
- readonly rhi?: RhiInstance | undefined;
181
- /** Runtime-owned typed instrumentation callbacks for optional RHI capture. */
182
- readonly rhiInstrumentation?: import('./renderer/backend-selection').RhiBackendInstrumentation | undefined;
183
- }
184
- /**
185
- * Public Renderer surface. The concrete class is constructed by
186
- * `createRenderer(canvas, options?)`; callers never instantiate this directly.
187
- *
188
- * ECS render bridge error tier table (D-S3 / D-S4 / D-S6 / D-S7 / D-S8):
189
- *
190
- * | Path | Behaviour | onError fired? |
191
- * |:--|:--|:--|
192
- * | `ready` step 1 manifest load fails | settles err (`ShaderError 'manifest-malformed'` / `'shader-not-found'`) | no — surfaced through `await renderer.ready` |
193
- * | `ready` step 2 pipeline compile fails | settles err (`RhiError 'shader-compile-failed'` / `'feature-not-enabled'` / `'limit-exceeded'`) | no — surfaced through ready |
194
- * | `ready` step 3 asset upload fails | settles err (`RhiError 'limit-exceeded'` / `'webgpu-runtime-error'`) | no — surfaced through ready |
195
- * | `draw([world], { cameraOwner: 0, resourceOwner: 0 })` before `ready` settles (D-S4) | frame skipped | yes — `'rhi-not-available'` |
196
- * | RenderSystem 0 Camera | frame skipped | yes — `'render-system-no-camera'` |
197
- * | RenderSystem N>1 Camera | first archetype hit rendered | yes — `'render-system-multi-camera'` |
198
- * | RenderSystem N>1 DirectionalLight | first archetype hit used | yes — `'render-system-multi-light'` |
199
- * | RenderSystem 0 DirectionalLight | unlit fallback (intensity = 0) | no — D-Q7 softening |
200
- * | RenderSystem 0 renderables (Camera entity only) | clear pass executed; canvas painted with `Camera.clearColor`; no geometry submitted | no — D-Q7 softening |
201
- * | RenderSystem all renderables fail asset-not-found | clear pass executed; per-entity `'asset-not-found'` fires for each unregistered handle | yes — per entity |
202
- * | RenderSystem entity missing Transform / MeshRenderer | default value used | no — D-Q7 softening |
203
- * | RenderSystem unregistered `MeshFilter.assetHandle` | entity skipped | yes — `'asset-not-found'` (`detail = { assetHandle }`) |
204
- * | RenderSystem internal exception (mat4 NaN / GPU bounds) | frame skipped + retry next frame | yes — `'webgpu-runtime-error'` (`detail = { error }`) |
205
- */
206
- export interface Renderer {
207
- /** Opaque backend marker (K-4). */
208
- readonly backend: RendererBackend;
209
- /**
210
- * Captured RhiDevice handle. The forgeax RhiDevice the engine created
211
- * internally via `rhi.requestAdapter() -> adapter.requestDevice()`.
212
- * AI users read through this accessor instead of monkey-patching
213
- * `rhi.requestAdapter` to capture the device handle.
214
- */
215
- readonly device: RhiDevice;
216
- /**
217
- * @internal
218
- *
219
- * Shader-module creation must stay on the backend pack selected while the
220
- * renderer was assembled. Engine-owned extensions (debug-draw is the
221
- * current consumer) use this seam instead of importing a concrete RHI
222
- * module again; a second bundled rhi-webgpu copy cannot recognize the
223
- * renderer's opaque device handle.
224
- */
225
- readonly _internal_createShaderModule: CreateShaderModule;
226
- /**
227
- * Instance-per-engine ShaderRegistry: on first access this lazy property
228
- * constructs a `ShaderRegistry({ device, manifestUrl })` instance;
229
- * subsequent accesses return the same instance. Callers must
230
- * `await shader.loadManifest()` before they can call `shader.get(hash)`.
231
- */
232
- readonly shader: ShaderRegistry;
233
- /**
234
- * App-owned `AssetRegistry` for GUID loads. Geometry payloads become
235
- * World shared references at the consumer boundary.
236
- * or register custom meshes via `renderer.assets.register(asset).unwrap()`.
237
- */
238
- readonly assets: RenderAssetPort;
239
- /**
240
- * feat-20260527-sprite-nineslice M4 / w16 (D-5 + AC-16): per-Renderer
241
- * metrics counter for runtime-time soft signals.
242
- *
243
- * AI users read `renderer.metrics.snapshot()['<feature>.<event>']` to observe
244
- * events the engine surfaces without a `console.warn` flood (charter P3:
245
- * machine-readable counters over text). Two methods compose the surface:
246
- *
247
- * | Method | Purpose |
248
- * |:------------------------|:-----------------------------------------|
249
- * | `increment(name)` | Engine-internal: bump counter for `name`.|
250
- * | `snapshot()` | AI-user-facing: read all counters. |
251
- * | `reset()` | Test isolation: drop every counter. |
252
- *
253
- * Currently surfaced counters (closed namespace, see `EngineMetrics`
254
- * JSDoc):
255
- *
256
- * - `nineslice.scale-too-small` (AC-16, w17 end-to-end)
257
- * - `nineslice.tile-needs-repeat-sampler` (D-9, w18 register-time soft-warn)
258
- *
259
- * Multi-Renderer isolation: each Renderer instance owns its own EngineMetrics
260
- * (D-5 candidate 1) so per-test counters never bleed across renderers.
261
- */
262
- readonly metrics: EngineMetrics;
263
- /**
264
- * feat-20260601-gpu-resource-store-extraction M1: the GPU residency store.
265
- * `renderer.assets` keeps the CPU POD registry; `renderer.store` owns the
266
- * GPU resource lifecycle. Render-path texture / mesh residency is pulled
267
- * lazily via `store.ensureResident`. The equirect-to-cubemap IBL projection
268
- * is engine internals (feat-20260630 D-3): AI users declare
269
- * `Skylight{equirect}` and the record arm drives the projection; there is no
270
- * user-facing upload call. The store holds no AssetRegistry reference (D-2);
271
- * callers pass the source POD fetched from `renderer.assets`.
272
- */
273
- readonly store: any;
274
- /**
275
- * Replace bytes in a resident dynamic mesh while preserving its layout,
276
- * index format, counts, topology, submeshes, and allocation sizes.
277
- */
278
- updateMesh(handle: Handle<'MeshAsset', 'shared'>, vertices: Float32Array, indices: Uint16Array | Uint32Array | undefined, worldId?: number, submeshes?: readonly Submesh[]): Result<void, MeshUpdateError | RhiError>;
279
- /**
280
- * Replace one contiguous vertex range. The range size is expressed in
281
- * vertices; the resident mesh metadata supplies the byte stride.
282
- */
283
- updateMeshVertexRange(handle: Handle<'MeshAsset', 'shared'>, vertices: Float32Array, firstVertex: number, vertexCount: number, worldId?: number): Result<void, MeshUpdateError | RhiError>;
284
- /**
285
- * V-2 first-class input shim (plan-strategy D-2 + AC-09 — feat-20260519).
286
- *
287
- * Curried `(world: World) => InputSnapshot | undefined` reader: a thin
288
- * facade over `world.getResource<InputSnapshot>('InputSnapshot')`.
289
- *
290
- * Charter P5 producer/consumer split: the renderer never holds a World
291
- * reference; the World is supplied per call so the renderer lifecycle
292
- * remains decoupled from the World lifecycle.
293
- *
294
- * Returns `undefined` when no InputSnapshot Resource is registered on
295
- * the World (charter P3: empty signal is the signal).
296
- */
297
- readonly input: {
298
- snapshot(world: World): InputSnapshot | undefined;
299
- };
300
- /**
301
- * Initialization barrier (D-S3 — feat-20260509-ecs-render-bridge-mvp).
302
- *
303
- * Resolves only after three steps complete, in strict serial order:
304
- * 1. `shader.loadManifest()` — fetch + parse manifest.json.
305
- * 2. PBR pipeline compile — `createShaderModule` + 3x
306
- * `createBindGroupLayout` (view / material / mesh-array) +
307
- * `createPipelineLayout` + `createRenderPipeline`.
308
- * 3. Render-owned builtin mesh upload — `createBuffer` +
309
- * `queue.writeBuffer` for cube + triangle vertex / index buffers.
310
- * Any step failure settles with `Result.err(RhiError)`.
311
- *
312
- * Calling `draw([world], { cameraOwner: 0, resourceOwner: 0 })` before `ready` settles fires
313
- * `onError` with `'rhi-not-available'` and skips the frame (D-S4).
314
- *
315
- * @example
316
- * const renderer = await createRenderer(canvas);
317
- * const ready = await renderer.ready;
318
- * if (!ready.ok) throw ready.error;
319
- * const attached = renderer.attachWorld(world);
320
- * if (!attached.ok) throw attached.error;
321
- * const updated = world.update(1 / 60);
322
- * if (!updated.ok) throw updated.error;
323
- * const r = renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
324
- * if (!r.ok) console.error(r.error);
325
- */
326
- readonly ready: Promise<RenderResult<void, RhiError>>;
327
- /** Backend-aware membership timing, present only when explicitly requested. */
328
- readonly membershipTiming?: MembershipTimingController;
329
- /**
330
- * Attach renderer-required derived-state systems to a World once.
331
- *
332
- * The systems run inside `World.update()`; `draw()` and its extract stage
333
- * remain read-only consumers of the resulting World state. Reattaching the
334
- * same World to this Renderer is a no-op.
335
- */
336
- attachWorld(world: World): RenderResult<void, RhiError>;
337
- /**
338
- * Release this Renderer's derived-state ownership of one World.
339
- * Idempotent; after detach, draw rejects the World until it is attached and
340
- * successfully updated again.
341
- */
342
- detachWorld(world: World): void;
343
- /**
344
- * Draw one frame for the supplied World (D-S2 + K-4 rewrite).
345
- *
346
- * RenderSystem (engine-internal phase) walks the World query graph
347
- * across three stages — Extract / Prepare / Record — and submits a
348
- * single GPU command buffer per call. Per-call behaviour is governed by
349
- * the error tier table on `Renderer` (D-S4..D-S8); AI users observe
350
- * fan-out through `onError` and frame-skip semantics through the same
351
- * structured RhiError closed union.
352
- *
353
- * @example Spawn-then-draw:
354
- * const world = new World();
355
- * world.spawn(
356
- * { component: Transform, data: cameraTransform },
357
- * { component: Camera, data: cameraParams },
358
- * );
359
- * world.spawn({
360
- * component: MeshFilter,
361
- * data: { assetHandle: cubeMesh },
362
- * });
363
- * const ready = await renderer.ready;
364
- * if (!ready.ok) throw ready.error;
365
- * const attached = renderer.attachWorld(world);
366
- * if (!attached.ok) throw attached.error;
367
- * const updated = world.update(1 / 60);
368
- * if (!updated.ok) throw updated.error;
369
- * const r = renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 });
370
- * if (!r.ok) handleError(r.error);
371
- *
372
- * w24 — Result<void, RhiError> shape: returns Result.ok(undefined) on
373
- * success; Result.err(rhiError) on facade-level catch (transient runtime
374
- * exception). Per-stage RhiError continues to fan out through `onError`
375
- * (charter proposition 5; D-P6 dual-channel preserved). The Result return
376
- * is the synchronous facade-level summary; AI users can ignore it or
377
- * branch on `.ok` (biome lint warns on unhandled return).
378
- *
379
- * feat-20260708-composited-multi-world-rendering M3 (AC-01 / AC-02 / D-5),
380
- * extended by feat-20260709-editor-world-partition M1 / w6: `worlds` is
381
- * composited into one frame — renderables + lights merge from every world,
382
- * while cameras come from the `cameraOwner` world and singleton resources
383
- * (skylight / skybox / postProcessParams) come from the `resourceOwner`
384
- * world. {@link DrawOwnerOptions} requires both authorities explicitly as
385
- * `{ cameraOwner, resourceOwner }`.
386
- * Single-world users pass `draw([world], { cameraOwner: 0, resourceOwner: 0 })` (the app frame-loop
387
- * does this wrapping transparently). Entry validation returns `Result.err`
388
- * before any extract on:
389
- * - empty `worlds` -> `'render-system-empty-worlds'`
390
- * - `cameraOwner` out of range -> `'render-system-owner-out-of-range'`
391
- * (`.detail = { role: 'camera', owner, worldCount }`)
392
- * - `resourceOwner` out of range -> `'render-system-owner-out-of-range'`
393
- * (`.detail = { role: 'resource', owner, worldCount }`)
394
- * cameraOwner is validated before resourceOwner (first offender wins).
395
- *
396
- * @example Composite two worlds (owner supplies both camera + resources):
397
- * const scene = new World(); // camera + lights + geometry
398
- * const overlay = new World(); // extra geometry, no camera
399
- * const r = renderer.draw([scene, overlay], { cameraOwner: 0, resourceOwner: 0 });
400
- * if (!r.ok) handleError(r.error);
401
- *
402
- * @example Split owners (scene camera, editor-overlay resources):
403
- * const r = renderer.draw([scene, editor], { cameraOwner: 0, resourceOwner: 1 });
404
- */
405
- draw(worlds: readonly World[], options: DrawOwnerOptions): RenderResult<void, RhiError>;
406
- /**
407
- * Observe the producer-owned linear HDR attachment from the most recently
408
- * completed frame. This never reads the final display canvas.
409
- */
410
- observeCurrentFrame(options: FrameObservationOptions): Promise<RenderResult<FrameObservation, ObservationUnavailableError>>;
411
- /**
412
- * Read the canvas's current pixel contents back into an RGBA Uint8Array.
413
- *
414
- * Reads the WebGPU canvas's backing image via the lowest-common-
415
- * denominator browser path: `createImageBitmap → OffscreenCanvas 2D
416
- * drawImage → getImageData`. The WebGPU canvas's GPUTexture is not
417
- * directly readable via `getImageData`, so this OffscreenCanvas bounce
418
- * is the canonical browser path; AI users avoid hand-rolling the
419
- * recipe (charter proposition 5 consistent abstraction).
420
- *
421
- * Returns top-left origin RGBA (the natural getImageData convention).
422
- * Apps that need bottom-left origin (parity comparisons against
423
- * `gl.readPixels`) Y-flip the result locally.
424
- *
425
- * AI users typically: `renderer.draw([world], { cameraOwner: 0, resourceOwner: 0 })` to update the canvas,
426
- * then `await renderer.readPixels()` to sample. Output buffer length
427
- * is `canvas.width * canvas.height * 4`.
428
- *
429
- * | Path | Behavior |
430
- * |:--|:--|
431
- * | OffscreenCanvas + 2D ctx all available | `Result.ok(Uint8Array)` |
432
- * | OffscreenCanvas / 2D ctx unavailable | `Result.err(RhiError 'webgpu-runtime-error')` (`detail.error: string`) |
433
- * | `createImageBitmap` throws | `Result.err(RhiError 'webgpu-runtime-error')` (`detail.error: string`) |
434
- *
435
- * dawn-node smoke harness path uses raw RHI (`device.queue.copyTexture
436
- * ToBuffer + mapAsync`) directly against an offscreen `GPUTexture` —
437
- * that path has no canvas and does not collapse with this method.
438
- * Future RHI-level readback abstraction tracked separately.
439
- */
440
- readPixels(): Promise<RenderResult<Uint8Array, RhiError>>;
441
- /**
442
- * Relinquish the canvas presentation surface while preserving the Renderer,
443
- * AssetRegistry, and CPU-side render declarations. Idempotent. Draws fail
444
- * closed until restoreSurface() succeeds.
445
- */
446
- releaseSurface(): RenderResult<void, RhiError>;
447
- /** Re-enable presentation on the same canvas/device after releaseSurface(). */
448
- restoreSurface(): RenderResult<void, RhiError>;
449
- /**
450
- * Release renderer-owned resources + detach listeners. Idempotent.
451
- *
452
- * @placeholder fix-f6: M2/M3 placeholder form — the `RhiDevice` interface
453
- * does not yet expose a `destroy()` entry, so the current implementation
454
- * only detaches the listener registry + blocks subsequent `draw()` calls;
455
- * the underlying GPU resources are reclaimed naturally via the spec
456
- * pass-through layer (`device.lost` pass-through + browser GC). The
457
- * explicit `device.destroy()` path will be closed out in a later RHI
458
- * interface extension. See the `Renderer.dispose` row of the "API index"
459
- * in `packages/engine/README.md` plus plan-strategy §6 NOTE on M3 scope.
460
- */
461
- dispose(): void;
462
- /** Register a notify-only listener for device-loss. Returns unsubscribe fn. */
463
- onLost(listener: RendererLostListener): () => void;
464
- /**
465
- * Register an RHI creation-time error listener (fix-f2 / charter
466
- * proposition 4 explicit-failure delivery).
467
- *
468
- * @returns unsubscribe fn
469
- */
470
- onError(listener: RendererErrorListener): () => void;
471
- /**
472
- * Pull-style health snapshot. Returns the canonical `HealthSnapshot` from the
473
- * registry's last-fired state, or the alive baseline when never fired. No
474
- * second store — derived from `HealthListenerRegistry.getLastSnapshot()` per
475
- * D-4 SSOT.
476
- *
477
- * AI users consume via `switch (snap.reason)`; TS narrows `snap.detail` to
478
- * the per-reason detail type without `as` casts.
479
- */
480
- health(): HealthSnapshot;
481
- /**
482
- * Attempt a single idempotent device rebuild (feat-20260622-s5 M3).
483
- *
484
- * Only acts in the `device-lost` health state; `alive` returns
485
- * `recover-not-needed` (also returned after a successful rebuild — the
486
- * renderer is alive again, so a second recover() is a no-op signal).
487
- * Rebuild sequence: `gpuStore.destroyAll()` + `context.unconfigure()` ->
488
- * clear the render-graph pendingDestroy queue (B-2) -> re-acquire device via
489
- * the same backend pack (`requestAdapter` -> `requestDevice`) -> rebuild
490
- * Shader/Pipeline -> re-attach the device.lost fan-out -> `fire('alive')`.
491
- * CPU POD caches (AssetRegistry catalog/payload, pack cache) survive; only
492
- * GPU resources are released and re-uploaded on the next draw via
493
- * `ensureResident` (A-AC-12).
494
- *
495
- * Async because device acquisition is async (`requestAdapter` /
496
- * `requestDevice`). A single attempt: no retry loop, no backoff, no timer
497
- * (A-OOS-1). On failure resolves `Result.err` (`recover-adapter-unavailable`
498
- * / `recover-device-unavailable`) and leaves `health().reason ===
499
- * 'device-lost'` — recover() never fakes the renderer back to `alive`
500
- * (A-AC-07). The host owns the retry cadence (call recover() again after a
501
- * host-chosen delay).
502
- */
503
- recover(): Promise<Result<void, RecoverError>>;
504
- /**
505
- * Push-style health subscription with unsubscribe.
506
- *
507
- * Delegates to `HealthListenerRegistry.add(cb)` — late-attach replay fires
508
- * the callback immediately when a snapshot has already been emitted, so
509
- * late-subscribing callers still see the current state (AC-07).
510
- *
511
- * @returns unsubscribe function
512
- */
513
- onHealthChange(cb: HealthChangeListener): () => void;
514
- /**
515
- * feat-20260520-directional-light-shadow-mapping M1c / w8:
516
- * debugReadback reads the shadow depth texture (depth32float) into a 5-
517
- * pixel POD { center, corners: {tl,tr,bl,br}, mapSize }. Uses
518
- * copyTextureToBuffer + mapAsync + Float32Array direct read. Returns null
519
- * when no shadow RT is allocated (shadow pass hasn't run yet, or no
520
- * DirectionalLight with castShadow).
521
- * With cascaded shadows, if the legacy center/corner sentinels are all
522
- * clear, `center` is the nearest written texel in cascade 0 so the POD
523
- * still exposes the owner that populated the atlas.
524
- *
525
- * AI users consume per-pixel depth values as [0,1] floats; no 24-in-32
526
- * unorm decode needed (depth32float, D-2 round-3).
527
- */
528
- debugReadback?(): Promise<{
529
- readonly center: number;
530
- readonly corners: {
531
- readonly tl: number;
532
- readonly tr: number;
533
- readonly bl: number;
534
- readonly br: number;
535
- };
536
- readonly mapSize: number;
537
- } | null>;
538
- /**
539
- * feat-20260520-directional-light-shadow-mapping M1c / w8:
540
- * lights.directionalShadow exposes shadow configuration (mapSize,
541
- * lightSpaceMatrix) for Inspector consumption. Null when the renderer
542
- * has no active shadow system (shader manifest empty or no
543
- * DirectionalLight with castShadow).
544
- */
545
- readonly directionalShadow?: {
546
- readonly mapSize: number;
547
- readonly lightSpaceMatrix: readonly number[] | null;
548
- } | null;
549
- /**
550
- * feat-20260520-directional-light-shadow-mapping M2 / w14 (AC-12):
551
- * debugSampleShadowFactor runs a producer-owned GPU probe for world-space
552
- * positions. It reads the same shadow atlas and PCF path as the directional
553
- * receiver, then returns the factor plus the selected cascade and the center
554
- * atlas texel's raw depth. The extra fields keep the forensic readback tied
555
- * to the actual sampled resource rather than a CPU reconstruction.
556
- *
557
- * Returns null when the probe pipeline is not compiled (empty shader
558
- * manifest). When no shadow caster is active (lightSpaceMatrix absent),
559
- * returns all-1.0 (fully lit) — the caller can distinguish "no shadow
560
- * data" from "probe unavailable".
561
- * Each result carries `shadowFactor` (1 = lit, 0 = fully shadowed),
562
- * `sampledDepth` (the center texel loaded from the active atlas),
563
- * `cascadeIndex` (0..3, or -1 when no cascade contains the position), and
564
- * `receiverDepth` (the projected depth used by the probe comparison), and
565
- * `bias` (the exact depth bias used by the probe comparison).
566
- */
567
- debugSampleShadowFactor?(worldPositions: ReadonlyArray<readonly [number, number, number]>, options?: {
568
- /** Surface normals for the supplied receiver positions. Defaults to floor-up. */
569
- readonly surfaceNormals?: ReadonlyArray<readonly [number, number, number]>;
570
- }): Promise<ReadonlyArray<{
571
- readonly shadowFactor: number;
572
- readonly sampledDepth: number;
573
- readonly cascadeIndex: number;
574
- readonly receiverDepth: number;
575
- readonly bias: number;
576
- }> | null>;
577
- /**
578
- * feat-20260528-frustum-culling M5 / w14: per-frame frustum-culling
579
- * statistics collected during the extract stage. `culled` is the count
580
- * of entities removed from renderables by frustum culling; `total` is
581
- * the count that reached the culling decision point. Both are zero
582
- * before the first `draw([world], { cameraOwner: 0, resourceOwner: 0 })` or when no `MeshRenderer` entities
583
- * are in the world.
584
- */
585
- readonly frustumStats: {
586
- readonly culled: number;
587
- readonly total: number;
588
- };
589
- /**
590
- * Per-frame candidate entities rejected by author visibility before resource
591
- * parsing. Zero before the first draw or when no candidates are hidden.
592
- */
593
- readonly visibilityStats: {
594
- readonly explicitlyHidden: number;
595
- };
596
- /** Persistent CPU scene cursor, rebuild, and delta counters. */
597
- readonly renderScene: RenderSceneInspection;
598
- /** Mesh-slot provenance and active structured diagnostics from the last frame. */
599
- readonly meshMaterialBindings: readonly MeshMaterialBindingObservation[];
600
- /**
601
- * feat-20260531-bloom-first-declarative-render-graph-pass M4 fix-up w19:
602
- * per-frame render-graph pass names in declaration order. Empty array
603
- * before the first `draw([world], { cameraOwner: 0, resourceOwner: 0 })` call; populated lazily when the
604
- * per-frame graph is built. Read-only introspection surface so smoke
605
- * tests can assert the declarative pass chain is wired without reaching
606
- * into engine internals.
607
- */
608
- readonly perFramePassNames: readonly string[];
609
- /**
610
- * Return the host-owned lifecycle snapshot for every registered feature.
611
- *
612
- * Consumers branch on `status` and `latestError?.code`; they do not parse
613
- * log text or reach into the feature host. A failed feature retries on the
614
- * next eligible frame, a disabled feature waits for `recover()`, and a
615
- * disposed feature is terminal. Pipeline switches preserve registrations
616
- * while rebuilding the active graph.
617
- */
618
- renderFeatureDiagnostics(): readonly RenderFeatureDiagnostics[];
619
- /** Subscribe to feature lifecycle changes without polling every render frame. */
620
- subscribeRenderFeatureDiagnostics(listener: () => void): () => void;
621
- /** Subscribe after a `draw()` invocation reaches queue submission. */
622
- subscribeFrameEnd(listener: () => void): () => void;
623
- /**
624
- * Install a feature after the renderer is ready. The renderer keeps feature
625
- * identity and lifecycle ownership in the same host as boot-time features;
626
- * installing the same object twice is a no-op, while a different object with
627
- * the same identity returns `render-feature-registration-conflict`.
628
- */
629
- installRenderFeature(feature: RenderFeature<unknown>): Promise<RenderResult<void, RenderError>>;
630
- /** Wait for submitted GPU work, then reversibly remove one installed feature. */
631
- uninstallRenderFeature(feature: RenderFeature<unknown>): Promise<RenderResult<void, RenderError>>;
632
- /**
633
- * feat-20260531-per-frame-bind-group-cache M1 / w4: per-frame
634
- * createBindGroup counter. Reset to 0 on every `draw([world], { cameraOwner: 0, resourceOwner: 0 })` call,
635
- * bumped per cache-miss in the record stage. Stable-frame AC-03
636
- * asserts `createBindGroup === 0` when all bind groups are cached.
637
- * AI users read this getter to verify cache effectiveness without
638
- * inspecting internal cache state.
639
- */
640
- readonly bindGroupCounts: {
641
- readonly createBindGroup: number;
642
- readonly keys: readonly string[];
643
- };
644
- /**
645
- * feat-20260601-customizable-render-pipeline-seam M1 / w8: register a render-pipeline
646
- * logic under `id` (engine builtins use the `forgeax::` prefix; user pipelines use
647
- * `<package>::<id>`). Same-id re-register throws `PipelineError`
648
- * (`'pipeline-already-registered'`) - programmer-error fail-fast. Sits alongside
649
- * `shader` / `assets` / `store` as a public capability surface (charter F1 IDE
650
- * autocomplete on `renderer.`). Forwards 1:1 to the RenderSystem layer.
651
- */
652
- registerPipeline(id: string, impl: RenderPipeline): void;
653
- /**
654
- * feat-20260601-customizable-render-pipeline-seam M1 / w8 (D-19): install the pipeline
655
- * described by a `RenderPipelineAsset` POD (built inline, no registration step). On an
656
- * unregistered `pipelineId` returns `Result.err(PipelineError{code:'pipeline-not-found'})`;
657
- * AI users consume `err.code` by property access. On success the next `draw` rebuilds the
658
- * per-frame graph through the newly installed pipeline (runtime hot-swap).
659
- */
660
- installPipeline(asset: RenderPipelineAsset): Result<() => void, PipelineError>;
661
- /**
662
- * feat-20260604-resource-owning-render-graph-and-fullscreen-postpr M2 / F-2 fix-up:
663
- * fullscreen post-process registration channel. `postProcess.register(id, entry)`
664
- * registers a `PostProcessShaderEntry` under `id`; the dispatcher in
665
- * `addFullscreenPass({shader: id})` looks it up via `runtime.lookupPostProcess`.
666
- * Same-id re-register throws `PostProcessError({code:'post-process-already-registered'})`
667
- * (programmer-error fail-fast, mirrors `registerPipeline`). An unregistered id
668
- * referenced by `addFullscreenPass` throws `PostProcessError({code:'post-process-not-found'})`
669
- * from the dispatcher. Sits alongside `registerPipeline` / `installPipeline` as a
670
- * public capability surface (charter F1: IDE autocomplete on `renderer.postProcess.`).
671
- * Forwards 1:1 to the RenderSystem layer (plan-strategy D-D).
672
- */
673
- readonly postProcess: {
674
- register(id: string, entry: import('./fullscreen-post-process-pass').PostProcessShaderEntry): () => void;
675
- };
676
- /**
677
- * feat-20260612-skin-palette-per-frame-upload M1 / m1-1: test-only access
678
- * hatch returning the internal `PipelineState` closure variable (or `null`
679
- * before `await renderer.ready` settles). Mirrors the existing
680
- * `_internal_getRawDevice` pattern so unit tests can assert PipelineState
681
- * field shape (e.g. `skinPaletteAllocator` presence after stub retirement)
682
- * without re-routing through `RenderSystem`. Public surface stays opaque:
683
- * the return is widened to `unknown`, callers cast at the test boundary.
684
- * @internal
685
- */
686
- _internal_getPipelineState(): unknown;
687
- }
688
- /**
689
- * Closed union of renderer health states.
690
- *
691
- * 3 members per plan-strategy D-1:
692
- * - `'alive'` — healthy baseline (registry not yet fired)
693
- * - `'device-lost'` — device loss detected
694
- * - `'internal-fault'` — internal renderer fault
695
- *
696
- * AI users exhaustively switch on `HealthReason` without default; TS guards
697
- * completeness.
698
- */
699
- export type HealthReason = 'alive' | 'device-lost' | 'internal-fault';
700
- /** Detail for `HealthReason 'device-lost'`. */
701
- export interface HealthDetailDeviceLost {
702
- readonly lostReason: 'unknown' | 'destroyed';
703
- readonly message: string;
704
- }
705
- /** Detail for `HealthReason 'internal-fault'`. */
706
- export interface HealthDetailInternalFault {
707
- readonly message: string;
708
- }
709
- /**
710
- * Pull-style health snapshot — discriminated union by `reason`.
711
- *
712
- * Per plan-strategy D-2: `switch(snap.reason)` narrows `snap.detail` to the
713
- * per-reason detail type automatically, with zero `as` casts. `alive` has no
714
- * `.detail` field; `device-lost` / `internal-fault` have a required `.detail`
715
- * of the respective variant.
716
- *
717
- * - `recoverable` — derived from `reason` via `deriveRecoverable`
718
- */
719
- export type HealthSnapshot = {
720
- readonly reason: 'alive';
721
- readonly recoverable: boolean;
722
- } | {
723
- readonly reason: 'device-lost';
724
- readonly detail: HealthDetailDeviceLost;
725
- readonly recoverable: boolean;
726
- } | {
727
- readonly reason: 'internal-fault';
728
- readonly detail: HealthDetailInternalFault;
729
- readonly recoverable: boolean;
730
- };
731
- /**
732
- * Maps `HealthReason` to recoverable boolean per the derive table
733
- * (requirements section "range"):
734
- *
735
- * | reason | recoverable |
736
- * |:---------------|:-----------|
737
- * | `'alive'` | false |
738
- * | `'device-lost'`| true |
739
- * | `'internal-fault'` | false |
740
- */
741
- /** Callback type for `Renderer.onHealthChange`. */
742
- export type HealthChangeListener = (snapshot: HealthSnapshot) => void;
743
- /**
744
- * Internal helper: a tiny notify-only event registry. Not exported on the
745
- * public surface (the explicit `./internal` export is locked in package.json).
746
- */
747
- /**
748
- * Internal helper: fan-out registry for the `Renderer.onError` channel (fix-f2
749
- * delivers the charter proposition 4 explicit-failure red line).
750
- *
751
- * Difference from `LostListenerRegistry`: this registry fans out structured
752
- * structured error objects from the fan-out families composed in
753
- * `RendererError` — both carrying the `.code` closed-union discriminant + the
754
- * three fields `.expected` / `.hint` + optional `.detail`. Late-attach replay
755
- * behavior is identical — errors that fired before dispose are immediately
756
- * replayed to any subsequent `add`.
757
- */
758
- /**
759
- * Internal helper: fan-out registry for the `Renderer.onHealthChange` channel
760
- * (feat-20260621-renderer-health-recover-skeleton M1).
761
- *
762
- * 3rd isomorph of the `LostListenerRegistry` / `RhiErrorListenerRegistry` pattern
763
- * (plan-strategy D-5 / OOS-5: do not extract a generic base class). Replicates:
764
- * - `fired` / `lastSnapshot` for late-attach replay
765
- * - `add(listener)` returns unsubscribe function
766
- * - `fire(snapshot)` with try/catch isolation (console.error on throw)
767
- * - `clear()` detaches listeners, does not reset `fired` / `lastSnapshot`
768
- * - `getLastSnapshot()` — public getter returning last fired snapshot or
769
- * `{ reason: 'alive', recoverable: false }` baseline
770
- */
771
- //# sourceMappingURL=renderer.d.ts.map