@forgeax/engine-render 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (918) hide show
  1. package/README.md +130 -641
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
  4. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
  6. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
  8. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
  10. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
  11. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
  12. package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
  13. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
  14. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
  15. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
  16. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
  17. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
  18. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
  20. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
  21. package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
  22. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
  23. package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
  24. package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
  26. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
  27. package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
  28. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
  29. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
  30. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
  31. package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
  32. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
  33. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
  34. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
  36. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
  37. package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
  38. package/dist/assembly/backend-contract.d.ts.map +1 -0
  39. package/dist/assembly/factory.d.ts +207 -0
  40. package/dist/assembly/factory.d.ts.map +1 -0
  41. package/dist/assembly/host-contract.d.ts +84 -0
  42. package/dist/assembly/host-contract.d.ts.map +1 -0
  43. package/dist/{renderer → assembly}/material/assembly.d.ts +0 -1
  44. package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
  45. package/dist/assembly/material/pipeline-projection.d.ts +30 -0
  46. package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
  47. package/dist/authoring.d.ts +10 -11
  48. package/dist/authoring.d.ts.map +1 -1
  49. package/dist/authoring.mjs +25 -3
  50. package/dist/authoring.mjs.map +1 -1
  51. package/dist/chunk-CQXZC5XI.mjs +182 -0
  52. package/dist/chunk-CQXZC5XI.mjs.map +1 -0
  53. package/dist/chunk-QC4VW3XJ.mjs +79 -0
  54. package/dist/chunk-QC4VW3XJ.mjs.map +1 -0
  55. package/dist/chunk-SCRSAK5B.mjs +480 -0
  56. package/dist/chunk-SCRSAK5B.mjs.map +1 -0
  57. package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
  58. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
  59. package/dist/components/glyph-text.d.ts +1 -1
  60. package/dist/components/glyph-text.d.ts.map +1 -1
  61. package/dist/components/index.d.ts +2 -2
  62. package/dist/components/index.d.ts.map +1 -1
  63. package/dist/components/instances.d.ts +1 -1
  64. package/dist/components/instances.d.ts.map +1 -1
  65. package/dist/components/light-helpers.d.ts +1 -1
  66. package/dist/components/light-helpers.d.ts.map +1 -1
  67. package/dist/components/mesh-filter.d.ts +7 -7
  68. package/dist/components/mesh-filter.d.ts.map +1 -1
  69. package/dist/components/scene-instance.d.ts +11 -11
  70. package/dist/components/skybox-background.d.ts +56 -0
  71. package/dist/components/skybox-background.d.ts.map +1 -0
  72. package/dist/components/skylight.d.ts +55 -0
  73. package/dist/components/skylight.d.ts.map +1 -0
  74. package/dist/components/sprite-animation.d.ts +2 -3
  75. package/dist/components/sprite-animation.d.ts.map +1 -1
  76. package/dist/components/sprite-instances.d.ts +1 -1
  77. package/dist/components/sprite-playback-mode.d.ts +6 -1
  78. package/dist/components/sprite-playback-mode.d.ts.map +1 -1
  79. package/dist/components/sprite-region-override.d.ts +2 -3
  80. package/dist/components/sprite-region-override.d.ts.map +1 -1
  81. package/dist/components/tile-layer.d.ts +5 -0
  82. package/dist/components/tile-layer.d.ts.map +1 -1
  83. package/dist/construct-renderer.d.ts +18 -1
  84. package/dist/construct-renderer.d.ts.map +1 -1
  85. package/dist/construct-renderer.mjs +27008 -4
  86. package/dist/construct-renderer.mjs.map +1 -1
  87. package/dist/debug-draw-glue.d.ts +2 -53
  88. package/dist/debug-draw-glue.d.ts.map +1 -1
  89. package/dist/device/device-scope.d.ts +83 -0
  90. package/dist/device/device-scope.d.ts.map +1 -0
  91. package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
  92. package/dist/device/gpu-residency.d.ts.map +1 -0
  93. package/dist/device/resource-types.d.ts +8 -0
  94. package/dist/device/resource-types.d.ts.map +1 -0
  95. package/dist/engine-metrics.d.ts +2 -2
  96. package/dist/engine-metrics.d.ts.map +1 -1
  97. package/dist/errors/recover.d.ts +28 -1
  98. package/dist/errors/recover.d.ts.map +1 -1
  99. package/dist/errors/render.d.ts +249 -258
  100. package/dist/errors/render.d.ts.map +1 -1
  101. package/dist/features/fullscreen.d.ts +19 -0
  102. package/dist/features/fullscreen.d.ts.map +1 -0
  103. package/dist/features/host.d.ts +32 -26
  104. package/dist/features/host.d.ts.map +1 -1
  105. package/dist/features/morph/morph-feature.d.ts +39 -5
  106. package/dist/features/morph/morph-feature.d.ts.map +1 -1
  107. package/dist/features/plan.d.ts +182 -0
  108. package/dist/features/plan.d.ts.map +1 -0
  109. package/dist/features/prepared-gpu-work.d.ts +21 -17
  110. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  111. package/dist/features/prepared-graphics-store.d.ts +2 -1
  112. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  113. package/dist/features/prepared-graphics.d.ts +11 -21
  114. package/dist/features/prepared-graphics.d.ts.map +1 -1
  115. package/dist/features/render-graph-compute.d.ts +2 -2
  116. package/dist/features/render-graph-compute.d.ts.map +1 -1
  117. package/dist/features/render-graph-contribution.d.ts +4 -7
  118. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  119. package/dist/features/render-graph-raster.d.ts +2 -2
  120. package/dist/features/render-graph-raster.d.ts.map +1 -1
  121. package/dist/features/render-graph-resources.d.ts +6 -6
  122. package/dist/features/render-graph-resources.d.ts.map +1 -1
  123. package/dist/features/targets.d.ts +5 -5
  124. package/dist/features/targets.d.ts.map +1 -1
  125. package/dist/features/types.d.ts +11 -190
  126. package/dist/features/types.d.ts.map +1 -1
  127. package/dist/features/vocabulary.d.ts +14 -0
  128. package/dist/features/vocabulary.d.ts.map +1 -0
  129. package/dist/fullscreen-post-process-pass.d.ts +4 -25
  130. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  131. package/dist/glyph-text-layout-system.d.ts +3 -2
  132. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  133. package/dist/gpu-driven/batch-topology.d.ts +6 -75
  134. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  135. package/dist/gpu-driven/production-raster.d.ts +13 -112
  136. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  137. package/dist/gpu-driven/view-gpu.d.ts +10 -66
  138. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  139. package/dist/gpu-resource.d.ts +3 -3
  140. package/dist/gpu-scene-schema.d.ts +1 -94
  141. package/dist/gpu-scene-schema.d.ts.map +1 -1
  142. package/dist/gpu-scene.d.ts +7 -33
  143. package/dist/gpu-scene.d.ts.map +1 -1
  144. package/dist/hdrp-buffers.d.ts +3 -53
  145. package/dist/hdrp-buffers.d.ts.map +1 -1
  146. package/dist/ibl/IblPipelineCache.d.ts +74 -180
  147. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  148. package/dist/ibl/skylight-bind-group.d.ts +1 -1
  149. package/dist/index.d.ts +13 -43
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.mjs +165 -3
  152. package/dist/index.mjs.map +1 -1
  153. package/dist/inspection-types.d.ts +69 -0
  154. package/dist/inspection-types.d.ts.map +1 -0
  155. package/dist/instance-buffer-cache.d.ts +1 -4
  156. package/dist/instance-buffer-cache.d.ts.map +1 -1
  157. package/dist/internal.d.ts +1 -73
  158. package/dist/internal.d.ts.map +1 -1
  159. package/dist/internal.mjs +1 -43
  160. package/dist/internal.mjs.map +1 -1
  161. package/dist/lifecycle.d.ts +36 -2
  162. package/dist/lifecycle.d.ts.map +1 -1
  163. package/dist/materials.d.ts +0 -3
  164. package/dist/materials.d.ts.map +1 -1
  165. package/dist/mesh-material-bindings.d.ts +0 -1
  166. package/dist/mesh-material-bindings.d.ts.map +1 -1
  167. package/dist/pbr-pipeline.d.ts +75 -29
  168. package/dist/pbr-pipeline.d.ts.map +1 -1
  169. package/dist/pipeline/standard-forward-lane.d.ts +5 -0
  170. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
  171. package/dist/pipeline/standard-pipeline.d.ts +31 -0
  172. package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
  173. package/dist/pipeline/standard-profile.d.ts +40 -0
  174. package/dist/pipeline/standard-profile.d.ts.map +1 -0
  175. package/dist/pipeline-builder.d.ts +3 -3
  176. package/dist/pipeline-builder.d.ts.map +1 -1
  177. package/dist/pipeline-spec-types.d.ts +24 -0
  178. package/dist/pipeline-spec-types.d.ts.map +1 -0
  179. package/dist/pipeline-spec.d.ts +16 -155
  180. package/dist/pipeline-spec.d.ts.map +1 -1
  181. package/dist/plugin.d.ts +1 -14
  182. package/dist/plugin.d.ts.map +1 -1
  183. package/dist/post-process-errors.d.ts +18 -18
  184. package/dist/post-process-errors.d.ts.map +1 -1
  185. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
  186. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  187. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
  188. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
  189. package/dist/record/frame-lighting.d.ts +7 -73
  190. package/dist/record/frame-lighting.d.ts.map +1 -1
  191. package/dist/record/frame-snapshot.d.ts +44 -44
  192. package/dist/record/frame-snapshot.d.ts.map +1 -1
  193. package/dist/record/frame-targets.d.ts +5 -38
  194. package/dist/record/frame-targets.d.ts.map +1 -1
  195. package/dist/record/frame.d.ts +64 -52
  196. package/dist/record/frame.d.ts.map +1 -1
  197. package/dist/record/helpers.d.ts +3 -2
  198. package/dist/record/helpers.d.ts.map +1 -1
  199. package/dist/record/main-pass-geometry.d.ts +5 -4
  200. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  201. package/dist/record/main-pass-material.d.ts +90 -59
  202. package/dist/record/main-pass-material.d.ts.map +1 -1
  203. package/dist/record/main-pass-sprite-draws.d.ts +28 -3
  204. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  205. package/dist/record/main-pass.d.ts +1 -1
  206. package/dist/record/main-pass.d.ts.map +1 -1
  207. package/dist/record/mesh-ssbo.d.ts +276 -3
  208. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  209. package/dist/record/render-context.d.ts +235 -0
  210. package/dist/record/render-context.d.ts.map +1 -0
  211. package/dist/record/shadow-pass.d.ts +15 -88
  212. package/dist/record/shadow-pass.d.ts.map +1 -1
  213. package/dist/record/skybox-post-pass.d.ts +1 -1
  214. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  215. package/dist/record/typed-frame-graph.d.ts +29 -7
  216. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  217. package/dist/record/view-ubo.d.ts +3 -3
  218. package/dist/record/view-ubo.d.ts.map +1 -1
  219. package/dist/render-contract.d.ts +416 -0
  220. package/dist/render-contract.d.ts.map +1 -0
  221. package/dist/render-data.d.ts.map +1 -1
  222. package/dist/render-graph-primitives.d.ts +14 -362
  223. package/dist/render-graph-primitives.d.ts.map +1 -1
  224. package/dist/render-pipeline.d.ts +25 -64
  225. package/dist/render-pipeline.d.ts.map +1 -1
  226. package/dist/render-system-extract.d.ts +107 -338
  227. package/dist/render-system-extract.d.ts.map +1 -1
  228. package/dist/render-system.d.ts +21 -713
  229. package/dist/render-system.d.ts.map +1 -1
  230. package/dist/scene/render-scene-types.d.ts +58 -0
  231. package/dist/scene/render-scene-types.d.ts.map +1 -0
  232. package/dist/scene/render-scene.d.ts +105 -0
  233. package/dist/scene/render-scene.d.ts.map +1 -0
  234. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
  235. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
  236. package/dist/ssao-buffers.d.ts +22 -3
  237. package/dist/ssao-buffers.d.ts.map +1 -1
  238. package/dist/systems/skin-palette-allocator.d.ts +2 -4
  239. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  240. package/dist/systems/skin-palette-types.d.ts +14 -0
  241. package/dist/systems/skin-palette-types.d.ts.map +1 -0
  242. package/dist/systems/transparent-sort-config.d.ts +23 -2
  243. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  244. package/dist/tilemap-chunk-extract-system.d.ts +4 -3
  245. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
  246. package/dist/typed-render-graph-primitives.d.ts +2 -4
  247. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  248. package/dist/typed-shadow-passes.d.ts +3 -3
  249. package/dist/typed-shadow-passes.d.ts.map +1 -1
  250. package/package.json +23 -23
  251. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
  252. package/src/__tests__/callback-inference.test-d.ts +6 -3
  253. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
  254. package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
  255. package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
  256. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
  257. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
  258. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
  259. package/src/__tests__/factory-contract.integration.test.ts +158 -209
  260. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
  261. package/src/__tests__/frame-observation.contract.test.ts +17 -8
  262. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
  263. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
  264. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +9 -16
  265. package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
  266. package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
  267. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
  268. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
  269. package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
  270. package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
  271. package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
  272. package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
  273. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
  274. package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
  275. package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
  276. package/src/__tests__/gpu-scene.unit.test.ts +10 -24
  277. package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
  278. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
  279. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
  280. package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
  281. package/src/__tests__/material-cooked-projection.unit.test.ts +2 -51
  282. package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
  283. package/src/__tests__/material-static-dynamic-route.unit.test.ts +4 -23
  284. package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
  285. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
  286. package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
  287. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
  288. package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
  289. package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
  290. package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
  291. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
  292. package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
  293. package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
  294. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
  295. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
  296. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
  297. package/src/__tests__/profiler-default-off.test.ts +1 -1
  298. package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
  299. package/src/__tests__/profiler-phase-integration.test.ts +5 -13
  300. package/src/__tests__/profiler-phase-token.test.ts +3 -8
  301. package/src/__tests__/public-surface.test-d.ts +65 -3
  302. package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
  303. package/src/__tests__/render-error-code-owner.test-d.ts +18 -23
  304. package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
  305. package/src/__tests__/render-error-exhaustive.test-d.ts +8 -1
  306. package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
  307. package/src/__tests__/render-feature-context.test-d.ts +16 -40
  308. package/src/__tests__/render-feature-contract.test-d.ts +9 -18
  309. package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
  310. package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
  311. package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
  312. package/src/__tests__/render-feature-plan.test-d.ts +161 -0
  313. package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
  314. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
  315. package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
  316. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
  317. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
  318. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
  319. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
  320. package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
  321. package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
  322. package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
  323. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
  324. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
  325. package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
  326. package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
  327. package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
  328. package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
  329. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +44 -95
  330. package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
  331. package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
  332. package/src/__tests__/ssao-config.unit.test.ts +36 -0
  333. package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
  334. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
  335. package/src/__tests__/standard-descriptors.test-d.ts +22 -0
  336. package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
  337. package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
  338. package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
  339. package/src/__tests__/surface-configuration.unit.test.ts +1 -2
  340. package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
  341. package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
  342. package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
  343. package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
  344. package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
  345. package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
  346. package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
  347. package/src/__tests__/visibility-extract.integration.test.ts +20 -11
  348. package/src/__tests__/visibility-extract.perf.test.ts +66 -32
  349. package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
  350. package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
  351. package/src/__tests__/visibility-instances.integration.test.ts +7 -11
  352. package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
  353. package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
  354. package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
  355. package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
  356. package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
  357. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
  358. package/src/__tests__/vocabulary.unit.test.ts +1 -1
  359. package/src/assembly/backend-contract.ts +57 -0
  360. package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1663 -2690
  361. package/src/assembly/host-contract.ts +101 -0
  362. package/src/{renderer → assembly}/material/assembly.ts +0 -2
  363. package/src/assembly/material/pipeline-projection.ts +63 -0
  364. package/src/authoring.ts +14 -22
  365. package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
  366. package/src/components/glyph-text.ts +3 -2
  367. package/src/components/index.ts +7 -9
  368. package/src/components/instances.ts +4 -5
  369. package/src/components/light-helpers.ts +1 -1
  370. package/src/components/mesh-filter.ts +11 -10
  371. package/src/components/post-process-params.ts +3 -3
  372. package/src/components/scene-instance.ts +12 -12
  373. package/src/components/skybox-background.ts +103 -0
  374. package/src/components/{environment.ts → skylight.ts} +2 -110
  375. package/src/components/sprite-animation.ts +3 -4
  376. package/src/components/sprite-instances.ts +2 -2
  377. package/src/components/sprite-playback-mode.ts +7 -1
  378. package/src/components/sprite-region-override.ts +2 -3
  379. package/src/components/tile-layer.ts +8 -2
  380. package/src/construct-renderer.ts +67 -4
  381. package/src/debug-draw-glue.ts +8 -129
  382. package/src/device/device-scope.ts +306 -0
  383. package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
  384. package/src/device/resource-types.ts +20 -0
  385. package/src/engine-metrics.ts +12 -19
  386. package/src/errors/recover.ts +45 -3
  387. package/src/errors/render.ts +357 -460
  388. package/src/features/fullscreen.ts +46 -0
  389. package/src/features/host.ts +575 -309
  390. package/src/features/morph/morph-feature.ts +195 -105
  391. package/src/features/plan.ts +447 -0
  392. package/src/features/prepared-gpu-work.ts +72 -15
  393. package/src/features/prepared-graphics-store.ts +20 -6
  394. package/src/features/prepared-graphics.ts +12 -71
  395. package/src/features/render-graph-compute.ts +14 -5
  396. package/src/features/render-graph-contribution.ts +43 -63
  397. package/src/features/render-graph-raster.ts +11 -6
  398. package/src/features/render-graph-resources.ts +25 -23
  399. package/src/features/targets.ts +8 -21
  400. package/src/features/types.ts +39 -227
  401. package/src/features/vocabulary.ts +24 -0
  402. package/src/fullscreen-post-process-pass.ts +14 -57
  403. package/src/glyph-text-layout-system.ts +70 -96
  404. package/src/gpu-driven/batch-topology.ts +24 -202
  405. package/src/gpu-driven/production-raster.ts +93 -1108
  406. package/src/gpu-driven/view-gpu.ts +46 -192
  407. package/src/gpu-resource.ts +4 -4
  408. package/src/gpu-scene-schema.ts +11 -99
  409. package/src/gpu-scene.ts +231 -364
  410. package/src/hdrp-buffers.ts +12 -221
  411. package/src/ibl/IblPipelineCache.ts +471 -711
  412. package/src/ibl/skylight-bind-group.ts +4 -4
  413. package/src/index.ts +58 -217
  414. package/src/inspection-types.ts +76 -0
  415. package/src/instance-buffer-cache.ts +1 -29
  416. package/src/internal.ts +6 -85
  417. package/src/lifecycle.ts +64 -19
  418. package/src/materials.ts +7 -29
  419. package/src/mesh-material-bindings.ts +0 -1
  420. package/src/pbr-pipeline.ts +434 -53
  421. package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
  422. package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
  423. package/src/pipeline/standard-profile.ts +65 -0
  424. package/src/pipeline-builder.ts +60 -64
  425. package/src/pipeline-spec-types.ts +28 -0
  426. package/src/pipeline-spec.ts +72 -609
  427. package/src/plugin.ts +3 -75
  428. package/src/post-process-errors.ts +31 -33
  429. package/src/prepare/prepared-graphics-resolver.ts +5 -4
  430. package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
  431. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
  432. package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
  433. package/src/record/frame-lighting.ts +74 -195
  434. package/src/record/frame-snapshot.ts +45 -60
  435. package/src/record/frame-targets.ts +8 -243
  436. package/src/record/frame.ts +509 -796
  437. package/src/record/helpers.ts +6 -11
  438. package/src/record/main-pass-geometry.ts +106 -147
  439. package/src/record/main-pass-material.ts +517 -190
  440. package/src/record/main-pass-sprite-draws.ts +198 -117
  441. package/src/record/main-pass.ts +162 -143
  442. package/src/record/mesh-ssbo.ts +517 -38
  443. package/src/record/render-context.ts +364 -0
  444. package/src/record/shadow-pass.ts +138 -1838
  445. package/src/record/skybox-post-pass.ts +12 -14
  446. package/src/record/typed-frame-graph.ts +215 -254
  447. package/src/record/view-ubo.ts +6 -37
  448. package/src/render-contract.ts +571 -0
  449. package/src/render-data.ts +3 -3
  450. package/src/render-graph-primitives.ts +76 -851
  451. package/src/render-pipeline.ts +104 -188
  452. package/src/render-system-extract.ts +1048 -1729
  453. package/src/render-system.ts +330 -1957
  454. package/src/scene/render-scene-types.ts +64 -0
  455. package/src/scene/render-scene.ts +1032 -0
  456. package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
  457. package/src/ssao-buffers.ts +167 -8
  458. package/src/systems/skin-palette-allocator.ts +21 -64
  459. package/src/systems/skin-palette-types.ts +14 -0
  460. package/src/systems/transparent-sort-config.ts +25 -3
  461. package/src/tilemap-chunk-extract-system.ts +53 -70
  462. package/src/typed-render-graph-primitives.ts +35 -24
  463. package/src/typed-shadow-passes.ts +26 -56
  464. package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
  465. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
  466. package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
  467. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
  468. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
  469. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
  470. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  471. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  472. package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
  473. package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
  474. package/dist/__tests__/camera-temporal.test.d.ts +0 -2
  475. package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
  476. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
  477. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/environment-inspection.test.d.ts +0 -2
  479. package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
  480. package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
  481. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
  482. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
  483. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
  484. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
  485. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
  486. package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
  487. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
  488. package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
  489. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
  490. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
  491. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
  492. package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
  493. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
  494. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
  495. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
  496. package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
  497. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
  498. package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
  499. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
  500. package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
  501. package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
  503. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
  504. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
  505. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
  506. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
  507. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
  508. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
  509. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
  510. package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
  511. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
  512. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  513. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  514. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
  515. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
  517. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
  518. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
  519. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
  520. package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
  521. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
  522. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
  523. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
  524. package/dist/__tests__/plugin.test.d.ts +0 -2
  525. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  526. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
  527. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
  529. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
  531. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
  532. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
  533. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
  534. package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
  535. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
  536. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
  537. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
  538. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
  539. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
  540. package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
  541. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
  542. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
  543. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
  544. package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
  545. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
  547. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
  549. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
  551. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
  552. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
  553. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
  555. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
  556. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
  557. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
  558. package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
  559. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
  561. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
  562. package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
  563. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
  564. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
  565. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
  566. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
  567. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
  568. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
  569. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
  570. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
  571. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
  572. package/dist/chunk-DJIMFYX6.mjs +0 -1439
  573. package/dist/chunk-DJIMFYX6.mjs.map +0 -1
  574. package/dist/chunk-F2SIOCRM.mjs +0 -7423
  575. package/dist/chunk-F2SIOCRM.mjs.map +0 -1
  576. package/dist/chunk-JMSB7AR4.mjs +0 -3
  577. package/dist/chunk-JMSB7AR4.mjs.map +0 -1
  578. package/dist/chunk-KHI6K4C6.mjs +0 -659
  579. package/dist/chunk-KHI6K4C6.mjs.map +0 -1
  580. package/dist/chunk-PORZOL2V.mjs +0 -569
  581. package/dist/chunk-PORZOL2V.mjs.map +0 -1
  582. package/dist/chunk-UOJGMDGP.mjs +0 -29913
  583. package/dist/chunk-UOJGMDGP.mjs.map +0 -1
  584. package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
  585. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
  586. package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
  587. package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
  588. package/dist/components/__tests__/fog.test-d.d.ts +0 -2
  589. package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
  590. package/dist/components/__tests__/fog.test.d.ts +0 -2
  591. package/dist/components/__tests__/fog.test.d.ts.map +0 -1
  592. package/dist/components/atmosphere.d.ts +0 -18
  593. package/dist/components/atmosphere.d.ts.map +0 -1
  594. package/dist/components/environment.d.ts +0 -115
  595. package/dist/components/environment.d.ts.map +0 -1
  596. package/dist/deferred-lighting.d.ts +0 -13
  597. package/dist/deferred-lighting.d.ts.map +0 -1
  598. package/dist/dynamic-texture-store.d.ts +0 -42
  599. package/dist/dynamic-texture-store.d.ts.map +0 -1
  600. package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
  601. package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
  602. package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
  603. package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
  604. package/dist/environment/__tests__/generation.test.d.ts +0 -2
  605. package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
  606. package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
  607. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
  608. package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
  609. package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
  610. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
  611. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
  612. package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
  613. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
  614. package/dist/environment/__tests__/readiness.test.d.ts +0 -2
  615. package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
  616. package/dist/environment/__tests__/recovery.test.d.ts +0 -2
  617. package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
  618. package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
  619. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
  620. package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
  621. package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
  622. package/dist/environment/__tests__/signature.test.d.ts +0 -2
  623. package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
  624. package/dist/environment/descriptors.d.ts +0 -2
  625. package/dist/environment/descriptors.d.ts.map +0 -1
  626. package/dist/environment/extracted-environment.d.ts +0 -53
  627. package/dist/environment/extracted-environment.d.ts.map +0 -1
  628. package/dist/environment/generation.d.ts +0 -62
  629. package/dist/environment/generation.d.ts.map +0 -1
  630. package/dist/environment/gpu-bundle.d.ts +0 -23
  631. package/dist/environment/gpu-bundle.d.ts.map +0 -1
  632. package/dist/environment/graph.d.ts +0 -108
  633. package/dist/environment/graph.d.ts.map +0 -1
  634. package/dist/environment/inspection.d.ts +0 -48
  635. package/dist/environment/inspection.d.ts.map +0 -1
  636. package/dist/environment/lifecycle.d.ts +0 -22
  637. package/dist/environment/lifecycle.d.ts.map +0 -1
  638. package/dist/environment/readiness.d.ts +0 -29
  639. package/dist/environment/readiness.d.ts.map +0 -1
  640. package/dist/environment/signature.d.ts +0 -70
  641. package/dist/environment/signature.d.ts.map +0 -1
  642. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
  643. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
  644. package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
  645. package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
  646. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
  647. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  648. package/dist/extract/directional-csm.d.ts +0 -129
  649. package/dist/extract/directional-csm.d.ts.map +0 -1
  650. package/dist/extract/index.d.ts +0 -5
  651. package/dist/extract/index.d.ts.map +0 -1
  652. package/dist/extract/material-interface.d.ts +0 -56
  653. package/dist/extract/material-interface.d.ts.map +0 -1
  654. package/dist/extract/schema-readers.d.ts +0 -20
  655. package/dist/extract/schema-readers.d.ts.map +0 -1
  656. package/dist/features/graph-contribution.d.ts +0 -64
  657. package/dist/features/graph-contribution.d.ts.map +0 -1
  658. package/dist/features/index.d.ts +0 -21
  659. package/dist/features/index.d.ts.map +0 -1
  660. package/dist/features/morph/index.d.ts +0 -3
  661. package/dist/features/morph/index.d.ts.map +0 -1
  662. package/dist/features/morph/morph-bounds.d.ts +0 -42
  663. package/dist/features/morph/morph-bounds.d.ts.map +0 -1
  664. package/dist/features/scene-temporal.d.ts +0 -45
  665. package/dist/features/scene-temporal.d.ts.map +0 -1
  666. package/dist/features/taa-resolve.d.ts +0 -21
  667. package/dist/features/taa-resolve.d.ts.map +0 -1
  668. package/dist/frame-chain.d.ts +0 -14
  669. package/dist/frame-chain.d.ts.map +0 -1
  670. package/dist/gpu-driven/view-reference.d.ts.map +0 -1
  671. package/dist/gpu-resource-store.d.ts.map +0 -1
  672. package/dist/hdrp-cluster-membership.d.ts +0 -2
  673. package/dist/hdrp-cluster-membership.d.ts.map +0 -1
  674. package/dist/hdrp-pipeline.d.ts +0 -36
  675. package/dist/hdrp-pipeline.d.ts.map +0 -1
  676. package/dist/ibl/cubemap-projection.d.ts +0 -23
  677. package/dist/ibl/cubemap-projection.d.ts.map +0 -1
  678. package/dist/ibl/face-uniforms.d.ts +0 -65
  679. package/dist/ibl/face-uniforms.d.ts.map +0 -1
  680. package/dist/mesh-update-errors.d.ts +0 -71
  681. package/dist/mesh-update-errors.d.ts.map +0 -1
  682. package/dist/mipmap-generator.d.ts +0 -39
  683. package/dist/mipmap-generator.d.ts.map +0 -1
  684. package/dist/param-schema-projection-census.d.ts +0 -18
  685. package/dist/param-schema-projection-census.d.ts.map +0 -1
  686. package/dist/persistent-render-scene.d.ts +0 -158
  687. package/dist/persistent-render-scene.d.ts.map +0 -1
  688. package/dist/pipeline/index.d.ts +0 -11
  689. package/dist/pipeline/index.d.ts.map +0 -1
  690. package/dist/pipeline-errors.d.ts +0 -110
  691. package/dist/pipeline-errors.d.ts.map +0 -1
  692. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
  693. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  694. package/dist/prepare/index.d.ts +0 -4
  695. package/dist/prepare/index.d.ts.map +0 -1
  696. package/dist/prepare/schema-readers.d.ts +0 -11
  697. package/dist/prepare/schema-readers.d.ts.map +0 -1
  698. package/dist/record/__tests__/environment-record.test.d.ts +0 -2
  699. package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
  700. package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
  701. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
  702. package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
  703. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
  704. package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
  705. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
  706. package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
  707. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
  708. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
  709. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
  710. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
  711. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
  712. package/dist/record/frame-observation.d.ts +0 -38
  713. package/dist/record/frame-observation.d.ts.map +0 -1
  714. package/dist/record/index.d.ts +0 -15
  715. package/dist/record/index.d.ts.map +0 -1
  716. package/dist/record/main-pass-skin.d.ts +0 -46
  717. package/dist/record/main-pass-skin.d.ts.map +0 -1
  718. package/dist/record/main-pass-sprite.d.ts +0 -69
  719. package/dist/record/main-pass-sprite.d.ts.map +0 -1
  720. package/dist/record/material-payload.d.ts +0 -43
  721. package/dist/record/material-payload.d.ts.map +0 -1
  722. package/dist/record/material-slot-plan.d.ts +0 -26
  723. package/dist/record/material-slot-plan.d.ts.map +0 -1
  724. package/dist/record/membership-timing.d.ts +0 -232
  725. package/dist/record/membership-timing.d.ts.map +0 -1
  726. package/dist/record/shadow-caster-uniform.d.ts +0 -8
  727. package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
  728. package/dist/record/shadow-submit-mode.d.ts +0 -66
  729. package/dist/record/shadow-submit-mode.d.ts.map +0 -1
  730. package/dist/render-dispatch-membership.d.ts +0 -47
  731. package/dist/render-dispatch-membership.d.ts.map +0 -1
  732. package/dist/render-pipeline-context.d.ts +0 -289
  733. package/dist/render-pipeline-context.d.ts.map +0 -1
  734. package/dist/render-pipeline-target.d.ts +0 -16
  735. package/dist/render-pipeline-target.d.ts.map +0 -1
  736. package/dist/render-scene-projection.d.ts +0 -174
  737. package/dist/render-scene-projection.d.ts.map +0 -1
  738. package/dist/render-system-fold.d.ts +0 -266
  739. package/dist/render-system-fold.d.ts.map +0 -1
  740. package/dist/renderer/asset-service.d.ts +0 -10
  741. package/dist/renderer/asset-service.d.ts.map +0 -1
  742. package/dist/renderer/backend-selection.d.ts.map +0 -1
  743. package/dist/renderer/environment-classify.d.ts +0 -6
  744. package/dist/renderer/environment-classify.d.ts.map +0 -1
  745. package/dist/renderer/environment-error.d.ts +0 -13
  746. package/dist/renderer/environment-error.d.ts.map +0 -1
  747. package/dist/renderer/material/pipeline-projection.d.ts +0 -91
  748. package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
  749. package/dist/renderer/renderer-factory.d.ts +0 -289
  750. package/dist/renderer/renderer-factory.d.ts.map +0 -1
  751. package/dist/renderer.d.ts +0 -771
  752. package/dist/renderer.d.ts.map +0 -1
  753. package/dist/scene-utils/collect-subtree.d.ts +0 -11
  754. package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
  755. package/dist/ssao-data.d.ts +0 -34
  756. package/dist/ssao-data.d.ts.map +0 -1
  757. package/dist/surface-format.d.ts +0 -10
  758. package/dist/surface-format.d.ts.map +0 -1
  759. package/dist/taa-history-store.d.ts +0 -88
  760. package/dist/taa-history-store.d.ts.map +0 -1
  761. package/dist/temporal-coverage.d.ts +0 -35
  762. package/dist/temporal-coverage.d.ts.map +0 -1
  763. package/dist/temporal-frame-transaction.d.ts +0 -92
  764. package/dist/temporal-frame-transaction.d.ts.map +0 -1
  765. package/dist/temporal-inspection.d.ts +0 -57
  766. package/dist/temporal-inspection.d.ts.map +0 -1
  767. package/dist/temporal-view.d.ts +0 -43
  768. package/dist/temporal-view.d.ts.map +0 -1
  769. package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
  770. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
  771. package/dist/urp-pipeline.d.ts +0 -4
  772. package/dist/urp-pipeline.d.ts.map +0 -1
  773. package/src/__tests__/analytic-sky-contract.test.ts +0 -27
  774. package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
  775. package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
  776. package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
  777. package/src/__tests__/backend-selection.integration.test.ts +0 -11
  778. package/src/__tests__/camera-temporal.test-d.ts +0 -8
  779. package/src/__tests__/camera-temporal.test.ts +0 -188
  780. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
  781. package/src/__tests__/environment-inspection.test.ts +0 -45
  782. package/src/__tests__/fog-ai-user.fixture.ts +0 -350
  783. package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
  784. package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
  785. package/src/__tests__/fog-inspection.integration.test.ts +0 -127
  786. package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
  787. package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
  788. package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
  789. package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
  790. package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
  791. package/src/__tests__/fog-temporal.integration.test.ts +0 -115
  792. package/src/__tests__/frame-chain.unit.test.ts +0 -26
  793. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
  794. package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
  795. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
  796. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
  797. package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
  798. package/src/__tests__/materials.unit.test.ts +0 -25
  799. package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
  800. package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
  801. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
  802. package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
  803. package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
  804. package/src/__tests__/plugin.test.ts +0 -25
  805. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
  806. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
  807. package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
  808. package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
  809. package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
  810. package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
  811. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
  812. package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
  813. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
  814. package/src/__tests__/render-feature-order.unit.test.ts +0 -66
  815. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
  816. package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
  817. package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
  818. package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
  819. package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
  820. package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
  821. package/src/__tests__/taa-history-store.unit.test.ts +0 -196
  822. package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
  823. package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
  824. package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
  825. package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
  826. package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
  827. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
  828. package/src/components/__tests__/atmosphere-red.test.ts +0 -51
  829. package/src/components/__tests__/atmosphere.test.ts +0 -79
  830. package/src/components/__tests__/fog.test-d.ts +0 -49
  831. package/src/components/__tests__/fog.test.ts +0 -60
  832. package/src/components/atmosphere.ts +0 -64
  833. package/src/deferred-lighting.ts +0 -92
  834. package/src/dynamic-texture-store.ts +0 -111
  835. package/src/environment/README.md +0 -76
  836. package/src/environment/__tests__/failure-injection.test.ts +0 -50
  837. package/src/environment/__tests__/generation-red.test.ts +0 -64
  838. package/src/environment/__tests__/generation.test.ts +0 -37
  839. package/src/environment/__tests__/graph-transaction.test.ts +0 -85
  840. package/src/environment/__tests__/inspection-red.test.ts +0 -53
  841. package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
  842. package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
  843. package/src/environment/__tests__/readiness.test.ts +0 -42
  844. package/src/environment/__tests__/recovery.test.ts +0 -62
  845. package/src/environment/__tests__/resize-dispose.test.ts +0 -30
  846. package/src/environment/__tests__/signature-red.test.ts +0 -45
  847. package/src/environment/__tests__/signature.test.ts +0 -60
  848. package/src/environment/descriptors.ts +0 -7
  849. package/src/environment/extracted-environment.ts +0 -239
  850. package/src/environment/generation.ts +0 -158
  851. package/src/environment/gpu-bundle.ts +0 -144
  852. package/src/environment/graph.ts +0 -588
  853. package/src/environment/inspection.ts +0 -107
  854. package/src/environment/lifecycle.ts +0 -124
  855. package/src/environment/readiness.ts +0 -76
  856. package/src/environment/signature.ts +0 -185
  857. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
  858. package/src/extract/__tests__/environment-source.test.ts +0 -105
  859. package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
  860. package/src/extract/directional-csm.ts +0 -959
  861. package/src/extract/index.ts +0 -10
  862. package/src/extract/material-interface.ts +0 -604
  863. package/src/extract/schema-readers.ts +0 -27
  864. package/src/features/graph-contribution.ts +0 -577
  865. package/src/features/index.ts +0 -100
  866. package/src/features/morph/index.ts +0 -24
  867. package/src/features/morph/morph-bounds.ts +0 -123
  868. package/src/features/scene-temporal.ts +0 -274
  869. package/src/features/taa-resolve.ts +0 -244
  870. package/src/frame-chain.ts +0 -21
  871. package/src/hdrp-cluster-membership.ts +0 -70
  872. package/src/ibl/cubemap-projection.ts +0 -60
  873. package/src/ibl/face-uniforms.ts +0 -150
  874. package/src/mesh-update-errors.ts +0 -113
  875. package/src/mipmap-generator.ts +0 -244
  876. package/src/param-schema-projection-census.ts +0 -73
  877. package/src/persistent-render-scene.ts +0 -1752
  878. package/src/pipeline/index.ts +0 -40
  879. package/src/pipeline-errors.ts +0 -172
  880. package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
  881. package/src/prepare/index.ts +0 -8
  882. package/src/prepare/schema-readers.ts +0 -20
  883. package/src/record/__tests__/environment-record.test.ts +0 -35
  884. package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
  885. package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
  886. package/src/record/__tests__/render-submission.integration.test.ts +0 -76
  887. package/src/record/__tests__/render-submission.perf.test.ts +0 -141
  888. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
  889. package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
  890. package/src/record/frame-observation.ts +0 -122
  891. package/src/record/index.ts +0 -15
  892. package/src/record/main-pass-skin.ts +0 -51
  893. package/src/record/main-pass-sprite.ts +0 -166
  894. package/src/record/material-payload.ts +0 -292
  895. package/src/record/material-slot-plan.ts +0 -68
  896. package/src/record/membership-timing.ts +0 -1012
  897. package/src/record/shadow-caster-uniform.ts +0 -37
  898. package/src/record/shadow-submit-mode.ts +0 -277
  899. package/src/render-dispatch-membership.ts +0 -155
  900. package/src/render-pipeline-context.ts +0 -332
  901. package/src/render-pipeline-target.ts +0 -96
  902. package/src/render-scene-projection.ts +0 -1738
  903. package/src/render-system-fold.ts +0 -531
  904. package/src/renderer/asset-service.ts +0 -32
  905. package/src/renderer/backend-selection.ts +0 -121
  906. package/src/renderer/environment-classify.ts +0 -30
  907. package/src/renderer/environment-error.ts +0 -19
  908. package/src/renderer/material/pipeline-projection.ts +0 -140
  909. package/src/renderer.ts +0 -940
  910. package/src/scene-utils/collect-subtree.ts +0 -40
  911. package/src/ssao-data.ts +0 -106
  912. package/src/surface-format.ts +0 -37
  913. package/src/taa-history-store.ts +0 -429
  914. package/src/temporal-coverage.ts +0 -106
  915. package/src/temporal-frame-transaction.ts +0 -301
  916. package/src/temporal-inspection.ts +0 -194
  917. package/src/temporal-view.ts +0 -174
  918. package/src/tilemap/resolve-tileset-runtime.ts +0 -72
