@forgeax/engine-render 0.1.3 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (918) hide show
  1. package/README.md +130 -641
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
  4. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
  6. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
  8. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
  10. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
  11. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
  12. package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
  13. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
  14. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
  15. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
  16. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
  17. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
  18. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
  20. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
  21. package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
  22. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
  23. package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
  24. package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
  26. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
  27. package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
  28. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
  29. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
  30. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
  31. package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
  32. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
  33. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
  34. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
  36. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
  37. package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
  38. package/dist/assembly/backend-contract.d.ts.map +1 -0
  39. package/dist/assembly/factory.d.ts +207 -0
  40. package/dist/assembly/factory.d.ts.map +1 -0
  41. package/dist/assembly/host-contract.d.ts +84 -0
  42. package/dist/assembly/host-contract.d.ts.map +1 -0
  43. package/dist/{renderer → assembly}/material/assembly.d.ts +1 -2
  44. package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
  45. package/dist/assembly/material/pipeline-projection.d.ts +30 -0
  46. package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
  47. package/dist/authoring.d.ts +10 -11
  48. package/dist/authoring.d.ts.map +1 -1
  49. package/dist/authoring.mjs +25 -3
  50. package/dist/authoring.mjs.map +1 -1
  51. package/dist/chunk-CQXZC5XI.mjs +182 -0
  52. package/dist/chunk-CQXZC5XI.mjs.map +1 -0
  53. package/dist/chunk-QC4VW3XJ.mjs +79 -0
  54. package/dist/chunk-QC4VW3XJ.mjs.map +1 -0
  55. package/dist/chunk-SCRSAK5B.mjs +480 -0
  56. package/dist/chunk-SCRSAK5B.mjs.map +1 -0
  57. package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
  58. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
  59. package/dist/components/glyph-text.d.ts +1 -1
  60. package/dist/components/glyph-text.d.ts.map +1 -1
  61. package/dist/components/index.d.ts +2 -2
  62. package/dist/components/index.d.ts.map +1 -1
  63. package/dist/components/instances.d.ts +1 -1
  64. package/dist/components/instances.d.ts.map +1 -1
  65. package/dist/components/light-helpers.d.ts +1 -1
  66. package/dist/components/light-helpers.d.ts.map +1 -1
  67. package/dist/components/mesh-filter.d.ts +7 -7
  68. package/dist/components/mesh-filter.d.ts.map +1 -1
  69. package/dist/components/scene-instance.d.ts +11 -11
  70. package/dist/components/skybox-background.d.ts +56 -0
  71. package/dist/components/skybox-background.d.ts.map +1 -0
  72. package/dist/components/skylight.d.ts +55 -0
  73. package/dist/components/skylight.d.ts.map +1 -0
  74. package/dist/components/sprite-animation.d.ts +2 -3
  75. package/dist/components/sprite-animation.d.ts.map +1 -1
  76. package/dist/components/sprite-instances.d.ts +1 -1
  77. package/dist/components/sprite-playback-mode.d.ts +6 -1
  78. package/dist/components/sprite-playback-mode.d.ts.map +1 -1
  79. package/dist/components/sprite-region-override.d.ts +2 -3
  80. package/dist/components/sprite-region-override.d.ts.map +1 -1
  81. package/dist/components/tile-layer.d.ts +5 -0
  82. package/dist/components/tile-layer.d.ts.map +1 -1
  83. package/dist/construct-renderer.d.ts +18 -1
  84. package/dist/construct-renderer.d.ts.map +1 -1
  85. package/dist/construct-renderer.mjs +27008 -4
  86. package/dist/construct-renderer.mjs.map +1 -1
  87. package/dist/debug-draw-glue.d.ts +2 -53
  88. package/dist/debug-draw-glue.d.ts.map +1 -1
  89. package/dist/device/device-scope.d.ts +83 -0
  90. package/dist/device/device-scope.d.ts.map +1 -0
  91. package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
  92. package/dist/device/gpu-residency.d.ts.map +1 -0
  93. package/dist/device/resource-types.d.ts +8 -0
  94. package/dist/device/resource-types.d.ts.map +1 -0
  95. package/dist/engine-metrics.d.ts +2 -2
  96. package/dist/engine-metrics.d.ts.map +1 -1
  97. package/dist/errors/recover.d.ts +28 -1
  98. package/dist/errors/recover.d.ts.map +1 -1
  99. package/dist/errors/render.d.ts +249 -258
  100. package/dist/errors/render.d.ts.map +1 -1
  101. package/dist/features/fullscreen.d.ts +19 -0
  102. package/dist/features/fullscreen.d.ts.map +1 -0
  103. package/dist/features/host.d.ts +32 -26
  104. package/dist/features/host.d.ts.map +1 -1
  105. package/dist/features/morph/morph-feature.d.ts +39 -5
  106. package/dist/features/morph/morph-feature.d.ts.map +1 -1
  107. package/dist/features/plan.d.ts +182 -0
  108. package/dist/features/plan.d.ts.map +1 -0
  109. package/dist/features/prepared-gpu-work.d.ts +21 -17
  110. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  111. package/dist/features/prepared-graphics-store.d.ts +2 -1
  112. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  113. package/dist/features/prepared-graphics.d.ts +11 -21
  114. package/dist/features/prepared-graphics.d.ts.map +1 -1
  115. package/dist/features/render-graph-compute.d.ts +2 -2
  116. package/dist/features/render-graph-compute.d.ts.map +1 -1
  117. package/dist/features/render-graph-contribution.d.ts +4 -7
  118. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  119. package/dist/features/render-graph-raster.d.ts +2 -2
  120. package/dist/features/render-graph-raster.d.ts.map +1 -1
  121. package/dist/features/render-graph-resources.d.ts +6 -6
  122. package/dist/features/render-graph-resources.d.ts.map +1 -1
  123. package/dist/features/targets.d.ts +5 -5
  124. package/dist/features/targets.d.ts.map +1 -1
  125. package/dist/features/types.d.ts +11 -190
  126. package/dist/features/types.d.ts.map +1 -1
  127. package/dist/features/vocabulary.d.ts +14 -0
  128. package/dist/features/vocabulary.d.ts.map +1 -0
  129. package/dist/fullscreen-post-process-pass.d.ts +4 -25
  130. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  131. package/dist/glyph-text-layout-system.d.ts +3 -2
  132. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  133. package/dist/gpu-driven/batch-topology.d.ts +6 -75
  134. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  135. package/dist/gpu-driven/production-raster.d.ts +13 -112
  136. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  137. package/dist/gpu-driven/view-gpu.d.ts +10 -66
  138. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  139. package/dist/gpu-resource.d.ts +3 -3
  140. package/dist/gpu-scene-schema.d.ts +1 -94
  141. package/dist/gpu-scene-schema.d.ts.map +1 -1
  142. package/dist/gpu-scene.d.ts +7 -33
  143. package/dist/gpu-scene.d.ts.map +1 -1
  144. package/dist/hdrp-buffers.d.ts +3 -53
  145. package/dist/hdrp-buffers.d.ts.map +1 -1
  146. package/dist/ibl/IblPipelineCache.d.ts +74 -180
  147. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  148. package/dist/ibl/skylight-bind-group.d.ts +1 -1
  149. package/dist/index.d.ts +13 -43
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.mjs +165 -3
  152. package/dist/index.mjs.map +1 -1
  153. package/dist/inspection-types.d.ts +69 -0
  154. package/dist/inspection-types.d.ts.map +1 -0
  155. package/dist/instance-buffer-cache.d.ts +1 -4
  156. package/dist/instance-buffer-cache.d.ts.map +1 -1
  157. package/dist/internal.d.ts +1 -73
  158. package/dist/internal.d.ts.map +1 -1
  159. package/dist/internal.mjs +1 -43
  160. package/dist/internal.mjs.map +1 -1
  161. package/dist/lifecycle.d.ts +36 -2
  162. package/dist/lifecycle.d.ts.map +1 -1
  163. package/dist/materials.d.ts +0 -3
  164. package/dist/materials.d.ts.map +1 -1
  165. package/dist/mesh-material-bindings.d.ts +0 -1
  166. package/dist/mesh-material-bindings.d.ts.map +1 -1
  167. package/dist/pbr-pipeline.d.ts +75 -29
  168. package/dist/pbr-pipeline.d.ts.map +1 -1
  169. package/dist/pipeline/standard-forward-lane.d.ts +5 -0
  170. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
  171. package/dist/pipeline/standard-pipeline.d.ts +31 -0
  172. package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
  173. package/dist/pipeline/standard-profile.d.ts +40 -0
  174. package/dist/pipeline/standard-profile.d.ts.map +1 -0
  175. package/dist/pipeline-builder.d.ts +3 -3
  176. package/dist/pipeline-builder.d.ts.map +1 -1
  177. package/dist/pipeline-spec-types.d.ts +24 -0
  178. package/dist/pipeline-spec-types.d.ts.map +1 -0
  179. package/dist/pipeline-spec.d.ts +16 -155
  180. package/dist/pipeline-spec.d.ts.map +1 -1
  181. package/dist/plugin.d.ts +1 -14
  182. package/dist/plugin.d.ts.map +1 -1
  183. package/dist/post-process-errors.d.ts +18 -18
  184. package/dist/post-process-errors.d.ts.map +1 -1
  185. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
  186. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  187. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
  188. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
  189. package/dist/record/frame-lighting.d.ts +7 -73
  190. package/dist/record/frame-lighting.d.ts.map +1 -1
  191. package/dist/record/frame-snapshot.d.ts +44 -44
  192. package/dist/record/frame-snapshot.d.ts.map +1 -1
  193. package/dist/record/frame-targets.d.ts +5 -38
  194. package/dist/record/frame-targets.d.ts.map +1 -1
  195. package/dist/record/frame.d.ts +64 -52
  196. package/dist/record/frame.d.ts.map +1 -1
  197. package/dist/record/helpers.d.ts +3 -2
  198. package/dist/record/helpers.d.ts.map +1 -1
  199. package/dist/record/main-pass-geometry.d.ts +5 -4
  200. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  201. package/dist/record/main-pass-material.d.ts +90 -59
  202. package/dist/record/main-pass-material.d.ts.map +1 -1
  203. package/dist/record/main-pass-sprite-draws.d.ts +28 -3
  204. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  205. package/dist/record/main-pass.d.ts +1 -1
  206. package/dist/record/main-pass.d.ts.map +1 -1
  207. package/dist/record/mesh-ssbo.d.ts +276 -3
  208. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  209. package/dist/record/render-context.d.ts +235 -0
  210. package/dist/record/render-context.d.ts.map +1 -0
  211. package/dist/record/shadow-pass.d.ts +15 -88
  212. package/dist/record/shadow-pass.d.ts.map +1 -1
  213. package/dist/record/skybox-post-pass.d.ts +1 -1
  214. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  215. package/dist/record/typed-frame-graph.d.ts +29 -7
  216. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  217. package/dist/record/view-ubo.d.ts +3 -3
  218. package/dist/record/view-ubo.d.ts.map +1 -1
  219. package/dist/render-contract.d.ts +416 -0
  220. package/dist/render-contract.d.ts.map +1 -0
  221. package/dist/render-data.d.ts.map +1 -1
  222. package/dist/render-graph-primitives.d.ts +14 -362
  223. package/dist/render-graph-primitives.d.ts.map +1 -1
  224. package/dist/render-pipeline.d.ts +25 -64
  225. package/dist/render-pipeline.d.ts.map +1 -1
  226. package/dist/render-system-extract.d.ts +107 -338
  227. package/dist/render-system-extract.d.ts.map +1 -1
  228. package/dist/render-system.d.ts +21 -713
  229. package/dist/render-system.d.ts.map +1 -1
  230. package/dist/scene/render-scene-types.d.ts +58 -0
  231. package/dist/scene/render-scene-types.d.ts.map +1 -0
  232. package/dist/scene/render-scene.d.ts +105 -0
  233. package/dist/scene/render-scene.d.ts.map +1 -0
  234. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
  235. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
  236. package/dist/ssao-buffers.d.ts +22 -3
  237. package/dist/ssao-buffers.d.ts.map +1 -1
  238. package/dist/systems/skin-palette-allocator.d.ts +2 -4
  239. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  240. package/dist/systems/skin-palette-types.d.ts +14 -0
  241. package/dist/systems/skin-palette-types.d.ts.map +1 -0
  242. package/dist/systems/transparent-sort-config.d.ts +23 -2
  243. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  244. package/dist/tilemap-chunk-extract-system.d.ts +4 -3
  245. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
  246. package/dist/typed-render-graph-primitives.d.ts +2 -4
  247. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  248. package/dist/typed-shadow-passes.d.ts +3 -3
  249. package/dist/typed-shadow-passes.d.ts.map +1 -1
  250. package/package.json +23 -23
  251. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
  252. package/src/__tests__/callback-inference.test-d.ts +6 -3
  253. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
  254. package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
  255. package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
  256. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
  257. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
  258. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
  259. package/src/__tests__/factory-contract.integration.test.ts +158 -209
  260. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
  261. package/src/__tests__/frame-observation.contract.test.ts +17 -8
  262. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
  263. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
  264. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +9 -16
  265. package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
  266. package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
  267. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
  268. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
  269. package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
  270. package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
  271. package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
  272. package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
  273. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
  274. package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
  275. package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
  276. package/src/__tests__/gpu-scene.unit.test.ts +10 -24
  277. package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
  278. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
  279. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
  280. package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
  281. package/src/__tests__/material-cooked-projection.unit.test.ts +2 -51
  282. package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
  283. package/src/__tests__/material-static-dynamic-route.unit.test.ts +4 -23
  284. package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
  285. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
  286. package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
  287. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
  288. package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
  289. package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
  290. package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
  291. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
  292. package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
  293. package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
  294. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
  295. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
  296. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
  297. package/src/__tests__/profiler-default-off.test.ts +1 -1
  298. package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
  299. package/src/__tests__/profiler-phase-integration.test.ts +5 -13
  300. package/src/__tests__/profiler-phase-token.test.ts +3 -8
  301. package/src/__tests__/public-surface.test-d.ts +65 -3
  302. package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
  303. package/src/__tests__/render-error-code-owner.test-d.ts +18 -23
  304. package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
  305. package/src/__tests__/render-error-exhaustive.test-d.ts +8 -1
  306. package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
  307. package/src/__tests__/render-feature-context.test-d.ts +16 -40
  308. package/src/__tests__/render-feature-contract.test-d.ts +9 -18
  309. package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
  310. package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
  311. package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
  312. package/src/__tests__/render-feature-plan.test-d.ts +161 -0
  313. package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
  314. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
  315. package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
  316. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
  317. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
  318. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
  319. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
  320. package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
  321. package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
  322. package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
  323. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
  324. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
  325. package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
  326. package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
  327. package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
  328. package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
  329. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +46 -50
  330. package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
  331. package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
  332. package/src/__tests__/ssao-config.unit.test.ts +36 -0
  333. package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
  334. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
  335. package/src/__tests__/standard-descriptors.test-d.ts +22 -0
  336. package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
  337. package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
  338. package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
  339. package/src/__tests__/surface-configuration.unit.test.ts +1 -2
  340. package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
  341. package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
  342. package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
  343. package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
  344. package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
  345. package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
  346. package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
  347. package/src/__tests__/visibility-extract.integration.test.ts +20 -11
  348. package/src/__tests__/visibility-extract.perf.test.ts +66 -32
  349. package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
  350. package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
  351. package/src/__tests__/visibility-instances.integration.test.ts +7 -11
  352. package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
  353. package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
  354. package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
  355. package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
  356. package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
  357. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
  358. package/src/__tests__/vocabulary.unit.test.ts +1 -1
  359. package/src/assembly/backend-contract.ts +57 -0
  360. package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1709 -2693
  361. package/src/assembly/host-contract.ts +101 -0
  362. package/src/{renderer → assembly}/material/assembly.ts +1 -3
  363. package/src/assembly/material/pipeline-projection.ts +63 -0
  364. package/src/authoring.ts +14 -22
  365. package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
  366. package/src/components/glyph-text.ts +3 -2
  367. package/src/components/index.ts +7 -9
  368. package/src/components/instances.ts +4 -5
  369. package/src/components/light-helpers.ts +1 -1
  370. package/src/components/mesh-filter.ts +11 -10
  371. package/src/components/post-process-params.ts +3 -3
  372. package/src/components/scene-instance.ts +12 -12
  373. package/src/components/skybox-background.ts +103 -0
  374. package/src/components/{environment.ts → skylight.ts} +2 -111
  375. package/src/components/sprite-animation.ts +3 -4
  376. package/src/components/sprite-instances.ts +2 -2
  377. package/src/components/sprite-playback-mode.ts +7 -1
  378. package/src/components/sprite-region-override.ts +2 -3
  379. package/src/components/tile-layer.ts +8 -2
  380. package/src/construct-renderer.ts +67 -4
  381. package/src/debug-draw-glue.ts +8 -129
  382. package/src/device/device-scope.ts +306 -0
  383. package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
  384. package/src/device/resource-types.ts +20 -0
  385. package/src/engine-metrics.ts +12 -19
  386. package/src/errors/recover.ts +45 -3
  387. package/src/errors/render.ts +357 -460
  388. package/src/features/fullscreen.ts +46 -0
  389. package/src/features/host.ts +575 -309
  390. package/src/features/morph/morph-feature.ts +195 -105
  391. package/src/features/plan.ts +447 -0
  392. package/src/features/prepared-gpu-work.ts +72 -15
  393. package/src/features/prepared-graphics-store.ts +20 -6
  394. package/src/features/prepared-graphics.ts +12 -71
  395. package/src/features/render-graph-compute.ts +14 -5
  396. package/src/features/render-graph-contribution.ts +43 -63
  397. package/src/features/render-graph-raster.ts +11 -6
  398. package/src/features/render-graph-resources.ts +25 -23
  399. package/src/features/targets.ts +8 -21
  400. package/src/features/types.ts +39 -227
  401. package/src/features/vocabulary.ts +24 -0
  402. package/src/fullscreen-post-process-pass.ts +14 -57
  403. package/src/glyph-text-layout-system.ts +70 -96
  404. package/src/gpu-driven/batch-topology.ts +24 -202
  405. package/src/gpu-driven/production-raster.ts +93 -1108
  406. package/src/gpu-driven/view-gpu.ts +46 -192
  407. package/src/gpu-resource.ts +4 -4
  408. package/src/gpu-scene-schema.ts +11 -99
  409. package/src/gpu-scene.ts +231 -364
  410. package/src/hdrp-buffers.ts +12 -221
  411. package/src/ibl/IblPipelineCache.ts +471 -711
  412. package/src/ibl/skylight-bind-group.ts +4 -4
  413. package/src/index.ts +58 -217
  414. package/src/inspection-types.ts +76 -0
  415. package/src/instance-buffer-cache.ts +1 -29
  416. package/src/internal.ts +6 -85
  417. package/src/lifecycle.ts +64 -19
  418. package/src/materials.ts +7 -29
  419. package/src/mesh-material-bindings.ts +0 -1
  420. package/src/pbr-pipeline.ts +434 -53
  421. package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
  422. package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
  423. package/src/pipeline/standard-profile.ts +65 -0
  424. package/src/pipeline-builder.ts +60 -64
  425. package/src/pipeline-spec-types.ts +28 -0
  426. package/src/pipeline-spec.ts +72 -609
  427. package/src/plugin.ts +3 -75
  428. package/src/post-process-errors.ts +31 -33
  429. package/src/prepare/prepared-graphics-resolver.ts +5 -4
  430. package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
  431. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
  432. package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
  433. package/src/record/frame-lighting.ts +74 -195
  434. package/src/record/frame-snapshot.ts +45 -60
  435. package/src/record/frame-targets.ts +8 -243
  436. package/src/record/frame.ts +509 -796
  437. package/src/record/helpers.ts +6 -11
  438. package/src/record/main-pass-geometry.ts +106 -147
  439. package/src/record/main-pass-material.ts +517 -190
  440. package/src/record/main-pass-sprite-draws.ts +198 -117
  441. package/src/record/main-pass.ts +162 -143
  442. package/src/record/mesh-ssbo.ts +517 -38
  443. package/src/record/render-context.ts +364 -0
  444. package/src/record/shadow-pass.ts +138 -1838
  445. package/src/record/skybox-post-pass.ts +12 -14
  446. package/src/record/typed-frame-graph.ts +215 -254
  447. package/src/record/view-ubo.ts +6 -37
  448. package/src/render-contract.ts +571 -0
  449. package/src/render-data.ts +3 -3
  450. package/src/render-graph-primitives.ts +76 -851
  451. package/src/render-pipeline.ts +104 -188
  452. package/src/render-system-extract.ts +1048 -1729
  453. package/src/render-system.ts +330 -1957
  454. package/src/scene/render-scene-types.ts +64 -0
  455. package/src/scene/render-scene.ts +1032 -0
  456. package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
  457. package/src/ssao-buffers.ts +167 -8
  458. package/src/systems/skin-palette-allocator.ts +21 -64
  459. package/src/systems/skin-palette-types.ts +14 -0
  460. package/src/systems/transparent-sort-config.ts +25 -3
  461. package/src/tilemap-chunk-extract-system.ts +53 -70
  462. package/src/typed-render-graph-primitives.ts +35 -24
  463. package/src/typed-shadow-passes.ts +26 -56
  464. package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
  465. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
  466. package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
  467. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
  468. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
  469. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
  470. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  471. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  472. package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
  473. package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
  474. package/dist/__tests__/camera-temporal.test.d.ts +0 -2
  475. package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
  476. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
  477. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
  478. package/dist/__tests__/environment-inspection.test.d.ts +0 -2
  479. package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
  480. package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
  481. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
  482. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
  483. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
  484. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
  485. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
  486. package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
  487. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
  488. package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
  489. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
  490. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
  491. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
  492. package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
  493. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
  494. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
  495. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
  496. package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
  497. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
  498. package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
  499. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
  500. package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
  501. package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
  502. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
  503. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
  504. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
  505. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
  506. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
  507. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
  508. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
  509. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
  510. package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
  511. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
  512. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  513. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  514. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
  515. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
  516. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
  517. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
  518. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
  519. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
  520. package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
  521. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
  522. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
  523. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
  524. package/dist/__tests__/plugin.test.d.ts +0 -2
  525. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  526. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
  527. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
  528. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
  529. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
  530. package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
  531. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
  532. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
  533. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
  534. package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
  535. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
  536. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
  537. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
  538. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
  539. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
  540. package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
  541. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
  542. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
  543. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
  544. package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
  545. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
  546. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
  547. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
  548. package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
  549. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
  550. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
  551. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
  552. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
  553. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
  554. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
  555. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
  556. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
  557. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
  558. package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
  559. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
  560. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
  561. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
  562. package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
  563. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
  564. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
  565. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
  566. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
  567. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
  568. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
  569. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
  570. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
  571. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
  572. package/dist/chunk-33UF5SAO.mjs +0 -7397
  573. package/dist/chunk-33UF5SAO.mjs.map +0 -1
  574. package/dist/chunk-A5QCJSNL.mjs +0 -29913
  575. package/dist/chunk-A5QCJSNL.mjs.map +0 -1
  576. package/dist/chunk-JMSB7AR4.mjs +0 -3
  577. package/dist/chunk-JMSB7AR4.mjs.map +0 -1
  578. package/dist/chunk-LXNGO6AO.mjs +0 -569
  579. package/dist/chunk-LXNGO6AO.mjs.map +0 -1
  580. package/dist/chunk-QRXPSX4X.mjs +0 -659
  581. package/dist/chunk-QRXPSX4X.mjs.map +0 -1
  582. package/dist/chunk-YAKEQPWO.mjs +0 -1439
  583. package/dist/chunk-YAKEQPWO.mjs.map +0 -1
  584. package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
  585. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
  586. package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
  587. package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
  588. package/dist/components/__tests__/fog.test-d.d.ts +0 -2
  589. package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
  590. package/dist/components/__tests__/fog.test.d.ts +0 -2
  591. package/dist/components/__tests__/fog.test.d.ts.map +0 -1
  592. package/dist/components/atmosphere.d.ts +0 -18
  593. package/dist/components/atmosphere.d.ts.map +0 -1
  594. package/dist/components/environment.d.ts +0 -116
  595. package/dist/components/environment.d.ts.map +0 -1
  596. package/dist/deferred-lighting.d.ts +0 -13
  597. package/dist/deferred-lighting.d.ts.map +0 -1
  598. package/dist/dynamic-texture-store.d.ts +0 -42
  599. package/dist/dynamic-texture-store.d.ts.map +0 -1
  600. package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
  601. package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
  602. package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
  603. package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
  604. package/dist/environment/__tests__/generation.test.d.ts +0 -2
  605. package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
  606. package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
  607. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
  608. package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
  609. package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
  610. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
  611. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
  612. package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
  613. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
  614. package/dist/environment/__tests__/readiness.test.d.ts +0 -2
  615. package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
  616. package/dist/environment/__tests__/recovery.test.d.ts +0 -2
  617. package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
  618. package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
  619. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
  620. package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
  621. package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
  622. package/dist/environment/__tests__/signature.test.d.ts +0 -2
  623. package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
  624. package/dist/environment/descriptors.d.ts +0 -2
  625. package/dist/environment/descriptors.d.ts.map +0 -1
  626. package/dist/environment/extracted-environment.d.ts +0 -53
  627. package/dist/environment/extracted-environment.d.ts.map +0 -1
  628. package/dist/environment/generation.d.ts +0 -62
  629. package/dist/environment/generation.d.ts.map +0 -1
  630. package/dist/environment/gpu-bundle.d.ts +0 -23
  631. package/dist/environment/gpu-bundle.d.ts.map +0 -1
  632. package/dist/environment/graph.d.ts +0 -108
  633. package/dist/environment/graph.d.ts.map +0 -1
  634. package/dist/environment/inspection.d.ts +0 -48
  635. package/dist/environment/inspection.d.ts.map +0 -1
  636. package/dist/environment/lifecycle.d.ts +0 -22
  637. package/dist/environment/lifecycle.d.ts.map +0 -1
  638. package/dist/environment/readiness.d.ts +0 -29
  639. package/dist/environment/readiness.d.ts.map +0 -1
  640. package/dist/environment/signature.d.ts +0 -70
  641. package/dist/environment/signature.d.ts.map +0 -1
  642. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
  643. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
  644. package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
  645. package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
  646. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
  647. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  648. package/dist/extract/directional-csm.d.ts +0 -129
  649. package/dist/extract/directional-csm.d.ts.map +0 -1
  650. package/dist/extract/index.d.ts +0 -5
  651. package/dist/extract/index.d.ts.map +0 -1
  652. package/dist/extract/material-interface.d.ts +0 -56
  653. package/dist/extract/material-interface.d.ts.map +0 -1
  654. package/dist/extract/schema-readers.d.ts +0 -20
  655. package/dist/extract/schema-readers.d.ts.map +0 -1
  656. package/dist/features/graph-contribution.d.ts +0 -64
  657. package/dist/features/graph-contribution.d.ts.map +0 -1
  658. package/dist/features/index.d.ts +0 -21
  659. package/dist/features/index.d.ts.map +0 -1
  660. package/dist/features/morph/index.d.ts +0 -3
  661. package/dist/features/morph/index.d.ts.map +0 -1
  662. package/dist/features/morph/morph-bounds.d.ts +0 -42
  663. package/dist/features/morph/morph-bounds.d.ts.map +0 -1
  664. package/dist/features/scene-temporal.d.ts +0 -45
  665. package/dist/features/scene-temporal.d.ts.map +0 -1
  666. package/dist/features/taa-resolve.d.ts +0 -21
  667. package/dist/features/taa-resolve.d.ts.map +0 -1
  668. package/dist/frame-chain.d.ts +0 -14
  669. package/dist/frame-chain.d.ts.map +0 -1
  670. package/dist/gpu-driven/view-reference.d.ts.map +0 -1
  671. package/dist/gpu-resource-store.d.ts.map +0 -1
  672. package/dist/hdrp-cluster-membership.d.ts +0 -2
  673. package/dist/hdrp-cluster-membership.d.ts.map +0 -1
  674. package/dist/hdrp-pipeline.d.ts +0 -36
  675. package/dist/hdrp-pipeline.d.ts.map +0 -1
  676. package/dist/ibl/cubemap-projection.d.ts +0 -23
  677. package/dist/ibl/cubemap-projection.d.ts.map +0 -1
  678. package/dist/ibl/face-uniforms.d.ts +0 -65
  679. package/dist/ibl/face-uniforms.d.ts.map +0 -1
  680. package/dist/mesh-update-errors.d.ts +0 -71
  681. package/dist/mesh-update-errors.d.ts.map +0 -1
  682. package/dist/mipmap-generator.d.ts +0 -39
  683. package/dist/mipmap-generator.d.ts.map +0 -1
  684. package/dist/param-schema-projection-census.d.ts +0 -18
  685. package/dist/param-schema-projection-census.d.ts.map +0 -1
  686. package/dist/persistent-render-scene.d.ts +0 -158
  687. package/dist/persistent-render-scene.d.ts.map +0 -1
  688. package/dist/pipeline/index.d.ts +0 -11
  689. package/dist/pipeline/index.d.ts.map +0 -1
  690. package/dist/pipeline-errors.d.ts +0 -110
  691. package/dist/pipeline-errors.d.ts.map +0 -1
  692. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
  693. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  694. package/dist/prepare/index.d.ts +0 -4
  695. package/dist/prepare/index.d.ts.map +0 -1
  696. package/dist/prepare/schema-readers.d.ts +0 -11
  697. package/dist/prepare/schema-readers.d.ts.map +0 -1
  698. package/dist/record/__tests__/environment-record.test.d.ts +0 -2
  699. package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
  700. package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
  701. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
  702. package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
  703. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
  704. package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
  705. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
  706. package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
  707. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
  708. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
  709. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
  710. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
  711. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
  712. package/dist/record/frame-observation.d.ts +0 -38
  713. package/dist/record/frame-observation.d.ts.map +0 -1
  714. package/dist/record/index.d.ts +0 -15
  715. package/dist/record/index.d.ts.map +0 -1
  716. package/dist/record/main-pass-skin.d.ts +0 -46
  717. package/dist/record/main-pass-skin.d.ts.map +0 -1
  718. package/dist/record/main-pass-sprite.d.ts +0 -69
  719. package/dist/record/main-pass-sprite.d.ts.map +0 -1
  720. package/dist/record/material-payload.d.ts +0 -43
  721. package/dist/record/material-payload.d.ts.map +0 -1
  722. package/dist/record/material-slot-plan.d.ts +0 -26
  723. package/dist/record/material-slot-plan.d.ts.map +0 -1
  724. package/dist/record/membership-timing.d.ts +0 -232
  725. package/dist/record/membership-timing.d.ts.map +0 -1
  726. package/dist/record/shadow-caster-uniform.d.ts +0 -8
  727. package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
  728. package/dist/record/shadow-submit-mode.d.ts +0 -66
  729. package/dist/record/shadow-submit-mode.d.ts.map +0 -1
  730. package/dist/render-dispatch-membership.d.ts +0 -47
  731. package/dist/render-dispatch-membership.d.ts.map +0 -1
  732. package/dist/render-pipeline-context.d.ts +0 -289
  733. package/dist/render-pipeline-context.d.ts.map +0 -1
  734. package/dist/render-pipeline-target.d.ts +0 -16
  735. package/dist/render-pipeline-target.d.ts.map +0 -1
  736. package/dist/render-scene-projection.d.ts +0 -174
  737. package/dist/render-scene-projection.d.ts.map +0 -1
  738. package/dist/render-system-fold.d.ts +0 -266
  739. package/dist/render-system-fold.d.ts.map +0 -1
  740. package/dist/renderer/asset-service.d.ts +0 -10
  741. package/dist/renderer/asset-service.d.ts.map +0 -1
  742. package/dist/renderer/backend-selection.d.ts.map +0 -1
  743. package/dist/renderer/environment-classify.d.ts +0 -6
  744. package/dist/renderer/environment-classify.d.ts.map +0 -1
  745. package/dist/renderer/environment-error.d.ts +0 -13
  746. package/dist/renderer/environment-error.d.ts.map +0 -1
  747. package/dist/renderer/material/pipeline-projection.d.ts +0 -91
  748. package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
  749. package/dist/renderer/renderer-factory.d.ts +0 -283
  750. package/dist/renderer/renderer-factory.d.ts.map +0 -1
  751. package/dist/renderer.d.ts +0 -771
  752. package/dist/renderer.d.ts.map +0 -1
  753. package/dist/scene-utils/collect-subtree.d.ts +0 -11
  754. package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
  755. package/dist/ssao-data.d.ts +0 -34
  756. package/dist/ssao-data.d.ts.map +0 -1
  757. package/dist/surface-format.d.ts +0 -10
  758. package/dist/surface-format.d.ts.map +0 -1
  759. package/dist/taa-history-store.d.ts +0 -88
  760. package/dist/taa-history-store.d.ts.map +0 -1
  761. package/dist/temporal-coverage.d.ts +0 -35
  762. package/dist/temporal-coverage.d.ts.map +0 -1
  763. package/dist/temporal-frame-transaction.d.ts +0 -92
  764. package/dist/temporal-frame-transaction.d.ts.map +0 -1
  765. package/dist/temporal-inspection.d.ts +0 -57
  766. package/dist/temporal-inspection.d.ts.map +0 -1
  767. package/dist/temporal-view.d.ts +0 -43
  768. package/dist/temporal-view.d.ts.map +0 -1
  769. package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
  770. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
  771. package/dist/urp-pipeline.d.ts +0 -4
  772. package/dist/urp-pipeline.d.ts.map +0 -1
  773. package/src/__tests__/analytic-sky-contract.test.ts +0 -27
  774. package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
  775. package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
  776. package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
  777. package/src/__tests__/backend-selection.integration.test.ts +0 -11
  778. package/src/__tests__/camera-temporal.test-d.ts +0 -8
  779. package/src/__tests__/camera-temporal.test.ts +0 -188
  780. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
  781. package/src/__tests__/environment-inspection.test.ts +0 -45
  782. package/src/__tests__/fog-ai-user.fixture.ts +0 -350
  783. package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
  784. package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
  785. package/src/__tests__/fog-inspection.integration.test.ts +0 -127
  786. package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
  787. package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
  788. package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
  789. package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
  790. package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
  791. package/src/__tests__/fog-temporal.integration.test.ts +0 -115
  792. package/src/__tests__/frame-chain.unit.test.ts +0 -26
  793. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
  794. package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
  795. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
  796. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
  797. package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
  798. package/src/__tests__/materials.unit.test.ts +0 -25
  799. package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
  800. package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
  801. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
  802. package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
  803. package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
  804. package/src/__tests__/plugin.test.ts +0 -25
  805. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
  806. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
  807. package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
  808. package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
  809. package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
  810. package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
  811. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
  812. package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
  813. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
  814. package/src/__tests__/render-feature-order.unit.test.ts +0 -66
  815. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
  816. package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
  817. package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
  818. package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
  819. package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
  820. package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
  821. package/src/__tests__/taa-history-store.unit.test.ts +0 -196
  822. package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
  823. package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
  824. package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
  825. package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
  826. package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
  827. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
  828. package/src/components/__tests__/atmosphere-red.test.ts +0 -51
  829. package/src/components/__tests__/atmosphere.test.ts +0 -79
  830. package/src/components/__tests__/fog.test-d.ts +0 -49
  831. package/src/components/__tests__/fog.test.ts +0 -60
  832. package/src/components/atmosphere.ts +0 -64
  833. package/src/deferred-lighting.ts +0 -92
  834. package/src/dynamic-texture-store.ts +0 -111
  835. package/src/environment/README.md +0 -76
  836. package/src/environment/__tests__/failure-injection.test.ts +0 -50
  837. package/src/environment/__tests__/generation-red.test.ts +0 -64
  838. package/src/environment/__tests__/generation.test.ts +0 -37
  839. package/src/environment/__tests__/graph-transaction.test.ts +0 -85
  840. package/src/environment/__tests__/inspection-red.test.ts +0 -53
  841. package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
  842. package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
  843. package/src/environment/__tests__/readiness.test.ts +0 -42
  844. package/src/environment/__tests__/recovery.test.ts +0 -62
  845. package/src/environment/__tests__/resize-dispose.test.ts +0 -30
  846. package/src/environment/__tests__/signature-red.test.ts +0 -45
  847. package/src/environment/__tests__/signature.test.ts +0 -60
  848. package/src/environment/descriptors.ts +0 -7
  849. package/src/environment/extracted-environment.ts +0 -239
  850. package/src/environment/generation.ts +0 -158
  851. package/src/environment/gpu-bundle.ts +0 -144
  852. package/src/environment/graph.ts +0 -588
  853. package/src/environment/inspection.ts +0 -107
  854. package/src/environment/lifecycle.ts +0 -124
  855. package/src/environment/readiness.ts +0 -76
  856. package/src/environment/signature.ts +0 -185
  857. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
  858. package/src/extract/__tests__/environment-source.test.ts +0 -105
  859. package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
  860. package/src/extract/directional-csm.ts +0 -959
  861. package/src/extract/index.ts +0 -10
  862. package/src/extract/material-interface.ts +0 -604
  863. package/src/extract/schema-readers.ts +0 -27
  864. package/src/features/graph-contribution.ts +0 -577
  865. package/src/features/index.ts +0 -100
  866. package/src/features/morph/index.ts +0 -24
  867. package/src/features/morph/morph-bounds.ts +0 -123
  868. package/src/features/scene-temporal.ts +0 -274
  869. package/src/features/taa-resolve.ts +0 -244
  870. package/src/frame-chain.ts +0 -21
  871. package/src/hdrp-cluster-membership.ts +0 -70
  872. package/src/ibl/cubemap-projection.ts +0 -60
  873. package/src/ibl/face-uniforms.ts +0 -150
  874. package/src/mesh-update-errors.ts +0 -113
  875. package/src/mipmap-generator.ts +0 -244
  876. package/src/param-schema-projection-census.ts +0 -73
  877. package/src/persistent-render-scene.ts +0 -1752
  878. package/src/pipeline/index.ts +0 -40
  879. package/src/pipeline-errors.ts +0 -172
  880. package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
  881. package/src/prepare/index.ts +0 -8
  882. package/src/prepare/schema-readers.ts +0 -20
  883. package/src/record/__tests__/environment-record.test.ts +0 -35
  884. package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
  885. package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
  886. package/src/record/__tests__/render-submission.integration.test.ts +0 -76
  887. package/src/record/__tests__/render-submission.perf.test.ts +0 -141
  888. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
  889. package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
  890. package/src/record/frame-observation.ts +0 -122
  891. package/src/record/index.ts +0 -15
  892. package/src/record/main-pass-skin.ts +0 -51
  893. package/src/record/main-pass-sprite.ts +0 -166
  894. package/src/record/material-payload.ts +0 -292
  895. package/src/record/material-slot-plan.ts +0 -68
  896. package/src/record/membership-timing.ts +0 -1012
  897. package/src/record/shadow-caster-uniform.ts +0 -37
  898. package/src/record/shadow-submit-mode.ts +0 -277
  899. package/src/render-dispatch-membership.ts +0 -155
  900. package/src/render-pipeline-context.ts +0 -332
  901. package/src/render-pipeline-target.ts +0 -96
  902. package/src/render-scene-projection.ts +0 -1738
  903. package/src/render-system-fold.ts +0 -531
  904. package/src/renderer/asset-service.ts +0 -32
  905. package/src/renderer/backend-selection.ts +0 -121
  906. package/src/renderer/environment-classify.ts +0 -30
  907. package/src/renderer/environment-error.ts +0 -19
  908. package/src/renderer/material/pipeline-projection.ts +0 -140
  909. package/src/renderer.ts +0 -940
  910. package/src/scene-utils/collect-subtree.ts +0 -40
  911. package/src/ssao-data.ts +0 -106
  912. package/src/surface-format.ts +0 -37
  913. package/src/taa-history-store.ts +0 -429
  914. package/src/temporal-coverage.ts +0 -106
  915. package/src/temporal-frame-transaction.ts +0 -301
  916. package/src/temporal-inspection.ts +0 -194
  917. package/src/temporal-view.ts +0 -174
  918. package/src/tilemap/resolve-tileset-runtime.ts +0 -72
