@forgeax/engine-render 0.1.21 → 0.1.23

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 (426) hide show
  1. package/README.md +150 -29
  2. package/dist/assembly/backend-contract.d.ts +13 -0
  3. package/dist/assembly/backend-contract.d.ts.map +1 -1
  4. package/dist/assembly/device-feature-admission.d.ts.map +1 -1
  5. package/dist/assembly/factory.d.ts +14 -6
  6. package/dist/assembly/factory.d.ts.map +1 -1
  7. package/dist/assembly/host-contract.d.ts +10 -0
  8. package/dist/assembly/host-contract.d.ts.map +1 -1
  9. package/dist/authoring.mjs +1 -1
  10. package/dist/{chunk-PCHBPYML.mjs → chunk-4L3P6DT5.mjs} +2 -2
  11. package/dist/chunk-4L3P6DT5.mjs.map +1 -0
  12. package/dist/{chunk-VFPLTKCU.mjs → chunk-4NPUASZR.mjs} +15 -4
  13. package/dist/chunk-4NPUASZR.mjs.map +1 -0
  14. package/dist/chunk-DIYW3M5D.mjs +5085 -0
  15. package/dist/chunk-DIYW3M5D.mjs.map +1 -0
  16. package/dist/chunk-FBC4R44J.mjs +1003 -0
  17. package/dist/chunk-FBC4R44J.mjs.map +1 -0
  18. package/dist/{chunk-FS2KNUQH.mjs → chunk-FF7K3FSO.mjs} +253 -489
  19. package/dist/chunk-FF7K3FSO.mjs.map +1 -0
  20. package/dist/chunk-HZUPSYW7.mjs +1104 -0
  21. package/dist/chunk-HZUPSYW7.mjs.map +1 -0
  22. package/dist/{chunk-6OPXDQ2E.mjs → chunk-QODA5UKU.mjs} +33 -294
  23. package/dist/chunk-QODA5UKU.mjs.map +1 -0
  24. package/dist/chunk-YALPS44A.mjs +296 -0
  25. package/dist/chunk-YALPS44A.mjs.map +1 -0
  26. package/dist/{chunk-5YADUCA7.mjs → chunk-ZUWKAZ2I.mjs} +585 -991
  27. package/dist/chunk-ZUWKAZ2I.mjs.map +1 -0
  28. package/dist/cluster-binner.d.ts +5 -0
  29. package/dist/cluster-binner.d.ts.map +1 -1
  30. package/dist/components/index.d.ts +3 -0
  31. package/dist/components/index.d.ts.map +1 -1
  32. package/dist/components/light-helpers.d.ts +4 -0
  33. package/dist/components/light-helpers.d.ts.map +1 -1
  34. package/dist/components/light-probe.d.ts +9 -0
  35. package/dist/components/light-probe.d.ts.map +1 -0
  36. package/dist/components/rect-area-light.d.ts +12 -0
  37. package/dist/components/rect-area-light.d.ts.map +1 -0
  38. package/dist/components/scene-instance.d.ts +4 -0
  39. package/dist/components/scene-instance.d.ts.map +1 -1
  40. package/dist/components/spot-light.d.ts +3 -0
  41. package/dist/components/spot-light.d.ts.map +1 -1
  42. package/dist/construct-renderer.mjs +10437 -10044
  43. package/dist/construct-renderer.mjs.map +1 -1
  44. package/dist/device/gpu-residency.d.ts +8 -1
  45. package/dist/device/gpu-residency.d.ts.map +1 -1
  46. package/dist/device/lifecycle-transaction.d.ts +2 -0
  47. package/dist/device/lifecycle-transaction.d.ts.map +1 -0
  48. package/dist/environment/lifecycle.d.ts.map +1 -1
  49. package/dist/errors/gpu-driven.d.ts +26 -0
  50. package/dist/errors/gpu-driven.d.ts.map +1 -0
  51. package/dist/errors/index.d.ts +1 -0
  52. package/dist/errors/index.d.ts.map +1 -1
  53. package/dist/errors/recover.d.ts +9 -1
  54. package/dist/errors/recover.d.ts.map +1 -1
  55. package/dist/errors/render.d.ts +26 -1
  56. package/dist/errors/render.d.ts.map +1 -1
  57. package/dist/extract/gpu-driven.d.ts +50 -0
  58. package/dist/extract/gpu-driven.d.ts.map +1 -0
  59. package/dist/extract/visibility.d.ts.map +1 -1
  60. package/dist/gpu-driven/batch-topology.d.ts +34 -0
  61. package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
  62. package/dist/gpu-driven/prepared-draw.d.ts +63 -0
  63. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -0
  64. package/dist/gpu-driven/production-raster.d.ts +98 -2
  65. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  66. package/dist/gpu-driven/view-gpu.d.ts +64 -1
  67. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  68. package/dist/gpu-scene-schema.d.ts +14 -0
  69. package/dist/gpu-scene-schema.d.ts.map +1 -1
  70. package/dist/gpu-scene.d.ts +8 -1
  71. package/dist/gpu-scene.d.ts.map +1 -1
  72. package/dist/gpu-usage.d.ts +0 -1
  73. package/dist/gpu-usage.d.ts.map +1 -1
  74. package/dist/hdrp-buffers.d.ts +3 -3
  75. package/dist/hdrp-buffers.d.ts.map +1 -1
  76. package/dist/index.d.ts +12 -1
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.mjs +90 -5
  79. package/dist/index.mjs.map +1 -1
  80. package/dist/inspection-types.d.ts +163 -1
  81. package/dist/inspection-types.d.ts.map +1 -1
  82. package/dist/internal.d.ts +9 -0
  83. package/dist/internal.d.ts.map +1 -1
  84. package/dist/internal.mjs +23 -2
  85. package/dist/internal.mjs.map +1 -1
  86. package/dist/light-buffer-layout.d.ts +58 -149
  87. package/dist/light-buffer-layout.d.ts.map +1 -1
  88. package/dist/materials.d.ts.map +1 -1
  89. package/dist/pbr-pipeline.d.ts +26 -12
  90. package/dist/pbr-pipeline.d.ts.map +1 -1
  91. package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
  92. package/dist/pipeline/standard-lighting/graph.d.ts.map +1 -1
  93. package/dist/pipeline/standard-lighting/light-frame.d.ts +3 -3
  94. package/dist/pipeline/standard-lighting/light-frame.d.ts.map +1 -1
  95. package/dist/pipeline/standard-lighting/topology.d.ts +1 -1
  96. package/dist/pipeline/standard-lighting/topology.d.ts.map +1 -1
  97. package/dist/pipeline/standard-lighting/transport.d.ts.map +1 -1
  98. package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
  99. package/dist/pipeline-builder.d.ts +2 -0
  100. package/dist/pipeline-builder.d.ts.map +1 -1
  101. package/dist/pipeline-spec.d.ts +1 -1
  102. package/dist/pipeline-spec.d.ts.map +1 -1
  103. package/dist/plugin.d.ts.map +1 -1
  104. package/dist/prepare/extended-lighting/ltc-resources.d.ts +31 -0
  105. package/dist/prepare/extended-lighting/ltc-resources.d.ts.map +1 -0
  106. package/dist/prepare/extended-lighting/resources.d.ts +72 -0
  107. package/dist/prepare/extended-lighting/resources.d.ts.map +1 -0
  108. package/dist/prepare/extended-lighting/spot-modifiers.d.ts +42 -0
  109. package/dist/prepare/extended-lighting/spot-modifiers.d.ts.map +1 -0
  110. package/dist/prepare/extended-lighting/state.d.ts +24 -0
  111. package/dist/prepare/extended-lighting/state.d.ts.map +1 -0
  112. package/dist/record/frame-lighting.d.ts +8 -6
  113. package/dist/record/frame-lighting.d.ts.map +1 -1
  114. package/dist/record/frame-snapshot.d.ts +50 -10
  115. package/dist/record/frame-snapshot.d.ts.map +1 -1
  116. package/dist/record/frame.d.ts +7 -3
  117. package/dist/record/frame.d.ts.map +1 -1
  118. package/dist/record/gpu-timing.d.ts +19 -7
  119. package/dist/record/gpu-timing.d.ts.map +1 -1
  120. package/dist/record/helpers.d.ts +0 -20
  121. package/dist/record/helpers.d.ts.map +1 -1
  122. package/dist/record/main-pass-geometry.d.ts +6 -1
  123. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  124. package/dist/record/main-pass-material.d.ts +3 -1
  125. package/dist/record/main-pass-material.d.ts.map +1 -1
  126. package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
  127. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  128. package/dist/record/render-context.d.ts +57 -6
  129. package/dist/record/render-context.d.ts.map +1 -1
  130. package/dist/record/shadow-pass.d.ts.map +1 -1
  131. package/dist/record/typed-frame-graph.d.ts +49 -2
  132. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  133. package/dist/record/view-ubo.d.ts +1 -2
  134. package/dist/record/view-ubo.d.ts.map +1 -1
  135. package/dist/reflection/inspection.d.ts +10 -0
  136. package/dist/reflection/inspection.d.ts.map +1 -0
  137. package/dist/reflection/projection.d.ts +49 -0
  138. package/dist/reflection/projection.d.ts.map +1 -1
  139. package/dist/reflection/record-owner.d.ts +60 -0
  140. package/dist/reflection/record-owner.d.ts.map +1 -0
  141. package/dist/render-contract.d.ts +14 -8
  142. package/dist/render-contract.d.ts.map +1 -1
  143. package/dist/render-pipeline.d.ts +7 -0
  144. package/dist/render-pipeline.d.ts.map +1 -1
  145. package/dist/render-system-extract.d.ts +104 -16
  146. package/dist/render-system-extract.d.ts.map +1 -1
  147. package/dist/render-system.d.ts +12 -1
  148. package/dist/render-system.d.ts.map +1 -1
  149. package/dist/scene/probe-blend-record.d.ts +22 -0
  150. package/dist/scene/probe-blend-record.d.ts.map +1 -0
  151. package/dist/scene/probe-blend.d.ts +142 -0
  152. package/dist/scene/probe-blend.d.ts.map +1 -0
  153. package/dist/scene/render-scene-types.d.ts +0 -6
  154. package/dist/scene/render-scene-types.d.ts.map +1 -1
  155. package/dist/scene/render-scene.d.ts +103 -9
  156. package/dist/scene/render-scene.d.ts.map +1 -1
  157. package/dist/scene/visibility/bounds.d.ts +20 -0
  158. package/dist/scene/visibility/bounds.d.ts.map +1 -0
  159. package/dist/scene/visibility/budget.d.ts +16 -0
  160. package/dist/scene/visibility/budget.d.ts.map +1 -0
  161. package/dist/scene/visibility/facet.d.ts +73 -0
  162. package/dist/scene/visibility/facet.d.ts.map +1 -0
  163. package/dist/scene/visibility/gpu-frame-timing.d.ts +41 -0
  164. package/dist/scene/visibility/gpu-frame-timing.d.ts.map +1 -0
  165. package/dist/scene/visibility/gpu-lod.d.ts +46 -0
  166. package/dist/scene/visibility/gpu-lod.d.ts.map +1 -0
  167. package/dist/scene/visibility/inspection.d.ts +132 -0
  168. package/dist/scene/visibility/inspection.d.ts.map +1 -0
  169. package/dist/scene/visibility/lod-selector.d.ts +25 -0
  170. package/dist/scene/visibility/lod-selector.d.ts.map +1 -0
  171. package/dist/scene/visibility/occlusion-confidence.d.ts +81 -0
  172. package/dist/scene/visibility/occlusion-confidence.d.ts.map +1 -0
  173. package/dist/scene/visibility/occlusion-pass.d.ts +57 -0
  174. package/dist/scene/visibility/occlusion-pass.d.ts.map +1 -0
  175. package/dist/scene/visibility/occlusion-query-pool.d.ts +57 -0
  176. package/dist/scene/visibility/occlusion-query-pool.d.ts.map +1 -0
  177. package/dist/scene/visibility/occlusion-runtime.d.ts +96 -0
  178. package/dist/scene/visibility/occlusion-runtime.d.ts.map +1 -0
  179. package/dist/scene/visibility/types.d.ts +34 -0
  180. package/dist/scene/visibility/types.d.ts.map +1 -0
  181. package/dist/ssr/admission.d.ts +122 -0
  182. package/dist/ssr/admission.d.ts.map +1 -0
  183. package/dist/ssr/composition.d.ts +32 -0
  184. package/dist/ssr/composition.d.ts.map +1 -0
  185. package/dist/ssr/errors.d.ts +39 -0
  186. package/dist/ssr/errors.d.ts.map +1 -0
  187. package/dist/ssr/identity.d.ts +13 -0
  188. package/dist/ssr/identity.d.ts.map +1 -0
  189. package/dist/systems/skin-palette-allocator.d.ts +1 -1
  190. package/dist/temporal/frame-coordinator.d.ts +13 -0
  191. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  192. package/dist/temporal/frame.d.ts +2 -0
  193. package/dist/temporal/frame.d.ts.map +1 -1
  194. package/dist/temporal/index.mjs +6 -5
  195. package/dist/temporal/view.d.ts +7 -0
  196. package/dist/temporal/view.d.ts.map +1 -1
  197. package/dist/tilemap-chunk-extract-system.d.ts +1 -1
  198. package/dist/typed-render-graph-primitives.d.ts +4 -0
  199. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  200. package/dist/volume/passes.d.ts +8 -4
  201. package/dist/volume/passes.d.ts.map +1 -1
  202. package/package.json +20 -20
  203. package/src/__tests__/cluster-grid-default-surface.unit.test.ts +5 -0
  204. package/src/__tests__/detached-inspection.integration.test.ts +6 -0
  205. package/src/__tests__/device-feature-admission.unit.test.ts +13 -1
  206. package/src/__tests__/direct-light-snapshot.unit.test.ts +59 -3
  207. package/src/__tests__/environment-generation.integration.test.ts +16 -0
  208. package/src/__tests__/evidence-identity.ts +13 -0
  209. package/src/__tests__/evidence-identity.unit.test.ts +24 -0
  210. package/src/__tests__/extended-lighting-recovery.browser.test.ts +14 -0
  211. package/src/__tests__/extended-lighting-recovery.dawn.test.ts +14 -0
  212. package/src/__tests__/extended-lighting-recovery.integration.test.ts +81 -0
  213. package/src/__tests__/extended-lighting-resources.unit.test.ts +51 -0
  214. package/src/__tests__/extended-lighting-zero-feature.integration.test.ts +52 -0
  215. package/src/__tests__/factory-contract.integration.test.ts +33 -0
  216. package/src/__tests__/frame-observation.contract.test.ts +15 -0
  217. package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +146 -0
  218. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +1 -0
  219. package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +1 -0
  220. package/src/__tests__/gpu-driven-production.integration.test.ts +572 -9
  221. package/src/__tests__/gpu-driven-scaling.unit.test.ts +66 -2
  222. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +26 -1
  223. package/src/__tests__/gpu-driven-view-graph.integration.test.ts +89 -2
  224. package/src/__tests__/gpu-driven-view.browser.test.ts +3 -3
  225. package/src/__tests__/gpu-driven-view.dawn.test.ts +3 -3
  226. package/src/__tests__/gpu-driven-view.unit.test.ts +50 -0
  227. package/src/__tests__/gpu-lod-evidence.ts +188 -0
  228. package/src/__tests__/gpu-lod-fallback.integration.test.ts +10 -0
  229. package/src/__tests__/gpu-lod-indirect.integration.test.ts +40 -0
  230. package/src/__tests__/gpu-lod-parity.dawn.test.ts +29 -0
  231. package/src/__tests__/gpu-lod-readiness.integration.test.ts +52 -0
  232. package/src/__tests__/gpu-lod-schema.unit.test.ts +66 -0
  233. package/src/__tests__/gpu-lod-selector.unit.test.ts +28 -0
  234. package/src/__tests__/gpu-lod-silhouette.browser.test.ts +13 -0
  235. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +66 -1
  236. package/src/__tests__/gpu-scene.dawn.test.ts +8 -1
  237. package/src/__tests__/gpu-scene.unit.test.ts +49 -3
  238. package/src/__tests__/light-buffer-layout.unit.test.ts +113 -3
  239. package/src/__tests__/light-inspection.unit.test.ts +55 -0
  240. package/src/__tests__/light-resource-error.unit.test.ts +43 -0
  241. package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +109 -0
  242. package/src/__tests__/lod-bounds.unit.test.ts +42 -0
  243. package/src/__tests__/lod-cpu-lane.integration.test.ts +55 -0
  244. package/src/__tests__/lod-cpu-no-change.perf.test.ts +19 -0
  245. package/src/__tests__/lod-gpu-frame-timing.unit.test.ts +49 -0
  246. package/src/__tests__/lod-multi-view.integration.test.ts +63 -0
  247. package/src/__tests__/lod-occlusion-device-loss.integration.test.ts +27 -0
  248. package/src/__tests__/lod-occlusion-final-decision.integration.test.ts +47 -0
  249. package/src/__tests__/lod-occlusion-inspection.integration.test.ts +217 -0
  250. package/src/__tests__/lod-occlusion-inspection.schema.test-d.ts +14 -0
  251. package/src/__tests__/lod-occlusion-inspection.unit.test.ts +72 -0
  252. package/src/__tests__/lod-occlusion-visual-evidence.ts +91 -0
  253. package/src/__tests__/lod-occlusion.browser.test.ts +15 -0
  254. package/src/__tests__/lod-occlusion.dawn.test.ts +20 -0
  255. package/src/__tests__/lod-selector.profile.test.ts +35 -0
  256. package/src/__tests__/lod-selector.unit.test.ts +68 -0
  257. package/src/__tests__/lod-visibility-identity.unit.test.ts +198 -0
  258. package/src/__tests__/lod-visibility-lifecycle.integration.test.ts +132 -0
  259. package/src/__tests__/ltc-resources.unit.test.ts +32 -0
  260. package/src/__tests__/material-contract-inventory.unit.test.ts +17 -0
  261. package/src/__tests__/occlusion-confidence.unit.test.ts +168 -0
  262. package/src/__tests__/occlusion-invalidation.integration.test.ts +37 -0
  263. package/src/__tests__/occlusion-pass-routing.unit.test.ts +16 -0
  264. package/src/__tests__/occlusion-pass.dawn.test.ts +20 -0
  265. package/src/__tests__/occlusion-pass.integration.test.ts +43 -0
  266. package/src/__tests__/occlusion-pass.rhi-null.test.ts +22 -0
  267. package/src/__tests__/occlusion-query-pool.rhi-null.test.ts +21 -0
  268. package/src/__tests__/occlusion-query-pool.unit.test.ts +95 -0
  269. package/src/__tests__/occlusion-query-ticket.integration.test.ts +47 -0
  270. package/src/__tests__/occlusion-query.dawn.test.ts +16 -0
  271. package/src/__tests__/occlusion-query.evidence.ts +178 -0
  272. package/src/__tests__/occlusion-query.rhi-null.test.ts +31 -0
  273. package/src/__tests__/occlusion-runtime.unit.test.ts +120 -0
  274. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +196 -0
  275. package/src/__tests__/probe-bindings.unit.test.ts +200 -0
  276. package/src/__tests__/probe-blend-numeric.unit.test.ts +67 -0
  277. package/src/__tests__/probe-blend-oracle.unit.test.ts +136 -0
  278. package/src/__tests__/probe-capacity.integration.test.ts +97 -0
  279. package/src/__tests__/probe-recovery.integration.test.ts +104 -0
  280. package/src/__tests__/probe-scene-dirty.integration.test.ts +211 -0
  281. package/src/__tests__/profiler-phase-catalog.test.ts +4 -1
  282. package/src/__tests__/profiler-phase-token.test.ts +1 -0
  283. package/src/__tests__/rect-area-boundary.unit.test.ts +24 -0
  284. package/src/__tests__/reflection-fallback-graph.unit.test.ts +67 -0
  285. package/src/__tests__/reflection-fallback-inspection.unit.test.ts +77 -0
  286. package/src/__tests__/reflection-fallback-lifecycle.integration.test.ts +21 -0
  287. package/src/__tests__/reflection-fallback-projection.unit.test.ts +90 -0
  288. package/src/__tests__/reflection-fallback-source.unit.test.ts +32 -0
  289. package/src/__tests__/reflection-probe-owner-placement.unit.test.ts +39 -0
  290. package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +120 -0
  291. package/src/__tests__/render-error-code-owner.test-d.ts +1 -0
  292. package/src/__tests__/render-feature-docs.unit.test.ts +12 -7
  293. package/src/__tests__/render-graph-fallback.integration.test.ts +24 -0
  294. package/src/__tests__/render-perf/extended-lighting.bench.test.ts +66 -0
  295. package/src/__tests__/render-scene-projection.unit.test.ts +447 -18
  296. package/src/__tests__/renderer-factory-material-contract.unit.test.ts +76 -0
  297. package/src/__tests__/skin-motion-regression.unit.test.ts +22 -0
  298. package/src/__tests__/skinned-shadow-caster.test.ts +2 -2
  299. package/src/__tests__/spot-modifier-projection.unit.test.ts +70 -0
  300. package/src/__tests__/ssr-admission-matrix.integration.test.ts +206 -0
  301. package/src/__tests__/ssr-composition.unit.test.ts +46 -0
  302. package/src/__tests__/ssr-fallback-zero-work.bench.test.ts +94 -0
  303. package/src/__tests__/ssr-recovery-errors.unit.test.ts +58 -0
  304. package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +67 -0
  305. package/src/__tests__/standard-clustered-pipeline.unit.test.ts +7 -0
  306. package/src/__tests__/standard-lighting-inspection.integration.test.ts +1 -1
  307. package/src/__tests__/standard-lighting-write.unit.test.ts +66 -2
  308. package/src/__tests__/temporal-fallback-generation.integration.test.ts +16 -0
  309. package/src/__tests__/temporal-view.unit.test.ts +3 -3
  310. package/src/__tests__/transmission-prewarm.unit.test.ts +69 -0
  311. package/src/__tests__/visibility-budget.integration.test.ts +140 -0
  312. package/src/__tests__/visibility-budget.unit.test.ts +70 -0
  313. package/src/__tests__/visibility-extract.integration.test.ts +11 -6
  314. package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +6 -3
  315. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +31 -28
  316. package/src/assembly/backend-contract.ts +13 -0
  317. package/src/assembly/device-feature-admission.ts +16 -9
  318. package/src/assembly/factory.ts +547 -93
  319. package/src/assembly/host-contract.ts +10 -0
  320. package/src/cluster-binner.ts +31 -0
  321. package/src/components/__tests__/lighting-authoring.unit.test.ts +39 -0
  322. package/src/components/__tests__/rect-area-light.unit.test.ts +33 -0
  323. package/src/components/index.ts +3 -0
  324. package/src/components/light-helpers.ts +52 -1
  325. package/src/components/light-probe.ts +13 -0
  326. package/src/components/rect-area-light.ts +15 -0
  327. package/src/components/scene-instance.ts +6 -0
  328. package/src/components/spot-light.ts +3 -0
  329. package/src/device/__tests__/extended-lighting-recovery.unit.test.ts +24 -0
  330. package/src/device/gpu-residency.ts +140 -9
  331. package/src/device/lifecycle-transaction.ts +12 -0
  332. package/src/environment/lifecycle.ts +8 -1
  333. package/src/errors/gpu-driven.ts +92 -0
  334. package/src/errors/index.ts +1 -0
  335. package/src/errors/recover.ts +32 -0
  336. package/src/errors/render.ts +55 -1
  337. package/src/extract/camera.ts +3 -3
  338. package/src/extract/gpu-driven.ts +108 -0
  339. package/src/extract/visibility.ts +0 -23
  340. package/src/gpu-driven/batch-topology.ts +206 -28
  341. package/src/gpu-driven/prepared-draw.ts +208 -0
  342. package/src/gpu-driven/production-raster.ts +953 -41
  343. package/src/gpu-driven/view-gpu.ts +411 -29
  344. package/src/gpu-scene-schema.ts +13 -0
  345. package/src/gpu-scene.ts +134 -65
  346. package/src/gpu-usage.ts +0 -1
  347. package/src/hdrp-buffers.ts +6 -6
  348. package/src/index.ts +74 -0
  349. package/src/inspection-types.ts +220 -1
  350. package/src/internal.ts +38 -0
  351. package/src/light-buffer-layout.ts +154 -324
  352. package/src/materials.ts +16 -2
  353. package/src/pbr-pipeline.ts +151 -45
  354. package/src/pipeline/standard-forward-lane.ts +47 -0
  355. package/src/pipeline/standard-lighting/graph.ts +2 -1
  356. package/src/pipeline/standard-lighting/light-frame.ts +3 -2
  357. package/src/pipeline/standard-lighting/topology.ts +1 -1
  358. package/src/pipeline/standard-lighting/transport.ts +2 -1
  359. package/src/pipeline/standard-pipeline.ts +2 -0
  360. package/src/pipeline-builder.ts +5 -2
  361. package/src/pipeline-spec.ts +12 -1
  362. package/src/plugin.ts +4 -0
  363. package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +56 -0
  364. package/src/prepare/extended-lighting/ltc-resources.ts +136 -0
  365. package/src/prepare/extended-lighting/resources.ts +389 -0
  366. package/src/prepare/extended-lighting/spot-modifiers.ts +194 -0
  367. package/src/prepare/extended-lighting/state.ts +92 -0
  368. package/src/record/__tests__/gpu-timing.unit.test.ts +177 -0
  369. package/src/record/__tests__/temporal-payload.unit.test.ts +23 -1
  370. package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +20 -1
  371. package/src/record/frame-lighting.ts +252 -53
  372. package/src/record/frame-snapshot.ts +57 -12
  373. package/src/record/frame.ts +410 -93
  374. package/src/record/gpu-timing.ts +108 -44
  375. package/src/record/helpers.ts +0 -58
  376. package/src/record/main-pass-geometry.ts +204 -39
  377. package/src/record/main-pass-material.ts +8 -1
  378. package/src/record/main-pass-sprite-draws.ts +52 -85
  379. package/src/record/mesh-ssbo.ts +47 -36
  380. package/src/record/render-context.ts +65 -4
  381. package/src/record/shadow-pass.ts +66 -40
  382. package/src/record/typed-frame-graph.ts +225 -83
  383. package/src/record/view-ubo.ts +14 -24
  384. package/src/reflection/inspection.ts +67 -0
  385. package/src/reflection/projection.ts +196 -1
  386. package/src/reflection/record-owner.ts +1283 -0
  387. package/src/render-contract.ts +17 -5
  388. package/src/render-pipeline.ts +5 -0
  389. package/src/render-system-extract.ts +493 -134
  390. package/src/render-system.ts +811 -615
  391. package/src/scene/__tests__/changed-block-summary.candidate.test.ts +36 -0
  392. package/src/scene/probe-blend-record.ts +54 -0
  393. package/src/scene/probe-blend.ts +813 -0
  394. package/src/scene/render-scene-types.ts +0 -7
  395. package/src/scene/render-scene.ts +848 -183
  396. package/src/scene/visibility/bounds.ts +57 -0
  397. package/src/scene/visibility/budget.ts +40 -0
  398. package/src/scene/visibility/facet.ts +400 -0
  399. package/src/scene/visibility/gpu-frame-timing.ts +101 -0
  400. package/src/scene/visibility/gpu-lod.ts +119 -0
  401. package/src/scene/visibility/inspection.ts +313 -0
  402. package/src/scene/visibility/lod-selector.ts +84 -0
  403. package/src/scene/visibility/occlusion-confidence.ts +478 -0
  404. package/src/scene/visibility/occlusion-pass.ts +165 -0
  405. package/src/scene/visibility/occlusion-query-pool.ts +178 -0
  406. package/src/scene/visibility/occlusion-runtime.ts +672 -0
  407. package/src/scene/visibility/types.ts +50 -0
  408. package/src/ssr/admission.ts +451 -0
  409. package/src/ssr/composition.ts +73 -0
  410. package/src/ssr/errors.ts +76 -0
  411. package/src/ssr/identity.ts +12 -0
  412. package/src/systems/skin-palette-allocator.ts +1 -1
  413. package/src/temporal/frame-coordinator.ts +26 -0
  414. package/src/temporal/frame.ts +14 -1
  415. package/src/temporal/view.ts +11 -0
  416. package/src/tilemap-chunk-extract-system.ts +4 -4
  417. package/src/typed-render-graph-primitives.ts +48 -0
  418. package/src/volume/passes.ts +46 -49
  419. package/dist/.tsbuildinfo +0 -1
  420. package/dist/chunk-5YADUCA7.mjs.map +0 -1
  421. package/dist/chunk-6OPXDQ2E.mjs.map +0 -1
  422. package/dist/chunk-BXBQQKFQ.mjs +0 -67
  423. package/dist/chunk-BXBQQKFQ.mjs.map +0 -1
  424. package/dist/chunk-FS2KNUQH.mjs.map +0 -1
  425. package/dist/chunk-PCHBPYML.mjs.map +0 -1
  426. package/dist/chunk-VFPLTKCU.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facet.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/facet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /** Renderer-owned timestamp facts spanning one graph and one queue submit. */