@@ -3,7 +3,7 @@
3
3
  // Walks every TileLayer attached to a Tilemap via ChildOf; when a layer is
4
4
  // dirty (or has never been extracted), purges its previously-spawned derived
5
5
  // per-cell entities and re-spawns one ECS entity per non-zero cell. Each
6
- // derived entity carries Transform + MeshFilter (a World-owned unit-quad ref) + MeshRenderer
6
+ // derived entity carries Transform + MeshFilter (HANDLE_QUAD) + MeshRenderer
7
7
  // + Layer + ChildOf { parent: layerEntity }. The ChildOf edge lets
8
8
  // `world.despawn(tilemapEntity)` cascade-despawn the entire subtree
9
9
  // (Tilemap -> TileLayer -> derived render entities) via the engine's
@@ -49,8 +49,12 @@
49
49
  // §D-2 (multi-cell + flip x pivot) + §D-5 (M0 baseline file-by-file
50
50
  // ECS API adaptation) + §D-7 step 3 (half-texel UV inset).
51
51
 
52
+ import {
53
+ HANDLE_QUAD,
54
+ resolveTilesetRuntime,
55
+ type TilesetAtlasLookup,
56
+ } from '@forgeax/engine-assets-runtime';
52
57
  import type { EntityHandle, World } from '@forgeax/engine-ecs';