package/src/gpu-scene.ts CHANGED
@@ -1,48 +1,28 @@
1
- import type { Buffer, Result, RhiDevice, RhiError } from '@forgeax/engine-rhi';
2
- import { err, ok } from '@forgeax/engine-rhi';
1
+ import type { Buffer, Result, RhiDevice } from '@forgeax/engine-rhi';
2
+ import { err, ok, RhiError } from '@forgeax/engine-rhi';
3
3
  import {
4
4
  GPU_SCENE_LAYOUTS,
5
- GPU_SCENE_PRIMITIVE_FLAGS,
6
5
  type GpuSceneTableLayout,
7
6
  gpuSceneFieldOffset,
8
- type SceneFactRevisionDomain,
9
7
  } from './gpu-scene-schema';
10
8
  import {
11
9
  GPU_BUFFER_USAGE_COPY_DST,
12
10
  GPU_BUFFER_USAGE_COPY_SRC,
13
11
  GPU_BUFFER_USAGE_STORAGE,
14
12
  } from './gpu-usage';
15
- import type {
16
- RenderSceneApplyResult,
17
- RenderSceneProjection,
18
- RenderSceneProjectionSlot,
19
- RenderSceneSubmissionDelta,
20
- SpatialIndexInspection,
21
- } from './render-scene-projection';
22
- import type { RenderableTemporalSnapshot } from './render-system-extract';
13
+ import type { GpuSceneInspection } from './inspection-types';
14
+ import type { RenderSceneApplyResult, RenderSceneSlot } from './scene/render-scene-types';
15
+
16
+ export type { GpuSceneInspection } from './inspection-types';
23
17
 