2
+ export interface GpuFrameTimingProtocol {
3
+ readonly firstMarker: 'frame.first-pass';
4
+ readonly terminalMarker: 'occlusion.resolve-copy';
5
+ readonly sameGraph: true;
6
+ readonly sameSubmit: true;
7
+ }
8
+ export interface GpuFrameTiming {
9
+ readonly frameId: number;
10
+ readonly deviceGeneration: number;
11
+ readonly protocol: GpuFrameTimingProtocol;
12
+ aborted: boolean;
13
+ submitId: number | undefined;
14
+ }
15
+ export interface GpuFrameTimingRecord {
16
+ readonly firstPassTimestampNs: number;
17
+ readonly occlusionResolveTimestampNs: number;
18
+ readonly submitted: boolean;
19
+ readonly graphGeneration: number;
20
+ readonly submitId: number;
21
+ }
22
+ export interface GpuFrameTimingSample {
23
+ readonly frameId: number;
24
+ readonly deviceGeneration: number;
25
+ readonly durationUs: number;
26
+ readonly protocol: GpuFrameTimingProtocol;
27
+ readonly graphGeneration: number;
28
+ readonly submitId: number;
29
+ }
30
+ export interface GpuFrameTimingSummary {
31
+ readonly medianUs: number;
32
+ readonly p95Us: number;
33
+ readonly samples: number;
34
+ }
35
+ export declare function createGpuFrameTiming(input: {
36
+ readonly frameId: number;
37
+ readonly deviceGeneration: number;
38
+ }): GpuFrameTiming;
39
+ export declare function recordGpuFrameTiming(timing: GpuFrameTiming, record: GpuFrameTimingRecord): GpuFrameTimingSample;
40
+ export declare function summarizeGpuFrameTiming(samples: readonly GpuFrameTimingSample[]): GpuFrameTimingSummary;
41
+ //# sourceMappingURL=gpu-frame-timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-frame-timing.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/gpu-frame-timing.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,wBAAwB,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AASD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,GAAG,cAAc,CAEjB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,oBAAoB,GAC3B,oBAAoB,CA2BtB;AAOD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GACvC,qBAAqB,CAOvB"}
@@ -0,0 +1,46 @@
1
+ import { type LodSelection } from './lod-selector';
2
+ export declare const GPU_LOD_ROW_SCHEMA: {
3
+ name: string;
4
+ fields: ({
5
+ name: string;
6
+ type: "u32";
7
+ } | {
8
+ name: string;
9
+ type: "i32";
10
+ } | {
11
+ name: string;
12
+ type: "f32";
13
+ })[];
14
+ };
15
+ export declare const GPU_LOD_ROW_LAYOUT: import("../../gpu-scene-schema").GpuSceneTableLayout;
16
+ export interface LodDrawRange {
17
+ readonly firstIndex: number;
18
+ readonly indexCount: number;
19
+ readonly baseVertex: number;
20
+ }
21
+ export interface GpuLodRowsInput {
22
+ readonly generation: number;
23
+ readonly hysteresis: number;
24
+ readonly ranges: readonly LodDrawRange[];
25
+ /** Absolute projected-height thresholds, including root at index zero. */
26
+ readonly coverages: readonly number[];
27
+ readonly ready: readonly boolean[];
28
+ }
29
+ export interface GpuLodRow extends LodDrawRange {
30
+ readonly generation: number;
31
+ readonly level: number;
32
+ readonly screenCoverage: number;
33
+ readonly hysteresis: number;
34
+ readonly ready: boolean;
35
+ }
36
+ /** Projects one stable row per draw range; it never contains a per-view choice. */
37
+ export declare function buildGpuLodRows(input: GpuLodRowsInput): readonly GpuLodRow[];
38
+ export declare function encodeGpuLodRows(rows: readonly GpuLodRow[]): Uint8Array;
39
+ export interface GpuLodSelectionInput {
40
+ readonly projectedHeight: number;
41
+ readonly previousLevel: number;
42
+ readonly historyValid: boolean;
43
+ }
44
+ /** CPU reference used by both the GPU selector contract and unsupported fallback. */
45
+ export declare function selectGpuLod(rows: readonly GpuLodRow[], input: GpuLodSelectionInput): LodSelection;
46
+ //# sourceMappingURL=gpu-lod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-lod.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/gpu-lod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,gBAAgB,CAAC;AAE9D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;CAAwB,CAAC;AACxD,eAAO,MAAM,kBAAkB,sDAAwB,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAgBD,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,SAAS,EAAE,CAkC5E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,CAevE;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,SAAS,EAAE,EAC1B,KAAK,EAAE,oBAAoB,GAC1B,YAAY,CAWd"}
@@ -0,0 +1,132 @@
1
+ /** Detached, bounded LOD/occlusion facts for renderer inspection consumers. */
2
+ export declare const LOD_OCCLUSION_INSPECTION_SCHEMA: "forgeax::lod-occlusion-inspection::v2";
3
+ export declare const LOD_OCCLUSION_INSPECTION_MAX_BYTES: number;
4
+ export type LodOcclusionInspectionError = {
5
+ readonly code: string;
6
+ readonly expected: string;
7
+ readonly hint: string;
8
+ readonly detail?: Readonly<Record<string, string | number | boolean>>;
9
+ };
10
+ export type LodOcclusionFallback = {
11
+ readonly active: false;
12
+ } | {
13
+ readonly active: true;
14
+ readonly reason: 'producer-failed' | 'page-exhausted' | 'query-failed' | 'device-loss';
15
+ readonly error: LodOcclusionInspectionError;
16
+ };
17
+ export type LodOcclusionDegradation = {
18
+ readonly active: false;
19
+ } | {
20
+ readonly active: true;
21
+ readonly reason: 'all-visible' | 'query-unavailable';
22
+ };
23
+ export interface LodOcclusionInspectionSample {
24
+ readonly primitiveSlot: number;
25
+ readonly level: number;
26
+ readonly visible: boolean;
27
+ }
28
+ export interface LodOcclusionInspectionRow {
29
+ readonly root: {
30
+ readonly guid: string;
31
+ readonly sourceKey: string;
32
+ };
33
+ readonly view: {
34
+ readonly attachmentId: string;
35
+ readonly cameraEntity: number;
36
+ readonly viewRole: 'main' | 'shadow' | 'reflection' | 'probe';
37
+ readonly viewGeneration: number;
38
+ };
39
+ readonly slot: {
40
+ readonly primitiveSlot: number;
41
+ readonly slotGeneration: number;
42
+ };
43
+ readonly generation: number;
44
+ readonly count: {
45
+ readonly candidates: number;
46
+ readonly visible: number;
47
+ readonly occluded: number;
48
+ };
49
+ readonly lodHistogram: readonly {
50
+ readonly level: number;
51
+ readonly count: number;
52
+ }[];
53
+ /** Map latency for the most recently completed query page (bounded POD). */
54
+ readonly queryLatencyUs: {
55
+ readonly median: number;
56
+ readonly p95: number;
57
+ readonly last: number;
58
+ };
59
+ readonly pagePressure: {
60
+ readonly used: number;
61
+ readonly capacity: number;
62
+ };
63
+ readonly fallback: LodOcclusionFallback;
64
+ readonly degradation: LodOcclusionDegradation;
65
+ readonly samples: readonly LodOcclusionInspectionSample[];
66
+ }
67
+ export interface LodOcclusionInspectionSubmit {
68
+ readonly frameId: number;
69
+ readonly build: string;
70
+ readonly deviceGeneration: number;
71
+ }
72
+ /**
73
+ * Per-World attribution is only authoritative when the renderer publishes
74
+ * the GPU facts from the same submit that owns the parent inspection. The
75
+ * normal projection path remains useful diagnostics, but it must not be used
76
+ * as evidence for a World-reorder or per-World LOD claim.
77
+ */
78
+ export type LodOcclusionWorldAttribution = {
79
+ readonly status: 'unavailable';
80
+ readonly reason: 'projection-only';
81
+ } | {
82
+ readonly status: 'same-submit';
83
+ readonly submit: LodOcclusionInspectionSubmit;
84
+ };
85
+ export interface LodOcclusionWorldInspection {
86
+ readonly attachmentId: string;
87
+ readonly rows: readonly LodOcclusionInspectionRow[];
88
+ readonly attribution: LodOcclusionWorldAttribution;
89
+ }
90
+ export interface LodOcclusionInspectionBudget {
91
+ readonly configuredQueryBudget: number;
92
+ readonly effectiveQueryBudget: number;
93
+ readonly settleSubmits: number;
94
+ readonly retestSubmits: number;
95
+ readonly expirySubmits: number;
96
+ }
97
+ export interface LodOcclusionInspection extends LodOcclusionInspectionRow {
98
+ readonly schema: typeof LOD_OCCLUSION_INSPECTION_SCHEMA;
99
+ /** Atomic identity for the submit that produced every row below. */
100
+ readonly submit: LodOcclusionInspectionSubmit;
101
+ /** Immutable budget values used by the query and confidence owners. */
102
+ readonly budget: LodOcclusionInspectionBudget;
103
+ /** Stable attachment identity; array order is never an attribution key. */
104
+ readonly worlds: readonly LodOcclusionWorldInspection[];
105
+ }
106
+ export type LodOcclusionInspectionInput = Omit<LodOcclusionInspection, 'schema' | 'submit' | 'budget' | 'worlds'> & {
107
+ readonly submit?: LodOcclusionInspectionSubmit;
108
+ readonly budget?: LodOcclusionInspectionBudget;
109
+ readonly worlds?: readonly LodOcclusionWorldInspectionInput[];
110
+ };
111
+ export type LodOcclusionWorldInspectionInput = Omit<LodOcclusionWorldInspection, 'attribution'> & {
112
+ readonly attribution?: LodOcclusionWorldAttribution;
113
+ };
114
+ export type LodOcclusionInspectionAction = {
115
+ readonly action: 'none';
116
+ } | {
117
+ readonly action: 'rebuild';
118
+ readonly sourceKey: string;
119
+ readonly reason: string;
120
+ } | {
121
+ readonly action: 'cold-cook';
122
+ readonly sourceKey: string;
123
+ readonly reason: string;
124
+ } | {
125
+ readonly action: 'retry';
126
+ readonly sourceKey: string;
127
+ readonly reason: string;
128
+ };
129
+ export declare function inspectLodOcclusion(input: LodOcclusionInspectionInput): LodOcclusionInspection;
130
+ export declare function serializeLodOcclusionInspection(inspection: LodOcclusionInspection): string;
131
+ export declare function consumeLodOcclusionInspection(inspection: LodOcclusionInspection): LodOcclusionInspectionAction;
132
+ //# sourceMappingURL=inspection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/inspection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { MeshLodLevel } from '@forgeax/engine-types';
2
+ export interface ProjectedHeightInput {
3
+ readonly radius: number;
4
+ readonly depth: number;
5
+ readonly projection: 'perspective' | 'orthographic';
6
+ readonly fov?: number;
7
+ readonly orthoHeight?: number;
8
+ }
9
+ export interface LodSelectorInput {
10
+ /** Lower-detail levels in ascending detail order; LOD0 is implicit. */
11
+ readonly levels: readonly Pick<MeshLodLevel, 'screenCoverage'>[];
12
+ readonly projectedHeight: number;
13
+ readonly previousLevel: number;
14
+ readonly hysteresis: number;
15
+ /** Index zero is the root and must remain the safe fallback. */
16
+ readonly ready: readonly boolean[];
17
+ readonly historyValid: boolean;
18
+ }
19
+ export interface LodSelection {
20
+ readonly level: number;
21
+ readonly confidence: number;
22
+ }
23
+ export declare function projectedHeight(input: ProjectedHeightInput): number;
24
+ export declare function selectLod(input: LodSelectorInput): LodSelection;
25
+ //# sourceMappingURL=lod-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lod-selector.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/lod-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,aAAa,GAAG,cAAc,CAAC;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAE,CAAC;IACjE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAUnE;AAmCD,wBAAgB,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAY/D"}
@@ -0,0 +1,81 @@
1
+ import { type VisibilityBudget } from './budget';
2
+ export type InvalidationReason = 'cut' | 'teleport' | 'resize' | 'projection' | 'primitive' | 'bounds' | 'topology' | 'world-reorder' | 'detach' | 'failed-submit' | 'device-loss' | 'transparent';
3
+ export interface ConfidenceState {
4
+ readonly status: 'visible' | 'hidden';
5
+ readonly zeroStreak: number;
6
+ readonly successfulSubmits: number;
7
+ readonly queryable: boolean;
8
+ readonly dirty: boolean;
9
+ readonly lastResultGeneration: number | undefined;
10
+ }
11
+ export type ConfidenceEvent = {
12
+ readonly type: 'result';
13
+ readonly samples: number;
14
+ readonly submissionGeneration: number;
15
+ } | {
16
+ readonly type: 'submit';
17
+ readonly submissionGeneration: number;
18
+ } | {
19
+ readonly type: 'failure';
20
+ readonly submissionGeneration: number;
21
+ } | {
22
+ readonly type: 'invalidate';
23
+ readonly reason: InvalidationReason;
24
+ };
25
+ export declare function createConfidenceState(): ConfidenceState;
26
+ export declare function applyConfidenceEvent(state: ConfidenceState, event: ConfidenceEvent, budget?: VisibilityBudget): ConfidenceState;
27
+ export declare function shouldIssueRetest(state: ConfidenceState, budget?: VisibilityBudget): boolean;
28
+ export declare class OcclusionConfidenceScheduler {
29
+ private readonly budget;
30
+ private readonly states;
31
+ private readonly wakeByGeneration;
32
+ private readonly expireByGeneration;
33
+ private readonly wakeHeap;
34
+ private readonly expireHeap;
35
+ private readonly wakeHeapMembers;
36
+ private readonly expireHeapMembers;
37
+ private readonly retestKeys;
38
+ private readonly scheduleByKey;
39
+ constructor(budget?: VisibilityBudget);
40
+ ensure(key: string): ConfidenceState;
41
+ apply(key: string, event: ConfidenceEvent): ConfidenceState;
42
+ /** Apply an in-flight query submit without scheduling a same-generation wake. */
43
+ applyInFlightSubmit(key: string, event: Extract<ConfidenceEvent, {
44
+ readonly type: 'submit';
45
+ }>): ConfidenceState;
46
+ drainRetests(limit: number): string[];
47
+ get(key: string): ConfidenceState | undefined;
48
+ remove(key: string): void;
49
+ /** Advance hidden evidence on a successful frame even when no query was issued for it. */
50
+ advanceSuccessfulSubmits(submissionGeneration: number, excludedKeys?: ReadonlySet<string>): {
51
+ readonly changed: boolean;
52
+ readonly drawChangedKeys: readonly string[];
53
+ readonly queryChangedKeys: readonly string[];
54
+ };
55
+ clear(): void;
56
+ private schedule;
57
+ private scheduleExpiry;
58
+ private scheduleExpiryOnly;
59
+ private unschedule;
60
+ private takeDue;
61
+ private addDue;
62
+ private refreshRetestKey;
63
+ }
64
+ export interface VisibilityDecisionInput {
65
+ readonly authorVisible: boolean;
66
+ readonly validBounds: boolean;
67
+ readonly frustumVisible: boolean;
68
+ readonly lodReady: boolean;
69
+ readonly occlusion: Pick<ConfidenceState, 'status' | 'queryable'>;
70
+ readonly lane?: 'cpu' | 'gpu';
71
+ }
72
+ export interface VisibilityDecision {
73
+ readonly draw: boolean;
74
+ readonly stage: 'author' | 'bounds' | 'frustum' | 'lod' | 'occlusion';
75
+ }
76
+ export declare function decideVisibility(input: VisibilityDecisionInput): VisibilityDecision;
77
+ export interface RecoveredVisibilityState extends ConfidenceState {
78
+ readonly retryCount: 1;
79
+ }
80
+ export declare function recoverVisibilityAfterDeviceLoss(_state: ConfidenceState, _deviceGeneration: number): RecoveredVisibilityState;
81
+ //# sourceMappingURL=occlusion-confidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occlusion-confidence.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/occlusion-confidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export interface OcclusionBounds {
2
+ readonly min: readonly [number, number, number];
3
+ readonly max: readonly [number, number, number];
4
+ }
5
+ export interface OcclusionPassIdentity {
6
+ readonly primitiveSlot: number;
7
+ readonly slotGeneration: number;
8
+ }
9
+ export interface OcclusionPassPlan {
10
+ readonly after: string;
11
+ readonly depth: {
12
+ readonly resource: string;
13
+ readonly usage: 'depth-read-only';
14
+ };
15
+ readonly color: {
16
+ readonly resource: string;
17
+ readonly usage: 'not-written';
18
+ };
19
+ readonly proxyBounds: OcclusionBounds;
20
+ readonly queryIndex: number;
21
+ readonly identity?: OcclusionPassIdentity;
22
+ readonly resolve: {
23
+ readonly queryIndex: number;
24
+ readonly bytes: number;
25
+ };
26
+ readonly copy: {
27
+ readonly asynchronous: true;
28
+ readonly bytes: number;
29
+ };
30
+ readonly writesColor: false;
31
+ readonly writesDepth: false;
32
+ readonly submitCount: 1;
33
+ readonly mapSameFrame: false;
34
+ }
35
+ export interface OcclusionPassInput {
36
+ readonly opaquePass: string;
37
+ readonly depthResource: string;
38
+ readonly colorResource: string;
39
+ readonly bounds: OcclusionBounds | undefined;
40
+ readonly queryIndex: number;
41
+ readonly identity?: OcclusionPassIdentity;
42
+ readonly transparent?: boolean;
43
+ readonly deformed?: boolean;
44
+ }
45
+ export interface OcclusionQueryResources {
46
+ readonly pageIndex: number;
47
+ readonly querySet: QuerySet;
48
+ readonly resolveBuffer: Buffer;
49
+ readonly stagingBuffer: Buffer;
50
+ }
51
+ export declare function createOcclusionQueryResources(device: RhiDevice, pageIndex: number): Result<OcclusionQueryResources, RhiError>;
52
+ /** Records resolve and copy only; caller owns one shared encoder and submit. */
53
+ export declare function recordOcclusionResolve(encoder: RhiCommandEncoder, resources: OcclusionQueryResources, firstQuery: number, queryCount: number): Result<void, RhiError>;
54
+ /** Creates only the transport plan; confidence remains owned by visibility facet/M4. */
55
+ export declare function buildOcclusionPassPlan(input: OcclusionPassInput): OcclusionPassPlan | undefined;
56
+ import type { Buffer, QuerySet, Result, RhiCommandEncoder, RhiDevice, RhiError } from '@forgeax/engine-rhi';
57
+ //# sourceMappingURL=occlusion-pass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occlusion-pass.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/occlusion-pass.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,CAAC;IACjF,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;KAAE,CAAC;IAC7E,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAgC3C;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,uBAAuB,EAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CA0BxB;AAOD,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,SAAS,CAwB/F;AAED,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACT,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,57 @@
1
+ export declare const OCCLUSION_QUERY_PAGE_COUNT = 3;
2
+ export declare const OCCLUSION_QUERY_PAGE_INDEX_LIMIT = 4096;
3
+ export declare const OCCLUSION_QUERY_RESULT_BYTES = 8;
4
+ export declare const OCCLUSION_QUERY_PAGE_BYTES: number;
5
+ export interface OcclusionQueryIdentity {
6
+ readonly viewKey: string;
7
+ readonly attachmentId: string;
8
+ readonly deviceGeneration: number;
9
+ readonly worldGeneration: number;
10
+ readonly primitiveSlot: number;
11
+ readonly slotGeneration: number;
12
+ }
13
+ export interface OcclusionQueryReservation extends OcclusionQueryIdentity {
14
+ readonly pageIndex: number;
15
+ readonly queryIndex: number;
16
+ readonly reservationId: number;
17
+ }
18
+ export interface OcclusionQueryTicket extends OcclusionQueryIdentity {
19
+ readonly pageIndex: number;
20
+ readonly queryIndex: number;
21
+ readonly reservationId: number;
22
+ readonly submissionGeneration: number;
23
+ }
24
+ export interface OcclusionQueryPoolInspection {
25
+ readonly pageCount: number;
26
+ readonly pageIndexLimit: number;
27
+ readonly resolveBytes: number;
28
+ readonly stagingBytes: number;
29
+ readonly availablePages: number;
30
+ readonly inFlight: number;
31
+ readonly disposed: boolean;
32
+ }
33
+ export interface OcclusionQueryCompletion {
34
+ readonly status: 'accepted' | 'stale';
35
+ /** M3 transport never suppresses a draw; M4 owns confidence policy. */
36
+ readonly visible: true;
37
+ }
38
+ /** Renderer-owned bounded query transport; it contains no visibility policy. */
39
+ export declare class OcclusionQueryPool {
40
+ private readonly pages;
41
+ private readonly pending;
42
+ private readonly tickets;
43
+ private nextReservationId;
44
+ private disposed;
45
+ reserve(identity: OcclusionQueryIdentity): OcclusionQueryReservation | undefined;
46
+ publish(reservation: OcclusionQueryReservation, result: {
47
+ readonly submitted: boolean;
48
+ readonly submissionGeneration: number;
49
+ }): OcclusionQueryTicket | undefined;
50
+ /** Return an unsubmitted reservation to its bounded page. */
51
+ cancel(reservation: OcclusionQueryReservation): boolean;
52
+ complete(ticket: OcclusionQueryTicket, _samples: number): OcclusionQueryCompletion;
53
+ inspect(): OcclusionQueryPoolInspection;
54
+ dispose(): void;
55
+ private releasePage;
56
+ }
57
+ //# sourceMappingURL=occlusion-query-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occlusion-query-pool.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/occlusion-query-pool.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,gCAAgC,OAAO,CAAC;AACrD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,0BAA0B,QAC0B,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB;IAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IACtC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;CACxB;AAoBD,gFAAgF;AAChF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGpB;IACF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgD;IACxE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,QAAQ,EAAE,sBAAsB,GAAG,yBAAyB,GAAG,SAAS;IAsBhF,OAAO,CACL,WAAW,EAAE,yBAAyB,EACtC,MAAM,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE,GAC7E,oBAAoB,GAAG,SAAS;IAmBnC,6DAA6D;IAC7D,MAAM,CAAC,WAAW,EAAE,yBAAyB,GAAG,OAAO;IAYvD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,GAAG,wBAAwB;IAclF,OAAO,IAAI,4BAA4B;IAiBvC,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,WAAW;CAMpB"}
@@ -0,0 +1,96 @@
1
+ import type { QuerySet, Result, RhiCommandEncoder, RhiDevice, RhiError, RhiRenderPassEncoder } from '@forgeax/engine-rhi';
2
+ import type { PipelineBuilderShaderModuleFactory } from '../../pipeline-builder';
3
+ import type { VisibilityBudget } from './budget';
4
+ import type { VisibilityFacetStore } from './facet';
5
+ import { type OcclusionBounds } from './occlusion-pass';
6
+ import { OcclusionQueryPool } from './occlusion-query-pool';
7
+ import { type PrimitiveKey, type ViewKey, type VisibilityCandidate } from './types';
8
+ /** @internal Deterministic producer hook; never configured by the player API. */
9
+ export interface OcclusionRuntimeTestHooks {
10
+ readonly beforeMap?: () => Promise<void>;
11
+ }
12
+ /** @internal Used only by the production evidence falsification harness. */
13
+ export declare function setOcclusionRuntimeTestHooks(hooks: OcclusionRuntimeTestHooks | undefined): void;
14
+ export interface OcclusionRuntimeCandidate {
15
+ readonly view: ViewKey;
16
+ readonly primitive: PrimitiveKey;
17
+ readonly epoch: number;
18
+ readonly bounds: OcclusionBounds;
19
+ readonly candidate: VisibilityCandidate;
20
+ readonly deviceGeneration: number;
21
+ /** Clip-space triangles for the conservative bounds proxy. */
22
+ readonly proxyVertices?: Float32Array;
23
+ }
24
+ export interface OcclusionFrameProjection {
25
+ readonly querySet: QuerySet;
26
+ readonly queryIndex: number;
27
+ readonly queryCount: number;
28
+ readonly sampleCount: 1 | 4;
29
+ readonly pageIndex: number;
30
+ readonly reservationId: number;
31
+ readonly encodeProxyBounds: (pass: RhiRenderPassEncoder) => Result<void, RhiError>;
32
+ readonly beginCandidate: (pass: RhiRenderPassEncoder) => Result<void, RhiError>;
33
+ readonly endCandidate: (pass: RhiRenderPassEncoder) => Result<void, RhiError>;
34
+ readonly recordResolve: (encoder: RhiCommandEncoder) => Result<void, RhiError>;
35
+ readonly commit: (submitted: boolean, submissionGeneration: number, profilePhase?: OcclusionProfilePhaseRunner) => void;
36
+ }
37
+ export type OcclusionProfilePhaseRunner = <T>(phase: 'record/occlusion-query-submit' | 'record/occlusion-global-advance', action: () => T) => T;
38
+ /**
39
+ * RenderSystem-owned query transport. It is deliberately the only bridge
40
+ * between the logical pool, the typed graph raster pass, and facet completion.
41
+ */
42
+ export declare class OcclusionRenderRuntime {
43
+ private readonly device;
44
+ private readonly facets;
45
+ private readonly shaderModuleFactory?;
46
+ private readonly budget;
47
+ private readonly pool;
48
+ private readonly resources;
49
+ private readonly activeCompletions;
50
+ private readonly retiredResources;
51
+ /** Candidate descriptors are rebuilt only when the extracted frame changes. */
52
+ private candidateSource;
53
+ private validCandidates;
54
+ private readonly candidateByKey;
55
+ private lastPrepareUnavailable;
56
+ private pendingFrame;
57
+ private disposed;
58
+ private proxyBuffer;
59
+ private readonly proxyScratch;
60
+ private proxyPipeline;
61
+ private proxyPipelineSampleCount;
62
+ private readonly queryLatencySamplesUs;
63
+ private lastQueryLatencyUs;
64
+ private readonly projection;
65
+ constructor(device: RhiDevice, facets: VisibilityFacetStore, shaderModuleFactory?: PipelineBuilderShaderModuleFactory | undefined, budget?: VisibilityBudget);
66
+ prepare(candidate: OcclusionRuntimeCandidate): OcclusionFrameProjection | undefined;
67
+ prepareBatch(candidates: readonly OcclusionRuntimeCandidate[], sampleCount?: 1 | 4, useReadyQueue?: boolean): OcclusionFrameProjection | undefined;
68
+ inspect(): ReturnType<OcclusionQueryPool['inspect']>;
69
+ get prepareUnavailable(): boolean;
70
+ /** Map-only latency from the submitted query page; queue wait is excluded. */
71
+ inspectQueryLatency(): {
72
+ readonly median: number;
73
+ readonly p95: number;
74
+ readonly last: number;
75
+ };
76
+ /**
77
+ * Wait until query readbacks submitted before the current observation have
78
+ * settled. The renderer receipt only fences command submission; query
79
+ * completion also includes the asynchronous map/unmap transition. Keeping
80
+ * that fence here makes `renderer.observe()` publish the latest visibility
81
+ * result and measured map latency instead of racing the readback promise.
82
+ */
83
+ waitForCompletions(): Promise<void>;
84
+ /** Count a successful frame for hidden rows that were not queried this frame. */
85
+ advanceSuccessfulSubmit(submissionGeneration: number): void;
86
+ dispose(): void;
87
+ private ensureResources;
88
+ private commit;
89
+ private publishAndApplySubmit;
90
+ private destroyResources;
91
+ private completeAfterSubmit;
92
+ private encodeProxyBounds;
93
+ private ensureProxyBuffer;
94
+ private ensureProxyPipeline;
95
+ }
96
+ //# sourceMappingURL=occlusion-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"occlusion-runtime.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/occlusion-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EAER,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,kBAAkB,EAGnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,OAAO,EACZ,KAAK,mBAAmB,EAEzB,MAAM,SAAS,CAAC;AAMjB,iFAAiF;AACjF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAID,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,yBAAyB,GAAG,SAAS,GAAG,IAAI,CAE/F;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnF,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChF,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9E,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/E,QAAQ,CAAC,MAAM,EAAE,CACf,SAAS,EAAE,OAAO,EAClB,oBAAoB,EAAE,MAAM,EAC5B,YAAY,CAAC,EAAE,2BAA2B,KACvC,IAAI,CAAC;CACX;AAED,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,EAC1C,KAAK,EAAE,+BAA+B,GAAG,iCAAiC,EAC1E,MAAM,EAAE,MAAM,CAAC,KACZ,CAAC,CAAC;AAWP;;;GAGG;AACH,qBAAa,sBAAsB;IAqB/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAvBzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IACxE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqD;IACvF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsC;IACvE,+EAA+E;IAC/E,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgD;IAC/E,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,wBAAwB,CAAoB;IACpD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgB;IACtD,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2B;gBAGnC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,oBAAoB,EAC5B,mBAAmB,CAAC,EAAE,kCAAkC,YAAA,EACxD,MAAM,GAAE,gBAA4C;IAoEvE,OAAO,CAAC,SAAS,EAAE,yBAAyB,GAAG,wBAAwB,GAAG,SAAS;IAMnF,YAAY,CACV,UAAU,EAAE,SAAS,yBAAyB,EAAE,EAChD,WAAW,GAAE,CAAC,GAAG,CAAK,EACtB,aAAa,UAAO,GACnB,wBAAwB,GAAG,SAAS;IAwHvC,OAAO,IAAI,UAAU,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAIpD,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,8EAA8E;IAC9E,mBAAmB,IAAI;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAc/F;;;;;;OAMG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWzC,iFAAiF;IACjF,uBAAuB,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI;IAI3D,OAAO,IAAI,IAAI;IA0Bf,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,MAAM;IA0Cd,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,gBAAgB;YAQV,mBAAmB;IAkEjC,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;CA6C5B"}
@@ -0,0 +1,34 @@
1
+ /** Closed view roles used by the renderer-owned visibility facet. */
2
+ export type VisibilityViewRole = 'main' | 'shadow' | 'reflection' | 'probe';
3
+ export interface ViewKey {
4
+ readonly attachmentId: string;
5
+ readonly cameraEntity: number;
6
+ readonly viewRole: VisibilityViewRole;
7
+ readonly viewGeneration: number;
8
+ }
9
+ export interface PrimitiveKey {
10
+ readonly attachmentId: string;
11
+ readonly worldGeneration: number;
12
+ readonly primitiveSlot: number;
13
+ readonly slotGeneration: number;
14
+ }
15
+ export interface VisibilityCandidate {
16
+ readonly level: number;
17
+ readonly confidence: number;
18
+ }
19
+ export interface VisibilityFacetInspection {
20
+ readonly owner: 'persistent-render-scene';
21
+ readonly activeViews: number;
22
+ readonly facetRows: number;
23
+ }
24
+ export interface VisibilityFacetInput {
25
+ readonly view: ViewKey;
26
+ readonly primitive: PrimitiveKey;
27
+ readonly epoch: number;
28
+ readonly candidate: VisibilityCandidate;
29
+ }
30
+ export declare function viewKeyId(key: ViewKey): string;
31
+ export declare function primitiveKeyId(key: PrimitiveKey): string;
32
+ export declare function viewKey(input: ViewKey): ViewKey;
33
+ export declare function primitiveKey(input: PrimitiveKey): PrimitiveKey;
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/types.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACzC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE9C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAExD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAE9D"}