@forgeax/engine-render 0.1.2

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 (1172) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +1019 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/__tests__/analytic-sky-contract.test.d.ts +2 -0
  5. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +1 -0
  6. package/dist/__tests__/analytic-sky-falsify.test.d.ts +2 -0
  7. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +1 -0
  8. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +2 -0
  9. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +1 -0
  10. package/dist/__tests__/authoring-path.unit.test.d.ts +2 -0
  11. package/dist/__tests__/authoring-path.unit.test.d.ts.map +1 -0
  12. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +2 -0
  13. package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +1 -0
  14. package/dist/__tests__/backend-selection.integration.test.d.ts +2 -0
  15. package/dist/__tests__/backend-selection.integration.test.d.ts.map +1 -0
  16. package/dist/__tests__/callback-inference.test-d.d.ts +2 -0
  17. package/dist/__tests__/callback-inference.test-d.d.ts.map +1 -0
  18. package/dist/__tests__/camera-temporal.test-d.d.ts +2 -0
  19. package/dist/__tests__/camera-temporal.test-d.d.ts.map +1 -0
  20. package/dist/__tests__/camera-temporal.test.d.ts +2 -0
  21. package/dist/__tests__/camera-temporal.test.d.ts.map +1 -0
  22. package/dist/__tests__/cluster-binner.test.d.ts +2 -0
  23. package/dist/__tests__/cluster-binner.test.d.ts.map +1 -0
  24. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +2 -0
  25. package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +1 -0
  26. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +2 -0
  27. package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +1 -0
  28. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +2 -0
  29. package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +1 -0
  30. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +2 -0
  31. package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +1 -0
  32. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +2 -0
  33. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +1 -0
  34. package/dist/__tests__/environment-inspection.test.d.ts +2 -0
  35. package/dist/__tests__/environment-inspection.test.d.ts.map +1 -0
  36. package/dist/__tests__/factory-contract.integration.test.d.ts +2 -0
  37. package/dist/__tests__/factory-contract.integration.test.d.ts.map +1 -0
  38. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +2 -0
  39. package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +1 -0
  40. package/dist/__tests__/fog-ai-user.fixture.d.ts +2 -0
  41. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +1 -0
  42. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +16 -0
  43. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +1 -0
  44. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +2 -0
  45. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +1 -0
  46. package/dist/__tests__/fog-inspection.integration.test.d.ts +2 -0
  47. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +1 -0
  48. package/dist/__tests__/fog-owner-state.integration.test.d.ts +2 -0
  49. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +1 -0
  50. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +2 -0
  51. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +1 -0
  52. package/dist/__tests__/fog-public-surface.integration.test.d.ts +2 -0
  53. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +1 -0
  54. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +2 -0
  55. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +1 -0
  56. package/dist/__tests__/fog-source-absence.integration.test.d.ts +2 -0
  57. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +1 -0
  58. package/dist/__tests__/fog-temporal.integration.test.d.ts +2 -0
  59. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +1 -0
  60. package/dist/__tests__/frame-chain.unit.test.d.ts +2 -0
  61. package/dist/__tests__/frame-chain.unit.test.d.ts.map +1 -0
  62. package/dist/__tests__/frame-observation.contract.test.d.ts +2 -0
  63. package/dist/__tests__/frame-observation.contract.test.d.ts.map +1 -0
  64. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +2 -0
  65. package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +1 -0
  66. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +6 -0
  67. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -0
  68. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +2 -0
  69. package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +1 -0
  70. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +2 -0
  71. package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +1 -0
  72. package/dist/__tests__/gpu-driven-production.integration.test.d.ts +2 -0
  73. package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +1 -0
  74. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +2 -0
  75. package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +1 -0
  76. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +12 -0
  77. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -0
  78. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +2 -0
  79. package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +1 -0
  80. package/dist/__tests__/gpu-driven-view.browser.test.d.ts +2 -0
  81. package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +1 -0
  82. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +2 -0
  83. package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +1 -0
  84. package/dist/__tests__/gpu-driven-view.unit.test.d.ts +2 -0
  85. package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +1 -0
  86. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +2 -0
  87. package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +1 -0
  88. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +2 -0
  89. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +1 -0
  90. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +7 -0
  91. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -0
  92. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +2 -0
  93. package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +1 -0
  94. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +2 -0
  95. package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +1 -0
  96. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +2 -0
  97. package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +1 -0
  98. package/dist/__tests__/gpu-scene.dawn.test.d.ts +2 -0
  99. package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +1 -0
  100. package/dist/__tests__/gpu-scene.unit.test.d.ts +2 -0
  101. package/dist/__tests__/gpu-scene.unit.test.d.ts.map +1 -0
  102. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +2 -0
  103. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +1 -0
  104. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +2 -0
  105. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +1 -0
  106. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +2 -0
  107. package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +1 -0
  108. package/dist/__tests__/injection-kind-owner.test-d.d.ts +2 -0
  109. package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +1 -0
  110. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +2 -0
  111. package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +1 -0
  112. package/dist/__tests__/light-buffer-layout.unit.test.d.ts +2 -0
  113. package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +1 -0
  114. package/dist/__tests__/material-contract-inventory.unit.test.d.ts +2 -0
  115. package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +1 -0
  116. package/dist/__tests__/material-cooked-projection.unit.test.d.ts +2 -0
  117. package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +1 -0
  118. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +2 -0
  119. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +1 -0
  120. package/dist/__tests__/material-derived-payload.integration.test.d.ts +2 -0
  121. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +1 -0
  122. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +2 -0
  123. package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +1 -0
  124. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +2 -0
  125. package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +1 -0
  126. package/dist/__tests__/material-stride-surface.unit.test.d.ts +2 -0
  127. package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +1 -0
  128. package/dist/__tests__/materials.unit.test.d.ts +2 -0
  129. package/dist/__tests__/materials.unit.test.d.ts.map +1 -0
  130. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +2 -0
  131. package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +1 -0
  132. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +2 -0
  133. package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +1 -0
  134. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +2 -0
  135. package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +1 -0
  136. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +2 -0
  137. package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +1 -0
  138. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +2 -0
  139. package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +1 -0
  140. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +2 -0
  141. package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +1 -0
  142. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +2 -0
  143. package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +1 -0
  144. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +2 -0
  145. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +1 -0
  146. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +2 -0
  147. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +1 -0
  148. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +2 -0
  149. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +1 -0
  150. package/dist/__tests__/pipeline-pass-trace.test.d.ts +2 -0
  151. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +1 -0
  152. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +2 -0
  153. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +1 -0
  154. package/dist/__tests__/plugin.test.d.ts +2 -0
  155. package/dist/__tests__/plugin.test.d.ts.map +1 -0
  156. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +2 -0
  157. package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +1 -0
  158. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +2 -0
  159. package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +1 -0
  160. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +2 -0
  161. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +1 -0
  162. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +2 -0
  163. package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +1 -0
  164. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +2 -0
  165. package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +1 -0
  166. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +2 -0
  167. package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +1 -0
  168. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +2 -0
  169. package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +1 -0
  170. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +2 -0
  171. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +1 -0
  172. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +2 -0
  173. package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +1 -0
  174. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +2 -0
  175. package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +1 -0
  176. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +2 -0
  177. package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +1 -0
  178. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +2 -0
  179. package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +1 -0
  180. package/dist/__tests__/profiler-default-off.test.d.ts +2 -0
  181. package/dist/__tests__/profiler-default-off.test.d.ts.map +1 -0
  182. package/dist/__tests__/profiler-phase-catalog.test.d.ts +2 -0
  183. package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +1 -0
  184. package/dist/__tests__/profiler-phase-integration.test.d.ts +2 -0
  185. package/dist/__tests__/profiler-phase-integration.test.d.ts.map +1 -0
  186. package/dist/__tests__/profiler-phase-token.test.d.ts +2 -0
  187. package/dist/__tests__/profiler-phase-token.test.d.ts.map +1 -0
  188. package/dist/__tests__/public-pipeline-id.test-d.d.ts +2 -0
  189. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +1 -0
  190. package/dist/__tests__/public-surface.test-d.d.ts +2 -0
  191. package/dist/__tests__/public-surface.test-d.d.ts.map +1 -0
  192. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +2 -0
  193. package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +1 -0
  194. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +2 -0
  195. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +1 -0
  196. package/dist/__tests__/render-error-code-owner.test-d.d.ts +2 -0
  197. package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +1 -0
  198. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +2 -0
  199. package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +1 -0
  200. package/dist/__tests__/render-error-exhaustive.test-d.d.ts +2 -0
  201. package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -0
  202. package/dist/__tests__/render-feature-assembly.test-d.d.ts +2 -0
  203. package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +1 -0
  204. package/dist/__tests__/render-feature-construction.unit.test.d.ts +2 -0
  205. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +1 -0
  206. package/dist/__tests__/render-feature-context.test-d.d.ts +2 -0
  207. package/dist/__tests__/render-feature-context.test-d.d.ts.map +1 -0
  208. package/dist/__tests__/render-feature-contract.test-d.d.ts +2 -0
  209. package/dist/__tests__/render-feature-contract.test-d.d.ts.map +1 -0
  210. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +2 -0
  211. package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +1 -0
  212. package/dist/__tests__/render-feature-docs.unit.test.d.ts +2 -0
  213. package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +1 -0
  214. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +2 -0
  215. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +1 -0
  216. package/dist/__tests__/render-feature-errors.unit.test.d.ts +2 -0
  217. package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +1 -0
  218. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +2 -0
  219. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +1 -0
  220. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +2 -0
  221. package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +1 -0
  222. package/dist/__tests__/render-feature-graph.integration.test.d.ts +2 -0
  223. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +1 -0
  224. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +2 -0
  225. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +1 -0
  226. package/dist/__tests__/render-feature-order.unit.test.d.ts +2 -0
  227. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +1 -0
  228. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +2 -0
  229. package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +1 -0
  230. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +2 -0
  231. package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +1 -0
  232. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +2 -0
  233. package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +1 -0
  234. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +2 -0
  235. package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +1 -0
  236. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +2 -0
  237. package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +1 -0
  238. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +2 -0
  239. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +1 -0
  240. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +2 -0
  241. package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +1 -0
  242. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +2 -0
  243. package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +1 -0
  244. package/dist/__tests__/render-feature-public-surface.test-d.d.ts +2 -0
  245. package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +1 -0
  246. package/dist/__tests__/render-feature-retry.unit.test.d.ts +2 -0
  247. package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +1 -0
  248. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +2 -0
  249. package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +1 -0
  250. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +2 -0
  251. package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +1 -0
  252. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +2 -0
  253. package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +1 -0
  254. package/dist/__tests__/render-feature-staging.unit.test.d.ts +2 -0
  255. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +1 -0
  256. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +2 -0
  257. package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +1 -0
  258. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +2 -0
  259. package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +1 -0
  260. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +2 -0
  261. package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +1 -0
  262. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +7 -0
  263. package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +1 -0
  264. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +2 -0
  265. package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +1 -0
  266. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +2 -0
  267. package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +1 -0
  268. package/dist/__tests__/render-graph-hzb-gpu.d.ts +7 -0
  269. package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +1 -0
  270. package/dist/__tests__/render-graph-hzb.browser.test.d.ts +2 -0
  271. package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +1 -0
  272. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +2 -0
  273. package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +1 -0
  274. package/dist/__tests__/render-graph-primitives.unit.test.d.ts +2 -0
  275. package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +1 -0
  276. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +12 -0
  277. package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +1 -0
  278. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +2 -0
  279. package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +1 -0
  280. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +2 -0
  281. package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +1 -0
  282. package/dist/__tests__/render-scene-projection.unit.test.d.ts +2 -0
  283. package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +1 -0
  284. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +2 -0
  285. package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +1 -0
  286. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +2 -0
  287. package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +1 -0
  288. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +2 -0
  289. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +1 -0
  290. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +2 -0
  291. package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +1 -0
  292. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +2 -0
  293. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +1 -0
  294. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +2 -0
  295. package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +1 -0
  296. package/dist/__tests__/shader-stage-surface.unit.test.d.ts +2 -0
  297. package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +1 -0
  298. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +2 -0
  299. package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +1 -0
  300. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +2 -0
  301. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +1 -0
  302. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +2 -0
  303. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +1 -0
  304. package/dist/__tests__/surface-configuration.unit.test.d.ts +2 -0
  305. package/dist/__tests__/surface-configuration.unit.test.d.ts.map +1 -0
  306. package/dist/__tests__/taa-history-store.unit.test.d.ts +2 -0
  307. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +1 -0
  308. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +2 -0
  309. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +1 -0
  310. package/dist/__tests__/temporal-inspection.unit.test.d.ts +2 -0
  311. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +1 -0
  312. package/dist/__tests__/texture-usage-surface.unit.test.d.ts +2 -0
  313. package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +1 -0
  314. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +2 -0
  315. package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +1 -0
  316. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +2 -0
  317. package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +1 -0
  318. package/dist/__tests__/urp-pipeline.unit.test.d.ts +2 -0
  319. package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +1 -0
  320. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +2 -0
  321. package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +1 -0
  322. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +2 -0
  323. package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +1 -0
  324. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +2 -0
  325. package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +1 -0
  326. package/dist/__tests__/visibility-extract.integration.test.d.ts +2 -0
  327. package/dist/__tests__/visibility-extract.integration.test.d.ts.map +1 -0
  328. package/dist/__tests__/visibility-extract.perf.test.d.ts +2 -0
  329. package/dist/__tests__/visibility-extract.perf.test.d.ts.map +1 -0
  330. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +2 -0
  331. package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +1 -0
  332. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +2 -0
  333. package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +1 -0
  334. package/dist/__tests__/visibility-instances.integration.test.d.ts +2 -0
  335. package/dist/__tests__/visibility-instances.integration.test.d.ts.map +1 -0
  336. package/dist/__tests__/visibility-multi-world.integration.test.d.ts +2 -0
  337. package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +1 -0
  338. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +2 -0
  339. package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +1 -0
  340. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +2 -0
  341. package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +1 -0
  342. package/dist/__tests__/visibility-public-surface.test-d.d.ts +2 -0
  343. package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +1 -0
  344. package/dist/__tests__/visibility-resolver.unit.test.d.ts +2 -0
  345. package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +1 -0
  346. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +2 -0
  347. package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +1 -0
  348. package/dist/__tests__/vocabulary.unit.test.d.ts +2 -0
  349. package/dist/__tests__/vocabulary.unit.test.d.ts.map +1 -0
  350. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +2 -0
  351. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +1 -0
  352. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +2 -0
  353. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +1 -0
  354. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +2 -0
  355. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +1 -0
  356. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +2 -0
  357. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +1 -0
  358. package/dist/assets/asset-decoders.d.ts +5 -0
  359. package/dist/assets/asset-decoders.d.ts.map +1 -0
  360. package/dist/assets/render-asset-port.d.ts +17 -0
  361. package/dist/assets/render-asset-port.d.ts.map +1 -0
  362. package/dist/assets/resolve-render-asset.d.ts +6 -0
  363. package/dist/assets/resolve-render-asset.d.ts.map +1 -0
  364. package/dist/authoring.d.ts +12 -0
  365. package/dist/authoring.d.ts.map +1 -0
  366. package/dist/authoring.mjs +5 -0
  367. package/dist/authoring.mjs.map +1 -0
  368. package/dist/chunk-33UF5SAO.mjs +7397 -0
  369. package/dist/chunk-33UF5SAO.mjs.map +1 -0
  370. package/dist/chunk-A5QCJSNL.mjs +29913 -0
  371. package/dist/chunk-A5QCJSNL.mjs.map +1 -0
  372. package/dist/chunk-JMSB7AR4.mjs +3 -0
  373. package/dist/chunk-JMSB7AR4.mjs.map +1 -0
  374. package/dist/chunk-LXNGO6AO.mjs +569 -0
  375. package/dist/chunk-LXNGO6AO.mjs.map +1 -0
  376. package/dist/chunk-QRXPSX4X.mjs +659 -0
  377. package/dist/chunk-QRXPSX4X.mjs.map +1 -0
  378. package/dist/chunk-YAKEQPWO.mjs +1439 -0
  379. package/dist/chunk-YAKEQPWO.mjs.map +1 -0
  380. package/dist/cluster-binner.d.ts +152 -0
  381. package/dist/cluster-binner.d.ts.map +1 -0
  382. package/dist/components/__tests__/atmosphere-red.test.d.ts +2 -0
  383. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +1 -0
  384. package/dist/components/__tests__/atmosphere.test.d.ts +2 -0
  385. package/dist/components/__tests__/atmosphere.test.d.ts.map +1 -0
  386. package/dist/components/__tests__/fog.test-d.d.ts +2 -0
  387. package/dist/components/__tests__/fog.test-d.d.ts.map +1 -0
  388. package/dist/components/__tests__/fog.test.d.ts +2 -0
  389. package/dist/components/__tests__/fog.test.d.ts.map +1 -0
  390. package/dist/components/__tests__/schema-parity.unit.test.d.ts +2 -0
  391. package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +1 -0
  392. package/dist/components/__tests__/visibility-schema.unit.test.d.ts +2 -0
  393. package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +1 -0
  394. package/dist/components/atmosphere.d.ts +18 -0
  395. package/dist/components/atmosphere.d.ts.map +1 -0
  396. package/dist/components/camera.d.ts +311 -0
  397. package/dist/components/camera.d.ts.map +1 -0
  398. package/dist/components/directional-light.d.ts +76 -0
  399. package/dist/components/directional-light.d.ts.map +1 -0
  400. package/dist/components/environment.d.ts +116 -0
  401. package/dist/components/environment.d.ts.map +1 -0
  402. package/dist/components/glyph-text.d.ts +26 -0
  403. package/dist/components/glyph-text.d.ts.map +1 -0
  404. package/dist/components/index.d.ts +22 -0
  405. package/dist/components/index.d.ts.map +1 -0
  406. package/dist/components/instances.d.ts +41 -0
  407. package/dist/components/instances.d.ts.map +1 -0
  408. package/dist/components/layer.d.ts +34 -0
  409. package/dist/components/layer.d.ts.map +1 -0
  410. package/dist/components/light-helpers.d.ts +53 -0
  411. package/dist/components/light-helpers.d.ts.map +1 -0
  412. package/dist/components/mesh-filter.d.ts +24 -0
  413. package/dist/components/mesh-filter.d.ts.map +1 -0
  414. package/dist/components/mesh-renderer.d.ts +33 -0
  415. package/dist/components/mesh-renderer.d.ts.map +1 -0
  416. package/dist/components/point-light-shadow.d.ts +27 -0
  417. package/dist/components/point-light-shadow.d.ts.map +1 -0
  418. package/dist/components/point-light.d.ts +35 -0
  419. package/dist/components/point-light.d.ts.map +1 -0
  420. package/dist/components/post-process-params.d.ts +5 -0
  421. package/dist/components/post-process-params.d.ts.map +1 -0
  422. package/dist/components/scene-instance.d.ts +140 -0
  423. package/dist/components/scene-instance.d.ts.map +1 -0
  424. package/dist/components/sort-key.d.ts +44 -0
  425. package/dist/components/sort-key.d.ts.map +1 -0
  426. package/dist/components/spot-light.d.ts +81 -0
  427. package/dist/components/spot-light.d.ts.map +1 -0
  428. package/dist/components/sprite-animation.d.ts +75 -0
  429. package/dist/components/sprite-animation.d.ts.map +1 -0
  430. package/dist/components/sprite-instances.d.ts +51 -0
  431. package/dist/components/sprite-instances.d.ts.map +1 -0
  432. package/dist/components/sprite-playback-mode.d.ts +37 -0
  433. package/dist/components/sprite-playback-mode.d.ts.map +1 -0
  434. package/dist/components/sprite-region-override.d.ts +47 -0
  435. package/dist/components/sprite-region-override.d.ts.map +1 -0
  436. package/dist/components/tile-layer.d.ts +101 -0
  437. package/dist/components/tile-layer.d.ts.map +1 -0
  438. package/dist/components/tilemap.d.ts +25 -0
  439. package/dist/components/tilemap.d.ts.map +1 -0
  440. package/dist/components/visibility.d.ts +22 -0
  441. package/dist/components/visibility.d.ts.map +1 -0
  442. package/dist/construct-renderer.d.ts +2 -0
  443. package/dist/construct-renderer.d.ts.map +1 -0
  444. package/dist/construct-renderer.mjs +6 -0
  445. package/dist/construct-renderer.mjs.map +1 -0
  446. package/dist/debug-draw-glue.d.ts +56 -0
  447. package/dist/debug-draw-glue.d.ts.map +1 -0
  448. package/dist/deferred-lighting.d.ts +13 -0
  449. package/dist/deferred-lighting.d.ts.map +1 -0
  450. package/dist/dynamic-texture-store.d.ts +42 -0
  451. package/dist/dynamic-texture-store.d.ts.map +1 -0
  452. package/dist/engine-metrics.d.ts +23 -0
  453. package/dist/engine-metrics.d.ts.map +1 -0
  454. package/dist/environment/__tests__/failure-injection.test.d.ts +2 -0
  455. package/dist/environment/__tests__/failure-injection.test.d.ts.map +1 -0
  456. package/dist/environment/__tests__/generation-red.test.d.ts +2 -0
  457. package/dist/environment/__tests__/generation-red.test.d.ts.map +1 -0
  458. package/dist/environment/__tests__/generation.test.d.ts +2 -0
  459. package/dist/environment/__tests__/generation.test.d.ts.map +1 -0
  460. package/dist/environment/__tests__/graph-transaction.test.d.ts +2 -0
  461. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +1 -0
  462. package/dist/environment/__tests__/inspection-red.test.d.ts +2 -0
  463. package/dist/environment/__tests__/inspection-red.test.d.ts.map +1 -0
  464. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +2 -0
  465. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +1 -0
  466. package/dist/environment/__tests__/pipeline-topology.test.d.ts +2 -0
  467. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +1 -0
  468. package/dist/environment/__tests__/readiness.test.d.ts +2 -0
  469. package/dist/environment/__tests__/readiness.test.d.ts.map +1 -0
  470. package/dist/environment/__tests__/recovery.test.d.ts +2 -0
  471. package/dist/environment/__tests__/recovery.test.d.ts.map +1 -0
  472. package/dist/environment/__tests__/resize-dispose.test.d.ts +2 -0
  473. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +1 -0
  474. package/dist/environment/__tests__/signature-red.test.d.ts +2 -0
  475. package/dist/environment/__tests__/signature-red.test.d.ts.map +1 -0
  476. package/dist/environment/__tests__/signature.test.d.ts +2 -0
  477. package/dist/environment/__tests__/signature.test.d.ts.map +1 -0
  478. package/dist/environment/descriptors.d.ts +2 -0
  479. package/dist/environment/descriptors.d.ts.map +1 -0
  480. package/dist/environment/extracted-environment.d.ts +53 -0
  481. package/dist/environment/extracted-environment.d.ts.map +1 -0
  482. package/dist/environment/generation.d.ts +62 -0
  483. package/dist/environment/generation.d.ts.map +1 -0
  484. package/dist/environment/gpu-bundle.d.ts +23 -0
  485. package/dist/environment/gpu-bundle.d.ts.map +1 -0
  486. package/dist/environment/graph.d.ts +108 -0
  487. package/dist/environment/graph.d.ts.map +1 -0
  488. package/dist/environment/inspection.d.ts +48 -0
  489. package/dist/environment/inspection.d.ts.map +1 -0
  490. package/dist/environment/lifecycle.d.ts +22 -0
  491. package/dist/environment/lifecycle.d.ts.map +1 -0
  492. package/dist/environment/readiness.d.ts +29 -0
  493. package/dist/environment/readiness.d.ts.map +1 -0
  494. package/dist/environment/signature.d.ts +70 -0
  495. package/dist/environment/signature.d.ts.map +1 -0
  496. package/dist/errors/ecs-validation.d.ts +3 -0
  497. package/dist/errors/ecs-validation.d.ts.map +1 -0
  498. package/dist/errors/index.d.ts +4 -0
  499. package/dist/errors/index.d.ts.map +1 -0
  500. package/dist/errors/recover.d.ts +78 -0
  501. package/dist/errors/recover.d.ts.map +1 -0
  502. package/dist/errors/render.d.ts +633 -0
  503. package/dist/errors/render.d.ts.map +1 -0
  504. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +2 -0
  505. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +1 -0
  506. package/dist/extract/__tests__/environment-source.test.d.ts +2 -0
  507. package/dist/extract/__tests__/environment-source.test.d.ts.map +1 -0
  508. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +2 -0
  509. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +1 -0
  510. package/dist/extract/directional-csm.d.ts +129 -0
  511. package/dist/extract/directional-csm.d.ts.map +1 -0
  512. package/dist/extract/index.d.ts +5 -0
  513. package/dist/extract/index.d.ts.map +1 -0
  514. package/dist/extract/material-interface.d.ts +56 -0
  515. package/dist/extract/material-interface.d.ts.map +1 -0
  516. package/dist/extract/schema-readers.d.ts +20 -0
  517. package/dist/extract/schema-readers.d.ts.map +1 -0
  518. package/dist/extract/visibility.d.ts +26 -0
  519. package/dist/extract/visibility.d.ts.map +1 -0
  520. package/dist/features/graph-contribution.d.ts +64 -0
  521. package/dist/features/graph-contribution.d.ts.map +1 -0
  522. package/dist/features/host.d.ts +100 -0
  523. package/dist/features/host.d.ts.map +1 -0
  524. package/dist/features/index.d.ts +21 -0
  525. package/dist/features/index.d.ts.map +1 -0
  526. package/dist/features/morph/index.d.ts +3 -0
  527. package/dist/features/morph/index.d.ts.map +1 -0
  528. package/dist/features/morph/morph-bounds.d.ts +42 -0
  529. package/dist/features/morph/morph-bounds.d.ts.map +1 -0
  530. package/dist/features/morph/morph-feature.d.ts +45 -0
  531. package/dist/features/morph/morph-feature.d.ts.map +1 -0
  532. package/dist/features/prepared-gpu-work.d.ts +113 -0
  533. package/dist/features/prepared-gpu-work.d.ts.map +1 -0
  534. package/dist/features/prepared-graphics-store.d.ts +65 -0
  535. package/dist/features/prepared-graphics-store.d.ts.map +1 -0
  536. package/dist/features/prepared-graphics.d.ts +225 -0
  537. package/dist/features/prepared-graphics.d.ts.map +1 -0
  538. package/dist/features/render-graph-compute.d.ts +13 -0
  539. package/dist/features/render-graph-compute.d.ts.map +1 -0
  540. package/dist/features/render-graph-contribution.d.ts +15 -0
  541. package/dist/features/render-graph-contribution.d.ts.map +1 -0
  542. package/dist/features/render-graph-raster.d.ts +34 -0
  543. package/dist/features/render-graph-raster.d.ts.map +1 -0
  544. package/dist/features/render-graph-resources.d.ts +11 -0
  545. package/dist/features/render-graph-resources.d.ts.map +1 -0
  546. package/dist/features/scene-temporal.d.ts +45 -0
  547. package/dist/features/scene-temporal.d.ts.map +1 -0
  548. package/dist/features/taa-resolve.d.ts +21 -0
  549. package/dist/features/taa-resolve.d.ts.map +1 -0
  550. package/dist/features/targets.d.ts +32 -0
  551. package/dist/features/targets.d.ts.map +1 -0
  552. package/dist/features/types.d.ts +247 -0
  553. package/dist/features/types.d.ts.map +1 -0
  554. package/dist/frame-chain.d.ts +14 -0
  555. package/dist/frame-chain.d.ts.map +1 -0
  556. package/dist/fullscreen-post-process-pass.d.ts +178 -0
  557. package/dist/fullscreen-post-process-pass.d.ts.map +1 -0
  558. package/dist/glyph-text-layout-system.d.ts +18 -0
  559. package/dist/glyph-text-layout-system.d.ts.map +1 -0
  560. package/dist/gpu-driven/batch-topology.d.ts +124 -0
  561. package/dist/gpu-driven/batch-topology.d.ts.map +1 -0
  562. package/dist/gpu-driven/production-raster.d.ts +150 -0
  563. package/dist/gpu-driven/production-raster.d.ts.map +1 -0
  564. package/dist/gpu-driven/view-gpu.d.ts +141 -0
  565. package/dist/gpu-driven/view-gpu.d.ts.map +1 -0
  566. package/dist/gpu-driven/view-reference.d.ts +15 -0
  567. package/dist/gpu-driven/view-reference.d.ts.map +1 -0
  568. package/dist/gpu-resource-store.d.ts +294 -0
  569. package/dist/gpu-resource-store.d.ts.map +1 -0
  570. package/dist/gpu-resource.d.ts +73 -0
  571. package/dist/gpu-resource.d.ts.map +1 -0
  572. package/dist/gpu-scene-schema.d.ts +171 -0
  573. package/dist/gpu-scene-schema.d.ts.map +1 -0
  574. package/dist/gpu-scene.d.ts +81 -0
  575. package/dist/gpu-scene.d.ts.map +1 -0
  576. package/dist/gpu-stage.d.ts +4 -0
  577. package/dist/gpu-stage.d.ts.map +1 -0
  578. package/dist/gpu-texture-usage.d.ts +6 -0
  579. package/dist/gpu-texture-usage.d.ts.map +1 -0
  580. package/dist/gpu-usage.d.ts +9 -0
  581. package/dist/gpu-usage.d.ts.map +1 -0
  582. package/dist/hdrp-buffers.d.ts +213 -0
  583. package/dist/hdrp-buffers.d.ts.map +1 -0
  584. package/dist/hdrp-cluster-membership.d.ts +2 -0
  585. package/dist/hdrp-cluster-membership.d.ts.map +1 -0
  586. package/dist/hdrp-pipeline.d.ts +36 -0
  587. package/dist/hdrp-pipeline.d.ts.map +1 -0
  588. package/dist/ibl/IblPipelineCache.d.ts +274 -0
  589. package/dist/ibl/IblPipelineCache.d.ts.map +1 -0
  590. package/dist/ibl/cubemap-projection.d.ts +23 -0
  591. package/dist/ibl/cubemap-projection.d.ts.map +1 -0
  592. package/dist/ibl/face-uniforms.d.ts +65 -0
  593. package/dist/ibl/face-uniforms.d.ts.map +1 -0
  594. package/dist/ibl/skylight-bind-group.d.ts +130 -0
  595. package/dist/ibl/skylight-bind-group.d.ts.map +1 -0
  596. package/dist/index.d.ts +57 -0
  597. package/dist/index.d.ts.map +1 -0
  598. package/dist/index.mjs +5 -0
  599. package/dist/index.mjs.map +1 -0
  600. package/dist/instance-buffer-cache.d.ts +59 -0
  601. package/dist/instance-buffer-cache.d.ts.map +1 -0
  602. package/dist/internal.d.ts +74 -0
  603. package/dist/internal.d.ts.map +1 -0
  604. package/dist/internal.mjs +45 -0
  605. package/dist/internal.mjs.map +1 -0
  606. package/dist/lifecycle.d.ts +28 -0
  607. package/dist/lifecycle.d.ts.map +1 -0
  608. package/dist/light-buffer-layout.d.ts +164 -0
  609. package/dist/light-buffer-layout.d.ts.map +1 -0
  610. package/dist/materials.d.ts +50 -0
  611. package/dist/materials.d.ts.map +1 -0
  612. package/dist/mesh-material-bindings.d.ts +44 -0
  613. package/dist/mesh-material-bindings.d.ts.map +1 -0
  614. package/dist/mesh-update-errors.d.ts +71 -0
  615. package/dist/mesh-update-errors.d.ts.map +1 -0
  616. package/dist/mipmap-generator.d.ts +39 -0
  617. package/dist/mipmap-generator.d.ts.map +1 -0
  618. package/dist/param-schema-projection-census.d.ts +18 -0
  619. package/dist/param-schema-projection-census.d.ts.map +1 -0
  620. package/dist/pbr-pipeline.d.ts +253 -0
  621. package/dist/pbr-pipeline.d.ts.map +1 -0
  622. package/dist/persistent-render-scene.d.ts +158 -0
  623. package/dist/persistent-render-scene.d.ts.map +1 -0
  624. package/dist/pipeline/index.d.ts +11 -0
  625. package/dist/pipeline/index.d.ts.map +1 -0
  626. package/dist/pipeline-builder.d.ts +122 -0
  627. package/dist/pipeline-builder.d.ts.map +1 -0
  628. package/dist/pipeline-errors.d.ts +110 -0
  629. package/dist/pipeline-errors.d.ts.map +1 -0
  630. package/dist/pipeline-spec.d.ts +506 -0
  631. package/dist/pipeline-spec.d.ts.map +1 -0
  632. package/dist/plugin.d.ts +17 -0
  633. package/dist/plugin.d.ts.map +1 -0
  634. package/dist/post-process-errors.d.ts +182 -0
  635. package/dist/post-process-errors.d.ts.map +1 -0
  636. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +2 -0
  637. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +1 -0
  638. package/dist/prepare/index.d.ts +4 -0
  639. package/dist/prepare/index.d.ts.map +1 -0
  640. package/dist/prepare/prepared-graphics-resolver.d.ts +62 -0
  641. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -0
  642. package/dist/prepare/schema-readers.d.ts +11 -0
  643. package/dist/prepare/schema-readers.d.ts.map +1 -0
  644. package/dist/record/__tests__/environment-record.test.d.ts +2 -0
  645. package/dist/record/__tests__/environment-record.test.d.ts.map +1 -0
  646. package/dist/record/__tests__/frame-targets.unit.test.d.ts +2 -0
  647. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +1 -0
  648. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +2 -0
  649. package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +1 -0
  650. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +2 -0
  651. package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +1 -0
  652. package/dist/record/__tests__/membership-timing.unit.test.d.ts +2 -0
  653. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +1 -0
  654. package/dist/record/__tests__/render-submission.integration.test.d.ts +2 -0
  655. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +1 -0
  656. package/dist/record/__tests__/render-submission.perf.test.d.ts +2 -0
  657. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +1 -0
  658. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +2 -0
  659. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +1 -0
  660. package/dist/record/__tests__/video-texture-view.unit.test.d.ts +2 -0
  661. package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +1 -0
  662. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +2 -0
  663. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +1 -0
  664. package/dist/record/frame-lighting.d.ts +187 -0
  665. package/dist/record/frame-lighting.d.ts.map +1 -0
  666. package/dist/record/frame-observation.d.ts +38 -0
  667. package/dist/record/frame-observation.d.ts.map +1 -0
  668. package/dist/record/frame-snapshot.d.ts +429 -0
  669. package/dist/record/frame-snapshot.d.ts.map +1 -0
  670. package/dist/record/frame-targets.d.ts +53 -0
  671. package/dist/record/frame-targets.d.ts.map +1 -0
  672. package/dist/record/frame.d.ts +59 -0
  673. package/dist/record/frame.d.ts.map +1 -0
  674. package/dist/record/helpers.d.ts +101 -0
  675. package/dist/record/helpers.d.ts.map +1 -0
  676. package/dist/record/index.d.ts +15 -0
  677. package/dist/record/index.d.ts.map +1 -0
  678. package/dist/record/main-pass-geometry.d.ts +20 -0
  679. package/dist/record/main-pass-geometry.d.ts.map +1 -0
  680. package/dist/record/main-pass-material.d.ts +173 -0
  681. package/dist/record/main-pass-material.d.ts.map +1 -0
  682. package/dist/record/main-pass-skin.d.ts +46 -0
  683. package/dist/record/main-pass-skin.d.ts.map +1 -0
  684. package/dist/record/main-pass-sprite-draws.d.ts +18 -0
  685. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -0
  686. package/dist/record/main-pass-sprite.d.ts +69 -0
  687. package/dist/record/main-pass-sprite.d.ts.map +1 -0
  688. package/dist/record/main-pass.d.ts +20 -0
  689. package/dist/record/main-pass.d.ts.map +1 -0
  690. package/dist/record/material-payload.d.ts +43 -0
  691. package/dist/record/material-payload.d.ts.map +1 -0
  692. package/dist/record/material-slot-plan.d.ts +26 -0
  693. package/dist/record/material-slot-plan.d.ts.map +1 -0
  694. package/dist/record/membership-timing.d.ts +232 -0
  695. package/dist/record/membership-timing.d.ts.map +1 -0
  696. package/dist/record/mesh-ssbo.d.ts +173 -0
  697. package/dist/record/mesh-ssbo.d.ts.map +1 -0
  698. package/dist/record/shadow-caster-uniform.d.ts +8 -0
  699. package/dist/record/shadow-caster-uniform.d.ts.map +1 -0
  700. package/dist/record/shadow-pass.d.ts +125 -0
  701. package/dist/record/shadow-pass.d.ts.map +1 -0
  702. package/dist/record/shadow-submit-mode.d.ts +66 -0
  703. package/dist/record/shadow-submit-mode.d.ts.map +1 -0
  704. package/dist/record/skybox-post-pass.d.ts +33 -0
  705. package/dist/record/skybox-post-pass.d.ts.map +1 -0
  706. package/dist/record/typed-frame-graph.d.ts +13 -0
  707. package/dist/record/typed-frame-graph.d.ts.map +1 -0
  708. package/dist/record/view-ubo.d.ts +39 -0
  709. package/dist/record/view-ubo.d.ts.map +1 -0
  710. package/dist/render-data.d.ts +143 -0
  711. package/dist/render-data.d.ts.map +1 -0
  712. package/dist/render-dispatch-membership.d.ts +47 -0
  713. package/dist/render-dispatch-membership.d.ts.map +1 -0
  714. package/dist/render-graph-primitives.d.ts +424 -0
  715. package/dist/render-graph-primitives.d.ts.map +1 -0
  716. package/dist/render-pipeline-context.d.ts +289 -0
  717. package/dist/render-pipeline-context.d.ts.map +1 -0
  718. package/dist/render-pipeline-target.d.ts +16 -0
  719. package/dist/render-pipeline-target.d.ts.map +1 -0
  720. package/dist/render-pipeline.d.ts +149 -0
  721. package/dist/render-pipeline.d.ts.map +1 -0
  722. package/dist/render-scene-projection.d.ts +174 -0
  723. package/dist/render-scene-projection.d.ts.map +1 -0
  724. package/dist/render-system-extract.d.ts +1096 -0
  725. package/dist/render-system-extract.d.ts.map +1 -0
  726. package/dist/render-system-fold.d.ts +266 -0
  727. package/dist/render-system-fold.d.ts.map +1 -0
  728. package/dist/render-system.d.ts +814 -0
  729. package/dist/render-system.d.ts.map +1 -0
  730. package/dist/renderer/asset-service.d.ts +10 -0
  731. package/dist/renderer/asset-service.d.ts.map +1 -0
  732. package/dist/renderer/backend-selection.d.ts +26 -0
  733. package/dist/renderer/backend-selection.d.ts.map +1 -0
  734. package/dist/renderer/environment-classify.d.ts +6 -0
  735. package/dist/renderer/environment-classify.d.ts.map +1 -0
  736. package/dist/renderer/environment-error.d.ts +13 -0
  737. package/dist/renderer/environment-error.d.ts.map +1 -0
  738. package/dist/renderer/material/assembly.d.ts +22 -0
  739. package/dist/renderer/material/assembly.d.ts.map +1 -0
  740. package/dist/renderer/material/pipeline-projection.d.ts +91 -0
  741. package/dist/renderer/material/pipeline-projection.d.ts.map +1 -0
  742. package/dist/renderer/renderer-factory.d.ts +283 -0
  743. package/dist/renderer/renderer-factory.d.ts.map +1 -0
  744. package/dist/renderer.d.ts +771 -0
  745. package/dist/renderer.d.ts.map +1 -0
  746. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +33 -0
  747. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -0
  748. package/dist/scene-utils/collect-subtree.d.ts +11 -0
  749. package/dist/scene-utils/collect-subtree.d.ts.map +1 -0
  750. package/dist/shadow-atlas.d.ts +117 -0
  751. package/dist/shadow-atlas.d.ts.map +1 -0
  752. package/dist/ssao-buffers.d.ts +31 -0
  753. package/dist/ssao-buffers.d.ts.map +1 -0
  754. package/dist/ssao-config.d.ts +28 -0
  755. package/dist/ssao-config.d.ts.map +1 -0
  756. package/dist/ssao-data.d.ts +34 -0
  757. package/dist/ssao-data.d.ts.map +1 -0
  758. package/dist/surface-format.d.ts +10 -0
  759. package/dist/surface-format.d.ts.map +1 -0
  760. package/dist/systems/active-camera.d.ts +53 -0
  761. package/dist/systems/active-camera.d.ts.map +1 -0
  762. package/dist/systems/pass-selector.d.ts +24 -0
  763. package/dist/systems/pass-selector.d.ts.map +1 -0
  764. package/dist/systems/skin-palette-allocator.d.ts +51 -0
  765. package/dist/systems/skin-palette-allocator.d.ts.map +1 -0
  766. package/dist/systems/transparent-sort-config.d.ts +91 -0
  767. package/dist/systems/transparent-sort-config.d.ts.map +1 -0
  768. package/dist/taa-history-store.d.ts +88 -0
  769. package/dist/taa-history-store.d.ts.map +1 -0
  770. package/dist/temporal-coverage.d.ts +35 -0
  771. package/dist/temporal-coverage.d.ts.map +1 -0
  772. package/dist/temporal-frame-transaction.d.ts +92 -0
  773. package/dist/temporal-frame-transaction.d.ts.map +1 -0
  774. package/dist/temporal-inspection.d.ts +57 -0
  775. package/dist/temporal-inspection.d.ts.map +1 -0
  776. package/dist/temporal-view.d.ts +43 -0
  777. package/dist/temporal-view.d.ts.map +1 -0
  778. package/dist/tilemap/resolve-tileset-runtime.d.ts +23 -0
  779. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +1 -0
  780. package/dist/tilemap-chunk-extract-system.d.ts +142 -0
  781. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -0
  782. package/dist/typed-render-graph-primitives.d.ts +59 -0
  783. package/dist/typed-render-graph-primitives.d.ts.map +1 -0
  784. package/dist/typed-shadow-passes.d.ts +11 -0
  785. package/dist/typed-shadow-passes.d.ts.map +1 -0
  786. package/dist/urp-pipeline.d.ts +4 -0
  787. package/dist/urp-pipeline.d.ts.map +1 -0
  788. package/package.json +94 -0
  789. package/src/__tests__/analytic-sky-contract.test.ts +27 -0
  790. package/src/__tests__/analytic-sky-falsify-carriers.mjs +43 -0
  791. package/src/__tests__/analytic-sky-falsify.test.ts +94 -0
  792. package/src/__tests__/assets-runtime-handoff.integration.test.ts +36 -0
  793. package/src/__tests__/authoring-path.unit.test.ts +14 -0
  794. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +21 -0
  795. package/src/__tests__/backend-selection.integration.test.ts +11 -0
  796. package/src/__tests__/callback-inference.test-d.ts +5 -0
  797. package/src/__tests__/camera-temporal.test-d.ts +8 -0
  798. package/src/__tests__/camera-temporal.test.ts +188 -0
  799. package/src/__tests__/cluster-binner.test.ts +272 -0
  800. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +17 -0
  801. package/src/__tests__/construct-renderer-identity.unit.test.ts +10 -0
  802. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +34 -0
  803. package/src/__tests__/direct-light-snapshot.unit.test.ts +71 -0
  804. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +18 -0
  805. package/src/__tests__/environment-inspection.test.ts +45 -0
  806. package/src/__tests__/factory-contract.integration.test.ts +331 -0
  807. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +18 -0
  808. package/src/__tests__/fog-ai-user.fixture.ts +350 -0
  809. package/src/__tests__/fog-custom-render-feature.fixture.ts +33 -0
  810. package/src/__tests__/fog-custom-render-feature.integration.test.ts +76 -0
  811. package/src/__tests__/fog-inspection.integration.test.ts +127 -0
  812. package/src/__tests__/fog-owner-state.integration.test.ts +112 -0
  813. package/src/__tests__/fog-pipeline-topology.integration.test.ts +93 -0
  814. package/src/__tests__/fog-public-surface.integration.test.ts +60 -0
  815. package/src/__tests__/fog-ray-contract.integration.test.ts +73 -0
  816. package/src/__tests__/fog-source-absence.integration.test.ts +51 -0
  817. package/src/__tests__/fog-temporal.integration.test.ts +115 -0
  818. package/src/__tests__/frame-chain.unit.test.ts +26 -0
  819. package/src/__tests__/frame-observation.contract.test.ts +103 -0
  820. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +172 -0
  821. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +347 -0
  822. package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +12 -0
  823. package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +16 -0
  824. package/src/__tests__/gpu-driven-production.integration.test.ts +609 -0
  825. package/src/__tests__/gpu-driven-scaling.unit.test.ts +90 -0
  826. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +192 -0
  827. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +128 -0
  828. package/src/__tests__/gpu-driven-view.browser.test.ts +19 -0
  829. package/src/__tests__/gpu-driven-view.dawn.test.ts +17 -0
  830. package/src/__tests__/gpu-driven-view.unit.test.ts +455 -0
  831. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +59 -0
  832. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +27 -0
  833. package/src/__tests__/gpu-scene-render-graph-gpu.ts +309 -0
  834. package/src/__tests__/gpu-scene-render-graph.browser.test.ts +19 -0
  835. package/src/__tests__/gpu-scene-render-graph.dawn.test.ts +19 -0
  836. package/src/__tests__/gpu-scene-schema.unit.test.ts +16 -0
  837. package/src/__tests__/gpu-scene.dawn.test.ts +209 -0
  838. package/src/__tests__/gpu-scene.unit.test.ts +161 -0
  839. package/src/__tests__/hdrp-pipeline.unit.test.ts +100 -0
  840. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +23 -0
  841. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +124 -0
  842. package/src/__tests__/injection-kind-owner.test-d.ts +14 -0
  843. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +719 -0
  844. package/src/__tests__/light-buffer-layout.unit.test.ts +85 -0
  845. package/src/__tests__/material-contract-inventory.unit.test.ts +24 -0
  846. package/src/__tests__/material-cooked-projection.unit.test.ts +177 -0
  847. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +69 -0
  848. package/src/__tests__/material-derived-payload.integration.test.ts +164 -0
  849. package/src/__tests__/material-snapshot-mutation.integration.test.ts +58 -0
  850. package/src/__tests__/material-static-dynamic-route.unit.test.ts +113 -0
  851. package/src/__tests__/material-stride-surface.unit.test.ts +32 -0
  852. package/src/__tests__/materials.unit.test.ts +25 -0
  853. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +107 -0
  854. package/src/__tests__/mesh-material-bindings.unit.test.ts +89 -0
  855. package/src/__tests__/mesh-stride-surface.unit.test.ts +16 -0
  856. package/src/__tests__/morph-culling-reentry.dawn.test.ts +166 -0
  857. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +78 -0
  858. package/src/__tests__/morph-visual-evidence.integration.test.ts +66 -0
  859. package/src/__tests__/nineslice-handle-surface.unit.test.ts +14 -0
  860. package/src/__tests__/param-schema-projection-census.unit.test.ts +40 -0
  861. package/src/__tests__/persistent-render-scene.unit.test.ts +1311 -0
  862. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +167 -0
  863. package/src/__tests__/pipeline-pass-trace.test.ts +92 -0
  864. package/src/__tests__/pipeline-stage-owner.test-d.ts +13 -0
  865. package/src/__tests__/plugin.test.ts +25 -0
  866. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +208 -0
  867. package/src/__tests__/prepared-buffer-kind-owner.test-d.ts +29 -0
  868. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +129 -0
  869. package/src/__tests__/prepared-graphics-capability.unit.test.ts +140 -0
  870. package/src/__tests__/prepared-graphics-generation.unit.test.ts +175 -0
  871. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +206 -0
  872. package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +29 -0
  873. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +180 -0
  874. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +287 -0
  875. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +105 -0
  876. package/src/__tests__/prepared-graphics-store.unit.test.ts +154 -0
  877. package/src/__tests__/prepared-graphics-validation.unit.test.ts +176 -0
  878. package/src/__tests__/profiler-default-off.test.ts +22 -0
  879. package/src/__tests__/profiler-phase-catalog.test.ts +66 -0
  880. package/src/__tests__/profiler-phase-integration.test.ts +70 -0
  881. package/src/__tests__/profiler-phase-token.test.ts +84 -0
  882. package/src/__tests__/public-pipeline-id.test-d.ts +6 -0
  883. package/src/__tests__/public-surface.test-d.ts +32 -0
  884. package/src/__tests__/recover-error-policy-owner.unit.test.ts +127 -0
  885. package/src/__tests__/render-dispatch-membership.unit.test.ts +117 -0
  886. package/src/__tests__/render-error-code-owner.test-d.ts +115 -0
  887. package/src/__tests__/render-error-detail-ssot.test-d.ts +234 -0
  888. package/src/__tests__/render-error-exhaustive.test-d.ts +84 -0
  889. package/src/__tests__/render-feature-assembly.test-d.ts +51 -0
  890. package/src/__tests__/render-feature-construction.unit.test.ts +124 -0
  891. package/src/__tests__/render-feature-context.test-d.ts +81 -0
  892. package/src/__tests__/render-feature-contract.test-d.ts +58 -0
  893. package/src/__tests__/render-feature-diagnostics.unit.test.ts +151 -0
  894. package/src/__tests__/render-feature-docs.unit.test.ts +88 -0
  895. package/src/__tests__/render-feature-error-code-owner.test-d.ts +27 -0
  896. package/src/__tests__/render-feature-errors.unit.test.ts +47 -0
  897. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +46 -0
  898. package/src/__tests__/render-feature-gpu-work.integration.test.ts +377 -0
  899. package/src/__tests__/render-feature-graph.integration.test.ts +205 -0
  900. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +200 -0
  901. package/src/__tests__/render-feature-order.unit.test.ts +66 -0
  902. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +101 -0
  903. package/src/__tests__/render-feature-prepared-errors.test-d.ts +82 -0
  904. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +141 -0
  905. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +122 -0
  906. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +59 -0
  907. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +107 -0
  908. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +96 -0
  909. package/src/__tests__/render-feature-prepared-graphics.unit.test.ts +121 -0
  910. package/src/__tests__/render-feature-public-surface.test-d.ts +75 -0
  911. package/src/__tests__/render-feature-retry.unit.test.ts +128 -0
  912. package/src/__tests__/render-feature-scheduling.unit.test.ts +122 -0
  913. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +146 -0
  914. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +236 -0
  915. package/src/__tests__/render-feature-staging.unit.test.ts +94 -0
  916. package/src/__tests__/render-feature-visibility-context.test-d.ts +38 -0
  917. package/src/__tests__/render-feature-visibility-context.unit.test.ts +38 -0
  918. package/src/__tests__/render-feature-zero-work.unit.test.ts +82 -0
  919. package/src/__tests__/render-graph-compute-raster-gpu.ts +342 -0
  920. package/src/__tests__/render-graph-compute-raster.browser.test.ts +16 -0
  921. package/src/__tests__/render-graph-compute-raster.dawn.test.ts +22 -0
  922. package/src/__tests__/render-graph-hzb-gpu.ts +239 -0
  923. package/src/__tests__/render-graph-hzb.browser.test.ts +16 -0
  924. package/src/__tests__/render-graph-hzb.dawn.test.ts +23 -0
  925. package/src/__tests__/render-graph-primitives.unit.test.ts +22 -0
  926. package/src/__tests__/render-graph-storage-indirect-gpu.ts +162 -0
  927. package/src/__tests__/render-graph-storage-indirect.browser.test.ts +21 -0
  928. package/src/__tests__/render-graph-storage-indirect.dawn.test.ts +28 -0
  929. package/src/__tests__/render-scene-projection.unit.test.ts +206 -0
  930. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +125 -0
  931. package/src/__tests__/renderer-lifecycle.integration.test.ts +10 -0
  932. package/src/__tests__/renderer-render-scene-public.test-d.ts +27 -0
  933. package/src/__tests__/rhi-backend-package-boundary.unit.test.ts +11 -0
  934. package/src/__tests__/scene-temporal-coverage.unit.test.ts +259 -0
  935. package/src/__tests__/scriptable-pack-consumer.test-d.ts +14 -0
  936. package/src/__tests__/shader-stage-surface.unit.test.ts +38 -0
  937. package/src/__tests__/ssao-kernel-surface.unit.test.ts +15 -0
  938. package/src/__tests__/sun-snapshot-consumers.test.ts +35 -0
  939. package/src/__tests__/surface-backend-kind-owner.test-d.ts +42 -0
  940. package/src/__tests__/surface-configuration.unit.test.ts +92 -0
  941. package/src/__tests__/taa-history-store.unit.test.ts +196 -0
  942. package/src/__tests__/temporal-frame-transaction.integration.test.ts +537 -0
  943. package/src/__tests__/temporal-inspection.unit.test.ts +138 -0
  944. package/src/__tests__/texture-usage-surface.unit.test.ts +61 -0
  945. package/src/__tests__/typed-pipeline-topology.unit.test.ts +389 -0
  946. package/src/__tests__/urp-pipeline-targets.unit.test.ts +52 -0
  947. package/src/__tests__/urp-pipeline.unit.test.ts +14 -0
  948. package/src/__tests__/vertex-color-pipeline.unit.test.ts +124 -0
  949. package/src/__tests__/vertex-layout-consumer.unit.test.ts +25 -0
  950. package/src/__tests__/visibility-diagnostics.integration.test.ts +66 -0
  951. package/src/__tests__/visibility-extract.integration.test.ts +89 -0
  952. package/src/__tests__/visibility-extract.perf.test.ts +96 -0
  953. package/src/__tests__/visibility-feature-dedup.integration.test.ts +57 -0
  954. package/src/__tests__/visibility-hidden-report.unit.test.ts +37 -0
  955. package/src/__tests__/visibility-instances.integration.test.ts +50 -0
  956. package/src/__tests__/visibility-multi-world.integration.test.ts +54 -0
  957. package/src/__tests__/visibility-producer-matrix.integration.test.ts +191 -0
  958. package/src/__tests__/visibility-producer-matrix.unit.test.ts +96 -0
  959. package/src/__tests__/visibility-public-surface.test-d.ts +26 -0
  960. package/src/__tests__/visibility-resolver.unit.test.ts +84 -0
  961. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +59 -0
  962. package/src/__tests__/vocabulary.unit.test.ts +21 -0
  963. package/src/assets/__tests__/asset-decoders.unit.test.ts +92 -0
  964. package/src/assets/__tests__/mipmap-generator.unit.test.ts +52 -0
  965. package/src/assets/__tests__/render-asset-port.unit.test.ts +54 -0
  966. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +47 -0
  967. package/src/assets/asset-decoders.ts +158 -0
  968. package/src/assets/render-asset-port.ts +44 -0
  969. package/src/assets/resolve-render-asset.ts +13 -0
  970. package/src/authoring.ts +24 -0
  971. package/src/cluster-binner.ts +700 -0
  972. package/src/components/__tests__/atmosphere-red.test.ts +51 -0
  973. package/src/components/__tests__/atmosphere.test.ts +79 -0
  974. package/src/components/__tests__/fog.test-d.ts +49 -0
  975. package/src/components/__tests__/fog.test.ts +60 -0
  976. package/src/components/__tests__/schema-parity.unit.test.ts +25 -0
  977. package/src/components/__tests__/visibility-schema.unit.test.ts +35 -0
  978. package/src/components/atmosphere.ts +64 -0
  979. package/src/components/camera.ts +512 -0
  980. package/src/components/directional-light.ts +120 -0
  981. package/src/components/environment.ts +206 -0
  982. package/src/components/glyph-text.ts +63 -0
  983. package/src/components/index.ts +49 -0
  984. package/src/components/instances.ts +207 -0
  985. package/src/components/layer.ts +69 -0
  986. package/src/components/light-helpers.ts +188 -0
  987. package/src/components/mesh-filter.ts +59 -0
  988. package/src/components/mesh-renderer.ts +61 -0
  989. package/src/components/point-light-shadow.ts +43 -0
  990. package/src/components/point-light.ts +65 -0
  991. package/src/components/post-process-params.ts +35 -0
  992. package/src/components/scene-instance.ts +193 -0
  993. package/src/components/sort-key.ts +75 -0
  994. package/src/components/spot-light.ts +124 -0
  995. package/src/components/sprite-animation.ts +169 -0
  996. package/src/components/sprite-instances.ts +179 -0
  997. package/src/components/sprite-playback-mode.ts +73 -0
  998. package/src/components/sprite-region-override.ts +106 -0
  999. package/src/components/tile-layer.ts +161 -0
  1000. package/src/components/tilemap.ts +48 -0
  1001. package/src/components/visibility.ts +53 -0
  1002. package/src/construct-renderer.ts +4 -0
  1003. package/src/debug-draw-glue.ts +169 -0
  1004. package/src/deferred-lighting.ts +92 -0
  1005. package/src/dynamic-texture-store.ts +111 -0
  1006. package/src/engine-metrics.ts +89 -0
  1007. package/src/environment/README.md +76 -0
  1008. package/src/environment/__tests__/failure-injection.test.ts +50 -0
  1009. package/src/environment/__tests__/generation-red.test.ts +64 -0
  1010. package/src/environment/__tests__/generation.test.ts +37 -0
  1011. package/src/environment/__tests__/graph-transaction.test.ts +85 -0
  1012. package/src/environment/__tests__/inspection-red.test.ts +53 -0
  1013. package/src/environment/__tests__/lifecycle-evidence.test.ts +40 -0
  1014. package/src/environment/__tests__/pipeline-topology.test.ts +33 -0
  1015. package/src/environment/__tests__/readiness.test.ts +42 -0
  1016. package/src/environment/__tests__/recovery.test.ts +62 -0
  1017. package/src/environment/__tests__/resize-dispose.test.ts +30 -0
  1018. package/src/environment/__tests__/signature-red.test.ts +45 -0
  1019. package/src/environment/__tests__/signature.test.ts +60 -0
  1020. package/src/environment/descriptors.ts +7 -0
  1021. package/src/environment/extracted-environment.ts +239 -0
  1022. package/src/environment/generation.ts +158 -0
  1023. package/src/environment/gpu-bundle.ts +144 -0
  1024. package/src/environment/graph.ts +588 -0
  1025. package/src/environment/inspection.ts +107 -0
  1026. package/src/environment/lifecycle.ts +124 -0
  1027. package/src/environment/readiness.ts +76 -0
  1028. package/src/environment/signature.ts +185 -0
  1029. package/src/errors/ecs-validation.ts +16 -0
  1030. package/src/errors/index.ts +3 -0
  1031. package/src/errors/recover.ts +119 -0
  1032. package/src/errors/render.ts +1244 -0
  1033. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +391 -0
  1034. package/src/extract/__tests__/environment-source.test.ts +105 -0
  1035. package/src/extract/__tests__/schema-readers.unit.test.ts +16 -0
  1036. package/src/extract/directional-csm.ts +959 -0
  1037. package/src/extract/index.ts +10 -0
  1038. package/src/extract/material-interface.ts +604 -0
  1039. package/src/extract/schema-readers.ts +27 -0
  1040. package/src/extract/visibility.ts +120 -0
  1041. package/src/features/graph-contribution.ts +577 -0
  1042. package/src/features/host.ts +1097 -0
  1043. package/src/features/index.ts +100 -0
  1044. package/src/features/morph/index.ts +24 -0
  1045. package/src/features/morph/morph-bounds.ts +123 -0
  1046. package/src/features/morph/morph-feature.ts +287 -0
  1047. package/src/features/prepared-gpu-work.ts +902 -0
  1048. package/src/features/prepared-graphics-store.ts +435 -0
  1049. package/src/features/prepared-graphics.ts +479 -0
  1050. package/src/features/render-graph-compute.ts +60 -0
  1051. package/src/features/render-graph-contribution.ts +95 -0
  1052. package/src/features/render-graph-raster.ts +308 -0
  1053. package/src/features/render-graph-resources.ts +36 -0
  1054. package/src/features/scene-temporal.ts +274 -0
  1055. package/src/features/taa-resolve.ts +244 -0
  1056. package/src/features/targets.ts +83 -0
  1057. package/src/features/types.ts +291 -0
  1058. package/src/frame-chain.ts +21 -0
  1059. package/src/fullscreen-post-process-pass.ts +406 -0
  1060. package/src/glyph-text-layout-system.ts +447 -0
  1061. package/src/gpu-driven/batch-topology.ts +423 -0
  1062. package/src/gpu-driven/production-raster.ts +1705 -0
  1063. package/src/gpu-driven/view-gpu.ts +849 -0
  1064. package/src/gpu-driven/view-reference.ts +110 -0
  1065. package/src/gpu-resource-store.ts +1921 -0
  1066. package/src/gpu-resource.ts +159 -0
  1067. package/src/gpu-scene-schema.ts +224 -0
  1068. package/src/gpu-scene.ts +855 -0
  1069. package/src/gpu-stage.ts +9 -0
  1070. package/src/gpu-texture-usage.ts +12 -0
  1071. package/src/gpu-usage.ts +14 -0
  1072. package/src/hdrp-buffers.ts +689 -0
  1073. package/src/hdrp-cluster-membership.ts +70 -0
  1074. package/src/hdrp-pipeline.ts +525 -0
  1075. package/src/ibl/IblPipelineCache.ts +1246 -0
  1076. package/src/ibl/cubemap-projection.ts +60 -0
  1077. package/src/ibl/face-uniforms.ts +150 -0
  1078. package/src/ibl/skylight-bind-group.ts +513 -0
  1079. package/src/index.ts +271 -0
  1080. package/src/instance-buffer-cache.ts +123 -0
  1081. package/src/internal.ts +88 -0
  1082. package/src/lifecycle.ts +123 -0
  1083. package/src/light-buffer-layout.ts +346 -0
  1084. package/src/materials.ts +236 -0
  1085. package/src/mesh-material-bindings.ts +104 -0
  1086. package/src/mesh-update-errors.ts +113 -0
  1087. package/src/mipmap-generator.ts +244 -0
  1088. package/src/param-schema-projection-census.ts +73 -0
  1089. package/src/pbr-pipeline.ts +749 -0
  1090. package/src/persistent-render-scene.ts +1752 -0
  1091. package/src/pipeline/index.ts +40 -0
  1092. package/src/pipeline-builder.ts +386 -0
  1093. package/src/pipeline-errors.ts +172 -0
  1094. package/src/pipeline-spec.ts +1768 -0
  1095. package/src/plugin.ts +137 -0
  1096. package/src/post-process-errors.ts +304 -0
  1097. package/src/prepare/__tests__/schema-readers.unit.test.ts +16 -0
  1098. package/src/prepare/index.ts +8 -0
  1099. package/src/prepare/prepared-graphics-resolver.ts +455 -0
  1100. package/src/prepare/schema-readers.ts +20 -0
  1101. package/src/record/__tests__/environment-record.test.ts +35 -0
  1102. package/src/record/__tests__/frame-targets.unit.test.ts +54 -0
  1103. package/src/record/__tests__/material-bg-cache.unit.test.ts +41 -0
  1104. package/src/record/__tests__/material-slot-plan.unit.test.ts +76 -0
  1105. package/src/record/__tests__/membership-timing.unit.test.ts +524 -0
  1106. package/src/record/__tests__/render-submission.integration.test.ts +76 -0
  1107. package/src/record/__tests__/render-submission.perf.test.ts +141 -0
  1108. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +88 -0
  1109. package/src/record/__tests__/video-texture-view.unit.test.ts +90 -0
  1110. package/src/record/__tests__/view-ubo-layout.unit.test.ts +101 -0
  1111. package/src/record/frame-lighting.ts +1183 -0
  1112. package/src/record/frame-observation.ts +122 -0
  1113. package/src/record/frame-snapshot.ts +515 -0
  1114. package/src/record/frame-targets.ts +372 -0
  1115. package/src/record/frame.ts +1874 -0
  1116. package/src/record/helpers.ts +289 -0
  1117. package/src/record/index.ts +15 -0
  1118. package/src/record/main-pass-geometry.ts +1014 -0
  1119. package/src/record/main-pass-material.ts +716 -0
  1120. package/src/record/main-pass-skin.ts +51 -0
  1121. package/src/record/main-pass-sprite-draws.ts +1056 -0
  1122. package/src/record/main-pass-sprite.ts +166 -0
  1123. package/src/record/main-pass.ts +588 -0
  1124. package/src/record/material-payload.ts +292 -0
  1125. package/src/record/material-slot-plan.ts +68 -0
  1126. package/src/record/membership-timing.ts +1012 -0
  1127. package/src/record/mesh-ssbo.ts +406 -0
  1128. package/src/record/shadow-caster-uniform.ts +37 -0
  1129. package/src/record/shadow-pass.ts +2387 -0
  1130. package/src/record/shadow-submit-mode.ts +277 -0
  1131. package/src/record/skybox-post-pass.ts +594 -0
  1132. package/src/record/typed-frame-graph.ts +499 -0
  1133. package/src/record/view-ubo.ts +206 -0
  1134. package/src/render-data.ts +385 -0
  1135. package/src/render-dispatch-membership.ts +155 -0
  1136. package/src/render-graph-primitives.ts +1586 -0
  1137. package/src/render-pipeline-context.ts +332 -0
  1138. package/src/render-pipeline-target.ts +96 -0
  1139. package/src/render-pipeline.ts +343 -0
  1140. package/src/render-scene-projection.ts +1738 -0
  1141. package/src/render-system-extract.ts +5203 -0
  1142. package/src/render-system-fold.ts +531 -0
  1143. package/src/render-system.ts +3258 -0
  1144. package/src/renderer/asset-service.ts +32 -0
  1145. package/src/renderer/backend-selection.ts +121 -0
  1146. package/src/renderer/environment-classify.ts +30 -0
  1147. package/src/renderer/environment-error.ts +19 -0
  1148. package/src/renderer/material/assembly.ts +53 -0
  1149. package/src/renderer/material/pipeline-projection.ts +140 -0
  1150. package/src/renderer/renderer-factory.ts +9062 -0
  1151. package/src/renderer.ts +940 -0
  1152. package/src/scene-instances/post-spawn-resolve-joints.ts +168 -0
  1153. package/src/scene-utils/collect-subtree.ts +40 -0
  1154. package/src/shadow-atlas.ts +244 -0
  1155. package/src/ssao-buffers.ts +175 -0
  1156. package/src/ssao-config.ts +61 -0
  1157. package/src/ssao-data.ts +106 -0
  1158. package/src/surface-format.ts +37 -0
  1159. package/src/systems/active-camera.ts +116 -0
  1160. package/src/systems/pass-selector.ts +49 -0
  1161. package/src/systems/skin-palette-allocator.ts +294 -0
  1162. package/src/systems/transparent-sort-config.ts +211 -0
  1163. package/src/taa-history-store.ts +429 -0
  1164. package/src/temporal-coverage.ts +106 -0
  1165. package/src/temporal-frame-transaction.ts +301 -0
  1166. package/src/temporal-inspection.ts +194 -0
  1167. package/src/temporal-view.ts +174 -0
  1168. package/src/tilemap/resolve-tileset-runtime.ts +72 -0
  1169. package/src/tilemap-chunk-extract-system.ts +1307 -0
  1170. package/src/typed-render-graph-primitives.ts +530 -0
  1171. package/src/typed-shadow-passes.ts +195 -0
  1172. package/src/urp-pipeline.ts +340 -0