24
18
  const PRIMITIVE = GPU_SCENE_LAYOUTS.primitive;
25
19
  const INSTANCE = GPU_SCENE_LAYOUTS.instance;
26
20
  const TRANSFORM = GPU_SCENE_LAYOUTS.transform;
27
21
  const DRAW_TEMPLATE = GPU_SCENE_LAYOUTS.drawTemplate;
28
22
  const MATERIAL = GPU_SCENE_LAYOUTS.material;
29
- const PRIMITIVE_ACTIVE = GPU_SCENE_PRIMITIVE_FLAGS.active;
30
- const PRIMITIVE_HAS_BOUNDS = GPU_SCENE_PRIMITIVE_FLAGS.hasBounds;
31
- const PRIMITIVE_GPU_DRIVEN = GPU_SCENE_PRIMITIVE_FLAGS.gpuDriven;
32
- const PRIMITIVE_STATIC = GPU_SCENE_PRIMITIVE_FLAGS.static;
33
- const PRIMITIVE_DYNAMIC = GPU_SCENE_PRIMITIVE_FLAGS.dynamic;
34
- const PRIMITIVE_CASTER_ELIGIBLE = GPU_SCENE_PRIMITIVE_FLAGS.casterEligible;
35
- const PRIMITIVE_CASTER_INELIGIBLE = GPU_SCENE_PRIMITIVE_FLAGS.casterIneligible;
36
- const PRIMITIVE_CASTER_UNKNOWN = GPU_SCENE_PRIMITIVE_FLAGS.casterUnknown;
37
- const ALL_SCENE_FACT_DOMAINS: readonly SceneFactRevisionDomain[] = [
38
- 'transform',
39
- 'geometry',
40
- 'material',
41
- 'eligibility',
42
- 'space',
43
- 'batch',
44
- 'resource',
45
- ];
23
+ const PRIMITIVE_ACTIVE = 1;
24
+ const PRIMITIVE_HAS_BOUNDS = 2;
25
+ const PRIMITIVE_GPU_DRIVEN = 4;
46
26
  const IDENTITY_MATRIX = new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
