@forgeax/engine-render 0.1.20 → 0.1.21

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 (372) hide show
  1. package/README.md +215 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/assembly/device-feature-admission.d.ts +18 -0
  4. package/dist/assembly/device-feature-admission.d.ts.map +1 -0
  5. package/dist/assembly/directional-shadow-inspection.d.ts +38 -0
  6. package/dist/assembly/directional-shadow-inspection.d.ts.map +1 -0
  7. package/dist/assembly/factory.d.ts +21 -18
  8. package/dist/assembly/factory.d.ts.map +1 -1
  9. package/dist/assembly/host-contract.d.ts +9 -0
  10. package/dist/assembly/host-contract.d.ts.map +1 -1
  11. package/dist/assembly/render-target-host.d.ts +46 -0
  12. package/dist/assembly/render-target-host.d.ts.map +1 -0
  13. package/dist/assets/render-asset-port.d.ts.map +1 -1
  14. package/dist/authoring.mjs +3 -0
  15. package/dist/authoring.mjs.map +1 -1
  16. package/dist/capture/cube-views.d.ts +21 -0
  17. package/dist/capture/cube-views.d.ts.map +1 -0
  18. package/dist/capture/scheduler.d.ts +54 -0
  19. package/dist/capture/scheduler.d.ts.map +1 -0
  20. package/dist/{chunk-4XINDLAY.mjs → chunk-5YADUCA7.mjs} +1552 -1361
  21. package/dist/chunk-5YADUCA7.mjs.map +1 -0
  22. package/dist/{chunk-TBQJOK2L.mjs → chunk-6OPXDQ2E.mjs} +364 -51
  23. package/dist/chunk-6OPXDQ2E.mjs.map +1 -0
  24. package/dist/{chunk-M2MP4ZOU.mjs → chunk-BXBQQKFQ.mjs} +3 -9
  25. package/dist/chunk-BXBQQKFQ.mjs.map +1 -0
  26. package/dist/{chunk-CDTWTHZR.mjs → chunk-FS2KNUQH.mjs} +548 -6
  27. package/dist/chunk-FS2KNUQH.mjs.map +1 -0
  28. package/dist/components/camera.d.ts +1 -0
  29. package/dist/components/camera.d.ts.map +1 -1
  30. package/dist/components/cube-camera.d.ts +20 -0
  31. package/dist/components/cube-camera.d.ts.map +1 -0
  32. package/dist/components/directional-light.d.ts +11 -2
  33. package/dist/components/directional-light.d.ts.map +1 -1
  34. package/dist/components/directional-shadow-filter.d.ts +25 -0
  35. package/dist/components/directional-shadow-filter.d.ts.map +1 -0
  36. package/dist/components/index.d.ts +2 -0
  37. package/dist/components/index.d.ts.map +1 -1
  38. package/dist/components/light-helpers.d.ts.map +1 -1
  39. package/dist/components/reflection-probe.d.ts +17 -0
  40. package/dist/components/reflection-probe.d.ts.map +1 -0
  41. package/dist/construct-renderer.mjs +5826 -1003
  42. package/dist/construct-renderer.mjs.map +1 -1
  43. package/dist/environment/frame.d.ts.map +1 -1
  44. package/dist/environment/lifecycle.d.ts +5 -0
  45. package/dist/environment/lifecycle.d.ts.map +1 -1
  46. package/dist/errors/render.d.ts +141 -93
  47. package/dist/errors/render.d.ts.map +1 -1
  48. package/dist/extract/directional-shadow-projection.d.ts +23 -0
  49. package/dist/extract/directional-shadow-projection.d.ts.map +1 -0
  50. package/dist/extract/environment.d.ts +14 -0
  51. package/dist/extract/environment.d.ts.map +1 -1
  52. package/dist/extract/visibility.d.ts.map +1 -1
  53. package/dist/features/fullscreen.d.ts.map +1 -1
  54. package/dist/features/targets.d.ts.map +1 -1
  55. package/dist/features/types.d.ts +10 -0
  56. package/dist/features/types.d.ts.map +1 -1
  57. package/dist/fullscreen-post-process-pass.d.ts +13 -2
  58. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  59. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  60. package/dist/gpu-driven/production-raster.d.ts +0 -1
  61. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  62. package/dist/gpu-scene.d.ts.map +1 -1
  63. package/dist/hdrp-buffers.d.ts +19 -17
  64. package/dist/hdrp-buffers.d.ts.map +1 -1
  65. package/dist/ibl/IblPipelineCache.d.ts +4 -0
  66. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  67. package/dist/ibl/kernel-cache.d.ts +36 -0
  68. package/dist/ibl/kernel-cache.d.ts.map +1 -0
  69. package/dist/index.d.ts +28 -3
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.mjs +4 -4
  72. package/dist/index.mjs.map +1 -1
  73. package/dist/inspection-types.d.ts +51 -0
  74. package/dist/inspection-types.d.ts.map +1 -1
  75. package/dist/instances-derived-bounds.d.ts +50 -0
  76. package/dist/instances-derived-bounds.d.ts.map +1 -0
  77. package/dist/internal.mjs +1 -1
  78. package/dist/light-buffer-layout.d.ts +10 -1
  79. package/dist/light-buffer-layout.d.ts.map +1 -1
  80. package/dist/mesh-material-bindings.d.ts +54 -0
  81. package/dist/mesh-material-bindings.d.ts.map +1 -1
  82. package/dist/pbr-pipeline.d.ts +14 -4
  83. package/dist/pbr-pipeline.d.ts.map +1 -1
  84. package/dist/pipeline/standard-forward-lane.d.ts +2 -1
  85. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  86. package/dist/pipeline/standard-lighting/errors.d.ts +4 -0
  87. package/dist/pipeline/standard-lighting/errors.d.ts.map +1 -0
  88. package/dist/pipeline/standard-lighting/graph.d.ts +24 -0
  89. package/dist/pipeline/standard-lighting/graph.d.ts.map +1 -0
  90. package/dist/pipeline/standard-lighting/inspection.d.ts +38 -0
  91. package/dist/pipeline/standard-lighting/inspection.d.ts.map +1 -0
  92. package/dist/pipeline/standard-lighting/layout.d.ts +28 -0
  93. package/dist/pipeline/standard-lighting/layout.d.ts.map +1 -0
  94. package/dist/pipeline/standard-lighting/light-frame.d.ts +33 -0
  95. package/dist/pipeline/standard-lighting/light-frame.d.ts.map +1 -0
  96. package/dist/pipeline/standard-lighting/membership.d.ts +14 -0
  97. package/dist/pipeline/standard-lighting/membership.d.ts.map +1 -0
  98. package/dist/pipeline/standard-lighting/prepare.d.ts +16 -0
  99. package/dist/pipeline/standard-lighting/prepare.d.ts.map +1 -0
  100. package/dist/pipeline/standard-lighting/topology.d.ts +45 -0
  101. package/dist/pipeline/standard-lighting/topology.d.ts.map +1 -0
  102. package/dist/pipeline/standard-lighting/transport.d.ts +36 -0
  103. package/dist/pipeline/standard-lighting/transport.d.ts.map +1 -0
  104. package/dist/pipeline/standard-pipeline.d.ts +4 -13
  105. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  106. package/dist/pipeline/standard-post.d.ts.map +1 -1
  107. package/dist/pipeline/standard-profile.d.ts +5 -26
  108. package/dist/pipeline/standard-profile.d.ts.map +1 -1
  109. package/dist/pipeline-spec.d.ts +40 -7
  110. package/dist/pipeline-spec.d.ts.map +1 -1
  111. package/dist/point-shadow-inspection.d.ts +21 -0
  112. package/dist/point-shadow-inspection.d.ts.map +1 -0
  113. package/dist/record/frame-lighting.d.ts +27 -32
  114. package/dist/record/frame-lighting.d.ts.map +1 -1
  115. package/dist/record/frame-snapshot.d.ts +28 -14
  116. package/dist/record/frame-snapshot.d.ts.map +1 -1
  117. package/dist/record/frame-targets.d.ts +5 -0
  118. package/dist/record/frame-targets.d.ts.map +1 -1
  119. package/dist/record/frame.d.ts +10 -4
  120. package/dist/record/frame.d.ts.map +1 -1
  121. package/dist/record/gpu-pass-timing/contract.d.ts +96 -0
  122. package/dist/record/gpu-pass-timing/contract.d.ts.map +1 -0
  123. package/dist/record/gpu-pass-timing/errors.d.ts +18 -0
  124. package/dist/record/gpu-pass-timing/errors.d.ts.map +1 -0
  125. package/dist/record/gpu-pass-timing/index.d.ts +8 -0
  126. package/dist/record/gpu-pass-timing/index.d.ts.map +1 -0
  127. package/dist/record/gpu-pass-timing/parser.d.ts +11 -0
  128. package/dist/record/gpu-pass-timing/parser.d.ts.map +1 -0
  129. package/dist/record/gpu-pass-timing/session.d.ts +43 -0
  130. package/dist/record/gpu-pass-timing/session.d.ts.map +1 -0
  131. package/dist/record/gpu-timing.d.ts +8 -3
  132. package/dist/record/gpu-timing.d.ts.map +1 -1
  133. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  134. package/dist/record/main-pass-material.d.ts +22 -1
  135. package/dist/record/main-pass-material.d.ts.map +1 -1
  136. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  137. package/dist/record/main-pass.d.ts +2 -0
  138. package/dist/record/main-pass.d.ts.map +1 -1
  139. package/dist/record/render-context.d.ts +43 -2
  140. package/dist/record/render-context.d.ts.map +1 -1
  141. package/dist/record/shadow-pass.d.ts.map +1 -1
  142. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  143. package/dist/record/typed-frame-graph.d.ts +72 -4
  144. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  145. package/dist/record/view-ubo.d.ts +7 -4
  146. package/dist/record/view-ubo.d.ts.map +1 -1
  147. package/dist/reflection/filter.d.ts +22 -0
  148. package/dist/reflection/filter.d.ts.map +1 -0
  149. package/dist/reflection/gpu-table.d.ts +25 -0
  150. package/dist/reflection/gpu-table.d.ts.map +1 -0
  151. package/dist/reflection/projection.d.ts +91 -0
  152. package/dist/reflection/projection.d.ts.map +1 -0
  153. package/dist/render-contract.d.ts +49 -7
  154. package/dist/render-contract.d.ts.map +1 -1
  155. package/dist/render-graph-primitives.d.ts +1 -0
  156. package/dist/render-graph-primitives.d.ts.map +1 -1
  157. package/dist/render-pipeline.d.ts +42 -2
  158. package/dist/render-pipeline.d.ts.map +1 -1
  159. package/dist/render-system-extract.d.ts +58 -17
  160. package/dist/render-system-extract.d.ts.map +1 -1
  161. package/dist/render-system.d.ts +17 -2
  162. package/dist/render-system.d.ts.map +1 -1
  163. package/dist/renderer.d.ts +43 -0
  164. package/dist/renderer.d.ts.map +1 -0
  165. package/dist/scene/render-scene.d.ts +14 -0
  166. package/dist/scene/render-scene.d.ts.map +1 -1
  167. package/dist/shadow-atlas.d.ts +3 -3
  168. package/dist/shadow-atlas.d.ts.map +1 -1
  169. package/dist/ssao-buffers.d.ts +3 -0
  170. package/dist/ssao-buffers.d.ts.map +1 -1
  171. package/dist/targets/contracts.d.ts +66 -0
  172. package/dist/targets/contracts.d.ts.map +1 -0
  173. package/dist/targets/graph-projection.d.ts +29 -0
  174. package/dist/targets/graph-projection.d.ts.map +1 -0
  175. package/dist/targets/material-source.d.ts +34 -0
  176. package/dist/targets/material-source.d.ts.map +1 -0
  177. package/dist/targets/owner.d.ts +32 -0
  178. package/dist/targets/owner.d.ts.map +1 -0
  179. package/dist/targets/physical.d.ts +18 -0
  180. package/dist/targets/physical.d.ts.map +1 -0
  181. package/dist/targets/readback.d.ts +39 -0
  182. package/dist/targets/readback.d.ts.map +1 -0
  183. package/dist/temporal/index.mjs +3 -3
  184. package/dist/typed-render-graph-primitives.d.ts +1 -1
  185. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  186. package/dist/typed-shadow-passes.d.ts +1 -1
  187. package/dist/typed-shadow-passes.d.ts.map +1 -1
  188. package/dist/volume/passes.d.ts +2 -2
  189. package/dist/volume/passes.d.ts.map +1 -1
  190. package/package.json +20 -20
  191. package/src/__tests__/bloom-exact-zero.unit.test.ts +48 -19
  192. package/src/__tests__/bloom-lifecycle.integration.test.ts +41 -13
  193. package/src/__tests__/camera-target-consumption.unit.test.ts +53 -0
  194. package/src/__tests__/cluster-binner.unit.test.ts +35 -0
  195. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -2
  196. package/src/__tests__/cube-camera-scheduler.unit.test.ts +70 -0
  197. package/src/__tests__/cube-camera-single-submit.perf.test.ts +75 -0
  198. package/src/__tests__/cube-camera-view-matrices.unit.test.ts +41 -0
  199. package/src/__tests__/cube-camera-vocabulary.unit.test.ts +47 -0
  200. package/src/__tests__/cube-camera.integration.test.ts +42 -0
  201. package/src/__tests__/device-feature-admission.unit.test.ts +73 -0
  202. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -3
  203. package/src/__tests__/docs-gate-green.unit.test.ts +38 -0
  204. package/src/__tests__/factory-contract.integration.test.ts +255 -29
  205. package/src/__tests__/fog-component.unit.test.ts +67 -0
  206. package/src/__tests__/fog.integration.test.ts +86 -0
  207. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +37 -0
  208. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +10 -9
  209. package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +17 -1
  210. package/src/__tests__/gpu-driven-production.integration.test.ts +16 -17
  211. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +12 -4
  212. package/src/__tests__/gpu-pass-timing-browser-runner.ts +281 -0
  213. package/src/__tests__/gpu-pass-timing-coexistence.integration.test.ts +80 -0
  214. package/src/__tests__/gpu-pass-timing-contract.unit.test.ts +243 -0
  215. package/src/__tests__/gpu-pass-timing-exact-zero.unit.test.ts +131 -0
  216. package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +230 -0
  217. package/src/__tests__/gpu-pass-timing-observation.unit.test.ts +233 -0
  218. package/src/__tests__/gpu-pass-timing-session.unit.test.ts +438 -0
  219. package/src/__tests__/gpu-pass-timing.browser.test.ts +26 -0
  220. package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +125 -0
  221. package/src/__tests__/hdrp-group2-visibility.unit.test.ts +24 -0
  222. package/src/__tests__/instances-culling.integration.test.ts +94 -0
  223. package/src/__tests__/instances-derived-bounds.unit.test.ts +118 -0
  224. package/src/__tests__/material-observation.integration.test.ts +101 -0
  225. package/src/__tests__/pbr-view-layout.unit.test.ts +16 -0
  226. package/src/__tests__/point-shadow-inspection.unit.test.ts +60 -0
  227. package/src/__tests__/public-surface.test-d.ts +10 -0
  228. package/src/__tests__/reflection-probe-authoring.unit.test.ts +71 -0
  229. package/src/__tests__/reflection-probe-filter.unit.test.ts +54 -0
  230. package/src/__tests__/reflection-probe-ibl-topology.unit.test.ts +45 -0
  231. package/src/__tests__/reflection-probe-pass-encode.integration.test.ts +101 -0
  232. package/src/__tests__/reflection-probe-performance.perf.test.ts +60 -0
  233. package/src/__tests__/reflection-probe-recovery.integration.test.ts +55 -0
  234. package/src/__tests__/reflection-probe-selection.unit.test.ts +46 -0
  235. package/src/__tests__/render-error-code-owner.test-d.ts +18 -3
  236. package/src/__tests__/render-feature-docs.unit.test.ts +1 -1
  237. package/src/__tests__/render-target-admission.unit.test.ts +80 -0
  238. package/src/__tests__/render-target-graph-projection.unit.test.ts +102 -0
  239. package/src/__tests__/render-target-inspection.unit.test.ts +52 -0
  240. package/src/__tests__/render-target-material-source.test-d.ts +30 -0
  241. package/src/__tests__/render-target-material-source.unit.test.ts +97 -0
  242. package/src/__tests__/render-target-owner-placement.unit.test.ts +203 -0
  243. package/src/__tests__/render-target-owner.unit.test.ts +122 -0
  244. package/src/__tests__/render-target-probe-soak.perf.test.ts +94 -0
  245. package/src/__tests__/render-target-public-schema.json +107 -0
  246. package/src/__tests__/render-target-public-schema.unit.test.ts +91 -0
  247. package/src/__tests__/render-target-public-surface.test-d.ts +83 -0
  248. package/src/__tests__/render-target-readback.integration.test.ts +90 -0
  249. package/src/__tests__/render-target-recovery.integration.test.ts +85 -0
  250. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +48 -0
  251. package/src/__tests__/renderer-lifecycle.integration.test.ts +14 -0
  252. package/src/__tests__/shader-stage-surface.unit.test.ts +19 -4
  253. package/src/__tests__/skin-motion-regression.unit.test.ts +132 -0
  254. package/src/__tests__/skinned-shadow-caster.test.ts +11 -2
  255. package/src/__tests__/standard-cluster-capability.integration.test.ts +63 -0
  256. package/src/__tests__/standard-cluster-transport.unit.test.ts +121 -0
  257. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +232 -0
  258. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +8 -5
  259. package/src/__tests__/standard-lighting-inspection.integration.test.ts +138 -0
  260. package/src/__tests__/standard-lighting-ssot.unit.test.ts +18 -0
  261. package/src/__tests__/standard-lighting-write.unit.test.ts +377 -0
  262. package/src/__tests__/standard-lighting.integration.test.ts +67 -0
  263. package/src/__tests__/standard-pipeline.dawn.test.ts +206 -5
  264. package/src/__tests__/standard-pipeline.integration.test.ts +181 -150
  265. package/src/__tests__/standard-probe-binding.unit.test.ts +25 -0
  266. package/src/__tests__/standard-profile-oracle.unit.test.ts +23 -38
  267. package/src/__tests__/typed-pipeline-topology.unit.test.ts +395 -14
  268. package/src/__tests__/urp-pipeline-targets.unit.test.ts +2 -2
  269. package/src/__tests__/visibility-resolver.unit.test.ts +15 -0
  270. package/src/assembly/device-feature-admission.ts +73 -0
  271. package/src/assembly/directional-shadow-inspection.ts +122 -0
  272. package/src/assembly/factory.ts +877 -286
  273. package/src/assembly/host-contract.ts +25 -0
  274. package/src/assembly/render-target-host.ts +847 -0
  275. package/src/assets/asset-decoders.ts +1 -1
  276. package/src/assets/render-asset-port.ts +7 -1
  277. package/src/capture/cube-views.ts +69 -0
  278. package/src/capture/scheduler.ts +265 -0
  279. package/src/components/__tests__/schema-contract.unit.test.ts +12 -0
  280. package/src/components/__tests__/schema-parity.unit.test.ts +9 -0
  281. package/src/components/camera.ts +4 -0
  282. package/src/components/cube-camera.ts +52 -0
  283. package/src/components/directional-light.ts +22 -2
  284. package/src/components/directional-shadow-filter.ts +57 -0
  285. package/src/components/index.ts +2 -0
  286. package/src/components/light-helpers.ts +81 -7
  287. package/src/components/reflection-probe.ts +49 -0
  288. package/src/environment/frame.ts +6 -24
  289. package/src/environment/lifecycle.ts +12 -0
  290. package/src/errors/render.ts +286 -142
  291. package/src/extract/directional-shadow-projection.ts +61 -0
  292. package/src/extract/environment.ts +57 -0
  293. package/src/extract/visibility.ts +25 -1
  294. package/src/features/fullscreen.ts +3 -0
  295. package/src/features/targets.ts +4 -1
  296. package/src/features/types.ts +10 -0
  297. package/src/fullscreen-post-process-pass.ts +43 -2
  298. package/src/gpu-driven/batch-topology.ts +1 -0
  299. package/src/gpu-driven/production-raster.ts +1 -3
  300. package/src/gpu-scene.ts +8 -1
  301. package/src/hdrp-buffers.ts +165 -59
  302. package/src/ibl/IblPipelineCache.ts +11 -0
  303. package/src/ibl/kernel-cache.ts +88 -0
  304. package/src/index.ts +148 -0
  305. package/src/inspection-types.ts +56 -0
  306. package/src/instances-derived-bounds.ts +171 -0
  307. package/src/light-buffer-layout.ts +20 -5
  308. package/src/mesh-material-bindings.ts +132 -0
  309. package/src/pbr-pipeline.ts +106 -17
  310. package/src/pipeline/standard-forward-lane.ts +46 -16
  311. package/src/pipeline/standard-lighting/errors.ts +6 -0
  312. package/src/pipeline/standard-lighting/graph.ts +157 -0
  313. package/src/pipeline/standard-lighting/inspection.ts +88 -0
  314. package/src/pipeline/standard-lighting/layout.ts +31 -0
  315. package/src/pipeline/standard-lighting/light-frame.ts +34 -0
  316. package/src/pipeline/standard-lighting/membership.ts +43 -0
  317. package/src/pipeline/standard-lighting/prepare.ts +37 -0
  318. package/src/pipeline/standard-lighting/topology.ts +120 -0
  319. package/src/pipeline/standard-lighting/transport.ts +77 -0
  320. package/src/pipeline/standard-pipeline.ts +122 -193
  321. package/src/pipeline/standard-post.ts +26 -7
  322. package/src/pipeline/standard-profile.ts +17 -47
  323. package/src/pipeline-spec.ts +84 -21
  324. package/src/point-shadow-inspection.ts +55 -0
  325. package/src/record/__tests__/temporal-payload.unit.test.ts +42 -1
  326. package/src/record/__tests__/transparent-group2-selection.unit.test.ts +73 -0
  327. package/src/record/__tests__/view-ubo-layout.unit.test.ts +40 -0
  328. package/src/record/frame-lighting.ts +367 -427
  329. package/src/record/frame-snapshot.ts +35 -27
  330. package/src/record/frame-targets.ts +17 -0
  331. package/src/record/frame.ts +261 -74
  332. package/src/record/gpu-pass-timing/contract.ts +180 -0
  333. package/src/record/gpu-pass-timing/errors.ts +34 -0
  334. package/src/record/gpu-pass-timing/index.ts +37 -0
  335. package/src/record/gpu-pass-timing/parser.ts +97 -0
  336. package/src/record/gpu-pass-timing/session.ts +938 -0
  337. package/src/record/gpu-timing.ts +21 -12
  338. package/src/record/main-pass-geometry.ts +120 -80
  339. package/src/record/main-pass-material.ts +95 -9
  340. package/src/record/main-pass-sprite-draws.ts +54 -25
  341. package/src/record/main-pass.ts +71 -15
  342. package/src/record/render-context.ts +72 -0
  343. package/src/record/shadow-pass.ts +17 -28
  344. package/src/record/skybox-post-pass.ts +20 -4
  345. package/src/record/typed-frame-graph.ts +893 -44
  346. package/src/record/view-ubo.ts +63 -28
  347. package/src/reflection/filter.ts +81 -0
  348. package/src/reflection/gpu-table.ts +44 -0
  349. package/src/reflection/projection.ts +281 -0
  350. package/src/render-contract.ts +76 -5
  351. package/src/render-graph-primitives.ts +9 -4
  352. package/src/render-pipeline.ts +117 -2
  353. package/src/render-system-extract.ts +557 -100
  354. package/src/render-system.ts +1095 -66
  355. package/src/renderer.ts +222 -0
  356. package/src/scene/render-scene.ts +115 -9
  357. package/src/shadow-atlas.ts +5 -5
  358. package/src/ssao-buffers.ts +9 -2
  359. package/src/targets/contracts.ts +182 -0
  360. package/src/targets/graph-projection.ts +169 -0
  361. package/src/targets/material-source.ts +143 -0
  362. package/src/targets/owner.ts +214 -0
  363. package/src/targets/physical.ts +18 -0
  364. package/src/targets/readback.ts +153 -0
  365. package/src/transmission/__tests__/standard-transmission.dawn.test.ts +59 -20
  366. package/src/typed-render-graph-primitives.ts +5 -3
  367. package/src/typed-shadow-passes.ts +46 -40
  368. package/src/volume/passes.ts +15 -9
  369. package/dist/chunk-4XINDLAY.mjs.map +0 -1
  370. package/dist/chunk-CDTWTHZR.mjs.map +0 -1
  371. package/dist/chunk-M2MP4ZOU.mjs.map +0 -1
  372. package/dist/chunk-TBQJOK2L.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ssao-buffers.d.ts","sourceRoot":"","sources":["../src/ssao-buffers.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAInE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAiB3C,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAU,GAAG,SAAS,YAAY,EAAE,CAuB5E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAU,GAAG,YAAY,CAShE;AAiBD,eAAO,MAAM,6BAA6B,MAAiC,CAAC;AAC5E,eAAO,MAAM,kBAAkB,MAAgB,CAAC;AAYhD,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAID;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,mBAAmB,GAC3B,qBAAqB,GAAG,IAAI,CAyE9B;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,oFAAoF;IACpF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAID;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,WAAW,GAAG,IAAI,CAwGvF"}
