@driftengine/core 3.61.0

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 (955) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +9 -0
  3. package/README.md +9 -0
  4. package/dist/behavior/behaviorTree.d.ts +140 -0
  5. package/dist/behavior/behaviorTree.js +289 -0
  6. package/dist/build/shaderComments.d.ts +64 -0
  7. package/dist/build/shaderComments.js +0 -0
  8. package/dist/cinematic/player.d.ts +80 -0
  9. package/dist/cinematic/player.js +184 -0
  10. package/dist/cinematic/script.d.ts +63 -0
  11. package/dist/cinematic/script.js +141 -0
  12. package/dist/core/bootGate.d.ts +37 -0
  13. package/dist/core/bootGate.js +47 -0
  14. package/dist/core/loadTracker.d.ts +78 -0
  15. package/dist/core/loadTracker.js +106 -0
  16. package/dist/core/loop.d.ts +118 -0
  17. package/dist/core/loop.js +84 -0
  18. package/dist/core/messageQueue.d.ts +61 -0
  19. package/dist/core/messageQueue.js +104 -0
  20. package/dist/core/onceSet.d.ts +27 -0
  21. package/dist/core/onceSet.js +62 -0
  22. package/dist/core/preferences.d.ts +47 -0
  23. package/dist/core/preferences.js +140 -0
  24. package/dist/core/remoteSave.d.ts +154 -0
  25. package/dist/core/remoteSave.js +249 -0
  26. package/dist/core/rng.d.ts +64 -0
  27. package/dist/core/rng.js +72 -0
  28. package/dist/core/stepBudget.d.ts +91 -0
  29. package/dist/core/stepBudget.js +105 -0
  30. package/dist/core/storage.d.ts +52 -0
  31. package/dist/core/storage.js +85 -0
  32. package/dist/core/tickTrace.d.ts +72 -0
  33. package/dist/core/tickTrace.js +102 -0
  34. package/dist/core/timeCurve.d.ts +83 -0
  35. package/dist/core/timeCurve.js +107 -0
  36. package/dist/core/withDefaults.d.ts +21 -0
  37. package/dist/core/withDefaults.js +29 -0
  38. package/dist/dev/contactProbe.d.ts +41 -0
  39. package/dist/dev/contactProbe.js +58 -0
  40. package/dist/dev/fpsMeter.d.ts +45 -0
  41. package/dist/dev/fpsMeter.js +86 -0
  42. package/dist/environment/celestialClock.d.ts +141 -0
  43. package/dist/environment/celestialClock.js +262 -0
  44. package/dist/geometry/decal.d.ts +61 -0
  45. package/dist/geometry/decal.js +178 -0
  46. package/dist/geometry/filmPatch.d.ts +35 -0
  47. package/dist/geometry/filmPatch.js +112 -0
  48. package/dist/geometry/growable.d.ts +70 -0
  49. package/dist/geometry/growable.js +167 -0
  50. package/dist/geometry/lightVolume.d.ts +76 -0
  51. package/dist/geometry/lightVolume.js +65 -0
  52. package/dist/geometry/meshBuilder.d.ts +426 -0
  53. package/dist/geometry/meshBuilder.js +1184 -0
  54. package/dist/geometry/pixelFont.d.ts +59 -0
  55. package/dist/geometry/pixelFont.js +179 -0
  56. package/dist/geometry/ribbon.d.ts +101 -0
  57. package/dist/geometry/ribbon.js +546 -0
  58. package/dist/geometry/shellFill.d.ts +101 -0
  59. package/dist/geometry/shellFill.js +203 -0
  60. package/dist/geometry/spline.d.ts +162 -0
  61. package/dist/geometry/spline.js +527 -0
  62. package/dist/geometry/tangents.d.ts +30 -0
  63. package/dist/geometry/tangents.js +142 -0
  64. package/dist/geometry/textMesh.d.ts +51 -0
  65. package/dist/geometry/textMesh.js +57 -0
  66. package/dist/geometry/treeBuilder.d.ts +37 -0
  67. package/dist/geometry/treeBuilder.js +56 -0
  68. package/dist/host/display.d.ts +135 -0
  69. package/dist/host/display.js +114 -0
  70. package/dist/host/files.d.ts +25 -0
  71. package/dist/host/files.js +44 -0
  72. package/dist/host/lifecycle.d.ts +45 -0
  73. package/dist/host/lifecycle.js +28 -0
  74. package/dist/host/platformServices.d.ts +23 -0
  75. package/dist/host/platformServices.js +1 -0
  76. package/dist/host/screen.d.ts +49 -0
  77. package/dist/host/screen.js +90 -0
  78. package/dist/index.d.ts +289 -0
  79. package/dist/index.js +320 -0
  80. package/dist/input/actionMap.d.ts +181 -0
  81. package/dist/input/actionMap.js +314 -0
  82. package/dist/input/activeDevice.d.ts +55 -0
  83. package/dist/input/activeDevice.js +83 -0
  84. package/dist/input/gamepadIdentity.d.ts +43 -0
  85. package/dist/input/gamepadIdentity.js +108 -0
  86. package/dist/input/gamepadMapping.d.ts +56 -0
  87. package/dist/input/gamepadMapping.js +91 -0
  88. package/dist/input/input.d.ts +281 -0
  89. package/dist/input/input.js +703 -0
  90. package/dist/input/inputHarness.d.ts +42 -0
  91. package/dist/input/inputHarness.js +193 -0
  92. package/dist/input/rightGesture.d.ts +57 -0
  93. package/dist/input/rightGesture.js +49 -0
  94. package/dist/input/rumble.d.ts +71 -0
  95. package/dist/input/rumble.js +119 -0
  96. package/dist/input/touchControls.d.ts +138 -0
  97. package/dist/input/touchControls.js +352 -0
  98. package/dist/input/typingTarget.d.ts +6 -0
  99. package/dist/input/typingTarget.js +27 -0
  100. package/dist/math/bounds.d.ts +61 -0
  101. package/dist/math/bounds.js +121 -0
  102. package/dist/math/color.d.ts +8 -0
  103. package/dist/math/color.js +35 -0
  104. package/dist/math/exact.d.ts +66 -0
  105. package/dist/math/exact.js +262 -0
  106. package/dist/math/frustum.d.ts +44 -0
  107. package/dist/math/frustum.js +90 -0
  108. package/dist/math/intersect.d.ts +76 -0
  109. package/dist/math/intersect.js +185 -0
  110. package/dist/math/scalar.d.ts +51 -0
  111. package/dist/math/scalar.js +99 -0
  112. package/dist/math/spring.d.ts +59 -0
  113. package/dist/math/spring.js +88 -0
  114. package/dist/nav/navGraph.d.ts +71 -0
  115. package/dist/nav/navGraph.js +111 -0
  116. package/dist/nav/navPath.d.ts +93 -0
  117. package/dist/nav/navPath.js +162 -0
  118. package/dist/nav/navSearch.d.ts +74 -0
  119. package/dist/nav/navSearch.js +198 -0
  120. package/dist/physics/boxSurface.d.ts +48 -0
  121. package/dist/physics/boxSurface.js +73 -0
  122. package/dist/physics/colliderSurface.d.ts +46 -0
  123. package/dist/physics/colliderSurface.js +146 -0
  124. package/dist/physics/compositeSurface.d.ts +33 -0
  125. package/dist/physics/compositeSurface.js +108 -0
  126. package/dist/physics/heightSurface.d.ts +103 -0
  127. package/dist/physics/heightSurface.js +153 -0
  128. package/dist/physics/ribbonSurface.d.ts +239 -0
  129. package/dist/physics/ribbonSurface.js +522 -0
  130. package/dist/render/ambientOcclusionPass.d.ts +53 -0
  131. package/dist/render/ambientOcclusionPass.js +179 -0
  132. package/dist/render/areaLights.d.ts +116 -0
  133. package/dist/render/areaLights.js +91 -0
  134. package/dist/render/areaShadowSet.d.ts +184 -0
  135. package/dist/render/areaShadowSet.js +277 -0
  136. package/dist/render/atmosphere.d.ts +94 -0
  137. package/dist/render/atmosphere.js +91 -0
  138. package/dist/render/backend/api.d.ts +496 -0
  139. package/dist/render/backend/api.js +1 -0
  140. package/dist/render/backend/budget.d.ts +82 -0
  141. package/dist/render/backend/budget.js +99 -0
  142. package/dist/render/backend/createRenderer.d.ts +135 -0
  143. package/dist/render/backend/createRenderer.js +201 -0
  144. package/dist/render/backend/deadline.d.ts +24 -0
  145. package/dist/render/backend/deadline.js +38 -0
  146. package/dist/render/backend/probe.d.ts +30 -0
  147. package/dist/render/backend/probe.js +129 -0
  148. package/dist/render/backend/select.d.ts +70 -0
  149. package/dist/render/backend/select.js +249 -0
  150. package/dist/render/backend/timer.d.ts +50 -0
  151. package/dist/render/backend/timer.js +1 -0
  152. package/dist/render/backend/webgl2/instanced.d.ts +21 -0
  153. package/dist/render/backend/webgl2/instanced.js +42 -0
  154. package/dist/render/backend/webgl2/morphTexture.d.ts +21 -0
  155. package/dist/render/backend/webgl2/morphTexture.js +55 -0
  156. package/dist/render/backend/webgl2/renderer.d.ts +3027 -0
  157. package/dist/render/backend/webgl2/renderer.js +6041 -0
  158. package/dist/render/backend/webgl2/skinPaletteTexture.d.ts +32 -0
  159. package/dist/render/backend/webgl2/skinPaletteTexture.js +68 -0
  160. package/dist/render/backend/webgpu/boltPass.d.ts +42 -0
  161. package/dist/render/backend/webgpu/boltPass.js +160 -0
  162. package/dist/render/backend/webgpu/buffers.d.ts +159 -0
  163. package/dist/render/backend/webgpu/buffers.js +402 -0
  164. package/dist/render/backend/webgpu/causticsPass.d.ts +36 -0
  165. package/dist/render/backend/webgpu/causticsPass.js +138 -0
  166. package/dist/render/backend/webgpu/clusterBinner.d.ts +51 -0
  167. package/dist/render/backend/webgpu/clusterBinner.js +206 -0
  168. package/dist/render/backend/webgpu/depthPass.d.ts +114 -0
  169. package/dist/render/backend/webgpu/depthPass.js +228 -0
  170. package/dist/render/backend/webgpu/device.d.ts +52 -0
  171. package/dist/render/backend/webgpu/device.js +121 -0
  172. package/dist/render/backend/webgpu/drawCommand.d.ts +43 -0
  173. package/dist/render/backend/webgpu/drawCommand.js +54 -0
  174. package/dist/render/backend/webgpu/environmentTexels.d.ts +28 -0
  175. package/dist/render/backend/webgpu/environmentTexels.js +79 -0
  176. package/dist/render/backend/webgpu/filmPass.d.ts +29 -0
  177. package/dist/render/backend/webgpu/filmPass.js +97 -0
  178. package/dist/render/backend/webgpu/flatPass.d.ts +213 -0
  179. package/dist/render/backend/webgpu/flatPass.js +482 -0
  180. package/dist/render/backend/webgpu/flockPass.d.ts +34 -0
  181. package/dist/render/backend/webgpu/flockPass.js +129 -0
  182. package/dist/render/backend/webgpu/gpuTimestamps.d.ts +94 -0
  183. package/dist/render/backend/webgpu/gpuTimestamps.js +213 -0
  184. package/dist/render/backend/webgpu/insetPass.d.ts +19 -0
  185. package/dist/render/backend/webgpu/insetPass.js +108 -0
  186. package/dist/render/backend/webgpu/instanced.d.ts +27 -0
  187. package/dist/render/backend/webgpu/instanced.js +49 -0
  188. package/dist/render/backend/webgpu/lightVolumePass.d.ts +75 -0
  189. package/dist/render/backend/webgpu/lightVolumePass.js +154 -0
  190. package/dist/render/backend/webgpu/linePass.d.ts +90 -0
  191. package/dist/render/backend/webgpu/linePass.js +220 -0
  192. package/dist/render/backend/webgpu/morphTexture.d.ts +18 -0
  193. package/dist/render/backend/webgpu/morphTexture.js +51 -0
  194. package/dist/render/backend/webgpu/panelPass.d.ts +37 -0
  195. package/dist/render/backend/webgpu/panelPass.js +114 -0
  196. package/dist/render/backend/webgpu/particlePass.d.ts +89 -0
  197. package/dist/render/backend/webgpu/particlePass.js +280 -0
  198. package/dist/render/backend/webgpu/pipelineCache.d.ts +93 -0
  199. package/dist/render/backend/webgpu/pipelineCache.js +140 -0
  200. package/dist/render/backend/webgpu/plumePass.d.ts +69 -0
  201. package/dist/render/backend/webgpu/plumePass.js +213 -0
  202. package/dist/render/backend/webgpu/pointShadowPass.d.ts +88 -0
  203. package/dist/render/backend/webgpu/pointShadowPass.js +280 -0
  204. package/dist/render/backend/webgpu/postPass.d.ts +342 -0
  205. package/dist/render/backend/webgpu/postPass.js +366 -0
  206. package/dist/render/backend/webgpu/probePass.d.ts +108 -0
  207. package/dist/render/backend/webgpu/probePass.js +188 -0
  208. package/dist/render/backend/webgpu/reflectionPass.d.ts +29 -0
  209. package/dist/render/backend/webgpu/reflectionPass.js +87 -0
  210. package/dist/render/backend/webgpu/renderer.d.ts +3082 -0
  211. package/dist/render/backend/webgpu/renderer.js +10911 -0
  212. package/dist/render/backend/webgpu/scatterPass.d.ts +95 -0
  213. package/dist/render/backend/webgpu/scatterPass.js +266 -0
  214. package/dist/render/backend/webgpu/sdfTextPass.d.ts +86 -0
  215. package/dist/render/backend/webgpu/sdfTextPass.js +190 -0
  216. package/dist/render/backend/webgpu/shaderModules.d.ts +9 -0
  217. package/dist/render/backend/webgpu/shaderModules.js +45 -0
  218. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +23 -0
  219. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +208 -0
  220. package/dist/render/backend/webgpu/skinPaletteRing.d.ts +67 -0
  221. package/dist/render/backend/webgpu/skinPaletteRing.js +97 -0
  222. package/dist/render/backend/webgpu/skinPaletteTexture.d.ts +17 -0
  223. package/dist/render/backend/webgpu/skinPaletteTexture.js +68 -0
  224. package/dist/render/backend/webgpu/skyPass.d.ts +102 -0
  225. package/dist/render/backend/webgpu/skyPass.js +70 -0
  226. package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +41 -0
  227. package/dist/render/backend/webgpu/surfaceTexturePass.js +228 -0
  228. package/dist/render/backend/webgpu/textPass.d.ts +73 -0
  229. package/dist/render/backend/webgpu/textPass.js +190 -0
  230. package/dist/render/backend/webgpu/uniformRing.d.ts +133 -0
  231. package/dist/render/backend/webgpu/uniformRing.js +208 -0
  232. package/dist/render/backend/webgpu/waterPass.d.ts +73 -0
  233. package/dist/render/backend/webgpu/waterPass.js +160 -0
  234. package/dist/render/backend/webgpu/windStreakPass.d.ts +46 -0
  235. package/dist/render/backend/webgpu/windStreakPass.js +153 -0
  236. package/dist/render/billboard.d.ts +27 -0
  237. package/dist/render/billboard.js +79 -0
  238. package/dist/render/bloomChain.d.ts +66 -0
  239. package/dist/render/bloomChain.js +83 -0
  240. package/dist/render/bloomPass.d.ts +54 -0
  241. package/dist/render/bloomPass.js +219 -0
  242. package/dist/render/boltBatch.d.ts +39 -0
  243. package/dist/render/boltBatch.js +121 -0
  244. package/dist/render/boltPool.d.ts +135 -0
  245. package/dist/render/boltPool.js +259 -0
  246. package/dist/render/boom.d.ts +46 -0
  247. package/dist/render/boom.js +81 -0
  248. package/dist/render/camera.d.ts +119 -0
  249. package/dist/render/camera.js +304 -0
  250. package/dist/render/causticsRenderer.d.ts +63 -0
  251. package/dist/render/causticsRenderer.js +119 -0
  252. package/dist/render/cinematicCamera.d.ts +102 -0
  253. package/dist/render/cinematicCamera.js +227 -0
  254. package/dist/render/clusteredLights.d.ts +260 -0
  255. package/dist/render/clusteredLights.js +479 -0
  256. package/dist/render/colourGrade.d.ts +62 -0
  257. package/dist/render/colourGrade.js +91 -0
  258. package/dist/render/compute.d.ts +74 -0
  259. package/dist/render/compute.js +8 -0
  260. package/dist/render/contextLoss.d.ts +32 -0
  261. package/dist/render/contextLoss.js +46 -0
  262. package/dist/render/debugLines.d.ts +75 -0
  263. package/dist/render/debugLines.js +281 -0
  264. package/dist/render/decalPass.d.ts +34 -0
  265. package/dist/render/decalPass.js +103 -0
  266. package/dist/render/decalProjector.d.ts +140 -0
  267. package/dist/render/decalProjector.js +282 -0
  268. package/dist/render/decalQueue.d.ts +53 -0
  269. package/dist/render/decalQueue.js +87 -0
  270. package/dist/render/depthConvention.d.ts +314 -0
  271. package/dist/render/depthConvention.js +346 -0
  272. package/dist/render/drawingBuffer.d.ts +52 -0
  273. package/dist/render/drawingBuffer.js +67 -0
  274. package/dist/render/emptyTexture.d.ts +60 -0
  275. package/dist/render/emptyTexture.js +103 -0
  276. package/dist/render/envProbeArray.d.ts +85 -0
  277. package/dist/render/envProbeArray.js +164 -0
  278. package/dist/render/equirectToCube.d.ts +54 -0
  279. package/dist/render/equirectToCube.js +123 -0
  280. package/dist/render/flockGeometry.d.ts +23 -0
  281. package/dist/render/flockGeometry.js +43 -0
  282. package/dist/render/flockRenderer.d.ts +37 -0
  283. package/dist/render/flockRenderer.js +70 -0
  284. package/dist/render/frame/arena.d.ts +32 -0
  285. package/dist/render/frame/arena.js +65 -0
  286. package/dist/render/frame/index.d.ts +18 -0
  287. package/dist/render/frame/index.js +4 -0
  288. package/dist/render/frame/replay.d.ts +34 -0
  289. package/dist/render/frame/replay.js +48 -0
  290. package/dist/render/frame/resources.d.ts +25 -0
  291. package/dist/render/frame/resources.js +55 -0
  292. package/dist/render/frame/schedule.d.ts +37 -0
  293. package/dist/render/frame/schedule.js +61 -0
  294. package/dist/render/frameView.d.ts +19 -0
  295. package/dist/render/frameView.js +1 -0
  296. package/dist/render/gizmo.d.ts +236 -0
  297. package/dist/render/gizmo.js +727 -0
  298. package/dist/render/globalMedium.d.ts +124 -0
  299. package/dist/render/globalMedium.js +100 -0
  300. package/dist/render/globalMediumPass.d.ts +101 -0
  301. package/dist/render/globalMediumPass.js +250 -0
  302. package/dist/render/gpuCapability.d.ts +111 -0
  303. package/dist/render/gpuCapability.js +194 -0
  304. package/dist/render/gpuTimer.d.ts +87 -0
  305. package/dist/render/gpuTimer.js +145 -0
  306. package/dist/render/halfFloat.d.ts +4 -0
  307. package/dist/render/halfFloat.js +38 -0
  308. package/dist/render/handleRegistry.d.ts +54 -0
  309. package/dist/render/handleRegistry.js +84 -0
  310. package/dist/render/iesProfile.d.ts +64 -0
  311. package/dist/render/iesProfile.js +179 -0
  312. package/dist/render/imageTexels.d.ts +50 -0
  313. package/dist/render/imageTexels.js +91 -0
  314. package/dist/render/instancedMesh.d.ts +48 -0
  315. package/dist/render/instancedMesh.js +127 -0
  316. package/dist/render/instances.d.ts +69 -0
  317. package/dist/render/instances.js +52 -0
  318. package/dist/render/lightBudget.d.ts +397 -0
  319. package/dist/render/lightBudget.js +524 -0
  320. package/dist/render/lightMatrix.d.ts +3 -0
  321. package/dist/render/lightMatrix.js +45 -0
  322. package/dist/render/lightVolumeDraw.d.ts +132 -0
  323. package/dist/render/lightVolumeDraw.js +181 -0
  324. package/dist/render/lineBatch.d.ts +60 -0
  325. package/dist/render/lineBatch.js +160 -0
  326. package/dist/render/linePoints.d.ts +33 -0
  327. package/dist/render/linePoints.js +46 -0
  328. package/dist/render/livePointShadowSet.d.ts +72 -0
  329. package/dist/render/livePointShadowSet.js +258 -0
  330. package/dist/render/lod.d.ts +35 -0
  331. package/dist/render/lod.js +65 -0
  332. package/dist/render/mesh.d.ts +177 -0
  333. package/dist/render/mesh.js +466 -0
  334. package/dist/render/occlusion.d.ts +81 -0
  335. package/dist/render/occlusion.js +378 -0
  336. package/dist/render/oitPass.d.ts +67 -0
  337. package/dist/render/oitPass.js +213 -0
  338. package/dist/render/orderIndependent.d.ts +92 -0
  339. package/dist/render/orderIndependent.js +108 -0
  340. package/dist/render/particleBatch.d.ts +140 -0
  341. package/dist/render/particleBatch.js +186 -0
  342. package/dist/render/particleMaterial.d.ts +54 -0
  343. package/dist/render/particleMaterial.js +42 -0
  344. package/dist/render/particlePool.d.ts +124 -0
  345. package/dist/render/particlePool.js +182 -0
  346. package/dist/render/pass.d.ts +195 -0
  347. package/dist/render/pass.js +9 -0
  348. package/dist/render/passTarget.d.ts +86 -0
  349. package/dist/render/passTarget.js +121 -0
  350. package/dist/render/pickable.d.ts +31 -0
  351. package/dist/render/pickable.js +172 -0
  352. package/dist/render/planarReflection.d.ts +59 -0
  353. package/dist/render/planarReflection.js +194 -0
  354. package/dist/render/planarReflectionDraw.d.ts +31 -0
  355. package/dist/render/planarReflectionDraw.js +65 -0
  356. package/dist/render/plumeGeometry.d.ts +25 -0
  357. package/dist/render/plumeGeometry.js +61 -0
  358. package/dist/render/plumeMaterial.d.ts +31 -0
  359. package/dist/render/plumeMaterial.js +64 -0
  360. package/dist/render/plumeRenderer.d.ts +96 -0
  361. package/dist/render/plumeRenderer.js +185 -0
  362. package/dist/render/pointLightSelection.d.ts +175 -0
  363. package/dist/render/pointLightSelection.js +301 -0
  364. package/dist/render/pointShadowArray.d.ts +95 -0
  365. package/dist/render/pointShadowArray.js +219 -0
  366. package/dist/render/pointShadowBudget.d.ts +118 -0
  367. package/dist/render/pointShadowBudget.js +221 -0
  368. package/dist/render/pointShadowImage.d.ts +265 -0
  369. package/dist/render/pointShadowImage.js +339 -0
  370. package/dist/render/pointShadowMap.d.ts +93 -0
  371. package/dist/render/pointShadowMap.js +167 -0
  372. package/dist/render/pointShadowSystem.d.ts +195 -0
  373. package/dist/render/pointShadowSystem.js +336 -0
  374. package/dist/render/prefilterEnvMap.d.ts +124 -0
  375. package/dist/render/prefilterEnvMap.js +146 -0
  376. package/dist/render/prefilterPass.d.ts +44 -0
  377. package/dist/render/prefilterPass.js +98 -0
  378. package/dist/render/probeGrid.d.ts +122 -0
  379. package/dist/render/probeGrid.js +174 -0
  380. package/dist/render/rainField.d.ts +99 -0
  381. package/dist/render/rainField.js +168 -0
  382. package/dist/render/reflectionProbe.d.ts +188 -0
  383. package/dist/render/reflectionProbe.js +437 -0
  384. package/dist/render/renderQuality.d.ts +699 -0
  385. package/dist/render/renderQuality.js +293 -0
  386. package/dist/render/rendererHarness.d.ts +39 -0
  387. package/dist/render/rendererHarness.js +185 -0
  388. package/dist/render/resolutionGovernor.d.ts +107 -0
  389. package/dist/render/resolutionGovernor.js +144 -0
  390. package/dist/render/scatterDeform.d.ts +17 -0
  391. package/dist/render/scatterDeform.js +46 -0
  392. package/dist/render/sceneTarget.d.ts +288 -0
  393. package/dist/render/sceneTarget.js +856 -0
  394. package/dist/render/screenSpaceReflection.d.ts +233 -0
  395. package/dist/render/screenSpaceReflection.js +415 -0
  396. package/dist/render/sdfFont.d.ts +77 -0
  397. package/dist/render/sdfFont.js +86 -0
  398. package/dist/render/sdfTextLayout.d.ts +46 -0
  399. package/dist/render/sdfTextLayout.js +145 -0
  400. package/dist/render/sdfTextRenderer.d.ts +75 -0
  401. package/dist/render/sdfTextRenderer.js +194 -0
  402. package/dist/render/seaState.d.ts +25 -0
  403. package/dist/render/seaState.js +34 -0
  404. package/dist/render/segmentQuads.d.ts +29 -0
  405. package/dist/render/segmentQuads.js +75 -0
  406. package/dist/render/shader.d.ts +5 -0
  407. package/dist/render/shader.js +172 -0
  408. package/dist/render/shaders/ambientOcclusion.d.ts +45 -0
  409. package/dist/render/shaders/ambientOcclusion.js +352 -0
  410. package/dist/render/shaders/arcane.d.ts +19 -0
  411. package/dist/render/shaders/arcane.js +102 -0
  412. package/dist/render/shaders/bloom.d.ts +70 -0
  413. package/dist/render/shaders/bloom.js +227 -0
  414. package/dist/render/shaders/bolt.d.ts +17 -0
  415. package/dist/render/shaders/bolt.js +161 -0
  416. package/dist/render/shaders/caustics.d.ts +38 -0
  417. package/dist/render/shaders/caustics.js +167 -0
  418. package/dist/render/shaders/conditionals.d.ts +21 -0
  419. package/dist/render/shaders/conditionals.js +55 -0
  420. package/dist/render/shaders/decalProject.d.ts +25 -0
  421. package/dist/render/shaders/decalProject.js +125 -0
  422. package/dist/render/shaders/depth.d.ts +14 -0
  423. package/dist/render/shaders/depth.js +114 -0
  424. package/dist/render/shaders/depthOfField.d.ts +41 -0
  425. package/dist/render/shaders/depthOfField.js +139 -0
  426. package/dist/render/shaders/film.d.ts +15 -0
  427. package/dist/render/shaders/film.js +283 -0
  428. package/dist/render/shaders/fire.d.ts +12 -0
  429. package/dist/render/shaders/fire.js +178 -0
  430. package/dist/render/shaders/flat/directionalShadow.d.ts +1 -0
  431. package/dist/render/shaders/flat/directionalShadow.js +195 -0
  432. package/dist/render/shaders/flat/index.d.ts +135 -0
  433. package/dist/render/shaders/flat/index.js +387 -0
  434. package/dist/render/shaders/flat/lobes.d.ts +1 -0
  435. package/dist/render/shaders/flat/lobes.js +398 -0
  436. package/dist/render/shaders/flat/main.d.ts +2 -0
  437. package/dist/render/shaders/flat/main.js +1630 -0
  438. package/dist/render/shaders/flat/pointShadow.d.ts +1 -0
  439. package/dist/render/shaders/flat/pointShadow.js +322 -0
  440. package/dist/render/shaders/flat/preamble.d.ts +15 -0
  441. package/dist/render/shaders/flat/preamble.js +864 -0
  442. package/dist/render/shaders/flat/probeGrid.d.ts +21 -0
  443. package/dist/render/shaders/flat/probeGrid.js +151 -0
  444. package/dist/render/shaders/flat/surface.d.ts +2 -0
  445. package/dist/render/shaders/flat/surface.js +40 -0
  446. package/dist/render/shaders/flock.d.ts +11 -0
  447. package/dist/render/shaders/flock.js +102 -0
  448. package/dist/render/shaders/fog.d.ts +37 -0
  449. package/dist/render/shaders/fog.js +98 -0
  450. package/dist/render/shaders/fullscreen.d.ts +16 -0
  451. package/dist/render/shaders/fullscreen.js +27 -0
  452. package/dist/render/shaders/generated/ambientOcclusion.wgsl.d.ts +65 -0
  453. package/dist/render/shaders/generated/ambientOcclusion.wgsl.js +71 -0
  454. package/dist/render/shaders/generated/arcane.wgsl.d.ts +90 -0
  455. package/dist/render/shaders/generated/arcane.wgsl.js +96 -0
  456. package/dist/render/shaders/generated/bloom.wgsl.d.ts +69 -0
  457. package/dist/render/shaders/generated/bloom.wgsl.js +75 -0
  458. package/dist/render/shaders/generated/bolt.wgsl.d.ts +118 -0
  459. package/dist/render/shaders/generated/bolt.wgsl.js +124 -0
  460. package/dist/render/shaders/generated/caustics.wgsl.d.ts +118 -0
  461. package/dist/render/shaders/generated/caustics.wgsl.js +124 -0
  462. package/dist/render/shaders/generated/decalProject.wgsl.d.ts +61 -0
  463. package/dist/render/shaders/generated/decalProject.wgsl.js +67 -0
  464. package/dist/render/shaders/generated/depth.wgsl.d.ts +131 -0
  465. package/dist/render/shaders/generated/depth.wgsl.js +137 -0
  466. package/dist/render/shaders/generated/film.wgsl.d.ts +134 -0
  467. package/dist/render/shaders/generated/film.wgsl.js +140 -0
  468. package/dist/render/shaders/generated/fire.wgsl.d.ts +128 -0
  469. package/dist/render/shaders/generated/fire.wgsl.js +134 -0
  470. package/dist/render/shaders/generated/flat.wgsl.d.ts +9163 -0
  471. package/dist/render/shaders/generated/flat.wgsl.js +9192 -0
  472. package/dist/render/shaders/generated/flock.wgsl.d.ts +73 -0
  473. package/dist/render/shaders/generated/flock.wgsl.js +79 -0
  474. package/dist/render/shaders/generated/fullscreen.wgsl.d.ts +12 -0
  475. package/dist/render/shaders/generated/fullscreen.wgsl.js +18 -0
  476. package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +130 -0
  477. package/dist/render/shaders/generated/globalMedium.wgsl.js +136 -0
  478. package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +230 -0
  479. package/dist/render/shaders/generated/lightVolume.wgsl.js +239 -0
  480. package/dist/render/shaders/generated/line.wgsl.d.ts +128 -0
  481. package/dist/render/shaders/generated/line.wgsl.js +134 -0
  482. package/dist/render/shaders/generated/octahedralResolve.wgsl.d.ts +51 -0
  483. package/dist/render/shaders/generated/octahedralResolve.wgsl.js +57 -0
  484. package/dist/render/shaders/generated/oitResolve.wgsl.d.ts +23 -0
  485. package/dist/render/shaders/generated/oitResolve.wgsl.js +29 -0
  486. package/dist/render/shaders/generated/panel.wgsl.d.ts +48 -0
  487. package/dist/render/shaders/generated/panel.wgsl.js +54 -0
  488. package/dist/render/shaders/generated/particle.wgsl.d.ts +332 -0
  489. package/dist/render/shaders/generated/particle.wgsl.js +338 -0
  490. package/dist/render/shaders/generated/prefilter.wgsl.d.ts +61 -0
  491. package/dist/render/shaders/generated/prefilter.wgsl.js +67 -0
  492. package/dist/render/shaders/generated/rush.wgsl.d.ts +131 -0
  493. package/dist/render/shaders/generated/rush.wgsl.js +137 -0
  494. package/dist/render/shaders/generated/scatter.wgsl.d.ts +195 -0
  495. package/dist/render/shaders/generated/scatter.wgsl.js +201 -0
  496. package/dist/render/shaders/generated/sdfText.wgsl.d.ts +69 -0
  497. package/dist/render/shaders/generated/sdfText.wgsl.js +75 -0
  498. package/dist/render/shaders/generated/sky.wgsl.d.ts +100 -0
  499. package/dist/render/shaders/generated/sky.wgsl.js +106 -0
  500. package/dist/render/shaders/generated/smoke.wgsl.d.ts +85 -0
  501. package/dist/render/shaders/generated/smoke.wgsl.js +91 -0
  502. package/dist/render/shaders/generated/ssrResolve.wgsl.d.ts +18 -0
  503. package/dist/render/shaders/generated/ssrResolve.wgsl.js +24 -0
  504. package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +86 -0
  505. package/dist/render/shaders/generated/ssrTrace.wgsl.js +92 -0
  506. package/dist/render/shaders/generated/temporalResolve.wgsl.d.ts +46 -0
  507. package/dist/render/shaders/generated/temporalResolve.wgsl.js +52 -0
  508. package/dist/render/shaders/generated/text.wgsl.d.ts +98 -0
  509. package/dist/render/shaders/generated/text.wgsl.js +104 -0
  510. package/dist/render/shaders/generated/water.wgsl.d.ts +247 -0
  511. package/dist/render/shaders/generated/water.wgsl.js +253 -0
  512. package/dist/render/shaders/generated/windStreaks.wgsl.d.ts +73 -0
  513. package/dist/render/shaders/generated/windStreaks.wgsl.js +79 -0
  514. package/dist/render/shaders/gerstner.d.ts +21 -0
  515. package/dist/render/shaders/gerstner.js +110 -0
  516. package/dist/render/shaders/globalMedium.d.ts +56 -0
  517. package/dist/render/shaders/globalMedium.js +393 -0
  518. package/dist/render/shaders/lightVolume.d.ts +61 -0
  519. package/dist/render/shaders/lightVolume.js +527 -0
  520. package/dist/render/shaders/line.d.ts +18 -0
  521. package/dist/render/shaders/line.js +122 -0
  522. package/dist/render/shaders/morph.d.ts +26 -0
  523. package/dist/render/shaders/morph.js +61 -0
  524. package/dist/render/shaders/octahedral.d.ts +76 -0
  525. package/dist/render/shaders/octahedral.js +161 -0
  526. package/dist/render/shaders/octahedralResolve.d.ts +25 -0
  527. package/dist/render/shaders/octahedralResolve.js +81 -0
  528. package/dist/render/shaders/oitResolve.d.ts +17 -0
  529. package/dist/render/shaders/oitResolve.js +42 -0
  530. package/dist/render/shaders/outputTransform.d.ts +37 -0
  531. package/dist/render/shaders/outputTransform.js +106 -0
  532. package/dist/render/shaders/panel.d.ts +17 -0
  533. package/dist/render/shaders/panel.js +50 -0
  534. package/dist/render/shaders/particle.d.ts +82 -0
  535. package/dist/render/shaders/particle.js +431 -0
  536. package/dist/render/shaders/prefilter.d.ts +37 -0
  537. package/dist/render/shaders/prefilter.js +276 -0
  538. package/dist/render/shaders/rush.d.ts +21 -0
  539. package/dist/render/shaders/rush.js +355 -0
  540. package/dist/render/shaders/scatter.d.ts +14 -0
  541. package/dist/render/shaders/scatter.js +206 -0
  542. package/dist/render/shaders/sdfText.d.ts +9 -0
  543. package/dist/render/shaders/sdfText.js +65 -0
  544. package/dist/render/shaders/skinning.d.ts +17 -0
  545. package/dist/render/shaders/skinning.js +59 -0
  546. package/dist/render/shaders/sky.d.ts +10 -0
  547. package/dist/render/shaders/sky.js +242 -0
  548. package/dist/render/shaders/smoke.d.ts +8 -0
  549. package/dist/render/shaders/smoke.js +88 -0
  550. package/dist/render/shaders/ssrResolve.d.ts +15 -0
  551. package/dist/render/shaders/ssrResolve.js +28 -0
  552. package/dist/render/shaders/ssrTrace.d.ts +22 -0
  553. package/dist/render/shaders/ssrTrace.js +230 -0
  554. package/dist/render/shaders/tangentFrame.d.ts +17 -0
  555. package/dist/render/shaders/tangentFrame.js +70 -0
  556. package/dist/render/shaders/temporalResolve.d.ts +1 -0
  557. package/dist/render/shaders/temporalResolve.js +150 -0
  558. package/dist/render/shaders/text.d.ts +17 -0
  559. package/dist/render/shaders/text.js +155 -0
  560. package/dist/render/shaders/vertexChannel.d.ts +39 -0
  561. package/dist/render/shaders/vertexChannel.js +69 -0
  562. package/dist/render/shaders/water.d.ts +18 -0
  563. package/dist/render/shaders/water.js +354 -0
  564. package/dist/render/shaders/windStreaks.d.ts +14 -0
  565. package/dist/render/shaders/windStreaks.js +129 -0
  566. package/dist/render/shadowCasters.d.ts +107 -0
  567. package/dist/render/shadowCasters.js +1 -0
  568. package/dist/render/shadowMap.d.ts +10 -0
  569. package/dist/render/shadowMap.js +80 -0
  570. package/dist/render/shotPlacement.d.ts +80 -0
  571. package/dist/render/shotPlacement.js +183 -0
  572. package/dist/render/skinPalette.d.ts +90 -0
  573. package/dist/render/skinPalette.js +136 -0
  574. package/dist/render/ssrPass.d.ts +59 -0
  575. package/dist/render/ssrPass.js +196 -0
  576. package/dist/render/surfaceSheet.d.ts +52 -0
  577. package/dist/render/surfaceSheet.js +99 -0
  578. package/dist/render/surfaceTexture.d.ts +197 -0
  579. package/dist/render/surfaceTexture.js +116 -0
  580. package/dist/render/temporalAa.d.ts +104 -0
  581. package/dist/render/temporalAa.js +194 -0
  582. package/dist/render/temporalPass.d.ts +54 -0
  583. package/dist/render/temporalPass.js +135 -0
  584. package/dist/render/textLayout.d.ts +88 -0
  585. package/dist/render/textLayout.js +201 -0
  586. package/dist/render/textRenderer.d.ts +32 -0
  587. package/dist/render/textRenderer.js +176 -0
  588. package/dist/render/thirdPersonCamera.d.ts +272 -0
  589. package/dist/render/thirdPersonCamera.js +479 -0
  590. package/dist/render/trample.d.ts +57 -0
  591. package/dist/render/trample.js +134 -0
  592. package/dist/render/translucentQueue.d.ts +76 -0
  593. package/dist/render/translucentQueue.js +90 -0
  594. package/dist/render/uniformVectorBudget.d.ts +105 -0
  595. package/dist/render/uniformVectorBudget.js +201 -0
  596. package/dist/render/uploadStep.d.ts +14 -0
  597. package/dist/render/uploadStep.js +14 -0
  598. package/dist/render/vertexDefaults.d.ts +48 -0
  599. package/dist/render/vertexDefaults.js +111 -0
  600. package/dist/render/visibility.d.ts +22 -0
  601. package/dist/render/visibility.js +47 -0
  602. package/dist/render/waterDraw.d.ts +57 -0
  603. package/dist/render/waterDraw.js +102 -0
  604. package/dist/render/waterGrid.d.ts +62 -0
  605. package/dist/render/waterGrid.js +151 -0
  606. package/dist/render/waterRenderer.d.ts +163 -0
  607. package/dist/render/waterRenderer.js +165 -0
  608. package/dist/render/wind.d.ts +45 -0
  609. package/dist/render/wind.js +32 -0
  610. package/dist/render/windField.d.ts +34 -0
  611. package/dist/render/windField.js +13 -0
  612. package/dist/render/windStreakDraw.d.ts +73 -0
  613. package/dist/render/windStreakDraw.js +86 -0
  614. package/dist/render/windStreakRenderer.d.ts +37 -0
  615. package/dist/render/windStreakRenderer.js +86 -0
  616. package/dist/scene/node.d.ts +128 -0
  617. package/dist/scene/node.js +319 -0
  618. package/dist/scene/visit.d.ts +38 -0
  619. package/dist/scene/visit.js +43 -0
  620. package/dist/ui/clipMime.d.ts +46 -0
  621. package/dist/ui/clipMime.js +88 -0
  622. package/dist/ui/exportTarget.d.ts +305 -0
  623. package/dist/ui/exportTarget.js +368 -0
  624. package/dist/ui/frameOverlay.d.ts +59 -0
  625. package/dist/ui/frameOverlay.js +76 -0
  626. package/dist/ui/framePacer.d.ts +142 -0
  627. package/dist/ui/framePacer.js +284 -0
  628. package/dist/ui/frameRecorder.d.ts +188 -0
  629. package/dist/ui/frameRecorder.js +221 -0
  630. package/dist/ui/fullscreen.d.ts +72 -0
  631. package/dist/ui/fullscreen.js +92 -0
  632. package/dist/ui/pixelCursor.d.ts +28 -0
  633. package/dist/ui/pixelCursor.js +66 -0
  634. package/dist/ui/splash.d.ts +86 -0
  635. package/dist/ui/splash.js +300 -0
  636. package/dist/ui/stillFrame.d.ts +22 -0
  637. package/dist/ui/stillFrame.js +40 -0
  638. package/package.json +60 -0
  639. package/src/behavior/behaviorTree.ts +346 -0
  640. package/src/build/shaderComments.ts +0 -0
  641. package/src/cinematic/player.ts +209 -0
  642. package/src/cinematic/script.ts +231 -0
  643. package/src/core/bootGate.ts +49 -0
  644. package/src/core/loadTracker.ts +144 -0
  645. package/src/core/loop.ts +211 -0
  646. package/src/core/messageQueue.ts +145 -0
  647. package/src/core/onceSet.ts +65 -0
  648. package/src/core/preferences.ts +177 -0
  649. package/src/core/remoteSave.ts +347 -0
  650. package/src/core/rng.ts +101 -0
  651. package/src/core/stepBudget.ts +136 -0
  652. package/src/core/storage.ts +114 -0
  653. package/src/core/tickTrace.ts +129 -0
  654. package/src/core/timeCurve.ts +175 -0
  655. package/src/core/withDefaults.ts +28 -0
  656. package/src/dev/contactProbe.ts +115 -0
  657. package/src/dev/fpsMeter.ts +101 -0
  658. package/src/environment/celestialClock.ts +385 -0
  659. package/src/geometry/decal.ts +260 -0
  660. package/src/geometry/filmPatch.ts +158 -0
  661. package/src/geometry/growable.ts +165 -0
  662. package/src/geometry/lightVolume.ts +161 -0
  663. package/src/geometry/meshBuilder.ts +1397 -0
  664. package/src/geometry/pixelFont.ts +189 -0
  665. package/src/geometry/ribbon.ts +790 -0
  666. package/src/geometry/shellFill.ts +265 -0
  667. package/src/geometry/spline.ts +659 -0
  668. package/src/geometry/tangents.ts +173 -0
  669. package/src/geometry/textMesh.ts +96 -0
  670. package/src/geometry/treeBuilder.ts +114 -0
  671. package/src/host/display.ts +180 -0
  672. package/src/host/files.ts +77 -0
  673. package/src/host/lifecycle.ts +63 -0
  674. package/src/host/platformServices.ts +23 -0
  675. package/src/host/screen.ts +134 -0
  676. package/src/index.ts +730 -0
  677. package/src/input/actionMap.ts +377 -0
  678. package/src/input/activeDevice.ts +86 -0
  679. package/src/input/gamepadIdentity.ts +131 -0
  680. package/src/input/gamepadMapping.ts +121 -0
  681. package/src/input/input.ts +872 -0
  682. package/src/input/inputHarness.ts +226 -0
  683. package/src/input/rightGesture.ts +76 -0
  684. package/src/input/rumble.ts +138 -0
  685. package/src/input/touchControls.ts +451 -0
  686. package/src/input/typingTarget.ts +26 -0
  687. package/src/math/bounds.ts +153 -0
  688. package/src/math/color.ts +37 -0
  689. package/src/math/exact.ts +274 -0
  690. package/src/math/frustum.ts +115 -0
  691. package/src/math/intersect.ts +228 -0
  692. package/src/math/scalar.ts +109 -0
  693. package/src/math/spring.ts +106 -0
  694. package/src/nav/navGraph.ts +168 -0
  695. package/src/nav/navPath.ts +217 -0
  696. package/src/nav/navSearch.ts +200 -0
  697. package/src/physics/boxSurface.ts +96 -0
  698. package/src/physics/colliderSurface.ts +213 -0
  699. package/src/physics/compositeSurface.ts +111 -0
  700. package/src/physics/heightSurface.ts +234 -0
  701. package/src/physics/ribbonSurface.ts +642 -0
  702. package/src/render/ambientOcclusionPass.ts +200 -0
  703. package/src/render/areaLights.ts +194 -0
  704. package/src/render/areaShadowSet.ts +405 -0
  705. package/src/render/atmosphere.ts +186 -0
  706. package/src/render/backend/api.ts +802 -0
  707. package/src/render/backend/budget.ts +139 -0
  708. package/src/render/backend/createRenderer.ts +343 -0
  709. package/src/render/backend/deadline.ts +37 -0
  710. package/src/render/backend/probe.ts +152 -0
  711. package/src/render/backend/select.ts +288 -0
  712. package/src/render/backend/timer.ts +59 -0
  713. package/src/render/backend/webgl2/instanced.ts +46 -0
  714. package/src/render/backend/webgl2/morphTexture.ts +58 -0
  715. package/src/render/backend/webgl2/renderer.ts +7484 -0
  716. package/src/render/backend/webgl2/skinPaletteTexture.ts +70 -0
  717. package/src/render/backend/webgpu/boltPass.ts +205 -0
  718. package/src/render/backend/webgpu/buffers.ts +553 -0
  719. package/src/render/backend/webgpu/causticsPass.ts +174 -0
  720. package/src/render/backend/webgpu/clusterBinner.ts +259 -0
  721. package/src/render/backend/webgpu/depthPass.ts +261 -0
  722. package/src/render/backend/webgpu/device.ts +148 -0
  723. package/src/render/backend/webgpu/drawCommand.ts +79 -0
  724. package/src/render/backend/webgpu/environmentTexels.ts +96 -0
  725. package/src/render/backend/webgpu/filmPass.ts +123 -0
  726. package/src/render/backend/webgpu/flatPass.ts +635 -0
  727. package/src/render/backend/webgpu/flockPass.ts +163 -0
  728. package/src/render/backend/webgpu/gpuTimestamps.ts +255 -0
  729. package/src/render/backend/webgpu/insetPass.ts +123 -0
  730. package/src/render/backend/webgpu/instanced.ts +55 -0
  731. package/src/render/backend/webgpu/lightVolumePass.ts +203 -0
  732. package/src/render/backend/webgpu/linePass.ts +270 -0
  733. package/src/render/backend/webgpu/morphTexture.ts +61 -0
  734. package/src/render/backend/webgpu/panelPass.ts +138 -0
  735. package/src/render/backend/webgpu/particlePass.ts +370 -0
  736. package/src/render/backend/webgpu/pipelineCache.ts +152 -0
  737. package/src/render/backend/webgpu/plumePass.ts +292 -0
  738. package/src/render/backend/webgpu/pointShadowPass.ts +368 -0
  739. package/src/render/backend/webgpu/postPass.ts +470 -0
  740. package/src/render/backend/webgpu/probePass.ts +218 -0
  741. package/src/render/backend/webgpu/reflectionPass.ts +137 -0
  742. package/src/render/backend/webgpu/renderer.ts +13004 -0
  743. package/src/render/backend/webgpu/scatterPass.ts +354 -0
  744. package/src/render/backend/webgpu/sdfTextPass.ts +220 -0
  745. package/src/render/backend/webgpu/shaderModules.ts +49 -0
  746. package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +219 -0
  747. package/src/render/backend/webgpu/skinPaletteRing.ts +105 -0
  748. package/src/render/backend/webgpu/skinPaletteTexture.ts +79 -0
  749. package/src/render/backend/webgpu/skyPass.ts +85 -0
  750. package/src/render/backend/webgpu/surfaceTexturePass.ts +257 -0
  751. package/src/render/backend/webgpu/textPass.ts +224 -0
  752. package/src/render/backend/webgpu/uniformRing.ts +228 -0
  753. package/src/render/backend/webgpu/waterPass.ts +211 -0
  754. package/src/render/backend/webgpu/windStreakPass.ts +196 -0
  755. package/src/render/billboard.ts +108 -0
  756. package/src/render/bloomChain.ts +101 -0
  757. package/src/render/bloomPass.ts +256 -0
  758. package/src/render/boltBatch.ts +141 -0
  759. package/src/render/boltPool.ts +360 -0
  760. package/src/render/boom.ts +123 -0
  761. package/src/render/camera.ts +348 -0
  762. package/src/render/causticsRenderer.ts +171 -0
  763. package/src/render/cinematicCamera.ts +278 -0
  764. package/src/render/clusteredLights.ts +598 -0
  765. package/src/render/colourGrade.ts +109 -0
  766. package/src/render/compute.ts +83 -0
  767. package/src/render/contextLoss.ts +50 -0
  768. package/src/render/debugLines.ts +411 -0
  769. package/src/render/decalPass.ts +124 -0
  770. package/src/render/decalProjector.ts +390 -0
  771. package/src/render/decalQueue.ts +110 -0
  772. package/src/render/depthConvention.ts +383 -0
  773. package/src/render/drawingBuffer.ts +89 -0
  774. package/src/render/emptyTexture.ts +130 -0
  775. package/src/render/envProbeArray.ts +201 -0
  776. package/src/render/equirectToCube.ts +160 -0
  777. package/src/render/flockGeometry.ts +53 -0
  778. package/src/render/flockRenderer.ts +111 -0
  779. package/src/render/frame/arena.ts +93 -0
  780. package/src/render/frame/index.ts +29 -0
  781. package/src/render/frame/replay.ts +50 -0
  782. package/src/render/frame/resources.ts +61 -0
  783. package/src/render/frame/schedule.ts +85 -0
  784. package/src/render/frameView.ts +20 -0
  785. package/src/render/gizmo.ts +923 -0
  786. package/src/render/globalMedium.ts +154 -0
  787. package/src/render/globalMediumPass.ts +323 -0
  788. package/src/render/gpuCapability.ts +244 -0
  789. package/src/render/gpuTimer.ts +182 -0
  790. package/src/render/halfFloat.ts +39 -0
  791. package/src/render/handleRegistry.ts +96 -0
  792. package/src/render/iesProfile.ts +215 -0
  793. package/src/render/imageTexels.ts +109 -0
  794. package/src/render/instancedMesh.ts +187 -0
  795. package/src/render/instances.ts +92 -0
  796. package/src/render/lightBudget.ts +655 -0
  797. package/src/render/lightMatrix.ts +69 -0
  798. package/src/render/lightVolumeDraw.ts +216 -0
  799. package/src/render/lineBatch.ts +180 -0
  800. package/src/render/linePoints.ts +61 -0
  801. package/src/render/livePointShadowSet.ts +285 -0
  802. package/src/render/lod.ts +86 -0
  803. package/src/render/mesh.ts +536 -0
  804. package/src/render/occlusion.ts +406 -0
  805. package/src/render/oitPass.ts +230 -0
  806. package/src/render/orderIndependent.ts +136 -0
  807. package/src/render/particleBatch.ts +299 -0
  808. package/src/render/particleMaterial.ts +84 -0
  809. package/src/render/particlePool.ts +291 -0
  810. package/src/render/pass.ts +203 -0
  811. package/src/render/passTarget.ts +225 -0
  812. package/src/render/pickable.ts +222 -0
  813. package/src/render/planarReflection.ts +233 -0
  814. package/src/render/planarReflectionDraw.ts +87 -0
  815. package/src/render/plumeGeometry.ts +75 -0
  816. package/src/render/plumeMaterial.ts +99 -0
  817. package/src/render/plumeRenderer.ts +272 -0
  818. package/src/render/pointLightSelection.ts +447 -0
  819. package/src/render/pointShadowArray.ts +276 -0
  820. package/src/render/pointShadowBudget.ts +305 -0
  821. package/src/render/pointShadowImage.ts +470 -0
  822. package/src/render/pointShadowMap.ts +228 -0
  823. package/src/render/pointShadowSystem.ts +408 -0
  824. package/src/render/prefilterEnvMap.ts +162 -0
  825. package/src/render/prefilterPass.ts +115 -0
  826. package/src/render/probeGrid.ts +248 -0
  827. package/src/render/rainField.ts +240 -0
  828. package/src/render/reflectionProbe.ts +530 -0
  829. package/src/render/renderQuality.ts +1054 -0
  830. package/src/render/rendererHarness.ts +214 -0
  831. package/src/render/resolutionGovernor.ts +189 -0
  832. package/src/render/scatterDeform.ts +72 -0
  833. package/src/render/sceneTarget.ts +1032 -0
  834. package/src/render/screenSpaceReflection.ts +524 -0
  835. package/src/render/sdfFont.ts +157 -0
  836. package/src/render/sdfTextLayout.ts +206 -0
  837. package/src/render/sdfTextRenderer.ts +233 -0
  838. package/src/render/seaState.ts +55 -0
  839. package/src/render/segmentQuads.ts +92 -0
  840. package/src/render/shader.ts +190 -0
  841. package/src/render/shaders/ambientOcclusion.ts +354 -0
  842. package/src/render/shaders/arcane.ts +103 -0
  843. package/src/render/shaders/bloom.ts +232 -0
  844. package/src/render/shaders/bolt.ts +164 -0
  845. package/src/render/shaders/caustics.ts +169 -0
  846. package/src/render/shaders/conditionals.ts +58 -0
  847. package/src/render/shaders/decalProject.ts +127 -0
  848. package/src/render/shaders/depth.ts +131 -0
  849. package/src/render/shaders/depthOfField.ts +141 -0
  850. package/src/render/shaders/film.ts +285 -0
  851. package/src/render/shaders/fire.ts +180 -0
  852. package/src/render/shaders/flat/directionalShadow.ts +196 -0
  853. package/src/render/shaders/flat/index.ts +502 -0
  854. package/src/render/shaders/flat/lobes.ts +399 -0
  855. package/src/render/shaders/flat/main.ts +1631 -0
  856. package/src/render/shaders/flat/pointShadow.ts +323 -0
  857. package/src/render/shaders/flat/preamble.ts +875 -0
  858. package/src/render/shaders/flat/probeGrid.ts +152 -0
  859. package/src/render/shaders/flat/surface.ts +41 -0
  860. package/src/render/shaders/flock.ts +103 -0
  861. package/src/render/shaders/fog.ts +99 -0
  862. package/src/render/shaders/fullscreen.ts +28 -0
  863. package/src/render/shaders/generated/ambientOcclusion.wgsl.ts +74 -0
  864. package/src/render/shaders/generated/arcane.wgsl.ts +98 -0
  865. package/src/render/shaders/generated/bloom.wgsl.ts +79 -0
  866. package/src/render/shaders/generated/bolt.wgsl.ts +127 -0
  867. package/src/render/shaders/generated/caustics.wgsl.ts +127 -0
  868. package/src/render/shaders/generated/decalProject.wgsl.ts +69 -0
  869. package/src/render/shaders/generated/depth.wgsl.ts +142 -0
  870. package/src/render/shaders/generated/film.wgsl.ts +143 -0
  871. package/src/render/shaders/generated/fire.wgsl.ts +137 -0
  872. package/src/render/shaders/generated/flat.wgsl.ts +9195 -0
  873. package/src/render/shaders/generated/flock.wgsl.ts +82 -0
  874. package/src/render/shaders/generated/fullscreen.wgsl.ts +20 -0
  875. package/src/render/shaders/generated/globalMedium.wgsl.ts +139 -0
  876. package/src/render/shaders/generated/lightVolume.wgsl.ts +242 -0
  877. package/src/render/shaders/generated/line.wgsl.ts +137 -0
  878. package/src/render/shaders/generated/octahedralResolve.wgsl.ts +60 -0
  879. package/src/render/shaders/generated/oitResolve.wgsl.ts +31 -0
  880. package/src/render/shaders/generated/panel.wgsl.ts +57 -0
  881. package/src/render/shaders/generated/particle.wgsl.ts +343 -0
  882. package/src/render/shaders/generated/prefilter.wgsl.ts +69 -0
  883. package/src/render/shaders/generated/rush.wgsl.ts +139 -0
  884. package/src/render/shaders/generated/scatter.wgsl.ts +205 -0
  885. package/src/render/shaders/generated/sdfText.wgsl.ts +78 -0
  886. package/src/render/shaders/generated/sky.wgsl.ts +109 -0
  887. package/src/render/shaders/generated/smoke.wgsl.ts +93 -0
  888. package/src/render/shaders/generated/ssrResolve.wgsl.ts +26 -0
  889. package/src/render/shaders/generated/ssrTrace.wgsl.ts +94 -0
  890. package/src/render/shaders/generated/temporalResolve.wgsl.ts +54 -0
  891. package/src/render/shaders/generated/text.wgsl.ts +107 -0
  892. package/src/render/shaders/generated/water.wgsl.ts +256 -0
  893. package/src/render/shaders/generated/windStreaks.wgsl.ts +82 -0
  894. package/src/render/shaders/gerstner.ts +110 -0
  895. package/src/render/shaders/globalMedium.ts +396 -0
  896. package/src/render/shaders/lightVolume.ts +546 -0
  897. package/src/render/shaders/line.ts +125 -0
  898. package/src/render/shaders/morph.ts +62 -0
  899. package/src/render/shaders/octahedral.ts +170 -0
  900. package/src/render/shaders/octahedralResolve.ts +83 -0
  901. package/src/render/shaders/oitResolve.ts +42 -0
  902. package/src/render/shaders/outputTransform.ts +107 -0
  903. package/src/render/shaders/panel.ts +51 -0
  904. package/src/render/shaders/particle.ts +438 -0
  905. package/src/render/shaders/prefilter.ts +278 -0
  906. package/src/render/shaders/rush.ts +357 -0
  907. package/src/render/shaders/scatter.ts +211 -0
  908. package/src/render/shaders/sdfText.ts +68 -0
  909. package/src/render/shaders/skinning.ts +59 -0
  910. package/src/render/shaders/sky.ts +243 -0
  911. package/src/render/shaders/smoke.ts +89 -0
  912. package/src/render/shaders/ssrResolve.ts +28 -0
  913. package/src/render/shaders/ssrTrace.ts +233 -0
  914. package/src/render/shaders/tangentFrame.ts +70 -0
  915. package/src/render/shaders/temporalResolve.ts +151 -0
  916. package/src/render/shaders/text.ts +156 -0
  917. package/src/render/shaders/vertexChannel.ts +71 -0
  918. package/src/render/shaders/water.ts +356 -0
  919. package/src/render/shaders/windStreaks.ts +130 -0
  920. package/src/render/shadowCasters.ts +124 -0
  921. package/src/render/shadowMap.ts +89 -0
  922. package/src/render/shotPlacement.ts +266 -0
  923. package/src/render/skinPalette.ts +157 -0
  924. package/src/render/ssrPass.ts +241 -0
  925. package/src/render/surfaceSheet.ts +158 -0
  926. package/src/render/surfaceTexture.ts +310 -0
  927. package/src/render/temporalAa.ts +221 -0
  928. package/src/render/temporalPass.ts +153 -0
  929. package/src/render/textLayout.ts +239 -0
  930. package/src/render/textRenderer.ts +201 -0
  931. package/src/render/thirdPersonCamera.ts +578 -0
  932. package/src/render/trample.ts +140 -0
  933. package/src/render/translucentQueue.ts +161 -0
  934. package/src/render/uniformVectorBudget.ts +246 -0
  935. package/src/render/uploadStep.ts +14 -0
  936. package/src/render/vertexDefaults.ts +115 -0
  937. package/src/render/visibility.ts +56 -0
  938. package/src/render/waterDraw.ts +167 -0
  939. package/src/render/waterGrid.ts +180 -0
  940. package/src/render/waterRenderer.ts +352 -0
  941. package/src/render/wind.ts +79 -0
  942. package/src/render/windField.ts +50 -0
  943. package/src/render/windStreakDraw.ts +131 -0
  944. package/src/render/windStreakRenderer.ts +130 -0
  945. package/src/scene/node.ts +336 -0
  946. package/src/scene/visit.ts +82 -0
  947. package/src/ui/clipMime.ts +109 -0
  948. package/src/ui/exportTarget.ts +491 -0
  949. package/src/ui/frameOverlay.ts +159 -0
  950. package/src/ui/framePacer.ts +351 -0
  951. package/src/ui/frameRecorder.ts +333 -0
  952. package/src/ui/fullscreen.ts +113 -0
  953. package/src/ui/pixelCursor.ts +99 -0
  954. package/src/ui/splash.ts +347 -0
  955. package/src/ui/stillFrame.ts +44 -0