53
- import { createPrimitiveMesh } from '@forgeax/engine-geometry';
54
58
  import { decodeTileBits } from '@forgeax/engine-graphics-extras';
55
59
  import { type box3, frustum, mat4 } from '@forgeax/engine-math';
56
60
  import { ChildOf, Children, Transform } from '@forgeax/engine-scene';
@@ -60,6 +64,7 @@ import {
60
64
  type TilesetAsset,
61
65
  type TilesetRegion,
62
66
  type TilesetTileEntry,
67
+ toShared,
63
68
  unwrapHandle,
64
69
  } from '@forgeax/engine-types';
65
70
  import {
@@ -74,8 +79,7 @@ import {
74
79
  TileLayer,
75
80
  Tilemap,
76
81
  } from './components';
77
- import { materialTextureValue, SPRITE_PREMULTIPLIED_ALPHA_BLEND } from './materials';
78
- import { resolveTilesetRuntime, type TilesetAtlasLookup } from './tilemap/resolve-tileset-runtime';
82
+ import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from './materials';
79
83
 
80
84
  // Module-scoped caches (charter P5 — engine-side memoisation; AI users
81
85
  // never reach in). Test harness can flush them via the reset helpers.
@@ -94,18 +98,8 @@ import { resolveTilesetRuntime, type TilesetAtlasLookup } from './tilemap/resolv
94
98
  // The shader's PER_INSTANCE_REGION=true variant reads per-instance
95
99
  // UV from the instance buffer, not from the material UBO, so the
96
100
  // placeholder is ignored at draw time.
97
- let atlasMaterialCache = new WeakMap<World, Map<string, number>>();
98
- let atlasOnlyMaterialCache = new WeakMap<World, Map<string, number>>();
99
- const unitQuadHandleByWorld = new WeakMap<World, Handle<'MeshAsset', 'shared'>>();
100
-
101
- function unitQuadHandle(world: World): Handle<'MeshAsset', 'shared'> {
102
- const existing = unitQuadHandleByWorld.get(world);
103
- if (existing !== undefined) return existing;
104
- const mesh = createPrimitiveMesh('quad').unwrap();
105
- const handle = world.internSharedRef('MeshAsset', mesh);
106
- unitQuadHandleByWorld.set(world, handle);
107
- return handle;
108
- }
101
+ let atlasMaterialCache = new WeakMap<World, Map<string, Handle<'MaterialAsset', 'shared'>>>();
102
+ let atlasOnlyMaterialCache = new WeakMap<World, Map<string, Handle<'MaterialAsset', 'shared'>>>();
109
103
  // tweak-20260714 M3 (plan-strategy §2 D-3): the terrain (sortScope='layer')
110
104
  // derived-entity tracker Map + first-frame-heuristic Set that used to live
111
105
  // alongside these material caches were retired once every derived entity
@@ -159,7 +153,7 @@ interface StreamLayerCache {
159
153
  }
160
154
  interface PerWorldStreamingCache {
161
155
  readonly layers: Map<string, StreamLayerCache>;
162
- readonly chunkEntities: Map<string, number[]>;
156
+ readonly chunkEntities: Map<string, EntityHandle[]>;
163
157
  readonly activeChunks: Map<string, Set<number>>;
164
158
  }
165
159
 
@@ -183,8 +177,8 @@ function streamingCache(world: World): PerWorldStreamingCache {
183
177
  * TilesetAsset reload.
184
178
  */
185
179
  export function resetTilemapChunkExtractCache(): void {
186
- atlasMaterialCache = new WeakMap<World, Map<string, number>>();
187
- atlasOnlyMaterialCache = new WeakMap<World, Map<string, number>>();
180
+ atlasMaterialCache = new WeakMap<World, Map<string, Handle<'MaterialAsset', 'shared'>>>();
181
+ atlasOnlyMaterialCache = new WeakMap<World, Map<string, Handle<'MaterialAsset', 'shared'>>>();
188
182
  }
189
183
 
190
184
  /**
@@ -288,22 +282,23 @@ function resolveTilesetMaterial(
288
282
  tileset: TilesetAsset,
289
283
  regionIndex: number,
290
284
  lookup: (guid: string) => TilesetAtlasLookup,
291
- ): number {
285
+ ): Handle<'MaterialAsset', 'shared'> {
292
286
  const region = tileset.regions[regionIndex];
293
- if (region === undefined) return 0;
287
+ if (region === undefined) return toShared<'MaterialAsset'>(0);
294
288
  // 3-hop walk: regions[i].atlasIndex (default 0) -> atlases[atlasIndex].
295
289
  // atlasIndex out-of-range is register-time fail-fast via
296
290
  // `validateTilesetPayload` (m1-t6); the runtime resolver still bails
297
291
  // when the slot is unexpectedly empty (charter P3 fail-safe).
298
292
  const atlasIndex = region.atlasIndex ?? 0;
299
293
  const atlasGuid = tileset.atlases[atlasIndex];
300
- if (atlasGuid === undefined) return 0;
294
+ if (atlasGuid === undefined) return toShared<'MaterialAsset'>(0);
301
295
  const atlas = resolveTilesetRuntime(world, atlasGuid, lookup);
302
- if (!atlas.ok) return 0;
296
+ if (!atlas.ok) return toShared<'MaterialAsset'>(0);
303
297
  const atlasHandle = atlas.value.handle;
304
298
  const atlasId = unwrapHandle(atlasHandle);
305
299
  const cacheKey = `${atlasId}|${regionIndex}`;
306
- const cache = atlasMaterialCache.get(world) ?? new Map<string, number>();
300
+ const cache =
301
+ atlasMaterialCache.get(world) ?? new Map<string, Handle<'MaterialAsset', 'shared'>>();
307
302
  atlasMaterialCache.set(world, cache);
308
303
  const cached = cache.get(cacheKey);
309
304
  if (cached !== undefined) return cached;
@@ -345,7 +340,7 @@ function resolveTilesetMaterial(
345
340
  ],
346
341
  values: {
347
342
  colorTint: [1.0, 1.0, 1.0, 1.0],
348
- baseColorTexture: materialTextureValue(atlasHandle),
343
+ baseColorTexture: atlasHandle,
349
344
  region: [u, v, w, h],
350
345
  pivotAndSize: [0.5, 0.5, 1.0, 1.0],
351
346
  flipY: 1.0,
@@ -355,9 +350,8 @@ function resolveTilesetMaterial(
355
350
  'MaterialAsset',
356
351
  matPayload,
357
352
  );
358
- const id = unwrapHandle(matHandle);
359
- cache.set(cacheKey, id);
360
- return id;
353
+ cache.set(cacheKey, matHandle);
354
+ return matHandle;
361
355
  }
362
356
 
363
357
  /**
@@ -381,15 +375,16 @@ function resolveAtlasOnlyMaterial(
381
375
  tileset: TilesetAsset,
382
376
  atlasIndex: number,
383
377
  lookup: (guid: string) => TilesetAtlasLookup,
384
- ): number {
378
+ ): Handle<'MaterialAsset', 'shared'> {
385
379
  const atlasGuid = tileset.atlases[atlasIndex];
386
- if (atlasGuid === undefined) return 0;
380
+ if (atlasGuid === undefined) return toShared<'MaterialAsset'>(0);
387
381
  const atlas = resolveTilesetRuntime(world, atlasGuid, lookup);
388
- if (!atlas.ok) return 0;
382
+ if (!atlas.ok) return toShared<'MaterialAsset'>(0);
389
383
  const atlasHandle = atlas.value.handle;
390
384
  const atlasId = unwrapHandle(atlasHandle);
391
385
  const cacheKey = String(atlasId);
392
- const cache = atlasOnlyMaterialCache.get(world) ?? new Map<string, number>();
386
+ const cache =
387
+ atlasOnlyMaterialCache.get(world) ?? new Map<string, Handle<'MaterialAsset', 'shared'>>();
393
388
  atlasOnlyMaterialCache.set(world, cache);
394
389
  const cached = cache.get(cacheKey);
395
390
  if (cached !== undefined) return cached;
@@ -409,7 +404,7 @@ function resolveAtlasOnlyMaterial(
409
404
  ],
410
405
  values: {
411
406
  colorTint: [1.0, 1.0, 1.0, 1.0],
412
- baseColorTexture: materialTextureValue(atlasHandle),
407
+ baseColorTexture: atlasHandle,
413
408
  region: [0.0, 0.0, 1.0, 1.0],
414
409
  pivotAndSize: [0.5, 0.5, 1.0, 1.0],
415
410
  flipY: 1.0,
@@ -419,9 +414,8 @@ function resolveAtlasOnlyMaterial(
419
414
  'MaterialAsset',
420
415
  matPayload,
421
416
  );
422
- const id = unwrapHandle(matHandle);
423
- cache.set(cacheKey, id);
424
- return id;
417
+ cache.set(cacheKey, matHandle);
418
+ return matHandle;
425
419
  }
426
420
 
427
421
  /**
@@ -460,7 +454,7 @@ interface DerivedSpawnSpec {
460
454
  readonly cellY: number;
461
455
  readonly tileId: number;
462
456
  readonly packedTile: number;
463
- readonly materialHandle: number;
457
+ readonly materialHandle: Handle<'MaterialAsset', 'shared'>;
464
458
  readonly chunkIndex: number;
465
459
  // M2: multi-cell footprint + custom pivot land per-tile via TilesetTileEntry.
466
460
  readonly widthCells: number;
@@ -512,7 +506,7 @@ function specFor(
512
506
  chunkSize: number,
513
507
  cellIndex: number,
514
508
  packedTile: number,
515
- materialHandle: number,
509
+ materialHandle: Handle<'MaterialAsset', 'shared'>,
516
510
  entry: TilesetTileEntry,
517
511
  atlasIndex: number,
518
512
  ): DerivedSpawnSpec {
@@ -627,11 +621,11 @@ function spawnDerivedRenderEntities(
627
621
  scale: [scaleX, scaleY, 1],
628
622
  },
629
623
  },
630
- { component: MeshFilter, data: { assetHandle: unitQuadHandle(world) } },
624
+ { component: MeshFilter, data: { assetHandle: HANDLE_QUAD } },
631
625
  {
632
626
  component: MeshRenderer,
633
627
  data: {
634
- materials: [spec.materialHandle as unknown as Handle<'MaterialAsset', 'shared'>],
628
+ materials: [spec.materialHandle],
635
629
  },
636
630
  },
637
631
  { component: Layer, data: { value: layerValue } },
@@ -654,7 +648,7 @@ function spawnDerivedRenderEntities(
654
648
  *
655
649
  * Layout:
656
650
  * - Transform: identity (the per-instance mat4 carries world-space TRS).
657
- * - MeshFilter: the World-owned unit-quad shared reference.
651
+ * - MeshFilter: HANDLE_QUAD.
658
652
  * - MeshRenderer: atlas-only sprite material (region placeholder; shader
659
653
  * reads per-instance UV from SpriteInstances.regions under the
660
654
  * PER_INSTANCE_REGION=true variant — selected at record stage).
@@ -678,21 +672,20 @@ function spawnSpriteInstancesGroup(
678
672
  layerOrder: number,
679
673
  chunkIndex: number,
680
674
  atlasIndex: number,
681
- materialHandle: number,
675
+ materialHandle: Handle<'MaterialAsset', 'shared'>,
682
676
  cellSpecs: readonly DerivedSpawnSpec[],
683
677
  ): EntityHandle | undefined {
684
678
  if (cellSpecs.length === 0) return undefined;
685
679
  const N = cellSpecs.length;
686
680
  const transforms = new Float32Array(N * 16);
687
681
  const regions = new Float32Array(N * 4);
688
- const tmpMat = new Float32Array(16) as unknown as Parameters<typeof mat4.compose>[0];
689
- const tmpF = tmpMat as unknown as Float32Array;
682
+ const tmpMat = mat4.create();
690
683
  const tmpT: [number, number, number] = [0, 0, 0];
691
684
  const tmpR: [number, number, number, number] = [0, 0, 0, 1];
692
685
  const tmpS: [number, number, number] = [1, 1, 1];
693
686
 
694
687
  // Per-chunk frustum cull: entity Transform = chunk world center + chunk
695
- // extents (scaleX/Y). The frustum culler reads the entity AABB (unit quad
688
+ // extents (scaleX/Y). The frustum culler reads the entity AABB (HANDLE_QUAD
696
689
  // local [-0.5, 0.5]² expanded by entity scale/pos) → world AABB exactly
697
690
  // covers the chunk footprint.
698
691
  //
@@ -744,10 +737,10 @@ function spawnSpriteInstancesGroup(
744
737
  const dst = i * 16;
745
738
  for (let c = 0; c < 4; c++) {
746
739
  const base = c * 4;
747
- const w3 = tmpF[base + 3] as number;
748
- transforms[dst + base + 0] = ((tmpF[base + 0] as number) - chunkCenterX * w3) * invSX;
749
- transforms[dst + base + 1] = ((tmpF[base + 1] as number) - chunkCenterY * w3) * invSY;
750
- transforms[dst + base + 2] = tmpF[base + 2] as number;
740
+ const w3 = tmpMat[base + 3] ?? 0;
741
+ transforms[dst + base + 0] = ((tmpMat[base + 0] ?? 0) - chunkCenterX * w3) * invSX;
742
+ transforms[dst + base + 1] = ((tmpMat[base + 1] ?? 0) - chunkCenterY * w3) * invSY;
743
+ transforms[dst + base + 2] = tmpMat[base + 2] ?? 0;
751
744
  transforms[dst + base + 3] = w3;
752
745
  }
753
746
 
@@ -779,11 +772,11 @@ function spawnSpriteInstancesGroup(
779
772
  scale: [chunkScaleX, chunkScaleY, 1],
780
773
  },
781
774
  },
782
- { component: MeshFilter, data: { assetHandle: unitQuadHandle(world) } },
775
+ { component: MeshFilter, data: { assetHandle: HANDLE_QUAD } },
783
776
  {
784
777
  component: MeshRenderer,
785
778
  data: {
786
- materials: [materialHandle as unknown as Handle<'MaterialAsset', 'shared'>],
779
+ materials: [materialHandle],
787
780
  },
788
781
  },
789
782
  { component: SpriteInstances, data: { transforms, regions } },
@@ -890,18 +883,8 @@ function buildCameraFrustumPlanes(world: World): frustum.Frustum | null {
890
883
  const trRes = world.get(camEntity, Transform);
891
884
  if (!camRes.ok || !trRes.ok) continue;
892
885
 
893
- const cam = camRes.value as unknown as {
894
- near: number;
895
- far: number;
896
- projection: number;
897
- left: number;
898
- right: number;
899
- bottom: number;
900
- top: number;
901
- fov: number;
902
- aspect: number;
903
- };
904
- const tr = trRes.value as unknown as { world: Float32Array };
886
+ const cam = camRes.value;
887
+ const tr = trRes.value;
905
888
 
906
889
  const { near, far } = cam;
907
890
  if (near >= far) continue;
@@ -960,7 +943,7 @@ function buildCameraFrustumPlanes(world: World): frustum.Frustum | null {
960
943
  * §2 D-4). `bucketTileLayer` filters empty cells before the byChunk map
961
944
  * is built, so this branch should never trigger in production; the
962
945
  * sentinel is an explicit "no visible pixels" value that
963
- * `frustum.intersectsBox` rejects immediately, avoiding any silent NaN
946
+ * `frustum.intersectsBox` rejects immediately, avoiding a silent NaN
964
947
  * propagation path (charter P3 explicit failure).
965
948
  *
966
949
  * Note: `frustum.intersectsBox` picks a p-vertex per plane and computes
@@ -997,7 +980,7 @@ export function computeChunkStreamBounds(
997
980
  if (x1 > maxX) maxX = x1;
998
981
  if (y1 > maxY) maxY = y1;
999
982
  }
1000
- return [minX, minY, -1, maxX, maxY, 1] as unknown as box3.Box3Like;
983
+ return [minX, minY, -1, maxX, maxY, 1];
1001
984
  }
1002
985
 
1003
986
  /**
@@ -1074,7 +1057,7 @@ function evictDeadPerCellStreamingCaches(work: readonly LayerWork[], world: Worl
1074
1057
  const cache = streamingCache(world);
1075
1058
  const aliveLayerKeys = new Set<string>();
1076
1059
  for (const w of work) {
1077
- aliveLayerKeys.add(String(unwrapHandle(w.layerEntity as unknown as Handle<string, 'shared'>)));
1060
+ aliveLayerKeys.add(String(w.layerEntity));
1078
1061
  }
1079
1062
  const deadLayerKeys = new Set<string>();
1080
1063
  for (const layerKey of cache.activeChunks.keys()) {
@@ -1144,7 +1127,7 @@ export function tilemapChunkExtractSystem(
1144
1127
  for (const w of work) {
1145
1128
  // The outer WeakMap owns World identity; this generation-bearing packed
1146
1129
  // entity handle prevents aliasing when an ECS slot is reused.
1147
- const layerKey = String(unwrapHandle(w.layerEntity as unknown as Handle<string, 'shared'>));
1130
+ const layerKey = String(w.layerEntity);
1148
1131
  // AC-04: decode via the canonical SortScope union; avoid relying on the
1149
1132
  // raw encoding (0='layer', 1='per-cell') leaking through this call site.
1150
1133
  // `decodeSortScope` is the SSOT used throughout `bucketTileLayer` (see
@@ -1277,7 +1260,7 @@ export function tilemapChunkExtractSystem(
1277
1260
 
1278
1261
  if (visible && !wasActive) {
1279
1262
  // Spawn per-cell entities for this newly-visible chunk.
1280
- const spawned: number[] = [];
1263
+ const spawned: EntityHandle[] = [];
1281
1264
  for (const spec of specs) {
1282
1265
  const e = spawnDerivedRenderEntities(
1283
1266
  world,
@@ -1288,7 +1271,7 @@ export function tilemapChunkExtractSystem(
1288
1271
  spec.packedTile,
1289
1272
  cache.sortScope,
1290
1273
  );
1291
- spawned.push(unwrapHandle(e as unknown as Handle<string, 'shared'>));
1274
+ spawned.push(e);
1292
1275
  }
1293
1276
  streaming.chunkEntities.set(`${layerKey}:${chunkIdx}`, spawned);
1294
1277
  activeSet.add(chunkIdx);
@@ -1297,7 +1280,7 @@ export function tilemapChunkExtractSystem(
1297
1280
  const key = `${layerKey}:${chunkIdx}`;
1298
1281
  const entities = streaming.chunkEntities.get(key);
1299
1282
  if (entities !== undefined) {
1300
- for (const e of entities) world.despawn(e as EntityHandle);
1283
+ for (const e of entities) world.despawn(e);
1301
1284
  streaming.chunkEntities.delete(key);
1302
1285
  }
1303
1286
  activeSet.delete(chunkIdx);
@@ -13,26 +13,27 @@ import {
13
13
  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
14
14
  GPU_TEXTURE_USAGE_TEXTURE_BINDING,
15
15
  } from './gpu-texture-usage';
16
+ import { buildPerFrameBindGroups } from './record/frame-lighting';
17
+ import { encodeMainPass } from './record/main-pass';
18
+ import type {
19
+ _InternalRenderPipelineContext,
20
+ RenderSystemInternals,
21
+ } from './record/render-context';
16
22
  import {
17
- encodeMainPass,
18
23
  encodeSkyboxPass,
19
24
  recordBloomBlurHPass,
20
25
  recordBloomBlurVPass,
21
26
  recordBloomBrightPass,
22
27
  recordBloomCompositePass,
23
- } from './record';
24
- import { buildPerFrameBindGroups } from './record/frame-lighting';
28
+ } from './record/skybox-post-pass';
29
+ import { STANDARD_TONEMAP_FEATURE_ID } from './render-contract';
25
30
  import {
26
31
  encodeFullscreenPass,
27
32
  recordSsaoBlurPass,
28
33
  recordSsaoCalcPass,
29
- TONEMAP_POST_PROCESS_ID,
30
34
  } from './render-graph-primitives';
31
35
  import type { RenderPipelineFrame, RenderPipelineGpuDrivenProjection } from './render-pipeline';
32
- import type { _InternalRenderPipelineContext } from './render-pipeline-context';
33
- import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline-target';
34
- import type { RenderSystemInternals } from './render-system';
35
- import type { ResolvedSsaoParameters } from './ssao-config';
36
+ import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline';
36
37
 
37
38
  function resolvedView(resources: GraphResourceResolver, view: GraphTextureView): TextureView {
38
39
  const result = resources.textureView(view);
@@ -180,14 +181,14 @@ export function addTypedScenePass(
180
181
  : resolvedView(resources, options.spotShadow.view);
181
182
  const ssao =
182
183
  options.ssao === undefined ? undefined : resolvedView(resources, options.ssao.view);
183
- frame.frameState.currentDirectionalShadowView = directionalShadow ?? null;
184
- frame.frameState.currentSpotShadowView = spotShadow ?? null;
184
+ internal.frameState.currentDirectionalShadowView = directionalShadow ?? null;
185
+ internal.frameState.currentSpotShadowView = spotShadow ?? null;
185
186
  const groups = buildPerFrameBindGroups(
186
- frame.runtime as RenderSystemInternals,
187
- frame.frameState,
188
- frame.pipelineState,
189
- frame.validated.length > 0 || options.gpuDriven !== undefined,
190
- frame.bindGroupCounts,
187
+ internal.runtime as RenderSystemInternals,
188
+ internal.frameState,
189
+ internal.pipelineState,
190
+ internal.validated.length > 0 || options.gpuDriven !== undefined,
191
+ internal.bindGroupCounts,
191
192
  { directionalShadow, spotShadow },
192
193
  );
193
194
  if (groups.viewBindGroup !== null) {
@@ -224,14 +225,15 @@ export function addTypedScenePass(
224
225
  export function addTypedFrameObservationPass(
225
226
  graph: RenderGraphBuilder<RenderPipelineFrame>,
226
227
  target: RenderPipelineTarget,
227
- pipelineId: 'forgeax::urp' | 'forgeax::hdrp',
228
+ pipelineId: 'forgeax::standard',
228
229
  ): Result<void, RenderGraphError> {
229
230
  return graph.addCopyPass('linear-hdr-observation', {
230
231
  accesses: [{ resource: target.view, usage: 'copy-src' }],
231
232
  encode: ({ frame, resources }) => {
233
+ const internal = frame as _InternalRenderPipelineContext;
232
234
  const texture = resources.texture(target.texture);
233
235
  if (!texture.ok) throw texture.error;
234
- frame.frameState.currentFrameObservationSource = {
236
+ internal.frameState.currentFrameObservationSource = {
235
237
  texture: texture.value,
236
238
  descriptor: {
237
239
  texture: texture.value,
@@ -243,7 +245,7 @@ export function addTypedFrameObservationPass(
243
245
  GPU_TEXTURE_USAGE_TEXTURE_BINDING,
244
246
  sample: target.sampleCount,
245
247
  },
246
- frameId: frame.frameState.frameNumber,
248
+ frameId: internal.frameState.frameNumber,
247
249
  pipelineId,
248
250
  backendId: frame.runtime.device.caps.backendKind,
249
251
  };
@@ -330,7 +332,6 @@ export interface TypedSsaoTargets {
330
332
  readonly depth: RenderPipelineTarget;
331
333
  readonly raw: RenderPipelineTarget;
332
334
  readonly blurred: RenderPipelineTarget;
333
- readonly parameters: ResolvedSsaoParameters;
334
335
  }
335
336
 
336
337
  export function addTypedSsaoPasses(
@@ -367,7 +368,6 @@ export function addTypedSsaoPasses(
367
368
  depth: resolvedDepthView(frame, resources, targets.depth),
368
369
  depthCacheKey,
369
370
  },
370
- targets.parameters,
371
371
  );
372
372
  },
373
373
  });
@@ -475,21 +475,31 @@ export function addTypedCompositePostEffects(
475
475
  depth: RenderPipelineTarget,
476
476
  size: { readonly width: number; readonly height: number },
477
477
  ): Result<void, RenderGraphError> {
478
+ let currentInput = input;
478
479
  for (let index = 0; index < effects.length; index += 1) {
479
480
  const shader = effects[index];
480
481
  if (shader === undefined) continue;
482
+ const effectInput = currentInput;
481
483
  const scratch = createRenderPipelineTarget(graph, `post-effect-scratch-${index}`, {
482
484
  format: output.format as GPUTextureFormat,
483
485
  size: 'surface',
484
486
  });
485
487
  if (!scratch.ok) return scratch;
488
+ const effectOutput =
489
+ index === effects.length - 1
490
+ ? ok(output)
491
+ : createRenderPipelineTarget(graph, `post-effect-output-${index}`, {
492
+ format: output.format as GPUTextureFormat,
493
+ size: 'surface',
494
+ });
495
+ if (!effectOutput.ok) return effectOutput;
486
496
  const copied = graph.addCopyPass(`post-effect-copy-${index}`, {
487
497
  accesses: [
488
- { resource: input.view, usage: 'copy-src' },
498
+ { resource: effectInput.view, usage: 'copy-src' },
489
499
  { resource: scratch.value.view, usage: 'copy-dst' },
490
500
  ],
491
501
  encode: ({ encoder, resources }) => {
492
- const source = resources.texture(input.texture);
502
+ const source = resources.texture(effectInput.texture);
493
503
  if (!source.ok) throw source.error;
494
504
  const destination = resources.texture(scratch.value.texture);
495
505
  if (!destination.ok) throw destination.error;
@@ -505,10 +515,11 @@ export function addTypedCompositePostEffects(
505
515
  name: `post-effect-${index}`,
506
516
  shader,
507
517
  input: scratch.value,
508
- output,
518
+ output: effectOutput.value,
509
519
  depth,
510
520
  });
511
521
  if (!effect.ok) return effect;
522
+ currentInput = effectOutput.value;
512
523
  }
513
524
  return ok(undefined);
514
525
  }
@@ -521,7 +532,7 @@ export function addTypedTonemapPass(
521
532
  ): Result<void, RenderGraphError> {
522
533
  return addTypedFullscreenPass(graph, {
523
534
  name: outputOnly ? 'output' : 'tonemap',
524
- shader: TONEMAP_POST_PROCESS_ID,
535
+ shader: STANDARD_TONEMAP_FEATURE_ID,
525
536
  input,
526
537
  output,
527
538
  outputOnly,
@@ -1,23 +1,15 @@
1
1
  import type { RenderGraphBuilder, RenderGraphError } from '@forgeax/engine-render-graph';
2
2
  import { ok, type Result } from '@forgeax/engine-types';
3
3
  import { PointShadowAtlasUninitializedError } from './errors/render';
4
- import {
5
- directionalCascadeAtlasSize,
6
- directionalCascadeRasterViewport,
7
- } from './extract/directional-csm';
8
4
  import { GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING } from './gpu-texture-usage';
5
+ import type { _InternalRenderPipelineContext } from './record/render-context';
9
6
  import {
10
7
  encodeDirectionalShadowPass,
11
8
  encodePointShadowPass,
12
9
  encodeSpotShadowPass,
13
10
  } from './record/shadow-pass';
14
- import type {
15
- RenderPipelineFrame,
16
- RenderPipelineGpuDrivenShadowProjection,
17
- RenderPipelineTopology,
18
- } from './render-pipeline';
19
- import type { _InternalRenderPipelineContext } from './render-pipeline-context';
20
- import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline-target';
11
+ import type { RenderPipelineFrame, RenderPipelineTopology } from './render-pipeline';
12
+ import { createRenderPipelineTarget, type RenderPipelineTarget } from './render-pipeline';
21
13
 
22
14
  export interface TypedShadowTargets {
23
15
  readonly directional: RenderPipelineTarget;
@@ -25,17 +17,16 @@ export interface TypedShadowTargets {
25
17
  readonly point?: RenderPipelineTarget | undefined;
26
18
  }
27
19
 
28
- function addShadowPass(
20
+ function recordShadowPass(
29
21
  graph: RenderGraphBuilder<RenderPipelineFrame>,
30
22
  name: string,
31
23
  target: RenderPipelineTarget,
32
24
  loadOp: 'clear' | 'load',
33
25
  encode: Parameters<RenderGraphBuilder<RenderPipelineFrame>['addRasterPass']>[1]['encode'],
34
26
  executeIf?: (frame: RenderPipelineFrame) => boolean,
35
- extraAccesses: readonly import('@forgeax/engine-render-graph').GraphAccess[] = [],
36
27
  ): Result<void, RenderGraphError> {
37
28
  return graph.addRasterPass(name, {
38
- accesses: [{ resource: target.view, usage: 'depth-stencil-write' }, ...extraAccesses],
29
+ accesses: [{ resource: target.view, usage: 'depth-stencil-write' }],
39
30
  colorAttachments: [],
40
31
  depthStencilAttachment: {
41
32
  view: target.view,
@@ -51,64 +42,42 @@ function addShadowPass(
51
42
  export function addTypedShadowPasses(
52
43
  graph: RenderGraphBuilder<RenderPipelineFrame>,
53
44
  topology: RenderPipelineTopology,
54
- gpuDrivenShadow: readonly RenderPipelineGpuDrivenShadowProjection[] = [],
55
45
  ): Result<TypedShadowTargets, RenderGraphError> {
56
- const rasterViewports = Array.from({ length: topology.shadow.cascadeCount }, (_, cascade) =>
57
- directionalCascadeRasterViewport(
58
- cascade,
59
- topology.shadow.cascadeCount,
60
- topology.shadow.mapSize,
61
- ),
62
- );
63
- const atlasSize = directionalCascadeAtlasSize(
64
- topology.shadow.cascadeCount,
65
- topology.shadow.mapSize,
66
- );
46
+ const tilesPerSide = Math.ceil(Math.sqrt(topology.shadow.cascadeCount));
67
47
  const directional = createRenderPipelineTarget(graph, 'directional-shadow-depth', {
68
48
  format: 'depth32float',
69
- size: atlasSize,
49
+ size: {
50
+ width: topology.shadow.mapSize * tilesPerSide,
51
+ height: topology.shadow.mapSize * tilesPerSide,
52
+ },
70
53
  });
71
54
  if (!directional.ok) return directional;
72
- const resetDirectionalAtlas = addShadowPass(
73
- graph,
74
- 'directional-shadow-reset',
75
- directional.value,
76
- 'clear',
77
- () => {},
78
- // Keep a stable, inspectable topology name for capture/debug consumers.
79
- // The independent legacy shadow encoder owns the cache-aware atlas clear;
80
- // opening this declarative graph pass would add a second depth pass.
81
- () => false,
82
- );
83
- if (!resetDirectionalAtlas.ok) return resetDirectionalAtlas;
84
55
  for (let cascade = 0; cascade < topology.shadow.cascadeCount; cascade += 1) {
85
- const rasterViewport = rasterViewports[cascade];
86
- if (rasterViewport === undefined) throw new RangeError('directional cascade viewport missing');
87
- const gpuShadow = gpuDrivenShadow.find((candidate) => candidate.cascadeIndex === cascade);
88
- const added = addShadowPass(
56
+ const col = cascade % tilesPerSide;
57
+ const row = Math.floor(cascade / tilesPerSide);
58
+ const added = recordShadowPass(
89
59
  graph,
90
60
  `shadowCascade${cascade}`,
91
61
  directional.value,
92
62
  cascade === 0 ? 'clear' : 'load',
93
- ({ pass, frame, resources }) =>
94
- encodeDirectionalShadowPass(
95
- frame as never,
96
- pass,
97
- cascade,
98
- rasterViewport,
99
- gpuShadow === undefined ? undefined : { projection: gpuShadow, resources },
100
- ),
63
+ ({ pass, frame }) =>
64
+ encodeDirectionalShadowPass(frame as never, pass, cascade, {
65
+ x: col * topology.shadow.mapSize,
66
+ y: row * topology.shadow.mapSize,
67
+ w: topology.shadow.mapSize,
68
+ h: topology.shadow.mapSize,
69
+ }),
101
70
  (frame) => !(frame as _InternalRenderPipelineContext).directionalShadowCacheReuse,
102
- gpuShadow?.accesses,
103
71
  );
104
72
  if (!added.ok) return added;
105
73
  }
106
74
  const observation = graph.addCopyPass('directional-shadow-observation', {
107
75
  accesses: [{ resource: directional.value.view, usage: 'copy-src' }],
108
76
  encode: ({ frame, resources }) => {
77
+ const internal = frame as _InternalRenderPipelineContext;
109
78
  const texture = resources.texture(directional.value.texture);
110
79
  if (!texture.ok) throw texture.error;
111
- frame.pipelineState.perPassResources.shadowTexture = texture.value;
80
+ internal.pipelineState.perPassResources.shadowTexture = texture.value;
112
81
  },
113
82
  });
114
83
  if (!observation.ok) return observation;
@@ -127,7 +96,8 @@ export function addTypedShadowPasses(
127
96
  usage: GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING,
128
97
  },
129
98
  (frame) => {
130
- const atlas = frame.frameState.pointShadowAtlas?.getTexture();
99
+ const internal = frame as _InternalRenderPipelineContext;
100
+ const atlas = internal.frameState.pointShadowAtlas?.getTexture();
131
101
  if (atlas === null || atlas === undefined) {
132
102
  throw new PointShadowAtlasUninitializedError();
133
103
  }
@@ -158,7 +128,7 @@ export function addTypedShadowPasses(
158
128
  arrayLayerCount: 1,
159
129
  });
160
130
  if (!faceView.ok) return faceView;
161
- const added = addShadowPass(
131
+ const added = recordShadowPass(
162
132
  graph,
163
133
  `point-shadow-${pointIndex}-${face}`,
164
134
  {
@@ -181,7 +151,7 @@ export function addTypedShadowPasses(
181
151
  });
182
152
  if (!spot.ok) return spot;
183
153
  for (let spotIndex = 0; spotIndex < Math.max(1, topology.shadow.spotCount); spotIndex += 1) {
184
- const added = addShadowPass(
154
+ const added = recordShadowPass(
185
155
  graph,
186
156
  topology.shadow.spotCount === 0 ? 'spot-shadow' : `spot-shadow-${spotIndex}`,
187
157
  spot.value,
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=analytic-sky-contract.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytic-sky-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/analytic-sky-contract.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=analytic-sky-falsify.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytic-sky-falsify.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/analytic-sky-falsify.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=assets-runtime-handoff.integration.test.d.ts.map