@forgeax/engine-render 0.1.4 → 0.1.7

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 (979) hide show
  1. package/README.md +268 -640
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
  4. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
  6. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
  8. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
  10. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
  11. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
  12. package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
  13. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
  14. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
  15. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
  16. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
  17. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
  18. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
  20. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
  21. package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
  22. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
  23. package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
  24. package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
  26. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
  27. package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
  28. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
  29. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
  30. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
  31. package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
  32. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
  33. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
  34. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
  36. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
  37. package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
  38. package/dist/assembly/backend-contract.d.ts.map +1 -0
  39. package/dist/assembly/factory.d.ts +214 -0
  40. package/dist/assembly/factory.d.ts.map +1 -0
  41. package/dist/assembly/host-contract.d.ts +84 -0
  42. package/dist/assembly/host-contract.d.ts.map +1 -0
  43. package/dist/{renderer → assembly}/material/assembly.d.ts +0 -1
  44. package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
  45. package/dist/assembly/material/pipeline-projection.d.ts +30 -0
  46. package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
  47. package/dist/authoring.d.ts +11 -11
  48. package/dist/authoring.d.ts.map +1 -1
  49. package/dist/authoring.mjs +25 -3
  50. package/dist/authoring.mjs.map +1 -1
  51. package/dist/chunk-CQXZC5XI.mjs +182 -0
  52. package/dist/chunk-CQXZC5XI.mjs.map +1 -0
  53. package/dist/chunk-HCOGPHKS.mjs +93 -0
  54. package/dist/chunk-HCOGPHKS.mjs.map +1 -0
  55. package/dist/chunk-YEJIUW7D.mjs +1152 -0
  56. package/dist/chunk-YEJIUW7D.mjs.map +1 -0
  57. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +2 -0
  58. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +1 -0
  59. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +2 -0
  60. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +1 -0
  61. package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
  62. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
  63. package/dist/components/glyph-text.d.ts +1 -1
  64. package/dist/components/glyph-text.d.ts.map +1 -1
  65. package/dist/components/index.d.ts +4 -2
  66. package/dist/components/index.d.ts.map +1 -1
  67. package/dist/components/instances.d.ts +1 -1
  68. package/dist/components/instances.d.ts.map +1 -1
  69. package/dist/components/light-helpers.d.ts +1 -1
  70. package/dist/components/light-helpers.d.ts.map +1 -1
  71. package/dist/components/lines.d.ts +5 -0
  72. package/dist/components/lines.d.ts.map +1 -0
  73. package/dist/components/mesh-filter.d.ts +7 -7
  74. package/dist/components/mesh-filter.d.ts.map +1 -1
  75. package/dist/components/points.d.ts +15 -0
  76. package/dist/components/points.d.ts.map +1 -0
  77. package/dist/components/scene-instance.d.ts +11 -11
  78. package/dist/components/skybox-background.d.ts +56 -0
  79. package/dist/components/skybox-background.d.ts.map +1 -0
  80. package/dist/components/skylight.d.ts +55 -0
  81. package/dist/components/skylight.d.ts.map +1 -0
  82. package/dist/components/sprite-animation.d.ts +2 -3
  83. package/dist/components/sprite-animation.d.ts.map +1 -1
  84. package/dist/components/sprite-instances.d.ts +1 -1
  85. package/dist/components/sprite-playback-mode.d.ts +6 -1
  86. package/dist/components/sprite-playback-mode.d.ts.map +1 -1
  87. package/dist/components/sprite-region-override.d.ts +2 -3
  88. package/dist/components/sprite-region-override.d.ts.map +1 -1
  89. package/dist/components/tile-layer.d.ts +5 -0
  90. package/dist/components/tile-layer.d.ts.map +1 -1
  91. package/dist/construct-renderer.d.ts +18 -1
  92. package/dist/construct-renderer.d.ts.map +1 -1
  93. package/dist/construct-renderer.mjs +27463 -4
  94. package/dist/construct-renderer.mjs.map +1 -1
  95. package/dist/debug-draw-glue.d.ts +2 -53
  96. package/dist/debug-draw-glue.d.ts.map +1 -1
  97. package/dist/device/device-scope.d.ts +83 -0
  98. package/dist/device/device-scope.d.ts.map +1 -0
  99. package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
  100. package/dist/device/gpu-residency.d.ts.map +1 -0
  101. package/dist/device/resource-types.d.ts +8 -0
  102. package/dist/device/resource-types.d.ts.map +1 -0
  103. package/dist/engine-metrics.d.ts +2 -2
  104. package/dist/engine-metrics.d.ts.map +1 -1
  105. package/dist/errors/recover.d.ts +28 -1
  106. package/dist/errors/recover.d.ts.map +1 -1
  107. package/dist/errors/render.d.ts +320 -248
  108. package/dist/errors/render.d.ts.map +1 -1
  109. package/dist/features/fullscreen.d.ts +19 -0
  110. package/dist/features/fullscreen.d.ts.map +1 -0
  111. package/dist/features/host.d.ts +32 -26
  112. package/dist/features/host.d.ts.map +1 -1
  113. package/dist/features/morph/morph-feature.d.ts +39 -5
  114. package/dist/features/morph/morph-feature.d.ts.map +1 -1
  115. package/dist/features/plan.d.ts +182 -0
  116. package/dist/features/plan.d.ts.map +1 -0
  117. package/dist/features/prepared-gpu-work.d.ts +21 -17
  118. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  119. package/dist/features/prepared-graphics-store.d.ts +2 -1
  120. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  121. package/dist/features/prepared-graphics.d.ts +11 -21
  122. package/dist/features/prepared-graphics.d.ts.map +1 -1
  123. package/dist/features/render-graph-compute.d.ts +2 -2
  124. package/dist/features/render-graph-compute.d.ts.map +1 -1
  125. package/dist/features/render-graph-contribution.d.ts +4 -7
  126. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  127. package/dist/features/render-graph-raster.d.ts +7 -3
  128. package/dist/features/render-graph-raster.d.ts.map +1 -1
  129. package/dist/features/render-graph-resources.d.ts +6 -6
  130. package/dist/features/render-graph-resources.d.ts.map +1 -1
  131. package/dist/features/targets.d.ts +5 -5
  132. package/dist/features/targets.d.ts.map +1 -1
  133. package/dist/features/types.d.ts +11 -190
  134. package/dist/features/types.d.ts.map +1 -1
  135. package/dist/features/vocabulary.d.ts +14 -0
  136. package/dist/features/vocabulary.d.ts.map +1 -0
  137. package/dist/fullscreen-post-process-pass.d.ts +4 -25
  138. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  139. package/dist/glyph-text-layout-system.d.ts +3 -2
  140. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  141. package/dist/gpu-driven/batch-topology.d.ts +6 -75
  142. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  143. package/dist/gpu-driven/production-raster.d.ts +13 -112
  144. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  145. package/dist/gpu-driven/view-gpu.d.ts +10 -66
  146. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  147. package/dist/gpu-resource.d.ts +3 -3
  148. package/dist/gpu-scene-schema.d.ts +1 -94
  149. package/dist/gpu-scene-schema.d.ts.map +1 -1
  150. package/dist/gpu-scene.d.ts +7 -33
  151. package/dist/gpu-scene.d.ts.map +1 -1
  152. package/dist/hdrp-buffers.d.ts +3 -53
  153. package/dist/hdrp-buffers.d.ts.map +1 -1
  154. package/dist/ibl/IblPipelineCache.d.ts +74 -180
  155. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  156. package/dist/ibl/skylight-bind-group.d.ts +1 -1
  157. package/dist/index.d.ts +17 -43
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.mjs +167 -3
  160. package/dist/index.mjs.map +1 -1
  161. package/dist/inspection-types.d.ts +72 -0
  162. package/dist/inspection-types.d.ts.map +1 -0
  163. package/dist/instance-buffer-cache.d.ts +1 -4
  164. package/dist/instance-buffer-cache.d.ts.map +1 -1
  165. package/dist/internal.d.ts +1 -73
  166. package/dist/internal.d.ts.map +1 -1
  167. package/dist/internal.mjs +1 -43
  168. package/dist/internal.mjs.map +1 -1
  169. package/dist/lifecycle.d.ts +36 -2
  170. package/dist/lifecycle.d.ts.map +1 -1
  171. package/dist/materials.d.ts +0 -3
  172. package/dist/materials.d.ts.map +1 -1
  173. package/dist/mesh-material-bindings.d.ts +0 -1
  174. package/dist/mesh-material-bindings.d.ts.map +1 -1
  175. package/dist/pbr-pipeline.d.ts +77 -29
  176. package/dist/pbr-pipeline.d.ts.map +1 -1
  177. package/dist/pipeline/standard-forward-lane.d.ts +5 -0
  178. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
  179. package/dist/pipeline/standard-pipeline.d.ts +31 -0
  180. package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
  181. package/dist/pipeline/standard-profile.d.ts +40 -0
  182. package/dist/pipeline/standard-profile.d.ts.map +1 -0
  183. package/dist/pipeline-builder.d.ts +3 -3
  184. package/dist/pipeline-builder.d.ts.map +1 -1
  185. package/dist/pipeline-spec-types.d.ts +24 -0
  186. package/dist/pipeline-spec-types.d.ts.map +1 -0
  187. package/dist/pipeline-spec.d.ts +16 -155
  188. package/dist/pipeline-spec.d.ts.map +1 -1
  189. package/dist/plugin.d.ts +1 -14
  190. package/dist/plugin.d.ts.map +1 -1
  191. package/dist/points-lines/__tests__/bounds.unit.test.d.ts +2 -0
  192. package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +1 -0
  193. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +2 -0
  194. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +1 -0
  195. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +2 -0
  196. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +1 -0
  197. package/dist/points-lines/__tests__/inspection.unit.test.d.ts +2 -0
  198. package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +1 -0
  199. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +2 -0
  200. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +1 -0
  201. package/dist/points-lines/__tests__/points-lines.bench.d.ts +2 -0
  202. package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +1 -0
  203. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +2 -0
  204. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +1 -0
  205. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +2 -0
  206. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +1 -0
  207. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +2 -0
  208. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +1 -0
  209. package/dist/points-lines/admission.d.ts +36 -0
  210. package/dist/points-lines/admission.d.ts.map +1 -0
  211. package/dist/points-lines/bounds.d.ts +8 -0
  212. package/dist/points-lines/bounds.d.ts.map +1 -0
  213. package/dist/points-lines/expansion-cache.d.ts +28 -0
  214. package/dist/points-lines/expansion-cache.d.ts.map +1 -0
  215. package/dist/points-lines/inspection.d.ts +53 -0
  216. package/dist/points-lines/inspection.d.ts.map +1 -0
  217. package/dist/points-lines/prepare.d.ts +67 -0
  218. package/dist/points-lines/prepare.d.ts.map +1 -0
  219. package/dist/points-lines/record.d.ts +60 -0
  220. package/dist/points-lines/record.d.ts.map +1 -0
  221. package/dist/points-lines/snapshot.d.ts +49 -0
  222. package/dist/points-lines/snapshot.d.ts.map +1 -0
  223. package/dist/post-process-errors.d.ts +18 -18
  224. package/dist/post-process-errors.d.ts.map +1 -1
  225. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
  226. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  227. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
  228. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
  229. package/dist/record/frame-lighting.d.ts +7 -73
  230. package/dist/record/frame-lighting.d.ts.map +1 -1
  231. package/dist/record/frame-snapshot.d.ts +44 -44
  232. package/dist/record/frame-snapshot.d.ts.map +1 -1
  233. package/dist/record/frame-targets.d.ts +5 -38
  234. package/dist/record/frame-targets.d.ts.map +1 -1
  235. package/dist/record/frame.d.ts +64 -52
  236. package/dist/record/frame.d.ts.map +1 -1
  237. package/dist/record/helpers.d.ts +3 -2
  238. package/dist/record/helpers.d.ts.map +1 -1
  239. package/dist/record/main-pass-geometry.d.ts +12 -4
  240. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  241. package/dist/record/main-pass-material.d.ts +90 -59
  242. package/dist/record/main-pass-material.d.ts.map +1 -1
  243. package/dist/record/main-pass-sprite-draws.d.ts +28 -3
  244. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  245. package/dist/record/main-pass.d.ts +1 -1
  246. package/dist/record/main-pass.d.ts.map +1 -1
  247. package/dist/record/mesh-ssbo.d.ts +276 -3
  248. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  249. package/dist/record/render-context.d.ts +252 -0
  250. package/dist/record/render-context.d.ts.map +1 -0
  251. package/dist/record/shadow-pass.d.ts +15 -88
  252. package/dist/record/shadow-pass.d.ts.map +1 -1
  253. package/dist/record/skybox-post-pass.d.ts +1 -1
  254. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  255. package/dist/record/typed-frame-graph.d.ts +29 -7
  256. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  257. package/dist/record/view-ubo.d.ts +9 -3
  258. package/dist/record/view-ubo.d.ts.map +1 -1
  259. package/dist/render-contract.d.ts +424 -0
  260. package/dist/render-contract.d.ts.map +1 -0
  261. package/dist/render-data.d.ts.map +1 -1
  262. package/dist/render-graph-primitives.d.ts +14 -362
  263. package/dist/render-graph-primitives.d.ts.map +1 -1
  264. package/dist/render-pipeline.d.ts +25 -64
  265. package/dist/render-pipeline.d.ts.map +1 -1
  266. package/dist/render-system-extract.d.ts +110 -338
  267. package/dist/render-system-extract.d.ts.map +1 -1
  268. package/dist/render-system.d.ts +24 -713
  269. package/dist/render-system.d.ts.map +1 -1
  270. package/dist/scene/render-scene-types.d.ts +61 -0
  271. package/dist/scene/render-scene-types.d.ts.map +1 -0
  272. package/dist/scene/render-scene.d.ts +112 -0
  273. package/dist/scene/render-scene.d.ts.map +1 -0
  274. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
  275. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
  276. package/dist/ssao-buffers.d.ts +22 -3
  277. package/dist/ssao-buffers.d.ts.map +1 -1
  278. package/dist/systems/skin-palette-allocator.d.ts +2 -4
  279. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  280. package/dist/systems/skin-palette-types.d.ts +14 -0
  281. package/dist/systems/skin-palette-types.d.ts.map +1 -0
  282. package/dist/systems/transparent-sort-config.d.ts +23 -2
  283. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  284. package/dist/tilemap-chunk-extract-system.d.ts +4 -3
  285. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
  286. package/dist/typed-render-graph-primitives.d.ts +2 -4
  287. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  288. package/dist/typed-shadow-passes.d.ts +3 -3
  289. package/dist/typed-shadow-passes.d.ts.map +1 -1
  290. package/package.json +23 -23
  291. package/src/__tests__/authoring-path.unit.test.ts +9 -0
  292. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
  293. package/src/__tests__/callback-inference.test-d.ts +6 -3
  294. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
  295. package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
  296. package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
  297. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
  298. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
  299. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
  300. package/src/__tests__/factory-contract.integration.test.ts +158 -209
  301. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
  302. package/src/__tests__/frame-observation.contract.test.ts +17 -8
  303. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
  304. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
  305. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +21 -18
  306. package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
  307. package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
  308. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
  309. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
  310. package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
  311. package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
  312. package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
  313. package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
  314. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
  315. package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
  316. package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
  317. package/src/__tests__/gpu-scene.unit.test.ts +10 -24
  318. package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
  319. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
  320. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
  321. package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
  322. package/src/__tests__/material-cooked-projection.unit.test.ts +31 -58
  323. package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
  324. package/src/__tests__/material-static-dynamic-route.unit.test.ts +31 -50
  325. package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
  326. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
  327. package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
  328. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
  329. package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
  330. package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
  331. package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
  332. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
  333. package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
  334. package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
  335. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
  336. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
  337. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
  338. package/src/__tests__/profiler-default-off.test.ts +1 -1
  339. package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
  340. package/src/__tests__/profiler-phase-integration.test.ts +5 -13
  341. package/src/__tests__/profiler-phase-token.test.ts +3 -8
  342. package/src/__tests__/public-surface.test-d.ts +65 -3
  343. package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
  344. package/src/__tests__/render-error-code-owner.test-d.ts +24 -23
  345. package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
  346. package/src/__tests__/render-error-exhaustive.test-d.ts +27 -1
  347. package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
  348. package/src/__tests__/render-feature-context.test-d.ts +16 -40
  349. package/src/__tests__/render-feature-contract.test-d.ts +9 -18
  350. package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
  351. package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
  352. package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
  353. package/src/__tests__/render-feature-plan.test-d.ts +161 -0
  354. package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
  355. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
  356. package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
  357. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
  358. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
  359. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
  360. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
  361. package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
  362. package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
  363. package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
  364. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
  365. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
  366. package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
  367. package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
  368. package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
  369. package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
  370. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +82 -95
  371. package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
  372. package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
  373. package/src/__tests__/ssao-config.unit.test.ts +36 -0
  374. package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
  375. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
  376. package/src/__tests__/standard-descriptors.test-d.ts +22 -0
  377. package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
  378. package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
  379. package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
  380. package/src/__tests__/surface-configuration.unit.test.ts +1 -2
  381. package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
  382. package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
  383. package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
  384. package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
  385. package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
  386. package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
  387. package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
  388. package/src/__tests__/visibility-extract.integration.test.ts +20 -11
  389. package/src/__tests__/visibility-extract.perf.test.ts +66 -32
  390. package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
  391. package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
  392. package/src/__tests__/visibility-instances.integration.test.ts +7 -11
  393. package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
  394. package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
  395. package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
  396. package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
  397. package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
  398. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
  399. package/src/__tests__/vocabulary.unit.test.ts +1 -1
  400. package/src/assembly/backend-contract.ts +57 -0
  401. package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1741 -2699
  402. package/src/assembly/host-contract.ts +101 -0
  403. package/src/{renderer → assembly}/material/assembly.ts +2 -7
  404. package/src/assembly/material/pipeline-projection.ts +63 -0
  405. package/src/authoring.ts +15 -22
  406. package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
  407. package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
  408. package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
  409. package/src/components/glyph-text.ts +3 -2
  410. package/src/components/index.ts +14 -9
  411. package/src/components/instances.ts +4 -5
  412. package/src/components/light-helpers.ts +1 -1
  413. package/src/components/lines.ts +18 -0
  414. package/src/components/mesh-filter.ts +11 -10
  415. package/src/components/points.ts +40 -0
  416. package/src/components/post-process-params.ts +3 -3
  417. package/src/components/scene-instance.ts +12 -12
  418. package/src/components/skybox-background.ts +103 -0
  419. package/src/components/{environment.ts → skylight.ts} +2 -110
  420. package/src/components/sprite-animation.ts +3 -4
  421. package/src/components/sprite-instances.ts +2 -2
  422. package/src/components/sprite-playback-mode.ts +7 -1
  423. package/src/components/sprite-region-override.ts +2 -3
  424. package/src/components/tile-layer.ts +8 -2
  425. package/src/construct-renderer.ts +67 -4
  426. package/src/debug-draw-glue.ts +8 -129
  427. package/src/device/device-scope.ts +306 -0
  428. package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
  429. package/src/device/resource-types.ts +20 -0
  430. package/src/engine-metrics.ts +12 -19
  431. package/src/errors/recover.ts +45 -3
  432. package/src/errors/render.ts +469 -429
  433. package/src/features/fullscreen.ts +46 -0
  434. package/src/features/host.ts +575 -309
  435. package/src/features/morph/morph-feature.ts +195 -105
  436. package/src/features/plan.ts +447 -0
  437. package/src/features/prepared-gpu-work.ts +72 -15
  438. package/src/features/prepared-graphics-store.ts +20 -6
  439. package/src/features/prepared-graphics.ts +12 -71
  440. package/src/features/render-graph-compute.ts +14 -5
  441. package/src/features/render-graph-contribution.ts +43 -63
  442. package/src/features/render-graph-raster.ts +32 -8
  443. package/src/features/render-graph-resources.ts +25 -23
  444. package/src/features/targets.ts +8 -21
  445. package/src/features/types.ts +39 -227
  446. package/src/features/vocabulary.ts +24 -0
  447. package/src/fullscreen-post-process-pass.ts +14 -57
  448. package/src/glyph-text-layout-system.ts +70 -96
  449. package/src/gpu-driven/batch-topology.ts +24 -202
  450. package/src/gpu-driven/production-raster.ts +99 -1109
  451. package/src/gpu-driven/view-gpu.ts +46 -192
  452. package/src/gpu-resource.ts +4 -4
  453. package/src/gpu-scene-schema.ts +11 -99
  454. package/src/gpu-scene.ts +231 -364
  455. package/src/hdrp-buffers.ts +12 -221
  456. package/src/ibl/IblPipelineCache.ts +471 -711
  457. package/src/ibl/skylight-bind-group.ts +4 -4
  458. package/src/index.ts +75 -217
  459. package/src/inspection-types.ts +80 -0
  460. package/src/instance-buffer-cache.ts +1 -29
  461. package/src/internal.ts +6 -85
  462. package/src/lifecycle.ts +64 -19
  463. package/src/materials.ts +7 -29
  464. package/src/mesh-material-bindings.ts +0 -1
  465. package/src/pbr-pipeline.ts +441 -53
  466. package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
  467. package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
  468. package/src/pipeline/standard-profile.ts +65 -0
  469. package/src/pipeline-builder.ts +60 -64
  470. package/src/pipeline-spec-types.ts +28 -0
  471. package/src/pipeline-spec.ts +72 -609
  472. package/src/plugin.ts +7 -75
  473. package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
  474. package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
  475. package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
  476. package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
  477. package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
  478. package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
  479. package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
  480. package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
  481. package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
  482. package/src/points-lines/admission.ts +238 -0
  483. package/src/points-lines/bounds.ts +23 -0
  484. package/src/points-lines/expansion-cache.ts +215 -0
  485. package/src/points-lines/inspection.ts +97 -0
  486. package/src/points-lines/prepare.ts +177 -0
  487. package/src/points-lines/record.ts +125 -0
  488. package/src/points-lines/snapshot.ts +130 -0
  489. package/src/post-process-errors.ts +31 -33
  490. package/src/prepare/prepared-graphics-resolver.ts +5 -4
  491. package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
  492. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
  493. package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
  494. package/src/record/frame-lighting.ts +88 -197
  495. package/src/record/frame-snapshot.ts +45 -60
  496. package/src/record/frame-targets.ts +8 -243
  497. package/src/record/frame.ts +521 -797
  498. package/src/record/helpers.ts +6 -11
  499. package/src/record/main-pass-geometry.ts +198 -147
  500. package/src/record/main-pass-material.ts +517 -190
  501. package/src/record/main-pass-sprite-draws.ts +199 -118
  502. package/src/record/main-pass.ts +166 -144
  503. package/src/record/mesh-ssbo.ts +517 -38
  504. package/src/record/render-context.ts +384 -0
  505. package/src/record/shadow-pass.ts +154 -1843
  506. package/src/record/skybox-post-pass.ts +14 -15
  507. package/src/record/typed-frame-graph.ts +224 -262
  508. package/src/record/view-ubo.ts +53 -37
  509. package/src/render-contract.ts +582 -0
  510. package/src/render-data.ts +3 -3
  511. package/src/render-graph-primitives.ts +76 -851
  512. package/src/render-pipeline.ts +104 -188
  513. package/src/render-system-extract.ts +1114 -1732
  514. package/src/render-system.ts +614 -1939
  515. package/src/scene/render-scene-types.ts +67 -0
  516. package/src/scene/render-scene.ts +1087 -0
  517. package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
  518. package/src/ssao-buffers.ts +167 -8
  519. package/src/systems/skin-palette-allocator.ts +21 -64
  520. package/src/systems/skin-palette-types.ts +14 -0
  521. package/src/systems/transparent-sort-config.ts +25 -3
  522. package/src/tilemap-chunk-extract-system.ts +53 -70
  523. package/src/typed-render-graph-primitives.ts +35 -24
  524. package/src/typed-shadow-passes.ts +26 -56
  525. package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
  526. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
  527. package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
  528. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
  529. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
  530. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
  531. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  532. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  533. package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
  534. package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
  535. package/dist/__tests__/camera-temporal.test.d.ts +0 -2
  536. package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
  537. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
  538. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
  539. package/dist/__tests__/environment-inspection.test.d.ts +0 -2
  540. package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
  541. package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
  542. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
  543. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
  544. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
  545. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
  546. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
  547. package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
  548. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
  549. package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
  550. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
  551. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
  552. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
  553. package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
  554. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
  555. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
  556. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
  557. package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
  558. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
  559. package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
  560. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
  561. package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
  562. package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
  563. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
  564. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
  565. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
  566. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
  567. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
  568. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
  569. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
  570. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
  571. package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
  572. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
  573. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  574. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  575. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
  576. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
  577. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
  578. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
  579. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
  580. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
  581. package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
  582. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
  583. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
  584. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
  585. package/dist/__tests__/plugin.test.d.ts +0 -2
  586. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  587. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
  588. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
  589. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
  590. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
  591. package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
  592. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
  593. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
  594. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
  595. package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
  596. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
  597. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
  598. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
  599. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
  600. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
  601. package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
  602. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
  603. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
  604. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
  605. package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
  606. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
  607. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
  608. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
  609. package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
  610. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
  611. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
  612. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
  613. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
  614. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
  615. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
  616. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
  617. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
  618. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
  619. package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
  620. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
  621. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
  622. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
  623. package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
  624. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
  625. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
  626. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
  627. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
  628. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
  629. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
  630. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
  631. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
  632. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
  633. package/dist/chunk-DJIMFYX6.mjs +0 -1439
  634. package/dist/chunk-DJIMFYX6.mjs.map +0 -1
  635. package/dist/chunk-F2SIOCRM.mjs +0 -7423
  636. package/dist/chunk-F2SIOCRM.mjs.map +0 -1
  637. package/dist/chunk-JMSB7AR4.mjs +0 -3
  638. package/dist/chunk-JMSB7AR4.mjs.map +0 -1
  639. package/dist/chunk-KHI6K4C6.mjs +0 -659
  640. package/dist/chunk-KHI6K4C6.mjs.map +0 -1
  641. package/dist/chunk-PORZOL2V.mjs +0 -569
  642. package/dist/chunk-PORZOL2V.mjs.map +0 -1
  643. package/dist/chunk-UOJGMDGP.mjs +0 -29913
  644. package/dist/chunk-UOJGMDGP.mjs.map +0 -1
  645. package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
  646. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
  647. package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
  648. package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
  649. package/dist/components/__tests__/fog.test-d.d.ts +0 -2
  650. package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
  651. package/dist/components/__tests__/fog.test.d.ts +0 -2
  652. package/dist/components/__tests__/fog.test.d.ts.map +0 -1
  653. package/dist/components/atmosphere.d.ts +0 -18
  654. package/dist/components/atmosphere.d.ts.map +0 -1
  655. package/dist/components/environment.d.ts +0 -115
  656. package/dist/components/environment.d.ts.map +0 -1
  657. package/dist/deferred-lighting.d.ts +0 -13
  658. package/dist/deferred-lighting.d.ts.map +0 -1
  659. package/dist/dynamic-texture-store.d.ts +0 -42
  660. package/dist/dynamic-texture-store.d.ts.map +0 -1
  661. package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
  662. package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
  663. package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
  664. package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
  665. package/dist/environment/__tests__/generation.test.d.ts +0 -2
  666. package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
  667. package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
  668. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
  669. package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
  670. package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
  671. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
  672. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
  673. package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
  674. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
  675. package/dist/environment/__tests__/readiness.test.d.ts +0 -2
  676. package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
  677. package/dist/environment/__tests__/recovery.test.d.ts +0 -2
  678. package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
  679. package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
  680. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
  681. package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
  682. package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
  683. package/dist/environment/__tests__/signature.test.d.ts +0 -2
  684. package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
  685. package/dist/environment/descriptors.d.ts +0 -2
  686. package/dist/environment/descriptors.d.ts.map +0 -1
  687. package/dist/environment/extracted-environment.d.ts +0 -53
  688. package/dist/environment/extracted-environment.d.ts.map +0 -1
  689. package/dist/environment/generation.d.ts +0 -62
  690. package/dist/environment/generation.d.ts.map +0 -1
  691. package/dist/environment/gpu-bundle.d.ts +0 -23
  692. package/dist/environment/gpu-bundle.d.ts.map +0 -1
  693. package/dist/environment/graph.d.ts +0 -108
  694. package/dist/environment/graph.d.ts.map +0 -1
  695. package/dist/environment/inspection.d.ts +0 -48
  696. package/dist/environment/inspection.d.ts.map +0 -1
  697. package/dist/environment/lifecycle.d.ts +0 -22
  698. package/dist/environment/lifecycle.d.ts.map +0 -1
  699. package/dist/environment/readiness.d.ts +0 -29
  700. package/dist/environment/readiness.d.ts.map +0 -1
  701. package/dist/environment/signature.d.ts +0 -70
  702. package/dist/environment/signature.d.ts.map +0 -1
  703. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
  704. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
  705. package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
  706. package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
  707. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
  708. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  709. package/dist/extract/directional-csm.d.ts +0 -129
  710. package/dist/extract/directional-csm.d.ts.map +0 -1
  711. package/dist/extract/index.d.ts +0 -5
  712. package/dist/extract/index.d.ts.map +0 -1
  713. package/dist/extract/material-interface.d.ts +0 -56
  714. package/dist/extract/material-interface.d.ts.map +0 -1
  715. package/dist/extract/schema-readers.d.ts +0 -20
  716. package/dist/extract/schema-readers.d.ts.map +0 -1
  717. package/dist/features/graph-contribution.d.ts +0 -64
  718. package/dist/features/graph-contribution.d.ts.map +0 -1
  719. package/dist/features/index.d.ts +0 -21
  720. package/dist/features/index.d.ts.map +0 -1
  721. package/dist/features/morph/index.d.ts +0 -3
  722. package/dist/features/morph/index.d.ts.map +0 -1
  723. package/dist/features/morph/morph-bounds.d.ts +0 -42
  724. package/dist/features/morph/morph-bounds.d.ts.map +0 -1
  725. package/dist/features/scene-temporal.d.ts +0 -45
  726. package/dist/features/scene-temporal.d.ts.map +0 -1
  727. package/dist/features/taa-resolve.d.ts +0 -21
  728. package/dist/features/taa-resolve.d.ts.map +0 -1
  729. package/dist/frame-chain.d.ts +0 -14
  730. package/dist/frame-chain.d.ts.map +0 -1
  731. package/dist/gpu-driven/view-reference.d.ts.map +0 -1
  732. package/dist/gpu-resource-store.d.ts.map +0 -1
  733. package/dist/hdrp-cluster-membership.d.ts +0 -2
  734. package/dist/hdrp-cluster-membership.d.ts.map +0 -1
  735. package/dist/hdrp-pipeline.d.ts +0 -36
  736. package/dist/hdrp-pipeline.d.ts.map +0 -1
  737. package/dist/ibl/cubemap-projection.d.ts +0 -23
  738. package/dist/ibl/cubemap-projection.d.ts.map +0 -1
  739. package/dist/ibl/face-uniforms.d.ts +0 -65
  740. package/dist/ibl/face-uniforms.d.ts.map +0 -1
  741. package/dist/mesh-update-errors.d.ts +0 -71
  742. package/dist/mesh-update-errors.d.ts.map +0 -1
  743. package/dist/mipmap-generator.d.ts +0 -39
  744. package/dist/mipmap-generator.d.ts.map +0 -1
  745. package/dist/param-schema-projection-census.d.ts +0 -18
  746. package/dist/param-schema-projection-census.d.ts.map +0 -1
  747. package/dist/persistent-render-scene.d.ts +0 -158
  748. package/dist/persistent-render-scene.d.ts.map +0 -1
  749. package/dist/pipeline/index.d.ts +0 -11
  750. package/dist/pipeline/index.d.ts.map +0 -1
  751. package/dist/pipeline-errors.d.ts +0 -110
  752. package/dist/pipeline-errors.d.ts.map +0 -1
  753. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
  754. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  755. package/dist/prepare/index.d.ts +0 -4
  756. package/dist/prepare/index.d.ts.map +0 -1
  757. package/dist/prepare/schema-readers.d.ts +0 -11
  758. package/dist/prepare/schema-readers.d.ts.map +0 -1
  759. package/dist/record/__tests__/environment-record.test.d.ts +0 -2
  760. package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
  761. package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
  762. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
  763. package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
  764. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
  765. package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
  766. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
  767. package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
  768. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
  769. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
  770. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
  771. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
  772. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
  773. package/dist/record/frame-observation.d.ts +0 -38
  774. package/dist/record/frame-observation.d.ts.map +0 -1
  775. package/dist/record/index.d.ts +0 -15
  776. package/dist/record/index.d.ts.map +0 -1
  777. package/dist/record/main-pass-skin.d.ts +0 -46
  778. package/dist/record/main-pass-skin.d.ts.map +0 -1
  779. package/dist/record/main-pass-sprite.d.ts +0 -69
  780. package/dist/record/main-pass-sprite.d.ts.map +0 -1
  781. package/dist/record/material-payload.d.ts +0 -43
  782. package/dist/record/material-payload.d.ts.map +0 -1
  783. package/dist/record/material-slot-plan.d.ts +0 -26
  784. package/dist/record/material-slot-plan.d.ts.map +0 -1
  785. package/dist/record/membership-timing.d.ts +0 -232
  786. package/dist/record/membership-timing.d.ts.map +0 -1
  787. package/dist/record/shadow-caster-uniform.d.ts +0 -8
  788. package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
  789. package/dist/record/shadow-submit-mode.d.ts +0 -66
  790. package/dist/record/shadow-submit-mode.d.ts.map +0 -1
  791. package/dist/render-dispatch-membership.d.ts +0 -47
  792. package/dist/render-dispatch-membership.d.ts.map +0 -1
  793. package/dist/render-pipeline-context.d.ts +0 -289
  794. package/dist/render-pipeline-context.d.ts.map +0 -1
  795. package/dist/render-pipeline-target.d.ts +0 -16
  796. package/dist/render-pipeline-target.d.ts.map +0 -1
  797. package/dist/render-scene-projection.d.ts +0 -174
  798. package/dist/render-scene-projection.d.ts.map +0 -1
  799. package/dist/render-system-fold.d.ts +0 -266
  800. package/dist/render-system-fold.d.ts.map +0 -1
  801. package/dist/renderer/asset-service.d.ts +0 -10
  802. package/dist/renderer/asset-service.d.ts.map +0 -1
  803. package/dist/renderer/backend-selection.d.ts.map +0 -1
  804. package/dist/renderer/environment-classify.d.ts +0 -6
  805. package/dist/renderer/environment-classify.d.ts.map +0 -1
  806. package/dist/renderer/environment-error.d.ts +0 -13
  807. package/dist/renderer/environment-error.d.ts.map +0 -1
  808. package/dist/renderer/material/pipeline-projection.d.ts +0 -91
  809. package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
  810. package/dist/renderer/renderer-factory.d.ts +0 -289
  811. package/dist/renderer/renderer-factory.d.ts.map +0 -1
  812. package/dist/renderer.d.ts +0 -771
  813. package/dist/renderer.d.ts.map +0 -1
  814. package/dist/scene-utils/collect-subtree.d.ts +0 -11
  815. package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
  816. package/dist/ssao-data.d.ts +0 -34
  817. package/dist/ssao-data.d.ts.map +0 -1
  818. package/dist/surface-format.d.ts +0 -10
  819. package/dist/surface-format.d.ts.map +0 -1
  820. package/dist/taa-history-store.d.ts +0 -88
  821. package/dist/taa-history-store.d.ts.map +0 -1
  822. package/dist/temporal-coverage.d.ts +0 -35
  823. package/dist/temporal-coverage.d.ts.map +0 -1
  824. package/dist/temporal-frame-transaction.d.ts +0 -92
  825. package/dist/temporal-frame-transaction.d.ts.map +0 -1
  826. package/dist/temporal-inspection.d.ts +0 -57
  827. package/dist/temporal-inspection.d.ts.map +0 -1
  828. package/dist/temporal-view.d.ts +0 -43
  829. package/dist/temporal-view.d.ts.map +0 -1
  830. package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
  831. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
  832. package/dist/urp-pipeline.d.ts +0 -4
  833. package/dist/urp-pipeline.d.ts.map +0 -1
  834. package/src/__tests__/analytic-sky-contract.test.ts +0 -27
  835. package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
  836. package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
  837. package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
  838. package/src/__tests__/backend-selection.integration.test.ts +0 -11
  839. package/src/__tests__/camera-temporal.test-d.ts +0 -8
  840. package/src/__tests__/camera-temporal.test.ts +0 -188
  841. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
  842. package/src/__tests__/environment-inspection.test.ts +0 -45
  843. package/src/__tests__/fog-ai-user.fixture.ts +0 -350
  844. package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
  845. package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
  846. package/src/__tests__/fog-inspection.integration.test.ts +0 -127
  847. package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
  848. package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
  849. package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
  850. package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
  851. package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
  852. package/src/__tests__/fog-temporal.integration.test.ts +0 -115
  853. package/src/__tests__/frame-chain.unit.test.ts +0 -26
  854. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
  855. package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
  856. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
  857. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
  858. package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
  859. package/src/__tests__/materials.unit.test.ts +0 -25
  860. package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
  861. package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
  862. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
  863. package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
  864. package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
  865. package/src/__tests__/plugin.test.ts +0 -25
  866. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
  867. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
  868. package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
  869. package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
  870. package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
  871. package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
  872. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
  873. package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
  874. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
  875. package/src/__tests__/render-feature-order.unit.test.ts +0 -66
  876. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
  877. package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
  878. package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
  879. package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
  880. package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
  881. package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
  882. package/src/__tests__/taa-history-store.unit.test.ts +0 -196
  883. package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
  884. package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
  885. package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
  886. package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
  887. package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
  888. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
  889. package/src/components/__tests__/atmosphere-red.test.ts +0 -51
  890. package/src/components/__tests__/atmosphere.test.ts +0 -79
  891. package/src/components/__tests__/fog.test-d.ts +0 -49
  892. package/src/components/__tests__/fog.test.ts +0 -60
  893. package/src/components/atmosphere.ts +0 -64
  894. package/src/deferred-lighting.ts +0 -92
  895. package/src/dynamic-texture-store.ts +0 -111
  896. package/src/environment/README.md +0 -76
  897. package/src/environment/__tests__/failure-injection.test.ts +0 -50
  898. package/src/environment/__tests__/generation-red.test.ts +0 -64
  899. package/src/environment/__tests__/generation.test.ts +0 -37
  900. package/src/environment/__tests__/graph-transaction.test.ts +0 -85
  901. package/src/environment/__tests__/inspection-red.test.ts +0 -53
  902. package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
  903. package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
  904. package/src/environment/__tests__/readiness.test.ts +0 -42
  905. package/src/environment/__tests__/recovery.test.ts +0 -62
  906. package/src/environment/__tests__/resize-dispose.test.ts +0 -30
  907. package/src/environment/__tests__/signature-red.test.ts +0 -45
  908. package/src/environment/__tests__/signature.test.ts +0 -60
  909. package/src/environment/descriptors.ts +0 -7
  910. package/src/environment/extracted-environment.ts +0 -239
  911. package/src/environment/generation.ts +0 -158
  912. package/src/environment/gpu-bundle.ts +0 -144
  913. package/src/environment/graph.ts +0 -588
  914. package/src/environment/inspection.ts +0 -107
  915. package/src/environment/lifecycle.ts +0 -124
  916. package/src/environment/readiness.ts +0 -76
  917. package/src/environment/signature.ts +0 -185
  918. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
  919. package/src/extract/__tests__/environment-source.test.ts +0 -105
  920. package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
  921. package/src/extract/directional-csm.ts +0 -959
  922. package/src/extract/index.ts +0 -10
  923. package/src/extract/material-interface.ts +0 -604
  924. package/src/extract/schema-readers.ts +0 -27
  925. package/src/features/graph-contribution.ts +0 -577
  926. package/src/features/index.ts +0 -100
  927. package/src/features/morph/index.ts +0 -24
  928. package/src/features/morph/morph-bounds.ts +0 -123
  929. package/src/features/scene-temporal.ts +0 -274
  930. package/src/features/taa-resolve.ts +0 -244
  931. package/src/frame-chain.ts +0 -21
  932. package/src/hdrp-cluster-membership.ts +0 -70
  933. package/src/ibl/cubemap-projection.ts +0 -60
  934. package/src/ibl/face-uniforms.ts +0 -150
  935. package/src/mesh-update-errors.ts +0 -113
  936. package/src/mipmap-generator.ts +0 -244
  937. package/src/param-schema-projection-census.ts +0 -73
  938. package/src/persistent-render-scene.ts +0 -1752
  939. package/src/pipeline/index.ts +0 -40
  940. package/src/pipeline-errors.ts +0 -172
  941. package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
  942. package/src/prepare/index.ts +0 -8
  943. package/src/prepare/schema-readers.ts +0 -20
  944. package/src/record/__tests__/environment-record.test.ts +0 -35
  945. package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
  946. package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
  947. package/src/record/__tests__/render-submission.integration.test.ts +0 -76
  948. package/src/record/__tests__/render-submission.perf.test.ts +0 -141
  949. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
  950. package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
  951. package/src/record/frame-observation.ts +0 -122
  952. package/src/record/index.ts +0 -15
  953. package/src/record/main-pass-skin.ts +0 -51
  954. package/src/record/main-pass-sprite.ts +0 -166
  955. package/src/record/material-payload.ts +0 -292
  956. package/src/record/material-slot-plan.ts +0 -68
  957. package/src/record/membership-timing.ts +0 -1012
  958. package/src/record/shadow-caster-uniform.ts +0 -37
  959. package/src/record/shadow-submit-mode.ts +0 -277
  960. package/src/render-dispatch-membership.ts +0 -155
  961. package/src/render-pipeline-context.ts +0 -332
  962. package/src/render-pipeline-target.ts +0 -96
  963. package/src/render-scene-projection.ts +0 -1738
  964. package/src/render-system-fold.ts +0 -531
  965. package/src/renderer/asset-service.ts +0 -32
  966. package/src/renderer/backend-selection.ts +0 -121
  967. package/src/renderer/environment-classify.ts +0 -30
  968. package/src/renderer/environment-error.ts +0 -19
  969. package/src/renderer/material/pipeline-projection.ts +0 -140
  970. package/src/renderer.ts +0 -940
  971. package/src/scene-utils/collect-subtree.ts +0 -40
  972. package/src/ssao-data.ts +0 -106
  973. package/src/surface-format.ts +0 -37
  974. package/src/taa-history-store.ts +0 -429
  975. package/src/temporal-coverage.ts +0 -106
  976. package/src/temporal-frame-transaction.ts +0 -301
  977. package/src/temporal-inspection.ts +0 -194
  978. package/src/temporal-view.ts +0 -174
  979. package/src/tilemap/resolve-tileset-runtime.ts +0 -72