47
27
 
48
28
  interface GpuSceneBuffers {
@@ -123,24 +103,6 @@ const TABLE_LAYOUTS = {
123
103
 
124
104
  const TABLE_NAMES = Object.keys(TABLE_LAYOUTS) as readonly GpuSceneTableName[];
125
105
 
126
- export interface GpuSceneTableInspection {
127
- readonly capacity: number;
128
- readonly bytes: number;
129
- }
130
-
131
- export interface GpuSceneInspection {
132
- readonly capacity: number;
133
- readonly tables: Readonly<Record<GpuSceneTableName, GpuSceneTableInspection>>;
134
- readonly uploadRanges: number;
135
- readonly uploadBytes: number;
136
- readonly capacityGrows: number;
137
- readonly fullRebuilds: number;
138
- readonly clearedSlots: number;
139
- readonly noChangeFrames: number;
140
- /** Mirrored CPU broadphase evidence; RenderSceneProjection remains the owner. */
141
- readonly spatialIndex: SpatialIndexInspection | undefined;
142
- }
143
-
144
106
  export interface GpuSceneSyncResult {
145
107
  readonly ranges: number;
146
108
  readonly bytes: number;
@@ -168,7 +130,23 @@ function createBuffers(device: RhiDevice, capacity: number): Result<GpuSceneBuff
168
130
  }
169
131
  created[name] = result.value;
170
132
  }
171
- return ok(created as unknown as GpuSceneBuffers);
133
+ const { primitive, instance, transform, drawTemplate, material } = created;
134
+ if (
135
+ primitive === undefined ||
136
+ instance === undefined ||
137
+ transform === undefined ||
138
+ drawTemplate === undefined ||
139
+ material === undefined
140
+ ) {
141
+ return err(
142
+ new RhiError({
143
+ code: 'internal-error',
144
+ expected: 'GPU scene creates one buffer for every table',
145
+ hint: 'rebuild the renderer after inspecting the device resource failure',
146
+ }),
147
+ );
148
+ }
149
+ return ok({ primitive, instance, transform, drawTemplate, material });
172
150
  }