1
+ {"version":3,"file":"ssao-buffers.d.ts","sourceRoot":"","sources":["../src/ssao-buffers.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAInE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAiB3C,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAU,GAAG,SAAS,YAAY,EAAE,CAuB5E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAU,GAAG,YAAY,CAShE;AAiBD,eAAO,MAAM,6BAA6B,MAAiC,CAAC;AAC5E,eAAO,MAAM,kBAAkB,MAAgB,CAAC;AAYhD,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAID;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,mBAAmB,GAC3B,qBAAqB,GAAG,IAAI,CA2E9B;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC/C,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,oFAAoF;IACpF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAID;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,WAAW,GAAG,IAAI,CA0GvF"}
@@ -0,0 +1,66 @@
1
+ import type { RenderError } from '../errors/render';
2
+ import type { RenderResult } from '../render-contract';
3
+ export type RenderTargetFormat = 'rgba16float' | 'rgba8unorm' | 'rgba8unorm-srgb';
4
+ export type RenderTargetShape = '2d' | 'cube';
5
+ export type RenderTargetMipLevels = 1 | 'full';
6
+ export type RenderTargetSampleCount = 1 | 4;
7
+ export type RenderTargetDepthFormat = 'depth24plus-stencil8' | 'depth32float';
8
+ export interface RenderTargetDescriptor {
9
+ readonly shape: RenderTargetShape;
10
+ readonly width: number;
11
+ readonly height: number;
12
+ readonly format: RenderTargetFormat;
13
+ readonly mipLevels: RenderTargetMipLevels;
14
+ readonly sampleCount: RenderTargetSampleCount;
15
+ readonly depth?: RenderTargetDepthFormat;
16
+ readonly sampled: boolean;
17
+ readonly readback: boolean;
18
+ }
19
+ declare const RenderTargetBrand: unique symbol;
20
+ declare const RenderTargetTextureSourceBrand: unique symbol;
21
+ declare const RenderTargetReadbackTicketBrand: unique symbol;
22
+ /** Opaque logical target lease owned by one Renderer. */
23
+ export interface RenderTarget {
24
+ readonly [RenderTargetBrand]: 'RenderTarget';
25
+ }
26
+ export type RenderTargetTextureAspect = 'color';
27
+ export interface RenderTargetTextureSourceOptions {
28
+ readonly aspect: RenderTargetTextureAspect;
29
+ readonly dimension: RenderTargetShape;
30
+ readonly mipLevel: number;
31
+ }
32
+ /** Renderer-local runtime material source; it is not an asset handle. */
33
+ export interface RenderTargetTextureSource {
34
+ readonly [RenderTargetTextureSourceBrand]: 'RenderTargetTextureSource';
35
+ }
36
+ export interface RenderTargetReadbackRequest {
37
+ readonly mipLevel: number;
38
+ /** Cube array layer to copy; 2D targets accept only the omitted form. */
39
+ readonly face?: number;
40
+ }
41
+ /** One-shot readback request bound to a future matching FrameReceipt. */
42
+ export interface RenderTargetReadbackTicket {
43
+ readonly [RenderTargetReadbackTicketBrand]: 'RenderTargetReadbackTicket';
44
+ }
45
+ /** Bytes released by observe after the ticket's matching frame completes. */
46
+ export interface RenderTargetReadbackData {
47
+ readonly ticket: RenderTargetReadbackTicket;
48
+ readonly bytes: Uint8Array;
49
+ readonly frameId: number;
50
+ readonly deviceGeneration: number;
51
+ readonly mipLevel: number;
52
+ readonly face?: number;
53
+ readonly bytesPerRow: number;
54
+ readonly byteLength: number;
55
+ }
56
+ export interface RenderTargetAdmissionLimits {
57
+ readonly maxTextureDimension2D: number;
58
+ readonly maxBytesPerTarget: number;
59
+ readonly renderableFormats: readonly RenderTargetFormat[];
60
+ readonly sampleCounts: readonly RenderTargetSampleCount[];
61
+ readonly depthFormats: readonly RenderTargetDepthFormat[];
62
+ }
63
+ /** Validate descriptor facts before a renderer allocates a physical target. */
64
+ export declare function admitRenderTargetDescriptor(descriptor: RenderTargetDescriptor, limits: RenderTargetAdmissionLimits): RenderResult<RenderTargetDescriptor, RenderError>;
65
+ export {};
66
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/targets/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { GraphTexture, GraphTextureView, GraphTextureViewDescriptor, RenderGraphBuilder, RenderGraphFrame } from '@forgeax/engine-render-graph';
2
+ import type { Texture, TextureView } from '@forgeax/engine-rhi';
3
+ import type { RenderError } from '../errors/render';
4
+ import type { RenderResult } from '../render-contract';
5
+ import type { RenderTarget, RenderTargetDescriptor } from './contracts';
6
+ export interface RenderTargetGraphInput {
7
+ readonly target: RenderTarget;
8
+ readonly generation: number;
9
+ readonly descriptor: RenderTargetDescriptor;
10
+ readonly texture: Texture;
11
+ readonly view: TextureView;
12
+ readonly resolveView?: TextureView | undefined;
13
+ }
14
+ export interface RenderTargetGraphSubresource {
15
+ readonly mipLevel?: number;
16
+ readonly face?: number;
17
+ }
18
+ export interface RenderTargetGraphProjection {
19
+ readonly ownership: 'imported';
20
+ readonly generation: number;
21
+ readonly texture: GraphTexture;
22
+ readonly view: GraphTextureView;
23
+ readonly sampleView: GraphTextureView;
24
+ readonly resolveView?: GraphTextureView | undefined;
25
+ readonly viewDescriptor: GraphTextureViewDescriptor;
26
+ readonly usage: readonly ('sampled-read' | 'copy-src')[];
27
+ }
28
+ export declare function projectRenderTargetGraph<FrameCtx extends RenderGraphFrame>(graph: RenderGraphBuilder<FrameCtx>, input: RenderTargetGraphInput, subresource?: RenderTargetGraphSubresource): RenderResult<RenderTargetGraphProjection, RenderError>;
29
+ //# sourceMappingURL=graph-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-projection.d.ts","sourceRoot":"","sources":["../../src/targets/graph-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,EAC1B,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAiB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,0BAA0B,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,CAAC;CAC1D;AAsED,wBAAgB,wBAAwB,CAAC,QAAQ,SAAS,gBAAgB,EACxE,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EACnC,KAAK,EAAE,sBAAsB,EAC7B,WAAW,GAAE,4BAAiC,GAC7C,YAAY,CAAC,2BAA2B,EAAE,WAAW,CAAC,CA0DxD"}
@@ -0,0 +1,34 @@
1
+ import type { TextureView } from '@forgeax/engine-rhi';
2
+ import type { RenderError } from '../errors/render';
3
+ import type { RenderResult } from '../render-contract';
4
+ import type { RenderTarget, RenderTargetDescriptor, RenderTargetTextureSource, RenderTargetTextureSourceOptions } from './contracts';
5
+ export interface RenderTargetMaterialSourceView {
6
+ readonly dimension: RenderTargetTextureSourceOptions['dimension'];
7
+ readonly mipLevel: number;
8
+ readonly resolveRequired: boolean;
9
+ }
10
+ export interface RenderTargetMaterialSourceBinding {
11
+ readonly source: RenderTargetTextureSource;
12
+ readonly target: RenderTarget;
13
+ readonly generation: number;
14
+ readonly shape: RenderTargetDescriptor['shape'];
15
+ readonly format: RenderTargetDescriptor['format'];
16
+ readonly view: RenderTargetMaterialSourceView;
17
+ /** Renderer-local physical view, present only for the active generation. */
18
+ readonly textureView?: TextureView;
19
+ }
20
+ export interface RenderTargetMaterialSourceExpectation {
21
+ readonly target: RenderTarget;
22
+ readonly generation: number;
23
+ readonly shape: RenderTargetDescriptor['shape'];
24
+ readonly format: RenderTargetDescriptor['format'];
25
+ readonly dimension: RenderTargetTextureSourceOptions['dimension'];
26
+ readonly mipLevel: number;
27
+ }
28
+ /** Resolve a source only inside the renderer-owned material projection. */
29
+ export declare function resolveRenderTargetMaterialSource(source: RenderTargetTextureSource): RenderTargetMaterialSourceBinding | undefined;
30
+ export declare function createRenderTargetMaterialSource(target: RenderTarget, descriptor: RenderTargetDescriptor, options: RenderTargetTextureSourceOptions & {
31
+ readonly generation: number;
32
+ }): RenderResult<RenderTargetMaterialSourceBinding, RenderError>;
33
+ export declare function validateRenderTargetMaterialSource(binding: RenderTargetMaterialSourceBinding, expected: RenderTargetMaterialSourceExpectation): RenderResult<void, RenderError>;
34
+ //# sourceMappingURL=material-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-source.d.ts","sourceRoot":"","sources":["../../src/targets/material-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,EAAE,gCAAgC,CAAC,WAAW,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,gCAAgC,CAAC,WAAW,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAQD,2EAA2E;AAC3E,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,yBAAyB,GAChC,iCAAiC,GAAG,SAAS,CAE/C;AAaD,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,sBAAsB,EAClC,OAAO,EAAE,gCAAgC,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1E,YAAY,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAgC9D;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,iCAAiC,EAC1C,QAAQ,EAAE,qCAAqC,GAC9C,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAqCjC"}
@@ -0,0 +1,32 @@
1
+ import type { RenderError } from '../errors/render';
2
+ import type { RenderResult } from '../render-contract';
3
+ import type { RenderTarget, RenderTargetDescriptor } from './contracts';
4
+ export type RenderTargetOwnerState = 'uninitialized' | 'candidate' | 'active' | 'rebuilding' | 'destroyed';
5
+ export interface RenderTargetPhysicalCandidate {
6
+ readonly generation: number;
7
+ readonly descriptor: RenderTargetDescriptor;
8
+ }
9
+ export interface RenderTargetOwnerInspection {
10
+ readonly token: RenderTarget;
11
+ readonly state: RenderTargetOwnerState;
12
+ readonly generation: number;
13
+ readonly descriptor: RenderTargetDescriptor;
14
+ readonly candidate?: RenderTargetPhysicalCandidate;
15
+ }
16
+ export interface RenderTargetOwnerOptions {
17
+ readonly rendererId: symbol;
18
+ readonly initialGeneration: number;
19
+ }
20
+ export interface RenderTargetOwner {
21
+ create(descriptor: RenderTargetDescriptor): RenderResult<RenderTarget, RenderError>;
22
+ stage(target: RenderTarget, descriptor?: RenderTargetDescriptor): RenderResult<RenderTargetPhysicalCandidate, RenderError>;
23
+ promote(target: RenderTarget, generation: number): RenderResult<void, RenderError>;
24
+ rejectCandidate(target: RenderTarget, generation: number, stage: 'allocation' | 'compile' | 'write' | 'submit'): RenderResult<void, RenderError>;
25
+ beginRecovery(target: RenderTarget, generation: number): RenderResult<void, RenderError>;
26
+ finishRecovery(target: RenderTarget): RenderResult<void, RenderError>;
27
+ retire(target: RenderTarget, generation: number): RenderResult<void, RenderError>;
28
+ destroy(target: RenderTarget): RenderResult<void, RenderError>;
29
+ inspect(target: RenderTarget): RenderResult<RenderTargetOwnerInspection, RenderError>;
30
+ }
31
+ export declare function createRenderTargetOwner(options: RenderTargetOwnerOptions): RenderTargetOwner;
32
+ //# sourceMappingURL=owner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../../src/targets/owner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,MAAM,sBAAsB,GAC9B,eAAe,GACf,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,WAAW,CAAC;AAEhB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,6BAA6B,CAAC;CACpD;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,UAAU,EAAE,sBAAsB,GAAG,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACpF,KAAK,CACH,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,sBAAsB,GAClC,YAAY,CAAC,6BAA6B,EAAE,WAAW,CAAC,CAAC;IAC5D,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnF,eAAe,CACb,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GACnD,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACzF,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACtE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAClF,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/D,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;CACvF;AAgCD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CAsI5F"}
@@ -0,0 +1,18 @@
1
+ import type { Texture, TextureView } from '@forgeax/engine-rhi';
2
+ import type { RenderTargetDescriptor } from './contracts';
3
+ /** Renderer-private physical storage for one logical target generation. */
4
+ export interface RenderTargetPhysical {
5
+ readonly generation: number;
6
+ readonly descriptor: RenderTargetDescriptor;
7
+ readonly texture: Texture;
8
+ readonly view: TextureView;
9
+ readonly mipViews: readonly TextureView[];
10
+ readonly colorTextures: readonly Texture[];
11
+ readonly faceViews: readonly TextureView[];
12
+ readonly depthTextures: readonly Texture[];
13
+ readonly depthViews: readonly TextureView[];
14
+ readonly resolveTexture?: Texture;
15
+ readonly resolveView: TextureView;
16
+ readonly resolveFaceViews: readonly TextureView[];
17
+ }
18
+ //# sourceMappingURL=physical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physical.d.ts","sourceRoot":"","sources":["../../src/targets/physical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,SAAS,OAAO,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,WAAW,EAAE,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,SAAS,OAAO,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,SAAS,WAAW,EAAE,CAAC;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,WAAW,EAAE,CAAC;CACnD"}
@@ -0,0 +1,39 @@
1
+ import type { RenderError } from '../errors/render';
2
+ import type { RenderResult } from '../render-contract';
3
+ import type { RenderTarget } from './contracts';
4
+ export interface RenderTargetReadbackReceipt {
5
+ readonly frameId: number;
6
+ readonly deviceGeneration: number;
7
+ }
8
+ export interface RenderTargetReadbackTicketInput {
9
+ readonly frameId?: number;
10
+ deviceGeneration: number;
11
+ readonly mipLevel: number;
12
+ readonly face?: number;
13
+ readonly width: number;
14
+ readonly height: number;
15
+ readonly bytesPerPixel: number;
16
+ }
17
+ export interface RenderTargetReadbackTicket {
18
+ readonly target: RenderTarget;
19
+ frameId: number | undefined;
20
+ deviceGeneration: number;
21
+ readonly mipLevel: number;
22
+ readonly face?: number;
23
+ readonly width: number;
24
+ readonly height: number;
25
+ readonly bytesPerRow: number;
26
+ readonly byteLength: number;
27
+ consumed: boolean;
28
+ }
29
+ export interface RenderTargetReadbackResult {
30
+ readonly bytes: Uint8Array;
31
+ readonly frameId: number;
32
+ readonly deviceGeneration: number;
33
+ readonly mipLevel: number;
34
+ readonly face?: number;
35
+ }
36
+ export declare function bindRenderTargetReadbackTicket(ticket: RenderTargetReadbackTicket, receipt: RenderTargetReadbackReceipt): RenderResult<void, RenderError>;
37
+ export declare function createRenderTargetReadbackTicket(target: RenderTarget, input: RenderTargetReadbackTicketInput): RenderResult<RenderTargetReadbackTicket, RenderError>;
38
+ export declare function completeRenderTargetReadback(ticket: RenderTargetReadbackTicket, receipt: RenderTargetReadbackReceipt, bytes: Uint8Array): RenderResult<RenderTargetReadbackResult, RenderError>;
39
+ //# sourceMappingURL=readback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readback.d.ts","sourceRoot":"","sources":["../../src/targets/readback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAiBD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,0BAA0B,EAClC,OAAO,EAAE,2BAA2B,GACnC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAQjC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,+BAA+B,GACrC,YAAY,CAAC,0BAA0B,EAAE,WAAW,CAAC,CA0CvD;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,0BAA0B,EAClC,OAAO,EAAE,2BAA2B,EACpC,KAAK,EAAE,UAAU,GAChB,YAAY,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAgCvD"}
@@ -1,8 +1,8 @@
1
- export { addStandardSceneDataPass, addTaaResolvePass, aggregateTemporalDemand, createStandardSceneDataTarget, describeTemporalDemand, standardTemporalLaneAdmission, standardTemporalPostOrder } from '../chunk-4XINDLAY.mjs';
1
+ export { addStandardSceneDataPass, addTaaResolvePass, aggregateTemporalDemand, createStandardSceneDataTarget, describeTemporalDemand, standardTemporalLaneAdmission, standardTemporalPostOrder } from '../chunk-5YADUCA7.mjs';
2
2
  import '../chunk-RXZ3RGOU.mjs';
3
- export { SCENE_DATA_TEMPORAL_V1_DESCRIPTOR, SCENE_DATA_TEMPORAL_V1_SCHEMA, createSceneDataCatalog, isSceneDataTarget, registerSceneDataTarget, sceneDataError, sceneDataTargetAsAttachment, sceneDataTargetOwner, sceneDataTokenMismatch } from '../chunk-TBQJOK2L.mjs';
3
+ export { SCENE_DATA_TEMPORAL_V1_DESCRIPTOR, SCENE_DATA_TEMPORAL_V1_SCHEMA, createSceneDataCatalog, isSceneDataTarget, registerSceneDataTarget, sceneDataError, sceneDataTargetAsAttachment, sceneDataTargetOwner, sceneDataTokenMismatch } from '../chunk-6OPXDQ2E.mjs';
4
4
  import '../chunk-VFPLTKCU.mjs';
5
5
  export { TEMPORAL_JITTER_SAMPLE_COUNT, TemporalFrameCoordinator, classifySceneDataCoverage, createTemporalCoverage, projectTemporalView, scanSceneDataCoverage, snapshotSubmittedTemporalView, temporalJitterSample, temporalViewId } from '../chunk-PCHBPYML.mjs';
6
- import '../chunk-M2MP4ZOU.mjs';
6
+ import '../chunk-BXBQQKFQ.mjs';
7
7
  //# sourceMappingURL=index.mjs.map
8
8
  //# sourceMappingURL=index.mjs.map
@@ -80,6 +80,6 @@ export declare function addTypedCompositePostEffects(graph: RenderGraphBuilder<R
80
80
  }): Result<void, RenderGraphError>;
