@forgeax/engine-render 0.1.4 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (979) hide show
  1. package/README.md +268 -640
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
  4. package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
  5. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
  6. package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
  7. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
  8. package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
  10. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
  11. package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
  12. package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
  13. package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
  14. package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
  15. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
  16. package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
  17. package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
  18. package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
  19. package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
  20. package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
  21. package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
  22. package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
  23. package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
  24. package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
  25. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
  26. package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
  27. package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
  28. package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
  29. package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
  30. package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
  31. package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
  32. package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
  33. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
  34. package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
  35. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
  36. package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
  37. package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
  38. package/dist/assembly/backend-contract.d.ts.map +1 -0
  39. package/dist/assembly/factory.d.ts +214 -0
  40. package/dist/assembly/factory.d.ts.map +1 -0
  41. package/dist/assembly/host-contract.d.ts +84 -0
  42. package/dist/assembly/host-contract.d.ts.map +1 -0
  43. package/dist/{renderer → assembly}/material/assembly.d.ts +0 -1
  44. package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
  45. package/dist/assembly/material/pipeline-projection.d.ts +30 -0
  46. package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
  47. package/dist/authoring.d.ts +11 -11
  48. package/dist/authoring.d.ts.map +1 -1
  49. package/dist/authoring.mjs +25 -3
  50. package/dist/authoring.mjs.map +1 -1
  51. package/dist/chunk-CQXZC5XI.mjs +182 -0
  52. package/dist/chunk-CQXZC5XI.mjs.map +1 -0
  53. package/dist/chunk-HCOGPHKS.mjs +93 -0
  54. package/dist/chunk-HCOGPHKS.mjs.map +1 -0
  55. package/dist/chunk-YEJIUW7D.mjs +1152 -0
  56. package/dist/chunk-YEJIUW7D.mjs.map +1 -0
  57. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +2 -0
  58. package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +1 -0
  59. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +2 -0
  60. package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +1 -0
  61. package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
  62. package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
  63. package/dist/components/glyph-text.d.ts +1 -1
  64. package/dist/components/glyph-text.d.ts.map +1 -1
  65. package/dist/components/index.d.ts +4 -2
  66. package/dist/components/index.d.ts.map +1 -1
  67. package/dist/components/instances.d.ts +1 -1
  68. package/dist/components/instances.d.ts.map +1 -1
  69. package/dist/components/light-helpers.d.ts +1 -1
  70. package/dist/components/light-helpers.d.ts.map +1 -1
  71. package/dist/components/lines.d.ts +5 -0
  72. package/dist/components/lines.d.ts.map +1 -0
  73. package/dist/components/mesh-filter.d.ts +7 -7
  74. package/dist/components/mesh-filter.d.ts.map +1 -1
  75. package/dist/components/points.d.ts +15 -0
  76. package/dist/components/points.d.ts.map +1 -0
  77. package/dist/components/scene-instance.d.ts +11 -11
  78. package/dist/components/skybox-background.d.ts +56 -0
  79. package/dist/components/skybox-background.d.ts.map +1 -0
  80. package/dist/components/skylight.d.ts +55 -0
  81. package/dist/components/skylight.d.ts.map +1 -0
  82. package/dist/components/sprite-animation.d.ts +2 -3
  83. package/dist/components/sprite-animation.d.ts.map +1 -1
  84. package/dist/components/sprite-instances.d.ts +1 -1
  85. package/dist/components/sprite-playback-mode.d.ts +6 -1
  86. package/dist/components/sprite-playback-mode.d.ts.map +1 -1
  87. package/dist/components/sprite-region-override.d.ts +2 -3
  88. package/dist/components/sprite-region-override.d.ts.map +1 -1
  89. package/dist/components/tile-layer.d.ts +5 -0
  90. package/dist/components/tile-layer.d.ts.map +1 -1
  91. package/dist/construct-renderer.d.ts +18 -1
  92. package/dist/construct-renderer.d.ts.map +1 -1
  93. package/dist/construct-renderer.mjs +27463 -4
  94. package/dist/construct-renderer.mjs.map +1 -1
  95. package/dist/debug-draw-glue.d.ts +2 -53
  96. package/dist/debug-draw-glue.d.ts.map +1 -1
  97. package/dist/device/device-scope.d.ts +83 -0
  98. package/dist/device/device-scope.d.ts.map +1 -0
  99. package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
  100. package/dist/device/gpu-residency.d.ts.map +1 -0
  101. package/dist/device/resource-types.d.ts +8 -0
  102. package/dist/device/resource-types.d.ts.map +1 -0
  103. package/dist/engine-metrics.d.ts +2 -2
  104. package/dist/engine-metrics.d.ts.map +1 -1
  105. package/dist/errors/recover.d.ts +28 -1
  106. package/dist/errors/recover.d.ts.map +1 -1
  107. package/dist/errors/render.d.ts +320 -248
  108. package/dist/errors/render.d.ts.map +1 -1
  109. package/dist/features/fullscreen.d.ts +19 -0
  110. package/dist/features/fullscreen.d.ts.map +1 -0
  111. package/dist/features/host.d.ts +32 -26
  112. package/dist/features/host.d.ts.map +1 -1
  113. package/dist/features/morph/morph-feature.d.ts +39 -5
  114. package/dist/features/morph/morph-feature.d.ts.map +1 -1
  115. package/dist/features/plan.d.ts +182 -0
  116. package/dist/features/plan.d.ts.map +1 -0
  117. package/dist/features/prepared-gpu-work.d.ts +21 -17
  118. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  119. package/dist/features/prepared-graphics-store.d.ts +2 -1
  120. package/dist/features/prepared-graphics-store.d.ts.map +1 -1
  121. package/dist/features/prepared-graphics.d.ts +11 -21
  122. package/dist/features/prepared-graphics.d.ts.map +1 -1
  123. package/dist/features/render-graph-compute.d.ts +2 -2
  124. package/dist/features/render-graph-compute.d.ts.map +1 -1
  125. package/dist/features/render-graph-contribution.d.ts +4 -7
  126. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  127. package/dist/features/render-graph-raster.d.ts +7 -3
  128. package/dist/features/render-graph-raster.d.ts.map +1 -1
  129. package/dist/features/render-graph-resources.d.ts +6 -6
  130. package/dist/features/render-graph-resources.d.ts.map +1 -1
  131. package/dist/features/targets.d.ts +5 -5
  132. package/dist/features/targets.d.ts.map +1 -1
  133. package/dist/features/types.d.ts +11 -190
  134. package/dist/features/types.d.ts.map +1 -1
  135. package/dist/features/vocabulary.d.ts +14 -0
  136. package/dist/features/vocabulary.d.ts.map +1 -0
  137. package/dist/fullscreen-post-process-pass.d.ts +4 -25
  138. package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
  139. package/dist/glyph-text-layout-system.d.ts +3 -2
  140. package/dist/glyph-text-layout-system.d.ts.map +1 -1
  141. package/dist/gpu-driven/batch-topology.d.ts +6 -75
  142. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  143. package/dist/gpu-driven/production-raster.d.ts +13 -112
  144. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  145. package/dist/gpu-driven/view-gpu.d.ts +10 -66
  146. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  147. package/dist/gpu-resource.d.ts +3 -3
  148. package/dist/gpu-scene-schema.d.ts +1 -94
  149. package/dist/gpu-scene-schema.d.ts.map +1 -1
  150. package/dist/gpu-scene.d.ts +7 -33
  151. package/dist/gpu-scene.d.ts.map +1 -1
  152. package/dist/hdrp-buffers.d.ts +3 -53
  153. package/dist/hdrp-buffers.d.ts.map +1 -1
  154. package/dist/ibl/IblPipelineCache.d.ts +74 -180
  155. package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
  156. package/dist/ibl/skylight-bind-group.d.ts +1 -1
  157. package/dist/index.d.ts +17 -43
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.mjs +167 -3
  160. package/dist/index.mjs.map +1 -1
  161. package/dist/inspection-types.d.ts +72 -0
  162. package/dist/inspection-types.d.ts.map +1 -0
  163. package/dist/instance-buffer-cache.d.ts +1 -4
  164. package/dist/instance-buffer-cache.d.ts.map +1 -1
  165. package/dist/internal.d.ts +1 -73
  166. package/dist/internal.d.ts.map +1 -1
  167. package/dist/internal.mjs +1 -43
  168. package/dist/internal.mjs.map +1 -1
  169. package/dist/lifecycle.d.ts +36 -2
  170. package/dist/lifecycle.d.ts.map +1 -1
  171. package/dist/materials.d.ts +0 -3
  172. package/dist/materials.d.ts.map +1 -1
  173. package/dist/mesh-material-bindings.d.ts +0 -1
  174. package/dist/mesh-material-bindings.d.ts.map +1 -1
  175. package/dist/pbr-pipeline.d.ts +77 -29
  176. package/dist/pbr-pipeline.d.ts.map +1 -1
  177. package/dist/pipeline/standard-forward-lane.d.ts +5 -0
  178. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
  179. package/dist/pipeline/standard-pipeline.d.ts +31 -0
  180. package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
  181. package/dist/pipeline/standard-profile.d.ts +40 -0
  182. package/dist/pipeline/standard-profile.d.ts.map +1 -0
  183. package/dist/pipeline-builder.d.ts +3 -3
  184. package/dist/pipeline-builder.d.ts.map +1 -1
  185. package/dist/pipeline-spec-types.d.ts +24 -0
  186. package/dist/pipeline-spec-types.d.ts.map +1 -0
  187. package/dist/pipeline-spec.d.ts +16 -155
  188. package/dist/pipeline-spec.d.ts.map +1 -1
  189. package/dist/plugin.d.ts +1 -14
  190. package/dist/plugin.d.ts.map +1 -1
  191. package/dist/points-lines/__tests__/bounds.unit.test.d.ts +2 -0
  192. package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +1 -0
  193. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +2 -0
  194. package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +1 -0
  195. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +2 -0
  196. package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +1 -0
  197. package/dist/points-lines/__tests__/inspection.unit.test.d.ts +2 -0
  198. package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +1 -0
  199. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +2 -0
  200. package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +1 -0
  201. package/dist/points-lines/__tests__/points-lines.bench.d.ts +2 -0
  202. package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +1 -0
  203. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +2 -0
  204. package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +1 -0
  205. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +2 -0
  206. package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +1 -0
  207. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +2 -0
  208. package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +1 -0
  209. package/dist/points-lines/admission.d.ts +36 -0
  210. package/dist/points-lines/admission.d.ts.map +1 -0
  211. package/dist/points-lines/bounds.d.ts +8 -0
  212. package/dist/points-lines/bounds.d.ts.map +1 -0
  213. package/dist/points-lines/expansion-cache.d.ts +28 -0
  214. package/dist/points-lines/expansion-cache.d.ts.map +1 -0
  215. package/dist/points-lines/inspection.d.ts +53 -0
  216. package/dist/points-lines/inspection.d.ts.map +1 -0
  217. package/dist/points-lines/prepare.d.ts +67 -0
  218. package/dist/points-lines/prepare.d.ts.map +1 -0
  219. package/dist/points-lines/record.d.ts +60 -0
  220. package/dist/points-lines/record.d.ts.map +1 -0
  221. package/dist/points-lines/snapshot.d.ts +49 -0
  222. package/dist/points-lines/snapshot.d.ts.map +1 -0
  223. package/dist/post-process-errors.d.ts +18 -18
  224. package/dist/post-process-errors.d.ts.map +1 -1
  225. package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
  226. package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
  227. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
  228. package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
  229. package/dist/record/frame-lighting.d.ts +7 -73
  230. package/dist/record/frame-lighting.d.ts.map +1 -1
  231. package/dist/record/frame-snapshot.d.ts +44 -44
  232. package/dist/record/frame-snapshot.d.ts.map +1 -1
  233. package/dist/record/frame-targets.d.ts +5 -38
  234. package/dist/record/frame-targets.d.ts.map +1 -1
  235. package/dist/record/frame.d.ts +64 -52
  236. package/dist/record/frame.d.ts.map +1 -1
  237. package/dist/record/helpers.d.ts +3 -2
  238. package/dist/record/helpers.d.ts.map +1 -1
  239. package/dist/record/main-pass-geometry.d.ts +12 -4
  240. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  241. package/dist/record/main-pass-material.d.ts +90 -59
  242. package/dist/record/main-pass-material.d.ts.map +1 -1
  243. package/dist/record/main-pass-sprite-draws.d.ts +28 -3
  244. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  245. package/dist/record/main-pass.d.ts +1 -1
  246. package/dist/record/main-pass.d.ts.map +1 -1
  247. package/dist/record/mesh-ssbo.d.ts +276 -3
  248. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  249. package/dist/record/render-context.d.ts +252 -0
  250. package/dist/record/render-context.d.ts.map +1 -0
  251. package/dist/record/shadow-pass.d.ts +15 -88
  252. package/dist/record/shadow-pass.d.ts.map +1 -1
  253. package/dist/record/skybox-post-pass.d.ts +1 -1
  254. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  255. package/dist/record/typed-frame-graph.d.ts +29 -7
  256. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  257. package/dist/record/view-ubo.d.ts +9 -3
  258. package/dist/record/view-ubo.d.ts.map +1 -1
  259. package/dist/render-contract.d.ts +424 -0
  260. package/dist/render-contract.d.ts.map +1 -0
  261. package/dist/render-data.d.ts.map +1 -1
  262. package/dist/render-graph-primitives.d.ts +14 -362
  263. package/dist/render-graph-primitives.d.ts.map +1 -1
  264. package/dist/render-pipeline.d.ts +25 -64
  265. package/dist/render-pipeline.d.ts.map +1 -1
  266. package/dist/render-system-extract.d.ts +110 -338
  267. package/dist/render-system-extract.d.ts.map +1 -1
  268. package/dist/render-system.d.ts +24 -713
  269. package/dist/render-system.d.ts.map +1 -1
  270. package/dist/scene/render-scene-types.d.ts +61 -0
  271. package/dist/scene/render-scene-types.d.ts.map +1 -0
  272. package/dist/scene/render-scene.d.ts +112 -0
  273. package/dist/scene/render-scene.d.ts.map +1 -0
  274. package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
  275. package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
  276. package/dist/ssao-buffers.d.ts +22 -3
  277. package/dist/ssao-buffers.d.ts.map +1 -1
  278. package/dist/systems/skin-palette-allocator.d.ts +2 -4
  279. package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
  280. package/dist/systems/skin-palette-types.d.ts +14 -0
  281. package/dist/systems/skin-palette-types.d.ts.map +1 -0
  282. package/dist/systems/transparent-sort-config.d.ts +23 -2
  283. package/dist/systems/transparent-sort-config.d.ts.map +1 -1
  284. package/dist/tilemap-chunk-extract-system.d.ts +4 -3
  285. package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
  286. package/dist/typed-render-graph-primitives.d.ts +2 -4
  287. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  288. package/dist/typed-shadow-passes.d.ts +3 -3
  289. package/dist/typed-shadow-passes.d.ts.map +1 -1
  290. package/package.json +23 -23
  291. package/src/__tests__/authoring-path.unit.test.ts +9 -0
  292. package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
  293. package/src/__tests__/callback-inference.test-d.ts +6 -3
  294. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
  295. package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
  296. package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
  297. package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
  298. package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
  299. package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
  300. package/src/__tests__/factory-contract.integration.test.ts +158 -209
  301. package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
  302. package/src/__tests__/frame-observation.contract.test.ts +17 -8
  303. package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
  304. package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
  305. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +21 -18
  306. package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
  307. package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
  308. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
  309. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
  310. package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
  311. package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
  312. package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
  313. package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
  314. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
  315. package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
  316. package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
  317. package/src/__tests__/gpu-scene.unit.test.ts +10 -24
  318. package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
  319. package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
  320. package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
  321. package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
  322. package/src/__tests__/material-cooked-projection.unit.test.ts +31 -58
  323. package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
  324. package/src/__tests__/material-static-dynamic-route.unit.test.ts +31 -50
  325. package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
  326. package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
  327. package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
  328. package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
  329. package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
  330. package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
  331. package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
  332. package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
  333. package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
  334. package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
  335. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
  336. package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
  337. package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
  338. package/src/__tests__/profiler-default-off.test.ts +1 -1
  339. package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
  340. package/src/__tests__/profiler-phase-integration.test.ts +5 -13
  341. package/src/__tests__/profiler-phase-token.test.ts +3 -8
  342. package/src/__tests__/public-surface.test-d.ts +65 -3
  343. package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
  344. package/src/__tests__/render-error-code-owner.test-d.ts +24 -23
  345. package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
  346. package/src/__tests__/render-error-exhaustive.test-d.ts +27 -1
  347. package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
  348. package/src/__tests__/render-feature-context.test-d.ts +16 -40
  349. package/src/__tests__/render-feature-contract.test-d.ts +9 -18
  350. package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
  351. package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
  352. package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
  353. package/src/__tests__/render-feature-plan.test-d.ts +161 -0
  354. package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
  355. package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
  356. package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
  357. package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
  358. package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
  359. package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
  360. package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
  361. package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
  362. package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
  363. package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
  364. package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
  365. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
  366. package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
  367. package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
  368. package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
  369. package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
  370. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +82 -95
  371. package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
  372. package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
  373. package/src/__tests__/ssao-config.unit.test.ts +36 -0
  374. package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
  375. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
  376. package/src/__tests__/standard-descriptors.test-d.ts +22 -0
  377. package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
  378. package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
  379. package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
  380. package/src/__tests__/surface-configuration.unit.test.ts +1 -2
  381. package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
  382. package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
  383. package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
  384. package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
  385. package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
  386. package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
  387. package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
  388. package/src/__tests__/visibility-extract.integration.test.ts +20 -11
  389. package/src/__tests__/visibility-extract.perf.test.ts +66 -32
  390. package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
  391. package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
  392. package/src/__tests__/visibility-instances.integration.test.ts +7 -11
  393. package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
  394. package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
  395. package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
  396. package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
  397. package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
  398. package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
  399. package/src/__tests__/vocabulary.unit.test.ts +1 -1
  400. package/src/assembly/backend-contract.ts +57 -0
  401. package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1741 -2699
  402. package/src/assembly/host-contract.ts +101 -0
  403. package/src/{renderer → assembly}/material/assembly.ts +2 -7
  404. package/src/assembly/material/pipeline-projection.ts +63 -0
  405. package/src/authoring.ts +15 -22
  406. package/src/components/__tests__/points-lines-admission.unit.test.ts +219 -0
  407. package/src/components/__tests__/points-lines-schema.unit.test.ts +56 -0
  408. package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
  409. package/src/components/glyph-text.ts +3 -2
  410. package/src/components/index.ts +14 -9
  411. package/src/components/instances.ts +4 -5
  412. package/src/components/light-helpers.ts +1 -1
  413. package/src/components/lines.ts +18 -0
  414. package/src/components/mesh-filter.ts +11 -10
  415. package/src/components/points.ts +40 -0
  416. package/src/components/post-process-params.ts +3 -3
  417. package/src/components/scene-instance.ts +12 -12
  418. package/src/components/skybox-background.ts +103 -0
  419. package/src/components/{environment.ts → skylight.ts} +2 -110
  420. package/src/components/sprite-animation.ts +3 -4
  421. package/src/components/sprite-instances.ts +2 -2
  422. package/src/components/sprite-playback-mode.ts +7 -1
  423. package/src/components/sprite-region-override.ts +2 -3
  424. package/src/components/tile-layer.ts +8 -2
  425. package/src/construct-renderer.ts +67 -4
  426. package/src/debug-draw-glue.ts +8 -129
  427. package/src/device/device-scope.ts +306 -0
  428. package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
  429. package/src/device/resource-types.ts +20 -0
  430. package/src/engine-metrics.ts +12 -19
  431. package/src/errors/recover.ts +45 -3
  432. package/src/errors/render.ts +469 -429
  433. package/src/features/fullscreen.ts +46 -0
  434. package/src/features/host.ts +575 -309
  435. package/src/features/morph/morph-feature.ts +195 -105
  436. package/src/features/plan.ts +447 -0
  437. package/src/features/prepared-gpu-work.ts +72 -15
  438. package/src/features/prepared-graphics-store.ts +20 -6
  439. package/src/features/prepared-graphics.ts +12 -71
  440. package/src/features/render-graph-compute.ts +14 -5
  441. package/src/features/render-graph-contribution.ts +43 -63
  442. package/src/features/render-graph-raster.ts +32 -8
  443. package/src/features/render-graph-resources.ts +25 -23
  444. package/src/features/targets.ts +8 -21
  445. package/src/features/types.ts +39 -227
  446. package/src/features/vocabulary.ts +24 -0
  447. package/src/fullscreen-post-process-pass.ts +14 -57
  448. package/src/glyph-text-layout-system.ts +70 -96
  449. package/src/gpu-driven/batch-topology.ts +24 -202
  450. package/src/gpu-driven/production-raster.ts +99 -1109
  451. package/src/gpu-driven/view-gpu.ts +46 -192
  452. package/src/gpu-resource.ts +4 -4
  453. package/src/gpu-scene-schema.ts +11 -99
  454. package/src/gpu-scene.ts +231 -364
  455. package/src/hdrp-buffers.ts +12 -221
  456. package/src/ibl/IblPipelineCache.ts +471 -711
  457. package/src/ibl/skylight-bind-group.ts +4 -4
  458. package/src/index.ts +75 -217
  459. package/src/inspection-types.ts +80 -0
  460. package/src/instance-buffer-cache.ts +1 -29
  461. package/src/internal.ts +6 -85
  462. package/src/lifecycle.ts +64 -19
  463. package/src/materials.ts +7 -29
  464. package/src/mesh-material-bindings.ts +0 -1
  465. package/src/pbr-pipeline.ts +441 -53
  466. package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
  467. package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
  468. package/src/pipeline/standard-profile.ts +65 -0
  469. package/src/pipeline-builder.ts +60 -64
  470. package/src/pipeline-spec-types.ts +28 -0
  471. package/src/pipeline-spec.ts +72 -609
  472. package/src/plugin.ts +7 -75
  473. package/src/points-lines/__tests__/bounds.unit.test.ts +21 -0
  474. package/src/points-lines/__tests__/cache-recovery.unit.test.ts +157 -0
  475. package/src/points-lines/__tests__/inspection-lanes.integration.test.ts +146 -0
  476. package/src/points-lines/__tests__/inspection.unit.test.ts +173 -0
  477. package/src/points-lines/__tests__/lane-structural.integration.test.ts +122 -0
  478. package/src/points-lines/__tests__/points-lines.bench.ts +400 -0
  479. package/src/points-lines/__tests__/raster-lane.integration.test.ts +44 -0
  480. package/src/points-lines/__tests__/snapshot.unit.test.ts +101 -0
  481. package/src/points-lines/__tests__/view-ubo.unit.test.ts +73 -0
  482. package/src/points-lines/admission.ts +238 -0
  483. package/src/points-lines/bounds.ts +23 -0
  484. package/src/points-lines/expansion-cache.ts +215 -0
  485. package/src/points-lines/inspection.ts +97 -0
  486. package/src/points-lines/prepare.ts +177 -0
  487. package/src/points-lines/record.ts +125 -0
  488. package/src/points-lines/snapshot.ts +130 -0
  489. package/src/post-process-errors.ts +31 -33
  490. package/src/prepare/prepared-graphics-resolver.ts +5 -4
  491. package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
  492. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
  493. package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
  494. package/src/record/frame-lighting.ts +88 -197
  495. package/src/record/frame-snapshot.ts +45 -60
  496. package/src/record/frame-targets.ts +8 -243
  497. package/src/record/frame.ts +521 -797
  498. package/src/record/helpers.ts +6 -11
  499. package/src/record/main-pass-geometry.ts +198 -147
  500. package/src/record/main-pass-material.ts +517 -190
  501. package/src/record/main-pass-sprite-draws.ts +199 -118
  502. package/src/record/main-pass.ts +166 -144
  503. package/src/record/mesh-ssbo.ts +517 -38
  504. package/src/record/render-context.ts +384 -0
  505. package/src/record/shadow-pass.ts +154 -1843
  506. package/src/record/skybox-post-pass.ts +14 -15
  507. package/src/record/typed-frame-graph.ts +224 -262
  508. package/src/record/view-ubo.ts +53 -37
  509. package/src/render-contract.ts +582 -0
  510. package/src/render-data.ts +3 -3
  511. package/src/render-graph-primitives.ts +76 -851
  512. package/src/render-pipeline.ts +104 -188
  513. package/src/render-system-extract.ts +1114 -1732
  514. package/src/render-system.ts +614 -1939
  515. package/src/scene/render-scene-types.ts +67 -0
  516. package/src/scene/render-scene.ts +1087 -0
  517. package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
  518. package/src/ssao-buffers.ts +167 -8
  519. package/src/systems/skin-palette-allocator.ts +21 -64
  520. package/src/systems/skin-palette-types.ts +14 -0
  521. package/src/systems/transparent-sort-config.ts +25 -3
  522. package/src/tilemap-chunk-extract-system.ts +53 -70
  523. package/src/typed-render-graph-primitives.ts +35 -24
  524. package/src/typed-shadow-passes.ts +26 -56
  525. package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
  526. package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
  527. package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
  528. package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
  529. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
  530. package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
  531. package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
  532. package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
  533. package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
  534. package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
  535. package/dist/__tests__/camera-temporal.test.d.ts +0 -2
  536. package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
  537. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
  538. package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
  539. package/dist/__tests__/environment-inspection.test.d.ts +0 -2
  540. package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
  541. package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
  542. package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
  543. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
  544. package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
  545. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
  546. package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
  547. package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
  548. package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
  549. package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
  550. package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
  551. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
  552. package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
  553. package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
  554. package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
  555. package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
  556. package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
  557. package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
  558. package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
  559. package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
  560. package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
  561. package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
  562. package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
  563. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
  564. package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
  565. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
  566. package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
  567. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
  568. package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
  569. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
  570. package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
  571. package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
  572. package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
  573. package/dist/__tests__/materials.unit.test.d.ts +0 -2
  574. package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
  575. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
  576. package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
  577. package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
  578. package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
  579. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
  580. package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
  581. package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
  582. package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
  583. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
  584. package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
  585. package/dist/__tests__/plugin.test.d.ts +0 -2
  586. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  587. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
  588. package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
  589. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
  590. package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
  591. package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
  592. package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
  593. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
  594. package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
  595. package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
  596. package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
  597. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
  598. package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
  599. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
  600. package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
  601. package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
  602. package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
  603. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
  604. package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
  605. package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
  606. package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
  607. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
  608. package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
  609. package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
  610. package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
  611. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
  612. package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
  613. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
  614. package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
  615. package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
  616. package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
  617. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
  618. package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
  619. package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
  620. package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
  621. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
  622. package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
  623. package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
  624. package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
  625. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
  626. package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
  627. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
  628. package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
  629. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
  630. package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
  631. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
  632. package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
  633. package/dist/chunk-DJIMFYX6.mjs +0 -1439
  634. package/dist/chunk-DJIMFYX6.mjs.map +0 -1
  635. package/dist/chunk-F2SIOCRM.mjs +0 -7423
  636. package/dist/chunk-F2SIOCRM.mjs.map +0 -1
  637. package/dist/chunk-JMSB7AR4.mjs +0 -3
  638. package/dist/chunk-JMSB7AR4.mjs.map +0 -1
  639. package/dist/chunk-KHI6K4C6.mjs +0 -659
  640. package/dist/chunk-KHI6K4C6.mjs.map +0 -1
  641. package/dist/chunk-PORZOL2V.mjs +0 -569
  642. package/dist/chunk-PORZOL2V.mjs.map +0 -1
  643. package/dist/chunk-UOJGMDGP.mjs +0 -29913
  644. package/dist/chunk-UOJGMDGP.mjs.map +0 -1
  645. package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
  646. package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
  647. package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
  648. package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
  649. package/dist/components/__tests__/fog.test-d.d.ts +0 -2
  650. package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
  651. package/dist/components/__tests__/fog.test.d.ts +0 -2
  652. package/dist/components/__tests__/fog.test.d.ts.map +0 -1
  653. package/dist/components/atmosphere.d.ts +0 -18
  654. package/dist/components/atmosphere.d.ts.map +0 -1
  655. package/dist/components/environment.d.ts +0 -115
  656. package/dist/components/environment.d.ts.map +0 -1
  657. package/dist/deferred-lighting.d.ts +0 -13
  658. package/dist/deferred-lighting.d.ts.map +0 -1
  659. package/dist/dynamic-texture-store.d.ts +0 -42
  660. package/dist/dynamic-texture-store.d.ts.map +0 -1
  661. package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
  662. package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
  663. package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
  664. package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
  665. package/dist/environment/__tests__/generation.test.d.ts +0 -2
  666. package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
  667. package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
  668. package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
  669. package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
  670. package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
  671. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
  672. package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
  673. package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
  674. package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
  675. package/dist/environment/__tests__/readiness.test.d.ts +0 -2
  676. package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
  677. package/dist/environment/__tests__/recovery.test.d.ts +0 -2
  678. package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
  679. package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
  680. package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
  681. package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
  682. package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
  683. package/dist/environment/__tests__/signature.test.d.ts +0 -2
  684. package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
  685. package/dist/environment/descriptors.d.ts +0 -2
  686. package/dist/environment/descriptors.d.ts.map +0 -1
  687. package/dist/environment/extracted-environment.d.ts +0 -53
  688. package/dist/environment/extracted-environment.d.ts.map +0 -1
  689. package/dist/environment/generation.d.ts +0 -62
  690. package/dist/environment/generation.d.ts.map +0 -1
  691. package/dist/environment/gpu-bundle.d.ts +0 -23
  692. package/dist/environment/gpu-bundle.d.ts.map +0 -1
  693. package/dist/environment/graph.d.ts +0 -108
  694. package/dist/environment/graph.d.ts.map +0 -1
  695. package/dist/environment/inspection.d.ts +0 -48
  696. package/dist/environment/inspection.d.ts.map +0 -1
  697. package/dist/environment/lifecycle.d.ts +0 -22
  698. package/dist/environment/lifecycle.d.ts.map +0 -1
  699. package/dist/environment/readiness.d.ts +0 -29
  700. package/dist/environment/readiness.d.ts.map +0 -1
  701. package/dist/environment/signature.d.ts +0 -70
  702. package/dist/environment/signature.d.ts.map +0 -1
  703. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
  704. package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
  705. package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
  706. package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
  707. package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
  708. package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  709. package/dist/extract/directional-csm.d.ts +0 -129
  710. package/dist/extract/directional-csm.d.ts.map +0 -1
  711. package/dist/extract/index.d.ts +0 -5
  712. package/dist/extract/index.d.ts.map +0 -1
  713. package/dist/extract/material-interface.d.ts +0 -56
  714. package/dist/extract/material-interface.d.ts.map +0 -1
  715. package/dist/extract/schema-readers.d.ts +0 -20
  716. package/dist/extract/schema-readers.d.ts.map +0 -1
  717. package/dist/features/graph-contribution.d.ts +0 -64
  718. package/dist/features/graph-contribution.d.ts.map +0 -1
  719. package/dist/features/index.d.ts +0 -21
  720. package/dist/features/index.d.ts.map +0 -1
  721. package/dist/features/morph/index.d.ts +0 -3
  722. package/dist/features/morph/index.d.ts.map +0 -1
  723. package/dist/features/morph/morph-bounds.d.ts +0 -42
  724. package/dist/features/morph/morph-bounds.d.ts.map +0 -1
  725. package/dist/features/scene-temporal.d.ts +0 -45
  726. package/dist/features/scene-temporal.d.ts.map +0 -1
  727. package/dist/features/taa-resolve.d.ts +0 -21
  728. package/dist/features/taa-resolve.d.ts.map +0 -1
  729. package/dist/frame-chain.d.ts +0 -14
  730. package/dist/frame-chain.d.ts.map +0 -1
  731. package/dist/gpu-driven/view-reference.d.ts.map +0 -1
  732. package/dist/gpu-resource-store.d.ts.map +0 -1
  733. package/dist/hdrp-cluster-membership.d.ts +0 -2
  734. package/dist/hdrp-cluster-membership.d.ts.map +0 -1
  735. package/dist/hdrp-pipeline.d.ts +0 -36
  736. package/dist/hdrp-pipeline.d.ts.map +0 -1
  737. package/dist/ibl/cubemap-projection.d.ts +0 -23
  738. package/dist/ibl/cubemap-projection.d.ts.map +0 -1
  739. package/dist/ibl/face-uniforms.d.ts +0 -65
  740. package/dist/ibl/face-uniforms.d.ts.map +0 -1
  741. package/dist/mesh-update-errors.d.ts +0 -71
  742. package/dist/mesh-update-errors.d.ts.map +0 -1
  743. package/dist/mipmap-generator.d.ts +0 -39
  744. package/dist/mipmap-generator.d.ts.map +0 -1
  745. package/dist/param-schema-projection-census.d.ts +0 -18
  746. package/dist/param-schema-projection-census.d.ts.map +0 -1
  747. package/dist/persistent-render-scene.d.ts +0 -158
  748. package/dist/persistent-render-scene.d.ts.map +0 -1
  749. package/dist/pipeline/index.d.ts +0 -11
  750. package/dist/pipeline/index.d.ts.map +0 -1
  751. package/dist/pipeline-errors.d.ts +0 -110
  752. package/dist/pipeline-errors.d.ts.map +0 -1
  753. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
  754. package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
  755. package/dist/prepare/index.d.ts +0 -4
  756. package/dist/prepare/index.d.ts.map +0 -1
  757. package/dist/prepare/schema-readers.d.ts +0 -11
  758. package/dist/prepare/schema-readers.d.ts.map +0 -1
  759. package/dist/record/__tests__/environment-record.test.d.ts +0 -2
  760. package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
  761. package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
  762. package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
  763. package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
  764. package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
  765. package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
  766. package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
  767. package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
  768. package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
  769. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
  770. package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
  771. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
  772. package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
  773. package/dist/record/frame-observation.d.ts +0 -38
  774. package/dist/record/frame-observation.d.ts.map +0 -1
  775. package/dist/record/index.d.ts +0 -15
  776. package/dist/record/index.d.ts.map +0 -1
  777. package/dist/record/main-pass-skin.d.ts +0 -46
  778. package/dist/record/main-pass-skin.d.ts.map +0 -1
  779. package/dist/record/main-pass-sprite.d.ts +0 -69
  780. package/dist/record/main-pass-sprite.d.ts.map +0 -1
  781. package/dist/record/material-payload.d.ts +0 -43
  782. package/dist/record/material-payload.d.ts.map +0 -1
  783. package/dist/record/material-slot-plan.d.ts +0 -26
  784. package/dist/record/material-slot-plan.d.ts.map +0 -1
  785. package/dist/record/membership-timing.d.ts +0 -232
  786. package/dist/record/membership-timing.d.ts.map +0 -1
  787. package/dist/record/shadow-caster-uniform.d.ts +0 -8
  788. package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
  789. package/dist/record/shadow-submit-mode.d.ts +0 -66
  790. package/dist/record/shadow-submit-mode.d.ts.map +0 -1
  791. package/dist/render-dispatch-membership.d.ts +0 -47
  792. package/dist/render-dispatch-membership.d.ts.map +0 -1
  793. package/dist/render-pipeline-context.d.ts +0 -289
  794. package/dist/render-pipeline-context.d.ts.map +0 -1
  795. package/dist/render-pipeline-target.d.ts +0 -16
  796. package/dist/render-pipeline-target.d.ts.map +0 -1
  797. package/dist/render-scene-projection.d.ts +0 -174
  798. package/dist/render-scene-projection.d.ts.map +0 -1
  799. package/dist/render-system-fold.d.ts +0 -266
  800. package/dist/render-system-fold.d.ts.map +0 -1
  801. package/dist/renderer/asset-service.d.ts +0 -10
  802. package/dist/renderer/asset-service.d.ts.map +0 -1
  803. package/dist/renderer/backend-selection.d.ts.map +0 -1
  804. package/dist/renderer/environment-classify.d.ts +0 -6
  805. package/dist/renderer/environment-classify.d.ts.map +0 -1
  806. package/dist/renderer/environment-error.d.ts +0 -13
  807. package/dist/renderer/environment-error.d.ts.map +0 -1
  808. package/dist/renderer/material/pipeline-projection.d.ts +0 -91
  809. package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
  810. package/dist/renderer/renderer-factory.d.ts +0 -289
  811. package/dist/renderer/renderer-factory.d.ts.map +0 -1
  812. package/dist/renderer.d.ts +0 -771
  813. package/dist/renderer.d.ts.map +0 -1
  814. package/dist/scene-utils/collect-subtree.d.ts +0 -11
  815. package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
  816. package/dist/ssao-data.d.ts +0 -34
  817. package/dist/ssao-data.d.ts.map +0 -1
  818. package/dist/surface-format.d.ts +0 -10
  819. package/dist/surface-format.d.ts.map +0 -1
  820. package/dist/taa-history-store.d.ts +0 -88
  821. package/dist/taa-history-store.d.ts.map +0 -1
  822. package/dist/temporal-coverage.d.ts +0 -35
  823. package/dist/temporal-coverage.d.ts.map +0 -1
  824. package/dist/temporal-frame-transaction.d.ts +0 -92
  825. package/dist/temporal-frame-transaction.d.ts.map +0 -1
  826. package/dist/temporal-inspection.d.ts +0 -57
  827. package/dist/temporal-inspection.d.ts.map +0 -1
  828. package/dist/temporal-view.d.ts +0 -43
  829. package/dist/temporal-view.d.ts.map +0 -1
  830. package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
  831. package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
  832. package/dist/urp-pipeline.d.ts +0 -4
  833. package/dist/urp-pipeline.d.ts.map +0 -1
  834. package/src/__tests__/analytic-sky-contract.test.ts +0 -27
  835. package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
  836. package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
  837. package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
  838. package/src/__tests__/backend-selection.integration.test.ts +0 -11
  839. package/src/__tests__/camera-temporal.test-d.ts +0 -8
  840. package/src/__tests__/camera-temporal.test.ts +0 -188
  841. package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
  842. package/src/__tests__/environment-inspection.test.ts +0 -45
  843. package/src/__tests__/fog-ai-user.fixture.ts +0 -350
  844. package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
  845. package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
  846. package/src/__tests__/fog-inspection.integration.test.ts +0 -127
  847. package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
  848. package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
  849. package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
  850. package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
  851. package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
  852. package/src/__tests__/fog-temporal.integration.test.ts +0 -115
  853. package/src/__tests__/frame-chain.unit.test.ts +0 -26
  854. package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
  855. package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
  856. package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
  857. package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
  858. package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
  859. package/src/__tests__/materials.unit.test.ts +0 -25
  860. package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
  861. package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
  862. package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
  863. package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
  864. package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
  865. package/src/__tests__/plugin.test.ts +0 -25
  866. package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
  867. package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
  868. package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
  869. package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
  870. package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
  871. package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
  872. package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
  873. package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
  874. package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
  875. package/src/__tests__/render-feature-order.unit.test.ts +0 -66
  876. package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
  877. package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
  878. package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
  879. package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
  880. package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
  881. package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
  882. package/src/__tests__/taa-history-store.unit.test.ts +0 -196
  883. package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
  884. package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
  885. package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
  886. package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
  887. package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
  888. package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
  889. package/src/components/__tests__/atmosphere-red.test.ts +0 -51
  890. package/src/components/__tests__/atmosphere.test.ts +0 -79
  891. package/src/components/__tests__/fog.test-d.ts +0 -49
  892. package/src/components/__tests__/fog.test.ts +0 -60
  893. package/src/components/atmosphere.ts +0 -64
  894. package/src/deferred-lighting.ts +0 -92
  895. package/src/dynamic-texture-store.ts +0 -111
  896. package/src/environment/README.md +0 -76
  897. package/src/environment/__tests__/failure-injection.test.ts +0 -50
  898. package/src/environment/__tests__/generation-red.test.ts +0 -64
  899. package/src/environment/__tests__/generation.test.ts +0 -37
  900. package/src/environment/__tests__/graph-transaction.test.ts +0 -85
  901. package/src/environment/__tests__/inspection-red.test.ts +0 -53
  902. package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
  903. package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
  904. package/src/environment/__tests__/readiness.test.ts +0 -42
  905. package/src/environment/__tests__/recovery.test.ts +0 -62
  906. package/src/environment/__tests__/resize-dispose.test.ts +0 -30
  907. package/src/environment/__tests__/signature-red.test.ts +0 -45
  908. package/src/environment/__tests__/signature.test.ts +0 -60
  909. package/src/environment/descriptors.ts +0 -7
  910. package/src/environment/extracted-environment.ts +0 -239
  911. package/src/environment/generation.ts +0 -158
  912. package/src/environment/gpu-bundle.ts +0 -144
  913. package/src/environment/graph.ts +0 -588
  914. package/src/environment/inspection.ts +0 -107
  915. package/src/environment/lifecycle.ts +0 -124
  916. package/src/environment/readiness.ts +0 -76
  917. package/src/environment/signature.ts +0 -185
  918. package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
  919. package/src/extract/__tests__/environment-source.test.ts +0 -105
  920. package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
  921. package/src/extract/directional-csm.ts +0 -959
  922. package/src/extract/index.ts +0 -10
  923. package/src/extract/material-interface.ts +0 -604
  924. package/src/extract/schema-readers.ts +0 -27
  925. package/src/features/graph-contribution.ts +0 -577
  926. package/src/features/index.ts +0 -100
  927. package/src/features/morph/index.ts +0 -24
  928. package/src/features/morph/morph-bounds.ts +0 -123
  929. package/src/features/scene-temporal.ts +0 -274
  930. package/src/features/taa-resolve.ts +0 -244
  931. package/src/frame-chain.ts +0 -21
  932. package/src/hdrp-cluster-membership.ts +0 -70
  933. package/src/ibl/cubemap-projection.ts +0 -60
  934. package/src/ibl/face-uniforms.ts +0 -150
  935. package/src/mesh-update-errors.ts +0 -113
  936. package/src/mipmap-generator.ts +0 -244
  937. package/src/param-schema-projection-census.ts +0 -73
  938. package/src/persistent-render-scene.ts +0 -1752
  939. package/src/pipeline/index.ts +0 -40
  940. package/src/pipeline-errors.ts +0 -172
  941. package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
  942. package/src/prepare/index.ts +0 -8
  943. package/src/prepare/schema-readers.ts +0 -20
  944. package/src/record/__tests__/environment-record.test.ts +0 -35
  945. package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
  946. package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
  947. package/src/record/__tests__/render-submission.integration.test.ts +0 -76
  948. package/src/record/__tests__/render-submission.perf.test.ts +0 -141
  949. package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
  950. package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
  951. package/src/record/frame-observation.ts +0 -122
  952. package/src/record/index.ts +0 -15
  953. package/src/record/main-pass-skin.ts +0 -51
  954. package/src/record/main-pass-sprite.ts +0 -166
  955. package/src/record/material-payload.ts +0 -292
  956. package/src/record/material-slot-plan.ts +0 -68
  957. package/src/record/membership-timing.ts +0 -1012
  958. package/src/record/shadow-caster-uniform.ts +0 -37
  959. package/src/record/shadow-submit-mode.ts +0 -277
  960. package/src/render-dispatch-membership.ts +0 -155
  961. package/src/render-pipeline-context.ts +0 -332
  962. package/src/render-pipeline-target.ts +0 -96
  963. package/src/render-scene-projection.ts +0 -1738
  964. package/src/render-system-fold.ts +0 -531
  965. package/src/renderer/asset-service.ts +0 -32
  966. package/src/renderer/backend-selection.ts +0 -121
  967. package/src/renderer/environment-classify.ts +0 -30
  968. package/src/renderer/environment-error.ts +0 -19
  969. package/src/renderer/material/pipeline-projection.ts +0 -140
  970. package/src/renderer.ts +0 -940
  971. package/src/scene-utils/collect-subtree.ts +0 -40
  972. package/src/ssao-data.ts +0 -106
  973. package/src/surface-format.ts +0 -37
  974. package/src/taa-history-store.ts +0 -429
  975. package/src/temporal-coverage.ts +0 -106
  976. package/src/temporal-frame-transaction.ts +0 -301
  977. package/src/temporal-inspection.ts +0 -194
  978. package/src/temporal-view.ts +0 -174
  979. package/src/tilemap/resolve-tileset-runtime.ts +0 -72