@@ -0,0 +1,1244 @@
1
+ // @forgeax/engine-render -- render cluster error classes.
2
+ //
3
+ // feat-20260704-runtime-tier1-decomposition M2 / w8 (D-3): the monolithic
4
+ // errors.ts RuntimeErrorCode / RuntimeError top-level aggregate unions are
5
+ // decomposed into five per-cluster files (render / asset / skin / recover /
6
+ // environment). Each cluster owns a closed *ErrorCode code union + a closed
7
+ // *Error class union; error class names, .code literals, and .detail shapes
8
+ // are preserved byte-for-byte (OOS-4: zero semantic change).
9
+ //
10
+ // The render cluster holds the shadow / HDRP cluster-forward + deferred /
11
+ // g-buffer / point-shadow-atlas / video-upload / vertex-storage-buffer render
12
+ // path errors. ShadowInvalidConfigError is consumed by the DirectionalLight /
13
+ // SpotLight / PointLightShadow component validators (forward cross-directory
14
+ // import, no cycle -- research Finding C2).
15
+
16
+ import type {
17
+ RenderFeatureCapabilityMissingDetail,
18
+ RenderFeatureDrawRecordingFailedDetail,
19
+ RenderFeaturePassOrderConflictDetail,
20
+ RenderFeaturePreparationFailedDetail,
21
+ RenderFeaturePreparedStateMismatchDetail,
22
+ RenderFeatureRecovery,
23
+ RenderFeatureRegistrationConflictDetail,
24
+ RenderFeatureStage,
25
+ RenderFeatureStageFailedDetail,
26
+ } from '../features/types';
27
+ import type { MaterialRenderError } from '../renderer/material/pipeline-projection';
28
+
29
+ // -- Scene Fog owner errors --------------------------------------------------
30
+
31
+ /** Bounded identity facts for a resource-owner Fog cardinality conflict. */
32
+ export interface FogOwnerConflictDetail {
33
+ readonly resourceOwner: number;
34
+ readonly entities: readonly number[];
35
+ readonly omitted: number;
36
+ }
37
+
38
+ /** The resource owner contains more than one Fog authoring entity. */
39
+ export class FogOwnerConflictError extends Error {
40
+ readonly code = 'fog-owner-conflict' as const;
41
+ readonly expected = 'resourceOwner contains zero or one Fog entity';
42
+ readonly hint =
43
+ 'remove every Fog entity except one from the resourceOwner World, then retry draw';
44
+ readonly detail: FogOwnerConflictDetail;
45
+
46
+ constructor(resourceOwner: number, entities: readonly number[], omitted: number) {
47
+ super(
48
+ `Fog owner conflict in resourceOwner ${resourceOwner}: ${entities.length + omitted} entities`,
49
+ );
50
+ this.name = 'FogOwnerConflictError';
51
+ this.detail = {
52
+ resourceOwner,
53
+ entities: [...entities],
54
+ omitted,
55
+ };
56
+ }
57
+ }
58
+
59
+ /** Structured detail for one invalid Fog field. */
60
+ export interface FogParametersInvalidDetail {
61
+ readonly entity: number;
62
+ readonly field: string;
63
+ readonly expected: string;
64
+ readonly actual: unknown;
65
+ }
66
+
67
+ /** A resource-owner Fog entity contains an invalid authored parameter. */
68
+ export class FogParametersInvalidError extends Error {
69
+ readonly code = 'fog-parameters-invalid' as const;
70
+ readonly expected: string;
71
+ readonly hint: string;
72
+ readonly detail: FogParametersInvalidDetail;
73
+
74
+ constructor(entity: number, field: string, expected: string, actual: unknown) {
75
+ super(`Fog.${field} is invalid on entity ${entity}`);
76
+ this.name = 'FogParametersInvalidError';
77
+ this.expected = expected;
78
+ this.hint = `set Fog.${field} to ${expected} on entity ${entity}, then retry draw`;
79
+ this.detail = { entity, field, expected, actual };
80
+ }
81
+ }
82
+
83
+ // ── ShadowInvalidConfigError ──────────────────────────────────────────────
84
+
85
+ /**
86
+ * Detail for `RuntimeErrorCode 'shadow-invalid-config'`.
87
+ *
88
+ * Emitted by `DirectionalLight.validate` shadow-field path when a field value violates
89
+ * runtime constraints (e.g. mapSize < 1, cascadeCount not in {1..4}).
90
+ * AI users access `.detail.field` / `.detail.value` / `.detail.min` /
91
+ * `.detail.max` via property access — no string parsing.
92
+ *
93
+ * `max` is `undefined` for lower-bound-only validations (e.g. mapSize < 1).
94
+ * feat-20260613-csm: max added for upper-bound cascade validations
95
+ * (cascadeCount max=4, splitLambda max=1, cascadeBlend max=0.5).
96
+ */
97
+ export interface ShadowInvalidConfigDetail {
98
+ readonly field: string;
99
+ readonly value: number;
100
+ readonly min: number;
101
+ readonly max?: number;
102
+ }
103
+
104
+ /**
105
+ * Structured error for shadow component config validation failures.
106
+ *
107
+ * Emitted by `DirectionalLight.validate()` shadow-field path (mapSize / cascadeCount /
108
+ * splitLambda / cascadeBlend / shadowDistance) and `PointLightShadow.validate()`
109
+ * (mapSize / farPlane > nearPlane / pcfKernelSize); both shadow component
110
+ * types share this single error class so `switch (err.code)` on
111
+ * `RuntimeErrorCode` only needs one branch (charter P4 — closed-union SSOT).
112
+ * Four-field surface per AGENTS.md error model:
113
+ * - `.code = 'shadow-invalid-config'` (closed RuntimeErrorCode)
114
+ * - `.expected` — expected-state description (programmatic predicate form)
115
+ * - `.hint` — actionable recovery guidance (imperative; AI users paste into
116
+ * spawn calls). Integer-typed fields (e.g. `cascadeCount`, `pcfKernelSize`)
117
+ * get an "integer in [min, max]" hint; otherwise "[min, max]" range or
118
+ * "<comparator> min".
119
+ * - `.detail = { field, value, min, max? }` — structured values (charter P4)
120
+ *
121
+ * 4th constructor parameter is a union over the two range shapes:
122
+ * - `number` — `max` for a closed `[min, max]` range (CSM cascadeCount /
123
+ * splitLambda / cascadeBlend). hint uses "in [min, max]"; integer-typed
124
+ * fields get "integer in [min, max]".
125
+ * - `'>' | '>='` — comparator for an open lower-bound predicate. `'>'` is
126
+ * used when `min` carries dynamic context (e.g. `farPlane > nearPlane` —
127
+ * the surfaced hint reads "must be > nearPlane" so AI users setting
128
+ * farPlane=nearPlane don't re-fail the spawn loop with the wrong cue).
129
+ * - `undefined` — defaults to `'>='`. Callsites for mapSize < 1 validation
130
+ * stay backward-compatible (3-arg form).
131
+ */
132
+ export class ShadowInvalidConfigError extends Error {
133
+ readonly code = 'shadow-invalid-config' as const;
134
+ readonly expected: string;
135
+ readonly hint: string;
136
+ readonly detail: ShadowInvalidConfigDetail;
137
+
138
+ constructor(field: string, value: number, min: number, maxOrComparator?: number | '>' | '>=') {
139
+ const isComparator = maxOrComparator === '>' || maxOrComparator === '>=';
140
+ const max = !isComparator && typeof maxOrComparator === 'number' ? maxOrComparator : undefined;
141
+ const comparator: '>' | '>=' = isComparator ? (maxOrComparator as '>' | '>=') : '>=';
142
+ // Integer-typed fields get an "integer in [min, max]" hint when a range
143
+ // is supplied. Expand this set as new integer-typed shadow fields land.
144
+ const isInteger = field === 'cascadeCount' || field === 'pcfKernelSize';
145
+ // pcfKernelSize must be odd (kernel is symmetric around the center tap).
146
+ // Naming "odd" in the hint stops an AI retry from looping min->min+1 (4->6).
147
+ const isOdd = field === 'pcfKernelSize';
148
+ const hint =
149
+ max !== undefined
150
+ ? isInteger
151
+ ? `set ${field} to an integer in [${min}, ${max}]; got ${value}`
152
+ : `set ${field} to a value in [${min}, ${max}]; got ${value}`
153
+ : isOdd
154
+ ? `set ${field} to an odd integer ${comparator} ${min}; got ${value}`
155
+ : `set ${field} to a value ${comparator} ${min}; got ${value}`;
156
+ const expected =
157
+ max !== undefined ? `${field} in [${min}, ${max}]` : `${field} ${comparator} ${min}`;
158
+ super(
159
+ max !== undefined
160
+ ? `shadow component .${field} must be in [${min}, ${max}], got ${value}`
161
+ : `shadow component .${field} must be ${comparator} ${min}, got ${value}`,
162
+ );
163
+ this.name = 'ShadowInvalidConfigError';
164
+ this.hint = hint;
165
+ this.expected = expected;
166
+ this.detail = { field, value, min, ...(max !== undefined ? { max } : {}) };
167
+ }
168
+ }
169
+
170
+ // ── EquirectProjectionFailedError ────────────────────────────────────────────
171
+
172
+ /**
173
+ * Detail for `RuntimeErrorCode 'equirect-projection-failed'`.
174
+ *
175
+ * Emitted when the equirect-to-cubemap IBL projection fails for the equirect
176
+ * handle referenced by a `Skylight` / `SkyboxBackground` component. The handle
177
+ * id is carried so AI users can trace which equirect source failed projection.
178
+ * Degradation: the record arm records `status:'failed'`, binds the white-cube
179
+ * fallback, fires this error ONCE, and does NOT retry the projection.
180
+ *
181
+ * feat-20260630 D-5: structured error with detail carrying the handle id.
182
+ */
183
+ export interface EquirectProjectionFailedDetail {
184
+ readonly handle: number;
185
+ }
186
+
187
+ /**
188
+ * Structured error for a failed equirect-to-cubemap IBL projection.
189
+ *
190
+ * Emitted by the record stage when the internal cubemap projection for an
191
+ * equirect handle returns a failure (or records `status:'failed'`). Four-field
192
+ * surface per AGENTS.md error model:
193
+ * - `.code = 'equirect-projection-failed'` (closed RuntimeErrorCode)
194
+ * - `.expected` — equirect-to-cubemap projection + IBL precompute succeeds
195
+ * - `.hint` — declare `Skylight{equirect}` with a valid HDR equirect source;
196
+ * check `device.caps.rgba16floatRenderable`. The projection is internal —
197
+ * there is no user upload call to retry
198
+ * - `.detail = { handle }` — the numeric equirect handle id for diagnostics
199
+ */
200
+ export class EquirectProjectionFailedError extends Error {
201
+ readonly code = 'equirect-projection-failed' as const;
202
+ readonly expected: string;
203
+ readonly hint: string;
204
+ readonly detail: EquirectProjectionFailedDetail;
205
+
206
+ constructor(handle: number) {
207
+ const expected = `equirect handle ${handle} projects to a GPU cubemap + IBL precompute`;
208
+ const hint =
209
+ `equirect handle ${handle} referenced by Skylight/SkyboxBackground failed projection; ` +
210
+ `declare Skylight{equirect} with a valid HDR equirect source and check device.caps.rgba16floatRenderable. ` +
211
+ `The projection is internal (no user upload call); the record arm does not retry`;
212
+ super(`equirect handle ${handle} cubemap projection failed`);
213
+ this.name = 'EquirectProjectionFailedError';
214
+ this.expected = expected;
215
+ this.hint = hint;
216
+ this.detail = { handle };
217
+ }
218
+ }
219
+
220
+ // ── HdrpCapsInsufficientError ──────────────────────────────────────────────
221
+
222
+ /**
223
+ * Detail for `RuntimeErrorCode 'hdrp-caps-insufficient'`.
224
+ *
225
+ * Emitted at install time when `device.caps.maxStorageBuffersPerShaderStage < 4`.
226
+ */
227
+ export interface HdrpCapsInsufficientDetail {
228
+ readonly capName: string;
229
+ readonly actual: number;
230
+ readonly required: number;
231
+ }
232
+
233
+ /**
234
+ * Structured error for HDRP storage-buffer capability gate failure (AC-17/AC-18).
235
+ *
236
+ * Emitted at `installPipeline(hdrpAsset)` time — synchronous throw.
237
+ * - `.code = 'hdrp-caps-insufficient'` (closed RuntimeErrorCode)
238
+ * - `.expected` — describes the required capability
239
+ * - `.hint` — 'fall back to URP by not calling installPipeline'
240
+ * - `.detail = { capName, actual, required }`
241
+ */
242
+ export class HdrpCapsInsufficientError extends Error {
243
+ readonly code = 'hdrp-caps-insufficient' as const;
244
+ readonly expected: string;
245
+ readonly hint: string;
246
+ readonly detail: HdrpCapsInsufficientDetail;
247
+
248
+ constructor(capName: string, actual: number, required: number) {
249
+ const expected = `${capName} >= ${required}`;
250
+ const hint =
251
+ `${capName} = ${actual} (need >= ${required}); ` +
252
+ 'this device does not have enough storage buffer slots for HDRP cluster-forward rendering. ' +
253
+ 'Fall back to URP by not calling installPipeline(hdrpAsset)';
254
+ super(`HDRP caps insufficient: ${capName} = ${actual} (need >= ${required})`);
255
+ this.name = 'HdrpCapsInsufficientError';
256
+ this.expected = expected;
257
+ this.hint = hint;
258
+ this.detail = { capName, actual, required };
259
+ }
260
+ }
261
+
262
+ // ── HdrpLightBudgetExceededError ───────────────────────────────────────────
263
+
264
+ /**
265
+ * Detail for `RuntimeErrorCode 'hdrp-light-budget-exceeded'`.
266
+ *
267
+ * Emitted per-frame (once-per-frame fire) when light count exceeds HDRP budget.
268
+ */
269
+ export interface HdrpLightBudgetExceededDetail {
270
+ readonly actual: number;
271
+ readonly budget: number;
272
+ }
273
+
274
+ /**
275
+ * Structured error for HDRP light budget exceeded (AC-06/AC-07).
276
+ *
277
+ * Emitted per-frame in recordFrame when the total punctual light count
278
+ * exceeds the HDRP budget (256). Fail-soft: fire once per frame, truncate to 256.
279
+ * - `.code = 'hdrp-light-budget-exceeded'` (closed RuntimeErrorCode)
280
+ * - `.expected` — 'light count <= 256'
281
+ * - `.hint` — 'reduce world light count or increase budget (OOS-hdrp-larger-budget)'
282
+ * - `.detail = { actual, budget }`
283
+ */
284
+ export class HdrpLightBudgetExceededError extends Error {
285
+ readonly code = 'hdrp-light-budget-exceeded' as const;
286
+ readonly expected: string;
287
+ readonly hint: string;
288
+ readonly detail: HdrpLightBudgetExceededDetail;
289
+
290
+ constructor(actual: number, budget: number) {
291
+ const expected = `light count <= ${budget}`;
292
+ const hint =
293
+ `${actual} lights exceed HDRP budget ${budget}; ` +
294
+ 'truncating to 256. Reduce light count or wait for OOS-hdrp-larger-budget';
295
+ super(`HDRP light budget exceeded: ${actual} > ${budget}`);
296
+ this.name = 'HdrpLightBudgetExceededError';
297
+ this.expected = expected;
298
+ this.hint = hint;
299
+ this.detail = { actual, budget };
300
+ }
301
+ }
302
+
303
+ // ── HdrpIndexListOverflowError ─────────────────────────────────────────────
304
+
305
+ /**
306
+ * Detail for `RuntimeErrorCode 'hdrp-index-list-overflow'`.
307
+ *
308
+ * Emitted per-frame (once-per-frame fire) when the cluster binner overflows
309
+ * the light index list capacity (65536). Upgraded from ClusterBinError.
310
+ */
311
+ export interface HdrpIndexListOverflowDetail {
312
+ readonly actual: number;
313
+ readonly capacity: number;
314
+ }
315
+
316
+ /**
317
+ * Structured error for HDRP cluster binner index list overflow (AC-24).
318
+ *
319
+ * Emitted per-frame in recordFrame when the CPU binner returns
320
+ * `ClusterBinError('index-overflow')`. Fail-soft: fire once per frame,
321
+ * continue rendering with what fit.
322
+ * - `.code = 'hdrp-index-list-overflow'` (closed RuntimeErrorCode)
323
+ * - `.expected` — 'light index list entries <= 65536'
324
+ * - `.hint` — 'reduce lights, shrink cluster grid, or increase capacity'
325
+ * - `.detail = { actual, capacity }`
326
+ */
327
+ export class HdrpIndexListOverflowError extends Error {
328
+ readonly code = 'hdrp-index-list-overflow' as const;
329
+ readonly expected: string;
330
+ readonly hint: string;
331
+ readonly detail: HdrpIndexListOverflowDetail;
332
+
333
+ constructor(actual: number, capacity: number) {
334
+ const expected = `light index list entries <= ${capacity}`;
335
+ const hint =
336
+ `cluster binner overflow: writeCount ${actual} exceeds capacity ${capacity}; ` +
337
+ 'reduce lights, shrink cluster grid, or increase LIGHT_INDEX_LIST_CAPACITY';
338
+ super(`HDRP index list overflow: ${actual} > ${capacity}`);
339
+ this.name = 'HdrpIndexListOverflowError';
340
+ this.expected = expected;
341
+ this.hint = hint;
342
+ this.detail = { actual, capacity };
343
+ }
344
+ }
345
+
346
+ // ── HdrpDeferredCapsInsufficientError ──────────────────────────────────────
347
+
348
+ /**
349
+ * Detail for `RuntimeErrorCode 'hdrp-deferred-caps-insufficient'`.
350
+ *
351
+ * Emitted at `installPipeline(hdrpAsset)` time when `device.caps.maxColorAttachments < 4`,
352
+ * meaning the deferred path cannot allocate 3 g-buffer color targets + depth.
353
+ */
354
+ export interface HdrpDeferredCapsInsufficientDetail {
355
+ readonly actual: number;
356
+ readonly expected: number;
357
+ }
358
+
359
+ /**
360
+ * Structured error for deferred-path capability gate failure.
361
+ *
362
+ * Emitted at `installPipeline(hdrpAsset)` time — synchronous throw.
363
+ * - `.code = 'hdrp-deferred-caps-insufficient'` (closed RuntimeErrorCode)
364
+ * - `.expected` — 'maxColorAttachments >= 4'
365
+ * - `.hint` — actionable guidance to upgrade browser or select URP
366
+ * - `.detail = { actual, expected }`
367
+ *
368
+ * @see plan-strategy D-5 (install-time caps check, no silent fallback)
369
+ */
370
+ export class HdrpDeferredCapsInsufficientError extends Error {
371
+ readonly code = 'hdrp-deferred-caps-insufficient' as const;
372
+ readonly expected: string;
373
+ readonly hint: string;
374
+ readonly detail: HdrpDeferredCapsInsufficientDetail;
375
+
376
+ constructor(actual: number) {
377
+ const _expected = 4;
378
+ const _expectedStr = `maxColorAttachments >= ${_expected}`;
379
+ const hint =
380
+ `WebGPU maxColorAttachments = ${actual} (need >= ${_expected}). ` +
381
+ 'Upgrade browser to latest Chrome/Edge/Safari, or use URP (forgeax::urp) instead of HDRP.';
382
+ super(
383
+ `HDRP deferred caps insufficient: maxColorAttachments = ${actual} (need >= ${_expected})`,
384
+ );
385
+ this.name = 'HdrpDeferredCapsInsufficientError';
386
+ this.expected = _expectedStr;
387
+ this.hint = hint;
388
+ this.detail = { actual, expected: _expected };
389
+ }
390
+ }
391
+
392
+ // ── GbufferRtAllocFailedError ──────────────────────────────────────────────
393
+
394
+ /**
395
+ * Detail for `RuntimeErrorCode 'gbuffer-rt-alloc-failed'`.
396
+ *
397
+ * Emitted at runtime when a g-buffer color target pool allocation fails
398
+ * (OOM or backend resource limit). The attachmentIndex identifies which
399
+ * g-buffer slot failed.
400
+ */
401
+ export interface GbufferRtAllocFailedDetail {
402
+ readonly attachmentIndex: number;
403
+ readonly requestedBytes: number;
404
+ }
405
+
406
+ /**
407
+ * Structured error for g-buffer color-target pool allocation failure.
408
+ *
409
+ * Emitted at runtime during g-buffer pass setup.
410
+ * - `.code = 'gbuffer-rt-alloc-failed'` (closed RuntimeErrorCode)
411
+ * - `.expected` — 'g-buffer color target allocation succeeded'
412
+ * - `.hint` — actionable recovery steps (check GPU memory / reduce resolution)
413
+ * - `.detail = { attachmentIndex, requestedBytes }`
414
+ *
415
+ * @note This error is declared in M1 but only triggered in M2 (g-buffer RT
416
+ * allocation path). The union member exists for compile-time narrowing now.
417
+ */
418
+ export class GbufferRtAllocFailedError extends Error {
419
+ readonly code = 'gbuffer-rt-alloc-failed' as const;
420
+ readonly expected: string;
421
+ readonly hint: string;
422
+ readonly detail: GbufferRtAllocFailedDetail;
423
+
424
+ constructor(attachmentIndex: number, requestedBytes: number) {
425
+ const expected = 'g-buffer color target allocation succeeded';
426
+ const hint =
427
+ `g-buffer color target (attachment ${attachmentIndex}, ${requestedBytes} bytes) allocation failed. ` +
428
+ 'Common causes: (a) GPU memory pressure; (b) framebuffer resolution too large; ' +
429
+ '(c) RHI backend limits hit. Check device.limits and reduce frame resolution.';
430
+ super(`g-buffer RT alloc failed: attachment[${attachmentIndex}] = ${requestedBytes} bytes`);
431
+ this.name = 'GbufferRtAllocFailedError';
432
+ this.expected = expected;
433
+ this.hint = hint;
434
+ this.detail = { attachmentIndex, requestedBytes };
435
+ }
436
+ }
437
+
438
+ // ── GbufferAttachmentCountMismatchError ────────────────────────────────────
439
+
440
+ /**
441
+ * Detail for `RuntimeErrorCode 'gbuffer-attachment-count-mismatch'`.
442
+ *
443
+ * Emitted at install-time when the g-buffer attachment count declared
444
+ * in the pipeline schema does not equal 3.
445
+ */
446
+ export interface GbufferAttachmentCountMismatchDetail {
447
+ readonly actual: number;
448
+ readonly expected: number;
449
+ }
450
+
451
+ /**
452
+ * Structured error for g-buffer attachment count mismatch.
453
+ *
454
+ * Emitted at `installPipeline(hdrpAsset)` time via topology validation.
455
+ * - `.code = 'gbuffer-attachment-count-mismatch'` (closed RuntimeErrorCode)
456
+ * - `.expected` — 'exactly 3 g-buffer color attachments'
457
+ * - `.hint` — check pipeline internal schema or custom g-buffer override
458
+ * - `.detail = { actual, expected }`
459
+ *
460
+ * @note This error is declared in M1 but only triggered in M2 (g-buffer
461
+ * topology validation). The union member exists for compile-time narrowing now.
462
+ */
463
+ export class GbufferAttachmentCountMismatchError extends Error {
464
+ readonly code = 'gbuffer-attachment-count-mismatch' as const;
465
+ readonly expected: string;
466
+ readonly hint: string;
467
+ readonly detail: GbufferAttachmentCountMismatchDetail;
468
+
469
+ constructor(actual: number) {
470
+ const _expected = 3;
471
+ const _expectedStr = `exactly ${_expected} g-buffer color attachments`;
472
+ const hint =
473
+ `HDRP deferred expects ${_expected} g-buffer color attachments, got ${actual}. ` +
474
+ 'Check hdrp-pipeline internal schema or custom g-buffer override.';
475
+ super(`g-buffer attachment count mismatch: got ${actual}, expected ${_expected}`);
476
+ this.name = 'GbufferAttachmentCountMismatchError';
477
+ this.expected = _expectedStr;
478
+ this.hint = hint;
479
+ this.detail = { actual, expected: _expected };
480
+ }
481
+ }
482
+
483
+ // ── PointShadowAtlasUninitializedError ─────────────────────────────────────
484
+
485
+ /**
486
+ * Structured error for `ShadowAtlas.faceView` called before `ensure()`
487
+ * allocated the cube_array texture. Replaces the prior bare
488
+ * `throw new Error()` (Round-2 F-4: P3 closed-union compliance).
489
+ *
490
+ * - `.code = 'point-shadow-atlas-uninitialized'`
491
+ * - `.expected` — call `ensure()` before iterating face views
492
+ * - `.hint` — gate `faceView` on `isAllocated()` or call `ensure()` once
493
+ * in the per-frame extract step before recording the 6 x N caster passes
494
+ * - `.detail = undefined` (no per-call data needed)
495
+ */
496
+ export class PointShadowAtlasUninitializedError extends Error {
497
+ readonly code = 'point-shadow-atlas-uninitialized' as const;
498
+ readonly expected: string;
499
+ readonly hint: string;
500
+
501
+ constructor() {
502
+ const expected = 'ShadowAtlas.ensure() invoked before faceView()';
503
+ const hint =
504
+ 'Gate faceView on isAllocated() or call ensure() once in the per-frame extract step before iterating face views';
505
+ super('ShadowAtlas.faceView called before ensure(); the cube_array texture is not allocated');
506
+ this.name = 'PointShadowAtlasUninitializedError';
507
+ this.expected = expected;
508
+ this.hint = hint;
509
+ }
510
+ }
511
+
512
+ // ── PointShadowAtlasBoundsViolationError ───────────────────────────────────
513
+
514
+ /**
515
+ * Detail for `RuntimeErrorCode 'point-shadow-atlas-bounds-violation'`.
516
+ *
517
+ * Emitted by `ShadowAtlas.faceView` when `layer` falls outside `[0, layers)`
518
+ * or `face` falls outside `[0, 6)`. Both axes are reported as
519
+ * `{ axis, value, max }` so AI users discriminate without parsing the message.
520
+ */
521
+ export interface PointShadowAtlasBoundsViolationDetail {
522
+ readonly axis: 'layer' | 'face';
523
+ readonly value: number;
524
+ readonly max: number;
525
+ }
526
+
527
+ /**
528
+ * Structured error for `ShadowAtlas.faceView(layer, face)` arguments outside
529
+ * the allocated atlas range. Replaces the prior bare `throw new Error()`
530
+ * (Round-2 F-4: P3 closed-union compliance).
531
+ *
532
+ * - `.code = 'point-shadow-atlas-bounds-violation'`
533
+ * - `.expected` — `0 <= layer < layers && 0 <= face < 6`
534
+ * - `.hint` — clamp `shadowAtlasLayer` or face index before calling
535
+ * `faceView`; the cap on layers is `PointLightShadow` cardinality (4)
536
+ * - `.detail = { axis, value, max }` — discriminates layer vs face
537
+ */
538
+ export class PointShadowAtlasBoundsViolationError extends Error {
539
+ readonly code = 'point-shadow-atlas-bounds-violation' as const;
540
+ readonly expected: string;
541
+ readonly hint: string;
542
+ readonly detail: PointShadowAtlasBoundsViolationDetail;
543
+
544
+ constructor(axis: 'layer' | 'face', value: number, max: number) {
545
+ const expected = `0 <= ${axis} < ${max}`;
546
+ const hint =
547
+ axis === 'layer'
548
+ ? `clamp PointLight.shadowAtlasLayer to [0, ${max}); the cap on layers equals PointLightShadow cardinality (4)`
549
+ : `clamp face index to [0, ${max}); cube faces are indexed 0..5 in +X/-X/+Y/-Y/+Z/-Z order`;
550
+ super(`ShadowAtlas.faceView ${axis} out of range: ${value} (must be in [0, ${max}))`);
551
+ this.name = 'PointShadowAtlasBoundsViolationError';
552
+ this.expected = expected;
553
+ this.hint = hint;
554
+ this.detail = { axis, value, max };
555
+ }
556
+ }
557
+
558
+ // ── VideoUploadUnsupportedError ─────────────────────────────────────────
559
+
560
+ /**
561
+ * Structured error for `RuntimeErrorCode 'video-upload-unsupported'`
562
+ * (feat-20260623-world-space-video-asset M3 / w11 — AC-10).
563
+ *
564
+ * Fired by the per-frame record stage (`videoTextureView`) when a VideoPlayer
565
+ * entity can reach neither video upload path this frame: the general
566
+ * `copyExternalImageToTexture` path (no host HTMLVideoElement resolved via
567
+ * `VideoElementProvider`) AND the high-perf `GPUExternalTexture` path
568
+ * (capability absent). The engine surfaces this explicit failure rather than
569
+ * silently rendering a stale/garbage texture (charter P3, plan-strategy D-6).
570
+ * - `.code = 'video-upload-unsupported'`
571
+ * - `.expected` — at least one upload path available (host element or
572
+ * GPUExternalTexture capability)
573
+ * - `.hint` — actionable recovery: use a static texture or switch backend
574
+ * - `.detail` — undefined (no narrowed detail variant)
575
+ */
576
+ export class VideoUploadUnsupportedError extends Error {
577
+ readonly code = 'video-upload-unsupported' as const;
578
+ readonly expected: string;
579
+ readonly hint: string;
580
+
581
+ constructor() {
582
+ const expected =
583
+ 'at least one video upload path available: a host HTMLVideoElement (general copyExternalImageToTexture path) or GPUExternalTexture capability (high-perf path)';
584
+ const hint =
585
+ 'this backend exposes no usable video upload path; render a static texture instead, or switch to a WebGPU backend that supports video texture upload';
586
+ super('video upload unsupported — no general or high-perf path available');
587
+ this.name = 'VideoUploadUnsupportedError';
588
+ this.expected = expected;
589
+ this.hint = hint;
590
+ }
591
+ }
592
+
593
+ // ── VertexStorageBufferUnavailableError ─────────────────────────────────
594
+
595
+ /**
596
+ * Structured error for missing vertex-stage storage buffer capability.
597
+ *
598
+ * Emitted at createRenderer time (cap-gate).
599
+ * - `.code = 'vertex-storage-buffer-unavailable'`
600
+ * - `.expected` — device.caps supports vertex-stage storage buffer
601
+ * - `.hint` — switch to a WebGPU adapter with vertex storage buffer support or use uniform-buffer fallback (OOS-uniform-palette)
602
+ * - `.detail` — undefined (no narrowed detail variant)
603
+ */
604
+ export class VertexStorageBufferUnavailableError extends Error {
605
+ readonly code = 'vertex-storage-buffer-unavailable' as const;
606
+ readonly expected: string;
607
+ readonly hint: string;
608
+
609
+ constructor() {
610
+ const expected =
611
+ 'device.caps supports vertex-stage storage buffer (maxStorageBuffersPerShaderStage >= 1)';
612
+ const hint =
613
+ 'this device does not support vertex-stage storage buffers; skinning requires vertex-stage storage buffer access (OOS-uniform-palette fallback not implemented)';
614
+ super('vertex-stage storage buffer unavailable — skinning cannot operate');
615
+ this.name = 'VertexStorageBufferUnavailableError';
616
+ this.expected = expected;
617
+ this.hint = hint;
618
+ }
619
+ }
620
+
621
+ // ── Skin palette/material validation errors ────────────────────────────────
622
+
623
+ /** Detail for a palette buffer that exceeds the device storage limit. */
624
+ export interface SkinPaletteOverflowDetail {
625
+ readonly requestedBytes: number;
626
+ readonly limit: number;
627
+ }
628
+
629
+ /**
630
+ * Structured render error for a skin palette allocation that exceeds the
631
+ * device storage-buffer binding limit. The allocator that emits this error
632
+ * lives in render, so the error belongs to the render union rather than the
633
+ * renderer-independent skinning binding package.
634
+ */
635
+ export class SkinPaletteOverflowError extends Error {
636
+ readonly code = 'skin-palette-overflow' as const;
637
+ readonly expected: string;
638
+ readonly hint: string;
639
+ readonly detail: SkinPaletteOverflowDetail;
640
+
641
+ constructor(requestedBytes: number, limit: number) {
642
+ const expected = `skinned joint palette (${requestedBytes} B) fits within device.limits.maxStorageBufferBindingSize (${limit} B)`;
643
+ const hint =
644
+ 'palette buffer exceeds device maxStorageBufferBindingSize; reduce skinned entity count or split into multiple palette buffers (OOS-skin-palette-batch)';
645
+ super(`skin palette buffer needs ${requestedBytes} B, exceeds device limit ${limit} B`);
646
+ this.name = 'SkinPaletteOverflowError';
647
+ this.expected = expected;
648
+ this.hint = hint;
649
+ this.detail = { requestedBytes, limit };
650
+ }
651
+ }
652
+
653
+ /** Detail for a skinned entity using a non-skin material shader. */
654
+ export interface SkinMaterialMismatchDetail {
655
+ readonly entity: number;
656
+ readonly actualShader: string | undefined;
657
+ }
658
+
659
+ /** Structured render error for a Skin/non-skin-material mismatch. */
660
+ export class SkinMaterialMismatchError extends Error {
661
+ readonly code = 'skin-material-mismatch' as const;
662
+ readonly expected: string;
663
+ readonly hint: string;
664
+ readonly detail: SkinMaterialMismatchDetail;
665
+
666
+ constructor(entity: number, actualShader: string | undefined) {
667
+ const expected = "Skin entity's first material program module === 'forgeax::pbr-skin'";
668
+ const hint = `entity ${entity} has Skin but the first material program module is ${actualShader ?? '<empty>'}; load the mesh via the gltf importer (cooker auto-routes 'forgeax::pbr-skin' for skinned primitives), or remove the Skin component to render the entity unskinned with Materials.standard / Materials.unlit`;
669
+ super(
670
+ `Skin / material mismatch on entity ${entity}: expected forgeax::pbr-skin, got ${actualShader ?? '<empty>'}`,
671
+ );
672
+ this.name = 'SkinMaterialMismatchError';
673
+ this.expected = expected;
674
+ this.hint = hint;
675
+ this.detail = { entity, actualShader };
676
+ }
677
+ }
678
+
679
+ /** Detail for a pbr-skin material whose mesh lacks skin attributes. */
680
+ export interface MaterialSkinAttrMissingDetail {
681
+ readonly entity: number;
682
+ readonly missing: 'skinIndex' | 'skinWeight' | 'both';
683
+ }
684
+
685
+ /** Structured render error for a pbr-skin material/mesh attribute mismatch. */
686
+ export class MaterialSkinAttrMissingError extends Error {
687
+ readonly code = 'material-skin-attr-missing' as const;
688
+ readonly expected: string;
689
+ readonly hint: string;
690
+ readonly detail: MaterialSkinAttrMissingDetail;
691
+
692
+ constructor(entity: number, missing: 'skinIndex' | 'skinWeight' | 'both') {
693
+ const expected = 'pbr-skin material requires mesh.attributes.skinIndex + skinWeight';
694
+ const hint = `entity ${entity} uses forgeax::pbr-skin but its MeshAsset is missing ${missing}; switch the entity to a skinned glTF mesh authored with JOINTS_0 + WEIGHTS_0, or change the material to a non-skin shader via Materials.standard / Materials.unlit`;
695
+ super(
696
+ `material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${missing}`,
697
+ );
698
+ this.name = 'MaterialSkinAttrMissingError';
699
+ this.expected = expected;
700
+ this.hint = hint;
701
+ this.detail = { entity, missing };
702
+ }
703
+ }
704
+
705
+ // -- RenderFeature errors ---------------------------------------------------
706
+
707
+ const renderFeatureRecoveryHintByRecovery = {
708
+ 'next-frame': (featureIdentity: string, stage: RenderFeatureStage) =>
709
+ `correct '${featureIdentity}' ${stage} data and retry on the next frame`,
710
+ 'renderer-recover': (featureIdentity: string, _stage: RenderFeatureStage) =>
711
+ `wait for renderer recovery before retrying '${featureIdentity}'`,
712
+ registration: (featureIdentity: string, _stage: RenderFeatureStage) =>
713
+ `correct '${featureIdentity}' registration before retrying`,
714
+ } satisfies Record<
715
+ RenderFeatureRecovery,
716
+ (featureIdentity: string, stage: RenderFeatureStage) => string
717
+ >;
718
+
719
+ export class RenderFeatureRegistrationConflictError extends Error {
720
+ readonly code = 'render-feature-registration-conflict' as const;
721
+ readonly expected: string;
722
+ readonly hint: string;
723
+ readonly detail: RenderFeatureRegistrationConflictDetail;
724
+
725
+ constructor(featureIdentity: string, order: number, conflictingOrder: number) {
726
+ const expected = `feature identity '${featureIdentity}' is unique`;
727
+ const hint = `rename '${featureIdentity}' or remove the duplicate feature before registration`;
728
+ super(`render feature registration conflict for '${featureIdentity}'`);
729
+ this.name = 'RenderFeatureRegistrationConflictError';
730
+ this.expected = expected;
731
+ this.hint = hint;
732
+ this.detail = { featureIdentity, order, conflictingOrder };
733
+ }
734
+ }
735
+
736
+ export class RenderFeatureStageFailedError extends Error {
737
+ readonly code = 'render-feature-stage-failed' as const;
738
+ readonly expected: string;
739
+ readonly hint: string;
740
+ readonly detail: RenderFeatureStageFailedDetail;
741
+
742
+ constructor(
743
+ featureIdentity: string,
744
+ order: number,
745
+ stage: RenderFeatureStage,
746
+ recovery: RenderFeatureRecovery,
747
+ ) {
748
+ const expected = `feature '${featureIdentity}' completes its ${stage} stage without an error`;
749
+ const hint = renderFeatureRecoveryHintByRecovery[recovery](featureIdentity, stage);
750
+ super(`render feature '${featureIdentity}' failed during ${stage}`);
751
+ this.name = 'RenderFeatureStageFailedError';
752
+ this.expected = expected;
753
+ this.hint = hint;
754
+ this.detail = { featureIdentity, order, stage, recovery };
755
+ }
756
+ }
757
+
758
+ export class RenderFeatureCapabilityMissingError extends Error {
759
+ readonly code = 'render-feature-capability-missing' as const;
760
+ readonly expected: string;
761
+ readonly hint: string;
762
+ readonly detail: RenderFeatureCapabilityMissingDetail;
763
+
764
+ constructor(
765
+ featureIdentity: string,
766
+ order: number,
767
+ capability: RenderFeatureCapabilityMissingDetail['capability'],
768
+ ) {
769
+ const expected = `device capability '${capability}' is available for feature '${featureIdentity}'`;
770
+ const hint = `disable '${featureIdentity}' or use a device with '${capability}' capability`;
771
+ super(`render feature '${featureIdentity}' requires missing capability '${capability}'`);
772
+ this.name = 'RenderFeatureCapabilityMissingError';
773
+ this.expected = expected;
774
+ this.hint = hint;
775
+ this.detail = { featureIdentity, order, capability };
776
+ }
777
+ }
778
+
779
+ export class RenderFeaturePassOrderConflictError extends Error {
780
+ readonly code = 'render-feature-pass-order-conflict' as const;
781
+ readonly expected: string;
782
+ readonly hint: string;
783
+ readonly detail: RenderFeaturePassOrderConflictDetail;
784
+
785
+ constructor(
786
+ featureIdentity: string,
787
+ order: number,
788
+ passIdentity: string,
789
+ dependencyIdentity: string,
790
+ ) {
791
+ const expected = `feature pass '${passIdentity}' follows dependency '${dependencyIdentity}'`;
792
+ const hint = `reorder '${featureIdentity}' passes so '${passIdentity}' follows '${dependencyIdentity}'`;
793
+ super(`render feature '${featureIdentity}' pass order conflict`);
794
+ this.name = 'RenderFeaturePassOrderConflictError';
795
+ this.expected = expected;
796
+ this.hint = hint;
797
+ this.detail = { featureIdentity, order, passIdentity, dependencyIdentity };
798
+ }
799
+ }
800
+
801
+ export class RenderFeaturePreparationFailedError extends Error {
802
+ readonly code = 'render-feature-preparation-failed' as const;
803
+ readonly expected: string;
804
+ readonly hint: string;
805
+ readonly detail: RenderFeaturePreparationFailedDetail;
806
+
807
+ constructor(
808
+ featureIdentity: string,
809
+ order: number,
810
+ operation: string,
811
+ resourceKind: RenderFeaturePreparationFailedDetail['resourceKind'],
812
+ resourceName: string,
813
+ reason: string,
814
+ recovery: RenderFeatureRecovery,
815
+ ) {
816
+ const expected = `${resourceKind} '${resourceName}' is prepared during ${operation}`;
817
+ const hint = `repair '${resourceName}' and retry feature '${featureIdentity}' on ${recovery}`;
818
+ super(`render feature '${featureIdentity}' preparation failed for '${resourceName}'`);
819
+ this.name = 'RenderFeaturePreparationFailedError';
820
+ this.expected = expected;
821
+ this.hint = hint;
822
+ this.detail = {
823
+ featureIdentity,
824
+ order,
825
+ stage: 'prepare',
826
+ operation,
827
+ resourceKind,
828
+ resourceName,
829
+ reason,
830
+ recovery,
831
+ };
832
+ }
833
+ }
834
+
835
+ export class RenderFeaturePreparedStateMismatchError extends Error {
836
+ readonly code = 'render-feature-prepared-state-mismatch' as const;
837
+ readonly expected: string;
838
+ readonly hint: string;
839
+ readonly detail: RenderFeaturePreparedStateMismatchDetail;
840
+
841
+ constructor(detail: RenderFeaturePreparedStateMismatchDetail) {
842
+ const expected = `${detail.resourceKind} state is compatible for '${detail.operation}'`;
843
+ const hint = `repair '${detail.reason}' for feature '${detail.featureIdentity}' and retry`;
844
+ super(`render feature '${detail.featureIdentity}' prepared state mismatch`);
845
+ this.name = 'RenderFeaturePreparedStateMismatchError';
846
+ this.expected = expected;
847
+ this.hint = hint;
848
+ this.detail = detail;
849
+ }
850
+ }
851
+
852
+ export class RenderFeatureDrawRecordingFailedError extends Error {
853
+ readonly code = 'render-feature-draw-recording-failed' as const;
854
+ readonly expected: string;
855
+ readonly hint: string;
856
+ readonly detail: RenderFeatureDrawRecordingFailedDetail;
857
+
858
+ constructor(
859
+ featureIdentity: string,
860
+ order: number,
861
+ operation: string,
862
+ resourceKind: RenderFeatureDrawRecordingFailedDetail['resourceKind'],
863
+ reason: string,
864
+ backendReason: string,
865
+ recovery: RenderFeatureRecovery,
866
+ ) {
867
+ const expected = `${resourceKind} recording succeeds for '${operation}'`;
868
+ const hint = `repair '${reason}' and retry feature '${featureIdentity}' after ${recovery}`;
869
+ super(`render feature '${featureIdentity}' draw recording failed`);
870
+ this.name = 'RenderFeatureDrawRecordingFailedError';
871
+ this.expected = expected;
872
+ this.hint = hint;
873
+ this.detail = {
874
+ featureIdentity,
875
+ order,
876
+ stage: 'record',
877
+ operation,
878
+ resourceKind,
879
+ reason,
880
+ backendReason,
881
+ recovery,
882
+ };
883
+ }
884
+ }
885
+
886
+ // ── ObservationUnavailableError ───────────────────────────────────────────
887
+
888
+ export type ObservationUnavailableReason =
889
+ | 'no-frame'
890
+ | 'resource'
891
+ | 'copy-src'
892
+ | 'stale'
893
+ | 'identity'
894
+ | 'format'
895
+ | 'readback-failed';
896
+
897
+ export interface ObservationUnavailableDetail {
898
+ readonly reason: ObservationUnavailableReason;
899
+ readonly recovery: 'draw-current-frame' | 'enable-copy-src' | 'retry-readback';
900
+ }
901
+
902
+ /** A producer-owned current-frame observation could not be made available. */
903
+ export class ObservationUnavailableError extends Error {
904
+ readonly code = 'observation-unavailable' as const;
905
+ readonly expected: string;
906
+ readonly hint: string;
907
+ readonly detail: ObservationUnavailableDetail;
908
+
909
+ constructor(reason: ObservationUnavailableReason, hint: string) {
910
+ let recovery: ObservationUnavailableDetail['recovery'];
911
+ if (reason === 'copy-src') recovery = 'enable-copy-src';
912
+ else if (reason === 'resource' || reason === 'readback-failed') recovery = 'retry-readback';
913
+ else recovery = 'draw-current-frame';
914
+ super(`current-frame observation unavailable: ${reason}`);
915
+ this.name = 'ObservationUnavailableError';
916
+ this.expected = 'a fresh producer-owned rgba16float current-frame observation';
917
+ this.hint = hint;
918
+ this.detail = { reason, recovery };
919
+ }
920
+ }
921
+
922
+ export interface TaaCapsInsufficientDetail {
923
+ readonly rgba16floatRenderable: boolean;
924
+ readonly maxColorAttachments: number;
925
+ readonly recovery: 'enable-temporal-capabilities';
926
+ }
927
+
928
+ /** The active device cannot support the renderer-owned temporal attachments. */
929
+ export class TaaCapsInsufficientError extends Error {
930
+ readonly code = 'taa-caps-insufficient' as const;
931
+ readonly expected = 'rgba16floatRenderable and maxColorAttachments >= 2';
932
+ readonly hint =
933
+ 'select a device with rgba16float render targets and at least two color attachments, then rebuild the renderer';
934
+ readonly detail: TaaCapsInsufficientDetail;
935
+
936
+ constructor(rgba16floatRenderable: boolean, maxColorAttachments: number) {
937
+ super(
938
+ `TAA capabilities insufficient: rgba16floatRenderable=${rgba16floatRenderable}, maxColorAttachments=${maxColorAttachments}`,
939
+ );
940
+ this.name = 'TaaCapsInsufficientError';
941
+ this.detail = {
942
+ rgba16floatRenderable,
943
+ maxColorAttachments,
944
+ recovery: 'enable-temporal-capabilities',
945
+ };
946
+ }
947
+ }
948
+
949
+ export type TemporalUnsupportedReason =
950
+ | 'resolve-count'
951
+ | 'scene-color-domain'
952
+ | 'scene-color-sample-count'
953
+ | 'scene-depth-sample-count'
954
+ | 'temporal-attachment-missing'
955
+ | 'temporal-attachment-format'
956
+ | 'temporal-attachment-sample-count'
957
+ | 'resolve-resources-missing'
958
+ | 'resolve-frame-missing';
959
+
960
+ export interface TemporalUnsupportedDetail {
961
+ readonly reason: TemporalUnsupportedReason;
962
+ readonly actual: string;
963
+ readonly recovery: 'fix-temporal-pipeline-topology';
964
+ }
965
+
966
+ /** A pipeline violated the single renderer-owned temporal resolve seam. */
967
+ export class TemporalUnsupportedError extends Error {
968
+ readonly code = 'temporal-unsupported' as const;
969
+ readonly expected: string;
970
+ readonly hint =
971
+ 'call resolveTemporal exactly once after temporal raster and pass single-sample rgba16float scene and temporal targets';
972
+ readonly detail: TemporalUnsupportedDetail;
973
+
974
+ constructor(reason: TemporalUnsupportedReason, expected: string, actual: string) {
975
+ super(`temporal pipeline unsupported: ${reason}; expected ${expected}, got ${actual}`);
976
+ this.name = 'TemporalUnsupportedError';
977
+ this.expected = expected;
978
+ this.detail = { reason, actual, recovery: 'fix-temporal-pipeline-topology' };
979
+ }
980
+ }
981
+
982
+ // -- Analytic sky authoring/source errors ----------------------------------
983
+
984
+ export type AtmosphereField =
985
+ | 'turbidity'
986
+ | 'rayleigh'
987
+ | 'mieCoefficient'
988
+ | 'mieDirectionalG'
989
+ | 'sunAngularRadius';
990
+
991
+ export interface AtmosphereParameterInvalidDetail {
992
+ readonly field: AtmosphereField;
993
+ readonly value: number;
994
+ readonly min: number;
995
+ readonly max: number;
996
+ readonly minExclusive: boolean;
997
+ }
998
+
999
+ /** A finite Atmosphere field is outside its authoring range. */
1000
+ export class AtmosphereParameterInvalidError extends Error {
1001
+ readonly code = 'atmosphere-parameter-invalid' as const;
1002
+ readonly expected: string;
1003
+ readonly hint: string;
1004
+ readonly detail: AtmosphereParameterInvalidDetail;
1005
+
1006
+ constructor(
1007
+ field: AtmosphereField,
1008
+ value: number,
1009
+ min: number,
1010
+ max: number,
1011
+ minExclusive = false,
1012
+ ) {
1013
+ const lower = minExclusive ? `>${min}` : `>=${min}`;
1014
+ super(`Atmosphere.${field} must be ${lower} and <=${max}; got ${value}`);
1015
+ this.name = 'AtmosphereParameterInvalidError';
1016
+ this.expected = `${field} ${lower} and <=${max}`;
1017
+ this.hint = `set Atmosphere.${field} to a finite value in the accepted range; got ${value}`;
1018
+ this.detail = { field, value, min, max, minExclusive };
1019
+ }
1020
+ }
1021
+
1022
+ export interface AtmosphereCardinalityInvalidDetail {
1023
+ readonly count: number;
1024
+ readonly max: 1;
1025
+ readonly entities: readonly number[];
1026
+ }
1027
+
1028
+ /** More than one Atmosphere authoring component exists in one resource World. */
1029
+ export class AtmosphereCardinalityInvalidError extends Error {
1030
+ readonly code = 'atmosphere-cardinality-invalid' as const;
1031
+ readonly expected = 'exactly one Atmosphere component in the resourceOwner World';
1032
+ readonly hint = 'remove extra Atmosphere entities and keep one analytic source';
1033
+ readonly detail: AtmosphereCardinalityInvalidDetail;
1034
+
1035
+ constructor(count: number, entities: readonly number[]) {
1036
+ super(`Atmosphere cardinality exceeded: ${count} entities (max 1)`);
1037
+ this.name = 'AtmosphereCardinalityInvalidError';
1038
+ this.detail = { count, max: 1, entities: [...entities] };
1039
+ }
1040
+ }
1041
+
1042
+ export interface AtmosphereSunMissingDetail {
1043
+ readonly atmosphereEntity: number;
1044
+ }
1045
+
1046
+ /** An Atmosphere entity is not a Sun unless its same entity carries DirectionalLight. */
1047
+ export class AtmosphereSunMissingError extends Error {
1048
+ readonly code = 'atmosphere-sun-missing' as const;
1049
+ readonly expected = 'Atmosphere and DirectionalLight share one entity';
1050
+ readonly hint = 'add a valid DirectionalLight to the Atmosphere entity';
1051
+ readonly detail: AtmosphereSunMissingDetail;
1052
+
1053
+ constructor(atmosphereEntity: number) {
1054
+ super(`Atmosphere entity ${atmosphereEntity} has no co-located DirectionalLight`);
1055
+ this.name = 'AtmosphereSunMissingError';
1056
+ this.detail = { atmosphereEntity };
1057
+ }
1058
+ }
1059
+
1060
+ export interface EnvironmentSourceConflictDetail {
1061
+ readonly atmosphereEntities: readonly number[];
1062
+ readonly imageEntities: readonly number[];
1063
+ }
1064
+
1065
+ /** Image and analytic environment facts cannot silently choose a precedence. */
1066
+ export class EnvironmentSourceConflictError extends Error {
1067
+ readonly code = 'environment-source-conflict' as const;
1068
+ readonly expected = 'exactly one image or atmosphere environment source';
1069
+ readonly hint = 'remove either the image environment or the Atmosphere source';
1070
+ readonly detail: EnvironmentSourceConflictDetail;
1071
+
1072
+ constructor(atmosphereEntities: readonly number[], imageEntities: readonly number[]) {
1073
+ super('image and Atmosphere environment sources cannot coexist');
1074
+ this.name = 'EnvironmentSourceConflictError';
1075
+ this.detail = {
1076
+ atmosphereEntities: [...atmosphereEntities],
1077
+ imageEntities: [...imageEntities],
1078
+ };
1079
+ }
1080
+ }
1081
+
1082
+ export interface AtmosphereCapsInsufficientDetail {
1083
+ readonly capability: string;
1084
+ readonly actual: boolean | number;
1085
+ readonly required: boolean | number;
1086
+ }
1087
+
1088
+ /** The selected device cannot render the required HDR atmosphere resources. */
1089
+ export class AtmosphereCapsInsufficientError extends Error {
1090
+ readonly code = 'atmosphere-caps-insufficient' as const;
1091
+ readonly expected: string;
1092
+ readonly hint = 'select a backend with the required HDR render and sample capabilities';
1093
+ readonly detail: AtmosphereCapsInsufficientDetail;
1094
+
1095
+ constructor(capability: string, actual: boolean | number, required: boolean | number) {
1096
+ super(`Atmosphere capability ${capability} is insufficient: ${actual}; required ${required}`);
1097
+ this.name = 'AtmosphereCapsInsufficientError';
1098
+ this.expected = `${capability} >= ${required}`;
1099
+ this.detail = { capability, actual, required };
1100
+ }
1101
+ }
1102
+
1103
+ export interface AtmosphereProducerFailedDetail {
1104
+ readonly stage: 'build' | 'execute' | 'submit';
1105
+ readonly reason: string;
1106
+ readonly generation?: number;
1107
+ }
1108
+
1109
+ /** The candidate atmosphere producer did not complete atomically. */
1110
+ export class AtmosphereProducerFailedError extends Error {
1111
+ readonly code = 'atmosphere-producer-failed' as const;
1112
+ readonly expected = 'candidate atmosphere generation builds, executes, and submits atomically';
1113
+ readonly hint =
1114
+ 'retain the last-known-good generation, inspect the stage, and retry after repair';
1115
+ readonly detail: AtmosphereProducerFailedDetail;
1116
+
1117
+ constructor(stage: AtmosphereProducerFailedDetail['stage'], reason: string, generation?: number) {
1118
+ super(`Atmosphere producer ${stage} failed: ${reason}`);
1119
+ this.name = 'AtmosphereProducerFailedError';
1120
+ this.detail = { stage, reason, ...(generation === undefined ? {} : { generation }) };
1121
+ }
1122
+ }
1123
+
1124
+ /**
1125
+ * Render-owned projection of a failed material readiness result.
1126
+ *
1127
+ * The readiness owner supplies the structured fields; render adds only the
1128
+ * stable draw dedupe key. This is a diagnostic fact, not a second error or
1129
+ * material registry.
1130
+ */
1131
+ export interface MaterialDrawDiagnostic {
1132
+ readonly key: string;
1133
+ readonly code: MaterialRenderError['error']['code'];
1134
+ readonly materialGuid: string;
1135
+ readonly specializationKey: string;
1136
+ readonly publicationGeneration?: number;
1137
+ readonly expected: string;
1138
+ readonly actual?: string;
1139
+ readonly hint: string;
1140
+ readonly retryable: boolean;
1141
+ readonly recoveryActions: readonly string[];
1142
+ }
1143
+
1144
+ export function materialDrawDiagnostic(error: MaterialRenderError): MaterialDrawDiagnostic {
1145
+ const detail = error.error.detail;
1146
+ const generation = detail.publicationGeneration;
1147
+ return {
1148
+ key: `${detail.guid}::${detail.specializationKey}::${generation ?? 'unknown'}`,
1149
+ code: error.error.code,
1150
+ materialGuid: detail.guid,
1151
+ specializationKey: detail.specializationKey,
1152
+ ...(generation === undefined ? {} : { publicationGeneration: generation }),
1153
+ expected: error.error.expected,
1154
+ ...(detail.actual === undefined ? {} : { actual: detail.actual }),
1155
+ hint: error.error.hint,
1156
+ retryable: error.error.retryable,
1157
+ recoveryActions: error.error.recoveryActions,
1158
+ };
1159
+ }
1160
+
1161
+ export class MeshSsboCeilingReachedError extends Error {
1162
+ readonly code = 'mesh-ssbo-ceiling-reached' as const;
1163
+ readonly expected: string;
1164
+ readonly hint: string;
1165
+ readonly detail: {
1166
+ readonly requested: number;
1167
+ readonly capacity: number;
1168
+ readonly ceiling: number;
1169
+ };
1170
+
1171
+ constructor(requested: number, capacity: number, ceiling: number) {
1172
+ super(`mesh SSBO request ${requested} exceeds device ceiling ${ceiling}`);
1173
+ this.name = 'MeshSsboCeilingReachedError';
1174
+ this.expected = `mesh SSBO capacity remains within ${ceiling} bytes`;
1175
+ this.hint = 'reduce per-frame renderable count or split the workload across frames';
1176
+ this.detail = { requested, capacity, ceiling };
1177
+ }
1178
+ }
1179
+
1180
+ export class MeshSsboCapacityExceededError extends Error {
1181
+ readonly code = 'mesh-ssbo-capacity-exceeded' as const;
1182
+ readonly expected: string;
1183
+ readonly hint: string;
1184
+ readonly detail: {
1185
+ readonly requested: number;
1186
+ readonly capacity: number;
1187
+ readonly ceiling: number;
1188
+ };
1189
+
1190
+ constructor(requested: number, capacity: number, ceiling: number) {
1191
+ super(`mesh SSBO capacity ${capacity} cannot satisfy request ${requested}`);
1192
+ this.name = 'MeshSsboCapacityExceededError';
1193
+ this.expected = `mesh SSBO capacity >= ${requested} slots`;
1194
+ this.hint = 'reduce per-frame renderable count or split the workload across frames';
1195
+ this.detail = { requested, capacity, ceiling };
1196
+ }
1197
+ }
1198
+
1199
+ // -- RenderErrorCode / RenderError closed unions --------------------------------
1200
+
1201
+ /**
1202
+ * Closed union of render-cluster error codes. AI users perform exhaustive
1203
+ * `switch (err.code)` without default; TS guards completeness.
1204
+ */
1205
+ export type RenderErrorCode = RenderError['code'];
1206
+
1207
+ /**
1208
+ * Closed union of the render-cluster structured error classes, each carrying a
1209
+ * `RenderErrorCode` discriminant on `.code`.
1210
+ */
1211
+ export type RenderError =
1212
+ | FogOwnerConflictError
1213
+ | FogParametersInvalidError
1214
+ | ObservationUnavailableError
1215
+ | TaaCapsInsufficientError
1216
+ | TemporalUnsupportedError
1217
+ | AtmosphereCardinalityInvalidError
1218
+ | AtmosphereSunMissingError
1219
+ | EnvironmentSourceConflictError
1220
+ | AtmosphereParameterInvalidError
1221
+ | AtmosphereCapsInsufficientError
1222
+ | AtmosphereProducerFailedError
1223
+ | ShadowInvalidConfigError
1224
+ | EquirectProjectionFailedError
1225
+ | HdrpCapsInsufficientError
1226
+ | HdrpLightBudgetExceededError
1227
+ | HdrpIndexListOverflowError
1228
+ | HdrpDeferredCapsInsufficientError
1229
+ | GbufferRtAllocFailedError
1230
+ | GbufferAttachmentCountMismatchError
1231
+ | PointShadowAtlasUninitializedError
1232
+ | PointShadowAtlasBoundsViolationError
1233
+ | VideoUploadUnsupportedError
1234
+ | VertexStorageBufferUnavailableError
1235
+ | SkinPaletteOverflowError
1236
+ | SkinMaterialMismatchError
1237
+ | MaterialSkinAttrMissingError
1238
+ | RenderFeatureRegistrationConflictError
1239
+ | RenderFeatureStageFailedError
1240
+ | RenderFeatureCapabilityMissingError
1241
+ | RenderFeaturePassOrderConflictError
1242
+ | RenderFeaturePreparationFailedError
1243
+ | RenderFeaturePreparedStateMismatchError
1244
+ | RenderFeatureDrawRecordingFailedError;