173
151
 
174
152
  function writeMat4(view: DataView, byteOffset: number, value: Float32Array): void {
@@ -227,8 +205,6 @@ export class GpuScene {
227
205
  private readonly transforms = new StableRangeAllocator();
228
206
  private readonly draws = new StableRangeAllocator();
229
207
  private readonly materials = new StableRangeAllocator();
230
- private readonly pendingSubmittedSlots = new Set<number>();
231
- private spatialIndex: SpatialIndexInspection | undefined;
232
208
 
233
209
  private constructor(
234
210
  private readonly device: RhiDevice,
@@ -272,42 +248,13 @@ export class GpuScene {
272
248
  return this.buffers.material;
273
249
  }
274
250
 
275
- sync(
276
- projection: RenderSceneProjection,
277
- delta: RenderSceneApplyResult,
278
- ): Result<GpuSceneSyncResult, RhiError> {
279
- if (delta.spatialIndex !== undefined) this.spatialIndex = delta.spatialIndex.inspection;
280
- const factDeltaBySlot = new Map(
281
- delta.factDeltas.map((factDelta) => [factDelta.slot, factDelta]),
282
- );
283
- const writes = [
284
- ...delta.createdSlots.map((record) => ({
285
- record,
286
- resetPrevious: true,
287
- dirtyDomains: ALL_SCENE_FACT_DOMAINS,
288
- })),
289
- ...delta.updatedSlots.flatMap((record) => {
290
- const factDelta = factDeltaBySlot.get(record.slot);
291
- // An old caller may construct a delta without factDeltas. Preserve its
292
- // previous full-write behavior for compatibility; projection deltas
293
- // always carry the fine-grained entry.
294
- if (factDelta === undefined) {
295
- return [{ record, resetPrevious: false, dirtyDomains: ALL_SCENE_FACT_DOMAINS }];
296
- }
297
- if (factDelta.changedDomains.length === 0) return [];
298
- return [{ record, resetPrevious: false, dirtyDomains: factDelta.changedDomains }];
299
- }),
300
- ...delta.recreatedSlots.map((record) => ({
301
- record,
302
- resetPrevious: true,
303
- dirtyDomains: ALL_SCENE_FACT_DOMAINS,
304
- })),
305
- ];
251
+ sync(delta: RenderSceneApplyResult): Result<GpuSceneSyncResult, RhiError> {
252
+ const writes = [...delta.createdSlots, ...delta.updatedSlots, ...delta.recreatedSlots];
306
253
  const changedSlots = [
307
- ...writes.map(({ record }) => record.slot),
254
+ ...writes.map((record) => record.slot),
308
255
  ...delta.removedSlots.map((r) => r.slot),
309
256
  ];
310
- if (changedSlots.length === 0 && this.pendingSubmittedSlots.size === 0) {
257
+ if (changedSlots.length === 0) {
311
258
  this.noChangeFrames += 1;
312
259
  return ok({ ranges: 0, bytes: 0, grew: false, cleared: 0 });
313
260
  }
@@ -318,13 +265,7 @@ export class GpuScene {
318
265
  drawTemplate: [],
319
266
  material: [],
320
267
  };
321
- for (const { record } of writes) this.ensureAllocation(record, writesByTable);
322
- const changedSlotSet = new Set(changedSlots);
323
- const submittedOnly = [...this.pendingSubmittedSlots].flatMap((slot) => {
324
- if (changedSlotSet.has(slot)) return [];
325
- const record = projection.slotByIndex(slot);
326
- return record === undefined ? [] : [record];
327
- });
268
+ for (const record of writes) this.ensureAllocation(record, writesByTable);
328
269
  const requiredCapacity = Math.max(
329
270
  Math.max(...changedSlots) + 1,
330
271
  this.instances.requiredCapacity(),
@@ -338,17 +279,9 @@ export class GpuScene {
338
279
  if (!grown.ok) return grown;
339
280
  }
340
281
 
341
- for (const write of writes) {
342
- const temporal = projection.temporalSnapshotBySlot(write.record.slot);
343
- if (temporal !== undefined) {
344
- this.writeSlot(write.record, temporal, writesByTable, write.dirtyDomains);
345
- }
346
- }
347
- for (const record of submittedOnly) {
348
- const temporal = projection.temporalSnapshotBySlot(record.slot);
349
- if (temporal !== undefined) this.writePreviousTransforms(record, temporal, writesByTable);
350
- }
351
- this.pendingSubmittedSlots.clear();
282
+ for (const record of delta.createdSlots) this.writeSlot(record, true, writesByTable);
283
+ for (const record of delta.updatedSlots) this.writeSlot(record, false, writesByTable);
284
+ for (const record of delta.recreatedSlots) this.writeSlot(record, true, writesByTable);
352
285
  for (const record of delta.removedSlots) this.clearSlot(record.slot, writesByTable);
353
286
  const uploaded = this.uploadRows(writesByTable);
354
287
  if (!uploaded.ok) return uploaded;
@@ -361,9 +294,7 @@ export class GpuScene {
361
294
  });
362
295
  }
363
296
 
364
- rebuild(projection: RenderSceneProjection): Result<GpuSceneSyncResult, RhiError> {
365
- const slots = projection.slotsSnapshot();
366
- this.spatialIndex = projection.inspect().spatialIndex;
297
+ rebuild(slots: readonly RenderSceneSlot[]): Result<GpuSceneSyncResult, RhiError> {
367
298
  this.allocations.clear();
368
299
  this.instances.reset();
369
300
  this.transforms.reset();
@@ -392,12 +323,7 @@ export class GpuScene {
392
323
  grew = true;
393
324
  }
394
325
  for (const bytes of Object.values(this.tableBytes)) new Uint8Array(bytes).fill(0);
395
- for (const slot of slots) {
396
- const temporal = projection.temporalSnapshotBySlot(slot.slot);
397
- if (temporal !== undefined) {
398
- this.writeSlot(slot, temporal, writesByTable, ALL_SCENE_FACT_DOMAINS);
399
- }
400
- }
326
+ for (const slot of slots) this.writeSlot(slot, true, writesByTable);
401
327
  let bytes = 0;
402
328
  for (const name of TABLE_NAMES) {
403
329
  const table = this.tableBytes[name];
@@ -408,26 +334,40 @@ export class GpuScene {
408
334
  this.uploadRanges += TABLE_NAMES.length;
409
335
  this.uploadBytes += bytes;
410
336
  this.fullRebuilds += 1;
411
- this.pendingSubmittedSlots.clear();
412
337
  return ok({ ranges: TABLE_NAMES.length, bytes, grew, cleared: 0 });
413
338
  }
414
339
 
415
340
  inspect(): GpuSceneInspection {
416
341
  return {
417
342
  capacity: this.capacity,
418
- tables: Object.fromEntries(
419
- TABLE_NAMES.map((name) => [
420
- name,
421
- { capacity: this.capacity, bytes: this.tableBytes[name].byteLength },
422
- ]),
423
- ) as unknown as Readonly<Record<GpuSceneTableName, GpuSceneTableInspection>>,
343
+ tables: {
344
+ primitive: {
345
+ capacity: this.capacity,
346
+ bytes: this.tableBytes.primitive.byteLength,
347
+ },
348
+ instance: {
349
+ capacity: this.capacity,
350
+ bytes: this.tableBytes.instance.byteLength,
351
+ },
352
+ transform: {
353
+ capacity: this.capacity,
354
+ bytes: this.tableBytes.transform.byteLength,
355
+ },
356
+ drawTemplate: {
357
+ capacity: this.capacity,
358
+ bytes: this.tableBytes.drawTemplate.byteLength,
359
+ },
360
+ material: {
361
+ capacity: this.capacity,
362
+ bytes: this.tableBytes.material.byteLength,
363
+ },
364
+ },
424
365
  uploadRanges: this.uploadRanges,
425
366
  uploadBytes: this.uploadBytes,
426
367
  capacityGrows: this.capacityGrows,
427
368
  fullRebuilds: this.fullRebuilds,
428
369
  clearedSlots: this.clearedSlots,
429
370
  noChangeFrames: this.noChangeFrames,
430
- spatialIndex: this.spatialIndex,
431
371
  };
432
372
  }
433
373
 
@@ -435,272 +375,195 @@ export class GpuScene {
435
375
  for (const buffer of Object.values(this.buffers)) this.device.destroyBuffer(buffer);
436
376
  }
437
377
 
438
- stageSubmitted(delta: RenderSceneSubmissionDelta): void {
439
- for (const slot of delta.slots) this.pendingSubmittedSlots.add(slot);
440
- }
441
-
442
378
  private writeSlot(
443
- record: RenderSceneProjectionSlot,
444
- temporal: RenderableTemporalSnapshot,
379
+ record: RenderSceneSlot,
380
+ resetPrevious: boolean,
445
381
  writes: Record<GpuSceneTableName, number[]>,
446
- dirtyDomains: readonly SceneFactRevisionDomain[],
447
382
  ): void {
448
383
  const allocation = this.allocations.get(record.slot);
449
384
  if (allocation === undefined) throw new RangeError('GPU Scene allocation unavailable');
450
- const dirty = new Set(dirtyDomains);
451
- const writePrimitive =
452
- dirty.has('geometry') ||
453
- dirty.has('eligibility') ||
454
- dirty.has('batch') ||
455
- dirty.has('resource');
456
- const writeInstances = dirty.has('geometry');
457
- const writeLocalTransforms = dirty.has('geometry');
458
- const writeTransforms = dirty.has('geometry') || dirty.has('transform') || dirty.has('space');
459
- const writeDrawTemplates = dirty.has('geometry') || dirty.has('batch');
460
- const writeMaterials = dirty.has('geometry') || dirty.has('material') || dirty.has('resource');
461
385
  const primitiveOffset = record.slot * PRIMITIVE.stride;
462
386
  const primitive = new DataView(this.tableBytes.primitive);
463
- if (writePrimitive) {
464
- const bounds =
465
- record.fact.bounds.status === 'present' ? record.fact.bounds.localAabb : undefined;
466
- let flags = PRIMITIVE_ACTIVE;
467
- if (record.fact.bounds.status === 'present') flags |= PRIMITIVE_HAS_BOUNDS;
468
- if (record.snapshot.gpuDrivenDraws !== undefined) flags |= PRIMITIVE_GPU_DRIVEN;
469
- if (record.fact.mobility === 'static') flags |= PRIMITIVE_STATIC;
470
- if (record.fact.mobility === 'dynamic') flags |= PRIMITIVE_DYNAMIC;
471
- if (record.fact.casterEligibility === 'eligible') flags |= PRIMITIVE_CASTER_ELIGIBLE;
472
- if (record.fact.casterEligibility === 'ineligible') flags |= PRIMITIVE_CASTER_INELIGIBLE;
473
- if (record.fact.casterEligibility === 'unknown') flags |= PRIMITIVE_CASTER_UNKNOWN;
474
- primitive.setUint32(
475
- primitiveOffset + offset(PRIMITIVE, 'generation'),
476
- record.generation,
477
- true,
478
- );
479
- primitive.setUint32(primitiveOffset + offset(PRIMITIVE, 'flags'), flags, true);
480
- primitive.setUint32(
481
- primitiveOffset + offset(PRIMITIVE, 'transformIndex'),
482
- allocation.transformStart,
483
- true,
387
+ const bounds = record.snapshot.localAabb;
388
+ primitive.setUint32(primitiveOffset + offset(PRIMITIVE, 'generation'), record.generation, true);
389
+ primitive.setUint32(
390
+ primitiveOffset + offset(PRIMITIVE, 'flags'),
391
+ PRIMITIVE_ACTIVE |
392
+ (bounds === undefined ? 0 : PRIMITIVE_HAS_BOUNDS) |
393
+ (record.snapshot.gpuDrivenDraws === undefined ? 0 : PRIMITIVE_GPU_DRIVEN),
394
+ true,
395
+ );
396
+ primitive.setUint32(
397
+ primitiveOffset + offset(PRIMITIVE, 'transformIndex'),
398
+ allocation.transformStart,
399
+ true,
400
+ );
401
+ primitive.setUint32(
402
+ primitiveOffset + offset(PRIMITIVE, 'materialIndex'),
403
+ allocation.materialStart,
404
+ true,
405
+ );
406
+ primitive.setUint32(
407
+ primitiveOffset + offset(PRIMITIVE, 'drawTemplateIndex'),
408
+ allocation.drawStart,
409
+ true,
410
+ );
411
+ primitive.setUint32(
412
+ primitiveOffset + offset(PRIMITIVE, 'instanceStart'),
413
+ allocation.instanceStart,
414
+ true,
415
+ );
416
+ primitive.setUint32(
417
+ primitiveOffset + offset(PRIMITIVE, 'instanceCount'),
418
+ allocation.instanceCount,
419
+ true,
420
+ );
421
+ primitive.setUint32(
422
+ primitiveOffset + offset(PRIMITIVE, 'assetHandle'),
423
+ record.snapshot.assetHandle,
424
+ true,
425
+ );
426
+ writeVec4(primitive, primitiveOffset + offset(PRIMITIVE, 'localBoundsMin'), [
427
+ bounds?.[0] ?? 0,
428
+ bounds?.[1] ?? 0,
429
+ bounds?.[2] ?? 0,
430
+ 0,
431
+ ]);
432
+ writeVec4(primitive, primitiveOffset + offset(PRIMITIVE, 'localBoundsMax'), [
433
+ bounds?.[3] ?? 0,
434
+ bounds?.[4] ?? 0,
435
+ bounds?.[5] ?? 0,
436
+ 0,
437
+ ]);
438
+
439
+ const instance = new DataView(this.tableBytes.instance);
440
+ const transform = new DataView(this.tableBytes.transform);
441
+ for (let ordinal = 0; ordinal < allocation.instanceCount; ordinal += 1) {
442
+ const instanceIndex = allocation.instanceStart + ordinal;
443
+ const instanceOffset = instanceIndex * INSTANCE.stride;
444
+ const transformIndex = allocation.transformStart + 1 + ordinal;
445
+ instance.setUint32(instanceOffset + offset(INSTANCE, 'primitiveIndex'), record.slot, true);
446
+ instance.setUint32(instanceOffset + offset(INSTANCE, 'transformIndex'), transformIndex, true);
447
+ instance.setUint32(instanceOffset + offset(INSTANCE, 'customDataStart'), 0, true);
448
+ instance.setUint32(instanceOffset + offset(INSTANCE, 'flags'), PRIMITIVE_ACTIVE, true);
449
+ const local = record.snapshot.instances?.transforms.subarray(ordinal * 16, ordinal * 16 + 16);
450
+ const localWorld = local?.length === 16 ? local : IDENTITY_MATRIX;
451
+ const localOffset = transformIndex * TRANSFORM.stride;
452
+ const localCurrentOffset = localOffset + offset(TRANSFORM, 'currentWorld');
453
+ const localPreviousOffset = localOffset + offset(TRANSFORM, 'previousWorld');
454
+ const priorLocal = new Uint8Array(
455
+ this.tableBytes.transform.slice(localCurrentOffset, localCurrentOffset + 64),
484
456
  );
485
- primitive.setUint32(
486
- primitiveOffset + offset(PRIMITIVE, 'materialIndex'),
487
- allocation.materialStart,
457
+ writeMat4(transform, localCurrentOffset, localWorld);
458
+ if (!resetPrevious && priorLocal.some((value) => value !== 0)) {
459
+ new Uint8Array(this.tableBytes.transform, localPreviousOffset, 64).set(priorLocal);
460
+ } else {
461
+ writeMat4(transform, localPreviousOffset, localWorld);
462
+ }
463
+ writes.instance.push(instanceIndex);
464
+ writes.transform.push(transformIndex);
465
+ }
466
+
467
+ const transformOffset = allocation.transformStart * TRANSFORM.stride;
468
+ const currentOffset = transformOffset + offset(TRANSFORM, 'currentWorld');
469
+ const previousOffset = transformOffset + offset(TRANSFORM, 'previousWorld');
470
+ const priorCurrent = new Uint8Array(
471
+ this.tableBytes.transform.slice(currentOffset, currentOffset + 64),
472
+ );
473
+ const hasPrior = !resetPrevious && priorCurrent.some((value) => value !== 0);
474
+ writeMat4(transform, currentOffset, record.snapshot.transform.world);
475
+ if (hasPrior) new Uint8Array(this.tableBytes.transform, previousOffset, 64).set(priorCurrent);
476
+ else writeMat4(transform, previousOffset, record.snapshot.transform.world);
477
+ writes.primitive.push(record.slot);
478
+ writes.transform.push(allocation.transformStart);
479
+
480
+ const draw = new DataView(this.tableBytes.drawTemplate);
481
+ const drawSnapshots = record.snapshot.gpuDrivenDraws ?? [];
482
+ for (let ordinal = 0; ordinal < allocation.drawCount; ordinal += 1) {
483
+ const drawIndex = allocation.drawStart + ordinal;
484
+ const drawOffset = drawIndex * DRAW_TEMPLATE.stride;
485
+ const drawSnapshot = drawSnapshots[ordinal];
486
+ draw.setUint32(
487
+ drawOffset + offset(DRAW_TEMPLATE, 'pipelineClass'),
488
+ drawSnapshot === undefined ? 0 : stableU32(drawSnapshot.pipelineClass),
488
489
  true,
489
490
  );
490
- primitive.setUint32(
491
- primitiveOffset + offset(PRIMITIVE, 'drawTemplateIndex'),
492
- allocation.drawStart,
491
+ draw.setUint32(
492
+ drawOffset + offset(DRAW_TEMPLATE, 'materialIndex'),
493
+ allocation.materialStart + (drawSnapshot?.materialSlot ?? 0),
493
494
  true,
494
495
  );
495
- primitive.setUint32(
496
- primitiveOffset + offset(PRIMITIVE, 'instanceStart'),
497
- allocation.instanceStart,
496
+ draw.setUint32(
497
+ drawOffset + offset(DRAW_TEMPLATE, 'firstIndex'),
498
+ drawSnapshot?.first ?? 0,
498
499
  true,
499
500
  );
500
- primitive.setUint32(
501
- primitiveOffset + offset(PRIMITIVE, 'instanceCount'),
502
- allocation.instanceCount,
501
+ draw.setUint32(
502
+ drawOffset + offset(DRAW_TEMPLATE, 'indexCount'),
503
+ drawSnapshot?.count ?? 0,
503
504
  true,
504
505
  );
505
- primitive.setUint32(
506
- primitiveOffset + offset(PRIMITIVE, 'assetHandle'),
507
- record.snapshot.assetHandle,
506
+ draw.setInt32(
507
+ drawOffset + offset(DRAW_TEMPLATE, 'baseVertex'),
508
+ drawSnapshot?.baseVertex ?? 0,
508
509
  true,
509
510
  );
510
- writeVec4(primitive, primitiveOffset + offset(PRIMITIVE, 'localBoundsMin'), [
511
- bounds?.[0] ?? 0,
512
- bounds?.[1] ?? 0,
513
- bounds?.[2] ?? 0,
514
- 0,
515
- ]);
516
- writeVec4(primitive, primitiveOffset + offset(PRIMITIVE, 'localBoundsMax'), [
517
- bounds?.[3] ?? 0,
518
- bounds?.[4] ?? 0,
519
- bounds?.[5] ?? 0,
520
- 0,
521
- ]);
522
- writes.primitive.push(record.slot);
523
- }
524
-
525
- const instance = new DataView(this.tableBytes.instance);
526
- const transform = new DataView(this.tableBytes.transform);
527
- if (writeInstances || writeLocalTransforms) {
528
- for (let ordinal = 0; ordinal < allocation.instanceCount; ordinal += 1) {
529
- const instanceIndex = allocation.instanceStart + ordinal;
530
- const instanceOffset = instanceIndex * INSTANCE.stride;
531
- const transformIndex = allocation.transformStart + 1 + ordinal;
532
- if (writeInstances) {
533
- instance.setUint32(
534
- instanceOffset + offset(INSTANCE, 'primitiveIndex'),
535
- record.slot,
536
- true,
537
- );
538
- instance.setUint32(
539
- instanceOffset + offset(INSTANCE, 'transformIndex'),
540
- transformIndex,
541
- true,
542
- );
543
- instance.setUint32(instanceOffset + offset(INSTANCE, 'customDataStart'), 0, true);
544
- instance.setUint32(instanceOffset + offset(INSTANCE, 'flags'), PRIMITIVE_ACTIVE, true);
545
- writes.instance.push(instanceIndex);
546
- }
547
- if (writeLocalTransforms) {
548
- const local = record.snapshot.instances?.transforms.subarray(
549
- ordinal * 16,
550
- ordinal * 16 + 16,
551
- );
552
- const localWorld = local?.length === 16 ? local : IDENTITY_MATRIX;
553
- const localOffset = transformIndex * TRANSFORM.stride;
554
- const localCurrentOffset = localOffset + offset(TRANSFORM, 'currentWorld');
555
- const localPreviousOffset = localOffset + offset(TRANSFORM, 'previousWorld');
556
- writeMat4(transform, localCurrentOffset, localWorld);
557
- const previousLocal = temporal.previousInstances?.transforms.subarray(
558
- ordinal * 16,
559
- ordinal * 16 + 16,
560
- );
561
- writeMat4(
562
- transform,
563
- localPreviousOffset,
564
- previousLocal?.length === 16 ? previousLocal : localWorld,
565
- );
566
- writes.transform.push(transformIndex);
567
- }
568
- }
569
- }
570
-
571
- if (writeTransforms) {
572
- const transformOffset = allocation.transformStart * TRANSFORM.stride;
573
- const currentOffset = transformOffset + offset(TRANSFORM, 'currentWorld');
574
- const previousOffset = transformOffset + offset(TRANSFORM, 'previousWorld');
575
- writeMat4(transform, currentOffset, record.snapshot.transform.world);
576
- writeMat4(transform, previousOffset, temporal.previousTransform.world);
577
- writes.transform.push(allocation.transformStart);
578
- }
579
-
580
- const draw = new DataView(this.tableBytes.drawTemplate);
581
- const drawSnapshots = record.snapshot.gpuDrivenDraws ?? [];
582
- if (writeDrawTemplates) {
583
- for (let ordinal = 0; ordinal < allocation.drawCount; ordinal += 1) {
584
- const drawIndex = allocation.drawStart + ordinal;
585
- const drawOffset = drawIndex * DRAW_TEMPLATE.stride;
586
- const drawSnapshot = drawSnapshots[ordinal];
587
- draw.setUint32(
588
- drawOffset + offset(DRAW_TEMPLATE, 'pipelineClass'),
589
- drawSnapshot === undefined ? 0 : stableU32(drawSnapshot.pipelineClass),
590
- true,
591
- );
592
- draw.setUint32(
593
- drawOffset + offset(DRAW_TEMPLATE, 'materialIndex'),
594
- allocation.materialStart + (drawSnapshot?.materialSlot ?? 0),
595
- true,
596
- );
597
- draw.setUint32(
598
- drawOffset + offset(DRAW_TEMPLATE, 'firstIndex'),
599
- drawSnapshot?.first ?? 0,
600
- true,
601
- );
602
- draw.setUint32(
603
- drawOffset + offset(DRAW_TEMPLATE, 'indexCount'),
604
- drawSnapshot?.count ?? 0,
605
- true,
606
- );
607
- draw.setInt32(
608
- drawOffset + offset(DRAW_TEMPLATE, 'baseVertex'),
609
- drawSnapshot?.baseVertex ?? 0,
610
- true,
611
- );
612
- draw.setUint32(drawOffset + offset(DRAW_TEMPLATE, 'firstInstance'), 0, true);
613
- draw.setUint32(drawOffset + offset(DRAW_TEMPLATE, 'passFlags'), 0, true);
614
- draw.setUint32(drawOffset + offset(DRAW_TEMPLATE, 'reserved'), 0, true);
615
- writes.drawTemplate.push(drawIndex);
616
- }
511
+ draw.setUint32(drawOffset + offset(DRAW_TEMPLATE, 'firstInstance'), 0, true);
512
+ draw.setUint32(drawOffset + offset(DRAW_TEMPLATE, 'passFlags'), 0, true);
513
+ draw.setUint32(drawOffset + offset(DRAW_TEMPLATE, 'reserved'), 0, true);
514
+ writes.drawTemplate.push(drawIndex);
617
515
  }
618
516
 
619
517
  const material = new DataView(this.tableBytes.material);
620
- if (writeMaterials) {
621
- for (let ordinal = 0; ordinal < allocation.materialCount; ordinal += 1) {
622
- const materialIndex = allocation.materialStart + ordinal;
623
- const materialOffset = materialIndex * MATERIAL.stride;
624
- const snapshot = record.snapshot.materials[ordinal] ?? record.snapshot.material;
625
- writeVec4(material, materialOffset + offset(MATERIAL, 'params0'), [
626
- snapshot.baseColor?.[0] ?? 0,
627
- snapshot.baseColor?.[1] ?? 0,
628
- snapshot.baseColor?.[2] ?? 0,
629
- 1,
630
- ]);
631
- writeVec4(material, materialOffset + offset(MATERIAL, 'params1'), [
632
- snapshot.metallic ?? 0,
633
- snapshot.roughness ?? 1,
634
- snapshot.clearcoat ?? 0,
635
- snapshot.clearcoatRoughness ?? 0,
636
- ]);
637
- writeVec4(material, materialOffset + offset(MATERIAL, 'params2'), [
638
- snapshot.emissive?.[0] ?? 0,
639
- snapshot.emissive?.[1] ?? 0,
640
- snapshot.emissive?.[2] ?? 0,
641
- snapshot.emissiveIntensity ?? 0,
642
- ]);
643
- writeVec4(material, materialOffset + offset(MATERIAL, 'params3'), [
644
- snapshot.normalScale ?? 1,
645
- snapshot.occlusionStrength ?? 1,
646
- 0,
647
- 0,
648
- ]);
649
- material.setUint32(
650
- materialOffset + offset(MATERIAL, 'resource0'),
651
- snapshot.baseColorTexture ?? 0,
652
- true,
653
- );
654
- material.setUint32(
655
- materialOffset + offset(MATERIAL, 'resource1'),
656
- snapshot.metallicRoughnessTexture ?? 0,
657
- true,
658
- );
659
- material.setUint32(
660
- materialOffset + offset(MATERIAL, 'resource2'),
661
- snapshot.normalTexture ?? 0,
662
- true,
663
- );
664
- material.setUint32(
665
- materialOffset + offset(MATERIAL, 'resource3'),
666
- snapshot.emissiveTexture ?? 0,
667
- true,
668
- );
669
- writes.material.push(materialIndex);
670
- }
671
- }
672
- }
673
-
674
- private writePreviousTransforms(
675
- record: RenderSceneProjectionSlot,
676
- temporal: RenderableTemporalSnapshot,
677
- writes: Record<GpuSceneTableName, number[]>,
678
- ): void {
679
- const allocation = this.allocations.get(record.slot);
680
- if (allocation === undefined) return;
681
- const transform = new DataView(this.tableBytes.transform);
682
- const rootOffset =
683
- allocation.transformStart * TRANSFORM.stride + offset(TRANSFORM, 'previousWorld');
684
- writeMat4(transform, rootOffset, temporal.previousTransform.world);
685
- writes.transform.push(allocation.transformStart);
686
- for (let ordinal = 0; ordinal < allocation.instanceCount; ordinal += 1) {
687
- const transformIndex = allocation.transformStart + 1 + ordinal;
688
- const previous = temporal.previousInstances?.transforms.subarray(
689
- ordinal * 16,
690
- ordinal * 16 + 16,
518
+ for (let ordinal = 0; ordinal < allocation.materialCount; ordinal += 1) {
519
+ const materialIndex = allocation.materialStart + ordinal;
520
+ const materialOffset = materialIndex * MATERIAL.stride;
521
+ const snapshot = record.snapshot.materials[ordinal] ?? record.snapshot.material;
522
+ writeVec4(material, materialOffset + offset(MATERIAL, 'params0'), [
523
+ snapshot.baseColor?.[0] ?? 0,
524
+ snapshot.baseColor?.[1] ?? 0,
525
+ snapshot.baseColor?.[2] ?? 0,
526
+ 1,
527
+ ]);
528
+ writeVec4(material, materialOffset + offset(MATERIAL, 'params1'), [
529
+ snapshot.metallic ?? 0,
530
+ snapshot.roughness ?? 1,
531
+ snapshot.clearcoat ?? 0,
532
+ snapshot.clearcoatRoughness ?? 0,
533
+ ]);
534
+ writeVec4(material, materialOffset + offset(MATERIAL, 'params2'), [
535
+ snapshot.emissive?.[0] ?? 0,
536
+ snapshot.emissive?.[1] ?? 0,
537
+ snapshot.emissive?.[2] ?? 0,
538
+ snapshot.emissiveIntensity ?? 0,
539
+ ]);
540
+ writeVec4(material, materialOffset + offset(MATERIAL, 'params3'), [
541
+ snapshot.normalScale ?? 1,
542
+ snapshot.occlusionStrength ?? 1,
543
+ 0,
544
+ 0,
545
+ ]);
546
+ material.setUint32(
547
+ materialOffset + offset(MATERIAL, 'resource0'),
548
+ snapshot.baseColorTexture ?? 0,
549
+ true,
691
550
  );
692
- const current = record.snapshot.instances?.transforms.subarray(
693
- ordinal * 16,
694
- ordinal * 16 + 16,
551
+ material.setUint32(
552
+ materialOffset + offset(MATERIAL, 'resource1'),
553
+ snapshot.metallicRoughnessTexture ?? 0,
554
+ true,
695
555
  );
696
- const value = previous?.length === 16 ? previous : current;
697
- if (value?.length !== 16) continue;
698
- writeMat4(
699
- transform,
700
- transformIndex * TRANSFORM.stride + offset(TRANSFORM, 'previousWorld'),
701
- value,
556
+ material.setUint32(
557
+ materialOffset + offset(MATERIAL, 'resource2'),
558
+ snapshot.normalTexture ?? 0,
559
+ true,
702
560
  );
703
- writes.transform.push(transformIndex);
561
+ material.setUint32(
562
+ materialOffset + offset(MATERIAL, 'resource3'),
563
+ snapshot.emissiveTexture ?? 0,
564
+ true,
565
+ );
566
+ writes.material.push(materialIndex);
704
567
  }
705
568
  }
706
569
 
@@ -743,7 +606,7 @@ export class GpuScene {
743
606
  }
744
607
 
745
608
  private ensureAllocation(
746
- record: RenderSceneProjectionSlot,
609
+ record: RenderSceneSlot,
747
610
  writes: Record<GpuSceneTableName, number[]>,
748
611
  ): void {
749
612
  const instanceCount = Math.max(1, record.snapshot.instances?.instanceCount ?? 1);
@@ -848,8 +711,12 @@ export class GpuScene {
848
711
  }
849
712
 
850
713
  private allocateCpuTables(capacity: number): Record<GpuSceneTableName, ArrayBuffer> {
851
- return Object.fromEntries(
852
- TABLE_NAMES.map((name) => [name, new ArrayBuffer(capacity * TABLE_LAYOUTS[name].stride)]),
853
- ) as unknown as Record<GpuSceneTableName, ArrayBuffer>;
714
+ return {
715
+ primitive: new ArrayBuffer(capacity * PRIMITIVE.stride),
716
+ instance: new ArrayBuffer(capacity * INSTANCE.stride),
717
+ transform: new ArrayBuffer(capacity * TRANSFORM.stride),
718
+ drawTemplate: new ArrayBuffer(capacity * DRAW_TEMPLATE.stride),
719
+ material: new ArrayBuffer(capacity * MATERIAL.stride),
720
+ };
854
721
  }
855
722
  }