@@ -1,21 +1,17 @@
1
1
  // @forgeax/engine-runtime - RenderSystem record stage: helpers.
2
2
  // Extracted from render-system-record.ts (feat-20260704 M3/w17, pure move).
3
3
 
4
+ import { resolveAssetHandle } from '@forgeax/engine-assets-runtime';
4
5
  import type { World } from '@forgeax/engine-ecs';
5
6
  import { type Mat4, mat4 } from '@forgeax/engine-math';
6
7
  import type { EquirectAsset } from '@forgeax/engine-types';
7
8
  import { toShared } from '@forgeax/engine-types';
8
- import { resolveRenderAsset } from '../assets/resolve-render-asset';
9
9
  import { EquirectProjectionFailedError } from '../errors/render';
10
10
  import { isStandardPbrMaterialShader } from '../pbr-pipeline';
11
- import type { RenderSystemInternals } from '../render-system';
12
- import type {
13
- CameraSnapshot,
14
- MaterialSnapshot,
15
- SkyboxSnapshot,
16
- SkylightSnapshot,
17
- } from '../render-system-extract';
11
+ import type { CameraSnapshot } from '../render-contract';
12
+ import type { MaterialSnapshot, SkyboxSnapshot, SkylightSnapshot } from '../render-system-extract';
18
13
  import type { RenderFrameState } from './frame-snapshot';
