@forgeax/engine-render 0.1.3 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (918) hide show
  1. package/README.md +130 -641
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
  4. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
  6. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
  8. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
  10. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
  11. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
  12. package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
  13. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
  14. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
  15. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
  16. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
  17. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
  18. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
  20. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
  21. package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
  22. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
  23. package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
  24. package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
  26. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
  27. package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
  28. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
  29. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
  30. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
  31. package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
  32. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
  33. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
  34. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
  36. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
  37. package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
  38. package/dist/assembly/backend-contract.d.ts.map +1 -0
  39. package/dist/assembly/factory.d.ts +207 -0
  40. package/dist/assembly/factory.d.ts.map +1 -0
  41. package/dist/assembly/host-contract.d.ts +84 -0
  42. package/dist/assembly/host-contract.d.ts.map +1 -0
  43. package/dist/{renderer → assembly}/material/assembly.d.ts +1 -2
  44. package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
  45. package/dist/assembly/material/pipeline-projection.d.ts +30 -0
  46. package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
  47. package/dist/authoring.d.ts +10 -11
  48. package/dist/authoring.d.ts.map +1 -1
  49. package/dist/authoring.mjs +25 -3
  50. package/dist/authoring.mjs.map +1 -1
  51. package/dist/chunk-CQXZC5XI.mjs +182 -0
  52. package/dist/chunk-CQXZC5XI.mjs.map +1 -0
  53. package/dist/chunk-QC4VW3XJ.mjs +79 -0
  54. package/dist/chunk-QC4VW3XJ.mjs.map +1 -0
  55. package/dist/chunk-SCRSAK5B.mjs +480 -0
  56. package/dist/chunk-SCRSAK5B.mjs.map +1 -0
  57. package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
  58. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
  59. package/dist/components/glyph-text.d.ts +1 -1
  60. package/dist/components/glyph-text.d.ts.map +1 -1
  61. package/dist/components/index.d.ts +2 -2
  62. package/dist/components/index.d.ts.map +1 -1
  63. package/dist/components/instances.d.ts +1 -1
  64. package/dist/components/instances.d.ts.map +1 -1
  65. package/dist/components/light-helpers.d.ts +1 -1
  66. package/dist/components/light-helpers.d.ts.map +1 -1
  67. package/dist/components/mesh-filter.d.ts +7 -7
  68. package/dist/components/mesh-filter.d.ts.map +1 -1
  69. package/dist/components/scene-instance.d.ts +11 -11
  70. package/dist/components/skybox-background.d.ts +56 -0
  71. package/dist/components/skybox-background.d.ts.map +1 -0
  72. package/dist/components/skylight.d.ts +55 -0
  73. package/dist/components/skylight.d.ts.map +1 -0
  74. package/dist/components/sprite-animation.d.ts +2 -3
  75. package/dist/components/sprite-animation.d.ts.map +1 -1
  76. package/dist/components/sprite-instances.d.ts +1 -1
  77. package/dist/components/sprite-playback-mode.d.ts +6 -1
  78. package/dist/components/sprite-playback-mode.d.ts.map +1 -1
  79. package/dist/components/sprite-region-override.d.ts +2 -3
  80. package/dist/components/sprite-region-override.d.ts.map +1 -1
  81. package/dist/components/tile-layer.d.ts +5 -0
  82. package/dist/components/tile-layer.d.ts.map +1 -1
  83. package/dist/construct-renderer.d.ts +18 -1
  84. package/dist/construct-renderer.d.ts.map +1 -1
  85. package/dist/construct-renderer.mjs +27008 -4
  86. package/dist/construct-renderer.mjs.map +1 -1
  87. package/dist/debug-draw-glue.d.ts +2 -53
  88. package/dist/debug-draw-glue.d.ts.map +1 -1
  89. package/dist/device/device-scope.d.ts +83 -0
  90. package/dist/device/device-scope.d.ts.map +1 -0
  91. package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
  92. package/dist/device/gpu-residency.d.ts.map +1 -0
  93. package/dist/device/resource-types.d.ts +8 -0
  94. package/dist/device/resource-types.d.ts.map +1 -0
  95. package/dist/engine-metrics.d.ts +2 -2
  96. package/dist/engine-metrics.d.ts.map +1 -1
  97. package/dist/errors/recover.d.ts +28 -1
  98. package/dist/errors/recover.d.ts.map +1 -1
  99. package/dist/errors/render.d.ts +249 -258
  100. package/dist/errors/render.d.ts.map +1 -1
  101. package/dist/features/fullscreen.d.ts +19 -0
  102. package/dist/features/fullscreen.d.ts.map +1 -0
  103. package/dist/features/host.d.ts +32 -26
  104. package/dist/features/host.d.ts.map +1 -1
  105. package/dist/features/morph/morph-feature.d.ts +39 -5
  106. package/dist/features/morph/morph-feature.d.ts.map +1 -1
  107. package/dist/features/plan.d.ts +182 -0
  108. package/dist/features/plan.d.ts.map +1 -0
  109. package/dist/features/prepared-gpu-work.d.ts +21 -17
  110. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  111. package/dist/features/prepared-graphics-store.d.ts +2 -1
  112. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  113. package/dist/features/prepared-graphics.d.ts +11 -21
  114. package/dist/features/prepared-graphics.d.ts.map +1 -1
  115. package/dist/features/render-graph-compute.d.ts +2 -2
  116. package/dist/features/render-graph-compute.d.ts.map +1 -1
  117. package/dist/features/render-graph-contribution.d.ts +4 -7
  118. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  119. package/dist/features/render-graph-raster.d.ts +2 -2
  120. package/dist/features/render-graph-raster.d.ts.map +1 -1
  121. package/dist/features/render-graph-resources.d.ts +6 -6
  122. package/dist/features/render-graph-resources.d.ts.map +1 -1
  123. package/dist/features/targets.d.ts +5 -5
  124. package/dist/features/targets.d.ts.map +1 -1
  125. package/dist/features/types.d.ts +11 -190
  126. package/dist/features/types.d.ts.map +1 -1
  127. package/dist/features/vocabulary.d.ts +14 -0
  128. package/dist/features/vocabulary.d.ts.map +1 -0
  129. package/dist/fullscreen-post-process-pass.d.ts +4 -25
  130. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  131. package/dist/glyph-text-layout-system.d.ts +3 -2
  132. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  133. package/dist/gpu-driven/batch-topology.d.ts +6 -75
  134. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  135. package/dist/gpu-driven/production-raster.d.ts +13 -112
  136. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  137. package/dist/gpu-driven/view-gpu.d.ts +10 -66
  138. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  139. package/dist/gpu-resource.d.ts +3 -3
  140. package/dist/gpu-scene-schema.d.ts +1 -94
  141. package/dist/gpu-scene-schema.d.ts.map +1 -1
  142. package/dist/gpu-scene.d.ts +7 -33
  143. package/dist/gpu-scene.d.ts.map +1 -1
  144. package/dist/hdrp-buffers.d.ts +3 -53
  145. package/dist/hdrp-buffers.d.ts.map +1 -1
  146. package/dist/ibl/IblPipelineCache.d.ts +74 -180
  147. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  148. package/dist/ibl/skylight-bind-group.d.ts +1 -1
  149. package/dist/index.d.ts +13 -43
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.mjs +165 -3
  152. package/dist/index.mjs.map +1 -1
  153. package/dist/inspection-types.d.ts +69 -0
  154. package/dist/inspection-types.d.ts.map +1 -0
  155. package/dist/instance-buffer-cache.d.ts +1 -4
  156. package/dist/instance-buffer-cache.d.ts.map +1 -1
  157. package/dist/internal.d.ts +1 -73
  158. package/dist/internal.d.ts.map +1 -1
  159. package/dist/internal.mjs +1 -43
  160. package/dist/internal.mjs.map +1 -1
  161. package/dist/lifecycle.d.ts +36 -2
  162. package/dist/lifecycle.d.ts.map +1 -1
  163. package/dist/materials.d.ts +0 -3
  164. package/dist/materials.d.ts.map +1 -1
  165. package/dist/mesh-material-bindings.d.ts +0 -1
  166. package/dist/mesh-material-bindings.d.ts.map +1 -1
  167. package/dist/pbr-pipeline.d.ts +75 -29
  168. package/dist/pbr-pipeline.d.ts.map +1 -1
  169. package/dist/pipeline/standard-forward-lane.d.ts +5 -0
  170. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
  171. package/dist/pipeline/standard-pipeline.d.ts +31 -0
  172. package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
  173. package/dist/pipeline/standard-profile.d.ts +40 -0
  174. package/dist/pipeline/standard-profile.d.ts.map +1 -0
  175. package/dist/pipeline-builder.d.ts +3 -3
  176. package/dist/pipeline-builder.d.ts.map +1 -1
  177. package/dist/pipeline-spec-types.d.ts +24 -0
  178. package/dist/pipeline-spec-types.d.ts.map +1 -0
  179. package/dist/pipeline-spec.d.ts +16 -155
  180. package/dist/pipeline-spec.d.ts.map +1 -1
  181. package/dist/plugin.d.ts +1 -14
  182. package/dist/plugin.d.ts.map +1 -1
  183. package/dist/post-process-errors.d.ts +18 -18
  184. package/dist/post-process-errors.d.ts.map +1 -1
  185. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
  186. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  187. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
  188. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
  189. package/dist/record/frame-lighting.d.ts +7 -73
  190. package/dist/record/frame-lighting.d.ts.map +1 -1
  191. package/dist/record/frame-snapshot.d.ts +44 -44
  192. package/dist/record/frame-snapshot.d.ts.map +1 -1
  193. package/dist/record/frame-targets.d.ts +5 -38
  194. package/dist/record/frame-targets.d.ts.map +1 -1
  195. package/dist/record/frame.d.ts +64 -52
  196. package/dist/record/frame.d.ts.map +1 -1
  197. package/dist/record/helpers.d.ts +3 -2
  198. package/dist/record/helpers.d.ts.map +1 -1
  199. package/dist/record/main-pass-geometry.d.ts +5 -4
  200. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  201. package/dist/record/main-pass-material.d.ts +90 -59
  202. package/dist/record/main-pass-material.d.ts.map +1 -1
  203. package/dist/record/main-pass-sprite-draws.d.ts +28 -3
  204. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  205. package/dist/record/main-pass.d.ts +1 -1
  206. package/dist/record/main-pass.d.ts.map +1 -1
  207. package/dist/record/mesh-ssbo.d.ts +276 -3
  208. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  209. package/dist/record/render-context.d.ts +235 -0
  210. package/dist/record/render-context.d.ts.map +1 -0
  211. package/dist/record/shadow-pass.d.ts +15 -88
  212. package/dist/record/shadow-pass.d.ts.map +1 -1
  213. package/dist/record/skybox-post-pass.d.ts +1 -1
  214. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  215. package/dist/record/typed-frame-graph.d.ts +29 -7
  216. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  217. package/dist/record/view-ubo.d.ts +3 -3
  218. package/dist/record/view-ubo.d.ts.map +1 -1
  219. package/dist/render-contract.d.ts +416 -0
  220. package/dist/render-contract.d.ts.map +1 -0
  221. package/dist/render-data.d.ts.map +1 -1
  222. package/dist/render-graph-primitives.d.ts +14 -362
  223. package/dist/render-graph-primitives.d.ts.map +1 -1
  224. package/dist/render-pipeline.d.ts +25 -64
  225. package/dist/render-pipeline.d.ts.map +1 -1
  226. package/dist/render-system-extract.d.ts +107 -338
  227. package/dist/render-system-extract.d.ts.map +1 -1
  228. package/dist/render-system.d.ts +21 -713
  229. package/dist/render-system.d.ts.map +1 -1
  230. package/dist/scene/render-scene-types.d.ts +58 -0
  231. package/dist/scene/render-scene-types.d.ts.map +1 -0
  232. package/dist/scene/render-scene.d.ts +105 -0
  233. package/dist/scene/render-scene.d.ts.map +1 -0
  234. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
  235. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
  236. package/dist/ssao-buffers.d.ts +22 -3
  237. package/dist/ssao-buffers.d.ts.map +1 -1
  238. package/dist/systems/skin-palette-allocator.d.ts +2 -4
  239. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  240. package/dist/systems/skin-palette-types.d.ts +14 -0
  241. package/dist/systems/skin-palette-types.d.ts.map +1 -0
  242. package/dist/systems/transparent-sort-config.d.ts +23 -2
  243. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  244. package/dist/tilemap-chunk-extract-system.d.ts +4 -3
  245. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
  246. package/dist/typed-render-graph-primitives.d.ts +2 -4
  247. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  248. package/dist/typed-shadow-passes.d.ts +3 -3
  249. package/dist/typed-shadow-passes.d.ts.map +1 -1
  250. package/package.json +23 -23
  251. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
  252. package/src/__tests__/callback-inference.test-d.ts +6 -3
  253. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
  254. package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
  255. package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
  256. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
  257. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
  258. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
  259. package/src/__tests__/factory-contract.integration.test.ts +158 -209
  260. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
  261. package/src/__tests__/frame-observation.contract.test.ts +17 -8
  262. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
  263. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
  264. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +9 -16
  265. package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
  266. package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
  267. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
  268. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
  269. package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
  270. package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
  271. package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
  272. package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
  273. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
  274. package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
  275. package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
  276. package/src/__tests__/gpu-scene.unit.test.ts +10 -24
  277. package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
  278. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
  279. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
  280. package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
  281. package/src/__tests__/material-cooked-projection.unit.test.ts +2 -51
  282. package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
  283. package/src/__tests__/material-static-dynamic-route.unit.test.ts +4 -23
  284. package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
  285. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
  286. package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
  287. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
  288. package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
  289. package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
  290. package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
  291. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
  292. package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
  293. package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
  294. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
  295. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
  296. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
  297. package/src/__tests__/profiler-default-off.test.ts +1 -1
  298. package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
  299. package/src/__tests__/profiler-phase-integration.test.ts +5 -13
  300. package/src/__tests__/profiler-phase-token.test.ts +3 -8
  301. package/src/__tests__/public-surface.test-d.ts +65 -3
  302. package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
  303. package/src/__tests__/render-error-code-owner.test-d.ts +18 -23
  304. package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
  305. package/src/__tests__/render-error-exhaustive.test-d.ts +8 -1
  306. package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
  307. package/src/__tests__/render-feature-context.test-d.ts +16 -40
  308. package/src/__tests__/render-feature-contract.test-d.ts +9 -18
  309. package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
  310. package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
  311. package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
  312. package/src/__tests__/render-feature-plan.test-d.ts +161 -0
  313. package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
  314. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
  315. package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
  316. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
  317. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
  318. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
  319. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
  320. package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
  321. package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
  322. package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
  323. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
  324. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
  325. package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
  326. package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
  327. package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
  328. package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
  329. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +46 -50
  330. package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
  331. package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
  332. package/src/__tests__/ssao-config.unit.test.ts +36 -0
  333. package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
  334. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
  335. package/src/__tests__/standard-descriptors.test-d.ts +22 -0
  336. package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
  337. package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
  338. package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
  339. package/src/__tests__/surface-configuration.unit.test.ts +1 -2
  340. package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
  341. package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
  342. package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
  343. package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
  344. package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
  345. package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
  346. package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
  347. package/src/__tests__/visibility-extract.integration.test.ts +20 -11
  348. package/src/__tests__/visibility-extract.perf.test.ts +66 -32
  349. package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
  350. package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
  351. package/src/__tests__/visibility-instances.integration.test.ts +7 -11
  352. package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
  353. package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
  354. package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
  355. package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
  356. package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
  357. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
  358. package/src/__tests__/vocabulary.unit.test.ts +1 -1
  359. package/src/assembly/backend-contract.ts +57 -0
  360. package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1709 -2693
  361. package/src/assembly/host-contract.ts +101 -0
  362. package/src/{renderer → assembly}/material/assembly.ts +1 -3
  363. package/src/assembly/material/pipeline-projection.ts +63 -0
  364. package/src/authoring.ts +14 -22
  365. package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
  366. package/src/components/glyph-text.ts +3 -2
  367. package/src/components/index.ts +7 -9
  368. package/src/components/instances.ts +4 -5
  369. package/src/components/light-helpers.ts +1 -1
  370. package/src/components/mesh-filter.ts +11 -10
  371. package/src/components/post-process-params.ts +3 -3
  372. package/src/components/scene-instance.ts +12 -12
  373. package/src/components/skybox-background.ts +103 -0
  374. package/src/components/{environment.ts → skylight.ts} +2 -111
  375. package/src/components/sprite-animation.ts +3 -4
  376. package/src/components/sprite-instances.ts +2 -2
  377. package/src/components/sprite-playback-mode.ts +7 -1
  378. package/src/components/sprite-region-override.ts +2 -3
  379. package/src/components/tile-layer.ts +8 -2
  380. package/src/construct-renderer.ts +67 -4
  381. package/src/debug-draw-glue.ts +8 -129
  382. package/src/device/device-scope.ts +306 -0
  383. package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
  384. package/src/device/resource-types.ts +20 -0
  385. package/src/engine-metrics.ts +12 -19
  386. package/src/errors/recover.ts +45 -3
  387. package/src/errors/render.ts +357 -460
  388. package/src/features/fullscreen.ts +46 -0
  389. package/src/features/host.ts +575 -309
  390. package/src/features/morph/morph-feature.ts +195 -105
  391. package/src/features/plan.ts +447 -0
  392. package/src/features/prepared-gpu-work.ts +72 -15
  393. package/src/features/prepared-graphics-store.ts +20 -6
  394. package/src/features/prepared-graphics.ts +12 -71
  395. package/src/features/render-graph-compute.ts +14 -5
  396. package/src/features/render-graph-contribution.ts +43 -63
  397. package/src/features/render-graph-raster.ts +11 -6
  398. package/src/features/render-graph-resources.ts +25 -23
  399. package/src/features/targets.ts +8 -21
  400. package/src/features/types.ts +39 -227
  401. package/src/features/vocabulary.ts +24 -0
  402. package/src/fullscreen-post-process-pass.ts +14 -57
  403. package/src/glyph-text-layout-system.ts +70 -96
  404. package/src/gpu-driven/batch-topology.ts +24 -202
  405. package/src/gpu-driven/production-raster.ts +93 -1108
  406. package/src/gpu-driven/view-gpu.ts +46 -192
  407. package/src/gpu-resource.ts +4 -4
  408. package/src/gpu-scene-schema.ts +11 -99
  409. package/src/gpu-scene.ts +231 -364
  410. package/src/hdrp-buffers.ts +12 -221
  411. package/src/ibl/IblPipelineCache.ts +471 -711
  412. package/src/ibl/skylight-bind-group.ts +4 -4
  413. package/src/index.ts +58 -217
  414. package/src/inspection-types.ts +76 -0
  415. package/src/instance-buffer-cache.ts +1 -29
  416. package/src/internal.ts +6 -85
  417. package/src/lifecycle.ts +64 -19
  418. package/src/materials.ts +7 -29
  419. package/src/mesh-material-bindings.ts +0 -1
  420. package/src/pbr-pipeline.ts +434 -53
  421. package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
  422. package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
  423. package/src/pipeline/standard-profile.ts +65 -0
  424. package/src/pipeline-builder.ts +60 -64
  425. package/src/pipeline-spec-types.ts +28 -0
  426. package/src/pipeline-spec.ts +72 -609
  427. package/src/plugin.ts +3 -75
  428. package/src/post-process-errors.ts +31 -33
  429. package/src/prepare/prepared-graphics-resolver.ts +5 -4
  430. package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
  431. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
  432. package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
  433. package/src/record/frame-lighting.ts +74 -195
  434. package/src/record/frame-snapshot.ts +45 -60
  435. package/src/record/frame-targets.ts +8 -243
  436. package/src/record/frame.ts +509 -796
  437. package/src/record/helpers.ts +6 -11
  438. package/src/record/main-pass-geometry.ts +106 -147
  439. package/src/record/main-pass-material.ts +517 -190
  440. package/src/record/main-pass-sprite-draws.ts +198 -117
  441. package/src/record/main-pass.ts +162 -143
  442. package/src/record/mesh-ssbo.ts +517 -38
  443. package/src/record/render-context.ts +364 -0
  444. package/src/record/shadow-pass.ts +138 -1838
  445. package/src/record/skybox-post-pass.ts +12 -14
  446. package/src/record/typed-frame-graph.ts +215 -254
  447. package/src/record/view-ubo.ts +6 -37
  448. package/src/render-contract.ts +571 -0
  449. package/src/render-data.ts +3 -3
  450. package/src/render-graph-primitives.ts +76 -851
  451. package/src/render-pipeline.ts +104 -188
  452. package/src/render-system-extract.ts +1048 -1729
  453. package/src/render-system.ts +330 -1957
  454. package/src/scene/render-scene-types.ts +64 -0
  455. package/src/scene/render-scene.ts +1032 -0
  456. package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
  457. package/src/ssao-buffers.ts +167 -8
  458. package/src/systems/skin-palette-allocator.ts +21 -64
  459. package/src/systems/skin-palette-types.ts +14 -0
  460. package/src/systems/transparent-sort-config.ts +25 -3
  461. package/src/tilemap-chunk-extract-system.ts +53 -70
  462. package/src/typed-render-graph-primitives.ts +35 -24
  463. package/src/typed-shadow-passes.ts +26 -56
  464. package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
  465. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
  466. package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
  467. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
  468. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
  469. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
  470. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  471. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  472. package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
  473. package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
  474. package/dist/__tests__/camera-temporal.test.d.ts +0 -2
  475. package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
  476. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
  477. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/environment-inspection.test.d.ts +0 -2
  479. package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
  480. package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
  481. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
  482. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
  483. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
  484. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
  485. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
  486. package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
  487. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
  488. package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
  489. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
  490. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
  491. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
  492. package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
  493. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
  494. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
  495. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
  496. package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
  497. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
  498. package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
  499. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
  500. package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
  501. package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
  503. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
  504. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
  505. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
  506. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
  507. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
  508. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
  509. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
  510. package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
  511. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
  512. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  513. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  514. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
  515. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
  517. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
  518. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
  519. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
  520. package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
  521. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
  522. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
  523. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
  524. package/dist/__tests__/plugin.test.d.ts +0 -2
  525. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  526. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
  527. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
  529. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
  531. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
  532. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
  533. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
  534. package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
  535. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
  536. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
  537. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
  538. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
  539. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
  540. package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
  541. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
  542. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
  543. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
  544. package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
  545. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
  547. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
  549. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
  551. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
  552. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
  553. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
  555. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
  556. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
  557. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
  558. package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
  559. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
  561. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
  562. package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
  563. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
  564. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
  565. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
  566. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
  567. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
  568. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
  569. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
  570. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
  571. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
  572. package/dist/chunk-33UF5SAO.mjs +0 -7397
  573. package/dist/chunk-33UF5SAO.mjs.map +0 -1
  574. package/dist/chunk-A5QCJSNL.mjs +0 -29913
  575. package/dist/chunk-A5QCJSNL.mjs.map +0 -1
  576. package/dist/chunk-JMSB7AR4.mjs +0 -3
  577. package/dist/chunk-JMSB7AR4.mjs.map +0 -1
  578. package/dist/chunk-LXNGO6AO.mjs +0 -569
  579. package/dist/chunk-LXNGO6AO.mjs.map +0 -1
  580. package/dist/chunk-QRXPSX4X.mjs +0 -659
  581. package/dist/chunk-QRXPSX4X.mjs.map +0 -1
  582. package/dist/chunk-YAKEQPWO.mjs +0 -1439
  583. package/dist/chunk-YAKEQPWO.mjs.map +0 -1
  584. package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
  585. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
  586. package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
  587. package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
  588. package/dist/components/__tests__/fog.test-d.d.ts +0 -2
  589. package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
  590. package/dist/components/__tests__/fog.test.d.ts +0 -2
  591. package/dist/components/__tests__/fog.test.d.ts.map +0 -1
  592. package/dist/components/atmosphere.d.ts +0 -18
  593. package/dist/components/atmosphere.d.ts.map +0 -1
  594. package/dist/components/environment.d.ts +0 -116
  595. package/dist/components/environment.d.ts.map +0 -1
  596. package/dist/deferred-lighting.d.ts +0 -13
  597. package/dist/deferred-lighting.d.ts.map +0 -1
  598. package/dist/dynamic-texture-store.d.ts +0 -42
  599. package/dist/dynamic-texture-store.d.ts.map +0 -1
  600. package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
  601. package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
  602. package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
  603. package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
  604. package/dist/environment/__tests__/generation.test.d.ts +0 -2
  605. package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
  606. package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
  607. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
  608. package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
  609. package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
  610. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
  611. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
  612. package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
  613. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
  614. package/dist/environment/__tests__/readiness.test.d.ts +0 -2
  615. package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
  616. package/dist/environment/__tests__/recovery.test.d.ts +0 -2
  617. package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
  618. package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
  619. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
  620. package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
  621. package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
  622. package/dist/environment/__tests__/signature.test.d.ts +0 -2
  623. package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
  624. package/dist/environment/descriptors.d.ts +0 -2
  625. package/dist/environment/descriptors.d.ts.map +0 -1
  626. package/dist/environment/extracted-environment.d.ts +0 -53
  627. package/dist/environment/extracted-environment.d.ts.map +0 -1
  628. package/dist/environment/generation.d.ts +0 -62
  629. package/dist/environment/generation.d.ts.map +0 -1
  630. package/dist/environment/gpu-bundle.d.ts +0 -23
  631. package/dist/environment/gpu-bundle.d.ts.map +0 -1
  632. package/dist/environment/graph.d.ts +0 -108
  633. package/dist/environment/graph.d.ts.map +0 -1
  634. package/dist/environment/inspection.d.ts +0 -48
  635. package/dist/environment/inspection.d.ts.map +0 -1
  636. package/dist/environment/lifecycle.d.ts +0 -22
  637. package/dist/environment/lifecycle.d.ts.map +0 -1
  638. package/dist/environment/readiness.d.ts +0 -29
  639. package/dist/environment/readiness.d.ts.map +0 -1
  640. package/dist/environment/signature.d.ts +0 -70
  641. package/dist/environment/signature.d.ts.map +0 -1
  642. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
  643. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
  644. package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
  645. package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
  646. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
  647. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  648. package/dist/extract/directional-csm.d.ts +0 -129
  649. package/dist/extract/directional-csm.d.ts.map +0 -1
  650. package/dist/extract/index.d.ts +0 -5
  651. package/dist/extract/index.d.ts.map +0 -1
  652. package/dist/extract/material-interface.d.ts +0 -56
  653. package/dist/extract/material-interface.d.ts.map +0 -1
  654. package/dist/extract/schema-readers.d.ts +0 -20
  655. package/dist/extract/schema-readers.d.ts.map +0 -1
  656. package/dist/features/graph-contribution.d.ts +0 -64
  657. package/dist/features/graph-contribution.d.ts.map +0 -1
  658. package/dist/features/index.d.ts +0 -21
  659. package/dist/features/index.d.ts.map +0 -1
  660. package/dist/features/morph/index.d.ts +0 -3
  661. package/dist/features/morph/index.d.ts.map +0 -1
  662. package/dist/features/morph/morph-bounds.d.ts +0 -42
  663. package/dist/features/morph/morph-bounds.d.ts.map +0 -1
  664. package/dist/features/scene-temporal.d.ts +0 -45
  665. package/dist/features/scene-temporal.d.ts.map +0 -1
  666. package/dist/features/taa-resolve.d.ts +0 -21
  667. package/dist/features/taa-resolve.d.ts.map +0 -1
  668. package/dist/frame-chain.d.ts +0 -14
  669. package/dist/frame-chain.d.ts.map +0 -1
  670. package/dist/gpu-driven/view-reference.d.ts.map +0 -1
  671. package/dist/gpu-resource-store.d.ts.map +0 -1
  672. package/dist/hdrp-cluster-membership.d.ts +0 -2
  673. package/dist/hdrp-cluster-membership.d.ts.map +0 -1
  674. package/dist/hdrp-pipeline.d.ts +0 -36
  675. package/dist/hdrp-pipeline.d.ts.map +0 -1
  676. package/dist/ibl/cubemap-projection.d.ts +0 -23
  677. package/dist/ibl/cubemap-projection.d.ts.map +0 -1
  678. package/dist/ibl/face-uniforms.d.ts +0 -65
  679. package/dist/ibl/face-uniforms.d.ts.map +0 -1
  680. package/dist/mesh-update-errors.d.ts +0 -71
  681. package/dist/mesh-update-errors.d.ts.map +0 -1
  682. package/dist/mipmap-generator.d.ts +0 -39
  683. package/dist/mipmap-generator.d.ts.map +0 -1
  684. package/dist/param-schema-projection-census.d.ts +0 -18
  685. package/dist/param-schema-projection-census.d.ts.map +0 -1
  686. package/dist/persistent-render-scene.d.ts +0 -158
  687. package/dist/persistent-render-scene.d.ts.map +0 -1
  688. package/dist/pipeline/index.d.ts +0 -11
  689. package/dist/pipeline/index.d.ts.map +0 -1
  690. package/dist/pipeline-errors.d.ts +0 -110
  691. package/dist/pipeline-errors.d.ts.map +0 -1
  692. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
  693. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  694. package/dist/prepare/index.d.ts +0 -4
  695. package/dist/prepare/index.d.ts.map +0 -1
  696. package/dist/prepare/schema-readers.d.ts +0 -11
  697. package/dist/prepare/schema-readers.d.ts.map +0 -1
  698. package/dist/record/__tests__/environment-record.test.d.ts +0 -2
  699. package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
  700. package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
  701. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
  702. package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
  703. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
  704. package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
  705. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
  706. package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
  707. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
  708. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
  709. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
  710. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
  711. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
  712. package/dist/record/frame-observation.d.ts +0 -38
  713. package/dist/record/frame-observation.d.ts.map +0 -1
  714. package/dist/record/index.d.ts +0 -15
  715. package/dist/record/index.d.ts.map +0 -1
  716. package/dist/record/main-pass-skin.d.ts +0 -46
  717. package/dist/record/main-pass-skin.d.ts.map +0 -1
  718. package/dist/record/main-pass-sprite.d.ts +0 -69
  719. package/dist/record/main-pass-sprite.d.ts.map +0 -1
  720. package/dist/record/material-payload.d.ts +0 -43
  721. package/dist/record/material-payload.d.ts.map +0 -1
  722. package/dist/record/material-slot-plan.d.ts +0 -26
  723. package/dist/record/material-slot-plan.d.ts.map +0 -1
  724. package/dist/record/membership-timing.d.ts +0 -232
  725. package/dist/record/membership-timing.d.ts.map +0 -1
  726. package/dist/record/shadow-caster-uniform.d.ts +0 -8
  727. package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
  728. package/dist/record/shadow-submit-mode.d.ts +0 -66
  729. package/dist/record/shadow-submit-mode.d.ts.map +0 -1
  730. package/dist/render-dispatch-membership.d.ts +0 -47
  731. package/dist/render-dispatch-membership.d.ts.map +0 -1
  732. package/dist/render-pipeline-context.d.ts +0 -289
  733. package/dist/render-pipeline-context.d.ts.map +0 -1
  734. package/dist/render-pipeline-target.d.ts +0 -16
  735. package/dist/render-pipeline-target.d.ts.map +0 -1
  736. package/dist/render-scene-projection.d.ts +0 -174
  737. package/dist/render-scene-projection.d.ts.map +0 -1
  738. package/dist/render-system-fold.d.ts +0 -266
  739. package/dist/render-system-fold.d.ts.map +0 -1
  740. package/dist/renderer/asset-service.d.ts +0 -10
  741. package/dist/renderer/asset-service.d.ts.map +0 -1
  742. package/dist/renderer/backend-selection.d.ts.map +0 -1
  743. package/dist/renderer/environment-classify.d.ts +0 -6
  744. package/dist/renderer/environment-classify.d.ts.map +0 -1
  745. package/dist/renderer/environment-error.d.ts +0 -13
  746. package/dist/renderer/environment-error.d.ts.map +0 -1
  747. package/dist/renderer/material/pipeline-projection.d.ts +0 -91
  748. package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
  749. package/dist/renderer/renderer-factory.d.ts +0 -283
  750. package/dist/renderer/renderer-factory.d.ts.map +0 -1
  751. package/dist/renderer.d.ts +0 -771
  752. package/dist/renderer.d.ts.map +0 -1
  753. package/dist/scene-utils/collect-subtree.d.ts +0 -11
  754. package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
  755. package/dist/ssao-data.d.ts +0 -34
  756. package/dist/ssao-data.d.ts.map +0 -1
  757. package/dist/surface-format.d.ts +0 -10
  758. package/dist/surface-format.d.ts.map +0 -1
  759. package/dist/taa-history-store.d.ts +0 -88
  760. package/dist/taa-history-store.d.ts.map +0 -1
  761. package/dist/temporal-coverage.d.ts +0 -35
  762. package/dist/temporal-coverage.d.ts.map +0 -1
  763. package/dist/temporal-frame-transaction.d.ts +0 -92
  764. package/dist/temporal-frame-transaction.d.ts.map +0 -1
  765. package/dist/temporal-inspection.d.ts +0 -57
  766. package/dist/temporal-inspection.d.ts.map +0 -1
  767. package/dist/temporal-view.d.ts +0 -43
  768. package/dist/temporal-view.d.ts.map +0 -1
  769. package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
  770. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
  771. package/dist/urp-pipeline.d.ts +0 -4
  772. package/dist/urp-pipeline.d.ts.map +0 -1
  773. package/src/__tests__/analytic-sky-contract.test.ts +0 -27
  774. package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
  775. package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
  776. package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
  777. package/src/__tests__/backend-selection.integration.test.ts +0 -11
  778. package/src/__tests__/camera-temporal.test-d.ts +0 -8
  779. package/src/__tests__/camera-temporal.test.ts +0 -188
  780. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
  781. package/src/__tests__/environment-inspection.test.ts +0 -45
  782. package/src/__tests__/fog-ai-user.fixture.ts +0 -350
  783. package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
  784. package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
  785. package/src/__tests__/fog-inspection.integration.test.ts +0 -127
  786. package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
  787. package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
  788. package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
  789. package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
  790. package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
  791. package/src/__tests__/fog-temporal.integration.test.ts +0 -115
  792. package/src/__tests__/frame-chain.unit.test.ts +0 -26
  793. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
  794. package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
  795. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
  796. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
  797. package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
  798. package/src/__tests__/materials.unit.test.ts +0 -25
  799. package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
  800. package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
  801. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
  802. package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
  803. package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
  804. package/src/__tests__/plugin.test.ts +0 -25
  805. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
  806. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
  807. package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
  808. package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
  809. package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
  810. package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
  811. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
  812. package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
  813. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
  814. package/src/__tests__/render-feature-order.unit.test.ts +0 -66
  815. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
  816. package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
  817. package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
  818. package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
  819. package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
  820. package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
  821. package/src/__tests__/taa-history-store.unit.test.ts +0 -196
  822. package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
  823. package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
  824. package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
  825. package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
  826. package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
  827. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
  828. package/src/components/__tests__/atmosphere-red.test.ts +0 -51
  829. package/src/components/__tests__/atmosphere.test.ts +0 -79
  830. package/src/components/__tests__/fog.test-d.ts +0 -49
  831. package/src/components/__tests__/fog.test.ts +0 -60
  832. package/src/components/atmosphere.ts +0 -64
  833. package/src/deferred-lighting.ts +0 -92
  834. package/src/dynamic-texture-store.ts +0 -111
  835. package/src/environment/README.md +0 -76
  836. package/src/environment/__tests__/failure-injection.test.ts +0 -50
  837. package/src/environment/__tests__/generation-red.test.ts +0 -64
  838. package/src/environment/__tests__/generation.test.ts +0 -37
  839. package/src/environment/__tests__/graph-transaction.test.ts +0 -85
  840. package/src/environment/__tests__/inspection-red.test.ts +0 -53
  841. package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
  842. package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
  843. package/src/environment/__tests__/readiness.test.ts +0 -42
  844. package/src/environment/__tests__/recovery.test.ts +0 -62
  845. package/src/environment/__tests__/resize-dispose.test.ts +0 -30
  846. package/src/environment/__tests__/signature-red.test.ts +0 -45
  847. package/src/environment/__tests__/signature.test.ts +0 -60
  848. package/src/environment/descriptors.ts +0 -7
  849. package/src/environment/extracted-environment.ts +0 -239
  850. package/src/environment/generation.ts +0 -158
  851. package/src/environment/gpu-bundle.ts +0 -144
  852. package/src/environment/graph.ts +0 -588
  853. package/src/environment/inspection.ts +0 -107
  854. package/src/environment/lifecycle.ts +0 -124
  855. package/src/environment/readiness.ts +0 -76
  856. package/src/environment/signature.ts +0 -185
  857. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
  858. package/src/extract/__tests__/environment-source.test.ts +0 -105
  859. package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
  860. package/src/extract/directional-csm.ts +0 -959
  861. package/src/extract/index.ts +0 -10
  862. package/src/extract/material-interface.ts +0 -604
  863. package/src/extract/schema-readers.ts +0 -27
  864. package/src/features/graph-contribution.ts +0 -577
  865. package/src/features/index.ts +0 -100
  866. package/src/features/morph/index.ts +0 -24
  867. package/src/features/morph/morph-bounds.ts +0 -123
  868. package/src/features/scene-temporal.ts +0 -274
  869. package/src/features/taa-resolve.ts +0 -244
  870. package/src/frame-chain.ts +0 -21
  871. package/src/hdrp-cluster-membership.ts +0 -70
  872. package/src/ibl/cubemap-projection.ts +0 -60
  873. package/src/ibl/face-uniforms.ts +0 -150
  874. package/src/mesh-update-errors.ts +0 -113
  875. package/src/mipmap-generator.ts +0 -244
  876. package/src/param-schema-projection-census.ts +0 -73
  877. package/src/persistent-render-scene.ts +0 -1752
  878. package/src/pipeline/index.ts +0 -40
  879. package/src/pipeline-errors.ts +0 -172
  880. package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
  881. package/src/prepare/index.ts +0 -8
  882. package/src/prepare/schema-readers.ts +0 -20
  883. package/src/record/__tests__/environment-record.test.ts +0 -35
  884. package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
  885. package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
  886. package/src/record/__tests__/render-submission.integration.test.ts +0 -76
  887. package/src/record/__tests__/render-submission.perf.test.ts +0 -141
  888. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
  889. package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
  890. package/src/record/frame-observation.ts +0 -122
  891. package/src/record/index.ts +0 -15
  892. package/src/record/main-pass-skin.ts +0 -51
  893. package/src/record/main-pass-sprite.ts +0 -166
  894. package/src/record/material-payload.ts +0 -292
  895. package/src/record/material-slot-plan.ts +0 -68
  896. package/src/record/membership-timing.ts +0 -1012
  897. package/src/record/shadow-caster-uniform.ts +0 -37
  898. package/src/record/shadow-submit-mode.ts +0 -277
  899. package/src/render-dispatch-membership.ts +0 -155
  900. package/src/render-pipeline-context.ts +0 -332
  901. package/src/render-pipeline-target.ts +0 -96
  902. package/src/render-scene-projection.ts +0 -1738
  903. package/src/render-system-fold.ts +0 -531
  904. package/src/renderer/asset-service.ts +0 -32
  905. package/src/renderer/backend-selection.ts +0 -121
  906. package/src/renderer/environment-classify.ts +0 -30
  907. package/src/renderer/environment-error.ts +0 -19
  908. package/src/renderer/material/pipeline-projection.ts +0 -140
  909. package/src/renderer.ts +0 -940
  910. package/src/scene-utils/collect-subtree.ts +0 -40
  911. package/src/ssao-data.ts +0 -106
  912. package/src/surface-format.ts +0 -37
  913. package/src/taa-history-store.ts +0 -429
  914. package/src/temporal-coverage.ts +0 -106
  915. package/src/temporal-frame-transaction.ts +0 -301
  916. package/src/temporal-inspection.ts +0 -194
  917. package/src/temporal-view.ts +0 -174
  918. package/src/tilemap/resolve-tileset-runtime.ts +0 -72
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/assets/asset-decoders.ts","../src/features/morph/morph-bounds.ts","../src/features/morph/morph-feature.ts","../src/scene-utils/collect-subtree.ts","../src/scene-instances/post-spawn-resolve-joints.ts","../src/plugin.ts"],"names":["err","ok"],"mappings":"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","file":"chunk-LXNGO6AO.mjs","sourcesContent":["import { validateCookedMaterialRecord } from '@forgeax/engine-pack';\nimport {\n type AssetDecoderContribution,\n type AssetKind,\n type AssetLoadError,\n err,\n MATERIAL_TEXTURE_SLOTS,\n type MaterialAsset,\n ok,\n type RenderPipelineAsset,\n type SamplerAsset,\n} from '@forgeax/engine-types';\n\nfunction invalid(guid: string, expected: string, reason: string) {\n return err({\n code: 'asset-package-invalid' as const,\n expected,\n hint: 'recook the render asset and publish its complete cooked payload',\n detail: { guid, reason },\n });\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction validMaterial(value: unknown): value is MaterialAsset {\n if (!record(value) || value.kind !== 'material') return false;\n if (value.cooked !== undefined && !validateCookedMaterialRecord(value.cooked).ok) {\n return false;\n }\n if (value.passes !== undefined && !Array.isArray(value.passes)) return false;\n if (value.parameters !== undefined && !Array.isArray(value.parameters)) return false;\n return value.values === undefined || record(value.values);\n}\n\nfunction resolveMaterialWireRef(\n value: unknown,\n refs: readonly string[],\n field: string,\n guid: string,\n): ReturnType<typeof ok<string | number>> | ReturnType<typeof err<AssetLoadError>> {\n if (typeof value !== 'number') return ok(value as string | number);\n if (!Number.isSafeInteger(value) || value < 0 || refs[value] === undefined) {\n return err<AssetLoadError>({\n code: 'asset-package-invalid',\n expected: `${field} to reference a GUID through the material Pack refs[] table`,\n hint: 'recook the material so every texture or sampler ref has a matching refs[] entry',\n detail: { guid, reason: `${field} refs[${value}] is out of bounds` },\n });\n }\n return ok(refs[value] as string);\n}\n\nfunction resolveMaterialWireRefs(\n value: MaterialAsset,\n refs: readonly string[],\n guid: string,\n): ReturnType<typeof ok<MaterialAsset>> | ReturnType<typeof err<AssetLoadError>> {\n if (refs.length === 0) return ok(value);\n\n let changed = false;\n let parent = value.parent;\n if (typeof parent === 'number') {\n const resolved = resolveMaterialWireRef(parent, refs, 'parent', guid);\n if (!resolved.ok) return resolved;\n parent = resolved.value as unknown as MaterialAsset['parent'];\n changed = true;\n }\n\n if (value.values === undefined) {\n return changed ? ok({ ...value, ...(parent === undefined ? {} : { parent }) }) : ok(value);\n }\n\n const textureFields = new Set(\n value.parameters === undefined\n ? MATERIAL_TEXTURE_SLOTS\n : value.parameters\n .filter((parameter) => parameter.type === 'texture')\n .map((parameter) => parameter.name),\n );\n const values = { ...value.values };\n for (const [field, raw] of Object.entries(values)) {\n if (typeof raw === 'number' && textureFields.has(field)) {\n const resolved = resolveMaterialWireRef(raw, refs, field, guid);\n if (!resolved.ok) return resolved;\n values[field] = resolved.value as NonNullable<MaterialAsset['values']>[string];\n changed = true;\n continue;\n }\n if (!record(raw)) continue;\n const rawRecord = raw as unknown as Record<string, unknown>;\n let rewritten: Record<string, unknown> | undefined;\n for (const key of ['texture', 'sampler'] as const) {\n if (!(key in rawRecord)) continue;\n const resolved = resolveMaterialWireRef(rawRecord[key], refs, `${field}.${key}`, guid);\n if (!resolved.ok) return resolved;\n if (resolved.value !== rawRecord[key]) {\n rewritten ??= { ...rawRecord };\n rewritten[key] = resolved.value;\n changed = true;\n }\n }\n if (rewritten !== undefined) {\n values[field] = rewritten as unknown as NonNullable<MaterialAsset['values']>[string];\n }\n }\n return ok(changed ? { ...value, ...(parent === undefined ? {} : { parent }), values } : value);\n}\n\nexport const materialContribution: AssetDecoderContribution<MaterialAsset, 'material'> = {\n kind: { kind: 'material' } as AssetKind<MaterialAsset, 'material'>,\n consumer: 'Render MaterialScene',\n decoder: {\n async decode({ envelope }) {\n if (!validMaterial(envelope.payload)) {\n return invalid(\n envelope.guid,\n 'a material payload with cooked passes, parameters, and values',\n 'material owner validation failed',\n );\n }\n return resolveMaterialWireRefs(envelope.payload, envelope.refs, envelope.guid);\n },\n },\n};\n\nexport const samplerContribution: AssetDecoderContribution<SamplerAsset, 'sampler'> = {\n kind: { kind: 'sampler' } as AssetKind<SamplerAsset, 'sampler'>,\n consumer: 'Render DeviceScope',\n decoder: {\n async decode({ envelope }) {\n return envelope.payload.kind === 'sampler'\n ? ok(envelope.payload)\n : invalid(envelope.guid, 'a sampler payload', 'sampler owner validation failed');\n },\n },\n};\n\nexport const renderPipelineContribution: AssetDecoderContribution<\n RenderPipelineAsset,\n 'render-pipeline'\n> = {\n kind: { kind: 'render-pipeline' } as AssetKind<RenderPipelineAsset, 'render-pipeline'>,\n consumer: 'Render Pipeline',\n decoder: {\n async decode({ envelope }) {\n const payload = envelope.payload;\n return payload.kind === 'render-pipeline' && payload.pipelineId.trim().length > 0\n ? ok(payload)\n : invalid(\n envelope.guid,\n 'a render-pipeline payload with a pipelineId',\n 'render-pipeline owner validation failed',\n );\n },\n },\n};\n","export const MORPH_MAX_TARGETS = 8;\n\nexport type MorphVec3 = readonly [number, number, number];\n\nexport interface MorphBounds {\n readonly min: MorphVec3;\n readonly max: MorphVec3;\n}\n\nexport interface MorphTargetBounds {\n readonly min: MorphVec3;\n readonly max: MorphVec3;\n}\n\nexport interface MorphCullInput {\n readonly weights?: ArrayLike<number>;\n readonly expectedWeightCount: number;\n readonly baseAabbIntersectsFrustum: boolean;\n}\n\nexport type MorphCullDecision = 'draw' | 'cull';\n\nfunction finiteVec3(value: MorphVec3): boolean {\n return value.every((component) => Number.isFinite(component));\n}\n\nfunction validWeights(weights: ArrayLike<number> | undefined, expected: number): boolean {\n if (weights === undefined || weights.length !== expected) return false;\n for (let index = 0; index < weights.length; index++) {\n if (!Number.isFinite(weights[index] ?? Number.NaN)) return false;\n }\n return true;\n}\n\n/** Compute a conservative AABB from base bounds and target delta bounds. */\nexport function deriveMorphBounds(\n base: MorphBounds,\n targets: readonly MorphTargetBounds[],\n weights: ArrayLike<number>,\n): MorphBounds {\n if (\n !finiteVec3(base.min) ||\n !finiteVec3(base.max) ||\n targets.length > MORPH_MAX_TARGETS ||\n !validWeights(weights, targets.length)\n ) {\n return base;\n }\n\n const min = [base.min[0], base.min[1], base.min[2]];\n const max = [base.max[0], base.max[1], base.max[2]];\n for (let targetIndex = 0; targetIndex < targets.length; targetIndex++) {\n const target = targets[targetIndex];\n const weight = weights[targetIndex] ?? 0;\n if (target === undefined || !finiteVec3(target.min) || !finiteVec3(target.max)) return base;\n for (let axis = 0; axis < 3; axis++) {\n const low = (weight >= 0 ? target.min[axis] : target.max[axis]) ?? 0;\n const high = (weight >= 0 ? target.max[axis] : target.min[axis]) ?? 0;\n min[axis] = (min[axis] ?? 0) + weight * low;\n max[axis] = (max[axis] ?? 0) + weight * high;\n }\n }\n return {\n min: [min[0] ?? 0, min[1] ?? 0, min[2] ?? 0],\n max: [max[0] ?? 0, max[1] ?? 0, max[2] ?? 0],\n };\n}\n\n/** Keep non-zero valid morphs drawable even when their base AABB is outside. */\nexport function morphCullDecision(input: MorphCullInput): MorphCullDecision {\n if (!Number.isInteger(input.expectedWeightCount) || input.expectedWeightCount < 0) return 'cull';\n if (!validWeights(input.weights, input.expectedWeightCount)) {\n return 'cull';\n }\n for (let index = 0; index < input.expectedWeightCount; index++) {\n if ((input.weights?.[index] ?? 0) !== 0) return 'draw';\n }\n return input.baseAabbIntersectsFrustum ? 'draw' : 'cull';\n}\n\nexport interface MorphReentryState {\n seen: boolean;\n visible: boolean;\n generation: number;\n weights: Float32Array | undefined;\n}\n\nexport interface MorphReentryInput {\n readonly frameNumber: number;\n readonly visible: boolean;\n readonly generation: number;\n readonly weights: ArrayLike<number>;\n}\n\nexport interface MorphReentryResult {\n readonly frameNumber: number;\n readonly reentered: boolean;\n readonly clearStale: boolean;\n readonly weights: readonly number[];\n}\n\nexport function createMorphReentryState(): MorphReentryState {\n return { seen: false, visible: false, generation: -1, weights: undefined };\n}\n\n/** Track visibility transitions so a re-entry always rewrites the current weights. */\nexport function stepMorphReentry(\n state: MorphReentryState,\n input: MorphReentryInput,\n): MorphReentryResult {\n const reentered =\n state.seen && input.visible && (!state.visible || state.generation !== input.generation);\n const clearStale = reentered && state.weights !== undefined;\n const weights = Array.from(\n { length: input.weights.length },\n (_, index) => input.weights[index] ?? 0,\n );\n state.seen = true;\n state.visible = input.visible;\n state.generation = input.generation;\n state.weights = new Float32Array(weights);\n return { frameNumber: input.frameNumber, reentered, clearStale, weights };\n}\n","import type { World } from '@forgeax/engine-ecs';\nimport { err, ok } from '@forgeax/engine-types';\nimport { RenderFeatureStageFailedError } from '../../errors/render';\nimport type { RenderFeatureGpuBufferRef } from '../prepared-gpu-work';\nimport type { RenderFeature } from '../types';\nimport {\n createMorphReentryState,\n deriveMorphBounds,\n MORPH_MAX_TARGETS,\n type MorphBounds,\n type MorphReentryState,\n type MorphTargetBounds,\n morphCullDecision,\n stepMorphReentry,\n} from './morph-bounds';\n\nconst COMPUTE_STAGE = 0x4;\nconst MORPH_WEIGHTS_BYTES = MORPH_MAX_TARGETS * Float32Array.BYTES_PER_ELEMENT;\nconst MORPH_WORKGROUP_SIZE = 64;\n\nexport const MORPH_COMPUTE_WGSL = `\nstruct MorphWeights { values: array<f32, 8> };\n@group(0) @binding(0) var<storage, read> source: array<vec4<f32>>;\n@group(0) @binding(1) var<storage, read_write> output: array<vec4<f32>>;\n@group(0) @binding(2) var<uniform> weights: MorphWeights;\n\n@compute @workgroup_size(${MORPH_WORKGROUP_SIZE})\nfn morph_main(@builtin(global_invocation_id) id: vec3<u32>) {\n let vertex = id.x;\n let vertex_count = arrayLength(&output);\n if (vertex >= vertex_count) { return; }\n var position = source[vertex];\n for (var target_index = 0u; target_index < 8u; target_index = target_index + 1u) {\n position = position + source[(target_index + 1u) * vertex_count + vertex] * weights.values[target_index];\n }\n output[vertex] = position;\n}\n`;\n\nexport interface MorphFeatureRenderable {\n readonly identity: string;\n readonly vertexCount: number;\n readonly baseBounds: MorphBounds;\n readonly targetBounds: readonly MorphTargetBounds[];\n readonly weights: ArrayLike<number>;\n readonly baseAabbIntersectsFrustum: boolean;\n readonly basePositions?: ArrayLike<number>;\n readonly targetDeltas?: ArrayLike<number>;\n}\n\nexport interface MorphFeatureCollectContext {\n readonly worlds: readonly World[];\n readonly frameNumber: number;\n}\n\nexport interface MorphFeatureOptions {\n readonly collect: (context: MorphFeatureCollectContext) => readonly MorphFeatureRenderable[];\n}\n\nexport interface MorphFeatureDraw {\n readonly identity: string;\n readonly vertexCount: number;\n readonly targetCount: number;\n readonly bounds: MorphBounds;\n readonly weights: Float32Array;\n readonly reentered: boolean;\n readonly clearStale: boolean;\n readonly source: Float32Array;\n}\n\nexport interface MorphFeatureFrame {\n readonly frameNumber: number;\n readonly draws: readonly MorphFeatureDraw[];\n readonly culledCount: number;\n readonly zeroWeightCount: number;\n readonly reentryCount: number;\n}\n\nexport interface MorphFeature extends RenderFeature<MorphFeatureFrame> {\n /** Resolve the current output buffer for an evidence readback or downstream draw. */\n preparedOutput(identity: string): RenderFeatureGpuBufferRef | undefined;\n}\n\ninterface MorphGpuState {\n readonly program: import('../prepared-gpu-work').RenderFeatureGpuProgramRef;\n readonly source: import('../prepared-gpu-work').RenderFeatureGpuBufferRef;\n readonly output: import('../prepared-gpu-work').RenderFeatureGpuBufferRef;\n readonly weights: import('../prepared-gpu-work').RenderFeatureGpuBufferRef;\n readonly bindings: import('../prepared-gpu-work').RenderFeatureGpuBindingsRef;\n}\n\nfunction stageFailure(stage: 'prepare' | 'contribute'): RenderFeatureStageFailedError {\n return new RenderFeatureStageFailedError('forgeax.morph', -1, stage, 'next-frame');\n}\n\nfunction copyWeights(input: ArrayLike<number>): Float32Array {\n const weights = new Float32Array(MORPH_MAX_TARGETS);\n for (let index = 0; index < Math.min(input.length, MORPH_MAX_TARGETS); index++) {\n weights[index] = input[index] ?? 0;\n }\n return weights;\n}\n\nfunction copySource(renderable: MorphFeatureRenderable, targetCount: number): Float32Array {\n const source = new Float32Array((MORPH_MAX_TARGETS + 1) * renderable.vertexCount * 4);\n const basePositions = renderable.basePositions;\n const targetDeltas = renderable.targetDeltas;\n for (let vertex = 0; vertex < renderable.vertexCount; vertex++) {\n const base = vertex * 4;\n source[base] = basePositions?.[vertex * 3] ?? 0;\n source[base + 1] = basePositions?.[vertex * 3 + 1] ?? 0;\n source[base + 2] = basePositions?.[vertex * 3 + 2] ?? 0;\n source[base + 3] = 1;\n for (let target = 0; target < targetCount; target++) {\n const sourceBase = (target + 1) * renderable.vertexCount * 4 + vertex * 4;\n const deltaBase = (target * renderable.vertexCount + vertex) * 3;\n source[sourceBase] = targetDeltas?.[deltaBase] ?? 0;\n source[sourceBase + 1] = targetDeltas?.[deltaBase + 1] ?? 0;\n source[sourceBase + 2] = targetDeltas?.[deltaBase + 2] ?? 0;\n source[sourceBase + 3] = 0;\n }\n }\n return source;\n}\n\nfunction validRenderable(renderable: MorphFeatureRenderable): boolean {\n return (\n renderable.identity.length > 0 &&\n Number.isInteger(renderable.vertexCount) &&\n renderable.vertexCount > 0 &&\n renderable.targetBounds.length > 0 &&\n renderable.targetBounds.length <= MORPH_MAX_TARGETS &&\n renderable.weights.length === renderable.targetBounds.length\n );\n}\n\nexport function createMorphFeature(options: MorphFeatureOptions): MorphFeature {\n const reentry = new Map<string, MorphReentryState>();\n const prepared = new Map<string, MorphGpuState>();\n\n const feature: MorphFeature = {\n identity: 'forgeax.morph',\n requiredCapabilities: ['compute', 'storageBuffer'],\n extract: ({ worlds, frameNumber }) => {\n const renderables = options.collect({ worlds, frameNumber });\n const draws: MorphFeatureDraw[] = [];\n let culledCount = 0;\n let zeroWeightCount = 0;\n let reentryCount = 0;\n for (const renderable of renderables) {\n if (!validRenderable(renderable)) return err(stageFailure('prepare'));\n const weights = copyWeights(renderable.weights);\n const decision = morphCullDecision({\n weights: renderable.weights,\n expectedWeightCount: renderable.targetBounds.length,\n baseAabbIntersectsFrustum: renderable.baseAabbIntersectsFrustum,\n });\n const state = reentry.get(renderable.identity) ?? createMorphReentryState();\n reentry.set(renderable.identity, state);\n const transition = stepMorphReentry(state, {\n frameNumber,\n visible: decision === 'draw',\n generation: 0,\n weights,\n });\n if (decision === 'cull') {\n culledCount += 1;\n if (weights.every((weight) => weight === 0)) zeroWeightCount += 1;\n continue;\n }\n if (transition.reentered) reentryCount += 1;\n draws.push({\n identity: renderable.identity,\n vertexCount: renderable.vertexCount,\n targetCount: renderable.targetBounds.length,\n bounds: deriveMorphBounds(\n renderable.baseBounds,\n renderable.targetBounds,\n renderable.weights,\n ),\n weights,\n reentered: transition.reentered,\n clearStale: transition.clearStale,\n source: copySource(renderable, renderable.targetBounds.length),\n });\n }\n prepared.clear();\n return ok({\n frameNumber,\n draws,\n culledCount,\n zeroWeightCount,\n reentryCount,\n });\n },\n prepare: (data, context) => {\n if (data.draws.length === 0) return ok(undefined);\n const gpu = context.gpu;\n if (gpu === undefined) return err(stageFailure('prepare'));\n const program = gpu.prepareProgram('morph.compute', {\n wgsl: MORPH_COMPUTE_WGSL,\n entryPoints: ['morph_main'],\n bindings: [\n {\n label: 'forgeax.morph.bindings',\n entries: [\n { binding: 0, visibility: COMPUTE_STAGE, buffer: { type: 'read-only-storage' } },\n { binding: 1, visibility: COMPUTE_STAGE, buffer: { type: 'storage' } },\n { binding: 2, visibility: COMPUTE_STAGE, buffer: { type: 'uniform' } },\n ],\n },\n ],\n });\n if (!program.ok) return err(program.error);\n for (const draw of data.draws) {\n const prefix = `morph.${draw.identity}`;\n const source = gpu.prepareBuffer(`${prefix}.source`, {\n size: draw.source.byteLength,\n usage: ['storage'],\n data: draw.source,\n });\n if (!source.ok) return err(source.error);\n const output = gpu.prepareBuffer(`${prefix}.output`, {\n size: draw.vertexCount * 16,\n usage: ['storage', 'vertex', 'copy-src'],\n });\n if (!output.ok) return err(output.error);\n const weights = gpu.prepareBuffer(`${prefix}.weights`, {\n size: MORPH_WEIGHTS_BYTES,\n usage: ['uniform'],\n data: draw.weights,\n });\n if (!weights.ok) return err(weights.error);\n const bindings = gpu.prepareBindings(`${prefix}.bindings`, {\n program: program.value,\n entries: [\n { binding: 0, buffer: source.value },\n { binding: 1, buffer: output.value },\n { binding: 2, buffer: weights.value },\n ],\n });\n if (!bindings.ok) return err(bindings.error);\n prepared.set(draw.identity, {\n program: program.value,\n source: source.value,\n output: output.value,\n weights: weights.value,\n bindings: bindings.value,\n });\n }\n return ok(undefined);\n },\n contribute: (data, context) => {\n if (data.draws.length === 0) return ok(undefined);\n const gpu = context.gpu;\n if (gpu === undefined) return err(stageFailure('contribute'));\n for (const draw of data.draws) {\n const state = prepared.get(draw.identity);\n if (state === undefined) return err(stageFailure('contribute'));\n const added = context.staging.addComputePass(`morph.${draw.identity}`, {\n program: state.program,\n bindings: state.bindings,\n dispatches: [\n {\n entryPoint: 'morph_main',\n workgroups: [Math.max(1, Math.ceil(draw.vertexCount / MORPH_WORKGROUP_SIZE))],\n bindings: state.bindings,\n },\n ],\n });\n if (!added.ok) return added;\n }\n return ok(undefined);\n },\n recover: () => {\n prepared.clear();\n return ok(undefined);\n },\n preparedOutput: (identity) => prepared.get(identity)?.output,\n dispose: () => {\n prepared.clear();\n reentry.clear();\n return ok(undefined);\n },\n };\n return feature;\n}\n","// M1 shared util — collectSubtree (AC-16).\n// Extracted from post-spawn-resolve-joints.ts:116-133.\n// Walks Children.entities BFS from spawnRoot; accepts optional external visited Set\n// for cross-root de-duplication (AC-03).\n\nimport type { EntityHandle, World } from '@forgeax/engine-ecs';\n\nimport { Children } from '@forgeax/engine-scene';\n\n/**\n * Walk `Children.entities` BFS from `spawnRoot` to collect all descendant\n * entities (incl. spawnRoot itself). When a shared `visited` Set is passed,\n * it is reused across roots for cross-root de-duplication; when omitted a\n * fresh Set is created (single-root / backward-compat).\n *\n * Entities without a `Children` component surface as leaves.\n */\nexport function collectSubtree(\n world: World,\n spawnRoot: EntityHandle,\n visited?: Set<number>,\n): Set<number> {\n if (visited === undefined) visited = new Set<number>();\n if (visited.has(spawnRoot as number)) return visited;\n const queue: number[] = [spawnRoot as number];\n visited.add(spawnRoot as number);\n while (queue.length > 0) {\n const cur = queue.shift() as number;\n const childrenData = world.get(cur as EntityHandle, Children);\n if (!childrenData.ok) continue;\n const list = childrenData.value.entities as ArrayLike<number>;\n for (let i = 0; i < list.length; i++) {\n const child = list[i] as number;\n if (visited.has(child)) continue;\n visited.add(child);\n queue.push(child);\n }\n }\n return visited;\n}\n","// @forgeax/engine-runtime — postSpawnResolveJoints hook (M1 / T-14).\n//\n// Invoked after sceneInstances.instantiate to auto-wire Skin.joints: Entity[]\n// from the SkinAsset.jointPaths via Name-component lookup on the\n// spawned entity subtree. This is the v1 missing item #2: instantiate auto-calls\n// postSpawnResolveJoints so AI users never manually populate Skin.joints.\n//\n// Resolution protocol (plan-strategy D-6a + tweak-20260611 D-7 subtree-scope):\n// - From the spawnRoot, walk ChildOf relations BFS to collect the spawned\n// subtree's entities. nameIndex is built only over those entities.\n// - For each Skin-bearing entity in the subtree, resolve the skeleton handle\n// to jointPaths via the resolver.\n// - For each jointPath leaf name, match against the subtree-local Name index.\n// - Same-name sibling within the subtree: first-match with console.warn (D-6a).\n// - Missing entity: fail-fast 'skin-joint-path-unresolved' error.\n// - Empty jointPaths: no-op (no crash).\n//\n// Why subtree-scope (tweak-20260611 D-7):\n// Without scope, multiple instantiate() calls on the same SceneAsset (e.g. 3\n// Fox foxes side-by-side) all wire to the FIRST instance's joint entities\n// because Name leaf strings collide globally — Skin.joints[] points to\n// instance-0's bones for every spawn, three foxes share one skeleton, poses\n// cannot differ. Scoping to ChildOf descendants of spawnRoot eliminates the\n// collision: each spawn has its own copy of the subtree, names collide only\n// among siblings within the same spawn, where D-6a's first-match-with-warn\n// remains the correct policy.\n//\n// Decision anchors:\n// - requirements AC-14 (post-spawn auto-wire)\n// - plan-strategy D-6a (first-match strategy within subtree)\n// - tweak-20260611 plan-strategy D-7 (subtree-scope)\n// - charter P3 (explicit failure: path-unresolved fail-fast)\n\nimport type { EntityHandle, World } from '@forgeax/engine-ecs';\nimport { Name } from '@forgeax/engine-scene';\nimport { Skin } from '@forgeax/engine-skinning';\nimport type { SkinAsset } from '@forgeax/engine-types';\nimport { collectSubtree } from '../scene-utils/collect-subtree';\n\n// feat-20260705-runtime-tier2-decomposition M1 / w6 (D-1): SkinJointResolver\n// relocated to registry/instantiate.ts so the hook contract travels with the\n// instantiate cluster into @forgeax/engine-assets-runtime. Imported back here as\n// a forward (runtime -> assets-runtime-bound module) type-only reference and\n// re-exported for existing consumers of this module's SkinJointResolver export.\nexport interface SkinJointResolver {\n resolveSkinAsset(skeletonHandle: number): SkinAsset | undefined;\n}\n\ninterface JointPathUnresolvedError {\n code: 'skin-joint-path-unresolved';\n expected: string;\n hint: string;\n detail: {\n skinEntity: number;\n path: readonly string[];\n failedAtIndex: number;\n };\n}\n\ninterface SkinAssetUnresolvedError {\n code: 'skin-asset-unresolved';\n expected: string;\n hint: string;\n detail: {\n skinEntity: number;\n skeletonHandle: number;\n };\n}\n\ntype ResolveError = JointPathUnresolvedError | SkinAssetUnresolvedError;\n\nexport function postSpawnResolveJoints(\n world: World,\n resolver: SkinJointResolver,\n spawnRoot: EntityHandle,\n): { ok: true } | { ok: false; error: ResolveError } {\n // tweak-20260611 D-7: scope nameIndex to the spawnRoot's ChildOf-descendant\n // subtree (incl. spawnRoot itself). Multiple instantiate() calls on the same\n // SceneAsset each get an independent subtree, so leaf-name collisions across\n // instances no longer wire all spawns to the first instance's joints.\n const subtree = collectSubtree(world, spawnRoot);\n const nameIndex = new Map<string, number[]>();\n const nameQuery = world.query({ read: [Name] });\n if (nameQuery.ok) {\n for (const row of nameQuery.value) {\n if (!subtree.has(row.entity as number)) continue;\n const nameVal = row.get(Name).value;\n const list = nameIndex.get(nameVal) ?? [];\n list.push(row.entity);\n nameIndex.set(nameVal, list);\n }\n }\n\n // Walk Skin-bearing entities IN THE SUBTREE and resolve joints. Skin is\n // matched through the owner identity projection, and entities outside the subtree\n // are filtered after readEntityAt (cheaper than per-archetype filtering).\n const skinQuery = world.query({ read: [Skin] });\n if (!skinQuery.ok) return { ok: true };\n for (const queryRow of skinQuery.value) {\n const entity = queryRow.entity;\n if (!subtree.has(entity as number)) continue;\n const skeletonHandle = queryRow.get(Skin).skeleton as number;\n\n const skinAsset = resolver.resolveSkinAsset(skeletonHandle);\n if (skinAsset === undefined) {\n // feat-20260612 M2 fixup: was a silent `continue` that left\n // `Skin.joints` empty -- the M2-introduced\n // JointCountMismatchError fail-fast in render-system-extract then\n // triggered every frame on the browser-async-pack-fetch path.\n // The cure is to load SkinAssets through the SceneAsset.skinGuids\n // cross-edge (gltfImporter scene branch emits the SkinAsset GUIDs into\n // the scene envelope's refs[], the runtime recursion source) so this\n // resolver should always succeed; if it does not, fail-fast here\n // with a precise errorCode rather than silently producing an\n // unresolvable Skin.joints state.\n return {\n ok: false,\n error: {\n code: 'skin-asset-unresolved',\n expected: `SkinAsset registered for skeleton handle ${skeletonHandle} when instantiate triggers postSpawnResolveJoints`,\n hint: `SkinAsset matching skeletonGuid for handle ${skeletonHandle} was not found in AssetRegistry; verify the SceneAsset.skinGuids[] cross-edge is populated by the importer (gltfImporter scene branch) and that AssetRegistry.load(sceneGuid, sceneAssetKind) recursively loaded each SkinAsset before instantiate (browser-async-pack-fetch path)`,\n detail: { skinEntity: entity, skeletonHandle },\n },\n };\n }\n\n const jointEntityList: number[] = [];\n for (const jointPath of skinAsset.jointPaths) {\n const pathSegments = jointPath.split('/').filter(Boolean);\n if (pathSegments.length === 0) continue;\n\n const leafName = pathSegments[pathSegments.length - 1];\n if (leafName === undefined) continue;\n\n const nameMatches = nameIndex.get(leafName);\n if (nameMatches === undefined || nameMatches.length === 0) {\n return {\n ok: false,\n error: {\n code: 'skin-joint-path-unresolved',\n expected: `joint entity with Name=\"${leafName}\" exists in the spawned subtree (root entity ${spawnRoot})`,\n hint: `joint path \"${jointPath}\" for skin entity ${entity} could not be resolved within spawnRoot ${spawnRoot}'s ChildOf-subtree; verify glTF node names are preserved and instantiateScene seeded a Children mirror`,\n detail: {\n skinEntity: entity,\n path: pathSegments,\n failedAtIndex: pathSegments.length - 1,\n },\n },\n };\n }\n\n if (nameMatches.length > 1) {\n console.warn(\n `[Skin] same-name sibling: \"${leafName}\" matches ${nameMatches.length} entities ` +\n `within spawn subtree of root ${spawnRoot}; using first-match (entity ${nameMatches[0]}) per D-6a`,\n );\n }\n\n jointEntityList.push(nameMatches[0] as number);\n }\n\n world.set(entity, Skin, {\n joints: new Uint32Array(jointEntityList),\n } as never);\n }\n\n return { ok: true };\n}\n","import type { Component, World } from '@forgeax/engine-ecs';\nimport type { Plugin } from '@forgeax/engine-plugin';\nimport {\n SCENE_ASSET_SKIN_RESOLVER_RESOURCE_KEY,\n type SceneAssetSkinResolver,\n worldSetSceneInstantiateHook,\n} from '@forgeax/engine-scene';\n\nimport { Camera } from './components/camera';\nimport { DirectionalLight } from './components/directional-light';\nimport { SkyboxBackground, Skylight } from './components/environment';\nimport { GlyphText } from './components/glyph-text';\nimport { Instances } from './components/instances';\nimport { Layer } from './components/layer';\nimport { MeshFilter } from './components/mesh-filter';\nimport { MeshRenderer } from './components/mesh-renderer';\nimport { PointLight } from './components/point-light';\nimport { PointLightShadow } from './components/point-light-shadow';\nimport { PostProcessParams } from './components/post-process-params';\nimport { SceneInstance } from './components/scene-instance';\nimport { SortKey } from './components/sort-key';\nimport { SpotLight } from './components/spot-light';\nimport { SpriteAnimation } from './components/sprite-animation';\nimport { SpriteInstances } from './components/sprite-instances';\nimport { SpriteRegionOverride } from './components/sprite-region-override';\nimport { TileLayer } from './components/tile-layer';\nimport { Tilemap } from './components/tilemap';\nimport { Visibility } from './components/visibility';\nimport type { RenderFeature } from './features';\nimport type { Renderer } from './renderer';\nimport { postSpawnResolveJoints } from './scene-instances/post-spawn-resolve-joints';\n\nconst RENDER_COMPONENTS: readonly Component[] = [\n Camera,\n DirectionalLight,\n GlyphText,\n Instances,\n Layer,\n MeshFilter,\n MeshRenderer,\n PointLight,\n PointLightShadow,\n PostProcessParams,\n SceneInstance,\n SkyboxBackground,\n Skylight,\n SortKey,\n SpotLight,\n SpriteAnimation,\n SpriteInstances,\n SpriteRegionOverride,\n TileLayer,\n Tilemap,\n Visibility,\n];\n\nfunction registerRenderComponents(world: World): () => void {\n const leases = RENDER_COMPONENTS.map((component) =>\n world.components.register(component).unwrap(),\n );\n return () => {\n for (let index = leases.length - 1; index >= 0; index -= 1) leases[index]?.dispose();\n };\n}\n\nfunction installSceneInstantiateHook(world: World): () => void {\n worldSetSceneInstantiateHook(world, (currentWorld, root) => {\n if (!currentWorld.hasResource(SCENE_ASSET_SKIN_RESOLVER_RESOURCE_KEY)) {\n return { ok: true };\n }\n const resolver = currentWorld.getResource<SceneAssetSkinResolver>(\n SCENE_ASSET_SKIN_RESOLVER_RESOURCE_KEY,\n );\n return postSpawnResolveJoints(currentWorld, resolver, root);\n });\n return () => worldSetSceneInstantiateHook(world, null);\n}\n\ndeclare module '@forgeax/engine-plugin' {\n interface EngineContextServices {\n renderer?: Renderer;\n }\n}\n\n/** Install the built-in render and authoring component vocabulary in one World. */\nexport function renderComponentsPlugin(): Plugin {\n return {\n name: 'render-components',\n inject: ['world'],\n apply(ctx) {\n ctx.effect(() => registerRenderComponents(ctx.world), 'render/components');\n ctx.effect(() => installSceneInstantiateHook(ctx.world), 'render/scene-instantiate-hook');\n },\n };\n}\n\n/** Provide the renderer without transferring its host-owned lifetime. */\nexport function rendererPlugin(renderer: Renderer): Plugin {\n return {\n name: 'renderer',\n provide: 'renderer',\n apply(ctx) {\n ctx.provide('renderer', renderer);\n },\n };\n}\n\n/** Provide an App/Worker-owned Renderer and release it after dependent Fibers. */\nexport function ownedRendererPlugin(renderer: Renderer): Plugin {\n return {\n name: 'renderer',\n provide: 'renderer',\n apply(ctx) {\n ctx.provide('renderer', renderer);\n ctx.effect(() => () => renderer.dispose(), 'render/renderer');\n },\n };\n}\n\n/** Install a producer at Renderer safe points and remove it with the owning Fiber. */\nexport function renderFeaturePlugin(feature: RenderFeature<unknown>): Plugin {\n return {\n name: `render-feature:${feature.identity}`,\n inject: ['renderer'],\n async apply(ctx) {\n const renderer = ctx.renderer;\n if (renderer === undefined)\n throw new Error('render feature plugin requires the renderer service');\n const installed = await renderer.installRenderFeature(feature);\n if (!installed.ok) throw installed.error;\n return async () => {\n const removed = await renderer.uninstallRenderFeature(feature);\n if (!removed.ok) throw removed.error;\n };\n },\n };\n}\n"]}