81
81
  export declare function addTypedOutputTransformPass(graph: RenderGraphBuilder<RenderPipelineFrame>, input: RenderPipelineTarget, output: RenderPipelineTarget, options?: {
82
82
  readonly outputOnly?: boolean;
83
- readonly outputTransform?: boolean;
83
+ readonly dither?: boolean;
84
84
  }): Result<void, RenderGraphError>;
85
85
  //# sourceMappingURL=typed-render-graph-primitives.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typed-render-graph-primitives.d.ts","sourceRoot":"","sources":["../src/typed-render-graph-primitives.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typed-render-graph-primitives.d.ts","sourceRoot":"","sources":["../src/typed-render-graph-primitives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAEjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAM,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAyB1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,iCAAiC,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAyB1F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,QAAQ,CAOzE;AAkCD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,KAAK,EAAE,oBAAoB,GAC1B,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAahC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS,CAAC;IAC/D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS,CAAC;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;IAC5E,QAAQ,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,iCAAiC,GAAG,SAAS,CAAC;CACpE;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,OAAO,EAAE,qBAAqB,GAC7B,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAqHhC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,MAAM,EAAE,oBAAoB,EAC5B,UAAU,EAAE,mBAAmB,GAC9B,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAyBhC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;CACtC;AAED,sFAAsF;AACtF,eAAO,MAAM,sBAAsB;;;;;CAKzB,CAAC;AAEX,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,OAAO,EAAE,iBAAiB,GACzB,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CA6DhC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;CACxC;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAwEhC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS;QAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;KACvC,EAAE,CAAC;IACJ,wDAAwD;IACxD,QAAQ,CAAC,eAAe,CAAC,EACrB,CAAC,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,KAAK,UAAU,GAAG,SAAS,CAAC,GAC5D,SAAS,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,eAAe,EAAE,oBAAoB,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;CAC9C;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,OAAO,EAAE,2BAA2B,GACnC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAuFhC;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,OAAO,EAAE,0BAA0B,GAClC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAuDhC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxD,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAgDhC;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACzE,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAwBhC"}