14
+ import type { RenderSystemInternals } from './render-context';
19
15
 
20
16
  /** Convert pass-owned shader definitions into the manifest's canonical variant key. */
21
17
  export function variantSetFromDefines(
@@ -225,7 +221,7 @@ export function driveLazyEquirectProjection(
225
221
  if (status !== undefined) return;
226
222
 
227
223
  // First sight: resolve the equirect POD and fire-and-forget the projection.
228
- const podRes = resolveRenderAsset<EquirectAsset>(world, handle);
224
+ const podRes = resolveAssetHandle<EquirectAsset>(world, handle);
229
225
  if (!podRes.ok || podRes.value.kind !== 'equirect') {
230
226
  // The handle does not resolve to a live equirect POD (stale / wrong kind).
231
227
  // Launch nothing; the store stays empty and the white fallback holds. The
@@ -261,8 +257,7 @@ export function computeViewMatrix(camera: CameraSnapshot): Mat4 {
261
257
  // world mat4 (propagateTransforms output) is read straight off the snapshot;
262
258
  // no recompose from decomposed TRS.
263
259
  const cameraFromWorld = mat4.create();
264
- // brand-cast-ok: camera.world is an existing snapshot view read as Mat4 input.
265
- mat4.invert(cameraFromWorld, camera.world as unknown as Mat4);
260
+ mat4.invert(cameraFromWorld, camera.world);
266
261
  return cameraFromWorld;
267
262
  }
268
263
 
@@ -2,6 +2,7 @@
2
2
  // feat-20260704 M5/w31: further-split from main-pass.ts (AC-05 <=1500 lines/file).
3
3
  // recordGeometryDraws + resolveGeometryInstanceBuffer, moved verbatim.
4
4
 
5
+ import type { World } from '@forgeax/engine-ecs';
5
6
  import {
6
7
  type BindGroup,
7
8
  type Buffer,
@@ -16,22 +17,20 @@ import {
16
17
  GPU_BUFFER_USAGE_STORAGE,
17
18
  GPU_BUFFER_USAGE_UNIFORM,
18
19
  } from '../gpu-usage';
19
- import {
20
- type InstanceBufferCacheEntry,
21
- packTemporalInstanceTransforms,
22
- } from '../instance-buffer-cache';
20
+ import type { InstanceBufferCacheEntry } from '../instance-buffer-cache';
23
21
  import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from '../materials';
24
22
  import { SKIN_MATERIAL_SHADER_ID } from '../pbr-pipeline';
25
- import { variantSetFromVertexLayoutProjection } from '../pipeline';
26
- import { renderStateHash } from '../pipeline-spec';
27
- import type { _InternalRenderPipelineContext } from '../render-pipeline-context';
28
- import { MATERIAL_PER_ENTITY_STRIDE } from '../render-system';
23
+ import { renderStateHash, variantSetFromVertexLayoutProjection } from '../pipeline-spec';
24
+ import type { PointsLinesRecordPlan } from '../points-lines/record';
25
+ import { POINTS_LINES_MATERIAL_SHADER_ID } from '../points-lines/record';
26
+ import type { RenderRecordPhase } from '../render-contract';
29
27
  import type { MaterialSnapshot } from '../render-system-extract';
30
- import type { RenderRecordPhase } from '../renderer';
31
- import { routeMaterialReadiness } from '../renderer/material/pipeline-projection';
32
- import { rasterItemKey, worldEntityKey } from './frame-snapshot';
33
- import { isEntityFullyTransparent, selectGeometryPipeline } from './main-pass-material';
34
- import { interleaveSpriteInstanceBuffer } from './main-pass-sprite';
28
+ import { worldEntityKey } from './frame-snapshot';
29
+ import {
30
+ geometryRenderStateForTopology,
31
+ isEntityFullyTransparent,
32
+ selectGeometryPipeline,
33
+ } from './main-pass-material';
35
34
  import {
36
35
  getOrCreateFromChain,
37
36
  INSTANCE_UBO_FULL_ARRAY_BYTES,
@@ -39,7 +38,11 @@ import {
39
38
  MESH_PER_ENTITY_STRIDE,
40
39
  MESH_SSBO_BYTES,
41
40
  MESH_UBO_FULL_ARRAY_BYTES,
41
+ packInstanceStorageBuffer,
42
42
  } from './mesh-ssbo';
43
+ import type { _InternalRenderPipelineContext } from './render-context';
44
+ import { MATERIAL_PER_ENTITY_STRIDE } from './render-context';
45
+ import { POINTS_LINES_VIEW_SLOT_STRIDE, writePointsLinesViewUbo } from './view-ubo';
43
46
 
44
47
  type GeometryInstanceDraw = {
45
48
  readonly instanceBuffer: Buffer;
@@ -72,8 +75,7 @@ function geometryRecordPhase(
72
75
  passKind: PassKind,
73
76
  segment: GeometryRecordProfileSegment,
74
77
  ): RenderRecordPhase {
75
- const pass =
76
- passKind === 'deferred' ? 'g-buffer' : passKind === 'temporal' ? 'scene-temporal' : 'forward';
78
+ const pass = passKind === 'deferred' ? 'g-buffer' : 'forward';
77
79
  return `record/graph-execute/${pass}/${segment}` as RenderRecordPhase;
78
80
  }
79
81
 
@@ -116,6 +118,23 @@ function submitSubmeshDraws(
116
118
  }
117
119
  }
118
120
 
121
+ /**
122
+ * Issues a prepared Points/Lines draw into the already-open geometry pass.
123
+ * Pass lifetime, attachments, bind groups, and submission remain owned by the
124
+ * existing main-pass interpreter.
125
+ */
126
+ export function recordPointsLinesDraw(
127
+ pass: RhiRenderPassEncoder,
128
+ plan: PointsLinesRecordPlan,
129
+ ): void {
130
+ if (plan.drawCount === 0) return;
131
+ if (plan.indexCount > 0) {
132
+ pass.drawIndexed(plan.indexCount, 1, 0, 0, 0);
133
+ return;
134
+ }
135
+ pass.draw(plan.vertexCount, 1, 0, 0);
136
+ }
137
+
119
138
  /**
120
139
  * feat-20260704 M3/w19: per-entity geometry (main colour) draw loop, extracted
121
140
  * verbatim from recordMainPass. Walks `c.validatedOrdered`, selects the
@@ -125,22 +144,24 @@ function submitSubmeshDraws(
125
144
  * transparent entities are skipped here (drawn in the LDR blend sub-pass);
126
145
  * mixed meshes draw their opaque submeshes here and skip transparent submeshes.
127
146
  * The pass-selector match set, per-entity material-slot start table, MSAA sample
128
- * count, group(2) bind group, and the shared per-submesh material BG builder are
129
- * threaded in explicitly.
147
+ * count, Standard group(2) bind group, fallback mesh group(2) bind group, and
148
+ * the shared per-submesh material BG builder are threaded in explicitly.
130
149
  *
131
150
  * @internal
132
151
  */
133
152
  export function recordGeometryDraws(
134
153
  c: _InternalRenderPipelineContext,
135
154
  pass: RhiRenderPassEncoder,
136
- matchedIndices: Set<number> | null,
155
+ matchedMaterials: ReadonlyMap<number, ReadonlySet<number>> | null,
137
156
  materialSlotIndices: readonly (readonly number[])[],
138
157
  sampleCount: number,
139
158
  meshGroup2: BindGroup | null,
159
+ meshBindGroup: BindGroup | null,
140
160
  resolveMaterialBindGroup: (
141
161
  materialSlot: number,
142
162
  submeshMaterial: MaterialSnapshot,
143
163
  entityKey: number,
164
+ materialWorld: World,
144
165
  ) => BindGroup,
145
166
  passKind: PassKind = 'forward',
146
167
  ): void {
@@ -154,6 +175,7 @@ export function recordGeometryDraws(
154
175
  msaaActive,
155
176
  validatedOrdered,
156
177
  splitLdrSprite,
178
+ viewBindGroup,
157
179
  } = c;
158
180
  const colorFormatOverride = c.transparentColorFormat as GPUTextureFormat | undefined;
159
181
  let lastVertexBuffer: GpuBuffer | null = null;
@@ -173,7 +195,7 @@ export function recordGeometryDraws(
173
195
  const profilePhase = c.profilePhase;
174
196
  const materialGroup1DynamicOffsets = new Uint32Array(1);
175
197
  const meshGroup2DynamicOffsets = [0];
176
- const skinGroup2DynamicOffsets = [0, 0, 0];
198
+ const skinGroup2DynamicOffsets = [0, 0];
177
199
  let lastStencilReference: number | null = null;
178
200
  // feat-20260625-refactor-sprite-as-transparent-mesh M3 / w14 (D-7):
179
201
  // sprite PSO selection no longer maintains a dedicated tag — the
@@ -197,7 +219,6 @@ export function recordGeometryDraws(
197
219
  variantSet: string | undefined,
198
220
  colorFormat: GPUTextureFormat | undefined,
199
221
  layoutProjection: import('@forgeax/engine-geometry').VertexLayoutProjection,
200
- materialGuid?: string,
201
222
  ): RenderPipeline | null => {
202
223
  const renderStateKey = renderStateHash(renderState);
203
224
  const shaderLookupCache = materialPipelineLookupCache.get(materialShaderId);
@@ -243,8 +264,6 @@ export function recordGeometryDraws(
243
264
  undefined,
244
265
  undefined,
245
266
  undefined,
246
- materialGuid,
247
- undefined,
248
267
  layoutProjection,
249
268
  ) ?? null;
250
269
  const handle =
@@ -257,7 +276,7 @@ export function recordGeometryDraws(
257
276
  renderStateKey,
258
277
  topology,
259
278
  indexFormat,
260
- variantSet: resolvedVariantSet,
279
+ variantSet,
261
280
  passKind,
262
281
  layoutProjection,
263
282
  sampleCount,
@@ -278,8 +297,22 @@ export function recordGeometryDraws(
278
297
  const entry = validatedOrdered[i];
279
298
  if (entry === undefined) continue;
280
299
 
300
+ // Points/Lines share the Standard geometry pass. Their retained source
301
+ // is prepared once by the renderer owner, while this loop remains the
302
+ // sole pass/draw submission owner and preserves the authored topology.
303
+ const pointsLinesSubmission = c.pointsLines?.prepare(entry, frameState.isHdrpActive);
304
+ if (entry.source.pointsLines !== undefined && pointsLinesSubmission?.plan.drawCount !== 1)
305
+ continue;
306
+
307
+ if (
308
+ passKind === 'forward' &&
309
+ c.gpuDrivenEntityKeys.has(worldEntityKey(entry.source.worldId, entry.source.entityKey))
310
+ ) {
311
+ continue;
312
+ }
313
+
281
314
  // feat-20260609 M2: skip entities that don't match the pass selector.
282
- if (matchedIndices !== null && !matchedIndices.has(entry.renderableIndex)) continue;
315
+ if (matchedMaterials !== null && !matchedMaterials.has(entry.renderableIndex)) continue;
283
316
 
284
317
  // D-2 generalised feat-20260625 M2 / w7: transparent entities are
285
318
  // dispatched in the separate sub-pass (bgra8unorm unorm view,
@@ -297,8 +330,7 @@ export function recordGeometryDraws(
297
330
  // decal submesh) is NOT skipped at the entity level; its opaque submeshes
298
331
  // draw here and the per-submesh loop below skips the transparent ones
299
332
  // (they are drawn in the blend sub-pass instead).
300
- if (passKind === 'forward' && splitLdrSprite && isEntityFullyTransparent(entry.source))
301
- continue;
333
+ if (splitLdrSprite && isEntityFullyTransparent(entry.source)) continue;
302
334
 
303
335
  const pipelineTag: 'unlit' = 'unlit';
304
336
 
@@ -312,6 +344,70 @@ export function recordGeometryDraws(
312
344
  lastStencilReference = stencilReference;
313
345
  }
314
346
 
347
+ if (pointsLinesSubmission !== undefined && entry.source.pointsLines !== undefined) {
348
+ const pointsLinesMaterial: MaterialSnapshot = {
349
+ ...entry.source.material,
350
+ materialShaderId: POINTS_LINES_MATERIAL_SHADER_ID,
351
+ materialParamSchema:
352
+ runtime.getParamSchema?.(POINTS_LINES_MATERIAL_SHADER_ID) ??
353
+ entry.source.material.materialParamSchema,
354
+ };
355
+ const materialSlot = materialSlotIndices[i]?.[0] ?? 0;
356
+ const pointsLinesBindGroup = resolveMaterialBindGroup(
357
+ materialSlot,
358
+ pointsLinesMaterial,
359
+ entry.source.entityKey,
360
+ entry.world ?? c.world,
361
+ );
362
+ const pointsLinesPipeline = resolveMaterialPipeline(
363
+ POINTS_LINES_MATERIAL_SHADER_ID,
364
+ {
365
+ ...pointsLinesMaterial.renderState,
366
+ cullMode: 'none',
367
+ },
368
+ 'triangle-list',
369
+ 'uint32',
370
+ undefined,
371
+ colorFormatOverride,
372
+ pointsLinesSubmission.layoutProjection,
373
+ );
374
+ if (pointsLinesPipeline === null) continue;
375
+ if (pipelineState.pointsLinesViewBuffer === undefined) continue;
376
+ writePointsLinesViewUbo(
377
+ runtime.device.queue,
378
+ pipelineState.pointsLinesViewBuffer,
379
+ c.camera,
380
+ c.targetW,
381
+ c.targetH,
382
+ entry.source.transform.world,
383
+ entry.source.pointsLines.style,
384
+ i * POINTS_LINES_VIEW_SLOT_STRIDE,
385
+ );
386
+ pass.setBindGroup(
387
+ 0,
388
+ viewBindGroup as BindGroup,
389
+ new Uint32Array([i * POINTS_LINES_VIEW_SLOT_STRIDE]),
390
+ 0,
391
+ 1,
392
+ );
393
+ pass.setPipeline(pointsLinesPipeline);
394
+ pass.setVertexBuffer(0, pointsLinesSubmission.vertexBuffer);
395
+ pass.setIndexBuffer(pointsLinesSubmission.indexBuffer, 'uint32');
396
+ materialGroup1DynamicOffsets[0] = materialSlot * MATERIAL_PER_ENTITY_STRIDE;
397
+ pass.setBindGroup(1, pointsLinesBindGroup, materialGroup1DynamicOffsets, 0, 1);
398
+ const pointsLinesMeshGroup = meshBindGroup ?? meshGroup2;
399
+ if (pointsLinesMeshGroup === null) continue;
400
+ pass.setBindGroup(2, pointsLinesMeshGroup, meshGroup2DynamicOffsets);
401
+ pass.setBindGroup(
402
+ 3,
403
+ identityInstanceDraws[0]?.instanceBindGroup ??
404
+ resolveGeometryInstancesBindGroup(c, identityInstanceBuffer),
405
+ );
406
+ recordPointsLinesDraw(pass, pointsLinesSubmission.plan);
407
+ pass.setBindGroup(0, viewBindGroup as BindGroup, [0]);
408
+ continue;
409
+ }
410
+
315
411
  if (entry.mesh.vertexBuffer !== lastVertexBuffer) {
316
412
  pass.setVertexBuffer(0, entry.mesh.vertexBuffer.handle);
317
413
  lastVertexBuffer = entry.mesh.vertexBuffer;
@@ -338,11 +434,11 @@ export function recordGeometryDraws(
338
434
  const instanceDraws = resolveGeometryInstanceBuffer(c, entry, identityInstanceDraws);
339
435
  if (instanceDraws === null) continue;
340
436
 
341
- // feat-20260611 R2 / M8 / w28 (IS-14): skin entries need a 3-binding
342
- // group(2) BG matching `pbr-skin-pl` (binding 0 mesh-array UBO plus
343
- // bindings 1/2 current/previous palette UBOs). Building this here -- not in the
437
+ // feat-20260611 R2 / M8 / w28 (IS-14): skin entries need a 2-binding
438
+ // group(2) BG matching `pbr-skin-pl` (binding 0 mesh-array UBO +
439
+ // binding 1 palette UBO). Building this here -- not in the
344
440
  // `meshBindGroup` factory above -- because the binding-shape
345
- // (1-entry vs 3-entry) is per-entry, not per-frame. URP / HDRP
441
+ // (1-entry vs 2-entry) is per-entry, not per-frame. URP / HDRP
346
442
  // entries keep using `meshGroup2` (1-entry mesh-array or HDRP
347
443
  // unified). The skin-variant cache key includes both buffer
348
444
  // identities so a future allocator-driven palette buffer rotation
@@ -359,7 +455,7 @@ export function recordGeometryDraws(
359
455
  // captured. Mirrors the uniform null skip-draw pattern (M6-T1).
360
456
  let group2BindGroup: BindGroup = meshGroup2 as BindGroup;
361
457
  // feat-20260612-skin-palette-per-frame-upload M3 / m3-2: dyn-offset
362
- // tuple sourced from `_computeSkinGroup2DynOffsets`. Defaults to the
458
+ // tuple follows the skin group2 offset contract. Defaults to the
363
459
  // length-1 non-skin shape; the skin branch below re-computes with the
364
460
  // per-entity `entry.source.skin.byteOffset` cursor.
365
461
  meshGroup2DynamicOffsets[0] = i * MESH_PER_ENTITY_STRIDE;
@@ -389,12 +485,11 @@ export function recordGeometryDraws(
389
485
  ? {
390
486
  meshArrayBgl: pipelineState.pbrSkinMeshBindGroupLayout,
391
487
  paletteBuffer: skinSlice.buffer,
392
- previousPaletteBuffer: skinSlice.previousBuffer ?? skinSlice.buffer,
393
488
  paletteBindingWindowBytes: skinAllocator.bindingWindowBytes,
394
489
  }
395
490
  : null;
396
491
  // Probe the skin PSO cache up front so we can decide whether to swap
397
- // to the 3-binding skin BG. The same probe + selector is repeated in
492
+ // to the 2-binding skin BG. The same probe + selector is repeated in
398
493
  // the per-submesh loop below (the loop's variantSet derivation is
399
494
  // identical -- skin shader registers a single all-true variant so
400
495
  // the canonical empty-key rule applies on HDRP and the URP key is
@@ -423,8 +518,6 @@ export function recordGeometryDraws(
423
518
  undefined,
424
519
  undefined,
425
520
  undefined,
426
- undefined,
427
- undefined,
428
521
  entry.mesh.layoutProjection,
429
522
  ) ?? null)
430
523
  : null;
@@ -446,11 +539,7 @@ export function recordGeometryDraws(
446
539
  const skinMissesBefore = bindGroupCounts.createBindGroup;
447
540
  const skinBindGroup: BindGroup = getOrCreateFromChain(
448
541
  frameState.meshBindGroupCache,
449
- [
450
- pipelineState.meshStorageBuffer.buffer,
451
- skinResources.paletteBuffer,
452
- skinResources.previousPaletteBuffer,
453
- ],
542
+ [pipelineState.meshStorageBuffer.buffer, skinResources.paletteBuffer],
454
543
  'pbr-skin-mesh',
455
544
  () => {
456
545
  const result = runtime.device.createBindGroup({
@@ -488,17 +577,6 @@ export function recordGeometryDraws(
488
577
  },
489
578
  },
490
579
  },
491
- {
492
- binding: 2,
493
- resource: {
494
- kind: 'buffer',
495
- value: {
496
- buffer: skinResources.previousPaletteBuffer,
497
- offset: 0,
498
- size: skinResources.paletteBindingWindowBytes,
499
- },
500
- },
501
- },
502
580
  ],
503
581
  });
504
582
  if (!result.ok) throw result.error;
@@ -511,14 +589,13 @@ export function recordGeometryDraws(
511
589
  else skinStats.hit += 1;
512
590
  }
513
591
  group2BindGroup = skinBindGroup;
514
- // m3-2: dyn-offset tuple via `_computeSkinGroup2DynOffsets` with the
515
- // per-entity palette cursor M2 m2-6 wrote at the extract stage.
592
+ // m3-2: dyn-offset tuple uses the per-entity palette cursor M2 m2-6
593
+ // wrote at the extract stage.
516
594
  // Replaces the prior PR #353 hard-coded `0` second slot -- every
517
595
  // skin entry now points the palette window at its own slice while
518
596
  // sharing the worst-case BG entry size above.
519
597
  skinGroup2DynamicOffsets[0] = i * MESH_PER_ENTITY_STRIDE;
520
598
  skinGroup2DynamicOffsets[1] = entry.source.skin?.byteOffset ?? 0;
521
- skinGroup2DynamicOffsets[2] = entry.source.skin?.byteOffset ?? 0;
522
599
  group2DynamicOffsets = skinGroup2DynamicOffsets;
523
600
  } else if (isSkinEntry) {
524
601
  // Skin entry but skin PSO not ready (cache miss / async build pending,
@@ -530,8 +607,6 @@ export function recordGeometryDraws(
530
607
  // null skip-draw shape (M6-T1, charter P3 explicit failure).
531
608
  continue;
532
609
  }
533
- pass.setBindGroup(2, group2BindGroup, group2DynamicOffsets);
534
-
535
610
  // feat-20260520-2d-sprite-layer-mvp M-3 / w25 (@fallback sprite
536
611
  // bucket): sprite entries get a per-entity material BindGroup so
537
612
  // each sprite carries its own texture binding at @group(1) @binding(2).
@@ -582,31 +657,19 @@ export function recordGeometryDraws(
582
657
  for (let smIdx = 0; smIdx < entry.mesh.submeshes.length; smIdx++) {
583
658
  const sm = entry.mesh.submeshes[smIdx];
584
659
  if (sm === undefined) continue;
585
- const gpuDrivenDraw = entry.source.gpuDrivenDraws?.find(
586
- (draw) => draw.submeshIndex === smIdx,
587
- );
588
- if (
589
- passKind === 'forward' &&
590
- gpuDrivenDraw !== undefined &&
591
- c.gpuDrivenItemKeys.has(
592
- rasterItemKey(
593
- entry.source.worldId,
594
- entry.source.entityKey,
595
- gpuDrivenDraw.submeshIndex,
596
- gpuDrivenDraw.passIndex,
597
- ),
598
- )
599
- ) {
600
- continue;
601
- }
602
660
  const matSlotIdx = sm.materialSlot;
603
661
  const submeshMaterial = matsForRebind[matSlotIdx] ?? entry.source.material;
662
+ if (matchedMaterials !== null) {
663
+ const materialHandles = matchedMaterials.get(entry.renderableIndex);
664
+ const materialHandle = submeshMaterial.materialHandle ?? 0;
665
+ if (materialHandles === undefined || !materialHandles.has(materialHandle)) continue;
666
+ }
604
667
  // feat-city-glb Bug 5 (per-submesh transparency): in the LDR split, a
605
668
  // transparent submesh is drawn in the blend sub-pass (non-sRGB view),
606
669
  // NOT here in the sRGB geometry pass. Skip it. Opaque submeshes of the
607
670
  // same (mixed) mesh still draw here. Single-material / fully-opaque
608
671
  // meshes are unaffected (their submesh materials are not transparent).
609
- if (passKind === 'forward' && splitLdrSprite && submeshMaterial.transparent === true) {
672
+ if (splitLdrSprite && submeshMaterial.transparent === true) {
610
673
  continue;
611
674
  }
612
675
  // bug-20260610 layer 7d: per-submesh BG construction. Texture
@@ -632,15 +695,25 @@ export function recordGeometryDraws(
632
695
  // feat-city-glb Bug 5: per-submesh material BG assembly extracted to
633
696
  // the shared `buildPerSubmeshMaterialBg` closure (also called by the
634
697
  // LDR blend sub-pass). Resolves the shader's user-region textures
635
- // (baseColor/MR/normal + any custom Nth texture), emissive/occlusion
698
+ // (baseColor/MR/normal + a custom Nth texture), emissive/occlusion
636
699
  // injection, and Skylight merge; deduped cross-entity via the
637
700
  // shaderId-outer `materialBgShared` cache.
638
701
  const materialSlot = materialSlotIndices[i]?.[matSlotIdx] ?? materialSlotIndices[i]?.[0] ?? 0;
639
702
  perSubmeshBg =
640
703
  profilePhase === undefined
641
- ? resolveMaterialBindGroup(materialSlot, submeshMaterial, entry.source.entityKey)
704
+ ? resolveMaterialBindGroup(
705
+ materialSlot,
706
+ submeshMaterial,
707
+ entry.source.entityKey,
708
+ entry.world ?? c.world,
709
+ )
642
710
  : profileGeometrySegment(c, passKind, 'material-bind-groups', () =>
643
- resolveMaterialBindGroup(materialSlot, submeshMaterial, entry.source.entityKey),
711
+ resolveMaterialBindGroup(
712
+ materialSlot,
713
+ submeshMaterial,
714
+ entry.source.entityKey,
715
+ entry.world ?? c.world,
716
+ ),
644
717
  );
645
718
  materialGroup1DynamicOffsets[0] = materialSlot * MATERIAL_PER_ENTITY_STRIDE;
646
719
  pass.setBindGroup(1, perSubmeshBg, materialGroup1DynamicOffsets, 0, 1);
@@ -649,58 +722,20 @@ export function recordGeometryDraws(
649
722
  entry.source.skin !== undefined
650
723
  ? SKIN_MATERIAL_SHADER_ID
651
724
  : submeshMaterial.materialShaderId;
652
- let materialReadyGuid: string | undefined;
653
- if (
654
- submeshMaterial.materialGuid !== undefined &&
655
- runtime.getMaterialReadiness !== undefined
656
- ) {
657
- const readiness = runtime.getMaterialReadiness(submeshMaterial.materialGuid);
658
- if (readiness !== undefined) {
659
- const readinessRoute = routeMaterialReadiness({
660
- readiness,
661
- reportedDiagnosticKeys: frameState.reportedMaterialDiagnosticKeys,
662
- });
663
- if (readinessRoute.kind === 'skip') {
664
- if (readinessRoute.diagnostic !== undefined) {
665
- runtime.errorRegistry.fire(
666
- new RhiError({
667
- code: 'webgpu-runtime-error',
668
- expected: readinessRoute.diagnostic.expected,
669
- hint: `${readinessRoute.diagnostic.hint} [materialGuid=${readinessRoute.diagnostic.materialGuid}; specializationKey=${readinessRoute.diagnostic.specializationKey}]`,
670
- }),
671
- );
672
- }
673
- continue;
674
- }
675
- materialReadyGuid = readinessRoute.readiness.materialGuid;
676
- }
677
- }
678
725
  const isSpriteShader =
679
726
  smMaterialShaderId === 'forgeax::sprite' || smMaterialShaderId === 'forgeax::sprite-lit';
680
727
  // Preserve the dedicated sprite-pass state when the linear-LDR graph
681
728
  // routes a sprite through this generic geometry path. Negative scale
682
729
  // flips winding, so back-face culling would erase the quad.
683
- const temporalRenderState = (() => {
684
- if (passKind !== 'temporal') return undefined;
685
- const { blend: _blend, ...base } = submeshMaterial.renderState ?? {};
686
- return {
687
- ...base,
688
- depthWriteEnabled: false,
689
- depthCompare: 'less-equal' as const,
690
- ...(isSpriteShader ? { cullMode: 'none' as const } : {}),
691
- };
692
- })();
693
- const pipelineRenderState =
694
- temporalRenderState ??
695
- (isSpriteShader
696
- ? {
697
- ...submeshMaterial.renderState,
698
- depthWriteEnabled: false,
699
- depthCompare: 'less-equal' as const,
700
- cullMode: 'none' as const,
701
- blend: submeshMaterial.renderState?.blend ?? SPRITE_PREMULTIPLIED_ALPHA_BLEND,
702
- }
703
- : submeshMaterial.renderState);
730
+ const pipelineRenderState = isSpriteShader
731
+ ? {
732
+ ...submeshMaterial.renderState,
733
+ depthWriteEnabled: false,
734
+ depthCompare: 'less-equal' as const,
735
+ cullMode: 'none' as const,
736
+ blend: submeshMaterial.renderState?.blend ?? SPRITE_PREMULTIPLIED_ALPHA_BLEND,
737
+ }
738
+ : geometryRenderStateForTopology(smTopology, submeshMaterial.renderState);
704
739
  let smPipelineHandle: typeof pipelineState.unlitPipeline;
705
740
  if (smMaterialShaderId === undefined || smMaterialShaderId === 'forgeax::default-unlit') {
706
741
  const unlitShaderId = smMaterialShaderId ?? 'forgeax::default-unlit';
@@ -724,7 +759,6 @@ export function recordGeometryDraws(
724
759
  unlitVariantSet,
725
760
  colorFormatOverride,
726
761
  entry.mesh.layoutProjection,
727
- materialReadyGuid,
728
762
  );
729
763
  smPipelineHandle =
730
764
  unlitRsp ??
@@ -746,8 +780,18 @@ export function recordGeometryDraws(
746
780
  // variant's manifest definesKey IS that exact non-empty string
747
781
  // (CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true)
748
782
  // -- the canonical-empty rule only applies to the all-true case.
783
+ const hasVertexColor = entry.mesh.layoutProjection.attributes.some(
784
+ (attribute) => attribute.key === 'color',
785
+ );
786
+ // The all-true HDRP variant uses the canonical empty key only when
787
+ // every variant axis is true. A plain mesh adds the geometry-owned
788
+ // VERTEX_COLOR_AVAILABLE=false axis, so retain the two capability
789
+ // axes explicitly or the selector would silently choose the URP
790
+ // group(2) layout for an HDRP cluster bind group.
749
791
  const capabilityVariantSet = frameState.isHdrpActive
750
- ? ''
792
+ ? hasVertexColor
793
+ ? ''
794
+ : 'CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true'
751
795
  : 'CLUSTER_FORWARD_AVAILABLE=false+STORAGE_BUFFER_AVAILABLE=true';
752
796
  const authoredVariantSet =
753
797
  isSpriteShader && entry.source.spriteInstances !== undefined ? '' : entry.variantSet;
@@ -765,16 +809,14 @@ export function recordGeometryDraws(
765
809
  runtime.errorRegistry.fire(projectionVariantSetResult.error);
766
810
  continue;
767
811
  }
768
- const projectionVariantSet = projectionVariantSetResult.value;
769
812
  const cachedPipeline = resolveMaterialPipeline(
770
813
  smMaterialShaderId,
771
814
  pipelineRenderState,
772
815
  smTopology,
773
816
  entry.mesh.indexFormat,
774
- projectionVariantSet,
817
+ projectionVariantSetResult.value,
775
818
  colorFormatOverride,
776
819
  entry.mesh.layoutProjection,
777
- materialReadyGuid,
778
820
  );
779
821
  // feat-20260615-pipeline-spec-ssot M6-T1: cache miss resolves to
780
822
  // null uniformly across URP / HDRP / skin shaders. Charter P3
@@ -797,6 +839,23 @@ export function recordGeometryDraws(
797
839
  if (smPipelineHandle === null) {
798
840
  continue;
799
841
  }
842
+ // Standard clustered PBR variants declare the unified cluster/SSAO
843
+ // group(2) layout. Unlit and other URP-layout materials must bind the
844
+ // ordinary mesh group instead; choosing one group for the whole pass
845
+ // makes Dawn reject an otherwise valid unlit pipeline and invalidates
846
+ // the command buffer before it reaches the surface.
847
+ const usesStandardClusterBindings = smMaterialShaderId === 'forgeax::default-standard-pbr';
848
+ if (!isSkinEntry) {
849
+ if (usesStandardClusterBindings) {
850
+ if (meshGroup2 === null) continue;
851
+ group2BindGroup = meshGroup2;
852
+ } else {
853
+ const fallbackGroup = meshBindGroup ?? meshGroup2;
854
+ if (fallbackGroup === null) continue;
855
+ group2BindGroup = fallbackGroup;
856
+ }
857
+ }
858
+ pass.setBindGroup(2, group2BindGroup, group2DynamicOffsets);
800
859
 
801
860
  if (profilePhase === undefined) {
802
861
  submitSubmeshDraws(
@@ -838,9 +897,8 @@ function resolveGeometryInstanceBuffer(
838
897
  identityInstanceDraws: readonly GeometryInstanceDraw[],
839
898
  ): readonly GeometryInstanceDraw[] | null {
840
899
  const { runtime, pipelineState, frameState } = c;
841
- const inst = entry.source.instances ?? entry.source.spriteInstances;
900
+ const inst = entry.source.instances;
842
901
  if (inst === undefined) return identityInstanceDraws;
843
- const spriteInstances = entry.source.spriteInstances;
844
902
  let instanceBuffer: Buffer = pipelineState.identityInstanceBuffer;
845
903
  let instanceCount = 1;
846
904
  {
@@ -891,21 +949,10 @@ function resolveGeometryInstanceBuffer(
891
949
  {
892
950
  // Cap-gate (LimitExceededDetail single emit point — feat-20260514
893
951
  // M3 / w15 anchor): `requestedBytes <= maxStorageBufferBindingSize`.
894
- const upload =
895
- spriteInstances === undefined
896
- ? uniformFallback
897
- ? inst.transforms
898
- : packTemporalInstanceTransforms(
899
- inst.transforms,
900
- entry.source.temporal?.previousInstances?.transforms,
901
- )
902
- : interleaveSpriteInstanceBuffer(
903
- spriteInstances.transforms,
904
- spriteInstances.regions,
905
- undefined,
906
- !uniformFallback,
907
- );
908
- const requestedBytes = upload.byteLength;
952
+ const instancePayload = uniformFallback
953
+ ? inst.transforms
954
+ : packInstanceStorageBuffer(inst.transforms);
955
+ const requestedBytes = instancePayload.byteLength;
909
956
  const cap = runtime.device.limits.maxStorageBufferBindingSize;
910
957
  if (!uniformFallback && typeof cap === 'number' && cap > 0 && requestedBytes > cap) {
911
958
  runtime.errorRegistry.fire(
@@ -961,7 +1008,11 @@ function resolveGeometryInstanceBuffer(
961
1008
  }
962
1009
  }
963
1010
  if (active !== null) {
964
- const writeRes = runtime.device.queue.writeBuffer(active.buffer.handle, 0, upload);
1011
+ const writeRes = runtime.device.queue.writeBuffer(
1012
+ active.buffer.handle,
1013
+ 0,
1014
+ instancePayload,
1015
+ );
965
1016
  if (!writeRes.ok) {
966
1017
  runtime.errorRegistry.fire(writeRes.error);
967
1018
  } else {