@@ -0,0 +1,1152 @@
1
+ import { defineComponent, Entity } from '@forgeax/engine-ecs';
2
+ import { TONEMAP_SHADER_MODE } from '@forgeax/engine-shader';
3
+ import { err, ok } from '@forgeax/engine-types';
4
+ import { projectHierarchy } from '@forgeax/engine-scene';
5
+
6
+ // src/errors/render.ts
7
+ var LifecycleConstructionError = class extends Error {
8
+ code = "lifecycle-construction-failed";
9
+ expected = "all DeviceScope resources establish and terminate in order";
10
+ hint = "inspect detail and cleanupFailures, then recover or rebuild the DeviceScope";
11
+ detail;
12
+ constructor(detail) {
13
+ super(`lifecycle-construction-failed: ${detail.resourceKind} lifecycle transaction failed`);
14
+ this.name = "LifecycleConstructionError";
15
+ this.detail = detail;
16
+ }
17
+ };
18
+ var ShadowInvalidConfigError = class extends Error {
19
+ code = "shadow-invalid-config";
20
+ expected;
21
+ hint;
22
+ detail;
23
+ constructor(field, value, min, maxOrComparator) {
24
+ const isComparator = maxOrComparator === ">" || maxOrComparator === ">=";
25
+ const max = !isComparator && typeof maxOrComparator === "number" ? maxOrComparator : void 0;
26
+ const comparator = isComparator ? maxOrComparator : ">=";
27
+ const isInteger = field === "cascadeCount" || field === "pcfKernelSize";
28
+ const isOdd = field === "pcfKernelSize";
29
+ const hint = max !== void 0 ? isInteger ? `set ${field} to an integer in [${min}, ${max}]; got ${value}` : `set ${field} to a value in [${min}, ${max}]; got ${value}` : isOdd ? `set ${field} to an odd integer ${comparator} ${min}; got ${value}` : `set ${field} to a value ${comparator} ${min}; got ${value}`;
30
+ const expected = max !== void 0 ? `${field} in [${min}, ${max}]` : `${field} ${comparator} ${min}`;
31
+ super(
32
+ max !== void 0 ? `shadow component .${field} must be in [${min}, ${max}], got ${value}` : `shadow component .${field} must be ${comparator} ${min}, got ${value}`
33
+ );
34
+ this.name = "ShadowInvalidConfigError";
35
+ this.hint = hint;
36
+ this.expected = expected;
37
+ this.detail = { field, value, min, ...max !== void 0 ? { max } : {} };
38
+ }
39
+ };
40
+ var EquirectProjectionFailedError = class extends Error {
41
+ code = "equirect-projection-failed";
42
+ expected;
43
+ hint;
44
+ detail;
45
+ constructor(handle) {
46
+ const expected = `equirect handle ${handle} projects to a GPU cubemap + IBL precompute`;
47
+ const hint = `equirect handle ${handle} referenced by Skylight/SkyboxBackground failed projection; declare Skylight{equirect} with a valid HDR equirect source and check device.caps.rgba16floatRenderable. The projection is internal (no user upload call); the record arm does not retry`;
48
+ super(`equirect handle ${handle} cubemap projection failed`);
49
+ this.name = "EquirectProjectionFailedError";
50
+ this.expected = expected;
51
+ this.hint = hint;
52
+ this.detail = { handle };
53
+ }
54
+ };
55
+ var HdrpLightBudgetExceededError = class extends Error {
56
+ code = "hdrp-light-budget-exceeded";
57
+ expected;
58
+ hint;
59
+ detail;
60
+ constructor(actual, budget) {
61
+ const expected = `light count <= ${budget}`;
62
+ const hint = `${actual} lights exceed HDRP budget ${budget}; truncating to 256. Reduce light count or wait for OOS-hdrp-larger-budget`;
63
+ super(`HDRP light budget exceeded: ${actual} > ${budget}`);
64
+ this.name = "HdrpLightBudgetExceededError";
65
+ this.expected = expected;
66
+ this.hint = hint;
67
+ this.detail = { actual, budget };
68
+ }
69
+ };
70
+ var HdrpIndexListOverflowError = class extends Error {
71
+ code = "hdrp-index-list-overflow";
72
+ expected;
73
+ hint;
74
+ detail;
75
+ constructor(actual, capacity) {
76
+ const expected = `light index list entries <= ${capacity}`;
77
+ const hint = `cluster binner overflow: writeCount ${actual} exceeds capacity ${capacity}; reduce lights, shrink cluster grid, or increase LIGHT_INDEX_LIST_CAPACITY`;
78
+ super(`HDRP index list overflow: ${actual} > ${capacity}`);
79
+ this.name = "HdrpIndexListOverflowError";
80
+ this.expected = expected;
81
+ this.hint = hint;
82
+ this.detail = { actual, capacity };
83
+ }
84
+ };
85
+ var HdrpDeferredCapsInsufficientError = class extends Error {
86
+ code = "hdrp-deferred-caps-insufficient";
87
+ expected;
88
+ hint;
89
+ detail;
90
+ constructor(actual) {
91
+ const _expected = 4;
92
+ const _expectedStr = `maxColorAttachments >= ${_expected}`;
93
+ const hint = `WebGPU maxColorAttachments = ${actual} (need >= ${_expected}). Upgrade browser to latest Chrome/Edge/Safari, or use URP (forgeax::urp) instead of HDRP.`;
94
+ super(
95
+ `HDRP deferred caps insufficient: maxColorAttachments = ${actual} (need >= ${_expected})`
96
+ );
97
+ this.name = "HdrpDeferredCapsInsufficientError";
98
+ this.expected = _expectedStr;
99
+ this.hint = hint;
100
+ this.detail = { actual, expected: _expected };
101
+ }
102
+ };
103
+ var PointShadowAtlasUninitializedError = class extends Error {
104
+ code = "point-shadow-atlas-uninitialized";
105
+ expected;
106
+ hint;
107
+ constructor() {
108
+ const expected = "ShadowAtlas.ensure() invoked before faceView()";
109
+ const hint = "Gate faceView on isAllocated() or call ensure() once in the per-frame extract step before iterating face views";
110
+ super("ShadowAtlas.faceView called before ensure(); the cube_array texture is not allocated");
111
+ this.name = "PointShadowAtlasUninitializedError";
112
+ this.expected = expected;
113
+ this.hint = hint;
114
+ }
115
+ };
116
+ var PointShadowAtlasBoundsViolationError = class extends Error {
117
+ code = "point-shadow-atlas-bounds-violation";
118
+ expected;
119
+ hint;
120
+ detail;
121
+ constructor(axis, value, max) {
122
+ const expected = `0 <= ${axis} < ${max}`;
123
+ const hint = axis === "layer" ? `clamp PointLight.shadowAtlasLayer to [0, ${max}); the cap on layers equals PointLightShadow cardinality (4)` : `clamp face index to [0, ${max}); cube faces are indexed 0..5 in +X/-X/+Y/-Y/+Z/-Z order`;
124
+ super(`ShadowAtlas.faceView ${axis} out of range: ${value} (must be in [0, ${max}))`);
125
+ this.name = "PointShadowAtlasBoundsViolationError";
126
+ this.expected = expected;
127
+ this.hint = hint;
128
+ this.detail = { axis, value, max };
129
+ }
130
+ };
131
+ var VideoUploadUnsupportedError = class extends Error {
132
+ code = "video-upload-unsupported";
133
+ expected;
134
+ hint;
135
+ constructor() {
136
+ const expected = "at least one video upload path available: a host HTMLVideoElement (general copyExternalImageToTexture path) or GPUExternalTexture capability (high-perf path)";
137
+ const hint = "this backend exposes no usable video upload path; render a static texture instead, or switch to a WebGPU backend that supports video texture upload";
138
+ super("video upload unsupported \u2014 no general or high-perf path available");
139
+ this.name = "VideoUploadUnsupportedError";
140
+ this.expected = expected;
141
+ this.hint = hint;
142
+ }
143
+ };
144
+ var VertexColorVariantConflictError = class extends Error {
145
+ code = "vertex-color-variant-conflict";
146
+ expected;
147
+ hint;
148
+ detail;
149
+ constructor(authoredValue, projected) {
150
+ const expected = `VERTEX_COLOR_AVAILABLE=${projected ? "true" : "false"}`;
151
+ const hint = "derive the shader variant from the mesh VertexLayoutProjection; COLOR_0 presence is a geometry fact";
152
+ super(`authored vertex-color variant ${authoredValue} disagrees with projected ${expected}`);
153
+ this.name = "VertexColorVariantConflictError";
154
+ this.expected = expected;
155
+ this.hint = hint;
156
+ this.detail = { authored: true, authoredValue, projected };
157
+ }
158
+ };
159
+ var SkinPaletteOverflowError = class extends Error {
160
+ code = "skin-palette-overflow";
161
+ expected;
162
+ hint;
163
+ detail;
164
+ constructor(requestedBytes, limit) {
165
+ const expected = `skinned joint palette (${requestedBytes} B) fits within device.limits.maxStorageBufferBindingSize (${limit} B)`;
166
+ const hint = "palette buffer exceeds device maxStorageBufferBindingSize; reduce skinned entity count or split into multiple palette buffers (OOS-skin-palette-batch)";
167
+ super(`skin palette buffer needs ${requestedBytes} B, exceeds device limit ${limit} B`);
168
+ this.name = "SkinPaletteOverflowError";
169
+ this.expected = expected;
170
+ this.hint = hint;
171
+ this.detail = { requestedBytes, limit };
172
+ }
173
+ };
174
+ var SkinMaterialMismatchError = class extends Error {
175
+ code = "skin-material-mismatch";
176
+ expected;
177
+ hint;
178
+ detail;
179
+ constructor(entity, actualShader) {
180
+ const expected = "Skin entity's first material program module === 'forgeax::pbr-skin'";
181
+ 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`;
182
+ super(
183
+ `Skin / material mismatch on entity ${entity}: expected forgeax::pbr-skin, got ${actualShader ?? "<empty>"}`
184
+ );
185
+ this.name = "SkinMaterialMismatchError";
186
+ this.expected = expected;
187
+ this.hint = hint;
188
+ this.detail = { entity, actualShader };
189
+ }
190
+ };
191
+ var MaterialSkinAttrMissingError = class extends Error {
192
+ code = "material-skin-attr-missing";
193
+ expected;
194
+ hint;
195
+ detail;
196
+ constructor(entity, missing) {
197
+ const expected = "pbr-skin material requires mesh.attributes.skinIndex + skinWeight";
198
+ 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`;
199
+ super(
200
+ `material/skin attribute mismatch on entity ${entity}: pbr-skin material with mesh missing ${missing}`
201
+ );
202
+ this.name = "MaterialSkinAttrMissingError";
203
+ this.expected = expected;
204
+ this.hint = hint;
205
+ this.detail = { entity, missing };
206
+ }
207
+ };
208
+ var renderFeatureRecoveryHintByRecovery = {
209
+ "next-frame": (featureIdentity, stage) => `correct '${featureIdentity}' ${stage} data and retry on the next frame`,
210
+ "renderer-recover": (featureIdentity, _stage) => `wait for renderer recovery before retrying '${featureIdentity}'`,
211
+ registration: (featureIdentity, _stage) => `correct '${featureIdentity}' registration before retrying`
212
+ };
213
+ var RenderFeatureRegistrationConflictError = class extends Error {
214
+ code = "render-feature-registration-conflict";
215
+ expected;
216
+ hint;
217
+ detail;
218
+ constructor(featureIdentity, order, conflictingOrder) {
219
+ const expected = `feature identity '${featureIdentity}' is unique`;
220
+ const hint = `rename '${featureIdentity}' or remove the duplicate feature before registration`;
221
+ super(`render feature registration conflict for '${featureIdentity}'`);
222
+ this.name = "RenderFeatureRegistrationConflictError";
223
+ this.expected = expected;
224
+ this.hint = hint;
225
+ this.detail = { featureIdentity, order, conflictingOrder };
226
+ }
227
+ };
228
+ var RenderFeatureStageFailedError = class extends Error {
229
+ code = "render-feature-stage-failed";
230
+ expected;
231
+ hint;
232
+ detail;
233
+ constructor(featureIdentity, order, stage, recovery) {
234
+ const expected = `feature '${featureIdentity}' completes its ${stage} stage without an error`;
235
+ const hint = renderFeatureRecoveryHintByRecovery[recovery](featureIdentity, stage);
236
+ super(`render feature '${featureIdentity}' failed during ${stage}`);
237
+ this.name = "RenderFeatureStageFailedError";
238
+ this.expected = expected;
239
+ this.hint = hint;
240
+ this.detail = { featureIdentity, order, stage, recovery };
241
+ }
242
+ };
243
+ var RenderFeatureCapabilityMissingError = class extends Error {
244
+ code = "render-feature-capability-missing";
245
+ expected;
246
+ hint;
247
+ detail;
248
+ constructor(featureIdentity, order, capability) {
249
+ const expected = `device capability '${capability}' is available for feature '${featureIdentity}'`;
250
+ const hint = `disable '${featureIdentity}' or use a device with '${capability}' capability`;
251
+ super(`render feature '${featureIdentity}' requires missing capability '${capability}'`);
252
+ this.name = "RenderFeatureCapabilityMissingError";
253
+ this.expected = expected;
254
+ this.hint = hint;
255
+ this.detail = { featureIdentity, order, capability };
256
+ }
257
+ };
258
+ var RenderFeaturePreparationFailedError = class extends Error {
259
+ code = "render-feature-preparation-failed";
260
+ expected;
261
+ hint;
262
+ detail;
263
+ constructor(featureIdentity, order, operation, resourceKind, resourceName, reason, recovery) {
264
+ const expected = `${resourceKind} '${resourceName}' is prepared during ${operation}`;
265
+ const hint = `repair '${resourceName}' and retry feature '${featureIdentity}' on ${recovery}`;
266
+ super(`render feature '${featureIdentity}' preparation failed for '${resourceName}'`);
267
+ this.name = "RenderFeaturePreparationFailedError";
268
+ this.expected = expected;
269
+ this.hint = hint;
270
+ this.detail = {
271
+ featureIdentity,
272
+ order,
273
+ stage: "prepare",
274
+ operation,
275
+ resourceKind,
276
+ resourceName,
277
+ reason,
278
+ recovery
279
+ };
280
+ }
281
+ };
282
+ var RenderFeaturePreparedStateMismatchError = class extends Error {
283
+ code = "render-feature-prepared-state-mismatch";
284
+ expected;
285
+ hint;
286
+ detail;
287
+ constructor(detail) {
288
+ const expected = `${detail.resourceKind} state is compatible for '${detail.operation}'`;
289
+ const hint = `repair '${detail.reason}' for feature '${detail.featureIdentity}' and retry`;
290
+ super(`render feature '${detail.featureIdentity}' prepared state mismatch`);
291
+ this.name = "RenderFeaturePreparedStateMismatchError";
292
+ this.expected = expected;
293
+ this.hint = hint;
294
+ this.detail = detail;
295
+ }
296
+ };
297
+ var RenderFeatureDrawRecordingFailedError = class extends Error {
298
+ code = "render-feature-draw-recording-failed";
299
+ expected;
300
+ hint;
301
+ detail;
302
+ constructor(featureIdentity, order, operation, resourceKind, reason, backendReason, recovery) {
303
+ const expected = `${resourceKind} recording succeeds for '${operation}'`;
304
+ const hint = `repair '${reason}' and retry feature '${featureIdentity}' after ${recovery}`;
305
+ super(`render feature '${featureIdentity}' draw recording failed`);
306
+ this.name = "RenderFeatureDrawRecordingFailedError";
307
+ this.expected = expected;
308
+ this.hint = hint;
309
+ this.detail = {
310
+ featureIdentity,
311
+ order,
312
+ stage: "record",
313
+ operation,
314
+ resourceKind,
315
+ reason,
316
+ backendReason,
317
+ recovery
318
+ };
319
+ }
320
+ };
321
+ var ObservationUnavailableError = class extends Error {
322
+ code = "observation-unavailable";
323
+ expected;
324
+ hint;
325
+ detail;
326
+ constructor(reason, hint) {
327
+ let recovery;
328
+ if (reason === "copy-src") recovery = "enable-copy-src";
329
+ else if (reason === "resource" || reason === "readback-failed") recovery = "retry-readback";
330
+ else recovery = "draw-current-frame";
331
+ super(`current-frame observation unavailable: ${reason}`);
332
+ this.name = "ObservationUnavailableError";
333
+ this.expected = "a fresh producer-owned rgba16float current-frame observation";
334
+ this.hint = hint;
335
+ this.detail = { reason, recovery };
336
+ }
337
+ };
338
+ var FrameReceiptStaleError = class extends Error {
339
+ code = "frame-receipt-stale";
340
+ expected = "the observation receipt belongs to the active device generation";
341
+ hint = "draw a new frame and call observe with its returned FrameReceipt";
342
+ detail;
343
+ constructor(detail) {
344
+ super("frame receipt belongs to a retired device generation");
345
+ this.name = "FrameReceiptStaleError";
346
+ this.detail = detail;
347
+ }
348
+ };
349
+ var RendererContractFailureError = class extends Error {
350
+ code = "renderer-contract-failed";
351
+ expected = "renderer owner contracts remain valid at the public boundary";
352
+ hint = "repair the owner contract and retry the operation";
353
+ detail;
354
+ constructor(operation, cause) {
355
+ super(`renderer ${operation} contract failed: ${cause}`);
356
+ this.name = "RendererContractFailureError";
357
+ this.detail = { operation, cause };
358
+ }
359
+ };
360
+ var RENDERER_OPERATION_ERROR_POLICY = {
361
+ "world-lease-invalid": {
362
+ expected: "every render World is represented by a live lease owned by this Renderer",
363
+ hint: "attach the World to this Renderer and use the returned lease"
364
+ },
365
+ "frame-input-invalid": {
366
+ expected: "the frame input references attached leases and a valid immutable RenderProfile",
367
+ hint: "repair the frame input and retry draw or setProfile"
368
+ },
369
+ "scene-projection-failed": {
370
+ expected: "the attached World projects into the renderer-owned RenderScene",
371
+ hint: "inspect the structured cause, repair the World publication, and retry draw"
372
+ },
373
+ "asset-binding-failed": {
374
+ expected: "all frame assets resolve to valid renderer-owned bindings",
375
+ hint: "inspect the structured cause, rebuild or cold-cook the asset, and retry draw"
376
+ },
377
+ "feature-plan-failed": {
378
+ expected: "every installed RenderFeature produces a valid declarative plan",
379
+ hint: "inspect the feature cause, repair its plan, and retry draw"
380
+ },
381
+ "graph-build-failed": {
382
+ expected: "the Standard graph builds from the active profile and feature plans",
383
+ hint: "inspect the graph cause, repair the profile or plan, and retry"
384
+ },
385
+ "device-operation-failed": {
386
+ expected: "the active device generation completes the renderer-owned operation",
387
+ hint: "inspect renderer state and the structured cause, then retry or recover"
388
+ },
389
+ "surface-unavailable": {
390
+ expected: "the presentation surface accepts the requested lifecycle operation",
391
+ hint: "inspect renderer state, then restore the surface or create a new Renderer"
392
+ },
393
+ "renderer-state-invalid": {
394
+ expected: "the Renderer is in a state that accepts the requested operation",
395
+ hint: "inspect renderer state and choose retry, restoreSurface, recover, or stop"
396
+ },
397
+ "recovery-failed": {
398
+ expected: "one recovery attempt publishes a complete replacement device generation",
399
+ hint: "inspect the structured cause and retry recover after the host-selected delay"
400
+ },
401
+ "cleanup-failed": {
402
+ expected: "Renderer disposal completes every registered cleanup in reverse ownership order",
403
+ hint: "inspect the ordered cleanup causes; the Renderer remains disposed and must not be reused"
404
+ }
405
+ };
406
+ var RendererOperationError = class extends Error {
407
+ code;
408
+ expected;
409
+ hint;
410
+ detail;
411
+ constructor(code, detail) {
412
+ const policy = RENDERER_OPERATION_ERROR_POLICY[code];
413
+ super(`${code}: ${policy.expected}`);
414
+ this.name = "RendererOperationError";
415
+ this.code = code;
416
+ this.expected = policy.expected;
417
+ this.hint = policy.hint;
418
+ this.detail = detail;
419
+ }
420
+ };
421
+ var PointsLinesInvalidStyleError = class extends Error {
422
+ code = "points-lines-invalid-style";
423
+ expected;
424
+ hint;
425
+ detail;
426
+ constructor(detail) {
427
+ super(`invalid ${detail.component} style at ${detail.field}`);
428
+ this.name = "PointsLinesInvalidStyleError";
429
+ this.expected = detail.expected;
430
+ this.hint = `repair entity ${detail.entity} ${detail.component}.${detail.field} and retry admission`;
431
+ this.detail = detail;
432
+ }
433
+ };
434
+ var PointsLinesTopologyMismatchError = class extends Error {
435
+ code = "points-lines-topology-mismatch";
436
+ expected;
437
+ hint;
438
+ detail;
439
+ constructor(detail) {
440
+ super(`Points/Lines topology mismatch at submesh ${detail.submesh}`);
441
+ this.name = "PointsLinesTopologyMismatchError";
442
+ this.expected = `submesh ${detail.submesh} topology is ${detail.expected}`;
443
+ this.hint = `rebuild entity ${detail.entity} with ${detail.expected} geometry before retrying Points/Lines admission`;
444
+ this.detail = detail;
445
+ }
446
+ };
447
+ var PointsLinesStyleUnsupportedError = class extends Error {
448
+ code = "points-lines-style-unsupported";
449
+ expected;
450
+ hint;
451
+ detail;
452
+ constructor(detail) {
453
+ super(`unsupported Points/Lines ${detail.field} member ${detail.member}`);
454
+ this.name = "PointsLinesStyleUnsupportedError";
455
+ this.expected = `${detail.field} is one of ${detail.supported.join(", ")}`;
456
+ this.hint = `use a supported Points/Lines ${detail.field} member or wait for a later milestone`;
457
+ this.detail = detail;
458
+ }
459
+ };
460
+ var PointsLinesMaterialUnsupportedError = class extends Error {
461
+ code = "points-lines-material-unsupported";
462
+ expected = "one engine-owned unlit forward MaterialAsset pass";
463
+ hint;
464
+ detail;
465
+ constructor(detail) {
466
+ super(`Points/Lines material is unsupported on entity ${detail.entity}`);
467
+ this.name = "PointsLinesMaterialUnsupportedError";
468
+ this.hint = `use Materials.unlit without a shadow-caster pass for entity ${detail.entity}`;
469
+ this.detail = detail;
470
+ }
471
+ };
472
+ var PointsLinesBudgetExceededError = class extends Error {
473
+ code = "points-lines-budget-exceeded";
474
+ expected;
475
+ hint;
476
+ detail;
477
+ constructor(detail) {
478
+ super(`Points/Lines ${detail.unit} budget exceeded`);
479
+ this.name = "PointsLinesBudgetExceededError";
480
+ this.expected = `${detail.unit} <= ${detail.limit}`;
481
+ this.hint = `reduce Points/Lines ${detail.unit} or split the entity into bounded equivalent batches`;
482
+ this.detail = detail;
483
+ }
484
+ };
485
+ var PointsLinesPrepareFailedError = class extends Error {
486
+ code = "points-lines-prepare-failed";
487
+ expected = "the complete Points/Lines candidate validates before publication";
488
+ hint;
489
+ detail;
490
+ constructor(detail) {
491
+ super(`Points/Lines prepare failed at generation ${detail.generation}`);
492
+ this.name = "PointsLinesPrepareFailedError";
493
+ this.hint = detail.lastKnownGood ? "retain the last known good candidate, repair the producer, and retry prepare" : "repair the producer and retry prepare; the failed first candidate produces zero draw";
494
+ this.detail = detail;
495
+ }
496
+ };
497
+ var CAMERA_PROJECTION_PERSPECTIVE = 0;
498
+ var CAMERA_PROJECTION_ORTHOGRAPHIC = 1;
499
+ function cameraProjectionFromF32(value) {
500
+ return value === CAMERA_PROJECTION_ORTHOGRAPHIC ? "orthographic" : "perspective";
501
+ }
502
+ var TONEMAP_NONE = TONEMAP_SHADER_MODE.none;
503
+ var TONEMAP_REINHARD_EXTENDED = TONEMAP_SHADER_MODE.reinhardExtended;
504
+ var TONEMAP_REINHARD = TONEMAP_SHADER_MODE.reinhard;
505
+ var TONEMAP_LINEAR = TONEMAP_SHADER_MODE.linear;
506
+ var TONEMAP_CINEON = TONEMAP_SHADER_MODE.cineon;
507
+ var TONEMAP_ACES_FILMIC = TONEMAP_SHADER_MODE.acesFilmic;
508
+ var TONEMAP_AGX = TONEMAP_SHADER_MODE.agx;
509
+ var TONEMAP_NEUTRAL = TONEMAP_SHADER_MODE.neutral;
510
+ function tonemapFromF32(value) {
511
+ switch (value) {
512
+ case TONEMAP_REINHARD_EXTENDED:
513
+ return "reinhard-extended";
514
+ case TONEMAP_REINHARD:
515
+ return "reinhard";
516
+ case TONEMAP_LINEAR:
517
+ return "linear";
518
+ case TONEMAP_CINEON:
519
+ return "cineon";
520
+ case TONEMAP_ACES_FILMIC:
521
+ return "aces-filmic";
522
+ case TONEMAP_AGX:
523
+ return "agx";
524
+ case TONEMAP_NEUTRAL:
525
+ return "neutral";
526
+ default:
527
+ return "none";
528
+ }
529
+ }
530
+ function tonemapToU32(mode) {
531
+ switch (mode) {
532
+ case "reinhard-extended":
533
+ return TONEMAP_REINHARD_EXTENDED;
534
+ case "reinhard":
535
+ return TONEMAP_REINHARD;
536
+ case "linear":
537
+ return TONEMAP_LINEAR;
538
+ case "cineon":
539
+ return TONEMAP_CINEON;
540
+ case "aces-filmic":
541
+ return TONEMAP_ACES_FILMIC;
542
+ case "agx":
543
+ return TONEMAP_AGX;
544
+ case "neutral":
545
+ return TONEMAP_NEUTRAL;
546
+ case "none":
547
+ return TONEMAP_NONE;
548
+ }
549
+ throw new RangeError(`Invalid tonemap mode: ${String(mode)}.`);
550
+ }
551
+ var ANTIALIAS_NONE = 0;
552
+ var ANTIALIAS_FXAA = 1;
553
+ var ANTIALIAS_MSAA = 2;
554
+ var ANTIALIAS_TAA = 3;
555
+ function antialiasFromF32(value) {
556
+ if (value === ANTIALIAS_NONE) return "none";
557
+ if (value === ANTIALIAS_FXAA) return "fxaa";
558
+ if (value === ANTIALIAS_MSAA) return "msaa";
559
+ if (value === ANTIALIAS_TAA) return "taa";
560
+ throw new RangeError(
561
+ `Invalid antialias value: ${value}. Expected ${ANTIALIAS_NONE} (none), ${ANTIALIAS_FXAA} (fxaa), ${ANTIALIAS_MSAA} (msaa), or ${ANTIALIAS_TAA} (taa).`
562
+ );
563
+ }
564
+ var BLOOM_DISABLED = 0;
565
+ var BLOOM_ENABLED = 1;
566
+ function bloomEnabledFromF32(value) {
567
+ if (value === BLOOM_DISABLED) return "off";
568
+ if (value === BLOOM_ENABLED) return "on";
569
+ throw new RangeError(
570
+ `Invalid bloom value: ${value}. Expected ${BLOOM_DISABLED} (off) or ${BLOOM_ENABLED} (on).`
571
+ );
572
+ }
573
+ var Camera = defineComponent("Camera", {
574
+ fov: { type: "f32" },
575
+ aspect: { type: "f32" },
576
+ near: { type: "f32" },
577
+ far: { type: "f32" },
578
+ projection: { type: "f32", default: 0 },
579
+ left: { type: "f32", default: -1 },
580
+ right: { type: "f32", default: 1 },
581
+ bottom: { type: "f32", default: -1 },
582
+ top: { type: "f32", default: 1 },
583
+ tonemap: { type: "f32", default: 0 },
584
+ exposure: { type: "f32", default: 1 },
585
+ whitePoint: { type: "f32", default: 4 },
586
+ antialias: { type: "f32", default: 0 },
587
+ historyVersion: { type: "u32", default: 0 },
588
+ bloom: { type: "f32", default: 0 },
589
+ bloomThreshold: { type: "f32", default: 1 },
590
+ bloomIntensity: { type: "f32", default: 1 },
591
+ bloomBlurRadius: { type: "f32", default: 4 },
592
+ // feat-20260709 M3 / D-3: clear-color is one inline `array<f32,4>` column.
593
+ // The earlier 4-scalar form (clearR/G/B/A) was chosen when this was believed
594
+ // to be the only SoA-safe shape; the Transform (pos/quat/scale) and light
595
+ // (direction/color) precedents disprove that -- an `array<f32,N>` IS an
596
+ // inline stride-N SoA column, read on the hot path as `col[i*N+a]` with zero
597
+ // allocation, so collapsing four scalars into one column removes three field
598
+ // names a reader must track without changing the storage layout or read
599
+ // pattern. The default `[0, 0, 0, 0]` is transparent black; explicit alpha
600
+ // stays visible through the same public array field.
601
+ clearColor: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 0]) },
602
+ // feat-20260617-host-engine-contract-and-video-cutscene / M3 / D-4: the
603
+ // aspect-sync sidecar on the createApp(canvas) path writes
604
+ // canvas.width / canvas.height into `aspect` every frame when this flag is
605
+ // true. Reuses the existing `bool` column tier (AnimationPlayer.paused /
606
+ // AudioSource.playing precedent) -- zero ECS infrastructure change. Default
607
+ // true so demos that never touch aspect track the canvas automatically
608
+ // (charter P1 default-is-correct); set false for render-to-texture /
609
+ // split-screen cameras that drive aspect themselves. Read it via
610
+ // world.get (readRow narrows bool -> JS boolean); the query-bundle path
611
+ // returns a raw 0/1 number (the `!== 0` always-true trap).
612
+ autoAspect: { type: "bool", default: true }
613
+ });
614
+ function cameraPodFromDefaults() {
615
+ const base = {};
616
+ for (const [key, field] of Object.entries(Camera.fields)) {
617
+ if ("default" in field && field.default !== void 0) {
618
+ base[key] = field.default;
619
+ }
620
+ }
621
+ return base;
622
+ }
623
+ function perspective(opts) {
624
+ return {
625
+ // cameraPodFromDefaults() reads autoAspect's schema default (true), so an
626
+ // omitted opts.autoAspect lands the default-correct value; an explicit
627
+ // false overrides it below (D-4: factory one-step opt-out, charter P1).
628
+ ...cameraPodFromDefaults(),
629
+ fov: opts.fov,
630
+ aspect: opts.aspect,
631
+ near: opts.near ?? 0.1,
632
+ far: opts.far ?? 100,
633
+ projection: CAMERA_PROJECTION_PERSPECTIVE,
634
+ ...opts.autoAspect !== void 0 ? { autoAspect: opts.autoAspect } : {}
635
+ };
636
+ }
637
+ function orthographic(opts) {
638
+ return {
639
+ ...cameraPodFromDefaults(),
640
+ fov: 0,
641
+ aspect: 1,
642
+ near: opts.near ?? 0.1,
643
+ far: opts.far ?? 100,
644
+ projection: CAMERA_PROJECTION_ORTHOGRAPHIC,
645
+ left: opts.left,
646
+ right: opts.right,
647
+ bottom: opts.bottom,
648
+ top: opts.top
649
+ };
650
+ }
651
+ var DirectionalLight = defineComponent("DirectionalLight", {
652
+ // direction is the ONLY field with no default (D-5): omitting it lands the
653
+ // array layer-3 all-zero [0,0,0], which the renderer owner rejects -- there is no
654
+ // universal default direction, so "default is illegal" forces an explicit
655
+ // non-zero value. color carries an explicit layer-2 default [1,1,1] (white);
656
+ // the array layer-3 fallback is all-zero, so the default MUST be explicit.
657
+ direction: { type: "array<f32, 3>" },
658
+ color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
659
+ intensity: { type: "f32", default: 1 },
660
+ // Shadow opt-out gate: defaults to true so zero-config spawns get shadows.
661
+ castShadow: { type: "bool", default: true },
662
+ // 9 shadow fields migrated from DirectionalLightShadow (feat-20260621 M1).
663
+ cascadeCount: { type: "f32", default: 4 },
664
+ splitLambda: { type: "f32", default: 0.75 },
665
+ cascadeBlend: { type: "f32", default: 0.2 },
666
+ mapSize: { type: "f32", default: 2048 },
667
+ depthBias: { type: "f32", default: 5e-3 },
668
+ normalBias: { type: "f32", default: 0.05 },
669
+ // Sole shadow coverage knob (feat replaces nearPlane/farPlane). The PSSM
670
+ // near end derives from the active camera near; shadowDistance is the far
671
+ // reach. Default 200 world units (matches UE-style "dynamic shadow
672
+ // distance"; the old farPlane default was 50).
673
+ shadowDistance: { type: "f32", default: 200 },
674
+ pcfKernelSize: { type: "f32", default: 3 }
675
+ });
676
+ var Instances = defineComponent("Instances", {
677
+ transforms: { type: "array<f32>" }
678
+ });
679
+ var Layer = defineComponent("Layer", {
680
+ value: { type: "i32", default: 0 }
681
+ });
682
+ var Lines = defineComponent(
683
+ "Lines",
684
+ {
685
+ widthPx: { type: "f32", default: 1 }
686
+ },
687
+ {
688
+ meta: {
689
+ quickStart: "Attach Lines to render line-list MeshAsset pairs in screen pixels.",
690
+ diagnostics: "Inspect widthPx at the points-lines admission boundary.",
691
+ recovery: "Use points-lines-invalid-style for non-finite or non-positive widthPx values.",
692
+ boundaries: "Lines owns raster width only; MeshFilter and MeshRenderer own geometry and material."
693
+ }
694
+ }
695
+ );
696
+ var MeshFilter = defineComponent("MeshFilter", {
697
+ assetHandle: { type: "shared<MeshAsset>" }
698
+ });
699
+ var MeshRenderer = defineComponent("MeshRenderer", {
700
+ materials: { type: "array<shared<MaterialAsset>>", default: [] }
701
+ });
702
+ var PointLight = defineComponent("PointLight", {
703
+ // color carries an explicit layer-2 default [1,1,1] (white); the array
704
+ // layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
705
+ color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
706
+ intensity: { type: "f32", default: 1 },
707
+ range: { type: "f32", default: 10 }
708
+ });
709
+ var PointLightShadow = defineComponent("PointLightShadow", {
710
+ mapSize: { type: "f32", default: 512 },
711
+ depthBias: { type: "f32", default: 5e-3 },
712
+ normalBias: { type: "f32", default: 0.05 },
713
+ nearPlane: { type: "f32", default: 0.1 },
714
+ farPlane: { type: "f32", default: 25 },
715
+ pcfKernelSize: { type: "f32", default: 3 }
716
+ });
717
+ var PointShapeValue = Object.freeze({
718
+ square: 0,
719
+ circle: 1
720
+ });
721
+ function pointShapeFromU32(value) {
722
+ switch (value) {
723
+ case PointShapeValue.square:
724
+ return "square";
725
+ case PointShapeValue.circle:
726
+ return "circle";
727
+ default:
728
+ return void 0;
729
+ }
730
+ }
731
+ var Points = defineComponent(
732
+ "Points",
733
+ {
734
+ sizePx: { type: "f32", default: 4 },
735
+ shape: { type: "enum", default: PointShapeValue.square, labels: PointShapeValue }
736
+ },
737
+ {
738
+ meta: {
739
+ quickStart: "Attach Points to render point-list MeshAsset vertices in screen pixels.",
740
+ diagnostics: "Inspect sizePx and decode shape with pointShapeFromU32.",
741
+ recovery: "Use points-lines-invalid-style for non-finite or non-positive sizePx values.",
742
+ boundaries: "Points owns raster size and shape only; MeshFilter and MeshRenderer own geometry and material."
743
+ }
744
+ }
745
+ );
746
+ var schema = {
747
+ shader: "string",
748
+ data: "buffer"
749
+ };
750
+ var PostProcessParams = defineComponent("PostProcessParams", schema);
751
+ var SceneInstance = defineComponent(
752
+ "SceneInstance",
753
+ {
754
+ source: { type: "shared<SceneAsset>" },
755
+ mapping: { type: "array<entity>" },
756
+ // The unique slot is the ECS storage seam for the instance's structured
757
+ // runtime payload; keep the nested semantic visible to schema consumers.
758
+ state: { type: "unique<SceneInstanceState>", shape: "nested" }
759
+ },
760
+ { transient: true }
761
+ );
762
+ var SKYBOX_MODE_CUBEMAP = 0;
763
+ var SkyboxBackground = defineComponent("SkyboxBackground", {
764
+ // The GPU skybox projection is render-owned presentation state; restore
765
+ // keeps the portable mode/rotation controls and lets the owner re-resolve
766
+ // the environment asset on the target world.
767
+ equirect: { type: "shared<EquirectAsset>", simulationTransient: true },
768
+ mode: { type: "f32", default: SKYBOX_MODE_CUBEMAP },
769
+ rotation: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 1]) }
770
+ });
771
+ var Skylight = defineComponent("Skylight", {
772
+ // The GPU equirect-to-cubemap projection is render-owned presentation
773
+ // state. Record/restore preserves the portable lighting controls while the
774
+ // render owner resolves this asset again on the target world.
775
+ equirect: { type: "shared<EquirectAsset>", simulationTransient: true },
776
+ // color carries an explicit layer-2 default [1,1,1] (white); the array
777
+ // layer-3 fallback is all-zero, so the default MUST be explicit (D-5).
778
+ color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
779
+ intensity: { type: "f32", default: 1 },
780
+ rotation: { type: "array<f32, 4>", default: new Float32Array([0, 0, 0, 1]) }
781
+ });
782
+ var SortKey = defineComponent("SortKey", {
783
+ value: { type: "f32", default: 0 }
784
+ });
785
+ var SpotLight = defineComponent("SpotLight", {
786
+ // direction has no default (D-5): omitting it lands the array layer-3
787
+ // all-zero, which validate() rejects. color carries an explicit layer-2
788
+ // default [1,1,1] (white); the array layer-3 fallback is all-zero.
789
+ direction: { type: "array<f32, 3>" },
790
+ color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
791
+ intensity: { type: "f32", default: 1 },
792
+ range: { type: "f32", default: 10 },
793
+ innerConeDeg: { type: "f32", default: 0 },
794
+ outerConeDeg: { type: "f32", default: 45 },
795
+ // Shadow opt-out gate: defaults to true so zero-config spawns cast shadows.
796
+ castShadow: { type: "bool", default: true },
797
+ // 6 shadow fields aligned with DirectionalLight (plan-strategy D-6).
798
+ mapSize: { type: "f32", default: 2048 },
799
+ depthBias: { type: "f32", default: 5e-3 },
800
+ normalBias: { type: "f32", default: 0.05 },
801
+ nearPlane: { type: "f32", default: 0.1 },
802
+ farPlane: { type: "f32", default: 50 },
803
+ pcfKernelSize: { type: "f32", default: 3 }
804
+ });
805
+ var VisibilityStateValue = Object.freeze({
806
+ inherited: 0,
807
+ hidden: 1,
808
+ visible: 2
809
+ });
810
+ function visibilityStateFromU32(value) {
811
+ switch (value) {
812
+ case VisibilityStateValue.inherited:
813
+ return "inherited";
814
+ case VisibilityStateValue.hidden:
815
+ return "hidden";
816
+ case VisibilityStateValue.visible:
817
+ return "visible";
818
+ default:
819
+ return void 0;
820
+ }
821
+ }
822
+ var Visibility = defineComponent(
823
+ "Visibility",
824
+ {
825
+ state: {
826
+ type: "enum",
827
+ default: VisibilityStateValue.inherited,
828
+ labels: VisibilityStateValue
829
+ }
830
+ },
831
+ {
832
+ meta: {
833
+ quickStart: "Attach Visibility to author render participation intent.",
834
+ diagnostics: "Compare the ECS state with resolveVisibility and renderer.visibilityStats.",
835
+ recovery: "Use structured ECS write errors and repair the owning scene relation.",
836
+ boundaries: "Visibility does not own camera, picking, lifecycle, assets, or VFX shadow policy."
837
+ }
838
+ }
839
+ );
840
+
841
+ // src/pipeline/standard-profile.ts
842
+ var STANDARD_PIPELINE_ID = "forgeax::standard";
843
+ var STANDARD_LIGHT_COUNTS = [1, 32, 256];
844
+ var DEFAULT_CLUSTER_GRID = { x: 16, y: 9, z: 24 };
845
+ var CLUSTER_GRID_STRIDE_U32 = 2;
846
+ var LIGHT_INDEX_LIST_CAPACITY = 1048576;
847
+ var MAX_LIGHTS = 256;
848
+ var DEFAULT_STANDARD_PROFILE = Object.freeze({
849
+ pipelineId: STANDARD_PIPELINE_ID,
850
+ lightCount: 32,
851
+ lighting: "direct",
852
+ shadows: "filtered",
853
+ pbr: true,
854
+ ibl: true,
855
+ ssao: false,
856
+ bloom: true,
857
+ tone: "aces-filmic",
858
+ antialias: "fxaa",
859
+ sky: true,
860
+ fallback: "native",
861
+ postStages: ["transparent-blend", "bloom", "tone", "fxaa", "output"]
862
+ });
863
+ function resolveStandardLane(profile, capabilities) {
864
+ if (!capabilities.compute || !capabilities.storageBuffer) return "cpu-webgl2";
865
+ return profile.lighting;
866
+ }
867
+
868
+ // src/render-contract.ts
869
+ var STANDARD_TONEMAP_FEATURE_ID = "forgeax::standard::tonemap";
870
+ var RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
871
+ "record/graph-execute/point-shadow",
872
+ "record/graph-execute/cluster-binner-upload",
873
+ "record/graph-execute/g-buffer",
874
+ "record/graph-execute/g-buffer/geometry-loop",
875
+ "record/graph-execute/g-buffer/material-bind-groups",
876
+ "record/graph-execute/g-buffer/pipeline-selection",
877
+ "record/graph-execute/g-buffer/draw-submit",
878
+ "record/graph-execute/ssao-calc",
879
+ "record/graph-execute/ssao-blur",
880
+ "record/graph-execute/lighting",
881
+ "record/graph-execute/forward",
882
+ "record/graph-execute/forward/geometry-loop",
883
+ "record/graph-execute/forward/material-bind-groups",
884
+ "record/graph-execute/forward/pipeline-selection",
885
+ "record/graph-execute/forward/draw-submit",
886
+ "record/graph-execute/tonemap",
887
+ "record/graph-execute/debug-overlay",
888
+ "record/graph-execute/shadow",
889
+ "record/graph-execute/spot-shadow",
890
+ "record/graph-execute/skybox",
891
+ "record/graph-execute/main",
892
+ "record/graph-execute/fxaa",
893
+ "record/graph-execute/bloom-bright",
894
+ "record/graph-execute/bloom-blur-h",
895
+ "record/graph-execute/bloom-blur-v",
896
+ "record/graph-execute/bloom-composite",
897
+ "record/graph-execute/other"
898
+ ];
899
+ var RENDER_HDRP_BINNER_PHASE_CATALOG = [
900
+ "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy",
901
+ "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/light-aabb",
902
+ "record/scene-state/hdrp-cluster/binner/light-bounds-and-occupancy/cluster-occupancy",
903
+ "record/scene-state/hdrp-cluster/binner/cluster-reserve",
904
+ "record/scene-state/hdrp-cluster/binner/input-preparation",
905
+ "record/scene-state/hdrp-cluster/binner/bin-core",
906
+ "record/scene-state/hdrp-cluster/binner/light-index-write",
907
+ "record/scene-state/hdrp-cluster/binner/light-index-write/bounds-read",
908
+ "record/scene-state/hdrp-cluster/binner/light-index-write/cluster-write"
909
+ ];
910
+ var RENDER_HDRP_CLUSTER_PHASE_CATALOG = [
911
+ "record/scene-state/hdrp-cluster/binner",
912
+ ...RENDER_HDRP_BINNER_PHASE_CATALOG,
913
+ "record/scene-state/hdrp-cluster/payload-packing",
914
+ "record/scene-state/hdrp-cluster/buffer-upload"
915
+ ];
916
+ var RENDER_SCENE_STATE_PHASE_CATALOG = [
917
+ "record/scene-state/fold-buckets",
918
+ "record/scene-state/lighting-prep",
919
+ "record/scene-state/ambient-resolution",
920
+ "record/scene-state/directional-shadow-cache",
921
+ "record/scene-state/hdrp-cluster",
922
+ ...RENDER_HDRP_CLUSTER_PHASE_CATALOG
923
+ ];
924
+ var RENDER_RECORD_PHASE_CATALOG = [
925
+ "record/scene-state",
926
+ ...RENDER_SCENE_STATE_PHASE_CATALOG,
927
+ "record/swapchain",
928
+ "record/render-graph",
929
+ "record/target-views",
930
+ "record/validation",
931
+ "record/dispatch-plan",
932
+ "record/uploads",
933
+ "record/bind-groups",
934
+ "record/graph-execute",
935
+ ...RENDER_GRAPH_EXECUTION_PHASE_CATALOG
936
+ ];
937
+ var RENDER_PHASE_CATALOG = [
938
+ "extract",
939
+ "bind-groups",
940
+ "features",
941
+ "sort",
942
+ "record",
943
+ ...RENDER_RECORD_PHASE_CATALOG
944
+ ];
945
+ function invalidStyle(input, component, field, value, expected) {
946
+ return err(new PointsLinesInvalidStyleError({ entity: input.entity, component, field, value, expected }));
947
+ }
948
+ function topologyMismatch(input, submesh, expected, actual) {
949
+ return err(new PointsLinesTopologyMismatchError({ entity: input.entity, submesh, expected, actual }));
950
+ }
951
+ function checkStyle(input) {
952
+ const hasPoints = input.points !== void 0;
953
+ const hasLines = input.lines !== void 0;
954
+ if (hasPoints && hasLines) {
955
+ return invalidStyle(
956
+ input,
957
+ "Points/Lines",
958
+ "components",
959
+ "Points + Lines",
960
+ "exactly one style component"
961
+ );
962
+ }
963
+ if (!hasPoints && !hasLines) {
964
+ return invalidStyle(input, "Points/Lines", "components", void 0, "one style component");
965
+ }
966
+ if (hasPoints) {
967
+ const sizePx = input.points?.sizePx ?? 4;
968
+ const shapeValue = input.points?.shape ?? PointShapeValue.square;
969
+ const shape = pointShapeFromU32(shapeValue);
970
+ if (!Number.isFinite(sizePx) || sizePx <= 0) {
971
+ return invalidStyle(input, "Points", "sizePx", sizePx, "finite sizePx > 0");
972
+ }
973
+ if (shape === void 0) {
974
+ return invalidStyle(input, "Points", "shape", shapeValue, "shape is 'square' or 'circle'");
975
+ }
976
+ return ok({ component: "Points", shape, sizePx });
977
+ }
978
+ const widthPx = input.lines?.widthPx ?? 1;
979
+ if (!Number.isFinite(widthPx) || widthPx <= 0) {
980
+ return invalidStyle(input, "Lines", "widthPx", widthPx, "finite widthPx > 0");
981
+ }
982
+ return ok({ component: "Lines", widthPx });
983
+ }
984
+ function checkTopology(input, component) {
985
+ const expected = component === "Points" ? "point-list" : "line-list";
986
+ let pointCount = 0;
987
+ let segmentCount = 0;
988
+ const acceptedSubmeshes = [];
989
+ let sawNonEmpty = false;
990
+ for (const [submeshIndex, submesh] of input.mesh.submeshes.entries()) {
991
+ const indexed = input.mesh.indices !== void 0 && submesh.indexCount > 0;
992
+ const elementCount = indexed ? submesh.indexCount : submesh.vertexCount;
993
+ if (elementCount === 0) continue;
994
+ sawNonEmpty = true;
995
+ if (component === "Lines" && submesh.topology === "line-strip") {
996
+ return err(
997
+ new PointsLinesStyleUnsupportedError({
998
+ lane: "admission",
999
+ field: "topology",
1000
+ member: "line-strip",
1001
+ supported: ["line-list"]
1002
+ })
1003
+ );
1004
+ }
1005
+ if (submesh.topology !== expected) {
1006
+ return topologyMismatch(input, submeshIndex, expected, submesh.topology);
1007
+ }
1008
+ if (component === "Lines" && elementCount % 2 !== 0) {
1009
+ return topologyMismatch(input, submeshIndex, "line-list pairs", "line-list odd tail");
1010
+ }
1011
+ acceptedSubmeshes.push(submeshIndex);
1012
+ if (component === "Points") pointCount += elementCount;
1013
+ else segmentCount += elementCount / 2;
1014
+ }
1015
+ if (!sawNonEmpty) return topologyMismatch(input, 0, expected, "empty-range");
1016
+ return ok({ pointCount, segmentCount, submeshes: acceptedSubmeshes });
1017
+ }
1018
+ function checkMaterial(input) {
1019
+ const passes = input.material.passes ?? [];
1020
+ const unlitModules = /* @__PURE__ */ new Set(["forgeax_material::unlit", "forgeax::default-unlit"]);
1021
+ if (passes.length !== 1 || passes[0] === void 0) {
1022
+ const pass2 = passes.find(
1023
+ (candidate) => candidate.name === "deferred" || candidate.name === "shadow-caster"
1024
+ ) ?? passes[0];
1025
+ return err(
1026
+ new PointsLinesMaterialUnsupportedError({
1027
+ entity: input.entity,
1028
+ material: input.materialId ?? "<anonymous>",
1029
+ pass: pass2?.name ?? "<empty>",
1030
+ module: pass2?.program.module ?? "<empty>",
1031
+ reason: "points-lines admission requires one unlit forward pass"
1032
+ })
1033
+ );
1034
+ }
1035
+ const pass = passes[0];
1036
+ const lightMode = pass.renderState?.tags?.LightMode;
1037
+ if (!unlitModules.has(pass.program.module) || pass.name !== "forward" || lightMode === "ShadowCaster") {
1038
+ return err(
1039
+ new PointsLinesMaterialUnsupportedError({
1040
+ entity: input.entity,
1041
+ material: input.materialId ?? "<anonymous>",
1042
+ pass: pass.name,
1043
+ module: pass.program.module,
1044
+ reason: "points-lines admission requires an engine-owned unlit forward pass"
1045
+ })
1046
+ );
1047
+ }
1048
+ return ok(void 0);
1049
+ }
1050
+ function admitPointsLines(input) {
1051
+ const style = checkStyle(input);
1052
+ if (!style.ok) return style;
1053
+ const topology = checkTopology(input, style.value.component);
1054
+ if (!topology.ok) return topology;
1055
+ const material = checkMaterial(input);
1056
+ if (!material.ok) return material;
1057
+ if (style.value.component === "Points" && input.limits?.maxPoints !== void 0) {
1058
+ if (topology.value.pointCount > input.limits.maxPoints) {
1059
+ return err(
1060
+ new PointsLinesBudgetExceededError({
1061
+ lane: "admission",
1062
+ requested: topology.value.pointCount,
1063
+ limit: input.limits.maxPoints,
1064
+ unit: "points"
1065
+ })
1066
+ );
1067
+ }
1068
+ }
1069
+ if (style.value.component === "Lines" && input.limits?.maxSegments !== void 0) {
1070
+ if (topology.value.segmentCount > input.limits.maxSegments) {
1071
+ return err(
1072
+ new PointsLinesBudgetExceededError({
1073
+ lane: "admission",
1074
+ requested: topology.value.segmentCount,
1075
+ limit: input.limits.maxSegments,
1076
+ unit: "segments"
1077
+ })
1078
+ );
1079
+ }
1080
+ }
1081
+ return ok({ ...style.value, ...topology.value });
1082
+ }
1083
+ function resolveVisibility(world, hierarchy = projectHierarchy(world)) {
1084
+ const query = world.query({ read: [Entity], optional: [Visibility] });
1085
+ let intentCount = 0;
1086
+ let hasAnyHiddenIntent = false;
1087
+ if (query.ok) {
1088
+ for (const row of query.value) {
1089
+ const visibility = row.get(Visibility);
1090
+ if (visibility === void 0) continue;
1091
+ intentCount += 1;
1092
+ if (visibility.state === VisibilityStateValue.hidden) {
1093
+ hasAnyHiddenIntent = true;
1094
+ }
1095
+ }
1096
+ }
1097
+ let resolveEntity;
1098
+ let hasIntent;
1099
+ const ensureResolver = () => {
1100
+ if (resolveEntity !== void 0) return;
1101
+ const intentByEntity = /* @__PURE__ */ new Map();
1102
+ if (query.ok) {
1103
+ for (const row of query.value) {
1104
+ const raw = row.get(Visibility);
1105
+ const intent = raw === void 0 ? void 0 : visibilityStateFromU32(raw.state);
1106
+ if (intent !== void 0) {
1107
+ intentByEntity.set(row.entity, intent);
1108
+ }
1109
+ }
1110
+ }
1111
+ hasIntent = (entity) => intentByEntity.has(entity);
1112
+ const resolved = /* @__PURE__ */ new Map();
1113
+ const resolving = /* @__PURE__ */ new Set();
1114
+ resolveEntity = (entity) => {
1115
+ const existing = resolved.get(entity);
1116
+ if (existing !== void 0) return existing;
1117
+ if (resolving.has(entity)) return void 0;
1118
+ const intent = intentByEntity.get(entity) ?? "inherited";
1119
+ resolving.add(entity);
1120
+ let result;
1121
+ if (intent === "hidden") {
1122
+ result = { intent, effective: "hidden", source: "self" };
1123
+ } else if (intent === "visible") {
1124
+ result = { intent, effective: "visible", source: "self" };
1125
+ } else {
1126
+ const parent = hierarchy.getParent(entity);
1127
+ const parentResult = parent === void 0 ? void 0 : resolveEntity?.(parent);
1128
+ result = parentResult === void 0 ? { intent, effective: "visible", source: "default" } : { intent, effective: parentResult.effective, source: "parent" };
1129
+ }
1130
+ resolving.delete(entity);
1131
+ resolved.set(entity, result);
1132
+ return result;
1133
+ };
1134
+ };
1135
+ return {
1136
+ diagnostics: hierarchy.diagnostics,
1137
+ hasAnyIntent: intentCount > 0,
1138
+ hasAnyHiddenIntent,
1139
+ get(entity) {
1140
+ ensureResolver();
1141
+ return hasIntent?.(entity) ? resolveEntity?.(entity) : void 0;
1142
+ },
1143
+ effective(entity) {
1144
+ ensureResolver();
1145
+ return resolveEntity?.(entity)?.effective ?? "visible";
1146
+ }
1147
+ };
1148
+ }
1149
+
1150
+ export { ANTIALIAS_FXAA, ANTIALIAS_MSAA, ANTIALIAS_NONE, BLOOM_DISABLED, BLOOM_ENABLED, CAMERA_PROJECTION_ORTHOGRAPHIC, CAMERA_PROJECTION_PERSPECTIVE, CLUSTER_GRID_STRIDE_U32, Camera, DEFAULT_CLUSTER_GRID, DEFAULT_STANDARD_PROFILE, DirectionalLight, EquirectProjectionFailedError, FrameReceiptStaleError, HdrpDeferredCapsInsufficientError, HdrpIndexListOverflowError, HdrpLightBudgetExceededError, Instances, LIGHT_INDEX_LIST_CAPACITY, Layer, LifecycleConstructionError, Lines, MAX_LIGHTS, MaterialSkinAttrMissingError, MeshFilter, MeshRenderer, ObservationUnavailableError, PointLight, PointLightShadow, PointShadowAtlasBoundsViolationError, PointShadowAtlasUninitializedError, PointShapeValue, Points, PointsLinesMaterialUnsupportedError, PointsLinesPrepareFailedError, PostProcessParams, RENDER_PHASE_CATALOG, RenderFeatureCapabilityMissingError, RenderFeatureDrawRecordingFailedError, RenderFeaturePreparationFailedError, RenderFeaturePreparedStateMismatchError, RenderFeatureRegistrationConflictError, RenderFeatureStageFailedError, RendererContractFailureError, RendererOperationError, SKYBOX_MODE_CUBEMAP, STANDARD_LIGHT_COUNTS, STANDARD_PIPELINE_ID, STANDARD_TONEMAP_FEATURE_ID, SceneInstance, ShadowInvalidConfigError, SkinMaterialMismatchError, SkinPaletteOverflowError, SkyboxBackground, Skylight, SortKey, SpotLight, TONEMAP_ACES_FILMIC, TONEMAP_AGX, TONEMAP_CINEON, TONEMAP_LINEAR, TONEMAP_NEUTRAL, TONEMAP_NONE, TONEMAP_REINHARD, TONEMAP_REINHARD_EXTENDED, VertexColorVariantConflictError, VideoUploadUnsupportedError, Visibility, VisibilityStateValue, admitPointsLines, antialiasFromF32, bloomEnabledFromF32, cameraProjectionFromF32, orthographic, perspective, pointShapeFromU32, resolveStandardLane, resolveVisibility, tonemapFromF32, tonemapToU32, visibilityStateFromU32 };
1151
+ //# sourceMappingURL=chunk-YEJIUW7D.mjs.map
1152
+ //# sourceMappingURL=chunk-YEJIUW7D.mjs.map