@@ -3,7 +3,7 @@ import { type Result } from '@forgeax/engine-types';
3
3
  import type { RenderPipelineFrame, RenderPipelineTopology } from './render-pipeline';
4
4
  import { type RenderPipelineTarget } from './render-pipeline';
5
5
  export interface TypedShadowTargets {
6
- readonly directional: RenderPipelineTarget;
6
+ readonly directional?: RenderPipelineTarget | undefined;
7
7
  readonly spot: RenderPipelineTarget;
8
8
  readonly point?: RenderPipelineTarget | undefined;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"typed-shadow-passes.d.ts","sourceRoot":"","sources":["../src/typed-shadow-passes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AASxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAG1F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACnD;AAwBD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,QAAQ,EAAE,sBAAsB,GAC/B,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAwH9C"}
1
+ {"version":3,"file":"typed-shadow-passes.d.ts","sourceRoot":"","sources":["../src/typed-shadow-passes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AASxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAG1F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACnD;AAwBD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,QAAQ,EAAE,sBAAsB,GAC/B,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CA8H9C"}
@@ -26,13 +26,13 @@ export interface VolumetricFogPassInputs {
26
26
  readonly density: GraphTextureView;
27
27
  readonly params: GraphBuffer;
28
28
  readonly view: GraphBuffer;
29
- readonly directionalShadow: GraphTextureView;
29
+ readonly directionalShadow?: GraphTextureView;
30
30
  readonly spotShadow: GraphTextureView;
31
31
  readonly pointLights: GraphBuffer;
32
32
  readonly spotLights: GraphBuffer;
33
33
  readonly selectedLightKind: 'directional' | 'point' | 'spot';
34
34
  readonly projector?: GraphTextureView;
35
35
  }
36
- export declare function addAuthoredVolumetricFogPasses(graph: RenderGraphBuilder<RenderPipelineFrame>, topology: RenderPipelineTopology, linearHdr: RenderPipelineTarget, sceneDepth: GraphTextureView, directionalShadow: GraphTextureView, spotShadow: GraphTextureView): Result<void, RenderGraphError>;
36
+ export declare function addAuthoredVolumetricFogPasses(graph: RenderGraphBuilder<RenderPipelineFrame>, topology: RenderPipelineTopology, linearHdr: RenderPipelineTarget, sceneDepth: GraphTextureView, directionalShadow: GraphTextureView | undefined, spotShadow: GraphTextureView): Result<void, RenderGraphError>;
37
37
  export declare function addVolumetricFogPasses(graph: RenderGraphBuilder<RenderPipelineFrame>, inputs: VolumetricFogPassInputs): Result<void, RenderGraphError>;
38
38
  //# sourceMappingURL=passes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"passes.d.ts","sourceRoot":"","sources":["../../src/volume/passes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAWtC,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAcxD,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQ1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,yBAAyB,uFAK5B,CAAC;AACX,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC,CAAC;CACrF;AACD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE;IACd,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,GACA,qBAAqB,CAevB;AACD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC;AAqLD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,oBAAoB,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,iBAAiB,EAAE,gBAAgB,EACnC,UAAU,EAAE,gBAAgB,GAC3B,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CA2BhC;AACD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CA2WhC"}
1
+ {"version":3,"file":"passes.d.ts","sourceRoot":"","sources":["../../src/volume/passes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAWtC,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAcxD,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQ1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,yBAAyB,uFAK5B,CAAC;AACX,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC,CAAC;CACrF;AACD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE;IACd,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,GACA,qBAAqB,CAevB;AACD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC;AAqLD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,oBAAoB,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,iBAAiB,EAAE,gBAAgB,GAAG,SAAS,EAC/C,UAAU,EAAE,gBAAgB,GAC3B,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CA2BhC;AACD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAiXhC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeax/engine-render",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "description": "Canonical ECS render schemas and renderer boundary.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -37,27 +37,27 @@
37
37
  "LICENSE"
38
38
  ],
39
39
  "dependencies": {
40
- "@forgeax/engine-assets-runtime": "0.1.20",
41
- "@forgeax/engine-audio-webaudio": "0.1.20",
42
- "@forgeax/engine-codec": "0.1.20",
43
- "@forgeax/engine-ecs": "0.1.20",
44
- "@forgeax/engine-geometry": "0.1.20",
45
- "@forgeax/engine-graphics-extras": "0.1.20",
46
- "@forgeax/engine-math": "0.1.20",
47
- "@forgeax/engine-pack": "0.1.20",
48
- "@forgeax/engine-plugin": "0.1.20",
49
- "@forgeax/engine-profiler": "0.1.20",
50
- "@forgeax/engine-render-graph": "0.1.20",
51
- "@forgeax/engine-rhi": "0.1.20",
52
- "@forgeax/engine-scene": "0.1.20",
53
- "@forgeax/engine-shader": "0.1.20",
54
- "@forgeax/engine-skinning": "0.1.20",
55
- "@forgeax/engine-types": "0.1.20"
40
+ "@forgeax/engine-assets-runtime": "0.1.21",
41
+ "@forgeax/engine-audio-webaudio": "0.1.21",
42
+ "@forgeax/engine-codec": "0.1.21",
43
+ "@forgeax/engine-ecs": "0.1.21",
44
+ "@forgeax/engine-geometry": "0.1.21",
45
+ "@forgeax/engine-graphics-extras": "0.1.21",
46
+ "@forgeax/engine-math": "0.1.21",
47
+ "@forgeax/engine-pack": "0.1.21",
48
+ "@forgeax/engine-plugin": "0.1.21",
49
+ "@forgeax/engine-profiler": "0.1.21",
50
+ "@forgeax/engine-render-graph": "0.1.21",
51
+ "@forgeax/engine-rhi": "0.1.21",
52
+ "@forgeax/engine-scene": "0.1.21",
53
+ "@forgeax/engine-shader": "0.1.21",
54
+ "@forgeax/engine-skinning": "0.1.21",
55
+ "@forgeax/engine-types": "0.1.21"
56
56
  },
57
57
  "devDependencies": {
58
- "@forgeax/engine-rhi-null": "0.1.20",
59
- "@forgeax/engine-rhi-webgpu": "0.1.20",
60
- "@forgeax/engine-vite-plugin-shader": "0.1.20"
58
+ "@forgeax/engine-rhi-null": "0.1.21",
59
+ "@forgeax/engine-rhi-webgpu": "0.1.21",
60
+ "@forgeax/engine-vite-plugin-shader": "0.1.21"
61
61
  },
62
62
  "forgeax": {
63
63
  "metrics": {
@@ -1,9 +1,13 @@
1
1
  import { readFileSync } from 'node:fs';
2
+ import { mat4, vec3 } from '@forgeax/engine-math';
2
3
  import { RenderGraphBuilder } from '@forgeax/engine-render-graph';
3
4
  import type { RhiDevice } from '@forgeax/engine-rhi';
4
5
  import { rhi } from '@forgeax/engine-rhi-null';
5
6
  import { ok } from '@forgeax/engine-types';
6
7
  import { beforeAll, describe, expect, it } from 'vitest';
8
+ import { prepareStandardLighting } from '../pipeline/standard-lighting/prepare';
9
+ import { deriveStandardTopologyInput } from '../pipeline/standard-lighting/topology';
10
+ import { selectStandardClusterTransport } from '../pipeline/standard-lighting/transport';
7
11
  import { standardPipeline } from '../pipeline/standard-pipeline';
8
12
  import { inspectStandardBloomGraph, STANDARD_BLOOM_TARGET_SPEC } from '../pipeline/standard-post';
9
13
  import { DEFAULT_STANDARD_PROFILE, STANDARD_PIPELINE_ID } from '../pipeline/standard-profile';
@@ -19,11 +23,11 @@ beforeAll(async () => {
19
23
  device = result.value;
20
24
  });
21
25
 
22
- function topology(lighting: 'direct' | 'clustered', bloom: 'off' | 'on'): RenderPipelineTopology {
26
+ function topology(bloom: 'off' | 'on'): RenderPipelineTopology {
23
27
  return {
24
28
  pipelineId: STANDARD_PIPELINE_ID,
25
- standardProfile: { ...DEFAULT_STANDARD_PROFILE, lighting },
26
- config: lighting === 'clustered' ? { ssao: { enabled: false } } : undefined,
29
+ standardProfile: DEFAULT_STANDARD_PROFILE,
30
+ config: { ssao: { enabled: false } },
27
31
  surface: {
28
32
  width: 640,
29
33
  height: 360,
@@ -32,15 +36,15 @@ function topology(lighting: 'direct' | 'clustered', bloom: 'off' | 'on'): Render
32
36
  },
33
37
  camera: { tonemap: 'aces-filmic', antialias: 'fxaa', bloom },
34
38
  shadow: {
35
- mapSize: 64,
36
- cascadeCount: 1,
39
+ directional: { mapSize: 64, cascadeCount: 1 },
40
+ spotMapSize: 64,
37
41
  pointCount: 0,
38
42
  pointFaceSize: 64,
39
43
  spotCount: 0,
40
44
  },
41
45
  lane: {
42
- compute: lighting === 'clustered',
43
- storageBuffer: lighting === 'clustered',
46
+ compute: true,
47
+ storageBuffer: true,
44
48
  multisample: false,
45
49
  maxColorAttachments: 8,
46
50
  },
@@ -49,15 +53,43 @@ function topology(lighting: 'direct' | 'clustered', bloom: 'off' | 'on'): Render
49
53
  };
50
54
  }
51
55
 
52
- function inspect(lighting: 'direct' | 'clustered', bloom: 'off' | 'on') {
56
+ function clusteredStandardLighting() {
57
+ const prepared = prepareStandardLighting({
58
+ directional: undefined,
59
+ local: [{ kind: 'point' as const, shadowed: false, position: vec3.create(0, 0, -4), range: 2 }],
60
+ view: mat4.lookAt(mat4.create(), [0, 0, 0], [0, 0, -1], [0, 1, 0]),
61
+ projection: mat4.perspective(mat4.create(), Math.PI / 3, 1, 0.1, 100),
62
+ near: 0.1,
63
+ far: 100,
64
+ grid: { x: 4, y: 3, z: 4 },
65
+ lightCount: DEFAULT_STANDARD_PROFILE.lightCount,
66
+ renderPath: 'forward',
67
+ });
68
+ if (!prepared.ok) throw prepared.error;
69
+ const transport = selectStandardClusterTransport(
70
+ { compute: true, storageBuffer: true, membershipPipelineReady: true },
71
+ prepared.value,
72
+ );
73
+ if (!transport.ok) throw transport.error;
74
+ const lighting = deriveStandardTopologyInput({
75
+ kind: 'clustered',
76
+ prepared: prepared.value,
77
+ transport: transport.value,
78
+ });
79
+ if (!lighting.ok) throw lighting.error;
80
+ return lighting.value;
81
+ }
82
+
83
+ function inspect(bloom: 'off' | 'on') {
53
84
  const graph = new RenderGraphBuilder<RenderPipelineFrame>();
54
85
  const built = standardPipeline.build(
55
86
  {
56
87
  graph,
88
+ standardLighting: clusteredStandardLighting(),
57
89
  projectGpuDriven: () => ok(undefined),
58
90
  contributeFeatures: () => ok(undefined),
59
91
  },
60
- topology(lighting, bloom),
92
+ topology(bloom),
61
93
  );
62
94
  if (!built.ok) throw built.error;
63
95
  const compiled = graph.compile({ device, surfaceSize: { width: 640, height: 360 } });
@@ -66,11 +98,8 @@ function inspect(lighting: 'direct' | 'clustered', bloom: 'off' | 'on') {
66
98
  }
67
99
 
68
100
  describe('Standard Bloom exact-zero topology', () => {
69
- it.each([
70
- 'direct',
71
- 'clustered',
72
- ] as const)('%s Bloom off declares no Bloom targets or passes', (lighting) => {
73
- const info = inspect(lighting, 'off');
101
+ it('Bloom off declares no Bloom targets or passes', () => {
102
+ const info = inspect('off');
74
103
  const bloomPasses = info.passes.filter((pass) => pass.name.startsWith('bloom-'));
75
104
  const bloomResources = info.resources.filter((resource) => resource.label.startsWith('bloom-'));
76
105
  expect(bloomPasses).toHaveLength(0);
@@ -120,8 +149,8 @@ describe('Standard Bloom exact-zero topology', () => {
120
149
  });
121
150
 
122
151
  it('keeps one shared Bloom chain when enabled', () => {
123
- for (const lighting of ['direct', 'clustered'] as const) {
124
- const info = inspect(lighting, 'on');
152
+ {
153
+ const info = inspect('on');
125
154
  expect(inspectStandardBloomGraph(info)).toEqual({
126
155
  status: 'valid',
127
156
  targetCount: 4,
@@ -147,7 +176,7 @@ describe('Standard Bloom exact-zero topology', () => {
147
176
  });
148
177
 
149
178
  it('fails closed when a canonical Bloom descriptor drifts', () => {
150
- const info = inspect('direct', 'on');
179
+ const info = inspect('on');
151
180
  const drifted = {
152
181
  ...info,
153
182
  resources: info.resources.map((resource) =>
@@ -171,7 +200,7 @@ describe('Standard Bloom exact-zero topology', () => {
171
200
  });
172
201
 
173
202
  it('rejects a graph with a missing canonical Bloom target', () => {
174
- const info = inspect('direct', 'on');
203
+ const info = inspect('on');
175
204
  const drifted = {
176
205
  ...info,
177
206
  resources: info.resources.filter(
@@ -187,7 +216,7 @@ describe('Standard Bloom exact-zero topology', () => {
187
216
  });
188
217
 
189
218
  it('rejects a graph with a missing canonical Bloom pass', () => {
190
- const info = inspect('direct', 'on');
219
+ const info = inspect('on');
191
220
  const drifted = {
192
221
  ...info,
193
222
  passes: info.passes.filter((pass) => pass.name !== 'bloom-blur-h'),