@@ -0,0 +1,133 @@
1
+ import type { BudgetCounter } from '../budget.ts';
2
+ /**
3
+ * WebGPU's default minimum alignment for a dynamic uniform offset.
4
+ *
5
+ * Exported because the bloom chain lays out its stages by hand rather than through this class —
6
+ * its blocks never change between frames, so it has nothing to reset and nothing to flush — and
7
+ * an alignment restated somewhere else is an alignment that can disagree.
8
+ */
9
+ export declare const DYNAMIC_ALIGNMENT = 256;
10
+ /**
11
+ * Per-draw uniforms, in slots, written once and bound by offset.
12
+ *
13
+ * **This exists because `queue.writeBuffer` does not interleave with draw commands.** Writes
14
+ * are ordered on the queue timeline and the encoder's commands are submitted afterwards, so
15
+ * writing one model matrix into one buffer between two `draw` calls gives *both* draws the
16
+ * last matrix written. The picture is every object stacked at the position of whichever was
17
+ * drawn last, which looks like a transform bug and is not one.
18
+ *
19
+ * So each draw takes its own slot, all the slots are uploaded in a single write at the end
20
+ * of the frame, and the draw binds its slot with a dynamic offset. One upload per frame
21
+ * rather than one per draw, and no allocation in the frame loop: the staging array is
22
+ * allocated once and reused, which is what `AGENTS.md` requires of a per-frame path.
23
+ */
24
+ export declare class UniformRing {
25
+ private readonly budget;
26
+ /**
27
+ * The device buffer every bind group over this ring holds.
28
+ *
29
+ * **Not `readonly`, because `growTo` replaces it**, and a bind group built against the old one
30
+ * is invalid the moment it does. That is the whole reason `growTo` reports whether it happened.
31
+ */
32
+ buffer: GPUBuffer;
33
+ /** Bytes per slot, rounded up to the alignment a dynamic offset requires. */
34
+ readonly slotSize: number;
35
+ private readonly device;
36
+ private readonly usage;
37
+ private readonly label;
38
+ private staging;
39
+ private floats;
40
+ private ints;
41
+ private capacity;
42
+ private used;
43
+ /**
44
+ * `label` names the buffer on the device, and it is not decoration.
45
+ *
46
+ * A validation failure arrives at `queue.submit` naming the resource it was about, and the
47
+ * only reason that message is readable is that somebody labelled the resource — the shadow
48
+ * peel's root cause read *"of [Texture "shadow.static"]"*. A dozen rings all called
49
+ * `uniforms.ring` would name none of themselves. See `device.ts`.
50
+ *
51
+ * `budget` is the line this ring's ceiling is reported on, and most rings have none.
52
+ * **Only one ring of a pair carries it**: several subsystems take a vertex slot and a fragment
53
+ * slot together, from two rings of equal capacity, and refuse the work if either is null — so a
54
+ * line on both would count every water body twice and report a ceiling of sixteen exceeded at
55
+ * eight. The vertex ring carries it by convention and the fragment ring beside it carries none.
56
+ */
57
+ constructor(device: GPUDevice, bytesPerSlot: number, slots: number, usage: number, label?: string, budget?: BudgetCounter | null);
58
+ /** How many slots this ring holds. What a frame may take before `allocate` starts refusing. */
59
+ get slots(): number;
60
+ /**
61
+ * Make room for at least `slots`, and say whether the buffer was replaced.
62
+ *
63
+ * **Called at the start of a frame and nowhere else**, which is what keeps `allocate`'s refusal
64
+ * to grow intact: there is no encoder open, everything from the last frame has been submitted,
65
+ * and nothing has been written into the staging that discarding it would lose. Growing where
66
+ * `allocate` runs out would stall the frame to make room, which is the thing this class exists
67
+ * to avoid and still does.
68
+ *
69
+ * **A `true` means every bind group holding `buffer` is now invalid.** The old buffer is
70
+ * destroyed rather than dropped: commands already submitted against it keep it alive until they
71
+ * retire, which is the implementation's job, and nothing recorded for *this* frame exists yet.
72
+ *
73
+ * Refuses past `MAX_RING_BYTES` and says `false`, leaving the ring it has — a frame asking for
74
+ * more than that goes back to skipping the work and reporting it.
75
+ */
76
+ growTo(slots: number): boolean;
77
+ /** How many slots have been taken this frame. */
78
+ get count(): number;
79
+ /** Start a frame. Slots are reused; nothing is freed. */
80
+ reset(): void;
81
+ /**
82
+ * Take the next slot and return its byte offset, or null when the ring is full.
83
+ *
84
+ * **Null rather than growing.** Growing means allocating a buffer mid-frame, which is the
85
+ * thing this class exists to avoid; a caller that runs out should skip the draw and say so
86
+ * once, not stall the frame to make room.
87
+ *
88
+ * **And say so in a number as well as in a line of text.** Every caller already wrote one
89
+ * `console.warn` per renderer lifetime and nothing else, which is unobservable from a headless
90
+ * check and gone by the time anybody looks — a consumer lost weeks to a ceiling whose
91
+ * open lead was still *"ask the reporter for the console"*. The count is taken here rather than
92
+ * at the callers because here is the only place that knows both halves: what was asked for, and
93
+ * whether it fit.
94
+ *
95
+ * **What comes back is a byte offset, not an index**, and it is what `setBindGroup` wants.
96
+ *
97
+ * Said plainly because the name says "slot" and the value is already scaled: a caller that
98
+ * multiplies it by `slotSize` on the way to a dynamic offset lands a whole ring away. That
99
+ * happened — the second panel of a frame addressed 65,536 into a 16,384-byte ring — and the
100
+ * only reason it took a minute rather than an afternoon is that `device.ts` now prints what
101
+ * the device rejected, naming the buffer and both numbers.
102
+ */
103
+ allocate(): number | null;
104
+ /** Write floats into a slot, at a byte offset within it. */
105
+ writeFloats(slot: number, byteOffset: number, values: ArrayLike<number>): void;
106
+ /**
107
+ * Write one float into a slot.
108
+ *
109
+ * Separate from `writeFloats` because the alternative at a call site with a dozen scalars in
110
+ * it is a one-element array per field — either allocated in the frame loop, which
111
+ * `AGENTS.md` forbids, or a shared scratch that reads as a value being passed when it is a
112
+ * buffer being reused.
113
+ */
114
+ writeFloat(slot: number, byteOffset: number, value: number): void;
115
+ /** Write one integer into a slot. Separate because a `Float32Array` cannot hold an `i32`. */
116
+ writeInt(slot: number, byteOffset: number, value: number): void;
117
+ /**
118
+ * Copy a whole prepared block into a slot, bit for bit.
119
+ *
120
+ * **Through the integer view, and that is not a detail.** A block that mixes floats and
121
+ * `i32`s copied through `Float32Array` is a numeric conversion, and `-1` as an `i32` is
122
+ * `0xFFFFFFFF`, which read as a float is a NaN — free to be canonicalised to a different NaN
123
+ * on the way through. `-1` is the *sentinel* for "this light has no shadow cubemap", so that
124
+ * conversion would turn "no point shadows" into a number matching nothing or, worse,
125
+ * something. Bug 9 on this branch was that sentinel being wrong in the other direction.
126
+ *
127
+ * `Int32Array.set` from an `Int32Array` is an exact copy of every bit, whatever the bits mean.
128
+ */
129
+ writeBlock(slot: number, block: Int32Array): void;
130
+ /** Upload every slot taken this frame, in one write. */
131
+ flush(): void;
132
+ dispose(): void;
133
+ }
@@ -0,0 +1,208 @@
1
+ /**
2
+ * WebGPU's default minimum alignment for a dynamic uniform offset.
3
+ *
4
+ * Exported because the bloom chain lays out its stages by hand rather than through this class —
5
+ * its blocks never change between frames, so it has nothing to reset and nothing to flush — and
6
+ * an alignment restated somewhere else is an alignment that can disagree.
7
+ */
8
+ export const DYNAMIC_ALIGNMENT = 256;
9
+ /**
10
+ * The most staging one ring may hold, and therefore the most device memory it may take.
11
+ *
12
+ * **A ceiling on the growth, because a runaway consumer should degrade rather than crash.** Past
13
+ * this the ring refuses to grow and goes on skipping work and reporting it, which is the right end
14
+ * state for a frame asking for something no device should be asked for. What growth changes is
15
+ * where that line sits: at a number chosen against a phone's memory rather than at whatever the
16
+ * ring happened to be constructed with.
17
+ *
18
+ * Sixty-four mebibytes is far past any legitimate scene — the flat vertex ring's slot is 1,540
19
+ * bytes, so this is forty-three thousand draws, and the fragment ring's is at most 13,312, which
20
+ * is five thousand material changes in one frame. The device buffer matches the staging, so a ring
21
+ * at this ceiling holds 128 MiB in total and only ever reaches it by being asked to.
22
+ */
23
+ const MAX_RING_BYTES = 64 * 1024 * 1024;
24
+ /**
25
+ * Per-draw uniforms, in slots, written once and bound by offset.
26
+ *
27
+ * **This exists because `queue.writeBuffer` does not interleave with draw commands.** Writes
28
+ * are ordered on the queue timeline and the encoder's commands are submitted afterwards, so
29
+ * writing one model matrix into one buffer between two `draw` calls gives *both* draws the
30
+ * last matrix written. The picture is every object stacked at the position of whichever was
31
+ * drawn last, which looks like a transform bug and is not one.
32
+ *
33
+ * So each draw takes its own slot, all the slots are uploaded in a single write at the end
34
+ * of the frame, and the draw binds its slot with a dynamic offset. One upload per frame
35
+ * rather than one per draw, and no allocation in the frame loop: the staging array is
36
+ * allocated once and reused, which is what `AGENTS.md` requires of a per-frame path.
37
+ */
38
+ export class UniformRing {
39
+ budget;
40
+ /**
41
+ * The device buffer every bind group over this ring holds.
42
+ *
43
+ * **Not `readonly`, because `growTo` replaces it**, and a bind group built against the old one
44
+ * is invalid the moment it does. That is the whole reason `growTo` reports whether it happened.
45
+ */
46
+ buffer;
47
+ /** Bytes per slot, rounded up to the alignment a dynamic offset requires. */
48
+ slotSize;
49
+ device;
50
+ usage;
51
+ label;
52
+ staging;
53
+ floats;
54
+ ints;
55
+ capacity;
56
+ used = 0;
57
+ /**
58
+ * `label` names the buffer on the device, and it is not decoration.
59
+ *
60
+ * A validation failure arrives at `queue.submit` naming the resource it was about, and the
61
+ * only reason that message is readable is that somebody labelled the resource — the shadow
62
+ * peel's root cause read *"of [Texture "shadow.static"]"*. A dozen rings all called
63
+ * `uniforms.ring` would name none of themselves. See `device.ts`.
64
+ *
65
+ * `budget` is the line this ring's ceiling is reported on, and most rings have none.
66
+ * **Only one ring of a pair carries it**: several subsystems take a vertex slot and a fragment
67
+ * slot together, from two rings of equal capacity, and refuse the work if either is null — so a
68
+ * line on both would count every water body twice and report a ceiling of sixteen exceeded at
69
+ * eight. The vertex ring carries it by convention and the fragment ring beside it carries none.
70
+ */
71
+ constructor(device, bytesPerSlot, slots, usage, label = 'uniforms.ring', budget = null) {
72
+ this.budget = budget;
73
+ this.device = device;
74
+ this.usage = usage;
75
+ this.label = label;
76
+ this.slotSize = Math.ceil(bytesPerSlot / DYNAMIC_ALIGNMENT) * DYNAMIC_ALIGNMENT;
77
+ this.capacity = slots;
78
+ this.staging = new ArrayBuffer(this.slotSize * slots);
79
+ this.floats = new Float32Array(this.staging);
80
+ this.ints = new Int32Array(this.staging);
81
+ this.buffer = device.createBuffer({
82
+ label,
83
+ size: this.staging.byteLength,
84
+ usage,
85
+ });
86
+ }
87
+ /** How many slots this ring holds. What a frame may take before `allocate` starts refusing. */
88
+ get slots() {
89
+ return this.capacity;
90
+ }
91
+ /**
92
+ * Make room for at least `slots`, and say whether the buffer was replaced.
93
+ *
94
+ * **Called at the start of a frame and nowhere else**, which is what keeps `allocate`'s refusal
95
+ * to grow intact: there is no encoder open, everything from the last frame has been submitted,
96
+ * and nothing has been written into the staging that discarding it would lose. Growing where
97
+ * `allocate` runs out would stall the frame to make room, which is the thing this class exists
98
+ * to avoid and still does.
99
+ *
100
+ * **A `true` means every bind group holding `buffer` is now invalid.** The old buffer is
101
+ * destroyed rather than dropped: commands already submitted against it keep it alive until they
102
+ * retire, which is the implementation's job, and nothing recorded for *this* frame exists yet.
103
+ *
104
+ * Refuses past `MAX_RING_BYTES` and says `false`, leaving the ring it has — a frame asking for
105
+ * more than that goes back to skipping the work and reporting it.
106
+ */
107
+ growTo(slots) {
108
+ if (slots <= this.capacity)
109
+ return false;
110
+ const bytes = this.slotSize * slots;
111
+ if (bytes > MAX_RING_BYTES)
112
+ return false;
113
+ this.buffer.destroy();
114
+ this.capacity = slots;
115
+ this.staging = new ArrayBuffer(bytes);
116
+ this.floats = new Float32Array(this.staging);
117
+ this.ints = new Int32Array(this.staging);
118
+ this.buffer = this.device.createBuffer({
119
+ label: this.label,
120
+ size: bytes,
121
+ usage: this.usage,
122
+ });
123
+ return true;
124
+ }
125
+ /** How many slots have been taken this frame. */
126
+ get count() {
127
+ return this.used;
128
+ }
129
+ /** Start a frame. Slots are reused; nothing is freed. */
130
+ reset() {
131
+ this.used = 0;
132
+ }
133
+ /**
134
+ * Take the next slot and return its byte offset, or null when the ring is full.
135
+ *
136
+ * **Null rather than growing.** Growing means allocating a buffer mid-frame, which is the
137
+ * thing this class exists to avoid; a caller that runs out should skip the draw and say so
138
+ * once, not stall the frame to make room.
139
+ *
140
+ * **And say so in a number as well as in a line of text.** Every caller already wrote one
141
+ * `console.warn` per renderer lifetime and nothing else, which is unobservable from a headless
142
+ * check and gone by the time anybody looks — a consumer lost weeks to a ceiling whose
143
+ * open lead was still *"ask the reporter for the console"*. The count is taken here rather than
144
+ * at the callers because here is the only place that knows both halves: what was asked for, and
145
+ * whether it fit.
146
+ *
147
+ * **What comes back is a byte offset, not an index**, and it is what `setBindGroup` wants.
148
+ *
149
+ * Said plainly because the name says "slot" and the value is already scaled: a caller that
150
+ * multiplies it by `slotSize` on the way to a dynamic offset lands a whole ring away. That
151
+ * happened — the second panel of a frame addressed 65,536 into a 16,384-byte ring — and the
152
+ * only reason it took a minute rather than an afternoon is that `device.ts` now prints what
153
+ * the device rejected, naming the buffer and both numbers.
154
+ */
155
+ allocate() {
156
+ this.budget?.ask();
157
+ if (this.used >= this.capacity) {
158
+ this.budget?.drop();
159
+ return null;
160
+ }
161
+ const offset = this.used * this.slotSize;
162
+ this.used += 1;
163
+ return offset;
164
+ }
165
+ /** Write floats into a slot, at a byte offset within it. */
166
+ writeFloats(slot, byteOffset, values) {
167
+ this.floats.set(values, (slot + byteOffset) / 4);
168
+ }
169
+ /**
170
+ * Write one float into a slot.
171
+ *
172
+ * Separate from `writeFloats` because the alternative at a call site with a dozen scalars in
173
+ * it is a one-element array per field — either allocated in the frame loop, which
174
+ * `AGENTS.md` forbids, or a shared scratch that reads as a value being passed when it is a
175
+ * buffer being reused.
176
+ */
177
+ writeFloat(slot, byteOffset, value) {
178
+ this.floats[(slot + byteOffset) / 4] = value;
179
+ }
180
+ /** Write one integer into a slot. Separate because a `Float32Array` cannot hold an `i32`. */
181
+ writeInt(slot, byteOffset, value) {
182
+ this.ints[(slot + byteOffset) / 4] = value;
183
+ }
184
+ /**
185
+ * Copy a whole prepared block into a slot, bit for bit.
186
+ *
187
+ * **Through the integer view, and that is not a detail.** A block that mixes floats and
188
+ * `i32`s copied through `Float32Array` is a numeric conversion, and `-1` as an `i32` is
189
+ * `0xFFFFFFFF`, which read as a float is a NaN — free to be canonicalised to a different NaN
190
+ * on the way through. `-1` is the *sentinel* for "this light has no shadow cubemap", so that
191
+ * conversion would turn "no point shadows" into a number matching nothing or, worse,
192
+ * something. Bug 9 on this branch was that sentinel being wrong in the other direction.
193
+ *
194
+ * `Int32Array.set` from an `Int32Array` is an exact copy of every bit, whatever the bits mean.
195
+ */
196
+ writeBlock(slot, block) {
197
+ this.ints.set(block, slot / 4);
198
+ }
199
+ /** Upload every slot taken this frame, in one write. */
200
+ flush() {
201
+ if (this.used === 0)
202
+ return;
203
+ this.device.queue.writeBuffer(this.buffer, 0, this.staging, 0, this.used * this.slotSize);
204
+ }
205
+ dispose() {
206
+ this.buffer.destroy();
207
+ }
208
+ }
@@ -0,0 +1,73 @@
1
+ import type { PipelineCache } from './pipelineCache.ts';
2
+ import type { UniformFields } from './scatterPass.ts';
3
+ /**
4
+ * The water pass: two sheets and a patch, displaced by a wave field in the vertex stage.
5
+ *
6
+ * **One vertex attribute for the whole surface.** `aGrid` is a `vec2` of grid coordinates and
7
+ * everything else — height, normal, crest, the reflection's clip position — is computed from
8
+ * it. So the geometry here is a buffer of pairs and an index list, and the interesting part is
9
+ * entirely in the shader and the uniforms.
10
+ */
11
+ export declare const WATER_VERT_FIELDS: UniformFields;
12
+ export declare const WATER_VERT_SIZE: 208;
13
+ export declare const WATER_FRAG_FIELDS: UniformFields;
14
+ export declare const WATER_FRAG_SIZE: 1248;
15
+ /** The two meshes and the numbers the grid decided, behind the surface's opaque handle. */
16
+ export interface GpuWater {
17
+ /** The ocean: near sheet and far skirt in one buffer. */
18
+ readonly sheet: {
19
+ buffer: GPUBuffer;
20
+ index: GPUBuffer;
21
+ count: number;
22
+ };
23
+ /** A unit square, scaled per draw: every bounded body shares this one mesh. */
24
+ readonly patch: {
25
+ buffer: GPUBuffer;
26
+ index: GPUBuffer;
27
+ count: number;
28
+ };
29
+ readonly cellSize: number;
30
+ readonly nearHalfExtent: number;
31
+ readonly farHalfExtent: number;
32
+ readonly reflectionFilterTaps: number;
33
+ dispose(): void;
34
+ }
35
+ export declare function createGpuWater(device: GPUDevice, resolution: number, nearExtent: number, farHalfExtent: number, reflectionFilterTaps: number): GpuWater;
36
+ export declare function waterVertexLayouts(): GPUVertexBufferLayout[];
37
+ /**
38
+ * The water bind group's layout, whose two buffers are addressed by a dynamic offset.
39
+ *
40
+ * **A frame draws more than one body of water and this is what makes that true here.** A ditch at
41
+ * its own level, a fountain in a courtyard and the sea beyond them are three draws, and with one
42
+ * buffer rewritten between them all three read whatever was written last: `queue.write*` calls are
43
+ * ordered on the queue timeline and the encoder is submitted after every one of them, so the
44
+ * picture is every body wearing the last one's extents, level and colour. That is the hazard
45
+ * `UniformRing` exists for, recorded in `AGENTS.md` on 2026-08-27, and water was the pass still
46
+ * carrying it — invisible for as long as no scene drew two, which is exactly how the joint palette
47
+ * survived eight releases.
48
+ *
49
+ * WebGL2 needs none of this: it sets uniforms and draws in one stream. Per the 2026-08-13 rule
50
+ * that makes it a binder's problem here and not a decision anybody has to take twice.
51
+ */
52
+ export declare function createWaterBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
53
+ /**
54
+ * The bind group over both rings and the mirror.
55
+ *
56
+ * **One mirror serves every body, and that is correct rather than a limit worked around.** The
57
+ * frame renders at most one planar reflection, at one plane height; `reflectionFor` hands it to the
58
+ * body whose level matches and hands nothing to the rest, which then draw with
59
+ * `uReflectionEnabled` at zero and never sample the view this group still holds.
60
+ */
61
+ export declare function createWaterBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, perDraw: GPUBuffer, perFrame: GPUBuffer, reflection: GPUTextureView, sampler: GPUSampler): GPUBindGroup;
62
+ /**
63
+ * The water pipeline.
64
+ *
65
+ * **Blended, and culling off.** `renderer.ts` brackets the draw with
66
+ * `SRC_ALPHA, ONE_MINUS_SRC_ALPHA` and `gl.disable(gl.CULL_FACE)` — the second because waves
67
+ * are displaced far enough that back faces show at grazing angles, which is a surface you can
68
+ * see the underside of rather than a winding mistake.
69
+ *
70
+ * **Depth tested and not written**, which is what a transparent surface wants: it must not
71
+ * occlude what comes after it, and it must still be occluded by what came before.
72
+ */
73
+ export declare function waterPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout): GPURenderPipeline;
@@ -0,0 +1,160 @@
1
+ import { DEPTH_COMPARE } from '../../depthConvention.js';
2
+ import { WATER_BINDINGS, WATER_FRAG_WGSL, WATER_VERT_WGSL, } from '../../shaders/generated/water.wgsl.js';
3
+ import { PATCH_RESOLUTION, buildUnitSheet, buildWaterGrid } from '../../waterGrid.js';
4
+ import { DEPTH_FORMAT } from './flatPass.js';
5
+ import { shaderModule } from './shaderModules.js';
6
+ /**
7
+ * The water pass: two sheets and a patch, displaced by a wave field in the vertex stage.
8
+ *
9
+ * **One vertex attribute for the whole surface.** `aGrid` is a `vec2` of grid coordinates and
10
+ * everything else — height, normal, crest, the reflection's clip position — is computed from
11
+ * it. So the geometry here is a buffer of pairs and an index list, and the interesting part is
12
+ * entirely in the shader and the uniforms.
13
+ */
14
+ export const WATER_VERT_FIELDS = WATER_BINDINGS.WATER_VERT.fields;
15
+ export const WATER_VERT_SIZE = WATER_BINDINGS.WATER_VERT.uniformSize;
16
+ export const WATER_FRAG_FIELDS = WATER_BINDINGS.WATER_FRAG.fields;
17
+ export const WATER_FRAG_SIZE = WATER_BINDINGS.WATER_FRAG.uniformSize;
18
+ const VERT_BINDING = WATER_BINDINGS.WATER_VERT.uniforms;
19
+ const FRAG_BINDING = WATER_BINDINGS.WATER_FRAG.uniforms;
20
+ const REFLECTION = WATER_BINDINGS.WATER_FRAG.textures.uReflectionMap;
21
+ const VISIBILITY_VERTEX = 0x1;
22
+ const VISIBILITY_FRAGMENT = 0x2;
23
+ const USAGE_VERTEX = 0x0020 | 0x0008;
24
+ const USAGE_INDEX = 0x0010 | 0x0008;
25
+ export function createGpuWater(device, resolution, nearExtent, farHalfExtent, reflectionFilterTaps) {
26
+ const upload = (offsets, indices, label) => {
27
+ const buffer = device.createBuffer({
28
+ label: `${label}.offsets`,
29
+ size: Math.max(4, offsets.byteLength),
30
+ usage: USAGE_VERTEX,
31
+ });
32
+ device.queue.writeBuffer(buffer, 0, offsets);
33
+ const index = device.createBuffer({
34
+ label: `${label}.indices`,
35
+ size: Math.max(4, indices.byteLength),
36
+ usage: USAGE_INDEX,
37
+ });
38
+ device.queue.writeBuffer(index, 0, indices);
39
+ return { buffer, index, count: indices.length };
40
+ };
41
+ const grid = buildWaterGrid(resolution, nearExtent, farHalfExtent);
42
+ const sheet = upload(grid.offsets, grid.indices, 'water.sheet');
43
+ const unit = buildUnitSheet(PATCH_RESOLUTION);
44
+ const patch = upload(unit.offsets, unit.indices, 'water.patch');
45
+ return {
46
+ sheet,
47
+ patch,
48
+ cellSize: grid.cellSize,
49
+ nearHalfExtent: grid.nearHalfExtent,
50
+ farHalfExtent: grid.farHalfExtent,
51
+ reflectionFilterTaps,
52
+ dispose() {
53
+ sheet.buffer.destroy();
54
+ sheet.index.destroy();
55
+ patch.buffer.destroy();
56
+ patch.index.destroy();
57
+ },
58
+ };
59
+ }
60
+ export function waterVertexLayouts() {
61
+ return [
62
+ {
63
+ arrayStride: 2 * 4,
64
+ stepMode: 'vertex',
65
+ attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x2' }],
66
+ },
67
+ ];
68
+ }
69
+ /**
70
+ * The water bind group's layout, whose two buffers are addressed by a dynamic offset.
71
+ *
72
+ * **A frame draws more than one body of water and this is what makes that true here.** A ditch at
73
+ * its own level, a fountain in a courtyard and the sea beyond them are three draws, and with one
74
+ * buffer rewritten between them all three read whatever was written last: `queue.write*` calls are
75
+ * ordered on the queue timeline and the encoder is submitted after every one of them, so the
76
+ * picture is every body wearing the last one's extents, level and colour. That is the hazard
77
+ * `UniformRing` exists for, recorded in `AGENTS.md` on 2026-08-27, and water was the pass still
78
+ * carrying it — invisible for as long as no scene drew two, which is exactly how the joint palette
79
+ * survived eight releases.
80
+ *
81
+ * WebGL2 needs none of this: it sets uniforms and draws in one stream. Per the 2026-08-13 rule
82
+ * that makes it a binder's problem here and not a decision anybody has to take twice.
83
+ */
84
+ export function createWaterBindGroupLayout(device) {
85
+ return device.createBindGroupLayout({
86
+ label: 'water.layout',
87
+ entries: [
88
+ {
89
+ binding: VERT_BINDING,
90
+ visibility: VISIBILITY_VERTEX,
91
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: WATER_VERT_SIZE },
92
+ },
93
+ {
94
+ binding: FRAG_BINDING,
95
+ visibility: VISIBILITY_FRAGMENT,
96
+ buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: WATER_FRAG_SIZE },
97
+ },
98
+ { binding: REFLECTION.texture, visibility: VISIBILITY_FRAGMENT, texture: {} },
99
+ { binding: REFLECTION.sampler, visibility: VISIBILITY_FRAGMENT, sampler: {} },
100
+ ],
101
+ });
102
+ }
103
+ /**
104
+ * The bind group over both rings and the mirror.
105
+ *
106
+ * **One mirror serves every body, and that is correct rather than a limit worked around.** The
107
+ * frame renders at most one planar reflection, at one plane height; `reflectionFor` hands it to the
108
+ * body whose level matches and hands nothing to the rest, which then draw with
109
+ * `uReflectionEnabled` at zero and never sample the view this group still holds.
110
+ */
111
+ export function createWaterBindGroup(device, layout, perDraw, perFrame, reflection, sampler) {
112
+ return device.createBindGroup({
113
+ label: 'water.bindGroup',
114
+ layout,
115
+ entries: [
116
+ { binding: VERT_BINDING, resource: { buffer: perDraw, size: WATER_VERT_SIZE } },
117
+ { binding: FRAG_BINDING, resource: { buffer: perFrame, size: WATER_FRAG_SIZE } },
118
+ { binding: REFLECTION.texture, resource: reflection },
119
+ { binding: REFLECTION.sampler, resource: sampler },
120
+ ],
121
+ });
122
+ }
123
+ /**
124
+ * The water pipeline.
125
+ *
126
+ * **Blended, and culling off.** `renderer.ts` brackets the draw with
127
+ * `SRC_ALPHA, ONE_MINUS_SRC_ALPHA` and `gl.disable(gl.CULL_FACE)` — the second because waves
128
+ * are displaced far enough that back faces show at grazing angles, which is a surface you can
129
+ * see the underside of rather than a winding mistake.
130
+ *
131
+ * **Depth tested and not written**, which is what a transparent surface wants: it must not
132
+ * occlude what comes after it, and it must still be occluded by what came before.
133
+ */
134
+ export function waterPipeline(cache, device, layout) {
135
+ return cache.get('water', () => ({
136
+ label: 'water',
137
+ layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
138
+ vertex: {
139
+ module: shaderModule(device, { label: 'water.vert', code: WATER_VERT_WGSL }),
140
+ entryPoint: 'main',
141
+ buffers: waterVertexLayouts(),
142
+ },
143
+ fragment: {
144
+ module: shaderModule(device, { label: 'water.frag', code: WATER_FRAG_WGSL }),
145
+ entryPoint: 'main',
146
+ targets: [
147
+ {
148
+ format: cache.format,
149
+ blend: {
150
+ color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },
151
+ alpha: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },
152
+ },
153
+ },
154
+ ],
155
+ },
156
+ primitive: { topology: 'triangle-list', cullMode: 'none' },
157
+ multisample: { count: cache.sampleCount },
158
+ depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
159
+ }));
160
+ }
@@ -0,0 +1,46 @@
1
+ import type { UniformFields } from './scatterPass.ts';
2
+ import type { PipelineCache } from './pipelineCache.ts';
3
+ /**
4
+ * The wind-streak pass: a lattice of debris that follows the camera and wraps.
5
+ *
6
+ * **Nothing here is per frame except ten uniforms.** The whole effect lives in the vertex
7
+ * shader — a particle's place comes from its index and the clock, and the box it sits in wraps
8
+ * around the camera — so there is no spawning, no pooling and no upload once the lattice is
9
+ * built.
10
+ *
11
+ * Blended over what is behind it rather than added, because dust in air occludes: this is the
12
+ * one effect in this backend that is neither opaque nor additive.
13
+ */
14
+ export declare const WIND_STREAK_VERT_FIELDS: UniformFields;
15
+ export declare const WIND_STREAK_VERT_SIZE: 128;
16
+ export declare const WIND_STREAK_FRAG_FIELDS: UniformFields;
17
+ export declare const WIND_STREAK_FRAG_SIZE: 16;
18
+ /** A lattice on the device, behind the surface's opaque handle. */
19
+ export interface GpuWindStreaks {
20
+ readonly corners: GPUBuffer;
21
+ readonly indices: GPUBuffer;
22
+ readonly vertexCount: number;
23
+ readonly cellSize: number;
24
+ readonly count: number;
25
+ readonly onsetSpeed: number;
26
+ readonly fullSpeed: number;
27
+ dispose(): void;
28
+ }
29
+ export declare function createGpuWindStreaks(device: GPUDevice, count: number, cellSize: number, onsetSpeed: number, fullSpeed: number): GpuWindStreaks;
30
+ /**
31
+ * `aCorner` and `aIndex`, one buffer each, matching what `WindStreakRenderer` binds.
32
+ *
33
+ * Not interleaved, because they are two separate arrays on both sides and two of eight slots is
34
+ * nothing. The flat pass interleaves only because ten attributes will not fit.
35
+ */
36
+ export declare function windStreakVertexLayouts(): GPUVertexBufferLayout[];
37
+ export declare function createWindStreakBindGroupLayout(device: GPUDevice): GPUBindGroupLayout;
38
+ export declare function createWindStreakBindGroup(device: GPUDevice, layout: GPUBindGroupLayout, vertices: GPUBuffer, fragments: GPUBuffer): GPUBindGroup;
39
+ /**
40
+ * The pipeline.
41
+ *
42
+ * **Alpha over, depth tested, depth not written, nothing culled.** A streak is a two-sided
43
+ * card carried past the camera at any angle, so culling it would drop half of them for no
44
+ * saving; writing depth would let a translucent smear occlude whatever is drawn after it.
45
+ */
46
+ export declare function windStreakPipeline(cache: PipelineCache, device: GPUDevice, layout: GPUBindGroupLayout): GPURenderPipeline;